acpx 0.7.0 → 0.8.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 (49) hide show
  1. package/README.md +7 -2
  2. package/dist/{cli-T-Z-9x6a.js → cli-BGYGVo3b.js} +35 -10
  3. package/dist/cli-BGYGVo3b.js.map +1 -0
  4. package/dist/cli.d.ts +1 -1
  5. package/dist/cli.d.ts.map +1 -1
  6. package/dist/cli.js +204 -19
  7. package/dist/cli.js.map +1 -1
  8. package/dist/{client-COPilhO_.d.ts → client-FzXPdgP7.d.ts} +7 -3
  9. package/dist/client-FzXPdgP7.d.ts.map +1 -0
  10. package/dist/{flags-Dj-IXgo9.js → flags-D706STfk.js} +46 -6
  11. package/dist/flags-D706STfk.js.map +1 -0
  12. package/dist/{flows-CF8w1rPI.js → flows-hcjHmU7P.js} +8 -5
  13. package/dist/flows-hcjHmU7P.js.map +1 -0
  14. package/dist/flows.d.ts +3 -2
  15. package/dist/flows.d.ts.map +1 -1
  16. package/dist/flows.js +1 -1
  17. package/dist/{prompt-turn-CVPMWdj1.js → live-checkpoint-B9ctAuqV.js} +1301 -78
  18. package/dist/live-checkpoint-B9ctAuqV.js.map +1 -0
  19. package/dist/output-BL9XRWzS.js +3712 -0
  20. package/dist/output-BL9XRWzS.js.map +1 -0
  21. package/dist/runtime.d.ts +28 -4
  22. package/dist/runtime.d.ts.map +1 -1
  23. package/dist/runtime.js +153 -24
  24. package/dist/runtime.js.map +1 -1
  25. package/dist/{types-CVBeQyi3.d.ts → session-options-BJyG6zEH.d.ts} +56 -3
  26. package/dist/session-options-BJyG6zEH.d.ts.map +1 -0
  27. package/package.json +23 -21
  28. package/skills/acpx/SKILL.md +200 -10
  29. package/dist/cli-T-Z-9x6a.js.map +0 -1
  30. package/dist/client-COPilhO_.d.ts.map +0 -1
  31. package/dist/flags-Dj-IXgo9.js.map +0 -1
  32. package/dist/flows-CF8w1rPI.js.map +0 -1
  33. package/dist/ipc-ABXlXzGP.js +0 -1290
  34. package/dist/ipc-ABXlXzGP.js.map +0 -1
  35. package/dist/jsonrpc-DSxh2w5R.js +0 -68
  36. package/dist/jsonrpc-DSxh2w5R.js.map +0 -1
  37. package/dist/output-DmHvT8vm.js +0 -807
  38. package/dist/output-DmHvT8vm.js.map +0 -1
  39. package/dist/perf-metrics-C2pXfxvR.js +0 -598
  40. package/dist/perf-metrics-C2pXfxvR.js.map +0 -1
  41. package/dist/prompt-turn-CVPMWdj1.js.map +0 -1
  42. package/dist/render-N5YwotCy.js +0 -172
  43. package/dist/render-N5YwotCy.js.map +0 -1
  44. package/dist/rolldown-runtime-CiIaOW0V.js +0 -13
  45. package/dist/session-CDaQe6BH.js +0 -1538
  46. package/dist/session-CDaQe6BH.js.map +0 -1
  47. package/dist/session-options-pCbHn_n7.d.ts +0 -13
  48. package/dist/session-options-pCbHn_n7.d.ts.map +0 -1
  49. package/dist/types-CVBeQyi3.d.ts.map +0 -1
package/dist/runtime.d.ts CHANGED
@@ -1,6 +1,7 @@
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-COPilhO_.js";
1
+ import { a as AcpPermissionRequest, c as NonInteractivePermissionPolicy, f as SessionRecord, i as AcpPermissionDecision, l as PermissionMode, n as SystemPromptOption, s as McpServer$1, t as SessionAgentOptions } from "./session-options-BJyG6zEH.js";
2
+ import { t as AcpClient } from "./client-FzXPdgP7.js";
3
3
  import fs from "node:fs";
