acpx 0.3.0 → 0.3.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.
package/README.md CHANGED
@@ -296,6 +296,8 @@ Built-ins:
296
296
  | `opencode` | `npx -y opencode-ai acp` | [OpenCode](https://opencode.ai) |
297
297
  | `qwen` | native (`qwen --acp`) | [Qwen Code](https://github.com/QwenLM/qwen-code) |
298
298
 
299
+ `factory-droid` and `factorydroid` also resolve to the built-in `droid` adapter.
300
+
299
301
  Additional built-in agent docs live in [agents/README.md](agents/README.md).
300
302
 
301
303
  Use `--agent` as an escape hatch for custom ACP servers:
package/dist/cli.js CHANGED
@@ -30,6 +30,10 @@ const AGENT_REGISTRY = {
30
30
  opencode: "npx -y opencode-ai acp",
31
31
  qwen: "qwen --acp"
32
32
  };
33
+ const AGENT_ALIASES = {
34
+ "factory-droid": "droid",
35
+ factorydroid: "droid"
36
+ };
33
37
  const DEFAULT_AGENT_NAME = "codex";
34
38
  function normalizeAgentName(value) {
35
39
  return value.trim().toLowerCase();
@@ -46,7 +50,8 @@ function mergeAgentRegistry(overrides) {
46
50
  }
47
51
  function resolveAgentCommand(agentName, overrides) {
48
52
  const normalized = normalizeAgentName(agentName);
49
- return mergeAgentRegistry(overrides)[normalized] ?? agentName;
53
+ const registry = mergeAgentRegistry(overrides);
54
+ return registry[normalized] ?? registry[AGENT_ALIASES[normalized] ?? normalized] ?? agentName;
50
55
  }
51
56
  function listBuiltInAgents(overrides) {
52
57
  return Object.keys(mergeAgentRegistry(overrides));
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","names":["parseOutputFormat","parseAuthPolicy","parseNonInteractivePermissionPolicy","resolveAgentCommandFromRegistry","asRecord","fs","fs"],"sources":["../src/agent-registry.ts","../src/cli/flags.ts","../src/mcp-servers.ts","../src/config.ts","../src/queue-owner-env.ts","../src/version.ts","../src/cli-core.ts","../src/cli.ts"],"sourcesContent":["const ACP_ADAPTER_PACKAGE_RANGES = {\n pi: \"^0.0.22\",\n codex: \"^0.9.5\",\n claude: \"^0.21.0\",\n} as const;\n\nexport const AGENT_REGISTRY: Record<string, string> = {\n pi: `npx pi-acp@${ACP_ADAPTER_PACKAGE_RANGES.pi}`,\n openclaw: \"openclaw acp\",\n codex: `npx @zed-industries/codex-acp@${ACP_ADAPTER_PACKAGE_RANGES.codex}`,\n claude: `npx -y @zed-industries/claude-agent-acp@${ACP_ADAPTER_PACKAGE_RANGES.claude}`,\n gemini: \"gemini --acp\",\n cursor: \"cursor-agent acp\",\n copilot: \"copilot --acp --stdio\",\n droid: \"droid exec --output-format acp\",\n iflow: \"iflow --experimental-acp\",\n kilocode: \"npx -y @kilocode/cli acp\",\n kimi: \"kimi acp\",\n kiro: \"kiro-cli acp\",\n opencode: \"npx -y opencode-ai acp\",\n qwen: \"qwen --acp\",\n};\n\nexport const DEFAULT_AGENT_NAME = \"codex\";\n\nexport function normalizeAgentName(value: string): string {\n return value.trim().toLowerCase();\n}\n\nexport function mergeAgentRegistry(overrides?: Record<string, string>): Record<string, string> {\n if (!overrides) {\n return { ...AGENT_REGISTRY };\n }\n\n const merged = { ...AGENT_REGISTRY };\n for (const [name, command] of Object.entries(overrides)) {\n const normalized = normalizeAgentName(name);\n if (!normalized || !command.trim()) {\n continue;\n }\n merged[normalized] = command.trim();\n }\n return merged;\n}\n\nexport function resolveAgentCommand(agentName: string, overrides?: Record<string, string>): string {\n const normalized = normalizeAgentName(agentName);\n const registry = mergeAgentRegistry(overrides);\n return registry[normalized] ?? agentName;\n}\n\nexport function listBuiltInAgents(overrides?: Record<string, string>): string[] {\n return Object.keys(mergeAgentRegistry(overrides));\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 { ResolvedAcpxConfig } from \"../config.js\";\nimport { DEFAULT_QUEUE_OWNER_TTL_MS } from \"../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\";\n\nexport type PermissionFlags = {\n approveAll?: boolean;\n approveReads?: boolean;\n denyAll?: boolean;\n};\n\nexport type GlobalFlags = PermissionFlags & {\n agent?: string;\n cwd: string;\n authPolicy?: AuthPolicy;\n nonInteractivePermissions: NonInteractivePermissionPolicy;\n jsonStrict?: boolean;\n timeout?: number;\n ttl: number;\n verbose?: boolean;\n format: OutputFormat;\n model?: string;\n allowedTools?: string[];\n maxTurns?: number;\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 StatusFlags = {\n session?: string;\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 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 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.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(\"--format <fmt>\", \"Output format: text, json, quiet\", parseOutputFormat)\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 \"--json-strict\",\n \"Strict JSON mode: requires --format json and suppresses non-JSON stderr output\",\n )\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 if (flags.session) {\n return flags.session;\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 as unknown as { optsWithGlobals?: () => unknown }).optsWithGlobals?.();\n if (allOpts && typeof (allOpts as { session?: unknown }).session === \"string\") {\n return parseSessionName((allOpts as { session: string }).session);\n }\n\n const parentOpts = command.parent?.opts?.();\n if (parentOpts && typeof (parentOpts as { session?: unknown }).session === \"string\") {\n return parseSessionName((parentOpts as { session: string }).session);\n }\n\n return undefined;\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 = command.optsWithGlobals();\n const format = opts.format ?? config.format ?? \"text\";\n const jsonStrict = opts.jsonStrict === true;\n const verbose = opts.verbose === true;\n\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 return {\n agent: opts.agent,\n cwd: opts.cwd ?? process.cwd(),\n authPolicy: opts.authPolicy ?? config.authPolicy,\n nonInteractivePermissions: opts.nonInteractivePermissions ?? config.nonInteractivePermissions,\n jsonStrict,\n timeout: opts.timeout ?? config.timeoutMs,\n ttl: opts.ttl ?? config.ttlMs ?? DEFAULT_QUEUE_OWNER_TTL_MS,\n verbose,\n format,\n model: typeof opts.model === \"string\" ? parseNonEmptyValue(\"Model\", opts.model) : undefined,\n allowedTools: Array.isArray(opts.allowedTools) ? opts.allowedTools : undefined,\n maxTurns: typeof opts.maxTurns === \"number\" ? opts.maxTurns : undefined,\n approveAll: opts.approveAll ? true : undefined,\n approveReads: opts.approveReads ? true : undefined,\n denyAll: opts.denyAll ? true : undefined,\n };\n}\n\nexport function resolveOutputPolicy(format: OutputFormat, jsonStrict: boolean): OutputPolicy {\n return {\n format,\n jsonStrict,\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","import type { EnvVariable, HttpHeader, McpServer } from \"@agentclientprotocol/sdk\";\n\ntype UnknownRecord = Record<string, unknown>;\n\nfunction asRecord(value: unknown): UnknownRecord | undefined {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return undefined;\n }\n return value as UnknownRecord;\n}\n\nfunction parseNonEmptyString(value: unknown, path: string): string {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new Error(`Invalid ${path}: expected non-empty string`);\n }\n return value.trim();\n}\n\nfunction parseHeaders(value: unknown, path: string): HttpHeader[] {\n if (value == null) {\n return [];\n }\n if (!Array.isArray(value)) {\n throw new Error(`Invalid ${path}: expected array`);\n }\n\n const headers: HttpHeader[] = [];\n for (const [index, rawHeader] of value.entries()) {\n const headerRecord = asRecord(rawHeader);\n if (!headerRecord) {\n throw new Error(`Invalid ${path}[${index}]: expected object`);\n }\n const name = parseNonEmptyString(headerRecord.name, `${path}[${index}].name`);\n const headerValue = parseNonEmptyString(headerRecord.value, `${path}[${index}].value`);\n headers.push({\n name,\n value: headerValue,\n });\n }\n return headers;\n}\n\nfunction parseArgs(value: unknown, path: string): string[] {\n if (value == null) {\n return [];\n }\n if (!Array.isArray(value)) {\n throw new Error(`Invalid ${path}: expected array`);\n }\n\n const args: string[] = [];\n for (const [index, rawArg] of value.entries()) {\n if (typeof rawArg !== \"string\") {\n throw new Error(`Invalid ${path}[${index}]: expected string`);\n }\n args.push(rawArg);\n }\n return args;\n}\n\nfunction parseEnv(value: unknown, path: string): EnvVariable[] {\n if (value == null) {\n return [];\n }\n if (!Array.isArray(value)) {\n throw new Error(`Invalid ${path}: expected array`);\n }\n\n const env: EnvVariable[] = [];\n for (const [index, rawEntry] of value.entries()) {\n const entry = asRecord(rawEntry);\n if (!entry) {\n throw new Error(`Invalid ${path}[${index}]: expected object`);\n }\n\n const name = parseNonEmptyString(entry.name, `${path}[${index}].name`);\n const envValue = parseNonEmptyString(entry.value, `${path}[${index}].value`);\n env.push({\n name,\n value: envValue,\n });\n }\n\n return env;\n}\n\nfunction parseMeta(value: unknown, path: string): Record<string, unknown> | null | undefined {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n if (!asRecord(value)) {\n throw new Error(`Invalid ${path}: expected object or null`);\n }\n return value as Record<string, unknown>;\n}\n\nfunction parseServer(rawServer: unknown, path: string): McpServer {\n const serverRecord = asRecord(rawServer);\n if (!serverRecord) {\n throw new Error(`Invalid ${path}: expected object`);\n }\n\n const name = parseNonEmptyString(serverRecord.name, `${path}.name`);\n const _meta = parseMeta(serverRecord._meta, `${path}._meta`);\n const rawType = serverRecord.type;\n\n let typeValue: \"http\" | \"sse\" | \"stdio\";\n if (rawType === undefined) {\n // Allow normalized stdio entries where type is omitted by ACP shape.\n typeValue = \"stdio\";\n } else {\n const parsedType = parseNonEmptyString(rawType, `${path}.type`);\n if (parsedType !== \"http\" && parsedType !== \"sse\" && parsedType !== \"stdio\") {\n throw new Error(`Invalid ${path}.type: expected http, sse, or stdio`);\n }\n typeValue = parsedType;\n }\n\n if (typeValue === \"http\" || typeValue === \"sse\") {\n const url = parseNonEmptyString(serverRecord.url, `${path}.url`);\n const headers = parseHeaders(serverRecord.headers, `${path}.headers`);\n const server = {\n type: typeValue,\n name,\n url,\n headers,\n _meta,\n } satisfies McpServer;\n return server;\n }\n\n if (typeValue === \"stdio\") {\n const command = parseNonEmptyString(serverRecord.command, `${path}.command`);\n const args = parseArgs(serverRecord.args, `${path}.args`);\n const env = parseEnv(serverRecord.env, `${path}.env`);\n const server = {\n name,\n command,\n args,\n env,\n _meta,\n } satisfies McpServer;\n return server;\n }\n\n throw new Error(`Invalid ${path}.type: expected http, sse, or stdio`);\n}\n\nexport function parseMcpServers(\n value: unknown,\n sourcePath: string,\n fieldName = \"mcpServers\",\n): McpServer[] {\n const fieldPath = `${fieldName} in ${sourcePath}`;\n if (!Array.isArray(value)) {\n throw new Error(`Invalid ${fieldPath}: expected array`);\n }\n\n const parsed: McpServer[] = [];\n for (const [index, rawServer] of value.entries()) {\n parsed.push(parseServer(rawServer, `${fieldName}[${index}] in ${sourcePath}`));\n }\n return parsed;\n}\n\nexport function parseOptionalMcpServers(\n value: unknown,\n sourcePath: string,\n fieldName = \"mcpServers\",\n): McpServer[] | undefined {\n if (value === undefined) {\n return undefined;\n }\n return parseMcpServers(value, sourcePath, fieldName);\n}\n","import fs from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { DEFAULT_AGENT_NAME, normalizeAgentName } from \"./agent-registry.js\";\nimport { parseMcpServers } from \"./mcp-servers.js\";\nimport type {\n AuthPolicy,\n McpServer,\n NonInteractivePermissionPolicy,\n OutputFormat,\n PermissionMode,\n} from \"./types.js\";\n\ntype ConfigAgentEntry = {\n command: string;\n};\n\ntype ConfigFileShape = {\n defaultAgent?: unknown;\n defaultPermissions?: unknown;\n nonInteractivePermissions?: unknown;\n authPolicy?: unknown;\n ttl?: unknown;\n timeout?: unknown;\n queueMaxDepth?: unknown;\n format?: unknown;\n agents?: unknown;\n auth?: unknown;\n disableExec?: unknown;\n mcpServers?: unknown;\n};\n\nexport type ResolvedAcpxConfig = {\n defaultAgent: string;\n defaultPermissions: PermissionMode;\n nonInteractivePermissions: NonInteractivePermissionPolicy;\n authPolicy: AuthPolicy;\n ttlMs: number;\n timeoutMs?: number;\n queueMaxDepth: number;\n format: OutputFormat;\n agents: Record<string, string>;\n auth: Record<string, string>;\n disableExec: boolean;\n mcpServers: McpServer[];\n globalPath: string;\n projectPath: string;\n hasGlobalConfig: boolean;\n hasProjectConfig: boolean;\n};\n\ntype ConfigFileLoadResult = {\n config?: ConfigFileShape;\n exists: boolean;\n};\n\nconst DEFAULT_TIMEOUT_MS = undefined;\nconst DEFAULT_TTL_MS = 300_000;\nconst DEFAULT_PERMISSION_MODE: PermissionMode = \"approve-reads\";\nconst DEFAULT_NON_INTERACTIVE_PERMISSION_POLICY: NonInteractivePermissionPolicy = \"deny\";\nconst DEFAULT_AUTH_POLICY: AuthPolicy = \"skip\";\nconst DEFAULT_OUTPUT_FORMAT: OutputFormat = \"text\";\nconst DEFAULT_QUEUE_MAX_DEPTH = 16;\nconst DEFAULT_DISABLE_EXEC = false;\nconst VALID_PERMISSION_MODES = new Set<PermissionMode>([\n \"approve-all\",\n \"approve-reads\",\n \"deny-all\",\n]);\nconst VALID_NON_INTERACTIVE_PERMISSION_POLICIES = new Set<NonInteractivePermissionPolicy>([\n \"deny\",\n \"fail\",\n]);\nconst VALID_AUTH_POLICIES = new Set<AuthPolicy>([\"skip\", \"fail\"]);\nconst VALID_OUTPUT_FORMATS = new Set<OutputFormat>([\"text\", \"json\", \"quiet\"]);\n\nfunction defaultGlobalConfigPath(): string {\n return path.join(os.homedir(), \".acpx\", \"config.json\");\n}\n\nfunction projectConfigPath(cwd: string): string {\n return path.join(path.resolve(cwd), \".acpxrc.json\");\n}\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction parseTtlMs(value: unknown, sourcePath: string): number | undefined {\n if (value == null) {\n return undefined;\n }\n if (typeof value !== \"number\" || !Number.isFinite(value) || value < 0) {\n throw new Error(`Invalid config ttl in ${sourcePath}: expected non-negative seconds`);\n }\n return Math.round(value * 1_000);\n}\n\nfunction parseTimeoutMs(value: unknown, sourcePath: string): number | undefined {\n if (value == null) {\n return undefined;\n }\n if (typeof value !== \"number\" || !Number.isFinite(value) || value <= 0) {\n throw new Error(`Invalid config timeout in ${sourcePath}: expected positive seconds or null`);\n }\n return Math.round(value * 1_000);\n}\n\nfunction parseQueueMaxDepth(value: unknown, sourcePath: string): number | undefined {\n if (value == null) {\n return undefined;\n }\n if (!Number.isInteger(value) || (value as number) <= 0) {\n throw new Error(`Invalid config queueMaxDepth in ${sourcePath}: expected positive integer`);\n }\n return value as number;\n}\n\nfunction parsePermissionMode(value: unknown, sourcePath: string): PermissionMode | undefined {\n if (value == null) {\n return undefined;\n }\n if (typeof value !== \"string\" || !VALID_PERMISSION_MODES.has(value as PermissionMode)) {\n throw new Error(\n `Invalid config defaultPermissions in ${sourcePath}: expected approve-all, approve-reads, or deny-all`,\n );\n }\n return value as PermissionMode;\n}\n\nfunction parseNonInteractivePermissionPolicy(\n value: unknown,\n sourcePath: string,\n): NonInteractivePermissionPolicy | undefined {\n if (value == null) {\n return undefined;\n }\n if (\n typeof value !== \"string\" ||\n !VALID_NON_INTERACTIVE_PERMISSION_POLICIES.has(value as NonInteractivePermissionPolicy)\n ) {\n throw new Error(\n `Invalid config nonInteractivePermissions in ${sourcePath}: expected deny or fail`,\n );\n }\n return value as NonInteractivePermissionPolicy;\n}\n\nfunction parseAuthPolicy(value: unknown, sourcePath: string): AuthPolicy | undefined {\n if (value == null) {\n return undefined;\n }\n if (typeof value !== \"string\" || !VALID_AUTH_POLICIES.has(value as AuthPolicy)) {\n throw new Error(`Invalid config authPolicy in ${sourcePath}: expected skip or fail`);\n }\n return value as AuthPolicy;\n}\n\nfunction parseOutputFormat(value: unknown, sourcePath: string): OutputFormat | undefined {\n if (value == null) {\n return undefined;\n }\n if (typeof value !== \"string\" || !VALID_OUTPUT_FORMATS.has(value as OutputFormat)) {\n throw new Error(`Invalid config format in ${sourcePath}: expected text, json, or quiet`);\n }\n return value as OutputFormat;\n}\n\nfunction parseDefaultAgent(value: unknown, sourcePath: string): string | undefined {\n if (value == null) {\n return undefined;\n }\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new Error(`Invalid config defaultAgent in ${sourcePath}: expected non-empty string`);\n }\n return normalizeAgentName(value);\n}\n\nfunction parseAgents(value: unknown, sourcePath: string): Record<string, string> | undefined {\n if (value == null) {\n return undefined;\n }\n if (!isObject(value)) {\n throw new Error(`Invalid config agents in ${sourcePath}: expected object`);\n }\n\n const parsed: Record<string, string> = {};\n for (const [name, raw] of Object.entries(value)) {\n if (!isObject(raw)) {\n throw new Error(\n `Invalid config agents.${name} in ${sourcePath}: expected object with command`,\n );\n }\n const command = raw.command;\n if (typeof command !== \"string\" || command.trim().length === 0) {\n throw new Error(\n `Invalid config agents.${name}.command in ${sourcePath}: expected non-empty string`,\n );\n }\n parsed[normalizeAgentName(name)] = command.trim();\n }\n\n return parsed;\n}\n\nfunction parseAuth(value: unknown, sourcePath: string): Record<string, string> | undefined {\n if (value == null) {\n return undefined;\n }\n if (!isObject(value)) {\n throw new Error(`Invalid config auth in ${sourcePath}: expected object`);\n }\n\n const parsed: Record<string, string> = {};\n for (const [methodId, rawCredential] of Object.entries(value)) {\n if (typeof rawCredential !== \"string\" || rawCredential.trim().length === 0) {\n throw new Error(\n `Invalid config auth.${methodId} in ${sourcePath}: expected non-empty string`,\n );\n }\n parsed[methodId] = rawCredential;\n }\n return parsed;\n}\n\nfunction parseDisableExec(value: unknown, sourcePath: string): boolean | undefined {\n if (value == null) {\n return undefined;\n }\n if (typeof value !== \"boolean\") {\n throw new Error(`Invalid config disableExec in ${sourcePath}: expected boolean`);\n }\n return value;\n}\n\nasync function readConfigFile(filePath: string): Promise<ConfigFileLoadResult> {\n try {\n const payload = await fs.readFile(filePath, \"utf8\");\n let parsed: unknown;\n try {\n parsed = JSON.parse(payload);\n } catch (error) {\n const reason = error instanceof Error ? error.message : String(error);\n throw new Error(`Invalid JSON in ${filePath}: ${reason}`, {\n cause: error,\n });\n }\n\n if (!isObject(parsed)) {\n throw new Error(`Invalid config in ${filePath}: expected top-level JSON object`);\n }\n return {\n config: parsed as ConfigFileShape,\n exists: true,\n };\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n return { exists: false };\n }\n throw error;\n }\n}\n\nfunction mergeAgents(\n globalAgents: Record<string, string> | undefined,\n projectAgents: Record<string, string> | undefined,\n): Record<string, string> {\n return {\n ...globalAgents,\n ...projectAgents,\n };\n}\n\nfunction mergeAuth(\n globalAuth: Record<string, string> | undefined,\n projectAuth: Record<string, string> | undefined,\n): Record<string, string> {\n return {\n ...globalAuth,\n ...projectAuth,\n };\n}\n\nexport async function loadResolvedConfig(cwd: string): Promise<ResolvedAcpxConfig> {\n const globalPath = defaultGlobalConfigPath();\n const projectPath = projectConfigPath(cwd);\n\n const [globalResult, projectResult] = await Promise.all([\n readConfigFile(globalPath),\n readConfigFile(projectPath),\n ]);\n\n const globalConfig = globalResult.config;\n const projectConfig = projectResult.config;\n\n const defaultAgent =\n parseDefaultAgent(projectConfig?.defaultAgent, projectPath) ??\n parseDefaultAgent(globalConfig?.defaultAgent, globalPath) ??\n DEFAULT_AGENT_NAME;\n\n const defaultPermissions =\n parsePermissionMode(projectConfig?.defaultPermissions, projectPath) ??\n parsePermissionMode(globalConfig?.defaultPermissions, globalPath) ??\n DEFAULT_PERMISSION_MODE;\n\n const nonInteractivePermissions =\n parseNonInteractivePermissionPolicy(projectConfig?.nonInteractivePermissions, projectPath) ??\n parseNonInteractivePermissionPolicy(globalConfig?.nonInteractivePermissions, globalPath) ??\n DEFAULT_NON_INTERACTIVE_PERMISSION_POLICY;\n\n const authPolicy =\n parseAuthPolicy(projectConfig?.authPolicy, projectPath) ??\n parseAuthPolicy(globalConfig?.authPolicy, globalPath) ??\n DEFAULT_AUTH_POLICY;\n\n const ttlMs =\n parseTtlMs(projectConfig?.ttl, projectPath) ??\n parseTtlMs(globalConfig?.ttl, globalPath) ??\n DEFAULT_TTL_MS;\n\n const timeoutConfiguredInProject =\n projectConfig != null && Object.prototype.hasOwnProperty.call(projectConfig, \"timeout\");\n const timeoutConfiguredInGlobal =\n globalConfig != null && Object.prototype.hasOwnProperty.call(globalConfig, \"timeout\");\n let timeoutMs: number | undefined = DEFAULT_TIMEOUT_MS;\n if (timeoutConfiguredInProject) {\n timeoutMs = parseTimeoutMs(projectConfig?.timeout, projectPath);\n } else if (timeoutConfiguredInGlobal) {\n timeoutMs = parseTimeoutMs(globalConfig?.timeout, globalPath);\n }\n\n const format =\n parseOutputFormat(projectConfig?.format, projectPath) ??\n parseOutputFormat(globalConfig?.format, globalPath) ??\n DEFAULT_OUTPUT_FORMAT;\n\n const queueMaxDepth =\n parseQueueMaxDepth(projectConfig?.queueMaxDepth, projectPath) ??\n parseQueueMaxDepth(globalConfig?.queueMaxDepth, globalPath) ??\n DEFAULT_QUEUE_MAX_DEPTH;\n\n const agents = mergeAgents(\n parseAgents(globalConfig?.agents, globalPath),\n parseAgents(projectConfig?.agents, projectPath),\n );\n const auth = mergeAuth(\n parseAuth(globalConfig?.auth, globalPath),\n parseAuth(projectConfig?.auth, projectPath),\n );\n\n const mcpServersConfiguredInProject =\n projectConfig != null && Object.prototype.hasOwnProperty.call(projectConfig, \"mcpServers\");\n const mcpServersConfiguredInGlobal =\n globalConfig != null && Object.prototype.hasOwnProperty.call(globalConfig, \"mcpServers\");\n let mcpServers: McpServer[] = [];\n if (mcpServersConfiguredInProject) {\n mcpServers = parseMcpServers(projectConfig?.mcpServers, projectPath);\n } else if (mcpServersConfiguredInGlobal) {\n mcpServers = parseMcpServers(globalConfig?.mcpServers, globalPath);\n }\n\n const disableExec =\n parseDisableExec(projectConfig?.disableExec, projectPath) ??\n parseDisableExec(globalConfig?.disableExec, globalPath) ??\n DEFAULT_DISABLE_EXEC;\n\n return {\n defaultAgent,\n defaultPermissions,\n nonInteractivePermissions,\n authPolicy,\n ttlMs,\n timeoutMs,\n queueMaxDepth,\n format,\n agents,\n auth,\n disableExec,\n mcpServers,\n globalPath,\n projectPath,\n hasGlobalConfig: globalResult.exists,\n hasProjectConfig: projectResult.exists,\n };\n}\n\nexport function toConfigDisplay(config: ResolvedAcpxConfig): {\n defaultAgent: string;\n defaultPermissions: PermissionMode;\n nonInteractivePermissions: NonInteractivePermissionPolicy;\n authPolicy: AuthPolicy;\n ttl: number;\n timeout: number | null;\n queueMaxDepth: number;\n format: OutputFormat;\n agents: Record<string, ConfigAgentEntry>;\n authMethods: string[];\n disableExec: boolean;\n} {\n const agents: Record<string, ConfigAgentEntry> = {};\n for (const [name, command] of Object.entries(config.agents)) {\n agents[name] = { command };\n }\n\n return {\n defaultAgent: config.defaultAgent,\n defaultPermissions: config.defaultPermissions,\n nonInteractivePermissions: config.nonInteractivePermissions,\n authPolicy: config.authPolicy,\n ttl: Math.round(config.ttlMs / 1_000),\n timeout: config.timeoutMs == null ? null : config.timeoutMs / 1_000,\n queueMaxDepth: config.queueMaxDepth,\n format: config.format,\n agents,\n authMethods: Object.keys(config.auth).toSorted(),\n disableExec: config.disableExec,\n };\n}\n\nexport async function initGlobalConfigFile(): Promise<{\n path: string;\n created: boolean;\n}> {\n const configPath = defaultGlobalConfigPath();\n await fs.mkdir(path.dirname(configPath), { recursive: true });\n\n try {\n await fs.access(configPath);\n return {\n path: configPath,\n created: false,\n };\n } catch {\n // file does not exist yet\n }\n\n const payload = {\n defaultAgent: DEFAULT_AGENT_NAME,\n defaultPermissions: \"approve-all\",\n nonInteractivePermissions: \"deny\",\n authPolicy: \"skip\",\n ttl: 300,\n timeout: null,\n queueMaxDepth: DEFAULT_QUEUE_MAX_DEPTH,\n format: \"text\",\n agents: {},\n auth: {},\n };\n\n await fs.writeFile(configPath, `${JSON.stringify(payload, null, 2)}\\n`, \"utf8\");\n return {\n path: configPath,\n created: true,\n };\n}\n","import { parseOptionalMcpServers } from \"./mcp-servers.js\";\nimport { runSessionQueueOwner, type QueueOwnerRuntimeOptions } from \"./session-runtime.js\";\n\ntype UnknownRecord = Record<string, unknown>;\n\nfunction asRecord(value: unknown): UnknownRecord | undefined {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return undefined;\n }\n return value as UnknownRecord;\n}\n\nexport function parseQueueOwnerPayload(raw: string): QueueOwnerRuntimeOptions {\n const parsed = JSON.parse(raw) as unknown;\n const record = asRecord(parsed);\n if (!record) {\n throw new Error(\"queue owner payload must be an object\");\n }\n\n if (typeof record.sessionId !== \"string\" || record.sessionId.trim().length === 0) {\n throw new Error(\"queue owner payload missing sessionId\");\n }\n if (\n record.permissionMode !== \"approve-all\" &&\n record.permissionMode !== \"approve-reads\" &&\n record.permissionMode !== \"deny-all\"\n ) {\n throw new Error(\"queue owner payload has invalid permissionMode\");\n }\n\n const options: QueueOwnerRuntimeOptions = {\n sessionId: record.sessionId,\n permissionMode: record.permissionMode,\n };\n\n const parsedMcpServers = parseOptionalMcpServers(record.mcpServers, \"queue owner payload\");\n if (parsedMcpServers) {\n options.mcpServers = parsedMcpServers;\n }\n\n if (typeof record.nonInteractivePermissions === \"string\") {\n options.nonInteractivePermissions =\n record.nonInteractivePermissions === \"deny\" || record.nonInteractivePermissions === \"fail\"\n ? record.nonInteractivePermissions\n : undefined;\n }\n\n if (record.authCredentials && typeof record.authCredentials === \"object\") {\n const entries = Object.entries(record.authCredentials as UnknownRecord).filter(\n ([, value]) => typeof value === \"string\",\n ) as Array<[string, string]>;\n options.authCredentials = Object.fromEntries(entries);\n }\n\n if (record.authPolicy === \"skip\" || record.authPolicy === \"fail\") {\n options.authPolicy = record.authPolicy;\n }\n\n if (typeof record.suppressSdkConsoleErrors === \"boolean\") {\n options.suppressSdkConsoleErrors = record.suppressSdkConsoleErrors;\n }\n\n if (typeof record.verbose === \"boolean\") {\n options.verbose = record.verbose;\n }\n\n if (typeof record.ttlMs === \"number\" && Number.isFinite(record.ttlMs)) {\n options.ttlMs = record.ttlMs;\n }\n\n if (typeof record.maxQueueDepth === \"number\" && Number.isFinite(record.maxQueueDepth)) {\n options.maxQueueDepth = Math.max(1, Math.round(record.maxQueueDepth));\n }\n\n return options;\n}\n\nexport async function runQueueOwnerFromEnv(env: NodeJS.ProcessEnv): Promise<void> {\n const payload = env.ACPX_QUEUE_OWNER_PAYLOAD;\n if (!payload) {\n throw new Error(\"missing ACPX_QUEUE_OWNER_PAYLOAD\");\n }\n const options = parseQueueOwnerPayload(payload);\n await runSessionQueueOwner(options);\n}\n","import { readFileSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nconst UNKNOWN_VERSION = \"0.0.0-unknown\";\nconst MODULE_DIR = path.dirname(fileURLToPath(import.meta.url));\n\nlet cachedVersion: string | null = null;\n\nfunction parseVersion(value: unknown): string | null {\n if (typeof value !== \"string\") {\n return null;\n }\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : null;\n}\n\nfunction readPackageVersion(packageJsonPath: string): string | null {\n try {\n const parsed = JSON.parse(readFileSync(packageJsonPath, \"utf8\")) as {\n version?: unknown;\n };\n return parseVersion(parsed.version);\n } catch {\n return null;\n }\n}\n\nfunction resolveVersionFromAncestors(startDir: string): string | null {\n let current = startDir;\n while (true) {\n const packageVersion = readPackageVersion(path.join(current, \"package.json\"));\n if (packageVersion) {\n return packageVersion;\n }\n const parent = path.dirname(current);\n if (parent === current) {\n return null;\n }\n current = parent;\n }\n}\n\nexport function resolveAcpxVersion(params?: {\n env?: NodeJS.ProcessEnv;\n packageJsonPath?: string;\n}): string {\n const env = params?.env ?? process.env;\n const envPackageName = parseVersion(env.npm_package_name);\n const envVersion = parseVersion(env.npm_package_version);\n if (envPackageName === \"acpx\" && envVersion) {\n return envVersion;\n }\n\n if (params?.packageJsonPath) {\n return readPackageVersion(params.packageJsonPath) ?? UNKNOWN_VERSION;\n }\n\n return resolveVersionFromAncestors(MODULE_DIR) ?? UNKNOWN_VERSION;\n}\n\nexport function getAcpxVersion(): string {\n if (cachedVersion) {\n return cachedVersion;\n }\n cachedVersion = resolveAcpxVersion();\n return cachedVersion;\n}\n","#!/usr/bin/env node\n\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { Command, CommanderError, InvalidArgumentError } from \"commander\";\nimport { listBuiltInAgents } from \"./agent-registry.js\";\nimport {\n addGlobalFlags,\n addPromptInputOption,\n addSessionNameOption,\n addSessionOption,\n parseAllowedTools,\n parseHistoryLimit,\n parseMaxTurns,\n parseNonEmptyValue,\n parseSessionName,\n parseTtlSeconds,\n resolveAgentInvocation,\n resolveGlobalFlags,\n resolveOutputPolicy,\n resolvePermissionMode,\n resolveSessionNameFromFlags,\n type ExecFlags,\n type PromptFlags,\n type SessionsHistoryFlags,\n type SessionsNewFlags,\n type StatusFlags,\n} from \"./cli/flags.js\";\nimport {\n initGlobalConfigFile,\n loadResolvedConfig,\n toConfigDisplay,\n type ResolvedAcpxConfig,\n} from \"./config.js\";\nimport {\n exitCodeForOutputErrorCode,\n normalizeOutputError,\n type NormalizedOutputError,\n} from \"./error-normalization.js\";\nimport { flushPerfMetricsCapture, installPerfMetricsCapture } from \"./perf-metrics-capture.js\";\nimport {\n mergePromptSourceWithText,\n parsePromptSource,\n PromptInputValidationError,\n textPrompt,\n} from \"./prompt-content.js\";\nimport { runQueueOwnerFromEnv } from \"./queue-owner-env.js\";\nimport {\n DEFAULT_HISTORY_LIMIT,\n findGitRepositoryRoot,\n findSession,\n findSessionByDirectoryWalk,\n} from \"./session-persistence.js\";\nimport { InterruptedError } from \"./session-runtime-helpers.js\";\nimport {\n EXIT_CODES,\n OUTPUT_FORMATS,\n type OutputFormat,\n type OutputPolicy,\n type SessionRecord,\n type SessionAgentContent,\n type SessionUserContent,\n} from \"./types.js\";\nimport { getAcpxVersion } from \"./version.js\";\n\nclass NoSessionError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"NoSessionError\";\n }\n}\n\nconst TOP_LEVEL_VERBS = new Set([\n \"prompt\",\n \"exec\",\n \"cancel\",\n \"set-mode\",\n \"set\",\n \"sessions\",\n \"status\",\n \"config\",\n \"help\",\n]);\n\nasync function readPromptInputFromStdin(): Promise<string> {\n let data = \"\";\n for await (const chunk of process.stdin) {\n data += String(chunk);\n }\n return data;\n}\n\nasync function readPrompt(\n promptParts: string[],\n filePath: string | undefined,\n cwd: string,\n): Promise<import(\"./types.js\").PromptInput> {\n try {\n if (filePath) {\n const source =\n filePath === \"-\"\n ? await readPromptInputFromStdin()\n : await fs.readFile(path.resolve(cwd, filePath), \"utf8\");\n const prompt = mergePromptSourceWithText(source, promptParts.join(\" \"));\n if (prompt.length === 0) {\n throw new InvalidArgumentError(\"Prompt from --file is empty\");\n }\n return prompt;\n }\n\n const joined = promptParts.join(\" \").trim();\n if (joined.length > 0) {\n return textPrompt(joined);\n }\n\n if (process.stdin.isTTY) {\n throw new InvalidArgumentError(\n \"Prompt is required (pass as argument, --file, or pipe via stdin)\",\n );\n }\n\n const prompt = parsePromptSource(await readPromptInputFromStdin());\n if (prompt.length === 0) {\n throw new InvalidArgumentError(\"Prompt from stdin is empty\");\n }\n\n return prompt;\n } catch (error) {\n if (error instanceof PromptInputValidationError) {\n throw new InvalidArgumentError(error.message);\n }\n throw error;\n }\n}\n\nfunction applyPermissionExitCode(result: {\n permissionStats: {\n requested: number;\n approved: number;\n denied: number;\n cancelled: number;\n };\n}): void {\n const stats = result.permissionStats;\n const deniedOrCancelled = stats.denied + stats.cancelled;\n\n if (stats.requested > 0 && stats.approved === 0 && deniedOrCancelled > 0) {\n process.exitCode = EXIT_CODES.PERMISSION_DENIED;\n }\n}\n\nfunction emitJsonResult(format: OutputFormat, payload: unknown): boolean {\n if (format !== \"json\") {\n return false;\n }\n process.stdout.write(`${JSON.stringify(payload)}\\n`);\n return true;\n}\n\nfunction isCodexAgentInvocation(agent: { agentName: string; agentCommand: string }): boolean {\n if (agent.agentName === \"codex\") {\n return true;\n }\n return /\\bcodex-acp\\b/.test(agent.agentCommand);\n}\n\nfunction resolveCompatibleConfigId(\n agent: { agentName: string; agentCommand: string },\n configId: string,\n): string {\n if (isCodexAgentInvocation(agent) && configId === \"thought_level\") {\n return \"reasoning_effort\";\n }\n return configId;\n}\n\nexport { parseAllowedTools, parseMaxTurns, parseTtlSeconds };\nexport { formatPromptSessionBannerLine } from \"./cli/output-render.js\";\n\ntype SessionModule = typeof import(\"./session.js\");\ntype OutputModule = typeof import(\"./output.js\");\ntype OutputRenderModule = typeof import(\"./cli/output-render.js\");\ntype QueueIpcModule = typeof import(\"./queue-ipc.js\");\ntype SkillflagModule = typeof import(\"skillflag\");\n\nlet sessionModulePromise: Promise<SessionModule> | undefined;\nlet outputModulePromise: Promise<OutputModule> | undefined;\nlet outputRenderModulePromise: Promise<OutputRenderModule> | undefined;\nlet queueIpcModulePromise: Promise<QueueIpcModule> | undefined;\nlet skillflagModulePromise: Promise<SkillflagModule> | undefined;\n\nfunction loadSessionModule(): Promise<SessionModule> {\n sessionModulePromise ??= import(\"./session.js\");\n return sessionModulePromise;\n}\n\nfunction loadOutputModule(): Promise<OutputModule> {\n outputModulePromise ??= import(\"./output.js\");\n return outputModulePromise;\n}\n\nfunction loadOutputRenderModule(): Promise<OutputRenderModule> {\n outputRenderModulePromise ??= import(\"./cli/output-render.js\");\n return outputRenderModulePromise;\n}\n\nfunction loadQueueIpcModule(): Promise<QueueIpcModule> {\n queueIpcModulePromise ??= import(\"./queue-ipc.js\");\n return queueIpcModulePromise;\n}\n\nfunction loadSkillflagModule(): Promise<SkillflagModule> {\n skillflagModulePromise ??= import(\"skillflag\");\n return skillflagModulePromise;\n}\n\nfunction shouldMaybeHandleSkillflag(argv: string[]): boolean {\n return argv.some((token) => token === \"--skill\" || token.startsWith(\"--skill=\"));\n}\n\nasync function findRoutedSessionOrThrow(\n agentCommand: string,\n agentName: string,\n cwd: string,\n sessionName: string | undefined,\n): Promise<SessionRecord> {\n const gitRoot = findGitRepositoryRoot(cwd);\n const walkBoundary = gitRoot ?? cwd;\n\n const record = await findSessionByDirectoryWalk({\n agentCommand,\n cwd,\n name: sessionName,\n boundary: walkBoundary,\n });\n\n if (record) {\n return record;\n }\n\n const createCmd = sessionName\n ? `acpx ${agentName} sessions new --name ${sessionName}`\n : `acpx ${agentName} sessions new`;\n throw new NoSessionError(\n `⚠ No acpx session found (searched up to ${walkBoundary}).\\nCreate one: ${createCmd}`,\n );\n}\n\nasync function handlePrompt(\n explicitAgentName: string | undefined,\n promptParts: string[],\n flags: PromptFlags,\n command: Command,\n config: ResolvedAcpxConfig,\n): Promise<void> {\n const globalFlags = resolveGlobalFlags(command, config);\n const outputPolicy = resolveOutputPolicy(globalFlags.format, globalFlags.jsonStrict === true);\n const permissionMode = resolvePermissionMode(globalFlags, config.defaultPermissions);\n const prompt = await readPrompt(promptParts, flags.file, globalFlags.cwd);\n const agent = resolveAgentInvocation(explicitAgentName, globalFlags, config);\n const [\n { createOutputFormatter },\n { printPromptSessionBanner, printQueuedPromptByFormat },\n { sendSession },\n ] = await Promise.all([loadOutputModule(), loadOutputRenderModule(), loadSessionModule()]);\n const record = await findRoutedSessionOrThrow(\n agent.agentCommand,\n agent.agentName,\n agent.cwd,\n flags.session,\n );\n const outputFormatter = createOutputFormatter(outputPolicy.format, {\n jsonContext: {\n sessionId: record.acpxRecordId,\n },\n });\n\n await printPromptSessionBanner(record, agent.cwd, outputPolicy.format, outputPolicy.jsonStrict);\n const result = await sendSession({\n sessionId: record.acpxRecordId,\n prompt,\n mcpServers: config.mcpServers,\n permissionMode,\n nonInteractivePermissions: globalFlags.nonInteractivePermissions,\n authCredentials: config.auth,\n authPolicy: globalFlags.authPolicy,\n outputFormatter,\n errorEmissionPolicy: {\n queueErrorAlreadyEmitted: outputPolicy.queueErrorAlreadyEmitted,\n },\n suppressSdkConsoleErrors: outputPolicy.suppressSdkConsoleErrors,\n timeoutMs: globalFlags.timeout,\n ttlMs: globalFlags.ttl,\n maxQueueDepth: config.queueMaxDepth,\n verbose: globalFlags.verbose,\n waitForCompletion: flags.wait !== false,\n });\n\n if (\"queued\" in result) {\n printQueuedPromptByFormat(result, outputPolicy.format);\n return;\n }\n\n applyPermissionExitCode(result);\n\n if (globalFlags.verbose && result.loadError) {\n process.stderr.write(`[acpx] loadSession failed, started fresh session: ${result.loadError}\\n`);\n }\n}\n\nasync function handleExec(\n explicitAgentName: string | undefined,\n promptParts: string[],\n flags: ExecFlags,\n command: Command,\n config: ResolvedAcpxConfig,\n): Promise<void> {\n if (config.disableExec) {\n const globalFlags = resolveGlobalFlags(command, config);\n const outputPolicy = resolveOutputPolicy(globalFlags.format, globalFlags.jsonStrict === true);\n if (outputPolicy.format === \"json\") {\n process.stdout.write(\n `${JSON.stringify({\n jsonrpc: \"2.0\",\n error: {\n code: -32603,\n message: \"exec subcommand is disabled by configuration (disableExec: true)\",\n data: {\n acpxCode: \"EXEC_DISABLED\",\n },\n },\n })}\\n`,\n );\n } else {\n process.stderr.write(\n \"Error: exec subcommand is disabled by configuration (disableExec: true)\\n\",\n );\n }\n process.exitCode = EXIT_CODES.ERROR;\n return;\n }\n\n const globalFlags = resolveGlobalFlags(command, config);\n const outputPolicy = resolveOutputPolicy(globalFlags.format, globalFlags.jsonStrict === true);\n const permissionMode = resolvePermissionMode(globalFlags, config.defaultPermissions);\n const prompt = await readPrompt(promptParts, flags.file, globalFlags.cwd);\n const [{ createOutputFormatter }, { runOnce }] = await Promise.all([\n loadOutputModule(),\n loadSessionModule(),\n ]);\n const outputFormatter = createOutputFormatter(outputPolicy.format);\n const agent = resolveAgentInvocation(explicitAgentName, globalFlags, config);\n\n const result = await runOnce({\n agentCommand: agent.agentCommand,\n cwd: agent.cwd,\n prompt,\n mcpServers: config.mcpServers,\n permissionMode,\n nonInteractivePermissions: globalFlags.nonInteractivePermissions,\n authCredentials: config.auth,\n authPolicy: globalFlags.authPolicy,\n outputFormatter,\n suppressSdkConsoleErrors: outputPolicy.suppressSdkConsoleErrors,\n timeoutMs: globalFlags.timeout,\n verbose: globalFlags.verbose,\n sessionOptions: {\n model: globalFlags.model,\n allowedTools: globalFlags.allowedTools,\n maxTurns: globalFlags.maxTurns,\n },\n });\n\n applyPermissionExitCode(result);\n}\n\nfunction printCancelResultByFormat(\n result: { sessionId: string; cancelled: boolean },\n format: OutputFormat,\n): void {\n if (\n emitJsonResult(format, {\n action: \"cancel_result\",\n acpxRecordId: result.sessionId || \"unknown\",\n cancelled: result.cancelled,\n })\n ) {\n return;\n }\n\n if (result.cancelled) {\n process.stdout.write(\"cancel requested\\n\");\n return;\n }\n\n process.stdout.write(\"nothing to cancel\\n\");\n}\n\nfunction printSetModeResultByFormat(\n modeId: string,\n result: { record: SessionRecord; resumed: boolean; loadError?: string },\n format: OutputFormat,\n): void {\n if (\n emitJsonResult(format, {\n action: \"mode_set\",\n modeId,\n resumed: result.resumed,\n acpxRecordId: result.record.acpxRecordId,\n acpxSessionId: result.record.acpSessionId,\n agentSessionId: result.record.agentSessionId,\n })\n ) {\n return;\n }\n\n if (format === \"quiet\") {\n process.stdout.write(`${modeId}\\n`);\n return;\n }\n\n process.stdout.write(`mode set: ${modeId}\\n`);\n}\n\nfunction printSetConfigOptionResultByFormat(\n configId: string,\n value: string,\n result: {\n record: SessionRecord;\n resumed: boolean;\n response: { configOptions: unknown[] };\n },\n format: OutputFormat,\n): void {\n if (\n emitJsonResult(format, {\n action: \"config_set\",\n configId,\n value,\n resumed: result.resumed,\n configOptions: result.response.configOptions,\n acpxRecordId: result.record.acpxRecordId,\n acpxSessionId: result.record.acpSessionId,\n agentSessionId: result.record.agentSessionId,\n })\n ) {\n return;\n }\n\n if (format === \"quiet\") {\n process.stdout.write(`${value}\\n`);\n return;\n }\n\n process.stdout.write(\n `config set: ${configId}=${value} (${result.response.configOptions.length} options)\\n`,\n );\n}\n\nasync function handleCancel(\n explicitAgentName: string | undefined,\n flags: StatusFlags,\n command: Command,\n config: ResolvedAcpxConfig,\n): Promise<void> {\n const globalFlags = resolveGlobalFlags(command, config);\n const agent = resolveAgentInvocation(explicitAgentName, globalFlags, config);\n const { cancelSessionPrompt } = await loadSessionModule();\n const gitRoot = findGitRepositoryRoot(agent.cwd);\n const walkBoundary = gitRoot ?? agent.cwd;\n const record = await findSessionByDirectoryWalk({\n agentCommand: agent.agentCommand,\n cwd: agent.cwd,\n name: resolveSessionNameFromFlags(flags, command),\n boundary: walkBoundary,\n });\n\n if (!record) {\n printCancelResultByFormat(\n {\n sessionId: \"\",\n cancelled: false,\n },\n globalFlags.format,\n );\n return;\n }\n\n const result = await cancelSessionPrompt({\n sessionId: record.acpxRecordId,\n verbose: globalFlags.verbose,\n });\n printCancelResultByFormat(result, globalFlags.format);\n}\n\nasync function handleSetMode(\n explicitAgentName: string | undefined,\n modeId: string,\n flags: StatusFlags,\n command: Command,\n config: ResolvedAcpxConfig,\n): Promise<void> {\n const globalFlags = resolveGlobalFlags(command, config);\n const agent = resolveAgentInvocation(explicitAgentName, globalFlags, config);\n const { setSessionMode } = await loadSessionModule();\n const record = await findRoutedSessionOrThrow(\n agent.agentCommand,\n agent.agentName,\n agent.cwd,\n resolveSessionNameFromFlags(flags, command),\n );\n const result = await setSessionMode({\n sessionId: record.acpxRecordId,\n modeId,\n mcpServers: config.mcpServers,\n nonInteractivePermissions: globalFlags.nonInteractivePermissions,\n authCredentials: config.auth,\n authPolicy: globalFlags.authPolicy,\n timeoutMs: globalFlags.timeout,\n verbose: globalFlags.verbose,\n });\n\n if (globalFlags.verbose && result.loadError) {\n process.stderr.write(`[acpx] loadSession failed, started fresh session: ${result.loadError}\\n`);\n }\n\n printSetModeResultByFormat(modeId, result, globalFlags.format);\n}\n\nasync function handleSetConfigOption(\n explicitAgentName: string | undefined,\n configId: string,\n value: string,\n flags: StatusFlags,\n command: Command,\n config: ResolvedAcpxConfig,\n): Promise<void> {\n const globalFlags = resolveGlobalFlags(command, config);\n const agent = resolveAgentInvocation(explicitAgentName, globalFlags, config);\n const resolvedConfigId = resolveCompatibleConfigId(agent, configId);\n const { setSessionConfigOption } = await loadSessionModule();\n const record = await findRoutedSessionOrThrow(\n agent.agentCommand,\n agent.agentName,\n agent.cwd,\n resolveSessionNameFromFlags(flags, command),\n );\n const result = await setSessionConfigOption({\n sessionId: record.acpxRecordId,\n configId: resolvedConfigId,\n value,\n mcpServers: config.mcpServers,\n nonInteractivePermissions: globalFlags.nonInteractivePermissions,\n authCredentials: config.auth,\n authPolicy: globalFlags.authPolicy,\n timeoutMs: globalFlags.timeout,\n verbose: globalFlags.verbose,\n });\n\n if (globalFlags.verbose && result.loadError) {\n process.stderr.write(`[acpx] loadSession failed, started fresh session: ${result.loadError}\\n`);\n }\n\n printSetConfigOptionResultByFormat(configId, value, result, globalFlags.format);\n}\n\nasync function handleSessionsList(\n explicitAgentName: string | undefined,\n command: Command,\n config: ResolvedAcpxConfig,\n): Promise<void> {\n const globalFlags = resolveGlobalFlags(command, config);\n const agent = resolveAgentInvocation(explicitAgentName, globalFlags, config);\n const [{ listSessionsForAgent }, { printSessionsByFormat }] = await Promise.all([\n loadSessionModule(),\n loadOutputRenderModule(),\n ]);\n const sessions = await listSessionsForAgent(agent.agentCommand);\n printSessionsByFormat(sessions, globalFlags.format);\n}\n\nasync function handleSessionsClose(\n explicitAgentName: string | undefined,\n sessionName: string | undefined,\n command: Command,\n config: ResolvedAcpxConfig,\n): Promise<void> {\n const globalFlags = resolveGlobalFlags(command, config);\n const agent = resolveAgentInvocation(explicitAgentName, globalFlags, config);\n const [{ closeSession }, { printClosedSessionByFormat }] = await Promise.all([\n loadSessionModule(),\n loadOutputRenderModule(),\n ]);\n\n const record = await findSession({\n agentCommand: agent.agentCommand,\n cwd: agent.cwd,\n name: sessionName,\n });\n\n if (!record) {\n if (sessionName) {\n throw new Error(\n `No named session \"${sessionName}\" for cwd ${agent.cwd} and agent ${agent.agentName}`,\n );\n }\n\n throw new Error(`No cwd session for ${agent.cwd} and agent ${agent.agentName}`);\n }\n\n const closed = await closeSession(record.acpxRecordId);\n printClosedSessionByFormat(closed, globalFlags.format);\n}\n\nasync function handleSessionsNew(\n explicitAgentName: string | undefined,\n flags: SessionsNewFlags,\n command: Command,\n config: ResolvedAcpxConfig,\n): Promise<void> {\n const globalFlags = resolveGlobalFlags(command, config);\n const permissionMode = resolvePermissionMode(globalFlags, config.defaultPermissions);\n const agent = resolveAgentInvocation(explicitAgentName, globalFlags, config);\n const [{ createSession, closeSession }, { printCreatedSessionBanner, printNewSessionByFormat }] =\n await Promise.all([loadSessionModule(), loadOutputRenderModule()]);\n\n const replaced = await findSession({\n agentCommand: agent.agentCommand,\n cwd: agent.cwd,\n name: flags.name,\n });\n\n if (replaced) {\n await closeSession(replaced.acpxRecordId);\n if (globalFlags.verbose) {\n process.stderr.write(`[acpx] soft-closed prior session: ${replaced.acpxRecordId}\\n`);\n }\n }\n\n const created = await createSession({\n agentCommand: agent.agentCommand,\n cwd: agent.cwd,\n name: flags.name,\n resumeSessionId: flags.resumeSession,\n mcpServers: config.mcpServers,\n permissionMode,\n nonInteractivePermissions: globalFlags.nonInteractivePermissions,\n authCredentials: config.auth,\n authPolicy: globalFlags.authPolicy,\n timeoutMs: globalFlags.timeout,\n verbose: globalFlags.verbose,\n sessionOptions: {\n model: globalFlags.model,\n allowedTools: globalFlags.allowedTools,\n maxTurns: globalFlags.maxTurns,\n },\n });\n\n printCreatedSessionBanner(created, agent.agentName, globalFlags.format, globalFlags.jsonStrict);\n\n if (globalFlags.verbose) {\n const scope = flags.name ? `named session \"${flags.name}\"` : \"cwd session\";\n process.stderr.write(`[acpx] created ${scope}: ${created.acpxRecordId}\\n`);\n }\n\n printNewSessionByFormat(created, replaced, globalFlags.format);\n}\n\nasync function handleSessionsEnsure(\n explicitAgentName: string | undefined,\n flags: SessionsNewFlags,\n command: Command,\n config: ResolvedAcpxConfig,\n): Promise<void> {\n const globalFlags = resolveGlobalFlags(command, config);\n const permissionMode = resolvePermissionMode(globalFlags, config.defaultPermissions);\n const agent = resolveAgentInvocation(explicitAgentName, globalFlags, config);\n const [{ ensureSession }, { printCreatedSessionBanner, printEnsuredSessionByFormat }] =\n await Promise.all([loadSessionModule(), loadOutputRenderModule()]);\n const result = await ensureSession({\n agentCommand: agent.agentCommand,\n cwd: agent.cwd,\n name: flags.name,\n resumeSessionId: flags.resumeSession,\n mcpServers: config.mcpServers,\n permissionMode,\n nonInteractivePermissions: globalFlags.nonInteractivePermissions,\n authCredentials: config.auth,\n authPolicy: globalFlags.authPolicy,\n timeoutMs: globalFlags.timeout,\n verbose: globalFlags.verbose,\n sessionOptions: {\n model: globalFlags.model,\n allowedTools: globalFlags.allowedTools,\n maxTurns: globalFlags.maxTurns,\n },\n });\n\n if (result.created) {\n printCreatedSessionBanner(\n result.record,\n agent.agentName,\n globalFlags.format,\n globalFlags.jsonStrict,\n );\n }\n\n printEnsuredSessionByFormat(result.record, result.created, globalFlags.format);\n}\n\nfunction userContentToText(content: SessionUserContent): string {\n if (\"Text\" in content) {\n return content.Text;\n }\n if (\"Mention\" in content) {\n return content.Mention.content;\n }\n if (\"Image\" in content) {\n return content.Image.source || \"[image]\";\n }\n return \"\";\n}\n\nfunction agentContentToText(content: SessionAgentContent): string {\n if (\"Text\" in content) {\n return content.Text;\n }\n if (\"Thinking\" in content) {\n return content.Thinking.text;\n }\n if (\"RedactedThinking\" in content) {\n return \"[redacted_thinking]\";\n }\n if (\"ToolUse\" in content) {\n return `[tool:${content.ToolUse.name}]`;\n }\n return \"\";\n}\n\nfunction conversationHistoryEntries(record: SessionRecord): Array<{\n role: \"user\" | \"assistant\";\n timestamp: string;\n textPreview: string;\n}> {\n const entries: Array<{\n role: \"user\" | \"assistant\";\n timestamp: string;\n textPreview: string;\n }> = [];\n\n for (const message of record.messages) {\n if (message === \"Resume\") {\n continue;\n }\n\n if (\"User\" in message) {\n const text = message.User.content\n .map((entry) => userContentToText(entry))\n .join(\" \")\n .trim();\n\n if (!text) {\n continue;\n }\n\n entries.push({\n role: \"user\",\n timestamp: record.updated_at,\n textPreview: text,\n });\n continue;\n }\n\n if (\"Agent\" in message) {\n const text = message.Agent.content\n .map((entry) => agentContentToText(entry))\n .join(\" \")\n .trim();\n\n if (!text) {\n continue;\n }\n\n entries.push({\n role: \"assistant\",\n timestamp: record.updated_at,\n textPreview: text,\n });\n }\n }\n\n return entries;\n}\n\nfunction printSessionDetailsByFormat(record: SessionRecord, format: OutputFormat): void {\n if (format === \"json\") {\n process.stdout.write(`${JSON.stringify(record)}\\n`);\n return;\n }\n\n if (format === \"quiet\") {\n process.stdout.write(`${record.acpxRecordId}\\n`);\n return;\n }\n\n process.stdout.write(`id: ${record.acpxRecordId}\\n`);\n process.stdout.write(`sessionId: ${record.acpSessionId}\\n`);\n process.stdout.write(`agentSessionId: ${record.agentSessionId ?? \"-\"}\\n`);\n process.stdout.write(`agent: ${record.agentCommand}\\n`);\n process.stdout.write(`cwd: ${record.cwd}\\n`);\n process.stdout.write(`name: ${record.name ?? \"-\"}\\n`);\n process.stdout.write(`created: ${record.createdAt}\\n`);\n process.stdout.write(`lastActivity: ${record.lastUsedAt}\\n`);\n process.stdout.write(`lastPrompt: ${record.lastPromptAt ?? \"-\"}\\n`);\n process.stdout.write(`closed: ${record.closed ? \"yes\" : \"no\"}\\n`);\n process.stdout.write(`closedAt: ${record.closedAt ?? \"-\"}\\n`);\n process.stdout.write(`pid: ${record.pid ?? \"-\"}\\n`);\n process.stdout.write(`agentStartedAt: ${record.agentStartedAt ?? \"-\"}\\n`);\n process.stdout.write(`lastExitCode: ${record.lastAgentExitCode ?? \"-\"}\\n`);\n process.stdout.write(`lastExitSignal: ${record.lastAgentExitSignal ?? \"-\"}\\n`);\n process.stdout.write(`lastExitAt: ${record.lastAgentExitAt ?? \"-\"}\\n`);\n process.stdout.write(`disconnectReason: ${record.lastAgentDisconnectReason ?? \"-\"}\\n`);\n process.stdout.write(`historyEntries: ${conversationHistoryEntries(record).length}\\n`);\n}\n\nfunction printSessionHistoryByFormat(\n record: SessionRecord,\n limit: number,\n format: OutputFormat,\n): void {\n const history = conversationHistoryEntries(record);\n const visible = limit === 0 ? history : history.slice(Math.max(0, history.length - limit));\n\n if (format === \"json\") {\n process.stdout.write(\n `${JSON.stringify({\n id: record.acpxRecordId,\n sessionId: record.acpSessionId,\n limit,\n count: visible.length,\n entries: visible,\n })}\\n`,\n );\n return;\n }\n\n if (format === \"quiet\") {\n for (const entry of visible) {\n process.stdout.write(`${entry.textPreview}\\n`);\n }\n return;\n }\n\n process.stdout.write(\n `session: ${record.acpxRecordId} (${visible.length}/${history.length} shown)\\n`,\n );\n if (visible.length === 0) {\n process.stdout.write(\"No history\\n\");\n return;\n }\n\n for (const entry of visible) {\n process.stdout.write(`${entry.timestamp}\\t${entry.role}\\t${entry.textPreview}\\n`);\n }\n}\n\nasync function handleSessionsShow(\n explicitAgentName: string | undefined,\n sessionName: string | undefined,\n command: Command,\n config: ResolvedAcpxConfig,\n): Promise<void> {\n const globalFlags = resolveGlobalFlags(command, config);\n const agent = resolveAgentInvocation(explicitAgentName, globalFlags, config);\n const record = await findSession({\n agentCommand: agent.agentCommand,\n cwd: agent.cwd,\n name: sessionName,\n includeClosed: true,\n });\n\n if (!record) {\n throw new Error(\n sessionName\n ? `No named session \"${sessionName}\" for cwd ${agent.cwd} and agent ${agent.agentName}`\n : `No cwd session for ${agent.cwd} and agent ${agent.agentName}`,\n );\n }\n\n printSessionDetailsByFormat(record, globalFlags.format);\n}\n\nasync function handleSessionsHistory(\n explicitAgentName: string | undefined,\n sessionName: string | undefined,\n flags: SessionsHistoryFlags,\n command: Command,\n config: ResolvedAcpxConfig,\n): Promise<void> {\n const globalFlags = resolveGlobalFlags(command, config);\n const agent = resolveAgentInvocation(explicitAgentName, globalFlags, config);\n const record = await findSession({\n agentCommand: agent.agentCommand,\n cwd: agent.cwd,\n name: sessionName,\n includeClosed: true,\n });\n\n if (!record) {\n throw new Error(\n sessionName\n ? `No named session \"${sessionName}\" for cwd ${agent.cwd} and agent ${agent.agentName}`\n : `No cwd session for ${agent.cwd} and agent ${agent.agentName}`,\n );\n }\n\n printSessionHistoryByFormat(record, flags.limit, globalFlags.format);\n}\n\nfunction formatUptime(startedAt: string | undefined): string | undefined {\n if (!startedAt) {\n return undefined;\n }\n\n const startedMs = Date.parse(startedAt);\n if (!Number.isFinite(startedMs)) {\n return undefined;\n }\n\n const elapsedMs = Math.max(0, Date.now() - startedMs);\n const seconds = Math.floor(elapsedMs / 1_000);\n const hours = Math.floor(seconds / 3_600);\n const minutes = Math.floor((seconds % 3_600) / 60);\n const remSeconds = seconds % 60;\n return `${hours.toString().padStart(2, \"0\")}:${minutes\n .toString()\n .padStart(2, \"0\")}:${remSeconds.toString().padStart(2, \"0\")}`;\n}\n\nasync function handleStatus(\n explicitAgentName: string | undefined,\n flags: StatusFlags,\n command: Command,\n config: ResolvedAcpxConfig,\n): Promise<void> {\n const globalFlags = resolveGlobalFlags(command, config);\n const agent = resolveAgentInvocation(explicitAgentName, globalFlags, config);\n const [{ probeQueueOwnerHealth }, { agentSessionIdPayload, emitJsonResult }] = await Promise.all([\n loadQueueIpcModule(),\n loadOutputRenderModule(),\n ]);\n const record = await findSession({\n agentCommand: agent.agentCommand,\n cwd: agent.cwd,\n name: resolveSessionNameFromFlags(flags, command),\n });\n\n if (!record) {\n if (\n emitJsonResult(globalFlags.format, {\n action: \"status_snapshot\",\n status: \"no-session\",\n summary: \"no active session\",\n })\n ) {\n return;\n }\n\n if (globalFlags.format === \"quiet\") {\n process.stdout.write(\"no-session\\n\");\n return;\n }\n\n process.stdout.write(`session: -\\n`);\n process.stdout.write(`agent: ${agent.agentCommand}\\n`);\n process.stdout.write(`pid: -\\n`);\n process.stdout.write(`status: no-session\\n`);\n process.stdout.write(`uptime: -\\n`);\n process.stdout.write(`lastPromptTime: -\\n`);\n return;\n }\n\n const health = await probeQueueOwnerHealth(record.acpxRecordId);\n const running = health.healthy;\n const payload = {\n sessionId: record.acpxRecordId,\n agentCommand: record.agentCommand,\n pid: health.pid ?? record.pid ?? null,\n status: running ? \"running\" : \"dead\",\n uptime: running ? (formatUptime(record.agentStartedAt) ?? null) : null,\n lastPromptTime: record.lastPromptAt ?? null,\n exitCode: running ? null : (record.lastAgentExitCode ?? null),\n signal: running ? null : (record.lastAgentExitSignal ?? null),\n ...agentSessionIdPayload(record.agentSessionId),\n };\n\n if (\n emitJsonResult(globalFlags.format, {\n action: \"status_snapshot\",\n status: running ? \"alive\" : \"dead\",\n pid: payload.pid ?? undefined,\n summary: running ? \"queue owner healthy\" : \"queue owner unavailable\",\n uptime: payload.uptime ?? undefined,\n lastPromptTime: payload.lastPromptTime ?? undefined,\n exitCode: payload.exitCode ?? undefined,\n signal: payload.signal ?? undefined,\n acpxRecordId: record.acpxRecordId,\n acpxSessionId: record.acpSessionId,\n agentSessionId: record.agentSessionId,\n })\n ) {\n return;\n }\n\n if (globalFlags.format === \"quiet\") {\n process.stdout.write(`${payload.status}\\n`);\n return;\n }\n\n process.stdout.write(`session: ${payload.sessionId}\\n`);\n if (\"agentSessionId\" in payload) {\n process.stdout.write(`agentSessionId: ${payload.agentSessionId}\\n`);\n }\n process.stdout.write(`agent: ${payload.agentCommand}\\n`);\n process.stdout.write(`pid: ${payload.pid ?? \"-\"}\\n`);\n process.stdout.write(`status: ${payload.status}\\n`);\n process.stdout.write(`uptime: ${payload.uptime ?? \"-\"}\\n`);\n process.stdout.write(`lastPromptTime: ${payload.lastPromptTime ?? \"-\"}\\n`);\n if (payload.status === \"dead\") {\n process.stdout.write(`exitCode: ${payload.exitCode ?? \"-\"}\\n`);\n process.stdout.write(`signal: ${payload.signal ?? \"-\"}\\n`);\n }\n}\n\nasync function handleConfigShow(command: Command, config: ResolvedAcpxConfig): Promise<void> {\n const globalFlags = resolveGlobalFlags(command, config);\n const payload = {\n ...toConfigDisplay(config),\n paths: {\n global: config.globalPath,\n project: config.projectPath,\n },\n loaded: {\n global: config.hasGlobalConfig,\n project: config.hasProjectConfig,\n },\n };\n\n if (globalFlags.format === \"json\") {\n process.stdout.write(`${JSON.stringify(payload)}\\n`);\n return;\n }\n\n process.stdout.write(`${JSON.stringify(payload, null, 2)}\\n`);\n}\n\nasync function handleConfigInit(command: Command, config: ResolvedAcpxConfig): Promise<void> {\n const globalFlags = resolveGlobalFlags(command, config);\n const result = await initGlobalConfigFile();\n if (globalFlags.format === \"json\") {\n process.stdout.write(\n `${JSON.stringify({\n path: result.path,\n created: result.created,\n })}\\n`,\n );\n return;\n }\n if (globalFlags.format === \"quiet\") {\n process.stdout.write(`${result.path}\\n`);\n return;\n }\n\n if (result.created) {\n process.stdout.write(`Created ${result.path}\\n`);\n return;\n }\n process.stdout.write(`Config already exists: ${result.path}\\n`);\n}\n\nfunction registerSessionsCommand(\n parent: Command,\n explicitAgentName: string | undefined,\n config: ResolvedAcpxConfig,\n): void {\n const sessionsCommand = parent\n .command(\"sessions\")\n .description(\"List, ensure, create, or close sessions for this agent\");\n\n sessionsCommand.action(async function (this: Command) {\n await handleSessionsList(explicitAgentName, this, config);\n });\n\n sessionsCommand\n .command(\"list\")\n .description(\"List sessions\")\n .action(async function (this: Command) {\n await handleSessionsList(explicitAgentName, this, config);\n });\n\n sessionsCommand\n .command(\"new\")\n .description(\"Create a fresh session for current cwd\")\n .option(\"--name <name>\", \"Session name\", parseSessionName)\n .option(\"--resume-session <id>\", \"Resume existing ACP session id\", (value: string) =>\n parseNonEmptyValue(\"Resume session id\", value),\n )\n .action(async function (this: Command, flags: SessionsNewFlags) {\n await handleSessionsNew(explicitAgentName, flags, this, config);\n });\n\n sessionsCommand\n .command(\"ensure\")\n .description(\"Ensure a session exists for current cwd or ancestor\")\n .option(\"--name <name>\", \"Session name\", parseSessionName)\n .option(\"--resume-session <id>\", \"Resume existing ACP session id\", (value: string) =>\n parseNonEmptyValue(\"Resume session id\", value),\n )\n .action(async function (this: Command, flags: SessionsNewFlags) {\n await handleSessionsEnsure(explicitAgentName, flags, this, config);\n });\n\n sessionsCommand\n .command(\"close\")\n .description(\"Close session for current cwd\")\n .argument(\"[name]\", \"Session name\", parseSessionName)\n .action(async function (this: Command, name?: string) {\n await handleSessionsClose(explicitAgentName, name, this, config);\n });\n\n sessionsCommand\n .command(\"show\")\n .description(\"Show session metadata for current cwd\")\n .argument(\"[name]\", \"Session name\", parseSessionName)\n .action(async function (this: Command, name?: string) {\n await handleSessionsShow(explicitAgentName, name, this, config);\n });\n\n sessionsCommand\n .command(\"history\")\n .description(\"Show recent session history entries\")\n .argument(\"[name]\", \"Session name\", parseSessionName)\n .option(\n \"--limit <count>\",\n \"Maximum number of entries to show (default: 20)\",\n parseHistoryLimit,\n DEFAULT_HISTORY_LIMIT,\n )\n .action(async function (this: Command, name: string | undefined, flags: SessionsHistoryFlags) {\n await handleSessionsHistory(explicitAgentName, name, flags, this, config);\n });\n\n sessionsCommand\n .command(\"read\")\n .description(\"Read full session history\")\n .argument(\"[name]\", \"Session name\", parseSessionName)\n .option(\n \"--tail <count>\",\n \"Show only the last N entries instead of all history\",\n parseHistoryLimit,\n )\n .action(async function (this: Command, name: string | undefined, flags: { tail?: number }) {\n await handleSessionsHistory(\n explicitAgentName,\n name,\n { limit: flags.tail ?? 0 },\n this,\n config,\n );\n });\n}\n\ntype SharedSubcommandDescriptions = {\n prompt: string;\n exec: string;\n cancel: string;\n setMode: string;\n setConfig: string;\n status: string;\n};\n\nfunction registerSharedAgentSubcommands(\n parent: Command,\n explicitAgentName: string | undefined,\n config: ResolvedAcpxConfig,\n descriptions: SharedSubcommandDescriptions,\n): void {\n const promptCommand = parent\n .command(\"prompt\")\n .description(descriptions.prompt)\n .argument(\"[prompt...]\", \"Prompt text\")\n .showHelpAfterError();\n addSessionOption(promptCommand);\n addPromptInputOption(promptCommand);\n promptCommand.action(async function (this: Command, promptParts: string[], flags: PromptFlags) {\n await handlePrompt(explicitAgentName, promptParts, flags, this, config);\n });\n\n const execCommand = parent\n .command(\"exec\")\n .description(descriptions.exec)\n .argument(\"[prompt...]\", \"Prompt text\")\n .showHelpAfterError();\n addPromptInputOption(execCommand);\n execCommand.action(async function (this: Command, promptParts: string[], flags: ExecFlags) {\n await handleExec(explicitAgentName, promptParts, flags, this, config);\n });\n\n const cancelCommand = parent.command(\"cancel\").description(descriptions.cancel);\n addSessionNameOption(cancelCommand);\n cancelCommand.action(async function (this: Command, flags: StatusFlags) {\n await handleCancel(explicitAgentName, flags, this, config);\n });\n\n const setModeCommand = parent\n .command(\"set-mode\")\n .description(descriptions.setMode)\n .argument(\"<mode>\", \"Mode id\", (value: string) => parseNonEmptyValue(\"Mode\", value));\n addSessionNameOption(setModeCommand);\n setModeCommand.action(async function (this: Command, modeId: string, flags: StatusFlags) {\n await handleSetMode(explicitAgentName, modeId, flags, this, config);\n });\n\n const setConfigCommand = parent\n .command(\"set\")\n .description(descriptions.setConfig)\n .argument(\"<key>\", \"Config option id\", (value: string) =>\n parseNonEmptyValue(\"Config option key\", value),\n )\n .argument(\"<value>\", \"Config option value\", (value: string) =>\n parseNonEmptyValue(\"Config option value\", value),\n );\n addSessionNameOption(setConfigCommand);\n setConfigCommand.action(async function (\n this: Command,\n key: string,\n value: string,\n flags: StatusFlags,\n ) {\n await handleSetConfigOption(explicitAgentName, key, value, flags, this, config);\n });\n\n const statusCommand = parent.command(\"status\").description(descriptions.status);\n addSessionNameOption(statusCommand);\n statusCommand.action(async function (this: Command, flags: StatusFlags) {\n await handleStatus(explicitAgentName, flags, this, config);\n });\n}\n\nfunction registerAgentCommand(\n program: Command,\n agentName: string,\n config: ResolvedAcpxConfig,\n): void {\n const agentCommand = program\n .command(agentName)\n .description(`Use ${agentName} agent`)\n .argument(\"[prompt...]\", \"Prompt text\")\n .enablePositionalOptions()\n .passThroughOptions()\n .showHelpAfterError();\n\n addSessionOption(agentCommand);\n addPromptInputOption(agentCommand);\n agentCommand.action(async function (this: Command, promptParts: string[], flags: PromptFlags) {\n await handlePrompt(agentName, promptParts, flags, this, config);\n });\n\n registerSharedAgentSubcommands(agentCommand, agentName, config, {\n prompt: \"Prompt using persistent session\",\n exec: \"One-shot prompt without saved session\",\n cancel: \"Cooperatively cancel current in-flight prompt\",\n setMode: \"Set session mode\",\n setConfig: \"Set session config option\",\n status: \"Show local status of current session agent process\",\n });\n\n registerSessionsCommand(agentCommand, agentName, config);\n}\n\nfunction registerConfigCommand(program: Command, config: ResolvedAcpxConfig): void {\n const configCommand = program\n .command(\"config\")\n .description(\"Inspect and initialize acpx configuration\");\n\n configCommand\n .command(\"show\")\n .description(\"Show resolved config\")\n .action(async function (this: Command) {\n await handleConfigShow(this, config);\n });\n\n configCommand\n .command(\"init\")\n .description(\"Create global config template\")\n .action(async function (this: Command) {\n await handleConfigInit(this, config);\n });\n\n configCommand.action(async function (this: Command) {\n await handleConfigShow(this, config);\n });\n}\n\nfunction registerDefaultCommands(program: Command, config: ResolvedAcpxConfig): void {\n registerSharedAgentSubcommands(program, undefined, config, {\n prompt: `Prompt using ${config.defaultAgent} by default`,\n exec: `One-shot prompt using ${config.defaultAgent} by default`,\n cancel: `Cancel active prompt for ${config.defaultAgent} by default`,\n setMode: `Set session mode for ${config.defaultAgent} by default`,\n setConfig: `Set session config option for ${config.defaultAgent} by default`,\n status: `Show local status for ${config.defaultAgent} by default`,\n });\n\n registerSessionsCommand(program, undefined, config);\n registerConfigCommand(program, config);\n}\n\ntype AgentTokenScan = {\n token?: string;\n hasAgentOverride: boolean;\n};\n\nfunction detectAgentToken(argv: string[]): AgentTokenScan {\n let hasAgentOverride = false;\n\n for (let index = 0; index < argv.length; index += 1) {\n const token = argv[index];\n\n if (token === \"--\") {\n break;\n }\n\n if (!token.startsWith(\"-\") || token === \"-\") {\n return { token, hasAgentOverride };\n }\n\n if (token === \"--agent\") {\n hasAgentOverride = true;\n index += 1;\n continue;\n }\n\n if (token.startsWith(\"--agent=\")) {\n hasAgentOverride = true;\n continue;\n }\n\n if (\n token === \"--cwd\" ||\n token === \"--auth-policy\" ||\n token === \"--non-interactive-permissions\" ||\n token === \"--format\" ||\n token === \"--model\" ||\n token === \"--allowed-tools\" ||\n token === \"--max-turns\" ||\n token === \"--timeout\" ||\n token === \"--ttl\" ||\n token === \"--file\"\n ) {\n index += 1;\n continue;\n }\n\n if (\n token.startsWith(\"--cwd=\") ||\n token.startsWith(\"--auth-policy=\") ||\n token.startsWith(\"--non-interactive-permissions=\") ||\n token.startsWith(\"--format=\") ||\n token.startsWith(\"--model=\") ||\n token.startsWith(\"--allowed-tools=\") ||\n token.startsWith(\"--max-turns=\") ||\n token.startsWith(\"--json-strict=\") ||\n token.startsWith(\"--timeout=\") ||\n token.startsWith(\"--ttl=\") ||\n token.startsWith(\"--file=\")\n ) {\n continue;\n }\n\n if (\n token === \"--approve-all\" ||\n token === \"--approve-reads\" ||\n token === \"--deny-all\" ||\n token === \"--json-strict\" ||\n token === \"--verbose\"\n ) {\n continue;\n }\n\n return { hasAgentOverride };\n }\n\n return { hasAgentOverride };\n}\n\nfunction detectInitialCwd(argv: string[]): string {\n for (let index = 0; index < argv.length; index += 1) {\n const token = argv[index];\n if (token === \"--cwd\") {\n const next = argv[index + 1];\n if (next && next !== \"--\") {\n return path.resolve(next);\n }\n break;\n }\n if (token.startsWith(\"--cwd=\")) {\n const value = token.slice(\"--cwd=\".length).trim();\n if (value.length > 0) {\n return path.resolve(value);\n }\n break;\n }\n if (token === \"--\") {\n break;\n }\n }\n return process.cwd();\n}\n\nfunction detectRequestedOutputFormat(argv: string[], fallback: OutputFormat): OutputFormat {\n let detectedFormat = fallback;\n for (let index = 0; index < argv.length; index += 1) {\n const token = argv[index];\n if (token === \"--\") {\n break;\n }\n\n if (token === \"--json-strict\" || token.startsWith(\"--json-strict=\")) {\n return \"json\";\n }\n\n if (token === \"--format\") {\n const raw = argv[index + 1];\n if (raw && OUTPUT_FORMATS.includes(raw as OutputFormat)) {\n detectedFormat = raw as OutputFormat;\n }\n continue;\n }\n\n if (token.startsWith(\"--format=\")) {\n const raw = token.slice(\"--format=\".length).trim();\n if (OUTPUT_FORMATS.includes(raw as OutputFormat)) {\n detectedFormat = raw as OutputFormat;\n }\n }\n }\n\n return detectedFormat;\n}\n\nfunction detectJsonStrict(argv: string[]): boolean {\n for (let index = 0; index < argv.length; index += 1) {\n const token = argv[index];\n if (token === \"--\") {\n break;\n }\n if (token === \"--json-strict\") {\n return true;\n }\n if (token.startsWith(\"--json-strict=\")) {\n return true;\n }\n }\n return false;\n}\n\nasync function emitJsonErrorEvent(error: NormalizedOutputError): Promise<void> {\n const { createOutputFormatter } = await loadOutputModule();\n const formatter = createOutputFormatter(\"json\", {\n jsonContext: {\n sessionId: \"unknown\",\n },\n });\n formatter.onError(error);\n formatter.flush();\n}\n\nfunction isOutputAlreadyEmitted(error: unknown): boolean {\n if (!error || typeof error !== \"object\") {\n return false;\n }\n return (error as { outputAlreadyEmitted?: unknown }).outputAlreadyEmitted === true;\n}\n\nasync function emitRequestedError(\n error: unknown,\n normalized: NormalizedOutputError,\n outputPolicy: OutputPolicy,\n): Promise<void> {\n if (isOutputAlreadyEmitted(error)) {\n return;\n }\n if (outputPolicy.format === \"json\") {\n await emitJsonErrorEvent(normalized);\n } else if (!outputPolicy.suppressNonJsonStderr) {\n process.stderr.write(`${normalized.message}\\n`);\n }\n}\n\nasync function runWithOutputPolicy<T>(\n _outputPolicy: OutputPolicy,\n run: () => Promise<T>,\n): Promise<T> {\n return await run();\n}\n\nexport async function main(argv: string[] = process.argv): Promise<void> {\n installPerfMetricsCapture({\n argv: argv.slice(2),\n role: argv[2] === \"__queue-owner\" ? \"queue_owner\" : \"cli\",\n });\n\n if (argv.includes(\"--version\") || argv.includes(\"-V\")) {\n process.stdout.write(`${getAcpxVersion()}\\n`);\n return;\n }\n\n if (argv[2] === \"__queue-owner\") {\n try {\n await runQueueOwnerFromEnv(process.env);\n return;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n process.stderr.write(`[acpx] queue owner failed: ${message}\\n`);\n process.exit(EXIT_CODES.ERROR);\n }\n }\n\n if (shouldMaybeHandleSkillflag(argv)) {\n const { findSkillsRoot, maybeHandleSkillflag } = await loadSkillflagModule();\n await maybeHandleSkillflag(argv, {\n skillsRoot: findSkillsRoot(import.meta.url),\n includeBundledSkill: false,\n });\n }\n\n const config = await loadResolvedConfig(detectInitialCwd(argv.slice(2)));\n const requestedJsonStrict = detectJsonStrict(argv.slice(2));\n const requestedOutputFormat = detectRequestedOutputFormat(argv.slice(2), config.format);\n const requestedOutputPolicy = resolveOutputPolicy(requestedOutputFormat, requestedJsonStrict);\n const builtInAgents = listBuiltInAgents(config.agents);\n\n const program = new Command();\n program\n .name(\"acpx\")\n .description(\"Headless CLI client for the Agent Client Protocol\")\n .version(getAcpxVersion())\n .enablePositionalOptions()\n .showHelpAfterError();\n\n if (requestedJsonStrict) {\n program.configureOutput({\n writeOut: () => {\n // json-strict intentionally suppresses non-JSON stdout output.\n },\n writeErr: () => {\n // json-strict intentionally suppresses non-JSON stderr output.\n },\n });\n }\n\n addGlobalFlags(program);\n\n for (const agentName of builtInAgents) {\n registerAgentCommand(program, agentName, config);\n }\n\n registerDefaultCommands(program, config);\n\n const scan = detectAgentToken(argv.slice(2));\n if (\n !scan.hasAgentOverride &&\n scan.token &&\n !TOP_LEVEL_VERBS.has(scan.token) &&\n !builtInAgents.includes(scan.token)\n ) {\n registerAgentCommand(program, scan.token, config);\n }\n\n program.argument(\"[prompt...]\", \"Prompt text\").action(async function (\n this: Command,\n promptParts: string[],\n ) {\n if (promptParts.length === 0 && process.stdin.isTTY) {\n if (requestedJsonStrict) {\n throw new InvalidArgumentError(\n \"Prompt is required (pass as argument, --file, or pipe via stdin)\",\n );\n }\n this.outputHelp();\n return;\n }\n\n await handlePrompt(undefined, promptParts, {}, this, config);\n });\n\n program.addHelpText(\n \"after\",\n `\nExamples:\n acpx pi \"review recent changes\"\n acpx openclaw exec \"summarize active session state\"\n acpx codex sessions new\n acpx codex \"fix the tests\"\n acpx codex prompt \"fix the tests\"\n acpx codex --no-wait \"queue follow-up task\"\n acpx codex exec \"what does this repo do\"\n acpx codex cancel\n acpx codex set-mode plan\n acpx codex set thought_level high\n acpx codex -s backend \"fix the API\"\n acpx codex sessions\n acpx codex sessions new --name backend\n acpx codex sessions ensure --name backend\n acpx codex sessions close backend\n acpx codex status\n acpx config show\n acpx config init\n acpx --ttl 30 codex \"investigate flaky tests\"\n acpx claude \"refactor auth\"\n acpx --agent ./my-custom-server \"do something\"`,\n );\n\n program.exitOverride((error) => {\n throw error;\n });\n\n try {\n await runWithOutputPolicy(requestedOutputPolicy, async () => {\n try {\n await program.parseAsync(argv);\n } catch (error) {\n if (error instanceof CommanderError) {\n if (error.code === \"commander.helpDisplayed\" || error.code === \"commander.version\") {\n process.exit(EXIT_CODES.SUCCESS);\n }\n const normalized = normalizeOutputError(error, {\n defaultCode: \"USAGE\",\n origin: \"cli\",\n });\n await emitRequestedError(error, normalized, requestedOutputPolicy);\n process.exit(exitCodeForOutputErrorCode(normalized.code));\n }\n\n if (error instanceof InterruptedError) {\n process.exit(EXIT_CODES.INTERRUPTED);\n }\n\n const normalized = normalizeOutputError(error, {\n origin: \"cli\",\n });\n await emitRequestedError(error, normalized, requestedOutputPolicy);\n process.exit(exitCodeForOutputErrorCode(normalized.code));\n }\n });\n } finally {\n flushPerfMetricsCapture();\n }\n}\n","#!/usr/bin/env node\n\nimport { realpathSync } from \"node:fs\";\nimport { pathToFileURL } from \"node:url\";\nimport { main } from \"./cli-core.js\";\n\nexport { formatPromptSessionBannerLine } from \"./cli-core.js\";\nexport { parseAllowedTools, parseMaxTurns, parseTtlSeconds } from \"./cli/flags.js\";\n\nfunction isCliEntrypoint(argv: string[]): boolean {\n const entry = argv[1];\n if (!entry) {\n return false;\n }\n\n try {\n // Resolve symlinks so global npm installs match (argv[1] is the\n // symlink in node_modules/.bin, import.meta.url is the real path).\n const resolved = pathToFileURL(realpathSync(entry)).href;\n return import.meta.url === resolved;\n } catch {\n return false;\n }\n}\n\nif (isCliEntrypoint(process.argv)) {\n void main(process.argv);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","names":["parseOutputFormat","parseAuthPolicy","parseNonInteractivePermissionPolicy","resolveAgentCommandFromRegistry","asRecord","fs","fs"],"sources":["../src/agent-registry.ts","../src/cli/flags.ts","../src/mcp-servers.ts","../src/config.ts","../src/queue-owner-env.ts","../src/version.ts","../src/cli-core.ts","../src/cli.ts"],"sourcesContent":["const ACP_ADAPTER_PACKAGE_RANGES = {\n pi: \"^0.0.22\",\n codex: \"^0.9.5\",\n claude: \"^0.21.0\",\n} as const;\n\nexport const AGENT_REGISTRY: Record<string, string> = {\n pi: `npx pi-acp@${ACP_ADAPTER_PACKAGE_RANGES.pi}`,\n openclaw: \"openclaw acp\",\n codex: `npx @zed-industries/codex-acp@${ACP_ADAPTER_PACKAGE_RANGES.codex}`,\n claude: `npx -y @zed-industries/claude-agent-acp@${ACP_ADAPTER_PACKAGE_RANGES.claude}`,\n gemini: \"gemini --acp\",\n cursor: \"cursor-agent acp\",\n copilot: \"copilot --acp --stdio\",\n droid: \"droid exec --output-format acp\",\n iflow: \"iflow --experimental-acp\",\n kilocode: \"npx -y @kilocode/cli acp\",\n kimi: \"kimi acp\",\n kiro: \"kiro-cli acp\",\n opencode: \"npx -y opencode-ai acp\",\n qwen: \"qwen --acp\",\n};\n\nconst AGENT_ALIASES: Record<string, string> = {\n \"factory-droid\": \"droid\",\n factorydroid: \"droid\",\n};\n\nexport const DEFAULT_AGENT_NAME = \"codex\";\n\nexport function normalizeAgentName(value: string): string {\n return value.trim().toLowerCase();\n}\n\nexport function mergeAgentRegistry(overrides?: Record<string, string>): Record<string, string> {\n if (!overrides) {\n return { ...AGENT_REGISTRY };\n }\n\n const merged = { ...AGENT_REGISTRY };\n for (const [name, command] of Object.entries(overrides)) {\n const normalized = normalizeAgentName(name);\n if (!normalized || !command.trim()) {\n continue;\n }\n merged[normalized] = command.trim();\n }\n return merged;\n}\n\nexport function resolveAgentCommand(agentName: string, overrides?: Record<string, string>): string {\n const normalized = normalizeAgentName(agentName);\n const registry = mergeAgentRegistry(overrides);\n return registry[normalized] ?? registry[AGENT_ALIASES[normalized] ?? normalized] ?? agentName;\n}\n\nexport function listBuiltInAgents(overrides?: Record<string, string>): string[] {\n return Object.keys(mergeAgentRegistry(overrides));\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 { ResolvedAcpxConfig } from \"../config.js\";\nimport { DEFAULT_QUEUE_OWNER_TTL_MS } from \"../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\";\n\nexport type PermissionFlags = {\n approveAll?: boolean;\n approveReads?: boolean;\n denyAll?: boolean;\n};\n\nexport type GlobalFlags = PermissionFlags & {\n agent?: string;\n cwd: string;\n authPolicy?: AuthPolicy;\n nonInteractivePermissions: NonInteractivePermissionPolicy;\n jsonStrict?: boolean;\n timeout?: number;\n ttl: number;\n verbose?: boolean;\n format: OutputFormat;\n model?: string;\n allowedTools?: string[];\n maxTurns?: number;\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 StatusFlags = {\n session?: string;\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 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 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.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(\"--format <fmt>\", \"Output format: text, json, quiet\", parseOutputFormat)\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 \"--json-strict\",\n \"Strict JSON mode: requires --format json and suppresses non-JSON stderr output\",\n )\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 if (flags.session) {\n return flags.session;\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 as unknown as { optsWithGlobals?: () => unknown }).optsWithGlobals?.();\n if (allOpts && typeof (allOpts as { session?: unknown }).session === \"string\") {\n return parseSessionName((allOpts as { session: string }).session);\n }\n\n const parentOpts = command.parent?.opts?.();\n if (parentOpts && typeof (parentOpts as { session?: unknown }).session === \"string\") {\n return parseSessionName((parentOpts as { session: string }).session);\n }\n\n return undefined;\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 = command.optsWithGlobals();\n const format = opts.format ?? config.format ?? \"text\";\n const jsonStrict = opts.jsonStrict === true;\n const verbose = opts.verbose === true;\n\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 return {\n agent: opts.agent,\n cwd: opts.cwd ?? process.cwd(),\n authPolicy: opts.authPolicy ?? config.authPolicy,\n nonInteractivePermissions: opts.nonInteractivePermissions ?? config.nonInteractivePermissions,\n jsonStrict,\n timeout: opts.timeout ?? config.timeoutMs,\n ttl: opts.ttl ?? config.ttlMs ?? DEFAULT_QUEUE_OWNER_TTL_MS,\n verbose,\n format,\n model: typeof opts.model === \"string\" ? parseNonEmptyValue(\"Model\", opts.model) : undefined,\n allowedTools: Array.isArray(opts.allowedTools) ? opts.allowedTools : undefined,\n maxTurns: typeof opts.maxTurns === \"number\" ? opts.maxTurns : undefined,\n approveAll: opts.approveAll ? true : undefined,\n approveReads: opts.approveReads ? true : undefined,\n denyAll: opts.denyAll ? true : undefined,\n };\n}\n\nexport function resolveOutputPolicy(format: OutputFormat, jsonStrict: boolean): OutputPolicy {\n return {\n format,\n jsonStrict,\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","import type { EnvVariable, HttpHeader, McpServer } from \"@agentclientprotocol/sdk\";\n\ntype UnknownRecord = Record<string, unknown>;\n\nfunction asRecord(value: unknown): UnknownRecord | undefined {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return undefined;\n }\n return value as UnknownRecord;\n}\n\nfunction parseNonEmptyString(value: unknown, path: string): string {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new Error(`Invalid ${path}: expected non-empty string`);\n }\n return value.trim();\n}\n\nfunction parseHeaders(value: unknown, path: string): HttpHeader[] {\n if (value == null) {\n return [];\n }\n if (!Array.isArray(value)) {\n throw new Error(`Invalid ${path}: expected array`);\n }\n\n const headers: HttpHeader[] = [];\n for (const [index, rawHeader] of value.entries()) {\n const headerRecord = asRecord(rawHeader);\n if (!headerRecord) {\n throw new Error(`Invalid ${path}[${index}]: expected object`);\n }\n const name = parseNonEmptyString(headerRecord.name, `${path}[${index}].name`);\n const headerValue = parseNonEmptyString(headerRecord.value, `${path}[${index}].value`);\n headers.push({\n name,\n value: headerValue,\n });\n }\n return headers;\n}\n\nfunction parseArgs(value: unknown, path: string): string[] {\n if (value == null) {\n return [];\n }\n if (!Array.isArray(value)) {\n throw new Error(`Invalid ${path}: expected array`);\n }\n\n const args: string[] = [];\n for (const [index, rawArg] of value.entries()) {\n if (typeof rawArg !== \"string\") {\n throw new Error(`Invalid ${path}[${index}]: expected string`);\n }\n args.push(rawArg);\n }\n return args;\n}\n\nfunction parseEnv(value: unknown, path: string): EnvVariable[] {\n if (value == null) {\n return [];\n }\n if (!Array.isArray(value)) {\n throw new Error(`Invalid ${path}: expected array`);\n }\n\n const env: EnvVariable[] = [];\n for (const [index, rawEntry] of value.entries()) {\n const entry = asRecord(rawEntry);\n if (!entry) {\n throw new Error(`Invalid ${path}[${index}]: expected object`);\n }\n\n const name = parseNonEmptyString(entry.name, `${path}[${index}].name`);\n const envValue = parseNonEmptyString(entry.value, `${path}[${index}].value`);\n env.push({\n name,\n value: envValue,\n });\n }\n\n return env;\n}\n\nfunction parseMeta(value: unknown, path: string): Record<string, unknown> | null | undefined {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return null;\n }\n if (!asRecord(value)) {\n throw new Error(`Invalid ${path}: expected object or null`);\n }\n return value as Record<string, unknown>;\n}\n\nfunction parseServer(rawServer: unknown, path: string): McpServer {\n const serverRecord = asRecord(rawServer);\n if (!serverRecord) {\n throw new Error(`Invalid ${path}: expected object`);\n }\n\n const name = parseNonEmptyString(serverRecord.name, `${path}.name`);\n const _meta = parseMeta(serverRecord._meta, `${path}._meta`);\n const rawType = serverRecord.type;\n\n let typeValue: \"http\" | \"sse\" | \"stdio\";\n if (rawType === undefined) {\n // Allow normalized stdio entries where type is omitted by ACP shape.\n typeValue = \"stdio\";\n } else {\n const parsedType = parseNonEmptyString(rawType, `${path}.type`);\n if (parsedType !== \"http\" && parsedType !== \"sse\" && parsedType !== \"stdio\") {\n throw new Error(`Invalid ${path}.type: expected http, sse, or stdio`);\n }\n typeValue = parsedType;\n }\n\n if (typeValue === \"http\" || typeValue === \"sse\") {\n const url = parseNonEmptyString(serverRecord.url, `${path}.url`);\n const headers = parseHeaders(serverRecord.headers, `${path}.headers`);\n const server = {\n type: typeValue,\n name,\n url,\n headers,\n _meta,\n } satisfies McpServer;\n return server;\n }\n\n if (typeValue === \"stdio\") {\n const command = parseNonEmptyString(serverRecord.command, `${path}.command`);\n const args = parseArgs(serverRecord.args, `${path}.args`);\n const env = parseEnv(serverRecord.env, `${path}.env`);\n const server = {\n name,\n command,\n args,\n env,\n _meta,\n } satisfies McpServer;\n return server;\n }\n\n throw new Error(`Invalid ${path}.type: expected http, sse, or stdio`);\n}\n\nexport function parseMcpServers(\n value: unknown,\n sourcePath: string,\n fieldName = \"mcpServers\",\n): McpServer[] {\n const fieldPath = `${fieldName} in ${sourcePath}`;\n if (!Array.isArray(value)) {\n throw new Error(`Invalid ${fieldPath}: expected array`);\n }\n\n const parsed: McpServer[] = [];\n for (const [index, rawServer] of value.entries()) {\n parsed.push(parseServer(rawServer, `${fieldName}[${index}] in ${sourcePath}`));\n }\n return parsed;\n}\n\nexport function parseOptionalMcpServers(\n value: unknown,\n sourcePath: string,\n fieldName = \"mcpServers\",\n): McpServer[] | undefined {\n if (value === undefined) {\n return undefined;\n }\n return parseMcpServers(value, sourcePath, fieldName);\n}\n","import fs from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { DEFAULT_AGENT_NAME, normalizeAgentName } from \"./agent-registry.js\";\nimport { parseMcpServers } from \"./mcp-servers.js\";\nimport type {\n AuthPolicy,\n McpServer,\n NonInteractivePermissionPolicy,\n OutputFormat,\n PermissionMode,\n} from \"./types.js\";\n\ntype ConfigAgentEntry = {\n command: string;\n};\n\ntype ConfigFileShape = {\n defaultAgent?: unknown;\n defaultPermissions?: unknown;\n nonInteractivePermissions?: unknown;\n authPolicy?: unknown;\n ttl?: unknown;\n timeout?: unknown;\n queueMaxDepth?: unknown;\n format?: unknown;\n agents?: unknown;\n auth?: unknown;\n disableExec?: unknown;\n mcpServers?: unknown;\n};\n\nexport type ResolvedAcpxConfig = {\n defaultAgent: string;\n defaultPermissions: PermissionMode;\n nonInteractivePermissions: NonInteractivePermissionPolicy;\n authPolicy: AuthPolicy;\n ttlMs: number;\n timeoutMs?: number;\n queueMaxDepth: number;\n format: OutputFormat;\n agents: Record<string, string>;\n auth: Record<string, string>;\n disableExec: boolean;\n mcpServers: McpServer[];\n globalPath: string;\n projectPath: string;\n hasGlobalConfig: boolean;\n hasProjectConfig: boolean;\n};\n\ntype ConfigFileLoadResult = {\n config?: ConfigFileShape;\n exists: boolean;\n};\n\nconst DEFAULT_TIMEOUT_MS = undefined;\nconst DEFAULT_TTL_MS = 300_000;\nconst DEFAULT_PERMISSION_MODE: PermissionMode = \"approve-reads\";\nconst DEFAULT_NON_INTERACTIVE_PERMISSION_POLICY: NonInteractivePermissionPolicy = \"deny\";\nconst DEFAULT_AUTH_POLICY: AuthPolicy = \"skip\";\nconst DEFAULT_OUTPUT_FORMAT: OutputFormat = \"text\";\nconst DEFAULT_QUEUE_MAX_DEPTH = 16;\nconst DEFAULT_DISABLE_EXEC = false;\nconst VALID_PERMISSION_MODES = new Set<PermissionMode>([\n \"approve-all\",\n \"approve-reads\",\n \"deny-all\",\n]);\nconst VALID_NON_INTERACTIVE_PERMISSION_POLICIES = new Set<NonInteractivePermissionPolicy>([\n \"deny\",\n \"fail\",\n]);\nconst VALID_AUTH_POLICIES = new Set<AuthPolicy>([\"skip\", \"fail\"]);\nconst VALID_OUTPUT_FORMATS = new Set<OutputFormat>([\"text\", \"json\", \"quiet\"]);\n\nfunction defaultGlobalConfigPath(): string {\n return path.join(os.homedir(), \".acpx\", \"config.json\");\n}\n\nfunction projectConfigPath(cwd: string): string {\n return path.join(path.resolve(cwd), \".acpxrc.json\");\n}\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction parseTtlMs(value: unknown, sourcePath: string): number | undefined {\n if (value == null) {\n return undefined;\n }\n if (typeof value !== \"number\" || !Number.isFinite(value) || value < 0) {\n throw new Error(`Invalid config ttl in ${sourcePath}: expected non-negative seconds`);\n }\n return Math.round(value * 1_000);\n}\n\nfunction parseTimeoutMs(value: unknown, sourcePath: string): number | undefined {\n if (value == null) {\n return undefined;\n }\n if (typeof value !== \"number\" || !Number.isFinite(value) || value <= 0) {\n throw new Error(`Invalid config timeout in ${sourcePath}: expected positive seconds or null`);\n }\n return Math.round(value * 1_000);\n}\n\nfunction parseQueueMaxDepth(value: unknown, sourcePath: string): number | undefined {\n if (value == null) {\n return undefined;\n }\n if (!Number.isInteger(value) || (value as number) <= 0) {\n throw new Error(`Invalid config queueMaxDepth in ${sourcePath}: expected positive integer`);\n }\n return value as number;\n}\n\nfunction parsePermissionMode(value: unknown, sourcePath: string): PermissionMode | undefined {\n if (value == null) {\n return undefined;\n }\n if (typeof value !== \"string\" || !VALID_PERMISSION_MODES.has(value as PermissionMode)) {\n throw new Error(\n `Invalid config defaultPermissions in ${sourcePath}: expected approve-all, approve-reads, or deny-all`,\n );\n }\n return value as PermissionMode;\n}\n\nfunction parseNonInteractivePermissionPolicy(\n value: unknown,\n sourcePath: string,\n): NonInteractivePermissionPolicy | undefined {\n if (value == null) {\n return undefined;\n }\n if (\n typeof value !== \"string\" ||\n !VALID_NON_INTERACTIVE_PERMISSION_POLICIES.has(value as NonInteractivePermissionPolicy)\n ) {\n throw new Error(\n `Invalid config nonInteractivePermissions in ${sourcePath}: expected deny or fail`,\n );\n }\n return value as NonInteractivePermissionPolicy;\n}\n\nfunction parseAuthPolicy(value: unknown, sourcePath: string): AuthPolicy | undefined {\n if (value == null) {\n return undefined;\n }\n if (typeof value !== \"string\" || !VALID_AUTH_POLICIES.has(value as AuthPolicy)) {\n throw new Error(`Invalid config authPolicy in ${sourcePath}: expected skip or fail`);\n }\n return value as AuthPolicy;\n}\n\nfunction parseOutputFormat(value: unknown, sourcePath: string): OutputFormat | undefined {\n if (value == null) {\n return undefined;\n }\n if (typeof value !== \"string\" || !VALID_OUTPUT_FORMATS.has(value as OutputFormat)) {\n throw new Error(`Invalid config format in ${sourcePath}: expected text, json, or quiet`);\n }\n return value as OutputFormat;\n}\n\nfunction parseDefaultAgent(value: unknown, sourcePath: string): string | undefined {\n if (value == null) {\n return undefined;\n }\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new Error(`Invalid config defaultAgent in ${sourcePath}: expected non-empty string`);\n }\n return normalizeAgentName(value);\n}\n\nfunction parseAgents(value: unknown, sourcePath: string): Record<string, string> | undefined {\n if (value == null) {\n return undefined;\n }\n if (!isObject(value)) {\n throw new Error(`Invalid config agents in ${sourcePath}: expected object`);\n }\n\n const parsed: Record<string, string> = {};\n for (const [name, raw] of Object.entries(value)) {\n if (!isObject(raw)) {\n throw new Error(\n `Invalid config agents.${name} in ${sourcePath}: expected object with command`,\n );\n }\n const command = raw.command;\n if (typeof command !== \"string\" || command.trim().length === 0) {\n throw new Error(\n `Invalid config agents.${name}.command in ${sourcePath}: expected non-empty string`,\n );\n }\n parsed[normalizeAgentName(name)] = command.trim();\n }\n\n return parsed;\n}\n\nfunction parseAuth(value: unknown, sourcePath: string): Record<string, string> | undefined {\n if (value == null) {\n return undefined;\n }\n if (!isObject(value)) {\n throw new Error(`Invalid config auth in ${sourcePath}: expected object`);\n }\n\n const parsed: Record<string, string> = {};\n for (const [methodId, rawCredential] of Object.entries(value)) {\n if (typeof rawCredential !== \"string\" || rawCredential.trim().length === 0) {\n throw new Error(\n `Invalid config auth.${methodId} in ${sourcePath}: expected non-empty string`,\n );\n }\n parsed[methodId] = rawCredential;\n }\n return parsed;\n}\n\nfunction parseDisableExec(value: unknown, sourcePath: string): boolean | undefined {\n if (value == null) {\n return undefined;\n }\n if (typeof value !== \"boolean\") {\n throw new Error(`Invalid config disableExec in ${sourcePath}: expected boolean`);\n }\n return value;\n}\n\nasync function readConfigFile(filePath: string): Promise<ConfigFileLoadResult> {\n try {\n const payload = await fs.readFile(filePath, \"utf8\");\n let parsed: unknown;\n try {\n parsed = JSON.parse(payload);\n } catch (error) {\n const reason = error instanceof Error ? error.message : String(error);\n throw new Error(`Invalid JSON in ${filePath}: ${reason}`, {\n cause: error,\n });\n }\n\n if (!isObject(parsed)) {\n throw new Error(`Invalid config in ${filePath}: expected top-level JSON object`);\n }\n return {\n config: parsed as ConfigFileShape,\n exists: true,\n };\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n return { exists: false };\n }\n throw error;\n }\n}\n\nfunction mergeAgents(\n globalAgents: Record<string, string> | undefined,\n projectAgents: Record<string, string> | undefined,\n): Record<string, string> {\n return {\n ...globalAgents,\n ...projectAgents,\n };\n}\n\nfunction mergeAuth(\n globalAuth: Record<string, string> | undefined,\n projectAuth: Record<string, string> | undefined,\n): Record<string, string> {\n return {\n ...globalAuth,\n ...projectAuth,\n };\n}\n\nexport async function loadResolvedConfig(cwd: string): Promise<ResolvedAcpxConfig> {\n const globalPath = defaultGlobalConfigPath();\n const projectPath = projectConfigPath(cwd);\n\n const [globalResult, projectResult] = await Promise.all([\n readConfigFile(globalPath),\n readConfigFile(projectPath),\n ]);\n\n const globalConfig = globalResult.config;\n const projectConfig = projectResult.config;\n\n const defaultAgent =\n parseDefaultAgent(projectConfig?.defaultAgent, projectPath) ??\n parseDefaultAgent(globalConfig?.defaultAgent, globalPath) ??\n DEFAULT_AGENT_NAME;\n\n const defaultPermissions =\n parsePermissionMode(projectConfig?.defaultPermissions, projectPath) ??\n parsePermissionMode(globalConfig?.defaultPermissions, globalPath) ??\n DEFAULT_PERMISSION_MODE;\n\n const nonInteractivePermissions =\n parseNonInteractivePermissionPolicy(projectConfig?.nonInteractivePermissions, projectPath) ??\n parseNonInteractivePermissionPolicy(globalConfig?.nonInteractivePermissions, globalPath) ??\n DEFAULT_NON_INTERACTIVE_PERMISSION_POLICY;\n\n const authPolicy =\n parseAuthPolicy(projectConfig?.authPolicy, projectPath) ??\n parseAuthPolicy(globalConfig?.authPolicy, globalPath) ??\n DEFAULT_AUTH_POLICY;\n\n const ttlMs =\n parseTtlMs(projectConfig?.ttl, projectPath) ??\n parseTtlMs(globalConfig?.ttl, globalPath) ??\n DEFAULT_TTL_MS;\n\n const timeoutConfiguredInProject =\n projectConfig != null && Object.prototype.hasOwnProperty.call(projectConfig, \"timeout\");\n const timeoutConfiguredInGlobal =\n globalConfig != null && Object.prototype.hasOwnProperty.call(globalConfig, \"timeout\");\n let timeoutMs: number | undefined = DEFAULT_TIMEOUT_MS;\n if (timeoutConfiguredInProject) {\n timeoutMs = parseTimeoutMs(projectConfig?.timeout, projectPath);\n } else if (timeoutConfiguredInGlobal) {\n timeoutMs = parseTimeoutMs(globalConfig?.timeout, globalPath);\n }\n\n const format =\n parseOutputFormat(projectConfig?.format, projectPath) ??\n parseOutputFormat(globalConfig?.format, globalPath) ??\n DEFAULT_OUTPUT_FORMAT;\n\n const queueMaxDepth =\n parseQueueMaxDepth(projectConfig?.queueMaxDepth, projectPath) ??\n parseQueueMaxDepth(globalConfig?.queueMaxDepth, globalPath) ??\n DEFAULT_QUEUE_MAX_DEPTH;\n\n const agents = mergeAgents(\n parseAgents(globalConfig?.agents, globalPath),\n parseAgents(projectConfig?.agents, projectPath),\n );\n const auth = mergeAuth(\n parseAuth(globalConfig?.auth, globalPath),\n parseAuth(projectConfig?.auth, projectPath),\n );\n\n const mcpServersConfiguredInProject =\n projectConfig != null && Object.prototype.hasOwnProperty.call(projectConfig, \"mcpServers\");\n const mcpServersConfiguredInGlobal =\n globalConfig != null && Object.prototype.hasOwnProperty.call(globalConfig, \"mcpServers\");\n let mcpServers: McpServer[] = [];\n if (mcpServersConfiguredInProject) {\n mcpServers = parseMcpServers(projectConfig?.mcpServers, projectPath);\n } else if (mcpServersConfiguredInGlobal) {\n mcpServers = parseMcpServers(globalConfig?.mcpServers, globalPath);\n }\n\n const disableExec =\n parseDisableExec(projectConfig?.disableExec, projectPath) ??\n parseDisableExec(globalConfig?.disableExec, globalPath) ??\n DEFAULT_DISABLE_EXEC;\n\n return {\n defaultAgent,\n defaultPermissions,\n nonInteractivePermissions,\n authPolicy,\n ttlMs,\n timeoutMs,\n queueMaxDepth,\n format,\n agents,\n auth,\n disableExec,\n mcpServers,\n globalPath,\n projectPath,\n hasGlobalConfig: globalResult.exists,\n hasProjectConfig: projectResult.exists,\n };\n}\n\nexport function toConfigDisplay(config: ResolvedAcpxConfig): {\n defaultAgent: string;\n defaultPermissions: PermissionMode;\n nonInteractivePermissions: NonInteractivePermissionPolicy;\n authPolicy: AuthPolicy;\n ttl: number;\n timeout: number | null;\n queueMaxDepth: number;\n format: OutputFormat;\n agents: Record<string, ConfigAgentEntry>;\n authMethods: string[];\n disableExec: boolean;\n} {\n const agents: Record<string, ConfigAgentEntry> = {};\n for (const [name, command] of Object.entries(config.agents)) {\n agents[name] = { command };\n }\n\n return {\n defaultAgent: config.defaultAgent,\n defaultPermissions: config.defaultPermissions,\n nonInteractivePermissions: config.nonInteractivePermissions,\n authPolicy: config.authPolicy,\n ttl: Math.round(config.ttlMs / 1_000),\n timeout: config.timeoutMs == null ? null : config.timeoutMs / 1_000,\n queueMaxDepth: config.queueMaxDepth,\n format: config.format,\n agents,\n authMethods: Object.keys(config.auth).toSorted(),\n disableExec: config.disableExec,\n };\n}\n\nexport async function initGlobalConfigFile(): Promise<{\n path: string;\n created: boolean;\n}> {\n const configPath = defaultGlobalConfigPath();\n await fs.mkdir(path.dirname(configPath), { recursive: true });\n\n try {\n await fs.access(configPath);\n return {\n path: configPath,\n created: false,\n };\n } catch {\n // file does not exist yet\n }\n\n const payload = {\n defaultAgent: DEFAULT_AGENT_NAME,\n defaultPermissions: \"approve-all\",\n nonInteractivePermissions: \"deny\",\n authPolicy: \"skip\",\n ttl: 300,\n timeout: null,\n queueMaxDepth: DEFAULT_QUEUE_MAX_DEPTH,\n format: \"text\",\n agents: {},\n auth: {},\n };\n\n await fs.writeFile(configPath, `${JSON.stringify(payload, null, 2)}\\n`, \"utf8\");\n return {\n path: configPath,\n created: true,\n };\n}\n","import { parseOptionalMcpServers } from \"./mcp-servers.js\";\nimport { runSessionQueueOwner, type QueueOwnerRuntimeOptions } from \"./session-runtime.js\";\n\ntype UnknownRecord = Record<string, unknown>;\n\nfunction asRecord(value: unknown): UnknownRecord | undefined {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return undefined;\n }\n return value as UnknownRecord;\n}\n\nexport function parseQueueOwnerPayload(raw: string): QueueOwnerRuntimeOptions {\n const parsed = JSON.parse(raw) as unknown;\n const record = asRecord(parsed);\n if (!record) {\n throw new Error(\"queue owner payload must be an object\");\n }\n\n if (typeof record.sessionId !== \"string\" || record.sessionId.trim().length === 0) {\n throw new Error(\"queue owner payload missing sessionId\");\n }\n if (\n record.permissionMode !== \"approve-all\" &&\n record.permissionMode !== \"approve-reads\" &&\n record.permissionMode !== \"deny-all\"\n ) {\n throw new Error(\"queue owner payload has invalid permissionMode\");\n }\n\n const options: QueueOwnerRuntimeOptions = {\n sessionId: record.sessionId,\n permissionMode: record.permissionMode,\n };\n\n const parsedMcpServers = parseOptionalMcpServers(record.mcpServers, \"queue owner payload\");\n if (parsedMcpServers) {\n options.mcpServers = parsedMcpServers;\n }\n\n if (typeof record.nonInteractivePermissions === \"string\") {\n options.nonInteractivePermissions =\n record.nonInteractivePermissions === \"deny\" || record.nonInteractivePermissions === \"fail\"\n ? record.nonInteractivePermissions\n : undefined;\n }\n\n if (record.authCredentials && typeof record.authCredentials === \"object\") {\n const entries = Object.entries(record.authCredentials as UnknownRecord).filter(\n ([, value]) => typeof value === \"string\",\n ) as Array<[string, string]>;\n options.authCredentials = Object.fromEntries(entries);\n }\n\n if (record.authPolicy === \"skip\" || record.authPolicy === \"fail\") {\n options.authPolicy = record.authPolicy;\n }\n\n if (typeof record.suppressSdkConsoleErrors === \"boolean\") {\n options.suppressSdkConsoleErrors = record.suppressSdkConsoleErrors;\n }\n\n if (typeof record.verbose === \"boolean\") {\n options.verbose = record.verbose;\n }\n\n if (typeof record.ttlMs === \"number\" && Number.isFinite(record.ttlMs)) {\n options.ttlMs = record.ttlMs;\n }\n\n if (typeof record.maxQueueDepth === \"number\" && Number.isFinite(record.maxQueueDepth)) {\n options.maxQueueDepth = Math.max(1, Math.round(record.maxQueueDepth));\n }\n\n return options;\n}\n\nexport async function runQueueOwnerFromEnv(env: NodeJS.ProcessEnv): Promise<void> {\n const payload = env.ACPX_QUEUE_OWNER_PAYLOAD;\n if (!payload) {\n throw new Error(\"missing ACPX_QUEUE_OWNER_PAYLOAD\");\n }\n const options = parseQueueOwnerPayload(payload);\n await runSessionQueueOwner(options);\n}\n","import { readFileSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nconst UNKNOWN_VERSION = \"0.0.0-unknown\";\nconst MODULE_DIR = path.dirname(fileURLToPath(import.meta.url));\n\nlet cachedVersion: string | null = null;\n\nfunction parseVersion(value: unknown): string | null {\n if (typeof value !== \"string\") {\n return null;\n }\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : null;\n}\n\nfunction readPackageVersion(packageJsonPath: string): string | null {\n try {\n const parsed = JSON.parse(readFileSync(packageJsonPath, \"utf8\")) as {\n version?: unknown;\n };\n return parseVersion(parsed.version);\n } catch {\n return null;\n }\n}\n\nfunction resolveVersionFromAncestors(startDir: string): string | null {\n let current = startDir;\n while (true) {\n const packageVersion = readPackageVersion(path.join(current, \"package.json\"));\n if (packageVersion) {\n return packageVersion;\n }\n const parent = path.dirname(current);\n if (parent === current) {\n return null;\n }\n current = parent;\n }\n}\n\nexport function resolveAcpxVersion(params?: {\n env?: NodeJS.ProcessEnv;\n packageJsonPath?: string;\n}): string {\n const env = params?.env ?? process.env;\n const envPackageName = parseVersion(env.npm_package_name);\n const envVersion = parseVersion(env.npm_package_version);\n if (envPackageName === \"acpx\" && envVersion) {\n return envVersion;\n }\n\n if (params?.packageJsonPath) {\n return readPackageVersion(params.packageJsonPath) ?? UNKNOWN_VERSION;\n }\n\n return resolveVersionFromAncestors(MODULE_DIR) ?? UNKNOWN_VERSION;\n}\n\nexport function getAcpxVersion(): string {\n if (cachedVersion) {\n return cachedVersion;\n }\n cachedVersion = resolveAcpxVersion();\n return cachedVersion;\n}\n","#!/usr/bin/env node\n\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { Command, CommanderError, InvalidArgumentError } from \"commander\";\nimport { listBuiltInAgents } from \"./agent-registry.js\";\nimport {\n addGlobalFlags,\n addPromptInputOption,\n addSessionNameOption,\n addSessionOption,\n parseAllowedTools,\n parseHistoryLimit,\n parseMaxTurns,\n parseNonEmptyValue,\n parseSessionName,\n parseTtlSeconds,\n resolveAgentInvocation,\n resolveGlobalFlags,\n resolveOutputPolicy,\n resolvePermissionMode,\n resolveSessionNameFromFlags,\n type ExecFlags,\n type PromptFlags,\n type SessionsHistoryFlags,\n type SessionsNewFlags,\n type StatusFlags,\n} from \"./cli/flags.js\";\nimport {\n initGlobalConfigFile,\n loadResolvedConfig,\n toConfigDisplay,\n type ResolvedAcpxConfig,\n} from \"./config.js\";\nimport {\n exitCodeForOutputErrorCode,\n normalizeOutputError,\n type NormalizedOutputError,\n} from \"./error-normalization.js\";\nimport { flushPerfMetricsCapture, installPerfMetricsCapture } from \"./perf-metrics-capture.js\";\nimport {\n mergePromptSourceWithText,\n parsePromptSource,\n PromptInputValidationError,\n textPrompt,\n} from \"./prompt-content.js\";\nimport { runQueueOwnerFromEnv } from \"./queue-owner-env.js\";\nimport {\n DEFAULT_HISTORY_LIMIT,\n findGitRepositoryRoot,\n findSession,\n findSessionByDirectoryWalk,\n} from \"./session-persistence.js\";\nimport { InterruptedError } from \"./session-runtime-helpers.js\";\nimport {\n EXIT_CODES,\n OUTPUT_FORMATS,\n type OutputFormat,\n type OutputPolicy,\n type SessionRecord,\n type SessionAgentContent,\n type SessionUserContent,\n} from \"./types.js\";\nimport { getAcpxVersion } from \"./version.js\";\n\nclass NoSessionError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"NoSessionError\";\n }\n}\n\nconst TOP_LEVEL_VERBS = new Set([\n \"prompt\",\n \"exec\",\n \"cancel\",\n \"set-mode\",\n \"set\",\n \"sessions\",\n \"status\",\n \"config\",\n \"help\",\n]);\n\nasync function readPromptInputFromStdin(): Promise<string> {\n let data = \"\";\n for await (const chunk of process.stdin) {\n data += String(chunk);\n }\n return data;\n}\n\nasync function readPrompt(\n promptParts: string[],\n filePath: string | undefined,\n cwd: string,\n): Promise<import(\"./types.js\").PromptInput> {\n try {\n if (filePath) {\n const source =\n filePath === \"-\"\n ? await readPromptInputFromStdin()\n : await fs.readFile(path.resolve(cwd, filePath), \"utf8\");\n const prompt = mergePromptSourceWithText(source, promptParts.join(\" \"));\n if (prompt.length === 0) {\n throw new InvalidArgumentError(\"Prompt from --file is empty\");\n }\n return prompt;\n }\n\n const joined = promptParts.join(\" \").trim();\n if (joined.length > 0) {\n return textPrompt(joined);\n }\n\n if (process.stdin.isTTY) {\n throw new InvalidArgumentError(\n \"Prompt is required (pass as argument, --file, or pipe via stdin)\",\n );\n }\n\n const prompt = parsePromptSource(await readPromptInputFromStdin());\n if (prompt.length === 0) {\n throw new InvalidArgumentError(\"Prompt from stdin is empty\");\n }\n\n return prompt;\n } catch (error) {\n if (error instanceof PromptInputValidationError) {\n throw new InvalidArgumentError(error.message);\n }\n throw error;\n }\n}\n\nfunction applyPermissionExitCode(result: {\n permissionStats: {\n requested: number;\n approved: number;\n denied: number;\n cancelled: number;\n };\n}): void {\n const stats = result.permissionStats;\n const deniedOrCancelled = stats.denied + stats.cancelled;\n\n if (stats.requested > 0 && stats.approved === 0 && deniedOrCancelled > 0) {\n process.exitCode = EXIT_CODES.PERMISSION_DENIED;\n }\n}\n\nfunction emitJsonResult(format: OutputFormat, payload: unknown): boolean {\n if (format !== \"json\") {\n return false;\n }\n process.stdout.write(`${JSON.stringify(payload)}\\n`);\n return true;\n}\n\nfunction isCodexAgentInvocation(agent: { agentName: string; agentCommand: string }): boolean {\n if (agent.agentName === \"codex\") {\n return true;\n }\n return /\\bcodex-acp\\b/.test(agent.agentCommand);\n}\n\nfunction resolveCompatibleConfigId(\n agent: { agentName: string; agentCommand: string },\n configId: string,\n): string {\n if (isCodexAgentInvocation(agent) && configId === \"thought_level\") {\n return \"reasoning_effort\";\n }\n return configId;\n}\n\nexport { parseAllowedTools, parseMaxTurns, parseTtlSeconds };\nexport { formatPromptSessionBannerLine } from \"./cli/output-render.js\";\n\ntype SessionModule = typeof import(\"./session.js\");\ntype OutputModule = typeof import(\"./output.js\");\ntype OutputRenderModule = typeof import(\"./cli/output-render.js\");\ntype QueueIpcModule = typeof import(\"./queue-ipc.js\");\ntype SkillflagModule = typeof import(\"skillflag\");\n\nlet sessionModulePromise: Promise<SessionModule> | undefined;\nlet outputModulePromise: Promise<OutputModule> | undefined;\nlet outputRenderModulePromise: Promise<OutputRenderModule> | undefined;\nlet queueIpcModulePromise: Promise<QueueIpcModule> | undefined;\nlet skillflagModulePromise: Promise<SkillflagModule> | undefined;\n\nfunction loadSessionModule(): Promise<SessionModule> {\n sessionModulePromise ??= import(\"./session.js\");\n return sessionModulePromise;\n}\n\nfunction loadOutputModule(): Promise<OutputModule> {\n outputModulePromise ??= import(\"./output.js\");\n return outputModulePromise;\n}\n\nfunction loadOutputRenderModule(): Promise<OutputRenderModule> {\n outputRenderModulePromise ??= import(\"./cli/output-render.js\");\n return outputRenderModulePromise;\n}\n\nfunction loadQueueIpcModule(): Promise<QueueIpcModule> {\n queueIpcModulePromise ??= import(\"./queue-ipc.js\");\n return queueIpcModulePromise;\n}\n\nfunction loadSkillflagModule(): Promise<SkillflagModule> {\n skillflagModulePromise ??= import(\"skillflag\");\n return skillflagModulePromise;\n}\n\nfunction shouldMaybeHandleSkillflag(argv: string[]): boolean {\n return argv.some((token) => token === \"--skill\" || token.startsWith(\"--skill=\"));\n}\n\nasync function findRoutedSessionOrThrow(\n agentCommand: string,\n agentName: string,\n cwd: string,\n sessionName: string | undefined,\n): Promise<SessionRecord> {\n const gitRoot = findGitRepositoryRoot(cwd);\n const walkBoundary = gitRoot ?? cwd;\n\n const record = await findSessionByDirectoryWalk({\n agentCommand,\n cwd,\n name: sessionName,\n boundary: walkBoundary,\n });\n\n if (record) {\n return record;\n }\n\n const createCmd = sessionName\n ? `acpx ${agentName} sessions new --name ${sessionName}`\n : `acpx ${agentName} sessions new`;\n throw new NoSessionError(\n `⚠ No acpx session found (searched up to ${walkBoundary}).\\nCreate one: ${createCmd}`,\n );\n}\n\nasync function handlePrompt(\n explicitAgentName: string | undefined,\n promptParts: string[],\n flags: PromptFlags,\n command: Command,\n config: ResolvedAcpxConfig,\n): Promise<void> {\n const globalFlags = resolveGlobalFlags(command, config);\n const outputPolicy = resolveOutputPolicy(globalFlags.format, globalFlags.jsonStrict === true);\n const permissionMode = resolvePermissionMode(globalFlags, config.defaultPermissions);\n const prompt = await readPrompt(promptParts, flags.file, globalFlags.cwd);\n const agent = resolveAgentInvocation(explicitAgentName, globalFlags, config);\n const [\n { createOutputFormatter },\n { printPromptSessionBanner, printQueuedPromptByFormat },\n { sendSession },\n ] = await Promise.all([loadOutputModule(), loadOutputRenderModule(), loadSessionModule()]);\n const record = await findRoutedSessionOrThrow(\n agent.agentCommand,\n agent.agentName,\n agent.cwd,\n flags.session,\n );\n const outputFormatter = createOutputFormatter(outputPolicy.format, {\n jsonContext: {\n sessionId: record.acpxRecordId,\n },\n });\n\n await printPromptSessionBanner(record, agent.cwd, outputPolicy.format, outputPolicy.jsonStrict);\n const result = await sendSession({\n sessionId: record.acpxRecordId,\n prompt,\n mcpServers: config.mcpServers,\n permissionMode,\n nonInteractivePermissions: globalFlags.nonInteractivePermissions,\n authCredentials: config.auth,\n authPolicy: globalFlags.authPolicy,\n outputFormatter,\n errorEmissionPolicy: {\n queueErrorAlreadyEmitted: outputPolicy.queueErrorAlreadyEmitted,\n },\n suppressSdkConsoleErrors: outputPolicy.suppressSdkConsoleErrors,\n timeoutMs: globalFlags.timeout,\n ttlMs: globalFlags.ttl,\n maxQueueDepth: config.queueMaxDepth,\n verbose: globalFlags.verbose,\n waitForCompletion: flags.wait !== false,\n });\n\n if (\"queued\" in result) {\n printQueuedPromptByFormat(result, outputPolicy.format);\n return;\n }\n\n applyPermissionExitCode(result);\n\n if (globalFlags.verbose && result.loadError) {\n process.stderr.write(`[acpx] loadSession failed, started fresh session: ${result.loadError}\\n`);\n }\n}\n\nasync function handleExec(\n explicitAgentName: string | undefined,\n promptParts: string[],\n flags: ExecFlags,\n command: Command,\n config: ResolvedAcpxConfig,\n): Promise<void> {\n if (config.disableExec) {\n const globalFlags = resolveGlobalFlags(command, config);\n const outputPolicy = resolveOutputPolicy(globalFlags.format, globalFlags.jsonStrict === true);\n if (outputPolicy.format === \"json\") {\n process.stdout.write(\n `${JSON.stringify({\n jsonrpc: \"2.0\",\n error: {\n code: -32603,\n message: \"exec subcommand is disabled by configuration (disableExec: true)\",\n data: {\n acpxCode: \"EXEC_DISABLED\",\n },\n },\n })}\\n`,\n );\n } else {\n process.stderr.write(\n \"Error: exec subcommand is disabled by configuration (disableExec: true)\\n\",\n );\n }\n process.exitCode = EXIT_CODES.ERROR;\n return;\n }\n\n const globalFlags = resolveGlobalFlags(command, config);\n const outputPolicy = resolveOutputPolicy(globalFlags.format, globalFlags.jsonStrict === true);\n const permissionMode = resolvePermissionMode(globalFlags, config.defaultPermissions);\n const prompt = await readPrompt(promptParts, flags.file, globalFlags.cwd);\n const [{ createOutputFormatter }, { runOnce }] = await Promise.all([\n loadOutputModule(),\n loadSessionModule(),\n ]);\n const outputFormatter = createOutputFormatter(outputPolicy.format);\n const agent = resolveAgentInvocation(explicitAgentName, globalFlags, config);\n\n const result = await runOnce({\n agentCommand: agent.agentCommand,\n cwd: agent.cwd,\n prompt,\n mcpServers: config.mcpServers,\n permissionMode,\n nonInteractivePermissions: globalFlags.nonInteractivePermissions,\n authCredentials: config.auth,\n authPolicy: globalFlags.authPolicy,\n outputFormatter,\n suppressSdkConsoleErrors: outputPolicy.suppressSdkConsoleErrors,\n timeoutMs: globalFlags.timeout,\n verbose: globalFlags.verbose,\n sessionOptions: {\n model: globalFlags.model,\n allowedTools: globalFlags.allowedTools,\n maxTurns: globalFlags.maxTurns,\n },\n });\n\n applyPermissionExitCode(result);\n}\n\nfunction printCancelResultByFormat(\n result: { sessionId: string; cancelled: boolean },\n format: OutputFormat,\n): void {\n if (\n emitJsonResult(format, {\n action: \"cancel_result\",\n acpxRecordId: result.sessionId || \"unknown\",\n cancelled: result.cancelled,\n })\n ) {\n return;\n }\n\n if (result.cancelled) {\n process.stdout.write(\"cancel requested\\n\");\n return;\n }\n\n process.stdout.write(\"nothing to cancel\\n\");\n}\n\nfunction printSetModeResultByFormat(\n modeId: string,\n result: { record: SessionRecord; resumed: boolean; loadError?: string },\n format: OutputFormat,\n): void {\n if (\n emitJsonResult(format, {\n action: \"mode_set\",\n modeId,\n resumed: result.resumed,\n acpxRecordId: result.record.acpxRecordId,\n acpxSessionId: result.record.acpSessionId,\n agentSessionId: result.record.agentSessionId,\n })\n ) {\n return;\n }\n\n if (format === \"quiet\") {\n process.stdout.write(`${modeId}\\n`);\n return;\n }\n\n process.stdout.write(`mode set: ${modeId}\\n`);\n}\n\nfunction printSetConfigOptionResultByFormat(\n configId: string,\n value: string,\n result: {\n record: SessionRecord;\n resumed: boolean;\n response: { configOptions: unknown[] };\n },\n format: OutputFormat,\n): void {\n if (\n emitJsonResult(format, {\n action: \"config_set\",\n configId,\n value,\n resumed: result.resumed,\n configOptions: result.response.configOptions,\n acpxRecordId: result.record.acpxRecordId,\n acpxSessionId: result.record.acpSessionId,\n agentSessionId: result.record.agentSessionId,\n })\n ) {\n return;\n }\n\n if (format === \"quiet\") {\n process.stdout.write(`${value}\\n`);\n return;\n }\n\n process.stdout.write(\n `config set: ${configId}=${value} (${result.response.configOptions.length} options)\\n`,\n );\n}\n\nasync function handleCancel(\n explicitAgentName: string | undefined,\n flags: StatusFlags,\n command: Command,\n config: ResolvedAcpxConfig,\n): Promise<void> {\n const globalFlags = resolveGlobalFlags(command, config);\n const agent = resolveAgentInvocation(explicitAgentName, globalFlags, config);\n const { cancelSessionPrompt } = await loadSessionModule();\n const gitRoot = findGitRepositoryRoot(agent.cwd);\n const walkBoundary = gitRoot ?? agent.cwd;\n const record = await findSessionByDirectoryWalk({\n agentCommand: agent.agentCommand,\n cwd: agent.cwd,\n name: resolveSessionNameFromFlags(flags, command),\n boundary: walkBoundary,\n });\n\n if (!record) {\n printCancelResultByFormat(\n {\n sessionId: \"\",\n cancelled: false,\n },\n globalFlags.format,\n );\n return;\n }\n\n const result = await cancelSessionPrompt({\n sessionId: record.acpxRecordId,\n verbose: globalFlags.verbose,\n });\n printCancelResultByFormat(result, globalFlags.format);\n}\n\nasync function handleSetMode(\n explicitAgentName: string | undefined,\n modeId: string,\n flags: StatusFlags,\n command: Command,\n config: ResolvedAcpxConfig,\n): Promise<void> {\n const globalFlags = resolveGlobalFlags(command, config);\n const agent = resolveAgentInvocation(explicitAgentName, globalFlags, config);\n const { setSessionMode } = await loadSessionModule();\n const record = await findRoutedSessionOrThrow(\n agent.agentCommand,\n agent.agentName,\n agent.cwd,\n resolveSessionNameFromFlags(flags, command),\n );\n const result = await setSessionMode({\n sessionId: record.acpxRecordId,\n modeId,\n mcpServers: config.mcpServers,\n nonInteractivePermissions: globalFlags.nonInteractivePermissions,\n authCredentials: config.auth,\n authPolicy: globalFlags.authPolicy,\n timeoutMs: globalFlags.timeout,\n verbose: globalFlags.verbose,\n });\n\n if (globalFlags.verbose && result.loadError) {\n process.stderr.write(`[acpx] loadSession failed, started fresh session: ${result.loadError}\\n`);\n }\n\n printSetModeResultByFormat(modeId, result, globalFlags.format);\n}\n\nasync function handleSetConfigOption(\n explicitAgentName: string | undefined,\n configId: string,\n value: string,\n flags: StatusFlags,\n command: Command,\n config: ResolvedAcpxConfig,\n): Promise<void> {\n const globalFlags = resolveGlobalFlags(command, config);\n const agent = resolveAgentInvocation(explicitAgentName, globalFlags, config);\n const resolvedConfigId = resolveCompatibleConfigId(agent, configId);\n const { setSessionConfigOption } = await loadSessionModule();\n const record = await findRoutedSessionOrThrow(\n agent.agentCommand,\n agent.agentName,\n agent.cwd,\n resolveSessionNameFromFlags(flags, command),\n );\n const result = await setSessionConfigOption({\n sessionId: record.acpxRecordId,\n configId: resolvedConfigId,\n value,\n mcpServers: config.mcpServers,\n nonInteractivePermissions: globalFlags.nonInteractivePermissions,\n authCredentials: config.auth,\n authPolicy: globalFlags.authPolicy,\n timeoutMs: globalFlags.timeout,\n verbose: globalFlags.verbose,\n });\n\n if (globalFlags.verbose && result.loadError) {\n process.stderr.write(`[acpx] loadSession failed, started fresh session: ${result.loadError}\\n`);\n }\n\n printSetConfigOptionResultByFormat(configId, value, result, globalFlags.format);\n}\n\nasync function handleSessionsList(\n explicitAgentName: string | undefined,\n command: Command,\n config: ResolvedAcpxConfig,\n): Promise<void> {\n const globalFlags = resolveGlobalFlags(command, config);\n const agent = resolveAgentInvocation(explicitAgentName, globalFlags, config);\n const [{ listSessionsForAgent }, { printSessionsByFormat }] = await Promise.all([\n loadSessionModule(),\n loadOutputRenderModule(),\n ]);\n const sessions = await listSessionsForAgent(agent.agentCommand);\n printSessionsByFormat(sessions, globalFlags.format);\n}\n\nasync function handleSessionsClose(\n explicitAgentName: string | undefined,\n sessionName: string | undefined,\n command: Command,\n config: ResolvedAcpxConfig,\n): Promise<void> {\n const globalFlags = resolveGlobalFlags(command, config);\n const agent = resolveAgentInvocation(explicitAgentName, globalFlags, config);\n const [{ closeSession }, { printClosedSessionByFormat }] = await Promise.all([\n loadSessionModule(),\n loadOutputRenderModule(),\n ]);\n\n const record = await findSession({\n agentCommand: agent.agentCommand,\n cwd: agent.cwd,\n name: sessionName,\n });\n\n if (!record) {\n if (sessionName) {\n throw new Error(\n `No named session \"${sessionName}\" for cwd ${agent.cwd} and agent ${agent.agentName}`,\n );\n }\n\n throw new Error(`No cwd session for ${agent.cwd} and agent ${agent.agentName}`);\n }\n\n const closed = await closeSession(record.acpxRecordId);\n printClosedSessionByFormat(closed, globalFlags.format);\n}\n\nasync function handleSessionsNew(\n explicitAgentName: string | undefined,\n flags: SessionsNewFlags,\n command: Command,\n config: ResolvedAcpxConfig,\n): Promise<void> {\n const globalFlags = resolveGlobalFlags(command, config);\n const permissionMode = resolvePermissionMode(globalFlags, config.defaultPermissions);\n const agent = resolveAgentInvocation(explicitAgentName, globalFlags, config);\n const [{ createSession, closeSession }, { printCreatedSessionBanner, printNewSessionByFormat }] =\n await Promise.all([loadSessionModule(), loadOutputRenderModule()]);\n\n const replaced = await findSession({\n agentCommand: agent.agentCommand,\n cwd: agent.cwd,\n name: flags.name,\n });\n\n if (replaced) {\n await closeSession(replaced.acpxRecordId);\n if (globalFlags.verbose) {\n process.stderr.write(`[acpx] soft-closed prior session: ${replaced.acpxRecordId}\\n`);\n }\n }\n\n const created = await createSession({\n agentCommand: agent.agentCommand,\n cwd: agent.cwd,\n name: flags.name,\n resumeSessionId: flags.resumeSession,\n mcpServers: config.mcpServers,\n permissionMode,\n nonInteractivePermissions: globalFlags.nonInteractivePermissions,\n authCredentials: config.auth,\n authPolicy: globalFlags.authPolicy,\n timeoutMs: globalFlags.timeout,\n verbose: globalFlags.verbose,\n sessionOptions: {\n model: globalFlags.model,\n allowedTools: globalFlags.allowedTools,\n maxTurns: globalFlags.maxTurns,\n },\n });\n\n printCreatedSessionBanner(created, agent.agentName, globalFlags.format, globalFlags.jsonStrict);\n\n if (globalFlags.verbose) {\n const scope = flags.name ? `named session \"${flags.name}\"` : \"cwd session\";\n process.stderr.write(`[acpx] created ${scope}: ${created.acpxRecordId}\\n`);\n }\n\n printNewSessionByFormat(created, replaced, globalFlags.format);\n}\n\nasync function handleSessionsEnsure(\n explicitAgentName: string | undefined,\n flags: SessionsNewFlags,\n command: Command,\n config: ResolvedAcpxConfig,\n): Promise<void> {\n const globalFlags = resolveGlobalFlags(command, config);\n const permissionMode = resolvePermissionMode(globalFlags, config.defaultPermissions);\n const agent = resolveAgentInvocation(explicitAgentName, globalFlags, config);\n const [{ ensureSession }, { printCreatedSessionBanner, printEnsuredSessionByFormat }] =\n await Promise.all([loadSessionModule(), loadOutputRenderModule()]);\n const result = await ensureSession({\n agentCommand: agent.agentCommand,\n cwd: agent.cwd,\n name: flags.name,\n resumeSessionId: flags.resumeSession,\n mcpServers: config.mcpServers,\n permissionMode,\n nonInteractivePermissions: globalFlags.nonInteractivePermissions,\n authCredentials: config.auth,\n authPolicy: globalFlags.authPolicy,\n timeoutMs: globalFlags.timeout,\n verbose: globalFlags.verbose,\n sessionOptions: {\n model: globalFlags.model,\n allowedTools: globalFlags.allowedTools,\n maxTurns: globalFlags.maxTurns,\n },\n });\n\n if (result.created) {\n printCreatedSessionBanner(\n result.record,\n agent.agentName,\n globalFlags.format,\n globalFlags.jsonStrict,\n );\n }\n\n printEnsuredSessionByFormat(result.record, result.created, globalFlags.format);\n}\n\nfunction userContentToText(content: SessionUserContent): string {\n if (\"Text\" in content) {\n return content.Text;\n }\n if (\"Mention\" in content) {\n return content.Mention.content;\n }\n if (\"Image\" in content) {\n return content.Image.source || \"[image]\";\n }\n return \"\";\n}\n\nfunction agentContentToText(content: SessionAgentContent): string {\n if (\"Text\" in content) {\n return content.Text;\n }\n if (\"Thinking\" in content) {\n return content.Thinking.text;\n }\n if (\"RedactedThinking\" in content) {\n return \"[redacted_thinking]\";\n }\n if (\"ToolUse\" in content) {\n return `[tool:${content.ToolUse.name}]`;\n }\n return \"\";\n}\n\nfunction conversationHistoryEntries(record: SessionRecord): Array<{\n role: \"user\" | \"assistant\";\n timestamp: string;\n textPreview: string;\n}> {\n const entries: Array<{\n role: \"user\" | \"assistant\";\n timestamp: string;\n textPreview: string;\n }> = [];\n\n for (const message of record.messages) {\n if (message === \"Resume\") {\n continue;\n }\n\n if (\"User\" in message) {\n const text = message.User.content\n .map((entry) => userContentToText(entry))\n .join(\" \")\n .trim();\n\n if (!text) {\n continue;\n }\n\n entries.push({\n role: \"user\",\n timestamp: record.updated_at,\n textPreview: text,\n });\n continue;\n }\n\n if (\"Agent\" in message) {\n const text = message.Agent.content\n .map((entry) => agentContentToText(entry))\n .join(\" \")\n .trim();\n\n if (!text) {\n continue;\n }\n\n entries.push({\n role: \"assistant\",\n timestamp: record.updated_at,\n textPreview: text,\n });\n }\n }\n\n return entries;\n}\n\nfunction printSessionDetailsByFormat(record: SessionRecord, format: OutputFormat): void {\n if (format === \"json\") {\n process.stdout.write(`${JSON.stringify(record)}\\n`);\n return;\n }\n\n if (format === \"quiet\") {\n process.stdout.write(`${record.acpxRecordId}\\n`);\n return;\n }\n\n process.stdout.write(`id: ${record.acpxRecordId}\\n`);\n process.stdout.write(`sessionId: ${record.acpSessionId}\\n`);\n process.stdout.write(`agentSessionId: ${record.agentSessionId ?? \"-\"}\\n`);\n process.stdout.write(`agent: ${record.agentCommand}\\n`);\n process.stdout.write(`cwd: ${record.cwd}\\n`);\n process.stdout.write(`name: ${record.name ?? \"-\"}\\n`);\n process.stdout.write(`created: ${record.createdAt}\\n`);\n process.stdout.write(`lastActivity: ${record.lastUsedAt}\\n`);\n process.stdout.write(`lastPrompt: ${record.lastPromptAt ?? \"-\"}\\n`);\n process.stdout.write(`closed: ${record.closed ? \"yes\" : \"no\"}\\n`);\n process.stdout.write(`closedAt: ${record.closedAt ?? \"-\"}\\n`);\n process.stdout.write(`pid: ${record.pid ?? \"-\"}\\n`);\n process.stdout.write(`agentStartedAt: ${record.agentStartedAt ?? \"-\"}\\n`);\n process.stdout.write(`lastExitCode: ${record.lastAgentExitCode ?? \"-\"}\\n`);\n process.stdout.write(`lastExitSignal: ${record.lastAgentExitSignal ?? \"-\"}\\n`);\n process.stdout.write(`lastExitAt: ${record.lastAgentExitAt ?? \"-\"}\\n`);\n process.stdout.write(`disconnectReason: ${record.lastAgentDisconnectReason ?? \"-\"}\\n`);\n process.stdout.write(`historyEntries: ${conversationHistoryEntries(record).length}\\n`);\n}\n\nfunction printSessionHistoryByFormat(\n record: SessionRecord,\n limit: number,\n format: OutputFormat,\n): void {\n const history = conversationHistoryEntries(record);\n const visible = limit === 0 ? history : history.slice(Math.max(0, history.length - limit));\n\n if (format === \"json\") {\n process.stdout.write(\n `${JSON.stringify({\n id: record.acpxRecordId,\n sessionId: record.acpSessionId,\n limit,\n count: visible.length,\n entries: visible,\n })}\\n`,\n );\n return;\n }\n\n if (format === \"quiet\") {\n for (const entry of visible) {\n process.stdout.write(`${entry.textPreview}\\n`);\n }\n return;\n }\n\n process.stdout.write(\n `session: ${record.acpxRecordId} (${visible.length}/${history.length} shown)\\n`,\n );\n if (visible.length === 0) {\n process.stdout.write(\"No history\\n\");\n return;\n }\n\n for (const entry of visible) {\n process.stdout.write(`${entry.timestamp}\\t${entry.role}\\t${entry.textPreview}\\n`);\n }\n}\n\nasync function handleSessionsShow(\n explicitAgentName: string | undefined,\n sessionName: string | undefined,\n command: Command,\n config: ResolvedAcpxConfig,\n): Promise<void> {\n const globalFlags = resolveGlobalFlags(command, config);\n const agent = resolveAgentInvocation(explicitAgentName, globalFlags, config);\n const record = await findSession({\n agentCommand: agent.agentCommand,\n cwd: agent.cwd,\n name: sessionName,\n includeClosed: true,\n });\n\n if (!record) {\n throw new Error(\n sessionName\n ? `No named session \"${sessionName}\" for cwd ${agent.cwd} and agent ${agent.agentName}`\n : `No cwd session for ${agent.cwd} and agent ${agent.agentName}`,\n );\n }\n\n printSessionDetailsByFormat(record, globalFlags.format);\n}\n\nasync function handleSessionsHistory(\n explicitAgentName: string | undefined,\n sessionName: string | undefined,\n flags: SessionsHistoryFlags,\n command: Command,\n config: ResolvedAcpxConfig,\n): Promise<void> {\n const globalFlags = resolveGlobalFlags(command, config);\n const agent = resolveAgentInvocation(explicitAgentName, globalFlags, config);\n const record = await findSession({\n agentCommand: agent.agentCommand,\n cwd: agent.cwd,\n name: sessionName,\n includeClosed: true,\n });\n\n if (!record) {\n throw new Error(\n sessionName\n ? `No named session \"${sessionName}\" for cwd ${agent.cwd} and agent ${agent.agentName}`\n : `No cwd session for ${agent.cwd} and agent ${agent.agentName}`,\n );\n }\n\n printSessionHistoryByFormat(record, flags.limit, globalFlags.format);\n}\n\nfunction formatUptime(startedAt: string | undefined): string | undefined {\n if (!startedAt) {\n return undefined;\n }\n\n const startedMs = Date.parse(startedAt);\n if (!Number.isFinite(startedMs)) {\n return undefined;\n }\n\n const elapsedMs = Math.max(0, Date.now() - startedMs);\n const seconds = Math.floor(elapsedMs / 1_000);\n const hours = Math.floor(seconds / 3_600);\n const minutes = Math.floor((seconds % 3_600) / 60);\n const remSeconds = seconds % 60;\n return `${hours.toString().padStart(2, \"0\")}:${minutes\n .toString()\n .padStart(2, \"0\")}:${remSeconds.toString().padStart(2, \"0\")}`;\n}\n\nasync function handleStatus(\n explicitAgentName: string | undefined,\n flags: StatusFlags,\n command: Command,\n config: ResolvedAcpxConfig,\n): Promise<void> {\n const globalFlags = resolveGlobalFlags(command, config);\n const agent = resolveAgentInvocation(explicitAgentName, globalFlags, config);\n const [{ probeQueueOwnerHealth }, { agentSessionIdPayload, emitJsonResult }] = await Promise.all([\n loadQueueIpcModule(),\n loadOutputRenderModule(),\n ]);\n const record = await findSession({\n agentCommand: agent.agentCommand,\n cwd: agent.cwd,\n name: resolveSessionNameFromFlags(flags, command),\n });\n\n if (!record) {\n if (\n emitJsonResult(globalFlags.format, {\n action: \"status_snapshot\",\n status: \"no-session\",\n summary: \"no active session\",\n })\n ) {\n return;\n }\n\n if (globalFlags.format === \"quiet\") {\n process.stdout.write(\"no-session\\n\");\n return;\n }\n\n process.stdout.write(`session: -\\n`);\n process.stdout.write(`agent: ${agent.agentCommand}\\n`);\n process.stdout.write(`pid: -\\n`);\n process.stdout.write(`status: no-session\\n`);\n process.stdout.write(`uptime: -\\n`);\n process.stdout.write(`lastPromptTime: -\\n`);\n return;\n }\n\n const health = await probeQueueOwnerHealth(record.acpxRecordId);\n const running = health.healthy;\n const payload = {\n sessionId: record.acpxRecordId,\n agentCommand: record.agentCommand,\n pid: health.pid ?? record.pid ?? null,\n status: running ? \"running\" : \"dead\",\n uptime: running ? (formatUptime(record.agentStartedAt) ?? null) : null,\n lastPromptTime: record.lastPromptAt ?? null,\n exitCode: running ? null : (record.lastAgentExitCode ?? null),\n signal: running ? null : (record.lastAgentExitSignal ?? null),\n ...agentSessionIdPayload(record.agentSessionId),\n };\n\n if (\n emitJsonResult(globalFlags.format, {\n action: \"status_snapshot\",\n status: running ? \"alive\" : \"dead\",\n pid: payload.pid ?? undefined,\n summary: running ? \"queue owner healthy\" : \"queue owner unavailable\",\n uptime: payload.uptime ?? undefined,\n lastPromptTime: payload.lastPromptTime ?? undefined,\n exitCode: payload.exitCode ?? undefined,\n signal: payload.signal ?? undefined,\n acpxRecordId: record.acpxRecordId,\n acpxSessionId: record.acpSessionId,\n agentSessionId: record.agentSessionId,\n })\n ) {\n return;\n }\n\n if (globalFlags.format === \"quiet\") {\n process.stdout.write(`${payload.status}\\n`);\n return;\n }\n\n process.stdout.write(`session: ${payload.sessionId}\\n`);\n if (\"agentSessionId\" in payload) {\n process.stdout.write(`agentSessionId: ${payload.agentSessionId}\\n`);\n }\n process.stdout.write(`agent: ${payload.agentCommand}\\n`);\n process.stdout.write(`pid: ${payload.pid ?? \"-\"}\\n`);\n process.stdout.write(`status: ${payload.status}\\n`);\n process.stdout.write(`uptime: ${payload.uptime ?? \"-\"}\\n`);\n process.stdout.write(`lastPromptTime: ${payload.lastPromptTime ?? \"-\"}\\n`);\n if (payload.status === \"dead\") {\n process.stdout.write(`exitCode: ${payload.exitCode ?? \"-\"}\\n`);\n process.stdout.write(`signal: ${payload.signal ?? \"-\"}\\n`);\n }\n}\n\nasync function handleConfigShow(command: Command, config: ResolvedAcpxConfig): Promise<void> {\n const globalFlags = resolveGlobalFlags(command, config);\n const payload = {\n ...toConfigDisplay(config),\n paths: {\n global: config.globalPath,\n project: config.projectPath,\n },\n loaded: {\n global: config.hasGlobalConfig,\n project: config.hasProjectConfig,\n },\n };\n\n if (globalFlags.format === \"json\") {\n process.stdout.write(`${JSON.stringify(payload)}\\n`);\n return;\n }\n\n process.stdout.write(`${JSON.stringify(payload, null, 2)}\\n`);\n}\n\nasync function handleConfigInit(command: Command, config: ResolvedAcpxConfig): Promise<void> {\n const globalFlags = resolveGlobalFlags(command, config);\n const result = await initGlobalConfigFile();\n if (globalFlags.format === \"json\") {\n process.stdout.write(\n `${JSON.stringify({\n path: result.path,\n created: result.created,\n })}\\n`,\n );\n return;\n }\n if (globalFlags.format === \"quiet\") {\n process.stdout.write(`${result.path}\\n`);\n return;\n }\n\n if (result.created) {\n process.stdout.write(`Created ${result.path}\\n`);\n return;\n }\n process.stdout.write(`Config already exists: ${result.path}\\n`);\n}\n\nfunction registerSessionsCommand(\n parent: Command,\n explicitAgentName: string | undefined,\n config: ResolvedAcpxConfig,\n): void {\n const sessionsCommand = parent\n .command(\"sessions\")\n .description(\"List, ensure, create, or close sessions for this agent\");\n\n sessionsCommand.action(async function (this: Command) {\n await handleSessionsList(explicitAgentName, this, config);\n });\n\n sessionsCommand\n .command(\"list\")\n .description(\"List sessions\")\n .action(async function (this: Command) {\n await handleSessionsList(explicitAgentName, this, config);\n });\n\n sessionsCommand\n .command(\"new\")\n .description(\"Create a fresh session for current cwd\")\n .option(\"--name <name>\", \"Session name\", parseSessionName)\n .option(\"--resume-session <id>\", \"Resume existing ACP session id\", (value: string) =>\n parseNonEmptyValue(\"Resume session id\", value),\n )\n .action(async function (this: Command, flags: SessionsNewFlags) {\n await handleSessionsNew(explicitAgentName, flags, this, config);\n });\n\n sessionsCommand\n .command(\"ensure\")\n .description(\"Ensure a session exists for current cwd or ancestor\")\n .option(\"--name <name>\", \"Session name\", parseSessionName)\n .option(\"--resume-session <id>\", \"Resume existing ACP session id\", (value: string) =>\n parseNonEmptyValue(\"Resume session id\", value),\n )\n .action(async function (this: Command, flags: SessionsNewFlags) {\n await handleSessionsEnsure(explicitAgentName, flags, this, config);\n });\n\n sessionsCommand\n .command(\"close\")\n .description(\"Close session for current cwd\")\n .argument(\"[name]\", \"Session name\", parseSessionName)\n .action(async function (this: Command, name?: string) {\n await handleSessionsClose(explicitAgentName, name, this, config);\n });\n\n sessionsCommand\n .command(\"show\")\n .description(\"Show session metadata for current cwd\")\n .argument(\"[name]\", \"Session name\", parseSessionName)\n .action(async function (this: Command, name?: string) {\n await handleSessionsShow(explicitAgentName, name, this, config);\n });\n\n sessionsCommand\n .command(\"history\")\n .description(\"Show recent session history entries\")\n .argument(\"[name]\", \"Session name\", parseSessionName)\n .option(\n \"--limit <count>\",\n \"Maximum number of entries to show (default: 20)\",\n parseHistoryLimit,\n DEFAULT_HISTORY_LIMIT,\n )\n .action(async function (this: Command, name: string | undefined, flags: SessionsHistoryFlags) {\n await handleSessionsHistory(explicitAgentName, name, flags, this, config);\n });\n\n sessionsCommand\n .command(\"read\")\n .description(\"Read full session history\")\n .argument(\"[name]\", \"Session name\", parseSessionName)\n .option(\n \"--tail <count>\",\n \"Show only the last N entries instead of all history\",\n parseHistoryLimit,\n )\n .action(async function (this: Command, name: string | undefined, flags: { tail?: number }) {\n await handleSessionsHistory(\n explicitAgentName,\n name,\n { limit: flags.tail ?? 0 },\n this,\n config,\n );\n });\n}\n\ntype SharedSubcommandDescriptions = {\n prompt: string;\n exec: string;\n cancel: string;\n setMode: string;\n setConfig: string;\n status: string;\n};\n\nfunction registerSharedAgentSubcommands(\n parent: Command,\n explicitAgentName: string | undefined,\n config: ResolvedAcpxConfig,\n descriptions: SharedSubcommandDescriptions,\n): void {\n const promptCommand = parent\n .command(\"prompt\")\n .description(descriptions.prompt)\n .argument(\"[prompt...]\", \"Prompt text\")\n .showHelpAfterError();\n addSessionOption(promptCommand);\n addPromptInputOption(promptCommand);\n promptCommand.action(async function (this: Command, promptParts: string[], flags: PromptFlags) {\n await handlePrompt(explicitAgentName, promptParts, flags, this, config);\n });\n\n const execCommand = parent\n .command(\"exec\")\n .description(descriptions.exec)\n .argument(\"[prompt...]\", \"Prompt text\")\n .showHelpAfterError();\n addPromptInputOption(execCommand);\n execCommand.action(async function (this: Command, promptParts: string[], flags: ExecFlags) {\n await handleExec(explicitAgentName, promptParts, flags, this, config);\n });\n\n const cancelCommand = parent.command(\"cancel\").description(descriptions.cancel);\n addSessionNameOption(cancelCommand);\n cancelCommand.action(async function (this: Command, flags: StatusFlags) {\n await handleCancel(explicitAgentName, flags, this, config);\n });\n\n const setModeCommand = parent\n .command(\"set-mode\")\n .description(descriptions.setMode)\n .argument(\"<mode>\", \"Mode id\", (value: string) => parseNonEmptyValue(\"Mode\", value));\n addSessionNameOption(setModeCommand);\n setModeCommand.action(async function (this: Command, modeId: string, flags: StatusFlags) {\n await handleSetMode(explicitAgentName, modeId, flags, this, config);\n });\n\n const setConfigCommand = parent\n .command(\"set\")\n .description(descriptions.setConfig)\n .argument(\"<key>\", \"Config option id\", (value: string) =>\n parseNonEmptyValue(\"Config option key\", value),\n )\n .argument(\"<value>\", \"Config option value\", (value: string) =>\n parseNonEmptyValue(\"Config option value\", value),\n );\n addSessionNameOption(setConfigCommand);\n setConfigCommand.action(async function (\n this: Command,\n key: string,\n value: string,\n flags: StatusFlags,\n ) {\n await handleSetConfigOption(explicitAgentName, key, value, flags, this, config);\n });\n\n const statusCommand = parent.command(\"status\").description(descriptions.status);\n addSessionNameOption(statusCommand);\n statusCommand.action(async function (this: Command, flags: StatusFlags) {\n await handleStatus(explicitAgentName, flags, this, config);\n });\n}\n\nfunction registerAgentCommand(\n program: Command,\n agentName: string,\n config: ResolvedAcpxConfig,\n): void {\n const agentCommand = program\n .command(agentName)\n .description(`Use ${agentName} agent`)\n .argument(\"[prompt...]\", \"Prompt text\")\n .enablePositionalOptions()\n .passThroughOptions()\n .showHelpAfterError();\n\n addSessionOption(agentCommand);\n addPromptInputOption(agentCommand);\n agentCommand.action(async function (this: Command, promptParts: string[], flags: PromptFlags) {\n await handlePrompt(agentName, promptParts, flags, this, config);\n });\n\n registerSharedAgentSubcommands(agentCommand, agentName, config, {\n prompt: \"Prompt using persistent session\",\n exec: \"One-shot prompt without saved session\",\n cancel: \"Cooperatively cancel current in-flight prompt\",\n setMode: \"Set session mode\",\n setConfig: \"Set session config option\",\n status: \"Show local status of current session agent process\",\n });\n\n registerSessionsCommand(agentCommand, agentName, config);\n}\n\nfunction registerConfigCommand(program: Command, config: ResolvedAcpxConfig): void {\n const configCommand = program\n .command(\"config\")\n .description(\"Inspect and initialize acpx configuration\");\n\n configCommand\n .command(\"show\")\n .description(\"Show resolved config\")\n .action(async function (this: Command) {\n await handleConfigShow(this, config);\n });\n\n configCommand\n .command(\"init\")\n .description(\"Create global config template\")\n .action(async function (this: Command) {\n await handleConfigInit(this, config);\n });\n\n configCommand.action(async function (this: Command) {\n await handleConfigShow(this, config);\n });\n}\n\nfunction registerDefaultCommands(program: Command, config: ResolvedAcpxConfig): void {\n registerSharedAgentSubcommands(program, undefined, config, {\n prompt: `Prompt using ${config.defaultAgent} by default`,\n exec: `One-shot prompt using ${config.defaultAgent} by default`,\n cancel: `Cancel active prompt for ${config.defaultAgent} by default`,\n setMode: `Set session mode for ${config.defaultAgent} by default`,\n setConfig: `Set session config option for ${config.defaultAgent} by default`,\n status: `Show local status for ${config.defaultAgent} by default`,\n });\n\n registerSessionsCommand(program, undefined, config);\n registerConfigCommand(program, config);\n}\n\ntype AgentTokenScan = {\n token?: string;\n hasAgentOverride: boolean;\n};\n\nfunction detectAgentToken(argv: string[]): AgentTokenScan {\n let hasAgentOverride = false;\n\n for (let index = 0; index < argv.length; index += 1) {\n const token = argv[index];\n\n if (token === \"--\") {\n break;\n }\n\n if (!token.startsWith(\"-\") || token === \"-\") {\n return { token, hasAgentOverride };\n }\n\n if (token === \"--agent\") {\n hasAgentOverride = true;\n index += 1;\n continue;\n }\n\n if (token.startsWith(\"--agent=\")) {\n hasAgentOverride = true;\n continue;\n }\n\n if (\n token === \"--cwd\" ||\n token === \"--auth-policy\" ||\n token === \"--non-interactive-permissions\" ||\n token === \"--format\" ||\n token === \"--model\" ||\n token === \"--allowed-tools\" ||\n token === \"--max-turns\" ||\n token === \"--timeout\" ||\n token === \"--ttl\" ||\n token === \"--file\"\n ) {\n index += 1;\n continue;\n }\n\n if (\n token.startsWith(\"--cwd=\") ||\n token.startsWith(\"--auth-policy=\") ||\n token.startsWith(\"--non-interactive-permissions=\") ||\n token.startsWith(\"--format=\") ||\n token.startsWith(\"--model=\") ||\n token.startsWith(\"--allowed-tools=\") ||\n token.startsWith(\"--max-turns=\") ||\n token.startsWith(\"--json-strict=\") ||\n token.startsWith(\"--timeout=\") ||\n token.startsWith(\"--ttl=\") ||\n token.startsWith(\"--file=\")\n ) {\n continue;\n }\n\n if (\n token === \"--approve-all\" ||\n token === \"--approve-reads\" ||\n token === \"--deny-all\" ||\n token === \"--json-strict\" ||\n token === \"--verbose\"\n ) {\n continue;\n }\n\n return { hasAgentOverride };\n }\n\n return { hasAgentOverride };\n}\n\nfunction detectInitialCwd(argv: string[]): string {\n for (let index = 0; index < argv.length; index += 1) {\n const token = argv[index];\n if (token === \"--cwd\") {\n const next = argv[index + 1];\n if (next && next !== \"--\") {\n return path.resolve(next);\n }\n break;\n }\n if (token.startsWith(\"--cwd=\")) {\n const value = token.slice(\"--cwd=\".length).trim();\n if (value.length > 0) {\n return path.resolve(value);\n }\n break;\n }\n if (token === \"--\") {\n break;\n }\n }\n return process.cwd();\n}\n\nfunction detectRequestedOutputFormat(argv: string[], fallback: OutputFormat): OutputFormat {\n let detectedFormat = fallback;\n for (let index = 0; index < argv.length; index += 1) {\n const token = argv[index];\n if (token === \"--\") {\n break;\n }\n\n if (token === \"--json-strict\" || token.startsWith(\"--json-strict=\")) {\n return \"json\";\n }\n\n if (token === \"--format\") {\n const raw = argv[index + 1];\n if (raw && OUTPUT_FORMATS.includes(raw as OutputFormat)) {\n detectedFormat = raw as OutputFormat;\n }\n continue;\n }\n\n if (token.startsWith(\"--format=\")) {\n const raw = token.slice(\"--format=\".length).trim();\n if (OUTPUT_FORMATS.includes(raw as OutputFormat)) {\n detectedFormat = raw as OutputFormat;\n }\n }\n }\n\n return detectedFormat;\n}\n\nfunction detectJsonStrict(argv: string[]): boolean {\n for (let index = 0; index < argv.length; index += 1) {\n const token = argv[index];\n if (token === \"--\") {\n break;\n }\n if (token === \"--json-strict\") {\n return true;\n }\n if (token.startsWith(\"--json-strict=\")) {\n return true;\n }\n }\n return false;\n}\n\nasync function emitJsonErrorEvent(error: NormalizedOutputError): Promise<void> {\n const { createOutputFormatter } = await loadOutputModule();\n const formatter = createOutputFormatter(\"json\", {\n jsonContext: {\n sessionId: \"unknown\",\n },\n });\n formatter.onError(error);\n formatter.flush();\n}\n\nfunction isOutputAlreadyEmitted(error: unknown): boolean {\n if (!error || typeof error !== \"object\") {\n return false;\n }\n return (error as { outputAlreadyEmitted?: unknown }).outputAlreadyEmitted === true;\n}\n\nasync function emitRequestedError(\n error: unknown,\n normalized: NormalizedOutputError,\n outputPolicy: OutputPolicy,\n): Promise<void> {\n if (isOutputAlreadyEmitted(error)) {\n return;\n }\n if (outputPolicy.format === \"json\") {\n await emitJsonErrorEvent(normalized);\n } else if (!outputPolicy.suppressNonJsonStderr) {\n process.stderr.write(`${normalized.message}\\n`);\n }\n}\n\nasync function runWithOutputPolicy<T>(\n _outputPolicy: OutputPolicy,\n run: () => Promise<T>,\n): Promise<T> {\n return await run();\n}\n\nexport async function main(argv: string[] = process.argv): Promise<void> {\n installPerfMetricsCapture({\n argv: argv.slice(2),\n role: argv[2] === \"__queue-owner\" ? \"queue_owner\" : \"cli\",\n });\n\n if (argv.includes(\"--version\") || argv.includes(\"-V\")) {\n process.stdout.write(`${getAcpxVersion()}\\n`);\n return;\n }\n\n if (argv[2] === \"__queue-owner\") {\n try {\n await runQueueOwnerFromEnv(process.env);\n return;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n process.stderr.write(`[acpx] queue owner failed: ${message}\\n`);\n process.exit(EXIT_CODES.ERROR);\n }\n }\n\n if (shouldMaybeHandleSkillflag(argv)) {\n const { findSkillsRoot, maybeHandleSkillflag } = await loadSkillflagModule();\n await maybeHandleSkillflag(argv, {\n skillsRoot: findSkillsRoot(import.meta.url),\n includeBundledSkill: false,\n });\n }\n\n const config = await loadResolvedConfig(detectInitialCwd(argv.slice(2)));\n const requestedJsonStrict = detectJsonStrict(argv.slice(2));\n const requestedOutputFormat = detectRequestedOutputFormat(argv.slice(2), config.format);\n const requestedOutputPolicy = resolveOutputPolicy(requestedOutputFormat, requestedJsonStrict);\n const builtInAgents = listBuiltInAgents(config.agents);\n\n const program = new Command();\n program\n .name(\"acpx\")\n .description(\"Headless CLI client for the Agent Client Protocol\")\n .version(getAcpxVersion())\n .enablePositionalOptions()\n .showHelpAfterError();\n\n if (requestedJsonStrict) {\n program.configureOutput({\n writeOut: () => {\n // json-strict intentionally suppresses non-JSON stdout output.\n },\n writeErr: () => {\n // json-strict intentionally suppresses non-JSON stderr output.\n },\n });\n }\n\n addGlobalFlags(program);\n\n for (const agentName of builtInAgents) {\n registerAgentCommand(program, agentName, config);\n }\n\n registerDefaultCommands(program, config);\n\n const scan = detectAgentToken(argv.slice(2));\n if (\n !scan.hasAgentOverride &&\n scan.token &&\n !TOP_LEVEL_VERBS.has(scan.token) &&\n !builtInAgents.includes(scan.token)\n ) {\n registerAgentCommand(program, scan.token, config);\n }\n\n program.argument(\"[prompt...]\", \"Prompt text\").action(async function (\n this: Command,\n promptParts: string[],\n ) {\n if (promptParts.length === 0 && process.stdin.isTTY) {\n if (requestedJsonStrict) {\n throw new InvalidArgumentError(\n \"Prompt is required (pass as argument, --file, or pipe via stdin)\",\n );\n }\n this.outputHelp();\n return;\n }\n\n await handlePrompt(undefined, promptParts, {}, this, config);\n });\n\n program.addHelpText(\n \"after\",\n `\nExamples:\n acpx pi \"review recent changes\"\n acpx openclaw exec \"summarize active session state\"\n acpx codex sessions new\n acpx codex \"fix the tests\"\n acpx codex prompt \"fix the tests\"\n acpx codex --no-wait \"queue follow-up task\"\n acpx codex exec \"what does this repo do\"\n acpx codex cancel\n acpx codex set-mode plan\n acpx codex set thought_level high\n acpx codex -s backend \"fix the API\"\n acpx codex sessions\n acpx codex sessions new --name backend\n acpx codex sessions ensure --name backend\n acpx codex sessions close backend\n acpx codex status\n acpx config show\n acpx config init\n acpx --ttl 30 codex \"investigate flaky tests\"\n acpx claude \"refactor auth\"\n acpx --agent ./my-custom-server \"do something\"`,\n );\n\n program.exitOverride((error) => {\n throw error;\n });\n\n try {\n await runWithOutputPolicy(requestedOutputPolicy, async () => {\n try {\n await program.parseAsync(argv);\n } catch (error) {\n if (error instanceof CommanderError) {\n if (error.code === \"commander.helpDisplayed\" || error.code === \"commander.version\") {\n process.exit(EXIT_CODES.SUCCESS);\n }\n const normalized = normalizeOutputError(error, {\n defaultCode: \"USAGE\",\n origin: \"cli\",\n });\n await emitRequestedError(error, normalized, requestedOutputPolicy);\n process.exit(exitCodeForOutputErrorCode(normalized.code));\n }\n\n if (error instanceof InterruptedError) {\n process.exit(EXIT_CODES.INTERRUPTED);\n }\n\n const normalized = normalizeOutputError(error, {\n origin: \"cli\",\n });\n await emitRequestedError(error, normalized, requestedOutputPolicy);\n process.exit(exitCodeForOutputErrorCode(normalized.code));\n }\n });\n } finally {\n flushPerfMetricsCapture();\n }\n}\n","#!/usr/bin/env node\n\nimport { realpathSync } from \"node:fs\";\nimport { pathToFileURL } from \"node:url\";\nimport { main } from \"./cli-core.js\";\n\nexport { formatPromptSessionBannerLine } from \"./cli-core.js\";\nexport { parseAllowedTools, parseMaxTurns, parseTtlSeconds } from \"./cli/flags.js\";\n\nfunction isCliEntrypoint(argv: string[]): boolean {\n const entry = argv[1];\n if (!entry) {\n return false;\n }\n\n try {\n // Resolve symlinks so global npm installs match (argv[1] is the\n // symlink in node_modules/.bin, import.meta.url is the real path).\n const resolved = pathToFileURL(realpathSync(entry)).href;\n return import.meta.url === resolved;\n } catch {\n return false;\n }\n}\n\nif (isCliEntrypoint(process.argv)) {\n void main(process.argv);\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "acpx",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
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",
@@ -32,6 +32,7 @@
32
32
  "build:test": "node -e \"require('node:fs').rmSync('dist-test',{recursive:true,force:true})\" && tsc -p tsconfig.test.json",
33
33
  "check": "pnpm run format:check && pnpm run typecheck && pnpm run lint && pnpm run build && pnpm run test:coverage",
34
34
  "check:docs": "pnpm run format:docs:check && pnpm run lint:docs",
35
+ "conformance:run": "tsx conformance/runner/run.ts",
35
36
  "dev": "tsx src/cli.ts",
36
37
  "format": "oxfmt --write",
37
38
  "format:check": "oxfmt --check",
@@ -78,7 +78,7 @@ Friendly agent names resolve to commands:
78
78
  - `gemini` -> `gemini --acp`
79
79
  - `cursor` -> `cursor-agent acp`
80
80
  - `copilot` -> `copilot --acp --stdio`
81
- - `droid` -> `droid exec --output-format acp`
81
+ - `droid` -> `droid exec --output-format acp` (`factory-droid` and `factorydroid` also resolve to `droid`)
82
82
  - `kimi` -> `kimi acp`
83
83
  - `opencode` -> `npx -y opencode-ai acp`
84
84
  - `kiro` -> `kiro-cli acp`