acpx 0.20.0 → 0.21.1

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 (42) hide show
  1. package/dist/{agent-registry-Gtwn7nMp.js → agent-registry-Cz9fD9H1.js} +5 -8
  2. package/dist/{agent-registry-Gtwn7nMp.js.map → agent-registry-Cz9fD9H1.js.map} +1 -1
  3. package/dist/agent-registry.d.ts +0 -2
  4. package/dist/agent-registry.d.ts.map +1 -1
  5. package/dist/agent-registry.js +1 -1
  6. package/dist/{cli-CnufHoAJ.js → cli-BLEPj7lL.js} +6 -8
  7. package/dist/{cli-CnufHoAJ.js.map → cli-BLEPj7lL.js.map} +1 -1
  8. package/dist/cli.d.ts +1 -5
  9. package/dist/cli.d.ts.map +1 -1
  10. package/dist/cli.js +27 -45
  11. package/dist/cli.js.map +1 -1
  12. package/dist/{client-R5OmZ--S.d.ts → client-D12zqSyN.d.ts} +3 -8
  13. package/dist/client-D12zqSyN.d.ts.map +1 -0
  14. package/dist/{flows-CTRAV28u.js → flows-BVpRv0Df.js} +19 -33
  15. package/dist/{flows-CTRAV28u.js.map → flows-BVpRv0Df.js.map} +1 -1
  16. package/dist/flows.d.ts +2 -14
  17. package/dist/flows.d.ts.map +1 -1
  18. package/dist/flows.js +1 -1
  19. package/dist/{invocation-options-DE3Z_fqa.js → invocation-options-VJlayf-0.js} +16 -12
  20. package/dist/{invocation-options-DE3Z_fqa.js.map → invocation-options-VJlayf-0.js.map} +1 -1
  21. package/dist/{ipc-D2BC99hf.js → ipc-BbYFsKOj.js} +38 -69
  22. package/dist/ipc-BbYFsKOj.js.map +1 -0
  23. package/dist/{output-B1Srnvko.js → output-mqRHzGzM.js} +10 -17
  24. package/dist/{output-B1Srnvko.js.map → output-mqRHzGzM.js.map} +1 -1
  25. package/dist/{queue-owner-runtime-Be8sr9L5.js → queue-owner-runtime-B0mPqOu4.js} +168 -117
  26. package/dist/queue-owner-runtime-B0mPqOu4.js.map +1 -0
  27. package/dist/runtime.d.ts +18 -26
  28. package/dist/runtime.d.ts.map +1 -1
  29. package/dist/runtime.js +29 -32
  30. package/dist/runtime.js.map +1 -1
  31. package/dist/{session-options-DQlqgFv2.d.ts → session-options-BlnP3WAc.d.ts} +8 -7
  32. package/dist/session-options-BlnP3WAc.d.ts.map +1 -0
  33. package/dist/{session-watch-CpYYtV62.js → session-watch-BnIxHQrU.js} +5 -6
  34. package/dist/{session-watch-CpYYtV62.js.map → session-watch-BnIxHQrU.js.map} +1 -1
  35. package/dist/{watch-Db2D1eYN.js → watch-bQXyUy3z.js} +3 -4
  36. package/dist/{watch-Db2D1eYN.js.map → watch-bQXyUy3z.js.map} +1 -1
  37. package/package.json +20 -20
  38. package/skills/acpx/SKILL.md +27 -1
  39. package/dist/client-R5OmZ--S.d.ts.map +0 -1
  40. package/dist/ipc-D2BC99hf.js.map +0 -1
  41. package/dist/queue-owner-runtime-Be8sr9L5.js.map +0 -1
  42. package/dist/session-options-DQlqgFv2.d.ts.map +0 -1