4
+ import { ToolCallContent, ToolCallLocation, ToolKind } from "@agentclientprotocol/sdk";
4
5
 
5
6
  //#region src/agent-registry.d.ts
6
7
  declare const DEFAULT_AGENT_NAME = "codex";
@@ -25,6 +26,15 @@ type AcpRuntimeEnsureInput = {
25
26
  mode: AcpRuntimeSessionMode;
26
27
  resumeSessionId?: string;
27
28
  cwd?: string;
29
+ /**
30
+ * Per-session agent options applied when a fresh ACP session is created.
31
+ * Threaded into `_meta.systemPrompt` (and `_meta.claudeCode.options.*`)
32
+ * on the underlying `session/new` request, and persisted onto the new
33
+ * record. Ignored when an existing persistent session is reused — system
34
+ * prompts are fixed at `newSession` time, so changing them requires a
35
+ * different sessionKey or closing the prior record first.
36
+ */
37
+ sessionOptions?: SessionAgentOptions;
28
38
  };
29
39
  type AcpRuntimeTurnAttachment = {
30
40
  mediaType: string;
@@ -43,11 +53,16 @@ type AcpRuntimeCapabilities = {
43
53
  controls: AcpRuntimeControl[];
44
54
  configOptionKeys?: string[];
45
55
  };
56
+ type AcpRuntimeSessionModels = {
57
+ currentModelId?: string;
58
+ availableModelIds: string[];
59
+ };
46
60
  type AcpRuntimeStatus = {
47
61
  summary?: string;
48
62
  acpxRecordId?: string;
49
63
  backendSessionId?: string;
50
64
  agentSessionId?: string;
65
+ models?: AcpRuntimeSessionModels;
51
66
  details?: Record<string, unknown>;
52
67
  };
53
68
  type AcpRuntimeDoctorReport = {
@@ -75,6 +90,11 @@ type AcpRuntimeEvent = {
75
90
  toolCallId?: string;
76
91
  status?: string;
77
92
  title?: string;
93
+ kind?: ToolKind;
94
+ locations?: ToolCallLocation[];
95
+ rawInput?: unknown;
96
+ rawOutput?: unknown;
97
+ content?: ToolCallContent[];
78
98
  }
79
99
  /**
80
100
  * Compatibility terminal event emitted by runTurn(...). startTurn(...).events
@@ -171,12 +191,15 @@ type AcpRuntimeOptions = {
171
191
  cwd: string;
172
192
  sessionStore: AcpSessionStore;
173
193
  agentRegistry: AcpAgentRegistry;
174
- mcpServers?: McpServer[];
194
+ mcpServers?: McpServer$1[];
175
195
  permissionMode: PermissionMode;
176
196
  nonInteractivePermissions?: NonInteractivePermissionPolicy;
177
197
  timeoutMs?: number;
178
198
  probeAgent?: string;
179
199
  verbose?: boolean;
200
+ onPermissionRequest?: (req: AcpPermissionRequest, ctx: {
201
+ signal: AbortSignal;
202
+ }) => Promise<AcpPermissionDecision | undefined>;
180
203
  };
181
204
  type AcpFileSessionStoreOptions = {
182
205
  stateDir: string;
@@ -205,6 +228,7 @@ declare class AcpRuntimeManager {
205
228
  mode: "persistent" | "oneshot";
206
229
  cwd?: string;
207
230
  resumeSessionId?: string;
231
+ sessionOptions?: SessionAgentOptions;
208
232
  }): Promise<SessionRecord>;
209
233
  startTurn(input: {
210
234
  handle: AcpRuntimeHandle;
@@ -344,5 +368,5 @@ declare function createRuntimeStore(options: {
344
368
  stateDir: string;
345
369
  }): AcpSessionStore;
346
370
  //#endregion
347
- export { ACPX_BACKEND_ID, type AcpAgentRegistry, type AcpFileSessionStoreOptions, type AcpRuntime, type AcpRuntimeCapabilities, type AcpRuntimeDoctorReport, type AcpRuntimeEnsureInput, AcpRuntimeError, type AcpRuntimeErrorCode, type AcpRuntimeEvent, type AcpRuntimeHandle, type AcpRuntimeOptions, type AcpRuntimePromptMode, type AcpRuntimeSessionMode, type AcpRuntimeStatus, type AcpRuntimeTurn, type AcpRuntimeTurnAttachment, type AcpRuntimeTurnInput, type AcpRuntimeTurnResult, type AcpRuntimeTurnResultError, type AcpSessionRecord, type AcpSessionStore, type AcpSessionUpdateTag, AcpxRuntime, DEFAULT_AGENT_NAME, createAcpRuntime, createAgentRegistry, createFileSessionStore, createRuntimeStore, decodeAcpxRuntimeHandleState, encodeAcpxRuntimeHandleState, isAcpRuntimeError };
371
+ export { ACPX_BACKEND_ID, type AcpAgentRegistry, type AcpFileSessionStoreOptions, type AcpPermissionDecision, type AcpPermissionRequest, type AcpRuntime, type AcpRuntimeCapabilities, type AcpRuntimeDoctorReport, type AcpRuntimeEnsureInput, AcpRuntimeError, type AcpRuntimeErrorCode, type AcpRuntimeEvent, type AcpRuntimeHandle, type AcpRuntimeOptions, type AcpRuntimePromptMode, type AcpRuntimeSessionMode, type AcpRuntimeSessionModels, type AcpRuntimeStatus, type AcpRuntimeTurn, type AcpRuntimeTurnAttachment, type AcpRuntimeTurnInput, type AcpRuntimeTurnResult, type AcpRuntimeTurnResultError, type AcpSessionRecord, type AcpSessionStore, type AcpSessionUpdateTag, AcpxRuntime, DEFAULT_AGENT_NAME, type SessionAgentOptions, type SystemPromptOption, createAcpRuntime, createAgentRegistry, createFileSessionStore, createRuntimeStore, decodeAcpxRuntimeHandleState, encodeAcpxRuntimeHandleState, isAcpRuntimeError };
348
372
  //# sourceMappingURL=runtime.d.ts.map
@@ -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,4 @@
1
- import { C as isAcpResourceNotFoundError, S as extractAcpError, g as textPrompt, x as normalizeOutputError } from "./perf-metrics-C2pXfxvR.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";
1
+ import { Dt as isAcpResourceNotFoundError, E as AcpClient, Et as extractAcpError, K as defaultSessionEventLog, S as trimConversationForRuntime, Tt as normalizeOutputError, W as parseSessionRecord, Z as assertPersistedKeyPolicy, _ as cloneSessionConversation, _t as withTimeout, a as applyConversation, b as recordPromptSubmission, c as applyRequestedModelIfAdvertised, d as setDesiredConfigOption, f as setDesiredModeId, g as cloneSessionAcpxState, h as applyConfigOptionsToRecord, i as connectAndLoadSession, m as syncAdvertisedModelState, n as runPromptTurn, o as applyLifecycleSnapshotToRecord, ot as serializeSessionRecordForDisk, pt as textPrompt, r as withConnectedSession, s as reconcileAgentSessionId, t as LiveSessionCheckpoint, u as setCurrentModelId, v as createSessionConversation, vt as DEFAULT_AGENT_NAME, w as persistSessionOptions, x as recordSessionUpdate, xt as resolveAgentCommand, y as recordClientOperation, yt as listBuiltInAgents } from "./live-checkpoint-B9ctAuqV.js";
3
2
  import path from "node:path";
4
3
  import fs from "node:fs/promises";
5
4
  import { randomUUID } from "node:crypto";
@@ -37,6 +36,7 @@ function deriveAgentFromSessionKey(sessionKey, fallbackAgent) {
37
36
  }
38
37
  //#endregion
39
38
  //#region src/runtime/public/events.ts
39
+ const TOOL_OUTPUT_SUMMARY_MAX_CHARS = 500;
40
40
  function safeParseJsonObject(line) {
41
41
  try {
42
42
  const parsed = JSON.parse(line);
@@ -169,18 +169,73 @@ function summarizeToolInput(rawInput) {
169
169
  "search"
170
170
  ]);
171
171
  }
172
+ function truncateToolSummary(value) {
173
+ if (value.length <= TOOL_OUTPUT_SUMMARY_MAX_CHARS) return value;
174
+ return `${value.slice(0, TOOL_OUTPUT_SUMMARY_MAX_CHARS - 1)}…`;
175
+ }
176
+ function readToolContentText(value) {
177
+ const record = isRecord(value) ? value : void 0;
178
+ if (!record) return;
179
+ if (record.type === "content") return readToolContentText(record.content);
180
+ if (record.type === "text") return asString(record.text);
181
+ if (record.type === "resource_link") return asOptionalString(record.title) || asOptionalString(record.name) || asOptionalString(record.uri);
182
+ if (record.type === "resource") {
183
+ const resource = isRecord(record.resource) ? record.resource : void 0;
184
+ return asString(resource?.text) || asOptionalString(resource?.uri);
185
+ }
186
+ if (record.type === "diff") return `diff ${asOptionalString(record.path) || "file"}`;
187
+ if (record.type === "terminal") {
188
+ const terminalId = asOptionalString(record.terminalId) || asOptionalString(record.id);
189
+ return terminalId ? `[terminal] ${terminalId}` : "[terminal]";
190
+ }
191
+ }
192
+ function summarizeToolContent(content) {
193
+ if (!Array.isArray(content)) return;
194
+ const fragments = content.map((entry) => readToolContentText(entry)?.trim()).filter((entry) => Boolean(entry));
195
+ if (fragments.length === 0) return;
196
+ return truncateToolSummary([...new Set(fragments)].join("\n"));
197
+ }
198
+ function summarizeToolOutput(rawOutput) {
199
+ if (rawOutput == null) return;
200
+ if (typeof rawOutput === "string" || typeof rawOutput === "number" || typeof rawOutput === "boolean") return truncateToolSummary(String(rawOutput));
201
+ const record = isRecord(rawOutput) ? rawOutput : void 0;
202
+ if (!record) return;
203
+ return truncateToolSummary(readFirstString(record, [
204
+ "text",
205
+ "message",
206
+ "error",
207
+ "stdout",
208
+ "stderr",
209
+ "content"
210
+ ]) ?? "") || void 0;
211
+ }
212
+ function shouldForwardArray(value) {
213
+ return Array.isArray(value);
214
+ }
215
+ function readToolKind(value) {
216
+ const kind = asOptionalString(value);
217
+ if (kind === "read" || kind === "edit" || kind === "delete" || kind === "move" || kind === "search" || kind === "execute" || kind === "fetch" || kind === "think" || kind === "other") return kind;
218
+ }
172
219
  function createToolCallEvent(params) {
173
220
  const title = asTrimmedString(params.payload.title) || "tool call";
174
221
  const status = asTrimmedString(params.payload.status);
175
222
  const inputSummary = summarizeToolInput(params.payload.rawInput);
223
+ const outputSummary = summarizeToolContent(params.payload.content) ?? summarizeToolOutput(params.payload.rawOutput);
176
224
  const toolCallId = asOptionalString(params.payload.toolCallId);
225
+ const kind = readToolKind(params.payload.kind);
177
226
  const summaryText = status ? `${title} (${status})` : title;
227
+ const detailSummary = params.tag === "tool_call_update" ? outputSummary ?? inputSummary : inputSummary ?? outputSummary;
178
228
  return {
179
229
  type: "tool_call",
180
- text: inputSummary ? `${summaryText}: ${inputSummary}` : summaryText,
230
+ text: detailSummary ? `${summaryText}: ${detailSummary}` : summaryText,
181
231
  tag: params.tag,
182
232
  ...toolCallId ? { toolCallId } : {},
183
233
  ...status ? { status } : {},
234
+ ...kind ? { kind } : {},
235
+ ...shouldForwardArray(params.payload.locations) ? { locations: params.payload.locations } : {},
236
+ ...Object.prototype.hasOwnProperty.call(params.payload, "rawInput") ? { rawInput: params.payload.rawInput } : {},
237
+ ...Object.prototype.hasOwnProperty.call(params.payload, "rawOutput") ? { rawOutput: params.payload.rawOutput } : {},
238
+ ...shouldForwardArray(params.payload.content) ? { content: params.payload.content } : {},
184
239
  title
185
240
  };
186
241
  }
@@ -415,7 +470,35 @@ function statusSummary(record) {
415
470
  record.closed ? "closed" : "open"
416
471
  ].filter(Boolean).join(" ");
417
472
  }
473
+ function buildModelsField(record) {
474
+ const available = record.acpx?.available_models;
475
+ const currentModelId = record.acpx?.current_model_id;
476
+ if (!available || available.length === 0) return currentModelId === void 0 ? {} : { models: {
477
+ currentModelId,
478
+ availableModelIds: []
479
+ } };
480
+ return { models: {
481
+ ...currentModelId !== void 0 ? { currentModelId } : {},
482
+ availableModelIds: [...available]
483
+ } };
484
+ }
485
+ function advertisedConfigOptionIds(record) {
486
+ const configOptions = record.acpx?.config_options;
487
+ if (!configOptions) return;
488
+ return new Set(configOptions.map((option) => option.id).filter((id) => typeof id === "string" && id.trim().length > 0));
489
+ }
490
+ function resolveSupportedConfigOptionId(record, configId) {
491
+ const advertisedIds = advertisedConfigOptionIds(record);
492
+ if (!advertisedIds) return configId;
493
+ if (advertisedIds.has(configId)) return configId;
494
+ if (configId === "thinking" && advertisedIds.has("effort")) return "effort";
495
+ const supported = [...advertisedIds].toSorted();
496
+ const supportedText = supported.length > 0 ? supported.join(", ") : "none";
497
+ throw new AcpRuntimeError("ACP_BACKEND_UNSUPPORTED_CONTROL", `ACP session ${record.acpxRecordId} does not advertise config option '${configId}'. Supported config options: ${supportedText}.`);
498
+ }
418
499
  var AcpRuntimeManager = class {
500
+ options;
501
+ deps;
419
502
  activeControllers = /* @__PURE__ */ new Map();
420
503
  pendingPersistentClients = /* @__PURE__ */ new Map();
421
504
  closingActiveRecords = /* @__PURE__ */ new Set();
@@ -489,6 +572,7 @@ var AcpRuntimeManager = class {
489
572
  mcpServers: [...this.options.mcpServers ?? []],
490
573
  permissionMode: this.options.permissionMode,
491
574
  nonInteractivePermissions: this.options.nonInteractivePermissions,
575
+ onPermissionRequest: this.options.onPermissionRequest,
492
576
  verbose: this.options.verbose,
493
577
  timeoutMs: this.options.timeoutMs,
494
578
  resumePolicy: resumePolicyForSessionMode(sessionMode),
@@ -520,7 +604,9 @@ var AcpRuntimeManager = class {
520
604
  mcpServers: [...this.options.mcpServers ?? []],
521
605
  permissionMode: this.options.permissionMode,
522
606
  nonInteractivePermissions: this.options.nonInteractivePermissions,
523
- verbose: this.options.verbose
607
+ onPermissionRequest: this.options.onPermissionRequest,
608
+ verbose: this.options.verbose,
609
+ sessionOptions: input.sessionOptions
524
610
  });
525
611
  let keepClientOpen = false;
526
612
  try {
@@ -551,7 +637,18 @@ var AcpRuntimeManager = class {
551
637
  record.protocolVersion = client.initializeResult?.protocolVersion;
552
638
  record.agentCapabilities = client.initializeResult?.agentCapabilities;
553
639
  applyConfigOptionsToRecord(record, sessionResult);
640
+ const requestedModelApplied = await applyRequestedModelIfAdvertised({
641
+ client,
642
+ sessionId,
643
+ requestedModel: input.sessionOptions?.model,
644
+ models: sessionResult.models,
645
+ agentCommand,
646
+ timeoutMs: this.options.timeoutMs
647
+ });
648
+ syncAdvertisedModelState(record, sessionResult.models);
649
+ if (requestedModelApplied) setCurrentModelId(record, input.sessionOptions?.model);
554
650
  applyLifecycleSnapshotToRecord(record, client.getAgentLifecycleSnapshot());
651
+ persistSessionOptions(record, input.sessionOptions);
555
652
  await this.options.sessionStore.save(record);
556
653
  if (input.mode === "persistent") {
557
654
  const previousClient = this.pendingPersistentClients.get(record.acpxRecordId);
@@ -616,6 +713,7 @@ var AcpRuntimeManager = class {
616
713
  let record = null;
617
714
  let conversation = null;
618
715
  let acpxState;
716
+ let liveCheckpoint;
619
717
  let client = null;
620
718
  try {
621
719
  record = await this.requireRecord(input.handle.acpxRecordId ?? input.handle.sessionKey);
@@ -636,11 +734,19 @@ var AcpRuntimeManager = class {
636
734
  mcpServers: [...this.options.mcpServers ?? []],
637
735
  permissionMode: this.options.permissionMode,
638
736
  nonInteractivePermissions: this.options.nonInteractivePermissions,
737
+ onPermissionRequest: this.options.onPermissionRequest,
639
738
  verbose: this.options.verbose
640
739
  });
641
740
  const runtimeClient = client;
642
741
  const runtimeConversation = conversation;
643
742
  const runtimeRecord = record;
743
+ liveCheckpoint = new LiveSessionCheckpoint({ save: async () => {
744
+ runtimeRecord.lastUsedAt = isoNow();
745
+ runtimeRecord.acpx = acpxState;
746
+ applyConversation(runtimeRecord, runtimeConversation);
747
+ await this.refreshClosedState(runtimeRecord);
748
+ await this.options.sessionStore.save(runtimeRecord);
749
+ } });
644
750
  let activeSessionId = record.acpSessionId;
645
751
  const applyPendingCancel = async () => {
646
752
  if (!pendingCancel || !runtimeClient.hasActivePrompt()) return false;
@@ -668,26 +774,36 @@ var AcpRuntimeManager = class {
668
774
  await runtimeClient.setSessionModel(activeSessionId, modelId);
669
775
  },
670
776
  setSessionConfigOption: async (configId, value) => {
777
+ return (await activeController.setResolvedSessionConfigOption(configId, value)).response;
778
+ },
779
+ setResolvedSessionConfigOption: async (configId, value) => {
671
780
  if (!runtimeClient.hasActivePrompt()) await sessionReady.promise;
672
- const response = await runtimeClient.setSessionConfigOption(activeSessionId, configId, value);
781
+ const resolvedConfigId = resolveSupportedConfigOptionId({
782
+ ...runtimeRecord,
783
+ acpx: acpxState ?? void 0
784
+ }, configId);
785
+ const response = await runtimeClient.setSessionConfigOption(activeSessionId, resolvedConfigId, value);
673
786
  if (response?.configOptions) {
674
787
  const nextState = cloneSessionAcpxState(acpxState) ?? {};
675
788
  nextState.config_options = structuredClone(response.configOptions);
676
789
  acpxState = nextState;
677
790
  }
678
- if (configId === "mode") {
791
+ if (resolvedConfigId === "mode") {
679
792
  const nextState = cloneSessionAcpxState(acpxState) ?? {};
680
793
  nextState.desired_mode_id = value;
681
794
  acpxState = nextState;
682
- } else if (configId !== "model") {
795
+ } else if (resolvedConfigId !== "model") {
683
796
  const nextState = cloneSessionAcpxState(acpxState) ?? {};
684
797
  nextState.desired_config_options = {
685
798
  ...nextState.desired_config_options,
686
- [configId]: value
799
+ [resolvedConfigId]: value
687
800
  };
688
801
  acpxState = nextState;
689
802
  }
690
- return response;
803
+ return {
804
+ configId: resolvedConfigId,
805
+ response
806
+ };
691
807
  }
692
808
  };
693
809
  const emitParsed = (payload) => {
@@ -701,6 +817,7 @@ var AcpRuntimeManager = class {
701
817
  onSessionUpdate: (notification) => {
702
818
  acpxState = recordSessionUpdate(runtimeConversation, acpxState, notification);
703
819
  trimConversationForRuntime(runtimeConversation);
820
+ liveCheckpoint?.request();
704
821
  emitParsed({
705
822
  jsonrpc: "2.0",
706
823
  method: "session/update",
@@ -710,6 +827,7 @@ var AcpRuntimeManager = class {
710
827
  onClientOperation: (operation) => {
711
828
  acpxState = recordClientOperation(runtimeConversation, acpxState, operation);
712
829
  trimConversationForRuntime(runtimeConversation);
830
+ liveCheckpoint?.request();
713
831
  emitParsed({
714
832
  type: "client_operation",
715
833
  ...operation
@@ -726,9 +844,8 @@ var AcpRuntimeManager = class {
726
844
  resumePolicy: resumePolicyForSessionMode(input.sessionMode),
727
845
  timeoutMs: this.options.timeoutMs,
728
846
  activeController,
729
- onClientAvailable: (controller) => {
730
- activeController = controller;
731
- this.activeControllers.set(runtimeRecord.acpxRecordId, controller);
847
+ onClientAvailable: () => {
848
+ if (activeController) this.activeControllers.set(runtimeRecord.acpxRecordId, activeController);
732
849
  },
733
850
  onConnectedRecord: (connectedRecord) => {
734
851
  connectedRecord.lastPromptAt = isoNow();
@@ -737,12 +854,14 @@ var AcpRuntimeManager = class {
737
854
  activeSessionId = sessionIdValue;
738
855
  }
739
856
  });
857
+ acpxState = cloneSessionAcpxState(runtimeRecord.acpx);
740
858
  sessionReady.resolve();
741
859
  runtimeRecord.lastRequestId = input.requestId;
742
860
  runtimeRecord.lastPromptAt = isoNow();
743
861
  runtimeRecord.closed = false;
744
862
  runtimeRecord.closedAt = void 0;
745
863
  runtimeRecord.lastUsedAt = isoNow();
864
+ await liveCheckpoint.checkpoint();
746
865
  if (resumed || loadError) emitParsed({
747
866
  type: "status",
748
867
  text: loadError ? `load fallback: ${loadError}` : "session resumed"
@@ -798,6 +917,7 @@ var AcpRuntimeManager = class {
798
917
  record.acpx = acpxState;
799
918
  applyConversation(record, conversation);
800
919
  record.lastUsedAt = isoNow();
920
+ await liveCheckpoint?.flush().catch(() => {});
801
921
  const closed = await this.refreshClosedState(record);
802
922
  await this.options.sessionStore.save(record).catch(() => {});
803
923
  if (!closed && client) pooled = await this.retainPersistentClientAfterTurn({
@@ -837,6 +957,7 @@ var AcpRuntimeManager = class {
837
957
  acpxRecordId: record.acpxRecordId,
838
958
  backendSessionId: record.acpSessionId,
839
959
  agentSessionId: record.agentSessionId,
960
+ ...buildModelsField(record),
840
961
  details: {
841
962
  cwd: record.cwd,
842
963
  lastUsedAt: record.lastUsedAt,
@@ -859,18 +980,21 @@ var AcpRuntimeManager = class {
859
980
  async setConfigOption(handle, key, value, sessionMode = "persistent") {
860
981
  const record = await this.requireRecord(handle.acpxRecordId ?? handle.sessionKey);
861
982
  const controller = this.activeControllers.get(record.acpxRecordId);
862
- let targetRecord = record;
863
983
  if (controller) {
864
- const response = await controller.setSessionConfigOption(key, value);
865
- applyConfigOptionsToRecord(targetRecord, response);
866
- } else targetRecord = (await this.withRuntimeControlSession(record, sessionMode, async ({ client, sessionId, record: connectedRecord }) => {
867
- applyConfigOptionsToRecord(connectedRecord, await client.setSessionConfigOption(sessionId, key, value));
868
- if (key === "mode") setDesiredModeId(connectedRecord, value);
869
- else setDesiredConfigOption(connectedRecord, key, value);
870
- })).record;
871
- if (key === "mode") setDesiredModeId(targetRecord, value);
872
- else setDesiredConfigOption(targetRecord, key, value);
873
- await this.options.sessionStore.save(targetRecord);
984
+ const { configId, response } = await controller.setResolvedSessionConfigOption(key, value);
985
+ applyConfigOptionsToRecord(record, response);
986
+ if (configId === "mode") setDesiredModeId(record, value);
987
+ else setDesiredConfigOption(record, configId, value);
988
+ await this.options.sessionStore.save(record);
989
+ return;
990
+ }
991
+ const result = await this.withRuntimeControlSession(record, sessionMode, async ({ client, sessionId, record: connectedRecord }) => {
992
+ const configId = resolveSupportedConfigOptionId(connectedRecord, key);
993
+ applyConfigOptionsToRecord(connectedRecord, await client.setSessionConfigOption(sessionId, configId, value));
994
+ if (configId === "mode") setDesiredModeId(connectedRecord, value);
995
+ else setDesiredConfigOption(connectedRecord, configId, value);
996
+ });
997
+ await this.options.sessionStore.save(result.record);
874
998
  }
875
999
  async cancel(handle) {
876
1000
  await this.activeControllers.get(handle.acpxRecordId ?? handle.sessionKey)?.requestCancelActivePrompt();
@@ -898,6 +1022,7 @@ var AcpRuntimeManager = class {
898
1022
  mcpServers: [...this.options.mcpServers ?? []],
899
1023
  permissionMode: this.options.permissionMode,
900
1024
  nonInteractivePermissions: this.options.nonInteractivePermissions,
1025
+ onPermissionRequest: this.options.onPermissionRequest,
901
1026
  verbose: this.options.verbose
902
1027
  });
903
1028
  try {
@@ -924,6 +1049,7 @@ function safeSessionId(sessionId) {
924
1049
  return encodeURIComponent(sessionId);
925
1050
  }
926
1051
  var FileSessionStore = class {
1052
+ stateDir;
927
1053
  constructor(stateDir) {
928
1054
  this.stateDir = stateDir;
929
1055
  }
@@ -1085,6 +1211,8 @@ function createAgentRegistry(params) {
1085
1211
  };
1086
1212
  }
1087
1213
  var AcpxRuntime = class {
1214
+ options;
1215
+ testOptions;
1088
1216
  healthy = false;
1089
1217
  manager = null;
1090
1218
  managerPromise = null;
@@ -1119,7 +1247,8 @@ var AcpxRuntime = class {
1119
1247
  agent,
1120
1248
  mode: input.mode,
1121
1249
  cwd: input.cwd ?? this.options.cwd,
1122
- resumeSessionId: input.resumeSessionId
1250
+ resumeSessionId: input.resumeSessionId,
1251
+ sessionOptions: input.sessionOptions
1123
1252
  });
1124
1253
  const handle = {
1125
1254
  sessionKey: input.sessionKey,