zidane 5.13.1 → 5.13.3

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.
Files changed (40) hide show
  1. package/README.md +8 -2
  2. package/dist/{acp-CEE6C0m_.js → acp-BqIU2mo-.js} +109 -12
  3. package/dist/acp-BqIU2mo-.js.map +1 -0
  4. package/dist/acp-cli.js +164 -26
  5. package/dist/acp-cli.js.map +1 -1
  6. package/dist/acp.d.ts +41 -2
  7. package/dist/acp.d.ts.map +1 -1
  8. package/dist/acp.js +1 -1
  9. package/dist/chat.js +3 -2
  10. package/dist/chat.js.map +1 -1
  11. package/dist/eval.js +2 -2
  12. package/dist/{headless-Bz1SpTB-.js → headless-0O6HMNBQ.js} +5 -5
  13. package/dist/{headless-Bz1SpTB-.js.map → headless-0O6HMNBQ.js.map} +1 -1
  14. package/dist/headless.js +1 -1
  15. package/dist/index.js +6 -6
  16. package/dist/{messages-CGazSyTL.js → messages-DEsLGBB9.js} +2 -2
  17. package/dist/{messages-CGazSyTL.js.map → messages-DEsLGBB9.js.map} +1 -1
  18. package/dist/output/stream-json.js +1 -1
  19. package/dist/{presets-5IGiSsxm.js → presets-HDIxliiq.js} +2 -2
  20. package/dist/{presets-5IGiSsxm.js.map → presets-HDIxliiq.js.map} +1 -1
  21. package/dist/presets.js +1 -1
  22. package/dist/{providers-DMPAmUuY.js → providers-Cz-RNYZO.js} +2 -2
  23. package/dist/{providers-DMPAmUuY.js.map → providers-Cz-RNYZO.js.map} +1 -1
  24. package/dist/providers.js +2 -2
  25. package/dist/{session-B69BQSn1.js → session-BDWZZaYa.js} +2 -2
  26. package/dist/{session-B69BQSn1.js.map → session-BDWZZaYa.js.map} +1 -1
  27. package/dist/session.js +2 -2
  28. package/dist/{tools-CfS7rjuh.js → tools-DhzKzB1y.js} +2 -2
  29. package/dist/{tools-CfS7rjuh.js.map → tools-DhzKzB1y.js.map} +1 -1
  30. package/dist/tools.js +1 -1
  31. package/dist/{transcript-anchors-B_a1edre.js → transcript-anchors-Cq-8gx8u.js} +7 -1415
  32. package/dist/transcript-anchors-Cq-8gx8u.js.map +1 -0
  33. package/dist/tui.js +6 -5
  34. package/dist/tui.js.map +1 -1
  35. package/dist/xdg-zlSeVBhQ.js +1417 -0
  36. package/dist/xdg-zlSeVBhQ.js.map +1 -0
  37. package/docs/ACP.md +77 -1
  38. package/package.json +1 -1
  39. package/dist/acp-CEE6C0m_.js.map +0 -1
  40. package/dist/transcript-anchors-B_a1edre.js.map +0 -1
package/dist/acp-cli.js CHANGED
@@ -1,17 +1,66 @@
1
1
  #!/usr/bin/env bun
2
- import { b as openaiCompat } from "./messages-CGazSyTL.js";
2
+ import { b as openaiCompat } from "./messages-DEsLGBB9.js";
3
3
  import { n as createSandboxContext, r as createProcessContext } from "./contexts-DHi8LPCp.js";
4
- import { i as basic_default } from "./presets-5IGiSsxm.js";
5
- import "./session-B69BQSn1.js";
6
- import { f as arcee, i as openai, l as cerebras, p as anthropic, r as openrouter, t as xai, u as baseten } from "./providers-DMPAmUuY.js";
7
- import { t as runAcpStdioServer } from "./acp-CEE6C0m_.js";
4
+ import { i as basic_default } from "./presets-HDIxliiq.js";
5
+ import "./session-BDWZZaYa.js";
6
+ import { f as arcee, i as openai, l as cerebras, p as anthropic, r as openrouter, t as xai, u as baseten } from "./providers-Cz-RNYZO.js";
7
+ import { t as runAcpStdioServer } from "./acp-BqIU2mo-.js";
8
+ import { f as credKeyOf, i as readCredentials, l as BUILTIN_PROVIDERS, r as credentialsPath, t as resolveStorageDirs } from "./xdg-zlSeVBhQ.js";
8
9
  import { createDaytonaProvider } from "./contexts/daytona.js";
9
10
  import { createDockerContext } from "./contexts/docker.js";
10
11
  import { createE2BProvider } from "./contexts/e2b.js";
11
12
  import "./session/sqlite.js";
12
13
  import { basename } from "node:path";
13
- import { readFileSync } from "node:fs";
14
+ import { existsSync, readFileSync } from "node:fs";
14
15
  import { parseArgs } from "node:util";
16
+ //#region src/acp/credential-bridge.ts
17
+ /**
18
+ * Bridge the user's existing zidane credential store into the process
19
+ * environment so the ACP agent authenticates with the SAME login the TUI /
20
+ * `zidane auth` already set up — no secrets in the editor's `settings.json`.
21
+ *
22
+ * ACP gives the client (e.g. Zed) no way to forward its own provider API keys
23
+ * to an external agent: provider/auth is agent-owned. The only client-driven
24
+ * channel is the `agent_servers.<name>.env` block, i.e. literal secrets in
25
+ * settings. This bridge removes that need by reading the on-disk store the rest
26
+ * of zidane manages:
27
+ *
28
+ * - OAuth providers (Anthropic / OpenAI Codex / xAI): point
29
+ * `ZIDANE_CREDENTIALS_PATH` at the store so the harness providers read and
30
+ * refresh from it.
31
+ * - API-key providers (OpenRouter / Cerebras / Baseten / Arcee / …): inject
32
+ * the stored key into the provider's env var.
33
+ *
34
+ * Precedence is "explicit env wins": an env var already set (e.g. by the
35
+ * editor's `env` block) is never overwritten — the store only FILLS GAPS. The
36
+ * whole bridge no-ops when `ZIDANE_CREDENTIALS_PATH` is already set (the caller
37
+ * is managing credentials explicitly) or when no store file exists (so
38
+ * `~/.credentials.json` from a legacy `bun run auth` keeps working untouched).
39
+ */
40
+ /**
41
+ * Apply the stored credentials to `env`. Returns the bridged file path, or
42
+ * `null` when nothing was applied (no store, or an explicit path override).
43
+ */
44
+ function bridgeStoredCredentials(options = {}) {
45
+ const env = options.env ?? process.env;
46
+ if (env.ZIDANE_CREDENTIALS_PATH) return null;
47
+ const dataDir = options.dataDir ?? resolveStorageDirs({ env }).configDir;
48
+ const path = credentialsPath(dataDir);
49
+ if (!existsSync(path)) return null;
50
+ env.ZIDANE_CREDENTIALS_PATH = path;
51
+ const creds = readCredentials(dataDir);
52
+ for (const descriptor of Object.values(BUILTIN_PROVIDERS)) {
53
+ const cred = creds[credKeyOf(descriptor)];
54
+ if (cred?.kind !== "apikey") continue;
55
+ if (descriptor.envKey && cred.value && !env[descriptor.envKey]) env[descriptor.envKey] = cred.value;
56
+ for (const field of descriptor.customFields ?? []) {
57
+ const value = cred.customFields?.[field.key];
58
+ if (value && !env[field.envVar]) env[field.envVar] = value;
59
+ }
60
+ }
61
+ return path;
62
+ }
63
+ //#endregion
15
64
  //#region src/start/shared-options.ts
16
65
  const validThinkingLevels = [
17
66
  "off",
@@ -142,9 +191,6 @@ function parseStartArgValues(argv, options) {
142
191
  throw new StartUsageError(`${err instanceof Error ? err.message : String(err)}\n\nRun with --help for usage.`);
143
192
  }
144
193
  }
145
- function parseStartLocalOptions(argv, config = {}) {
146
- return buildStartLocalOptions(parseStartArgValues(argv, startLocalArgOptions), config);
147
- }
148
194
  /** Assemble {@link StartLocalOptions} from already-parsed argv values. */
