acpx 0.9.0 → 0.10.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.
package/dist/runtime.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { a as AcpPermissionRequest, c as NonInteractivePermissionPolicy, f as SessionRecord, i as AcpPermissionDecision, l as PermissionMode, n as SystemPromptOption, s as McpServer$1, t as SessionAgentOptions } from "./session-options-CFudjdkU.js";
2
- import { t as AcpClient } from "./client-BssohYqM.js";
1
+ import { a as AcpPermissionRequest, c as NonInteractivePermissionPolicy, f as SessionRecord, i as AcpPermissionDecision, l as PermissionMode, n as SystemPromptOption, s as McpServer$1, t as SessionAgentOptions } from "./session-options-Bh1bIqQ2.js";
2
+ import { t as AcpClient } from "./client-C4iJBO0j.js";
3
3
  import fs from "node:fs";
4
4
  import { ToolCallContent, ToolCallLocation, ToolKind } from "@agentclientprotocol/sdk";
5
5
 
package/dist/runtime.js CHANGED
@@ -1,4 +1,4 @@
1
- import { C as applyConversation, Dt as isAcpResourceNotFoundError, E as AcpClient, Et as extractAcpError, K as defaultSessionEventLog, T as reconcileAgentSessionId, Tt as normalizeOutputError, W as parseSessionRecord, Z as assertPersistedKeyPolicy, _ as recordPromptSubmission, _t as withTimeout, a as applyRequestedModelIfAdvertised, c as setDesiredConfigOption, d as syncAdvertisedModelState, f as applyConfigOptionsToRecord, g as recordClientOperation, h as createSessionConversation, i as connectAndLoadSession, l as setDesiredModeId, m as cloneSessionConversation, n as runPromptTurn, ot as serializeSessionRecordForDisk, p as cloneSessionAcpxState, pt as textPrompt, r as withConnectedSession, s as setCurrentModelId, t as LiveSessionCheckpoint, v as recordSessionUpdate, vt as DEFAULT_AGENT_NAME, w as applyLifecycleSnapshotToRecord, x as persistSessionOptions, xt as resolveAgentCommand, y as trimConversationForRuntime, yt as listBuiltInAgents } from "./live-checkpoint-D5d-K9s1.js";
1
+ import { $ as defaultSessionEventLog, B as assertPersistedKeyPolicy, C as applyConversation, Dt as isAcpResourceNotFoundError, E as AcpClient, Et as extractAcpError, T as reconcileAgentSessionId, Tt as normalizeOutputError, X as serializeSessionRecordForDisk, Y as parseSessionRecord, _ as recordPromptSubmission, _t as withTimeout, a as applyRequestedModelIfAdvertised, c as setDesiredConfigOption, d as syncAdvertisedModelState, f as applyConfigOptionsToRecord, g as recordClientOperation, h as createSessionConversation, i as connectAndLoadSession, l as setDesiredModeId, m as cloneSessionConversation, n as runPromptTurn, p as cloneSessionAcpxState, pt as textPrompt, r as withConnectedSession, s as setCurrentModelId, t as LiveSessionCheckpoint, v as recordSessionUpdate, vt as DEFAULT_AGENT_NAME, w as applyLifecycleSnapshotToRecord, x as persistSessionOptions, xt as resolveAgentCommand, y as trimConversationForRuntime, yt as listBuiltInAgents } from "./live-checkpoint-CuFft_Nd.js";
2
2
  import path from "node:path";
3
3
  import fs from "node:fs/promises";
4
4
  import { randomUUID } from "node:crypto";
@@ -195,6 +195,12 @@ type SessionAcpxState = {
195
195
  };
196
196
  };
197
197
  };