package/dist/flows.d.ts CHANGED
@@ -1,8 +1,7 @@
1
- import { C as PermissionPolicy, E as PromptInput, S as PermissionMode, b as McpServer$1, t as SessionAgentOptions, x as NonInteractivePermissionPolicy, y as AuthPolicy } from "./session-options-DQlqgFv2.js";
2
- import "./client-R5OmZ--S.js";
1
+ import { C as PermissionPolicy, E as PromptInput, S as PermissionMode, b as McpServer$1, t as SessionAgentOptions, x as NonInteractivePermissionPolicy, y as AuthPolicy } from "./session-options-BlnP3WAc.js";
2
+ import "./client-D12zqSyN.js";
3
3
  import { SetSessionConfigOptionResponse } from "@agentclientprotocol/sdk";
4
4
  import net from "node:net";
5
- //#region src/flows/types.d.ts
6
5
  type MaybePromise<T> = T | Promise<T>;
7
6
  type FlowRunDefinition<TInput = unknown> = {
8
7
  title?: string | ((context: {
@@ -238,8 +237,6 @@ type FlowRunnerOptions = {
238
237
  services?: Record<string, unknown>;
239
238
  outputRoot?: string;
240
239
  };
241
- //#endregion
242
- //#region src/flows/definition.d.ts
243
240
  export declare function defineFlow<TFlow extends FlowDefinition>(definition: TFlow): TFlow;
244
241
  export declare function acp(definition: Omit<AcpNodeDefinition, "nodeType">): AcpNodeDefinition;
245
242
  export declare function compute(definition: Omit<ComputeNodeDefinition, "nodeType">): ComputeNodeDefinition;
@@ -247,8 +244,6 @@ export declare function action(definition: Omit<FunctionActionNodeDefinition, "n
247
244
  export declare function action(definition: Omit<ShellActionNodeDefinition, "nodeType">): ShellActionNodeDefinition;
248
245
  export declare function shell(definition: Omit<ShellActionNodeDefinition, "nodeType">): ShellActionNodeDefinition;
249
246
  export declare function checkpoint(definition?: Omit<CheckpointNodeDefinition, "nodeType">): CheckpointNodeDefinition;
250
- //#endregion
251
- //#region src/flows/runtime.d.ts
252
247
  export declare class FlowRunner {
253
248
  private readonly resolveAgent;
254
249
  private readonly defaultCwd;
@@ -303,8 +298,6 @@ export declare class FlowRunner {
303
298
  private closePendingPersistentSessionClients;
304
299
  private runIsolatedPrompt;
305
300
  }
306
- //#endregion
307
- //#region src/flows/decision.d.ts
308
301
  type DecisionAcpOptions = Omit<AcpNodeDefinition, "nodeType" | "prompt" | "parse">;
309
302
  type DecisionDefinition<TChoice extends string> = DecisionAcpOptions & {
310
303
  question: string | ((context: FlowNodeContext) => string | Promise<string>);
@@ -318,17 +311,12 @@ export declare function decisionEdge<TChoice extends string>(args: {
318
311
  field?: string;
319
312
  cases: Record<TChoice, string>;
320
313
  }): FlowEdge;
321
- //#endregion
322
- //#region src/flows/store.d.ts
323
314
  export declare function flowRunsBaseDir(homeDir?: string): string;
324
- //#endregion
325
- //#region src/flows/json.d.ts
326
315
  type JsonObjectParseMode = "strict" | "fenced" | "compat";
327
316
  export declare function parseJsonObject(text: string, options?: {
328
317
  mode?: JsonObjectParseMode;
329
318
  }): unknown;
330
319
  export declare function parseStrictJsonObject(text: string): unknown;
331
320
  export declare function extractJsonObject(text: string): unknown;
332
- //#endregion
333
321
  export type { AcpNodeDefinition, ActionNodeDefinition, CheckpointNodeDefinition, ComputeNodeDefinition, DecisionDefinition, FlowDefinition, FlowEdge, FlowNodeCommon, FlowNodeContext, FlowNodeDefinition, FlowPermissionRequirements, FlowRunDefinition, FlowRunResult, FlowRunState, FlowRunnerOptions, FlowSessionBinding, FlowShellExecution, FlowShellResult, FlowStepRecord, FunctionActionNodeDefinition, JsonObjectParseMode, ResolvedFlowAgent, ShellActionExecution, ShellActionNodeDefinition, ShellActionResult };
334
322
  //# sourceMappingURL=flows.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"flows.d.ts","names":["McpServer"],"sources":["../src/flows/types.ts","../src/flows/definition.ts","../src/flows/runtime.ts","../src/flows/decision.ts","../src/flows/store.ts","../src/flows/json.ts"],"mappings":"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"}
1
+ {"version":3,"file":"flows.d.ts","names":["McpServer"],"sources":["../src/flows/types.ts","../src/flows/definition.ts","../src/flows/runtime.ts","../src/flows/decision.ts","../src/flows/store.ts","../src/flows/json.ts"],"mappings":"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"}
package/dist/flows.js CHANGED
@@ -1 +1 @@
1
- export { o as FlowRunner, l as acp, u as action, d as checkpoint, f as compute, t as decision, n as decisionEdge, p as defineFlow, r as extractJsonObject, s as flowRunsBaseDir, i as parseJsonObject, a as parseStrictJsonObject, m as shell } from "./flows-CTRAV28u.js";
1
+ export { o as FlowRunner, l as acp, u as action, d as checkpoint, f as compute, t as decision, n as decisionEdge, p as defineFlow, r as extractJsonObject, s as flowRunsBaseDir, i as parseJsonObject, a as parseStrictJsonObject, m as shell } from "./flows-BVpRv0Df.js";
@@ -1,11 +1,11 @@
1
- import { o as toTimerMilliseconds } from "./output-B1Srnvko.js";
2
- import { At as AUTH_POLICIES, Ft as PERMISSION_POLICY_ACTIONS, Mt as NON_INTERACTIVE_PERMISSION_POLICIES, Nt as OUTPUT_FORMATS } from "./ipc-D2BC99hf.js";
3
- import { d as resolveAgentCommand, l as normalizeAgentName, p as resolveCanonicalAgentName, u as resolveAgentArgv } from "./agent-registry-Gtwn7nMp.js";
4
- import "./queue-owner-runtime-Be8sr9L5.js";
1
+ import { o as toTimerMilliseconds } from "./output-mqRHzGzM.js";
2
+ import { At as AUTH_POLICIES, Ft as PERMISSION_POLICY_ACTIONS, Mt as NON_INTERACTIVE_PERMISSION_POLICIES, Nt as OUTPUT_FORMATS } from "./ipc-BbYFsKOj.js";
3
+ import { P as splitCommandLine, d as resolveAgentCommand, l as normalizeAgentName, p as resolveCanonicalAgentName, u as resolveAgentArgv } from "./agent-registry-Cz9fD9H1.js";
4
+ import "./queue-owner-runtime-B0mPqOu4.js";
5
5
  import path from "node:path";
6
6
  import { InvalidArgumentError } from "commander";
7
7
  import fs from "node:fs/promises";
8
- //#region src/cli/flags.ts
8
+ // src/cli/flags.ts
9
9
  function hasExplicitPermissionModeFlag(flags) {
10
10
  return flags.approveAll === true || flags.approveReads === true || flags.denyAll === true;
11
11
  }
@@ -228,7 +228,14 @@ function resolveModelOption(value) {
228
228
  return model === void 0 ? void 0 : parseNonEmptyValue("Model", model);
229
229
  }
230
230
  function resolveAgentOverride(value) {
231
- return value === void 0 ? void 0 : parseNonEmptyValue("Agent command", value);
231
+ if (value === void 0) return;
232
+ const command = parseNonEmptyValue("Agent command", value);
233
+ try {
234
+ splitCommandLine(command);
235
+ } catch (error) {
236
+ throw new InvalidArgumentError(error instanceof Error ? error.message : String(error));
237
+ }
238
+ return command;
232
239
  }
233
240
  function resolveOutputPolicy(format, jsonStrict) {
234
241
  return {
@@ -265,8 +272,7 @@ function resolveInvocationCommand(agentName, override, config) {
265
272
  ...agentArgv ? { agentArgv } : {}
266
273
  };
267
274
  }
268
- //#endregion
269
- //#region src/permission-policy.ts
275
+ // src/permission-policy.ts
270
276
  function asRecord(value) {
271
277
  if (!value || typeof value !== "object" || Array.isArray(value)) return;
272
278
  return value;
@@ -309,8 +315,7 @@ async function loadPermissionPolicySpec(spec, cwd) {
309
315
  const raw = await fs.readFile(policyPath, "utf8");
310
316
  return parsePermissionPolicy(JSON.parse(raw), policyPath);
311
317
  }
312
- //#endregion
313
- //#region src/cli/invocation-options.ts
318
+ // src/cli/invocation-options.ts
314
319
  function sessionOptionsFromGlobalFlags(globalFlags) {
315
320
  return {
316
321
  model: globalFlags.model,
@@ -339,7 +344,6 @@ async function resolvePermissionPolicyFromFlags(globalFlags) {
339
344
  throw new InvalidArgumentError(`Invalid permission policy: ${message}`);
340
345
  }
341
346
  }
342
- //#endregion
343
347
  export { resolvePermissionMode as C, resolveSessionsListFlags as E, resolveOutputPolicy as S, resolveSessionNameFromFlags as T, parseSessionName as _, addGlobalFlags as a, resolveAgentInvocation as b, addSessionOption as c, parseDaysOlderThan as d, parseHistoryLimit as f, parsePruneBeforeDate as g, parseOutputFormat as h, addExecConfigOption as i, hasExplicitPermissionModeFlag as l, parseNonEmptyValue as m, sessionConnectionOptions as n, addPromptInputOption as o, parseMaxTurns as p, sessionOptionsFromGlobalFlags as r, addSessionNameOption as s, resolvePermissionPolicyFromFlags as t, parseAllowedTools as u, parseTimeoutSeconds as v, resolvePromptFlags as w, resolveGlobalFlags as x, parseTtlSeconds as y };
344
348
 
345
- //# sourceMappingURL=invocation-options-DE3Z_fqa.js.map
349
+ //# sourceMappingURL=invocation-options-VJlayf-0.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"invocation-options-DE3Z_fqa.js","names":["resolveAgentCommandFromRegistry"],"sources":["../src/cli/flags.ts","../src/permission-policy.ts","../src/cli/invocation-options.ts"],"sourcesContent":["import path from \"node:path\";\nimport { InvalidArgumentError } from \"commander\";\nimport type { Command } from \"commander\";\nimport {\n DEFAULT_AGENT_NAME,\n normalizeAgentName,\n resolveCanonicalAgentName,\n resolveAgentArgv,\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\";\nimport { toTimerMilliseconds } from \"./timer-duration.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 fs?: 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 configOption?: SessionConfigOptionAssignment[];\n};\n\nexport type SessionConfigOptionAssignment = {\n configId: string;\n value: 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\ntype SessionSelectionFlags = {\n session?: string;\n};\n\nexport type SessionsPruneFlags = {\n dryRun?: boolean;\n before?: Date;\n olderThan?: number;\n includeHistory?: boolean;\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 const milliseconds = toTimerMilliseconds(parsed, false);\n if (milliseconds === undefined) {\n throw new InvalidArgumentError(\"Timeout exceeds the maximum supported timer delay\");\n }\n return milliseconds;\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 const milliseconds = toTimerMilliseconds(parsed, true);\n if (milliseconds === undefined) {\n throw new InvalidArgumentError(\"TTL exceeds the maximum supported timer delay\");\n }\n return milliseconds;\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 parseSessionConfigOptionAssignment(value: string): SessionConfigOptionAssignment {\n const separator = value.indexOf(\"=\");\n if (separator <= 0 || separator === value.length - 1) {\n throw new InvalidArgumentError(\n 'Session config option must use \"<key>=<value>\" with non-empty parts',\n );\n }\n\n const configId = value.slice(0, separator).trim();\n const configValue = value.slice(separator + 1).trim();\n if (configId.length === 0 || configValue.length === 0) {\n throw new InvalidArgumentError(\n 'Session config option must use \"<key>=<value>\" with non-empty parts',\n );\n }\n return { configId, value: configValue };\n}\n\nfunction collectSessionConfigOptionAssignment(\n value: string,\n previous: SessionConfigOptionAssignment[] = [],\n): SessionConfigOptionAssignment[] {\n return [...previous, parseSessionConfigOptionAssignment(value)];\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-fs\", \"Do not advertise ACP filesystem capabilities\")\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(\n \"--mcp-config <path>\",\n \"Load MCP servers from a JSON config file instead of project/global mcpServers\",\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: SessionSelectionFlags,\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 = command.optsWithGlobals<Record<string, unknown>>();\n return parseOptionalSessionName(allOpts.session);\n}\n\nfunction parseOptionalSessionName(value: unknown): string | undefined {\n const session = stringOption(value);\n return session === undefined ? undefined : parseSessionName(session);\n}\n\nfunction resolveCommandOption(command: Command, key: string, fallback: unknown): unknown {\n // Explicit child values win; a child's --no-wait default must not hide a parent flag.\n for (let current: Command | null = command; current; current = current.parent) {\n if (current.getOptionValueSource(key) === \"cli\") {\n return current.opts<Record<string, unknown>>()[key];\n }\n }\n return fallback;\n}\n\nexport function resolvePromptFlags(flags: PromptFlags, command: Command): PromptFlags {\n return {\n ...flags,\n file: stringOption(resolveCommandOption(command, \"file\", flags.file)),\n wait: resolveCommandOption(command, \"wait\", flags.wait) !== false,\n };\n}\n\nexport function resolveSessionsListFlags(\n flags: SessionsListFlags,\n command: Command,\n): SessionsListFlags {\n return {\n cursor: stringOption(resolveCommandOption(command, \"cursor\", flags.cursor)),\n filterCwd: stringOption(resolveCommandOption(command, \"filterCwd\", flags.filterCwd)),\n local: resolveCommandOption(command, \"local\", flags.local) === true,\n };\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 addExecConfigOption(command: Command): Command {\n return command.option(\n \"--config-option <key=value>\",\n \"Set an ACP session config option before the one-shot prompt (repeatable)\",\n collectSessionConfigOptionAssignment,\n );\n}\n\nexport function resolveGlobalFlags(command: Command, config: ResolvedAcpxConfig): GlobalFlags {\n const opts = command.optsWithGlobals<Record<string, unknown>>();\n const format = parseOutputFormat(\n opts.json === true ? \"json\" : (stringOption(opts.format) ?? config.format ?? \"text\"),\n );\n const jsonStrict = opts.jsonStrict === true;\n const verbose = opts.verbose === true;\n assertOutputFlagCompatibility(format, jsonStrict, verbose);\n\n return {\n agent: resolveAgentOverride(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 fs: resolveCapabilityOption(opts.fs),\n terminal: resolveCapabilityOption(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 resolveCapabilityOption(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\nfunction resolveAgentOverride(value: string | undefined): string | undefined {\n return value === undefined ? undefined : parseNonEmptyValue(\"Agent command\", value);\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 || format === \"quiet\",\n };\n}\n\nexport function resolveAgentInvocation(\n explicitAgentName: string | undefined,\n globalFlags: GlobalFlags,\n config: ResolvedAcpxConfig,\n): {\n agentName: string;\n agentCommand: string;\n agentArgv?: string[];\n cwd: string;\n} {\n const override = resolveAgentOverride(globalFlags.agent);\n if (override !== undefined && explicitAgentName !== undefined) {\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 command = resolveInvocationCommand(agentName, override, config);\n\n return {\n agentName,\n ...command,\n cwd: path.resolve(globalFlags.cwd),\n };\n}\n\nfunction resolveInvocationCommand(\n agentName: string,\n override: string | undefined,\n config: ResolvedAcpxConfig,\n): { agentCommand: string; agentArgv?: string[] } {\n if (override !== undefined) {\n return { agentCommand: override };\n }\n const normalizedAgentName = normalizeAgentName(agentName);\n const canonicalAgentName = resolveCanonicalAgentName(agentName);\n const configuredAgent = Object.hasOwn(config.agents, normalizedAgentName)\n ? config.agents[normalizedAgentName]\n : Object.hasOwn(config.agents, canonicalAgentName)\n ? config.agents[canonicalAgentName]\n : undefined;\n if (configuredAgent) {\n return {\n agentCommand: configuredAgent.command,\n ...(configuredAgent.argv ? { agentArgv: [...configuredAgent.argv] } : {}),\n };\n }\n const agentArgv = resolveAgentArgv(agentName);\n return {\n agentCommand: resolveAgentCommandFromRegistry(agentName),\n ...(agentArgv ? { agentArgv } : {}),\n };\n}\n","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 { InvalidArgumentError } from \"commander\";\nimport { loadPermissionPolicySpec } from \"../permission-policy.js\";\nimport type {\n SessionConnectionOptions,\n SessionCreateOptions,\n} from \"../session/execution/contracts.js\";\nimport type { PermissionPolicy } from \"../types.js\";\nimport type { ResolvedAcpxConfig } from \"./config.js\";\nimport type { GlobalFlags } from \"./flags.js\";\n\nexport function sessionOptionsFromGlobalFlags(\n globalFlags: GlobalFlags,\n): NonNullable<SessionCreateOptions[\"sessionOptions\"]> {\n return {\n model: globalFlags.model,\n allowedTools: globalFlags.allowedTools,\n maxTurns: globalFlags.maxTurns,\n systemPrompt: globalFlags.systemPrompt,\n };\n}\n\nexport function sessionConnectionOptions(\n globalFlags: GlobalFlags,\n config: ResolvedAcpxConfig,\n): SessionConnectionOptions {\n return {\n mcpServers: config.mcpServers,\n nonInteractivePermissions: globalFlags.nonInteractivePermissions,\n authCredentials: config.auth,\n authPolicy: globalFlags.authPolicy,\n fs: globalFlags.fs,\n terminal: globalFlags.terminal,\n timeoutMs: globalFlags.timeout,\n verbose: globalFlags.verbose,\n };\n}\n\nexport async function resolvePermissionPolicyFromFlags(\n globalFlags: GlobalFlags,\n): Promise<PermissionPolicy | undefined> {\n try {\n return await loadPermissionPolicySpec(globalFlags.permissionPolicy, globalFlags.cwd);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n throw new InvalidArgumentError(`Invalid permission policy: ${message}`);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"invocation-options-VJlayf-0.js","names":["resolveAgentCommandFromRegistry"],"sources":["../src/cli/flags.ts","../src/permission-policy.ts","../src/cli/invocation-options.ts"],"sourcesContent":["import path from \"node:path\";\nimport { InvalidArgumentError } from \"commander\";\nimport type { Command } from \"commander\";\nimport { splitCommandLine } from \"../acp/client-process.js\";\nimport {\n DEFAULT_AGENT_NAME,\n normalizeAgentName,\n resolveCanonicalAgentName,\n resolveAgentArgv,\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\";\nimport { toTimerMilliseconds } from \"./timer-duration.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 fs?: 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 configOption?: SessionConfigOptionAssignment[];\n};\n\nexport type SessionConfigOptionAssignment = {\n configId: string;\n value: 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\ntype SessionSelectionFlags = {\n session?: string;\n};\n\nexport type SessionsPruneFlags = {\n dryRun?: boolean;\n before?: Date;\n olderThan?: number;\n includeHistory?: boolean;\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 const milliseconds = toTimerMilliseconds(parsed, false);\n if (milliseconds === undefined) {\n throw new InvalidArgumentError(\"Timeout exceeds the maximum supported timer delay\");\n }\n return milliseconds;\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 const milliseconds = toTimerMilliseconds(parsed, true);\n if (milliseconds === undefined) {\n throw new InvalidArgumentError(\"TTL exceeds the maximum supported timer delay\");\n }\n return milliseconds;\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 parseSessionConfigOptionAssignment(value: string): SessionConfigOptionAssignment {\n const separator = value.indexOf(\"=\");\n if (separator <= 0 || separator === value.length - 1) {\n throw new InvalidArgumentError(\n 'Session config option must use \"<key>=<value>\" with non-empty parts',\n );\n }\n\n const configId = value.slice(0, separator).trim();\n const configValue = value.slice(separator + 1).trim();\n if (configId.length === 0 || configValue.length === 0) {\n throw new InvalidArgumentError(\n 'Session config option must use \"<key>=<value>\" with non-empty parts',\n );\n }\n return { configId, value: configValue };\n}\n\nfunction collectSessionConfigOptionAssignment(\n value: string,\n previous: SessionConfigOptionAssignment[] = [],\n): SessionConfigOptionAssignment[] {\n return [...previous, parseSessionConfigOptionAssignment(value)];\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-fs\", \"Do not advertise ACP filesystem capabilities\")\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(\n \"--mcp-config <path>\",\n \"Load MCP servers from a JSON config file instead of project/global mcpServers\",\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: SessionSelectionFlags,\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 = command.optsWithGlobals<Record<string, unknown>>();\n return parseOptionalSessionName(allOpts.session);\n}\n\nfunction parseOptionalSessionName(value: unknown): string | undefined {\n const session = stringOption(value);\n return session === undefined ? undefined : parseSessionName(session);\n}\n\nfunction resolveCommandOption(command: Command, key: string, fallback: unknown): unknown {\n // Explicit child values win; a child's --no-wait default must not hide a parent flag.\n for (let current: Command | null = command; current; current = current.parent) {\n if (current.getOptionValueSource(key) === \"cli\") {\n return current.opts<Record<string, unknown>>()[key];\n }\n }\n return fallback;\n}\n\nexport function resolvePromptFlags(flags: PromptFlags, command: Command): PromptFlags {\n return {\n ...flags,\n file: stringOption(resolveCommandOption(command, \"file\", flags.file)),\n wait: resolveCommandOption(command, \"wait\", flags.wait) !== false,\n };\n}\n\nexport function resolveSessionsListFlags(\n flags: SessionsListFlags,\n command: Command,\n): SessionsListFlags {\n return {\n cursor: stringOption(resolveCommandOption(command, \"cursor\", flags.cursor)),\n filterCwd: stringOption(resolveCommandOption(command, \"filterCwd\", flags.filterCwd)),\n local: resolveCommandOption(command, \"local\", flags.local) === true,\n };\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 addExecConfigOption(command: Command): Command {\n return command.option(\n \"--config-option <key=value>\",\n \"Set an ACP session config option before the one-shot prompt (repeatable)\",\n collectSessionConfigOptionAssignment,\n );\n}\n\nexport function resolveGlobalFlags(command: Command, config: ResolvedAcpxConfig): GlobalFlags {\n const opts = command.optsWithGlobals<Record<string, unknown>>();\n const format = parseOutputFormat(\n opts.json === true ? \"json\" : (stringOption(opts.format) ?? config.format ?? \"text\"),\n );\n const jsonStrict = opts.jsonStrict === true;\n const verbose = opts.verbose === true;\n assertOutputFlagCompatibility(format, jsonStrict, verbose);\n\n return {\n agent: resolveAgentOverride(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 fs: resolveCapabilityOption(opts.fs),\n terminal: resolveCapabilityOption(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 resolveCapabilityOption(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\nfunction resolveAgentOverride(value: string | undefined): string | undefined {\n if (value === undefined) {\n return undefined;\n }\n const command = parseNonEmptyValue(\"Agent command\", value);\n // Parse now so a malformed command fails as a usage error instead of at spawn time.\n try {\n splitCommandLine(command);\n } catch (error) {\n throw new InvalidArgumentError(error instanceof Error ? error.message : String(error));\n }\n return command;\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 || format === \"quiet\",\n };\n}\n\nexport function resolveAgentInvocation(\n explicitAgentName: string | undefined,\n globalFlags: GlobalFlags,\n config: ResolvedAcpxConfig,\n): {\n agentName: string;\n agentCommand: string;\n agentArgv?: string[];\n cwd: string;\n} {\n const override = resolveAgentOverride(globalFlags.agent);\n if (override !== undefined && explicitAgentName !== undefined) {\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 command = resolveInvocationCommand(agentName, override, config);\n\n return {\n agentName,\n ...command,\n cwd: path.resolve(globalFlags.cwd),\n };\n}\n\nfunction resolveInvocationCommand(\n agentName: string,\n override: string | undefined,\n config: ResolvedAcpxConfig,\n): { agentCommand: string; agentArgv?: string[] } {\n if (override !== undefined) {\n return { agentCommand: override };\n }\n const normalizedAgentName = normalizeAgentName(agentName);\n const canonicalAgentName = resolveCanonicalAgentName(agentName);\n const configuredAgent = Object.hasOwn(config.agents, normalizedAgentName)\n ? config.agents[normalizedAgentName]\n : Object.hasOwn(config.agents, canonicalAgentName)\n ? config.agents[canonicalAgentName]\n : undefined;\n if (configuredAgent) {\n return {\n agentCommand: configuredAgent.command,\n ...(configuredAgent.argv ? { agentArgv: [...configuredAgent.argv] } : {}),\n };\n }\n const agentArgv = resolveAgentArgv(agentName);\n return {\n agentCommand: resolveAgentCommandFromRegistry(agentName),\n ...(agentArgv ? { agentArgv } : {}),\n };\n}\n","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 { InvalidArgumentError } from \"commander\";\nimport { loadPermissionPolicySpec } from \"../permission-policy.js\";\nimport type {\n SessionConnectionOptions,\n SessionCreateOptions,\n} from \"../session/execution/contracts.js\";\nimport type { PermissionPolicy } from \"../types.js\";\nimport type { ResolvedAcpxConfig } from \"./config.js\";\nimport type { GlobalFlags } from \"./flags.js\";\n\nexport function sessionOptionsFromGlobalFlags(\n globalFlags: GlobalFlags,\n): NonNullable<SessionCreateOptions[\"sessionOptions\"]> {\n return {\n model: globalFlags.model,\n allowedTools: globalFlags.allowedTools,\n maxTurns: globalFlags.maxTurns,\n systemPrompt: globalFlags.systemPrompt,\n };\n}\n\nexport function sessionConnectionOptions(\n globalFlags: GlobalFlags,\n config: ResolvedAcpxConfig,\n): SessionConnectionOptions {\n return {\n mcpServers: config.mcpServers,\n nonInteractivePermissions: globalFlags.nonInteractivePermissions,\n authCredentials: config.auth,\n authPolicy: globalFlags.authPolicy,\n fs: globalFlags.fs,\n terminal: globalFlags.terminal,\n timeoutMs: globalFlags.timeout,\n verbose: globalFlags.verbose,\n };\n}\n\nexport async function resolvePermissionPolicyFromFlags(\n globalFlags: GlobalFlags,\n): Promise<PermissionPolicy | undefined> {\n try {\n return await loadPermissionPolicySpec(globalFlags.permissionPolicy, globalFlags.cwd);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n throw new InvalidArgumentError(`Invalid permission policy: ${message}`);\n }\n}\n"],"mappings":"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"}