acpx 0.5.1 → 0.5.3
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-DZjj5kij.js → cli-ChWsO-bb.js} +4 -4
- package/dist/{cli-DZjj5kij.js.map → cli-ChWsO-bb.js.map} +1 -1
- package/dist/cli.d.ts +1 -1
- package/dist/cli.js +5 -5
- package/dist/{client-S8QicFBT.d.ts → client-D-4_aZf2.d.ts} +4 -2
- package/dist/client-D-4_aZf2.d.ts.map +1 -0
- package/dist/{flags-W3vEVSiS.js → flags-ceSqz2T6.js} +3 -3
- package/dist/{flags-W3vEVSiS.js.map → flags-ceSqz2T6.js.map} +1 -1
- package/dist/{flows-CLQYpPh7.js → flows-_KmnuUXd.js} +3 -3
- package/dist/{flows-CLQYpPh7.js.map → flows-_KmnuUXd.js.map} +1 -1
- package/dist/flows.d.ts +1 -1
- package/dist/flows.js +1 -1
- package/dist/perf-metrics-D0um6IR6.js.map +1 -1
- package/dist/{prompt-turn-CbSSNHjk.js → prompt-turn-CXMtXBl-.js} +10 -1
- package/dist/prompt-turn-CXMtXBl-.js.map +1 -0
- package/dist/runtime.d.ts +8 -3
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +45 -4
- package/dist/runtime.js.map +1 -1
- package/dist/{session-BiBN0BvM.js → session-BtwAKtJ3.js} +2 -2
- package/dist/{session-BiBN0BvM.js.map → session-BtwAKtJ3.js.map} +1 -1
- package/dist/{types-Cgigsj1X.d.ts → types-yxf-gcOE.d.ts} +2 -1
- package/dist/{types-Cgigsj1X.d.ts.map → types-yxf-gcOE.d.ts.map} +1 -1
- package/package.json +2 -2
- package/dist/client-S8QicFBT.d.ts.map +0 -1
- package/dist/prompt-turn-CbSSNHjk.js.map +0 -1
package/dist/runtime.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { a as PermissionMode, i as NonInteractivePermissionPolicy, r as McpServer, s as SessionRecord } from "./types-
|
|
2
|
-
import { t as AcpClient } from "./client-
|
|
1
|
+
import { a as PermissionMode, i as NonInteractivePermissionPolicy, r as McpServer, s as SessionRecord } from "./types-yxf-gcOE.js";
|
|
2
|
+
import { t as AcpClient } from "./client-D-4_aZf2.js";
|
|
3
3
|
import fs from "node:fs";
|
|
4
4
|
|
|
5
5
|
//#region src/runtime/public/contract.d.ts
|
|
@@ -108,6 +108,7 @@ interface AcpRuntime {
|
|
|
108
108
|
close(input: {
|
|
109
109
|
handle: AcpRuntimeHandle;
|
|
110
110
|
reason: string;
|
|
111
|
+
discardPersistentState?: boolean;
|
|
111
112
|
}): Promise<void>;
|
|
112
113
|
}
|
|
113
114
|
type AcpSessionRecord = SessionRecord;
|
|
@@ -169,7 +170,10 @@ declare class AcpRuntimeManager {
|
|
|
169
170
|
setMode(handle: AcpRuntimeHandle, mode: string, sessionMode?: "persistent" | "oneshot"): Promise<void>;
|
|
170
171
|
setConfigOption(handle: AcpRuntimeHandle, key: string, value: string, sessionMode?: "persistent" | "oneshot"): Promise<void>;
|
|
171
172
|
cancel(handle: AcpRuntimeHandle): Promise<void>;
|
|
172
|
-
close(handle: AcpRuntimeHandle
|
|
173
|
+
close(handle: AcpRuntimeHandle, options?: {
|
|
174
|
+
discardPersistentState?: boolean;
|
|
175
|
+
}): Promise<void>;
|
|
176
|
+
private closeBackendSession;
|
|
173
177
|
private requireRecord;
|
|
174
178
|
}
|
|
175
179
|
//#endregion
|
|
@@ -253,6 +257,7 @@ declare class AcpxRuntime implements AcpxRuntimeLike {
|
|
|
253
257
|
close(input: {
|
|
254
258
|
handle: AcpRuntimeHandle;
|
|
255
259
|
reason: string;
|
|
260
|
+
discardPersistentState?: boolean;
|
|
256
261
|
}): Promise<void>;
|
|
257
262
|
private getManager;
|
|
258
263
|
private runProbe;
|
package/dist/runtime.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","names":[],"sources":["../src/runtime/public/contract.ts","../src/agent-registry.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":";;;;;KAOY,oBAAA;AAAA,KAEA,qBAAA;AAAA,KAEA,mBAAA;AAAA,KAaA,iBAAA;AAAA,KAEA,gBAAA;EACV,UAAA;EACA,OAAA;EACA,kBAAA;EACA,GAAA;EACA,YAAA;EACA,gBAAA;EACA,cAAA;AAAA;AAAA,KAGU,qBAAA;EACV,UAAA;EACA,KAAA;EACA,IAAA,EAAM,qBAAA;EACN,eAAA;EACA,GAAA;AAAA;AAAA,KAGU,wBAAA;EACV,SAAA;EACA,IAAA;AAAA;AAAA,KAGU,mBAAA;EACV,MAAA,EAAQ,gBAAA;EACR,IAAA;EACA,WAAA,GAAc,wBAAA;EACd,IAAA,EAAM,oBAAA;EACN,SAAA;EACA,SAAA;EACA,MAAA,GAAS,WAAA;AAAA;AAAA,KAGC,sBAAA;EACV,QAAA,EAAU,iBAAA;EACV,gBAAA;AAAA;AAAA,KAGU,gBAAA;EACV,OAAA;EACA,YAAA;EACA,gBAAA;EACA,cAAA;EACA,OAAA,GAAU,MAAA;AAAA;AAAA,KAGA,sBAAA;EACV,EAAA;EACA,IAAA;EACA,OAAA;EACA,cAAA;EACA,OAAA;AAAA;AAAA,KAGU,eAAA;EAEN,IAAA;EACA,IAAA;EACA,MAAA;EACA,GAAA,GAAM,mBAAA;AAAA;EAGN,IAAA;EACA,IAAA;EACA,GAAA,GAAM,mBAAA;EACN,IAAA;EACA,IAAA;AAAA;EAGA,IAAA;EACA,IAAA;EACA,GAAA,GAAM,mBAAA;EACN,UAAA;EACA,MAAA;EACA,KAAA;AAAA;EAGA,IAAA;EACA,UAAA;AAAA;EAGA,IAAA;EACA,OAAA;EACA,IAAA;EACA,SAAA;AAAA;AAAA,UAGW,UAAA;EACf,aAAA,CAAc,KAAA,EAAO,qBAAA,GAAwB,OAAA,CAAQ,gBAAA;EACrD,OAAA,CAAQ,KAAA,EAAO,mBAAA,GAAsB,aAAA,CAAc,eAAA;EACnD,eAAA,EAAiB,KAAA;IACf,MAAA,GAAS,gBAAA;EAAA,IACP,OAAA,CAAQ,sBAAA,IAA0B,sBAAA;EACtC,SAAA,EAAW,KAAA;IAAS,MAAA,EAAQ,gBAAA;IAAkB,MAAA,GAAS,WAAA;EAAA,IAAgB,OAAA,CAAQ,gBAAA;EAC/E,OAAA,EAAS,KAAA;IAAS,MAAA,EAAQ,gBAAA;IAAkB,IAAA;EAAA,IAAiB,OAAA;EAC7D,eAAA,EAAiB,KAAA;IAAS,MAAA,EAAQ,gBAAA;IAAkB,GAAA;IAAa,KAAA;EAAA,IAAkB,OAAA;EACnF,MAAA,KAAW,OAAA,CAAQ,sBAAA;EACnB,MAAA,CAAO,KAAA;IAAS,MAAA,EAAQ,gBAAA;IAAkB,MAAA;EAAA,IAAoB,OAAA;EAC9D,KAAA,CAAM,KAAA;
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","names":[],"sources":["../src/runtime/public/contract.ts","../src/agent-registry.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
|
-
import { g as textPrompt, x as normalizeOutputError } from "./perf-metrics-D0um6IR6.js";
|
|
2
|
-
import { B as serializeSessionRecordForDisk, G as DEFAULT_AGENT_NAME, J as resolveAgentCommand, K as listBuiltInAgents, M as parseSessionRecord, P as defaultSessionEventLog, _ as recordSessionUpdate, a as applyConversation, f as cloneSessionAcpxState, g as recordPromptSubmission, h as recordClientOperation, i as connectAndLoadSession, l as setDesiredModeId, m as createSessionConversation, n as withConnectedSession, o as applyLifecycleSnapshotToRecord, p as cloneSessionConversation, s as reconcileAgentSessionId, t as runPromptTurn, v as trimConversationForRuntime, y as AcpClient, z as assertPersistedKeyPolicy } from "./prompt-turn-
|
|
1
|
+
import { C as isAcpResourceNotFoundError, S as extractAcpError, g as textPrompt, x as normalizeOutputError } from "./perf-metrics-D0um6IR6.js";
|
|
2
|
+
import { B as serializeSessionRecordForDisk, G as DEFAULT_AGENT_NAME, J as resolveAgentCommand, K as listBuiltInAgents, M as parseSessionRecord, P as defaultSessionEventLog, W as withTimeout, _ as recordSessionUpdate, a as applyConversation, f as cloneSessionAcpxState, g as recordPromptSubmission, h as recordClientOperation, i as connectAndLoadSession, l as setDesiredModeId, m as createSessionConversation, n as withConnectedSession, o as applyLifecycleSnapshotToRecord, p as cloneSessionConversation, s as reconcileAgentSessionId, t as runPromptTurn, v as trimConversationForRuntime, y as AcpClient, z as assertPersistedKeyPolicy } from "./prompt-turn-CXMtXBl-.js";
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import fs from "node:fs/promises";
|
|
5
5
|
import { randomUUID } from "node:crypto";
|
|
@@ -252,6 +252,7 @@ function parsePromptEventLine(line) {
|
|
|
252
252
|
//#endregion
|
|
253
253
|
//#region src/runtime/engine/reuse-policy.ts
|
|
254
254
|
function shouldReuseExistingRecord(record, params) {
|
|
255
|
+
if (record.acpx?.reset_on_next_ensure === true) return false;
|
|
255
256
|
if (path.resolve(record.cwd) !== path.resolve(params.cwd)) return false;
|
|
256
257
|
if (record.agentCommand !== params.agentCommand) return false;
|
|
257
258
|
if (params.resumeSessionId && record.acpSessionId !== params.resumeSessionId) return false;
|
|
@@ -307,6 +308,14 @@ var AsyncEventQueue = class {
|
|
|
307
308
|
function isoNow() {
|
|
308
309
|
return (/* @__PURE__ */ new Date()).toISOString();
|
|
309
310
|
}
|
|
311
|
+
function isUnsupportedSessionCloseError(error) {
|
|
312
|
+
const acp = extractAcpError(error);
|
|
313
|
+
if (!acp) return false;
|
|
314
|
+
if (acp.code === -32601 || acp.code === -32602) return true;
|
|
315
|
+
if (acp.code !== -32603 || !acp.data || typeof acp.data !== "object") return false;
|
|
316
|
+
const details = acp.data.details;
|
|
317
|
+
return typeof details === "string" && details.toLowerCase().includes("invalid params");
|
|
318
|
+
}
|
|
310
319
|
function toPromptInput(text, attachments) {
|
|
311
320
|
if (!attachments || attachments.length === 0) return text;
|
|
312
321
|
const blocks = [];
|
|
@@ -672,13 +681,45 @@ var AcpRuntimeManager = class {
|
|
|
672
681
|
async cancel(handle) {
|
|
673
682
|
await this.activeControllers.get(handle.acpxRecordId ?? handle.sessionKey)?.requestCancelActivePrompt();
|
|
674
683
|
}
|
|
675
|
-
async close(handle) {
|
|
684
|
+
async close(handle, options = {}) {
|
|
676
685
|
const record = await this.requireRecord(handle.acpxRecordId ?? handle.sessionKey);
|
|
677
686
|
await this.cancel(handle);
|
|
687
|
+
if (options.discardPersistentState) {
|
|
688
|
+
await this.closeBackendSession(record);
|
|
689
|
+
record.acpx = {
|
|
690
|
+
...record.acpx,
|
|
691
|
+
reset_on_next_ensure: true
|
|
692
|
+
};
|
|
693
|
+
}
|
|
678
694
|
record.closed = true;
|
|
679
695
|
record.closedAt = isoNow();
|
|
680
696
|
await this.options.sessionStore.save(record);
|
|
681
697
|
}
|
|
698
|
+
async closeBackendSession(record) {
|
|
699
|
+
const pendingClient = this.pendingPersistentClients.get(record.acpxRecordId);
|
|
700
|
+
if (pendingClient) this.pendingPersistentClients.delete(record.acpxRecordId);
|
|
701
|
+
const reusablePendingClient = pendingClient?.hasReusableSession(record.acpSessionId) === true ? pendingClient : void 0;
|
|
702
|
+
if (pendingClient && !reusablePendingClient) await pendingClient.close().catch(() => {});
|
|
703
|
+
const client = reusablePendingClient ?? this.createClient({
|
|
704
|
+
agentCommand: record.agentCommand,
|
|
705
|
+
cwd: record.cwd,
|
|
706
|
+
mcpServers: [...this.options.mcpServers ?? []],
|
|
707
|
+
permissionMode: this.options.permissionMode,
|
|
708
|
+
nonInteractivePermissions: this.options.nonInteractivePermissions,
|
|
709
|
+
verbose: this.options.verbose
|
|
710
|
+
});
|
|
711
|
+
try {
|
|
712
|
+
if (!reusablePendingClient) await withTimeout(client.start(), this.options.timeoutMs);
|
|
713
|
+
if (!client.supportsCloseSession()) throw new AcpRuntimeError("ACP_BACKEND_UNSUPPORTED_CONTROL", `Agent does not support session/close for ${record.acpxRecordId}.`);
|
|
714
|
+
await withTimeout(client.closeSession(record.acpSessionId), this.options.timeoutMs);
|
|
715
|
+
} catch (error) {
|
|
716
|
+
if (isUnsupportedSessionCloseError(error)) throw new AcpRuntimeError("ACP_BACKEND_UNSUPPORTED_CONTROL", `Agent does not support session/close for ${record.acpxRecordId}.`, { cause: error });
|
|
717
|
+
if (isAcpResourceNotFoundError(error)) return;
|
|
718
|
+
throw error;
|
|
719
|
+
} finally {
|
|
720
|
+
await client.close().catch(() => {});
|
|
721
|
+
}
|
|
722
|
+
}
|
|
682
723
|
async requireRecord(sessionId) {
|
|
683
724
|
const record = await this.options.sessionStore.load(sessionId);
|
|
684
725
|
if (!record) throw new Error(`ACP session not found: ${sessionId}`);
|
|
@@ -937,7 +978,7 @@ var AcpxRuntime = class {
|
|
|
937
978
|
await (await this.getManager()).close({
|
|
938
979
|
...input.handle,
|
|
939
980
|
acpxRecordId: state.acpxRecordId ?? input.handle.acpxRecordId ?? input.handle.sessionKey
|
|
940
|
-
});
|
|
981
|
+
}, { discardPersistentState: input.discardPersistentState });
|
|
941
982
|
}
|
|
942
983
|
async getManager() {
|
|
943
984
|
if (this.manager) return this.manager;
|
package/dist/runtime.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","names":[],"sources":["../src/runtime/public/errors.ts","../src/runtime/public/shared.ts","../src/runtime/public/events.ts","../src/runtime/engine/reuse-policy.ts","../src/runtime/engine/manager.ts","../src/runtime/public/file-session-store.ts","../src/runtime/public/handle-state.ts","../src/runtime/public/probe.ts","../src/runtime.ts"],"sourcesContent":["export const ACP_ERROR_CODES = [\n \"ACP_BACKEND_MISSING\",\n \"ACP_BACKEND_UNAVAILABLE\",\n \"ACP_BACKEND_UNSUPPORTED_CONTROL\",\n \"ACP_DISPATCH_DISABLED\",\n \"ACP_INVALID_RUNTIME_OPTION\",\n \"ACP_SESSION_INIT_FAILED\",\n \"ACP_TURN_FAILED\",\n] as const;\n\nexport type AcpRuntimeErrorCode = (typeof ACP_ERROR_CODES)[number];\n\nexport class AcpRuntimeError extends Error {\n readonly code: AcpRuntimeErrorCode;\n override readonly cause?: unknown;\n\n constructor(code: AcpRuntimeErrorCode, message: string, options?: { cause?: unknown }) {\n super(message);\n this.name = \"AcpRuntimeError\";\n this.code = code;\n this.cause = options?.cause;\n }\n}\n\nexport function isAcpRuntimeError(value: unknown): value is AcpRuntimeError {\n return value instanceof AcpRuntimeError;\n}\n","export type AcpxHandleState = {\n name: string;\n agent: string;\n cwd: string;\n mode: \"persistent\" | \"oneshot\";\n acpxRecordId?: string;\n backendSessionId?: string;\n agentSessionId?: string;\n};\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nexport function asTrimmedString(value: unknown): string {\n return typeof value === \"string\" ? value.trim() : \"\";\n}\n\nexport function asString(value: unknown): string | undefined {\n return typeof value === \"string\" ? value : undefined;\n}\n\nexport function asOptionalString(value: unknown): string | undefined {\n const text = asTrimmedString(value);\n return text || undefined;\n}\n\nexport function asOptionalBoolean(value: unknown): boolean | undefined {\n return typeof value === \"boolean\" ? value : undefined;\n}\n\nexport function deriveAgentFromSessionKey(sessionKey: string, fallbackAgent: string): string {\n const match = sessionKey.match(/^agent:([^:]+):/i);\n const candidate = match?.[1] ? asTrimmedString(match[1]) : \"\";\n return candidate || fallbackAgent;\n}\n","import type { AcpRuntimeEvent, AcpSessionUpdateTag } from \"./contract.js\";\nimport {\n asOptionalBoolean,\n asOptionalString,\n asString,\n asTrimmedString,\n isRecord,\n} from \"./shared.js\";\n\nfunction safeParseJsonObject(line: string): Record<string, unknown> | null {\n try {\n const parsed = JSON.parse(line) as unknown;\n return isRecord(parsed) ? parsed : null;\n } catch {\n return null;\n }\n}\n\nfunction asOptionalFiniteNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction resolveStructuredPromptPayload(parsed: Record<string, unknown>): {\n type: string;\n payload: Record<string, unknown>;\n tag?: AcpSessionUpdateTag;\n} {\n const method = asTrimmedString(parsed.method);\n if (method === \"session/update\") {\n const params = parsed.params;\n if (isRecord(params) && isRecord(params.update)) {\n const update = params.update;\n const tag = asOptionalString(update.sessionUpdate) as AcpSessionUpdateTag | undefined;\n return {\n type: tag ?? \"\",\n payload: update,\n ...(tag ? { tag } : {}),\n };\n }\n }\n\n const sessionUpdate = asOptionalString(parsed.sessionUpdate) as AcpSessionUpdateTag | undefined;\n if (sessionUpdate) {\n return {\n type: sessionUpdate,\n payload: parsed,\n tag: sessionUpdate,\n };\n }\n\n const type = asTrimmedString(parsed.type);\n const tag = asOptionalString(parsed.tag) as AcpSessionUpdateTag | undefined;\n return {\n type,\n payload: parsed,\n ...(tag ? { tag } : {}),\n };\n}\n\nfunction resolveStatusTextForTag(params: {\n tag: AcpSessionUpdateTag;\n payload: Record<string, unknown>;\n}): string | null {\n const { tag, payload } = params;\n if (tag === \"available_commands_update\") {\n const commands = Array.isArray(payload.availableCommands) ? payload.availableCommands : [];\n return commands.length > 0\n ? `available commands updated (${commands.length})`\n : \"available commands updated\";\n }\n if (tag === \"current_mode_update\") {\n const mode =\n asTrimmedString(payload.currentModeId) ||\n asTrimmedString(payload.modeId) ||\n asTrimmedString(payload.mode);\n return mode ? `mode updated: ${mode}` : \"mode updated\";\n }\n if (tag === \"config_option_update\") {\n const id = asTrimmedString(payload.id) || asTrimmedString(payload.configOptionId);\n const value =\n asTrimmedString(payload.currentValue) ||\n asTrimmedString(payload.value) ||\n asTrimmedString(payload.optionValue);\n if (id && value) {\n return `config updated: ${id}=${value}`;\n }\n if (id) {\n return `config updated: ${id}`;\n }\n return \"config updated\";\n }\n if (tag === \"session_info_update\") {\n return (\n asTrimmedString(payload.summary) || asTrimmedString(payload.message) || \"session updated\"\n );\n }\n if (tag === \"plan\") {\n const entries = Array.isArray(payload.entries) ? payload.entries : [];\n const first = entries.find((entry) => isRecord(entry));\n const content = asTrimmedString(first?.content);\n return content ? `plan: ${content}` : null;\n }\n return null;\n}\n\nfunction resolveTextChunk(params: {\n payload: Record<string, unknown>;\n stream: \"output\" | \"thought\";\n tag: AcpSessionUpdateTag;\n}): AcpRuntimeEvent | null {\n const contentRaw = params.payload.content;\n if (isRecord(contentRaw)) {\n const contentType = asTrimmedString(contentRaw.type);\n if (contentType && contentType !== \"text\") {\n return null;\n }\n const text = asString(contentRaw.text);\n if (text && text.length > 0) {\n return {\n type: \"text_delta\",\n text,\n stream: params.stream,\n tag: params.tag,\n };\n }\n }\n const text = asString(params.payload.text);\n if (!text || text.length === 0) {\n return null;\n }\n return {\n type: \"text_delta\",\n text,\n stream: params.stream,\n tag: params.tag,\n };\n}\n\nfunction createTextDeltaEvent(params: {\n content: string | null | undefined;\n stream: \"output\" | \"thought\";\n tag?: AcpSessionUpdateTag;\n}): AcpRuntimeEvent | null {\n if (params.content == null || params.content.length === 0) {\n return null;\n }\n return {\n type: \"text_delta\",\n text: params.content,\n stream: params.stream,\n ...(params.tag ? { tag: params.tag } : {}),\n };\n}\n\nfunction createToolCallEvent(params: {\n payload: Record<string, unknown>;\n tag: AcpSessionUpdateTag;\n}): AcpRuntimeEvent {\n const title = asTrimmedString(params.payload.title) || \"tool call\";\n const status = asTrimmedString(params.payload.status);\n const toolCallId = asOptionalString(params.payload.toolCallId);\n return {\n type: \"tool_call\",\n text: status ? `${title} (${status})` : title,\n tag: params.tag,\n ...(toolCallId ? { toolCallId } : {}),\n ...(status ? { status } : {}),\n title,\n };\n}\n\nexport function parsePromptEventLine(line: string): AcpRuntimeEvent | null {\n const trimmed = line.trim();\n if (!trimmed) {\n return null;\n }\n const parsed = safeParseJsonObject(trimmed);\n if (!parsed) {\n return {\n type: \"status\",\n text: trimmed,\n };\n }\n\n const structured = resolveStructuredPromptPayload(parsed);\n const type = structured.type;\n const payload = structured.payload;\n const tag = structured.tag;\n\n switch (type) {\n case \"text\":\n return createTextDeltaEvent({\n content: asString(payload.content),\n stream: \"output\",\n tag,\n });\n case \"thought\":\n return createTextDeltaEvent({\n content: asString(payload.content),\n stream: \"thought\",\n tag,\n });\n case \"tool_call\":\n return createToolCallEvent({\n payload,\n tag: tag ?? \"tool_call\",\n });\n case \"tool_call_update\":\n return createToolCallEvent({\n payload,\n tag: tag ?? \"tool_call_update\",\n });\n case \"agent_message_chunk\":\n return resolveTextChunk({\n payload,\n stream: \"output\",\n tag: \"agent_message_chunk\",\n });\n case \"agent_thought_chunk\":\n return resolveTextChunk({\n payload,\n stream: \"thought\",\n tag: \"agent_thought_chunk\",\n });\n case \"usage_update\": {\n const used = asOptionalFiniteNumber(payload.used);\n const size = asOptionalFiniteNumber(payload.size);\n const text =\n used != null && size != null ? `usage updated: ${used}/${size}` : \"usage updated\";\n return {\n type: \"status\",\n text,\n tag: \"usage_update\",\n ...(used != null ? { used } : {}),\n ...(size != null ? { size } : {}),\n };\n }\n case \"available_commands_update\":\n case \"current_mode_update\":\n case \"config_option_update\":\n case \"session_info_update\":\n case \"plan\": {\n const text = resolveStatusTextForTag({\n tag: type as AcpSessionUpdateTag,\n payload,\n });\n if (!text) {\n return null;\n }\n return {\n type: \"status\",\n text,\n tag: type as AcpSessionUpdateTag,\n };\n }\n case \"client_operation\": {\n const method = asTrimmedString(payload.method) || \"operation\";\n const status = asTrimmedString(payload.status);\n const summary = asTrimmedString(payload.summary);\n const text = [method, status, summary].filter(Boolean).join(\" \");\n if (!text) {\n return null;\n }\n return { type: \"status\", text, ...(tag ? { tag } : {}) };\n }\n case \"update\": {\n const update = asTrimmedString(payload.update);\n if (!update) {\n return null;\n }\n return { type: \"status\", text: update, ...(tag ? { tag } : {}) };\n }\n case \"done\":\n return {\n type: \"done\",\n stopReason: asOptionalString(payload.stopReason),\n };\n case \"error\": {\n const message = asTrimmedString(payload.message) || \"acpx runtime error\";\n return {\n type: \"error\",\n message,\n code: asOptionalString(payload.code),\n retryable: asOptionalBoolean(payload.retryable),\n };\n }\n default:\n return null;\n }\n}\n","import path from \"node:path\";\nimport type { SessionRecord } from \"../../types.js\";\n\nexport function shouldReuseExistingRecord(\n record: Pick<SessionRecord, \"cwd\" | \"agentCommand\" | \"acpSessionId\">,\n params: {\n cwd: string;\n agentCommand: string;\n resumeSessionId?: string;\n },\n): boolean {\n if (path.resolve(record.cwd) !== path.resolve(params.cwd)) {\n return false;\n }\n if (record.agentCommand !== params.agentCommand) {\n return false;\n }\n if (params.resumeSessionId && record.acpSessionId !== params.resumeSessionId) {\n return false;\n }\n return true;\n}\n","import { randomUUID } from \"node:crypto\";\nimport path from \"node:path\";\nimport { AcpClient } from \"../../acp/client.js\";\nimport { normalizeOutputError } from \"../../acp/error-normalization.js\";\nimport { textPrompt, type PromptInput } from \"../../prompt-content.js\";\nimport {\n cloneSessionAcpxState,\n cloneSessionConversation,\n createSessionConversation,\n recordClientOperation,\n recordPromptSubmission,\n recordSessionUpdate,\n trimConversationForRuntime,\n} from \"../../session/conversation-model.js\";\nimport { defaultSessionEventLog } from \"../../session/event-log.js\";\nimport { setDesiredModeId } from \"../../session/mode-preference.js\";\nimport type { ClientOperation, SessionRecord, SessionResumePolicy } from \"../../types.js\";\nimport type {\n AcpRuntimeEvent,\n AcpRuntimeHandle,\n AcpRuntimeOptions,\n AcpRuntimePromptMode,\n AcpRuntimeStatus,\n AcpRuntimeTurnAttachment,\n} from \"../public/contract.js\";\nimport { AcpRuntimeError } from \"../public/errors.js\";\nimport { parsePromptEventLine } from \"../public/events.js\";\nimport { withConnectedSession } from \"./connected-session.js\";\nimport {\n applyConversation,\n applyLifecycleSnapshotToRecord,\n reconcileAgentSessionId,\n} from \"./lifecycle.js\";\nimport { runPromptTurn } from \"./prompt-turn.js\";\nimport { connectAndLoadSession } from \"./reconnect.js\";\nimport { shouldReuseExistingRecord } from \"./reuse-policy.js\";\n\nexport type AcpRuntimeManagerDeps = {\n clientFactory?: (options: ConstructorParameters<typeof AcpClient>[0]) => AcpClient;\n};\n\ntype ActiveSessionController = {\n hasActivePrompt: () => boolean;\n requestCancelActivePrompt: () => Promise<boolean>;\n setSessionMode: (modeId: string) => Promise<void>;\n setSessionModel: (modelId: string) => Promise<void>;\n setSessionConfigOption: (\n configId: string,\n value: string,\n ) => ReturnType<AcpClient[\"setSessionConfigOption\"]>;\n};\n\ntype Deferred<T> = {\n promise: Promise<T>;\n resolve: (value: T) => void;\n reject: (error: unknown) => void;\n};\n\nfunction createDeferred<T>(): Deferred<T> {\n let resolve!: (value: T) => void;\n let reject!: (error: unknown) => void;\n const promise = new Promise<T>((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return { promise, resolve, reject };\n}\n\nclass AsyncEventQueue {\n private readonly items: AcpRuntimeEvent[] = [];\n private readonly waits: Deferred<AcpRuntimeEvent | null>[] = [];\n private closed = false;\n\n push(item: AcpRuntimeEvent): void {\n if (this.closed) {\n return;\n }\n const waiter = this.waits.shift();\n if (waiter) {\n waiter.resolve(item);\n return;\n }\n this.items.push(item);\n }\n\n close(): void {\n if (this.closed) {\n return;\n }\n this.closed = true;\n for (const waiter of this.waits.splice(0)) {\n waiter.resolve(null);\n }\n }\n\n async next(): Promise<AcpRuntimeEvent | null> {\n if (this.items.length > 0) {\n return this.items.shift() ?? null;\n }\n if (this.closed) {\n return null;\n }\n const waiter = createDeferred<AcpRuntimeEvent | null>();\n this.waits.push(waiter);\n return await waiter.promise;\n }\n\n async *iterate(): AsyncIterable<AcpRuntimeEvent> {\n while (true) {\n const next = await this.next();\n if (!next) {\n return;\n }\n yield next;\n }\n }\n}\n\nfunction isoNow(): string {\n return new Date().toISOString();\n}\n\nfunction toPromptInput(\n text: string,\n attachments?: AcpRuntimeTurnAttachment[],\n): PromptInput | string {\n if (!attachments || attachments.length === 0) {\n return text;\n }\n const blocks: Array<\n { type: \"text\"; text: string } | { type: \"image\"; mimeType: string; data: string }\n > = [];\n if (text) {\n blocks.push({ type: \"text\", text });\n }\n for (const attachment of attachments) {\n if (!attachment.mediaType.startsWith(\"image/\")) {\n throw new AcpRuntimeError(\n \"ACP_TURN_FAILED\",\n `Unsupported ACP runtime attachment media type: ${attachment.mediaType}`,\n );\n }\n blocks.push({\n type: \"image\",\n mimeType: attachment.mediaType,\n data: attachment.data,\n });\n }\n return blocks.length > 0 ? blocks : textPrompt(text);\n}\n\nfunction createInitialRecord(params: {\n recordId: string;\n sessionName: string;\n sessionId: string;\n agentCommand: string;\n cwd: string;\n agentSessionId?: string;\n}): SessionRecord {\n const now = isoNow();\n return {\n schema: \"acpx.session.v1\",\n acpxRecordId: params.recordId,\n acpSessionId: params.sessionId,\n agentSessionId: params.agentSessionId,\n agentCommand: params.agentCommand,\n cwd: params.cwd,\n name: params.sessionName,\n createdAt: now,\n lastUsedAt: now,\n lastSeq: 0,\n eventLog: defaultSessionEventLog(params.recordId),\n closed: false,\n closedAt: undefined,\n ...createSessionConversation(now),\n acpx: {},\n };\n}\n\nfunction createRecordId(sessionKey: string, mode: \"persistent\" | \"oneshot\"): string {\n if (mode === \"persistent\") {\n return sessionKey;\n }\n return `${sessionKey}:oneshot:${randomUUID()}`;\n}\n\nfunction resumePolicyForSessionMode(mode: \"persistent\" | \"oneshot\"): SessionResumePolicy {\n return mode === \"persistent\" ? \"same-session-only\" : \"allow-new\";\n}\n\nfunction statusSummary(record: SessionRecord): string {\n const parts = [\n `session=${record.acpxRecordId}`,\n `backendSessionId=${record.acpSessionId}`,\n record.agentSessionId ? `agentSessionId=${record.agentSessionId}` : null,\n record.pid != null ? `pid=${record.pid}` : null,\n record.closed ? \"closed\" : \"open\",\n ].filter(Boolean);\n return parts.join(\" \");\n}\n\nexport class AcpRuntimeManager {\n private readonly activeControllers = new Map<string, ActiveSessionController>();\n private readonly pendingPersistentClients = new Map<string, AcpClient>();\n\n constructor(\n private readonly options: AcpRuntimeOptions,\n private readonly deps: AcpRuntimeManagerDeps = {},\n ) {}\n\n private createClient(options: ConstructorParameters<typeof AcpClient>[0]): AcpClient {\n return this.deps.clientFactory?.(options) ?? new AcpClient(options);\n }\n\n async ensureSession(input: {\n sessionKey: string;\n agent: string;\n mode: \"persistent\" | \"oneshot\";\n cwd?: string;\n resumeSessionId?: string;\n }): Promise<SessionRecord> {\n const cwd = path.resolve(input.cwd?.trim() || this.options.cwd);\n const agentCommand = this.options.agentRegistry.resolve(input.agent);\n const existing = await this.options.sessionStore.load(input.sessionKey);\n if (\n input.mode === \"persistent\" &&\n existing &&\n shouldReuseExistingRecord(existing, {\n cwd,\n agentCommand,\n resumeSessionId: input.resumeSessionId,\n })\n ) {\n existing.closed = false;\n existing.closedAt = undefined;\n await this.options.sessionStore.save(existing);\n return existing;\n }\n\n const client = this.createClient({\n agentCommand,\n cwd,\n mcpServers: [...(this.options.mcpServers ?? [])],\n permissionMode: this.options.permissionMode,\n nonInteractivePermissions: this.options.nonInteractivePermissions,\n verbose: this.options.verbose,\n });\n let keepClientOpen = false;\n\n try {\n await client.start();\n let sessionId: string;\n let agentSessionId: string | undefined;\n if (input.resumeSessionId) {\n const loaded = await client.loadSession(input.resumeSessionId, cwd);\n sessionId = input.resumeSessionId;\n agentSessionId = loaded.agentSessionId;\n } else {\n const created = await client.createSession(cwd);\n sessionId = created.sessionId;\n agentSessionId = created.agentSessionId;\n }\n const record = createInitialRecord({\n recordId: createRecordId(input.sessionKey, input.mode),\n sessionName: input.sessionKey,\n sessionId,\n agentCommand,\n cwd,\n agentSessionId,\n });\n record.protocolVersion = client.initializeResult?.protocolVersion;\n record.agentCapabilities = client.initializeResult?.agentCapabilities;\n applyLifecycleSnapshotToRecord(record, client.getAgentLifecycleSnapshot());\n await this.options.sessionStore.save(record);\n if (input.mode === \"persistent\") {\n const previousClient = this.pendingPersistentClients.get(record.acpxRecordId);\n this.pendingPersistentClients.set(record.acpxRecordId, client);\n keepClientOpen = true;\n await previousClient?.close().catch(() => {});\n }\n return record;\n } finally {\n if (!keepClientOpen) {\n await client.close();\n }\n }\n }\n\n async *runTurn(input: {\n handle: AcpRuntimeHandle;\n text: string;\n attachments?: AcpRuntimeTurnAttachment[];\n mode: AcpRuntimePromptMode;\n sessionMode: \"persistent\" | \"oneshot\";\n requestId: string;\n timeoutMs?: number;\n signal?: AbortSignal;\n }): AsyncIterable<AcpRuntimeEvent> {\n const record = await this.requireRecord(input.handle.acpxRecordId ?? input.handle.sessionKey);\n const conversation = cloneSessionConversation(record);\n let acpxState = cloneSessionAcpxState(record.acpx);\n const promptInput = toPromptInput(input.text, input.attachments);\n const promptMessageId = recordPromptSubmission(conversation, promptInput, isoNow());\n trimConversationForRuntime(conversation);\n\n const queue = new AsyncEventQueue();\n let pendingClient = this.pendingPersistentClients.get(record.acpxRecordId);\n if (pendingClient) {\n this.pendingPersistentClients.delete(record.acpxRecordId);\n if (!pendingClient.hasReusableSession(record.acpSessionId)) {\n await pendingClient.close().catch(() => {});\n pendingClient = undefined;\n }\n }\n const client =\n pendingClient ??\n this.createClient({\n agentCommand: record.agentCommand,\n cwd: record.cwd,\n mcpServers: [...(this.options.mcpServers ?? [])],\n permissionMode: this.options.permissionMode,\n nonInteractivePermissions: this.options.nonInteractivePermissions,\n verbose: this.options.verbose,\n });\n let activeSessionId = record.acpSessionId;\n let sawDone = false;\n let pendingCancel = false;\n let turnActive = true;\n const sessionReady = createDeferred<void>();\n void sessionReady.promise.catch(() => {});\n\n const applyPendingCancel = async (): Promise<boolean> => {\n if (!pendingCancel || !client.hasActivePrompt()) {\n return false;\n }\n const cancelled = await client.requestCancelActivePrompt();\n if (cancelled) {\n pendingCancel = false;\n }\n return cancelled;\n };\n\n const activeController: ActiveSessionController = {\n hasActivePrompt: () => client.hasActivePrompt(),\n requestCancelActivePrompt: async () => {\n if (client.hasActivePrompt()) {\n return await client.requestCancelActivePrompt();\n }\n if (!turnActive) {\n return false;\n }\n pendingCancel = true;\n return true;\n },\n setSessionMode: async (modeId: string) => {\n if (!client.hasActivePrompt()) {\n await sessionReady.promise;\n }\n await client.setSessionMode(activeSessionId, modeId);\n },\n setSessionModel: async (modelId: string) => {\n if (!client.hasActivePrompt()) {\n await sessionReady.promise;\n }\n await client.setSessionModel(activeSessionId, modelId);\n },\n setSessionConfigOption: async (configId: string, value: string) => {\n if (!client.hasActivePrompt()) {\n await sessionReady.promise;\n }\n return await client.setSessionConfigOption(activeSessionId, configId, value);\n },\n };\n\n const emitParsed = (payload: Record<string, unknown>): void => {\n const parsed = parsePromptEventLine(JSON.stringify(payload));\n if (!parsed) {\n return;\n }\n if (parsed.type === \"done\") {\n sawDone = true;\n }\n queue.push(parsed);\n };\n\n const abortHandler = () => {\n void activeController.requestCancelActivePrompt();\n };\n if (input.signal) {\n if (input.signal.aborted) {\n queue.close();\n return;\n }\n input.signal.addEventListener(\"abort\", abortHandler, { once: true });\n }\n\n this.activeControllers.set(record.acpxRecordId, activeController);\n\n void (async () => {\n try {\n client.setEventHandlers({\n onSessionUpdate: (notification) => {\n acpxState = recordSessionUpdate(conversation, acpxState, notification);\n trimConversationForRuntime(conversation);\n emitParsed({\n jsonrpc: \"2.0\",\n method: \"session/update\",\n params: notification,\n });\n },\n onClientOperation: (operation: ClientOperation) => {\n acpxState = recordClientOperation(conversation, acpxState, operation);\n trimConversationForRuntime(conversation);\n emitParsed({\n type: \"client_operation\",\n ...operation,\n });\n },\n });\n\n const { sessionId, resumed, loadError } = pendingClient\n ? {\n sessionId: record.acpSessionId,\n resumed: false,\n loadError: undefined,\n }\n : await connectAndLoadSession({\n client,\n record,\n resumePolicy: resumePolicyForSessionMode(input.sessionMode),\n timeoutMs: this.options.timeoutMs,\n activeController,\n onClientAvailable: (controller) => {\n this.activeControllers.set(record.acpxRecordId, controller);\n },\n onConnectedRecord: (connectedRecord) => {\n connectedRecord.lastPromptAt = isoNow();\n },\n onSessionIdResolved: (sessionIdValue) => {\n activeSessionId = sessionIdValue;\n },\n });\n sessionReady.resolve();\n\n record.lastRequestId = input.requestId;\n record.lastPromptAt = isoNow();\n record.closed = false;\n record.closedAt = undefined;\n record.lastUsedAt = isoNow();\n if (resumed || loadError) {\n emitParsed({\n type: \"status\",\n text: loadError ? `load fallback: ${loadError}` : \"session resumed\",\n });\n }\n\n if (pendingCancel || input.signal?.aborted) {\n pendingCancel = false;\n if (!sawDone) {\n queue.push({\n type: \"done\",\n stopReason: \"cancelled\",\n });\n }\n return;\n }\n\n await applyPendingCancel();\n const response = await runPromptTurn({\n client,\n sessionId,\n prompt: promptInput,\n timeoutMs: input.timeoutMs ?? this.options.timeoutMs,\n conversation,\n promptMessageId,\n });\n\n record.acpSessionId = activeSessionId;\n reconcileAgentSessionId(record, record.agentSessionId);\n record.protocolVersion = client.initializeResult?.protocolVersion;\n record.agentCapabilities = client.initializeResult?.agentCapabilities;\n record.acpx = acpxState;\n applyConversation(record, conversation);\n applyLifecycleSnapshotToRecord(record, client.getAgentLifecycleSnapshot());\n await this.options.sessionStore.save(record);\n\n if (!sawDone) {\n queue.push({\n type: \"done\",\n stopReason: response.stopReason,\n });\n }\n } catch (error) {\n sessionReady.reject(error);\n const normalized = normalizeOutputError(error, { origin: \"runtime\" });\n queue.push({\n type: \"error\",\n message: normalized.message,\n code: normalized.code,\n retryable: normalized.retryable,\n });\n } finally {\n turnActive = false;\n if (input.signal) {\n input.signal.removeEventListener(\"abort\", abortHandler);\n }\n this.activeControllers.delete(record.acpxRecordId);\n client.clearEventHandlers();\n applyLifecycleSnapshotToRecord(record, client.getAgentLifecycleSnapshot());\n record.acpx = acpxState;\n applyConversation(record, conversation);\n record.lastUsedAt = isoNow();\n await this.options.sessionStore.save(record).catch(() => {});\n await client.close().catch(() => {});\n queue.close();\n }\n })();\n\n yield* queue.iterate();\n }\n\n async getStatus(handle: AcpRuntimeHandle): Promise<AcpRuntimeStatus> {\n const record = await this.requireRecord(handle.acpxRecordId ?? handle.sessionKey);\n return {\n summary: statusSummary(record),\n acpxRecordId: record.acpxRecordId,\n backendSessionId: record.acpSessionId,\n agentSessionId: record.agentSessionId,\n details: {\n cwd: record.cwd,\n lastUsedAt: record.lastUsedAt,\n closed: record.closed === true,\n },\n };\n }\n\n async setMode(\n handle: AcpRuntimeHandle,\n mode: string,\n sessionMode: \"persistent\" | \"oneshot\" = \"persistent\",\n ): Promise<void> {\n const record = await this.requireRecord(handle.acpxRecordId ?? handle.sessionKey);\n const controller = this.activeControllers.get(record.acpxRecordId);\n let targetRecord = record;\n if (controller) {\n await controller.setSessionMode(mode);\n } else {\n const result = await withConnectedSession({\n sessionRecordId: record.acpxRecordId,\n loadRecord: async (sessionRecordId) => await this.requireRecord(sessionRecordId),\n saveRecord: async (connectedRecord) =>\n await this.options.sessionStore.save(connectedRecord),\n createClient: (options) => this.createClient(options),\n mcpServers: [...(this.options.mcpServers ?? [])],\n permissionMode: this.options.permissionMode,\n nonInteractivePermissions: this.options.nonInteractivePermissions,\n verbose: this.options.verbose,\n timeoutMs: this.options.timeoutMs,\n resumePolicy: resumePolicyForSessionMode(sessionMode),\n run: async ({ client, sessionId }) => {\n await client.setSessionMode(sessionId, mode);\n },\n });\n targetRecord = result.record;\n }\n setDesiredModeId(targetRecord, mode);\n await this.options.sessionStore.save(targetRecord);\n }\n\n async setConfigOption(\n handle: AcpRuntimeHandle,\n key: string,\n value: string,\n sessionMode: \"persistent\" | \"oneshot\" = \"persistent\",\n ): Promise<void> {\n const record = await this.requireRecord(handle.acpxRecordId ?? handle.sessionKey);\n const controller = this.activeControllers.get(record.acpxRecordId);\n let targetRecord = record;\n if (controller) {\n await controller.setSessionConfigOption(key, value);\n } else {\n const result = await withConnectedSession({\n sessionRecordId: record.acpxRecordId,\n loadRecord: async (sessionRecordId) => await this.requireRecord(sessionRecordId),\n saveRecord: async (connectedRecord) =>\n await this.options.sessionStore.save(connectedRecord),\n createClient: (options) => this.createClient(options),\n mcpServers: [...(this.options.mcpServers ?? [])],\n permissionMode: this.options.permissionMode,\n nonInteractivePermissions: this.options.nonInteractivePermissions,\n verbose: this.options.verbose,\n timeoutMs: this.options.timeoutMs,\n resumePolicy: resumePolicyForSessionMode(sessionMode),\n run: async ({ client, sessionId, record: connectedRecord }) => {\n await client.setSessionConfigOption(sessionId, key, value);\n if (key === \"mode\") {\n setDesiredModeId(connectedRecord, value);\n }\n },\n });\n targetRecord = result.record;\n }\n if (key === \"mode\") {\n setDesiredModeId(targetRecord, value);\n }\n await this.options.sessionStore.save(targetRecord);\n }\n\n async cancel(handle: AcpRuntimeHandle): Promise<void> {\n const controller = this.activeControllers.get(handle.acpxRecordId ?? handle.sessionKey);\n await controller?.requestCancelActivePrompt();\n }\n\n async close(handle: AcpRuntimeHandle): Promise<void> {\n const record = await this.requireRecord(handle.acpxRecordId ?? handle.sessionKey);\n await this.cancel(handle);\n record.closed = true;\n record.closedAt = isoNow();\n await this.options.sessionStore.save(record);\n }\n\n private async requireRecord(sessionId: string): Promise<SessionRecord> {\n const record = await this.options.sessionStore.load(sessionId);\n if (!record) {\n throw new Error(`ACP session not found: ${sessionId}`);\n }\n return record;\n }\n}\n","import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { assertPersistedKeyPolicy } from \"../../persisted-key-policy.js\";\nimport { parseSessionRecord } from \"../../session/persistence/parse.js\";\nimport { serializeSessionRecordForDisk } from \"../../session/persistence/serialize.js\";\nimport type { AcpFileSessionStoreOptions, AcpSessionRecord, AcpSessionStore } from \"./contract.js\";\n\nfunction safeSessionId(sessionId: string): string {\n return encodeURIComponent(sessionId);\n}\n\nclass FileSessionStore implements AcpSessionStore {\n constructor(private readonly stateDir: string) {}\n\n private get sessionDir(): string {\n return path.join(this.stateDir, \"sessions\");\n }\n\n private filePath(sessionId: string): string {\n return path.join(this.sessionDir, `${safeSessionId(sessionId)}.json`);\n }\n\n private async ensureDir(): Promise<void> {\n await fs.mkdir(this.sessionDir, { recursive: true });\n }\n\n async load(sessionId: string): Promise<AcpSessionRecord | undefined> {\n await this.ensureDir();\n try {\n const payload = await fs.readFile(this.filePath(sessionId), \"utf8\");\n return parseSessionRecord(JSON.parse(payload)) ?? undefined;\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n return undefined;\n }\n throw error;\n }\n }\n\n async save(record: AcpSessionRecord): Promise<void> {\n await this.ensureDir();\n const persisted = serializeSessionRecordForDisk(record);\n assertPersistedKeyPolicy(persisted);\n\n const file = this.filePath(record.acpxRecordId);\n const tempFile = `${file}.${process.pid}.${Date.now()}.tmp`;\n const payload = JSON.stringify(persisted, null, 2);\n await fs.writeFile(tempFile, `${payload}\\n`, \"utf8\");\n await fs.rename(tempFile, file);\n }\n}\n\nexport function createFileSessionStore(options: AcpFileSessionStoreOptions): AcpSessionStore {\n return new FileSessionStore(path.resolve(options.stateDir));\n}\n","import type { AcpRuntimeHandle } from \"./contract.js\";\nimport type { AcpxHandleState } from \"./shared.js\";\nimport { asOptionalString } from \"./shared.js\";\n\nconst ACPX_RUNTIME_HANDLE_PREFIX = \"acpx:v2:\";\n\nexport function encodeAcpxRuntimeHandleState(state: AcpxHandleState): string {\n const payload = Buffer.from(JSON.stringify(state), \"utf8\").toString(\"base64url\");\n return `${ACPX_RUNTIME_HANDLE_PREFIX}${payload}`;\n}\n\nexport function decodeAcpxRuntimeHandleState(runtimeSessionName: string): AcpxHandleState | null {\n const trimmed = runtimeSessionName.trim();\n if (!trimmed.startsWith(ACPX_RUNTIME_HANDLE_PREFIX)) {\n return null;\n }\n try {\n const raw = Buffer.from(trimmed.slice(ACPX_RUNTIME_HANDLE_PREFIX.length), \"base64url\").toString(\n \"utf8\",\n );\n const parsed = JSON.parse(raw) as Record<string, unknown>;\n const name = asOptionalString(parsed.name);\n const agent = asOptionalString(parsed.agent);\n const cwd = asOptionalString(parsed.cwd);\n const mode = asOptionalString(parsed.mode);\n if (!name || !agent || !cwd || (mode !== \"persistent\" && mode !== \"oneshot\")) {\n return null;\n }\n return {\n name,\n agent,\n cwd,\n mode,\n acpxRecordId: asOptionalString(parsed.acpxRecordId),\n backendSessionId: asOptionalString(parsed.backendSessionId),\n agentSessionId: asOptionalString(parsed.agentSessionId),\n };\n } catch {\n return null;\n }\n}\n\nexport function writeHandleState(handle: AcpRuntimeHandle, state: AcpxHandleState): void {\n handle.runtimeSessionName = encodeAcpxRuntimeHandleState(state);\n handle.cwd = state.cwd;\n handle.acpxRecordId = state.acpxRecordId;\n handle.backendSessionId = state.backendSessionId;\n handle.agentSessionId = state.agentSessionId;\n}\n","import { AcpClient } from \"../../acp/client.js\";\nimport { DEFAULT_AGENT_NAME } from \"../../agent-registry.js\";\nimport type { AcpRuntimeOptions } from \"./contract.js\";\n\nexport type RuntimeHealthReport = {\n ok: boolean;\n message: string;\n details?: string[];\n};\n\nexport type ProbeRuntimeDeps = {\n clientFactory?: (options: ConstructorParameters<typeof AcpClient>[0]) => AcpClient;\n};\n\nexport async function probeRuntime(\n options: AcpRuntimeOptions,\n deps: ProbeRuntimeDeps = {},\n): Promise<RuntimeHealthReport> {\n const agentName = options.probeAgent?.trim() || DEFAULT_AGENT_NAME;\n const agentCommand = options.agentRegistry.resolve(agentName);\n const client =\n deps.clientFactory?.({\n agentCommand,\n cwd: options.cwd,\n mcpServers: [...(options.mcpServers ?? [])],\n permissionMode: options.permissionMode,\n nonInteractivePermissions: options.nonInteractivePermissions,\n verbose: options.verbose,\n }) ??\n new AcpClient({\n agentCommand,\n cwd: options.cwd,\n mcpServers: [...(options.mcpServers ?? [])],\n permissionMode: options.permissionMode,\n nonInteractivePermissions: options.nonInteractivePermissions,\n verbose: options.verbose,\n });\n\n try {\n await client.start();\n return {\n ok: true,\n message: \"embedded ACP runtime ready\",\n details: [\n `agent=${agentName}`,\n `command=${agentCommand}`,\n `cwd=${options.cwd}`,\n ...(client.initializeResult?.protocolVersion\n ? [`protocolVersion=${client.initializeResult.protocolVersion}`]\n : []),\n ],\n };\n } catch (error) {\n return {\n ok: false,\n message: \"embedded ACP runtime probe failed\",\n details: [\n `agent=${agentName}`,\n `command=${agentCommand}`,\n `cwd=${options.cwd}`,\n error instanceof Error ? error.message : String(error),\n ],\n };\n } finally {\n await client.close().catch(() => {});\n }\n}\n","import { DEFAULT_AGENT_NAME, listBuiltInAgents, resolveAgentCommand } from \"./agent-registry.js\";\nimport { AcpRuntimeManager } from \"./runtime/engine/manager.js\";\nimport type {\n AcpAgentRegistry,\n AcpRuntime,\n AcpRuntimeCapabilities,\n AcpRuntimeDoctorReport,\n AcpRuntimeEnsureInput,\n AcpRuntimeHandle,\n AcpRuntimeOptions,\n AcpRuntimeStatus,\n AcpSessionStore,\n} from \"./runtime/public/contract.js\";\nimport { AcpRuntimeError } from \"./runtime/public/errors.js\";\nimport { createFileSessionStore } from \"./runtime/public/file-session-store.js\";\nimport { decodeAcpxRuntimeHandleState, writeHandleState } from \"./runtime/public/handle-state.js\";\nimport { probeRuntime } from \"./runtime/public/probe.js\";\nimport { deriveAgentFromSessionKey, type AcpxHandleState } from \"./runtime/public/shared.js\";\n\nexport { DEFAULT_AGENT_NAME, createFileSessionStore };\nexport { AcpRuntimeError, isAcpRuntimeError } from \"./runtime/public/errors.js\";\nexport type { AcpRuntimeErrorCode } from \"./runtime/public/errors.js\";\nexport {\n decodeAcpxRuntimeHandleState,\n encodeAcpxRuntimeHandleState,\n} from \"./runtime/public/handle-state.js\";\nexport type {\n AcpAgentRegistry,\n AcpFileSessionStoreOptions,\n AcpRuntime,\n AcpRuntimeCapabilities,\n AcpRuntimeDoctorReport,\n AcpRuntimeEnsureInput,\n AcpRuntimeEvent,\n AcpRuntimeHandle,\n AcpRuntimeOptions,\n AcpRuntimePromptMode,\n AcpRuntimeSessionMode,\n AcpRuntimeStatus,\n AcpRuntimeTurnAttachment,\n AcpRuntimeTurnInput,\n AcpSessionRecord,\n AcpSessionStore,\n AcpSessionUpdateTag,\n} from \"./runtime/public/contract.js\";\n\nexport const ACPX_BACKEND_ID = \"acpx\";\n\nconst ACPX_CAPABILITIES: AcpRuntimeCapabilities = {\n controls: [\"session/set_mode\", \"session/set_config_option\", \"session/status\"],\n};\n\ntype AcpxRuntimeLike = AcpRuntime & {\n probeAvailability(): Promise<void>;\n isHealthy(): boolean;\n doctor(): Promise<AcpRuntimeDoctorReport>;\n};\n\nexport function createAgentRegistry(params?: {\n overrides?: Record<string, string>;\n}): AcpAgentRegistry {\n return {\n resolve(agentName: string) {\n return resolveAgentCommand(agentName, params?.overrides);\n },\n list() {\n return listBuiltInAgents(params?.overrides);\n },\n };\n}\n\nexport class AcpxRuntime implements AcpxRuntimeLike {\n private healthy = false;\n private manager: AcpRuntimeManager | null = null;\n private managerPromise: Promise<AcpRuntimeManager> | null = null;\n\n constructor(\n private readonly options: AcpRuntimeOptions,\n private readonly testOptions?: {\n managerFactory?: (options: AcpRuntimeOptions) => AcpRuntimeManager;\n probeRunner?: (options: AcpRuntimeOptions) => Promise<{\n ok: boolean;\n message: string;\n details?: string[];\n }>;\n },\n ) {}\n\n isHealthy(): boolean {\n return this.healthy;\n }\n\n async probeAvailability(): Promise<void> {\n const report = await this.runProbe();\n this.healthy = report.ok;\n }\n\n async doctor(): Promise<AcpRuntimeDoctorReport> {\n const report = await this.runProbe();\n this.healthy = report.ok;\n return {\n ok: report.ok,\n code: report.ok ? undefined : \"ACP_BACKEND_UNAVAILABLE\",\n message: report.message,\n details: report.details,\n };\n }\n\n async ensureSession(input: AcpRuntimeEnsureInput): Promise<AcpRuntimeHandle> {\n const sessionName = input.sessionKey.trim();\n if (!sessionName) {\n throw new AcpRuntimeError(\"ACP_SESSION_INIT_FAILED\", \"ACP session key is required.\");\n }\n const agent = input.agent.trim();\n if (!agent) {\n throw new AcpRuntimeError(\"ACP_SESSION_INIT_FAILED\", \"ACP agent id is required.\");\n }\n\n const manager = await this.getManager();\n const record = await manager.ensureSession({\n sessionKey: sessionName,\n agent,\n mode: input.mode,\n cwd: input.cwd ?? this.options.cwd,\n resumeSessionId: input.resumeSessionId,\n });\n\n const handle: AcpRuntimeHandle = {\n sessionKey: input.sessionKey,\n backend: ACPX_BACKEND_ID,\n runtimeSessionName: \"\",\n cwd: record.cwd,\n acpxRecordId: record.acpxRecordId,\n backendSessionId: record.acpSessionId,\n agentSessionId: record.agentSessionId,\n };\n writeHandleState(handle, {\n name: sessionName,\n agent,\n cwd: record.cwd,\n mode: input.mode,\n acpxRecordId: record.acpxRecordId,\n backendSessionId: record.acpSessionId,\n agentSessionId: record.agentSessionId,\n });\n return handle;\n }\n\n async *runTurn(\n input: import(\"./runtime/public/contract.js\").AcpRuntimeTurnInput,\n ): AsyncIterable<import(\"./runtime/public/contract.js\").AcpRuntimeEvent> {\n const state = this.resolveHandleState(input.handle);\n const manager = await this.getManager();\n yield* manager.runTurn({\n handle: {\n ...input.handle,\n acpxRecordId: state.acpxRecordId ?? input.handle.acpxRecordId ?? input.handle.sessionKey,\n },\n text: input.text,\n attachments: input.attachments,\n mode: input.mode,\n sessionMode: state.mode,\n requestId: input.requestId,\n timeoutMs: input.timeoutMs,\n signal: input.signal,\n });\n }\n\n getCapabilities(): AcpRuntimeCapabilities {\n return ACPX_CAPABILITIES;\n }\n\n async getStatus(input: {\n handle: AcpRuntimeHandle;\n signal?: AbortSignal;\n }): Promise<AcpRuntimeStatus> {\n const state = this.resolveHandleState(input.handle);\n const manager = await this.getManager();\n return await manager.getStatus({\n ...input.handle,\n acpxRecordId: state.acpxRecordId ?? input.handle.acpxRecordId ?? input.handle.sessionKey,\n });\n }\n\n async setMode(input: { handle: AcpRuntimeHandle; mode: string }): Promise<void> {\n const state = this.resolveHandleState(input.handle);\n const manager = await this.getManager();\n await manager.setMode(\n {\n ...input.handle,\n acpxRecordId: state.acpxRecordId ?? input.handle.acpxRecordId ?? input.handle.sessionKey,\n },\n input.mode,\n state.mode,\n );\n }\n\n async setConfigOption(input: {\n handle: AcpRuntimeHandle;\n key: string;\n value: string;\n }): Promise<void> {\n const state = this.resolveHandleState(input.handle);\n const manager = await this.getManager();\n await manager.setConfigOption(\n {\n ...input.handle,\n acpxRecordId: state.acpxRecordId ?? input.handle.acpxRecordId ?? input.handle.sessionKey,\n },\n input.key,\n input.value,\n state.mode,\n );\n }\n\n async cancel(input: { handle: AcpRuntimeHandle; reason?: string }): Promise<void> {\n const state = this.resolveHandleState(input.handle);\n const manager = await this.getManager();\n await manager.cancel({\n ...input.handle,\n acpxRecordId: state.acpxRecordId ?? input.handle.acpxRecordId ?? input.handle.sessionKey,\n });\n }\n\n async close(input: { handle: AcpRuntimeHandle; reason: string }): Promise<void> {\n const state = this.resolveHandleState(input.handle);\n const manager = await this.getManager();\n await manager.close({\n ...input.handle,\n acpxRecordId: state.acpxRecordId ?? input.handle.acpxRecordId ?? input.handle.sessionKey,\n });\n }\n\n private async getManager(): Promise<AcpRuntimeManager> {\n if (this.manager) {\n return this.manager;\n }\n if (!this.managerPromise) {\n this.managerPromise = Promise.resolve(\n this.testOptions?.managerFactory?.(this.options) ?? new AcpRuntimeManager(this.options),\n ).then((manager) => {\n this.manager = manager;\n return manager;\n });\n }\n return await this.managerPromise;\n }\n\n private async runProbe() {\n return await (this.testOptions?.probeRunner?.(this.options) ?? probeRuntime(this.options));\n }\n\n private resolveHandleState(handle: AcpRuntimeHandle): AcpxHandleState {\n const decoded = decodeAcpxRuntimeHandleState(handle.runtimeSessionName);\n if (decoded) {\n return {\n ...decoded,\n acpxRecordId: decoded.acpxRecordId ?? handle.acpxRecordId,\n backendSessionId: decoded.backendSessionId ?? handle.backendSessionId,\n agentSessionId: decoded.agentSessionId ?? handle.agentSessionId,\n };\n }\n\n const runtimeSessionName = handle.runtimeSessionName.trim();\n if (!runtimeSessionName) {\n throw new AcpRuntimeError(\n \"ACP_SESSION_INIT_FAILED\",\n \"Invalid embedded ACP runtime handle: runtimeSessionName is missing.\",\n );\n }\n\n return {\n name: runtimeSessionName,\n agent: deriveAgentFromSessionKey(handle.sessionKey, DEFAULT_AGENT_NAME),\n cwd: handle.cwd ?? this.options.cwd,\n mode: \"persistent\",\n acpxRecordId: handle.acpxRecordId,\n backendSessionId: handle.backendSessionId,\n agentSessionId: handle.agentSessionId,\n };\n }\n}\n\nexport function createAcpRuntime(options: AcpRuntimeOptions): AcpxRuntime {\n return new AcpxRuntime(options);\n}\n\nexport function createRuntimeStore(options: { stateDir: string }): AcpSessionStore {\n return createFileSessionStore(options);\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"runtime.js","names":[],"sources":["../src/runtime/public/errors.ts","../src/runtime/public/shared.ts","../src/runtime/public/events.ts","../src/runtime/engine/reuse-policy.ts","../src/runtime/engine/manager.ts","../src/runtime/public/file-session-store.ts","../src/runtime/public/handle-state.ts","../src/runtime/public/probe.ts","../src/runtime.ts"],"sourcesContent":["export const ACP_ERROR_CODES = [\n \"ACP_BACKEND_MISSING\",\n \"ACP_BACKEND_UNAVAILABLE\",\n \"ACP_BACKEND_UNSUPPORTED_CONTROL\",\n \"ACP_DISPATCH_DISABLED\",\n \"ACP_INVALID_RUNTIME_OPTION\",\n \"ACP_SESSION_INIT_FAILED\",\n \"ACP_TURN_FAILED\",\n] as const;\n\nexport type AcpRuntimeErrorCode = (typeof ACP_ERROR_CODES)[number];\n\nexport class AcpRuntimeError extends Error {\n readonly code: AcpRuntimeErrorCode;\n override readonly cause?: unknown;\n\n constructor(code: AcpRuntimeErrorCode, message: string, options?: { cause?: unknown }) {\n super(message);\n this.name = \"AcpRuntimeError\";\n this.code = code;\n this.cause = options?.cause;\n }\n}\n\nexport function isAcpRuntimeError(value: unknown): value is AcpRuntimeError {\n return value instanceof AcpRuntimeError;\n}\n","export type AcpxHandleState = {\n name: string;\n agent: string;\n cwd: string;\n mode: \"persistent\" | \"oneshot\";\n acpxRecordId?: string;\n backendSessionId?: string;\n agentSessionId?: string;\n};\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nexport function asTrimmedString(value: unknown): string {\n return typeof value === \"string\" ? value.trim() : \"\";\n}\n\nexport function asString(value: unknown): string | undefined {\n return typeof value === \"string\" ? value : undefined;\n}\n\nexport function asOptionalString(value: unknown): string | undefined {\n const text = asTrimmedString(value);\n return text || undefined;\n}\n\nexport function asOptionalBoolean(value: unknown): boolean | undefined {\n return typeof value === \"boolean\" ? value : undefined;\n}\n\nexport function deriveAgentFromSessionKey(sessionKey: string, fallbackAgent: string): string {\n const match = sessionKey.match(/^agent:([^:]+):/i);\n const candidate = match?.[1] ? asTrimmedString(match[1]) : \"\";\n return candidate || fallbackAgent;\n}\n","import type { AcpRuntimeEvent, AcpSessionUpdateTag } from \"./contract.js\";\nimport {\n asOptionalBoolean,\n asOptionalString,\n asString,\n asTrimmedString,\n isRecord,\n} from \"./shared.js\";\n\nfunction safeParseJsonObject(line: string): Record<string, unknown> | null {\n try {\n const parsed = JSON.parse(line) as unknown;\n return isRecord(parsed) ? parsed : null;\n } catch {\n return null;\n }\n}\n\nfunction asOptionalFiniteNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction resolveStructuredPromptPayload(parsed: Record<string, unknown>): {\n type: string;\n payload: Record<string, unknown>;\n tag?: AcpSessionUpdateTag;\n} {\n const method = asTrimmedString(parsed.method);\n if (method === \"session/update\") {\n const params = parsed.params;\n if (isRecord(params) && isRecord(params.update)) {\n const update = params.update;\n const tag = asOptionalString(update.sessionUpdate) as AcpSessionUpdateTag | undefined;\n return {\n type: tag ?? \"\",\n payload: update,\n ...(tag ? { tag } : {}),\n };\n }\n }\n\n const sessionUpdate = asOptionalString(parsed.sessionUpdate) as AcpSessionUpdateTag | undefined;\n if (sessionUpdate) {\n return {\n type: sessionUpdate,\n payload: parsed,\n tag: sessionUpdate,\n };\n }\n\n const type = asTrimmedString(parsed.type);\n const tag = asOptionalString(parsed.tag) as AcpSessionUpdateTag | undefined;\n return {\n type,\n payload: parsed,\n ...(tag ? { tag } : {}),\n };\n}\n\nfunction resolveStatusTextForTag(params: {\n tag: AcpSessionUpdateTag;\n payload: Record<string, unknown>;\n}): string | null {\n const { tag, payload } = params;\n if (tag === \"available_commands_update\") {\n const commands = Array.isArray(payload.availableCommands) ? payload.availableCommands : [];\n return commands.length > 0\n ? `available commands updated (${commands.length})`\n : \"available commands updated\";\n }\n if (tag === \"current_mode_update\") {\n const mode =\n asTrimmedString(payload.currentModeId) ||\n asTrimmedString(payload.modeId) ||\n asTrimmedString(payload.mode);\n return mode ? `mode updated: ${mode}` : \"mode updated\";\n }\n if (tag === \"config_option_update\") {\n const id = asTrimmedString(payload.id) || asTrimmedString(payload.configOptionId);\n const value =\n asTrimmedString(payload.currentValue) ||\n asTrimmedString(payload.value) ||\n asTrimmedString(payload.optionValue);\n if (id && value) {\n return `config updated: ${id}=${value}`;\n }\n if (id) {\n return `config updated: ${id}`;\n }\n return \"config updated\";\n }\n if (tag === \"session_info_update\") {\n return (\n asTrimmedString(payload.summary) || asTrimmedString(payload.message) || \"session updated\"\n );\n }\n if (tag === \"plan\") {\n const entries = Array.isArray(payload.entries) ? payload.entries : [];\n const first = entries.find((entry) => isRecord(entry));\n const content = asTrimmedString(first?.content);\n return content ? `plan: ${content}` : null;\n }\n return null;\n}\n\nfunction resolveTextChunk(params: {\n payload: Record<string, unknown>;\n stream: \"output\" | \"thought\";\n tag: AcpSessionUpdateTag;\n}): AcpRuntimeEvent | null {\n const contentRaw = params.payload.content;\n if (isRecord(contentRaw)) {\n const contentType = asTrimmedString(contentRaw.type);\n if (contentType && contentType !== \"text\") {\n return null;\n }\n const text = asString(contentRaw.text);\n if (text && text.length > 0) {\n return {\n type: \"text_delta\",\n text,\n stream: params.stream,\n tag: params.tag,\n };\n }\n }\n const text = asString(params.payload.text);\n if (!text || text.length === 0) {\n return null;\n }\n return {\n type: \"text_delta\",\n text,\n stream: params.stream,\n tag: params.tag,\n };\n}\n\nfunction createTextDeltaEvent(params: {\n content: string | null | undefined;\n stream: \"output\" | \"thought\";\n tag?: AcpSessionUpdateTag;\n}): AcpRuntimeEvent | null {\n if (params.content == null || params.content.length === 0) {\n return null;\n }\n return {\n type: \"text_delta\",\n text: params.content,\n stream: params.stream,\n ...(params.tag ? { tag: params.tag } : {}),\n };\n}\n\nfunction createToolCallEvent(params: {\n payload: Record<string, unknown>;\n tag: AcpSessionUpdateTag;\n}): AcpRuntimeEvent {\n const title = asTrimmedString(params.payload.title) || \"tool call\";\n const status = asTrimmedString(params.payload.status);\n const toolCallId = asOptionalString(params.payload.toolCallId);\n return {\n type: \"tool_call\",\n text: status ? `${title} (${status})` : title,\n tag: params.tag,\n ...(toolCallId ? { toolCallId } : {}),\n ...(status ? { status } : {}),\n title,\n };\n}\n\nexport function parsePromptEventLine(line: string): AcpRuntimeEvent | null {\n const trimmed = line.trim();\n if (!trimmed) {\n return null;\n }\n const parsed = safeParseJsonObject(trimmed);\n if (!parsed) {\n return {\n type: \"status\",\n text: trimmed,\n };\n }\n\n const structured = resolveStructuredPromptPayload(parsed);\n const type = structured.type;\n const payload = structured.payload;\n const tag = structured.tag;\n\n switch (type) {\n case \"text\":\n return createTextDeltaEvent({\n content: asString(payload.content),\n stream: \"output\",\n tag,\n });\n case \"thought\":\n return createTextDeltaEvent({\n content: asString(payload.content),\n stream: \"thought\",\n tag,\n });\n case \"tool_call\":\n return createToolCallEvent({\n payload,\n tag: tag ?? \"tool_call\",\n });\n case \"tool_call_update\":\n return createToolCallEvent({\n payload,\n tag: tag ?? \"tool_call_update\",\n });\n case \"agent_message_chunk\":\n return resolveTextChunk({\n payload,\n stream: \"output\",\n tag: \"agent_message_chunk\",\n });\n case \"agent_thought_chunk\":\n return resolveTextChunk({\n payload,\n stream: \"thought\",\n tag: \"agent_thought_chunk\",\n });\n case \"usage_update\": {\n const used = asOptionalFiniteNumber(payload.used);\n const size = asOptionalFiniteNumber(payload.size);\n const text =\n used != null && size != null ? `usage updated: ${used}/${size}` : \"usage updated\";\n return {\n type: \"status\",\n text,\n tag: \"usage_update\",\n ...(used != null ? { used } : {}),\n ...(size != null ? { size } : {}),\n };\n }\n case \"available_commands_update\":\n case \"current_mode_update\":\n case \"config_option_update\":\n case \"session_info_update\":\n case \"plan\": {\n const text = resolveStatusTextForTag({\n tag: type as AcpSessionUpdateTag,\n payload,\n });\n if (!text) {\n return null;\n }\n return {\n type: \"status\",\n text,\n tag: type as AcpSessionUpdateTag,\n };\n }\n case \"client_operation\": {\n const method = asTrimmedString(payload.method) || \"operation\";\n const status = asTrimmedString(payload.status);\n const summary = asTrimmedString(payload.summary);\n const text = [method, status, summary].filter(Boolean).join(\" \");\n if (!text) {\n return null;\n }\n return { type: \"status\", text, ...(tag ? { tag } : {}) };\n }\n case \"update\": {\n const update = asTrimmedString(payload.update);\n if (!update) {\n return null;\n }\n return { type: \"status\", text: update, ...(tag ? { tag } : {}) };\n }\n case \"done\":\n return {\n type: \"done\",\n stopReason: asOptionalString(payload.stopReason),\n };\n case \"error\": {\n const message = asTrimmedString(payload.message) || \"acpx runtime error\";\n return {\n type: \"error\",\n message,\n code: asOptionalString(payload.code),\n retryable: asOptionalBoolean(payload.retryable),\n };\n }\n default:\n return null;\n }\n}\n","import path from \"node:path\";\nimport type { SessionRecord } from \"../../types.js\";\n\nexport function shouldReuseExistingRecord(\n record: Pick<SessionRecord, \"cwd\" | \"agentCommand\" | \"acpSessionId\" | \"acpx\">,\n params: {\n cwd: string;\n agentCommand: string;\n resumeSessionId?: string;\n },\n): boolean {\n if (record.acpx?.reset_on_next_ensure === true) {\n return false;\n }\n if (path.resolve(record.cwd) !== path.resolve(params.cwd)) {\n return false;\n }\n if (record.agentCommand !== params.agentCommand) {\n return false;\n }\n if (params.resumeSessionId && record.acpSessionId !== params.resumeSessionId) {\n return false;\n }\n return true;\n}\n","import { randomUUID } from \"node:crypto\";\nimport path from \"node:path\";\nimport { AcpClient } from \"../../acp/client.js\";\nimport { normalizeOutputError } from \"../../acp/error-normalization.js\";\nimport { extractAcpError, isAcpResourceNotFoundError } from \"../../acp/error-shapes.js\";\nimport { withTimeout } from \"../../async-control.js\";\nimport { textPrompt, type PromptInput } from \"../../prompt-content.js\";\nimport {\n cloneSessionAcpxState,\n cloneSessionConversation,\n createSessionConversation,\n recordClientOperation,\n recordPromptSubmission,\n recordSessionUpdate,\n trimConversationForRuntime,\n} from \"../../session/conversation-model.js\";\nimport { defaultSessionEventLog } from \"../../session/event-log.js\";\nimport { setDesiredModeId } from \"../../session/mode-preference.js\";\nimport type { ClientOperation, SessionRecord, SessionResumePolicy } from \"../../types.js\";\nimport type {\n AcpRuntimeEvent,\n AcpRuntimeHandle,\n AcpRuntimeOptions,\n AcpRuntimePromptMode,\n AcpRuntimeStatus,\n AcpRuntimeTurnAttachment,\n} from \"../public/contract.js\";\nimport { AcpRuntimeError } from \"../public/errors.js\";\nimport { parsePromptEventLine } from \"../public/events.js\";\nimport { withConnectedSession } from \"./connected-session.js\";\nimport {\n applyConversation,\n applyLifecycleSnapshotToRecord,\n reconcileAgentSessionId,\n} from \"./lifecycle.js\";\nimport { runPromptTurn } from \"./prompt-turn.js\";\nimport { connectAndLoadSession } from \"./reconnect.js\";\nimport { shouldReuseExistingRecord } from \"./reuse-policy.js\";\n\nexport type AcpRuntimeManagerDeps = {\n clientFactory?: (options: ConstructorParameters<typeof AcpClient>[0]) => AcpClient;\n};\n\ntype ActiveSessionController = {\n hasActivePrompt: () => boolean;\n requestCancelActivePrompt: () => Promise<boolean>;\n setSessionMode: (modeId: string) => Promise<void>;\n setSessionModel: (modelId: string) => Promise<void>;\n setSessionConfigOption: (\n configId: string,\n value: string,\n ) => ReturnType<AcpClient[\"setSessionConfigOption\"]>;\n};\n\ntype Deferred<T> = {\n promise: Promise<T>;\n resolve: (value: T) => void;\n reject: (error: unknown) => void;\n};\n\nfunction createDeferred<T>(): Deferred<T> {\n let resolve!: (value: T) => void;\n let reject!: (error: unknown) => void;\n const promise = new Promise<T>((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return { promise, resolve, reject };\n}\n\nclass AsyncEventQueue {\n private readonly items: AcpRuntimeEvent[] = [];\n private readonly waits: Deferred<AcpRuntimeEvent | null>[] = [];\n private closed = false;\n\n push(item: AcpRuntimeEvent): void {\n if (this.closed) {\n return;\n }\n const waiter = this.waits.shift();\n if (waiter) {\n waiter.resolve(item);\n return;\n }\n this.items.push(item);\n }\n\n close(): void {\n if (this.closed) {\n return;\n }\n this.closed = true;\n for (const waiter of this.waits.splice(0)) {\n waiter.resolve(null);\n }\n }\n\n async next(): Promise<AcpRuntimeEvent | null> {\n if (this.items.length > 0) {\n return this.items.shift() ?? null;\n }\n if (this.closed) {\n return null;\n }\n const waiter = createDeferred<AcpRuntimeEvent | null>();\n this.waits.push(waiter);\n return await waiter.promise;\n }\n\n async *iterate(): AsyncIterable<AcpRuntimeEvent> {\n while (true) {\n const next = await this.next();\n if (!next) {\n return;\n }\n yield next;\n }\n }\n}\n\nfunction isoNow(): string {\n return new Date().toISOString();\n}\n\nfunction isUnsupportedSessionCloseError(error: unknown): boolean {\n const acp = extractAcpError(error);\n if (!acp) {\n return false;\n }\n if (acp.code === -32601 || acp.code === -32602) {\n return true;\n }\n if (acp.code !== -32603 || !acp.data || typeof acp.data !== \"object\") {\n return false;\n }\n const details = (acp.data as { details?: unknown }).details;\n return typeof details === \"string\" && details.toLowerCase().includes(\"invalid params\");\n}\n\nfunction toPromptInput(\n text: string,\n attachments?: AcpRuntimeTurnAttachment[],\n): PromptInput | string {\n if (!attachments || attachments.length === 0) {\n return text;\n }\n const blocks: Array<\n { type: \"text\"; text: string } | { type: \"image\"; mimeType: string; data: string }\n > = [];\n if (text) {\n blocks.push({ type: \"text\", text });\n }\n for (const attachment of attachments) {\n if (!attachment.mediaType.startsWith(\"image/\")) {\n throw new AcpRuntimeError(\n \"ACP_TURN_FAILED\",\n `Unsupported ACP runtime attachment media type: ${attachment.mediaType}`,\n );\n }\n blocks.push({\n type: \"image\",\n mimeType: attachment.mediaType,\n data: attachment.data,\n });\n }\n return blocks.length > 0 ? blocks : textPrompt(text);\n}\n\nfunction createInitialRecord(params: {\n recordId: string;\n sessionName: string;\n sessionId: string;\n agentCommand: string;\n cwd: string;\n agentSessionId?: string;\n}): SessionRecord {\n const now = isoNow();\n return {\n schema: \"acpx.session.v1\",\n acpxRecordId: params.recordId,\n acpSessionId: params.sessionId,\n agentSessionId: params.agentSessionId,\n agentCommand: params.agentCommand,\n cwd: params.cwd,\n name: params.sessionName,\n createdAt: now,\n lastUsedAt: now,\n lastSeq: 0,\n eventLog: defaultSessionEventLog(params.recordId),\n closed: false,\n closedAt: undefined,\n ...createSessionConversation(now),\n acpx: {},\n };\n}\n\nfunction createRecordId(sessionKey: string, mode: \"persistent\" | \"oneshot\"): string {\n if (mode === \"persistent\") {\n return sessionKey;\n }\n return `${sessionKey}:oneshot:${randomUUID()}`;\n}\n\nfunction resumePolicyForSessionMode(mode: \"persistent\" | \"oneshot\"): SessionResumePolicy {\n return mode === \"persistent\" ? \"same-session-only\" : \"allow-new\";\n}\n\nfunction statusSummary(record: SessionRecord): string {\n const parts = [\n `session=${record.acpxRecordId}`,\n `backendSessionId=${record.acpSessionId}`,\n record.agentSessionId ? `agentSessionId=${record.agentSessionId}` : null,\n record.pid != null ? `pid=${record.pid}` : null,\n record.closed ? \"closed\" : \"open\",\n ].filter(Boolean);\n return parts.join(\" \");\n}\n\nexport class AcpRuntimeManager {\n private readonly activeControllers = new Map<string, ActiveSessionController>();\n private readonly pendingPersistentClients = new Map<string, AcpClient>();\n\n constructor(\n private readonly options: AcpRuntimeOptions,\n private readonly deps: AcpRuntimeManagerDeps = {},\n ) {}\n\n private createClient(options: ConstructorParameters<typeof AcpClient>[0]): AcpClient {\n return this.deps.clientFactory?.(options) ?? new AcpClient(options);\n }\n\n async ensureSession(input: {\n sessionKey: string;\n agent: string;\n mode: \"persistent\" | \"oneshot\";\n cwd?: string;\n resumeSessionId?: string;\n }): Promise<SessionRecord> {\n const cwd = path.resolve(input.cwd?.trim() || this.options.cwd);\n const agentCommand = this.options.agentRegistry.resolve(input.agent);\n const existing = await this.options.sessionStore.load(input.sessionKey);\n if (\n input.mode === \"persistent\" &&\n existing &&\n shouldReuseExistingRecord(existing, {\n cwd,\n agentCommand,\n resumeSessionId: input.resumeSessionId,\n })\n ) {\n existing.closed = false;\n existing.closedAt = undefined;\n await this.options.sessionStore.save(existing);\n return existing;\n }\n\n const client = this.createClient({\n agentCommand,\n cwd,\n mcpServers: [...(this.options.mcpServers ?? [])],\n permissionMode: this.options.permissionMode,\n nonInteractivePermissions: this.options.nonInteractivePermissions,\n verbose: this.options.verbose,\n });\n let keepClientOpen = false;\n\n try {\n await client.start();\n let sessionId: string;\n let agentSessionId: string | undefined;\n if (input.resumeSessionId) {\n const loaded = await client.loadSession(input.resumeSessionId, cwd);\n sessionId = input.resumeSessionId;\n agentSessionId = loaded.agentSessionId;\n } else {\n const created = await client.createSession(cwd);\n sessionId = created.sessionId;\n agentSessionId = created.agentSessionId;\n }\n const record = createInitialRecord({\n recordId: createRecordId(input.sessionKey, input.mode),\n sessionName: input.sessionKey,\n sessionId,\n agentCommand,\n cwd,\n agentSessionId,\n });\n record.protocolVersion = client.initializeResult?.protocolVersion;\n record.agentCapabilities = client.initializeResult?.agentCapabilities;\n applyLifecycleSnapshotToRecord(record, client.getAgentLifecycleSnapshot());\n await this.options.sessionStore.save(record);\n if (input.mode === \"persistent\") {\n const previousClient = this.pendingPersistentClients.get(record.acpxRecordId);\n this.pendingPersistentClients.set(record.acpxRecordId, client);\n keepClientOpen = true;\n await previousClient?.close().catch(() => {});\n }\n return record;\n } finally {\n if (!keepClientOpen) {\n await client.close();\n }\n }\n }\n\n async *runTurn(input: {\n handle: AcpRuntimeHandle;\n text: string;\n attachments?: AcpRuntimeTurnAttachment[];\n mode: AcpRuntimePromptMode;\n sessionMode: \"persistent\" | \"oneshot\";\n requestId: string;\n timeoutMs?: number;\n signal?: AbortSignal;\n }): AsyncIterable<AcpRuntimeEvent> {\n const record = await this.requireRecord(input.handle.acpxRecordId ?? input.handle.sessionKey);\n const conversation = cloneSessionConversation(record);\n let acpxState = cloneSessionAcpxState(record.acpx);\n const promptInput = toPromptInput(input.text, input.attachments);\n const promptMessageId = recordPromptSubmission(conversation, promptInput, isoNow());\n trimConversationForRuntime(conversation);\n\n const queue = new AsyncEventQueue();\n let pendingClient = this.pendingPersistentClients.get(record.acpxRecordId);\n if (pendingClient) {\n this.pendingPersistentClients.delete(record.acpxRecordId);\n if (!pendingClient.hasReusableSession(record.acpSessionId)) {\n await pendingClient.close().catch(() => {});\n pendingClient = undefined;\n }\n }\n const client =\n pendingClient ??\n this.createClient({\n agentCommand: record.agentCommand,\n cwd: record.cwd,\n mcpServers: [...(this.options.mcpServers ?? [])],\n permissionMode: this.options.permissionMode,\n nonInteractivePermissions: this.options.nonInteractivePermissions,\n verbose: this.options.verbose,\n });\n let activeSessionId = record.acpSessionId;\n let sawDone = false;\n let pendingCancel = false;\n let turnActive = true;\n const sessionReady = createDeferred<void>();\n void sessionReady.promise.catch(() => {});\n\n const applyPendingCancel = async (): Promise<boolean> => {\n if (!pendingCancel || !client.hasActivePrompt()) {\n return false;\n }\n const cancelled = await client.requestCancelActivePrompt();\n if (cancelled) {\n pendingCancel = false;\n }\n return cancelled;\n };\n\n const activeController: ActiveSessionController = {\n hasActivePrompt: () => client.hasActivePrompt(),\n requestCancelActivePrompt: async () => {\n if (client.hasActivePrompt()) {\n return await client.requestCancelActivePrompt();\n }\n if (!turnActive) {\n return false;\n }\n pendingCancel = true;\n return true;\n },\n setSessionMode: async (modeId: string) => {\n if (!client.hasActivePrompt()) {\n await sessionReady.promise;\n }\n await client.setSessionMode(activeSessionId, modeId);\n },\n setSessionModel: async (modelId: string) => {\n if (!client.hasActivePrompt()) {\n await sessionReady.promise;\n }\n await client.setSessionModel(activeSessionId, modelId);\n },\n setSessionConfigOption: async (configId: string, value: string) => {\n if (!client.hasActivePrompt()) {\n await sessionReady.promise;\n }\n return await client.setSessionConfigOption(activeSessionId, configId, value);\n },\n };\n\n const emitParsed = (payload: Record<string, unknown>): void => {\n const parsed = parsePromptEventLine(JSON.stringify(payload));\n if (!parsed) {\n return;\n }\n if (parsed.type === \"done\") {\n sawDone = true;\n }\n queue.push(parsed);\n };\n\n const abortHandler = () => {\n void activeController.requestCancelActivePrompt();\n };\n if (input.signal) {\n if (input.signal.aborted) {\n queue.close();\n return;\n }\n input.signal.addEventListener(\"abort\", abortHandler, { once: true });\n }\n\n this.activeControllers.set(record.acpxRecordId, activeController);\n\n void (async () => {\n try {\n client.setEventHandlers({\n onSessionUpdate: (notification) => {\n acpxState = recordSessionUpdate(conversation, acpxState, notification);\n trimConversationForRuntime(conversation);\n emitParsed({\n jsonrpc: \"2.0\",\n method: \"session/update\",\n params: notification,\n });\n },\n onClientOperation: (operation: ClientOperation) => {\n acpxState = recordClientOperation(conversation, acpxState, operation);\n trimConversationForRuntime(conversation);\n emitParsed({\n type: \"client_operation\",\n ...operation,\n });\n },\n });\n\n const { sessionId, resumed, loadError } = pendingClient\n ? {\n sessionId: record.acpSessionId,\n resumed: false,\n loadError: undefined,\n }\n : await connectAndLoadSession({\n client,\n record,\n resumePolicy: resumePolicyForSessionMode(input.sessionMode),\n timeoutMs: this.options.timeoutMs,\n activeController,\n onClientAvailable: (controller) => {\n this.activeControllers.set(record.acpxRecordId, controller);\n },\n onConnectedRecord: (connectedRecord) => {\n connectedRecord.lastPromptAt = isoNow();\n },\n onSessionIdResolved: (sessionIdValue) => {\n activeSessionId = sessionIdValue;\n },\n });\n sessionReady.resolve();\n\n record.lastRequestId = input.requestId;\n record.lastPromptAt = isoNow();\n record.closed = false;\n record.closedAt = undefined;\n record.lastUsedAt = isoNow();\n if (resumed || loadError) {\n emitParsed({\n type: \"status\",\n text: loadError ? `load fallback: ${loadError}` : \"session resumed\",\n });\n }\n\n if (pendingCancel || input.signal?.aborted) {\n pendingCancel = false;\n if (!sawDone) {\n queue.push({\n type: \"done\",\n stopReason: \"cancelled\",\n });\n }\n return;\n }\n\n await applyPendingCancel();\n const response = await runPromptTurn({\n client,\n sessionId,\n prompt: promptInput,\n timeoutMs: input.timeoutMs ?? this.options.timeoutMs,\n conversation,\n promptMessageId,\n });\n\n record.acpSessionId = activeSessionId;\n reconcileAgentSessionId(record, record.agentSessionId);\n record.protocolVersion = client.initializeResult?.protocolVersion;\n record.agentCapabilities = client.initializeResult?.agentCapabilities;\n record.acpx = acpxState;\n applyConversation(record, conversation);\n applyLifecycleSnapshotToRecord(record, client.getAgentLifecycleSnapshot());\n await this.options.sessionStore.save(record);\n\n if (!sawDone) {\n queue.push({\n type: \"done\",\n stopReason: response.stopReason,\n });\n }\n } catch (error) {\n sessionReady.reject(error);\n const normalized = normalizeOutputError(error, { origin: \"runtime\" });\n queue.push({\n type: \"error\",\n message: normalized.message,\n code: normalized.code,\n retryable: normalized.retryable,\n });\n } finally {\n turnActive = false;\n if (input.signal) {\n input.signal.removeEventListener(\"abort\", abortHandler);\n }\n this.activeControllers.delete(record.acpxRecordId);\n client.clearEventHandlers();\n applyLifecycleSnapshotToRecord(record, client.getAgentLifecycleSnapshot());\n record.acpx = acpxState;\n applyConversation(record, conversation);\n record.lastUsedAt = isoNow();\n await this.options.sessionStore.save(record).catch(() => {});\n await client.close().catch(() => {});\n queue.close();\n }\n })();\n\n yield* queue.iterate();\n }\n\n async getStatus(handle: AcpRuntimeHandle): Promise<AcpRuntimeStatus> {\n const record = await this.requireRecord(handle.acpxRecordId ?? handle.sessionKey);\n return {\n summary: statusSummary(record),\n acpxRecordId: record.acpxRecordId,\n backendSessionId: record.acpSessionId,\n agentSessionId: record.agentSessionId,\n details: {\n cwd: record.cwd,\n lastUsedAt: record.lastUsedAt,\n closed: record.closed === true,\n },\n };\n }\n\n async setMode(\n handle: AcpRuntimeHandle,\n mode: string,\n sessionMode: \"persistent\" | \"oneshot\" = \"persistent\",\n ): Promise<void> {\n const record = await this.requireRecord(handle.acpxRecordId ?? handle.sessionKey);\n const controller = this.activeControllers.get(record.acpxRecordId);\n let targetRecord = record;\n if (controller) {\n await controller.setSessionMode(mode);\n } else {\n const result = await withConnectedSession({\n sessionRecordId: record.acpxRecordId,\n loadRecord: async (sessionRecordId) => await this.requireRecord(sessionRecordId),\n saveRecord: async (connectedRecord) =>\n await this.options.sessionStore.save(connectedRecord),\n createClient: (options) => this.createClient(options),\n mcpServers: [...(this.options.mcpServers ?? [])],\n permissionMode: this.options.permissionMode,\n nonInteractivePermissions: this.options.nonInteractivePermissions,\n verbose: this.options.verbose,\n timeoutMs: this.options.timeoutMs,\n resumePolicy: resumePolicyForSessionMode(sessionMode),\n run: async ({ client, sessionId }) => {\n await client.setSessionMode(sessionId, mode);\n },\n });\n targetRecord = result.record;\n }\n setDesiredModeId(targetRecord, mode);\n await this.options.sessionStore.save(targetRecord);\n }\n\n async setConfigOption(\n handle: AcpRuntimeHandle,\n key: string,\n value: string,\n sessionMode: \"persistent\" | \"oneshot\" = \"persistent\",\n ): Promise<void> {\n const record = await this.requireRecord(handle.acpxRecordId ?? handle.sessionKey);\n const controller = this.activeControllers.get(record.acpxRecordId);\n let targetRecord = record;\n if (controller) {\n await controller.setSessionConfigOption(key, value);\n } else {\n const result = await withConnectedSession({\n sessionRecordId: record.acpxRecordId,\n loadRecord: async (sessionRecordId) => await this.requireRecord(sessionRecordId),\n saveRecord: async (connectedRecord) =>\n await this.options.sessionStore.save(connectedRecord),\n createClient: (options) => this.createClient(options),\n mcpServers: [...(this.options.mcpServers ?? [])],\n permissionMode: this.options.permissionMode,\n nonInteractivePermissions: this.options.nonInteractivePermissions,\n verbose: this.options.verbose,\n timeoutMs: this.options.timeoutMs,\n resumePolicy: resumePolicyForSessionMode(sessionMode),\n run: async ({ client, sessionId, record: connectedRecord }) => {\n await client.setSessionConfigOption(sessionId, key, value);\n if (key === \"mode\") {\n setDesiredModeId(connectedRecord, value);\n }\n },\n });\n targetRecord = result.record;\n }\n if (key === \"mode\") {\n setDesiredModeId(targetRecord, value);\n }\n await this.options.sessionStore.save(targetRecord);\n }\n\n async cancel(handle: AcpRuntimeHandle): Promise<void> {\n const controller = this.activeControllers.get(handle.acpxRecordId ?? handle.sessionKey);\n await controller?.requestCancelActivePrompt();\n }\n\n async close(\n handle: AcpRuntimeHandle,\n options: { discardPersistentState?: boolean } = {},\n ): Promise<void> {\n const record = await this.requireRecord(handle.acpxRecordId ?? handle.sessionKey);\n await this.cancel(handle);\n if (options.discardPersistentState) {\n await this.closeBackendSession(record);\n record.acpx = {\n ...record.acpx,\n reset_on_next_ensure: true,\n };\n }\n record.closed = true;\n record.closedAt = isoNow();\n await this.options.sessionStore.save(record);\n }\n\n private async closeBackendSession(record: SessionRecord): Promise<void> {\n const pendingClient = this.pendingPersistentClients.get(record.acpxRecordId);\n if (pendingClient) {\n this.pendingPersistentClients.delete(record.acpxRecordId);\n }\n const reusablePendingClient =\n pendingClient?.hasReusableSession(record.acpSessionId) === true ? pendingClient : undefined;\n if (pendingClient && !reusablePendingClient) {\n await pendingClient.close().catch(() => {});\n }\n\n const client =\n reusablePendingClient ??\n this.createClient({\n agentCommand: record.agentCommand,\n cwd: record.cwd,\n mcpServers: [...(this.options.mcpServers ?? [])],\n permissionMode: this.options.permissionMode,\n nonInteractivePermissions: this.options.nonInteractivePermissions,\n verbose: this.options.verbose,\n });\n\n try {\n if (!reusablePendingClient) {\n await withTimeout(client.start(), this.options.timeoutMs);\n }\n if (!client.supportsCloseSession()) {\n throw new AcpRuntimeError(\n \"ACP_BACKEND_UNSUPPORTED_CONTROL\",\n `Agent does not support session/close for ${record.acpxRecordId}.`,\n );\n }\n await withTimeout(client.closeSession(record.acpSessionId), this.options.timeoutMs);\n } catch (error) {\n if (isUnsupportedSessionCloseError(error)) {\n throw new AcpRuntimeError(\n \"ACP_BACKEND_UNSUPPORTED_CONTROL\",\n `Agent does not support session/close for ${record.acpxRecordId}.`,\n { cause: error },\n );\n }\n if (isAcpResourceNotFoundError(error)) {\n return;\n }\n throw error;\n } finally {\n await client.close().catch(() => {});\n }\n }\n\n private async requireRecord(sessionId: string): Promise<SessionRecord> {\n const record = await this.options.sessionStore.load(sessionId);\n if (!record) {\n throw new Error(`ACP session not found: ${sessionId}`);\n }\n return record;\n }\n}\n","import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { assertPersistedKeyPolicy } from \"../../persisted-key-policy.js\";\nimport { parseSessionRecord } from \"../../session/persistence/parse.js\";\nimport { serializeSessionRecordForDisk } from \"../../session/persistence/serialize.js\";\nimport type { AcpFileSessionStoreOptions, AcpSessionRecord, AcpSessionStore } from \"./contract.js\";\n\nfunction safeSessionId(sessionId: string): string {\n return encodeURIComponent(sessionId);\n}\n\nclass FileSessionStore implements AcpSessionStore {\n constructor(private readonly stateDir: string) {}\n\n private get sessionDir(): string {\n return path.join(this.stateDir, \"sessions\");\n }\n\n private filePath(sessionId: string): string {\n return path.join(this.sessionDir, `${safeSessionId(sessionId)}.json`);\n }\n\n private async ensureDir(): Promise<void> {\n await fs.mkdir(this.sessionDir, { recursive: true });\n }\n\n async load(sessionId: string): Promise<AcpSessionRecord | undefined> {\n await this.ensureDir();\n try {\n const payload = await fs.readFile(this.filePath(sessionId), \"utf8\");\n return parseSessionRecord(JSON.parse(payload)) ?? undefined;\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n return undefined;\n }\n throw error;\n }\n }\n\n async save(record: AcpSessionRecord): Promise<void> {\n await this.ensureDir();\n const persisted = serializeSessionRecordForDisk(record);\n assertPersistedKeyPolicy(persisted);\n\n const file = this.filePath(record.acpxRecordId);\n const tempFile = `${file}.${process.pid}.${Date.now()}.tmp`;\n const payload = JSON.stringify(persisted, null, 2);\n await fs.writeFile(tempFile, `${payload}\\n`, \"utf8\");\n await fs.rename(tempFile, file);\n }\n}\n\nexport function createFileSessionStore(options: AcpFileSessionStoreOptions): AcpSessionStore {\n return new FileSessionStore(path.resolve(options.stateDir));\n}\n","import type { AcpRuntimeHandle } from \"./contract.js\";\nimport type { AcpxHandleState } from \"./shared.js\";\nimport { asOptionalString } from \"./shared.js\";\n\nconst ACPX_RUNTIME_HANDLE_PREFIX = \"acpx:v2:\";\n\nexport function encodeAcpxRuntimeHandleState(state: AcpxHandleState): string {\n const payload = Buffer.from(JSON.stringify(state), \"utf8\").toString(\"base64url\");\n return `${ACPX_RUNTIME_HANDLE_PREFIX}${payload}`;\n}\n\nexport function decodeAcpxRuntimeHandleState(runtimeSessionName: string): AcpxHandleState | null {\n const trimmed = runtimeSessionName.trim();\n if (!trimmed.startsWith(ACPX_RUNTIME_HANDLE_PREFIX)) {\n return null;\n }\n try {\n const raw = Buffer.from(trimmed.slice(ACPX_RUNTIME_HANDLE_PREFIX.length), \"base64url\").toString(\n \"utf8\",\n );\n const parsed = JSON.parse(raw) as Record<string, unknown>;\n const name = asOptionalString(parsed.name);\n const agent = asOptionalString(parsed.agent);\n const cwd = asOptionalString(parsed.cwd);\n const mode = asOptionalString(parsed.mode);\n if (!name || !agent || !cwd || (mode !== \"persistent\" && mode !== \"oneshot\")) {\n return null;\n }\n return {\n name,\n agent,\n cwd,\n mode,\n acpxRecordId: asOptionalString(parsed.acpxRecordId),\n backendSessionId: asOptionalString(parsed.backendSessionId),\n agentSessionId: asOptionalString(parsed.agentSessionId),\n };\n } catch {\n return null;\n }\n}\n\nexport function writeHandleState(handle: AcpRuntimeHandle, state: AcpxHandleState): void {\n handle.runtimeSessionName = encodeAcpxRuntimeHandleState(state);\n handle.cwd = state.cwd;\n handle.acpxRecordId = state.acpxRecordId;\n handle.backendSessionId = state.backendSessionId;\n handle.agentSessionId = state.agentSessionId;\n}\n","import { AcpClient } from \"../../acp/client.js\";\nimport { DEFAULT_AGENT_NAME } from \"../../agent-registry.js\";\nimport type { AcpRuntimeOptions } from \"./contract.js\";\n\nexport type RuntimeHealthReport = {\n ok: boolean;\n message: string;\n details?: string[];\n};\n\nexport type ProbeRuntimeDeps = {\n clientFactory?: (options: ConstructorParameters<typeof AcpClient>[0]) => AcpClient;\n};\n\nexport async function probeRuntime(\n options: AcpRuntimeOptions,\n deps: ProbeRuntimeDeps = {},\n): Promise<RuntimeHealthReport> {\n const agentName = options.probeAgent?.trim() || DEFAULT_AGENT_NAME;\n const agentCommand = options.agentRegistry.resolve(agentName);\n const client =\n deps.clientFactory?.({\n agentCommand,\n cwd: options.cwd,\n mcpServers: [...(options.mcpServers ?? [])],\n permissionMode: options.permissionMode,\n nonInteractivePermissions: options.nonInteractivePermissions,\n verbose: options.verbose,\n }) ??\n new AcpClient({\n agentCommand,\n cwd: options.cwd,\n mcpServers: [...(options.mcpServers ?? [])],\n permissionMode: options.permissionMode,\n nonInteractivePermissions: options.nonInteractivePermissions,\n verbose: options.verbose,\n });\n\n try {\n await client.start();\n return {\n ok: true,\n message: \"embedded ACP runtime ready\",\n details: [\n `agent=${agentName}`,\n `command=${agentCommand}`,\n `cwd=${options.cwd}`,\n ...(client.initializeResult?.protocolVersion\n ? [`protocolVersion=${client.initializeResult.protocolVersion}`]\n : []),\n ],\n };\n } catch (error) {\n return {\n ok: false,\n message: \"embedded ACP runtime probe failed\",\n details: [\n `agent=${agentName}`,\n `command=${agentCommand}`,\n `cwd=${options.cwd}`,\n error instanceof Error ? error.message : String(error),\n ],\n };\n } finally {\n await client.close().catch(() => {});\n }\n}\n","import { DEFAULT_AGENT_NAME, listBuiltInAgents, resolveAgentCommand } from \"./agent-registry.js\";\nimport { AcpRuntimeManager } from \"./runtime/engine/manager.js\";\nimport type {\n AcpAgentRegistry,\n AcpRuntime,\n AcpRuntimeCapabilities,\n AcpRuntimeDoctorReport,\n AcpRuntimeEnsureInput,\n AcpRuntimeHandle,\n AcpRuntimeOptions,\n AcpRuntimeStatus,\n AcpSessionStore,\n} from \"./runtime/public/contract.js\";\nimport { AcpRuntimeError } from \"./runtime/public/errors.js\";\nimport { createFileSessionStore } from \"./runtime/public/file-session-store.js\";\nimport { decodeAcpxRuntimeHandleState, writeHandleState } from \"./runtime/public/handle-state.js\";\nimport { probeRuntime } from \"./runtime/public/probe.js\";\nimport { deriveAgentFromSessionKey, type AcpxHandleState } from \"./runtime/public/shared.js\";\n\nexport { DEFAULT_AGENT_NAME, createFileSessionStore };\nexport { AcpRuntimeError, isAcpRuntimeError } from \"./runtime/public/errors.js\";\nexport type { AcpRuntimeErrorCode } from \"./runtime/public/errors.js\";\nexport {\n decodeAcpxRuntimeHandleState,\n encodeAcpxRuntimeHandleState,\n} from \"./runtime/public/handle-state.js\";\nexport type {\n AcpAgentRegistry,\n AcpFileSessionStoreOptions,\n AcpRuntime,\n AcpRuntimeCapabilities,\n AcpRuntimeDoctorReport,\n AcpRuntimeEnsureInput,\n AcpRuntimeEvent,\n AcpRuntimeHandle,\n AcpRuntimeOptions,\n AcpRuntimePromptMode,\n AcpRuntimeSessionMode,\n AcpRuntimeStatus,\n AcpRuntimeTurnAttachment,\n AcpRuntimeTurnInput,\n AcpSessionRecord,\n AcpSessionStore,\n AcpSessionUpdateTag,\n} from \"./runtime/public/contract.js\";\n\nexport const ACPX_BACKEND_ID = \"acpx\";\n\nconst ACPX_CAPABILITIES: AcpRuntimeCapabilities = {\n controls: [\"session/set_mode\", \"session/set_config_option\", \"session/status\"],\n};\n\ntype AcpxRuntimeLike = AcpRuntime & {\n probeAvailability(): Promise<void>;\n isHealthy(): boolean;\n doctor(): Promise<AcpRuntimeDoctorReport>;\n};\n\nexport function createAgentRegistry(params?: {\n overrides?: Record<string, string>;\n}): AcpAgentRegistry {\n return {\n resolve(agentName: string) {\n return resolveAgentCommand(agentName, params?.overrides);\n },\n list() {\n return listBuiltInAgents(params?.overrides);\n },\n };\n}\n\nexport class AcpxRuntime implements AcpxRuntimeLike {\n private healthy = false;\n private manager: AcpRuntimeManager | null = null;\n private managerPromise: Promise<AcpRuntimeManager> | null = null;\n\n constructor(\n private readonly options: AcpRuntimeOptions,\n private readonly testOptions?: {\n managerFactory?: (options: AcpRuntimeOptions) => AcpRuntimeManager;\n probeRunner?: (options: AcpRuntimeOptions) => Promise<{\n ok: boolean;\n message: string;\n details?: string[];\n }>;\n },\n ) {}\n\n isHealthy(): boolean {\n return this.healthy;\n }\n\n async probeAvailability(): Promise<void> {\n const report = await this.runProbe();\n this.healthy = report.ok;\n }\n\n async doctor(): Promise<AcpRuntimeDoctorReport> {\n const report = await this.runProbe();\n this.healthy = report.ok;\n return {\n ok: report.ok,\n code: report.ok ? undefined : \"ACP_BACKEND_UNAVAILABLE\",\n message: report.message,\n details: report.details,\n };\n }\n\n async ensureSession(input: AcpRuntimeEnsureInput): Promise<AcpRuntimeHandle> {\n const sessionName = input.sessionKey.trim();\n if (!sessionName) {\n throw new AcpRuntimeError(\"ACP_SESSION_INIT_FAILED\", \"ACP session key is required.\");\n }\n const agent = input.agent.trim();\n if (!agent) {\n throw new AcpRuntimeError(\"ACP_SESSION_INIT_FAILED\", \"ACP agent id is required.\");\n }\n\n const manager = await this.getManager();\n const record = await manager.ensureSession({\n sessionKey: sessionName,\n agent,\n mode: input.mode,\n cwd: input.cwd ?? this.options.cwd,\n resumeSessionId: input.resumeSessionId,\n });\n\n const handle: AcpRuntimeHandle = {\n sessionKey: input.sessionKey,\n backend: ACPX_BACKEND_ID,\n runtimeSessionName: \"\",\n cwd: record.cwd,\n acpxRecordId: record.acpxRecordId,\n backendSessionId: record.acpSessionId,\n agentSessionId: record.agentSessionId,\n };\n writeHandleState(handle, {\n name: sessionName,\n agent,\n cwd: record.cwd,\n mode: input.mode,\n acpxRecordId: record.acpxRecordId,\n backendSessionId: record.acpSessionId,\n agentSessionId: record.agentSessionId,\n });\n return handle;\n }\n\n async *runTurn(\n input: import(\"./runtime/public/contract.js\").AcpRuntimeTurnInput,\n ): AsyncIterable<import(\"./runtime/public/contract.js\").AcpRuntimeEvent> {\n const state = this.resolveHandleState(input.handle);\n const manager = await this.getManager();\n yield* manager.runTurn({\n handle: {\n ...input.handle,\n acpxRecordId: state.acpxRecordId ?? input.handle.acpxRecordId ?? input.handle.sessionKey,\n },\n text: input.text,\n attachments: input.attachments,\n mode: input.mode,\n sessionMode: state.mode,\n requestId: input.requestId,\n timeoutMs: input.timeoutMs,\n signal: input.signal,\n });\n }\n\n getCapabilities(): AcpRuntimeCapabilities {\n return ACPX_CAPABILITIES;\n }\n\n async getStatus(input: {\n handle: AcpRuntimeHandle;\n signal?: AbortSignal;\n }): Promise<AcpRuntimeStatus> {\n const state = this.resolveHandleState(input.handle);\n const manager = await this.getManager();\n return await manager.getStatus({\n ...input.handle,\n acpxRecordId: state.acpxRecordId ?? input.handle.acpxRecordId ?? input.handle.sessionKey,\n });\n }\n\n async setMode(input: { handle: AcpRuntimeHandle; mode: string }): Promise<void> {\n const state = this.resolveHandleState(input.handle);\n const manager = await this.getManager();\n await manager.setMode(\n {\n ...input.handle,\n acpxRecordId: state.acpxRecordId ?? input.handle.acpxRecordId ?? input.handle.sessionKey,\n },\n input.mode,\n state.mode,\n );\n }\n\n async setConfigOption(input: {\n handle: AcpRuntimeHandle;\n key: string;\n value: string;\n }): Promise<void> {\n const state = this.resolveHandleState(input.handle);\n const manager = await this.getManager();\n await manager.setConfigOption(\n {\n ...input.handle,\n acpxRecordId: state.acpxRecordId ?? input.handle.acpxRecordId ?? input.handle.sessionKey,\n },\n input.key,\n input.value,\n state.mode,\n );\n }\n\n async cancel(input: { handle: AcpRuntimeHandle; reason?: string }): Promise<void> {\n const state = this.resolveHandleState(input.handle);\n const manager = await this.getManager();\n await manager.cancel({\n ...input.handle,\n acpxRecordId: state.acpxRecordId ?? input.handle.acpxRecordId ?? input.handle.sessionKey,\n });\n }\n\n async close(input: {\n handle: AcpRuntimeHandle;\n reason: string;\n discardPersistentState?: boolean;\n }): Promise<void> {\n const state = this.resolveHandleState(input.handle);\n const manager = await this.getManager();\n await manager.close(\n {\n ...input.handle,\n acpxRecordId: state.acpxRecordId ?? input.handle.acpxRecordId ?? input.handle.sessionKey,\n },\n {\n discardPersistentState: input.discardPersistentState,\n },\n );\n }\n\n private async getManager(): Promise<AcpRuntimeManager> {\n if (this.manager) {\n return this.manager;\n }\n if (!this.managerPromise) {\n this.managerPromise = Promise.resolve(\n this.testOptions?.managerFactory?.(this.options) ?? new AcpRuntimeManager(this.options),\n ).then((manager) => {\n this.manager = manager;\n return manager;\n });\n }\n return await this.managerPromise;\n }\n\n private async runProbe() {\n return await (this.testOptions?.probeRunner?.(this.options) ?? probeRuntime(this.options));\n }\n\n private resolveHandleState(handle: AcpRuntimeHandle): AcpxHandleState {\n const decoded = decodeAcpxRuntimeHandleState(handle.runtimeSessionName);\n if (decoded) {\n return {\n ...decoded,\n acpxRecordId: decoded.acpxRecordId ?? handle.acpxRecordId,\n backendSessionId: decoded.backendSessionId ?? handle.backendSessionId,\n agentSessionId: decoded.agentSessionId ?? handle.agentSessionId,\n };\n }\n\n const runtimeSessionName = handle.runtimeSessionName.trim();\n if (!runtimeSessionName) {\n throw new AcpRuntimeError(\n \"ACP_SESSION_INIT_FAILED\",\n \"Invalid embedded ACP runtime handle: runtimeSessionName is missing.\",\n );\n }\n\n return {\n name: runtimeSessionName,\n agent: deriveAgentFromSessionKey(handle.sessionKey, DEFAULT_AGENT_NAME),\n cwd: handle.cwd ?? this.options.cwd,\n mode: \"persistent\",\n acpxRecordId: handle.acpxRecordId,\n backendSessionId: handle.backendSessionId,\n agentSessionId: handle.agentSessionId,\n };\n }\n}\n\nexport function createAcpRuntime(options: AcpRuntimeOptions): AcpxRuntime {\n return new AcpxRuntime(options);\n}\n\nexport function createRuntimeStore(options: { stateDir: string }): AcpSessionStore {\n return createFileSessionStore(options);\n}\n"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { t as __exportAll } from "./rolldown-runtime-CiIaOW0V.js";
|
|
2
2
|
import { V as QueueConnectionError, b as isRetryablePromptError, c as startPerfTimer, g as textPrompt, h as promptToDisplayText, i as measurePerf, n as getPerfMetricsSnapshot, o as resetPerfMetrics, r as incrementPerfCounter, s as setPerfGauge, t as formatPerfMetric, u as normalizeRuntimeSessionId, v as formatErrorMessage, x as normalizeOutputError } from "./perf-metrics-D0um6IR6.js";
|
|
3
|
-
import { A as resolveSessionRecord, C as findGitRepositoryRoot, D as listSessions, E as isoNow, F as sessionBaseDir, H as TimeoutError, I as sessionEventActivePath, L as sessionEventLockPath, O as listSessionsForAgent, P as defaultSessionEventLog, R as sessionEventSegmentPath, S as absolutePath, T as findSessionByDirectoryWalk, U as withInterrupt, V as InterruptedError, W as withTimeout, _ as recordSessionUpdate, a as applyConversation, c as setCurrentModelId, d as syncAdvertisedModelState, f as cloneSessionAcpxState, g as recordPromptSubmission, h as recordClientOperation, i as connectAndLoadSession, j as writeSessionRecord, k as normalizeName, l as setDesiredModeId, m as createSessionConversation, n as withConnectedSession, o as applyLifecycleSnapshotToRecord, p as cloneSessionConversation, r as sessionOptionsFromRecord, t as runPromptTurn, u as setDesiredModelId, v as trimConversationForRuntime, w as findSession, y as AcpClient } from "./prompt-turn-
|
|
3
|
+
import { A as resolveSessionRecord, C as findGitRepositoryRoot, D as listSessions, E as isoNow, F as sessionBaseDir, H as TimeoutError, I as sessionEventActivePath, L as sessionEventLockPath, O as listSessionsForAgent, P as defaultSessionEventLog, R as sessionEventSegmentPath, S as absolutePath, T as findSessionByDirectoryWalk, U as withInterrupt, V as InterruptedError, W as withTimeout, _ as recordSessionUpdate, a as applyConversation, c as setCurrentModelId, d as syncAdvertisedModelState, f as cloneSessionAcpxState, g as recordPromptSubmission, h as recordClientOperation, i as connectAndLoadSession, j as writeSessionRecord, k as normalizeName, l as setDesiredModeId, m as createSessionConversation, n as withConnectedSession, o as applyLifecycleSnapshotToRecord, p as cloneSessionConversation, r as sessionOptionsFromRecord, t as runPromptTurn, u as setDesiredModelId, v as trimConversationForRuntime, w as findSession, y as AcpClient } from "./prompt-turn-CXMtXBl-.js";
|
|
4
4
|
import { n as isAcpJsonRpcMessage } from "./jsonrpc-DSxh2w5R.js";
|
|
5
5
|
import { a as trySubmitToRunningOwner, c as isProcessAlive, d as terminateProcess, f as terminateQueueOwnerForSession, i as trySetModelOnRunningOwner, l as refreshQueueOwnerLease, m as waitMs, n as trySetConfigOptionOnRunningOwner, o as SessionQueueOwner, p as tryAcquireQueueOwnerLease, r as trySetModeOnRunningOwner, t as tryCancelOnRunningOwner, u as releaseQueueOwnerLease } from "./ipc-BM335WFg.js";
|
|
6
6
|
import fs, { realpathSync } from "node:fs";
|
|
@@ -1485,4 +1485,4 @@ var session_exports = /* @__PURE__ */ __exportAll({
|
|
|
1485
1485
|
//#endregion
|
|
1486
1486
|
export { buildQueueOwnerArgOverride as a, createSessionWithClient as c, sendSessionDirect as i, cancelSessionPrompt as l, runSessionQueueOwner as n, flushPerfMetricsCapture as o, runOnce as r, installPerfMetricsCapture as s, session_exports as t, DEFAULT_QUEUE_OWNER_TTL_MS as u };
|
|
1487
1487
|
|
|
1488
|
-
//# sourceMappingURL=session-
|
|
1488
|
+
//# sourceMappingURL=session-BtwAKtJ3.js.map
|