198
+ type SessionImportedFrom = {
199
+ recordId: string;
200
+ cwdOriginal: string;
201
+ exportedBy: string;
202
+ exportedAt: string;
203
+ };
198
204
  type SessionRecord = {
199
205
  schema: typeof SESSION_RECORD_SCHEMA;
200
206
  acpxRecordId: string;
@@ -225,6 +231,7 @@ type SessionRecord = {
225
231
  cumulative_token_usage: SessionTokenUsage;
226
232
  request_token_usage: Record<string, SessionTokenUsage>;
227
233
  acpx?: SessionAcpxState;
234
+ importedFrom?: SessionImportedFrom;
228
235
  };
229
236
  //#endregion
230
237
  //#region src/runtime/engine/session-options.d.ts
@@ -239,4 +246,4 @@ type SessionAgentOptions = {
239
246
  };
240
247
  //#endregion
241
248
  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 };
242
- //# sourceMappingURL=session-options-CFudjdkU.d.ts.map
249
+ //# sourceMappingURL=session-options-Bh1bIqQ2.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-options-CFudjdkU.d.ts","names":[],"sources":["../src/prompt-content.ts","../src/types.ts","../src/runtime/engine/session-options.ts"],"mappings":";;;KAEY,WAAA,GAAc,YAAY;;;KCa1B,oBAAA;EACV,SAAA;EACA,GAAA,EAAK,wBAAA;EACL,YAAA,EAAc,QAAQ;AAAA;AAAA,KAGZ,qBAAA;EACN,OAAA;AAAA;EACA,OAAA;AAAA;EACA,OAAA;AAAA;EACA,OAAA;AAAA;EACA,OAAA;AAAA;AAAA,cAiBO,gBAAA;AAAA,KACD,cAAA,WAAyB,gBAAgB;AAAA,cAExC,aAAA;AAAA,KACD,UAAA,WAAqB,aAAa;AAAA,cAEjC,mCAAA;AAAA,KACD,8BAAA,WAAyC,mCAAmC;AAAA,cAE3E,yBAAA;AAAA,KACD,sBAAA,WAAiC,yBAAyB;AAAA,KAE1D,gBAAA;EACV,WAAA;EACA,QAAA;EACA,QAAA;EACA,aAAA,GAAgB,sBAAsB;AAAA;AAAA,KAG5B,yBAAA;EACV,IAAA;EACA,SAAA;EACA,UAAA;EACA,QAAA;EACA,SAAA;EACA,SAAA;EACA,QAAA,GAAW,QAAQ;EACnB,MAAA;EACA,WAAA;EACA,OAAA;EACA,SAAA;AAAA;AAAA,KAQU,iBAAA,GAAoB,UAAU;AAAA,KAC9B,mBAAA;AAAA,KAwCA,eAAA;EACV,SAAA;EACA,QAAA;EACA,MAAA;EACA,SAAA;AAAA;AAAA,KAGU,qBAAA;AAAA,KASA,qBAAA;AAAA,KAEA,eAAA;EACV,MAAA,EAAQ,qBAAA;EACR,MAAA,EAAQ,qBAAqB;EAC7B,OAAA;EACA,OAAA;EACA,SAAA;AAAA;AAAA,KAGU,eAAA;EACV,WAAA;EACA,aAAA;EACA,iBAAA;EACA,YAAA;EACA,aAAA;EACA,gBAAA;AAAA;AAAA,KAgDU,gBAAA;EACV,YAAA;EACA,GAAA;EACA,UAAA,GAAa,SAAA;EACb,cAAA,EAAgB,cAAA;EAChB,yBAAA,GAA4B,8BAAA;EAC5B,gBAAA,GAAmB,gBAAA;EACnB,eAAA,GAAkB,MAAA;EAClB,UAAA,GAAa,UAAA;EACb,QAAA;EACA,wBAAA;EACA,OAAA;EACA,cAAA;IACE,KAAA;IACA,YAAA;IACA,QAAA;IACA,YAAA;MAA0B,MAAA;IAAA;EAAA;EAE5B,YAAA,IAAgB,SAAA,EAAW,mBAAA,EAAqB,OAAA,EAAS,iBAAA;EACzD,kBAAA,IAAsB,SAAA,EAAW,mBAAA,EAAqB,OAAA,EAAS,iBAAA;EAC/D,eAAA,IAAmB,YAAA,EAAc,mBAAA;EACjC,iBAAA,IAAqB,SAAA,EAAW,eAAA;EAChC,sBAAA,IAA0B,KAAA,EAAO,yBAAA;EACjC,mBAAA,IACE,GAAA,EAAK,oBAAA,EACL,GAAA;IAAO,MAAA,EAAQ,WAAA;EAAA,MACZ,OAAA,CAAQ,qBAAA;AAAA;AAAA,cAGF,qBAAA;AAAA,KACD,mBAAA;EACV,MAAA;EACA,IAAA;IACE,KAAA;IACA,MAAA;EAAA;AAAA;AAAA,KAIQ,mBAAA;EACV,MAAA;EACA,SAAS;AAAA;AAAA,KAGC,kBAAA;EAEN,IAAA;AAAA;EAGA,OAAA;IACE,GAAA;IACA,OAAA;EAAA;AAAA;EAIF,KAAA,EAAO,mBAAA;AAAA;EAGP,KAAA,EAAO,mBAAmB;AAAA;AAAA,KAGpB,cAAA;EACV,EAAA;EACA,IAAA;EACA,SAAA;EACA,KAAA;EACA,iBAAA;EACA,iBAAA;AAAA;AAAA,KAGU,wBAAA;EAEN,IAAA;AAAA;EAGA,KAAA,EAAO,mBAAmB;AAAA;AAAA,KAGpB,iBAAA;EACV,WAAA;EACA,SAAA;EACA,QAAA;EACA,OAAA,EAAS,wBAAwB;EACjC,MAAA;AAAA;AAAA,KAGU,mBAAA;EAEN,IAAA;AAAA;EAGA,QAAA;IACE,IAAA;IACA,SAAA;EAAA;AAAA;EAIF,gBAAA;AAAA;EAGA,OAAA,EAAS,cAAc;AAAA;AAAA,KAGjB,kBAAA;EACV,EAAA;EACA,OAAA,EAAS,kBAAkB;AAAA;AAAA,KAGjB,mBAAA;EACV,OAAA,EAAS,mBAAA;EACT,YAAA,EAAc,MAAA,SAAe,iBAAA;EAC7B,iBAAA;AAAA;AAAA,KAGU,cAAA;EAEN,IAAA,EAAM,kBAAA;AAAA;EAGN,KAAA,EAAO,mBAAmB;AAAA;AAAA,KAIpB,iBAAA;EACV,YAAA;EACA,aAAA;EACA,2BAAA;EACA,uBAAA;AAAA;AAAA,KAWU,gBAAA;EACV,oBAAA;EACA,eAAA;EACA,eAAA;EACA,sBAAA,GAAyB,MAAA;EACzB,gBAAA;EACA,gBAAA;EACA,kBAAA;EACA,cAAA,GAAiB,mBAAmB;EACpC,eAAA;IACE,KAAA;IACA,aAAA;IACA,SAAA;IACA,aAAA;MAA2B,MAAA;IAAA;EAAA;AAAA;AAAA,KAInB,aAAA;EACV,MAAA,SAAe,qBAAA;EACf,YAAA;EACA,YAAA;EACA,cAAA;EACA,YAAA;EACA,GAAA;EACA,IAAA;EACA,SAAA;EACA,UAAA;EACA,OAAA;EACA,aAAA;EACA,QAAA,EAAU,eAAA;EACV,MAAA;EACA,QAAA;EACA,GAAA;EACA,cAAA;EACA,YAAA;EACA,iBAAA;EACA,mBAAA,GAAsB,MAAA,CAAO,OAAA;EAC7B,eAAA;EACA,yBAAA;EACA,eAAA;EACA,iBAAA,GAAoB,iBAAA;EACpB,KAAA;EACA,QAAA,EAAU,cAAA;EACV,UAAA;EACA,sBAAA,EAAwB,iBAAA;EACxB,mBAAA,EAAqB,MAAA,SAAe,iBAAA;EACpC,IAAA,GAAO,gBAAA;AAAA;;;KC/XG,kBAAA;EAAgC,MAAM;AAAA;AAAA,KAEtC,mBAAA;EACV,KAAA;EACA,YAAA;EACA,QAAA;EACA,YAAA,GAAe,kBAAkB;AAAA"}
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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "acpx",
3
- "version": "0.9.0",
3
+ "version": "0.10.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",
@@ -39,8 +39,13 @@
39
39
  "build:quiet": "tsdown --logLevel silent src/cli.ts src/flows.ts src/runtime.ts --format esm --dts --clean --platform node --target node22 --no-fixedExtension",
