@agentproto/cli 0.1.0-alpha.1 → 0.1.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.mjs +1818 -76
- package/dist/cli.mjs.map +1 -1
- package/dist/index.d.ts +86 -15
- package/dist/index.mjs +886 -38
- package/dist/index.mjs.map +1 -1
- package/package.json +21 -19
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/registry/resolve.ts","../src/commands/install.ts","../src/util/stdin.ts","../src/commands/run.ts","../src/commands/serve.ts"],"names":["parseArgs","resolvePath"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Resolve a slug like \"claude-code\" to a runnable `AgentCliHandle`.\n *\n * Resolution order:\n * 1. `@agentproto/adapter-<slug>` from npm (must default-export or\n * named-export an `AgentCliHandle` — convention is the camelCased\n * slug, e.g. `claudeCode`).\n * 2. (TODO) `~/.agentproto/adapters/<slug>/AGENT-CLI.md` on disk.\n * 3. (TODO) bundled fallbacks for the canonical adapters.\n *\n * Step 1 covers 100% of v0 usage. The on-disk path is only there for\n * users authoring their own adapters; we'll add it once `defineAgentCli`\n * supports MD-source authoring end to end.\n */\n\nimport type { AgentCliHandle } from \"@agentproto/driver-agent-cli\"\n\nexport interface ResolvedAdapter {\n readonly slug: string\n readonly handle: AgentCliHandle\n readonly source: \"npm\" | \"file\" | \"bundled\"\n readonly packageName?: string\n}\n\nconst slugToCamel = (slug: string): string =>\n slug.replace(/-([a-z0-9])/g, (_, c: string) => c.toUpperCase())\n\nexport async function resolveAdapter(slug: string): Promise<ResolvedAdapter> {\n if (!/^[a-z][a-z0-9-]*$/.test(slug)) {\n throw new Error(\n `agentproto: invalid adapter slug '${slug}'. Slugs are lower-kebab.`\n )\n }\n\n const packageName = `@agentproto/adapter-${slug}`\n let mod: Record<string, unknown>\n try {\n mod = (await import(packageName)) as Record<string, unknown>\n } catch (err) {\n const cause = err instanceof Error ? err.message : String(err)\n throw new Error(\n `agentproto: could not load adapter '${slug}'. ` +\n `Tried '${packageName}'. Install it with: npm i -g ${packageName}\\n cause: ${cause}`\n )\n }\n\n const camel = slugToCamel(slug)\n const candidate =\n (mod[camel] as AgentCliHandle | undefined) ??\n (mod.default as AgentCliHandle | undefined) ??\n (mod.handle as AgentCliHandle | undefined)\n\n if (!candidate || typeof candidate !== \"object\" || !(\"name\" in candidate)) {\n throw new Error(\n `agentproto: adapter '${packageName}' does not export an AgentCliHandle ` +\n `(looked for export '${camel}', 'default', or 'handle').`\n )\n }\n\n return { slug, handle: candidate, source: \"npm\", packageName }\n}\n","/**\n * `agentproto install <slug>`\n *\n * Reads the adapter manifest's `install` block and shells out to the\n * declared package manager. Idempotent: if `version_check` passes, we\n * skip and report \"already installed\" (override with --force).\n *\n * The adapter package itself must already be in node_modules (we resolve\n * it before reading its manifest). Bootstrapping the adapter package is\n * a separate concern — `npm i -g @agentproto/adapter-<slug>` first.\n *\n * v0 implements `npm` only. Other methods (brew/pip/cargo/go/curl/\n * download) report a clear \"not yet implemented\" message — they're a\n * shellout exercise but each needs its own checksum / chmod handling.\n */\n\nimport { spawn } from \"node:child_process\"\nimport { parseArgs } from \"node:util\"\nimport type { AgentCliInstallMethod } from \"@agentproto/driver-agent-cli\"\nimport { resolveAdapter } from \"../registry/resolve.js\"\n\nexport async function runInstall(args: readonly string[]): Promise<number> {\n const { values, positionals } = parseArgs({\n args: [...args],\n allowPositionals: true,\n strict: true,\n options: {\n force: { type: \"boolean\", short: \"f\" },\n \"dry-run\": { type: \"boolean\" },\n },\n })\n\n const slug = positionals[0]\n if (!slug) {\n process.stderr.write(\n \"agentproto install: missing adapter slug. Try: agentproto install claude-code\\n\"\n )\n return 2\n }\n\n const adapter = await resolveAdapter(slug)\n const installSteps: AgentCliInstallMethod[] = adapter.handle.install ?? []\n if (installSteps.length === 0) {\n process.stderr.write(\n `agentproto install: adapter '${slug}' declares no install steps.\\n`\n )\n return 0\n }\n\n if (!values.force) {\n const checked = await runVersionCheck(adapter.handle.version_check)\n if (checked.ok) {\n process.stdout.write(\n `agentproto: '${slug}' already installed (${checked.message}). Pass --force to reinstall.\\n`\n )\n return 0\n }\n }\n\n for (const [i, step] of installSteps.entries()) {\n process.stdout.write(\n `agentproto install [${i + 1}/${installSteps.length}] ${describeStep(step)}\\n`\n )\n if (values[\"dry-run\"]) continue\n const code = await runStep(step)\n if (code !== 0) {\n process.stderr.write(\n `agentproto install: step ${i + 1} failed with exit ${code}.\\n`\n )\n return code\n }\n }\n\n process.stdout.write(`agentproto: '${slug}' installed.\\n`)\n return 0\n}\n\nfunction describeStep(step: AgentCliInstallMethod): string {\n switch (step.method) {\n case \"npm\":\n return `npm install ${step.global ? \"-g \" : \"\"}${step.package ?? \"(?)\"}`\n case \"brew\":\n return `brew install ${step.package ?? \"(?)\"}`\n case \"pip\":\n return `pip install ${step.package ?? \"(?)\"}`\n case \"cargo\":\n return `cargo install ${step.package ?? \"(?)\"}`\n case \"go\":\n return `go install ${step.package ?? \"(?)\"}`\n case \"curl\":\n case \"download\":\n return `${step.method} ${step.url ?? \"(?)\"} → ${step.path ?? \"(default)\"}`\n default:\n return `${step.method} ${step.package ?? step.url ?? \"(?)\"}`\n }\n}\n\nasync function runStep(step: AgentCliInstallMethod): Promise<number> {\n switch (step.method) {\n case \"npm\": {\n if (!step.package) {\n process.stderr.write(\"agentproto install: npm step missing package.\\n\")\n return 2\n }\n const argv = [\"install\"]\n if (step.global) argv.push(\"-g\")\n argv.push(step.package)\n return spawnInherit(\"npm\", argv)\n }\n default:\n process.stderr.write(\n `agentproto install: method '${step.method}' not yet implemented in this CLI version. ` +\n `Run it manually for now (see the adapter's INSTALL.md).\\n`\n )\n return 1\n }\n}\n\nfunction spawnInherit(cmd: string, argv: string[]): Promise<number> {\n return new Promise((resolve, reject) => {\n const child = spawn(cmd, argv, { stdio: \"inherit\" })\n child.once(\"error\", reject)\n child.once(\"exit\", (code) => resolve(code ?? 0))\n })\n}\n\nasync function runVersionCheck(\n check: Awaited<\n ReturnType<typeof resolveAdapter>\n >[\"handle\"][\"version_check\"]\n): Promise<{ ok: boolean; message: string }> {\n if (!check) return { ok: false, message: \"no version_check declared\" }\n return new Promise((resolve) => {\n const child = spawn(\"bash\", [\"-lc\", check.cmd], {\n stdio: [\"ignore\", \"pipe\", \"ignore\"],\n })\n let buf = \"\"\n child.stdout.on(\"data\", (c: Buffer) => {\n buf += c.toString(\"utf8\")\n })\n child.once(\"error\", () => resolve({ ok: false, message: \"check failed\" }))\n child.once(\"exit\", (code) => {\n if (code !== 0) {\n resolve({ ok: false, message: `check exited ${code}` })\n return\n }\n const re = new RegExp(check.parse)\n const m = buf.match(re)\n if (!m || !m[1]) {\n resolve({ ok: false, message: \"could not parse version\" })\n return\n }\n // semver-range matching is left to a future helper; we report\n // the captured version and trust it. --force remains the\n // escape hatch when range gating actually matters.\n resolve({ ok: true, message: `version ${m[1]}` })\n })\n })\n}\n","/**\n * Read piped stdin to a string. Returns null if stdin is a TTY (no pipe).\n * Used by `agentproto run` to accept prompts via:\n * echo \"summarise this repo\" | agentproto run claude-code\n */\n\nexport async function readStdinIfPiped(): Promise<string | null> {\n if (process.stdin.isTTY) return null\n const chunks: Buffer[] = []\n for await (const chunk of process.stdin) {\n chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk))\n }\n const text = Buffer.concat(chunks).toString(\"utf8\").trim()\n return text.length > 0 ? text : null\n}\n","/**\n * `agentproto run <slug> [--cwd <dir>] [--prompt <text>] [--resume <id>]`\n *\n * Boots the named adapter, dispatches a single user turn, streams events\n * to stdout, then exits. Designed for two use-cases:\n * - one-shot scripting (pipe a prompt in, get stream back)\n * - quick smoke-test from a fresh checkout (\"does claude even spawn?\")\n *\n * Long-lived multiplexing belongs to `agentproto serve`, not here.\n */\n\nimport { resolve as resolvePath } from \"node:path\"\nimport { parseArgs } from \"node:util\"\nimport {\n createAgentCliRuntime,\n type AgentCliRuntimeSession,\n type StreamEvent,\n} from \"@agentproto/driver-agent-cli\"\nimport { resolveAdapter } from \"../registry/resolve.js\"\nimport { readStdinIfPiped } from \"../util/stdin.js\"\n\nexport async function runRun(args: readonly string[]): Promise<number> {\n const { values, positionals } = parseArgs({\n args: [...args],\n allowPositionals: true,\n strict: true,\n options: {\n cwd: { type: \"string\" },\n prompt: { type: \"string\", short: \"p\" },\n resume: { type: \"string\" },\n json: { type: \"boolean\" },\n },\n })\n\n const slug = positionals[0]\n if (!slug) {\n process.stderr.write(\n \"agentproto run: missing adapter slug. Try: agentproto run claude-code\\n\"\n )\n return 2\n }\n\n const cwd = values.cwd ? resolvePath(values.cwd) : process.cwd()\n const promptArg = values.prompt ?? (await readStdinIfPiped())\n if (!promptArg) {\n process.stderr.write(\n \"agentproto run: no prompt provided. Pass --prompt or pipe one over stdin.\\n\"\n )\n return 2\n }\n\n const adapter = await resolveAdapter(slug)\n const runtime = createAgentCliRuntime(adapter.handle)\n\n const controller = new AbortController()\n const onSignal = (sig: NodeJS.Signals) => {\n process.stderr.write(`\\nagentproto: received ${sig}, cancelling…\\n`)\n controller.abort()\n }\n process.once(\"SIGINT\", onSignal)\n process.once(\"SIGTERM\", onSignal)\n\n let session: AgentCliRuntimeSession | null = null\n try {\n session = await runtime.start({\n cwd,\n signal: controller.signal,\n resumeSessionId: values.resume,\n })\n\n const printer = values.json ? printJson : printPretty\n let exit = 0\n for await (const ev of session.send(promptArg)) {\n printer(ev)\n if (ev.kind === \"turn-end\" && ev.reason !== \"completed\") exit = 1\n if (ev.kind === \"error\") exit = 1\n }\n return exit\n } finally {\n process.off(\"SIGINT\", onSignal)\n process.off(\"SIGTERM\", onSignal)\n if (session) await session.close().catch(() => {})\n }\n}\n\nfunction printJson(ev: StreamEvent): void {\n process.stdout.write(`${JSON.stringify(ev)}\\n`)\n}\n\nfunction printPretty(ev: StreamEvent): void {\n switch (ev.kind) {\n case \"text-delta\":\n process.stdout.write(ev.text)\n break\n case \"thought\":\n process.stderr.write(`\\x1b[2m[thought] ${ev.text}\\x1b[0m\\n`)\n break\n case \"tool-call\":\n process.stderr.write(`\\x1b[36m[tool] ${ev.toolName}\\x1b[0m\\n`)\n break\n case \"tool-result\":\n if (ev.isError)\n process.stderr.write(`\\x1b[31m[tool-error]\\x1b[0m\\n`)\n break\n case \"agent-prompt\":\n process.stderr.write(`\\x1b[33m[agent-prompt: needs input]\\x1b[0m\\n`)\n break\n case \"turn-end\":\n process.stdout.write(`\\n\\x1b[2m[turn-end: ${ev.reason}]\\x1b[0m\\n`)\n break\n case \"error\":\n process.stderr.write(`\\x1b[31m[error] ${ev.error.message}\\x1b[0m\\n`)\n break\n }\n}\n","/**\n * `agentproto serve --connect <url>`\n *\n * Long-running daemon. Opens a WebSocket to a host (Guilde-shaped API),\n * authenticates with a bearer token, then accepts tunnel frames over\n * that channel — multiplexing many child processes through one socket\n * via `@agentproto/acp/tunnel`. The daemon owns local resources (PTYs,\n * child processes, JSONL session stores) so a host running in the\n * cloud can drive a CLI living on the user's laptop.\n *\n * Reconnect-with-backoff is built in: when the WS drops, every live\n * child gets a SIGHUP-shaped exit and we wait an increasing interval\n * before retrying. Hosts that want continuity should re-spawn after\n * they observe the new tunnel come up.\n *\n * Authorization: v0 trusts every spawn frame the host sends — there\n * is no policy file. Future work will gate spawn requests on a\n * `~/.agentproto/policy.toml` allowlist (see project_agentproto_repos\n * memory). The token is the only access control today.\n */\n\nimport { parseArgs } from \"node:util\"\nimport { hostname, userInfo } from \"node:os\"\nimport {\n createTunnelServer,\n wrapWebSocket,\n type FrameSink,\n} from \"@agentproto/acp/tunnel\"\nimport WebSocket from \"ws\"\n\ninterface ServeOpts {\n connect: string\n token?: string\n label: string\n /** Initial reconnect delay in ms; doubled on each failure up to 30s. */\n reconnectMinMs?: number\n reconnectMaxMs?: number\n}\n\nexport async function runServe(args: readonly string[]): Promise<number> {\n const { values } = parseArgs({\n args: [...args],\n allowPositionals: false,\n strict: true,\n options: {\n connect: { type: \"string\", short: \"c\" },\n token: { type: \"string\", short: \"t\" },\n label: { type: \"string\", short: \"l\" },\n },\n })\n\n if (!values.connect) {\n process.stderr.write(\n \"agentproto serve: --connect <url> is required.\\n\" +\n \" example: agentproto serve --connect wss://guilde.work/api/v1/agentproto/tunnel --token $TOKEN\\n\"\n )\n return 2\n }\n\n // Default label is informative — the host's UI shows it next to\n // every spawn so users know which laptop is executing what.\n const label = values.label ?? `${userInfo().username}@${hostname()}`\n const opts: ServeOpts = {\n connect: values.connect,\n token: values.token ?? process.env.AGENTPROTO_TOKEN,\n label,\n }\n\n process.stderr.write(\n `agentproto serve: connecting to ${opts.connect} as '${opts.label}'…\\n`\n )\n\n // Connect-loop runs forever until the process gets SIGINT/SIGTERM.\n // Each iteration owns one tunnel; reconnects happen sequentially.\n const aborter = new AbortController()\n const onSignal = (sig: NodeJS.Signals) => {\n process.stderr.write(`\\nagentproto serve: received ${sig}, shutting down.\\n`)\n aborter.abort()\n }\n process.once(\"SIGINT\", onSignal)\n process.once(\"SIGTERM\", onSignal)\n\n let backoffMs = opts.reconnectMinMs ?? 1_000\n const backoffMax = opts.reconnectMaxMs ?? 30_000\n\n while (!aborter.signal.aborted) {\n try {\n await runOneTunnel(opts, aborter.signal)\n backoffMs = opts.reconnectMinMs ?? 1_000 // success resets backoff\n } catch (err) {\n if (aborter.signal.aborted) break\n const msg = err instanceof Error ? err.message : String(err)\n process.stderr.write(\n `agentproto serve: tunnel error: ${msg}\\n reconnecting in ${backoffMs}ms…\\n`\n )\n await sleep(backoffMs, aborter.signal)\n backoffMs = Math.min(backoffMs * 2, backoffMax)\n }\n }\n\n process.off(\"SIGINT\", onSignal)\n process.off(\"SIGTERM\", onSignal)\n return 0\n}\n\n/**\n * One end-to-end tunnel attempt. Resolves when the socket closes\n * cleanly (host hung up); rejects on connection error or unexpected\n * close. The reconnect loop catches both and retries.\n */\nasync function runOneTunnel(\n opts: ServeOpts,\n signal: AbortSignal\n): Promise<void> {\n const headers: Record<string, string> = {\n \"user-agent\": \"agentproto/0.1.0-alpha\",\n }\n if (opts.token) headers.authorization = `Bearer ${opts.token}`\n\n const ws = new WebSocket(opts.connect, { headers })\n\n // Wait for OPEN (or fail).\n await new Promise<void>((resolve, reject) => {\n const onOpen = () => {\n ws.off(\"error\", onError)\n resolve()\n }\n const onError = (err: Error) => {\n ws.off(\"open\", onOpen)\n reject(err)\n }\n ws.once(\"open\", onOpen)\n ws.once(\"error\", onError)\n if (signal.aborted) {\n ws.close()\n reject(new Error(\"Aborted before WS opened.\"))\n }\n signal.addEventListener(\"abort\", () => {\n ws.close()\n reject(new Error(\"Aborted while WS connecting.\"))\n })\n })\n\n process.stderr.write(`agentproto serve: tunnel up.\\n`)\n\n const sink: FrameSink = wrapWebSocket(ws as unknown as Parameters<typeof wrapWebSocket>[0])\n const server = createTunnelServer({\n sink,\n label: opts.label,\n pty: false,\n // v0 authorize hook: trust the bearer-authenticated host completely.\n // Token possession proves the host was provisioned for this daemon.\n // Per-spawn policy filtering will land alongside the policy.toml.\n authorize: (req) => req,\n })\n\n // Block until the sink closes (peer disconnect or our shutdown).\n await new Promise<void>((resolve) => {\n const offClose = sink.onClose(() => {\n offClose()\n resolve()\n })\n if (signal.aborted) {\n server.close().finally(() => resolve())\n }\n signal.addEventListener(\"abort\", () => {\n server.close().finally(() => resolve())\n })\n })\n\n process.stderr.write(`agentproto serve: tunnel closed.\\n`)\n}\n\nfunction sleep(ms: number, signal: AbortSignal): Promise<void> {\n return new Promise((resolve) => {\n if (signal.aborted) return resolve()\n const timer = setTimeout(resolve, ms)\n signal.addEventListener(\"abort\", () => {\n clearTimeout(timer)\n resolve()\n })\n })\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/registry/resolve.ts","../src/commands/setup.ts","../src/commands/install.ts","../src/util/stdin.ts","../src/commands/run.ts","../src/util/credentials.ts","../src/commands/serve.ts"],"names":["fs","resolvePath","input","output","parseArgs","join","writeFile","chmod","mkdir","homedir","spawn","readFile","createAgentCliRuntime"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Resolve a slug like \"claude-code\" to a runnable `AgentCliHandle`.\n *\n * Resolution order:\n * 1. `@agentproto/adapter-<slug>` from npm (must default-export or\n * named-export an `AgentCliHandle` — convention is the camelCased\n * slug, e.g. `claudeCode`).\n * 2. (TODO) `~/.agentproto/adapters/<slug>/AGENT-CLI.md` on disk.\n * 3. (TODO) bundled fallbacks for the canonical adapters.\n *\n * Step 1 covers 100% of v0 usage. The on-disk path is only there for\n * users authoring their own adapters; we'll add it once `defineAgentCli`\n * supports MD-source authoring end to end.\n */\n\nimport { promises as fs } from \"node:fs\"\nimport { resolve as resolvePath } from \"node:path\"\nimport type { AgentCliHandle } from \"@agentproto/driver-agent-cli\"\n\nexport interface ResolvedAdapter {\n readonly slug: string\n readonly handle: AgentCliHandle\n readonly source: \"npm\" | \"file\" | \"bundled\"\n readonly packageName?: string\n}\n\n/**\n * Compact metadata about an installed adapter — the shape returned\n * by `listInstalledAdapters()` and exposed via the daemon's\n * `GET /adapters` route + `list_adapters` MCP tool. Only fields\n * safe to surface in a UI list (no install scripts, no env keys).\n * For full handle access call `resolveAdapter(slug)`.\n */\nexport interface AdapterInfo {\n slug: string\n /** Display name from the manifest. */\n name: string\n /** Adapter package version (matches npm package.json `version`). */\n version: string\n /** One-line user-facing description. */\n description: string\n /** Wire protocol — informs prompt/multi-turn semantics. */\n protocol: string\n /** True when the adapter advertises a streaming session contract. */\n streaming: boolean\n /** npm package name (for install hints / \"open in npmjs.com\" links). */\n packageName: string\n}\n\nconst slugToCamel = (slug: string): string =>\n slug.replace(/-([a-z0-9])/g, (_, c: string) => c.toUpperCase())\n\nexport async function resolveAdapter(slug: string): Promise<ResolvedAdapter> {\n if (!/^[a-z][a-z0-9-]*$/.test(slug)) {\n throw new Error(\n `agentproto: invalid adapter slug '${slug}'. Slugs are lower-kebab.`\n )\n }\n\n const packageName = `@agentproto/adapter-${slug}`\n let mod: Record<string, unknown>\n try {\n mod = (await import(packageName)) as Record<string, unknown>\n } catch (err) {\n const cause = err instanceof Error ? err.message : String(err)\n throw new Error(\n `agentproto: could not load adapter '${slug}'. ` +\n `Tried '${packageName}'. Install it with: npm i -g ${packageName}\\n cause: ${cause}`\n )\n }\n\n const camel = slugToCamel(slug)\n const candidate =\n (mod[camel] as AgentCliHandle | undefined) ??\n (mod.default as AgentCliHandle | undefined) ??\n (mod.handle as AgentCliHandle | undefined)\n\n if (!candidate || typeof candidate !== \"object\" || !(\"name\" in candidate)) {\n throw new Error(\n `agentproto: adapter '${packageName}' does not export an AgentCliHandle ` +\n `(looked for export '${camel}', 'default', or 'handle').`\n )\n }\n\n return { slug, handle: candidate, source: \"npm\", packageName }\n}\n\n/**\n * Enumerate every `@agentproto/adapter-*` package reachable from the\n * current node module-resolution path. Used by the daemon's\n * `GET /adapters` route and `list_adapters` MCP tool so UIs (web\n * spawn dialog) and operators can pick from the installed set\n * without trial-and-error against `resolveAdapter(slug)`.\n *\n * Implementation: walk `node_modules/@agentproto` looking for\n * `adapter-*` directories; for each, dynamic-import the package +\n * extract the AgentCliHandle's display fields. Failures (broken\n * exports, missing dist) are collected as warnings rather than\n * thrown — partial discovery beats failing the whole listing on\n * one bad adapter.\n *\n * Discovery is async + reads disk on every call; cache at the\n * caller layer if you list often. v0 does no caching here because\n * adapter sets typically change rarely (npm i / rm) and a fresh\n * scan stays fast (~10 packages worth of dynamic imports).\n */\nexport async function listInstalledAdapters(opts?: {\n /** Override the search root. Defaults to walking up from the cli\n * package's own location until we hit a `node_modules/@agentproto`. */\n searchRoot?: string\n}): Promise<AdapterInfo[]> {\n const roots = await collectAgentprotoNamespaceRoots(opts?.searchRoot)\n const seen = new Set<string>()\n const out: AdapterInfo[] = []\n\n for (const root of roots) {\n let entries: string[] = []\n try {\n entries = await fs.readdir(root)\n } catch {\n continue\n }\n for (const entry of entries) {\n if (!entry.startsWith(\"adapter-\")) continue\n const slug = entry.slice(\"adapter-\".length)\n if (seen.has(slug)) continue\n seen.add(slug)\n try {\n const resolved = await resolveAdapter(slug)\n const handle = resolved.handle as Record<string, unknown>\n const info: AdapterInfo = {\n slug,\n name: typeof handle.name === \"string\" ? handle.name : slug,\n version: typeof handle.version === \"string\" ? handle.version : \"?\",\n description:\n typeof handle.description === \"string\" ? handle.description : \"\",\n protocol:\n typeof handle.protocol === \"string\" ? handle.protocol : \"unknown\",\n streaming: !!(handle.capabilities as { streaming?: boolean })\n ?.streaming,\n packageName: resolved.packageName ?? `@agentproto/adapter-${slug}`,\n }\n out.push(info)\n } catch (err) {\n // Broken adapter — log and skip rather than fail the listing.\n console.warn(\n `[agentproto/cli] listInstalledAdapters: skipping broken adapter '${slug}': ${\n err instanceof Error ? err.message : String(err)\n }`\n )\n }\n }\n }\n return out.sort((a, b) => a.slug.localeCompare(b.slug))\n}\n\n/**\n * Walk up from the cli package looking for `node_modules/@agentproto`\n * directories. Returns every match (pnpm + global + nvm hoisting can\n * produce more than one) so adapters installed in any reachable\n * scope are discoverable.\n */\nasync function collectAgentprotoNamespaceRoots(\n start?: string\n): Promise<string[]> {\n const roots: string[] = []\n // Start from this package's own dir — works in ESM (import.meta.url\n // route would be cleaner but isn't needed; cwd is reliable enough\n // for the daemon use case where it boots from a known dir).\n let cur = start ?? process.cwd()\n // Both classic + pnpm-hoist locations. Classic npm puts the\n // namespace at node_modules/@agentproto; pnpm hoists to\n // node_modules/.pnpm/node_modules/@agentproto and symlinks\n // individual packages from there. We need to scan the hoist dir\n // for the listing because the namespace dir is the only place\n // where every adapter package is enumerable.\n const candidatesAt = (dir: string): string[] => [\n resolvePath(dir, \"node_modules\", \"@agentproto\"),\n resolvePath(dir, \"node_modules\", \".pnpm\", \"node_modules\", \"@agentproto\"),\n ]\n for (let depth = 0; depth < 16; depth++) {\n for (const candidate of candidatesAt(cur)) {\n try {\n const stat = await fs.stat(candidate)\n if (stat.isDirectory()) roots.push(candidate)\n } catch {\n /* not present at this level */\n }\n }\n const parent = resolvePath(cur, \"..\")\n if (parent === cur) break\n cur = parent\n }\n return roots\n}\n","/**\n * `agentproto setup <slug>` + `runSetup()` engine.\n *\n * Implements AIP-29 § Setup — the post-install configuration pipeline.\n * Steps run in declared order. Idempotency comes from three layers:\n *\n * 1. Manifest's `version_check` — already covered by `install`. If the\n * binary's version answers, install steps are skipped entirely\n * before setup ever runs.\n *\n * 2. Per-step `skip_if.cmd` — runs first; matching exit code skips\n * the step. Asks the live system, so it works on fresh machines\n * without any local state.\n *\n * 3. Setup ledger — `~/.agentproto/setup/<slug>.json`, records each\n * successful step with timestamp + (when applicable) which slot\n * received the value. Re-runs short-circuit ledger-known steps\n * unless --force is passed.\n *\n * The `runSetup()` export is what `agentproto install` calls after the\n * install array succeeds; `runSetupCommand()` is the standalone verb\n * (re-runs only setup, no install).\n *\n * Step `kind` matrix (current support):\n *\n * - cmd ✓ — shell command, optional skip_if + persist (stdout)\n * - prompt ✓ — text / boolean / select / secret; persist via env / secret_slug / cmd\n * - oauth ✗ — placeholder; needs a SECRETS.md driver wire-up\n * - external ⚠ — opens URL via xdg-open/open; callback polling not yet wired\n *\n * The unsupported kinds surface a clear \"not yet implemented\" message\n * so adapter authors can lean on cmd + prompt today and migrate later.\n */\n\nimport { spawn } from \"node:child_process\"\nimport { mkdir, readFile, writeFile, chmod } from \"node:fs/promises\"\nimport { homedir, platform } from \"node:os\"\nimport { join, dirname } from \"node:path\"\nimport { parseArgs } from \"node:util\"\nimport { createInterface } from \"node:readline/promises\"\nimport { stdin as input, stdout as output } from \"node:process\"\nimport type {\n AgentCliHandle,\n AgentCliSetupStep,\n AgentCliSetupSkipIf,\n AgentCliSetupPersist,\n} from \"@agentproto/driver-agent-cli\"\nimport { resolveAdapter } from \"../registry/resolve.js\"\n\ninterface LedgerEntry {\n /** Step id from the manifest. */\n stepId: string\n /** ISO-8601 timestamp the step succeeded (or was skipped via skip_if). */\n completedAt: string\n /** What kind of step this was — for forensic scrubbing. Persist values\n * are NEVER stored in the ledger; only the slot name where they\n * landed. */\n kind: AgentCliSetupStep[\"kind\"]\n /** Slot the captured value went into, when applicable. Format:\n * - `env:OPENCLAW_GATEWAY_URL`\n * - `secret:openclaw/gateway-token`\n * - `cmd` (the value was piped to a config command, not stored here)\n */\n persistedTo?: string\n /** True when the step short-circuited via skip_if instead of running. */\n skippedViaSkipIf?: boolean\n}\n\ninterface Ledger {\n /** Bundle id, matches the manifest's `id`. */\n slug: string\n /** When the ledger was last touched. */\n updatedAt: string\n /** One per step id. Most recent run wins. */\n steps: Record<string, LedgerEntry>\n /** Captured env-bound values — persist.env steps land here. The\n * installer + runner read from the secrets backend in production;\n * for the local CLI host we mirror them into the ledger so\n * `agentproto run` can lift them onto the spawn env without hitting\n * a remote vault. Restricted to 0600 perms by the writer. */\n envValues?: Record<string, string>\n}\n\nexport interface RunSetupOptions {\n slug: string\n handle: AgentCliHandle\n /** When true, ignore the ledger AND skip_if; re-runs every step. */\n force?: boolean\n /** When true, log what would happen but don't spawn / prompt. */\n dryRun?: boolean\n /** When set, only run the named step ids (in declared order). Useful\n * for re-running a single step after a manual fix. */\n only?: string[]\n}\n\nexport async function runSetup(opts: RunSetupOptions): Promise<number> {\n const steps = opts.handle.setup ?? []\n if (steps.length === 0) {\n process.stdout.write(`agentproto setup: no setup steps for '${opts.slug}'.\\n`)\n return 0\n }\n\n const ledgerPath = ledgerPathFor(opts.slug)\n const ledger = await loadLedger(ledgerPath, opts.slug)\n const onlySet = opts.only && opts.only.length > 0 ? new Set(opts.only) : null\n\n for (const [i, step] of steps.entries()) {\n if (onlySet && !onlySet.has(step.id)) continue\n\n const idx = `[${i + 1}/${steps.length}]`\n const head = `${idx} ${step.kind}/${step.id}`\n\n // Layer 3: ledger short-circuit (skipped on --force).\n const prev = ledger.steps[step.id]\n if (!opts.force && prev) {\n process.stdout.write(\n `${head} ✓ already completed (${prev.completedAt}${prev.skippedViaSkipIf ? \", via skip_if\" : \"\"}). Pass --force to re-run.\\n`\n )\n continue\n }\n\n // Layer 2: per-step skip_if.\n if (step.skip_if && !opts.force) {\n const ok = await checkSkipIf(step.skip_if)\n if (ok) {\n process.stdout.write(`${head} ✓ skip_if matched — skipping.\\n`)\n ledger.steps[step.id] = {\n stepId: step.id,\n kind: step.kind,\n completedAt: new Date().toISOString(),\n skippedViaSkipIf: true,\n }\n continue\n }\n }\n\n if (opts.dryRun) {\n process.stdout.write(`${head} (dry-run) — would execute.\\n`)\n continue\n }\n\n // Run the step.\n let entry: LedgerEntry | null = null\n try {\n switch (step.kind) {\n case \"cmd\":\n entry = await runCmdStep(step, ledger, head)\n break\n case \"prompt\":\n entry = await runPromptStep(step, ledger, head)\n break\n case \"external\":\n entry = await runExternalStep(step, ledger, head)\n break\n case \"oauth\":\n process.stderr.write(\n `${head} ✗ kind=oauth is not yet implemented in the local CLI host. ` +\n `Run the OAuth flow on the host that ships a SECRETS.md driver, then re-invoke.\\n`\n )\n return 1\n }\n } catch (err) {\n process.stderr.write(\n `${head} ✗ failed: ${err instanceof Error ? err.message : String(err)}\\n`\n )\n await saveLedger(ledgerPath, ledger)\n return 1\n }\n\n if (entry) {\n ledger.steps[step.id] = entry\n // Persist incrementally so a later step's failure doesn't lose\n // earlier successes (avoids re-prompting on next run).\n await saveLedger(ledgerPath, ledger)\n }\n }\n\n process.stdout.write(`agentproto: setup for '${opts.slug}' complete.\\n`)\n return 0\n}\n\n/**\n * `agentproto setup <slug>` — re-run the setup pipeline for an\n * already-installed bundle. Useful when adding new steps to an\n * adapter, fixing a broken step, or after a `--skip-setup` install.\n */\nexport async function runSetupCommand(args: readonly string[]): Promise<number> {\n const { values, positionals } = parseArgs({\n args: [...args],\n allowPositionals: true,\n strict: true,\n options: {\n force: { type: \"boolean\", short: \"f\" },\n \"dry-run\": { type: \"boolean\" },\n only: { type: \"string\", multiple: true },\n },\n })\n const slug = positionals[0]\n if (!slug) {\n process.stderr.write(\n \"agentproto setup: missing adapter slug. Try: agentproto setup openclaw\\n\"\n )\n return 2\n }\n const adapter = await resolveAdapter(slug)\n return runSetup({\n slug,\n handle: adapter.handle,\n force: values.force ?? false,\n dryRun: values[\"dry-run\"] ?? false,\n ...(values.only ? { only: values.only } : {}),\n })\n}\n\n// ── Step runners ─────────────────────────────────────────────────────\n\nasync function runCmdStep(\n step: Extract<AgentCliSetupStep, { kind: \"cmd\" }>,\n ledger: Ledger,\n head: string\n): Promise<LedgerEntry> {\n if (step.description) process.stdout.write(`${head} ${step.description}\\n`)\n process.stdout.write(`${head} $ ${step.cmd}\\n`)\n const captured = await runShellCapturing(step.cmd, {\n timeoutMs: step.timeout_ms ?? 60_000,\n interactive: step.interactive ?? false,\n })\n if (captured.exitCode !== 0) {\n throw new Error(\n `cmd exited ${captured.exitCode}${captured.stderr ? \": \" + truncate(captured.stderr, 400) : \"\"}`\n )\n }\n // Persist the trimmed stdout when the step asks for it.\n let persistedTo: string | undefined\n if (step.persist) {\n const value = captured.stdout.trim()\n persistedTo = await applyPersist(step.persist, value, ledger)\n }\n return {\n stepId: step.id,\n kind: step.kind,\n completedAt: new Date().toISOString(),\n ...(persistedTo ? { persistedTo } : {}),\n }\n}\n\nasync function runPromptStep(\n step: Extract<AgentCliSetupStep, { kind: \"prompt\" }>,\n ledger: Ledger,\n head: string\n): Promise<LedgerEntry> {\n if (step.description) process.stdout.write(`${head} ${step.description}\\n`)\n const type = step.type ?? \"text\"\n\n let value: string\n switch (type) {\n case \"text\":\n case \"secret\":\n value = await promptString(step.prompt, {\n defaultValue: step.default,\n masked: type === \"secret\",\n })\n break\n case \"boolean\":\n value = (await promptBoolean(step.prompt, step.default === \"true\"))\n ? \"true\"\n : \"false\"\n break\n case \"select\": {\n const options = await resolveSelectOptions(step.options)\n if (options.length === 0) {\n throw new Error(\"select prompt has no options to choose from\")\n }\n value = await promptSelect(step.prompt, options, step.default)\n break\n }\n }\n\n let persistedTo: string | undefined\n if (step.persist) {\n persistedTo = await applyPersist(step.persist, value, ledger)\n }\n\n return {\n stepId: step.id,\n kind: step.kind,\n completedAt: new Date().toISOString(),\n ...(persistedTo ? { persistedTo } : {}),\n }\n}\n\nasync function runExternalStep(\n step: Extract<AgentCliSetupStep, { kind: \"external\" }>,\n ledger: Ledger,\n head: string\n): Promise<LedgerEntry> {\n if (step.description) process.stdout.write(`${head} ${step.description}\\n`)\n process.stdout.write(`${head} opening ${step.url}\\n`)\n const opener =\n platform() === \"darwin\"\n ? \"open\"\n : platform() === \"win32\"\n ? \"cmd\"\n : \"xdg-open\"\n const args = platform() === \"win32\" ? [\"/c\", \"start\", step.url] : [step.url]\n await new Promise<void>((resolve) => {\n const child = spawn(opener, args, { stdio: \"ignore\", detached: true })\n child.once(\"error\", () => resolve()) // best-effort\n child.once(\"spawn\", () => resolve())\n })\n\n // Callback polling (a host-allocated callback URL holding the result)\n // requires a local HTTP listener, which is reasonable in some hosts\n // but overkill for the agentproto CLI in v0.1. For now we fall back\n // to \"paste the result\" when the step declares a callback param;\n // the URL was opened above to start the flow.\n let value = \"\"\n if (step.callback?.param) {\n value = await promptString(\n `Paste the value of '${step.callback.param}' from the redirect`,\n { masked: false }\n )\n } else {\n process.stdout.write(`${head} done — press Enter when finished.\\n`)\n await promptString(\"(press Enter to continue)\", { masked: false })\n }\n\n let persistedTo: string | undefined\n if (step.persist && value) {\n persistedTo = await applyPersist(step.persist, value, ledger)\n }\n return {\n stepId: step.id,\n kind: step.kind,\n completedAt: new Date().toISOString(),\n ...(persistedTo ? { persistedTo } : {}),\n }\n}\n\n// ── skip_if check ────────────────────────────────────────────────────\n\nasync function checkSkipIf(skip: AgentCliSetupSkipIf): Promise<boolean> {\n const expectedCode = skip.exit_code ?? 0\n const captured = await runShellCapturing(skip.cmd, {\n timeoutMs: skip.timeout_ms ?? 5_000,\n interactive: false,\n })\n return captured.exitCode === expectedCode\n}\n\n// ── persist (env / secret_slug / cmd) ────────────────────────────────\n\nasync function applyPersist(\n persist: AgentCliSetupPersist,\n value: string,\n ledger: Ledger\n): Promise<string> {\n if (\"env\" in persist && persist.env) {\n if (!ledger.envValues) ledger.envValues = {}\n ledger.envValues[persist.env] = value\n return `env:${persist.env}`\n }\n if (\"secret_slug\" in persist && persist.secret_slug) {\n // The secrets backend is host-supplied. The local CLI host doesn't\n // ship one yet; we surface the slug so the operator can pipe the\n // value into their vault out-of-band. Recording the slug (NOT the\n // value) in the ledger is intentional — the ledger isn't a vault.\n process.stdout.write(\n `agentproto setup: store the prompted value in your secrets backend under slug '${persist.secret_slug}' ` +\n `(value not echoed; ledger records the slot only).\\n`\n )\n return `secret:${persist.secret_slug}`\n }\n if (\"cmd\" in persist && persist.cmd) {\n const cmd = persist.cmd.replace(/\\$\\{value\\}/g, shellEscape(value))\n const captured = await runShellCapturing(cmd, {\n timeoutMs: 60_000,\n interactive: false,\n })\n if (captured.exitCode !== 0) {\n throw new Error(`persist cmd exited ${captured.exitCode}`)\n }\n return \"cmd\"\n }\n throw new Error(\"persist block must declare exactly one of env / secret_slug / cmd\")\n}\n\n// ── prompt helpers ───────────────────────────────────────────────────\n\nasync function promptString(\n question: string,\n opts: { defaultValue?: string; masked?: boolean }\n): Promise<string> {\n // Node's readline doesn't natively mask; for `masked: true` we set\n // the terminal to no-echo for the duration of the prompt. Best-effort\n // — some non-TTY environments fall back to plain input with a warning.\n const isTty = process.stdin.isTTY ?? false\n const suffix = opts.defaultValue ? ` [${opts.defaultValue}]` : \"\"\n const prompt = `${question}${suffix}: `\n if (opts.masked && !isTty) {\n process.stdout.write(\n `agentproto: stdin is not a TTY — masked input falls back to plain. Avoid piping secrets in non-interactive mode.\\n`\n )\n }\n const rl = createInterface({ input, output, terminal: isTty })\n if (opts.masked && isTty) {\n // Toggle echo off via raw mode.\n process.stdin.setRawMode?.(true)\n let buf = \"\"\n process.stdout.write(prompt)\n return new Promise<string>((resolve) => {\n const onData = (chunk: Buffer) => {\n for (const code of chunk) {\n if (code === 0x0d /* CR */ || code === 0x0a /* LF */) {\n process.stdin.off(\"data\", onData)\n process.stdin.setRawMode?.(false)\n process.stdout.write(\"\\n\")\n rl.close()\n resolve(buf || opts.defaultValue || \"\")\n return\n }\n if (code === 0x03 /* Ctrl-C */) {\n process.stdin.off(\"data\", onData)\n process.stdin.setRawMode?.(false)\n rl.close()\n process.exit(130)\n }\n if (code === 0x7f /* DEL / backspace */ || code === 0x08) {\n buf = buf.slice(0, -1)\n continue\n }\n buf += String.fromCharCode(code)\n process.stdout.write(\"•\")\n }\n }\n process.stdin.on(\"data\", onData)\n })\n }\n try {\n const ans = (await rl.question(prompt)).trim()\n return ans || opts.defaultValue || \"\"\n } finally {\n rl.close()\n }\n}\n\nasync function promptBoolean(\n question: string,\n defaultYes: boolean\n): Promise<boolean> {\n const def = defaultYes ? \"Y/n\" : \"y/N\"\n const ans = await promptString(`${question} [${def}]`, { masked: false })\n if (!ans) return defaultYes\n return /^y(es)?$/i.test(ans)\n}\n\nasync function promptSelect(\n question: string,\n options: { value: string; label?: string }[],\n defaultValue: string | undefined\n): Promise<string> {\n process.stdout.write(`${question}\\n`)\n for (const [i, o] of options.entries()) {\n const star =\n defaultValue && o.value === defaultValue ? \"*\" : i === 0 ? \" \" : \" \"\n process.stdout.write(\n ` ${star} ${i + 1}) ${o.label ?? o.value}${o.label ? ` (${o.value})` : \"\"}\\n`\n )\n }\n const ans = await promptString(\n `Choose 1-${options.length}`,\n defaultValue ? { defaultValue } : { masked: false }\n )\n // Accept either the numeric index or a literal value.\n const asNum = Number.parseInt(ans, 10)\n if (Number.isFinite(asNum) && asNum >= 1 && asNum <= options.length) {\n return options[asNum - 1]!.value\n }\n const exact = options.find((o) => o.value === ans)\n if (exact) return exact.value\n if (defaultValue && options.some((o) => o.value === defaultValue)) {\n return defaultValue\n }\n throw new Error(\n `invalid selection '${ans}'; expected one of ${options.map((o) => o.value).join(\", \")}`\n )\n}\n\nasync function resolveSelectOptions(\n options: Extract<AgentCliSetupStep, { kind: \"prompt\" }>[\"options\"]\n): Promise<{ value: string; label?: string }[]> {\n if (!options) return []\n if (Array.isArray(options)) {\n return options.map((v) => ({ value: v }))\n }\n // Dynamic options: run the cmd, parse stdout (one option per line,\n // optional `value\\tlabel`).\n const captured = await runShellCapturing(options.cmd, {\n timeoutMs: options.timeout_ms ?? 30_000,\n interactive: false,\n })\n if (captured.exitCode !== 0) {\n throw new Error(\n `select options cmd exited ${captured.exitCode}: ${truncate(captured.stderr, 400)}`\n )\n }\n return captured.stdout\n .split(\"\\n\")\n .map((l) => l.trim())\n .filter(Boolean)\n .map((line) => {\n const [value, label] = line.split(\"\\t\")\n const out: { value: string; label?: string } = { value: value! }\n if (label) out.label = label\n return out\n })\n}\n\n// ── shell helper ─────────────────────────────────────────────────────\n\nasync function runShellCapturing(\n cmd: string,\n opts: { timeoutMs: number; interactive: boolean }\n): Promise<{ exitCode: number; stdout: string; stderr: string }> {\n return new Promise((resolve) => {\n const child = spawn(\"bash\", [\"-lc\", cmd], {\n stdio: opts.interactive\n ? \"inherit\"\n : [\"ignore\", \"pipe\", \"pipe\"],\n })\n let stdout = \"\"\n let stderr = \"\"\n child.stdout?.on(\"data\", (c: Buffer) => {\n stdout += c.toString(\"utf8\")\n })\n child.stderr?.on(\"data\", (c: Buffer) => {\n stderr += c.toString(\"utf8\")\n })\n const timer = setTimeout(() => {\n child.kill(\"SIGTERM\")\n setTimeout(() => child.kill(\"SIGKILL\"), 1000)\n }, opts.timeoutMs)\n child.once(\"error\", () => {\n clearTimeout(timer)\n resolve({ exitCode: 127, stdout, stderr: stderr || \"spawn error\" })\n })\n child.once(\"exit\", (code) => {\n clearTimeout(timer)\n resolve({ exitCode: code ?? 0, stdout, stderr })\n })\n })\n}\n\nfunction shellEscape(s: string): string {\n // POSIX-style single-quote escape — wraps in single quotes and\n // closes/reopens around any literal single quote in the value.\n return `'${s.replace(/'/g, `'\"'\"'`)}'`\n}\n\nfunction truncate(s: string, max: number): string {\n return s.length <= max ? s : s.slice(0, max - 3) + \"…\"\n}\n\n// ── ledger ───────────────────────────────────────────────────────────\n\nfunction ledgerPathFor(slug: string): string {\n const base =\n process.env[\"AGENTPROTO_HOME\"] ?? join(homedir(), \".agentproto\")\n return join(base, \"setup\", `${slug}.json`)\n}\n\nasync function loadLedger(path: string, slug: string): Promise<Ledger> {\n try {\n const raw = await readFile(path, \"utf8\")\n const parsed = JSON.parse(raw) as Ledger\n if (parsed.slug === slug && typeof parsed.steps === \"object\") return parsed\n } catch {\n // No ledger yet, or malformed — start fresh.\n }\n return {\n slug,\n updatedAt: new Date().toISOString(),\n steps: {},\n }\n}\n\nasync function saveLedger(path: string, ledger: Ledger): Promise<void> {\n ledger.updatedAt = new Date().toISOString()\n await mkdir(dirname(path), { recursive: true })\n await writeFile(path, JSON.stringify(ledger, null, 2))\n await chmod(path, 0o600).catch(() => {\n // chmod failures on Windows are non-fatal — the file lives in\n // %USERPROFILE% which is already user-private.\n })\n}\n","/**\n * `agentproto install <slug>`\n *\n * Reads the adapter manifest's `install` block and shells out to the\n * declared package manager. Idempotent: if `version_check` passes, we\n * skip and report \"already installed\" (override with --force).\n *\n * The adapter package itself must already be in node_modules (we resolve\n * it before reading its manifest). Bootstrapping the adapter package is\n * a separate concern — `npm i -g @agentproto/adapter-<slug>` first.\n *\n * Method support matrix:\n * - `npm` ✓\n * - `brew` ✓ (macOS / Linux Homebrew)\n * - `curl` ✓ (with optional verify_sha256)\n * - `download` ✓ (tarball/zip + extract_bin + optional verify_sha256)\n * - `pip` ✓ (with optional `user: true`)\n * - `cargo` ✓\n * - `go` ✓\n * - `apt/dnf/pacman` ✗ (privilege escalation needs explicit sudo policy)\n * - `choco/scoop` ✗ (Windows-only; not yet platform-detected)\n * - `vendored` ✗ (workspace-relative; needs a workspace root)\n *\n * After install, runs the optional `setup[]` pipeline (AIP-29 § Setup).\n */\n\nimport { spawn } from \"node:child_process\"\nimport { createHash } from \"node:crypto\"\nimport { mkdir, mkdtemp, rm, writeFile, chmod } from \"node:fs/promises\"\nimport { tmpdir } from \"node:os\"\nimport { join } from \"node:path\"\nimport { parseArgs } from \"node:util\"\nimport type { AgentCliInstallMethod } from \"@agentproto/driver-agent-cli\"\nimport { resolveAdapter } from \"../registry/resolve.js\"\nimport { runSetup } from \"./setup.js\"\n\nexport async function runInstall(args: readonly string[]): Promise<number> {\n const { values, positionals } = parseArgs({\n args: [...args],\n allowPositionals: true,\n strict: true,\n options: {\n force: { type: \"boolean\", short: \"f\" },\n \"dry-run\": { type: \"boolean\" },\n \"skip-setup\": { type: \"boolean\" },\n },\n })\n\n const slug = positionals[0]\n if (!slug) {\n process.stderr.write(\n \"agentproto install: missing adapter slug. Try: agentproto install claude-code\\n\"\n )\n return 2\n }\n\n const adapter = await resolveAdapter(slug)\n const installSteps: AgentCliInstallMethod[] = adapter.handle.install ?? []\n if (installSteps.length === 0) {\n process.stderr.write(\n `agentproto install: adapter '${slug}' declares no install steps.\\n`\n )\n return 0\n }\n\n let alreadyInstalled = false\n if (!values.force) {\n const checked = await runVersionCheck(adapter.handle.version_check)\n if (checked.ok) {\n process.stdout.write(\n `agentproto: '${slug}' already installed (${checked.message}). Pass --force to reinstall.\\n`\n )\n alreadyInstalled = true\n }\n }\n\n if (!alreadyInstalled) {\n let lastFailure: { step: AgentCliInstallMethod; code: number } | null = null\n let succeeded = false\n for (const [i, step] of installSteps.entries()) {\n // Spec: hosts try install methods *in order until one succeeds*.\n // Pre-this-fix the runner aborted on the first failure, which made\n // the curl-fallback pattern in opencode/openclaw unreachable\n // whenever npm wasn't viable. Now we collect failures and only\n // surface the last one if every method falls through.\n if (step.experimental) {\n process.stdout.write(\n `agentproto install [${i + 1}/${installSteps.length}] ${describeStep(step)} (experimental — skipping)\\n`\n )\n continue\n }\n process.stdout.write(\n `agentproto install [${i + 1}/${installSteps.length}] ${describeStep(step)}\\n`\n )\n if (values[\"dry-run\"]) {\n succeeded = true\n continue\n }\n const code = await runStep(step)\n if (code === 0) {\n succeeded = true\n break\n }\n lastFailure = { step, code }\n process.stdout.write(\n `agentproto install: method '${step.method}' returned ${code}; trying next.\\n`\n )\n }\n if (!succeeded && lastFailure) {\n process.stderr.write(\n `agentproto install: all ${installSteps.length} install methods failed. Last failure: ${lastFailure.step.method} → exit ${lastFailure.code}.\\n`\n )\n return lastFailure.code\n }\n if (!succeeded && !lastFailure) {\n // Every method was experimental/skipped.\n process.stderr.write(\n `agentproto install: no usable install method found for '${slug}'.\\n`\n )\n return 1\n }\n process.stdout.write(`agentproto: '${slug}' installed.\\n`)\n }\n\n // Run the AIP-29 § Setup pipeline (post-install configuration). Skipped\n // when --skip-setup is passed or the manifest declares no setup. The\n // setup engine is idempotent — already-satisfied steps short-circuit\n // via skip_if; previously-completed steps short-circuit via the ledger.\n if (!values[\"skip-setup\"] && (adapter.handle.setup?.length ?? 0) > 0) {\n process.stdout.write(`agentproto: running setup for '${slug}'…\\n`)\n const setupCode = await runSetup({\n slug,\n handle: adapter.handle,\n force: values.force ?? false,\n dryRun: values[\"dry-run\"] ?? false,\n })\n if (setupCode !== 0) return setupCode\n }\n\n return 0\n}\n\nfunction describeStep(step: AgentCliInstallMethod): string {\n switch (step.method) {\n case \"npm\":\n return `npm install ${step.global ? \"-g \" : \"\"}${step.package ?? \"(?)\"}`\n case \"brew\":\n return `brew install ${step.package ?? \"(?)\"}`\n case \"pip\":\n return `pip install ${step.user ? \"--user \" : \"\"}${step.package ?? \"(?)\"}`\n case \"cargo\":\n return `cargo install ${step.package ?? \"(?)\"}`\n case \"go\":\n return `go install ${step.package ?? \"(?)\"}`\n case \"curl\":\n return `curl ${step.url ?? \"(?)\"} | bash`\n case \"download\":\n return `download ${step.url ?? \"(?)\"} → ${step.extract_bin ?? \"(?)\"}`\n default:\n return `${step.method} ${step.package ?? step.url ?? step.path ?? \"(?)\"}`\n }\n}\n\nasync function runStep(step: AgentCliInstallMethod): Promise<number> {\n switch (step.method) {\n case \"npm\": {\n if (!step.package) {\n process.stderr.write(\"agentproto install: npm step missing package.\\n\")\n return 2\n }\n const argv = [\"install\"]\n if (step.global) argv.push(\"-g\")\n argv.push(step.package)\n return spawnInherit(\"npm\", argv)\n }\n case \"brew\": {\n if (!step.package) {\n process.stderr.write(\"agentproto install: brew step missing package.\\n\")\n return 2\n }\n // Namespaced packages (e.g. `stripe/stripe-cli/stripe`) need an\n // implicit `brew tap`; `brew install` accepts the fully-qualified\n // form, so we pass it through verbatim. Bare names work too.\n return spawnInherit(\"brew\", [\"install\", step.package])\n }\n case \"pip\": {\n if (!step.package) {\n process.stderr.write(\"agentproto install: pip step missing package.\\n\")\n return 2\n }\n const argv = [\"install\"]\n if (step.user) argv.push(\"--user\")\n argv.push(step.package)\n // Prefer pip3 when it exists; fall back to pip. We just call `pip`\n // here because the user's PATH ordering is the right authority.\n return spawnInherit(\"pip\", argv)\n }\n case \"cargo\": {\n if (!step.package) {\n process.stderr.write(\n \"agentproto install: cargo step missing package.\\n\"\n )\n return 2\n }\n return spawnInherit(\"cargo\", [\"install\", step.package])\n }\n case \"go\": {\n if (!step.package) {\n process.stderr.write(\"agentproto install: go step missing package.\\n\")\n return 2\n }\n return spawnInherit(\"go\", [\"install\", step.package])\n }\n case \"curl\": {\n if (!step.url) {\n process.stderr.write(\"agentproto install: curl step missing url.\\n\")\n return 2\n }\n return runCurlInstaller(step.url, step.verify_sha256)\n }\n case \"download\": {\n if (!step.url || !step.extract_bin) {\n process.stderr.write(\n \"agentproto install: download step missing url or extract_bin.\\n\"\n )\n return 2\n }\n return runDownloadInstaller({\n url: step.url,\n extractBin: step.extract_bin,\n verifySha256: step.verify_sha256,\n })\n }\n default:\n process.stderr.write(\n `agentproto install: method '${step.method}' not yet implemented in this CLI version. ` +\n `Run it manually for now (see the adapter's docs).\\n`\n )\n return 1\n }\n}\n\n/**\n * `curl <url> | bash` with optional SHA-256 verification of the\n * installer script *before* executing it. Spec posture (AIP-29 §\n * Install methods → §curl): hosts SHOULD refuse curl-style installers\n * without a verify_sha256 in production. We surface a warning when\n * one is missing but still execute — the agentproto CLI runs in\n * developer / first-run contexts where the trade-off is acceptable.\n */\nasync function runCurlInstaller(\n url: string,\n verifySha256?: string\n): Promise<number> {\n if (!verifySha256) {\n process.stdout.write(\n `agentproto install: curl ${url} (⚠ no verify_sha256 declared — installer integrity not verified)\\n`\n )\n }\n const dir = await mkdtemp(join(tmpdir(), \"agentproto-curl-\"))\n const scriptPath = join(dir, \"install.sh\")\n try {\n const res = await fetch(url, { redirect: \"follow\" })\n if (!res.ok) {\n process.stderr.write(\n `agentproto install: curl fetch failed: ${res.status} ${res.statusText}\\n`\n )\n return res.status\n }\n const buf = Buffer.from(await res.arrayBuffer())\n if (verifySha256) {\n const got = createHash(\"sha256\").update(buf).digest(\"hex\")\n if (got !== verifySha256.toLowerCase()) {\n process.stderr.write(\n `agentproto install: SHA-256 mismatch for ${url}\\n expected: ${verifySha256}\\n got: ${got}\\n`\n )\n return 4\n }\n process.stdout.write(\n `agentproto install: SHA-256 verified (${got.slice(0, 16)}…)\\n`\n )\n }\n await writeFile(scriptPath, buf)\n await chmod(scriptPath, 0o755)\n return spawnInherit(\"bash\", [scriptPath])\n } catch (err) {\n process.stderr.write(\n `agentproto install: curl install failed: ${err instanceof Error ? err.message : String(err)}\\n`\n )\n return 1\n } finally {\n await rm(dir, { recursive: true, force: true }).catch(() => {})\n }\n}\n\n/**\n * Download an archive, optionally verify SHA-256, extract the binary\n * named in `extract_bin`, drop it into `~/.local/bin/<id>` (or the\n * AGENTPROTO_BIN_DIR override), and chmod +x. Supports tar.gz, tgz,\n * zip via the host's `tar` and `unzip`. The CLI doesn't decide the\n * binary's final name — `extract_bin`'s basename becomes the symlink\n * name on PATH.\n */\nasync function runDownloadInstaller(opts: {\n url: string\n extractBin: string\n verifySha256?: string\n}): Promise<number> {\n const dir = await mkdtemp(join(tmpdir(), \"agentproto-dl-\"))\n try {\n const filename = opts.url.split(\"/\").pop() || \"archive.bin\"\n const archivePath = join(dir, filename)\n const res = await fetch(opts.url, { redirect: \"follow\" })\n if (!res.ok) {\n process.stderr.write(\n `agentproto install: download fetch failed: ${res.status} ${res.statusText}\\n`\n )\n return res.status\n }\n const buf = Buffer.from(await res.arrayBuffer())\n if (opts.verifySha256) {\n const got = createHash(\"sha256\").update(buf).digest(\"hex\")\n if (got !== opts.verifySha256.toLowerCase()) {\n process.stderr.write(\n `agentproto install: SHA-256 mismatch\\n expected: ${opts.verifySha256}\\n got: ${got}\\n`\n )\n return 4\n }\n }\n await writeFile(archivePath, buf)\n\n const extractDir = join(dir, \"extract\")\n await mkdir(extractDir, { recursive: true })\n let extractCode: number\n if (\n filename.endsWith(\".tar.gz\") ||\n filename.endsWith(\".tgz\") ||\n filename.endsWith(\".tar\")\n ) {\n extractCode = await spawnInherit(\"tar\", [\n \"-xf\",\n archivePath,\n \"-C\",\n extractDir,\n ])\n } else if (filename.endsWith(\".zip\")) {\n extractCode = await spawnInherit(\"unzip\", [\n \"-q\",\n archivePath,\n \"-d\",\n extractDir,\n ])\n } else {\n process.stderr.write(\n `agentproto install: unsupported archive format for ${filename}. ` +\n `Supported: .tar, .tar.gz, .tgz, .zip.\\n`\n )\n return 5\n }\n if (extractCode !== 0) return extractCode\n\n const srcBin = join(extractDir, opts.extractBin)\n const binDir =\n process.env[\"AGENTPROTO_BIN_DIR\"] ?? join(homedir(), \".local\", \"bin\")\n await mkdir(binDir, { recursive: true })\n const destBin = join(binDir, opts.extractBin.split(\"/\").pop()!)\n // Use cp -p to preserve mode bits then chmod +x to be safe.\n const cpCode = await spawnInherit(\"cp\", [\"-p\", srcBin, destBin])\n if (cpCode !== 0) return cpCode\n await chmod(destBin, 0o755)\n process.stdout.write(`agentproto install: ${destBin}\\n`)\n if (!process.env[\"PATH\"]?.includes(binDir)) {\n process.stdout.write(\n `agentproto install: ⚠ ${binDir} is not on PATH — add it to your shell profile so the binary is reachable.\\n`\n )\n }\n return 0\n } catch (err) {\n process.stderr.write(\n `agentproto install: download failed: ${err instanceof Error ? err.message : String(err)}\\n`\n )\n return 1\n } finally {\n await rm(dir, { recursive: true, force: true }).catch(() => {})\n }\n}\n\nfunction homedir(): string {\n return process.env[\"HOME\"] ?? process.env[\"USERPROFILE\"] ?? \"/\"\n}\n\nfunction spawnInherit(cmd: string, argv: string[]): Promise<number> {\n return new Promise((resolve, reject) => {\n const child = spawn(cmd, argv, { stdio: \"inherit\" })\n child.once(\"error\", reject)\n child.once(\"exit\", (code) => resolve(code ?? 0))\n })\n}\n\nasync function runVersionCheck(\n check: Awaited<\n ReturnType<typeof resolveAdapter>\n >[\"handle\"][\"version_check\"]\n): Promise<{ ok: boolean; message: string }> {\n if (!check) return { ok: false, message: \"no version_check declared\" }\n return new Promise((resolve) => {\n const child = spawn(\"bash\", [\"-lc\", check.cmd], {\n stdio: [\"ignore\", \"pipe\", \"ignore\"],\n })\n let buf = \"\"\n child.stdout.on(\"data\", (c: Buffer) => {\n buf += c.toString(\"utf8\")\n })\n child.once(\"error\", () => resolve({ ok: false, message: \"check failed\" }))\n child.once(\"exit\", (code) => {\n if (code !== 0) {\n resolve({ ok: false, message: `check exited ${code}` })\n return\n }\n const re = new RegExp(check.parse)\n const m = buf.match(re)\n if (!m || !m[1]) {\n resolve({ ok: false, message: \"could not parse version\" })\n return\n }\n // semver-range matching is left to a future helper; we report\n // the captured version and trust it. --force remains the\n // escape hatch when range gating actually matters.\n resolve({ ok: true, message: `version ${m[1]}` })\n })\n })\n}\n","/**\n * Read piped stdin to a string. Returns null if stdin is a TTY (no pipe).\n * Used by `agentproto run` to accept prompts via:\n * echo \"summarise this repo\" | agentproto run claude-code\n */\n\nexport async function readStdinIfPiped(): Promise<string | null> {\n if (process.stdin.isTTY) return null\n const chunks: Buffer[] = []\n for await (const chunk of process.stdin) {\n chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk))\n }\n const text = Buffer.concat(chunks).toString(\"utf8\").trim()\n return text.length > 0 ? text : null\n}\n","/**\n * `agentproto run <slug> [--cwd <dir>] [--prompt <text>] [--resume <id>]`\n *\n * Boots the named adapter, dispatches a single user turn, streams events\n * to stdout, then exits. Designed for two use-cases:\n * - one-shot scripting (pipe a prompt in, get stream back)\n * - quick smoke-test from a fresh checkout (\"does claude even spawn?\")\n *\n * Long-lived multiplexing belongs to `agentproto serve`, not here.\n */\n\nimport { resolve as resolvePath } from \"node:path\"\nimport { parseArgs } from \"node:util\"\nimport {\n createAgentCliRuntime,\n type AgentCliRuntimeSession,\n type StreamEvent,\n} from \"@agentproto/driver-agent-cli\"\nimport { resolveAdapter } from \"../registry/resolve.js\"\nimport { readStdinIfPiped } from \"../util/stdin.js\"\n\nexport async function runRun(args: readonly string[]): Promise<number> {\n const { values, positionals } = parseArgs({\n args: [...args],\n allowPositionals: true,\n strict: true,\n options: {\n cwd: { type: \"string\" },\n prompt: { type: \"string\", short: \"p\" },\n resume: { type: \"string\" },\n json: { type: \"boolean\" },\n },\n })\n\n const slug = positionals[0]\n if (!slug) {\n process.stderr.write(\n \"agentproto run: missing adapter slug. Try: agentproto run claude-code\\n\"\n )\n return 2\n }\n\n const cwd = values.cwd ? resolvePath(values.cwd) : process.cwd()\n const promptArg = values.prompt ?? (await readStdinIfPiped())\n if (!promptArg) {\n process.stderr.write(\n \"agentproto run: no prompt provided. Pass --prompt or pipe one over stdin.\\n\"\n )\n return 2\n }\n\n const adapter = await resolveAdapter(slug)\n const runtime = createAgentCliRuntime(adapter.handle)\n\n const controller = new AbortController()\n const onSignal = (sig: NodeJS.Signals) => {\n process.stderr.write(`\\nagentproto: received ${sig}, cancelling…\\n`)\n controller.abort()\n }\n process.once(\"SIGINT\", onSignal)\n process.once(\"SIGTERM\", onSignal)\n\n let session: AgentCliRuntimeSession | null = null\n try {\n session = await runtime.start({\n cwd,\n signal: controller.signal,\n resumeSessionId: values.resume,\n })\n\n const printer = values.json ? printJson : printPretty\n let exit = 0\n for await (const ev of session.send(promptArg)) {\n printer(ev)\n if (ev.kind === \"turn-end\" && ev.reason !== \"completed\") exit = 1\n if (ev.kind === \"error\") exit = 1\n }\n return exit\n } finally {\n process.off(\"SIGINT\", onSignal)\n process.off(\"SIGTERM\", onSignal)\n if (session) await session.close().catch(() => {})\n }\n}\n\nfunction printJson(ev: StreamEvent): void {\n process.stdout.write(`${JSON.stringify(ev)}\\n`)\n}\n\nfunction printPretty(ev: StreamEvent): void {\n switch (ev.kind) {\n case \"text-delta\":\n process.stdout.write(ev.text)\n break\n case \"thought\":\n process.stderr.write(`\\x1b[2m[thought] ${ev.text}\\x1b[0m\\n`)\n break\n case \"tool-call\":\n process.stderr.write(`\\x1b[36m[tool] ${ev.toolName}\\x1b[0m\\n`)\n break\n case \"tool-result\":\n if (ev.isError)\n process.stderr.write(`\\x1b[31m[tool-error]\\x1b[0m\\n`)\n break\n case \"agent-prompt\":\n process.stderr.write(`\\x1b[33m[agent-prompt: needs input]\\x1b[0m\\n`)\n break\n case \"turn-end\":\n process.stdout.write(`\\n\\x1b[2m[turn-end: ${ev.reason}]\\x1b[0m\\n`)\n break\n case \"error\": {\n const code =\n typeof ev.error.code === \"number\" ? ` (code ${ev.error.code})` : \"\"\n process.stderr.write(\n `\\x1b[31m[error]${code} ${ev.error.message}\\x1b[0m\\n`,\n )\n // Attached child stderr (added by define-agent-cli) — usually\n // the most useful line (\"not authenticated\", \"model gated\",\n // missing binary path). Print after the headline so the\n // headline still scans first.\n const data = ev.error.data\n if (data && typeof data === \"object\") {\n const stderr = (data as { stderr?: unknown }).stderr\n if (typeof stderr === \"string\" && stderr.trim()) {\n process.stderr.write(`\\x1b[2m── child stderr ──\\n${stderr}\\x1b[0m\\n`)\n }\n // Surface any non-stderr fields as JSON so callers don't\n // have to switch to --json to see what payload was rejected.\n const rest = { ...(data as Record<string, unknown>) }\n delete rest.stderr\n if (Object.keys(rest).length > 0) {\n process.stderr.write(\n `\\x1b[2m── error.data ──\\n${JSON.stringify(rest, null, 2)}\\x1b[0m\\n`,\n )\n }\n }\n break\n }\n }\n}\n","/**\n * Credential store for `agentproto auth login`.\n *\n * Format on disk (JSON, mode 0600):\n *\n * {\n * \"version\": 1,\n * \"hosts\": {\n * \"wss://guilde.work/api/v1/agentproto/tunnel\": {\n * \"token\": \"eyJ…\",\n * \"tokenType\": \"Bearer\",\n * \"expiresAt\": \"2026-08-08T12:34:56.000Z\",\n * \"refreshToken\": \"rt_…\", // optional\n * \"scope\": \"tunnel:connect\",\n * \"subject\": \"user_abc\",\n * \"obtainedAt\": \"2026-05-10T08:21:11.000Z\",\n * \"deviceLabel\": \"jeremy@laptop\"\n * }\n * }\n * }\n *\n * One file per *user*, multiple hosts under the same file. Hosts are\n * keyed by the URL the user passed to `agentproto auth login --host`,\n * stripped of trailing slash. `agentproto serve --connect <url>` looks\n * up the same key when no `--token` is passed.\n *\n * Storage location:\n * - `$AGENTPROTO_HOME/credentials.json`, falling back to\n * - `~/.agentproto/credentials.json`\n *\n * The file holds bearer tokens, so it's chmod'd 0600 on every write.\n * On Windows we rely on the per-user profile path being already\n * private and skip chmod. Never log the token contents.\n */\n\nimport { mkdir, readFile, writeFile, chmod, unlink } from \"node:fs/promises\"\nimport { homedir } from \"node:os\"\nimport { join, dirname } from \"node:path\"\n\nexport interface HostCredential {\n /** Bearer token. Bearer-form is the only one supported for v1. */\n token: string\n /** Always \"Bearer\" today; reserved for future schemes. */\n tokenType: \"Bearer\"\n /** ISO-8601. May be in the past — callers must check `isExpired`. */\n expiresAt: string\n /** OAuth 2.0 refresh token. Present when the host issues one. */\n refreshToken?: string\n /** Space-separated scopes the token was issued with. */\n scope?: string\n /** Human-readable subject — usually the user id, surfaced in `auth status`. */\n subject?: string\n /** ISO-8601 of when this credential was minted. */\n obtainedAt: string\n /** Friendly device label shown on the host's Machine-tokens page. */\n deviceLabel?: string\n /** Opaque revocation hint surfaced by the host (e.g. JTI). The CLI\n * passes it back on `auth logout` so the host can revoke the right\n * row server-side, not just delete the local copy. */\n revocationId?: string\n}\n\ninterface CredentialsFile {\n version: 1\n hosts: Record<string, HostCredential>\n}\n\nconst FILE_VERSION = 1 as const\n\nexport function credentialsPath(): string {\n const base = process.env[\"AGENTPROTO_HOME\"] ?? join(homedir(), \".agentproto\")\n return join(base, \"credentials.json\")\n}\n\nexport function normaliseHost(host: string): string {\n return host.replace(/\\/+$/, \"\")\n}\n\nexport async function loadCredentials(): Promise<CredentialsFile> {\n const path = credentialsPath()\n try {\n const raw = await readFile(path, \"utf8\")\n const parsed = JSON.parse(raw) as CredentialsFile\n if (parsed.version !== FILE_VERSION) {\n throw new Error(\n `credentials.json: unknown version ${parsed.version}; expected ${FILE_VERSION}. ` +\n `Delete the file and re-run \\`agentproto auth login\\`.`\n )\n }\n return parsed\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code === \"ENOENT\") {\n return { version: FILE_VERSION, hosts: {} }\n }\n throw err\n }\n}\n\nexport async function saveCredentials(file: CredentialsFile): Promise<void> {\n const path = credentialsPath()\n await mkdir(dirname(path), { recursive: true })\n await writeFile(path, JSON.stringify(file, null, 2))\n await chmod(path, 0o600).catch(() => {\n // Windows + some sandboxed FSes (e.g. WSL on a Windows mount) don't\n // honour chmod. The file lives under the user profile in those\n // cases, which is already user-private; not worth refusing.\n })\n}\n\nexport async function readHost(host: string): Promise<HostCredential | null> {\n const f = await loadCredentials()\n return f.hosts[normaliseHost(host)] ?? null\n}\n\nexport async function writeHost(\n host: string,\n cred: HostCredential\n): Promise<void> {\n const f = await loadCredentials()\n f.hosts[normaliseHost(host)] = cred\n await saveCredentials(f)\n}\n\nexport async function deleteHost(host: string): Promise<HostCredential | null> {\n const f = await loadCredentials()\n const key = normaliseHost(host)\n const prev = f.hosts[key] ?? null\n if (prev) {\n delete f.hosts[key]\n if (Object.keys(f.hosts).length === 0) {\n // Empty file is a valid state (`auth login` re-creates), but\n // unlinking is cleaner — `auth status` then prints \"no credentials\".\n await unlink(credentialsPath()).catch(() => {})\n } else {\n await saveCredentials(f)\n }\n }\n return prev\n}\n\nexport function isExpired(cred: HostCredential, gracePeriodMs = 30_000): boolean {\n const exp = Date.parse(cred.expiresAt)\n if (!Number.isFinite(exp)) return false // unparseable expiry → trust the host\n return exp - gracePeriodMs <= Date.now()\n}\n\nexport function formatExpiry(cred: HostCredential): string {\n const exp = new Date(cred.expiresAt)\n if (Number.isNaN(exp.getTime())) return \"unknown\"\n const ms = exp.getTime() - Date.now()\n if (ms < 0) return `expired ${formatRelative(-ms)} ago`\n return `expires in ${formatRelative(ms)}`\n}\n\nfunction formatRelative(ms: number): string {\n if (ms < 60_000) return `${Math.round(ms / 1000)}s`\n if (ms < 3_600_000) return `${Math.round(ms / 60_000)}m`\n if (ms < 86_400_000) return `${Math.round(ms / 3_600_000)}h`\n return `${Math.round(ms / 86_400_000)}d`\n}\n","/**\n * `agentproto serve [--workspace <dir>] [--port <n>] [--connect <wss>]`\n *\n * The single canonical agentproto daemon. Boots a local gateway\n * (HTTP + MCP server + sessions registry + workspace fs +\n * heartbeat) on `--port` (default 18790), and OPTIONALLY opens an\n * outbound WebSocket tunnel to a host (Guilde-shaped API) when\n * `--connect <url>` is set. With or without the tunnel:\n *\n * - HTTP /sessions, /sessions/agent, /sessions/:id/* routes work\n * - MCP tools (start_agent_session, prompt_agent_session, …) are\n * reachable via the daemon's /mcp transport\n * - the LocalDaemonSessionsCard in guilde-web sees every spawn\n *\n * When the tunnel is up, every tunnel-driven spawn is also adopted\n * into the gateway's sessions registry via the\n * `createTunnelServer.onChildSpawned` hook, so an operator\n * dispatching from the cloud lands in the same /sessions list as a\n * user spawning locally — single source of truth for what's running\n * on the user's machine.\n *\n * Replaces the old `playground/scripts/gateway.ts` for production\n * use (the playground keeps its own script for the MCP CRUD\n * doctype demo). v1 reuses createGateway with empty specs + a\n * noop heartbeat; the playground variant adds toolSpec/agentSpec/\n * etc. for its specific spec-authoring use case.\n *\n * Reconnect-with-backoff is built in for the tunnel. The local\n * gateway stays up across reconnects — only the tunnel cycles.\n *\n * Authorization: v0 trusts every spawn frame the host sends — there\n * is no policy file. Future work will gate spawn requests on a\n * `~/.agentproto/policy.toml` allowlist (see project_agentproto_repos\n * memory). The token is the only access control today.\n */\n\nimport { parseArgs } from \"node:util\"\nimport { hostname, userInfo } from \"node:os\"\nimport { resolve as resolvePath } from \"node:path\"\nimport { promises as fs } from \"node:fs\"\nimport {\n readHost,\n isExpired,\n formatExpiry,\n} from \"../util/credentials.js\"\nimport {\n createTunnelServer,\n wrapWebSocket,\n type FrameSink,\n} from \"@agentproto/acp/tunnel\"\nimport {\n createGateway,\n type AgentAdapterResolver,\n type GatewayHandle,\n} from \"@agentproto/runtime\"\nimport { createAgentCliRuntime } from \"@agentproto/driver-agent-cli\"\nimport {\n resolveAdapter,\n listInstalledAdapters,\n} from \"../registry/resolve.js\"\nimport WebSocket from \"ws\"\n\ninterface ServeOpts {\n /** Workspace dir. Defaults to cwd. */\n workspace: string\n /** Local HTTP port. Default 18790. */\n port: number\n /** Bind addr. Default 127.0.0.1. */\n bind: string\n /** Optional cloud WS URL. When unset, daemon runs local-only. */\n connect?: string\n token?: string\n label: string\n /** Initial reconnect delay in ms; doubled on each failure up to 30s. */\n reconnectMinMs?: number\n reconnectMaxMs?: number\n}\n\nexport async function runServe(args: readonly string[]): Promise<number> {\n const { values } = parseArgs({\n args: [...args],\n allowPositionals: false,\n strict: true,\n options: {\n connect: { type: \"string\", short: \"c\" },\n token: { type: \"string\", short: \"t\" },\n label: { type: \"string\", short: \"l\" },\n workspace: { type: \"string\", short: \"w\" },\n port: { type: \"string\", short: \"p\" },\n bind: { type: \"string\", short: \"b\" },\n },\n })\n\n // Workspace defaults to cwd. Validated below — must exist + be a\n // directory (createGateway throws on missing, but a clearer\n // message at this layer beats the stack trace).\n const workspace = resolvePath(values.workspace ?? process.cwd())\n try {\n const stat = await fs.stat(workspace)\n if (!stat.isDirectory()) {\n process.stderr.write(\n `agentproto serve: --workspace \"${workspace}\" is not a directory.\\n`\n )\n return 2\n }\n } catch {\n process.stderr.write(\n `agentproto serve: --workspace \"${workspace}\" does not exist.\\n` +\n ` Create it first: mkdir -p \"${workspace}\"\\n`\n )\n return 2\n }\n\n const port = values.port ? Number.parseInt(values.port, 10) : 18790\n if (!Number.isFinite(port) || port <= 0 || port > 65535) {\n process.stderr.write(`agentproto serve: invalid --port \"${values.port}\".\\n`)\n return 2\n }\n\n // Default label is informative — the host's UI shows it next to\n // every spawn so users know which laptop is executing what.\n const label = values.label ?? `${userInfo().username}@${hostname()}`\n\n // Token resolution precedence:\n // 1. --token <jwt> — explicit override\n // 2. $AGENTPROTO_TOKEN — env, useful for CI / docker\n // 3. ~/.agentproto/credentials.json[host] — `agentproto auth login`\n //\n // Step 3 only applies when --connect is set (we have a host to look\n // up) and the credential isn't expired. Expiry is non-fatal: we log\n // a warning and let the host reject the connect; that surfaces a\n // clearer error than a silent 401 mid-tunnel.\n let token: string | undefined = values.token ?? process.env.AGENTPROTO_TOKEN\n if (!token && values.connect) {\n const cred = await readHost(values.connect)\n if (cred) {\n if (isExpired(cred)) {\n process.stderr.write(\n `agentproto serve: ⚠ credentials for ${values.connect} are expired (${formatExpiry(cred)}). ` +\n `Re-run \\`agentproto auth login --host ${values.connect}\\`.\\n`\n )\n }\n token = cred.token\n process.stdout.write(\n `agentproto serve: using token from credentials.json (${formatExpiry(cred)})\\n`\n )\n }\n }\n\n const opts: ServeOpts = {\n workspace,\n port,\n bind: values.bind ?? \"127.0.0.1\",\n ...(values.connect ? { connect: values.connect } : {}),\n ...(token ? { token } : {}),\n label,\n }\n\n // ── adapter resolver (powers MCP start_agent_session) ──\n // Wires the cli's adapter registry into the gateway's\n // /sessions/agent route + the start_agent_session MCP tool.\n // When unwired, those routes return 501 with a clear message.\n const resolveAgentAdapter: AgentAdapterResolver = async slug => {\n try {\n const adapter = await resolveAdapter(slug)\n const runtime = createAgentCliRuntime(adapter.handle)\n return {\n async startSession({ cwd }) {\n return runtime.start({ cwd })\n },\n commandPreview:\n `${adapter.handle.bin} ${(adapter.handle.bin_args ?? []).join(\" \")}`.trim(),\n }\n } catch (err) {\n console.warn(\n `[agentproto serve] resolveAgentAdapter('${slug}') failed: ${\n err instanceof Error ? err.message : String(err)\n }`\n )\n return null\n }\n }\n\n // ── boot the gateway ──\n // Empty specs + noop buildAgent. The playground gateway script\n // still has its own setup for spec authoring + Mastra heartbeat.\n let gateway: GatewayHandle\n try {\n gateway = await createGateway({\n workspace: opts.workspace,\n port: opts.port,\n bind: opts.bind,\n specs: [],\n name: \"agentproto-serve\",\n // BOOT.md is silly for a tunnel daemon — skip it.\n boot: false,\n resolveAgentAdapter,\n // Discovery for UIs / operators — `GET /adapters` + `list_adapters`\n // MCP tool. Walks node_modules @agentproto/adapter-* on each call;\n // cheap enough that we don't bother caching here.\n listAgentAdapters: listInstalledAdapters,\n })\n } catch (err) {\n process.stderr.write(\n `agentproto serve: gateway boot failed — ${\n err instanceof Error ? err.message : String(err)\n }\\n`\n )\n return 1\n }\n\n process.stderr.write(\n `agentproto serve: gateway up on ${gateway.url}\\n` +\n ` workspace: ${gateway.workspace}\\n` +\n ` mcp: ${gateway.url}/mcp\\n` +\n ` sessions: ${gateway.url}/sessions\\n` +\n ` events: ${gateway.url}/events\\n`\n )\n\n // ── shutdown wiring (covers both local-only and tunnel modes) ──\n const aborter = new AbortController()\n let shuttingDown = false\n const shutdown = async (signal: NodeJS.Signals): Promise<void> => {\n if (shuttingDown) return\n shuttingDown = true\n process.stderr.write(`\\nagentproto serve: ${signal} — shutting down.\\n`)\n aborter.abort()\n await gateway.stop().catch(() => undefined)\n process.exit(0)\n }\n process.once(\"SIGINT\", () => void shutdown(\"SIGINT\"))\n process.once(\"SIGTERM\", () => void shutdown(\"SIGTERM\"))\n\n // ── local-only mode: nothing else to do ──\n if (!opts.connect) {\n process.stderr.write(\n `agentproto serve: running local-only (no --connect). Press Ctrl-C to stop.\\n`\n )\n // Park indefinitely until shutdown signal.\n await new Promise<void>(resolve => {\n aborter.signal.addEventListener(\"abort\", () => resolve())\n })\n return 0\n }\n\n // ── tunnel mode: connect-loop + onChildSpawned bridge ──\n process.stderr.write(\n `agentproto serve: tunnel — connecting to ${opts.connect} as '${opts.label}'…\\n`\n )\n\n let backoffMs = opts.reconnectMinMs ?? 1_000\n const backoffMax = opts.reconnectMaxMs ?? 30_000\n while (!aborter.signal.aborted) {\n try {\n await runOneTunnel(opts, gateway, aborter.signal)\n backoffMs = opts.reconnectMinMs ?? 1_000 // success resets backoff\n } catch (err) {\n if (aborter.signal.aborted) break\n const msg = err instanceof Error ? err.message : String(err)\n process.stderr.write(\n `agentproto serve: tunnel error: ${msg}\\n reconnecting in ${backoffMs}ms…\\n`\n )\n await sleep(backoffMs, aborter.signal)\n backoffMs = Math.min(backoffMs * 2, backoffMax)\n }\n }\n\n return 0\n}\n\n/**\n * One end-to-end tunnel attempt. Resolves when the socket closes\n * cleanly (host hung up); rejects on connection error or unexpected\n * close. The reconnect loop catches both and retries.\n */\nasync function runOneTunnel(\n opts: ServeOpts,\n gateway: GatewayHandle,\n signal: AbortSignal\n): Promise<void> {\n if (!opts.connect) throw new Error(\"runOneTunnel: --connect not set\")\n const headers: Record<string, string> = {\n \"user-agent\": \"agentproto/0.1.0-alpha\",\n }\n if (opts.token) headers.authorization = `Bearer ${opts.token}`\n\n const ws = new WebSocket(opts.connect, { headers })\n\n // Wait for OPEN (or fail).\n await new Promise<void>((resolve, reject) => {\n const onOpen = () => {\n ws.off(\"error\", onError)\n resolve()\n }\n const onError = (err: Error) => {\n ws.off(\"open\", onOpen)\n reject(err)\n }\n ws.once(\"open\", onOpen)\n ws.once(\"error\", onError)\n if (signal.aborted) {\n ws.close()\n reject(new Error(\"Aborted before WS opened.\"))\n }\n signal.addEventListener(\"abort\", () => {\n ws.close()\n reject(new Error(\"Aborted while WS connecting.\"))\n })\n })\n\n process.stderr.write(`agentproto serve: tunnel up.\\n`)\n\n const sink: FrameSink = wrapWebSocket(ws as unknown as Parameters<typeof wrapWebSocket>[0])\n const server = createTunnelServer({\n sink,\n label: opts.label,\n pty: false,\n // v0 authorize hook: trust the bearer-authenticated host completely.\n // Token possession proves the host was provisioned for this daemon.\n // Per-spawn policy filtering will land alongside the policy.toml.\n authorize: req => req,\n // ── AIP-46 bridge: tunnel spawns land in the gateway registry ──\n // Every cloud-driven spawn shows up in `gateway.url/sessions`\n // and the LocalDaemonSessionsCard, alongside spawns originated\n // through MCP tools or POST /sessions/agent. The execId is the\n // host's stable id — keep it so cloud cli_sessions rows can\n // cross-ref the daemon-side descriptor.\n onChildSpawned: ({ execId, child, request }) => {\n gateway.sessions.register({\n id: execId,\n child,\n workspaceSlug: opts.label,\n command: [request.command, ...request.args].join(\" \"),\n kind: \"agent-cli\",\n label: `tunnel: ${request.command.split(\"/\").pop() ?? request.command}`,\n })\n },\n })\n\n // Block until the sink closes (peer disconnect or our shutdown).\n await new Promise<void>(resolve => {\n const offClose = sink.onClose(() => {\n offClose()\n resolve()\n })\n if (signal.aborted) {\n server.close().finally(() => resolve())\n }\n signal.addEventListener(\"abort\", () => {\n server.close().finally(() => resolve())\n })\n })\n\n process.stderr.write(`agentproto serve: tunnel closed.\\n`)\n}\n\nfunction sleep(ms: number, signal: AbortSignal): Promise<void> {\n return new Promise(resolve => {\n if (signal.aborted) return resolve()\n const timer = setTimeout(resolve, ms)\n signal.addEventListener(\"abort\", () => {\n clearTimeout(timer)\n resolve()\n })\n })\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agentproto/cli",
|
|
3
|
-
"version": "0.1.0-alpha.
|
|
3
|
+
"version": "0.1.0-alpha.2",
|
|
4
4
|
"description": "@agentproto/cli — the `agentproto` binary. Install AIP-45 agent CLI adapters, run them locally, or expose them over a tunnel as a long-running daemon. Reference host for hermes / claude-code / opencode / gemini-cli / goose, all driven through @agentproto/driver-agent-cli.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"agentproto",
|
|
@@ -42,30 +42,32 @@
|
|
|
42
42
|
"dist",
|
|
43
43
|
"README.md"
|
|
44
44
|
],
|
|
45
|
+
"scripts": {
|
|
46
|
+
"build": "tsup",
|
|
47
|
+
"dev": "tsup --watch",
|
|
48
|
+
"clean": "rm -rf dist",
|
|
49
|
+
"check-types": "tsc --noEmit",
|
|
50
|
+
"test": "vitest run --passWithNoTests",
|
|
51
|
+
"test:watch": "vitest",
|
|
52
|
+
"prepublishOnly": "pnpm build"
|
|
53
|
+
},
|
|
45
54
|
"dependencies": {
|
|
46
|
-
"
|
|
47
|
-
"@agentproto/driver-agent-cli": "
|
|
48
|
-
"@agentproto/
|
|
55
|
+
"@agentproto/acp": "workspace:*",
|
|
56
|
+
"@agentproto/driver-agent-cli": "workspace:*",
|
|
57
|
+
"@agentproto/runtime": "workspace:0.1.0-alpha.0",
|
|
58
|
+
"ws": "^8.20.0"
|
|
49
59
|
},
|
|
50
60
|
"devDependencies": {
|
|
51
|
-
"@
|
|
52
|
-
"@
|
|
61
|
+
"@agentproto/adapter-claude-code": "workspace:*",
|
|
62
|
+
"@agentproto/adapter-hermes": "workspace:*",
|
|
63
|
+
"@agentproto/tooling": "workspace:*",
|
|
64
|
+
"@types/node": "^25.6.2",
|
|
65
|
+
"@types/ws": "^8.18.1",
|
|
53
66
|
"tsup": "^8.5.1",
|
|
54
67
|
"typescript": "^5.9.3",
|
|
55
|
-
"vitest": "^3.2.4"
|
|
56
|
-
"@agentproto/adapter-claude-code": "0.1.0-alpha.0",
|
|
57
|
-
"@agentproto/tooling": "0.1.0-alpha.0",
|
|
58
|
-
"@agentproto/adapter-hermes": "0.1.0-alpha.0"
|
|
68
|
+
"vitest": "^3.2.4"
|
|
59
69
|
},
|
|
60
70
|
"engines": {
|
|
61
71
|
"node": ">=20.9.0"
|
|
62
|
-
},
|
|
63
|
-
"scripts": {
|
|
64
|
-
"build": "tsup",
|
|
65
|
-
"dev": "tsup --watch",
|
|
66
|
-
"clean": "rm -rf dist",
|
|
67
|
-
"check-types": "tsc --noEmit",
|
|
68
|
-
"test": "vitest run --passWithNoTests",
|
|
69
|
-
"test:watch": "vitest"
|
|
70
72
|
}
|
|
71
|
-
}
|
|
73
|
+
}
|