acpx 0.6.1 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/README.md +1 -0
  2. package/dist/{cli-Ddxpnz9X.js → cli-T-Z-9x6a.js} +4 -4
  3. package/dist/{cli-Ddxpnz9X.js.map → cli-T-Z-9x6a.js.map} +1 -1
  4. package/dist/cli.js +8 -8
  5. package/dist/{client-2fTFutRH.d.ts → client-COPilhO_.d.ts} +4 -2
  6. package/dist/client-COPilhO_.d.ts.map +1 -0
  7. package/dist/{flags-yXzUm7Aq.js → flags-Dj-IXgo9.js} +3 -3
  8. package/dist/{flags-yXzUm7Aq.js.map → flags-Dj-IXgo9.js.map} +1 -1
  9. package/dist/{flows-CDsfbaA2.js → flows-CF8w1rPI.js} +112 -9
  10. package/dist/flows-CF8w1rPI.js.map +1 -0
  11. package/dist/flows.d.ts +16 -1
  12. package/dist/flows.d.ts.map +1 -1
  13. package/dist/flows.js +2 -2
  14. package/dist/{ipc-BruTG5Fb.js → ipc-ABXlXzGP.js} +51 -2
  15. package/dist/ipc-ABXlXzGP.js.map +1 -0
  16. package/dist/{prompt-turn-BY5SwU1F.js → prompt-turn-CVPMWdj1.js} +36 -6
  17. package/dist/prompt-turn-CVPMWdj1.js.map +1 -0
  18. package/dist/{render-yqwtaOX4.js → render-N5YwotCy.js} +2 -2
  19. package/dist/{render-yqwtaOX4.js.map → render-N5YwotCy.js.map} +1 -1
  20. package/dist/runtime.d.ts +5 -3
  21. package/dist/runtime.d.ts.map +1 -1
  22. package/dist/runtime.js +19 -11
  23. package/dist/runtime.js.map +1 -1
  24. package/dist/{session-BwgaPK8-.js → session-CDaQe6BH.js} +15 -3
  25. package/dist/session-CDaQe6BH.js.map +1 -0
  26. package/package.json +10 -10
  27. package/skills/acpx/SKILL.md +1 -0
  28. package/dist/client-2fTFutRH.d.ts.map +0 -1
  29. package/dist/flows-CDsfbaA2.js.map +0 -1
  30. package/dist/ipc-BruTG5Fb.js.map +0 -1
  31. package/dist/prompt-turn-BY5SwU1F.js.map +0 -1
  32. package/dist/session-BwgaPK8-.js.map +0 -1
@@ -1,6 +1,6 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-CiIaOW0V.js";
2
2
  import { u as normalizeRuntimeSessionId } from "./perf-metrics-C2pXfxvR.js";
3
- import { s as probeQueueOwnerHealth } from "./ipc-BruTG5Fb.js";
3
+ import { c as probeQueueOwnerHealth } from "./ipc-ABXlXzGP.js";
4
4
  import path from "node:path";
5
5
  //#region src/cli/output/json-output.ts