40
40
  "build:test": "node -e \"require('node:fs').rmSync('dist-test',{recursive:true,force:true})\" && tsgo -p tsconfig.test.json",
41
41
  "check": "pnpm run format:check && pnpm run typecheck && pnpm run lint && pnpm run build && pnpm run viewer:typecheck && pnpm run viewer:build && pnpm run test:coverage && pnpm run mutate",
42
+ "check:changed": "pnpm run check",
42
43
  "check:docs": "pnpm run format:docs:check && pnpm run lint:docs && pnpm run docs:site",
43
44
  "conformance:run": "tsx conformance/runner/run.ts",
45
+ "crabbox:hydrate": "crabbox actions hydrate",
46
+ "crabbox:run": "crabbox run",
47
+ "crabbox:stop": "crabbox stop",
48
+ "crabbox:warmup": "crabbox warmup",
44
49
  "dev": "tsx src/cli.ts",
45
50
  "docs:site": "node scripts/build-docs-site.mjs",
46
51
  "format": "oxfmt --write",
@@ -59,6 +64,7 @@
59
64
  "prepack": "tsdown --logLevel silent src/cli.ts src/flows.ts src/runtime.ts --format esm --dts --clean --platform node --target node22 --no-fixedExtension",
60
65
  "prepare": "husky",