149
195
  function buildStartLocalOptions(values, config = {}) {
150
196
  const { requirePrompt = true, usage = startLocalUsage } = config;
@@ -490,30 +536,42 @@ function readHeadersEnv(envName) {
490
536
  }
491
537
  //#endregion
492
538
  //#region src/acp-cli.ts
539
+ const acpArgOptions = {
540
+ "models": { type: "string" },
541
+ "model-option": {
542
+ type: "string",
543
+ multiple: true
544
+ },
545
+ "no-credential-store": {
546
+ type: "boolean",
547
+ default: false
548
+ }
549
+ };
493
550
  async function main() {
494
- if (isHelp(Bun.argv.slice(2))) {
551
+ const argv = Bun.argv.slice(2);
552
+ if (isHelp(argv)) {
495
553
  process.stdout.write(`${usage()}\n`);
496
554
  return;
497
555
  }
498
- const options = parseStartLocalOptions(Bun.argv.slice(2), {
556
+ const values = parseStartArgValues(argv, {
557
+ ...startLocalArgOptions,
558
+ ...acpArgOptions
559
+ });
560
+ const options = buildStartLocalOptions(values, {
499
561
  requirePrompt: false,
500
562
  usage
501
563
  });
502
- const provider = createStartProvider({
503
- provider: options.provider,
504
- model: options.model,
505
- baseURL: options.baseURL,
506
- apiKeyEnv: options.apiKeyEnv,
507
- headersEnv: options.headersEnv,
508
- extraHeaders: options.extraHeaders,
509
- vision: options.vision,
510
- imageInToolResult: options.imageInToolResult,
511
- temperature: options.temperature,
512
- seed: options.seed
513
- });
514
- const store = options.sessionDb ? (await import("./session/sqlite.js")).createSqliteStore({ path: options.sessionDb }) : void 0;
564
+ if (values["no-credential-store"] !== true) {
565
+ const bridged = bridgeStoredCredentials();
566
+ if (bridged) process.stderr.write(`[zidane-acp] using stored credentials from ${bridged}\n`);
567
+ }
568
+ const registry = buildModelRegistry(options, values);
569
+ const store = options.sessionDb ? (await import("./session/sqlite.js")).createTuiStore(options.sessionDb) : void 0;
515
570
  const handle = runAcpStdioServer({
516
- provider,
571
+ ...registry ? {
572
+ models: registry.models,
573
+ ...registry.defaultModelId ? { defaultModelId: registry.defaultModelId } : {}
574
+ } : { provider: buildBaseProvider(options) },
517
575
  model: options.model,
518
576
  preset: resolvePreset(options.preset),
519
577
  system: options.system,
@@ -555,15 +613,95 @@ function usage() {
555
613
  "Common options:",
556
614
  " --provider anthropic|openai|openrouter|cerebras|xai|arcee|baseten|local|openai-compat",
557
615
  " --model <id>",
616
+ " --models <id,id,...> advertise a model selector (all on --provider)",
617
+ " --model-option provider:model[:label] add a cross-provider selectable model (repeatable)",
558
618
  " --context process|docker|e2b|daytona",
559
619
  " --cwd <path>",
560
620
  " --session-db <path>",
561
- " --mcp <json>"
621
+ " --mcp <json>",
622
+ " --no-credential-store ignore ~/.zidane credentials; use only env",
623
+ "",
624
+ "With --models / --model-option, ACP clients (e.g. Zed) can switch models at",
625
+ "runtime; each model resolves its own provider credentials when first selected.",
626
+ "",
627
+ "Credentials: by default zidane-acp reads Zidane's app credential store",
628
+ "(~/.zidane/credentials.json), so no API keys are needed in the editor config.",
629
+ "Explicit env vars always win."
562
630
  ].join("\n");
563
631
  }
564
632
  function isHelp(argv) {
565
633
  return argv.includes("--help") || argv.includes("-h");
566
634
  }
635
+ /** Build a `createStartProvider` config from the parsed CLI options. */
636
+ function providerConfig(options, provider, model) {
637
+ return {
638
+ provider,
639
+ model,
640
+ baseURL: options.baseURL,
641
+ apiKeyEnv: options.apiKeyEnv,
642
+ headersEnv: options.headersEnv,
643
+ extraHeaders: options.extraHeaders,
644
+ vision: options.vision,
645
+ imageInToolResult: options.imageInToolResult,
646
+ temperature: options.temperature,
647
+ seed: options.seed
648
+ };
649
+ }
650
+ function buildBaseProvider(options) {
651
+ return createStartProvider(providerConfig(options, options.provider, options.model));
652
+ }
653
+ /**
654
+ * Assemble the selectable-model registry from `--model-option` (cross-provider,
655
+ * each lazily building its own provider) and `--models` (same `--provider`,
656
+ * sharing one provider instance). Returns `undefined` when neither flag is set
657
+ * so the caller falls back to a single provider.
658
+ */
659
+ function buildModelRegistry(options, values) {
660
+ const modelsFlag = values.models?.trim();
661
+ const modelOptionFlags = values["model-option"] ?? [];
662
+ if (!modelsFlag && modelOptionFlags.length === 0) return void 0;
663
+ const choices = [];
664
+ for (const raw of modelOptionFlags) choices.push(parseModelOption(raw, options));
665
+ if (modelsFlag) {
666
+ const models = modelsFlag.split(",").map((model) => model.trim()).filter(Boolean);
667
+ if (models.length === 0) throw new StartUsageError("--models must list at least one model id.");
668
+ const baseProvider = buildBaseProvider(options);
669
+ for (const model of models) choices.push({
670
+ id: model,
671
+ name: model,
672
+ model,
673
+ provider: baseProvider
674
+ });
675
+ }
676
+ const seen = /* @__PURE__ */ new Set();
677
+ for (const choice of choices) {
678
+ if (seen.has(choice.id)) throw new StartUsageError(`Duplicate model id "${choice.id}" across --models / --model-option.`);
679
+ seen.add(choice.id);
680
+ }
681
+ return {
682
+ models: choices,
683
+ defaultModelId: options.model && choices.find((choice) => choice.id === options.model || choice.model === options.model)?.id || choices[0].id
684
+ };
685
+ }
686
+ function parseModelOption(raw, options) {
687
+ const parts = raw.split(":");
688
+ if (parts.length < 2 || !parts[0] || !parts[1]) throw new StartUsageError(`--model-option must be "provider:model[:label]", got '${raw}'.`);
689
+ const providerName = parts[0];
690
+ if (!startProviderNames.includes(providerName)) throw new StartUsageError(`--model-option provider must be one of ${startProviderNames.join("|")}, got '${providerName}'.`);
691
+ const model = parts[1];
692
+ const label = parts.slice(2).join(":").trim() || void 0;
693
+ const isLocal = providerName === "local" || providerName === "openai-compat";
694
+ const provider = () => createStartProvider(isLocal ? providerConfig(options, providerName, model) : {
695
+ provider: providerName,
696
+ model
697
+ });
698
+ return {
699
+ id: `${providerName}:${model}`,
700
+ name: label ?? model,
701
+ model,
702
+ provider
703
+ };
704
+ }
567
705
  main().catch((err) => {
568
706
  if (err instanceof StartUsageError) process.stderr.write(`${err.message}\n`);
569
707
  else process.stderr.write(`ACP server error: ${err instanceof Error ? err.message : String(err)}\n`);
@@ -1 +1 @@
1
- {"version":3,"file":"acp-cli.js","names":[],"sources":["../src/start/shared-options.ts","../src/cli-shared.ts","../src/start/options.ts","../src/acp-cli.ts"],"sourcesContent":["import type { ParseArgsConfig } from 'node:util'\nimport type { McpServerConfig, ThinkingLevel } from '../types'\nimport { readFileSync } from 'node:fs'\nimport { basename } from 'node:path'\nimport { parseArgs } from 'node:util'\n\nexport const validThinkingLevels = ['off', 'minimal', 'low', 'medium', 'high', 'xhigh', 'max', 'adaptive'] as const satisfies readonly ThinkingLevel[]\n\nexport const startProviderNames = ['anthropic', 'openai', 'openrouter', 'cerebras', 'xai', 'arcee', 'baseten', 'local', 'openai-compat'] as const\nexport type StartProviderName = typeof startProviderNames[number]\n\nexport const startPresetNames = ['basic'] as const\nexport type StartPresetName = typeof startPresetNames[number]\n\nexport const startFormatNames = ['zidane', 'provider'] as const\nexport type StartFormatName = typeof startFormatNames[number]\n\nexport interface StartLocalOptions {\n system?: string\n prompt: string\n model?: string\n baseURL?: string\n apiKeyEnv?: string\n headersEnv?: string\n extraHeaders?: Record<string, string>\n vision?: boolean\n imageInToolResult?: boolean\n temperature?: number\n seed?: number\n preset: StartPresetName\n thinking: ThinkingLevel\n provider: StartProviderName\n context: string\n image?: string\n cwd?: string\n env?: Record<string, string>\n pregame?: { name: string, content: string }\n sandboxId?: string\n sandboxOnDestroy?: 'kill' | 'pause' | 'leave'\n mcp?: McpServerConfig[]\n sessionDb?: string\n sessionId?: string\n json: boolean\n streamJson: boolean\n format: StartFormatName\n}\n\nexport interface ParseStartLocalOptionsConfig {\n requirePrompt?: boolean\n usage?: () => string\n}\n\nexport class StartUsageError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'StartUsageError'\n }\n}\n\n/**\n * The shared `bun start` / `zidane run` option table. Exported so\n * `parseStartArgs` (start CLI) can compose it with the Restate-only options\n * and parse argv ONCE — two diverging tables would let new flags silently\n * drift between the two parsers.\n */\nexport const startLocalArgOptions = {\n 'help': { type: 'boolean', short: 'h', default: false },\n 'prompt': { type: 'string', short: 'p' },\n 'model': { type: 'string', short: 'm' },\n 'preset': { type: 'string', short: 't', default: 'basic' },\n 'system': { type: 'string', short: 's' },\n 'thinking': { type: 'string', default: 'off' },\n 'provider': { type: 'string', default: 'anthropic' },\n 'base-url': { type: 'string' },\n 'api-key-env': { type: 'string' },\n 'headers-env': { type: 'string' },\n 'header': { type: 'string', multiple: true },\n 'vision': { type: 'boolean' },\n 'image-in-tool-result': { type: 'boolean' },\n 'temperature': { type: 'string' },\n 'seed': { type: 'string' },\n 'context': { type: 'string', short: 'c', default: 'process' },\n 'image': { type: 'string' },\n 'cwd': { type: 'string' },\n 'env': { type: 'string', multiple: true },\n 'pass-env': { type: 'string', multiple: true },\n 'pregame': { type: 'string' },\n 'sandbox': { type: 'string' },\n 'sandbox-on-destroy': { type: 'string' },\n 'mcp': { type: 'string' },\n 'session-db': { type: 'string' },\n 'session-id': { type: 'string' },\n 'json': { type: 'boolean', default: false },\n 'stream-json': { type: 'boolean', default: false },\n 'format': { type: 'string', default: 'zidane' },\n} as const satisfies ParseArgsConfig['options']\n\n/**\n * Strict argv parse shared by the start CLIs. `strict: true` rejects unknown\n * flags and stray positionals loudly — without it, a typo'd flag's value\n * silently leaks into the run (e.g. as a bogus prompt). Parse failures are\n * rethrown as {@link StartUsageError}.\n */\nexport function parseStartArgValues(\n argv: readonly string[],\n options: ParseArgsConfig['options'],\n): Record<string, unknown> {\n try {\n const { values } = parseArgs({\n args: [...argv],\n options,\n strict: true,\n })\n return values\n }\n catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n throw new StartUsageError(`${msg}\\n\\nRun with --help for usage.`)\n }\n}\n\nexport function parseStartLocalOptions(\n argv: readonly string[],\n config: ParseStartLocalOptionsConfig = {},\n): StartLocalOptions {\n return buildStartLocalOptions(parseStartArgValues(argv, startLocalArgOptions), config)\n}\n\n/** Assemble {@link StartLocalOptions} from already-parsed argv values. */\nexport function buildStartLocalOptions(\n values: Record<string, unknown>,\n config: ParseStartLocalOptionsConfig = {},\n): StartLocalOptions {\n const { requirePrompt = true, usage = startLocalUsage } = config\n\n if (values.help === true)\n throw new StartUsageError(usage())\n\n const prompt = values.prompt as string | undefined\n if (requirePrompt && (!prompt || prompt.trim() === ''))\n throw new StartUsageError(usage())\n\n const thinkingRaw = (values.thinking as string | undefined) || 'off'\n if (!validThinkingLevels.includes(thinkingRaw as ThinkingLevel))\n throw new Error(`Unknown thinking level: ${thinkingRaw}. Available: ${validThinkingLevels.join(', ')}`)\n\n const provider = ((values.provider as string | undefined) || 'anthropic') as StartProviderName\n if (!startProviderNames.includes(provider))\n throw new Error(`Unknown provider: ${provider}. Available: ${startProviderNames.join(', ')}`)\n\n const preset = ((values.preset as string | undefined) || 'basic') as StartPresetName\n if (!startPresetNames.includes(preset))\n throw new Error(`Unknown preset: ${preset}. Available: ${startPresetNames.join(', ')}`)\n\n if (values.json === true && values['stream-json'] === true)\n throw new StartUsageError('Use either `--json` or `--stream-json`, not both.')\n\n const format = ((values.format as string | undefined) || 'zidane') as StartFormatName\n if (!startFormatNames.includes(format))\n throw new Error(`Unknown format: ${format}. Available: ${startFormatNames.join(', ')}`)\n\n const baseURL = values['base-url'] as string | undefined\n const apiKeyEnv = values['api-key-env'] as string | undefined\n const headersEnv = values['headers-env'] as string | undefined\n const extraHeaders = parseHeaderArgs(values.header as string[] | undefined, '--header')\n const temperature = parseOptionalNumber(values.temperature as string | undefined, '--temperature')\n const seed = parseOptionalInteger(values.seed as string | undefined, '--seed')\n const env = parseEnvArgs(values.env as string[] | undefined, values['pass-env'] as string[] | undefined)\n const context = (values.context as string | undefined) || 'process'\n const pregame = loadPregame(values.pregame as string | undefined, context)\n const sandboxId = resolveSandboxId(values.sandbox as string | undefined, context)\n const sandboxOnDestroy = resolveSandboxOnDestroy(values['sandbox-on-destroy'] as string | undefined, context)\n\n return {\n system: values.system as string | undefined,\n prompt: prompt ?? '',\n model: values.model as string | undefined,\n ...(baseURL !== undefined ? { baseURL } : {}),\n ...(apiKeyEnv !== undefined ? { apiKeyEnv } : {}),\n ...(headersEnv !== undefined ? { headersEnv } : {}),\n ...(Object.keys(extraHeaders).length > 0 ? { extraHeaders } : {}),\n ...(values.vision === true ? { vision: true } : {}),\n ...(values['image-in-tool-result'] === true ? { imageInToolResult: true } : {}),\n ...(temperature !== undefined ? { temperature } : {}),\n ...(seed !== undefined ? { seed } : {}),\n preset,\n thinking: thinkingRaw as ThinkingLevel,\n provider,\n context,\n image: values.image as string | undefined,\n cwd: values.cwd as string | undefined,\n ...(Object.keys(env).length > 0 ? { env } : {}),\n ...(pregame ? { pregame } : {}),\n ...(sandboxId ? { sandboxId } : {}),\n ...(sandboxOnDestroy ? { sandboxOnDestroy } : {}),\n mcp: parseMcpConfig(values.mcp as string | undefined),\n sessionDb: values['session-db'] as string | undefined,\n sessionId: values['session-id'] as string | undefined,\n json: values.json === true,\n streamJson: values['stream-json'] === true,\n format,\n }\n}\n\nexport function startLocalUsage(): string {\n return [\n `Usage: bun start --prompt \"your message\" \\\\`,\n ` [--provider ${startProviderNames.join('|')}] [--model <id>] [--thinking ${validThinkingLevels.join('|')}]`,\n ` [--base-url <url>] [--api-key-env <NAME>] [--headers-env <NAME>] [--header 'Name: value']`,\n ` [--vision] [--image-in-tool-result] [--temperature <f>] [--seed <n>]`,\n ` [--context process|docker|e2b|daytona] [--image node:22] [--cwd /workspace]`,\n ` [--env KEY=VALUE ...] [--pass-env VARNAME ...] [--pregame setup.sh] [--sandbox <id>] [--sandbox-on-destroy kill|pause|leave]`,\n ` [--mcp '[...]'] [--session-db ./sessions.db] [--session-id <id>] [--json|--stream-json] [--format zidane|provider]`,\n ``,\n ` --stream-json streams COMPLETE TURNS as JSONL (one line per turn), then the result.`,\n ` For the full event stream (text deltas, tool calls, …) use the headless CLI's`,\n ` --output-format stream-json instead.`,\n ].join('\\n')\n}\n\n/**\n * Parse the `--mcp` argument: inline JSON (object or array) or a path to a JSON\n * file. Validates that each server declares the fields its transport requires.\n */\nexport function parseMcpConfig(raw: string | undefined): McpServerConfig[] | undefined {\n if (!raw)\n return undefined\n let text = raw.trim()\n // A value that isn't JSON is treated as a file path.\n if (!text.startsWith('[') && !text.startsWith('{'))\n text = readFileSync(text, 'utf8')\n const parsed = JSON.parse(text)\n const configs = Array.isArray(parsed) ? parsed : [parsed]\n\n for (const config of configs) {\n if (!config.name || !config.transport)\n throw new Error(`Invalid MCP config: each server needs \"name\" and \"transport\". Got: ${JSON.stringify(config)}`)\n if (config.transport === 'stdio' && !config.command)\n throw new Error(`MCP server \"${config.name}\": stdio transport requires \"command\"`)\n if ((config.transport === 'sse' || config.transport === 'streamable-http') && !config.url)\n throw new Error(`MCP server \"${config.name}\": ${config.transport} transport requires \"url\"`)\n }\n\n return configs\n}\n\nfunction parseOptionalNumber(raw: string | undefined, flag: string): number | undefined {\n if (raw === undefined)\n return undefined\n const value = Number(raw)\n if (Number.isNaN(value))\n throw new Error(`${flag} must be a number, got '${raw}'.`)\n return value\n}\n\n// `Number()` instead of `parseInt` so trailing garbage ('42x') and decimals\n// ('0.5' → 0) are rejected instead of silently truncated.\nfunction parseOptionalInteger(raw: string | undefined, flag: string): number | undefined {\n if (raw === undefined)\n return undefined\n const value = Number(raw)\n if (!Number.isInteger(value))\n throw new Error(`${flag} must be an integer, got '${raw}'.`)\n return value\n}\n\n/**\n * Build the execution-context environment from `--pass-env VARNAME` (forward\n * the named variable from the current shell) and `--env KEY=VALUE` (set a\n * value explicitly). `--pass-env` is applied first so an explicit `--env`\n * wins when both name the same key. An unset `--pass-env` variable is a hard\n * error rather than a silently-empty value.\n */\nexport function parseEnvArgs(\n envArgs: string[] | undefined,\n passEnvArgs: string[] | undefined,\n source: Record<string, string | undefined> = process.env,\n): Record<string, string> {\n const env: Record<string, string> = {}\n\n for (const name of passEnvArgs ?? []) {\n const key = name.trim()\n if (!key)\n throw new Error('--pass-env requires a variable name.')\n const value = source[key]\n if (value === undefined)\n throw new Error(`--pass-env ${key}: environment variable ${key} is not set.`)\n env[key] = value\n }\n\n for (const item of envArgs ?? []) {\n const eq = item.indexOf('=')\n const key = eq === -1 ? '' : item.slice(0, eq).trim()\n if (!key)\n throw new Error(`--env must be formatted as KEY=VALUE, got '${item}'.`)\n env[key] = item.slice(eq + 1)\n }\n\n return env\n}\n\n/**\n * Resolve the `--pregame <file>` setup script. Returns `undefined` when no path\n * is given. The script only runs in remote sandbox contexts (it's uploaded into\n * the ready sandbox before prompting); for any other context this warns and\n * ignores it rather than failing. For supported contexts the file is read\n * eagerly — consistent with `--prompt-file`/`--schema` — so a missing or\n * unreadable file surfaces as a usage error up front rather than mid-spawn.\n * The returned `name` is the basename used for the uploaded file.\n */\nexport function loadPregame(\n path: string | undefined,\n context: string,\n): { name: string, content: string } | undefined {\n if (!path)\n return undefined\n if (!supportsRemoteSandboxFlags(context)) {\n console.error(`--pregame is only supported with --context e2b or daytona; ignoring it for context '${context}'.`)\n return undefined\n }\n let content: string\n try {\n content = readFileSync(path, 'utf8')\n }\n catch (err) {\n throw new Error(`--pregame: failed to read '${path}': ${(err as Error).message}`)\n }\n return { name: basename(path), content }\n}\n\n/**\n * Resolve the `--sandbox <id>` argument. Returns `undefined` when no id is\n * given. Connecting to a pre-existing sandbox is supported by the remote\n * sandbox providers; for any other context this warns and ignores it rather\n * than failing, mirroring {@link loadPregame}. A blank value (e.g.\n * `--sandbox ''`) is treated as absent.\n */\nexport function resolveSandboxId(\n raw: string | undefined,\n context: string,\n): string | undefined {\n const id = raw?.trim()\n if (!id)\n return undefined\n if (!supportsRemoteSandboxFlags(context)) {\n console.error(`--sandbox is only supported with --context e2b or daytona; ignoring it for context '${context}'.`)\n return undefined\n }\n return id\n}\n\nconst validSandboxOnDestroyValues = ['kill', 'pause', 'leave'] as const\nexport type SandboxOnDestroyValue = typeof validSandboxOnDestroyValues[number]\n\n/**\n * Resolve the `--sandbox-on-destroy kill|pause|leave` argument. Returns\n * `undefined` when not set (the provider defaults to `'kill'` / delete).\n * Applies to remote sandbox contexts; warns and ignores for any other context,\n * mirroring {@link resolveSandboxId} and {@link loadPregame}.\n */\nexport function resolveSandboxOnDestroy(\n raw: string | undefined,\n context: string,\n): SandboxOnDestroyValue | undefined {\n const value = raw?.trim()\n if (!value)\n return undefined\n if (!supportsRemoteSandboxFlags(context)) {\n console.error(`--sandbox-on-destroy is only supported with --context e2b or daytona; ignoring it for context '${context}'.`)\n return undefined\n }\n if (!validSandboxOnDestroyValues.includes(value as SandboxOnDestroyValue))\n throw new StartUsageError(`--sandbox-on-destroy must be kill|pause|leave, got '${value}'.`)\n return value as SandboxOnDestroyValue\n}\n\nfunction supportsRemoteSandboxFlags(context: string): boolean {\n return context === 'e2b' || context === 'daytona'\n}\n\nfunction parseHeaderArgs(raw: string[] | undefined, flag: string): Record<string, string> {\n if (!raw || raw.length === 0)\n return {}\n\n const headers: Record<string, string> = {}\n for (const item of raw) {\n const colon = item.indexOf(':')\n const equals = item.indexOf('=')\n const separator = colon === -1 ? equals : equals === -1 ? colon : Math.min(colon, equals)\n if (separator <= 0)\n throw new Error(`${flag} must be formatted as \"Name: value\" or \"Name=value\".`)\n\n const name = item.slice(0, separator).trim()\n const value = item.slice(separator + 1).trim()\n if (!name || !value)\n throw new Error(`${flag} must include both a header name and value.`)\n headers[name] = value\n }\n return headers\n}\n","/**\n * Shared glue for the CLI entrypoints (`start.ts` — human renderer,\n * `headless-cli.ts` — machine contract). Both build an execution context,\n * resolve a session (memory or sqlite), and parse `--mcp` config the same way;\n * this module is the single source of truth for that wiring so the two CLIs\n * stay in lockstep without duplicating it.\n */\n\nimport type { ExecutionContext } from './contexts'\nimport type { Session } from './session'\nimport { createProcessContext, createSandboxContext } from './contexts'\nimport { createDaytonaProvider } from './contexts/daytona'\nimport { createDockerContext } from './contexts/docker'\nimport { createE2BProvider } from './contexts/e2b'\nimport { createMemoryStore, createSession, loadSession } from './session'\nimport { createSqliteStore } from './session/sqlite'\n\nexport { parseMcpConfig } from './start/shared-options'\n\n/**\n * Build the execution context for a CLI run: `process` (default), `docker`,\n * `e2b`, or `daytona`.\n *\n * The `e2b` backend reads its `E2B_API_KEY` / `E2B_DOMAIN` / `E2B_TEMPLATE`\n * from the environment (point `E2B_DOMAIN` at a self-hosted cluster, and set\n * `E2B_TEMPLATE` to a template that exists there — the default `base` does\n * not); `--cwd` becomes the sandbox working directory.\n *\n * The Daytona backend reads `DAYTONA_API_KEY` / `DAYTONA_API_URL` /\n * `DAYTONA_TARGET` from the environment. `--cwd` becomes the sandbox working\n * directory.\n *\n * `env` (from `--env` / `--pass-env`) is forwarded to whichever context is\n * selected: baked into remote sandboxes at create time, set on the Docker\n * container, or merged into the in-process command environment.\n *\n * `pregame` (from `--pregame`) is supported by the remote sandbox providers:\n * a setup script uploaded and run in the sandbox once it's ready, before\n * prompting begins.\n *\n * `sandboxId` (from `--sandbox`) attaches to a pre-existing remote sandbox\n * instead of creating a fresh one.\n */\nexport function createCliExecution(type: string, opts: { image?: string, cwd?: string, env?: Record<string, string>, pregame?: { name: string, content: string }, sandboxId?: string, sandboxOnDestroy?: 'kill' | 'pause' | 'leave' }): ExecutionContext {\n switch (type) {\n case 'docker':\n return createDockerContext({ image: opts.image, cwd: opts.cwd, env: opts.env })\n case 'e2b':\n return createSandboxContext(createE2BProvider({ cwd: opts.cwd, env: opts.env, ...(opts.pregame ? { pregame: opts.pregame } : {}), ...(opts.sandboxId ? { sandboxId: opts.sandboxId } : {}), ...(opts.sandboxOnDestroy ? { onDestroy: opts.sandboxOnDestroy } : {}) }))\n case 'daytona':\n return createSandboxContext(createDaytonaProvider({ cwd: opts.cwd, env: opts.env, ...(opts.pregame ? { pregame: opts.pregame } : {}), ...(opts.sandboxId ? { sandboxId: opts.sandboxId } : {}), ...(opts.sandboxOnDestroy ? { onDestroy: opts.sandboxOnDestroy } : {}) }))\n case 'process':\n default:\n return createProcessContext({ cwd: opts.cwd, env: opts.env })\n }\n}\n\n/**\n * Resolve the session for a CLI run.\n * - `sessionDb` set → sqlite-backed; resume `sessionId` if it exists, else\n * create it (or a fresh id when `sessionId` is omitted).\n * - `sessionDb` absent → in-memory store.\n *\n * Fresh sessions are saved immediately so the store has a header row from\n * the start — incremental `appendTurns` against a header-less sqlite store\n * would otherwise be silent no-ops, and an error / Ctrl+C before the final\n * save would lose the whole run.\n */\nexport async function createCliSession(sessionDb?: string, sessionId?: string): Promise<Session> {\n if (sessionDb) {\n const store = createSqliteStore({ path: sessionDb })\n if (sessionId) {\n const existing = await loadSession(store, sessionId)\n if (existing)\n return existing\n const session = await createSession({ store, id: sessionId })\n await session.save()\n return session\n }\n const session = await createSession({ store })\n await session.save()\n return session\n }\n return await createSession({ store: createMemoryStore() })\n}\n\n/**\n * Install SIGINT/SIGTERM handlers for a CLI run. The first signal aborts the\n * returned `AbortSignal` so the running agent can unwind cleanly (persist the\n * session, destroy execution contexts) and the process exits through the\n * normal path — which is what fires the `process.on('exit')` orphan reaper\n * for detached background process groups. A second signal force-exits\n * immediately (the synchronous 'exit' reaper still runs, but async cleanup\n * such as Docker container teardown is skipped).\n */\nexport function installCliSignalHandlers(): AbortSignal {\n const controller = new AbortController()\n const onSignal = (name: NodeJS.Signals): void => {\n if (controller.signal.aborted)\n process.exit(name === 'SIGTERM' ? 143 : 130) // 128 + signal number\n controller.abort(new Error(`Received ${name} — aborting run`))\n }\n process.on('SIGINT', () => onSignal('SIGINT'))\n process.on('SIGTERM', () => onSignal('SIGTERM'))\n return controller.signal\n}\n","import type { ParseArgsConfig } from 'node:util'\nimport type { Preset } from '../presets'\nimport type { Provider } from '../providers'\nimport type { StartLocalOptions, StartProviderName } from './shared-options'\nimport { basic } from '../presets'\nimport { anthropic, arcee, baseten, cerebras, openai, openaiCompat, openrouter, xai } from '../providers'\nimport {\n buildStartLocalOptions,\n parseStartArgValues,\n startLocalArgOptions,\n startLocalUsage,\n StartUsageError,\n} from './shared-options'\n\nexport const startProviders = {\n anthropic,\n openai,\n openrouter,\n cerebras,\n xai,\n arcee,\n baseten,\n}\n\nexport const startPresets = {\n basic,\n} as const\n\ninterface StartProviderConfig {\n provider: StartProviderName\n model?: string\n baseURL?: string\n apiKeyEnv?: string\n headersEnv?: string\n extraHeaders?: Record<string, string>\n vision?: boolean\n imageInToolResult?: boolean\n temperature?: number\n seed?: number\n}\n\ntype StartProviderInput = StartProviderName | StartProviderConfig\n\nexport interface StartOptions extends StartLocalOptions {\n restate: boolean\n restateAdminUrl: string\n restateIngressUrl: string\n restateServicePort: number\n restateDeploymentUri: string\n restateVerbose: boolean\n restateKeepAlive: boolean\n restateRandomFailure: boolean\n restateInvocationTimeoutMs?: number\n restateProviderRetryAttempts?: number\n restateToolRetryAttempts?: number\n}\n\nexport { StartUsageError }\n\nconst restateArgOptions = {\n 'restate': { type: 'boolean', default: false },\n 'restate-admin-url': { type: 'string', default: 'http://localhost:19070' },\n 'restate-ingress-url': { type: 'string', default: 'http://localhost:18080' },\n 'restate-service-port': { type: 'string', default: '19081' },\n 'restate-deployment-uri': { type: 'string' },\n 'restate-verbose': { type: 'boolean', default: false },\n 'restate-keep-alive': { type: 'boolean', default: false },\n 'restate-random-failure': { type: 'boolean', default: false },\n 'restate-invocation-timeout-ms': { type: 'string' },\n 'restate-provider-retry-attempts': { type: 'string' },\n 'restate-tool-retry-attempts': { type: 'string' },\n} as const satisfies ParseArgsConfig['options']\n\nexport function parseStartArgs(argv: readonly string[] = Bun.argv.slice(2)): StartOptions {\n // Single parse over the composed table — the shared local options plus the\n // Restate-only flags — so a flag added to one surface can't silently drift\n // out of the other.\n const values = parseStartArgValues(argv, { ...startLocalArgOptions, ...restateArgOptions })\n const local = buildStartLocalOptions(values, { usage: startUsage })\n const servicePort = parsePort(values['restate-service-port'] as string | undefined)\n const deploymentUri = values['restate-deployment-uri'] as string | undefined\n\n return {\n ...local,\n restate: values.restate === true,\n restateAdminUrl: stripTrailingSlash((values['restate-admin-url'] as string | undefined) || 'http://localhost:19070'),\n restateIngressUrl: stripTrailingSlash((values['restate-ingress-url'] as string | undefined) || 'http://localhost:18080'),\n restateServicePort: servicePort,\n restateDeploymentUri: stripTrailingSlash(deploymentUri || `http://host.docker.internal:${servicePort}`),\n restateVerbose: values['restate-verbose'] === true,\n restateKeepAlive: values['restate-keep-alive'] === true,\n restateRandomFailure: values['restate-random-failure'] === true,\n restateInvocationTimeoutMs: parseOptionalPositiveInteger(\n values['restate-invocation-timeout-ms'] as string | undefined,\n '--restate-invocation-timeout-ms',\n ),\n restateProviderRetryAttempts: parseOptionalNonNegativeInteger(\n values['restate-provider-retry-attempts'] as string | undefined,\n '--restate-provider-retry-attempts',\n ),\n restateToolRetryAttempts: parseOptionalNonNegativeInteger(\n values['restate-tool-retry-attempts'] as string | undefined,\n '--restate-tool-retry-attempts',\n ),\n }\n}\n\nexport function resolvePreset(name: string): Preset {\n const preset = startPresets[name as keyof typeof startPresets]\n if (!preset)\n throw new Error(`Unknown preset: ${name}. Available: ${Object.keys(startPresets).join(', ')}`)\n return preset\n}\n\nexport function createStartProvider(input: StartProviderInput): Provider {\n const options = typeof input === 'string' ? { provider: input } : input\n const name = options.provider\n if (name === 'local' || name === 'openai-compat')\n return createLocalCompatProvider(options, name)\n\n const providerFactory = startProviders[name]\n if (!providerFactory)\n throw new Error(`Unknown provider: ${name}. Available: ${Object.keys(startProviders).join(', ')}, local, openai-compat`)\n warnIgnoredLocalProviderOptions(options, name)\n return providerFactory()\n}\n\nexport function startUsage(): string {\n return [\n startLocalUsage(),\n ` [--restate] [--restate-admin-url <url>] [--restate-ingress-url <url>]`,\n ` [--restate-service-port <port>] [--restate-deployment-uri <url>]`,\n ` [--restate-invocation-timeout-ms <ms>] [--restate-provider-retry-attempts <n>] [--restate-tool-retry-attempts <n>]`,\n ` [--restate-keep-alive] [--restate-random-failure] [--restate-verbose]`,\n '',\n 'Subagents:',\n ' The default `basic` preset ships with the `spawn` tool — prompt the model to delegate, e.g.',\n ' bun start --prompt \"Spawn one subagent to count files in src/, another to count files in test/, then sum them\"',\n ' Subagent stream/tool/spawn events are rendered live, indented per depth.',\n ].join('\\n')\n}\n\nfunction parsePort(raw: string | undefined): number {\n const port = Number(raw || 19081)\n if (!Number.isInteger(port) || port <= 0 || port > 65_535)\n throw new Error(`Invalid --restate-service-port: ${raw}`)\n return port\n}\n\nfunction parseOptionalPositiveInteger(raw: string | undefined, name: string): number | undefined {\n if (raw === undefined)\n return undefined\n const value = Number(raw)\n if (!Number.isInteger(value) || value <= 0)\n throw new Error(`Invalid ${name}: ${raw}`)\n return value\n}\n\nfunction parseOptionalNonNegativeInteger(raw: string | undefined, name: string): number | undefined {\n if (raw === undefined)\n return undefined\n const value = Number(raw)\n if (!Number.isInteger(value) || value < 0)\n throw new Error(`Invalid ${name}: ${raw}`)\n return value\n}\n\nfunction stripTrailingSlash(value: string): string {\n return value.replace(/\\/+$/, '')\n}\n\nfunction createLocalCompatProvider(options: Partial<StartLocalOptions>, name: 'local' | 'openai-compat'): Provider {\n const baseURL = options.baseURL ?? process.env.LOCAL_LLM_BASE_URL\n if (!baseURL) {\n throw new Error(\n 'No base URL for the local provider. Pass --base-url or set LOCAL_LLM_BASE_URL '\n + '(e.g. http://localhost:11434/v1 for Ollama, http://localhost:8000/v1 for vLLM).',\n )\n }\n\n const apiKey = (options.apiKeyEnv ? process.env[options.apiKeyEnv] : undefined)\n ?? process.env.LOCAL_LLM_API_KEY\n ?? 'no-key'\n const capabilities = {\n vision: options.vision ?? false,\n imageInToolResult: options.imageInToolResult ?? false,\n }\n if (capabilities.imageInToolResult)\n capabilities.vision = true\n\n const extraBodyParams: Record<string, unknown> = {\n stream_options: { include_usage: true },\n }\n if (options.temperature !== undefined)\n extraBodyParams.temperature = options.temperature\n if (options.seed !== undefined)\n extraBodyParams.seed = options.seed\n\n return openaiCompat({\n name,\n baseURL,\n apiKey,\n extraHeaders: resolveLocalExtraHeaders(options),\n capabilities,\n ...(options.model\n ? { defaultModel: options.model }\n : process.env.LOCAL_LLM_DEFAULT_MODEL\n ? { defaultModel: process.env.LOCAL_LLM_DEFAULT_MODEL }\n : {}),\n extraBodyParams,\n })\n}\n\nfunction warnIgnoredLocalProviderOptions(options: Partial<StartLocalOptions>, provider: string): void {\n const ignored = [\n options.baseURL !== undefined ? '--base-url' : null,\n options.apiKeyEnv !== undefined ? '--api-key-env' : null,\n options.headersEnv !== undefined ? '--headers-env' : null,\n options.extraHeaders !== undefined ? '--header' : null,\n options.vision !== undefined ? '--vision' : null,\n options.imageInToolResult !== undefined ? '--image-in-tool-result' : null,\n options.temperature !== undefined ? '--temperature' : null,\n options.seed !== undefined ? '--seed' : null,\n ].filter((flag): flag is string => flag !== null)\n\n if (ignored.length > 0)\n console.error(`[start] ${ignored.join(', ')} only apply to --provider local|openai-compat; ignored for '${provider}'.`)\n}\n\nfunction resolveLocalExtraHeaders(options: Partial<StartLocalOptions>): Record<string, string> {\n return {\n ...(process.env.LOCAL_LLM_AUTHORIZATION ? { Authorization: process.env.LOCAL_LLM_AUTHORIZATION } : {}),\n ...readHeadersEnv(options.headersEnv ?? 'LOCAL_LLM_HEADERS'),\n ...(options.extraHeaders ?? {}),\n }\n}\n\nfunction readHeadersEnv(envName: string): Record<string, string> {\n const raw = process.env[envName]\n if (!raw)\n return {}\n\n let parsed: unknown\n try {\n parsed = JSON.parse(raw)\n }\n catch {\n throw new Error(`${envName} must contain a JSON object of string headers.`)\n }\n\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed))\n throw new Error(`${envName} must contain a JSON object of string headers.`)\n\n const headers: Record<string, string> = {}\n for (const [name, value] of Object.entries(parsed)) {\n if (typeof value !== 'string')\n throw new Error(`${envName} header \"${name}\" must be a string.`)\n headers[name] = value\n }\n return headers\n}\n","#!/usr/bin/env bun\n\nimport { runAcpStdioServer } from './acp'\nimport { createCliExecution } from './cli-shared'\nimport { createStartProvider, resolvePreset } from './start/options'\nimport { parseStartLocalOptions, StartUsageError } from './start/shared-options'\n\nasync function main(): Promise<void> {\n if (isHelp(Bun.argv.slice(2))) {\n process.stdout.write(`${usage()}\\n`)\n return\n }\n\n const options = parseStartLocalOptions(Bun.argv.slice(2), { requirePrompt: false, usage })\n const provider = createStartProvider({\n provider: options.provider,\n model: options.model,\n baseURL: options.baseURL,\n apiKeyEnv: options.apiKeyEnv,\n headersEnv: options.headersEnv,\n extraHeaders: options.extraHeaders,\n vision: options.vision,\n imageInToolResult: options.imageInToolResult,\n temperature: options.temperature,\n seed: options.seed,\n })\n const store = options.sessionDb\n ? (await import('./session/sqlite')).createSqliteStore({ path: options.sessionDb })\n : undefined\n\n const handle = runAcpStdioServer({\n provider,\n model: options.model,\n preset: resolvePreset(options.preset),\n system: options.system,\n store,\n // ACP mandates newline-delimited JSON over stdio. Be explicit so the\n // shipped binary stays correct regardless of library defaults.\n framing: 'newline',\n agentOptions: {\n ...(options.mcp ? { mcpServers: options.mcp } : {}),\n },\n execution: request => createCliExecution(options.context, {\n image: options.image,\n cwd: request.cwd || options.cwd,\n env: options.env,\n pregame: options.pregame,\n sandboxId: options.sandboxId,\n sandboxOnDestroy: options.sandboxOnDestroy,\n }),\n agentInfo: {\n name: 'zidane',\n title: 'Zidane',\n version: process.env.npm_package_version ?? '1',\n },\n permission: { enabled: true },\n })\n\n const shutdown = async () => {\n await handle.close()\n store?.close?.()\n }\n process.once('SIGINT', () => {\n void shutdown().finally(() => process.exit(130))\n })\n process.once('SIGTERM', () => {\n void shutdown().finally(() => process.exit(143))\n })\n}\n\nfunction usage(): string {\n return [\n 'Usage: zidane-acp [provider/context options]',\n '',\n 'Runs Zidane as an ACP v1 agent over stdio. Prompts are received through ACP session/prompt.',\n '',\n 'Common options:',\n ' --provider anthropic|openai|openrouter|cerebras|xai|arcee|baseten|local|openai-compat',\n ' --model <id>',\n ' --context process|docker|e2b|daytona',\n ' --cwd <path>',\n ' --session-db <path>',\n ' --mcp <json>',\n ].join('\\n')\n}\n\nfunction isHelp(argv: readonly string[]): boolean {\n return argv.includes('--help') || argv.includes('-h')\n}\n\nmain().catch((err) => {\n if (err instanceof StartUsageError)\n process.stderr.write(`${err.message}\\n`)\n else\n process.stderr.write(`ACP server error: ${err instanceof Error ? err.message : String(err)}\\n`)\n process.exit(1)\n})\n"],"mappings":"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"}
1
+ {"version":3,"file":"acp-cli.js","names":[],"sources":["../src/acp/credential-bridge.ts","../src/start/shared-options.ts","../src/cli-shared.ts","../src/start/options.ts","../src/acp-cli.ts"],"sourcesContent":["/**\n * Bridge the user's existing zidane credential store into the process\n * environment so the ACP agent authenticates with the SAME login the TUI /\n * `zidane auth` already set up — no secrets in the editor's `settings.json`.\n *\n * ACP gives the client (e.g. Zed) no way to forward its own provider API keys\n * to an external agent: provider/auth is agent-owned. The only client-driven\n * channel is the `agent_servers.<name>.env` block, i.e. literal secrets in\n * settings. This bridge removes that need by reading the on-disk store the rest\n * of zidane manages:\n *\n * - OAuth providers (Anthropic / OpenAI Codex / xAI): point\n * `ZIDANE_CREDENTIALS_PATH` at the store so the harness providers read and\n * refresh from it.\n * - API-key providers (OpenRouter / Cerebras / Baseten / Arcee / …): inject\n * the stored key into the provider's env var.\n *\n * Precedence is \"explicit env wins\": an env var already set (e.g. by the\n * editor's `env` block) is never overwritten — the store only FILLS GAPS. The\n * whole bridge no-ops when `ZIDANE_CREDENTIALS_PATH` is already set (the caller\n * is managing credentials explicitly) or when no store file exists (so\n * `~/.credentials.json` from a legacy `bun run auth` keeps working untouched).\n */\n\nimport { existsSync } from 'node:fs'\nimport { credentialsPath, readCredentials } from '../chat/credentials'\nimport { BUILTIN_PROVIDERS, credKeyOf } from '../chat/providers'\nimport { resolveStorageDirs } from '../chat/xdg'\n\nexport interface CredentialBridgeOptions {\n /** Environment to read/mutate. Defaults to `process.env`. */\n env?: Record<string, string | undefined>\n /** Storage dir holding `credentials.json`. Defaults to the resolved zidane data dir. */\n dataDir?: string\n}\n\n/**\n * Apply the stored credentials to `env`. Returns the bridged file path, or\n * `null` when nothing was applied (no store, or an explicit path override).\n */\nexport function bridgeStoredCredentials(options: CredentialBridgeOptions = {}): string | null {\n const env = options.env ?? process.env\n // An explicit path means the caller owns credential resolution — don't\n // second-guess it.\n if (env.ZIDANE_CREDENTIALS_PATH)\n return null\n\n const dataDir = options.dataDir ?? resolveStorageDirs({ env }).configDir\n const path = credentialsPath(dataDir)\n if (!existsSync(path))\n return null\n\n // OAuth providers resolve + refresh from this file.\n env.ZIDANE_CREDENTIALS_PATH = path\n\n const creds = readCredentials(dataDir)\n for (const descriptor of Object.values(BUILTIN_PROVIDERS)) {\n const cred = creds[credKeyOf(descriptor)]\n if (cred?.kind !== 'apikey')\n continue\n if (descriptor.envKey && cred.value && !env[descriptor.envKey])\n env[descriptor.envKey] = cred.value\n for (const field of descriptor.customFields ?? []) {\n const value = cred.customFields?.[field.key]\n if (value && !env[field.envVar])\n env[field.envVar] = value\n }\n }\n return path\n}\n","import type { ParseArgsConfig } from 'node:util'\nimport type { McpServerConfig, ThinkingLevel } from '../types'\nimport { readFileSync } from 'node:fs'\nimport { basename } from 'node:path'\nimport { parseArgs } from 'node:util'\n\nexport const validThinkingLevels = ['off', 'minimal', 'low', 'medium', 'high', 'xhigh', 'max', 'adaptive'] as const satisfies readonly ThinkingLevel[]\n\nexport const startProviderNames = ['anthropic', 'openai', 'openrouter', 'cerebras', 'xai', 'arcee', 'baseten', 'local', 'openai-compat'] as const\nexport type StartProviderName = typeof startProviderNames[number]\n\nexport const startPresetNames = ['basic'] as const\nexport type StartPresetName = typeof startPresetNames[number]\n\nexport const startFormatNames = ['zidane', 'provider'] as const\nexport type StartFormatName = typeof startFormatNames[number]\n\nexport interface StartLocalOptions {\n system?: string\n prompt: string\n model?: string\n baseURL?: string\n apiKeyEnv?: string\n headersEnv?: string\n extraHeaders?: Record<string, string>\n vision?: boolean\n imageInToolResult?: boolean\n temperature?: number\n seed?: number\n preset: StartPresetName\n thinking: ThinkingLevel\n provider: StartProviderName\n context: string\n image?: string\n cwd?: string\n env?: Record<string, string>\n pregame?: { name: string, content: string }\n sandboxId?: string\n sandboxOnDestroy?: 'kill' | 'pause' | 'leave'\n mcp?: McpServerConfig[]\n sessionDb?: string\n sessionId?: string\n json: boolean\n streamJson: boolean\n format: StartFormatName\n}\n\nexport interface ParseStartLocalOptionsConfig {\n requirePrompt?: boolean\n usage?: () => string\n}\n\nexport class StartUsageError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'StartUsageError'\n }\n}\n\n/**\n * The shared `bun start` / `zidane run` option table. Exported so\n * `parseStartArgs` (start CLI) can compose it with the Restate-only options\n * and parse argv ONCE — two diverging tables would let new flags silently\n * drift between the two parsers.\n */\nexport const startLocalArgOptions = {\n 'help': { type: 'boolean', short: 'h', default: false },\n 'prompt': { type: 'string', short: 'p' },\n 'model': { type: 'string', short: 'm' },\n 'preset': { type: 'string', short: 't', default: 'basic' },\n 'system': { type: 'string', short: 's' },\n 'thinking': { type: 'string', default: 'off' },\n 'provider': { type: 'string', default: 'anthropic' },\n 'base-url': { type: 'string' },\n 'api-key-env': { type: 'string' },\n 'headers-env': { type: 'string' },\n 'header': { type: 'string', multiple: true },\n 'vision': { type: 'boolean' },\n 'image-in-tool-result': { type: 'boolean' },\n 'temperature': { type: 'string' },\n 'seed': { type: 'string' },\n 'context': { type: 'string', short: 'c', default: 'process' },\n 'image': { type: 'string' },\n 'cwd': { type: 'string' },\n 'env': { type: 'string', multiple: true },\n 'pass-env': { type: 'string', multiple: true },\n 'pregame': { type: 'string' },\n 'sandbox': { type: 'string' },\n 'sandbox-on-destroy': { type: 'string' },\n 'mcp': { type: 'string' },\n 'session-db': { type: 'string' },\n 'session-id': { type: 'string' },\n 'json': { type: 'boolean', default: false },\n 'stream-json': { type: 'boolean', default: false },\n 'format': { type: 'string', default: 'zidane' },\n} as const satisfies ParseArgsConfig['options']\n\n/**\n * Strict argv parse shared by the start CLIs. `strict: true` rejects unknown\n * flags and stray positionals loudly — without it, a typo'd flag's value\n * silently leaks into the run (e.g. as a bogus prompt). Parse failures are\n * rethrown as {@link StartUsageError}.\n */\nexport function parseStartArgValues(\n argv: readonly string[],\n options: ParseArgsConfig['options'],\n): Record<string, unknown> {\n try {\n const { values } = parseArgs({\n args: [...argv],\n options,\n strict: true,\n })\n return values\n }\n catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n throw new StartUsageError(`${msg}\\n\\nRun with --help for usage.`)\n }\n}\n\nexport function parseStartLocalOptions(\n argv: readonly string[],\n config: ParseStartLocalOptionsConfig = {},\n): StartLocalOptions {\n return buildStartLocalOptions(parseStartArgValues(argv, startLocalArgOptions), config)\n}\n\n/** Assemble {@link StartLocalOptions} from already-parsed argv values. */\nexport function buildStartLocalOptions(\n values: Record<string, unknown>,\n config: ParseStartLocalOptionsConfig = {},\n): StartLocalOptions {\n const { requirePrompt = true, usage = startLocalUsage } = config\n\n if (values.help === true)\n throw new StartUsageError(usage())\n\n const prompt = values.prompt as string | undefined\n if (requirePrompt && (!prompt || prompt.trim() === ''))\n throw new StartUsageError(usage())\n\n const thinkingRaw = (values.thinking as string | undefined) || 'off'\n if (!validThinkingLevels.includes(thinkingRaw as ThinkingLevel))\n throw new Error(`Unknown thinking level: ${thinkingRaw}. Available: ${validThinkingLevels.join(', ')}`)\n\n const provider = ((values.provider as string | undefined) || 'anthropic') as StartProviderName\n if (!startProviderNames.includes(provider))\n throw new Error(`Unknown provider: ${provider}. Available: ${startProviderNames.join(', ')}`)\n\n const preset = ((values.preset as string | undefined) || 'basic') as StartPresetName\n if (!startPresetNames.includes(preset))\n throw new Error(`Unknown preset: ${preset}. Available: ${startPresetNames.join(', ')}`)\n\n if (values.json === true && values['stream-json'] === true)\n throw new StartUsageError('Use either `--json` or `--stream-json`, not both.')\n\n const format = ((values.format as string | undefined) || 'zidane') as StartFormatName\n if (!startFormatNames.includes(format))\n throw new Error(`Unknown format: ${format}. Available: ${startFormatNames.join(', ')}`)\n\n const baseURL = values['base-url'] as string | undefined\n const apiKeyEnv = values['api-key-env'] as string | undefined\n const headersEnv = values['headers-env'] as string | undefined\n const extraHeaders = parseHeaderArgs(values.header as string[] | undefined, '--header')\n const temperature = parseOptionalNumber(values.temperature as string | undefined, '--temperature')\n const seed = parseOptionalInteger(values.seed as string | undefined, '--seed')\n const env = parseEnvArgs(values.env as string[] | undefined, values['pass-env'] as string[] | undefined)\n const context = (values.context as string | undefined) || 'process'\n const pregame = loadPregame(values.pregame as string | undefined, context)\n const sandboxId = resolveSandboxId(values.sandbox as string | undefined, context)\n const sandboxOnDestroy = resolveSandboxOnDestroy(values['sandbox-on-destroy'] as string | undefined, context)\n\n return {\n system: values.system as string | undefined,\n prompt: prompt ?? '',\n model: values.model as string | undefined,\n ...(baseURL !== undefined ? { baseURL } : {}),\n ...(apiKeyEnv !== undefined ? { apiKeyEnv } : {}),\n ...(headersEnv !== undefined ? { headersEnv } : {}),\n ...(Object.keys(extraHeaders).length > 0 ? { extraHeaders } : {}),\n ...(values.vision === true ? { vision: true } : {}),\n ...(values['image-in-tool-result'] === true ? { imageInToolResult: true } : {}),\n ...(temperature !== undefined ? { temperature } : {}),\n ...(seed !== undefined ? { seed } : {}),\n preset,\n thinking: thinkingRaw as ThinkingLevel,\n provider,\n context,\n image: values.image as string | undefined,\n cwd: values.cwd as string | undefined,\n ...(Object.keys(env).length > 0 ? { env } : {}),\n ...(pregame ? { pregame } : {}),\n ...(sandboxId ? { sandboxId } : {}),\n ...(sandboxOnDestroy ? { sandboxOnDestroy } : {}),\n mcp: parseMcpConfig(values.mcp as string | undefined),\n sessionDb: values['session-db'] as string | undefined,\n sessionId: values['session-id'] as string | undefined,\n json: values.json === true,\n streamJson: values['stream-json'] === true,\n format,\n }\n}\n\nexport function startLocalUsage(): string {\n return [\n `Usage: bun start --prompt \"your message\" \\\\`,\n ` [--provider ${startProviderNames.join('|')}] [--model <id>] [--thinking ${validThinkingLevels.join('|')}]`,\n ` [--base-url <url>] [--api-key-env <NAME>] [--headers-env <NAME>] [--header 'Name: value']`,\n ` [--vision] [--image-in-tool-result] [--temperature <f>] [--seed <n>]`,\n ` [--context process|docker|e2b|daytona] [--image node:22] [--cwd /workspace]`,\n ` [--env KEY=VALUE ...] [--pass-env VARNAME ...] [--pregame setup.sh] [--sandbox <id>] [--sandbox-on-destroy kill|pause|leave]`,\n ` [--mcp '[...]'] [--session-db ./sessions.db] [--session-id <id>] [--json|--stream-json] [--format zidane|provider]`,\n ``,\n ` --stream-json streams COMPLETE TURNS as JSONL (one line per turn), then the result.`,\n ` For the full event stream (text deltas, tool calls, …) use the headless CLI's`,\n ` --output-format stream-json instead.`,\n ].join('\\n')\n}\n\n/**\n * Parse the `--mcp` argument: inline JSON (object or array) or a path to a JSON\n * file. Validates that each server declares the fields its transport requires.\n */\nexport function parseMcpConfig(raw: string | undefined): McpServerConfig[] | undefined {\n if (!raw)\n return undefined\n let text = raw.trim()\n // A value that isn't JSON is treated as a file path.\n if (!text.startsWith('[') && !text.startsWith('{'))\n text = readFileSync(text, 'utf8')\n const parsed = JSON.parse(text)\n const configs = Array.isArray(parsed) ? parsed : [parsed]\n\n for (const config of configs) {\n if (!config.name || !config.transport)\n throw new Error(`Invalid MCP config: each server needs \"name\" and \"transport\". Got: ${JSON.stringify(config)}`)\n if (config.transport === 'stdio' && !config.command)\n throw new Error(`MCP server \"${config.name}\": stdio transport requires \"command\"`)\n if ((config.transport === 'sse' || config.transport === 'streamable-http') && !config.url)\n throw new Error(`MCP server \"${config.name}\": ${config.transport} transport requires \"url\"`)\n }\n\n return configs\n}\n\nfunction parseOptionalNumber(raw: string | undefined, flag: string): number | undefined {\n if (raw === undefined)\n return undefined\n const value = Number(raw)\n if (Number.isNaN(value))\n throw new Error(`${flag} must be a number, got '${raw}'.`)\n return value\n}\n\n// `Number()` instead of `parseInt` so trailing garbage ('42x') and decimals\n// ('0.5' → 0) are rejected instead of silently truncated.\nfunction parseOptionalInteger(raw: string | undefined, flag: string): number | undefined {\n if (raw === undefined)\n return undefined\n const value = Number(raw)\n if (!Number.isInteger(value))\n throw new Error(`${flag} must be an integer, got '${raw}'.`)\n return value\n}\n\n/**\n * Build the execution-context environment from `--pass-env VARNAME` (forward\n * the named variable from the current shell) and `--env KEY=VALUE` (set a\n * value explicitly). `--pass-env` is applied first so an explicit `--env`\n * wins when both name the same key. An unset `--pass-env` variable is a hard\n * error rather than a silently-empty value.\n */\nexport function parseEnvArgs(\n envArgs: string[] | undefined,\n passEnvArgs: string[] | undefined,\n source: Record<string, string | undefined> = process.env,\n): Record<string, string> {\n const env: Record<string, string> = {}\n\n for (const name of passEnvArgs ?? []) {\n const key = name.trim()\n if (!key)\n throw new Error('--pass-env requires a variable name.')\n const value = source[key]\n if (value === undefined)\n throw new Error(`--pass-env ${key}: environment variable ${key} is not set.`)\n env[key] = value\n }\n\n for (const item of envArgs ?? []) {\n const eq = item.indexOf('=')\n const key = eq === -1 ? '' : item.slice(0, eq).trim()\n if (!key)\n throw new Error(`--env must be formatted as KEY=VALUE, got '${item}'.`)\n env[key] = item.slice(eq + 1)\n }\n\n return env\n}\n\n/**\n * Resolve the `--pregame <file>` setup script. Returns `undefined` when no path\n * is given. The script only runs in remote sandbox contexts (it's uploaded into\n * the ready sandbox before prompting); for any other context this warns and\n * ignores it rather than failing. For supported contexts the file is read\n * eagerly — consistent with `--prompt-file`/`--schema` — so a missing or\n * unreadable file surfaces as a usage error up front rather than mid-spawn.\n * The returned `name` is the basename used for the uploaded file.\n */\nexport function loadPregame(\n path: string | undefined,\n context: string,\n): { name: string, content: string } | undefined {\n if (!path)\n return undefined\n if (!supportsRemoteSandboxFlags(context)) {\n console.error(`--pregame is only supported with --context e2b or daytona; ignoring it for context '${context}'.`)\n return undefined\n }\n let content: string\n try {\n content = readFileSync(path, 'utf8')\n }\n catch (err) {\n throw new Error(`--pregame: failed to read '${path}': ${(err as Error).message}`)\n }\n return { name: basename(path), content }\n}\n\n/**\n * Resolve the `--sandbox <id>` argument. Returns `undefined` when no id is\n * given. Connecting to a pre-existing sandbox is supported by the remote\n * sandbox providers; for any other context this warns and ignores it rather\n * than failing, mirroring {@link loadPregame}. A blank value (e.g.\n * `--sandbox ''`) is treated as absent.\n */\nexport function resolveSandboxId(\n raw: string | undefined,\n context: string,\n): string | undefined {\n const id = raw?.trim()\n if (!id)\n return undefined\n if (!supportsRemoteSandboxFlags(context)) {\n console.error(`--sandbox is only supported with --context e2b or daytona; ignoring it for context '${context}'.`)\n return undefined\n }\n return id\n}\n\nconst validSandboxOnDestroyValues = ['kill', 'pause', 'leave'] as const\nexport type SandboxOnDestroyValue = typeof validSandboxOnDestroyValues[number]\n\n/**\n * Resolve the `--sandbox-on-destroy kill|pause|leave` argument. Returns\n * `undefined` when not set (the provider defaults to `'kill'` / delete).\n * Applies to remote sandbox contexts; warns and ignores for any other context,\n * mirroring {@link resolveSandboxId} and {@link loadPregame}.\n */\nexport function resolveSandboxOnDestroy(\n raw: string | undefined,\n context: string,\n): SandboxOnDestroyValue | undefined {\n const value = raw?.trim()\n if (!value)\n return undefined\n if (!supportsRemoteSandboxFlags(context)) {\n console.error(`--sandbox-on-destroy is only supported with --context e2b or daytona; ignoring it for context '${context}'.`)\n return undefined\n }\n if (!validSandboxOnDestroyValues.includes(value as SandboxOnDestroyValue))\n throw new StartUsageError(`--sandbox-on-destroy must be kill|pause|leave, got '${value}'.`)\n return value as SandboxOnDestroyValue\n}\n\nfunction supportsRemoteSandboxFlags(context: string): boolean {\n return context === 'e2b' || context === 'daytona'\n}\n\nfunction parseHeaderArgs(raw: string[] | undefined, flag: string): Record<string, string> {\n if (!raw || raw.length === 0)\n return {}\n\n const headers: Record<string, string> = {}\n for (const item of raw) {\n const colon = item.indexOf(':')\n const equals = item.indexOf('=')\n const separator = colon === -1 ? equals : equals === -1 ? colon : Math.min(colon, equals)\n if (separator <= 0)\n throw new Error(`${flag} must be formatted as \"Name: value\" or \"Name=value\".`)\n\n const name = item.slice(0, separator).trim()\n const value = item.slice(separator + 1).trim()\n if (!name || !value)\n throw new Error(`${flag} must include both a header name and value.`)\n headers[name] = value\n }\n return headers\n}\n","/**\n * Shared glue for the CLI entrypoints (`start.ts` — human renderer,\n * `headless-cli.ts` — machine contract). Both build an execution context,\n * resolve a session (memory or sqlite), and parse `--mcp` config the same way;\n * this module is the single source of truth for that wiring so the two CLIs\n * stay in lockstep without duplicating it.\n */\n\nimport type { ExecutionContext } from './contexts'\nimport type { Session } from './session'\nimport { createProcessContext, createSandboxContext } from './contexts'\nimport { createDaytonaProvider } from './contexts/daytona'\nimport { createDockerContext } from './contexts/docker'\nimport { createE2BProvider } from './contexts/e2b'\nimport { createMemoryStore, createSession, loadSession } from './session'\nimport { createSqliteStore } from './session/sqlite'\n\nexport { parseMcpConfig } from './start/shared-options'\n\n/**\n * Build the execution context for a CLI run: `process` (default), `docker`,\n * `e2b`, or `daytona`.\n *\n * The `e2b` backend reads its `E2B_API_KEY` / `E2B_DOMAIN` / `E2B_TEMPLATE`\n * from the environment (point `E2B_DOMAIN` at a self-hosted cluster, and set\n * `E2B_TEMPLATE` to a template that exists there — the default `base` does\n * not); `--cwd` becomes the sandbox working directory.\n *\n * The Daytona backend reads `DAYTONA_API_KEY` / `DAYTONA_API_URL` /\n * `DAYTONA_TARGET` from the environment. `--cwd` becomes the sandbox working\n * directory.\n *\n * `env` (from `--env` / `--pass-env`) is forwarded to whichever context is\n * selected: baked into remote sandboxes at create time, set on the Docker\n * container, or merged into the in-process command environment.\n *\n * `pregame` (from `--pregame`) is supported by the remote sandbox providers:\n * a setup script uploaded and run in the sandbox once it's ready, before\n * prompting begins.\n *\n * `sandboxId` (from `--sandbox`) attaches to a pre-existing remote sandbox\n * instead of creating a fresh one.\n */\nexport function createCliExecution(type: string, opts: { image?: string, cwd?: string, env?: Record<string, string>, pregame?: { name: string, content: string }, sandboxId?: string, sandboxOnDestroy?: 'kill' | 'pause' | 'leave' }): ExecutionContext {\n switch (type) {\n case 'docker':\n return createDockerContext({ image: opts.image, cwd: opts.cwd, env: opts.env })\n case 'e2b':\n return createSandboxContext(createE2BProvider({ cwd: opts.cwd, env: opts.env, ...(opts.pregame ? { pregame: opts.pregame } : {}), ...(opts.sandboxId ? { sandboxId: opts.sandboxId } : {}), ...(opts.sandboxOnDestroy ? { onDestroy: opts.sandboxOnDestroy } : {}) }))\n case 'daytona':\n return createSandboxContext(createDaytonaProvider({ cwd: opts.cwd, env: opts.env, ...(opts.pregame ? { pregame: opts.pregame } : {}), ...(opts.sandboxId ? { sandboxId: opts.sandboxId } : {}), ...(opts.sandboxOnDestroy ? { onDestroy: opts.sandboxOnDestroy } : {}) }))\n case 'process':\n default:\n return createProcessContext({ cwd: opts.cwd, env: opts.env })\n }\n}\n\n/**\n * Resolve the session for a CLI run.\n * - `sessionDb` set → sqlite-backed; resume `sessionId` if it exists, else\n * create it (or a fresh id when `sessionId` is omitted).\n * - `sessionDb` absent → in-memory store.\n *\n * Fresh sessions are saved immediately so the store has a header row from\n * the start — incremental `appendTurns` against a header-less sqlite store\n * would otherwise be silent no-ops, and an error / Ctrl+C before the final\n * save would lose the whole run.\n */\nexport async function createCliSession(sessionDb?: string, sessionId?: string): Promise<Session> {\n if (sessionDb) {\n const store = createSqliteStore({ path: sessionDb })\n if (sessionId) {\n const existing = await loadSession(store, sessionId)\n if (existing)\n return existing\n const session = await createSession({ store, id: sessionId })\n await session.save()\n return session\n }\n const session = await createSession({ store })\n await session.save()\n return session\n }\n return await createSession({ store: createMemoryStore() })\n}\n\n/**\n * Install SIGINT/SIGTERM handlers for a CLI run. The first signal aborts the\n * returned `AbortSignal` so the running agent can unwind cleanly (persist the\n * session, destroy execution contexts) and the process exits through the\n * normal path — which is what fires the `process.on('exit')` orphan reaper\n * for detached background process groups. A second signal force-exits\n * immediately (the synchronous 'exit' reaper still runs, but async cleanup\n * such as Docker container teardown is skipped).\n */\nexport function installCliSignalHandlers(): AbortSignal {\n const controller = new AbortController()\n const onSignal = (name: NodeJS.Signals): void => {\n if (controller.signal.aborted)\n process.exit(name === 'SIGTERM' ? 143 : 130) // 128 + signal number\n controller.abort(new Error(`Received ${name} — aborting run`))\n }\n process.on('SIGINT', () => onSignal('SIGINT'))\n process.on('SIGTERM', () => onSignal('SIGTERM'))\n return controller.signal\n}\n","import type { ParseArgsConfig } from 'node:util'\nimport type { Preset } from '../presets'\nimport type { Provider } from '../providers'\nimport type { StartLocalOptions, StartProviderName } from './shared-options'\nimport { basic } from '../presets'\nimport { anthropic, arcee, baseten, cerebras, openai, openaiCompat, openrouter, xai } from '../providers'\nimport {\n buildStartLocalOptions,\n parseStartArgValues,\n startLocalArgOptions,\n startLocalUsage,\n StartUsageError,\n} from './shared-options'\n\nexport const startProviders = {\n anthropic,\n openai,\n openrouter,\n cerebras,\n xai,\n arcee,\n baseten,\n}\n\nexport const startPresets = {\n basic,\n} as const\n\ninterface StartProviderConfig {\n provider: StartProviderName\n model?: string\n baseURL?: string\n apiKeyEnv?: string\n headersEnv?: string\n extraHeaders?: Record<string, string>\n vision?: boolean\n imageInToolResult?: boolean\n temperature?: number\n seed?: number\n}\n\ntype StartProviderInput = StartProviderName | StartProviderConfig\n\nexport interface StartOptions extends StartLocalOptions {\n restate: boolean\n restateAdminUrl: string\n restateIngressUrl: string\n restateServicePort: number\n restateDeploymentUri: string\n restateVerbose: boolean\n restateKeepAlive: boolean\n restateRandomFailure: boolean\n restateInvocationTimeoutMs?: number\n restateProviderRetryAttempts?: number\n restateToolRetryAttempts?: number\n}\n\nexport { StartUsageError }\n\nconst restateArgOptions = {\n 'restate': { type: 'boolean', default: false },\n 'restate-admin-url': { type: 'string', default: 'http://localhost:19070' },\n 'restate-ingress-url': { type: 'string', default: 'http://localhost:18080' },\n 'restate-service-port': { type: 'string', default: '19081' },\n 'restate-deployment-uri': { type: 'string' },\n 'restate-verbose': { type: 'boolean', default: false },\n 'restate-keep-alive': { type: 'boolean', default: false },\n 'restate-random-failure': { type: 'boolean', default: false },\n 'restate-invocation-timeout-ms': { type: 'string' },\n 'restate-provider-retry-attempts': { type: 'string' },\n 'restate-tool-retry-attempts': { type: 'string' },\n} as const satisfies ParseArgsConfig['options']\n\nexport function parseStartArgs(argv: readonly string[] = Bun.argv.slice(2)): StartOptions {\n // Single parse over the composed table — the shared local options plus the\n // Restate-only flags — so a flag added to one surface can't silently drift\n // out of the other.\n const values = parseStartArgValues(argv, { ...startLocalArgOptions, ...restateArgOptions })\n const local = buildStartLocalOptions(values, { usage: startUsage })\n const servicePort = parsePort(values['restate-service-port'] as string | undefined)\n const deploymentUri = values['restate-deployment-uri'] as string | undefined\n\n return {\n ...local,\n restate: values.restate === true,\n restateAdminUrl: stripTrailingSlash((values['restate-admin-url'] as string | undefined) || 'http://localhost:19070'),\n restateIngressUrl: stripTrailingSlash((values['restate-ingress-url'] as string | undefined) || 'http://localhost:18080'),\n restateServicePort: servicePort,\n restateDeploymentUri: stripTrailingSlash(deploymentUri || `http://host.docker.internal:${servicePort}`),\n restateVerbose: values['restate-verbose'] === true,\n restateKeepAlive: values['restate-keep-alive'] === true,\n restateRandomFailure: values['restate-random-failure'] === true,\n restateInvocationTimeoutMs: parseOptionalPositiveInteger(\n values['restate-invocation-timeout-ms'] as string | undefined,\n '--restate-invocation-timeout-ms',\n ),\n restateProviderRetryAttempts: parseOptionalNonNegativeInteger(\n values['restate-provider-retry-attempts'] as string | undefined,\n '--restate-provider-retry-attempts',\n ),\n restateToolRetryAttempts: parseOptionalNonNegativeInteger(\n values['restate-tool-retry-attempts'] as string | undefined,\n '--restate-tool-retry-attempts',\n ),\n }\n}\n\nexport function resolvePreset(name: string): Preset {\n const preset = startPresets[name as keyof typeof startPresets]\n if (!preset)\n throw new Error(`Unknown preset: ${name}. Available: ${Object.keys(startPresets).join(', ')}`)\n return preset\n}\n\nexport function createStartProvider(input: StartProviderInput): Provider {\n const options = typeof input === 'string' ? { provider: input } : input\n const name = options.provider\n if (name === 'local' || name === 'openai-compat')\n return createLocalCompatProvider(options, name)\n\n const providerFactory = startProviders[name]\n if (!providerFactory)\n throw new Error(`Unknown provider: ${name}. Available: ${Object.keys(startProviders).join(', ')}, local, openai-compat`)\n warnIgnoredLocalProviderOptions(options, name)\n return providerFactory()\n}\n\nexport function startUsage(): string {\n return [\n startLocalUsage(),\n ` [--restate] [--restate-admin-url <url>] [--restate-ingress-url <url>]`,\n ` [--restate-service-port <port>] [--restate-deployment-uri <url>]`,\n ` [--restate-invocation-timeout-ms <ms>] [--restate-provider-retry-attempts <n>] [--restate-tool-retry-attempts <n>]`,\n ` [--restate-keep-alive] [--restate-random-failure] [--restate-verbose]`,\n '',\n 'Subagents:',\n ' The default `basic` preset ships with the `spawn` tool — prompt the model to delegate, e.g.',\n ' bun start --prompt \"Spawn one subagent to count files in src/, another to count files in test/, then sum them\"',\n ' Subagent stream/tool/spawn events are rendered live, indented per depth.',\n ].join('\\n')\n}\n\nfunction parsePort(raw: string | undefined): number {\n const port = Number(raw || 19081)\n if (!Number.isInteger(port) || port <= 0 || port > 65_535)\n throw new Error(`Invalid --restate-service-port: ${raw}`)\n return port\n}\n\nfunction parseOptionalPositiveInteger(raw: string | undefined, name: string): number | undefined {\n if (raw === undefined)\n return undefined\n const value = Number(raw)\n if (!Number.isInteger(value) || value <= 0)\n throw new Error(`Invalid ${name}: ${raw}`)\n return value\n}\n\nfunction parseOptionalNonNegativeInteger(raw: string | undefined, name: string): number | undefined {\n if (raw === undefined)\n return undefined\n const value = Number(raw)\n if (!Number.isInteger(value) || value < 0)\n throw new Error(`Invalid ${name}: ${raw}`)\n return value\n}\n\nfunction stripTrailingSlash(value: string): string {\n return value.replace(/\\/+$/, '')\n}\n\nfunction createLocalCompatProvider(options: Partial<StartLocalOptions>, name: 'local' | 'openai-compat'): Provider {\n const baseURL = options.baseURL ?? process.env.LOCAL_LLM_BASE_URL\n if (!baseURL) {\n throw new Error(\n 'No base URL for the local provider. Pass --base-url or set LOCAL_LLM_BASE_URL '\n + '(e.g. http://localhost:11434/v1 for Ollama, http://localhost:8000/v1 for vLLM).',\n )\n }\n\n const apiKey = (options.apiKeyEnv ? process.env[options.apiKeyEnv] : undefined)\n ?? process.env.LOCAL_LLM_API_KEY\n ?? 'no-key'\n const capabilities = {\n vision: options.vision ?? false,\n imageInToolResult: options.imageInToolResult ?? false,\n }\n if (capabilities.imageInToolResult)\n capabilities.vision = true\n\n const extraBodyParams: Record<string, unknown> = {\n stream_options: { include_usage: true },\n }\n if (options.temperature !== undefined)\n extraBodyParams.temperature = options.temperature\n if (options.seed !== undefined)\n extraBodyParams.seed = options.seed\n\n return openaiCompat({\n name,\n baseURL,\n apiKey,\n extraHeaders: resolveLocalExtraHeaders(options),\n capabilities,\n ...(options.model\n ? { defaultModel: options.model }\n : process.env.LOCAL_LLM_DEFAULT_MODEL\n ? { defaultModel: process.env.LOCAL_LLM_DEFAULT_MODEL }\n : {}),\n extraBodyParams,\n })\n}\n\nfunction warnIgnoredLocalProviderOptions(options: Partial<StartLocalOptions>, provider: string): void {\n const ignored = [\n options.baseURL !== undefined ? '--base-url' : null,\n options.apiKeyEnv !== undefined ? '--api-key-env' : null,\n options.headersEnv !== undefined ? '--headers-env' : null,\n options.extraHeaders !== undefined ? '--header' : null,\n options.vision !== undefined ? '--vision' : null,\n options.imageInToolResult !== undefined ? '--image-in-tool-result' : null,\n options.temperature !== undefined ? '--temperature' : null,\n options.seed !== undefined ? '--seed' : null,\n ].filter((flag): flag is string => flag !== null)\n\n if (ignored.length > 0)\n console.error(`[start] ${ignored.join(', ')} only apply to --provider local|openai-compat; ignored for '${provider}'.`)\n}\n\nfunction resolveLocalExtraHeaders(options: Partial<StartLocalOptions>): Record<string, string> {\n return {\n ...(process.env.LOCAL_LLM_AUTHORIZATION ? { Authorization: process.env.LOCAL_LLM_AUTHORIZATION } : {}),\n ...readHeadersEnv(options.headersEnv ?? 'LOCAL_LLM_HEADERS'),\n ...(options.extraHeaders ?? {}),\n }\n}\n\nfunction readHeadersEnv(envName: string): Record<string, string> {\n const raw = process.env[envName]\n if (!raw)\n return {}\n\n let parsed: unknown\n try {\n parsed = JSON.parse(raw)\n }\n catch {\n throw new Error(`${envName} must contain a JSON object of string headers.`)\n }\n\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed))\n throw new Error(`${envName} must contain a JSON object of string headers.`)\n\n const headers: Record<string, string> = {}\n for (const [name, value] of Object.entries(parsed)) {\n if (typeof value !== 'string')\n throw new Error(`${envName} header \"${name}\" must be a string.`)\n headers[name] = value\n }\n return headers\n}\n","#!/usr/bin/env bun\n\nimport type { ParseArgsConfig } from 'node:util'\nimport type { AcpModelChoice } from './acp'\nimport type { Provider } from './providers'\nimport type { StartLocalOptions, StartProviderName } from './start/shared-options'\nimport { runAcpStdioServer } from './acp'\nimport { bridgeStoredCredentials } from './acp/credential-bridge'\nimport { createCliExecution } from './cli-shared'\nimport { createStartProvider, resolvePreset } from './start/options'\nimport { buildStartLocalOptions, parseStartArgValues, startLocalArgOptions, startProviderNames, StartUsageError } from './start/shared-options'\n\n// ACP-only flags layered on top of the shared start option table. Parsed with\n// the strict shared parser so a typo still fails loudly.\nconst acpArgOptions = {\n 'models': { type: 'string' },\n 'model-option': { type: 'string', multiple: true },\n 'no-credential-store': { type: 'boolean', default: false },\n} as const satisfies ParseArgsConfig['options']\n\nasync function main(): Promise<void> {\n const argv = Bun.argv.slice(2)\n if (isHelp(argv)) {\n process.stdout.write(`${usage()}\\n`)\n return\n }\n\n const values = parseStartArgValues(argv, { ...startLocalArgOptions, ...acpArgOptions })\n const options = buildStartLocalOptions(values, { requirePrompt: false, usage })\n\n // Pull credentials from the existing zidane store (the same login the TUI /\n // `zidane auth` use) so editors like Zed need no secrets in settings.json.\n // Runs before any provider is constructed. Explicit env still wins.\n if (values['no-credential-store'] !== true) {\n const bridged = bridgeStoredCredentials()\n if (bridged)\n process.stderr.write(`[zidane-acp] using stored credentials from ${bridged}\\n`)\n }\n\n const registry = buildModelRegistry(options, values)\n const store = options.sessionDb\n ? (await import('./session/sqlite')).createTuiStore(options.sessionDb)\n : undefined\n\n const handle = runAcpStdioServer({\n // Registry mode lets ACP clients (e.g. Zed) switch models; each model\n // resolves its own provider + credentials lazily. Otherwise a single\n // provider backs every run.\n ...(registry\n ? { models: registry.models, ...(registry.defaultModelId ? { defaultModelId: registry.defaultModelId } : {}) }\n : { provider: buildBaseProvider(options) }),\n model: options.model,\n preset: resolvePreset(options.preset),\n system: options.system,\n store,\n // ACP mandates newline-delimited JSON over stdio. Be explicit so the\n // shipped binary stays correct regardless of library defaults.\n framing: 'newline',\n agentOptions: {\n ...(options.mcp ? { mcpServers: options.mcp } : {}),\n },\n execution: request => createCliExecution(options.context, {\n image: options.image,\n cwd: request.cwd || options.cwd,\n env: options.env,\n pregame: options.pregame,\n sandboxId: options.sandboxId,\n sandboxOnDestroy: options.sandboxOnDestroy,\n }),\n agentInfo: {\n name: 'zidane',\n title: 'Zidane',\n version: process.env.npm_package_version ?? '1',\n },\n permission: { enabled: true },\n })\n\n const shutdown = async () => {\n await handle.close()\n store?.close?.()\n }\n process.once('SIGINT', () => {\n void shutdown().finally(() => process.exit(130))\n })\n process.once('SIGTERM', () => {\n void shutdown().finally(() => process.exit(143))\n })\n}\n\nfunction usage(): string {\n return [\n 'Usage: zidane-acp [provider/context options]',\n '',\n 'Runs Zidane as an ACP v1 agent over stdio. Prompts are received through ACP session/prompt.',\n '',\n 'Common options:',\n ' --provider anthropic|openai|openrouter|cerebras|xai|arcee|baseten|local|openai-compat',\n ' --model <id>',\n ' --models <id,id,...> advertise a model selector (all on --provider)',\n ' --model-option provider:model[:label] add a cross-provider selectable model (repeatable)',\n ' --context process|docker|e2b|daytona',\n ' --cwd <path>',\n ' --session-db <path>',\n ' --mcp <json>',\n ' --no-credential-store ignore ~/.zidane credentials; use only env',\n '',\n 'With --models / --model-option, ACP clients (e.g. Zed) can switch models at',\n 'runtime; each model resolves its own provider credentials when first selected.',\n '',\n 'Credentials: by default zidane-acp reads Zidane\\'s app credential store',\n '(~/.zidane/credentials.json), so no API keys are needed in the editor config.',\n 'Explicit env vars always win.',\n ].join('\\n')\n}\n\nfunction isHelp(argv: readonly string[]): boolean {\n return argv.includes('--help') || argv.includes('-h')\n}\n\n/** Build a `createStartProvider` config from the parsed CLI options. */\nfunction providerConfig(options: StartLocalOptions, provider: StartProviderName, model: string | undefined) {\n return {\n provider,\n model,\n baseURL: options.baseURL,\n apiKeyEnv: options.apiKeyEnv,\n headersEnv: options.headersEnv,\n extraHeaders: options.extraHeaders,\n vision: options.vision,\n imageInToolResult: options.imageInToolResult,\n temperature: options.temperature,\n seed: options.seed,\n }\n}\n\nfunction buildBaseProvider(options: StartLocalOptions): Provider {\n return createStartProvider(providerConfig(options, options.provider, options.model))\n}\n\n/**\n * Assemble the selectable-model registry from `--model-option` (cross-provider,\n * each lazily building its own provider) and `--models` (same `--provider`,\n * sharing one provider instance). Returns `undefined` when neither flag is set\n * so the caller falls back to a single provider.\n */\nfunction buildModelRegistry(\n options: StartLocalOptions,\n values: Record<string, unknown>,\n): { models: AcpModelChoice[], defaultModelId?: string } | undefined {\n const modelsFlag = (values.models as string | undefined)?.trim()\n const modelOptionFlags = (values['model-option'] as string[] | undefined) ?? []\n if (!modelsFlag && modelOptionFlags.length === 0)\n return undefined\n\n const choices: AcpModelChoice[] = []\n\n for (const raw of modelOptionFlags)\n choices.push(parseModelOption(raw, options))\n\n if (modelsFlag) {\n const models = modelsFlag.split(',').map(model => model.trim()).filter(Boolean)\n if (models.length === 0)\n throw new StartUsageError('--models must list at least one model id.')\n // Same provider serves every entry: build it once and share the instance.\n const baseProvider = buildBaseProvider(options)\n for (const model of models)\n choices.push({ id: model, name: model, model, provider: baseProvider })\n }\n\n const seen = new Set<string>()\n for (const choice of choices) {\n if (seen.has(choice.id))\n throw new StartUsageError(`Duplicate model id \"${choice.id}\" across --models / --model-option.`)\n seen.add(choice.id)\n }\n\n const defaultModelId = (options.model\n && choices.find(choice => choice.id === options.model || choice.model === options.model)?.id)\n || choices[0]!.id\n return { models: choices, defaultModelId }\n}\n\nfunction parseModelOption(raw: string, options: StartLocalOptions): AcpModelChoice {\n const parts = raw.split(':')\n if (parts.length < 2 || !parts[0] || !parts[1])\n throw new StartUsageError(`--model-option must be \"provider:model[:label]\", got '${raw}'.`)\n const providerName = parts[0] as StartProviderName\n if (!startProviderNames.includes(providerName))\n throw new StartUsageError(`--model-option provider must be one of ${startProviderNames.join('|')}, got '${providerName}'.`)\n const model = parts[1]\n const label = parts.slice(2).join(':').trim() || undefined\n const isLocal = providerName === 'local' || providerName === 'openai-compat'\n // Lazy: a model the user never selects never builds its provider, so its\n // credentials are never required. local/openai-compat carry the endpoint\n // flags; hosted providers read their own standard env credentials.\n const provider = (): Provider => createStartProvider(\n isLocal ? providerConfig(options, providerName, model) : { provider: providerName, model },\n )\n // Stable `provider:model` key so the value the client echoes back is\n // unambiguous; the optional label is display-only.\n return { id: `${providerName}:${model}`, name: label ?? model, model, provider }\n}\n\nmain().catch((err) => {\n if (err instanceof StartUsageError)\n process.stderr.write(`${err.message}\\n`)\n else\n process.stderr.write(`ACP server error: ${err instanceof Error ? err.message : String(err)}\\n`)\n process.exit(1)\n})\n"],"mappings":"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"}
package/dist/acp.d.ts CHANGED
@@ -492,9 +492,19 @@ interface AcpSessionRuntime {
492
492
  session: Session;
493
493
  execution: ExecutionContext;
494
494
  agent: Agent;
495
+ /**
496
+ * Provider bound to {@link agent}. In model-registry mode this is a router
497
+ * whose `meta` reflects the currently selected model's underlying provider,
498
+ * so `resolveContextWindow` stays correct across `session/set_config_option`.
499
+ */
500
+ provider: Provider;
495
501
  modeId: string;
496
502
  configOptions: SessionConfigOption[];
497
503
  config: Map<string, unknown>;
504
+ /** Model id passed to `agent.run({ model })`; the selected choice's `model`. */
505
+ runModel?: string;
506
+ /** Swap the router's underlying provider on a model switch (registry mode). */
507
+ setProviderDelegate?: (provider: Provider) => void;
498
508
  abortController?: AbortController;
499
509
  inFlight?: Promise<PromptResponse>;
500
510
  }
@@ -503,9 +513,38 @@ interface AcpPermissionPolicy {
503
513
  toolMatcher?: (toolName: string, input: Record<string, unknown>) => boolean;
504
514
  options?: PermissionOption[];
505
515
  }
506
- interface AcpServerOptions {
516
+ /**
517
+ * A user-selectable model exposed to ACP clients as a `category: 'model'`
518
+ * session config option. Each choice carries its OWN provider so switching a
519
+ * model can switch provider + credentials. `provider` may be a factory so the
520
+ * credentials for a model are only resolved when that model is first selected.
521
+ */
522
+ interface AcpModelChoice {
523
+ /** Stable id used as the config option value (also the dropdown key). */
524
+ id: string;
525
+ /** Human label shown in the client dropdown. Defaults to `model`. */
526
+ name?: string;
527
+ /** Model id passed to `agent.run({ model })` for this choice. */
528
+ model: string;
529
+ /** Provider serving this model; a factory is built lazily on first use. */
507
530
  provider: Provider | (() => Provider);
531
+ }
532
+ interface AcpServerOptions {
533
+ /**
534
+ * Single provider used for every run. Required UNLESS {@link models} is
535
+ * supplied (the registry then owns provider resolution per selected model).
536
+ */
537
+ provider?: Provider | (() => Provider);
508
538
  model?: string;
539
+ /**
540
+ * Selectable models advertised to the client as a `category: 'model'` config
541
+ * option. When present, the client (e.g. Zed) can switch models via
542
+ * `session/set_config_option`, and each model resolves its own provider +
543
+ * credentials. Supersedes {@link provider} for run routing.
544
+ */
545
+ models?: AcpModelChoice[];
546
+ /** Initially-selected {@link AcpModelChoice.id}. Defaults to the first entry. */
547
+ defaultModelId?: string;
509
548
  preset?: Preset;
510
549
  tools?: Record<string, ToolDef>;
511
550
  system?: string;
@@ -612,5 +651,5 @@ declare function runAcpStdioServer(options: RunAcpStdioServerOptions): {
612
651
  close(): Promise<void>;
613
652
  };
614
653
  //#endregion
615
- export { type ACP_PROTOCOL_VERSION, type AcpClientCapabilities, type AcpClientToolOptions, type AcpContentMapper, type AcpErrorCode, type AcpImplementationInfo, type AcpMcpServer, type AcpPeer, type AcpPermissionPolicy, type AcpPromptMapping, AcpProtocolError, type AcpServer, type AcpServerOptions, type AcpSessionContentMapper, type AcpSessionRuntime, type AgentAuthCapabilities, type AgentCapabilities, type AudioContent, type AuthMethod, type AuthenticateRequest, type AvailableCommand, type AvailableCommandInput, type BlobResourceContents, type CancelNotification, type CloseSessionRequest, type ContentAnnotations, type ContentBlock, type ContentChunk, type Cost, type CreateTerminalRequest, type DeleteSessionRequest, type EmbeddedResource, type EmbeddedResourceResource, type EnvVariable, type HttpHeader, type ImageContent, type InitializeRequest, type InitializeResponse, type JsonRpcConnection, type JsonRpcConnectionOptions, type JsonRpcError, type JsonRpcFailure, type JsonRpcId, type JsonRpcMessage, type JsonRpcNotification, JsonRpcRemoteError, type JsonRpcRequest, type JsonRpcResponse, type JsonRpcSuccess, type ListSessionsRequest, type ListSessionsResponse, type LoadSessionRequest, type LoadSessionResponse, type McpCapabilities, type NewSessionRequest, type NewSessionResponse, type PermissionOption, type PlanEntry, type PromptCapabilities, type PromptRequest, type PromptResponse, type ReadTextFileRequest, type RequestPermissionOutcome, type RequestPermissionRequest, type ResourceLink, type ResumeSessionRequest, type ResumeSessionResponse, type Role, RunAcpStdioServerOptions, type SessionCapabilities, type SessionConfigOption, type SessionConfigOptionCategory, type SessionConfigSelectGroup, type SessionConfigSelectOption, type SessionConfigSelectOptions, type SessionInfo, type SessionMode, type SessionModeState, type SessionNotification, type SessionUpdate, type SetSessionConfigOptionRequest, type SetSessionConfigOptionResponse, type SetSessionModeRequest, type StopReason, type TerminalExitStatus, type TerminalOutputResponse, type TextContent, type TextResourceContents, type ToolCallContent, type ToolCallLocation, type ToolCallStatus, type ToolCallUpdate, type ToolKind, type WriteTextFileRequest, acpMcpServersToZidane, acpPromptToPromptParts, createAcpServer, createJsonRpcConnection, runAcpStdioServer, sessionBlocksToAcp, stopReasonFromRun, toolResultToAcpContent, wrapToolsForAcpClient };
654
+ export { type ACP_PROTOCOL_VERSION, type AcpClientCapabilities, type AcpClientToolOptions, type AcpContentMapper, type AcpErrorCode, type AcpImplementationInfo, type AcpMcpServer, type AcpModelChoice, type AcpPeer, type AcpPermissionPolicy, type AcpPromptMapping, AcpProtocolError, type AcpServer, type AcpServerOptions, type AcpSessionContentMapper, type AcpSessionRuntime, type AgentAuthCapabilities, type AgentCapabilities, type AudioContent, type AuthMethod, type AuthenticateRequest, type AvailableCommand, type AvailableCommandInput, type BlobResourceContents, type CancelNotification, type CloseSessionRequest, type ContentAnnotations, type ContentBlock, type ContentChunk, type Cost, type CreateTerminalRequest, type DeleteSessionRequest, type EmbeddedResource, type EmbeddedResourceResource, type EnvVariable, type HttpHeader, type ImageContent, type InitializeRequest, type InitializeResponse, type JsonRpcConnection, type JsonRpcConnectionOptions, type JsonRpcError, type JsonRpcFailure, type JsonRpcId, type JsonRpcMessage, type JsonRpcNotification, JsonRpcRemoteError, type JsonRpcRequest, type JsonRpcResponse, type JsonRpcSuccess, type ListSessionsRequest, type ListSessionsResponse, type LoadSessionRequest, type LoadSessionResponse, type McpCapabilities, type NewSessionRequest, type NewSessionResponse, type PermissionOption, type PlanEntry, type PromptCapabilities, type PromptRequest, type PromptResponse, type ReadTextFileRequest, type RequestPermissionOutcome, type RequestPermissionRequest, type ResourceLink, type ResumeSessionRequest, type ResumeSessionResponse, type Role, RunAcpStdioServerOptions, type SessionCapabilities, type SessionConfigOption, type SessionConfigOptionCategory, type SessionConfigSelectGroup, type SessionConfigSelectOption, type SessionConfigSelectOptions, type SessionInfo, type SessionMode, type SessionModeState, type SessionNotification, type SessionUpdate, type SetSessionConfigOptionRequest, type SetSessionConfigOptionResponse, type SetSessionModeRequest, type StopReason, type TerminalExitStatus, type TerminalOutputResponse, type TextContent, type TextResourceContents, type ToolCallContent, type ToolCallLocation, type ToolCallStatus, type ToolCallUpdate, type ToolKind, type WriteTextFileRequest, acpMcpServersToZidane, acpPromptToPromptParts, createAcpServer, createJsonRpcConnection, runAcpStdioServer, sessionBlocksToAcp, stopReasonFromRun, toolResultToAcpContent, wrapToolsForAcpClient };
616
655
  //# sourceMappingURL=acp.d.ts.map
package/dist/acp.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"acp.d.ts","names":[],"sources":["../src/acp/types.ts","../src/acp/server.ts","../src/acp/json-rpc.ts","../src/acp/client-tools.ts","../src/acp/mapping.ts","../src/acp/index.ts"],"mappings":"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"}
1
+ {"version":3,"file":"acp.d.ts","names":[],"sources":["../src/acp/types.ts","../src/acp/server.ts","../src/acp/json-rpc.ts","../src/acp/client-tools.ts","../src/acp/mapping.ts","../src/acp/index.ts"],"mappings":";;;;;;cAQa,oBAAA;AAAA,KAED,SAAA;AAAA,UAEK,cAAA;EACf,OAAA;EACA,EAAA,EAAI,SAAS;EACb,MAAA;EACA,MAAA;AAAA;AAAA,UAGe,mBAAA;EACf,OAAA;EACA,MAAA;EACA,MAAA;AAAA;AAAA,UAGe,cAAA;EACf,OAAA;EACA,EAAA,EAAI,SAAS;EACb,MAAA;AAAA;AAAA,UAGe,cAAA;EACf,OAAA;EACA,EAAA,EAAI,SAAA;EACJ,KAAA,EAAO,YAAY;AAAA;AAAA,KAGT,eAAA,GAAkB,cAAA,GAAiB,cAAc;AAAA,KACjD,cAAA,GAAiB,cAAA,GAAiB,mBAAA,GAAsB,eAAA;AAAA,UAEnD,YAAA;EACf,IAAA;EACA,OAAA;EACA,IAAA;AAAA;AAAA,aAGU,YAAA;EACV,UAAA;EACA,cAAA;EACA,cAAA;EACA,aAAA;EACA,aAAA;EACA,sBAAA;EACA,gBAAA;AAAA;AAAA,UAGe,OAAA;EACf,WAAA,GAAc,MAAA,UAAgB,MAAA,eAAqB,OAAA;EACnD,gBAAA,GAAmB,MAAA,UAAgB,MAAA,sBAA4B,OAAO;AAAA;;;;;;UAQvD,qBAAA;EACf,IAAA;EACA,OAAA;EACA,KAAA;EACA,KAAA,GAAQ,MAAM;AAAA;AAAA,UAGC,qBAAA;EACf,EAAA;IACE,YAAA;IACA,aAAA;EAAA;EAEF,QAAA;EACA,KAAA,GAAQ,MAAM;AAAA;AAAA,UAGC,iBAAA;EACf,eAAA;EACA,kBAAA,GAAqB,qBAAA;EACrB,UAAA,GAAa,OAAA,CAAQ,qBAAA;EACrB,KAAA,GAAQ,MAAA;AAAA;AAAA,UAGO,iBAAA;EACf,WAAA;EACA,kBAAA,GAAqB,kBAAA;EACrB,eAAA,GAAkB,eAAA;EAClB,mBAAA,GAAsB,mBAAA;EACtB,IAAA,GAAO,qBAAA;EACP,KAAA,GAAQ,MAAA;AAAA;AAAA,UAGO,kBAAA;EACf,KAAA;EACA,KAAA;EACA,eAAA;EACA,KAAA,GAAQ,MAAM;AAAA;AAAA,UAGC,eAAA;EACf,IAAA;EACA,GAAA;EACA,KAAA,GAAQ,MAAM;AAAA;AAAA,UAGC,qBAAA;EACf,MAAA,GAAS,MAAA;EACT,KAAA,GAAQ,MAAM;AAAA;AAAA,UAGC,mBAAA;EACf,IAAA,GAAO,MAAA;EACP,MAAA,GAAS,MAAA;EACT,qBAAA,GAAwB,MAAA;EACxB,MAAA,GAAS,MAAA;EACT,KAAA,GAAQ,MAAA;EACR,KAAA,GAAQ,MAAA;AAAA;AAAA,UAGO,kBAAA;EACf,eAAA;EACA,iBAAA,EAAmB,iBAAA;EACnB,SAAA,GAAY,qBAAA;EACZ,WAAA,EAAa,UAAA;EACb,KAAA,GAAQ,MAAA;AAAA;AAAA,UAGO,UAAA;EACf,EAAA;EACA,IAAA;EACA,WAAA;EACA,KAAA,GAAQ,MAAM;AAAA;AAAA,UAGC,mBAAA;EACf,QAAA;EACA,KAAA,GAAQ,MAAM;AAAA;AAAA,UAGC,iBAAA;EACf,GAAA;EACA,qBAAA;EACA,UAAA,EAAY,YAAA;EACZ,KAAA,GAAQ,MAAM;AAAA;AAAA,UAGC,kBAAA,SAA2B,iBAAiB;EAC3D,SAAS;AAAA;AAAA,UAGM,oBAAA;EACf,SAAA;EACA,GAAA;EACA,qBAAA;EACA,UAAA,GAAa,YAAA;EACb,KAAA,GAAQ,MAAM;AAAA;AAAA,UAGC,mBAAA;EACf,SAAA;EACA,KAAA,GAAQ,MAAM;AAAA;AAAA,UAGC,oBAAA;EACf,SAAA;EACA,KAAA,GAAQ,MAAM;AAAA;AAAA,UAGC,mBAAA;EACf,GAAA;EACA,MAAA;EACA,KAAA,GAAQ,MAAM;AAAA;AAAA,UAGC,WAAA;EACf,SAAA;EACA,GAAA;EACA,qBAAA;EACA,KAAA;EACA,SAAA;EACA,KAAA,GAAQ,MAAM;AAAA;AAAA,UAGC,oBAAA;EACf,QAAA,EAAU,WAAA;EACV,UAAA;EACA,KAAA,GAAQ,MAAM;AAAA;AAAA,UAGC,kBAAA;EACf,SAAA;EACA,KAAA,GAAQ,gBAAA;EACR,aAAA,GAAgB,mBAAA;EAChB,KAAA,GAAQ,MAAA;AAAA;;;;;AAxGM;UAgHC,mBAAA;EACf,KAAA,GAAQ,gBAAA;EACR,aAAA,GAAgB,mBAAA;EAChB,KAAA,GAAQ,MAAA;AAAA;AAAA,KAGE,qBAAA,GAAwB,mBAAmB;AAAA,UAEtC,aAAA;EACf,SAAA;EACA,MAAA,EAAQ,YAAA;EACR,KAAA,GAAQ,MAAM;AAAA;AAAA,UAGC,cAAA;EACf,UAAA,EAAY,UAAA;EACZ,KAAA,GAAQ,MAAM;AAAA;AAAA,KAGJ,UAAA;AAAA,UAEK,kBAAA;EACf,SAAA;EACA,KAAA,GAAQ,MAAM;AAAA;AAAA,UAGC,qBAAA;EACf,SAAA;EACA,MAAA;EACA,KAAA,GAAQ,MAAM;AAAA;AAAA,UAGC,6BAAA;EACf,SAAA;EACA,QAAA;EACA,KAAA;EACA,KAAA,GAAQ,MAAM;AAAA;AAAA,UAGC,8BAAA;EACf,aAAA,EAAe,mBAAA;EACf,KAAA,GAAQ,MAAM;AAAA;AAAA,UAGC,WAAA;EACf,EAAA;EACA,IAAA;EACA,WAAA;EACA,KAAA,GAAQ,MAAM;AAAA;AAAA,UAGC,gBAAA;EACf,aAAA;EACA,cAAA,EAAgB,WAAA;EAChB,KAAA,GAAQ,MAAM;AAAA;AAAA,KAGJ,YAAA;EACJ,IAAA;EAAgB,IAAA;EAAc,OAAA;EAAiB,IAAA;EAAgB,GAAA,EAAK,WAAA;EAAe,KAAA,GAAQ,MAAA;AAAA;EAC3F,IAAA;EAAsB,IAAA;EAAc,GAAA;EAAa,OAAA,EAAS,UAAA;EAAc,KAAA,GAAQ,MAAA;AAAA;AAAA,UAEvE,WAAA;EACf,IAAA;EACA,KAAA;EACA,KAAA,GAAQ,MAAM;AAAA;AAAA,UAGC,UAAA;EACf,IAAA;EACA,KAAA;EACA,KAAA,GAAQ,MAAM;AAAA;AAAA,KAGJ,YAAA,GACN,WAAA,GACA,YAAA,GACA,YAAA,GACA,YAAA,GACA,gBAAA;AAAA,KAEM,IAAA;AAAA,UAEK,kBAAA;EACf,QAAA,GAAW,IAAA;EACX,YAAA;EACA,QAAA;EACA,KAAA,GAAQ,MAAM;AAAA;AAAA,UAGC,WAAA;EACf,IAAA;EACA,IAAA;EACA,WAAA,GAAc,kBAAA;EACd,KAAA,GAAQ,MAAM;AAAA;AAAA,UAGC,YAAA;EACf,IAAA;EACA,IAAA;EACA,QAAA;EACA,GAAA;EACA,WAAA,GAAc,kBAAA;EACd,KAAA,GAAQ,MAAM;AAAA;AAAA,UAGC,YAAA;EACf,IAAA;EACA,IAAA;EACA,QAAA;EACA,WAAA,GAAc,kBAAA;EACd,KAAA,GAAQ,MAAM;AAAA;AAAA,UAGC,YAAA;EACf,IAAA;EACA,GAAA;EACA,IAAA;EACA,KAAA;EACA,WAAA;EACA,QAAA;EACA,IAAA;EACA,WAAA,GAAc,kBAAA;EACd,KAAA,GAAQ,MAAM;AAAA;AAAA,UAGC,oBAAA;EACf,GAAA;EACA,IAAA;EACA,QAAA;EACA,KAAA,GAAQ,MAAM;AAAA;AAAA,UAGC,oBAAA;EACf,GAAA;EACA,IAAA;EACA,QAAA;EACA,KAAA,GAAQ,MAAM;AAAA;AAAA,KAGJ,wBAAA,GAA2B,oBAAA,GAAuB,oBAAoB;AAAA,UAEjE,gBAAA;EACf,IAAA;EACA,QAAA,EAAU,wBAAA;EACV,WAAA,GAAc,kBAAA;EACd,KAAA,GAAQ,MAAA;AAAA;AAAA,UAGO,YAAA;EACf,OAAA,EAAS,YAAA;EACT,SAAA;EACA,KAAA,GAAQ,MAAM;AAAA;AAAA,KAGJ,QAAA;AAAA,KACA,cAAA;AAAA,KAEA,eAAA;EACJ,IAAA;EAAiB,OAAA,EAAS,YAAA;EAAc,KAAA,GAAQ,MAAA;AAAA;EAChD,IAAA;EAAc,IAAA;EAAc,OAAA;EAAyB,OAAA;EAAiB,KAAA,GAAQ,MAAA;AAAA;EAC9E,IAAA;EAAkB,UAAA;EAAoB,KAAA,GAAQ,MAAA;AAAA;AAAA,UAErC,gBAAA;EACf,IAAA;EACA,IAAA;EACA,KAAA,GAAQ,MAAM;AAAA;AAAA,UAGC,cAAA;EACf,UAAA;EACA,KAAA;EACA,IAAA,GAAO,QAAA;EACP,MAAA,GAAS,cAAA;EACT,OAAA,GAAU,eAAA;EACV,SAAA,GAAY,gBAAA;EACZ,QAAA;EACA,SAAA;EACA,KAAA,GAAQ,MAAA;AAAA;AAAA,KAGE,aAAA;EACH,aAAA;AAAA,IAAwC,YAAA;EACxC,aAAA;AAAA,IAAyC,YAAA;EACzC,aAAA;AAAA,IAAyC,YAAA;EACzC,aAAA;AAAA,IAA+B,cAAA;EAC/B,aAAA;AAAA,IAAsC,cAAA;EACvC,aAAA;EAAuB,OAAA,EAAS,SAAA;EAAa,KAAA,GAAQ,MAAA;AAAA;EACrD,aAAA;EAA4C,iBAAA,EAAmB,gBAAA;EAAoB,KAAA,GAAQ,MAAA;AAAA;EAC3F,aAAA;EAAsC,aAAA;EAAuB,KAAA,GAAQ,MAAA;AAAA;EACrE,aAAA;EAAuC,aAAA,EAAe,mBAAA;EAAuB,KAAA,GAAQ,MAAA;AAAA;EACrF,aAAA;EAAsC,KAAA;EAAuB,SAAA;EAA2B,KAAA,GAAQ,MAAA;AAAA;EAChG,aAAA;EAA+B,IAAA;EAAc,IAAA;EAAc,IAAA,GAAO,IAAA;EAAa,KAAA,GAAQ,MAAA;AAAA;AAAA,UAE9E,mBAAA;EACf,SAAA;EACA,MAAA,EAAQ,aAAA;EACR,KAAA,GAAQ,MAAM;AAAA;AAAA,UAGC,SAAA;EACf,OAAA;EACA,QAAA;EACA,MAAA;EACA,KAAA,GAAQ,MAAM;AAAA;AAAA,UAGC,gBAAA;EACf,IAAA;EACA,WAAA;EACA,KAAA,GAAQ,qBAAA;EACR,KAAA,GAAQ,MAAM;AAAA;AAAA,UAGC,qBAAA;EACf,IAAA;EACA,KAAA,GAAQ,MAAM;AAAA;AAAA,UAGC,yBAAA;EACf,KAAA;EACA,IAAA;EACA,WAAA;EACA,KAAA,GAAQ,MAAM;AAAA;AAAA,UAGC,wBAAA;EACf,KAAA;EACA,IAAA;EACA,OAAA,EAAS,yBAAA;EACT,KAAA,GAAQ,MAAM;AAAA;AAAA,KAGJ,0BAAA,GAA6B,yBAAA,KAA8B,wBAAwB;AAAA,KAEnF,2BAAA;;AAvNU;AAEtB;;UA2NiB,mBAAA;EACf,EAAA;EACA,IAAA;EACA,IAAA;EACA,YAAA;EACA,OAAA,EAAS,0BAAA;EACT,WAAA;EACA,QAAA,GAAW,2BAAA;EACX,KAAA,GAAQ,MAAA;AAAA;AAAA,UAGO,IAAA;EACf,MAAA;EACA,QAAA;EACA,KAAA,GAAQ,MAAM;AAAA;AAAA,UAGC,gBAAA;EACf,QAAA;EACA,IAAA;EACA,IAAA;EACA,KAAA,GAAQ,MAAM;AAAA;AAAA,KAGJ,wBAAA;EACJ,OAAA;AAAA;EACA,OAAA;EAAqB,QAAA;EAAkB,KAAA,GAAQ,MAAM;AAAA;AAAA,UAE5C,wBAAA;EACf,SAAA;EACA,QAAA,EAAU,cAAA;EACV,OAAA,EAAS,gBAAA;EACT,KAAA,GAAQ,MAAA;AAAA;AAAA,UAGO,mBAAA;EACf,SAAA;EACA,IAAA;EACA,IAAA;EACA,KAAA;EACA,KAAA,GAAQ,MAAM;AAAA;AAAA,UAGC,oBAAA;EACf,SAAA;EACA,IAAA;EACA,OAAA;EACA,KAAA,GAAQ,MAAM;AAAA;AAAA,UAGC,qBAAA;EACf,SAAA;EACA,OAAA;EACA,IAAA;EACA,GAAA,GAAM,WAAA;EACN,GAAA;EACA,eAAA;EACA,KAAA,GAAQ,MAAM;AAAA;AAAA,UAGC,kBAAA;EACf,QAAA;EACA,MAAA;EACA,KAAA,GAAQ,MAAM;AAAA;AAAA,UAGC,sBAAA;EACf,MAAA;EACA,SAAA;EACA,UAAA,GAAa,kBAAA;EACb,KAAA,GAAQ,MAAM;AAAA;AAAA,UAGC,iBAAA;EACf,SAAA;EACA,GAAA;EACA,qBAAA;EACA,UAAA,EAAY,eAAA;EACZ,OAAA,EAAS,OAAA;EACT,SAAA,EAAW,gBAAA;EACX,KAAA,EAD2B,KAAA;EArQ8D;;;;;EA4QzF,QAAA,EAAU,QAAA;EACV,MAAA;EACA,aAAA,EAAe,mBAAA;EACf,MAAA,EAAQ,GAAA;EA9QoF;EAgR5F,QAAA;EA9Qe;EAgRf,mBAAA,IAAuB,QAAA,EAAU,QAAA;EACjC,eAAA,GAAkB,eAAA;EAClB,QAAA,GAAW,OAAA,CAAQ,cAAA;AAAA;AAAA,UAGJ,mBAAA;EACf,OAAA;EACA,WAAA,IAAe,QAAA,UAAkB,KAAA,EAAO,MAAA;EACxC,OAAA,GAAU,gBAAgB;AAAA;AAlR5B;;;;;;AAAA,UA2RiB,cAAA;EAxRP;EA0RR,EAAA;EA1Rc;EA4Rd,IAAA;EAzRsB;EA2RtB,KAAA;EA1RI;EA4RJ,QAAA,EAAU,QAAA,UAAkB,QAAQ;AAAA;AAAA,UAGrB,gBAAA;EA3RX;;;;EAgSJ,QAAA,GAAW,QAAA,UAAkB,QAAA;EAC7B,KAAA;EAlSI;;;AACgB;AAEtB;;EAsSE,MAAA,GAAS,cAAA;EAtSK;EAwSd,cAAA;EACA,MAAA,GAAS,MAAA;EACT,KAAA,GAAQ,MAAA,SAAe,OAAA;EACvB,MAAA;EACA,QAAA,GAAW,aAAA;EACX,KAAA,GAAQ,YAAA;EACR,SAAA,GAAY,gBAAA,KAAqB,OAAA,EAAS,iBAAA,GAAoB,kBAAA,GAAqB,oBAAA,KAAyB,gBAAA;EAC5G,SAAA,GAAY,qBAAA;EACZ,WAAA,GAAc,UAAA;EACd,YAAA,IAAgB,OAAA,EAAS,mBAAA,KAAwB,OAAA;EACjD,MAAA,SAAe,OAAA;EACf,KAAA,GAAQ,WAAA;EACR,aAAA;EACA,aAAA,GAAgB,mBAAA;EA5SU;EA8S1B,QAAA,GAAW,gBAAA;EA1SG;;;;;;EAiTd,aAAA;EACA,UAAA,GAAa,mBAAA;EACb,mBAAA;EACA,iBAAA;EACA,YAAA,GAAe,OAAA,CAAQ,IAAA,CAAK,YAAA;AAAA;AAAA,UAGb,gBAAA;EACf,MAAA,EAAQ,UAAU;EAClB,QAAA;AAAA;AAAA,KAGU,gBAAA,IAAoB,OAAA,WAAkB,iBAAA,OAAwB,eAAe;AAAA,KAE7E,uBAAA,IAA2B,MAAA,EAAQ,mBAAA,OAA0B,YAAY;;;UCniBpE,SAAA;EACf,OAAA,GAAU,IAAA,EAAM,OAAA;EAChB,aAAA,GAAgB,OAAA,EAAS,cAAA,KAAmB,OAAA,CAAQ,eAAA;EACpD,aAAA,GAAgB,MAAA,UAAgB,MAAA,eAAqB,OAAA;EACrD,MAAA,GAAS,MAAA,UAAgB,MAAA,eAAqB,OAAA;EAC9C,KAAA,QAAa,OAAA;AAAA;AAAA,iBAGC,eAAA,CAAgB,OAAA,EAAS,gBAAA,GAAmB,SAAS;AAAA,cA8tBxD,gBAAA,SAAyB,KAAK;EAAA,SACpB,IAAA;EAAA,SAAwC,IAAA;cAAxC,IAAA,UAAc,OAAA,UAA0B,IAAA;AAAA;;;UC1yB9C,wBAAA;EACf,KAAA,EAAO,QAAA;EACP,MAAA,EAAQ,QAAA;EACR,SAAA,GAAY,OAAA,EAAS,cAAA,KAAmB,OAAA,CAAQ,eAAA,uBAAsC,eAAA;EACtF,cAAA,IAAkB,OAAA,EAAS,cAAA;IAAmB,MAAA;IAAgB,EAAA;EAAA,aAA4B,OAAA;EAC1F,OAAA;EACA,OAAA,IAAW,KAAA,EAAO,KAAA;AAAA;AAAA,UAGH,iBAAA,SAA0B,OAAO;EAChD,KAAA;EACA,KAAA;AAAA;AAAA,iBAQc,uBAAA,CAAwB,OAAA,EAAS,wBAAA,GAA2B,iBAAiB;AAAA,cAuHhF,kBAAA,SAA2B,KAAK;EAAA,SACL,IAAA;EAAA,SAAuB,IAAA;cAAjD,OAAA,UAA0B,IAAA,UAAuB,IAAA;AAAA;;;UC1I9C,oBAAA;EACf,MAAA,EAAQ,OAAA;EACR,SAAA;EACA,YAAA,EAAc,qBAAqB;EACnC,mBAAA;EACA,iBAAA;AAAA;AAAA,iBAGc,qBAAA,CAAsB,KAAA,EAAO,MAAA,SAAe,OAAA,eAAsB,OAAA,EAAS,oBAAA,GAAuB,MAAA,SAAe,OAAA;;;iBCMjH,qBAAA,CAAsB,OAAA,WAAkB,YAAA,iBAA6B,eAAe;AAAA,iBAqEpF,sBAAA,CAAuB,MAAA,WAAiB,YAAA,KAAiB,gBAAgB;AAAA,iBA6CzE,kBAAA,CAAmB,MAAA,WAAiB,mBAAA,KAAwB,YAAY;AAAA,iBAoBxE,sBAAA,CAAuB,OAAA,WAAkB,iBAAA,KAAsB,eAAe;AAAA,iBA2E9E,iBAAA,CAAkB,KAAA;EAAS,OAAA;EAAkB,SAAA,GAAY,SAAA;EAAa,eAAA;AAAA,IAA8B,UAAU;;;UCvN7G,wBAAA,SAAiC,gBAAA;EAChD,KAAA,GAAQ,QAAA;EACR,MAAA,GAAS,QAAA;EACT,OAAA;EACA,OAAA,IAAW,KAAA,EAAO,KAAA;AAAA;AAAA,iBAGJ,iBAAA,CAAkB,OAAA,EAAS,wBAAA;UAAwB,SAAA"}
package/dist/acp.js CHANGED
@@ -1,2 +1,2 @@
1
- import { a as acpMcpServersToZidane, c as stopReasonFromRun, d as createJsonRpcConnection, i as wrapToolsForAcpClient, l as toolResultToAcpContent, n as AcpProtocolError, o as acpPromptToPromptParts, r as createAcpServer, s as sessionBlocksToAcp, t as runAcpStdioServer, u as JsonRpcRemoteError } from "./acp-CEE6C0m_.js";
1
+ import { a as acpMcpServersToZidane, c as stopReasonFromRun, d as createJsonRpcConnection, i as wrapToolsForAcpClient, l as toolResultToAcpContent, n as AcpProtocolError, o as acpPromptToPromptParts, r as createAcpServer, s as sessionBlocksToAcp, t as runAcpStdioServer, u as JsonRpcRemoteError } from "./acp-BqIU2mo-.js";
2
2
  export { AcpProtocolError, JsonRpcRemoteError, acpMcpServersToZidane, acpPromptToPromptParts, createAcpServer, createJsonRpcConnection, runAcpStdioServer, sessionBlocksToAcp, stopReasonFromRun, toolResultToAcpContent, wrapToolsForAcpClient };