6
6
  function emitJsonResult(format, payload) {
@@ -169,4 +169,4 @@ function agentSessionIdPayload(agentSessionId) {
169
169
  //#endregion
170
170
  export { emitJsonResult as i, formatPromptSessionBannerLine as n, render_exports as r, agentSessionIdPayload as t };
171
171
 
172
- //# sourceMappingURL=render-yqwtaOX4.js.map
172
+ //# sourceMappingURL=render-N5YwotCy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"render-yqwtaOX4.js","names":[],"sources":["../src/cli/output/json-output.ts","../src/cli/output/render.ts"],"sourcesContent":["import type { OutputFormat } from \"../../types.js\";\n\nexport function emitJsonResult(format: OutputFormat, payload: unknown): boolean {\n if (format !== \"json\") {\n return false;\n }\n process.stdout.write(`${JSON.stringify(payload)}\\n`);\n return true;\n}\n","import path from \"node:path\";\nimport { normalizeRuntimeSessionId } from \"../../session/runtime-session-id.js\";\nimport type { OutputFormat, SessionRecord } from \"../../types.js\";\nimport { probeQueueOwnerHealth } from \"../queue/ipc.js\";\nimport { emitJsonResult } from \"./json-output.js\";\n\nfunction formatSessionLabel(record: SessionRecord): string {\n return record.name ?? \"cwd\";\n}\n\nfunction formatRoutedFrom(sessionCwd: string, currentCwd: string): string | undefined {\n const relative = path.relative(sessionCwd, currentCwd);\n if (!relative || relative === \".\") {\n return undefined;\n }\n return relative.startsWith(\".\") ? relative : `.${path.sep}${relative}`;\n}\n\ntype SessionConnectionStatus = \"connected\" | \"needs reconnect\";\n\nasync function resolveSessionConnectionStatus(\n record: SessionRecord,\n): Promise<SessionConnectionStatus> {\n const health = await probeQueueOwnerHealth(record.acpxRecordId);\n return health.healthy ? \"connected\" : \"needs reconnect\";\n}\n\nexport function printSessionsByFormat(sessions: SessionRecord[], format: OutputFormat): void {\n if (format === \"json\") {\n process.stdout.write(`${JSON.stringify(sessions)}\\n`);\n return;\n }\n\n if (format === \"quiet\") {\n for (const session of sessions) {\n const closedMarker = session.closed ? \" [closed]\" : \"\";\n process.stdout.write(`${session.acpxRecordId}${closedMarker}\\n`);\n }\n return;\n }\n\n if (sessions.length === 0) {\n process.stdout.write(\"No sessions\\n\");\n return;\n }\n\n for (const session of sessions) {\n const closedMarker = session.closed ? \" [closed]\" : \"\";\n process.stdout.write(\n `${session.acpxRecordId}${closedMarker}\\t${session.name ?? \"-\"}\\t${session.cwd}\\t${session.lastUsedAt}\\n`,\n );\n }\n}\n\nexport function printClosedSessionByFormat(record: SessionRecord, format: OutputFormat): void {\n if (\n emitJsonResult(format, {\n action: \"session_closed\",\n acpxRecordId: record.acpxRecordId,\n acpxSessionId: record.acpSessionId,\n agentSessionId: record.agentSessionId,\n })\n ) {\n return;\n }\n\n if (format === \"quiet\") {\n return;\n }\n\n process.stdout.write(`${record.acpxRecordId}\\n`);\n}\n\nexport function printNewSessionByFormat(\n record: SessionRecord,\n replaced: SessionRecord | undefined,\n format: OutputFormat,\n): void {\n if (\n emitJsonResult(format, {\n action: \"session_ensured\",\n created: true,\n acpxRecordId: record.acpxRecordId,\n acpxSessionId: record.acpSessionId,\n agentSessionId: record.agentSessionId,\n name: record.name,\n replacedSessionId: replaced?.acpxRecordId,\n })\n ) {\n return;\n }\n\n if (format === \"quiet\") {\n process.stdout.write(`${record.acpxRecordId}\\n`);\n return;\n }\n\n if (replaced) {\n process.stdout.write(`${record.acpxRecordId}\\t(replaced ${replaced.acpxRecordId})\\n`);\n return;\n }\n\n process.stdout.write(`${record.acpxRecordId}\\n`);\n}\n\nexport function printEnsuredSessionByFormat(\n record: SessionRecord,\n created: boolean,\n format: OutputFormat,\n): void {\n if (\n emitJsonResult(format, {\n action: \"session_ensured\",\n created,\n acpxRecordId: record.acpxRecordId,\n acpxSessionId: record.acpSessionId,\n agentSessionId: record.agentSessionId,\n name: record.name,\n })\n ) {\n return;\n }\n\n if (format === \"quiet\") {\n process.stdout.write(`${record.acpxRecordId}\\n`);\n return;\n }\n\n const action = created ? \"created\" : \"existing\";\n process.stdout.write(`${record.acpxRecordId}\\t(${action})\\n`);\n}\n\nexport function printQueuedPromptByFormat(\n result: {\n sessionId: string;\n requestId: string;\n },\n format: OutputFormat,\n): void {\n if (\n emitJsonResult(format, {\n action: \"prompt_queued\",\n acpxRecordId: result.sessionId,\n requestId: result.requestId,\n })\n ) {\n return;\n }\n\n if (format === \"quiet\") {\n return;\n }\n\n process.stdout.write(`[queued] ${result.requestId}\\n`);\n}\n\nexport function formatPromptSessionBannerLine(\n record: SessionRecord,\n currentCwd: string,\n connectionStatus: SessionConnectionStatus = \"needs reconnect\",\n): string {\n const label = formatSessionLabel(record);\n const normalizedSessionCwd = path.resolve(record.cwd);\n const normalizedCurrentCwd = path.resolve(currentCwd);\n const routedFrom =\n normalizedSessionCwd === normalizedCurrentCwd\n ? undefined\n : formatRoutedFrom(normalizedSessionCwd, normalizedCurrentCwd);\n const status = connectionStatus;\n\n if (routedFrom) {\n return `[acpx] session ${label} (${record.acpxRecordId}) · ${normalizedSessionCwd} (routed from ${routedFrom}) · agent ${status}`;\n }\n\n return `[acpx] session ${label} (${record.acpxRecordId}) · ${normalizedSessionCwd} · agent ${status}`;\n}\n\nexport async function printPromptSessionBanner(\n record: SessionRecord,\n currentCwd: string,\n format: OutputFormat,\n jsonStrict = false,\n): Promise<void> {\n if (format === \"quiet\" || (jsonStrict && format === \"json\")) {\n return;\n }\n\n const status = await resolveSessionConnectionStatus(record);\n process.stderr.write(`${formatPromptSessionBannerLine(record, currentCwd, status)}\\n`);\n}\n\nexport function printCreatedSessionBanner(\n record: SessionRecord,\n agentName: string,\n format: OutputFormat,\n jsonStrict = false,\n): void {\n if (format === \"quiet\" || (jsonStrict && format === \"json\")) {\n return;\n }\n\n const label = formatSessionLabel(record);\n process.stderr.write(`[acpx] created session ${label} (${record.acpxRecordId})\\n`);\n process.stderr.write(`[acpx] agent: ${agentName}\\n`);\n process.stderr.write(`[acpx] cwd: ${record.cwd}\\n`);\n}\n\nfunction formatBytes(bytes: number): string {\n if (bytes >= 1_073_741_824) {\n return `${(bytes / 1_073_741_824).toFixed(1)} GB`;\n }\n if (bytes >= 1_048_576) {\n return `${(bytes / 1_048_576).toFixed(1)} MB`;\n }\n if (bytes >= 1024) {\n return `${(bytes / 1024).toFixed(1)} KB`;\n }\n return `${bytes} B`;\n}\n\nexport function printPruneResultByFormat(\n result: { pruned: SessionRecord[]; bytesFreed: number; dryRun: boolean },\n format: OutputFormat,\n): void {\n const count = result.pruned.length;\n\n if (\n emitJsonResult(format, {\n action: result.dryRun ? \"sessions_prune_dry_run\" : \"sessions_pruned\",\n dryRun: result.dryRun,\n count,\n bytesFreed: result.bytesFreed,\n pruned: result.pruned.map((r) => r.acpxRecordId),\n })\n ) {\n return;\n }\n\n if (format === \"quiet\") {\n for (const record of result.pruned) {\n process.stdout.write(`${record.acpxRecordId}\\n`);\n }\n return;\n }\n\n if (count === 0) {\n process.stdout.write(\n result.dryRun ? \"[DRY RUN] No sessions to prune\\n\" : \"No sessions pruned\\n\",\n );\n return;\n }\n\n const prefix = result.dryRun ? \"[DRY RUN] Would prune\" : \"Pruned\";\n const bytesSuffix =\n !result.dryRun && result.bytesFreed > 0 ? `, freed ${formatBytes(result.bytesFreed)}` : \"\";\n process.stdout.write(`${prefix} ${count} session${count === 1 ? \"\" : \"s\"}${bytesSuffix}\\n`);\n\n for (const record of result.pruned) {\n const label = record.name ? ` (${record.name})` : \"\";\n process.stdout.write(\n ` ${record.acpxRecordId}${label}\\t${record.closedAt ?? record.lastUsedAt}\\n`,\n );\n }\n}\n\nexport function agentSessionIdPayload(agentSessionId: string | undefined): {\n agentSessionId?: string;\n} {\n const normalized = normalizeRuntimeSessionId(agentSessionId);\n if (!normalized) {\n return {};\n }\n\n return { agentSessionId: normalized };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"render-N5YwotCy.js","names":[],"sources":["../src/cli/output/json-output.ts","../src/cli/output/render.ts"],"sourcesContent":["import type { OutputFormat } from \"../../types.js\";\n\nexport function emitJsonResult(format: OutputFormat, payload: unknown): boolean {\n if (format !== \"json\") {\n return false;\n }\n process.stdout.write(`${JSON.stringify(payload)}\\n`);\n return true;\n}\n","import path from \"node:path\";\nimport { normalizeRuntimeSessionId } from \"../../session/runtime-session-id.js\";\nimport type { OutputFormat, SessionRecord } from \"../../types.js\";\nimport { probeQueueOwnerHealth } from \"../queue/ipc.js\";\nimport { emitJsonResult } from \"./json-output.js\";\n\nfunction formatSessionLabel(record: SessionRecord): string {\n return record.name ?? \"cwd\";\n}\n\nfunction formatRoutedFrom(sessionCwd: string, currentCwd: string): string | undefined {\n const relative = path.relative(sessionCwd, currentCwd);\n if (!relative || relative === \".\") {\n return undefined;\n }\n return relative.startsWith(\".\") ? relative : `.${path.sep}${relative}`;\n}\n\ntype SessionConnectionStatus = \"connected\" | \"needs reconnect\";\n\nasync function resolveSessionConnectionStatus(\n record: SessionRecord,\n): Promise<SessionConnectionStatus> {\n const health = await probeQueueOwnerHealth(record.acpxRecordId);\n return health.healthy ? \"connected\" : \"needs reconnect\";\n}\n\nexport function printSessionsByFormat(sessions: SessionRecord[], format: OutputFormat): void {\n if (format === \"json\") {\n process.stdout.write(`${JSON.stringify(sessions)}\\n`);\n return;\n }\n\n if (format === \"quiet\") {\n for (const session of sessions) {\n const closedMarker = session.closed ? \" [closed]\" : \"\";\n process.stdout.write(`${session.acpxRecordId}${closedMarker}\\n`);\n }\n return;\n }\n\n if (sessions.length === 0) {\n process.stdout.write(\"No sessions\\n\");\n return;\n }\n\n for (const session of sessions) {\n const closedMarker = session.closed ? \" [closed]\" : \"\";\n process.stdout.write(\n `${session.acpxRecordId}${closedMarker}\\t${session.name ?? \"-\"}\\t${session.cwd}\\t${session.lastUsedAt}\\n`,\n );\n }\n}\n\nexport function printClosedSessionByFormat(record: SessionRecord, format: OutputFormat): void {\n if (\n emitJsonResult(format, {\n action: \"session_closed\",\n acpxRecordId: record.acpxRecordId,\n acpxSessionId: record.acpSessionId,\n agentSessionId: record.agentSessionId,\n })\n ) {\n return;\n }\n\n if (format === \"quiet\") {\n return;\n }\n\n process.stdout.write(`${record.acpxRecordId}\\n`);\n}\n\nexport function printNewSessionByFormat(\n record: SessionRecord,\n replaced: SessionRecord | undefined,\n format: OutputFormat,\n): void {\n if (\n emitJsonResult(format, {\n action: \"session_ensured\",\n created: true,\n acpxRecordId: record.acpxRecordId,\n acpxSessionId: record.acpSessionId,\n agentSessionId: record.agentSessionId,\n name: record.name,\n replacedSessionId: replaced?.acpxRecordId,\n })\n ) {\n return;\n }\n\n if (format === \"quiet\") {\n process.stdout.write(`${record.acpxRecordId}\\n`);\n return;\n }\n\n if (replaced) {\n process.stdout.write(`${record.acpxRecordId}\\t(replaced ${replaced.acpxRecordId})\\n`);\n return;\n }\n\n process.stdout.write(`${record.acpxRecordId}\\n`);\n}\n\nexport function printEnsuredSessionByFormat(\n record: SessionRecord,\n created: boolean,\n format: OutputFormat,\n): void {\n if (\n emitJsonResult(format, {\n action: \"session_ensured\",\n created,\n acpxRecordId: record.acpxRecordId,\n acpxSessionId: record.acpSessionId,\n agentSessionId: record.agentSessionId,\n name: record.name,\n })\n ) {\n return;\n }\n\n if (format === \"quiet\") {\n process.stdout.write(`${record.acpxRecordId}\\n`);\n return;\n }\n\n const action = created ? \"created\" : \"existing\";\n process.stdout.write(`${record.acpxRecordId}\\t(${action})\\n`);\n}\n\nexport function printQueuedPromptByFormat(\n result: {\n sessionId: string;\n requestId: string;\n },\n format: OutputFormat,\n): void {\n if (\n emitJsonResult(format, {\n action: \"prompt_queued\",\n acpxRecordId: result.sessionId,\n requestId: result.requestId,\n })\n ) {\n return;\n }\n\n if (format === \"quiet\") {\n return;\n }\n\n process.stdout.write(`[queued] ${result.requestId}\\n`);\n}\n\nexport function formatPromptSessionBannerLine(\n record: SessionRecord,\n currentCwd: string,\n connectionStatus: SessionConnectionStatus = \"needs reconnect\",\n): string {\n const label = formatSessionLabel(record);\n const normalizedSessionCwd = path.resolve(record.cwd);\n const normalizedCurrentCwd = path.resolve(currentCwd);\n const routedFrom =\n normalizedSessionCwd === normalizedCurrentCwd\n ? undefined\n : formatRoutedFrom(normalizedSessionCwd, normalizedCurrentCwd);\n const status = connectionStatus;\n\n if (routedFrom) {\n return `[acpx] session ${label} (${record.acpxRecordId}) · ${normalizedSessionCwd} (routed from ${routedFrom}) · agent ${status}`;\n }\n\n return `[acpx] session ${label} (${record.acpxRecordId}) · ${normalizedSessionCwd} · agent ${status}`;\n}\n\nexport async function printPromptSessionBanner(\n record: SessionRecord,\n currentCwd: string,\n format: OutputFormat,\n jsonStrict = false,\n): Promise<void> {\n if (format === \"quiet\" || (jsonStrict && format === \"json\")) {\n return;\n }\n\n const status = await resolveSessionConnectionStatus(record);\n process.stderr.write(`${formatPromptSessionBannerLine(record, currentCwd, status)}\\n`);\n}\n\nexport function printCreatedSessionBanner(\n record: SessionRecord,\n agentName: string,\n format: OutputFormat,\n jsonStrict = false,\n): void {\n if (format === \"quiet\" || (jsonStrict && format === \"json\")) {\n return;\n }\n\n const label = formatSessionLabel(record);\n process.stderr.write(`[acpx] created session ${label} (${record.acpxRecordId})\\n`);\n process.stderr.write(`[acpx] agent: ${agentName}\\n`);\n process.stderr.write(`[acpx] cwd: ${record.cwd}\\n`);\n}\n\nfunction formatBytes(bytes: number): string {\n if (bytes >= 1_073_741_824) {\n return `${(bytes / 1_073_741_824).toFixed(1)} GB`;\n }\n if (bytes >= 1_048_576) {\n return `${(bytes / 1_048_576).toFixed(1)} MB`;\n }\n if (bytes >= 1024) {\n return `${(bytes / 1024).toFixed(1)} KB`;\n }\n return `${bytes} B`;\n}\n\nexport function printPruneResultByFormat(\n result: { pruned: SessionRecord[]; bytesFreed: number; dryRun: boolean },\n format: OutputFormat,\n): void {\n const count = result.pruned.length;\n\n if (\n emitJsonResult(format, {\n action: result.dryRun ? \"sessions_prune_dry_run\" : \"sessions_pruned\",\n dryRun: result.dryRun,\n count,\n bytesFreed: result.bytesFreed,\n pruned: result.pruned.map((r) => r.acpxRecordId),\n })\n ) {\n return;\n }\n\n if (format === \"quiet\") {\n for (const record of result.pruned) {\n process.stdout.write(`${record.acpxRecordId}\\n`);\n }\n return;\n }\n\n if (count === 0) {\n process.stdout.write(\n result.dryRun ? \"[DRY RUN] No sessions to prune\\n\" : \"No sessions pruned\\n\",\n );\n return;\n }\n\n const prefix = result.dryRun ? \"[DRY RUN] Would prune\" : \"Pruned\";\n const bytesSuffix =\n !result.dryRun && result.bytesFreed > 0 ? `, freed ${formatBytes(result.bytesFreed)}` : \"\";\n process.stdout.write(`${prefix} ${count} session${count === 1 ? \"\" : \"s\"}${bytesSuffix}\\n`);\n\n for (const record of result.pruned) {\n const label = record.name ? ` (${record.name})` : \"\";\n process.stdout.write(\n ` ${record.acpxRecordId}${label}\\t${record.closedAt ?? record.lastUsedAt}\\n`,\n );\n }\n}\n\nexport function agentSessionIdPayload(agentSessionId: string | undefined): {\n agentSessionId?: string;\n} {\n const normalized = normalizeRuntimeSessionId(agentSessionId);\n if (!normalized) {\n return {};\n }\n\n return { agentSessionId: normalized };\n}\n"],"mappings":"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"}
package/dist/runtime.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { a as PermissionMode, i as NonInteractivePermissionPolicy, r as McpServer, s as SessionRecord } from "./types-CVBeQyi3.js";
2
- import { t as AcpClient } from "./client-2fTFutRH.js";
2
+ import { t as AcpClient } from "./client-COPilhO_.js";
3
3
  import fs from "node:fs";
4
4
 
5
5
  //#region src/agent-registry.d.ts
@@ -92,11 +92,13 @@ type AcpRuntimeEvent = {
92
92
  type: "error";
93
93
  message: string;
94
94
  code?: string;
95
+ detailCode?: string;
95
96
  retryable?: boolean;
96
97
  };
97
98
  type AcpRuntimeTurnResultError = {
98
99
  message: string;
99
100
  code?: string;
101
+ detailCode?: string;
100
102
  retryable?: boolean;
101
103
  };
102
104
  type AcpRuntimeTurnResult = {
@@ -307,9 +309,9 @@ declare class AcpxRuntime implements AcpxRuntimeLike {
307
309
  }): Promise<void>;
308
310
  };
309
311
  runTurn(input: AcpRuntimeTurnInput): AsyncIterable<AcpRuntimeEvent>;
310
- getCapabilities(_input?: {
312
+ getCapabilities(input?: {
311
313
  handle?: AcpRuntimeHandle;
312
- }): AcpRuntimeCapabilities;
314
+ }): Promise<AcpRuntimeCapabilities>;
313
315
  getStatus(input: {
314
316
  handle: AcpRuntimeHandle;
315
317
  signal?: AbortSignal;
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","names":[],"sources":["../src/agent-registry.ts","../src/runtime/public/contract.ts","../src/runtime/engine/manager.ts","../src/runtime/public/file-session-store.ts","../src/runtime/public/errors.ts","../src/runtime/public/shared.ts","../src/runtime/public/handle-state.ts","../src/runtime.ts"],"mappings":"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"}
1
+ {"version":3,"file":"runtime.d.ts","names":[],"sources":["../src/agent-registry.ts","../src/runtime/public/contract.ts","../src/runtime/engine/manager.ts","../src/runtime/public/file-session-store.ts","../src/runtime/public/errors.ts","../src/runtime/public/shared.ts","../src/runtime/public/handle-state.ts","../src/runtime.ts"],"mappings":"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"}
package/dist/runtime.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { C as isAcpResourceNotFoundError, S as extractAcpError, g as textPrompt, x as normalizeOutputError } from "./perf-metrics-C2pXfxvR.js";
2
- import { I as parseSessionRecord, J as withTimeout, Q as resolveAgentCommand, R as defaultSessionEventLog, S as AcpClient, U as assertPersistedKeyPolicy, W as serializeSessionRecordForDisk, X as listBuiltInAgents, Y as DEFAULT_AGENT_NAME, _ as createSessionConversation, a as connectAndLoadSession, b as recordSessionUpdate, c as reconcileAgentSessionId, d as setDesiredConfigOption, f as setDesiredModeId, g as cloneSessionConversation, h as cloneSessionAcpxState, n as withConnectedSession, o as applyConversation, s as applyLifecycleSnapshotToRecord, t as runPromptTurn, v as recordClientOperation, x as trimConversationForRuntime, y as recordPromptSubmission } from "./prompt-turn-BY5SwU1F.js";
2
+ import { $ as resolveAgentCommand, C as AcpClient, G as serializeSessionRecordForDisk, L as parseSessionRecord, S as trimConversationForRuntime, W as assertPersistedKeyPolicy, X as DEFAULT_AGENT_NAME, Y as withTimeout, Z as listBuiltInAgents, _ as cloneSessionConversation, a as connectAndLoadSession, b as recordPromptSubmission, c as reconcileAgentSessionId, d as setDesiredConfigOption, f as setDesiredModeId, g as cloneSessionAcpxState, h as applyConfigOptionsToRecord, n as withConnectedSession, o as applyConversation, s as applyLifecycleSnapshotToRecord, t as runPromptTurn, v as createSessionConversation, x as recordSessionUpdate, y as recordClientOperation, z as defaultSessionEventLog } from "./prompt-turn-CVPMWdj1.js";
3
3
  import path from "node:path";
4
4
  import fs from "node:fs/promises";
5
5
  import { randomUUID } from "node:crypto";
@@ -302,12 +302,6 @@ function createDeferred() {
302
302
  reject
303
303
  };
304
304
  }
305
- function applyConfigOptionsToRecord(record, configOptions) {
306
- if (!configOptions) return;
307
- const acpxState = cloneSessionAcpxState(record.acpx) ?? {};
308
- acpxState.config_options = structuredClone(configOptions);
309
- record.acpx = acpxState;
310
- }
311
305
  var AsyncEventQueue = class {
312
306
  items = [];
313
307
  waits = [];
@@ -404,6 +398,7 @@ function legacyTerminalEventFromTurnResult(result) {
404
398
  type: "error",
405
399
  message: result.error.message,
406
400
  ...result.error.code ? { code: result.error.code } : {},
401
+ ...result.error.detailCode ? { detailCode: result.error.detailCode } : {},
407
402
  ...result.error.retryable === void 0 ? {} : { retryable: result.error.retryable }
408
403
  };
409
404
  return {
@@ -532,14 +527,17 @@ var AcpRuntimeManager = class {
532
527
  await client.start();
533
528
  let sessionId;
534
529
  let agentSessionId;
530
+ let sessionResult;
535
531
  if (input.resumeSessionId) {
536
532
  const loaded = await client.loadSession(input.resumeSessionId, cwd);
537
533
  sessionId = input.resumeSessionId;
538
534
  agentSessionId = loaded.agentSessionId;
535
+ sessionResult = loaded;
539
536
  } else {
540
537
  const created = await client.createSession(cwd);
541
538
  sessionId = created.sessionId;
542
539
  agentSessionId = created.agentSessionId;
540
+ sessionResult = created;
543
541
  }
544
542
  const record = createInitialRecord({
545
543
  recordId: createRecordId(input.sessionKey, input.mode),
@@ -552,6 +550,7 @@ var AcpRuntimeManager = class {
552
550
  this.closingActiveRecords.delete(record.acpxRecordId);
553
551
  record.protocolVersion = client.initializeResult?.protocolVersion;
554
552
  record.agentCapabilities = client.initializeResult?.agentCapabilities;
553
+ applyConfigOptionsToRecord(record, sessionResult);
555
554
  applyLifecycleSnapshotToRecord(record, client.getAgentLifecycleSnapshot());
556
555
  await this.options.sessionStore.save(record);
557
556
  if (input.mode === "persistent") {
@@ -785,6 +784,7 @@ var AcpRuntimeManager = class {
785
784
  error: {
786
785
  message: normalized.message,
787
786
  ...normalized.code ? { code: normalized.code } : {},
787
+ ...normalized.detailCode ? { detailCode: normalized.detailCode } : {},
788
788
  ...normalized.retryable !== void 0 ? { retryable: normalized.retryable } : {}
789
789
  }
790
790
  });
@@ -862,9 +862,9 @@ var AcpRuntimeManager = class {
862
862
  let targetRecord = record;
863
863
  if (controller) {
864
864
  const response = await controller.setSessionConfigOption(key, value);
865
- applyConfigOptionsToRecord(targetRecord, response?.configOptions);
865
+ applyConfigOptionsToRecord(targetRecord, response);
866
866
  } else targetRecord = (await this.withRuntimeControlSession(record, sessionMode, async ({ client, sessionId, record: connectedRecord }) => {
867
- applyConfigOptionsToRecord(connectedRecord, (await client.setSessionConfigOption(sessionId, key, value))?.configOptions);
867
+ applyConfigOptionsToRecord(connectedRecord, await client.setSessionConfigOption(sessionId, key, value));
868
868
  if (key === "mode") setDesiredModeId(connectedRecord, value);
869
869
  else setDesiredConfigOption(connectedRecord, key, value);
870
870
  })).record;
@@ -1182,8 +1182,16 @@ var AcpxRuntime = class {
1182
1182
  signal: input.signal
1183
1183
  });
1184
1184
  }
1185
- getCapabilities(_input) {
1186
- return ACPX_CAPABILITIES;
1185
+ async getCapabilities(input) {
1186
+ if (!input?.handle) return ACPX_CAPABILITIES;
1187
+ const { handle } = this.resolveManagerHandle(input.handle);
1188
+ const record = await this.options.sessionStore.load(handle.acpxRecordId ?? handle.sessionKey);
1189
+ if (!record?.acpx?.config_options) return ACPX_CAPABILITIES;
1190
+ const configOptionKeys = Array.from(new Set(record.acpx.config_options.map((option) => option.id).filter((id) => typeof id === "string" && id.trim().length > 0)));
1191
+ return {
1192
+ ...ACPX_CAPABILITIES,
1193
+ ...configOptionKeys.length > 0 ? { configOptionKeys } : {}
1194
+ };
1187
1195
  }
1188
1196
  async getStatus(input) {
1189
1197
  const { handle } = this.resolveManagerHandle(input.handle);