61
66
  "test": "pnpm run build && pnpm run build:test && node --test dist-test/test/*.test.js",
67
+ "test:changed": "pnpm run test:coverage",
62
68
  "test:coverage": "pnpm run build && pnpm run build:test && node --test dist-test/test/*.test.js && c8 --all --check-coverage --lines 85 --branches 85 --functions 85 --statements 85 --include 'dist-test/src/flows/authoring.js' --include 'dist-test/src/flows/decision.js' --include 'dist-test/src/flows/definition.js' --include 'dist-test/src/flows/json.js' --include 'dist-test/src/flows/schema.js' --include 'dist-test/src/flows/store.js' --include 'dist-test/src/runtime/public/**/*.js' --include 'dist-test/src/runtime/engine/manager.js' --exclude 'dist-test/test/**/*.js' --exclude 'dist/**/*.js' node --test dist-test/test/flows.test.js dist-test/test/flows-store.test.js dist-test/test/runtime.test.js dist-test/test/runtime-events.test.js dist-test/test/runtime-manager.test.js dist-test/test/runtime-probe.test.js",
63
69
  "test:live": "pnpm run build:test && node --test dist-test/test/cursor-live.integration.js",
64
70
  "typecheck": "tsgo --noEmit",
@@ -20,6 +20,7 @@ Core capabilities:
20
20
  - Named parallel sessions (`-s/--session`)
21
21
  - Idempotent session creation (`sessions ensure`)
22
22
  - Session retention controls (`sessions prune` with age filters and history cleanup)
23
+ - Portable session export/import for moving records and history across machines
23
24
  - Queue-aware prompt submission with optional fire-and-forget (`--no-wait`)
24
25
  - Cooperative cancel command (`cancel`) for in-flight turns
25
26
  - Graceful cancellation via ACP `session/cancel` on interrupt
@@ -58,7 +59,7 @@ acpx [global_options] cancel [-s <name>]
58
59
  acpx [global_options] set-mode <mode> [-s <name>]
