acpx 0.9.0 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/{cli-Bf3yjqzE.js → cli-8dP_TqBp.js} +4 -4
- package/dist/{cli-Bf3yjqzE.js.map → cli-8dP_TqBp.js.map} +1 -1
- package/dist/cli.d.ts +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +392 -12
- package/dist/cli.js.map +1 -1
- package/dist/{client-BssohYqM.d.ts → client-C4iJBO0j.d.ts} +2 -2
- package/dist/{client-BssohYqM.d.ts.map → client-C4iJBO0j.d.ts.map} +1 -1
- package/dist/{flags-C-rwARqg.js → flags--2oX_ubW.js} +3 -3
- package/dist/flags--2oX_ubW.js.map +1 -0
- package/dist/{flows-WLs26_5Y.js → flows-e4umXVbY.js} +4 -4
- package/dist/{flows-WLs26_5Y.js.map → flows-e4umXVbY.js.map} +1 -1
- package/dist/flows.d.ts +1 -1
- package/dist/flows.js +1 -1
- package/dist/{live-checkpoint-D5d-K9s1.js → live-checkpoint-CuFft_Nd.js} +300 -272
- package/dist/live-checkpoint-CuFft_Nd.js.map +1 -0
- package/dist/{output-DPg20dvn.js → output-Di77Yugq.js} +12 -12
- package/dist/{output-DPg20dvn.js.map → output-Di77Yugq.js.map} +1 -1
- package/dist/runtime.d.ts +2 -2
- package/dist/runtime.js +1 -1
- package/dist/{session-options-CFudjdkU.d.ts → session-options-Bh1bIqQ2.d.ts} +8 -1
- package/dist/{session-options-CFudjdkU.d.ts.map → session-options-Bh1bIqQ2.d.ts.map} +1 -1
- package/package.json +7 -1
- package/skills/acpx/SKILL.md +11 -2
- package/dist/flags-C-rwARqg.js.map +0 -1
- package/dist/live-checkpoint-D5d-K9s1.js.map +0 -1
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","names":["fs","asRecord","fs","parseOutputFormat"],"sources":["../src/cli-public.ts","../src/acp/codex-compat.ts","../src/cli/output/json-output.ts","../src/cli/command-handlers.ts","../src/mcp-servers.ts","../src/cli/config.ts","../src/cli/config-command.ts","../src/cli/output/render.ts","../src/cli/status-command.ts","../src/cli/command-registration.ts","../src/cli/queue/owner-env.ts","../src/version.ts","../src/cli-core.ts","../src/cli.ts"],"sourcesContent":["import { InvalidArgumentError } from \"commander\";\nimport type { Command } from \"commander\";\nimport type { ResolvedAcpxConfig } from \"./cli/config.js\";\n\ntype AgentTokenScan = {\n token?: string;\n hasAgentOverride: boolean;\n};\n\ntype ConfigurePublicCliOptions = {\n program: Command;\n argv: string[];\n config: ResolvedAcpxConfig;\n requestedJsonStrict: boolean;\n topLevelVerbs: ReadonlySet<string>;\n listBuiltInAgents: (agents: ResolvedAcpxConfig[\"agents\"]) => string[];\n detectAgentToken: (argv: string[]) => AgentTokenScan;\n registerAgentCommand: (program: Command, agentName: string, config: ResolvedAcpxConfig) => void;\n registerDefaultCommands: (program: Command, config: ResolvedAcpxConfig) => void;\n handlePromptAction: (command: Command, promptParts: string[]) => Promise<void>;\n};\n\nexport function configurePublicCli(options: ConfigurePublicCliOptions): void {\n const builtInAgents = options.listBuiltInAgents(options.config.agents);\n\n for (const agentName of builtInAgents) {\n options.registerAgentCommand(options.program, agentName, options.config);\n }\n\n options.registerDefaultCommands(options.program, options.config);\n\n const scan = options.detectAgentToken(options.argv);\n if (\n !scan.hasAgentOverride &&\n scan.token &&\n !options.topLevelVerbs.has(scan.token) &&\n !builtInAgents.includes(scan.token)\n ) {\n options.registerAgentCommand(options.program, scan.token, options.config);\n }\n\n options.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 (options.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 options.handlePromptAction(this, promptParts);\n });\n\n options.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 model 'gpt-5.2[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","import path from \"node:path\";\n\nfunction basenameToken(value: string): string {\n return path\n .basename(value)\n .toLowerCase()\n .replace(/\\.(cmd|exe|bat)$/u, \"\");\n}\n\nexport function isCodexAcpCommand(command: string, args: readonly string[]): boolean {\n const commandToken = basenameToken(command);\n if (commandToken === \"codex-acp\") {\n return true;\n }\n return args.some((arg) => arg.includes(\"codex-acp\"));\n}\n\nexport function isLegacyZedCodexAcpInvocation(agentCommand: string): boolean {\n return /@zed-industries\\/codex-acp\\b/u.test(agentCommand);\n}\n","import type { OutputFormat } from \"../../types.js\";\n\nexport function 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","import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { Command, InvalidArgumentError } from \"commander\";\nimport { isLegacyZedCodexAcpInvocation } from \"../acp/codex-compat.js\";\nimport { AgentSpawnError } from \"../errors.js\";\nimport { loadPermissionPolicySpec } from \"../permission-policy.js\";\nimport {\n mergePromptSourceWithText,\n parsePromptSource,\n PromptInputValidationError,\n textPrompt,\n} from \"../prompt-content.js\";\nimport {\n findGitRepositoryRoot,\n findSession,\n findSessionByDirectoryWalk,\n} from \"../session/persistence.js\";\nimport { EXIT_CODES } from \"../types.js\";\nimport type {\n OutputFormat,\n OutputPolicy,\n SessionAgentContent,\n SessionRecord,\n SessionUserContent,\n PermissionPolicy,\n} from \"../types.js\";\nimport type { ResolvedAcpxConfig } from \"./config.js\";\nimport {\n parseHistoryLimit,\n resolveAgentInvocation,\n resolveGlobalFlags,\n resolveOutputPolicy,\n resolvePermissionMode,\n resolveSessionNameFromFlags,\n type ExecFlags,\n type GlobalFlags,\n type PromptFlags,\n type SessionsHistoryFlags,\n type SessionsListFlags,\n type SessionsNewFlags,\n type SessionsPruneFlags,\n type StatusFlags,\n} from \"./flags.js\";\nimport { emitJsonResult } from \"./output/json-output.js\";\nimport type { SessionListResult } from \"./session/contracts.js\";\n\nclass NoSessionError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"NoSessionError\";\n }\n}\n\ntype SessionModule = typeof import(\"../session/session.js\");\ntype OutputModule = typeof import(\"./output/output.js\");\ntype OutputRenderModule = typeof import(\"./output/render.js\");\n\nlet sessionModulePromise: Promise<SessionModule> | undefined;\nlet outputModulePromise: Promise<OutputModule> | undefined;\nlet outputRenderModulePromise: Promise<OutputRenderModule> | undefined;\n\nfunction loadSessionModule(): Promise<SessionModule> {\n sessionModulePromise ??= import(\"../session/session.js\");\n return sessionModulePromise;\n}\n\nfunction loadOutputModule(): Promise<OutputModule> {\n outputModulePromise ??= import(\"./output/output.js\");\n return outputModulePromise;\n}\n\nfunction loadOutputRenderModule(): Promise<OutputRenderModule> {\n outputRenderModulePromise ??= import(\"./output/render.js\");\n return outputRenderModulePromise;\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 return await readPromptFromFile(filePath, cwd, promptParts);\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\nasync function readPromptFromFile(\n filePath: string,\n cwd: string,\n promptParts: string[],\n): Promise<import(\"../types.js\").PromptInput> {\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\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 resolveCompatibleConfigId(agent: { agentCommand: string }, configId: string): string {\n if (isLegacyZedCodexAcpInvocation(agent.agentCommand) && configId === \"thought_level\") {\n return \"reasoning_effort\";\n }\n return configId;\n}\n\nfunction resolveRequestedOutputPolicy(globalFlags: {\n format: OutputFormat;\n jsonStrict?: boolean;\n suppressReads?: boolean;\n}): OutputPolicy {\n return {\n ...resolveOutputPolicy(globalFlags.format, globalFlags.jsonStrict === true),\n suppressReads: globalFlags.suppressReads === true,\n };\n}\n\ntype ResolvedAgentInvocation = ReturnType<typeof resolveAgentInvocation>;\n\nfunction sessionOptionsFromGlobalFlags(\n globalFlags: GlobalFlags,\n): NonNullable<Parameters<SessionModule[\"createSession\"]>[0][\"sessionOptions\"]> {\n return {\n model: globalFlags.model,\n allowedTools: globalFlags.allowedTools,\n maxTurns: globalFlags.maxTurns,\n systemPrompt: globalFlags.systemPrompt,\n };\n}\n\nasync function resolvePermissionPolicyFromFlags(\n globalFlags: GlobalFlags,\n): Promise<PermissionPolicy | undefined> {\n try {\n return await loadPermissionPolicySpec(globalFlags.permissionPolicy, globalFlags.cwd);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n throw new InvalidArgumentError(`Invalid permission policy: ${message}`);\n }\n}\n\nfunction buildSessionStartOptions(params: {\n agent: ResolvedAgentInvocation;\n flags: SessionsNewFlags;\n globalFlags: GlobalFlags;\n config: ResolvedAcpxConfig;\n permissionMode: ReturnType<typeof resolvePermissionMode>;\n permissionPolicy?: PermissionPolicy;\n}): Parameters<SessionModule[\"createSession\"]>[0] {\n return {\n agentCommand: params.agent.agentCommand,\n cwd: params.agent.cwd,\n name: params.flags.name,\n resumeSessionId: params.flags.resumeSession,\n mcpServers: params.config.mcpServers,\n permissionMode: params.permissionMode,\n nonInteractivePermissions: params.globalFlags.nonInteractivePermissions,\n permissionPolicy: params.permissionPolicy,\n authCredentials: params.config.auth,\n authPolicy: params.globalFlags.authPolicy,\n terminal: params.globalFlags.terminal,\n timeoutMs: params.globalFlags.timeout,\n verbose: params.globalFlags.verbose,\n sessionOptions: sessionOptionsFromGlobalFlags(params.globalFlags),\n };\n}\n\nfunction resolveSessionListFilterCwd(\n flags: Pick<SessionsListFlags, \"filterCwd\">,\n agentCwd: string,\n): string | undefined {\n return flags.filterCwd ? path.resolve(agentCwd, flags.filterCwd) : undefined;\n}\n\nasync function printLocalSessionsList(\n agentCommand: string,\n filterCwd: string | undefined,\n format: OutputFormat,\n): Promise<void> {\n const [{ listSessionsForAgent }, { printSessionsByFormat }] = await Promise.all([\n loadSessionModule(),\n loadOutputRenderModule(),\n ]);\n const sessions = await listSessionsForAgent(agentCommand);\n const filtered = filterCwd ? sessions.filter((session) => session.cwd === filterCwd) : sessions;\n printSessionsByFormat(filtered, format);\n}\n\nfunction missingScopedSessionMessage(\n agent: ResolvedAgentInvocation,\n sessionName: string | undefined,\n): string {\n return 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\nasync function findScopedSessionOrThrow(\n agent: ResolvedAgentInvocation,\n sessionName: string | undefined,\n): Promise<SessionRecord> {\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(missingScopedSessionMessage(agent, sessionName));\n }\n\n return record;\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\nexport async 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 = resolveRequestedOutputPolicy(globalFlags);\n const permissionMode = resolvePermissionMode(globalFlags, config.defaultPermissions);\n const permissionPolicy = await resolvePermissionPolicyFromFlags(globalFlags);\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 suppressReads: outputPolicy.suppressReads,\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 permissionPolicy,\n authCredentials: config.auth,\n authPolicy: globalFlags.authPolicy,\n terminal: globalFlags.terminal,\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 promptRetries: globalFlags.promptRetries,\n verbose: globalFlags.verbose,\n waitForCompletion: flags.wait !== false,\n sessionOptions: {\n model: globalFlags.model,\n allowedTools: globalFlags.allowedTools,\n maxTurns: globalFlags.maxTurns,\n systemPrompt: globalFlags.systemPrompt,\n },\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(\n `[acpx] session reconnect failed, started fresh session: ${result.loadError}\\n`,\n );\n }\n}\n\nexport async 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 = resolveRequestedOutputPolicy(globalFlags);\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: { acpxCode: \"EXEC_DISABLED\" },\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 = 1;\n return;\n }\n\n const globalFlags = resolveGlobalFlags(command, config);\n const outputPolicy = resolveRequestedOutputPolicy(globalFlags);\n const permissionMode = resolvePermissionMode(globalFlags, config.defaultPermissions);\n const permissionPolicy = await resolvePermissionPolicyFromFlags(globalFlags);\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 suppressReads: outputPolicy.suppressReads,\n });\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 permissionPolicy,\n authCredentials: config.auth,\n authPolicy: globalFlags.authPolicy,\n terminal: globalFlags.terminal,\n outputFormatter,\n suppressSdkConsoleErrors: outputPolicy.suppressSdkConsoleErrors,\n timeoutMs: globalFlags.timeout,\n verbose: globalFlags.verbose,\n promptRetries: globalFlags.promptRetries,\n sessionOptions: {\n model: globalFlags.model,\n allowedTools: globalFlags.allowedTools,\n maxTurns: globalFlags.maxTurns,\n systemPrompt: globalFlags.systemPrompt,\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 process.stdout.write(result.cancelled ? \"cancel requested\\n\" : \"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 process.stdout.write(format === \"quiet\" ? `${modeId}\\n` : `mode set: ${modeId}\\n`);\n}\n\nfunction printSetModelResultByFormat(\n modelId: string,\n result: { record: SessionRecord; resumed: boolean },\n format: OutputFormat,\n): void {\n if (\n emitJsonResult(format, {\n action: \"model_set\",\n modelId,\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 process.stdout.write(format === \"quiet\" ? `${modelId}\\n` : `model set: ${modelId}\\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 process.stdout.write(\n format === \"quiet\"\n ? `${value}\\n`\n : `config set: ${configId}=${value} (${result.response.configOptions.length} options)\\n`,\n );\n}\n\nexport async 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({ sessionId: \"\", cancelled: false }, globalFlags.format);\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\nexport async 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 terminal: globalFlags.terminal,\n timeoutMs: globalFlags.timeout,\n verbose: globalFlags.verbose,\n });\n\n if (globalFlags.verbose && result.loadError) {\n process.stderr.write(\n `[acpx] session reconnect failed, started fresh session: ${result.loadError}\\n`,\n );\n }\n\n printSetModeResultByFormat(modeId, result, globalFlags.format);\n}\n\nexport async function handleSetModel(\n explicitAgentName: string | undefined,\n modelId: 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 { setSessionModel } = 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 setSessionModel({\n sessionId: record.acpxRecordId,\n modelId,\n mcpServers: config.mcpServers,\n nonInteractivePermissions: globalFlags.nonInteractivePermissions,\n authCredentials: config.auth,\n authPolicy: globalFlags.authPolicy,\n terminal: globalFlags.terminal,\n timeoutMs: globalFlags.timeout,\n verbose: globalFlags.verbose,\n });\n\n if (globalFlags.verbose && result.loadError) {\n process.stderr.write(\n `[acpx] session reconnect failed, started fresh session: ${result.loadError}\\n`,\n );\n }\n\n printSetModelResultByFormat(modelId, result, globalFlags.format);\n}\n\nexport async 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 if (configId === \"model\") {\n await handleSetModel(explicitAgentName, value, flags, command, config);\n return;\n }\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 terminal: globalFlags.terminal,\n timeoutMs: globalFlags.timeout,\n verbose: globalFlags.verbose,\n });\n\n if (globalFlags.verbose && result.loadError) {\n process.stderr.write(\n `[acpx] session reconnect failed, started fresh session: ${result.loadError}\\n`,\n );\n }\n\n printSetConfigOptionResultByFormat(configId, value, result, globalFlags.format);\n}\n\nasync function tryListAgentSessions(\n agent: ResolvedAgentInvocation,\n flags: SessionsListFlags,\n globalFlags: ReturnType<typeof resolveGlobalFlags>,\n config: ResolvedAcpxConfig,\n): Promise<SessionListResult | \"spawn-failed\"> {\n const permissionMode = resolvePermissionMode(globalFlags, config.defaultPermissions);\n const permissionPolicy = await resolvePermissionPolicyFromFlags(globalFlags);\n const { listAgentSessions } = await loadSessionModule();\n try {\n return await listAgentSessions({\n agentCommand: agent.agentCommand,\n cwd: agent.cwd,\n cursor: flags.cursor,\n filterCwd: resolveSessionListFilterCwd(flags, agent.cwd),\n mcpServers: config.mcpServers,\n permissionMode,\n nonInteractivePermissions: globalFlags.nonInteractivePermissions,\n permissionPolicy,\n authCredentials: config.auth,\n authPolicy: globalFlags.authPolicy,\n terminal: globalFlags.terminal,\n timeoutMs: globalFlags.timeout,\n verbose: globalFlags.verbose,\n });\n } catch (error) {\n if (error instanceof AgentSpawnError) {\n return \"spawn-failed\";\n }\n throw error;\n }\n}\n\nexport async function handleSessionsList(\n explicitAgentName: string | undefined,\n flags: SessionsListFlags,\n command: Command,\n config: ResolvedAcpxConfig,\n): Promise<void> {\n const globalFlags = resolveGlobalFlags(command, config);\n const agent = resolveAgentInvocation(explicitAgentName, globalFlags, config);\n const filterCwd = resolveSessionListFilterCwd(flags, agent.cwd);\n\n if (flags.local) {\n if (flags.cursor) {\n throw new InvalidArgumentError(\"--cursor cannot be combined with --local\");\n }\n await printLocalSessionsList(agent.agentCommand, filterCwd, globalFlags.format);\n return;\n }\n\n const [result, { printAgentSessionsByFormat }] = await Promise.all([\n tryListAgentSessions(agent, flags, globalFlags, config),\n loadOutputRenderModule(),\n ]);\n\n if (!result || result === \"spawn-failed\") {\n if (result !== \"spawn-failed\" && (flags.cursor || flags.filterCwd)) {\n throw new Error(\n `Agent command \"${agent.agentCommand}\" does not advertise sessionCapabilities.list; cannot use agent-side session/list filters`,\n );\n }\n await printLocalSessionsList(agent.agentCommand, undefined, globalFlags.format);\n return;\n }\n\n printAgentSessionsByFormat(result, globalFlags.format);\n}\n\nexport async 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 throw new Error(missingScopedSessionMessage(agent, sessionName));\n }\n\n const closed = await closeSession(record.acpxRecordId);\n printClosedSessionByFormat(closed, globalFlags.format);\n}\n\nexport async 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 permissionPolicy = await resolvePermissionPolicyFromFlags(globalFlags);\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 buildSessionStartOptions({\n agent,\n flags,\n globalFlags,\n config,\n permissionMode,\n permissionPolicy,\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\nexport async 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 permissionPolicy = await resolvePermissionPolicyFromFlags(globalFlags);\n const agent = resolveAgentInvocation(explicitAgentName, globalFlags, config);\n const [{ ensureSession }, { printCreatedSessionBanner, printEnsuredSessionByFormat }] =\n await Promise.all([loadSessionModule(), loadOutputRenderModule()]);\n const result = await ensureSession(\n buildSessionStartOptions({\n agent,\n flags,\n globalFlags,\n config,\n permissionMode,\n permissionPolicy,\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 if (\"Audio\" in content) {\n return `[audio] ${content.Audio.mime_type || \"audio\"}`;\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<{ role: \"user\" | \"assistant\"; timestamp: string; textPreview: string }> = [];\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 if (!text) {\n continue;\n }\n entries.push({ role: \"user\", timestamp: record.updated_at, textPreview: text });\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 if (!text) {\n continue;\n }\n entries.push({ role: \"assistant\", timestamp: record.updated_at, textPreview: text });\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 if (format === \"quiet\") {\n process.stdout.write(`${record.acpxRecordId}\\n`);\n return;\n }\n for (const line of sessionDetailsLines(record)) {\n process.stdout.write(`${line}\\n`);\n }\n}\n\nfunction sessionDetailsLines(record: SessionRecord): string[] {\n return [\n `id: ${record.acpxRecordId}`,\n `sessionId: ${record.acpSessionId}`,\n `agentSessionId: ${displayValue(record.agentSessionId)}`,\n `agent: ${record.agentCommand}`,\n `cwd: ${record.cwd}`,\n `name: ${displayValue(record.name)}`,\n `created: ${record.createdAt}`,\n `lastActivity: ${record.lastUsedAt}`,\n `lastPrompt: ${displayValue(record.lastPromptAt)}`,\n `closed: ${record.closed ? \"yes\" : \"no\"}`,\n `closedAt: ${displayValue(record.closedAt)}`,\n `pid: ${displayValue(record.pid)}`,\n `agentStartedAt: ${displayValue(record.agentStartedAt)}`,\n `lastExitCode: ${displayValue(record.lastAgentExitCode)}`,\n `lastExitSignal: ${displayValue(record.lastAgentExitSignal)}`,\n `lastExitAt: ${displayValue(record.lastAgentExitAt)}`,\n `disconnectReason: ${displayValue(record.lastAgentDisconnectReason)}`,\n `historyEntries: ${conversationHistoryEntries(record).length}`,\n ];\n}\n\nfunction displayValue(value: string | number | boolean | null | undefined): string {\n return value == null ? \"-\" : String(value);\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\nexport async 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 findScopedSessionOrThrow(agent, sessionName);\n\n printSessionDetailsByFormat(record, globalFlags.format);\n}\n\nexport async 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 findScopedSessionOrThrow(agent, sessionName);\n\n printSessionHistoryByFormat(record, flags.limit, globalFlags.format);\n}\n\nexport async function handleSessionsPrune(\n explicitAgentName: string | undefined,\n flags: SessionsPruneFlags,\n command: Command,\n config: ResolvedAcpxConfig,\n): Promise<void> {\n const globalFlags = resolveGlobalFlags(command, config);\n const agent = resolveAgentInvocation(explicitAgentName, globalFlags, config);\n const [{ pruneSessions }, { printPruneResultByFormat }] = await Promise.all([\n loadSessionModule(),\n loadOutputRenderModule(),\n ]);\n\n const olderThanMs = flags.olderThan != null ? flags.olderThan * 24 * 60 * 60 * 1000 : undefined;\n\n const result = await pruneSessions({\n agentCommand: agent.agentCommand,\n before: flags.before,\n olderThanMs,\n includeHistory: flags.includeHistory,\n dryRun: flags.dryRun,\n });\n\n printPruneResultByFormat(result, globalFlags.format);\n}\n\nexport { parseHistoryLimit, NoSessionError, loadSessionModule };\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 parseServerType(rawType: unknown, path: string): \"http\" | \"sse\" | \"stdio\" {\n if (rawType === undefined) {\n // Allow normalized stdio entries where type is omitted by ACP shape.\n return \"stdio\";\n }\n\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 return parsedType;\n}\n\nfunction parseHttpServer(\n serverRecord: UnknownRecord,\n path: string,\n type: \"http\" | \"sse\",\n name: string,\n _meta: Record<string, unknown> | null | undefined,\n): McpServer {\n return {\n type,\n name,\n url: parseNonEmptyString(serverRecord.url, `${path}.url`),\n headers: parseHeaders(serverRecord.headers, `${path}.headers`),\n _meta,\n } satisfies McpServer;\n}\n\nfunction parseStdioServer(\n serverRecord: UnknownRecord,\n path: string,\n name: string,\n _meta: Record<string, unknown> | null | undefined,\n): McpServer {\n return {\n name,\n command: parseNonEmptyString(serverRecord.command, `${path}.command`),\n args: parseArgs(serverRecord.args, `${path}.args`),\n env: parseEnv(serverRecord.env, `${path}.env`),\n _meta,\n } satisfies McpServer;\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 typeValue = parseServerType(serverRecord.type, path);\n\n if (typeValue === \"http\" || typeValue === \"sse\") {\n return parseHttpServer(serverRecord, path, typeValue, name, _meta);\n }\n\n return parseStdioServer(serverRecord, path, name, _meta);\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 args?: 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 const args = parseAgentArgs(raw.args, name, sourcePath);\n parsed[normalizeAgentName(name)] =\n args.length > 0 ? `${command.trim()} ${args.map(quoteCommandArg).join(\" \")}` : command.trim();\n }\n\n return parsed;\n}\n\nfunction parseAgentArgs(value: unknown, agentName: string, sourcePath: string): string[] {\n if (value == null) {\n return [];\n }\n if (!Array.isArray(value)) {\n throw new Error(\n `Invalid config agents.${agentName}.args in ${sourcePath}: expected array of strings`,\n );\n }\n return value.map((arg, index) => {\n if (typeof arg !== \"string\") {\n throw new Error(\n `Invalid config agents.${agentName}.args[${index}] in ${sourcePath}: expected string`,\n );\n }\n return arg;\n });\n}\n\nfunction quoteCommandArg(value: string): string {\n return JSON.stringify(value);\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 scalar = resolveScalarConfigValues(projectConfig, projectPath, globalConfig, globalPath);\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 mcpServers = resolveMcpServers(projectConfig, projectPath, globalConfig, globalPath);\n const disableExec = resolveDisableExec(projectConfig, projectPath, globalConfig, globalPath);\n\n return {\n ...scalar,\n agents,\n auth,\n disableExec,\n mcpServers,\n globalPath,\n projectPath,\n hasGlobalConfig: globalResult.exists,\n hasProjectConfig: projectResult.exists,\n };\n}\n\nfunction resolveScalarConfigValues(\n projectConfig: ConfigFileShape | undefined,\n projectPath: string,\n globalConfig: ConfigFileShape | undefined,\n globalPath: string,\n): Pick<\n ResolvedAcpxConfig,\n | \"defaultAgent\"\n | \"defaultPermissions\"\n | \"nonInteractivePermissions\"\n | \"authPolicy\"\n | \"ttlMs\"\n | \"timeoutMs\"\n | \"queueMaxDepth\"\n | \"format\"\n> {\n return {\n defaultAgent: resolveDefaultAgent(projectConfig, projectPath, globalConfig, globalPath),\n defaultPermissions: resolveDefaultPermissions(\n projectConfig,\n projectPath,\n globalConfig,\n globalPath,\n ),\n nonInteractivePermissions: resolveNonInteractivePermissions(\n projectConfig,\n projectPath,\n globalConfig,\n globalPath,\n ),\n authPolicy: resolveAuthPolicy(projectConfig, projectPath, globalConfig, globalPath),\n ttlMs: resolveTtlMs(projectConfig, projectPath, globalConfig, globalPath),\n timeoutMs: resolveTimeoutMs(projectConfig, projectPath, globalConfig, globalPath),\n queueMaxDepth: resolveQueueMaxDepth(projectConfig, projectPath, globalConfig, globalPath),\n format: resolveFormat(projectConfig, projectPath, globalConfig, globalPath),\n };\n}\n\nfunction resolveDefaultAgent(\n projectConfig: ConfigFileShape | undefined,\n projectPath: string,\n globalConfig: ConfigFileShape | undefined,\n globalPath: string,\n): string {\n return (\n parseDefaultAgent(projectConfig?.defaultAgent, projectPath) ??\n parseDefaultAgent(globalConfig?.defaultAgent, globalPath) ??\n DEFAULT_AGENT_NAME\n );\n}\n\nfunction resolveDefaultPermissions(\n projectConfig: ConfigFileShape | undefined,\n projectPath: string,\n globalConfig: ConfigFileShape | undefined,\n globalPath: string,\n): PermissionMode {\n return (\n parsePermissionMode(projectConfig?.defaultPermissions, projectPath) ??\n parsePermissionMode(globalConfig?.defaultPermissions, globalPath) ??\n DEFAULT_PERMISSION_MODE\n );\n}\n\nfunction resolveNonInteractivePermissions(\n projectConfig: ConfigFileShape | undefined,\n projectPath: string,\n globalConfig: ConfigFileShape | undefined,\n globalPath: string,\n): NonInteractivePermissionPolicy {\n return (\n parseNonInteractivePermissionPolicy(projectConfig?.nonInteractivePermissions, projectPath) ??\n parseNonInteractivePermissionPolicy(globalConfig?.nonInteractivePermissions, globalPath) ??\n DEFAULT_NON_INTERACTIVE_PERMISSION_POLICY\n );\n}\n\nfunction resolveAuthPolicy(\n projectConfig: ConfigFileShape | undefined,\n projectPath: string,\n globalConfig: ConfigFileShape | undefined,\n globalPath: string,\n): AuthPolicy {\n return (\n parseAuthPolicy(projectConfig?.authPolicy, projectPath) ??\n parseAuthPolicy(globalConfig?.authPolicy, globalPath) ??\n DEFAULT_AUTH_POLICY\n );\n}\n\nfunction resolveTtlMs(\n projectConfig: ConfigFileShape | undefined,\n projectPath: string,\n globalConfig: ConfigFileShape | undefined,\n globalPath: string,\n): number {\n return (\n parseTtlMs(projectConfig?.ttl, projectPath) ??\n parseTtlMs(globalConfig?.ttl, globalPath) ??\n DEFAULT_TTL_MS\n );\n}\n\nfunction resolveQueueMaxDepth(\n projectConfig: ConfigFileShape | undefined,\n projectPath: string,\n globalConfig: ConfigFileShape | undefined,\n globalPath: string,\n): number {\n return (\n parseQueueMaxDepth(projectConfig?.queueMaxDepth, projectPath) ??\n parseQueueMaxDepth(globalConfig?.queueMaxDepth, globalPath) ??\n DEFAULT_QUEUE_MAX_DEPTH\n );\n}\n\nfunction resolveFormat(\n projectConfig: ConfigFileShape | undefined,\n projectPath: string,\n globalConfig: ConfigFileShape | undefined,\n globalPath: string,\n): OutputFormat {\n return (\n parseOutputFormat(projectConfig?.format, projectPath) ??\n parseOutputFormat(globalConfig?.format, globalPath) ??\n DEFAULT_OUTPUT_FORMAT\n );\n}\n\nfunction hasConfigKey(config: ConfigFileShape | undefined, key: keyof ConfigFileShape): boolean {\n return config != null && Object.prototype.hasOwnProperty.call(config, key);\n}\n\nfunction resolveTimeoutMs(\n projectConfig: ConfigFileShape | undefined,\n projectPath: string,\n globalConfig: ConfigFileShape | undefined,\n globalPath: string,\n): number | undefined {\n if (hasConfigKey(projectConfig, \"timeout\")) {\n return parseTimeoutMs(projectConfig?.timeout, projectPath);\n }\n if (hasConfigKey(globalConfig, \"timeout\")) {\n return parseTimeoutMs(globalConfig?.timeout, globalPath);\n }\n return DEFAULT_TIMEOUT_MS;\n}\n\nfunction resolveMcpServers(\n projectConfig: ConfigFileShape | undefined,\n projectPath: string,\n globalConfig: ConfigFileShape | undefined,\n globalPath: string,\n): McpServer[] {\n if (hasConfigKey(projectConfig, \"mcpServers\")) {\n return parseMcpServers(projectConfig?.mcpServers, projectPath);\n }\n if (hasConfigKey(globalConfig, \"mcpServers\")) {\n return parseMcpServers(globalConfig?.mcpServers, globalPath);\n }\n return [];\n}\n\nfunction resolveDisableExec(\n projectConfig: ConfigFileShape | undefined,\n projectPath: string,\n globalConfig: ConfigFileShape | undefined,\n globalPath: string,\n): boolean {\n return (\n parseDisableExec(projectConfig?.disableExec, projectPath) ??\n parseDisableExec(globalConfig?.disableExec, globalPath) ??\n DEFAULT_DISABLE_EXEC\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 { Command } from \"commander\";\nimport { initGlobalConfigFile, toConfigDisplay, type ResolvedAcpxConfig } from \"./config.js\";\nimport { parseOutputFormat, resolveGlobalFlags } from \"./flags.js\";\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\nexport function 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 .option(\"--format <fmt>\", \"Output format: text, json, quiet\", parseOutputFormat)\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 .option(\"--format <fmt>\", \"Output format: text, json, quiet\", parseOutputFormat)\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","import path from \"node:path\";\nimport { normalizeRuntimeSessionId } from \"../../session/runtime-session-id.js\";\nimport type { AgentSessionListResult, OutputFormat, SessionRecord } from \"../../types.js\";\nimport { probeQueueOwnerHealth } from \"../queue/ipc.js\";\nimport { emitJsonResult } from \"./json-output.js\";\n\nfunction formatSessionLabel(record: SessionRecord): string {\n return record.name ?? \"cwd\";\n}\n\nfunction formatRoutedFrom(sessionCwd: string, currentCwd: string): string | undefined {\n const relative = path.relative(sessionCwd, currentCwd);\n if (!relative || relative === \".\") {\n return undefined;\n }\n return relative.startsWith(\".\") ? relative : `.${path.sep}${relative}`;\n}\n\ntype SessionConnectionStatus = \"connected\" | \"needs reconnect\";\n\nasync function resolveSessionConnectionStatus(\n record: SessionRecord,\n): Promise<SessionConnectionStatus> {\n const health = await probeQueueOwnerHealth(record.acpxRecordId);\n return health.healthy ? \"connected\" : \"needs reconnect\";\n}\n\nexport function printSessionsByFormat(sessions: SessionRecord[], format: OutputFormat): void {\n if (format === \"json\") {\n process.stdout.write(`${JSON.stringify(sessions)}\\n`);\n return;\n }\n\n if (format === \"quiet\") {\n printQuietSessions(sessions);\n return;\n }\n\n if (sessions.length === 0) {\n process.stdout.write(\"No sessions\\n\");\n return;\n }\n\n for (const session of sessions) {\n const closedMarker = session.closed ? \" [closed]\" : \"\";\n process.stdout.write(\n `${session.acpxRecordId}${closedMarker}\\t${session.name ?? \"-\"}\\t${session.cwd}\\t${session.lastUsedAt}\\n`,\n );\n }\n}\n\nfunction printQuietSessions(sessions: SessionRecord[]): void {\n for (const session of sessions) {\n const closedMarker = session.closed ? \" [closed]\" : \"\";\n process.stdout.write(`${session.acpxRecordId}${closedMarker}\\n`);\n }\n}\n\nexport function printAgentSessionsByFormat(\n result: AgentSessionListResult,\n format: OutputFormat,\n): void {\n if (format === \"json\") {\n process.stdout.write(`${JSON.stringify(result)}\\n`);\n return;\n }\n\n if (format === \"quiet\") {\n printQuietAgentSessions(result);\n return;\n }\n\n printTextAgentSessions(result);\n}\n\nfunction printQuietAgentSessions(result: AgentSessionListResult): void {\n for (const session of result.sessions) {\n process.stdout.write(`${session.sessionId}\\n`);\n }\n}\n\nfunction printTextAgentSessions(result: AgentSessionListResult): void {\n if (result.sessions.length === 0) {\n process.stdout.write(\"No sessions\\n\");\n } else {\n for (const session of result.sessions) {\n const title = session.title ?? \"-\";\n const updatedAt = session.updatedAt ?? \"-\";\n const meta = session._meta ? JSON.stringify(session._meta) : \"-\";\n process.stdout.write(\n `${session.sessionId}\\t${title}\\t${session.cwd}\\t${updatedAt}\\t${meta}\\n`,\n );\n }\n }\n\n if (result.nextCursor) {\n process.stdout.write(`Next cursor: ${result.nextCursor}\\n`);\n }\n}\n\nexport function printClosedSessionByFormat(record: SessionRecord, format: OutputFormat): void {\n if (\n emitJsonResult(format, {\n action: \"session_closed\",\n acpxRecordId: record.acpxRecordId,\n acpxSessionId: record.acpSessionId,\n agentSessionId: record.agentSessionId,\n })\n ) {\n return;\n }\n\n if (format === \"quiet\") {\n return;\n }\n\n process.stdout.write(`${record.acpxRecordId}\\n`);\n}\n\nexport function printNewSessionByFormat(\n record: SessionRecord,\n replaced: SessionRecord | undefined,\n format: OutputFormat,\n): void {\n if (\n emitJsonResult(format, {\n action: \"session_ensured\",\n created: true,\n acpxRecordId: record.acpxRecordId,\n acpxSessionId: record.acpSessionId,\n agentSessionId: record.agentSessionId,\n name: record.name,\n replacedSessionId: replaced?.acpxRecordId,\n })\n ) {\n return;\n }\n\n if (format === \"quiet\") {\n process.stdout.write(`${record.acpxRecordId}\\n`);\n return;\n }\n\n if (replaced) {\n process.stdout.write(`${record.acpxRecordId}\\t(replaced ${replaced.acpxRecordId})\\n`);\n return;\n }\n\n process.stdout.write(`${record.acpxRecordId}\\n`);\n}\n\nexport function printEnsuredSessionByFormat(\n record: SessionRecord,\n created: boolean,\n format: OutputFormat,\n): void {\n if (\n emitJsonResult(format, {\n action: \"session_ensured\",\n created,\n acpxRecordId: record.acpxRecordId,\n acpxSessionId: record.acpSessionId,\n agentSessionId: record.agentSessionId,\n name: record.name,\n })\n ) {\n return;\n }\n\n if (format === \"quiet\") {\n process.stdout.write(`${record.acpxRecordId}\\n`);\n return;\n }\n\n const action = created ? \"created\" : \"existing\";\n process.stdout.write(`${record.acpxRecordId}\\t(${action})\\n`);\n}\n\nexport function printQueuedPromptByFormat(\n result: {\n sessionId: string;\n requestId: string;\n },\n format: OutputFormat,\n): void {\n if (\n emitJsonResult(format, {\n action: \"prompt_queued\",\n acpxRecordId: result.sessionId,\n requestId: result.requestId,\n })\n ) {\n return;\n }\n\n if (format === \"quiet\") {\n return;\n }\n\n process.stdout.write(`[queued] ${result.requestId}\\n`);\n}\n\nexport function formatPromptSessionBannerLine(\n record: SessionRecord,\n currentCwd: string,\n connectionStatus: SessionConnectionStatus = \"needs reconnect\",\n): string {\n const label = formatSessionLabel(record);\n const normalizedSessionCwd = path.resolve(record.cwd);\n const normalizedCurrentCwd = path.resolve(currentCwd);\n const routedFrom =\n normalizedSessionCwd === normalizedCurrentCwd\n ? undefined\n : formatRoutedFrom(normalizedSessionCwd, normalizedCurrentCwd);\n const status = connectionStatus;\n\n if (routedFrom) {\n return `[acpx] session ${label} (${record.acpxRecordId}) · ${normalizedSessionCwd} (routed from ${routedFrom}) · agent ${status}`;\n }\n\n return `[acpx] session ${label} (${record.acpxRecordId}) · ${normalizedSessionCwd} · agent ${status}`;\n}\n\nexport async function printPromptSessionBanner(\n record: SessionRecord,\n currentCwd: string,\n format: OutputFormat,\n jsonStrict = false,\n): Promise<void> {\n if (format === \"quiet\" || (jsonStrict && format === \"json\")) {\n return;\n }\n\n const status = await resolveSessionConnectionStatus(record);\n process.stderr.write(`${formatPromptSessionBannerLine(record, currentCwd, status)}\\n`);\n}\n\nexport function printCreatedSessionBanner(\n record: SessionRecord,\n agentName: string,\n format: OutputFormat,\n jsonStrict = false,\n): void {\n if (format === \"quiet\" || (jsonStrict && format === \"json\")) {\n return;\n }\n\n const label = formatSessionLabel(record);\n process.stderr.write(`[acpx] created session ${label} (${record.acpxRecordId})\\n`);\n process.stderr.write(`[acpx] agent: ${agentName}\\n`);\n process.stderr.write(`[acpx] cwd: ${record.cwd}\\n`);\n}\n\nfunction formatBytes(bytes: number): string {\n if (bytes >= 1_073_741_824) {\n return `${(bytes / 1_073_741_824).toFixed(1)} GB`;\n }\n if (bytes >= 1_048_576) {\n return `${(bytes / 1_048_576).toFixed(1)} MB`;\n }\n if (bytes >= 1024) {\n return `${(bytes / 1024).toFixed(1)} KB`;\n }\n return `${bytes} B`;\n}\n\nexport function printPruneResultByFormat(\n result: { pruned: SessionRecord[]; bytesFreed: number; dryRun: boolean },\n format: OutputFormat,\n): void {\n const count = result.pruned.length;\n\n if (emitPruneJsonResult(result, format, count)) {\n return;\n }\n\n if (format === \"quiet\") {\n printQuietPruneResult(result.pruned);\n return;\n }\n\n if (count === 0) {\n process.stdout.write(\n result.dryRun ? \"[DRY RUN] No sessions to prune\\n\" : \"No sessions pruned\\n\",\n );\n return;\n }\n\n process.stdout.write(`${formatPruneSummaryLine(result, count)}\\n`);\n\n for (const record of result.pruned) {\n const label = record.name ? ` (${record.name})` : \"\";\n process.stdout.write(\n ` ${record.acpxRecordId}${label}\\t${record.closedAt ?? record.lastUsedAt}\\n`,\n );\n }\n}\n\nfunction emitPruneJsonResult(\n result: { pruned: SessionRecord[]; bytesFreed: number; dryRun: boolean },\n format: OutputFormat,\n count: number,\n): boolean {\n return emitJsonResult(format, {\n action: result.dryRun ? \"sessions_prune_dry_run\" : \"sessions_pruned\",\n dryRun: result.dryRun,\n count,\n bytesFreed: result.bytesFreed,\n pruned: result.pruned.map((r) => r.acpxRecordId),\n });\n}\n\nfunction printQuietPruneResult(pruned: SessionRecord[]): void {\n for (const record of pruned) {\n process.stdout.write(`${record.acpxRecordId}\\n`);\n }\n}\n\nfunction formatPruneSummaryLine(\n result: { bytesFreed: number; dryRun: boolean },\n count: number,\n): string {\n const prefix = result.dryRun ? \"[DRY RUN] Would prune\" : \"Pruned\";\n const bytesSuffix =\n !result.dryRun && result.bytesFreed > 0 ? `, freed ${formatBytes(result.bytesFreed)}` : \"\";\n return `${prefix} ${count} session${count === 1 ? \"\" : \"s\"}${bytesSuffix}`;\n}\n\nexport function agentSessionIdPayload(agentSessionId: string | undefined): {\n agentSessionId?: string;\n} {\n const normalized = normalizeRuntimeSessionId(agentSessionId);\n if (!normalized) {\n return {};\n }\n\n return { agentSessionId: normalized };\n}\n","import { Command } from \"commander\";\nimport { findSession } from \"../session/persistence.js\";\nimport type { SessionRecord } from \"../types.js\";\nimport type { ResolvedAcpxConfig } from \"./config.js\";\nimport {\n addSessionNameOption,\n resolveAgentInvocation,\n resolveGlobalFlags,\n resolveSessionNameFromFlags,\n type StatusFlags,\n} from \"./flags.js\";\nimport { emitJsonResult } from \"./output/json-output.js\";\nimport { agentSessionIdPayload } from \"./output/render.js\";\nimport { probeQueueOwnerHealth } from \"./queue/ipc.js\";\n\ntype SessionStatusState = \"running\" | \"idle\" | \"dead\";\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\nfunction resolveStatusState(\n record: { lastAgentExitCode?: number | null; lastAgentExitSignal?: NodeJS.Signals | null },\n health: Awaited<ReturnType<typeof probeQueueOwnerHealth>>,\n): SessionStatusState {\n if (health.healthy) {\n return \"running\";\n }\n\n if (health.hasLease) {\n return \"dead\";\n }\n\n if (record.lastAgentExitSignal || (record.lastAgentExitCode ?? 0) !== 0) {\n return \"dead\";\n }\n\n return \"idle\";\n}\n\nfunction statusSummary(state: SessionStatusState): string {\n switch (state) {\n case \"running\":\n return \"queue owner healthy\";\n case \"idle\":\n return \"session idle; queue owner will start on next prompt\";\n case \"dead\":\n return \"queue owner unavailable\";\n }\n return \"queue owner unavailable\";\n}\n\nexport async 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 record = await findSession({\n agentCommand: agent.agentCommand,\n cwd: agent.cwd,\n name: resolveSessionNameFromFlags(flags, command),\n });\n\n if (!record) {\n printMissingStatus(globalFlags.format, agent.agentCommand);\n return;\n }\n\n await printSessionStatus(record, globalFlags.format);\n}\n\nfunction printMissingStatus(format: ResolvedAcpxConfig[\"format\"], agentCommand: string): void {\n if (\n emitJsonResult(format, {\n action: \"status_snapshot\",\n status: \"no-session\",\n summary: \"no active session\",\n })\n ) {\n return;\n }\n\n if (format === \"quiet\") {\n process.stdout.write(\"no-session\\n\");\n return;\n }\n\n process.stdout.write(\"session: -\\n\");\n process.stdout.write(`agent: ${agentCommand}\\n`);\n process.stdout.write(\"pid: -\\n\");\n process.stdout.write(\"status: no-session\\n\");\n process.stdout.write(\"model: -\\n\");\n process.stdout.write(\"mode: -\\n\");\n process.stdout.write(\"uptime: -\\n\");\n process.stdout.write(\"lastPromptTime: -\\n\");\n}\n\nasync function printSessionStatus(\n record: SessionRecord,\n format: ResolvedAcpxConfig[\"format\"],\n): Promise<void> {\n const health = await probeQueueOwnerHealth(record.acpxRecordId);\n const statusState = resolveStatusState(record, health);\n const payload = createStatusPayload(record, health, statusState);\n const running = isRunningStatus(statusState);\n const dead = isDeadStatus(statusState);\n\n if (emitStatusJson(format, record, payload, statusState, running, dead)) {\n return;\n }\n\n if (format === \"quiet\") {\n process.stdout.write(`${payload.status}\\n`);\n return;\n }\n\n printTextStatus(payload, dead);\n}\n\nfunction createStatusPayload(\n record: SessionRecord,\n health: Awaited<ReturnType<typeof probeQueueOwnerHealth>>,\n statusState: SessionStatusState,\n): StatusPayload {\n const running = isRunningStatus(statusState);\n const acpx = statusAcpxFields(record);\n return {\n sessionId: record.acpxRecordId,\n agentCommand: record.agentCommand,\n pid: statusPid(health),\n status: statusState,\n model: acpx.model,\n mode: acpx.mode,\n availableModels: acpx.availableModels,\n uptime: running ? optionalStatusString(formatUptime(record.agentStartedAt)) : null,\n lastPromptTime: optionalStatusString(record.lastPromptAt),\n exitCode: running ? null : optionalStatusNumber(record.lastAgentExitCode),\n signal: running ? null : optionalStatusSignal(record.lastAgentExitSignal),\n ...agentSessionIdPayload(record.agentSessionId),\n };\n}\n\nfunction statusAcpxFields(record: SessionRecord): {\n model: string | null;\n mode: string | null;\n availableModels: string[] | null;\n} {\n return {\n model: record.acpx?.current_model_id ?? null,\n mode: record.acpx?.current_mode_id ?? null,\n availableModels: record.acpx?.available_models ?? null,\n };\n}\n\nfunction statusPid(health: Awaited<ReturnType<typeof probeQueueOwnerHealth>>): number | null {\n if (health.pidAlive) {\n return health.pid ?? null;\n }\n return null;\n}\n\nfunction optionalStatusString(value: string | undefined | null): string | null {\n return value ?? null;\n}\n\nfunction optionalStatusNumber(value: number | undefined | null): number | null {\n return value ?? null;\n}\n\nfunction optionalStatusSignal(value: NodeJS.Signals | undefined | null): NodeJS.Signals | null {\n return value ?? null;\n}\n\nfunction isRunningStatus(status: SessionStatusState): boolean {\n return status === \"running\";\n}\n\nfunction isDeadStatus(status: SessionStatusState): boolean {\n return status === \"dead\";\n}\n\ntype StatusPayload = {\n sessionId: string;\n agentCommand: string;\n pid: number | null;\n status: SessionStatusState;\n model: string | null;\n mode: string | null;\n availableModels: string[] | null;\n uptime: string | null;\n lastPromptTime: string | null;\n exitCode: number | null;\n signal: NodeJS.Signals | null;\n agentSessionId?: string;\n};\n\nfunction emitStatusJson(\n format: ResolvedAcpxConfig[\"format\"],\n record: SessionRecord,\n payload: StatusPayload,\n statusState: SessionStatusState,\n running: boolean,\n dead: boolean,\n): boolean {\n return emitJsonResult(format, statusJsonPayload(record, payload, statusState, running, dead));\n}\n\nfunction statusJsonPayload(\n record: SessionRecord,\n payload: StatusPayload,\n statusState: SessionStatusState,\n running: boolean,\n dead: boolean,\n): Record<string, unknown> {\n const result: Record<string, unknown> = {\n action: \"status_snapshot\",\n status: running ? \"alive\" : statusState,\n summary: statusSummary(statusState),\n acpxRecordId: record.acpxRecordId,\n acpxSessionId: record.acpSessionId,\n agentSessionId: record.agentSessionId,\n };\n assignDefinedJsonField(result, \"pid\", payload.pid);\n assignDefinedJsonField(result, \"model\", payload.model);\n assignDefinedJsonField(result, \"mode\", payload.mode);\n assignDefinedJsonField(result, \"availableModels\", payload.availableModels);\n assignDefinedJsonField(result, \"uptime\", payload.uptime);\n assignDefinedJsonField(result, \"lastPromptTime\", payload.lastPromptTime);\n if (dead) {\n assignDefinedJsonField(result, \"exitCode\", payload.exitCode);\n assignDefinedJsonField(result, \"signal\", payload.signal);\n }\n return result;\n}\n\nfunction assignDefinedJsonField(\n target: Record<string, unknown>,\n key: string,\n value: unknown,\n): void {\n if (value !== null && value !== undefined) {\n target[key] = value;\n }\n}\n\nfunction printTextStatus(payload: StatusPayload, dead: boolean): void {\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(`model: ${payload.model ?? \"-\"}\\n`);\n process.stdout.write(`mode: ${payload.mode ?? \"-\"}\\n`);\n process.stdout.write(`uptime: ${payload.uptime ?? \"-\"}\\n`);\n process.stdout.write(`lastPromptTime: ${payload.lastPromptTime ?? \"-\"}\\n`);\n if (dead) {\n printDeadStatusDetails(payload);\n }\n}\n\nfunction printDeadStatusDetails(payload: StatusPayload): void {\n process.stdout.write(`exitCode: ${payload.exitCode ?? \"-\"}\\n`);\n process.stdout.write(`signal: ${payload.signal ?? \"-\"}\\n`);\n}\n\nexport function registerStatusCommand(\n parent: Command,\n explicitAgentName: string | undefined,\n config: ResolvedAcpxConfig,\n description: string,\n): void {\n const statusCommand = parent.command(\"status\").description(description);\n addSessionNameOption(statusCommand);\n statusCommand.action(async function (this: Command, flags: StatusFlags) {\n await handleStatus(explicitAgentName, flags, this, config);\n });\n}\n","import { Command } from \"commander\";\nimport { DEFAULT_HISTORY_LIMIT } from \"../session/persistence.js\";\nimport {\n handleCancel,\n handleExec,\n handlePrompt,\n handleSessionsClose,\n handleSessionsEnsure,\n handleSessionsHistory,\n handleSessionsList,\n handleSessionsNew,\n handleSessionsPrune,\n handleSessionsShow,\n handleSetConfigOption,\n handleSetMode,\n parseHistoryLimit,\n} from \"./command-handlers.js\";\nimport { registerConfigCommand } from \"./config-command.js\";\nimport type { ResolvedAcpxConfig } from \"./config.js\";\nimport {\n addPromptInputOption,\n addSessionNameOption,\n addSessionOption,\n parseDaysOlderThan,\n parseNonEmptyValue,\n parsePruneBeforeDate,\n parseSessionName,\n type PromptFlags,\n type SessionsHistoryFlags,\n type SessionsListFlags,\n type SessionsNewFlags,\n type SessionsPruneFlags,\n type StatusFlags,\n} from \"./flags.js\";\nimport { registerStatusCommand } from \"./status-command.js\";\n\ntype FlowRunFlags = {\n inputJson?: string;\n inputFile?: string;\n defaultAgent?: string;\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 addSessionsListOptions(command: Command): Command {\n return command\n .option(\"--local\", \"List local acpx session records instead of agent protocol sessions\")\n .option(\"--cursor <cursor>\", \"Opaque ACP session/list cursor\", (value: string) =>\n parseNonEmptyValue(\"Cursor\", value),\n )\n .option(\"--filter-cwd <dir>\", \"Filter agent sessions by working directory\", (value: string) =>\n parseNonEmptyValue(\"Filter cwd\", value),\n );\n}\n\nexport function 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 addSessionsListOptions(sessionsCommand);\n\n sessionsCommand.action(async function (this: Command, flags: SessionsListFlags) {\n await handleSessionsList(explicitAgentName, flags, this, config);\n });\n\n addSessionsListOptions(sessionsCommand.command(\"list\"))\n .description(\"List sessions\")\n .action(async function (this: Command, flags: SessionsListFlags) {\n await handleSessionsList(explicitAgentName, flags, this, config);\n });\n\n sessionsCommand\n .command(\"new\")\n .description(\"Create a fresh session for current cwd\")\n .option(\"-s, --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(\"-s, --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: ${DEFAULT_HISTORY_LIMIT})`,\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 sessionsCommand\n .command(\"prune\")\n .description(\"Delete closed sessions and free disk space\")\n .option(\"--dry-run\", \"Preview what would be pruned without deleting anything\")\n .option(\"--before <date>\", \"Prune sessions closed before this date\", parsePruneBeforeDate)\n .option(\"--older-than <days>\", \"Prune sessions closed more than N days ago\", parseDaysOlderThan)\n .option(\"--include-history\", \"Also delete event stream files (.stream.ndjson)\")\n .action(async function (this: Command, flags: SessionsPruneFlags) {\n await handleSessionsPrune(explicitAgentName, flags, this, config);\n });\n}\n\nexport function 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) {\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 registerStatusCommand(parent, explicitAgentName, config, descriptions.status);\n}\n\nexport function 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\nexport function registerFlowCommand(program: Command, config: ResolvedAcpxConfig): void {\n const flowCommand = program\n .command(\"flow\")\n .description(\"Run multi-step ACP workflows from flow files\");\n\n flowCommand\n .command(\"run\")\n .description(\"Run a flow file\")\n .argument(\"<file>\", \"Flow module path\")\n .option(\"--input-json <json>\", \"Flow input as JSON\")\n .option(\"--input-file <path>\", \"Read flow input JSON from file\")\n .option(\n \"--default-agent <name>\",\n \"Default agent profile for ACP nodes without profile\",\n (value: string) => parseNonEmptyValue(\"Default agent\", value),\n )\n .action(async function (this: Command, file: string, flags: FlowRunFlags) {\n const { handleFlowRun } = await import(\"../flows/cli.js\");\n await handleFlowRun(file, flags, this, config);\n });\n}\n\nexport function 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 registerFlowCommand(program, config);\n}\n","import { parseOptionalMcpServers } from \"../../mcp-servers.js\";\nimport {\n runSessionQueueOwner,\n type QueueOwnerRuntimeOptions,\n} from \"../session/queue-owner-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 assignQueueOwnerTransportOptions(options, record);\n assignQueueOwnerScalarOptions(options, record);\n assignQueueOwnerSessionOptions(options, record.sessionOptions);\n\n return options;\n}\n\nfunction assignQueueOwnerTransportOptions(\n options: QueueOwnerRuntimeOptions,\n record: UnknownRecord,\n): void {\n const parsedMcpServers = parseOptionalMcpServers(record.mcpServers, \"queue owner payload\");\n if (parsedMcpServers) {\n options.mcpServers = parsedMcpServers;\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\nfunction assignQueueOwnerScalarOptions(\n options: QueueOwnerRuntimeOptions,\n record: UnknownRecord,\n): void {\n if (record.nonInteractivePermissions === \"deny\" || record.nonInteractivePermissions === \"fail\") {\n options.nonInteractivePermissions = record.nonInteractivePermissions;\n }\n if (record.authPolicy === \"skip\" || record.authPolicy === \"fail\") {\n options.authPolicy = record.authPolicy;\n }\n assignBooleanOption(options, \"terminal\", record.terminal);\n assignBooleanOption(options, \"suppressSdkConsoleErrors\", record.suppressSdkConsoleErrors);\n assignBooleanOption(options, \"verbose\", record.verbose);\n assignFiniteNumberOption(options, \"ttlMs\", record.ttlMs);\n assignRoundedNumberOption(options, \"maxQueueDepth\", record.maxQueueDepth, 1);\n assignRoundedNumberOption(options, \"promptRetries\", record.promptRetries, 0);\n}\n\nfunction assignBooleanOption(\n options: QueueOwnerRuntimeOptions,\n key: \"terminal\" | \"suppressSdkConsoleErrors\" | \"verbose\",\n value: unknown,\n): void {\n if (typeof value === \"boolean\") {\n options[key] = value;\n }\n}\n\nfunction assignFiniteNumberOption(\n options: QueueOwnerRuntimeOptions,\n key: \"ttlMs\",\n value: unknown,\n): void {\n if (typeof value === \"number\" && Number.isFinite(value)) {\n options[key] = value;\n }\n}\n\nfunction assignRoundedNumberOption(\n options: QueueOwnerRuntimeOptions,\n key: \"maxQueueDepth\" | \"promptRetries\",\n value: unknown,\n min: number,\n): void {\n if (typeof value === \"number\" && Number.isFinite(value)) {\n options[key] = Math.max(min, Math.round(value));\n }\n}\n\nfunction assignQueueOwnerSessionOptions(\n options: QueueOwnerRuntimeOptions,\n rawSessionOptions: unknown,\n): void {\n const sessionOpts = asRecord(rawSessionOptions);\n if (!sessionOpts) {\n return;\n }\n\n options.sessionOptions = {};\n assignSessionModel(options.sessionOptions, sessionOpts.model);\n assignSessionAllowedTools(options.sessionOptions, sessionOpts.allowedTools);\n assignSessionMaxTurns(options.sessionOptions, sessionOpts.maxTurns);\n assignSessionSystemPrompt(options.sessionOptions, sessionOpts.systemPrompt);\n}\n\nfunction assignSessionModel(\n options: NonNullable<QueueOwnerRuntimeOptions[\"sessionOptions\"]>,\n value: unknown,\n): void {\n if (typeof value === \"string\" && value.trim().length > 0) {\n options.model = value;\n }\n}\n\nfunction assignSessionAllowedTools(\n options: NonNullable<QueueOwnerRuntimeOptions[\"sessionOptions\"]>,\n value: unknown,\n): void {\n if (Array.isArray(value)) {\n options.allowedTools = value.filter((tool): tool is string => typeof tool === \"string\");\n }\n}\n\nfunction assignSessionMaxTurns(\n options: NonNullable<QueueOwnerRuntimeOptions[\"sessionOptions\"]>,\n value: unknown,\n): void {\n if (typeof value === \"number\" && Number.isFinite(value)) {\n options.maxTurns = Math.max(1, Math.round(value));\n }\n}\n\nfunction assignSessionSystemPrompt(\n options: NonNullable<QueueOwnerRuntimeOptions[\"sessionOptions\"]>,\n value: unknown,\n): void {\n if (typeof value === \"string\") {\n options.systemPrompt = value;\n return;\n }\n\n const systemPrompt = asRecord(value);\n if (typeof systemPrompt?.append === \"string\") {\n options.systemPrompt = { append: systemPrompt.append };\n }\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 envVersion = resolvePackageEnvVersion(params?.env ?? process.env);\n if (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\nfunction resolvePackageEnvVersion(env: NodeJS.ProcessEnv): string | null {\n const envPackageName = parseVersion(env.npm_package_name);\n const envVersion = parseVersion(env.npm_package_version);\n return envPackageName === \"acpx\" ? envVersion : null;\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 path from \"node:path\";\nimport { Command, CommanderError } from \"commander\";\nimport {\n exitCodeForOutputErrorCode,\n normalizeOutputError,\n type NormalizedOutputError,\n} from \"./acp/error-normalization.js\";\nimport { listBuiltInAgents } from \"./agent-registry.js\";\nimport { InterruptedError } from \"./async-control.js\";\nimport { configurePublicCli } from \"./cli-public.js\";\nimport { handlePrompt } from \"./cli/command-handlers.js\";\nimport { registerAgentCommand, registerDefaultCommands } from \"./cli/command-registration.js\";\nimport { loadResolvedConfig } from \"./cli/config.js\";\nimport {\n addGlobalFlags,\n parseAllowedTools,\n parseMaxTurns,\n parseTtlSeconds,\n resolveOutputPolicy,\n} from \"./cli/flags.js\";\nimport { createOutputFormatter, getTextErrorRemediationHints } from \"./cli/output/output.js\";\nimport { runQueueOwnerFromEnv } from \"./cli/queue/owner-env.js\";\nimport { flushPerfMetricsCapture, installPerfMetricsCapture } from \"./perf-metrics-capture.js\";\nimport { EXIT_CODES, OUTPUT_FORMATS, type OutputFormat, type OutputPolicy } from \"./types.js\";\nimport { getAcpxVersion } from \"./version.js\";\n\nexport { parseAllowedTools, parseMaxTurns, parseTtlSeconds };\nexport { formatPromptSessionBannerLine } from \"./cli/output/render.js\";\n\ntype SkillflagModule = typeof import(\"skillflag\");\n\nconst TOP_LEVEL_VERBS = new Set([\n \"prompt\",\n \"exec\",\n \"cancel\",\n \"flow\",\n \"set-mode\",\n \"set\",\n \"sessions\",\n \"status\",\n \"config\",\n \"help\",\n]);\n\nconst TOP_LEVEL_VERSION_VALUE_FLAG_VALUES = [\n \"--agent\",\n \"--cwd\",\n \"--auth-policy\",\n \"--non-interactive-permissions\",\n \"--permission-policy\",\n \"--policy\",\n \"--format\",\n \"--model\",\n \"--allowed-tools\",\n \"--max-turns\",\n \"--system-prompt\",\n \"--append-system-prompt\",\n \"--prompt-retries\",\n \"--timeout\",\n \"--ttl\",\n] as const;\n\nconst TOP_LEVEL_VERSION_VALUE_FLAGS = new Set<string>(TOP_LEVEL_VERSION_VALUE_FLAG_VALUES);\n\nconst TOP_LEVEL_VERSION_BOOLEAN_FLAGS = new Set([\n \"--approve-all\",\n \"--approve-reads\",\n \"--deny-all\",\n \"--suppress-reads\",\n \"--json-strict\",\n \"--no-terminal\",\n \"--verbose\",\n]);\n\nconst AGENT_SCAN_VALUE_FLAG_VALUES = [...TOP_LEVEL_VERSION_VALUE_FLAG_VALUES, \"--file\"] as const;\n\nconst AGENT_SCAN_VALUE_FLAGS = new Set<string>(AGENT_SCAN_VALUE_FLAG_VALUES);\n\nconst AGENT_SCAN_BOOLEAN_FLAGS = new Set<string>(TOP_LEVEL_VERSION_BOOLEAN_FLAGS);\n\nlet skillflagModulePromise: Promise<SkillflagModule> | undefined;\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\ntype AgentTokenScan = {\n token?: string;\n hasAgentOverride: boolean;\n};\n\ntype AgentTokenStep = {\n result?: AgentTokenScan;\n indexDelta: number;\n hasAgentOverride?: true;\n};\n\ntype AgentTokenFlagScan = \"agent-value\" | \"skip-next\" | \"skip\" | \"unknown\";\n\nfunction matchesLongFlagValue(token: string, flags: Iterable<string>): boolean {\n for (const flag of flags) {\n if (token.startsWith(`${flag}=`)) {\n return true;\n }\n }\n return false;\n}\n\nfunction classifyAgentTokenFlag(token: string): AgentTokenFlagScan {\n if (token === \"--agent\" || token.startsWith(\"--agent=\")) {\n return \"agent-value\";\n }\n if (AGENT_SCAN_VALUE_FLAGS.has(token)) {\n return \"skip-next\";\n }\n if (\n AGENT_SCAN_BOOLEAN_FLAGS.has(token) ||\n matchesLongFlagValue(token, AGENT_SCAN_VALUE_FLAGS) ||\n token.startsWith(\"--json-strict=\")\n ) {\n return \"skip\";\n }\n return \"unknown\";\n}\n\nfunction scanAgentTokenStep(token: string, hasAgentOverride: boolean): AgentTokenStep {\n if (token === \"--\") {\n return { result: { hasAgentOverride }, indexDelta: 0 };\n }\n if (!token.startsWith(\"-\") || token === \"-\") {\n return { result: { token, hasAgentOverride }, indexDelta: 0 };\n }\n\n const flagScan = classifyAgentTokenFlag(token);\n if (flagScan === \"agent-value\") {\n return { indexDelta: token === \"--agent\" ? 1 : 0, hasAgentOverride: true };\n }\n if (flagScan === \"skip-next\") {\n return { indexDelta: 1 };\n }\n if (flagScan === \"skip\") {\n return { indexDelta: 0 };\n }\n return { result: { hasAgentOverride }, indexDelta: 0 };\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 const step = scanAgentTokenStep(token, hasAgentOverride);\n if (step.result) {\n return step.result;\n }\n if (step.hasAgentOverride) {\n hasAgentOverride = true;\n }\n index += step.indexDelta;\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\n if (token === \"--cwd\") {\n const next = argv[index + 1];\n if (next && next !== \"--\") {\n return path.resolve(next);\n }\n break;\n }\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\n if (token === \"--\") {\n break;\n }\n }\n\n return process.cwd();\n}\n\nfunction detectRequestedOutputFormat(argv: string[], fallback: OutputFormat): OutputFormat {\n let detectedFormat = fallback;\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 (isJsonStrictToken(token)) {\n return \"json\";\n }\n\n const format = readFormatFlagValue(token, argv[index + 1]);\n if (format) {\n detectedFormat = format;\n }\n }\n\n return detectedFormat;\n}\n\nfunction readFormatFlagValue(\n token: string,\n nextToken: string | undefined,\n): OutputFormat | undefined {\n const raw = token === \"--format\" ? nextToken : readInlineFlagValue(token, \"--format\");\n return isOutputFormat(raw) ? raw : undefined;\n}\n\nfunction readInlineFlagValue(token: string, flag: string): string | undefined {\n if (!token.startsWith(`${flag}=`)) {\n return undefined;\n }\n return token.slice(flag.length + 1).trim();\n}\n\nfunction isOutputFormat(value: unknown): value is OutputFormat {\n return typeof value === \"string\" && OUTPUT_FORMATS.includes(value as OutputFormat);\n}\n\nfunction isJsonStrictToken(token: string): boolean {\n return token === \"--json-strict\" || token.startsWith(\"--json-strict=\");\n}\n\nfunction detectJsonStrict(argv: string[]): boolean {\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 (isJsonStrictToken(token)) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction shouldSkipTopLevelVersionToken(token: string): boolean {\n return (\n matchesLongFlagValue(token, TOP_LEVEL_VERSION_VALUE_FLAG_VALUES) ||\n TOP_LEVEL_VERSION_BOOLEAN_FLAGS.has(token)\n );\n}\n\nfunction topLevelVersionTokenDecision(token: string): \"version\" | \"stop\" | \"skip-next\" | \"skip\" {\n if (token === \"--version\" || token === \"-V\") {\n return \"version\";\n }\n if (!token.startsWith(\"-\") || token === \"-\") {\n return \"stop\";\n }\n if (TOP_LEVEL_VERSION_VALUE_FLAGS.has(token)) {\n return \"skip-next\";\n }\n if (shouldSkipTopLevelVersionToken(token)) {\n return \"skip\";\n }\n return \"stop\";\n}\n\nfunction isTopLevelVersionRequest(argv: string[]): boolean {\n for (let index = 0; index < argv.length; index += 1) {\n const token = argv[index];\n\n if (token === \"--\") {\n return false;\n }\n\n const decision = topLevelVersionTokenDecision(token);\n if (decision === \"version\") {\n return true;\n }\n if (decision === \"stop\") {\n return false;\n }\n if (decision === \"skip-next\") {\n index += 1;\n }\n }\n\n return false;\n}\n\nasync function emitJsonErrorEvent(error: NormalizedOutputError): Promise<void> {\n const formatter = createOutputFormatter(\"json\", {\n jsonContext: {\n sessionId: \"unknown\",\n },\n suppressReads: false,\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\n if (outputPolicy.format === \"json\") {\n await emitJsonErrorEvent(normalized);\n return;\n }\n\n if (!outputPolicy.suppressNonJsonStderr) {\n process.stderr.write(`${normalized.message}\\n`);\n if (outputPolicy.format === \"text\") {\n for (const hint of getTextErrorRemediationHints(normalized)) {\n process.stderr.write(`${hint}\\n`);\n }\n }\n }\n}\n\nasync function runWithOutputPolicy<T>(\n _outputPolicy: OutputPolicy,\n run: () => Promise<T>,\n): Promise<T> {\n return await run();\n}\n\nasync function handleQueueOwnerCommand(argv: string[]): Promise<boolean> {\n installPerfMetricsCapture({\n argv: argv.slice(2),\n role: argv[2] === \"__queue-owner\" ? \"queue_owner\" : \"cli\",\n });\n\n if (argv[2] !== \"__queue-owner\") {\n return false;\n }\n\n try {\n await runQueueOwnerFromEnv(process.env);\n return true;\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 return true;\n }\n}\n\nasync function maybeHandleSkillflag(argv: string[]): Promise<void> {\n if (!shouldMaybeHandleSkillflag(argv)) {\n return;\n }\n\n const { findSkillsRoot, maybeHandleSkillflag } = await loadSkillflagModule();\n await maybeHandleSkillflag(argv, {\n skillsRoot: findSkillsRoot(import.meta.url),\n includeBundledSkill: false,\n });\n}\n\nfunction createProgram(requestedJsonStrict: boolean): Command {\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 return program;\n}\n\nasync function handleProgramParseError(\n error: unknown,\n requestedOutputPolicy: OutputPolicy,\n): Promise<never> {\n if (error instanceof CommanderError) {\n if (error.code === \"commander.helpDisplayed\" || error.code === \"commander.version\") {\n process.exit(EXIT_CODES.SUCCESS);\n }\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\nexport async function main(argv: string[] = process.argv): Promise<void> {\n const rawArgs = argv.slice(2);\n\n if (await handleQueueOwnerCommand(argv)) {\n return;\n }\n\n if (isTopLevelVersionRequest(rawArgs)) {\n process.stdout.write(`${getAcpxVersion()}\\n`);\n return;\n }\n\n await maybeHandleSkillflag(argv);\n\n const config = await loadResolvedConfig(detectInitialCwd(rawArgs));\n const requestedJsonStrict = detectJsonStrict(rawArgs);\n const requestedOutputFormat = detectRequestedOutputFormat(rawArgs, config.format);\n const requestedOutputPolicy = {\n ...resolveOutputPolicy(requestedOutputFormat, requestedJsonStrict),\n suppressReads: rawArgs.some((token) => token === \"--suppress-reads\"),\n };\n\n const program = createProgram(requestedJsonStrict);\n\n addGlobalFlags(program);\n\n configurePublicCli({\n program,\n argv: rawArgs,\n config,\n requestedJsonStrict,\n topLevelVerbs: TOP_LEVEL_VERBS,\n listBuiltInAgents,\n detectAgentToken,\n registerAgentCommand,\n registerDefaultCommands,\n handlePromptAction: async (command, promptParts) => {\n await handlePrompt(undefined, promptParts, {}, command, config);\n },\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 await handleProgramParseError(error, requestedOutputPolicy);\n }\n });\n } finally {\n flushPerfMetricsCapture();\n }\n}\n","#!/usr/bin/env node\n\nimport { realpathSync } from \"node:fs\";\nimport { fileURLToPath, pathToFileURL } from \"node:url\";\nimport { main } from \"./cli-core.js\";\nimport { buildQueueOwnerArgOverride } from \"./cli/session/queue-owner-process.js\";\n\nexport { formatPromptSessionBannerLine } from \"./cli-core.js\";\nexport { parseAllowedTools, parseMaxTurns, parseTtlSeconds } from \"./cli/flags.js\";\n\nfunction installBrokenPipeHandler(stream: NodeJS.WritableStream): void {\n stream.on(\"error\", (error: NodeJS.ErrnoException) => {\n if (error.code === \"EPIPE\") {\n process.exit(0);\n }\n\n throw error;\n });\n}\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 installBrokenPipeHandler(process.stdout);\n installBrokenPipeHandler(process.stderr);\n\n const queueOwnerArgOverride = buildQueueOwnerArgOverride(fileURLToPath(import.meta.url));\n if (queueOwnerArgOverride) {\n process.env.ACPX_QUEUE_OWNER_ARGS ??= queueOwnerArgOverride;\n }\n\n void main(process.argv);\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","names":["fs","fs","fs","asRecord","normalizeAgentName","fs","parseOutputFormat"],"sources":["../src/cli-public.ts","../src/acp/codex-compat.ts","../src/session/export.ts","../src/session/import.ts","../src/cli/output/json-output.ts","../src/cli/command-handlers.ts","../src/mcp-servers.ts","../src/cli/config.ts","../src/cli/config-command.ts","../src/cli/output/render.ts","../src/cli/status-command.ts","../src/cli/command-registration.ts","../src/cli/queue/owner-env.ts","../src/version.ts","../src/cli-core.ts","../src/cli.ts"],"sourcesContent":["import { InvalidArgumentError } from \"commander\";\nimport type { Command } from \"commander\";\nimport type { ResolvedAcpxConfig } from \"./cli/config.js\";\n\ntype AgentTokenScan = {\n token?: string;\n hasAgentOverride: boolean;\n};\n\ntype ConfigurePublicCliOptions = {\n program: Command;\n argv: string[];\n config: ResolvedAcpxConfig;\n requestedJsonStrict: boolean;\n topLevelVerbs: ReadonlySet<string>;\n listBuiltInAgents: (agents: ResolvedAcpxConfig[\"agents\"]) => string[];\n detectAgentToken: (argv: string[]) => AgentTokenScan;\n registerAgentCommand: (program: Command, agentName: string, config: ResolvedAcpxConfig) => void;\n registerDefaultCommands: (program: Command, config: ResolvedAcpxConfig) => void;\n handlePromptAction: (command: Command, promptParts: string[]) => Promise<void>;\n};\n\nexport function configurePublicCli(options: ConfigurePublicCliOptions): void {\n const builtInAgents = options.listBuiltInAgents(options.config.agents);\n\n for (const agentName of builtInAgents) {\n options.registerAgentCommand(options.program, agentName, options.config);\n }\n\n options.registerDefaultCommands(options.program, options.config);\n\n const scan = options.detectAgentToken(options.argv);\n if (\n !scan.hasAgentOverride &&\n scan.token &&\n !options.topLevelVerbs.has(scan.token) &&\n !builtInAgents.includes(scan.token)\n ) {\n options.registerAgentCommand(options.program, scan.token, options.config);\n }\n\n options.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 (options.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 options.handlePromptAction(this, promptParts);\n });\n\n options.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 model 'gpt-5.2[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","import path from \"node:path\";\n\nfunction basenameToken(value: string): string {\n return path\n .basename(value)\n .toLowerCase()\n .replace(/\\.(cmd|exe|bat)$/u, \"\");\n}\n\nexport function isCodexAcpCommand(command: string, args: readonly string[]): boolean {\n const commandToken = basenameToken(command);\n if (commandToken === \"codex-acp\") {\n return true;\n }\n return args.some((arg) => arg.includes(\"codex-acp\"));\n}\n\nexport function isLegacyZedCodexAcpInvocation(agentCommand: string): boolean {\n return /@zed-industries\\/codex-acp\\b/u.test(agentCommand);\n}\n","import fs from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { isAcpJsonRpcMessage } from \"../acp/jsonrpc.js\";\nimport { AcpxOperationalError } from \"../errors.js\";\nimport { isProcessAlive } from \"../process-liveness.js\";\nimport type { AcpJsonRpcMessage, SessionRecord } from \"../types.js\";\nimport {\n sessionEventActivePath,\n sessionEventLockPath,\n sessionEventSegmentPath,\n} from \"./event-log.js\";\nimport { findSession, listSessions, normalizeName } from \"./persistence.js\";\nimport { serializeSessionRecordForDisk } from \"./persistence/serialize.js\";\n\nexport type ExportedSession = {\n format_version: 1;\n exported_at: string;\n exported_by: string;\n session: {\n record_id: string;\n name: string | null;\n agent: string;\n agent_name?: string;\n cwd_relative: string;\n cwd_original: string;\n created_at: string;\n updated_at: string;\n state: Record<string, unknown>;\n };\n history: AcpJsonRpcMessage[];\n};\n\nexport type SessionExportLookup = {\n agentName?: string;\n agentCommand?: string;\n cwd?: string;\n name?: string;\n};\n\nclass SessionExportError extends AcpxOperationalError {\n readonly code: string;\n readonly exitCode = 2;\n\n constructor(message: string, code: string) {\n super(message, {\n outputCode: \"USAGE\",\n detailCode: code,\n origin: \"cli\",\n });\n this.code = code;\n }\n}\n\nfunction sessionLookupError(message: string, code: string): SessionExportError {\n return new SessionExportError(message, code);\n}\n\nasync function loadSessionRecord(\n sessionLookup: SessionExportLookup,\n): Promise<SessionRecord | undefined> {\n const cwd = path.resolve(sessionLookup.cwd ?? process.cwd());\n const name = normalizeName(sessionLookup.name);\n\n if (sessionLookup.agentCommand) {\n const active = await findSession({\n agentCommand: sessionLookup.agentCommand,\n cwd,\n name,\n });\n if (active) {\n return active;\n }\n\n return (await listSessions()).find((session) => {\n if (session.agentCommand !== sessionLookup.agentCommand || session.cwd !== cwd) {\n return false;\n }\n if (name == null) {\n return session.name == null;\n }\n return session.name === name;\n });\n }\n\n const matches = (await listSessions()).filter((session) => {\n if (session.cwd !== cwd) {\n return false;\n }\n if (name == null) {\n return session.name == null;\n }\n return session.name === name;\n });\n\n if (matches.length > 1) {\n throw sessionLookupError(\"multiple sessions match export lookup\", \"ambiguous-session\");\n }\n\n return matches[0];\n}\n\ntype EventLockPayload = {\n pid?: number;\n};\n\nfunction parseEventLockPayload(raw: string): EventLockPayload {\n try {\n const parsed = JSON.parse(raw) as unknown;\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n return {};\n }\n const record = parsed as Record<string, unknown>;\n return {\n pid: typeof record.pid === \"number\" ? record.pid : undefined,\n };\n } catch {\n return {};\n }\n}\n\nasync function hasLiveEventLock(recordId: string): Promise<boolean> {\n try {\n const payload = await fs.readFile(sessionEventLockPath(recordId), \"utf8\");\n return isProcessAlive(parseEventLockPayload(payload).pid);\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n return false;\n }\n throw error;\n }\n}\n\nasync function isSessionActive(record: SessionRecord): Promise<boolean> {\n if (record.closed) {\n return false;\n }\n return isProcessAlive(record.pid) || (await hasLiveEventLock(record.acpxRecordId));\n}\n\nasync function readHistoryFile(filePath: string): Promise<AcpJsonRpcMessage[]> {\n const payload = await fs.readFile(filePath, \"utf8\").catch((error) => {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n return \"\";\n }\n throw error;\n });\n const history: AcpJsonRpcMessage[] = [];\n for (const line of payload.split(\"\\n\").filter((entry) => entry.trim().length > 0)) {\n try {\n const parsed: unknown = JSON.parse(line);\n if (isAcpJsonRpcMessage(parsed)) {\n history.push(parsed);\n }\n } catch {\n // Match event listing resilience: tolerate truncated NDJSON writes.\n }\n }\n return history;\n}\n\nasync function readSessionHistory(record: SessionRecord): Promise<AcpJsonRpcMessage[]> {\n const history: AcpJsonRpcMessage[] = [];\n const maxSegments = Number.isInteger(record.eventLog.max_segments)\n ? record.eventLog.max_segments\n : 0;\n\n for (let segment = maxSegments; segment >= 1; segment -= 1) {\n history.push(...(await readHistoryFile(sessionEventSegmentPath(record.acpxRecordId, segment))));\n }\n\n history.push(...(await readHistoryFile(sessionEventActivePath(record.acpxRecordId))));\n return history;\n}\n\nfunction cwdRelativeToHome(cwd: string, home: string): string {\n const relative = path.relative(home, cwd);\n if (relative.length === 0) {\n return \".\";\n }\n if (relative.length > 0 && !relative.startsWith(\"..\") && !path.isAbsolute(relative)) {\n return relative;\n }\n return cwd;\n}\n\nfunction serializeSessionRecordForArchive(\n record: SessionRecord,\n cwdRelative: string,\n): Record<string, unknown> {\n const state = serializeSessionRecordForDisk(record);\n state.cwd = cwdRelative;\n\n if (state.event_log && typeof state.event_log === \"object\" && !Array.isArray(state.event_log)) {\n state.event_log = {\n ...(state.event_log as Record<string, unknown>),\n active_path: \".stream.ndjson\",\n };\n }\n\n return state;\n}\n\nexport async function exportSession(\n sessionLookup: SessionExportLookup,\n outputPath: string,\n): Promise<void> {\n const record = await loadSessionRecord(sessionLookup);\n if (!record) {\n throw sessionLookupError(\"session not found\", \"not-found\");\n }\n\n if (await isSessionActive(record)) {\n throw sessionLookupError(\n \"session is currently locked by a running queue owner; close it first with `acpx sessions close`\",\n \"session-locked\",\n );\n }\n\n const home = os.homedir();\n const cwdRelative = cwdRelativeToHome(record.cwd, home);\n const exported: ExportedSession = {\n format_version: 1,\n exported_at: new Date().toISOString(),\n exported_by: \"acpx\",\n session: {\n record_id: record.acpxRecordId,\n name: record.name ?? null,\n agent: record.agentCommand,\n agent_name: normalizeAgentName(sessionLookup.agentName),\n cwd_relative: cwdRelative,\n cwd_original: cwdRelative,\n created_at: record.createdAt,\n updated_at: record.lastUsedAt,\n state: serializeSessionRecordForArchive(record, cwdRelative),\n },\n history: await readSessionHistory(record),\n };\n\n await fs.mkdir(path.dirname(path.resolve(outputPath)), { recursive: true });\n await fs.writeFile(outputPath, `${JSON.stringify(exported, null, 2)}\\n`, \"utf8\");\n}\n\nfunction normalizeAgentName(agentName: string | undefined): string | undefined {\n const normalized = agentName?.trim().toLowerCase();\n if (!normalized || normalized.length === 0) {\n return undefined;\n }\n return normalized === \"factory-droid\" || normalized === \"factorydroid\" ? \"droid\" : normalized;\n}\n","import { randomUUID } from \"node:crypto\";\nimport fs from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { z, ZodError } from \"zod\";\nimport { AcpxOperationalError } from \"../errors.js\";\nimport type { AcpJsonRpcMessage, SessionRecord } from \"../types.js\";\nimport { defaultSessionEventLog, sessionEventActivePath } from \"./event-log.js\";\nimport {\n findSession,\n listSessions,\n parseSessionRecord,\n writeSessionRecord,\n} from \"./persistence.js\";\n\nconst SUPPORTED_FORMAT_VERSION = 1;\n\nconst exportedSessionSchema = z.object({\n format_version: z.literal(SUPPORTED_FORMAT_VERSION),\n exported_at: z.string(),\n exported_by: z.string(),\n session: z.object({\n record_id: z.string(),\n name: z.string().nullable(),\n agent: z.string(),\n agent_name: z.string().optional(),\n cwd_relative: z.string(),\n cwd_original: z.string().optional(),\n cwd_absolute_original: z.string().optional(),\n created_at: z.string(),\n updated_at: z.string(),\n state: z.unknown(),\n }),\n history: z.array(z.unknown()),\n});\n\ntype ParsedExportedSession = z.infer<typeof exportedSessionSchema>;\n\nexport type ImportSessionOptions = {\n name?: string;\n newCwd?: string;\n expectedAgentName?: string;\n expectedAgentCommand?: string;\n};\n\nclass SessionImportError extends AcpxOperationalError {\n readonly code: string;\n readonly exitCode = 2;\n\n constructor(message: string, code: string) {\n super(message, {\n outputCode: \"USAGE\",\n detailCode: code,\n origin: \"cli\",\n });\n this.code = code;\n }\n}\n\nfunction importError(message: string, code: string): SessionImportError {\n return new SessionImportError(message, code);\n}\n\nfunction parseArchiveJson(raw: string): unknown {\n try {\n return JSON.parse(raw);\n } catch (error) {\n throw importError(\n `Invalid session export archive JSON: ${error instanceof Error ? error.message : String(error)}`,\n \"invalid-archive\",\n );\n }\n}\n\nfunction assertSupportedFormatVersion(parsed: unknown): void {\n const record = parsed && typeof parsed === \"object\" ? (parsed as Record<string, unknown>) : {};\n if (record.format_version !== SUPPORTED_FORMAT_VERSION) {\n throw importError(\n `Unsupported session export format_version ${String(record.format_version)}; supported version is ${SUPPORTED_FORMAT_VERSION}`,\n \"unsupported-format-version\",\n );\n }\n}\n\nfunction parseArchive(raw: string): ParsedExportedSession {\n const parsed = parseArchiveJson(raw);\n assertSupportedFormatVersion(parsed);\n\n try {\n return exportedSessionSchema.parse(parsed);\n } catch (error) {\n if (error instanceof ZodError) {\n throw importError(\n `Invalid session export archive: ${error.issues[0]?.message}`,\n \"invalid-archive\",\n );\n }\n throw error;\n }\n}\n\nasync function generateRecordId(sessionsDir: string): Promise<string> {\n for (;;) {\n const recordId = randomUUID();\n const filePath = path.join(sessionsDir, `${encodeURIComponent(recordId)}.json`);\n try {\n await fs.access(filePath);\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n return recordId;\n }\n throw error;\n }\n }\n}\n\nfunction resolveImportedCwd(cwdRelative: string, newCwd: string | undefined): string {\n if (newCwd) {\n return path.resolve(newCwd);\n }\n if (path.isAbsolute(cwdRelative)) {\n return cwdRelative;\n }\n return path.join(os.homedir(), cwdRelative);\n}\n\nfunction resolveImportedName(parsed: ParsedExportedSession, requestedName: string | undefined) {\n return requestedName ?? parsed.session.name ?? undefined;\n}\n\nfunction assertExpectedAgentCommand(\n parsed: ParsedExportedSession,\n sourceRecord: SessionRecord,\n options: Pick<ImportSessionOptions, \"expectedAgentName\" | \"expectedAgentCommand\">,\n): void {\n const expectedAgentCommand = options.expectedAgentCommand;\n if (!expectedAgentCommand) {\n return;\n }\n const expectedAgentName = normalizeAgentIdentity(options.expectedAgentName);\n const archiveAgentName = normalizeAgentIdentity(parsed.session.agent_name);\n const archiveCommandMatches = agentCommandMatchesExpected(\n parsed.session.agent,\n expectedAgentCommand,\n expectedAgentName,\n );\n const stateCommandMatches = agentCommandMatchesExpected(\n sourceRecord.agentCommand,\n expectedAgentCommand,\n expectedAgentName,\n );\n\n if (\n archiveCommandMatches &&\n stateCommandMatches &&\n archiveAgentNameMatches({\n archiveAgentName,\n expectedAgentName,\n archiveCommand: parsed.session.agent,\n stateCommand: sourceRecord.agentCommand,\n expectedAgentCommand,\n })\n ) {\n sourceRecord.agentCommand = expectedAgentCommand;\n return;\n }\n throw importError(\n \"Session export archive agent does not match the requested agent\",\n \"agent-mismatch\",\n );\n}\n\nfunction archiveAgentNameMatches(params: {\n archiveAgentName: string | undefined;\n expectedAgentName: string | undefined;\n archiveCommand: string;\n stateCommand: string;\n expectedAgentCommand: string;\n}): boolean {\n if (\n params.archiveCommand === params.expectedAgentCommand &&\n params.stateCommand === params.expectedAgentCommand\n ) {\n return true;\n }\n return (\n params.archiveAgentName == null ||\n params.expectedAgentName == null ||\n params.archiveAgentName === params.expectedAgentName\n );\n}\n\nfunction normalizeAgentIdentity(agentName: string | undefined): string | undefined {\n const normalized = agentName?.trim().toLowerCase();\n if (!normalized || normalized.length === 0) {\n return undefined;\n }\n return normalized === \"factory-droid\" || normalized === \"factorydroid\" ? \"droid\" : normalized;\n}\n\nfunction agentCommandMatchesExpected(\n archivedCommand: string,\n expectedAgentCommand: string,\n expectedAgentName: string | undefined,\n): boolean {\n if (archivedCommand === expectedAgentCommand) {\n return true;\n }\n return expectedAgentName\n ? commandLooksLikeBuiltInAgent(archivedCommand, expectedAgentName)\n : false;\n}\n\nfunction commandLooksLikeBuiltInAgent(command: string, agentName: string): boolean {\n const normalized = command.trim();\n switch (agentName) {\n case \"pi\":\n return /(?:^|\\s)pi-acp(?:@|\\s|$)/.test(normalized);\n case \"codex\":\n return /(?:^|\\s)@agentclientprotocol\\/codex-acp(?:@|\\s|$)/.test(normalized);\n case \"claude\":\n return /(?:^|\\s)@agentclientprotocol\\/claude-agent-acp(?:@|\\s|$)/.test(normalized);\n default:\n return false;\n }\n}\n\nasync function assertDestinationScopeAvailable(record: SessionRecord): Promise<void> {\n const existing = await findSession({\n agentCommand: record.agentCommand,\n cwd: record.cwd,\n name: record.name,\n });\n if (!existing) {\n return;\n }\n throw importError(\n \"A session already exists for the import destination scope; pass --name or --cwd to import a separate copy\",\n \"session-scope-exists\",\n );\n}\n\nasync function assertProviderSessionAvailable(record: SessionRecord): Promise<void> {\n const existing = (await listSessions()).find(\n (session) => session.acpSessionId === record.acpSessionId,\n );\n if (!existing) {\n return;\n }\n throw importError(\n \"A local session already uses this provider session id; prune or remove the existing record before importing this archive\",\n \"session-provider-exists\",\n );\n}\n\nfunction buildImportedRecord(\n parsed: ParsedExportedSession,\n sourceRecord: SessionRecord,\n options: { newRecordId: string; cwd: string; name?: string },\n): SessionRecord {\n const eventLog = {\n ...defaultSessionEventLog(options.newRecordId),\n max_segment_bytes: sourceRecord.eventLog.max_segment_bytes,\n max_segments: sourceRecord.eventLog.max_segments,\n segment_count: parsed.history.length > 0 ? 1 : sourceRecord.eventLog.segment_count,\n };\n\n return {\n ...sourceRecord,\n acpxRecordId: options.newRecordId,\n cwd: options.cwd,\n name: resolveImportedName(parsed, options.name),\n closed: false,\n closedAt: undefined,\n pid: undefined,\n agentStartedAt: undefined,\n lastAgentExitCode: undefined,\n lastAgentExitSignal: undefined,\n lastAgentExitAt: undefined,\n lastAgentDisconnectReason: undefined,\n eventLog,\n importedFrom: {\n recordId: parsed.session.record_id,\n cwdOriginal: parsed.session.cwd_original ?? parsed.session.cwd_relative,\n exportedBy: parsed.exported_by,\n exportedAt: parsed.exported_at,\n },\n };\n}\n\nexport async function importSession(\n archivePath: string,\n options: ImportSessionOptions = {},\n): Promise<{ record_id: string; cwd: string }> {\n const parsed = parseArchive(await fs.readFile(archivePath, \"utf8\"));\n const sourceRecord = parseSessionRecord(parsed.session.state);\n if (!sourceRecord) {\n throw importError(\n \"Invalid session export archive: session.state is not a session record\",\n \"invalid-archive\",\n );\n }\n assertExpectedAgentCommand(parsed, sourceRecord, options);\n\n const sessionsDir = path.join(os.homedir(), \".acpx\", \"sessions\");\n await fs.mkdir(sessionsDir, { recursive: true });\n\n const cwd = resolveImportedCwd(parsed.session.cwd_relative, options.newCwd);\n const newRecordId = await generateRecordId(sessionsDir);\n const newRecord = buildImportedRecord(parsed, sourceRecord, {\n newRecordId,\n cwd,\n name: options.name,\n });\n\n await assertDestinationScopeAvailable(newRecord);\n await assertProviderSessionAvailable(newRecord);\n await writeSessionRecord(newRecord);\n\n if (parsed.history.length > 0) {\n const history = parsed.history as AcpJsonRpcMessage[];\n await fs.writeFile(\n sessionEventActivePath(newRecordId),\n `${history.map((entry) => JSON.stringify(entry)).join(\"\\n\")}\\n`,\n \"utf8\",\n );\n }\n\n return { record_id: newRecordId, cwd };\n}\n","import type { OutputFormat } from \"../../types.js\";\n\nexport function 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","import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { Command, InvalidArgumentError } from \"commander\";\nimport { isLegacyZedCodexAcpInvocation } from \"../acp/codex-compat.js\";\nimport { AgentSpawnError } from \"../errors.js\";\nimport { loadPermissionPolicySpec } from \"../permission-policy.js\";\nimport {\n mergePromptSourceWithText,\n parsePromptSource,\n PromptInputValidationError,\n textPrompt,\n} from \"../prompt-content.js\";\nimport { exportSession } from \"../session/export.js\";\nimport { importSession } from \"../session/import.js\";\nimport {\n findGitRepositoryRoot,\n findSession,\n findSessionByDirectoryWalk,\n} from \"../session/persistence.js\";\nimport { EXIT_CODES } from \"../types.js\";\nimport type {\n OutputFormat,\n OutputPolicy,\n SessionAgentContent,\n SessionRecord,\n SessionUserContent,\n PermissionPolicy,\n} from \"../types.js\";\nimport type { ResolvedAcpxConfig } from \"./config.js\";\nimport {\n parseHistoryLimit,\n resolveAgentInvocation,\n resolveGlobalFlags,\n resolveOutputPolicy,\n resolvePermissionMode,\n resolveSessionNameFromFlags,\n type ExecFlags,\n type GlobalFlags,\n type SessionsExportFlags,\n type PromptFlags,\n type SessionsImportFlags,\n type SessionsHistoryFlags,\n type SessionsListFlags,\n type SessionsNewFlags,\n type SessionsPruneFlags,\n type StatusFlags,\n} from \"./flags.js\";\nimport { emitJsonResult } from \"./output/json-output.js\";\nimport type { SessionListResult } from \"./session/contracts.js\";\n\nclass NoSessionError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"NoSessionError\";\n }\n}\n\ntype SessionModule = typeof import(\"../session/session.js\");\ntype OutputModule = typeof import(\"./output/output.js\");\ntype OutputRenderModule = typeof import(\"./output/render.js\");\n\nlet sessionModulePromise: Promise<SessionModule> | undefined;\nlet outputModulePromise: Promise<OutputModule> | undefined;\nlet outputRenderModulePromise: Promise<OutputRenderModule> | undefined;\n\nfunction loadSessionModule(): Promise<SessionModule> {\n sessionModulePromise ??= import(\"../session/session.js\");\n return sessionModulePromise;\n}\n\nfunction loadOutputModule(): Promise<OutputModule> {\n outputModulePromise ??= import(\"./output/output.js\");\n return outputModulePromise;\n}\n\nfunction loadOutputRenderModule(): Promise<OutputRenderModule> {\n outputRenderModulePromise ??= import(\"./output/render.js\");\n return outputRenderModulePromise;\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 return await readPromptFromFile(filePath, cwd, promptParts);\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\nasync function readPromptFromFile(\n filePath: string,\n cwd: string,\n promptParts: string[],\n): Promise<import(\"../types.js\").PromptInput> {\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\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 resolveCompatibleConfigId(agent: { agentCommand: string }, configId: string): string {\n if (isLegacyZedCodexAcpInvocation(agent.agentCommand) && configId === \"thought_level\") {\n return \"reasoning_effort\";\n }\n return configId;\n}\n\nfunction resolveRequestedOutputPolicy(globalFlags: {\n format: OutputFormat;\n jsonStrict?: boolean;\n suppressReads?: boolean;\n}): OutputPolicy {\n return {\n ...resolveOutputPolicy(globalFlags.format, globalFlags.jsonStrict === true),\n suppressReads: globalFlags.suppressReads === true,\n };\n}\n\ntype ResolvedAgentInvocation = ReturnType<typeof resolveAgentInvocation>;\n\nfunction sessionOptionsFromGlobalFlags(\n globalFlags: GlobalFlags,\n): NonNullable<Parameters<SessionModule[\"createSession\"]>[0][\"sessionOptions\"]> {\n return {\n model: globalFlags.model,\n allowedTools: globalFlags.allowedTools,\n maxTurns: globalFlags.maxTurns,\n systemPrompt: globalFlags.systemPrompt,\n };\n}\n\nasync function resolvePermissionPolicyFromFlags(\n globalFlags: GlobalFlags,\n): Promise<PermissionPolicy | undefined> {\n try {\n return await loadPermissionPolicySpec(globalFlags.permissionPolicy, globalFlags.cwd);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n throw new InvalidArgumentError(`Invalid permission policy: ${message}`);\n }\n}\n\nfunction buildSessionStartOptions(params: {\n agent: ResolvedAgentInvocation;\n flags: SessionsNewFlags;\n globalFlags: GlobalFlags;\n config: ResolvedAcpxConfig;\n permissionMode: ReturnType<typeof resolvePermissionMode>;\n permissionPolicy?: PermissionPolicy;\n}): Parameters<SessionModule[\"createSession\"]>[0] {\n return {\n agentCommand: params.agent.agentCommand,\n cwd: params.agent.cwd,\n name: params.flags.name,\n resumeSessionId: params.flags.resumeSession,\n mcpServers: params.config.mcpServers,\n permissionMode: params.permissionMode,\n nonInteractivePermissions: params.globalFlags.nonInteractivePermissions,\n permissionPolicy: params.permissionPolicy,\n authCredentials: params.config.auth,\n authPolicy: params.globalFlags.authPolicy,\n terminal: params.globalFlags.terminal,\n timeoutMs: params.globalFlags.timeout,\n verbose: params.globalFlags.verbose,\n sessionOptions: sessionOptionsFromGlobalFlags(params.globalFlags),\n };\n}\n\nfunction resolveSessionListFilterCwd(\n flags: Pick<SessionsListFlags, \"filterCwd\">,\n agentCwd: string,\n): string | undefined {\n return flags.filterCwd ? path.resolve(agentCwd, flags.filterCwd) : undefined;\n}\n\nasync function printLocalSessionsList(\n agentCommand: string,\n filterCwd: string | undefined,\n format: OutputFormat,\n): Promise<void> {\n const [{ listSessionsForAgent }, { printSessionsByFormat }] = await Promise.all([\n loadSessionModule(),\n loadOutputRenderModule(),\n ]);\n const sessions = await listSessionsForAgent(agentCommand);\n const filtered = filterCwd ? sessions.filter((session) => session.cwd === filterCwd) : sessions;\n printSessionsByFormat(filtered, format);\n}\n\nfunction missingScopedSessionMessage(\n agent: ResolvedAgentInvocation,\n sessionName: string | undefined,\n): string {\n return 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\nasync function findScopedSessionOrThrow(\n agent: ResolvedAgentInvocation,\n sessionName: string | undefined,\n): Promise<SessionRecord> {\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(missingScopedSessionMessage(agent, sessionName));\n }\n\n return record;\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\nexport async 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 = resolveRequestedOutputPolicy(globalFlags);\n const permissionMode = resolvePermissionMode(globalFlags, config.defaultPermissions);\n const permissionPolicy = await resolvePermissionPolicyFromFlags(globalFlags);\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 suppressReads: outputPolicy.suppressReads,\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 permissionPolicy,\n authCredentials: config.auth,\n authPolicy: globalFlags.authPolicy,\n terminal: globalFlags.terminal,\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 promptRetries: globalFlags.promptRetries,\n verbose: globalFlags.verbose,\n waitForCompletion: flags.wait !== false,\n sessionOptions: {\n model: globalFlags.model,\n allowedTools: globalFlags.allowedTools,\n maxTurns: globalFlags.maxTurns,\n systemPrompt: globalFlags.systemPrompt,\n },\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(\n `[acpx] session reconnect failed, started fresh session: ${result.loadError}\\n`,\n );\n }\n}\n\nexport async 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 = resolveRequestedOutputPolicy(globalFlags);\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: { acpxCode: \"EXEC_DISABLED\" },\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 = 1;\n return;\n }\n\n const globalFlags = resolveGlobalFlags(command, config);\n const outputPolicy = resolveRequestedOutputPolicy(globalFlags);\n const permissionMode = resolvePermissionMode(globalFlags, config.defaultPermissions);\n const permissionPolicy = await resolvePermissionPolicyFromFlags(globalFlags);\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 suppressReads: outputPolicy.suppressReads,\n });\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 permissionPolicy,\n authCredentials: config.auth,\n authPolicy: globalFlags.authPolicy,\n terminal: globalFlags.terminal,\n outputFormatter,\n suppressSdkConsoleErrors: outputPolicy.suppressSdkConsoleErrors,\n timeoutMs: globalFlags.timeout,\n verbose: globalFlags.verbose,\n promptRetries: globalFlags.promptRetries,\n sessionOptions: {\n model: globalFlags.model,\n allowedTools: globalFlags.allowedTools,\n maxTurns: globalFlags.maxTurns,\n systemPrompt: globalFlags.systemPrompt,\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 process.stdout.write(result.cancelled ? \"cancel requested\\n\" : \"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 process.stdout.write(format === \"quiet\" ? `${modeId}\\n` : `mode set: ${modeId}\\n`);\n}\n\nfunction printSetModelResultByFormat(\n modelId: string,\n result: { record: SessionRecord; resumed: boolean },\n format: OutputFormat,\n): void {\n if (\n emitJsonResult(format, {\n action: \"model_set\",\n modelId,\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 process.stdout.write(format === \"quiet\" ? `${modelId}\\n` : `model set: ${modelId}\\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 process.stdout.write(\n format === \"quiet\"\n ? `${value}\\n`\n : `config set: ${configId}=${value} (${result.response.configOptions.length} options)\\n`,\n );\n}\n\nexport async 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({ sessionId: \"\", cancelled: false }, globalFlags.format);\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\nexport async 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 terminal: globalFlags.terminal,\n timeoutMs: globalFlags.timeout,\n verbose: globalFlags.verbose,\n });\n\n if (globalFlags.verbose && result.loadError) {\n process.stderr.write(\n `[acpx] session reconnect failed, started fresh session: ${result.loadError}\\n`,\n );\n }\n\n printSetModeResultByFormat(modeId, result, globalFlags.format);\n}\n\nexport async function handleSetModel(\n explicitAgentName: string | undefined,\n modelId: 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 { setSessionModel } = 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 setSessionModel({\n sessionId: record.acpxRecordId,\n modelId,\n mcpServers: config.mcpServers,\n nonInteractivePermissions: globalFlags.nonInteractivePermissions,\n authCredentials: config.auth,\n authPolicy: globalFlags.authPolicy,\n terminal: globalFlags.terminal,\n timeoutMs: globalFlags.timeout,\n verbose: globalFlags.verbose,\n });\n\n if (globalFlags.verbose && result.loadError) {\n process.stderr.write(\n `[acpx] session reconnect failed, started fresh session: ${result.loadError}\\n`,\n );\n }\n\n printSetModelResultByFormat(modelId, result, globalFlags.format);\n}\n\nexport async 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 if (configId === \"model\") {\n await handleSetModel(explicitAgentName, value, flags, command, config);\n return;\n }\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 terminal: globalFlags.terminal,\n timeoutMs: globalFlags.timeout,\n verbose: globalFlags.verbose,\n });\n\n if (globalFlags.verbose && result.loadError) {\n process.stderr.write(\n `[acpx] session reconnect failed, started fresh session: ${result.loadError}\\n`,\n );\n }\n\n printSetConfigOptionResultByFormat(configId, value, result, globalFlags.format);\n}\n\nasync function tryListAgentSessions(\n agent: ResolvedAgentInvocation,\n flags: SessionsListFlags,\n globalFlags: ReturnType<typeof resolveGlobalFlags>,\n config: ResolvedAcpxConfig,\n): Promise<SessionListResult | \"spawn-failed\"> {\n const permissionMode = resolvePermissionMode(globalFlags, config.defaultPermissions);\n const permissionPolicy = await resolvePermissionPolicyFromFlags(globalFlags);\n const { listAgentSessions } = await loadSessionModule();\n try {\n return await listAgentSessions({\n agentCommand: agent.agentCommand,\n cwd: agent.cwd,\n cursor: flags.cursor,\n filterCwd: resolveSessionListFilterCwd(flags, agent.cwd),\n mcpServers: config.mcpServers,\n permissionMode,\n nonInteractivePermissions: globalFlags.nonInteractivePermissions,\n permissionPolicy,\n authCredentials: config.auth,\n authPolicy: globalFlags.authPolicy,\n terminal: globalFlags.terminal,\n timeoutMs: globalFlags.timeout,\n verbose: globalFlags.verbose,\n });\n } catch (error) {\n if (error instanceof AgentSpawnError) {\n return \"spawn-failed\";\n }\n throw error;\n }\n}\n\nexport async function handleSessionsList(\n explicitAgentName: string | undefined,\n flags: SessionsListFlags,\n command: Command,\n config: ResolvedAcpxConfig,\n): Promise<void> {\n const globalFlags = resolveGlobalFlags(command, config);\n const agent = resolveAgentInvocation(explicitAgentName, globalFlags, config);\n const filterCwd = resolveSessionListFilterCwd(flags, agent.cwd);\n\n if (flags.local) {\n if (flags.cursor) {\n throw new InvalidArgumentError(\"--cursor cannot be combined with --local\");\n }\n await printLocalSessionsList(agent.agentCommand, filterCwd, globalFlags.format);\n return;\n }\n\n const [result, { printAgentSessionsByFormat }] = await Promise.all([\n tryListAgentSessions(agent, flags, globalFlags, config),\n loadOutputRenderModule(),\n ]);\n\n if (!result || result === \"spawn-failed\") {\n if (result !== \"spawn-failed\" && (flags.cursor || flags.filterCwd)) {\n throw new Error(\n `Agent command \"${agent.agentCommand}\" does not advertise sessionCapabilities.list; cannot use agent-side session/list filters`,\n );\n }\n await printLocalSessionsList(agent.agentCommand, undefined, globalFlags.format);\n return;\n }\n\n printAgentSessionsByFormat(result, globalFlags.format);\n}\n\nexport async 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 throw new Error(missingScopedSessionMessage(agent, sessionName));\n }\n\n const closed = await closeSession(record.acpxRecordId);\n printClosedSessionByFormat(closed, globalFlags.format);\n}\n\nexport async 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 permissionPolicy = await resolvePermissionPolicyFromFlags(globalFlags);\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 buildSessionStartOptions({\n agent,\n flags,\n globalFlags,\n config,\n permissionMode,\n permissionPolicy,\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\nexport async 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 permissionPolicy = await resolvePermissionPolicyFromFlags(globalFlags);\n const agent = resolveAgentInvocation(explicitAgentName, globalFlags, config);\n const [{ ensureSession }, { printCreatedSessionBanner, printEnsuredSessionByFormat }] =\n await Promise.all([loadSessionModule(), loadOutputRenderModule()]);\n const result = await ensureSession(\n buildSessionStartOptions({\n agent,\n flags,\n globalFlags,\n config,\n permissionMode,\n permissionPolicy,\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 if (\"Audio\" in content) {\n return `[audio] ${content.Audio.mime_type || \"audio\"}`;\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<{ role: \"user\" | \"assistant\"; timestamp: string; textPreview: string }> = [];\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 if (!text) {\n continue;\n }\n entries.push({ role: \"user\", timestamp: record.updated_at, textPreview: text });\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 if (!text) {\n continue;\n }\n entries.push({ role: \"assistant\", timestamp: record.updated_at, textPreview: text });\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 if (format === \"quiet\") {\n process.stdout.write(`${record.acpxRecordId}\\n`);\n return;\n }\n for (const line of sessionDetailsLines(record)) {\n process.stdout.write(`${line}\\n`);\n }\n}\n\nfunction sessionDetailsLines(record: SessionRecord): string[] {\n return [\n `id: ${record.acpxRecordId}`,\n `sessionId: ${record.acpSessionId}`,\n `agentSessionId: ${displayValue(record.agentSessionId)}`,\n `agent: ${record.agentCommand}`,\n `cwd: ${record.cwd}`,\n `name: ${displayValue(record.name)}`,\n `created: ${record.createdAt}`,\n `lastActivity: ${record.lastUsedAt}`,\n `lastPrompt: ${displayValue(record.lastPromptAt)}`,\n `closed: ${record.closed ? \"yes\" : \"no\"}`,\n `closedAt: ${displayValue(record.closedAt)}`,\n `pid: ${displayValue(record.pid)}`,\n `agentStartedAt: ${displayValue(record.agentStartedAt)}`,\n `lastExitCode: ${displayValue(record.lastAgentExitCode)}`,\n `lastExitSignal: ${displayValue(record.lastAgentExitSignal)}`,\n `lastExitAt: ${displayValue(record.lastAgentExitAt)}`,\n `disconnectReason: ${displayValue(record.lastAgentDisconnectReason)}`,\n `historyEntries: ${conversationHistoryEntries(record).length}`,\n ];\n}\n\nfunction displayValue(value: string | number | boolean | null | undefined): string {\n return value == null ? \"-\" : String(value);\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\nexport async 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 findScopedSessionOrThrow(agent, sessionName);\n\n printSessionDetailsByFormat(record, globalFlags.format);\n}\n\nexport async 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 findScopedSessionOrThrow(agent, sessionName);\n\n printSessionHistoryByFormat(record, flags.limit, globalFlags.format);\n}\n\nexport async function handleSessionsExport(\n explicitAgentName: string | undefined,\n sessionName: string | undefined,\n flags: SessionsExportFlags,\n command: Command,\n config: ResolvedAcpxConfig,\n): Promise<void> {\n const globalFlags = resolveGlobalFlags(command, config);\n const agent = resolveAgentInvocation(explicitAgentName, globalFlags, config);\n const cwd = flags.sourceCwd ? path.resolve(agent.cwd, flags.sourceCwd) : agent.cwd;\n\n await exportSession(\n {\n agentName: globalFlags.agent ? undefined : agent.agentName,\n agentCommand: agent.agentCommand,\n cwd,\n name: sessionName,\n },\n flags.output,\n );\n\n if (\n emitJsonResult(globalFlags.format, {\n action: \"session_exported\",\n output: flags.output,\n })\n ) {\n return;\n }\n\n if (globalFlags.format === \"quiet\") {\n process.stdout.write(`${flags.output}\\n`);\n return;\n }\n\n process.stdout.write(`exported session to ${flags.output}\\n`);\n}\n\nexport async function handleSessionsImport(\n explicitAgentName: string | undefined,\n archivePath: string,\n flags: SessionsImportFlags,\n command: Command,\n config: ResolvedAcpxConfig,\n): Promise<void> {\n const globalFlags = resolveGlobalFlags(command, config);\n const agent = resolveAgentInvocation(explicitAgentName, globalFlags, config);\n const result = await importSession(archivePath, {\n name: flags.name,\n newCwd: flags.destinationCwd ? path.resolve(globalFlags.cwd, flags.destinationCwd) : undefined,\n expectedAgentName: globalFlags.agent ? undefined : agent.agentName,\n expectedAgentCommand: agent.agentCommand,\n });\n\n if (\n emitJsonResult(globalFlags.format, {\n action: \"session_imported\",\n record_id: result.record_id,\n cwd: result.cwd,\n })\n ) {\n return;\n }\n\n if (globalFlags.format === \"quiet\") {\n process.stdout.write(`${result.record_id}\\n`);\n return;\n }\n\n process.stdout.write(`imported session ${result.record_id} at ${result.cwd}\\n`);\n}\n\nexport async function handleSessionsPrune(\n explicitAgentName: string | undefined,\n flags: SessionsPruneFlags,\n command: Command,\n config: ResolvedAcpxConfig,\n): Promise<void> {\n const globalFlags = resolveGlobalFlags(command, config);\n const agent = resolveAgentInvocation(explicitAgentName, globalFlags, config);\n const [{ pruneSessions }, { printPruneResultByFormat }] = await Promise.all([\n loadSessionModule(),\n loadOutputRenderModule(),\n ]);\n\n const olderThanMs = flags.olderThan != null ? flags.olderThan * 24 * 60 * 60 * 1000 : undefined;\n\n const result = await pruneSessions({\n agentCommand: agent.agentCommand,\n before: flags.before,\n olderThanMs,\n includeHistory: flags.includeHistory,\n dryRun: flags.dryRun,\n });\n\n printPruneResultByFormat(result, globalFlags.format);\n}\n\nexport { parseHistoryLimit, NoSessionError, loadSessionModule };\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 parseServerType(rawType: unknown, path: string): \"http\" | \"sse\" | \"stdio\" {\n if (rawType === undefined) {\n // Allow normalized stdio entries where type is omitted by ACP shape.\n return \"stdio\";\n }\n\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 return parsedType;\n}\n\nfunction parseHttpServer(\n serverRecord: UnknownRecord,\n path: string,\n type: \"http\" | \"sse\",\n name: string,\n _meta: Record<string, unknown> | null | undefined,\n): McpServer {\n return {\n type,\n name,\n url: parseNonEmptyString(serverRecord.url, `${path}.url`),\n headers: parseHeaders(serverRecord.headers, `${path}.headers`),\n _meta,\n } satisfies McpServer;\n}\n\nfunction parseStdioServer(\n serverRecord: UnknownRecord,\n path: string,\n name: string,\n _meta: Record<string, unknown> | null | undefined,\n): McpServer {\n return {\n name,\n command: parseNonEmptyString(serverRecord.command, `${path}.command`),\n args: parseArgs(serverRecord.args, `${path}.args`),\n env: parseEnv(serverRecord.env, `${path}.env`),\n _meta,\n } satisfies McpServer;\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 typeValue = parseServerType(serverRecord.type, path);\n\n if (typeValue === \"http\" || typeValue === \"sse\") {\n return parseHttpServer(serverRecord, path, typeValue, name, _meta);\n }\n\n return parseStdioServer(serverRecord, path, name, _meta);\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 args?: 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 const args = parseAgentArgs(raw.args, name, sourcePath);\n parsed[normalizeAgentName(name)] =\n args.length > 0 ? `${command.trim()} ${args.map(quoteCommandArg).join(\" \")}` : command.trim();\n }\n\n return parsed;\n}\n\nfunction parseAgentArgs(value: unknown, agentName: string, sourcePath: string): string[] {\n if (value == null) {\n return [];\n }\n if (!Array.isArray(value)) {\n throw new Error(\n `Invalid config agents.${agentName}.args in ${sourcePath}: expected array of strings`,\n );\n }\n return value.map((arg, index) => {\n if (typeof arg !== \"string\") {\n throw new Error(\n `Invalid config agents.${agentName}.args[${index}] in ${sourcePath}: expected string`,\n );\n }\n return arg;\n });\n}\n\nfunction quoteCommandArg(value: string): string {\n return JSON.stringify(value);\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 scalar = resolveScalarConfigValues(projectConfig, projectPath, globalConfig, globalPath);\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 mcpServers = resolveMcpServers(projectConfig, projectPath, globalConfig, globalPath);\n const disableExec = resolveDisableExec(projectConfig, projectPath, globalConfig, globalPath);\n\n return {\n ...scalar,\n agents,\n auth,\n disableExec,\n mcpServers,\n globalPath,\n projectPath,\n hasGlobalConfig: globalResult.exists,\n hasProjectConfig: projectResult.exists,\n };\n}\n\nfunction resolveScalarConfigValues(\n projectConfig: ConfigFileShape | undefined,\n projectPath: string,\n globalConfig: ConfigFileShape | undefined,\n globalPath: string,\n): Pick<\n ResolvedAcpxConfig,\n | \"defaultAgent\"\n | \"defaultPermissions\"\n | \"nonInteractivePermissions\"\n | \"authPolicy\"\n | \"ttlMs\"\n | \"timeoutMs\"\n | \"queueMaxDepth\"\n | \"format\"\n> {\n return {\n defaultAgent: resolveDefaultAgent(projectConfig, projectPath, globalConfig, globalPath),\n defaultPermissions: resolveDefaultPermissions(\n projectConfig,\n projectPath,\n globalConfig,\n globalPath,\n ),\n nonInteractivePermissions: resolveNonInteractivePermissions(\n projectConfig,\n projectPath,\n globalConfig,\n globalPath,\n ),\n authPolicy: resolveAuthPolicy(projectConfig, projectPath, globalConfig, globalPath),\n ttlMs: resolveTtlMs(projectConfig, projectPath, globalConfig, globalPath),\n timeoutMs: resolveTimeoutMs(projectConfig, projectPath, globalConfig, globalPath),\n queueMaxDepth: resolveQueueMaxDepth(projectConfig, projectPath, globalConfig, globalPath),\n format: resolveFormat(projectConfig, projectPath, globalConfig, globalPath),\n };\n}\n\nfunction resolveDefaultAgent(\n projectConfig: ConfigFileShape | undefined,\n projectPath: string,\n globalConfig: ConfigFileShape | undefined,\n globalPath: string,\n): string {\n return (\n parseDefaultAgent(projectConfig?.defaultAgent, projectPath) ??\n parseDefaultAgent(globalConfig?.defaultAgent, globalPath) ??\n DEFAULT_AGENT_NAME\n );\n}\n\nfunction resolveDefaultPermissions(\n projectConfig: ConfigFileShape | undefined,\n projectPath: string,\n globalConfig: ConfigFileShape | undefined,\n globalPath: string,\n): PermissionMode {\n return (\n parsePermissionMode(projectConfig?.defaultPermissions, projectPath) ??\n parsePermissionMode(globalConfig?.defaultPermissions, globalPath) ??\n DEFAULT_PERMISSION_MODE\n );\n}\n\nfunction resolveNonInteractivePermissions(\n projectConfig: ConfigFileShape | undefined,\n projectPath: string,\n globalConfig: ConfigFileShape | undefined,\n globalPath: string,\n): NonInteractivePermissionPolicy {\n return (\n parseNonInteractivePermissionPolicy(projectConfig?.nonInteractivePermissions, projectPath) ??\n parseNonInteractivePermissionPolicy(globalConfig?.nonInteractivePermissions, globalPath) ??\n DEFAULT_NON_INTERACTIVE_PERMISSION_POLICY\n );\n}\n\nfunction resolveAuthPolicy(\n projectConfig: ConfigFileShape | undefined,\n projectPath: string,\n globalConfig: ConfigFileShape | undefined,\n globalPath: string,\n): AuthPolicy {\n return (\n parseAuthPolicy(projectConfig?.authPolicy, projectPath) ??\n parseAuthPolicy(globalConfig?.authPolicy, globalPath) ??\n DEFAULT_AUTH_POLICY\n );\n}\n\nfunction resolveTtlMs(\n projectConfig: ConfigFileShape | undefined,\n projectPath: string,\n globalConfig: ConfigFileShape | undefined,\n globalPath: string,\n): number {\n return (\n parseTtlMs(projectConfig?.ttl, projectPath) ??\n parseTtlMs(globalConfig?.ttl, globalPath) ??\n DEFAULT_TTL_MS\n );\n}\n\nfunction resolveQueueMaxDepth(\n projectConfig: ConfigFileShape | undefined,\n projectPath: string,\n globalConfig: ConfigFileShape | undefined,\n globalPath: string,\n): number {\n return (\n parseQueueMaxDepth(projectConfig?.queueMaxDepth, projectPath) ??\n parseQueueMaxDepth(globalConfig?.queueMaxDepth, globalPath) ??\n DEFAULT_QUEUE_MAX_DEPTH\n );\n}\n\nfunction resolveFormat(\n projectConfig: ConfigFileShape | undefined,\n projectPath: string,\n globalConfig: ConfigFileShape | undefined,\n globalPath: string,\n): OutputFormat {\n return (\n parseOutputFormat(projectConfig?.format, projectPath) ??\n parseOutputFormat(globalConfig?.format, globalPath) ??\n DEFAULT_OUTPUT_FORMAT\n );\n}\n\nfunction hasConfigKey(config: ConfigFileShape | undefined, key: keyof ConfigFileShape): boolean {\n return config != null && Object.prototype.hasOwnProperty.call(config, key);\n}\n\nfunction resolveTimeoutMs(\n projectConfig: ConfigFileShape | undefined,\n projectPath: string,\n globalConfig: ConfigFileShape | undefined,\n globalPath: string,\n): number | undefined {\n if (hasConfigKey(projectConfig, \"timeout\")) {\n return parseTimeoutMs(projectConfig?.timeout, projectPath);\n }\n if (hasConfigKey(globalConfig, \"timeout\")) {\n return parseTimeoutMs(globalConfig?.timeout, globalPath);\n }\n return DEFAULT_TIMEOUT_MS;\n}\n\nfunction resolveMcpServers(\n projectConfig: ConfigFileShape | undefined,\n projectPath: string,\n globalConfig: ConfigFileShape | undefined,\n globalPath: string,\n): McpServer[] {\n if (hasConfigKey(projectConfig, \"mcpServers\")) {\n return parseMcpServers(projectConfig?.mcpServers, projectPath);\n }\n if (hasConfigKey(globalConfig, \"mcpServers\")) {\n return parseMcpServers(globalConfig?.mcpServers, globalPath);\n }\n return [];\n}\n\nfunction resolveDisableExec(\n projectConfig: ConfigFileShape | undefined,\n projectPath: string,\n globalConfig: ConfigFileShape | undefined,\n globalPath: string,\n): boolean {\n return (\n parseDisableExec(projectConfig?.disableExec, projectPath) ??\n parseDisableExec(globalConfig?.disableExec, globalPath) ??\n DEFAULT_DISABLE_EXEC\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 { Command } from \"commander\";\nimport { initGlobalConfigFile, toConfigDisplay, type ResolvedAcpxConfig } from \"./config.js\";\nimport { parseOutputFormat, resolveGlobalFlags } from \"./flags.js\";\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\nexport function 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 .option(\"--format <fmt>\", \"Output format: text, json, quiet\", parseOutputFormat)\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 .option(\"--format <fmt>\", \"Output format: text, json, quiet\", parseOutputFormat)\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","import path from \"node:path\";\nimport { normalizeRuntimeSessionId } from \"../../session/runtime-session-id.js\";\nimport type { AgentSessionListResult, OutputFormat, SessionRecord } from \"../../types.js\";\nimport { probeQueueOwnerHealth } from \"../queue/ipc.js\";\nimport { emitJsonResult } from \"./json-output.js\";\n\nfunction formatSessionLabel(record: SessionRecord): string {\n return record.name ?? \"cwd\";\n}\n\nfunction formatRoutedFrom(sessionCwd: string, currentCwd: string): string | undefined {\n const relative = path.relative(sessionCwd, currentCwd);\n if (!relative || relative === \".\") {\n return undefined;\n }\n return relative.startsWith(\".\") ? relative : `.${path.sep}${relative}`;\n}\n\ntype SessionConnectionStatus = \"connected\" | \"needs reconnect\";\n\nasync function resolveSessionConnectionStatus(\n record: SessionRecord,\n): Promise<SessionConnectionStatus> {\n const health = await probeQueueOwnerHealth(record.acpxRecordId);\n return health.healthy ? \"connected\" : \"needs reconnect\";\n}\n\nexport function printSessionsByFormat(sessions: SessionRecord[], format: OutputFormat): void {\n if (format === \"json\") {\n process.stdout.write(`${JSON.stringify(sessions)}\\n`);\n return;\n }\n\n if (format === \"quiet\") {\n printQuietSessions(sessions);\n return;\n }\n\n if (sessions.length === 0) {\n process.stdout.write(\"No sessions\\n\");\n return;\n }\n\n for (const session of sessions) {\n const closedMarker = session.closed ? \" [closed]\" : \"\";\n process.stdout.write(\n `${session.acpxRecordId}${closedMarker}\\t${session.name ?? \"-\"}\\t${session.cwd}\\t${session.lastUsedAt}\\n`,\n );\n }\n}\n\nfunction printQuietSessions(sessions: SessionRecord[]): void {\n for (const session of sessions) {\n const closedMarker = session.closed ? \" [closed]\" : \"\";\n process.stdout.write(`${session.acpxRecordId}${closedMarker}\\n`);\n }\n}\n\nexport function printAgentSessionsByFormat(\n result: AgentSessionListResult,\n format: OutputFormat,\n): void {\n if (format === \"json\") {\n process.stdout.write(`${JSON.stringify(result)}\\n`);\n return;\n }\n\n if (format === \"quiet\") {\n printQuietAgentSessions(result);\n return;\n }\n\n printTextAgentSessions(result);\n}\n\nfunction printQuietAgentSessions(result: AgentSessionListResult): void {\n for (const session of result.sessions) {\n process.stdout.write(`${session.sessionId}\\n`);\n }\n}\n\nfunction printTextAgentSessions(result: AgentSessionListResult): void {\n if (result.sessions.length === 0) {\n process.stdout.write(\"No sessions\\n\");\n } else {\n for (const session of result.sessions) {\n const title = session.title ?? \"-\";\n const updatedAt = session.updatedAt ?? \"-\";\n const meta = session._meta ? JSON.stringify(session._meta) : \"-\";\n process.stdout.write(\n `${session.sessionId}\\t${title}\\t${session.cwd}\\t${updatedAt}\\t${meta}\\n`,\n );\n }\n }\n\n if (result.nextCursor) {\n process.stdout.write(`Next cursor: ${result.nextCursor}\\n`);\n }\n}\n\nexport function printClosedSessionByFormat(record: SessionRecord, format: OutputFormat): void {\n if (\n emitJsonResult(format, {\n action: \"session_closed\",\n acpxRecordId: record.acpxRecordId,\n acpxSessionId: record.acpSessionId,\n agentSessionId: record.agentSessionId,\n })\n ) {\n return;\n }\n\n if (format === \"quiet\") {\n return;\n }\n\n process.stdout.write(`${record.acpxRecordId}\\n`);\n}\n\nexport function printNewSessionByFormat(\n record: SessionRecord,\n replaced: SessionRecord | undefined,\n format: OutputFormat,\n): void {\n if (\n emitJsonResult(format, {\n action: \"session_ensured\",\n created: true,\n acpxRecordId: record.acpxRecordId,\n acpxSessionId: record.acpSessionId,\n agentSessionId: record.agentSessionId,\n name: record.name,\n replacedSessionId: replaced?.acpxRecordId,\n })\n ) {\n return;\n }\n\n if (format === \"quiet\") {\n process.stdout.write(`${record.acpxRecordId}\\n`);\n return;\n }\n\n if (replaced) {\n process.stdout.write(`${record.acpxRecordId}\\t(replaced ${replaced.acpxRecordId})\\n`);\n return;\n }\n\n process.stdout.write(`${record.acpxRecordId}\\n`);\n}\n\nexport function printEnsuredSessionByFormat(\n record: SessionRecord,\n created: boolean,\n format: OutputFormat,\n): void {\n if (\n emitJsonResult(format, {\n action: \"session_ensured\",\n created,\n acpxRecordId: record.acpxRecordId,\n acpxSessionId: record.acpSessionId,\n agentSessionId: record.agentSessionId,\n name: record.name,\n })\n ) {\n return;\n }\n\n if (format === \"quiet\") {\n process.stdout.write(`${record.acpxRecordId}\\n`);\n return;\n }\n\n const action = created ? \"created\" : \"existing\";\n process.stdout.write(`${record.acpxRecordId}\\t(${action})\\n`);\n}\n\nexport function printQueuedPromptByFormat(\n result: {\n sessionId: string;\n requestId: string;\n },\n format: OutputFormat,\n): void {\n if (\n emitJsonResult(format, {\n action: \"prompt_queued\",\n acpxRecordId: result.sessionId,\n requestId: result.requestId,\n })\n ) {\n return;\n }\n\n if (format === \"quiet\") {\n return;\n }\n\n process.stdout.write(`[queued] ${result.requestId}\\n`);\n}\n\nexport function formatPromptSessionBannerLine(\n record: SessionRecord,\n currentCwd: string,\n connectionStatus: SessionConnectionStatus = \"needs reconnect\",\n): string {\n const label = formatSessionLabel(record);\n const normalizedSessionCwd = path.resolve(record.cwd);\n const normalizedCurrentCwd = path.resolve(currentCwd);\n const routedFrom =\n normalizedSessionCwd === normalizedCurrentCwd\n ? undefined\n : formatRoutedFrom(normalizedSessionCwd, normalizedCurrentCwd);\n const status = connectionStatus;\n\n if (routedFrom) {\n return `[acpx] session ${label} (${record.acpxRecordId}) · ${normalizedSessionCwd} (routed from ${routedFrom}) · agent ${status}`;\n }\n\n return `[acpx] session ${label} (${record.acpxRecordId}) · ${normalizedSessionCwd} · agent ${status}`;\n}\n\nexport async function printPromptSessionBanner(\n record: SessionRecord,\n currentCwd: string,\n format: OutputFormat,\n jsonStrict = false,\n): Promise<void> {\n if (format === \"quiet\" || (jsonStrict && format === \"json\")) {\n return;\n }\n\n const status = await resolveSessionConnectionStatus(record);\n process.stderr.write(`${formatPromptSessionBannerLine(record, currentCwd, status)}\\n`);\n}\n\nexport function printCreatedSessionBanner(\n record: SessionRecord,\n agentName: string,\n format: OutputFormat,\n jsonStrict = false,\n): void {\n if (format === \"quiet\" || (jsonStrict && format === \"json\")) {\n return;\n }\n\n const label = formatSessionLabel(record);\n process.stderr.write(`[acpx] created session ${label} (${record.acpxRecordId})\\n`);\n process.stderr.write(`[acpx] agent: ${agentName}\\n`);\n process.stderr.write(`[acpx] cwd: ${record.cwd}\\n`);\n}\n\nfunction formatBytes(bytes: number): string {\n if (bytes >= 1_073_741_824) {\n return `${(bytes / 1_073_741_824).toFixed(1)} GB`;\n }\n if (bytes >= 1_048_576) {\n return `${(bytes / 1_048_576).toFixed(1)} MB`;\n }\n if (bytes >= 1024) {\n return `${(bytes / 1024).toFixed(1)} KB`;\n }\n return `${bytes} B`;\n}\n\nexport function printPruneResultByFormat(\n result: { pruned: SessionRecord[]; bytesFreed: number; dryRun: boolean },\n format: OutputFormat,\n): void {\n const count = result.pruned.length;\n\n if (emitPruneJsonResult(result, format, count)) {\n return;\n }\n\n if (format === \"quiet\") {\n printQuietPruneResult(result.pruned);\n return;\n }\n\n if (count === 0) {\n process.stdout.write(\n result.dryRun ? \"[DRY RUN] No sessions to prune\\n\" : \"No sessions pruned\\n\",\n );\n return;\n }\n\n process.stdout.write(`${formatPruneSummaryLine(result, count)}\\n`);\n\n for (const record of result.pruned) {\n const label = record.name ? ` (${record.name})` : \"\";\n process.stdout.write(\n ` ${record.acpxRecordId}${label}\\t${record.closedAt ?? record.lastUsedAt}\\n`,\n );\n }\n}\n\nfunction emitPruneJsonResult(\n result: { pruned: SessionRecord[]; bytesFreed: number; dryRun: boolean },\n format: OutputFormat,\n count: number,\n): boolean {\n return emitJsonResult(format, {\n action: result.dryRun ? \"sessions_prune_dry_run\" : \"sessions_pruned\",\n dryRun: result.dryRun,\n count,\n bytesFreed: result.bytesFreed,\n pruned: result.pruned.map((r) => r.acpxRecordId),\n });\n}\n\nfunction printQuietPruneResult(pruned: SessionRecord[]): void {\n for (const record of pruned) {\n process.stdout.write(`${record.acpxRecordId}\\n`);\n }\n}\n\nfunction formatPruneSummaryLine(\n result: { bytesFreed: number; dryRun: boolean },\n count: number,\n): string {\n const prefix = result.dryRun ? \"[DRY RUN] Would prune\" : \"Pruned\";\n const bytesSuffix =\n !result.dryRun && result.bytesFreed > 0 ? `, freed ${formatBytes(result.bytesFreed)}` : \"\";\n return `${prefix} ${count} session${count === 1 ? \"\" : \"s\"}${bytesSuffix}`;\n}\n\nexport function agentSessionIdPayload(agentSessionId: string | undefined): {\n agentSessionId?: string;\n} {\n const normalized = normalizeRuntimeSessionId(agentSessionId);\n if (!normalized) {\n return {};\n }\n\n return { agentSessionId: normalized };\n}\n","import { Command } from \"commander\";\nimport { findSession } from \"../session/persistence.js\";\nimport type { SessionRecord } from \"../types.js\";\nimport type { ResolvedAcpxConfig } from \"./config.js\";\nimport {\n addSessionNameOption,\n resolveAgentInvocation,\n resolveGlobalFlags,\n resolveSessionNameFromFlags,\n type StatusFlags,\n} from \"./flags.js\";\nimport { emitJsonResult } from \"./output/json-output.js\";\nimport { agentSessionIdPayload } from \"./output/render.js\";\nimport { probeQueueOwnerHealth } from \"./queue/ipc.js\";\n\ntype SessionStatusState = \"running\" | \"idle\" | \"dead\";\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\nfunction resolveStatusState(\n record: { lastAgentExitCode?: number | null; lastAgentExitSignal?: NodeJS.Signals | null },\n health: Awaited<ReturnType<typeof probeQueueOwnerHealth>>,\n): SessionStatusState {\n if (health.healthy) {\n return \"running\";\n }\n\n if (health.hasLease) {\n return \"dead\";\n }\n\n if (record.lastAgentExitSignal || (record.lastAgentExitCode ?? 0) !== 0) {\n return \"dead\";\n }\n\n return \"idle\";\n}\n\nfunction statusSummary(state: SessionStatusState): string {\n switch (state) {\n case \"running\":\n return \"queue owner healthy\";\n case \"idle\":\n return \"session idle; queue owner will start on next prompt\";\n case \"dead\":\n return \"queue owner unavailable\";\n }\n return \"queue owner unavailable\";\n}\n\nexport async 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 record = await findSession({\n agentCommand: agent.agentCommand,\n cwd: agent.cwd,\n name: resolveSessionNameFromFlags(flags, command),\n });\n\n if (!record) {\n printMissingStatus(globalFlags.format, agent.agentCommand);\n return;\n }\n\n await printSessionStatus(record, globalFlags.format);\n}\n\nfunction printMissingStatus(format: ResolvedAcpxConfig[\"format\"], agentCommand: string): void {\n if (\n emitJsonResult(format, {\n action: \"status_snapshot\",\n status: \"no-session\",\n summary: \"no active session\",\n })\n ) {\n return;\n }\n\n if (format === \"quiet\") {\n process.stdout.write(\"no-session\\n\");\n return;\n }\n\n process.stdout.write(\"session: -\\n\");\n process.stdout.write(`agent: ${agentCommand}\\n`);\n process.stdout.write(\"pid: -\\n\");\n process.stdout.write(\"status: no-session\\n\");\n process.stdout.write(\"model: -\\n\");\n process.stdout.write(\"mode: -\\n\");\n process.stdout.write(\"uptime: -\\n\");\n process.stdout.write(\"lastPromptTime: -\\n\");\n}\n\nasync function printSessionStatus(\n record: SessionRecord,\n format: ResolvedAcpxConfig[\"format\"],\n): Promise<void> {\n const health = await probeQueueOwnerHealth(record.acpxRecordId);\n const statusState = resolveStatusState(record, health);\n const payload = createStatusPayload(record, health, statusState);\n const running = isRunningStatus(statusState);\n const dead = isDeadStatus(statusState);\n\n if (emitStatusJson(format, record, payload, statusState, running, dead)) {\n return;\n }\n\n if (format === \"quiet\") {\n process.stdout.write(`${payload.status}\\n`);\n return;\n }\n\n printTextStatus(payload, dead);\n}\n\nfunction createStatusPayload(\n record: SessionRecord,\n health: Awaited<ReturnType<typeof probeQueueOwnerHealth>>,\n statusState: SessionStatusState,\n): StatusPayload {\n const running = isRunningStatus(statusState);\n const acpx = statusAcpxFields(record);\n return {\n sessionId: record.acpxRecordId,\n agentCommand: record.agentCommand,\n pid: statusPid(health),\n status: statusState,\n model: acpx.model,\n mode: acpx.mode,\n availableModels: acpx.availableModels,\n uptime: running ? optionalStatusString(formatUptime(record.agentStartedAt)) : null,\n lastPromptTime: optionalStatusString(record.lastPromptAt),\n exitCode: running ? null : optionalStatusNumber(record.lastAgentExitCode),\n signal: running ? null : optionalStatusSignal(record.lastAgentExitSignal),\n ...agentSessionIdPayload(record.agentSessionId),\n };\n}\n\nfunction statusAcpxFields(record: SessionRecord): {\n model: string | null;\n mode: string | null;\n availableModels: string[] | null;\n} {\n return {\n model: record.acpx?.current_model_id ?? null,\n mode: record.acpx?.current_mode_id ?? null,\n availableModels: record.acpx?.available_models ?? null,\n };\n}\n\nfunction statusPid(health: Awaited<ReturnType<typeof probeQueueOwnerHealth>>): number | null {\n if (health.pidAlive) {\n return health.pid ?? null;\n }\n return null;\n}\n\nfunction optionalStatusString(value: string | undefined | null): string | null {\n return value ?? null;\n}\n\nfunction optionalStatusNumber(value: number | undefined | null): number | null {\n return value ?? null;\n}\n\nfunction optionalStatusSignal(value: NodeJS.Signals | undefined | null): NodeJS.Signals | null {\n return value ?? null;\n}\n\nfunction isRunningStatus(status: SessionStatusState): boolean {\n return status === \"running\";\n}\n\nfunction isDeadStatus(status: SessionStatusState): boolean {\n return status === \"dead\";\n}\n\ntype StatusPayload = {\n sessionId: string;\n agentCommand: string;\n pid: number | null;\n status: SessionStatusState;\n model: string | null;\n mode: string | null;\n availableModels: string[] | null;\n uptime: string | null;\n lastPromptTime: string | null;\n exitCode: number | null;\n signal: NodeJS.Signals | null;\n agentSessionId?: string;\n};\n\nfunction emitStatusJson(\n format: ResolvedAcpxConfig[\"format\"],\n record: SessionRecord,\n payload: StatusPayload,\n statusState: SessionStatusState,\n running: boolean,\n dead: boolean,\n): boolean {\n return emitJsonResult(format, statusJsonPayload(record, payload, statusState, running, dead));\n}\n\nfunction statusJsonPayload(\n record: SessionRecord,\n payload: StatusPayload,\n statusState: SessionStatusState,\n running: boolean,\n dead: boolean,\n): Record<string, unknown> {\n const result: Record<string, unknown> = {\n action: \"status_snapshot\",\n status: running ? \"alive\" : statusState,\n summary: statusSummary(statusState),\n acpxRecordId: record.acpxRecordId,\n acpxSessionId: record.acpSessionId,\n agentSessionId: record.agentSessionId,\n };\n assignDefinedJsonField(result, \"pid\", payload.pid);\n assignDefinedJsonField(result, \"model\", payload.model);\n assignDefinedJsonField(result, \"mode\", payload.mode);\n assignDefinedJsonField(result, \"availableModels\", payload.availableModels);\n assignDefinedJsonField(result, \"uptime\", payload.uptime);\n assignDefinedJsonField(result, \"lastPromptTime\", payload.lastPromptTime);\n if (dead) {\n assignDefinedJsonField(result, \"exitCode\", payload.exitCode);\n assignDefinedJsonField(result, \"signal\", payload.signal);\n }\n return result;\n}\n\nfunction assignDefinedJsonField(\n target: Record<string, unknown>,\n key: string,\n value: unknown,\n): void {\n if (value !== null && value !== undefined) {\n target[key] = value;\n }\n}\n\nfunction printTextStatus(payload: StatusPayload, dead: boolean): void {\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(`model: ${payload.model ?? \"-\"}\\n`);\n process.stdout.write(`mode: ${payload.mode ?? \"-\"}\\n`);\n process.stdout.write(`uptime: ${payload.uptime ?? \"-\"}\\n`);\n process.stdout.write(`lastPromptTime: ${payload.lastPromptTime ?? \"-\"}\\n`);\n if (dead) {\n printDeadStatusDetails(payload);\n }\n}\n\nfunction printDeadStatusDetails(payload: StatusPayload): void {\n process.stdout.write(`exitCode: ${payload.exitCode ?? \"-\"}\\n`);\n process.stdout.write(`signal: ${payload.signal ?? \"-\"}\\n`);\n}\n\nexport function registerStatusCommand(\n parent: Command,\n explicitAgentName: string | undefined,\n config: ResolvedAcpxConfig,\n description: string,\n): void {\n const statusCommand = parent.command(\"status\").description(description);\n addSessionNameOption(statusCommand);\n statusCommand.action(async function (this: Command, flags: StatusFlags) {\n await handleStatus(explicitAgentName, flags, this, config);\n });\n}\n","import { Command, Option } from \"commander\";\nimport { DEFAULT_HISTORY_LIMIT } from \"../session/persistence.js\";\nimport {\n handleCancel,\n handleExec,\n handlePrompt,\n handleSessionsClose,\n handleSessionsEnsure,\n handleSessionsExport,\n handleSessionsHistory,\n handleSessionsImport,\n handleSessionsList,\n handleSessionsNew,\n handleSessionsPrune,\n handleSessionsShow,\n handleSetConfigOption,\n handleSetMode,\n parseHistoryLimit,\n} from \"./command-handlers.js\";\nimport { registerConfigCommand } from \"./config-command.js\";\nimport type { ResolvedAcpxConfig } from \"./config.js\";\nimport {\n addPromptInputOption,\n addSessionNameOption,\n addSessionOption,\n parseDaysOlderThan,\n parseNonEmptyValue,\n parsePruneBeforeDate,\n parseSessionName,\n type PromptFlags,\n type SessionsExportFlags,\n type SessionsHistoryFlags,\n type SessionsImportFlags,\n type SessionsListFlags,\n type SessionsNewFlags,\n type SessionsPruneFlags,\n type StatusFlags,\n} from \"./flags.js\";\nimport { registerStatusCommand } from \"./status-command.js\";\n\ntype FlowRunFlags = {\n inputJson?: string;\n inputFile?: string;\n defaultAgent?: string;\n};\n\ntype SharedSubcommandDescriptions = {\n prompt: string;\n exec: string;\n cancel: string;\n setMode: string;\n setConfig: string;\n status: string;\n};\n\nclass LocalAttributeOption extends Option {\n constructor(\n flags: string,\n description: string,\n private readonly localAttributeName: string,\n ) {\n super(flags, description);\n }\n\n override attributeName(): string {\n return this.localAttributeName;\n }\n}\n\nfunction addSessionsListOptions(command: Command): Command {\n return command\n .option(\"--local\", \"List local acpx session records instead of agent protocol sessions\")\n .option(\"--cursor <cursor>\", \"Opaque ACP session/list cursor\", (value: string) =>\n parseNonEmptyValue(\"Cursor\", value),\n )\n .option(\"--filter-cwd <dir>\", \"Filter agent sessions by working directory\", (value: string) =>\n parseNonEmptyValue(\"Filter cwd\", value),\n );\n}\n\nexport function 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 addSessionsListOptions(sessionsCommand);\n\n sessionsCommand.action(async function (this: Command, flags: SessionsListFlags) {\n await handleSessionsList(explicitAgentName, flags, this, config);\n });\n\n addSessionsListOptions(sessionsCommand.command(\"list\"))\n .description(\"List sessions\")\n .action(async function (this: Command, flags: SessionsListFlags) {\n await handleSessionsList(explicitAgentName, flags, this, config);\n });\n\n sessionsCommand\n .command(\"new\")\n .description(\"Create a fresh session for current cwd\")\n .option(\"-s, --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(\"-s, --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: ${DEFAULT_HISTORY_LIMIT})`,\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 sessionsCommand\n .command(\"export\")\n .description(\"Export a portable session archive\")\n .argument(\"[name]\", \"Session name\", parseSessionName)\n .requiredOption(\"--output <path>\", \"Output archive path\", (value: string) =>\n parseNonEmptyValue(\"Output path\", value),\n )\n .addOption(\n new LocalAttributeOption(\"--cwd <cwd>\", \"Session cwd to export\", \"sourceCwd\").argParser(\n (value: string) => parseNonEmptyValue(\"Session cwd\", value),\n ),\n )\n .action(async function (this: Command, name: string | undefined, flags: SessionsExportFlags) {\n await handleSessionsExport(explicitAgentName, name, flags, this, config);\n });\n\n sessionsCommand\n .command(\"import\")\n .description(\"Import a portable session archive\")\n .argument(\"<archive-path>\", \"Archive path\", (value: string) =>\n parseNonEmptyValue(\"Archive path\", value),\n )\n .option(\"--name <name>\", \"Imported session name\", parseSessionName)\n .addOption(\n new LocalAttributeOption(\"--cwd <cwd>\", \"Imported session cwd\", \"destinationCwd\").argParser(\n (value: string) => parseNonEmptyValue(\"Imported session cwd\", value),\n ),\n )\n .action(async function (this: Command, archivePath: string, flags: SessionsImportFlags) {\n await handleSessionsImport(explicitAgentName, archivePath, flags, this, config);\n });\n\n sessionsCommand\n .command(\"prune\")\n .description(\"Delete closed sessions and free disk space\")\n .option(\"--dry-run\", \"Preview what would be pruned without deleting anything\")\n .option(\"--before <date>\", \"Prune sessions closed before this date\", parsePruneBeforeDate)\n .option(\"--older-than <days>\", \"Prune sessions closed more than N days ago\", parseDaysOlderThan)\n .option(\"--include-history\", \"Also delete event stream files (.stream.ndjson)\")\n .action(async function (this: Command, flags: SessionsPruneFlags) {\n await handleSessionsPrune(explicitAgentName, flags, this, config);\n });\n}\n\nexport function 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) {\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 registerStatusCommand(parent, explicitAgentName, config, descriptions.status);\n}\n\nexport function 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\nexport function registerFlowCommand(program: Command, config: ResolvedAcpxConfig): void {\n const flowCommand = program\n .command(\"flow\")\n .description(\"Run multi-step ACP workflows from flow files\");\n\n flowCommand\n .command(\"run\")\n .description(\"Run a flow file\")\n .argument(\"<file>\", \"Flow module path\")\n .option(\"--input-json <json>\", \"Flow input as JSON\")\n .option(\"--input-file <path>\", \"Read flow input JSON from file\")\n .option(\n \"--default-agent <name>\",\n \"Default agent profile for ACP nodes without profile\",\n (value: string) => parseNonEmptyValue(\"Default agent\", value),\n )\n .action(async function (this: Command, file: string, flags: FlowRunFlags) {\n const { handleFlowRun } = await import(\"../flows/cli.js\");\n await handleFlowRun(file, flags, this, config);\n });\n}\n\nexport function 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 registerFlowCommand(program, config);\n}\n","import { parseOptionalMcpServers } from \"../../mcp-servers.js\";\nimport {\n runSessionQueueOwner,\n type QueueOwnerRuntimeOptions,\n} from \"../session/queue-owner-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 assignQueueOwnerTransportOptions(options, record);\n assignQueueOwnerScalarOptions(options, record);\n assignQueueOwnerSessionOptions(options, record.sessionOptions);\n\n return options;\n}\n\nfunction assignQueueOwnerTransportOptions(\n options: QueueOwnerRuntimeOptions,\n record: UnknownRecord,\n): void {\n const parsedMcpServers = parseOptionalMcpServers(record.mcpServers, \"queue owner payload\");\n if (parsedMcpServers) {\n options.mcpServers = parsedMcpServers;\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\nfunction assignQueueOwnerScalarOptions(\n options: QueueOwnerRuntimeOptions,\n record: UnknownRecord,\n): void {\n if (record.nonInteractivePermissions === \"deny\" || record.nonInteractivePermissions === \"fail\") {\n options.nonInteractivePermissions = record.nonInteractivePermissions;\n }\n if (record.authPolicy === \"skip\" || record.authPolicy === \"fail\") {\n options.authPolicy = record.authPolicy;\n }\n assignBooleanOption(options, \"terminal\", record.terminal);\n assignBooleanOption(options, \"suppressSdkConsoleErrors\", record.suppressSdkConsoleErrors);\n assignBooleanOption(options, \"verbose\", record.verbose);\n assignFiniteNumberOption(options, \"ttlMs\", record.ttlMs);\n assignRoundedNumberOption(options, \"maxQueueDepth\", record.maxQueueDepth, 1);\n assignRoundedNumberOption(options, \"promptRetries\", record.promptRetries, 0);\n}\n\nfunction assignBooleanOption(\n options: QueueOwnerRuntimeOptions,\n key: \"terminal\" | \"suppressSdkConsoleErrors\" | \"verbose\",\n value: unknown,\n): void {\n if (typeof value === \"boolean\") {\n options[key] = value;\n }\n}\n\nfunction assignFiniteNumberOption(\n options: QueueOwnerRuntimeOptions,\n key: \"ttlMs\",\n value: unknown,\n): void {\n if (typeof value === \"number\" && Number.isFinite(value)) {\n options[key] = value;\n }\n}\n\nfunction assignRoundedNumberOption(\n options: QueueOwnerRuntimeOptions,\n key: \"maxQueueDepth\" | \"promptRetries\",\n value: unknown,\n min: number,\n): void {\n if (typeof value === \"number\" && Number.isFinite(value)) {\n options[key] = Math.max(min, Math.round(value));\n }\n}\n\nfunction assignQueueOwnerSessionOptions(\n options: QueueOwnerRuntimeOptions,\n rawSessionOptions: unknown,\n): void {\n const sessionOpts = asRecord(rawSessionOptions);\n if (!sessionOpts) {\n return;\n }\n\n options.sessionOptions = {};\n assignSessionModel(options.sessionOptions, sessionOpts.model);\n assignSessionAllowedTools(options.sessionOptions, sessionOpts.allowedTools);\n assignSessionMaxTurns(options.sessionOptions, sessionOpts.maxTurns);\n assignSessionSystemPrompt(options.sessionOptions, sessionOpts.systemPrompt);\n}\n\nfunction assignSessionModel(\n options: NonNullable<QueueOwnerRuntimeOptions[\"sessionOptions\"]>,\n value: unknown,\n): void {\n if (typeof value === \"string\" && value.trim().length > 0) {\n options.model = value;\n }\n}\n\nfunction assignSessionAllowedTools(\n options: NonNullable<QueueOwnerRuntimeOptions[\"sessionOptions\"]>,\n value: unknown,\n): void {\n if (Array.isArray(value)) {\n options.allowedTools = value.filter((tool): tool is string => typeof tool === \"string\");\n }\n}\n\nfunction assignSessionMaxTurns(\n options: NonNullable<QueueOwnerRuntimeOptions[\"sessionOptions\"]>,\n value: unknown,\n): void {\n if (typeof value === \"number\" && Number.isFinite(value)) {\n options.maxTurns = Math.max(1, Math.round(value));\n }\n}\n\nfunction assignSessionSystemPrompt(\n options: NonNullable<QueueOwnerRuntimeOptions[\"sessionOptions\"]>,\n value: unknown,\n): void {\n if (typeof value === \"string\") {\n options.systemPrompt = value;\n return;\n }\n\n const systemPrompt = asRecord(value);\n if (typeof systemPrompt?.append === \"string\") {\n options.systemPrompt = { append: systemPrompt.append };\n }\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 envVersion = resolvePackageEnvVersion(params?.env ?? process.env);\n if (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\nfunction resolvePackageEnvVersion(env: NodeJS.ProcessEnv): string | null {\n const envPackageName = parseVersion(env.npm_package_name);\n const envVersion = parseVersion(env.npm_package_version);\n return envPackageName === \"acpx\" ? envVersion : null;\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 path from \"node:path\";\nimport { Command, CommanderError } from \"commander\";\nimport {\n exitCodeForOutputErrorCode,\n normalizeOutputError,\n type NormalizedOutputError,\n} from \"./acp/error-normalization.js\";\nimport { listBuiltInAgents } from \"./agent-registry.js\";\nimport { InterruptedError } from \"./async-control.js\";\nimport { configurePublicCli } from \"./cli-public.js\";\nimport { handlePrompt } from \"./cli/command-handlers.js\";\nimport { registerAgentCommand, registerDefaultCommands } from \"./cli/command-registration.js\";\nimport { loadResolvedConfig } from \"./cli/config.js\";\nimport {\n addGlobalFlags,\n parseAllowedTools,\n parseMaxTurns,\n parseTtlSeconds,\n resolveOutputPolicy,\n} from \"./cli/flags.js\";\nimport { createOutputFormatter, getTextErrorRemediationHints } from \"./cli/output/output.js\";\nimport { runQueueOwnerFromEnv } from \"./cli/queue/owner-env.js\";\nimport { flushPerfMetricsCapture, installPerfMetricsCapture } from \"./perf-metrics-capture.js\";\nimport { EXIT_CODES, OUTPUT_FORMATS, type OutputFormat, type OutputPolicy } from \"./types.js\";\nimport { getAcpxVersion } from \"./version.js\";\n\nexport { parseAllowedTools, parseMaxTurns, parseTtlSeconds };\nexport { formatPromptSessionBannerLine } from \"./cli/output/render.js\";\n\ntype SkillflagModule = typeof import(\"skillflag\");\n\nconst TOP_LEVEL_VERBS = new Set([\n \"prompt\",\n \"exec\",\n \"cancel\",\n \"flow\",\n \"set-mode\",\n \"set\",\n \"sessions\",\n \"status\",\n \"config\",\n \"help\",\n]);\n\nconst TOP_LEVEL_VERSION_VALUE_FLAG_VALUES = [\n \"--agent\",\n \"--cwd\",\n \"--auth-policy\",\n \"--non-interactive-permissions\",\n \"--permission-policy\",\n \"--policy\",\n \"--format\",\n \"--model\",\n \"--allowed-tools\",\n \"--max-turns\",\n \"--system-prompt\",\n \"--append-system-prompt\",\n \"--prompt-retries\",\n \"--timeout\",\n \"--ttl\",\n] as const;\n\nconst TOP_LEVEL_VERSION_VALUE_FLAGS = new Set<string>(TOP_LEVEL_VERSION_VALUE_FLAG_VALUES);\n\nconst TOP_LEVEL_VERSION_BOOLEAN_FLAGS = new Set([\n \"--approve-all\",\n \"--approve-reads\",\n \"--deny-all\",\n \"--suppress-reads\",\n \"--json-strict\",\n \"--no-terminal\",\n \"--verbose\",\n]);\n\nconst AGENT_SCAN_VALUE_FLAG_VALUES = [...TOP_LEVEL_VERSION_VALUE_FLAG_VALUES, \"--file\"] as const;\n\nconst AGENT_SCAN_VALUE_FLAGS = new Set<string>(AGENT_SCAN_VALUE_FLAG_VALUES);\n\nconst AGENT_SCAN_BOOLEAN_FLAGS = new Set<string>(TOP_LEVEL_VERSION_BOOLEAN_FLAGS);\n\nlet skillflagModulePromise: Promise<SkillflagModule> | undefined;\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\ntype AgentTokenScan = {\n token?: string;\n hasAgentOverride: boolean;\n};\n\ntype AgentTokenStep = {\n result?: AgentTokenScan;\n indexDelta: number;\n hasAgentOverride?: true;\n};\n\ntype AgentTokenFlagScan = \"agent-value\" | \"skip-next\" | \"skip\" | \"unknown\";\n\nfunction matchesLongFlagValue(token: string, flags: Iterable<string>): boolean {\n for (const flag of flags) {\n if (token.startsWith(`${flag}=`)) {\n return true;\n }\n }\n return false;\n}\n\nfunction classifyAgentTokenFlag(token: string): AgentTokenFlagScan {\n if (token === \"--agent\" || token.startsWith(\"--agent=\")) {\n return \"agent-value\";\n }\n if (AGENT_SCAN_VALUE_FLAGS.has(token)) {\n return \"skip-next\";\n }\n if (\n AGENT_SCAN_BOOLEAN_FLAGS.has(token) ||\n matchesLongFlagValue(token, AGENT_SCAN_VALUE_FLAGS) ||\n token.startsWith(\"--json-strict=\")\n ) {\n return \"skip\";\n }\n return \"unknown\";\n}\n\nfunction scanAgentTokenStep(token: string, hasAgentOverride: boolean): AgentTokenStep {\n if (token === \"--\") {\n return { result: { hasAgentOverride }, indexDelta: 0 };\n }\n if (!token.startsWith(\"-\") || token === \"-\") {\n return { result: { token, hasAgentOverride }, indexDelta: 0 };\n }\n\n const flagScan = classifyAgentTokenFlag(token);\n if (flagScan === \"agent-value\") {\n return { indexDelta: token === \"--agent\" ? 1 : 0, hasAgentOverride: true };\n }\n if (flagScan === \"skip-next\") {\n return { indexDelta: 1 };\n }\n if (flagScan === \"skip\") {\n return { indexDelta: 0 };\n }\n return { result: { hasAgentOverride }, indexDelta: 0 };\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 const step = scanAgentTokenStep(token, hasAgentOverride);\n if (step.result) {\n return step.result;\n }\n if (step.hasAgentOverride) {\n hasAgentOverride = true;\n }\n index += step.indexDelta;\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\n if (token === \"--cwd\") {\n const next = argv[index + 1];\n if (next && next !== \"--\") {\n return path.resolve(next);\n }\n break;\n }\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\n if (token === \"--\") {\n break;\n }\n }\n\n return process.cwd();\n}\n\nfunction detectRequestedOutputFormat(argv: string[], fallback: OutputFormat): OutputFormat {\n let detectedFormat = fallback;\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 (isJsonStrictToken(token)) {\n return \"json\";\n }\n\n const format = readFormatFlagValue(token, argv[index + 1]);\n if (format) {\n detectedFormat = format;\n }\n }\n\n return detectedFormat;\n}\n\nfunction readFormatFlagValue(\n token: string,\n nextToken: string | undefined,\n): OutputFormat | undefined {\n const raw = token === \"--format\" ? nextToken : readInlineFlagValue(token, \"--format\");\n return isOutputFormat(raw) ? raw : undefined;\n}\n\nfunction readInlineFlagValue(token: string, flag: string): string | undefined {\n if (!token.startsWith(`${flag}=`)) {\n return undefined;\n }\n return token.slice(flag.length + 1).trim();\n}\n\nfunction isOutputFormat(value: unknown): value is OutputFormat {\n return typeof value === \"string\" && OUTPUT_FORMATS.includes(value as OutputFormat);\n}\n\nfunction isJsonStrictToken(token: string): boolean {\n return token === \"--json-strict\" || token.startsWith(\"--json-strict=\");\n}\n\nfunction detectJsonStrict(argv: string[]): boolean {\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 (isJsonStrictToken(token)) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction shouldSkipTopLevelVersionToken(token: string): boolean {\n return (\n matchesLongFlagValue(token, TOP_LEVEL_VERSION_VALUE_FLAG_VALUES) ||\n TOP_LEVEL_VERSION_BOOLEAN_FLAGS.has(token)\n );\n}\n\nfunction topLevelVersionTokenDecision(token: string): \"version\" | \"stop\" | \"skip-next\" | \"skip\" {\n if (token === \"--version\" || token === \"-V\") {\n return \"version\";\n }\n if (!token.startsWith(\"-\") || token === \"-\") {\n return \"stop\";\n }\n if (TOP_LEVEL_VERSION_VALUE_FLAGS.has(token)) {\n return \"skip-next\";\n }\n if (shouldSkipTopLevelVersionToken(token)) {\n return \"skip\";\n }\n return \"stop\";\n}\n\nfunction isTopLevelVersionRequest(argv: string[]): boolean {\n for (let index = 0; index < argv.length; index += 1) {\n const token = argv[index];\n\n if (token === \"--\") {\n return false;\n }\n\n const decision = topLevelVersionTokenDecision(token);\n if (decision === \"version\") {\n return true;\n }\n if (decision === \"stop\") {\n return false;\n }\n if (decision === \"skip-next\") {\n index += 1;\n }\n }\n\n return false;\n}\n\nasync function emitJsonErrorEvent(error: NormalizedOutputError): Promise<void> {\n const formatter = createOutputFormatter(\"json\", {\n jsonContext: {\n sessionId: \"unknown\",\n },\n suppressReads: false,\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\n if (outputPolicy.format === \"json\") {\n await emitJsonErrorEvent(normalized);\n return;\n }\n\n if (!outputPolicy.suppressNonJsonStderr) {\n process.stderr.write(`${normalized.message}\\n`);\n if (outputPolicy.format === \"text\") {\n for (const hint of getTextErrorRemediationHints(normalized)) {\n process.stderr.write(`${hint}\\n`);\n }\n }\n }\n}\n\nasync function runWithOutputPolicy<T>(\n _outputPolicy: OutputPolicy,\n run: () => Promise<T>,\n): Promise<T> {\n return await run();\n}\n\nasync function handleQueueOwnerCommand(argv: string[]): Promise<boolean> {\n installPerfMetricsCapture({\n argv: argv.slice(2),\n role: argv[2] === \"__queue-owner\" ? \"queue_owner\" : \"cli\",\n });\n\n if (argv[2] !== \"__queue-owner\") {\n return false;\n }\n\n try {\n await runQueueOwnerFromEnv(process.env);\n return true;\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 return true;\n }\n}\n\nasync function maybeHandleSkillflag(argv: string[]): Promise<void> {\n if (!shouldMaybeHandleSkillflag(argv)) {\n return;\n }\n\n const { findSkillsRoot, maybeHandleSkillflag } = await loadSkillflagModule();\n await maybeHandleSkillflag(argv, {\n skillsRoot: findSkillsRoot(import.meta.url),\n includeBundledSkill: false,\n });\n}\n\nfunction createProgram(requestedJsonStrict: boolean): Command {\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 return program;\n}\n\nasync function handleProgramParseError(\n error: unknown,\n requestedOutputPolicy: OutputPolicy,\n): Promise<never> {\n if (error instanceof CommanderError) {\n if (error.code === \"commander.helpDisplayed\" || error.code === \"commander.version\") {\n process.exit(EXIT_CODES.SUCCESS);\n }\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\nexport async function main(argv: string[] = process.argv): Promise<void> {\n const rawArgs = normalizeLifecycleScriptArgs(argv.slice(2));\n const normalizedArgv = [argv[0] ?? \"node\", argv[1] ?? \"acpx\", ...rawArgs];\n\n if (await handleQueueOwnerCommand(argv)) {\n return;\n }\n\n if (isTopLevelVersionRequest(rawArgs)) {\n process.stdout.write(`${getAcpxVersion()}\\n`);\n return;\n }\n\n await maybeHandleSkillflag(normalizedArgv);\n\n const config = await loadResolvedConfig(detectInitialCwd(rawArgs));\n const requestedJsonStrict = detectJsonStrict(rawArgs);\n const requestedOutputFormat = detectRequestedOutputFormat(rawArgs, config.format);\n const requestedOutputPolicy = {\n ...resolveOutputPolicy(requestedOutputFormat, requestedJsonStrict),\n suppressReads: rawArgs.some((token) => token === \"--suppress-reads\"),\n };\n\n const program = createProgram(requestedJsonStrict);\n\n addGlobalFlags(program);\n\n configurePublicCli({\n program,\n argv: rawArgs,\n config,\n requestedJsonStrict,\n topLevelVerbs: TOP_LEVEL_VERBS,\n listBuiltInAgents,\n detectAgentToken,\n registerAgentCommand,\n registerDefaultCommands,\n handlePromptAction: async (command, promptParts) => {\n await handlePrompt(undefined, promptParts, {}, command, config);\n },\n });\n\n program.exitOverride((error) => {\n throw error;\n });\n\n try {\n await runWithOutputPolicy(requestedOutputPolicy, async () => {\n try {\n await program.parseAsync(normalizedArgv);\n } catch (error) {\n await handleProgramParseError(error, requestedOutputPolicy);\n }\n });\n } finally {\n flushPerfMetricsCapture();\n }\n}\n\nfunction normalizeLifecycleScriptArgs(rawArgs: string[]): string[] {\n if (\n rawArgs[0] === \"--\" &&\n (process.env.npm_lifecycle_event || process.env.npm_lifecycle_script)\n ) {\n return rawArgs.slice(1);\n }\n return rawArgs;\n}\n","#!/usr/bin/env node\n\nimport { realpathSync } from \"node:fs\";\nimport { fileURLToPath, pathToFileURL } from \"node:url\";\nimport { main } from \"./cli-core.js\";\nimport { buildQueueOwnerArgOverride } from \"./cli/session/queue-owner-process.js\";\n\nexport { formatPromptSessionBannerLine } from \"./cli-core.js\";\nexport { parseAllowedTools, parseMaxTurns, parseTtlSeconds } from \"./cli/flags.js\";\n\nfunction installBrokenPipeHandler(stream: NodeJS.WritableStream): void {\n stream.on(\"error\", (error: NodeJS.ErrnoException) => {\n if (error.code === \"EPIPE\") {\n process.exit(0);\n }\n\n throw error;\n });\n}\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 installBrokenPipeHandler(process.stdout);\n installBrokenPipeHandler(process.stderr);\n\n const queueOwnerArgOverride = buildQueueOwnerArgOverride(fileURLToPath(import.meta.url));\n if (queueOwnerArgOverride) {\n process.env.ACPX_QUEUE_OWNER_ARGS ??= queueOwnerArgOverride;\n }\n\n void main(process.argv);\n}\n"],"mappings":"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"}
|