{"_id":"@arborship/control-plane-sdk","name":"@arborship/control-plane-sdk","dist-tags":{"latest":"0.2.1"},"versions":{"0.2.1":{"name":"@arborship/control-plane-sdk","version":"0.2.1","description":"TypeScript client for Control Plane API","main":"dist/index.js","types":"dist/index.d.ts","type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"sideEffects":false,"scripts":{"build":"corepack yarn tsc","dev":"tsc --watch","typecheck":"tsc --noEmit --incremental --tsBuildInfoFile tsconfig.typecheck.tsbuildinfo","test":"vitest run","prepack":"corepack yarn build"},"dependencies":{"@arborship/application":"^0.2.1","@arborship/config-contract":"^0.2.1","@arborship/orchestration":"^0.2.3","@arborship/permissions-kernel":"^0.3.0","@arborship/worker-runtime-contract":"^0.2.1"},"devDependencies":{"@arborship/identity":"^0.2.0","@types/node":"^20.11.0","typescript":"^5","vitest":"^4.0.18"},"peerDependencies":{"typescript":"^5"},"license":"Apache-2.0","publishConfig":{"registry":"https://registry.npmjs.org/","access":"public"},"repository":{"type":"git","url":"git+https://github.com/arborship/arborship.git","directory":"packages/control-plane/control-plane-sdk"},"homepage":"https://github.com/arborship/arborship/tree/main/packages/control-plane/control-plane-sdk#readme","bugs":{"url":"https://github.com/arborship/arborship/issues"},"author":{"name":"MarsMan LLC"},"engines":{"node":">=18.0.0"},"_id":"@arborship/control-plane-sdk@0.2.1","_integrity":"sha512-vgucEbu6BLgm1qCoqYNCtt1q0fjYZcSS6hyYFk2X5XC8AKTZiQ8yELC6AA3j8o2n9n6kNwk62qvWR3hyoWvzjg==","_resolved":"/var/folders/k9/z86pxdsx27vgd3l0khjg4b080000gn/T/tmp.mvjmaamDhl/_arborship_control-plane-sdk-0.2.1.tgz","_from":"file:/var/folders/k9/z86pxdsx27vgd3l0khjg4b080000gn/T/tmp.mvjmaamDhl/_arborship_control-plane-sdk-0.2.1.tgz","_nodeVersion":"22.23.2","_npmVersion":"11.19.0","dist":{"integrity":"sha512-vgucEbu6BLgm1qCoqYNCtt1q0fjYZcSS6hyYFk2X5XC8AKTZiQ8yELC6AA3j8o2n9n6kNwk62qvWR3hyoWvzjg==","shasum":"3a7edcb627649b5f0fba7390757a1326d0a2f20c","tarball":"https://registry.npmjs.org/@arborship/control-plane-sdk/-/control-plane-sdk-0.2.1.tgz","fileCount":9,"unpackedSize":119799,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIFhYpzEFFsQWsNi8Nof1TKg0h9cTQNbabNlHR0Ei6HVPAiEA6en2m+v/9e6qM4QwVYyk+OfQVRJ51i70egwvZqvzsKU="}]},"_npmUser":{"name":"arborship-official","email":"patrickjholloway@gmail.com"},"directories":{},"maintainers":[{"name":"arborship-official","email":"patrickjholloway@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/control-plane-sdk_0.2.1_1788486897718_0.8255364670526177"},"_hasShrinkwrap":false}},"time":{"created":"2026-09-04T01:54:57.503Z","0.2.1":"2026-09-04T01:54:57.872Z","modified":"2026-09-04T01:54:58.093Z"},"maintainers":[{"name":"arborship-official","email":"patrickjholloway@gmail.com"}],"description":"TypeScript client for Control Plane API","homepage":"https://github.com/arborship/arborship/tree/main/packages/control-plane/control-plane-sdk#readme","repository":{"type":"git","url":"git+https://github.com/arborship/arborship.git","directory":"packages/control-plane/control-plane-sdk"},"author":{"name":"MarsMan LLC"},"bugs":{"url":"https://github.com/arborship/arborship/issues"},"license":"Apache-2.0","readme":"## `@levi/control-plane-sdk`\n\nClient-side TypeScript SDK for talking to the **Levi Supervisor HTTP API** (no auth).\n\n### What you’d use it for\n\n- **Build a UI/dashboard**: show workers, jobs, work queue, questions, and live agent events.\n- **Automation / scripting**: submit jobs, ingest work items, spawn/destroy workers, answer questions.\n- **Agent self-reporting**: post `log`, `checkpoint`, `help_requested`, `job_done`, `heartbeat` events to the server.\n\n### What it is NOT\n\n- **Not a “host access” SDK**: it does not read local files, run shell commands, or SSH anywhere.\n- **It only talks to the Supervisor API over HTTP** using `fetch`.\n\n### Install\n\n- **Inside this repo**: `supervisor/` depends on it via `file:../supervisor-sdk`.\n- **In another project**:\n- If you publish it: `npm i @levi/control-plane-sdk`\n  - Or install from a git/path source, depending on your deployment workflow.\n\n### Create a client (Node or browser)\n\n```ts\nimport { createLeviathanClient } from '@levi/control-plane-sdk';\n\nconst client = createLeviathanClient({ baseUrl: 'http://supervisor-host:4118' });\n\nconst status = await client.getStatus();\nconsole.log(status);\n```\n\n### Live events (SSE)\n\nPrefer the **self-reporting** stream:\n\n```ts\nfor await (const msg of await client.streamReportEvents('job-id')) {\n  // msg is a parsed JSON object from `data: <json>`\n  console.log(msg);\n}\n```\n\nJob event stream:\n\n```ts\nfor await (const msg of await client.streamJobEvents('job-id')) {\n  console.log(msg);\n}\n```\n\n### Submit a job and wait for completion (example)\n\n```ts\nconst job = await client.createJob('Implement feature X', 7);\n\nfor await (const msg of await client.streamReportEvents(job.id)) {\n  if (msg && typeof msg === 'object' && (msg as any).type === 'event') {\n    const ev = (msg as any).event;\n    if (ev?.type === 'job_done') {\n      console.log(ev.result, ev.summary);\n      break;\n    }\n  }\n}\n```\n\n### Work queue\n\n```ts\nconst item = await client.addWork('Investigate bug Y', 5);\nconsole.log('work item', item.id);\n\nconst list = await client.listWork(50);\nconsole.log('work items', list.length);\n```\n\n### Questions (from `help_requested`)\n\n```ts\nconst pending = await client.listQuestions('pending', 50, 'job-123');\nif (pending.length > 0) {\n  const q = pending[0];\n  await client.answerQuestion(q.id, 'Use approach Z; avoid touching X');\n}\n```\n\n### Agent-side reporting (no auth)\n\n```ts\nimport { createReporter } from '@levi/control-plane-sdk';\n\nconst reporter = createReporter({\n  leviathanUrl: 'http://supervisor-host:4118',\n  jobId: 'job-id',\n  agentId: 'agent-id',\n});\n\nawait reporter.log('info', 'starting');\nawait reporter.checkpoint('repo_scanned', 'success', { files: 12 });\nawait reporter.helpRequested('blocker', 'Need config value for X', ['checked README', 'searched env vars']);\nawait reporter.taskDone('success', 'Implemented X', { files_changed: ['src/x.ts'] });\n```\n\n### Security note (important)\n\nThis SDK assumes the Supervisor API is reachable and unauthenticated. If you deploy across machines/networks, treat the API as **trusted-network only** (or add auth/ACLs at the network layer).\n","readmeFilename":"README.md","_rev":"1-0dc2f0c1627aa23f231efb9c49d1820a"}