59
60
  acpx [global_options] set <key> <value> [-s <name>]
60
61
  acpx [global_options] status [-s <name>]
61
- acpx [global_options] sessions [list | new [--name <name>] | ensure [--name <name>] | close [name] | show [name] | history [name] [--limit <count>] | prune [--dry-run] [--before <date> | --older-than <days>] [--include-history]]
62
+ acpx [global_options] sessions [list | new [--name <name>] | ensure [--name <name>] | close [name] | show [name] | history [name] [--limit <count>] | export [name] --output <path> | import <archive> [--name <name>] [--cwd <dir>] | prune [--dry-run] [--before <date> | --older-than <days>] [--include-history]]
62
63
  acpx [global_options] config [show | init]
63
64
  acpx [global_options] flow run <file> [--input-json '<json>' | --input-file <path>] [--default-agent <name>]
64
65
 
@@ -69,7 +70,7 @@ acpx [global_options] <agent> cancel [-s <name>]
69
70
  acpx [global_options] <agent> set-mode <mode> [-s <name>]
70
71
  acpx [global_options] <agent> set <key> <value> [-s <name>]
71
72
  acpx [global_options] <agent> status [-s <name>]
72
- acpx [global_options] <agent> sessions [list | new [--name <name>] | ensure [--name <name>] | close [name] | show [name] | history [name] [--limit <count>] | prune [--dry-run] [--before <date> | --older-than <days>] [--include-history]]
73
+ acpx [global_options] <agent> sessions [list | new [--name <name>] | ensure [--name <name>] | close [name] | show [name] | history [name] [--limit <count>] | export [name] --output <path> | import <archive> [--name <name>] [--cwd <dir>] | prune [--dry-run] [--before <date> | --older-than <days>] [--include-history]]
73
74
  ```
74
75
 
75
76
  If prompt text is omitted and stdin is piped, `acpx` reads prompt text from stdin.
@@ -182,6 +183,8 @@ acpx sessions close
182
183
  acpx sessions close backend
183
184
  acpx sessions show
184
185
  acpx sessions history --limit 20
186
+ acpx sessions export backend --output backend-session.json
187
+ acpx sessions import backend-session.json --name backend-restored
185
188
  acpx sessions prune --dry-run --older-than 7
186
189
  acpx sessions prune --older-than 30 --include-history
187
190
  acpx status
@@ -192,6 +195,8 @@ acpx codex sessions ensure --name backend
192
195
  acpx codex sessions close backend
193
196
  acpx codex sessions show backend
194
197
  acpx codex sessions history backend --limit 20
198
+ acpx codex sessions export backend --output backend-session.json
199
+ acpx codex sessions import backend-session.json --name backend-restored
195
200
  acpx codex sessions prune --before 2026-04-01 --include-history
196
201
  acpx codex status
197
202
  ```
@@ -212,6 +217,10 @@ Behavior:
212
217
  - `close <name>` targets current cwd named session
213
218
  - `show [name]` prints stored metadata for that scoped session
214
219
  - `history [name]` prints stored turn history previews (default 20, use `--limit`)
220
+ - `export [name] --output <path>` writes a portable JSON archive containing session state and event history
221
+ - `import <archive>` creates a fresh local record, reopens the copied session as idle, keeps the provider session id, and clears source-machine process metadata
222
+ - imported sessions must resume that provider session; if the destination agent cannot load it, prompts fail clearly instead of starting an empty conversation
223
+ - `import --name <name>` and `--cwd <dir>` override the destination scope; import fails if that scope already has an active session or another local record already uses the same provider session id
215
224
  - `prune` deletes closed session records to reclaim disk space
216
225
  - `--dry-run` previews what would be deleted without touching disk
217
226
  - `--older-than <days>` and `--before <date>` filter by close time, falling back to last-used time when a record was never explicitly closed
@@ -1 +0,0 @@
1
- {"version":3,"file":"flags-C-rwARqg.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 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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"}