@moxt-ai/mobius 0.0.306 → 0.0.307

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. package/dist/acp/adapter/adapter-registry.d.ts +10 -0
  2. package/dist/acp/adapter/adapter-registry.d.ts.map +1 -0
  3. package/dist/acp/adapter/adapter-registry.js +24 -0
  4. package/dist/acp/adapter/adapter-registry.js.map +1 -0
  5. package/dist/acp/adapter/agent-initialization.d.ts +27 -0
  6. package/dist/acp/adapter/agent-initialization.d.ts.map +1 -0
  7. package/dist/acp/adapter/agent-initialization.js +55 -0
  8. package/dist/acp/adapter/agent-initialization.js.map +1 -0
  9. package/dist/acp/adapter/claude/adapter.d.ts +32 -2
  10. package/dist/acp/adapter/claude/adapter.d.ts.map +1 -1
  11. package/dist/acp/adapter/claude/adapter.js +13 -1
  12. package/dist/acp/adapter/claude/adapter.js.map +1 -1
  13. package/dist/acp/adapter/codex/adapter.d.ts +32 -2
  14. package/dist/acp/adapter/codex/adapter.d.ts.map +1 -1
  15. package/dist/acp/adapter/codex/adapter.js +25 -3
  16. package/dist/acp/adapter/codex/adapter.js.map +1 -1
  17. package/dist/acp/adapter/pi/adapter.d.ts +32 -2
  18. package/dist/acp/adapter/pi/adapter.d.ts.map +1 -1
  19. package/dist/acp/adapter/pi/adapter.js +13 -1
  20. package/dist/acp/adapter/pi/adapter.js.map +1 -1
  21. package/dist/acp/adapter/preview-event-cache.d.ts +8 -0
  22. package/dist/acp/adapter/preview-event-cache.d.ts.map +1 -0
  23. package/dist/acp/adapter/preview-event-cache.js +37 -0
  24. package/dist/acp/adapter/preview-event-cache.js.map +1 -0
  25. package/dist/acp/adapter/query-processes.d.ts +18 -0
  26. package/dist/acp/adapter/query-processes.d.ts.map +1 -0
  27. package/dist/{session/process/agent-query-processes.js → acp/adapter/query-processes.js} +28 -32
  28. package/dist/acp/adapter/query-processes.js.map +1 -0
  29. package/dist/acp/adapter/query-session.d.ts +16 -0
  30. package/dist/acp/adapter/query-session.d.ts.map +1 -0
  31. package/dist/acp/adapter/query-session.js +89 -0
  32. package/dist/acp/adapter/query-session.js.map +1 -0
  33. package/dist/acp/adapter/registry.d.ts +1 -1
  34. package/dist/acp/adapter/registry.d.ts.map +1 -1
  35. package/dist/acp/adapter/registry.js +6 -6
  36. package/dist/acp/adapter/registry.js.map +1 -1
  37. package/dist/acp/adapter/session-events.d.ts +79 -0
  38. package/dist/acp/adapter/session-events.d.ts.map +1 -0
  39. package/dist/acp/adapter/session-events.js +149 -0
  40. package/dist/acp/adapter/session-events.js.map +1 -0
  41. package/dist/acp/content/content-externalizer.d.ts.map +1 -1
  42. package/dist/acp/content/content-externalizer.js +31 -1
  43. package/dist/acp/content/content-externalizer.js.map +1 -1
  44. package/dist/acp/native-history/preview-contract.d.ts +21 -22
  45. package/dist/acp/native-history/preview-contract.d.ts.map +1 -1
  46. package/dist/agent/runtime-agents.d.ts +12 -0
  47. package/dist/agent/runtime-agents.d.ts.map +1 -0
  48. package/dist/agent/runtime-agents.js +19 -0
  49. package/dist/agent/runtime-agents.js.map +1 -0
  50. package/dist/cli.js +11238 -10757
  51. package/dist/cli.js.map +4 -4
  52. package/dist/runtime/command/agent-settings-discovery.d.ts +2 -0
  53. package/dist/runtime/command/agent-settings-discovery.d.ts.map +1 -1
  54. package/dist/runtime/command/agent-settings-discovery.js +1 -2
  55. package/dist/runtime/command/agent-settings-discovery.js.map +1 -1
  56. package/dist/runtime/command/context.d.ts +2 -0
  57. package/dist/runtime/command/context.d.ts.map +1 -1
  58. package/dist/runtime/command/registry/agent-settings.d.ts.map +1 -1
  59. package/dist/runtime/command/registry/agent-settings.js +1 -0
  60. package/dist/runtime/command/registry/agent-settings.js.map +1 -1
  61. package/dist/runtime/command/registry/history.d.ts +3 -2
  62. package/dist/runtime/command/registry/history.d.ts.map +1 -1
  63. package/dist/runtime/command/registry/history.js +6 -7
  64. package/dist/runtime/command/registry/history.js.map +1 -1
  65. package/dist/runtime/command/registry/prompt.d.ts.map +1 -1
  66. package/dist/runtime/command/registry/prompt.js +1 -2
  67. package/dist/runtime/command/registry/prompt.js.map +1 -1
  68. package/dist/runtime/command/registry/session.d.ts +5 -4
  69. package/dist/runtime/command/registry/session.d.ts.map +1 -1
  70. package/dist/runtime/command/registry/session.js +16 -18
  71. package/dist/runtime/command/registry/session.js.map +1 -1
  72. package/dist/runtime/config.d.ts +3 -1
  73. package/dist/runtime/config.d.ts.map +1 -1
  74. package/dist/runtime/config.js +4 -1
  75. package/dist/runtime/config.js.map +1 -1
  76. package/dist/runtime/relay/run-relay-connection.d.ts +3 -1
  77. package/dist/runtime/relay/run-relay-connection.d.ts.map +1 -1
  78. package/dist/runtime/relay/run-relay-connection.js +2 -1
  79. package/dist/runtime/relay/run-relay-connection.js.map +1 -1
  80. package/dist/runtime/relay/session-event-publisher.d.ts.map +1 -1
  81. package/dist/runtime/relay/session-event-publisher.js +37 -2
  82. package/dist/runtime/relay/session-event-publisher.js.map +1 -1
  83. package/dist/runtime/run.d.ts.map +1 -1
  84. package/dist/runtime/run.js +16 -26
  85. package/dist/runtime/run.js.map +1 -1
  86. package/dist/runtime.js +6765 -6340
  87. package/dist/runtime.js.map +4 -4
  88. package/dist/session/api/session-api.d.ts +8 -2
  89. package/dist/session/api/session-api.d.ts.map +1 -1
  90. package/dist/session/api/session-api.js.map +1 -1
  91. package/dist/session/api/session-layer.d.ts +2 -3
  92. package/dist/session/api/session-layer.d.ts.map +1 -1
  93. package/dist/session/api/session-layer.js +2 -17
  94. package/dist/session/api/session-layer.js.map +1 -1
  95. package/dist/session/history/session-event-history-projection.d.ts.map +1 -1
  96. package/dist/session/history/session-event-history-projection.js +11 -1
  97. package/dist/session/history/session-event-history-projection.js.map +1 -1
  98. package/dist/session/history/session-history.d.ts +1 -2
  99. package/dist/session/history/session-history.d.ts.map +1 -1
  100. package/dist/session/history/session-history.js +1 -1
  101. package/dist/session/history/session-history.js.map +1 -1
  102. package/dist/session/live/agent-session.d.ts +6 -13
  103. package/dist/session/live/agent-session.d.ts.map +1 -1
  104. package/dist/session/live/agent-session.js +94 -165
  105. package/dist/session/live/agent-session.js.map +1 -1
  106. package/dist/session/manager/session-manager.d.ts +5 -8
  107. package/dist/session/manager/session-manager.d.ts.map +1 -1
  108. package/dist/session/manager/session-manager.js +14 -26
  109. package/dist/session/manager/session-manager.js.map +1 -1
  110. package/dist/session/native/native-session-browser.js +7 -7
  111. package/dist/session/native/native-session-browser.js.map +1 -1
  112. package/dist/session/process/agent-process-pool.d.ts +12 -10
  113. package/dist/session/process/agent-process-pool.d.ts.map +1 -1
  114. package/dist/session/process/agent-process-pool.js +15 -4
  115. package/dist/session/process/agent-process-pool.js.map +1 -1
  116. package/dist/session/process/retained-agent-processes.d.ts +11 -12
  117. package/dist/session/process/retained-agent-processes.d.ts.map +1 -1
  118. package/dist/session/process/retained-agent-processes.js.map +1 -1
  119. package/dist/session/prompt/apply-session-configuration.d.ts +2 -1
  120. package/dist/session/prompt/apply-session-configuration.d.ts.map +1 -1
  121. package/dist/session/prompt/apply-session-configuration.js +4 -3
  122. package/dist/session/prompt/apply-session-configuration.js.map +1 -1
  123. package/dist/session/prompt/execute-prompt.d.ts.map +1 -1
  124. package/dist/session/prompt/execute-prompt.js +5 -2
  125. package/dist/session/prompt/execute-prompt.js.map +1 -1
  126. package/dist/session/settings/discover-agent-settings.d.ts.map +1 -1
  127. package/dist/session/settings/discover-agent-settings.js +6 -3
  128. package/dist/session/settings/discover-agent-settings.js.map +1 -1
  129. package/dist/session/workspace/resolve-session-directories.d.ts +2 -1
  130. package/dist/session/workspace/resolve-session-directories.d.ts.map +1 -1
  131. package/dist/session/workspace/resolve-session-directories.js +6 -3
  132. package/dist/session/workspace/resolve-session-directories.js.map +1 -1
  133. package/dist/session/workspace/workspace-directory.d.ts +4 -0
  134. package/dist/session/workspace/workspace-directory.d.ts.map +1 -1
  135. package/dist/session/workspace/workspace-directory.js +4 -0
  136. package/dist/session/workspace/workspace-directory.js.map +1 -1
  137. package/dist/storage/session/temporary-session-event-cache.d.ts +7 -0
  138. package/dist/storage/session/temporary-session-event-cache.d.ts.map +1 -0
  139. package/dist/storage/session/temporary-session-event-cache.js +21 -0
  140. package/dist/storage/session/temporary-session-event-cache.js.map +1 -0
  141. package/dist/util/run-cleanup.d.ts +3 -0
  142. package/dist/util/run-cleanup.d.ts.map +1 -0
  143. package/dist/util/run-cleanup.js +14 -0
  144. package/dist/util/run-cleanup.js.map +1 -0
  145. package/package.json +2 -2
  146. package/dist/session/process/agent-query-processes.d.ts +0 -16
  147. package/dist/session/process/agent-query-processes.d.ts.map +0 -1
  148. package/dist/session/process/agent-query-processes.js.map +0 -1
