acpx 0.10.0 → 0.11.0

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 (33) hide show
  1. package/README.md +22 -19
  2. package/dist/{cli-8dP_TqBp.js → cli-CC2w0U-A.js} +4 -4
  3. package/dist/{cli-8dP_TqBp.js.map → cli-CC2w0U-A.js.map} +1 -1
  4. package/dist/cli.d.ts +1 -1
  5. package/dist/cli.d.ts.map +1 -1
  6. package/dist/cli.js +299 -61
  7. package/dist/cli.js.map +1 -1
  8. package/dist/{client-C4iJBO0j.d.ts → client-j3sLnpcM.d.ts} +27 -4
  9. package/dist/client-j3sLnpcM.d.ts.map +1 -0
  10. package/dist/{flags--2oX_ubW.js → flags-BKjjl3tF.js} +4 -4
  11. package/dist/flags-BKjjl3tF.js.map +1 -0
  12. package/dist/{flows-e4umXVbY.js → flows-BabqiU0u.js} +4 -3
  13. package/dist/flows-BabqiU0u.js.map +1 -0
  14. package/dist/flows.d.ts +1 -1
  15. package/dist/flows.d.ts.map +1 -1
  16. package/dist/flows.js +1 -1
  17. package/dist/{live-checkpoint-CuFft_Nd.js → live-checkpoint-BZrk9Mjz.js} +646 -164
  18. package/dist/live-checkpoint-BZrk9Mjz.js.map +1 -0
  19. package/dist/{output-Di77Yugq.js → output-D_BGt1YI.js} +170 -88
  20. package/dist/output-D_BGt1YI.js.map +1 -0
  21. package/dist/runtime.d.ts +71 -5
  22. package/dist/runtime.d.ts.map +1 -1
  23. package/dist/runtime.js +188 -32
  24. package/dist/runtime.js.map +1 -1
  25. package/dist/{session-options-Bh1bIqQ2.d.ts → session-options-Co1oGEK8.d.ts} +15 -2
  26. package/dist/{session-options-Bh1bIqQ2.d.ts.map → session-options-Co1oGEK8.d.ts.map} +1 -1
  27. package/package.json +17 -17
  28. package/skills/acpx/SKILL.md +55 -3
  29. package/dist/client-C4iJBO0j.d.ts.map +0 -1
  30. package/dist/flags--2oX_ubW.js.map +0 -1
  31. package/dist/flows-e4umXVbY.js.map +0 -1
  32. package/dist/live-checkpoint-CuFft_Nd.js.map +0 -1
  33. package/dist/output-Di77Yugq.js.map +0 -1
@@ -176,6 +176,17 @@ type SessionTokenUsage = {
176
176
  output_tokens?: number;
177
177
  cache_creation_input_tokens?: number;
178
178
  cache_read_input_tokens?: number;
179
+ thought_tokens?: number;
180
+ total_tokens?: number;
181
+ };
182
+ type SessionUsageCost = {
183
+ amount?: number;
184
+ currency?: string;
185
+ };
186
+ type SessionAvailableCommand = {
187
+ name: string;
188
+ description?: string;
189
+ has_input?: boolean;
179
190
  };
