acpx 0.5.0 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{cli-CLRrs6eQ.js → cli-DZjj5kij.js} +4 -4
- package/dist/{cli-CLRrs6eQ.js.map → cli-DZjj5kij.js.map} +1 -1
- package/dist/cli.d.ts +1 -1
- package/dist/cli.js +11 -12
- package/dist/cli.js.map +1 -1
- package/dist/{client-DLTWuu4w.d.ts → client-S8QicFBT.d.ts} +5 -2
- package/dist/{client-DLTWuu4w.d.ts.map → client-S8QicFBT.d.ts.map} +1 -1
- package/dist/{flags-BmubjvOw.js → flags-W3vEVSiS.js} +4 -4
- package/dist/{flags-BmubjvOw.js.map → flags-W3vEVSiS.js.map} +1 -1
- package/dist/{flows-CR7xCmkR.js → flows-CLQYpPh7.js} +5 -5
- package/dist/{flows-CR7xCmkR.js.map → flows-CLQYpPh7.js.map} +1 -1
- package/dist/flows.d.ts +1 -1
- package/dist/flows.js +1 -1
- package/dist/{ipc-DN6M4Ui9.js → ipc-BM335WFg.js} +3 -3
- package/dist/{ipc-DN6M4Ui9.js.map → ipc-BM335WFg.js.map} +1 -1
- package/dist/{jsonrpc-M3y-qzy8.js → jsonrpc-DSxh2w5R.js} +1 -1
- package/dist/{jsonrpc-M3y-qzy8.js.map → jsonrpc-DSxh2w5R.js.map} +1 -1
- package/dist/{output-Di0M9Et8.js → output-C4QhjpM6.js} +2 -2
- package/dist/{output-Di0M9Et8.js.map → output-C4QhjpM6.js.map} +1 -1
- package/dist/{perf-metrics-D9QC81lB.js → perf-metrics-D0um6IR6.js} +22 -2
- package/dist/perf-metrics-D0um6IR6.js.map +1 -0
- package/dist/{prompt-turn-Bt8T3SRR.js → prompt-turn-CbSSNHjk.js} +257 -28
- package/dist/prompt-turn-CbSSNHjk.js.map +1 -0
- package/dist/{render-BL5ynRkN.js → render-Br-kVPK_.js} +3 -3
- package/dist/{render-BL5ynRkN.js.map → render-Br-kVPK_.js.map} +1 -1
- package/dist/runtime.d.ts +3 -2
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +2 -3
- package/dist/runtime.js.map +1 -1
- package/dist/{session-BbN0SBgf.js → session-BiBN0BvM.js} +5 -5
- package/dist/{session-BbN0SBgf.js.map → session-BiBN0BvM.js.map} +1 -1
- package/dist/{types-DXxLBQc3.d.ts → types-Cgigsj1X.d.ts} +1 -1
- package/dist/{types-DXxLBQc3.d.ts.map → types-Cgigsj1X.d.ts.map} +1 -1
- package/package.json +1 -1
- package/dist/agent-registry-DGw0-3Tc.js +0 -54
- package/dist/agent-registry-DGw0-3Tc.js.map +0 -1
- package/dist/perf-metrics-D9QC81lB.js.map +0 -1
- package/dist/prompt-turn-Bt8T3SRR.js.map +0 -1
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","names":["fs","asRecord","fs"],"sources":["../src/cli-public.ts","../src/acp/codex-compat.ts","../src/cli/command-handlers.ts","../src/mcp-servers.ts","../src/cli/config.ts","../src/cli/config-command.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 thought_level high\n acpx codex -s backend \"fix the API\"\n acpx codex sessions\n acpx codex sessions new --name backend\n acpx codex sessions ensure --name backend\n acpx codex sessions close backend\n acpx codex status\n acpx config show\n acpx config init\n acpx --ttl 30 codex \"investigate flaky tests\"\n acpx claude \"refactor auth\"\n acpx --agent ./my-custom-server \"do something\"`,\n );\n}\n","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 isCodexInvocation(agentName: string, agentCommand: string): boolean {\n if (agentName === \"codex\") {\n return true;\n }\n\n return /\\bcodex-acp\\b/u.test(agentCommand);\n}\n","import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { Command, InvalidArgumentError } from \"commander\";\nimport { isCodexInvocation } from \"../acp/codex-compat.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} 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 PromptFlags,\n type SessionsHistoryFlags,\n type SessionsNewFlags,\n type StatusFlags,\n} from \"./flags.js\";\nimport { emitJsonResult } from \"./output/json-output.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 const source =\n filePath === \"-\"\n ? await readPromptInputFromStdin()\n : await fs.readFile(path.resolve(cwd, filePath), \"utf8\");\n const prompt = mergePromptSourceWithText(source, promptParts.join(\" \"));\n if (prompt.length === 0) {\n throw new InvalidArgumentError(\"Prompt from --file is empty\");\n }\n return prompt;\n }\n\n const joined = promptParts.join(\" \").trim();\n if (joined.length > 0) {\n return textPrompt(joined);\n }\n\n if (process.stdin.isTTY) {\n throw new InvalidArgumentError(\n \"Prompt is required (pass as argument, --file, or pipe via stdin)\",\n );\n }\n\n const prompt = parsePromptSource(await readPromptInputFromStdin());\n if (prompt.length === 0) {\n throw new InvalidArgumentError(\"Prompt from stdin is empty\");\n }\n\n return prompt;\n } catch (error) {\n if (error instanceof PromptInputValidationError) {\n throw new InvalidArgumentError(error.message);\n }\n throw error;\n }\n}\n\nfunction applyPermissionExitCode(result: {\n permissionStats: {\n requested: number;\n approved: number;\n denied: number;\n cancelled: number;\n };\n}): void {\n const stats = result.permissionStats;\n const deniedOrCancelled = stats.denied + stats.cancelled;\n\n if (stats.requested > 0 && stats.approved === 0 && deniedOrCancelled > 0) {\n process.exitCode = EXIT_CODES.PERMISSION_DENIED;\n }\n}\n\nfunction resolveCompatibleConfigId(\n agent: { agentName: string; agentCommand: string },\n configId: string,\n): string {\n if (isCodexInvocation(agent.agentName, 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\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 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 authCredentials: config.auth,\n authPolicy: globalFlags.authPolicy,\n outputFormatter,\n errorEmissionPolicy: {\n queueErrorAlreadyEmitted: outputPolicy.queueErrorAlreadyEmitted,\n },\n suppressSdkConsoleErrors: outputPolicy.suppressSdkConsoleErrors,\n timeoutMs: globalFlags.timeout,\n ttlMs: globalFlags.ttl,\n maxQueueDepth: config.queueMaxDepth,\n promptRetries: globalFlags.promptRetries,\n verbose: globalFlags.verbose,\n waitForCompletion: flags.wait !== false,\n });\n\n if (\"queued\" in result) {\n printQueuedPromptByFormat(result, outputPolicy.format);\n return;\n }\n\n applyPermissionExitCode(result);\n\n if (globalFlags.verbose && result.loadError) {\n process.stderr.write(`[acpx] loadSession failed, started fresh session: ${result.loadError}\\n`);\n }\n}\n\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 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 authCredentials: config.auth,\n authPolicy: globalFlags.authPolicy,\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 },\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 timeoutMs: globalFlags.timeout,\n verbose: globalFlags.verbose,\n });\n\n if (globalFlags.verbose && result.loadError) {\n process.stderr.write(`[acpx] loadSession failed, started fresh session: ${result.loadError}\\n`);\n }\n\n printSetModeResultByFormat(modeId, result, globalFlags.format);\n}\n\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 timeoutMs: globalFlags.timeout,\n verbose: globalFlags.verbose,\n });\n\n if (globalFlags.verbose && result.loadError) {\n process.stderr.write(`[acpx] loadSession failed, started fresh session: ${result.loadError}\\n`);\n }\n\n 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 timeoutMs: globalFlags.timeout,\n verbose: globalFlags.verbose,\n });\n\n if (globalFlags.verbose && result.loadError) {\n process.stderr.write(`[acpx] loadSession failed, started fresh session: ${result.loadError}\\n`);\n }\n\n printSetConfigOptionResultByFormat(configId, value, result, globalFlags.format);\n}\n\nexport async function handleSessionsList(\n explicitAgentName: string | undefined,\n command: Command,\n config: ResolvedAcpxConfig,\n): Promise<void> {\n const globalFlags = resolveGlobalFlags(command, config);\n const agent = resolveAgentInvocation(explicitAgentName, globalFlags, config);\n const [{ listSessionsForAgent }, { printSessionsByFormat }] = await Promise.all([\n loadSessionModule(),\n loadOutputRenderModule(),\n ]);\n const sessions = await listSessionsForAgent(agent.agentCommand);\n printSessionsByFormat(sessions, globalFlags.format);\n}\n\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(\n sessionName\n ? `No named session \"${sessionName}\" for cwd ${agent.cwd} and agent ${agent.agentName}`\n : `No cwd session for ${agent.cwd} and agent ${agent.agentName}`,\n );\n }\n\n 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 agent = resolveAgentInvocation(explicitAgentName, globalFlags, config);\n const [{ createSession, closeSession }, { printCreatedSessionBanner, printNewSessionByFormat }] =\n await Promise.all([loadSessionModule(), loadOutputRenderModule()]);\n\n const replaced = await findSession({\n agentCommand: agent.agentCommand,\n cwd: agent.cwd,\n name: flags.name,\n });\n\n if (replaced) {\n await closeSession(replaced.acpxRecordId);\n if (globalFlags.verbose) {\n process.stderr.write(`[acpx] soft-closed prior session: ${replaced.acpxRecordId}\\n`);\n }\n }\n\n const created = await createSession({\n agentCommand: agent.agentCommand,\n cwd: agent.cwd,\n name: flags.name,\n resumeSessionId: flags.resumeSession,\n mcpServers: config.mcpServers,\n permissionMode,\n nonInteractivePermissions: globalFlags.nonInteractivePermissions,\n authCredentials: config.auth,\n authPolicy: globalFlags.authPolicy,\n timeoutMs: globalFlags.timeout,\n verbose: globalFlags.verbose,\n sessionOptions: {\n model: globalFlags.model,\n allowedTools: globalFlags.allowedTools,\n maxTurns: globalFlags.maxTurns,\n },\n });\n\n printCreatedSessionBanner(created, agent.agentName, globalFlags.format, globalFlags.jsonStrict);\n\n if (globalFlags.verbose) {\n const scope = flags.name ? `named session \"${flags.name}\"` : \"cwd session\";\n process.stderr.write(`[acpx] created ${scope}: ${created.acpxRecordId}\\n`);\n }\n\n printNewSessionByFormat(created, replaced, globalFlags.format);\n}\n\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 agent = resolveAgentInvocation(explicitAgentName, globalFlags, config);\n const [{ ensureSession }, { printCreatedSessionBanner, printEnsuredSessionByFormat }] =\n await Promise.all([loadSessionModule(), loadOutputRenderModule()]);\n const result = await ensureSession({\n agentCommand: agent.agentCommand,\n cwd: agent.cwd,\n name: flags.name,\n resumeSessionId: flags.resumeSession,\n mcpServers: config.mcpServers,\n permissionMode,\n nonInteractivePermissions: globalFlags.nonInteractivePermissions,\n authCredentials: config.auth,\n authPolicy: globalFlags.authPolicy,\n timeoutMs: globalFlags.timeout,\n verbose: globalFlags.verbose,\n sessionOptions: {\n model: globalFlags.model,\n allowedTools: globalFlags.allowedTools,\n maxTurns: globalFlags.maxTurns,\n },\n });\n\n if (result.created) {\n printCreatedSessionBanner(\n result.record,\n agent.agentName,\n globalFlags.format,\n globalFlags.jsonStrict,\n );\n }\n\n printEnsuredSessionByFormat(result.record, result.created, globalFlags.format);\n}\n\nfunction userContentToText(content: SessionUserContent): string {\n if (\"Text\" in content) {\n return content.Text;\n }\n if (\"Mention\" in content) {\n return content.Mention.content;\n }\n if (\"Image\" in content) {\n return content.Image.source || \"[image]\";\n }\n return \"\";\n}\n\nfunction agentContentToText(content: SessionAgentContent): string {\n if (\"Text\" in content) {\n return content.Text;\n }\n if (\"Thinking\" in content) {\n return content.Thinking.text;\n }\n if (\"RedactedThinking\" in content) {\n return \"[redacted_thinking]\";\n }\n if (\"ToolUse\" in content) {\n return `[tool:${content.ToolUse.name}]`;\n }\n return \"\";\n}\n\nfunction conversationHistoryEntries(record: SessionRecord): Array<{\n role: \"user\" | \"assistant\";\n timestamp: string;\n textPreview: string;\n}> {\n const entries: Array<{ 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 process.stdout.write(`id: ${record.acpxRecordId}\\n`);\n process.stdout.write(`sessionId: ${record.acpSessionId}\\n`);\n process.stdout.write(`agentSessionId: ${record.agentSessionId ?? \"-\"}\\n`);\n process.stdout.write(`agent: ${record.agentCommand}\\n`);\n process.stdout.write(`cwd: ${record.cwd}\\n`);\n process.stdout.write(`name: ${record.name ?? \"-\"}\\n`);\n process.stdout.write(`created: ${record.createdAt}\\n`);\n process.stdout.write(`lastActivity: ${record.lastUsedAt}\\n`);\n process.stdout.write(`lastPrompt: ${record.lastPromptAt ?? \"-\"}\\n`);\n process.stdout.write(`closed: ${record.closed ? \"yes\" : \"no\"}\\n`);\n process.stdout.write(`closedAt: ${record.closedAt ?? \"-\"}\\n`);\n process.stdout.write(`pid: ${record.pid ?? \"-\"}\\n`);\n process.stdout.write(`agentStartedAt: ${record.agentStartedAt ?? \"-\"}\\n`);\n process.stdout.write(`lastExitCode: ${record.lastAgentExitCode ?? \"-\"}\\n`);\n process.stdout.write(`lastExitSignal: ${record.lastAgentExitSignal ?? \"-\"}\\n`);\n process.stdout.write(`lastExitAt: ${record.lastAgentExitAt ?? \"-\"}\\n`);\n process.stdout.write(`disconnectReason: ${record.lastAgentDisconnectReason ?? \"-\"}\\n`);\n process.stdout.write(`historyEntries: ${conversationHistoryEntries(record).length}\\n`);\n}\n\nfunction printSessionHistoryByFormat(\n record: SessionRecord,\n limit: number,\n format: OutputFormat,\n): void {\n const history = conversationHistoryEntries(record);\n const visible = limit === 0 ? history : history.slice(Math.max(0, history.length - limit));\n\n if (format === \"json\") {\n process.stdout.write(\n `${JSON.stringify({\n id: record.acpxRecordId,\n sessionId: record.acpSessionId,\n limit,\n count: visible.length,\n entries: visible,\n })}\\n`,\n );\n return;\n }\n\n if (format === \"quiet\") {\n for (const entry of visible) {\n process.stdout.write(`${entry.textPreview}\\n`);\n }\n return;\n }\n\n process.stdout.write(\n `session: ${record.acpxRecordId} (${visible.length}/${history.length} shown)\\n`,\n );\n if (visible.length === 0) {\n process.stdout.write(\"No history\\n\");\n return;\n }\n\n for (const entry of visible) {\n process.stdout.write(`${entry.timestamp}\\t${entry.role}\\t${entry.textPreview}\\n`);\n }\n}\n\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 findSession({\n agentCommand: agent.agentCommand,\n cwd: agent.cwd,\n name: sessionName,\n includeClosed: true,\n });\n\n if (!record) {\n throw new Error(\n sessionName\n ? `No named session \"${sessionName}\" for cwd ${agent.cwd} and agent ${agent.agentName}`\n : `No cwd session for ${agent.cwd} and agent ${agent.agentName}`,\n );\n }\n\n printSessionDetailsByFormat(record, globalFlags.format);\n}\n\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 findSession({\n agentCommand: agent.agentCommand,\n cwd: agent.cwd,\n name: sessionName,\n includeClosed: true,\n });\n\n if (!record) {\n throw new Error(\n sessionName\n ? `No named session \"${sessionName}\" for cwd ${agent.cwd} and agent ${agent.agentName}`\n : `No cwd session for ${agent.cwd} and agent ${agent.agentName}`,\n );\n }\n\n printSessionHistoryByFormat(record, flags.limit, globalFlags.format);\n}\n\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 parseServer(rawServer: unknown, path: string): McpServer {\n const serverRecord = asRecord(rawServer);\n if (!serverRecord) {\n throw new Error(`Invalid ${path}: expected object`);\n }\n\n const name = parseNonEmptyString(serverRecord.name, `${path}.name`);\n const _meta = parseMeta(serverRecord._meta, `${path}._meta`);\n const rawType = serverRecord.type;\n\n let typeValue: \"http\" | \"sse\" | \"stdio\";\n if (rawType === undefined) {\n // Allow normalized stdio entries where type is omitted by ACP shape.\n typeValue = \"stdio\";\n } else {\n const parsedType = parseNonEmptyString(rawType, `${path}.type`);\n if (parsedType !== \"http\" && parsedType !== \"sse\" && parsedType !== \"stdio\") {\n throw new Error(`Invalid ${path}.type: expected http, sse, or stdio`);\n }\n typeValue = parsedType;\n }\n\n if (typeValue === \"http\" || typeValue === \"sse\") {\n const url = parseNonEmptyString(serverRecord.url, `${path}.url`);\n const headers = parseHeaders(serverRecord.headers, `${path}.headers`);\n const server = {\n type: typeValue,\n name,\n url,\n headers,\n _meta,\n } satisfies McpServer;\n return server;\n }\n\n if (typeValue === \"stdio\") {\n const command = parseNonEmptyString(serverRecord.command, `${path}.command`);\n const args = parseArgs(serverRecord.args, `${path}.args`);\n const env = parseEnv(serverRecord.env, `${path}.env`);\n const server = {\n name,\n command,\n args,\n env,\n _meta,\n } satisfies McpServer;\n return server;\n }\n\n throw new Error(`Invalid ${path}.type: expected http, sse, or stdio`);\n}\n\nexport function parseMcpServers(\n value: unknown,\n sourcePath: string,\n fieldName = \"mcpServers\",\n): McpServer[] {\n const fieldPath = `${fieldName} in ${sourcePath}`;\n if (!Array.isArray(value)) {\n throw new Error(`Invalid ${fieldPath}: expected array`);\n }\n\n const parsed: McpServer[] = [];\n for (const [index, rawServer] of value.entries()) {\n parsed.push(parseServer(rawServer, `${fieldName}[${index}] in ${sourcePath}`));\n }\n return parsed;\n}\n\nexport function parseOptionalMcpServers(\n value: unknown,\n sourcePath: string,\n fieldName = \"mcpServers\",\n): McpServer[] | undefined {\n if (value === undefined) {\n return undefined;\n }\n return parseMcpServers(value, sourcePath, fieldName);\n}\n","import fs from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { DEFAULT_AGENT_NAME, normalizeAgentName } from \"../agent-registry.js\";\nimport { parseMcpServers } from \"../mcp-servers.js\";\nimport type {\n AuthPolicy,\n McpServer,\n NonInteractivePermissionPolicy,\n OutputFormat,\n PermissionMode,\n} from \"../types.js\";\n\ntype ConfigAgentEntry = {\n command: string;\n};\n\ntype ConfigFileShape = {\n defaultAgent?: unknown;\n defaultPermissions?: unknown;\n nonInteractivePermissions?: unknown;\n authPolicy?: unknown;\n ttl?: unknown;\n timeout?: unknown;\n queueMaxDepth?: unknown;\n format?: unknown;\n agents?: unknown;\n auth?: unknown;\n disableExec?: unknown;\n mcpServers?: unknown;\n};\n\nexport type ResolvedAcpxConfig = {\n defaultAgent: string;\n defaultPermissions: PermissionMode;\n nonInteractivePermissions: NonInteractivePermissionPolicy;\n authPolicy: AuthPolicy;\n ttlMs: number;\n timeoutMs?: number;\n queueMaxDepth: number;\n format: OutputFormat;\n agents: Record<string, string>;\n auth: Record<string, string>;\n disableExec: boolean;\n mcpServers: McpServer[];\n globalPath: string;\n projectPath: string;\n hasGlobalConfig: boolean;\n hasProjectConfig: boolean;\n};\n\ntype ConfigFileLoadResult = {\n config?: ConfigFileShape;\n exists: boolean;\n};\n\nconst DEFAULT_TIMEOUT_MS = undefined;\nconst DEFAULT_TTL_MS = 300_000;\nconst DEFAULT_PERMISSION_MODE: PermissionMode = \"approve-reads\";\nconst DEFAULT_NON_INTERACTIVE_PERMISSION_POLICY: NonInteractivePermissionPolicy = \"deny\";\nconst DEFAULT_AUTH_POLICY: AuthPolicy = \"skip\";\nconst DEFAULT_OUTPUT_FORMAT: OutputFormat = \"text\";\nconst DEFAULT_QUEUE_MAX_DEPTH = 16;\nconst DEFAULT_DISABLE_EXEC = false;\nconst VALID_PERMISSION_MODES = new Set<PermissionMode>([\n \"approve-all\",\n \"approve-reads\",\n \"deny-all\",\n]);\nconst VALID_NON_INTERACTIVE_PERMISSION_POLICIES = new Set<NonInteractivePermissionPolicy>([\n \"deny\",\n \"fail\",\n]);\nconst VALID_AUTH_POLICIES = new Set<AuthPolicy>([\"skip\", \"fail\"]);\nconst VALID_OUTPUT_FORMATS = new Set<OutputFormat>([\"text\", \"json\", \"quiet\"]);\n\nfunction defaultGlobalConfigPath(): string {\n return path.join(os.homedir(), \".acpx\", \"config.json\");\n}\n\nfunction projectConfigPath(cwd: string): string {\n return path.join(path.resolve(cwd), \".acpxrc.json\");\n}\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction parseTtlMs(value: unknown, sourcePath: string): number | undefined {\n if (value == null) {\n return undefined;\n }\n if (typeof value !== \"number\" || !Number.isFinite(value) || value < 0) {\n throw new Error(`Invalid config ttl in ${sourcePath}: expected non-negative seconds`);\n }\n return Math.round(value * 1_000);\n}\n\nfunction parseTimeoutMs(value: unknown, sourcePath: string): number | undefined {\n if (value == null) {\n return undefined;\n }\n if (typeof value !== \"number\" || !Number.isFinite(value) || value <= 0) {\n throw new Error(`Invalid config timeout in ${sourcePath}: expected positive seconds or null`);\n }\n return Math.round(value * 1_000);\n}\n\nfunction parseQueueMaxDepth(value: unknown, sourcePath: string): number | undefined {\n if (value == null) {\n return undefined;\n }\n if (!Number.isInteger(value) || (value as number) <= 0) {\n throw new Error(`Invalid config queueMaxDepth in ${sourcePath}: expected positive integer`);\n }\n return value as number;\n}\n\nfunction parsePermissionMode(value: unknown, sourcePath: string): PermissionMode | undefined {\n if (value == null) {\n return undefined;\n }\n if (typeof value !== \"string\" || !VALID_PERMISSION_MODES.has(value as PermissionMode)) {\n throw new Error(\n `Invalid config defaultPermissions in ${sourcePath}: expected approve-all, approve-reads, or deny-all`,\n );\n }\n return value as PermissionMode;\n}\n\nfunction parseNonInteractivePermissionPolicy(\n value: unknown,\n sourcePath: string,\n): NonInteractivePermissionPolicy | undefined {\n if (value == null) {\n return undefined;\n }\n if (\n typeof value !== \"string\" ||\n !VALID_NON_INTERACTIVE_PERMISSION_POLICIES.has(value as NonInteractivePermissionPolicy)\n ) {\n throw new Error(\n `Invalid config nonInteractivePermissions in ${sourcePath}: expected deny or fail`,\n );\n }\n return value as NonInteractivePermissionPolicy;\n}\n\nfunction parseAuthPolicy(value: unknown, sourcePath: string): AuthPolicy | undefined {\n if (value == null) {\n return undefined;\n }\n if (typeof value !== \"string\" || !VALID_AUTH_POLICIES.has(value as AuthPolicy)) {\n throw new Error(`Invalid config authPolicy in ${sourcePath}: expected skip or fail`);\n }\n return value as AuthPolicy;\n}\n\nfunction parseOutputFormat(value: unknown, sourcePath: string): OutputFormat | undefined {\n if (value == null) {\n return undefined;\n }\n if (typeof value !== \"string\" || !VALID_OUTPUT_FORMATS.has(value as OutputFormat)) {\n throw new Error(`Invalid config format in ${sourcePath}: expected text, json, or quiet`);\n }\n return value as OutputFormat;\n}\n\nfunction parseDefaultAgent(value: unknown, sourcePath: string): string | undefined {\n if (value == null) {\n return undefined;\n }\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new Error(`Invalid config defaultAgent in ${sourcePath}: expected non-empty string`);\n }\n return normalizeAgentName(value);\n}\n\nfunction parseAgents(value: unknown, sourcePath: string): Record<string, string> | undefined {\n if (value == null) {\n return undefined;\n }\n if (!isObject(value)) {\n throw new Error(`Invalid config agents in ${sourcePath}: expected object`);\n }\n\n const parsed: Record<string, string> = {};\n for (const [name, raw] of Object.entries(value)) {\n if (!isObject(raw)) {\n throw new Error(\n `Invalid config agents.${name} in ${sourcePath}: expected object with command`,\n );\n }\n const command = raw.command;\n if (typeof command !== \"string\" || command.trim().length === 0) {\n throw new Error(\n `Invalid config agents.${name}.command in ${sourcePath}: expected non-empty string`,\n );\n }\n parsed[normalizeAgentName(name)] = command.trim();\n }\n\n return parsed;\n}\n\nfunction parseAuth(value: unknown, sourcePath: string): Record<string, string> | undefined {\n if (value == null) {\n return undefined;\n }\n if (!isObject(value)) {\n throw new Error(`Invalid config auth in ${sourcePath}: expected object`);\n }\n\n const parsed: Record<string, string> = {};\n for (const [methodId, rawCredential] of Object.entries(value)) {\n if (typeof rawCredential !== \"string\" || rawCredential.trim().length === 0) {\n throw new Error(\n `Invalid config auth.${methodId} in ${sourcePath}: expected non-empty string`,\n );\n }\n parsed[methodId] = rawCredential;\n }\n return parsed;\n}\n\nfunction parseDisableExec(value: unknown, sourcePath: string): boolean | undefined {\n if (value == null) {\n return undefined;\n }\n if (typeof value !== \"boolean\") {\n throw new Error(`Invalid config disableExec in ${sourcePath}: expected boolean`);\n }\n return value;\n}\n\nasync function readConfigFile(filePath: string): Promise<ConfigFileLoadResult> {\n try {\n const payload = await fs.readFile(filePath, \"utf8\");\n let parsed: unknown;\n try {\n parsed = JSON.parse(payload);\n } catch (error) {\n const reason = error instanceof Error ? error.message : String(error);\n throw new Error(`Invalid JSON in ${filePath}: ${reason}`, {\n cause: error,\n });\n }\n\n if (!isObject(parsed)) {\n throw new Error(`Invalid config in ${filePath}: expected top-level JSON object`);\n }\n return {\n config: parsed as ConfigFileShape,\n exists: true,\n };\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n return { exists: false };\n }\n throw error;\n }\n}\n\nfunction mergeAgents(\n globalAgents: Record<string, string> | undefined,\n projectAgents: Record<string, string> | undefined,\n): Record<string, string> {\n return {\n ...globalAgents,\n ...projectAgents,\n };\n}\n\nfunction mergeAuth(\n globalAuth: Record<string, string> | undefined,\n projectAuth: Record<string, string> | undefined,\n): Record<string, string> {\n return {\n ...globalAuth,\n ...projectAuth,\n };\n}\n\nexport async function loadResolvedConfig(cwd: string): Promise<ResolvedAcpxConfig> {\n const globalPath = defaultGlobalConfigPath();\n const projectPath = projectConfigPath(cwd);\n\n const [globalResult, projectResult] = await Promise.all([\n readConfigFile(globalPath),\n readConfigFile(projectPath),\n ]);\n\n const globalConfig = globalResult.config;\n const projectConfig = projectResult.config;\n\n const defaultAgent =\n parseDefaultAgent(projectConfig?.defaultAgent, projectPath) ??\n parseDefaultAgent(globalConfig?.defaultAgent, globalPath) ??\n DEFAULT_AGENT_NAME;\n\n const defaultPermissions =\n parsePermissionMode(projectConfig?.defaultPermissions, projectPath) ??\n parsePermissionMode(globalConfig?.defaultPermissions, globalPath) ??\n DEFAULT_PERMISSION_MODE;\n\n const nonInteractivePermissions =\n parseNonInteractivePermissionPolicy(projectConfig?.nonInteractivePermissions, projectPath) ??\n parseNonInteractivePermissionPolicy(globalConfig?.nonInteractivePermissions, globalPath) ??\n DEFAULT_NON_INTERACTIVE_PERMISSION_POLICY;\n\n const authPolicy =\n parseAuthPolicy(projectConfig?.authPolicy, projectPath) ??\n parseAuthPolicy(globalConfig?.authPolicy, globalPath) ??\n DEFAULT_AUTH_POLICY;\n\n const ttlMs =\n parseTtlMs(projectConfig?.ttl, projectPath) ??\n parseTtlMs(globalConfig?.ttl, globalPath) ??\n DEFAULT_TTL_MS;\n\n const timeoutConfiguredInProject =\n projectConfig != null && Object.prototype.hasOwnProperty.call(projectConfig, \"timeout\");\n const timeoutConfiguredInGlobal =\n globalConfig != null && Object.prototype.hasOwnProperty.call(globalConfig, \"timeout\");\n let timeoutMs: number | undefined = DEFAULT_TIMEOUT_MS;\n if (timeoutConfiguredInProject) {\n timeoutMs = parseTimeoutMs(projectConfig?.timeout, projectPath);\n } else if (timeoutConfiguredInGlobal) {\n timeoutMs = parseTimeoutMs(globalConfig?.timeout, globalPath);\n }\n\n const format =\n parseOutputFormat(projectConfig?.format, projectPath) ??\n parseOutputFormat(globalConfig?.format, globalPath) ??\n DEFAULT_OUTPUT_FORMAT;\n\n const queueMaxDepth =\n parseQueueMaxDepth(projectConfig?.queueMaxDepth, projectPath) ??\n parseQueueMaxDepth(globalConfig?.queueMaxDepth, globalPath) ??\n DEFAULT_QUEUE_MAX_DEPTH;\n\n const agents = mergeAgents(\n parseAgents(globalConfig?.agents, globalPath),\n parseAgents(projectConfig?.agents, projectPath),\n );\n const auth = mergeAuth(\n parseAuth(globalConfig?.auth, globalPath),\n parseAuth(projectConfig?.auth, projectPath),\n );\n\n const mcpServersConfiguredInProject =\n projectConfig != null && Object.prototype.hasOwnProperty.call(projectConfig, \"mcpServers\");\n const mcpServersConfiguredInGlobal =\n globalConfig != null && Object.prototype.hasOwnProperty.call(globalConfig, \"mcpServers\");\n let mcpServers: McpServer[] = [];\n if (mcpServersConfiguredInProject) {\n mcpServers = parseMcpServers(projectConfig?.mcpServers, projectPath);\n } else if (mcpServersConfiguredInGlobal) {\n mcpServers = parseMcpServers(globalConfig?.mcpServers, globalPath);\n }\n\n const disableExec =\n parseDisableExec(projectConfig?.disableExec, projectPath) ??\n parseDisableExec(globalConfig?.disableExec, globalPath) ??\n DEFAULT_DISABLE_EXEC;\n\n return {\n defaultAgent,\n defaultPermissions,\n nonInteractivePermissions,\n authPolicy,\n ttlMs,\n timeoutMs,\n queueMaxDepth,\n format,\n agents,\n auth,\n disableExec,\n mcpServers,\n globalPath,\n projectPath,\n hasGlobalConfig: globalResult.exists,\n hasProjectConfig: projectResult.exists,\n };\n}\n\nexport function toConfigDisplay(config: ResolvedAcpxConfig): {\n defaultAgent: string;\n defaultPermissions: PermissionMode;\n nonInteractivePermissions: NonInteractivePermissionPolicy;\n authPolicy: AuthPolicy;\n ttl: number;\n timeout: number | null;\n queueMaxDepth: number;\n format: OutputFormat;\n agents: Record<string, ConfigAgentEntry>;\n authMethods: string[];\n disableExec: boolean;\n} {\n const agents: Record<string, ConfigAgentEntry> = {};\n for (const [name, command] of Object.entries(config.agents)) {\n agents[name] = { command };\n }\n\n return {\n defaultAgent: config.defaultAgent,\n defaultPermissions: config.defaultPermissions,\n nonInteractivePermissions: config.nonInteractivePermissions,\n authPolicy: config.authPolicy,\n ttl: Math.round(config.ttlMs / 1_000),\n timeout: config.timeoutMs == null ? null : config.timeoutMs / 1_000,\n queueMaxDepth: config.queueMaxDepth,\n format: config.format,\n agents,\n authMethods: Object.keys(config.auth).toSorted(),\n disableExec: config.disableExec,\n };\n}\n\nexport async function initGlobalConfigFile(): Promise<{\n path: string;\n created: boolean;\n}> {\n const configPath = defaultGlobalConfigPath();\n await fs.mkdir(path.dirname(configPath), { recursive: true });\n\n try {\n await fs.access(configPath);\n return {\n path: configPath,\n created: false,\n };\n } catch {\n // file does not exist yet\n }\n\n const payload = {\n defaultAgent: DEFAULT_AGENT_NAME,\n defaultPermissions: \"approve-all\",\n nonInteractivePermissions: \"deny\",\n authPolicy: \"skip\",\n ttl: 300,\n timeout: null,\n queueMaxDepth: DEFAULT_QUEUE_MAX_DEPTH,\n format: \"text\",\n agents: {},\n auth: {},\n };\n\n await fs.writeFile(configPath, `${JSON.stringify(payload, null, 2)}\\n`, \"utf8\");\n return {\n path: configPath,\n created: true,\n };\n}\n","import { Command } from \"commander\";\nimport { initGlobalConfigFile, toConfigDisplay, type ResolvedAcpxConfig } from \"./config.js\";\nimport { 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 .action(async function (this: Command) {\n await handleConfigShow(this, config);\n });\n\n configCommand\n .command(\"init\")\n .description(\"Create global config template\")\n .action(async function (this: Command) {\n await handleConfigInit(this, config);\n });\n\n configCommand.action(async function (this: Command) {\n await handleConfigShow(this, config);\n });\n}\n","import { Command } from \"commander\";\nimport { findSession } from \"../session/persistence.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\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\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 if (\n emitJsonResult(globalFlags.format, {\n action: \"status_snapshot\",\n status: \"no-session\",\n summary: \"no active session\",\n })\n ) {\n return;\n }\n\n if (globalFlags.format === \"quiet\") {\n process.stdout.write(\"no-session\\n\");\n return;\n }\n\n process.stdout.write(\"session: -\\n\");\n process.stdout.write(`agent: ${agent.agentCommand}\\n`);\n process.stdout.write(\"pid: -\\n\");\n process.stdout.write(\"status: no-session\\n\");\n process.stdout.write(\"model: -\\n\");\n process.stdout.write(\"mode: -\\n\");\n process.stdout.write(\"uptime: -\\n\");\n process.stdout.write(\"lastPromptTime: -\\n\");\n return;\n }\n\n const health = await probeQueueOwnerHealth(record.acpxRecordId);\n const running = health.healthy;\n const payload = {\n sessionId: record.acpxRecordId,\n agentCommand: record.agentCommand,\n pid: health.pid ?? record.pid ?? null,\n status: running ? \"running\" : \"dead\",\n model: record.acpx?.current_model_id ?? null,\n mode: record.acpx?.current_mode_id ?? null,\n availableModels: record.acpx?.available_models ?? null,\n uptime: running ? (formatUptime(record.agentStartedAt) ?? null) : null,\n lastPromptTime: record.lastPromptAt ?? null,\n exitCode: running ? null : (record.lastAgentExitCode ?? null),\n signal: running ? null : (record.lastAgentExitSignal ?? null),\n ...agentSessionIdPayload(record.agentSessionId),\n };\n\n if (\n emitJsonResult(globalFlags.format, {\n action: \"status_snapshot\",\n status: running ? \"alive\" : \"dead\",\n pid: payload.pid ?? undefined,\n summary: running ? \"queue owner healthy\" : \"queue owner unavailable\",\n model: payload.model ?? undefined,\n mode: payload.mode ?? undefined,\n availableModels: payload.availableModels ?? undefined,\n uptime: payload.uptime ?? undefined,\n lastPromptTime: payload.lastPromptTime ?? undefined,\n exitCode: payload.exitCode ?? undefined,\n signal: payload.signal ?? undefined,\n acpxRecordId: record.acpxRecordId,\n acpxSessionId: record.acpSessionId,\n agentSessionId: record.agentSessionId,\n })\n ) {\n return;\n }\n\n if (globalFlags.format === \"quiet\") {\n process.stdout.write(`${payload.status}\\n`);\n return;\n }\n\n process.stdout.write(`session: ${payload.sessionId}\\n`);\n if (\"agentSessionId\" in payload) {\n process.stdout.write(`agentSessionId: ${payload.agentSessionId}\\n`);\n }\n process.stdout.write(`agent: ${payload.agentCommand}\\n`);\n process.stdout.write(`pid: ${payload.pid ?? \"-\"}\\n`);\n process.stdout.write(`status: ${payload.status}\\n`);\n process.stdout.write(`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 (payload.status === \"dead\") {\n process.stdout.write(`exitCode: ${payload.exitCode ?? \"-\"}\\n`);\n process.stdout.write(`signal: ${payload.signal ?? \"-\"}\\n`);\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 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 parseNonEmptyValue,\n parseSessionName,\n type PromptFlags,\n type SessionsHistoryFlags,\n type SessionsNewFlags,\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\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\n sessionsCommand.action(async function (this: Command) {\n await handleSessionsList(explicitAgentName, this, config);\n });\n\n sessionsCommand\n .command(\"list\")\n .description(\"List sessions\")\n .action(async function (this: Command) {\n await handleSessionsList(explicitAgentName, this, config);\n });\n\n sessionsCommand\n .command(\"new\")\n .description(\"Create a fresh session for current cwd\")\n .option(\"--name <name>\", \"Session name\", parseSessionName)\n .option(\"--resume-session <id>\", \"Resume existing ACP session id\", (value: string) =>\n parseNonEmptyValue(\"Resume session id\", value),\n )\n .action(async function (this: Command, flags: SessionsNewFlags) {\n await handleSessionsNew(explicitAgentName, flags, this, config);\n });\n\n sessionsCommand\n .command(\"ensure\")\n .description(\"Ensure a session exists for current cwd or ancestor\")\n .option(\"--name <name>\", \"Session name\", parseSessionName)\n .option(\"--resume-session <id>\", \"Resume existing ACP session id\", (value: string) =>\n parseNonEmptyValue(\"Resume session id\", value),\n )\n .action(async function (this: Command, flags: SessionsNewFlags) {\n await handleSessionsEnsure(explicitAgentName, flags, this, config);\n });\n\n sessionsCommand\n .command(\"close\")\n .description(\"Close session for current cwd\")\n .argument(\"[name]\", \"Session name\", parseSessionName)\n .action(async function (this: Command, name?: string) {\n await handleSessionsClose(explicitAgentName, name, this, config);\n });\n\n sessionsCommand\n .command(\"show\")\n .description(\"Show session metadata for current cwd\")\n .argument(\"[name]\", \"Session name\", parseSessionName)\n .action(async function (this: Command, name?: string) {\n await handleSessionsShow(explicitAgentName, name, this, config);\n });\n\n sessionsCommand\n .command(\"history\")\n .description(\"Show recent session history entries\")\n .argument(\"[name]\", \"Session name\", parseSessionName)\n .option(\n \"--limit <count>\",\n `Maximum number of entries to show (default: ${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\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 const parsedMcpServers = parseOptionalMcpServers(record.mcpServers, \"queue owner payload\");\n if (parsedMcpServers) {\n options.mcpServers = parsedMcpServers;\n }\n\n if (typeof record.nonInteractivePermissions === \"string\") {\n options.nonInteractivePermissions =\n record.nonInteractivePermissions === \"deny\" || record.nonInteractivePermissions === \"fail\"\n ? record.nonInteractivePermissions\n : undefined;\n }\n\n if (record.authCredentials && typeof record.authCredentials === \"object\") {\n const entries = Object.entries(record.authCredentials as UnknownRecord).filter(\n ([, value]) => typeof value === \"string\",\n ) as Array<[string, string]>;\n options.authCredentials = Object.fromEntries(entries);\n }\n\n if (record.authPolicy === \"skip\" || record.authPolicy === \"fail\") {\n options.authPolicy = record.authPolicy;\n }\n\n if (typeof record.suppressSdkConsoleErrors === \"boolean\") {\n options.suppressSdkConsoleErrors = record.suppressSdkConsoleErrors;\n }\n\n if (typeof record.verbose === \"boolean\") {\n options.verbose = record.verbose;\n }\n\n if (typeof record.ttlMs === \"number\" && Number.isFinite(record.ttlMs)) {\n options.ttlMs = record.ttlMs;\n }\n\n if (typeof record.maxQueueDepth === \"number\" && Number.isFinite(record.maxQueueDepth)) {\n options.maxQueueDepth = Math.max(1, Math.round(record.maxQueueDepth));\n }\n\n if (typeof record.promptRetries === \"number\" && Number.isFinite(record.promptRetries)) {\n options.promptRetries = Math.max(0, Math.round(record.promptRetries));\n }\n\n return options;\n}\n\nexport async function runQueueOwnerFromEnv(env: NodeJS.ProcessEnv): Promise<void> {\n const payload = env.ACPX_QUEUE_OWNER_PAYLOAD;\n if (!payload) {\n throw new Error(\"missing ACPX_QUEUE_OWNER_PAYLOAD\");\n }\n const options = parseQueueOwnerPayload(payload);\n await runSessionQueueOwner(options);\n}\n","import { readFileSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nconst UNKNOWN_VERSION = \"0.0.0-unknown\";\nconst MODULE_DIR = path.dirname(fileURLToPath(import.meta.url));\n\nlet cachedVersion: string | null = null;\n\nfunction parseVersion(value: unknown): string | null {\n if (typeof value !== \"string\") {\n return null;\n }\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : null;\n}\n\nfunction readPackageVersion(packageJsonPath: string): string | null {\n try {\n const parsed = JSON.parse(readFileSync(packageJsonPath, \"utf8\")) as {\n version?: unknown;\n };\n return parseVersion(parsed.version);\n } catch {\n return null;\n }\n}\n\nfunction resolveVersionFromAncestors(startDir: string): string | null {\n let current = startDir;\n while (true) {\n const packageVersion = readPackageVersion(path.join(current, \"package.json\"));\n if (packageVersion) {\n return packageVersion;\n }\n const parent = path.dirname(current);\n if (parent === current) {\n return null;\n }\n current = parent;\n }\n}\n\nexport function resolveAcpxVersion(params?: {\n env?: NodeJS.ProcessEnv;\n packageJsonPath?: string;\n}): string {\n const env = params?.env ?? process.env;\n const envPackageName = parseVersion(env.npm_package_name);\n const envVersion = parseVersion(env.npm_package_version);\n if (envPackageName === \"acpx\" && envVersion) {\n return envVersion;\n }\n\n if (params?.packageJsonPath) {\n return readPackageVersion(params.packageJsonPath) ?? UNKNOWN_VERSION;\n }\n\n return resolveVersionFromAncestors(MODULE_DIR) ?? UNKNOWN_VERSION;\n}\n\nexport function getAcpxVersion(): string {\n if (cachedVersion) {\n return cachedVersion;\n }\n cachedVersion = resolveAcpxVersion();\n return cachedVersion;\n}\n","#!/usr/bin/env node\n\nimport 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 } 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\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\nfunction detectAgentToken(argv: string[]): AgentTokenScan {\n let hasAgentOverride = false;\n\n for (let index = 0; index < argv.length; index += 1) {\n const token = argv[index];\n\n if (token === \"--\") {\n break;\n }\n\n if (!token.startsWith(\"-\") || token === \"-\") {\n return { token, hasAgentOverride };\n }\n\n if (token === \"--agent\") {\n hasAgentOverride = true;\n index += 1;\n continue;\n }\n\n if (token.startsWith(\"--agent=\")) {\n hasAgentOverride = true;\n continue;\n }\n\n if (\n token === \"--cwd\" ||\n token === \"--auth-policy\" ||\n token === \"--non-interactive-permissions\" ||\n token === \"--format\" ||\n token === \"--model\" ||\n token === \"--allowed-tools\" ||\n token === \"--max-turns\" ||\n token === \"--timeout\" ||\n token === \"--ttl\" ||\n token === \"--file\"\n ) {\n index += 1;\n continue;\n }\n\n if (\n token.startsWith(\"--cwd=\") ||\n token.startsWith(\"--auth-policy=\") ||\n token.startsWith(\"--non-interactive-permissions=\") ||\n token.startsWith(\"--format=\") ||\n token.startsWith(\"--model=\") ||\n token.startsWith(\"--allowed-tools=\") ||\n token.startsWith(\"--max-turns=\") ||\n token.startsWith(\"--json-strict=\") ||\n token.startsWith(\"--timeout=\") ||\n token.startsWith(\"--ttl=\") ||\n token.startsWith(\"--file=\")\n ) {\n continue;\n }\n\n if (\n token === \"--approve-all\" ||\n token === \"--approve-reads\" ||\n token === \"--deny-all\" ||\n token === \"--json-strict\" ||\n token === \"--verbose\" ||\n token === \"--suppress-reads\"\n ) {\n continue;\n }\n\n return { hasAgentOverride };\n }\n\n return { hasAgentOverride };\n}\n\nfunction detectInitialCwd(argv: string[]): string {\n for (let index = 0; index < argv.length; index += 1) {\n const token = argv[index];\n\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 (token === \"--json-strict\" || token.startsWith(\"--json-strict=\")) {\n return \"json\";\n }\n\n if (token === \"--format\") {\n const raw = argv[index + 1];\n if (raw && OUTPUT_FORMATS.includes(raw as OutputFormat)) {\n detectedFormat = raw as OutputFormat;\n }\n continue;\n }\n\n if (token.startsWith(\"--format=\")) {\n const raw = token.slice(\"--format=\".length).trim();\n if (OUTPUT_FORMATS.includes(raw as OutputFormat)) {\n detectedFormat = raw as OutputFormat;\n }\n }\n }\n\n return detectedFormat;\n}\n\nfunction detectJsonStrict(argv: string[]): boolean {\n for (let index = 0; index < argv.length; index += 1) {\n const token = argv[index];\n\n if (token === \"--\") {\n break;\n }\n\n if (token === \"--json-strict\" || token.startsWith(\"--json-strict=\")) {\n return true;\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 }\n}\n\nasync function runWithOutputPolicy<T>(\n _outputPolicy: OutputPolicy,\n run: () => Promise<T>,\n): Promise<T> {\n return await run();\n}\n\nexport async function main(argv: string[] = process.argv): Promise<void> {\n installPerfMetricsCapture({\n argv: argv.slice(2),\n role: argv[2] === \"__queue-owner\" ? \"queue_owner\" : \"cli\",\n });\n\n if (argv.includes(\"--version\") || argv.includes(\"-V\")) {\n process.stdout.write(`${getAcpxVersion()}\\n`);\n return;\n }\n\n if (argv[2] === \"__queue-owner\") {\n try {\n await runQueueOwnerFromEnv(process.env);\n return;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n process.stderr.write(`[acpx] queue owner failed: ${message}\\n`);\n process.exit(EXIT_CODES.ERROR);\n }\n }\n\n if (shouldMaybeHandleSkillflag(argv)) {\n const { findSkillsRoot, maybeHandleSkillflag } = await loadSkillflagModule();\n await maybeHandleSkillflag(argv, {\n skillsRoot: findSkillsRoot(import.meta.url),\n includeBundledSkill: false,\n });\n }\n\n const rawArgs = argv.slice(2);\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 = new Command();\n program\n .name(\"acpx\")\n .description(\"Headless CLI client for the Agent Client Protocol\")\n .version(getAcpxVersion())\n .enablePositionalOptions()\n .showHelpAfterError();\n\n if (requestedJsonStrict) {\n program.configureOutput({\n writeOut: () => {\n // json-strict intentionally suppresses non-JSON stdout output.\n },\n writeErr: () => {\n // json-strict intentionally suppresses non-JSON stderr output.\n },\n });\n }\n\n addGlobalFlags(program);\n\n 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 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 });\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\nconst queueOwnerArgOverride = buildQueueOwnerArgOverride(fileURLToPath(import.meta.url));\nif (queueOwnerArgOverride) {\n process.env.ACPX_QUEUE_OWNER_ARGS ??= queueOwnerArgOverride;\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 void main(process.argv);\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","names":["fs","asRecord","fs"],"sources":["../src/cli-public.ts","../src/acp/codex-compat.ts","../src/cli/command-handlers.ts","../src/mcp-servers.ts","../src/cli/config.ts","../src/cli/config-command.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 thought_level high\n acpx codex -s backend \"fix the API\"\n acpx codex sessions\n acpx codex sessions new --name backend\n acpx codex sessions ensure --name backend\n acpx codex sessions close backend\n acpx codex status\n acpx config show\n acpx config init\n acpx --ttl 30 codex \"investigate flaky tests\"\n acpx claude \"refactor auth\"\n acpx --agent ./my-custom-server \"do something\"`,\n );\n}\n","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 isCodexInvocation(agentName: string, agentCommand: string): boolean {\n if (agentName === \"codex\") {\n return true;\n }\n\n return /\\bcodex-acp\\b/u.test(agentCommand);\n}\n","import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { Command, InvalidArgumentError } from \"commander\";\nimport { isCodexInvocation } from \"../acp/codex-compat.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} 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 PromptFlags,\n type SessionsHistoryFlags,\n type SessionsNewFlags,\n type StatusFlags,\n} from \"./flags.js\";\nimport { emitJsonResult } from \"./output/json-output.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 const source =\n filePath === \"-\"\n ? await readPromptInputFromStdin()\n : await fs.readFile(path.resolve(cwd, filePath), \"utf8\");\n const prompt = mergePromptSourceWithText(source, promptParts.join(\" \"));\n if (prompt.length === 0) {\n throw new InvalidArgumentError(\"Prompt from --file is empty\");\n }\n return prompt;\n }\n\n const joined = promptParts.join(\" \").trim();\n if (joined.length > 0) {\n return textPrompt(joined);\n }\n\n if (process.stdin.isTTY) {\n throw new InvalidArgumentError(\n \"Prompt is required (pass as argument, --file, or pipe via stdin)\",\n );\n }\n\n const prompt = parsePromptSource(await readPromptInputFromStdin());\n if (prompt.length === 0) {\n throw new InvalidArgumentError(\"Prompt from stdin is empty\");\n }\n\n return prompt;\n } catch (error) {\n if (error instanceof PromptInputValidationError) {\n throw new InvalidArgumentError(error.message);\n }\n throw error;\n }\n}\n\nfunction applyPermissionExitCode(result: {\n permissionStats: {\n requested: number;\n approved: number;\n denied: number;\n cancelled: number;\n };\n}): void {\n const stats = result.permissionStats;\n const deniedOrCancelled = stats.denied + stats.cancelled;\n\n if (stats.requested > 0 && stats.approved === 0 && deniedOrCancelled > 0) {\n process.exitCode = EXIT_CODES.PERMISSION_DENIED;\n }\n}\n\nfunction resolveCompatibleConfigId(\n agent: { agentName: string; agentCommand: string },\n configId: string,\n): string {\n if (isCodexInvocation(agent.agentName, 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\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 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 authCredentials: config.auth,\n authPolicy: globalFlags.authPolicy,\n outputFormatter,\n errorEmissionPolicy: {\n queueErrorAlreadyEmitted: outputPolicy.queueErrorAlreadyEmitted,\n },\n suppressSdkConsoleErrors: outputPolicy.suppressSdkConsoleErrors,\n timeoutMs: globalFlags.timeout,\n ttlMs: globalFlags.ttl,\n maxQueueDepth: config.queueMaxDepth,\n promptRetries: globalFlags.promptRetries,\n verbose: globalFlags.verbose,\n waitForCompletion: flags.wait !== false,\n });\n\n if (\"queued\" in result) {\n printQueuedPromptByFormat(result, outputPolicy.format);\n return;\n }\n\n applyPermissionExitCode(result);\n\n if (globalFlags.verbose && result.loadError) {\n process.stderr.write(`[acpx] loadSession failed, started fresh session: ${result.loadError}\\n`);\n }\n}\n\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 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 authCredentials: config.auth,\n authPolicy: globalFlags.authPolicy,\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 },\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 timeoutMs: globalFlags.timeout,\n verbose: globalFlags.verbose,\n });\n\n if (globalFlags.verbose && result.loadError) {\n process.stderr.write(`[acpx] loadSession failed, started fresh session: ${result.loadError}\\n`);\n }\n\n printSetModeResultByFormat(modeId, result, globalFlags.format);\n}\n\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 timeoutMs: globalFlags.timeout,\n verbose: globalFlags.verbose,\n });\n\n if (globalFlags.verbose && result.loadError) {\n process.stderr.write(`[acpx] loadSession failed, started fresh session: ${result.loadError}\\n`);\n }\n\n 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 timeoutMs: globalFlags.timeout,\n verbose: globalFlags.verbose,\n });\n\n if (globalFlags.verbose && result.loadError) {\n process.stderr.write(`[acpx] loadSession failed, started fresh session: ${result.loadError}\\n`);\n }\n\n printSetConfigOptionResultByFormat(configId, value, result, globalFlags.format);\n}\n\nexport async function handleSessionsList(\n explicitAgentName: string | undefined,\n command: Command,\n config: ResolvedAcpxConfig,\n): Promise<void> {\n const globalFlags = resolveGlobalFlags(command, config);\n const agent = resolveAgentInvocation(explicitAgentName, globalFlags, config);\n const [{ listSessionsForAgent }, { printSessionsByFormat }] = await Promise.all([\n loadSessionModule(),\n loadOutputRenderModule(),\n ]);\n const sessions = await listSessionsForAgent(agent.agentCommand);\n printSessionsByFormat(sessions, globalFlags.format);\n}\n\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(\n sessionName\n ? `No named session \"${sessionName}\" for cwd ${agent.cwd} and agent ${agent.agentName}`\n : `No cwd session for ${agent.cwd} and agent ${agent.agentName}`,\n );\n }\n\n 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 agent = resolveAgentInvocation(explicitAgentName, globalFlags, config);\n const [{ createSession, closeSession }, { printCreatedSessionBanner, printNewSessionByFormat }] =\n await Promise.all([loadSessionModule(), loadOutputRenderModule()]);\n\n const replaced = await findSession({\n agentCommand: agent.agentCommand,\n cwd: agent.cwd,\n name: flags.name,\n });\n\n if (replaced) {\n await closeSession(replaced.acpxRecordId);\n if (globalFlags.verbose) {\n process.stderr.write(`[acpx] soft-closed prior session: ${replaced.acpxRecordId}\\n`);\n }\n }\n\n const created = await createSession({\n agentCommand: agent.agentCommand,\n cwd: agent.cwd,\n name: flags.name,\n resumeSessionId: flags.resumeSession,\n mcpServers: config.mcpServers,\n permissionMode,\n nonInteractivePermissions: globalFlags.nonInteractivePermissions,\n authCredentials: config.auth,\n authPolicy: globalFlags.authPolicy,\n timeoutMs: globalFlags.timeout,\n verbose: globalFlags.verbose,\n sessionOptions: {\n model: globalFlags.model,\n allowedTools: globalFlags.allowedTools,\n maxTurns: globalFlags.maxTurns,\n },\n });\n\n printCreatedSessionBanner(created, agent.agentName, globalFlags.format, globalFlags.jsonStrict);\n\n if (globalFlags.verbose) {\n const scope = flags.name ? `named session \"${flags.name}\"` : \"cwd session\";\n process.stderr.write(`[acpx] created ${scope}: ${created.acpxRecordId}\\n`);\n }\n\n printNewSessionByFormat(created, replaced, globalFlags.format);\n}\n\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 agent = resolveAgentInvocation(explicitAgentName, globalFlags, config);\n const [{ ensureSession }, { printCreatedSessionBanner, printEnsuredSessionByFormat }] =\n await Promise.all([loadSessionModule(), loadOutputRenderModule()]);\n const result = await ensureSession({\n agentCommand: agent.agentCommand,\n cwd: agent.cwd,\n name: flags.name,\n resumeSessionId: flags.resumeSession,\n mcpServers: config.mcpServers,\n permissionMode,\n nonInteractivePermissions: globalFlags.nonInteractivePermissions,\n authCredentials: config.auth,\n authPolicy: globalFlags.authPolicy,\n timeoutMs: globalFlags.timeout,\n verbose: globalFlags.verbose,\n sessionOptions: {\n model: globalFlags.model,\n allowedTools: globalFlags.allowedTools,\n maxTurns: globalFlags.maxTurns,\n },\n });\n\n if (result.created) {\n printCreatedSessionBanner(\n result.record,\n agent.agentName,\n globalFlags.format,\n globalFlags.jsonStrict,\n );\n }\n\n printEnsuredSessionByFormat(result.record, result.created, globalFlags.format);\n}\n\nfunction userContentToText(content: SessionUserContent): string {\n if (\"Text\" in content) {\n return content.Text;\n }\n if (\"Mention\" in content) {\n return content.Mention.content;\n }\n if (\"Image\" in content) {\n return content.Image.source || \"[image]\";\n }\n return \"\";\n}\n\nfunction agentContentToText(content: SessionAgentContent): string {\n if (\"Text\" in content) {\n return content.Text;\n }\n if (\"Thinking\" in content) {\n return content.Thinking.text;\n }\n if (\"RedactedThinking\" in content) {\n return \"[redacted_thinking]\";\n }\n if (\"ToolUse\" in content) {\n return `[tool:${content.ToolUse.name}]`;\n }\n return \"\";\n}\n\nfunction conversationHistoryEntries(record: SessionRecord): Array<{\n role: \"user\" | \"assistant\";\n timestamp: string;\n textPreview: string;\n}> {\n const entries: Array<{ 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 process.stdout.write(`id: ${record.acpxRecordId}\\n`);\n process.stdout.write(`sessionId: ${record.acpSessionId}\\n`);\n process.stdout.write(`agentSessionId: ${record.agentSessionId ?? \"-\"}\\n`);\n process.stdout.write(`agent: ${record.agentCommand}\\n`);\n process.stdout.write(`cwd: ${record.cwd}\\n`);\n process.stdout.write(`name: ${record.name ?? \"-\"}\\n`);\n process.stdout.write(`created: ${record.createdAt}\\n`);\n process.stdout.write(`lastActivity: ${record.lastUsedAt}\\n`);\n process.stdout.write(`lastPrompt: ${record.lastPromptAt ?? \"-\"}\\n`);\n process.stdout.write(`closed: ${record.closed ? \"yes\" : \"no\"}\\n`);\n process.stdout.write(`closedAt: ${record.closedAt ?? \"-\"}\\n`);\n process.stdout.write(`pid: ${record.pid ?? \"-\"}\\n`);\n process.stdout.write(`agentStartedAt: ${record.agentStartedAt ?? \"-\"}\\n`);\n process.stdout.write(`lastExitCode: ${record.lastAgentExitCode ?? \"-\"}\\n`);\n process.stdout.write(`lastExitSignal: ${record.lastAgentExitSignal ?? \"-\"}\\n`);\n process.stdout.write(`lastExitAt: ${record.lastAgentExitAt ?? \"-\"}\\n`);\n process.stdout.write(`disconnectReason: ${record.lastAgentDisconnectReason ?? \"-\"}\\n`);\n process.stdout.write(`historyEntries: ${conversationHistoryEntries(record).length}\\n`);\n}\n\nfunction printSessionHistoryByFormat(\n record: SessionRecord,\n limit: number,\n format: OutputFormat,\n): void {\n const history = conversationHistoryEntries(record);\n const visible = limit === 0 ? history : history.slice(Math.max(0, history.length - limit));\n\n if (format === \"json\") {\n process.stdout.write(\n `${JSON.stringify({\n id: record.acpxRecordId,\n sessionId: record.acpSessionId,\n limit,\n count: visible.length,\n entries: visible,\n })}\\n`,\n );\n return;\n }\n\n if (format === \"quiet\") {\n for (const entry of visible) {\n process.stdout.write(`${entry.textPreview}\\n`);\n }\n return;\n }\n\n process.stdout.write(\n `session: ${record.acpxRecordId} (${visible.length}/${history.length} shown)\\n`,\n );\n if (visible.length === 0) {\n process.stdout.write(\"No history\\n\");\n return;\n }\n\n for (const entry of visible) {\n process.stdout.write(`${entry.timestamp}\\t${entry.role}\\t${entry.textPreview}\\n`);\n }\n}\n\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 findSession({\n agentCommand: agent.agentCommand,\n cwd: agent.cwd,\n name: sessionName,\n includeClosed: true,\n });\n\n if (!record) {\n throw new Error(\n sessionName\n ? `No named session \"${sessionName}\" for cwd ${agent.cwd} and agent ${agent.agentName}`\n : `No cwd session for ${agent.cwd} and agent ${agent.agentName}`,\n );\n }\n\n printSessionDetailsByFormat(record, globalFlags.format);\n}\n\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 findSession({\n agentCommand: agent.agentCommand,\n cwd: agent.cwd,\n name: sessionName,\n includeClosed: true,\n });\n\n if (!record) {\n throw new Error(\n sessionName\n ? `No named session \"${sessionName}\" for cwd ${agent.cwd} and agent ${agent.agentName}`\n : `No cwd session for ${agent.cwd} and agent ${agent.agentName}`,\n );\n }\n\n printSessionHistoryByFormat(record, flags.limit, globalFlags.format);\n}\n\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 parseServer(rawServer: unknown, path: string): McpServer {\n const serverRecord = asRecord(rawServer);\n if (!serverRecord) {\n throw new Error(`Invalid ${path}: expected object`);\n }\n\n const name = parseNonEmptyString(serverRecord.name, `${path}.name`);\n const _meta = parseMeta(serverRecord._meta, `${path}._meta`);\n const rawType = serverRecord.type;\n\n let typeValue: \"http\" | \"sse\" | \"stdio\";\n if (rawType === undefined) {\n // Allow normalized stdio entries where type is omitted by ACP shape.\n typeValue = \"stdio\";\n } else {\n const parsedType = parseNonEmptyString(rawType, `${path}.type`);\n if (parsedType !== \"http\" && parsedType !== \"sse\" && parsedType !== \"stdio\") {\n throw new Error(`Invalid ${path}.type: expected http, sse, or stdio`);\n }\n typeValue = parsedType;\n }\n\n if (typeValue === \"http\" || typeValue === \"sse\") {\n const url = parseNonEmptyString(serverRecord.url, `${path}.url`);\n const headers = parseHeaders(serverRecord.headers, `${path}.headers`);\n const server = {\n type: typeValue,\n name,\n url,\n headers,\n _meta,\n } satisfies McpServer;\n return server;\n }\n\n if (typeValue === \"stdio\") {\n const command = parseNonEmptyString(serverRecord.command, `${path}.command`);\n const args = parseArgs(serverRecord.args, `${path}.args`);\n const env = parseEnv(serverRecord.env, `${path}.env`);\n const server = {\n name,\n command,\n args,\n env,\n _meta,\n } satisfies McpServer;\n return server;\n }\n\n throw new Error(`Invalid ${path}.type: expected http, sse, or stdio`);\n}\n\nexport function parseMcpServers(\n value: unknown,\n sourcePath: string,\n fieldName = \"mcpServers\",\n): McpServer[] {\n const fieldPath = `${fieldName} in ${sourcePath}`;\n if (!Array.isArray(value)) {\n throw new Error(`Invalid ${fieldPath}: expected array`);\n }\n\n const parsed: McpServer[] = [];\n for (const [index, rawServer] of value.entries()) {\n parsed.push(parseServer(rawServer, `${fieldName}[${index}] in ${sourcePath}`));\n }\n return parsed;\n}\n\nexport function parseOptionalMcpServers(\n value: unknown,\n sourcePath: string,\n fieldName = \"mcpServers\",\n): McpServer[] | undefined {\n if (value === undefined) {\n return undefined;\n }\n return parseMcpServers(value, sourcePath, fieldName);\n}\n","import fs from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { DEFAULT_AGENT_NAME, normalizeAgentName } from \"../agent-registry.js\";\nimport { parseMcpServers } from \"../mcp-servers.js\";\nimport type {\n AuthPolicy,\n McpServer,\n NonInteractivePermissionPolicy,\n OutputFormat,\n PermissionMode,\n} from \"../types.js\";\n\ntype ConfigAgentEntry = {\n command: string;\n};\n\ntype ConfigFileShape = {\n defaultAgent?: unknown;\n defaultPermissions?: unknown;\n nonInteractivePermissions?: unknown;\n authPolicy?: unknown;\n ttl?: unknown;\n timeout?: unknown;\n queueMaxDepth?: unknown;\n format?: unknown;\n agents?: unknown;\n auth?: unknown;\n disableExec?: unknown;\n mcpServers?: unknown;\n};\n\nexport type ResolvedAcpxConfig = {\n defaultAgent: string;\n defaultPermissions: PermissionMode;\n nonInteractivePermissions: NonInteractivePermissionPolicy;\n authPolicy: AuthPolicy;\n ttlMs: number;\n timeoutMs?: number;\n queueMaxDepth: number;\n format: OutputFormat;\n agents: Record<string, string>;\n auth: Record<string, string>;\n disableExec: boolean;\n mcpServers: McpServer[];\n globalPath: string;\n projectPath: string;\n hasGlobalConfig: boolean;\n hasProjectConfig: boolean;\n};\n\ntype ConfigFileLoadResult = {\n config?: ConfigFileShape;\n exists: boolean;\n};\n\nconst DEFAULT_TIMEOUT_MS = undefined;\nconst DEFAULT_TTL_MS = 300_000;\nconst DEFAULT_PERMISSION_MODE: PermissionMode = \"approve-reads\";\nconst DEFAULT_NON_INTERACTIVE_PERMISSION_POLICY: NonInteractivePermissionPolicy = \"deny\";\nconst DEFAULT_AUTH_POLICY: AuthPolicy = \"skip\";\nconst DEFAULT_OUTPUT_FORMAT: OutputFormat = \"text\";\nconst DEFAULT_QUEUE_MAX_DEPTH = 16;\nconst DEFAULT_DISABLE_EXEC = false;\nconst VALID_PERMISSION_MODES = new Set<PermissionMode>([\n \"approve-all\",\n \"approve-reads\",\n \"deny-all\",\n]);\nconst VALID_NON_INTERACTIVE_PERMISSION_POLICIES = new Set<NonInteractivePermissionPolicy>([\n \"deny\",\n \"fail\",\n]);\nconst VALID_AUTH_POLICIES = new Set<AuthPolicy>([\"skip\", \"fail\"]);\nconst VALID_OUTPUT_FORMATS = new Set<OutputFormat>([\"text\", \"json\", \"quiet\"]);\n\nfunction defaultGlobalConfigPath(): string {\n return path.join(os.homedir(), \".acpx\", \"config.json\");\n}\n\nfunction projectConfigPath(cwd: string): string {\n return path.join(path.resolve(cwd), \".acpxrc.json\");\n}\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction parseTtlMs(value: unknown, sourcePath: string): number | undefined {\n if (value == null) {\n return undefined;\n }\n if (typeof value !== \"number\" || !Number.isFinite(value) || value < 0) {\n throw new Error(`Invalid config ttl in ${sourcePath}: expected non-negative seconds`);\n }\n return Math.round(value * 1_000);\n}\n\nfunction parseTimeoutMs(value: unknown, sourcePath: string): number | undefined {\n if (value == null) {\n return undefined;\n }\n if (typeof value !== \"number\" || !Number.isFinite(value) || value <= 0) {\n throw new Error(`Invalid config timeout in ${sourcePath}: expected positive seconds or null`);\n }\n return Math.round(value * 1_000);\n}\n\nfunction parseQueueMaxDepth(value: unknown, sourcePath: string): number | undefined {\n if (value == null) {\n return undefined;\n }\n if (!Number.isInteger(value) || (value as number) <= 0) {\n throw new Error(`Invalid config queueMaxDepth in ${sourcePath}: expected positive integer`);\n }\n return value as number;\n}\n\nfunction parsePermissionMode(value: unknown, sourcePath: string): PermissionMode | undefined {\n if (value == null) {\n return undefined;\n }\n if (typeof value !== \"string\" || !VALID_PERMISSION_MODES.has(value as PermissionMode)) {\n throw new Error(\n `Invalid config defaultPermissions in ${sourcePath}: expected approve-all, approve-reads, or deny-all`,\n );\n }\n return value as PermissionMode;\n}\n\nfunction parseNonInteractivePermissionPolicy(\n value: unknown,\n sourcePath: string,\n): NonInteractivePermissionPolicy | undefined {\n if (value == null) {\n return undefined;\n }\n if (\n typeof value !== \"string\" ||\n !VALID_NON_INTERACTIVE_PERMISSION_POLICIES.has(value as NonInteractivePermissionPolicy)\n ) {\n throw new Error(\n `Invalid config nonInteractivePermissions in ${sourcePath}: expected deny or fail`,\n );\n }\n return value as NonInteractivePermissionPolicy;\n}\n\nfunction parseAuthPolicy(value: unknown, sourcePath: string): AuthPolicy | undefined {\n if (value == null) {\n return undefined;\n }\n if (typeof value !== \"string\" || !VALID_AUTH_POLICIES.has(value as AuthPolicy)) {\n throw new Error(`Invalid config authPolicy in ${sourcePath}: expected skip or fail`);\n }\n return value as AuthPolicy;\n}\n\nfunction parseOutputFormat(value: unknown, sourcePath: string): OutputFormat | undefined {\n if (value == null) {\n return undefined;\n }\n if (typeof value !== \"string\" || !VALID_OUTPUT_FORMATS.has(value as OutputFormat)) {\n throw new Error(`Invalid config format in ${sourcePath}: expected text, json, or quiet`);\n }\n return value as OutputFormat;\n}\n\nfunction parseDefaultAgent(value: unknown, sourcePath: string): string | undefined {\n if (value == null) {\n return undefined;\n }\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new Error(`Invalid config defaultAgent in ${sourcePath}: expected non-empty string`);\n }\n return normalizeAgentName(value);\n}\n\nfunction parseAgents(value: unknown, sourcePath: string): Record<string, string> | undefined {\n if (value == null) {\n return undefined;\n }\n if (!isObject(value)) {\n throw new Error(`Invalid config agents in ${sourcePath}: expected object`);\n }\n\n const parsed: Record<string, string> = {};\n for (const [name, raw] of Object.entries(value)) {\n if (!isObject(raw)) {\n throw new Error(\n `Invalid config agents.${name} in ${sourcePath}: expected object with command`,\n );\n }\n const command = raw.command;\n if (typeof command !== \"string\" || command.trim().length === 0) {\n throw new Error(\n `Invalid config agents.${name}.command in ${sourcePath}: expected non-empty string`,\n );\n }\n parsed[normalizeAgentName(name)] = command.trim();\n }\n\n return parsed;\n}\n\nfunction parseAuth(value: unknown, sourcePath: string): Record<string, string> | undefined {\n if (value == null) {\n return undefined;\n }\n if (!isObject(value)) {\n throw new Error(`Invalid config auth in ${sourcePath}: expected object`);\n }\n\n const parsed: Record<string, string> = {};\n for (const [methodId, rawCredential] of Object.entries(value)) {\n if (typeof rawCredential !== \"string\" || rawCredential.trim().length === 0) {\n throw new Error(\n `Invalid config auth.${methodId} in ${sourcePath}: expected non-empty string`,\n );\n }\n parsed[methodId] = rawCredential;\n }\n return parsed;\n}\n\nfunction parseDisableExec(value: unknown, sourcePath: string): boolean | undefined {\n if (value == null) {\n return undefined;\n }\n if (typeof value !== \"boolean\") {\n throw new Error(`Invalid config disableExec in ${sourcePath}: expected boolean`);\n }\n return value;\n}\n\nasync function readConfigFile(filePath: string): Promise<ConfigFileLoadResult> {\n try {\n const payload = await fs.readFile(filePath, \"utf8\");\n let parsed: unknown;\n try {\n parsed = JSON.parse(payload);\n } catch (error) {\n const reason = error instanceof Error ? error.message : String(error);\n throw new Error(`Invalid JSON in ${filePath}: ${reason}`, {\n cause: error,\n });\n }\n\n if (!isObject(parsed)) {\n throw new Error(`Invalid config in ${filePath}: expected top-level JSON object`);\n }\n return {\n config: parsed as ConfigFileShape,\n exists: true,\n };\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n return { exists: false };\n }\n throw error;\n }\n}\n\nfunction mergeAgents(\n globalAgents: Record<string, string> | undefined,\n projectAgents: Record<string, string> | undefined,\n): Record<string, string> {\n return {\n ...globalAgents,\n ...projectAgents,\n };\n}\n\nfunction mergeAuth(\n globalAuth: Record<string, string> | undefined,\n projectAuth: Record<string, string> | undefined,\n): Record<string, string> {\n return {\n ...globalAuth,\n ...projectAuth,\n };\n}\n\nexport async function loadResolvedConfig(cwd: string): Promise<ResolvedAcpxConfig> {\n const globalPath = defaultGlobalConfigPath();\n const projectPath = projectConfigPath(cwd);\n\n const [globalResult, projectResult] = await Promise.all([\n readConfigFile(globalPath),\n readConfigFile(projectPath),\n ]);\n\n const globalConfig = globalResult.config;\n const projectConfig = projectResult.config;\n\n const defaultAgent =\n parseDefaultAgent(projectConfig?.defaultAgent, projectPath) ??\n parseDefaultAgent(globalConfig?.defaultAgent, globalPath) ??\n DEFAULT_AGENT_NAME;\n\n const defaultPermissions =\n parsePermissionMode(projectConfig?.defaultPermissions, projectPath) ??\n parsePermissionMode(globalConfig?.defaultPermissions, globalPath) ??\n DEFAULT_PERMISSION_MODE;\n\n const nonInteractivePermissions =\n parseNonInteractivePermissionPolicy(projectConfig?.nonInteractivePermissions, projectPath) ??\n parseNonInteractivePermissionPolicy(globalConfig?.nonInteractivePermissions, globalPath) ??\n DEFAULT_NON_INTERACTIVE_PERMISSION_POLICY;\n\n const authPolicy =\n parseAuthPolicy(projectConfig?.authPolicy, projectPath) ??\n parseAuthPolicy(globalConfig?.authPolicy, globalPath) ??\n DEFAULT_AUTH_POLICY;\n\n const ttlMs =\n parseTtlMs(projectConfig?.ttl, projectPath) ??\n parseTtlMs(globalConfig?.ttl, globalPath) ??\n DEFAULT_TTL_MS;\n\n const timeoutConfiguredInProject =\n projectConfig != null && Object.prototype.hasOwnProperty.call(projectConfig, \"timeout\");\n const timeoutConfiguredInGlobal =\n globalConfig != null && Object.prototype.hasOwnProperty.call(globalConfig, \"timeout\");\n let timeoutMs: number | undefined = DEFAULT_TIMEOUT_MS;\n if (timeoutConfiguredInProject) {\n timeoutMs = parseTimeoutMs(projectConfig?.timeout, projectPath);\n } else if (timeoutConfiguredInGlobal) {\n timeoutMs = parseTimeoutMs(globalConfig?.timeout, globalPath);\n }\n\n const format =\n parseOutputFormat(projectConfig?.format, projectPath) ??\n parseOutputFormat(globalConfig?.format, globalPath) ??\n DEFAULT_OUTPUT_FORMAT;\n\n const queueMaxDepth =\n parseQueueMaxDepth(projectConfig?.queueMaxDepth, projectPath) ??\n parseQueueMaxDepth(globalConfig?.queueMaxDepth, globalPath) ??\n DEFAULT_QUEUE_MAX_DEPTH;\n\n const agents = mergeAgents(\n parseAgents(globalConfig?.agents, globalPath),\n parseAgents(projectConfig?.agents, projectPath),\n );\n const auth = mergeAuth(\n parseAuth(globalConfig?.auth, globalPath),\n parseAuth(projectConfig?.auth, projectPath),\n );\n\n const mcpServersConfiguredInProject =\n projectConfig != null && Object.prototype.hasOwnProperty.call(projectConfig, \"mcpServers\");\n const mcpServersConfiguredInGlobal =\n globalConfig != null && Object.prototype.hasOwnProperty.call(globalConfig, \"mcpServers\");\n let mcpServers: McpServer[] = [];\n if (mcpServersConfiguredInProject) {\n mcpServers = parseMcpServers(projectConfig?.mcpServers, projectPath);\n } else if (mcpServersConfiguredInGlobal) {\n mcpServers = parseMcpServers(globalConfig?.mcpServers, globalPath);\n }\n\n const disableExec =\n parseDisableExec(projectConfig?.disableExec, projectPath) ??\n parseDisableExec(globalConfig?.disableExec, globalPath) ??\n DEFAULT_DISABLE_EXEC;\n\n return {\n defaultAgent,\n defaultPermissions,\n nonInteractivePermissions,\n authPolicy,\n ttlMs,\n timeoutMs,\n queueMaxDepth,\n format,\n agents,\n auth,\n disableExec,\n mcpServers,\n globalPath,\n projectPath,\n hasGlobalConfig: globalResult.exists,\n hasProjectConfig: projectResult.exists,\n };\n}\n\nexport function toConfigDisplay(config: ResolvedAcpxConfig): {\n defaultAgent: string;\n defaultPermissions: PermissionMode;\n nonInteractivePermissions: NonInteractivePermissionPolicy;\n authPolicy: AuthPolicy;\n ttl: number;\n timeout: number | null;\n queueMaxDepth: number;\n format: OutputFormat;\n agents: Record<string, ConfigAgentEntry>;\n authMethods: string[];\n disableExec: boolean;\n} {\n const agents: Record<string, ConfigAgentEntry> = {};\n for (const [name, command] of Object.entries(config.agents)) {\n agents[name] = { command };\n }\n\n return {\n defaultAgent: config.defaultAgent,\n defaultPermissions: config.defaultPermissions,\n nonInteractivePermissions: config.nonInteractivePermissions,\n authPolicy: config.authPolicy,\n ttl: Math.round(config.ttlMs / 1_000),\n timeout: config.timeoutMs == null ? null : config.timeoutMs / 1_000,\n queueMaxDepth: config.queueMaxDepth,\n format: config.format,\n agents,\n authMethods: Object.keys(config.auth).toSorted(),\n disableExec: config.disableExec,\n };\n}\n\nexport async function initGlobalConfigFile(): Promise<{\n path: string;\n created: boolean;\n}> {\n const configPath = defaultGlobalConfigPath();\n await fs.mkdir(path.dirname(configPath), { recursive: true });\n\n try {\n await fs.access(configPath);\n return {\n path: configPath,\n created: false,\n };\n } catch {\n // file does not exist yet\n }\n\n const payload = {\n defaultAgent: DEFAULT_AGENT_NAME,\n defaultPermissions: \"approve-all\",\n nonInteractivePermissions: \"deny\",\n authPolicy: \"skip\",\n ttl: 300,\n timeout: null,\n queueMaxDepth: DEFAULT_QUEUE_MAX_DEPTH,\n format: \"text\",\n agents: {},\n auth: {},\n };\n\n await fs.writeFile(configPath, `${JSON.stringify(payload, null, 2)}\\n`, \"utf8\");\n return {\n path: configPath,\n created: true,\n };\n}\n","import { Command } from \"commander\";\nimport { initGlobalConfigFile, toConfigDisplay, type ResolvedAcpxConfig } from \"./config.js\";\nimport { 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 .action(async function (this: Command) {\n await handleConfigShow(this, config);\n });\n\n configCommand\n .command(\"init\")\n .description(\"Create global config template\")\n .action(async function (this: Command) {\n await handleConfigInit(this, config);\n });\n\n configCommand.action(async function (this: Command) {\n await handleConfigShow(this, config);\n });\n}\n","import { Command } from \"commander\";\nimport { findSession } from \"../session/persistence.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\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\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 if (\n emitJsonResult(globalFlags.format, {\n action: \"status_snapshot\",\n status: \"no-session\",\n summary: \"no active session\",\n })\n ) {\n return;\n }\n\n if (globalFlags.format === \"quiet\") {\n process.stdout.write(\"no-session\\n\");\n return;\n }\n\n process.stdout.write(\"session: -\\n\");\n process.stdout.write(`agent: ${agent.agentCommand}\\n`);\n process.stdout.write(\"pid: -\\n\");\n process.stdout.write(\"status: no-session\\n\");\n process.stdout.write(\"model: -\\n\");\n process.stdout.write(\"mode: -\\n\");\n process.stdout.write(\"uptime: -\\n\");\n process.stdout.write(\"lastPromptTime: -\\n\");\n return;\n }\n\n const health = await probeQueueOwnerHealth(record.acpxRecordId);\n const running = health.healthy;\n const payload = {\n sessionId: record.acpxRecordId,\n agentCommand: record.agentCommand,\n pid: health.pid ?? record.pid ?? null,\n status: running ? \"running\" : \"dead\",\n model: record.acpx?.current_model_id ?? null,\n mode: record.acpx?.current_mode_id ?? null,\n availableModels: record.acpx?.available_models ?? null,\n uptime: running ? (formatUptime(record.agentStartedAt) ?? null) : null,\n lastPromptTime: record.lastPromptAt ?? null,\n exitCode: running ? null : (record.lastAgentExitCode ?? null),\n signal: running ? null : (record.lastAgentExitSignal ?? null),\n ...agentSessionIdPayload(record.agentSessionId),\n };\n\n if (\n emitJsonResult(globalFlags.format, {\n action: \"status_snapshot\",\n status: running ? \"alive\" : \"dead\",\n pid: payload.pid ?? undefined,\n summary: running ? \"queue owner healthy\" : \"queue owner unavailable\",\n model: payload.model ?? undefined,\n mode: payload.mode ?? undefined,\n availableModels: payload.availableModels ?? undefined,\n uptime: payload.uptime ?? undefined,\n lastPromptTime: payload.lastPromptTime ?? undefined,\n exitCode: payload.exitCode ?? undefined,\n signal: payload.signal ?? undefined,\n acpxRecordId: record.acpxRecordId,\n acpxSessionId: record.acpSessionId,\n agentSessionId: record.agentSessionId,\n })\n ) {\n return;\n }\n\n if (globalFlags.format === \"quiet\") {\n process.stdout.write(`${payload.status}\\n`);\n return;\n }\n\n process.stdout.write(`session: ${payload.sessionId}\\n`);\n if (\"agentSessionId\" in payload) {\n process.stdout.write(`agentSessionId: ${payload.agentSessionId}\\n`);\n }\n process.stdout.write(`agent: ${payload.agentCommand}\\n`);\n process.stdout.write(`pid: ${payload.pid ?? \"-\"}\\n`);\n process.stdout.write(`status: ${payload.status}\\n`);\n process.stdout.write(`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 (payload.status === \"dead\") {\n process.stdout.write(`exitCode: ${payload.exitCode ?? \"-\"}\\n`);\n process.stdout.write(`signal: ${payload.signal ?? \"-\"}\\n`);\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 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 parseNonEmptyValue,\n parseSessionName,\n type PromptFlags,\n type SessionsHistoryFlags,\n type SessionsNewFlags,\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\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\n sessionsCommand.action(async function (this: Command) {\n await handleSessionsList(explicitAgentName, this, config);\n });\n\n sessionsCommand\n .command(\"list\")\n .description(\"List sessions\")\n .action(async function (this: Command) {\n await handleSessionsList(explicitAgentName, this, config);\n });\n\n sessionsCommand\n .command(\"new\")\n .description(\"Create a fresh session for current cwd\")\n .option(\"--name <name>\", \"Session name\", parseSessionName)\n .option(\"--resume-session <id>\", \"Resume existing ACP session id\", (value: string) =>\n parseNonEmptyValue(\"Resume session id\", value),\n )\n .action(async function (this: Command, flags: SessionsNewFlags) {\n await handleSessionsNew(explicitAgentName, flags, this, config);\n });\n\n sessionsCommand\n .command(\"ensure\")\n .description(\"Ensure a session exists for current cwd or ancestor\")\n .option(\"--name <name>\", \"Session name\", parseSessionName)\n .option(\"--resume-session <id>\", \"Resume existing ACP session id\", (value: string) =>\n parseNonEmptyValue(\"Resume session id\", value),\n )\n .action(async function (this: Command, flags: SessionsNewFlags) {\n await handleSessionsEnsure(explicitAgentName, flags, this, config);\n });\n\n sessionsCommand\n .command(\"close\")\n .description(\"Close session for current cwd\")\n .argument(\"[name]\", \"Session name\", parseSessionName)\n .action(async function (this: Command, name?: string) {\n await handleSessionsClose(explicitAgentName, name, this, config);\n });\n\n sessionsCommand\n .command(\"show\")\n .description(\"Show session metadata for current cwd\")\n .argument(\"[name]\", \"Session name\", parseSessionName)\n .action(async function (this: Command, name?: string) {\n await handleSessionsShow(explicitAgentName, name, this, config);\n });\n\n sessionsCommand\n .command(\"history\")\n .description(\"Show recent session history entries\")\n .argument(\"[name]\", \"Session name\", parseSessionName)\n .option(\n \"--limit <count>\",\n `Maximum number of entries to show (default: ${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\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 const parsedMcpServers = parseOptionalMcpServers(record.mcpServers, \"queue owner payload\");\n if (parsedMcpServers) {\n options.mcpServers = parsedMcpServers;\n }\n\n if (typeof record.nonInteractivePermissions === \"string\") {\n options.nonInteractivePermissions =\n record.nonInteractivePermissions === \"deny\" || record.nonInteractivePermissions === \"fail\"\n ? record.nonInteractivePermissions\n : undefined;\n }\n\n if (record.authCredentials && typeof record.authCredentials === \"object\") {\n const entries = Object.entries(record.authCredentials as UnknownRecord).filter(\n ([, value]) => typeof value === \"string\",\n ) as Array<[string, string]>;\n options.authCredentials = Object.fromEntries(entries);\n }\n\n if (record.authPolicy === \"skip\" || record.authPolicy === \"fail\") {\n options.authPolicy = record.authPolicy;\n }\n\n if (typeof record.suppressSdkConsoleErrors === \"boolean\") {\n options.suppressSdkConsoleErrors = record.suppressSdkConsoleErrors;\n }\n\n if (typeof record.verbose === \"boolean\") {\n options.verbose = record.verbose;\n }\n\n if (typeof record.ttlMs === \"number\" && Number.isFinite(record.ttlMs)) {\n options.ttlMs = record.ttlMs;\n }\n\n if (typeof record.maxQueueDepth === \"number\" && Number.isFinite(record.maxQueueDepth)) {\n options.maxQueueDepth = Math.max(1, Math.round(record.maxQueueDepth));\n }\n\n if (typeof record.promptRetries === \"number\" && Number.isFinite(record.promptRetries)) {\n options.promptRetries = Math.max(0, Math.round(record.promptRetries));\n }\n\n return options;\n}\n\nexport async function runQueueOwnerFromEnv(env: NodeJS.ProcessEnv): Promise<void> {\n const payload = env.ACPX_QUEUE_OWNER_PAYLOAD;\n if (!payload) {\n throw new Error(\"missing ACPX_QUEUE_OWNER_PAYLOAD\");\n }\n const options = parseQueueOwnerPayload(payload);\n await runSessionQueueOwner(options);\n}\n","import { readFileSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nconst UNKNOWN_VERSION = \"0.0.0-unknown\";\nconst MODULE_DIR = path.dirname(fileURLToPath(import.meta.url));\n\nlet cachedVersion: string | null = null;\n\nfunction parseVersion(value: unknown): string | null {\n if (typeof value !== \"string\") {\n return null;\n }\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : null;\n}\n\nfunction readPackageVersion(packageJsonPath: string): string | null {\n try {\n const parsed = JSON.parse(readFileSync(packageJsonPath, \"utf8\")) as {\n version?: unknown;\n };\n return parseVersion(parsed.version);\n } catch {\n return null;\n }\n}\n\nfunction resolveVersionFromAncestors(startDir: string): string | null {\n let current = startDir;\n while (true) {\n const packageVersion = readPackageVersion(path.join(current, \"package.json\"));\n if (packageVersion) {\n return packageVersion;\n }\n const parent = path.dirname(current);\n if (parent === current) {\n return null;\n }\n current = parent;\n }\n}\n\nexport function resolveAcpxVersion(params?: {\n env?: NodeJS.ProcessEnv;\n packageJsonPath?: string;\n}): string {\n const env = params?.env ?? process.env;\n const envPackageName = parseVersion(env.npm_package_name);\n const envVersion = parseVersion(env.npm_package_version);\n if (envPackageName === \"acpx\" && envVersion) {\n return envVersion;\n }\n\n if (params?.packageJsonPath) {\n return readPackageVersion(params.packageJsonPath) ?? UNKNOWN_VERSION;\n }\n\n return resolveVersionFromAncestors(MODULE_DIR) ?? UNKNOWN_VERSION;\n}\n\nexport function getAcpxVersion(): string {\n if (cachedVersion) {\n return cachedVersion;\n }\n cachedVersion = resolveAcpxVersion();\n return cachedVersion;\n}\n","#!/usr/bin/env node\n\nimport 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 } 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\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\nfunction detectAgentToken(argv: string[]): AgentTokenScan {\n let hasAgentOverride = false;\n\n for (let index = 0; index < argv.length; index += 1) {\n const token = argv[index];\n\n if (token === \"--\") {\n break;\n }\n\n if (!token.startsWith(\"-\") || token === \"-\") {\n return { token, hasAgentOverride };\n }\n\n if (token === \"--agent\") {\n hasAgentOverride = true;\n index += 1;\n continue;\n }\n\n if (token.startsWith(\"--agent=\")) {\n hasAgentOverride = true;\n continue;\n }\n\n if (\n token === \"--cwd\" ||\n token === \"--auth-policy\" ||\n token === \"--non-interactive-permissions\" ||\n token === \"--format\" ||\n token === \"--model\" ||\n token === \"--allowed-tools\" ||\n token === \"--max-turns\" ||\n token === \"--timeout\" ||\n token === \"--ttl\" ||\n token === \"--file\"\n ) {\n index += 1;\n continue;\n }\n\n if (\n token.startsWith(\"--cwd=\") ||\n token.startsWith(\"--auth-policy=\") ||\n token.startsWith(\"--non-interactive-permissions=\") ||\n token.startsWith(\"--format=\") ||\n token.startsWith(\"--model=\") ||\n token.startsWith(\"--allowed-tools=\") ||\n token.startsWith(\"--max-turns=\") ||\n token.startsWith(\"--json-strict=\") ||\n token.startsWith(\"--timeout=\") ||\n token.startsWith(\"--ttl=\") ||\n token.startsWith(\"--file=\")\n ) {\n continue;\n }\n\n if (\n token === \"--approve-all\" ||\n token === \"--approve-reads\" ||\n token === \"--deny-all\" ||\n token === \"--json-strict\" ||\n token === \"--verbose\" ||\n token === \"--suppress-reads\"\n ) {\n continue;\n }\n\n return { hasAgentOverride };\n }\n\n return { hasAgentOverride };\n}\n\nfunction detectInitialCwd(argv: string[]): string {\n for (let index = 0; index < argv.length; index += 1) {\n const token = argv[index];\n\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 (token === \"--json-strict\" || token.startsWith(\"--json-strict=\")) {\n return \"json\";\n }\n\n if (token === \"--format\") {\n const raw = argv[index + 1];\n if (raw && OUTPUT_FORMATS.includes(raw as OutputFormat)) {\n detectedFormat = raw as OutputFormat;\n }\n continue;\n }\n\n if (token.startsWith(\"--format=\")) {\n const raw = token.slice(\"--format=\".length).trim();\n if (OUTPUT_FORMATS.includes(raw as OutputFormat)) {\n detectedFormat = raw as OutputFormat;\n }\n }\n }\n\n return detectedFormat;\n}\n\nfunction detectJsonStrict(argv: string[]): boolean {\n for (let index = 0; index < argv.length; index += 1) {\n const token = argv[index];\n\n if (token === \"--\") {\n break;\n }\n\n if (token === \"--json-strict\" || token.startsWith(\"--json-strict=\")) {\n return true;\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 }\n}\n\nasync function runWithOutputPolicy<T>(\n _outputPolicy: OutputPolicy,\n run: () => Promise<T>,\n): Promise<T> {\n return await run();\n}\n\nexport async function main(argv: string[] = process.argv): Promise<void> {\n installPerfMetricsCapture({\n argv: argv.slice(2),\n role: argv[2] === \"__queue-owner\" ? \"queue_owner\" : \"cli\",\n });\n\n if (argv.includes(\"--version\") || argv.includes(\"-V\")) {\n process.stdout.write(`${getAcpxVersion()}\\n`);\n return;\n }\n\n if (argv[2] === \"__queue-owner\") {\n try {\n await runQueueOwnerFromEnv(process.env);\n return;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n process.stderr.write(`[acpx] queue owner failed: ${message}\\n`);\n process.exit(EXIT_CODES.ERROR);\n }\n }\n\n if (shouldMaybeHandleSkillflag(argv)) {\n const { findSkillsRoot, maybeHandleSkillflag } = await loadSkillflagModule();\n await maybeHandleSkillflag(argv, {\n skillsRoot: findSkillsRoot(import.meta.url),\n includeBundledSkill: false,\n });\n }\n\n const rawArgs = argv.slice(2);\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 = new Command();\n program\n .name(\"acpx\")\n .description(\"Headless CLI client for the Agent Client Protocol\")\n .version(getAcpxVersion())\n .enablePositionalOptions()\n .showHelpAfterError();\n\n if (requestedJsonStrict) {\n program.configureOutput({\n writeOut: () => {\n // json-strict intentionally suppresses non-JSON stdout output.\n },\n writeErr: () => {\n // json-strict intentionally suppresses non-JSON stderr output.\n },\n });\n }\n\n addGlobalFlags(program);\n\n 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 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 });\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\nconst queueOwnerArgOverride = buildQueueOwnerArgOverride(fileURLToPath(import.meta.url));\nif (queueOwnerArgOverride) {\n process.env.ACPX_QUEUE_OWNER_ARGS ??= queueOwnerArgOverride;\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 void main(process.argv);\n}\n"],"mappings":"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"}
|