@@ -0,0 +1,10 @@
1
+ import type { AcpAgentDefinition } from "../agent/agent-definition.ts";
2
+ import type { Adapter, AdapterDependencies, AdapterResolver } from "../native-history/preview-contract.ts";
3
+ /** Stable harness adapters for one runtime; query behavior belongs to each adapter. */
4
+ export declare class AdapterRegistry {
5
+ #private;
6
+ constructor(resolve: AdapterResolver, dependencies: AdapterDependencies);
7
+ readonly resolve: (agent: AcpAgentDefinition) => Adapter;
8
+ readonly close: () => Promise<void>;
9
+ }
10
+ //# sourceMappingURL=adapter-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter-registry.d.ts","sourceRoot":"","sources":["../../../src/acp/adapter/adapter-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,KAAK,EAAE,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAE3G,uFAAuF;AACvF,qBAAa,eAAe;;IAKxB,YAAY,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,mBAAmB,EAGtE;IAED,QAAQ,CAAC,OAAO,UAAW,kBAAkB,KAAG,OAAO,CAQrD;IAEF,QAAQ,CAAC,KAAK,QAAa,OAAO,CAAC,IAAI,CAAC,CAGtC;CACL"}
@@ -0,0 +1,24 @@
1
+ /** Stable harness adapters for one runtime; query behavior belongs to each adapter. */
2
+ export class AdapterRegistry {
3
+ #resolve;
4
+ #dependencies;
5
+ #adapters = new Map();
6
+ constructor(resolve, dependencies) {
7
+ this.#resolve = resolve;
8
+ this.#dependencies = dependencies;
9
+ }
10
+ resolve = (agent) => {
11
+ const existing = this.#adapters.get(agent.id);
12
+ if (existing !== undefined) {
13
+ return existing;
14
+ }
15
+ const adapter = this.#resolve(agent, this.#dependencies);
16
+ this.#adapters.set(agent.id, adapter);
17
+ return adapter;
18
+ };
19
+ close = async () => {
20
+ await Promise.all([...this.#adapters.values()].map((adapter) => adapter.close()));
21
+ this.#adapters.clear();
22
+ };
23
+ }
24
+ //# sourceMappingURL=adapter-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter-registry.js","sourceRoot":"","sources":["../../../src/acp/adapter/adapter-registry.ts"],"names":[],"mappings":"AAGA,uFAAuF;AACvF,MAAM,OAAO,eAAe;IACf,QAAQ,CAAkB;IAC1B,aAAa,CAAsB;IACnC,SAAS,GAAG,IAAI,GAAG,EAAmB,CAAC;IAEhD,YAAY,OAAwB,EAAE,YAAiC;QACnE,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;IACtC,CAAC;IAEQ,OAAO,GAAG,CAAC,KAAyB,EAAW,EAAE;QACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC9C,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YACzB,OAAO,QAAQ,CAAC;QACpB,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QACzD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QACtC,OAAO,OAAO,CAAC;IACnB,CAAC,CAAC;IAEO,KAAK,GAAG,KAAK,IAAmB,EAAE;QACvC,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAClF,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC,CAAC;CACL"}
@@ -0,0 +1,27 @@
1
+ import { AcpExecutionError } from "../acp-error.ts";
2
+ import type { AcpAgentDefinition } from "../agent/agent-definition.ts";
3
+ import type { AdapterSessionConnection } from "./session-events.ts";
4
+ export declare class RetryableAcpInitializationError extends AcpExecutionError {
5
+ constructor(cause: unknown);
6
+ }
7
+ export declare function validateAgentRuntime(agent: AcpAgentDefinition, signal: AbortSignal): Promise<void>;
8
+ export declare function initializeAgentConnection(connection: AdapterSessionConnection, agentId: string, verifiedVersion: string, signal: AbortSignal): Promise<{
9
+ capabilities: Readonly<{
10
+ additionalDirectories: boolean;
11
+ audioPrompt: boolean;
12
+ closeSession: boolean;
13
+ deleteSession: boolean;
14
+ embeddedContextPrompt: boolean;
15
+ imagePrompt: boolean;
16
+ listSessions: boolean;
17
+ loadSession: boolean;
18
+ promptQueueing: boolean;
19
+ renameSession: boolean;
20
+ resumeSession: boolean;
21
+ steering: boolean;
22
+ unstableForkSession: boolean;
23
+ }>;
24
+ agentName: string;
25
+ agentVersion: string;
26
+ }>;
27
+ //# sourceMappingURL=agent-initialization.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-initialization.d.ts","sourceRoot":"","sources":["../../../src/acp/adapter/agent-initialization.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAEvE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAEpE,qBAAa,+BAAgC,SAAQ,iBAAiB;IAClE,YAAY,KAAK,EAAE,OAAO,EAGzB;CACJ;AAED,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,kBAAkB,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAcxG;AAED,wBAAsB,yBAAyB,CAC3C,UAAU,EAAE,wBAAwB,EACpC,OAAO,EAAE,MAAM,EACf,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,WAAW;;;;;;;;;;;;;;;;;;GAmDtB"}
@@ -0,0 +1,55 @@
1
+ import { methods, PROTOCOL_VERSION } from "@agentclientprotocol/sdk";
2
+ import { revalidateExecutable } from "../../util/process/executable.js";
3
+ import { truncate } from "../../util/value-utils.js";
4
+ import { AcpExecutionError } from "../acp-error.js";
5
+ import { normalizeAcpCapabilities } from "../protocol/session-capabilities.js";
6
+ export class RetryableAcpInitializationError extends AcpExecutionError {
7
+ constructor(cause) {
8
+ super("ACP agent initialization failed", { cause });
9
+ this.name = "RetryableAcpInitializationError";
10
+ }
11
+ }
12
+ export async function validateAgentRuntime(agent, signal) {
13
+ signal.throwIfAborted();
14
+ const unchanged = await Promise.all([
15
+ agent.kind === "acp-adapter-process" ? revalidateExecutable(agent.adapterIdentity) : Promise.resolve(true),
16
+ revalidateExecutable(agent.agentIdentity),
17
+ ]);
18
+ signal.throwIfAborted();
19
+ if (unchanged.some((result) => !result)) {
20
+ throw new AcpExecutionError("The local Agent runtime changed; restart Mobius before starting a new conversation", {}, "agent_runtime_changed");
21
+ }
22
+ }
23
+ export async function initializeAgentConnection(connection, agentId, verifiedVersion, signal) {
24
+ if (connection.inProcessAgent !== null) {
25
+ await connection
26
+ .race(connection.inProcessAgent.initialize(signal), "The Codex app-server exited during initialization", signal)
27
+ .catch((cause) => {
28
+ signal.throwIfAborted();
29
+ throw new RetryableAcpInitializationError(cause);
30
+ });
31
+ }
32
+ const initialized = await connection
33
+ .race(connection.connection.agent.request(methods.agent.initialize, {
34
+ clientCapabilities: {
35
+ elicitation: { form: {}, url: {} },
36
+ plan: {},
37
+ session: { compaction: {}, configOptions: { boolean: {} } },
38
+ },
39
+ clientInfo: { name: "mobius", version: "0.0.3" },
40
+ protocolVersion: PROTOCOL_VERSION,
41
+ }, { cancellationSignal: signal }), "ACP agent exited during initialization", signal)
42
+ .catch((cause) => {
43
+ signal.throwIfAborted();
44
+ throw new RetryableAcpInitializationError(cause);
45
+ });
46
+ if (initialized.protocolVersion !== PROTOCOL_VERSION) {
47
+ throw new AcpExecutionError("ACP agent selected an unsupported protocol version", {}, "unsupported_acp_protocol");
48
+ }
49
+ return {
50
+ capabilities: normalizeAcpCapabilities(initialized),
51
+ agentName: truncate(initialized.agentInfo?.title ?? initialized.agentInfo?.name ?? agentId, 255),
52
+ agentVersion: truncate(verifiedVersion.length > 0 ? verifiedVersion : (initialized.agentInfo?.version ?? ""), 128),
53
+ };
54
+ }
55
+ //# sourceMappingURL=agent-initialization.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-initialization.js","sourceRoot":"","sources":["../../../src/acp/adapter/agent-initialization.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,39 @@
1
- import type { Adapter, AdapterContext, NativeSessionPreviewRequest } from "../../native-history/preview-contract.ts";
1
+ import type { Adapter, AdapterDependencies, NativeSessionPreviewRequest, NativeSessionQuery } from "../../native-history/preview-contract.ts";
2
+ import { type AdapterSessionConnectionOptions } from "../session-events.ts";
2
3
  /**
3
4
  * Claude Code stores history that its harness replays as live ACP session updates
4
5
  * during `session/load`, so previews resume the saved session over ACP.
5
6
  */
6
7
  export declare class ClaudeAdapter implements Adapter {
7
- readonly previewSessionEvents: (request: NativeSessionPreviewRequest, context: AdapterContext) => Promise<import("../../native-history/preview-contract.ts").SessionEventPage>;
8
+ #private;
9
+ constructor(dependencies: AdapterDependencies);
10
+ readonly capabilities: (query: NativeSessionQuery) => Promise<Readonly<{
11
+ additionalDirectories: boolean;
12
+ audioPrompt: boolean;
13
+ closeSession: boolean;
14
+ deleteSession: boolean;
15
+ embeddedContextPrompt: boolean;
16
+ imagePrompt: boolean;
17
+ listSessions: boolean;
18
+ loadSession: boolean;
19
+ promptQueueing: boolean;
20
+ renameSession: boolean;
21
+ resumeSession: boolean;
22
+ steering: boolean;
23
+ unstableForkSession: boolean;
24
+ }>>;
25
+ readonly connectSession: (options: AdapterSessionConnectionOptions) => import("../session-events.ts").AdapterSessionConnection;
26
+ readonly listNativeSessions: (query: NativeSessionQuery, cursor: string | null) => Promise<Readonly<{
27
+ sessions: readonly Readonly<{
28
+ sessionId: string;
29
+ cwd: string;
30
+ additionalDirectories: readonly string[];
31
+ title?: string | null | undefined;
32
+ updatedAt?: string | null | undefined;
33
+ }>[];
34
+ nextCursor?: string | null | undefined;
35
+ }>>;
36
+ readonly previewSessionEvents: (query: NativeSessionQuery, request: NativeSessionPreviewRequest) => Promise<import("../../../session/history/session-event-store.ts").SessionEventPage>;
37
+ readonly close: () => Promise<void>;
8
38
  }
9
39
  //# sourceMappingURL=adapter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../../src/acp/adapter/claude/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,2BAA2B,EAAE,MAAM,0CAA0C,CAAC;AAErH;;;GAGG;AACH,qBAAa,aAAc,YAAW,OAAO;IACzC,QAAQ,CAAC,oBAAoB,YAAmB,2BAA2B,WAAW,cAAc,kFACvD;CAChD"}
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../../src/acp/adapter/claude/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,OAAO,EACP,mBAAmB,EACnB,2BAA2B,EAC3B,kBAAkB,EACrB,MAAM,0CAA0C,CAAC;AAElD,OAAO,EAAuB,KAAK,+BAA+B,EAAE,MAAM,sBAAsB,CAAC;AAEjG;;;GAGG;AACH,qBAAa,aAAc,YAAW,OAAO;;IAIzC,YAAY,YAAY,EAAE,mBAAmB,EAG5C;IAED,QAAQ,CAAC,YAAY,UAAiB,kBAAkB;;;;;;;;;;;;;;QAAoD;IAC5G,QAAQ,CAAC,cAAc,YAAa,+BAA+B,6DAA6C;IAChH,QAAQ,CAAC,kBAAkB,UAAiB,kBAAkB,UAAU,MAAM,GAAG,IAAI;;;;;;;;;QACpB;IACjE,QAAQ,CAAC,oBAAoB,UAAiB,kBAAkB,WAAW,2BAA2B,yFAClC;IACpE,QAAQ,CAAC,KAAK,QAAa,OAAO,CAAC,IAAI,CAAC,CAAuC;CAClF"}
@@ -1,8 +1,20 @@
1
+ import { AgentQueryProcesses } from "../query-processes.js";
2
+ import { AcpSessionConnector } from "../session-events.js";
1
3
  /**
2
4
  * Claude Code stores history that its harness replays as live ACP session updates
3
5
  * during `session/load`, so previews resume the saved session over ACP.
4
6
  */
5
7
  export class ClaudeAdapter {
6
- previewSessionEvents = async (request, context) => await context.previewThroughAcp(request);
8
+ #queryProcesses;
9
+ #connector;
10
+ constructor(dependencies) {
11
+ this.#connector = new AcpSessionConnector(dependencies.contentExternalizer);
12
+ this.#queryProcesses = new AgentQueryProcesses(dependencies.processes, this.#connector);
13
+ }
14
+ capabilities = async (query) => await this.#queryProcesses.capabilities(query);
15
+ connectSession = (options) => this.#connector.connectSession(options);
16
+ listNativeSessions = async (query, cursor) => await this.#queryProcesses.listNativeSessions(query, cursor);
17
+ previewSessionEvents = async (query, request) => await this.#queryProcesses.previewSessionEvents(query, request);
18
+ close = async () => await this.#queryProcesses.close();
7
19
  }
8
20
  //# sourceMappingURL=adapter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../../src/acp/adapter/claude/adapter.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,OAAO,aAAa;IACb,oBAAoB,GAAG,KAAK,EAAE,OAAoC,EAAE,OAAuB,EAAE,EAAE,CACpG,MAAM,OAAO,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;CAChD"}
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../../src/acp/adapter/claude/adapter.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAwC,MAAM,sBAAsB,CAAC;AAEjG;;;GAGG;AACH,MAAM,OAAO,aAAa;IACb,eAAe,CAAsB;IACrC,UAAU,CAAsB;IAEzC,YAAY,YAAiC;QACzC,IAAI,CAAC,UAAU,GAAG,IAAI,mBAAmB,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC;QAC5E,IAAI,CAAC,eAAe,GAAG,IAAI,mBAAmB,CAAC,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IAC5F,CAAC;IAEQ,YAAY,GAAG,KAAK,EAAE,KAAyB,EAAE,EAAE,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IACnG,cAAc,GAAG,CAAC,OAAwC,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IACvG,kBAAkB,GAAG,KAAK,EAAE,KAAyB,EAAE,MAAqB,EAAE,EAAE,CACrF,MAAM,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACxD,oBAAoB,GAAG,KAAK,EAAE,KAAyB,EAAE,OAAoC,EAAE,EAAE,CACtG,MAAM,IAAI,CAAC,eAAe,CAAC,oBAAoB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC3D,KAAK,GAAG,KAAK,IAAmB,EAAE,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;CAClF"}
@@ -1,10 +1,40 @@
1
- import type { Adapter, AdapterContext, NativeSessionPreviewRequest, SessionEventPage } from "../../native-history/preview-contract.ts";
1
+ import type { Adapter, AdapterDependencies, NativeSessionPreviewRequest, NativeSessionQuery, SessionEventPage } from "../../native-history/preview-contract.ts";
2
+ import { type AdapterSessionConnectionOptions } from "../session-events.ts";
2
3
  /**
3
4
  * Previews saved Codex threads by reading the Codex app-server directly. The read is
4
5
  * short-lived and never resumes the source thread, so it needs no writer lock; ACP
5
6
  * `session/load` remains the fallback for resuming the conversation.
6
7
  */
7
8
  export declare class CodexAdapter implements Adapter {
8
- readonly previewSessionEvents: (request: NativeSessionPreviewRequest, context: AdapterContext) => Promise<SessionEventPage>;
9
+ #private;
10
+ constructor(dependencies: AdapterDependencies);
11
+ readonly capabilities: (query: NativeSessionQuery) => Promise<Readonly<{
12
+ additionalDirectories: boolean;
13
+ audioPrompt: boolean;
14
+ closeSession: boolean;
15
+ deleteSession: boolean;
16
+ embeddedContextPrompt: boolean;
17
+ imagePrompt: boolean;
18
+ listSessions: boolean;
19
+ loadSession: boolean;
20
+ promptQueueing: boolean;
21
+ renameSession: boolean;
22
+ resumeSession: boolean;
23
+ steering: boolean;
24
+ unstableForkSession: boolean;
25
+ }>>;
26
+ readonly connectSession: (options: AdapterSessionConnectionOptions) => import("../session-events.ts").AdapterSessionConnection;
27
+ readonly listNativeSessions: (query: NativeSessionQuery, cursor: string | null) => Promise<Readonly<{
28
+ sessions: readonly Readonly<{
29
+ sessionId: string;
30
+ cwd: string;
31
+ additionalDirectories: readonly string[];
32
+ title?: string | null | undefined;
33
+ updatedAt?: string | null | undefined;
34
+ }>[];
35
+ nextCursor?: string | null | undefined;
36
+ }>>;
37
+ readonly close: () => Promise<void>;
38
+ readonly previewSessionEvents: (query: NativeSessionQuery, request: NativeSessionPreviewRequest) => Promise<SessionEventPage>;
9
39
  }
10
40
  //# sourceMappingURL=adapter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../../src/acp/adapter/codex/adapter.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACR,OAAO,EACP,cAAc,EACd,2BAA2B,EAC3B,gBAAgB,EACnB,MAAM,0CAA0C,CAAC;AAElD;;;;GAIG;AACH,qBAAa,YAAa,YAAW,OAAO;IACxC,QAAQ,CAAC,oBAAoB,YAChB,2BAA2B,WAC3B,cAAc,KACxB,OAAO,CAAC,gBAAgB,CAAC,CAe1B;CACL"}
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../../src/acp/adapter/codex/adapter.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACR,OAAO,EACP,mBAAmB,EACnB,2BAA2B,EAC3B,kBAAkB,EAClB,gBAAgB,EACnB,MAAM,0CAA0C,CAAC;AAGlD,OAAO,EAAuB,KAAK,+BAA+B,EAAE,MAAM,sBAAsB,CAAC;AAEjG;;;;GAIG;AACH,qBAAa,YAAa,YAAW,OAAO;;IAKxC,YAAY,YAAY,EAAE,mBAAmB,EAG5C;IAED,QAAQ,CAAC,YAAY,UAAiB,kBAAkB;;;;;;;;;;;;;;QAAoD;IAC5G,QAAQ,CAAC,cAAc,YAAa,+BAA+B,6DAA6C;IAChH,QAAQ,CAAC,kBAAkB,UAAiB,kBAAkB,UAAU,MAAM,GAAG,IAAI;;;;;;;;;QACpB;IACjE,QAAQ,CAAC,KAAK,QAAa,OAAO,CAAC,IAAI,CAAC,CAMtC;IAEF,QAAQ,CAAC,oBAAoB,UAClB,kBAAkB,WAChB,2BAA2B,KACrC,OAAO,CAAC,gBAAgB,CAAC,CAgB1B;CACL"}
@@ -1,20 +1,42 @@
1
1
  import { AcpExecutionError } from "../../acp-error.js";
2
2
  import { readCodexFullHistory } from "../../native-history/codex/codex-history.js";
3
3
  import { nativeHistoryEvents } from "../../native-history/codex/native-history-events.js";
4
+ import { openPreviewEventCache } from "../preview-event-cache.js";
5
+ import { AgentQueryProcesses } from "../query-processes.js";
6
+ import { AcpSessionConnector } from "../session-events.js";
4
7
  /**
5
8
  * Previews saved Codex threads by reading the Codex app-server directly. The read is
6
9
  * short-lived and never resumes the source thread, so it needs no writer lock; ACP
7
10
  * `session/load` remains the fallback for resuming the conversation.
8
11
  */
9
12
  export class CodexAdapter {
10
- previewSessionEvents = async (request, context) => {
11
- const { agent, cwd, signal } = context;
13
+ #queryProcesses;
14
+ #connector;
15
+ #previewCache = null;
16
+ constructor(dependencies) {
17
+ this.#connector = new AcpSessionConnector(dependencies.contentExternalizer);
18
+ this.#queryProcesses = new AgentQueryProcesses(dependencies.processes, this.#connector);
19
+ }
20
+ capabilities = async (query) => await this.#queryProcesses.capabilities(query);
21
+ connectSession = (options) => this.#connector.connectSession(options);
22
+ listNativeSessions = async (query, cursor) => await this.#queryProcesses.listNativeSessions(query, cursor);
23
+ close = async () => {
24
+ try {
25
+ await this.#queryProcesses.close();
26
+ }
27
+ finally {
28
+ this.#previewCache?.close();
29
+ }
30
+ };
31
+ previewSessionEvents = async (query, request) => {
32
+ const { agent, cwd, signal } = query;
12
33
  const { sessionId } = request;
34
+ this.#previewCache ??= openPreviewEventCache();
13
35
  const snapshot = await readCodexFullHistory(agent, cwd, request.nativeSessionId, signal);
14
36
  if (snapshot.history.status === "unavailable") {
15
37
  throw new AcpExecutionError(snapshot.history.cause.message, {}, snapshot.history.cause.code);
16
38
  }
17
- return nativeHistoryEvents(sessionId, request.nativeSessionId, snapshot.history, request.eventLimit, request.cursor, context.events);
39
+ return nativeHistoryEvents(sessionId, request.nativeSessionId, snapshot.history, request.eventLimit, request.cursor, this.#previewCache.events);
18
40
  };
19
41
  }
20
42
  //# sourceMappingURL=adapter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../../src/acp/adapter/codex/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,6CAA6C,CAAC;AACnF,OAAO,EAAE,mBAAmB,EAAE,MAAM,qDAAqD,CAAC;AAQ1F;;;;GAIG;AACH,MAAM,OAAO,YAAY;IACZ,oBAAoB,GAAG,KAAK,EACjC,OAAoC,EACpC,OAAuB,EACE,EAAE;QAC3B,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QACvC,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;QAC9B,MAAM,QAAQ,GAAG,MAAM,oBAAoB,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;QACzF,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;YAC5C,MAAM,IAAI,iBAAiB,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjG,CAAC;QACD,OAAO,mBAAmB,CACtB,SAAS,EACT,OAAO,CAAC,eAAe,EACvB,QAAQ,CAAC,OAAO,EAChB,OAAO,CAAC,UAAU,EAClB,OAAO,CAAC,MAAM,EACd,OAAO,CAAC,MAAM,CACjB,CAAC;IACN,CAAC,CAAC;CACL"}
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../../src/acp/adapter/codex/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,6CAA6C,CAAC;AACnF,OAAO,EAAE,mBAAmB,EAAE,MAAM,qDAAqD,CAAC;AAQ1F,OAAO,EAAE,qBAAqB,EAA0B,MAAM,2BAA2B,CAAC;AAC1F,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAwC,MAAM,sBAAsB,CAAC;AAEjG;;;;GAIG;AACH,MAAM,OAAO,YAAY;IACZ,eAAe,CAAsB;IACrC,UAAU,CAAsB;IACzC,aAAa,GAA6B,IAAI,CAAC;IAE/C,YAAY,YAAiC;QACzC,IAAI,CAAC,UAAU,GAAG,IAAI,mBAAmB,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC;QAC5E,IAAI,CAAC,eAAe,GAAG,IAAI,mBAAmB,CAAC,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IAC5F,CAAC;IAEQ,YAAY,GAAG,KAAK,EAAE,KAAyB,EAAE,EAAE,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IACnG,cAAc,GAAG,CAAC,OAAwC,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IACvG,kBAAkB,GAAG,KAAK,EAAE,KAAyB,EAAE,MAAqB,EAAE,EAAE,CACrF,MAAM,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACxD,KAAK,GAAG,KAAK,IAAmB,EAAE;QACvC,IAAI,CAAC;YACD,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QACvC,CAAC;gBAAS,CAAC;YACP,IAAI,CAAC,aAAa,EAAE,KAAK,EAAE,CAAC;QAChC,CAAC;IACL,CAAC,CAAC;IAEO,oBAAoB,GAAG,KAAK,EACjC,KAAyB,EACzB,OAAoC,EACX,EAAE;QAC3B,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;QACrC,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;QAC9B,IAAI,CAAC,aAAa,KAAK,qBAAqB,EAAE,CAAC;QAC/C,MAAM,QAAQ,GAAG,MAAM,oBAAoB,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;QACzF,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;YAC5C,MAAM,IAAI,iBAAiB,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjG,CAAC;QACD,OAAO,mBAAmB,CACtB,SAAS,EACT,OAAO,CAAC,eAAe,EACvB,QAAQ,CAAC,OAAO,EAChB,OAAO,CAAC,UAAU,EAClB,OAAO,CAAC,MAAM,EACd,IAAI,CAAC,aAAa,CAAC,MAAM,CAC5B,CAAC;IACN,CAAC,CAAC;CACL"}
@@ -1,9 +1,39 @@
1
- import type { Adapter, AdapterContext, NativeSessionPreviewRequest } from "../../native-history/preview-contract.ts";
1
+ import type { Adapter, AdapterDependencies, NativeSessionPreviewRequest, NativeSessionQuery } from "../../native-history/preview-contract.ts";
2
+ import { type AdapterSessionConnectionOptions } from "../session-events.ts";
2
3
  /**
3
4
  * Pi replays its stored session messages as live ACP session updates during
4
5
  * `session/load`, so previews resume the saved session over ACP.
5
6
  */
6
7
  export declare class PiAdapter implements Adapter {
7
- readonly previewSessionEvents: (request: NativeSessionPreviewRequest, context: AdapterContext) => Promise<import("../../native-history/preview-contract.ts").SessionEventPage>;
8
+ #private;
9
+ constructor(dependencies: AdapterDependencies);
10
+ readonly capabilities: (query: NativeSessionQuery) => Promise<Readonly<{
11
+ additionalDirectories: boolean;
12
+ audioPrompt: boolean;
13
+ closeSession: boolean;
14
+ deleteSession: boolean;
15
+ embeddedContextPrompt: boolean;
16
+ imagePrompt: boolean;
17
+ listSessions: boolean;
18
+ loadSession: boolean;
19
+ promptQueueing: boolean;
20
+ renameSession: boolean;
21
+ resumeSession: boolean;
22
+ steering: boolean;
23
+ unstableForkSession: boolean;
24
+ }>>;
25
+ readonly connectSession: (options: AdapterSessionConnectionOptions) => import("../session-events.ts").AdapterSessionConnection;
26
+ readonly listNativeSessions: (query: NativeSessionQuery, cursor: string | null) => Promise<Readonly<{
27
+ sessions: readonly Readonly<{
28
+ sessionId: string;
29
+ cwd: string;
30
+ additionalDirectories: readonly string[];
31
+ title?: string | null | undefined;
32
+ updatedAt?: string | null | undefined;
33
+ }>[];
34
+ nextCursor?: string | null | undefined;
35
+ }>>;
36
+ readonly previewSessionEvents: (query: NativeSessionQuery, request: NativeSessionPreviewRequest) => Promise<import("../../../session/history/session-event-store.ts").SessionEventPage>;
37
+ readonly close: () => Promise<void>;
8
38
  }
9
39
  //# sourceMappingURL=adapter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../../src/acp/adapter/pi/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,2BAA2B,EAAE,MAAM,0CAA0C,CAAC;AAErH;;;GAGG;AACH,qBAAa,SAAU,YAAW,OAAO;IACrC,QAAQ,CAAC,oBAAoB,YAAmB,2BAA2B,WAAW,cAAc,kFACvD;CAChD"}
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../../src/acp/adapter/pi/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,OAAO,EACP,mBAAmB,EACnB,2BAA2B,EAC3B,kBAAkB,EACrB,MAAM,0CAA0C,CAAC;AAElD,OAAO,EAAuB,KAAK,+BAA+B,EAAE,MAAM,sBAAsB,CAAC;AAEjG;;;GAGG;AACH,qBAAa,SAAU,YAAW,OAAO;;IAIrC,YAAY,YAAY,EAAE,mBAAmB,EAG5C;IAED,QAAQ,CAAC,YAAY,UAAiB,kBAAkB;;;;;;;;;;;;;;QAAoD;IAC5G,QAAQ,CAAC,cAAc,YAAa,+BAA+B,6DAA6C;IAChH,QAAQ,CAAC,kBAAkB,UAAiB,kBAAkB,UAAU,MAAM,GAAG,IAAI;;;;;;;;;QACpB;IACjE,QAAQ,CAAC,oBAAoB,UAAiB,kBAAkB,WAAW,2BAA2B,yFAClC;IACpE,QAAQ,CAAC,KAAK,QAAa,OAAO,CAAC,IAAI,CAAC,CAAuC;CAClF"}
@@ -1,8 +1,20 @@
1
+ import { AgentQueryProcesses } from "../query-processes.js";
2
+ import { AcpSessionConnector } from "../session-events.js";
1
3
  /**
2
4
  * Pi replays its stored session messages as live ACP session updates during
3
5
  * `session/load`, so previews resume the saved session over ACP.
4
6
  */
5
7
  export class PiAdapter {
6
- previewSessionEvents = async (request, context) => await context.previewThroughAcp(request);
8
+ #queryProcesses;
9
+ #connector;
10
+ constructor(dependencies) {
11
+ this.#connector = new AcpSessionConnector(dependencies.contentExternalizer);
12
+ this.#queryProcesses = new AgentQueryProcesses(dependencies.processes, this.#connector);
13
+ }
14
+ capabilities = async (query) => await this.#queryProcesses.capabilities(query);
15
+ connectSession = (options) => this.#connector.connectSession(options);
16
+ listNativeSessions = async (query, cursor) => await this.#queryProcesses.listNativeSessions(query, cursor);
17
+ previewSessionEvents = async (query, request) => await this.#queryProcesses.previewSessionEvents(query, request);
18
+ close = async () => await this.#queryProcesses.close();
7
19
  }
8
20
  //# sourceMappingURL=adapter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../../src/acp/adapter/pi/adapter.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,OAAO,SAAS;IACT,oBAAoB,GAAG,KAAK,EAAE,OAAoC,EAAE,OAAuB,EAAE,EAAE,CACpG,MAAM,OAAO,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;CAChD"}
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../../src/acp/adapter/pi/adapter.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAwC,MAAM,sBAAsB,CAAC;AAEjG;;;GAGG;AACH,MAAM,OAAO,SAAS;IACT,eAAe,CAAsB;IACrC,UAAU,CAAsB;IAEzC,YAAY,YAAiC;QACzC,IAAI,CAAC,UAAU,GAAG,IAAI,mBAAmB,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC;QAC5E,IAAI,CAAC,eAAe,GAAG,IAAI,mBAAmB,CAAC,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IAC5F,CAAC;IAEQ,YAAY,GAAG,KAAK,EAAE,KAAyB,EAAE,EAAE,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IACnG,cAAc,GAAG,CAAC,OAAwC,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IACvG,kBAAkB,GAAG,KAAK,EAAE,KAAyB,EAAE,MAAqB,EAAE,EAAE,CACrF,MAAM,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACxD,oBAAoB,GAAG,KAAK,EAAE,KAAyB,EAAE,OAAoC,EAAE,EAAE,CACtG,MAAM,IAAI,CAAC,eAAe,CAAC,oBAAoB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC3D,KAAK,GAAG,KAAK,IAAmB,EAAE,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;CAClF"}
@@ -0,0 +1,8 @@
1
+ import { CachedSessionEventStore } from "../../session/history/session-event-store.ts";
2
+ export interface PreviewEventCache {
3
+ readonly events: CachedSessionEventStore;
4
+ readonly close: () => void;
5
+ }
6
+ /** A disposable, adapter-private spill tier, never shared with live Session events. */
7
+ export declare function openPreviewEventCache(): PreviewEventCache;
8
+ //# sourceMappingURL=preview-event-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preview-event-cache.d.ts","sourceRoot":"","sources":["../../../src/acp/adapter/preview-event-cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AAGvF,MAAM,WAAW,iBAAiB;IAC9B,QAAQ,CAAC,MAAM,EAAE,uBAAuB,CAAC;IACzC,QAAQ,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC;CAC9B;AAED,uFAAuF;AACvF,wBAAgB,qBAAqB,IAAI,iBAAiB,CA6BzD"}
@@ -0,0 +1,37 @@
1
+ import { CachedSessionEventStore } from "../../session/history/session-event-store.js";
2
+ import { openTemporarySessionEventCache } from "../../storage/session/temporary-session-event-cache.js";
3
+ /** A disposable, adapter-private spill tier, never shared with live Session events. */
4
+ export function openPreviewEventCache() {
5
+ const cache = openTemporarySessionEventCache();
6
+ const positions = new Map();
7
+ try {
8
+ const events = new CachedSessionEventStore(cache.table, {
9
+ allocate: (sessionId) => {
10
+ const next = (positions.get(sessionId) ?? 0) + 1;
11
+ positions.set(sessionId, next);
12
+ return next;
13
+ },
14
+ });
15
+ return {
16
+ events,
17
+ close: () => {
18
+ try {
19
+ events.close();
20
+ }
21
+ finally {
22
+ cache.removeFiles();
23
+ }
24
+ },
25
+ };
26
+ }
27
+ catch (error) {
28
+ try {
29
+ cache.table.close();
30
+ }
31
+ finally {
32
+ cache.removeFiles();
33
+ }
34
+ throw error;
35
+ }
36
+ }
37
+ //# sourceMappingURL=preview-event-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preview-event-cache.js","sourceRoot":"","sources":["../../../src/acp/adapter/preview-event-cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AACvF,OAAO,EAAE,8BAA8B,EAAE,MAAM,wDAAwD,CAAC;AAOxG,uFAAuF;AACvF,MAAM,UAAU,qBAAqB;IACjC,MAAM,KAAK,GAAG,8BAA8B,EAAE,CAAC;IAC/C,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC5C,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,uBAAuB,CAAC,KAAK,CAAC,KAAK,EAAE;YACpD,QAAQ,EAAE,CAAC,SAAS,EAAE,EAAE;gBACpB,MAAM,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBACjD,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;gBAC/B,OAAO,IAAI,CAAC;YAChB,CAAC;SACJ,CAAC,CAAC;QACH,OAAO;YACH,MAAM;YACN,KAAK,EAAE,GAAS,EAAE;gBACd,IAAI,CAAC;oBACD,MAAM,CAAC,KAAK,EAAE,CAAC;gBACnB,CAAC;wBAAS,CAAC;oBACP,KAAK,CAAC,WAAW,EAAE,CAAC;gBACxB,CAAC;YACL,CAAC;SACJ,CAAC;IACN,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,IAAI,CAAC;YACD,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACxB,CAAC;gBAAS,CAAC;YACP,KAAK,CAAC,WAAW,EAAE,CAAC;QACxB,CAAC;QACD,MAAM,KAAK,CAAC;IAChB,CAAC;AACL,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { SessionCapabilities } from "@moxt-ai/mobius-sdk/protocol";
2
+ import { type SessionEventPage } from "../../session/history/session-event-store.ts";
3
+ import type { AgentProcessPool } from "../../session/process/agent-process-pool.ts";
4
+ import type { NativeSessionPreviewRequest, NativeSessionQuery } from "../native-history/preview-contract.ts";
5
+ import type { NativeSessionPage } from "../protocol/native-session.ts";
6
+ import { AcpQuerySession } from "./query-session.ts";
7
+ import type { AcpSessionConnector } from "./session-events.ts";
8
+ /** Owns query processes; execution processes remain separately retained. */
9
+ export declare class AgentQueryProcesses {
10
+ #private;
11
+ constructor(processes: AgentProcessPool, connector: AcpSessionConnector);
12
+ readonly retire: (sessionId: string, runtime: AcpQuerySession) => Promise<void>;
13
+ readonly capabilities: (query: NativeSessionQuery) => Promise<SessionCapabilities>;
14
+ readonly listNativeSessions: (query: NativeSessionQuery, cursor: string | null) => Promise<NativeSessionPage>;
15
+ readonly previewSessionEvents: (options: NativeSessionQuery, request: NativeSessionPreviewRequest) => Promise<SessionEventPage>;
16
+ readonly close: () => Promise<void>;
17
+ }
18
+ //# sourceMappingURL=query-processes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-processes.d.ts","sourceRoot":"","sources":["../../../src/acp/adapter/query-processes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,EAA2B,KAAK,gBAAgB,EAAE,MAAM,8CAA8C,CAAC;AAE9G,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6CAA6C,CAAC;AAGpF,OAAO,KAAK,EAAE,2BAA2B,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAC7G,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,4EAA4E;AAC5E,qBAAa,mBAAmB;;IAU5B,YAAY,SAAS,EAAE,gBAAgB,EAAE,SAAS,EAAE,mBAAmB,EAOtE;IACD,QAAQ,CAAC,MAAM,cAAqB,MAAM,WAAW,eAAe,KAAG,OAAO,CAAC,IAAI,CAAC,CAMlF;IA+EF,QAAQ,CAAC,YAAY,UAAiB,kBAAkB,KAAG,OAAO,CAAC,mBAAmB,CAAC,CACxD;IAE/B,QAAQ,CAAC,kBAAkB,UAChB,kBAAkB,UACjB,MAAM,GAAG,IAAI,KACtB,OAAO,CAAC,iBAAiB,CAAC,CACyE;IAEtG,QAAQ,CAAC,oBAAoB,YAChB,kBAAkB,WAClB,2BAA2B,KACrC,OAAO,CAAC,gBAAgB,CAAC,CA2B1B;IAEF,QAAQ,CAAC,KAAK,QAAa,OAAO,CAAC,IAAI,CAAC,CAStC;CACL"}
@@ -1,20 +1,18 @@
1
- import { AcpExecutionError } from "../../acp/acp-error.js";
2
- import { NullSessionObserver } from "../api/session-api.js";
3
- import { AgentSession } from "../live/agent-session.js";
4
- import { waitForSharedOperation } from "../manager/operation-drain.js";
5
- import { MemorySessionStore } from "../record/session-store.js";
6
- import { RetainedAgentProcesses } from "./retained-agent-processes.js";
1
+ import { MemorySessionEventStore } from "../../session/history/session-event-store.js";
2
+ import { waitForSharedOperation } from "../../session/manager/operation-drain.js";
3
+ import { RetainedAgentProcesses } from "../../session/process/retained-agent-processes.js";
4
+ import { AcpExecutionError } from "../acp-error.js";
5
+ import { AcpQuerySession } from "./query-session.js";
7
6
  /** Owns query processes; execution processes remain separately retained. */
8
7
  export class AgentQueryProcesses {
9
8
  #eventPreviewsBySession = new Map();
10
9
  #processesByQuery;
11
10
  #processes;
12
- #observer = new NullSessionObserver();
13
- #store = new MemorySessionStore();
14
- #contentExternalizer;
15
- constructor(processes, contentExternalizer) {
11
+ #store = new MemorySessionEventStore();
12
+ #connector;
13
+ constructor(processes, connector) {
16
14
  this.#processes = processes;
17
- this.#contentExternalizer = contentExternalizer;
15
+ this.#connector = connector;
18
16
  this.#processesByQuery = new RetainedAgentProcesses({
19
17
  touch: processes.touch,
20
18
  changed: processes.notifyChanged,
@@ -25,10 +23,10 @@ export class AgentQueryProcesses {
25
23
  if (retained) {
26
24
  this.#store.remove(sessionId);
27
25
  }
28
- await this.#processes.retire(runtime, () => runtime.close());
26
+ await this.#processes.retire(runtime, () => runtime.closeProcess());
29
27
  };
30
28
  async #startRetained(options) {
31
- const runtime = await this.#processes.startRetained(options.signal, () => AgentSession.startNativeSessionBrowser(options, () => this.#observer, this.#store, this.#contentExternalizer), {
29
+ const runtime = await this.#processes.startRetained(options.signal, () => AcpQuerySession.start(options, this.#store, this.#connector), {
32
30
  isBusy: () => this.#processesByQuery.isBusy(options.sessionId),
33
31
  retire: (runtime) => this.retire(options.sessionId, runtime),
34
32
  retireIdle: (runtime) => this.retire(options.sessionId, runtime),
@@ -47,30 +45,27 @@ export class AgentQueryProcesses {
47
45
  return await this.#startRetained(options);
48
46
  });
49
47
  }
50
- prepare = async (options) => {
48
+ #prepare = async (options) => {
51
49
  const pending = this.#processesByQuery.pending(options.sessionId);
52
50
  if (pending !== undefined) {
53
51
  const runtime = await waitForSharedOperation(pending, options.signal);
54
52
  if (runtime.belongsTo(options.agent.id, options.cwd, options.additionalDirectories)) {
55
53
  this.#processesByQuery.touch(options.sessionId, runtime);
56
- return runtime.prepared();
54
+ return runtime.capabilities();
57
55
  }
58
- return await this.prepare(options);
56
+ return await this.#prepare(options);
59
57
  }
60
58
  const existing = this.#processesByQuery.get(options.sessionId);
61
59
  if (existing !== undefined) {
62
60
  if (existing.belongsTo(options.agent.id, options.cwd, options.additionalDirectories)) {
63
61
  this.#processesByQuery.touch(options.sessionId, existing);
64
- return existing.prepared();
65
- }
66
- if (!existing.canRebind()) {
67
- throw new AcpExecutionError("The agent or workspace cannot change after a conversation has started", {}, "session_identity_mismatch");
62
+ return existing.capabilities();
68
63
  }
69
64
  const runtime = await this.#replacePreparation(existing, options);
70
- return runtime.prepared();
65
+ return runtime.capabilities();
71
66
  }
72
67
  const runtime = await this.#startPreparation(options);
73
- return runtime.prepared();
68
+ return runtime.capabilities();
74
69
  };
75
70
  async #ensure(options) {
76
71
  const existing = this.#processesByQuery.get(options.sessionId);
@@ -81,31 +76,31 @@ export class AgentQueryProcesses {
81
76
  this.#processesByQuery.touch(options.sessionId, existing);
82
77
  return existing;
83
78
  }
84
- await this.prepare(options);
79
+ await this.#prepare(options);
85
80
  const started = this.#processesByQuery.get(options.sessionId);
86
81
  if (started === undefined) {
87
82
  throw new AcpExecutionError("ACP native session browser did not start");
88
83
  }
89
84
  return started;
90
85
  }
91
- use = async (options, operation) => await this.#processesByQuery.use(options.sessionId, async () => await operation(await this.#ensure(options)));
92
- previewEvents = async (options, nativeSessionId, eventLimit, cursor) => {
86
+ #use = async (options, operation) => await this.#processesByQuery.use(options.sessionId, async () => await operation(await this.#ensure(options)));
87
+ capabilities = async (query) => await this.#prepare(query);
88
+ listNativeSessions = async (query, cursor) => await this.#use(query, async (runtime) => await runtime.listNativeSessions(cursor, query.signal));
89
+ previewSessionEvents = async (options, request) => {
90
+ const { nativeSessionId, eventLimit, cursor } = request;
93
91
  if (cursor !== null) {
94
92
  const preview = this.#eventPreviewsBySession.get(options.sessionId);
95
93
  if (preview === undefined || preview.nativeSessionId !== nativeSessionId) {
96
94
  throw new Error("The native event cursor is invalid");
97
95
  }
98
- return preview.store.events.page(options.sessionId, eventLimit, cursor);
96
+ return preview.store.page(options.sessionId, eventLimit, cursor);
99
97
  }
100
- const store = new MemorySessionStore();
98
+ const store = new MemorySessionEventStore();
101
99
  const previous = this.#eventPreviewsBySession.get(options.sessionId);
102
100
  previous?.store.close();
103
101
  this.#eventPreviewsBySession.set(options.sessionId, { nativeSessionId, store });
104
102
  try {
105
- return await this.#processes.runTransient(options.signal, async () => await AgentSession.startNativeSessionBrowser(options, () => this.#observer, store, this.#contentExternalizer), async (runtime) => {
106
- runtime.selectNativeSession(nativeSessionId);
107
- return await runtime.loadHistoryEvents(eventLimit, null, options.signal);
108
- }, async (runtime) => await runtime.closeProcess());
103
+ return await this.#processes.runTransient(options.signal, async () => await AcpQuerySession.start(options, store, this.#connector), async (runtime) => await runtime.previewEvents(nativeSessionId, eventLimit, options.signal), async (runtime) => await runtime.closeProcess());
109
104
  }
110
105
  catch (error) {
111
106
  if (this.#eventPreviewsBySession.get(options.sessionId)?.store === store) {
@@ -121,6 +116,7 @@ export class AgentQueryProcesses {
121
116
  preview.store.close();
122
117
  }
123
118
  this.#eventPreviewsBySession.clear();
119
+ this.#store.close();
124
120
  };
125
121
  }
126
- //# sourceMappingURL=agent-query-processes.js.map
122
+ //# sourceMappingURL=query-processes.js.map