180
191
  type SessionAcpxState = {
181
192
  reset_on_next_ensure?: boolean;
@@ -184,7 +195,8 @@ type SessionAcpxState = {
184
195
  desired_config_options?: Record<string, string>;
185
196
  current_model_id?: string;
186
197
  available_models?: string[];
187
- available_commands?: string[];
198
+ model_control?: "config_option" | "legacy_set_model";
199
+ available_commands?: SessionAvailableCommand[];
188
200
  config_options?: SessionConfigOption[];
189
201
  session_options?: {
190
202
  model?: string;
@@ -229,6 +241,7 @@ type SessionRecord = {
229
241
  messages: SessionMessage[];
230
242
  updated_at: string;
231
243
  cumulative_token_usage: SessionTokenUsage;
244
+ cumulative_cost?: SessionUsageCost;
232
245
  request_token_usage: Record<string, SessionTokenUsage>;
233
246
  acpx?: SessionAcpxState;
234
247
  importedFrom?: SessionImportedFrom;
@@ -246,4 +259,4 @@ type SessionAgentOptions = {
246
259
  };
247
260
  //#endregion
248
261
  export { AcpPermissionRequest as a, NonInteractivePermissionPolicy as c, PermissionStats as d, SessionRecord as f, AcpPermissionDecision as i, PermissionMode as l, SystemPromptOption as n, AuthPolicy as o, PromptInput as p, AcpClientOptions as r, McpServer$1 as s, SessionAgentOptions as t, PermissionPolicy as u };
249
- //# sourceMappingURL=session-options-Bh1bIqQ2.d.ts.map
262
+ //# sourceMappingURL=session-options-Co1oGEK8.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-options-Bh1bIqQ2.d.ts","names":[],"sources":["../src/prompt-content.ts","../src/types.ts","../src/runtime/engine/session-options.ts"],"mappings":"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"}
1
+ {"version":3,"file":"session-options-Co1oGEK8.d.ts","names":[],"sources":["../src/prompt-content.ts","../src/types.ts","../src/runtime/engine/session-options.ts"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "acpx",
3
- "version": "0.10.0",
3
+ "version": "0.11.0",
4
4
  "description": "Headless CLI client for the Agent Client Protocol (ACP) — talk to coding agents from the command line",
5
5
  "keywords": [
6
6
  "acp",
@@ -79,38 +79,38 @@
79
79
  "viewer:typecheck": "tsgo -p examples/flows/replay-viewer/tsconfig.json --noEmit && tsgo -p examples/flows/replay-viewer/tsconfig.server.json --noEmit"
80
80
  },
81
81
  "dependencies": {
82
- "@agentclientprotocol/sdk": "^0.22.1",
83
- "commander": "^14.0.3",
82
+ "@agentclientprotocol/sdk": "^0.25.0",
83
+ "commander": "^15.0.0",
84
84
  "skillflag": "^0.1.4",
85
- "tsx": "^4.22.0",
85
+ "tsx": "^4.22.4",
86
86
  "zod": "^4.4.3"
87
87
  },
88
88
  "devDependencies": {
89
89
  "@stryker-mutator/core": "^9.6.1",
90
- "@types/node": "^25.9.0",
91
- "@types/react": "^19.2.14",
90
+ "@types/node": "^25.9.2",
91
+ "@types/react": "^19.2.17",
92
92
  "@types/react-dom": "^19.2.3",
93
93
  "@types/react-test-renderer": "^19.1.0",
94
94
  "@types/ws": "^8.18.1",
95
- "@typescript/native-preview": "7.0.0-dev.20260519.1",
95
+ "@typescript/native-preview": "7.0.0-dev.20260613.1",
96
96
  "@vitejs/plugin-react": "^6.0.2",
97
- "@xyflow/react": "^12.10.2",
97
+ "@xyflow/react": "^12.11.0",
98
98
  "c8": "^11.0.0",
99
99
  "elkjs": "^0.11.1",
100
100
  "fast-json-patch": "^3.1.1",
101
101
  "husky": "^9.1.7",
102
- "lint-staged": "^17.0.5",
102
+ "lint-staged": "^17.0.7",
103
103
  "markdownlint-cli2": "^0.22.1",
104
- "oxfmt": "^0.51.0",
105
- "oxlint": "^1.65.0",
104
+ "oxfmt": "^0.54.0",
105
+ "oxlint": "^1.69.0",
106
106
  "oxlint-tsgolint": "^0.23.0",
107
- "react": "^19.2.6",
108
- "react-dom": "^19.2.6",
109
- "react-test-renderer": "^19.2.6",
110
- "tsdown": "^0.22.0",
107
+ "react": "^19.2.7",
108
+ "react-dom": "^19.2.7",
109
+ "react-test-renderer": "^19.2.7",
110
+ "tsdown": "^0.22.2",
111
111
  "typescript": "^6.0.3",
112
- "vite": "^8.0.13",
113
- "ws": "^8.20.1"
112
+ "vite": "^8.0.16",
113
+ "ws": "^8.21.0"
114
114
  },
115
115
  "lint-staged": {
116
116
  "*.{js,ts}": [
@@ -55,6 +55,8 @@ For normal session reuse, prefer a global install over `npx`.
55
55
  acpx [global_options] [prompt_text...]
56
56
  acpx [global_options] prompt [prompt_options] [prompt_text...]
57
57
  acpx [global_options] exec [prompt_options] [prompt_text...]
58
+ acpx [global_options] compare <agent>... '<prompt_text>'
59
+ acpx [global_options] compare <agent>... --file <path>
58
60
  acpx [global_options] cancel [-s <name>]
59
61
  acpx [global_options] set-mode <mode> [-s <name>]
60
62
  acpx [global_options] set <key> <value> [-s <name>]
@@ -87,10 +89,12 @@ Friendly agent names resolve to commands:
87
89
  - `cursor` -> `cursor-agent acp`
88
90
  - `copilot` -> `copilot --acp --stdio`
89
91
  - `droid` -> `droid exec --output-format acp` (`factory-droid` and `factorydroid` also resolve to `droid`)
92
+ - `fast-agent` -> `uvx fast-agent-mcp acp`
90
93
  - `iflow` -> `iflow --experimental-acp`
91
94
  - `kilocode` -> `npx -y @kilocode/cli acp`
92
95
  - `kimi` -> `kimi acp`
93
96
  - `kiro` -> `kiro-cli-chat acp`
97
+ - `mux` -> `npx -y mux@^0.27.0 acp`
94
98
  - `opencode` -> `npx -y opencode-ai acp`
95
99
  - `qoder` -> `qodercli --acp`
96
100
  Forwards Qoder-native `--allowed-tools` and `--max-turns` startup flags from `acpx` session options.
@@ -147,6 +151,23 @@ Behavior:
147
151
  - Runs a single prompt in a temporary ACP session
148
152
  - Does not reuse or save persistent session state
149
153
 
154
+ ### Compare (multi-agent one-shot)
155
+
156
+ ```bash
157
+ acpx compare pi openclaw codex 'summarize this checkout'
158
+ acpx --format json compare codex claude --file prompt.md
159
+ ```
160
+
161
+ Behavior:
162
+
163
+ - Runs the same temporary-session prompt against each listed agent
164
+ - Runs agents serially in the requested workspace
165
+ - Reuses the global `exec` controls: cwd, timeout, permissions, `--policy`, auth, terminal, retries, model/system options, and output format
166
+ - `--format text` prints one summary table row per agent
167
+ - `--format json` or `--json` prints `CompareRow[]`
168
+ - `--format quiet` prints `<agent>\t<status>` per row
169
+ - Does not create saved sessions or separate compare transcript directories
170
+
150
171
  ### Cancel / Mode / Config / Model
151
172
 
152
173
  ```bash
@@ -163,8 +184,8 @@ Behavior:
163
184
  - `set-mode` mode ids are adapter-defined; unsupported values are rejected by the adapter (often `Invalid params`).
164
185
  - `set`: calls ACP `session/set_config_option`.
165
186
  - For codex, reasoning effort is selected through advertised ACP model ids when the adapter reports model variants.
166
- - `--model <id>`: Claude-compatible adapters may consume session creation metadata; other agents must advertise ACP models and support `session/set_model`, otherwise `acpx` fails clearly instead of silently falling back.
167
- - `set model <id>`: calls `session/set_model`. This is the generic ACP method for mid-session model switching.
187
+ - `--model <id>`: Claude-compatible adapters may consume session creation metadata; other agents must advertise a model config option or legacy `models` metadata.
188
+ - `set model <id>`: uses `session/set_config_option` for advertised model config options and preserves `session/set_model` for explicitly advertised legacy models.
168
189
  - `set-mode`/`set` route through queue-owner IPC when active, otherwise reconnect directly.
169
190
 
170
191
  ### Sessions
@@ -240,7 +261,7 @@ Behavior:
240
261
  - `--suppress-reads`: suppress raw read-file contents while preserving the selected format
241
262
  - `--timeout <seconds>`: max wait time (positive number)
242
263
  - `--ttl <seconds>`: queue owner idle TTL before shutdown (default `300`, `0` disables TTL)
243
- - `--model <id>`: request an agent model during session creation; non-Claude agents must advertise ACP models and support `session/set_model`
264
+ - `--model <id>`: request an agent model during session creation; non-Claude agents must advertise a model config option or legacy `models` metadata
244
265
  - `--system-prompt <text>`: replace the agent system prompt. Forwarded to claude-agent-acp via ACP `_meta.systemPrompt`; persisted in `session_options.system_prompt` so reuse keeps the override. Other agents ignore the field.
245
266
  - `--append-system-prompt <text>`: append text to the agent system prompt. Forwarded to claude-agent-acp via ACP `_meta.systemPrompt.append`; same persistence rules as `--system-prompt`.
246
267
  - `--allowed-tools <list>`: comma-separated tool whitelist (use `""` for no tools)
@@ -265,6 +286,16 @@ acpx --append-system-prompt "Always explain trade-offs before recommending a fix
265
286
 
266
287
  The override is forwarded via ACP `_meta.systemPrompt` (or `_meta.systemPrompt.append`) on `session/new` and stored in `session_options.system_prompt`. Subsequent `prompt`/`ensure` calls in the same scope keep the override unless you explicitly create a new session. Non-Claude adapters ignore the field, so the same flag is safe inside cross-agent scripts.
267
288
 
289
+ ## Claude settings isolation
290
+
291
+ Built-in `acpx claude` sessions load Claude project and local settings, but not
292
+ user settings. This prevents globally enabled channel and daemon plugins from
293
+ claiming singleton external resources in an ACP-spawned session.
294
+
295
+ Set `ACPX_CLAUDE_INCLUDE_USER_SETTINGS=1` only when the spawned session needs
296
+ the user's global Claude settings and no such plugin conflict exists. Ambient
297
+ credentials and other environment variables are still inherited normally.
298
+
268
299
  ## Sessions cleanup
269
300
 
270
301
  Closed session records accumulate on disk by default. Use `sessions prune` to enforce retention:
@@ -307,6 +338,27 @@ For ACP `authenticate` handshakes, use either config `auth` entries or explicit
307
338
  Ambient provider env vars such as `OPENAI_API_KEY` are still passed through to
308
339
  child agents, but they do not trigger ACP auth-method selection on their own.
309
340
 
341
+ ## Devin ACP compatibility
342
+
343
+ Devin is not a built-in agent shortcut. Use the raw command escape hatch:
344
+
345
+ ```bash
346
+ acpx --agent 'devin acp' exec 'summarize this repo'
347
+ ```
348
+
349
+ Pass Devin global flags such as `--model <model>` before `acp` when needed.
350
+
351
+ When `acpx` detects a Devin ACP launch (`devin ... acp`, `devin ... --acp`, or `devin ... --experimental-acp`), it advertises the minimum Windsurf-compatible metadata needed for Devin's ACP gate:
352
+
353
+ - `clientInfo.name`: `windsurf` instead of `acpx`
354
+ - `clientInfo.version`: `ACPX_DEVIN_WINDSURF_VERSION` env var, default `1.110.1`
355
+ - `clientCapabilities`: standard `fs` and `terminal` support, plus `_meta["cognition.ai/requestDiagnostics"] = true`
356
+ - Extension handling: returns `{}` for Devin `_cognition.ai/request_diagnostics` requests and accepts extension notifications without method-not-found noise
357
+
358
+ This compatibility shim is scoped to Devin ACP launches only. Other agents continue to receive standard `acpx` identity and capabilities.
359
+
360
+ See the repository [`agents/Devin.md`](https://github.com/openclaw/acpx/blob/main/agents/Devin.md) for the full Devin compatibility contract.
361
+
310
362
  ## Session behavior
311
363
 
312
364
  Persistent prompt sessions are scoped by:
@@ -1 +0,0 @@
1
- {"version":3,"file":"client-C4iJBO0j.d.ts","names":[],"sources":["../src/acp/client.ts"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"flags--2oX_ubW.js","names":["asRecord","resolveAgentCommandFromRegistry"],"sources":["../src/permission-policy.ts","../src/cli/flags.ts"],"sourcesContent":["import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport {\n PERMISSION_POLICY_ACTIONS,\n type PermissionPolicy,\n type PermissionPolicyAction,\n} from \"./types.js\";\n\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return undefined;\n }\n return value as Record<string, unknown>;\n}\n\nfunction parseRuleList(value: unknown, key: string, source: string): string[] | undefined {\n if (value == null) {\n return undefined;\n }\n if (!Array.isArray(value)) {\n throw new Error(`${source}: permission policy ${key} must be an array of strings`);\n }\n\n const parsed = value.map((entry) => {\n if (typeof entry !== \"string\" || entry.trim().length === 0) {\n throw new Error(`${source}: permission policy ${key} must contain only non-empty strings`);\n }\n return entry.trim();\n });\n\n return parsed;\n}\n\nfunction isPermissionPolicyAction(value: unknown): value is PermissionPolicyAction {\n return (\n typeof value === \"string\" && PERMISSION_POLICY_ACTIONS.includes(value as PermissionPolicyAction)\n );\n}\n\nfunction parseDefaultAction(\n value: unknown,\n source: string,\n): PermissionPolicy[\"defaultAction\"] | undefined {\n if (value == null) {\n return undefined;\n }\n if (!isPermissionPolicyAction(value)) {\n throw new Error(\n `${source}: permission policy defaultAction must be one of ${PERMISSION_POLICY_ACTIONS.join(\", \")}`,\n );\n }\n return value;\n}\n\nfunction assignRuleList(\n policy: PermissionPolicy,\n key: \"autoApprove\" | \"autoDeny\" | \"escalate\",\n value: string[] | undefined,\n): void {\n if (value) {\n policy[key] = value;\n }\n}\n\nexport function parsePermissionPolicy(\n value: unknown,\n source = \"permission policy\",\n): PermissionPolicy {\n const record = asRecord(value);\n if (!record) {\n throw new Error(`${source}: permission policy must be a JSON object`);\n }\n\n const policy: PermissionPolicy = {};\n assignRuleList(policy, \"autoApprove\", parseRuleList(record.autoApprove, \"autoApprove\", source));\n assignRuleList(policy, \"autoDeny\", parseRuleList(record.autoDeny, \"autoDeny\", source));\n assignRuleList(policy, \"escalate\", parseRuleList(record.escalate, \"escalate\", source));\n\n const defaultAction = parseDefaultAction(record.defaultAction, source);\n if (defaultAction) {\n policy.defaultAction = defaultAction;\n }\n\n return policy;\n}\n\nexport async function loadPermissionPolicySpec(\n spec: string | undefined,\n cwd: string,\n): Promise<PermissionPolicy | undefined> {\n const trimmed = spec?.trim();\n if (!trimmed) {\n return undefined;\n }\n\n if (trimmed.startsWith(\"{\")) {\n return parsePermissionPolicy(JSON.parse(trimmed), \"--permission-policy\");\n }\n\n const policyPath = path.resolve(cwd, trimmed);\n const raw = await fs.readFile(policyPath, \"utf8\");\n return parsePermissionPolicy(JSON.parse(raw), policyPath);\n}\n","import path from \"node:path\";\nimport { InvalidArgumentError } from \"commander\";\nimport type { Command } from \"commander\";\nimport {\n DEFAULT_AGENT_NAME,\n resolveAgentCommand as resolveAgentCommandFromRegistry,\n} from \"../agent-registry.js\";\nimport type { SystemPromptOption } from \"../runtime/engine/session-options.js\";\nimport { DEFAULT_QUEUE_OWNER_TTL_MS } from \"../session/session.js\";\nimport {\n AUTH_POLICIES,\n NON_INTERACTIVE_PERMISSION_POLICIES,\n OUTPUT_FORMATS,\n type AuthPolicy,\n type NonInteractivePermissionPolicy,\n type OutputFormat,\n type OutputPolicy,\n type PermissionMode,\n} from \"../types.js\";\nimport type { ResolvedAcpxConfig } from \"./config.js\";\n\nexport type PermissionFlags = {\n approveAll?: boolean;\n approveReads?: boolean;\n denyAll?: boolean;\n};\n\nexport function hasExplicitPermissionModeFlag(flags: PermissionFlags): boolean {\n return flags.approveAll === true || flags.approveReads === true || flags.denyAll === true;\n}\n\nexport type GlobalFlags = PermissionFlags & {\n agent?: string;\n cwd: string;\n authPolicy?: AuthPolicy;\n nonInteractivePermissions: NonInteractivePermissionPolicy;\n jsonStrict?: boolean;\n suppressReads?: boolean;\n terminal?: boolean;\n timeout?: number;\n ttl: number;\n verbose?: boolean;\n format: OutputFormat;\n model?: string;\n allowedTools?: string[];\n maxTurns?: number;\n systemPrompt?: SystemPromptOption;\n promptRetries?: number;\n permissionPolicy?: string;\n};\n\nexport type PromptFlags = {\n session?: string;\n wait?: boolean;\n file?: string;\n};\n\nexport type ExecFlags = {\n file?: string;\n};\n\nexport type SessionsNewFlags = {\n name?: string;\n resumeSession?: string;\n};\n\nexport type SessionsHistoryFlags = {\n limit: number;\n};\n\nexport type SessionsListFlags = {\n cursor?: string;\n filterCwd?: string;\n local?: boolean;\n};\n\nexport type SessionsExportFlags = {\n output: string;\n sourceCwd?: string;\n};\n\nexport type SessionsImportFlags = {\n name?: string;\n destinationCwd?: string;\n};\n\nexport type StatusFlags = {\n session?: string;\n};\n\nexport type SessionsPruneFlags = {\n dryRun?: boolean;\n before?: Date;\n olderThan?: number;\n includeHistory?: boolean;\n};\n\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : undefined;\n}\n\nfunction stringOption(value: unknown): string | undefined {\n return typeof value === \"string\" ? value : undefined;\n}\n\nfunction numberOption(value: unknown): number | undefined {\n return typeof value === \"number\" ? value : undefined;\n}\n\nfunction stringArrayOption(value: unknown): string[] | undefined {\n return Array.isArray(value) && value.every((entry) => typeof entry === \"string\")\n ? value\n : undefined;\n}\n\nfunction nonEmptyStringOption(value: unknown): string | undefined {\n return typeof value === \"string\" && value.length > 0 ? value : undefined;\n}\n\nexport function parseOutputFormat(value: string): OutputFormat {\n if (!OUTPUT_FORMATS.includes(value as OutputFormat)) {\n throw new InvalidArgumentError(\n `Invalid format \"${value}\". Expected one of: ${OUTPUT_FORMATS.join(\", \")}`,\n );\n }\n return value as OutputFormat;\n}\n\nexport function parseAuthPolicy(value: string): AuthPolicy {\n if (!AUTH_POLICIES.includes(value as AuthPolicy)) {\n throw new InvalidArgumentError(\n `Invalid auth policy \"${value}\". Expected one of: ${AUTH_POLICIES.join(\", \")}`,\n );\n }\n return value as AuthPolicy;\n}\n\nexport function parseNonInteractivePermissionPolicy(value: string): NonInteractivePermissionPolicy {\n if (!NON_INTERACTIVE_PERMISSION_POLICIES.includes(value as NonInteractivePermissionPolicy)) {\n throw new InvalidArgumentError(\n `Invalid non-interactive permission policy \"${value}\". Expected one of: ${NON_INTERACTIVE_PERMISSION_POLICIES.join(\", \")}`,\n );\n }\n return value as NonInteractivePermissionPolicy;\n}\n\nexport function parseTimeoutSeconds(value: string): number {\n const parsed = Number(value);\n if (!Number.isFinite(parsed) || parsed <= 0) {\n throw new InvalidArgumentError(\"Timeout must be a positive number of seconds\");\n }\n return Math.round(parsed * 1000);\n}\n\nexport function parseTtlSeconds(value: string): number {\n const parsed = Number(value);\n if (!Number.isFinite(parsed) || parsed < 0) {\n throw new InvalidArgumentError(\"TTL must be a non-negative number of seconds\");\n }\n return Math.round(parsed * 1000);\n}\n\nexport function parseSessionName(value: string): string {\n const trimmed = value.trim();\n if (trimmed.length === 0) {\n throw new InvalidArgumentError(\"Session name must not be empty\");\n }\n return trimmed;\n}\n\nexport function parseNonEmptyValue(label: string, value: string): string {\n const trimmed = value.trim();\n if (trimmed.length === 0) {\n throw new InvalidArgumentError(`${label} must not be empty`);\n }\n return trimmed;\n}\n\nexport function parseHistoryLimit(value: string): number {\n const parsed = Number(value);\n if (!Number.isInteger(parsed) || parsed <= 0) {\n throw new InvalidArgumentError(\"Limit must be a positive integer\");\n }\n return parsed;\n}\n\nexport function parseDaysOlderThan(value: string): number {\n const parsed = Number(value);\n if (!Number.isInteger(parsed) || parsed <= 0) {\n throw new InvalidArgumentError(\"--older-than must be a positive integer number of days\");\n }\n return parsed;\n}\n\nexport function parsePruneBeforeDate(value: string): Date {\n const date = new Date(value);\n if (Number.isNaN(date.getTime())) {\n throw new InvalidArgumentError(\n `--before must be a valid date (e.g. 2026-01-01 or 2026-01-01T00:00:00Z)`,\n );\n }\n return date;\n}\n\nexport function parseAllowedTools(value: string): string[] {\n const trimmed = value.trim();\n if (trimmed.length === 0) {\n return [];\n }\n\n const items = trimmed.split(\",\").map((item) => item.trim());\n if (items.some((item) => item.length === 0)) {\n throw new InvalidArgumentError(\n \"Allowed tools must be a comma-separated list without empty entries\",\n );\n }\n\n return items;\n}\n\nexport function parseMaxTurns(value: string): number {\n const parsed = Number(value);\n if (!Number.isInteger(parsed) || parsed <= 0) {\n throw new InvalidArgumentError(\"Max turns must be a positive integer\");\n }\n return parsed;\n}\n\nexport function resolveSystemPromptFlag(opts: {\n systemPrompt?: unknown;\n appendSystemPrompt?: unknown;\n}): SystemPromptOption | undefined {\n const replace = nonEmptyStringOption(opts.systemPrompt);\n const append = nonEmptyStringOption(opts.appendSystemPrompt);\n\n if (replace !== undefined && append !== undefined) {\n throw new InvalidArgumentError(\"Use only one of --system-prompt or --append-system-prompt\");\n }\n if (replace !== undefined) {\n return replace;\n }\n if (append !== undefined) {\n return { append };\n }\n return undefined;\n}\n\nexport function parsePromptRetries(value: string): number {\n const parsed = Number(value);\n if (!Number.isInteger(parsed) || parsed < 0) {\n throw new InvalidArgumentError(\"Prompt retries must be a non-negative integer\");\n }\n return parsed;\n}\n\nexport function resolvePermissionMode(\n flags: PermissionFlags,\n defaultMode: PermissionMode,\n): PermissionMode {\n const selected = [flags.approveAll, flags.approveReads, flags.denyAll].filter(Boolean).length;\n\n if (selected > 1) {\n throw new InvalidArgumentError(\n \"Use only one permission mode: --approve-all, --approve-reads, or --deny-all\",\n );\n }\n\n if (flags.approveAll) {\n return \"approve-all\";\n }\n if (flags.approveReads) {\n return \"approve-reads\";\n }\n if (flags.denyAll) {\n return \"deny-all\";\n }\n\n return defaultMode;\n}\n\nexport function addGlobalFlags(command: Command): Command {\n return command\n .option(\"--agent <command>\", \"Raw ACP agent command (escape hatch)\")\n .option(\"--cwd <dir>\", \"Working directory\", process.cwd())\n .option(\n \"--auth-policy <policy>\",\n \"Authentication policy: skip or fail when auth is required\",\n parseAuthPolicy,\n )\n .option(\"--approve-all\", \"Auto-approve all permission requests\")\n .option(\"--approve-reads\", \"Auto-approve read/search requests and prompt for writes\")\n .option(\"--deny-all\", \"Deny all permission requests\")\n .option(\n \"--non-interactive-permissions <policy>\",\n \"When prompting is unavailable: deny or fail\",\n parseNonInteractivePermissionPolicy,\n )\n .option(\n \"--permission-policy <json-or-file>\",\n \"Permission policy JSON or path (autoApprove, autoDeny, escalate, defaultAction)\",\n )\n .option(\"--policy <json-or-file>\", \"Alias for --permission-policy\")\n .option(\"--format <fmt>\", \"Output format: text, json, quiet\", parseOutputFormat)\n .option(\"--suppress-reads\", \"Suppress raw read-file contents in output\")\n .option(\"--model <id>\", \"Agent model id\")\n .option(\n \"--allowed-tools <list>\",\n 'Allowed tool names as a comma-separated list (use \"\" for no tools)',\n parseAllowedTools,\n )\n .option(\"--max-turns <count>\", \"Maximum turns for the session\", parseMaxTurns)\n .option(\n \"--system-prompt <text>\",\n \"Replace the agent system prompt (claude-agent-acp via ACP _meta.systemPrompt)\",\n (value: string) => parseNonEmptyValue(\"System prompt\", value),\n )\n .option(\n \"--append-system-prompt <text>\",\n \"Append text to the agent system prompt (claude-agent-acp via ACP _meta.systemPrompt.append)\",\n (value: string) => parseNonEmptyValue(\"Append system prompt\", value),\n )\n .option(\n \"--prompt-retries <count>\",\n \"Retry failed prompt turns on transient errors (default: 0)\",\n parsePromptRetries,\n )\n .option(\n \"--json-strict\",\n \"Strict JSON mode: requires --format json and suppresses non-JSON stderr output\",\n )\n .option(\"--no-terminal\", \"Do not advertise ACP terminal capability\")\n .option(\"--timeout <seconds>\", \"Maximum time to wait for agent response\", parseTimeoutSeconds)\n .option(\n \"--ttl <seconds>\",\n \"Queue owner idle TTL before shutdown (0 = keep alive forever) (default: 300)\",\n parseTtlSeconds,\n )\n .option(\"--verbose\", \"Enable verbose debug logs\");\n}\n\nexport function addSessionOption(command: Command): Command {\n return command\n .option(\"-s, --session <name>\", \"Use named session instead of cwd default\", parseSessionName)\n .option(\n \"--no-wait\",\n \"Queue prompt and return immediately when another prompt is already running\",\n );\n}\n\nexport function addSessionNameOption(command: Command): Command {\n return command.option(\n \"-s, --session <name>\",\n \"Use named session instead of cwd default\",\n parseSessionName,\n );\n}\n\nexport function resolveSessionNameFromFlags(\n flags: StatusFlags,\n command: Command,\n): string | undefined {\n const directSession = parseOptionalSessionName(flags.session);\n if (directSession !== undefined) {\n return directSession;\n }\n\n // Commander parses options on the parent command when flags appear before the\n // subcommand (e.g. `acpx codex -s foo cancel`). Use optsWithGlobals() so\n // subcommands can still access those values.\n const allOpts = asRecord(\n (command as unknown as { optsWithGlobals?: () => unknown }).optsWithGlobals?.(),\n );\n const globalSession = parseOptionalSessionName(allOpts?.session);\n if (globalSession !== undefined) {\n return globalSession;\n }\n\n const parentOpts = asRecord(command.parent?.opts?.() as unknown);\n return parseOptionalSessionName(parentOpts?.session);\n}\n\nfunction parseOptionalSessionName(value: unknown): string | undefined {\n const session = stringOption(value);\n return session === undefined ? undefined : parseSessionName(session);\n}\n\nexport function addPromptInputOption(command: Command): Command {\n return command.option(\"-f, --file <path>\", \"Read prompt text from file path (use - for stdin)\");\n}\n\nexport function resolveGlobalFlags(command: Command, config: ResolvedAcpxConfig): GlobalFlags {\n const opts = asRecord(command.optsWithGlobals() as unknown) ?? {};\n const format = parseOutputFormat(stringOption(opts.format) ?? config.format ?? \"text\");\n const jsonStrict = opts.jsonStrict === true;\n const verbose = opts.verbose === true;\n assertOutputFlagCompatibility(format, jsonStrict, verbose);\n\n return {\n agent: stringOption(opts.agent),\n cwd: resolveCwdOption(opts.cwd),\n authPolicy: resolveAuthPolicy(opts.authPolicy, config),\n nonInteractivePermissions: resolveNonInteractivePermissions(\n opts.nonInteractivePermissions,\n config,\n ),\n permissionPolicy: resolvePermissionPolicyOption(opts),\n jsonStrict,\n suppressReads: opts.suppressReads === true,\n terminal: resolveTerminalOption(opts.terminal),\n timeout: resolveTimeoutOption(opts.timeout, config),\n ttl: resolveTtlOption(opts.ttl, config),\n verbose,\n format,\n model: resolveModelOption(opts.model),\n allowedTools: stringArrayOption(opts.allowedTools),\n maxTurns: numberOption(opts.maxTurns),\n systemPrompt: resolveSystemPromptFlag(opts),\n promptRetries: numberOption(opts.promptRetries),\n approveAll: opts.approveAll ? true : undefined,\n approveReads: opts.approveReads ? true : undefined,\n denyAll: opts.denyAll ? true : undefined,\n };\n}\n\nfunction resolveCwdOption(value: unknown): string {\n return stringOption(value) ?? process.cwd();\n}\n\nfunction resolveAuthPolicy(optsValue: unknown, config: ResolvedAcpxConfig): AuthPolicy {\n const value = stringOption(optsValue);\n return value === undefined ? config.authPolicy : parseAuthPolicy(value);\n}\n\nfunction resolveNonInteractivePermissions(\n optsValue: unknown,\n config: ResolvedAcpxConfig,\n): NonInteractivePermissionPolicy {\n const value = stringOption(optsValue);\n return value === undefined\n ? config.nonInteractivePermissions\n : parseNonInteractivePermissionPolicy(value);\n}\n\nfunction resolvePermissionPolicyOption(opts: Record<string, unknown>): string | undefined {\n const primary = stringOption(opts.permissionPolicy);\n const alias = stringOption(opts.policy);\n if (primary !== undefined && alias !== undefined && primary !== alias) {\n throw new InvalidArgumentError(\n \"Use only one permission policy flag: --permission-policy or --policy\",\n );\n }\n return primary ?? alias;\n}\n\nfunction resolveTerminalOption(value: unknown): boolean | undefined {\n return value === false ? false : undefined;\n}\n\nfunction resolveTimeoutOption(value: unknown, config: ResolvedAcpxConfig): number | undefined {\n return numberOption(value) ?? config.timeoutMs;\n}\n\nfunction resolveTtlOption(value: unknown, config: ResolvedAcpxConfig): number {\n return numberOption(value) ?? config.ttlMs ?? DEFAULT_QUEUE_OWNER_TTL_MS;\n}\n\nfunction assertOutputFlagCompatibility(\n format: OutputFormat,\n jsonStrict: boolean,\n verbose: boolean,\n): void {\n if (jsonStrict && format !== \"json\") {\n throw new InvalidArgumentError(\"--json-strict requires --format json\");\n }\n\n if (jsonStrict && verbose) {\n throw new InvalidArgumentError(\"--json-strict cannot be combined with --verbose\");\n }\n}\n\nfunction resolveModelOption(value: unknown): string | undefined {\n const model = stringOption(value);\n return model === undefined ? undefined : parseNonEmptyValue(\"Model\", model);\n}\n\nexport function resolveOutputPolicy(format: OutputFormat, jsonStrict: boolean): OutputPolicy {\n return {\n format,\n jsonStrict,\n suppressReads: false,\n suppressNonJsonStderr: jsonStrict,\n queueErrorAlreadyEmitted: format !== \"quiet\",\n suppressSdkConsoleErrors: jsonStrict,\n };\n}\n\nexport function resolveAgentInvocation(\n explicitAgentName: string | undefined,\n globalFlags: GlobalFlags,\n config: ResolvedAcpxConfig,\n): {\n agentName: string;\n agentCommand: string;\n cwd: string;\n} {\n const override = globalFlags.agent?.trim();\n if (override && explicitAgentName) {\n throw new InvalidArgumentError(\"Do not combine positional agent with --agent override\");\n }\n\n const agentName = explicitAgentName ?? config.defaultAgent ?? DEFAULT_AGENT_NAME;\n const agentCommand =\n override && override.length > 0\n ? override\n : resolveAgentCommandFromRegistry(agentName, config.agents);\n\n return {\n agentName,\n agentCommand,\n cwd: path.resolve(globalFlags.cwd),\n };\n}\n"],"mappings":"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"}