@moxt-ai/mobius 0.0.358 → 0.0.360

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 (112) hide show
  1. package/dist/cli.js +943 -495
  2. package/dist/cli.js.map +4 -4
  3. package/dist/engine/acp/adapter/agent-initialization.d.ts +2 -2
  4. package/dist/engine/acp/adapter/agent-initialization.d.ts.map +1 -1
  5. package/dist/engine/acp/adapter/agent-initialization.js.map +1 -1
  6. package/dist/engine/acp/adapter/claude/adapter.d.ts +21 -4
  7. package/dist/engine/acp/adapter/claude/adapter.d.ts.map +1 -1
  8. package/dist/engine/acp/adapter/claude/adapter.js +52 -15
  9. package/dist/engine/acp/adapter/claude/adapter.js.map +1 -1
  10. package/dist/engine/acp/adapter/codex/adapter.d.ts +22 -5
  11. package/dist/engine/acp/adapter/codex/adapter.d.ts.map +1 -1
  12. package/dist/engine/acp/adapter/codex/adapter.js +70 -20
  13. package/dist/engine/acp/adapter/codex/adapter.js.map +1 -1
  14. package/dist/engine/acp/adapter/configuration-changes.d.ts +25 -0
  15. package/dist/engine/acp/adapter/configuration-changes.d.ts.map +1 -0
  16. package/dist/engine/acp/adapter/configuration-changes.js +47 -0
  17. package/dist/engine/acp/adapter/configuration-changes.js.map +1 -0
  18. package/dist/engine/acp/adapter/execution-connections.d.ts +26 -0
  19. package/dist/engine/acp/adapter/execution-connections.d.ts.map +1 -0
  20. package/dist/engine/acp/adapter/{live-sessions.js → execution-connections.js} +92 -24
  21. package/dist/engine/acp/adapter/execution-connections.js.map +1 -0
  22. package/dist/engine/acp/adapter/lifecycle-output.d.ts +10 -0
  23. package/dist/engine/acp/adapter/lifecycle-output.d.ts.map +1 -0
  24. package/dist/engine/acp/adapter/lifecycle-output.js +26 -0
  25. package/dist/engine/acp/adapter/lifecycle-output.js.map +1 -0
  26. package/dist/engine/acp/adapter/native-session-lookup.d.ts +2 -2
  27. package/dist/engine/acp/adapter/native-session-lookup.d.ts.map +1 -1
  28. package/dist/engine/acp/adapter/native-session-lookup.js +4 -4
  29. package/dist/engine/acp/adapter/native-session-lookup.js.map +1 -1
  30. package/dist/engine/acp/adapter/pi/adapter.d.ts +21 -4
  31. package/dist/engine/acp/adapter/pi/adapter.d.ts.map +1 -1
  32. package/dist/engine/acp/adapter/pi/adapter.js +52 -15
  33. package/dist/engine/acp/adapter/pi/adapter.js.map +1 -1
  34. package/dist/engine/acp/adapter/query-processes.d.ts +6 -5
  35. package/dist/engine/acp/adapter/query-processes.d.ts.map +1 -1
  36. package/dist/engine/acp/adapter/query-processes.js +36 -36
  37. package/dist/engine/acp/adapter/query-processes.js.map +1 -1
  38. package/dist/engine/acp/adapter/query-scope.d.ts +8 -0
  39. package/dist/engine/acp/adapter/query-scope.d.ts.map +1 -0
  40. package/dist/engine/acp/adapter/query-scope.js +16 -0
  41. package/dist/engine/acp/adapter/query-scope.js.map +1 -0
  42. package/dist/engine/acp/adapter/query-session.d.ts +3 -4
  43. package/dist/engine/acp/adapter/query-session.d.ts.map +1 -1
  44. package/dist/engine/acp/adapter/query-session.js +26 -31
  45. package/dist/engine/acp/adapter/query-session.js.map +1 -1
  46. package/dist/engine/acp/adapter/session-events.d.ts +34 -6
  47. package/dist/engine/acp/adapter/session-events.d.ts.map +1 -1
  48. package/dist/engine/acp/adapter/session-events.js +95 -3
  49. package/dist/engine/acp/adapter/session-events.js.map +1 -1
  50. package/dist/engine/acp/content/content-externalizer.d.ts +1 -0
  51. package/dist/engine/acp/content/content-externalizer.d.ts.map +1 -1
  52. package/dist/engine/acp/content/content-externalizer.js.map +1 -1
  53. package/dist/engine/acp/harness/codex/borrowed-agent.d.ts.map +1 -1
  54. package/dist/engine/acp/harness/codex/borrowed-agent.js +10 -3
  55. package/dist/engine/acp/harness/codex/borrowed-agent.js.map +1 -1
  56. package/dist/engine/acp/harness/codex/history.js +1 -1
  57. package/dist/engine/acp/harness/codex/history.js.map +1 -1
  58. package/dist/engine/acp/harness/codex/items.js +1 -1
  59. package/dist/engine/acp/harness/codex/owned-agent.d.ts.map +1 -1
  60. package/dist/engine/acp/harness/codex/owned-agent.js +3 -2
  61. package/dist/engine/acp/harness/codex/owned-agent.js.map +1 -1
  62. package/dist/engine/acp/native-history/preview-contract.d.ts +73 -16
  63. package/dist/engine/acp/native-history/preview-contract.d.ts.map +1 -1
  64. package/dist/engine/acp/protocol/session-config-protocol.d.ts +1 -0
  65. package/dist/engine/acp/protocol/session-config-protocol.d.ts.map +1 -1
  66. package/dist/engine/acp/protocol/session-config-protocol.js +1 -1
  67. package/dist/engine/acp/protocol/session-config-protocol.js.map +1 -1
  68. package/dist/engine/agent/runtime-agents.d.ts +4 -1
  69. package/dist/engine/agent/runtime-agents.d.ts.map +1 -1
  70. package/dist/engine/agent/runtime-agents.js +6 -4
  71. package/dist/engine/agent/runtime-agents.js.map +1 -1
  72. package/dist/engine/runtime/run.d.ts.map +1 -1
  73. package/dist/engine/runtime/run.js +6 -2
  74. package/dist/engine/runtime/run.js.map +1 -1
  75. package/dist/engine/session/api/session-api.d.ts +3 -0
  76. package/dist/engine/session/api/session-api.d.ts.map +1 -1
  77. package/dist/engine/session/api/session-api.js.map +1 -1
  78. package/dist/engine/session/live/agent-session-restore.d.ts +6 -16
  79. package/dist/engine/session/live/agent-session-restore.d.ts.map +1 -1
  80. package/dist/engine/session/live/agent-session.d.ts +7 -14
  81. package/dist/engine/session/live/agent-session.d.ts.map +1 -1
  82. package/dist/engine/session/live/agent-session.js +108 -87
  83. package/dist/engine/session/live/agent-session.js.map +1 -1
  84. package/dist/engine/session/live/session-restore.d.ts.map +1 -1
  85. package/dist/engine/session/live/session-restore.js +12 -35
  86. package/dist/engine/session/live/session-restore.js.map +1 -1
  87. package/dist/engine/session/manager/session-manager.d.ts.map +1 -1
  88. package/dist/engine/session/manager/session-manager.js +13 -5
  89. package/dist/engine/session/manager/session-manager.js.map +1 -1
  90. package/dist/engine/session/native/native-query.d.ts +5 -0
  91. package/dist/engine/session/native/native-query.d.ts.map +1 -0
  92. package/dist/engine/session/native/native-query.js +14 -0
  93. package/dist/engine/session/native/native-query.js.map +1 -0
  94. package/dist/engine/session/native/native-session-browser.d.ts.map +1 -1
  95. package/dist/engine/session/native/native-session-browser.js +27 -16
  96. package/dist/engine/session/native/native-session-browser.js.map +1 -1
  97. package/dist/engine/session/process/retained-agent-processes.d.ts +10 -10
  98. package/dist/engine/session/process/retained-agent-processes.d.ts.map +1 -1
  99. package/dist/engine/session/process/retained-agent-processes.js.map +1 -1
  100. package/dist/engine/session/prompt/execute-prompt.d.ts.map +1 -1
  101. package/dist/engine/session/prompt/execute-prompt.js +4 -1
  102. package/dist/engine/session/prompt/execute-prompt.js.map +1 -1
  103. package/dist/engine/util/branded-type.d.ts +4 -0
  104. package/dist/engine/util/branded-type.d.ts.map +1 -0
  105. package/dist/engine/util/branded-type.js +2 -0
  106. package/dist/engine/util/branded-type.js.map +1 -0
  107. package/dist/engine.js +882 -476
  108. package/dist/engine.js.map +4 -4
  109. package/package.json +2 -2
  110. package/dist/engine/acp/adapter/live-sessions.d.ts +0 -26
  111. package/dist/engine/acp/adapter/live-sessions.d.ts.map +0 -1
  112. package/dist/engine/acp/adapter/live-sessions.js.map +0 -1
@@ -1,7 +1,7 @@
1
- import { randomUUID } from "node:crypto";
2
1
  import { MemorySessionEventStore } from "../../session/history/session-event-store.js";
3
2
  import { waitForSharedOperation } from "../../session/manager/operation-drain.js";
4
3
  import { RetainedAgentProcesses } from "../../session/process/retained-agent-processes.js";
4
+ import { nativeSessionPreviewKey, nativeSessionQueryKey, } from "./query-scope.js";
5
5
  import { AcpQuerySession } from "./query-session.js";
6
6
  /** Owns workspace-scoped readers, independently of execution conversations. */
7
7
  export class AgentQueryProcesses {
@@ -19,8 +19,8 @@ export class AgentQueryProcesses {
19
19
  refreshAgent = (agent) => {
20
20
  this.#agent = agent;
21
21
  };
22
- retire = async (readers, cwd, runtime) => {
23
- readers.detach(cwd, runtime);
22
+ retire = async (readers, key, runtime) => {
23
+ readers.detach(key, runtime);
24
24
  try {
25
25
  await this.#processes.retire(runtime, () => runtime.closeProcess());
26
26
  }
@@ -28,35 +28,35 @@ export class AgentQueryProcesses {
28
28
  runtime.discardEvents();
29
29
  }
30
30
  };
31
- async #ensure(agent, readers, cwd, signal) {
32
- signal.throwIfAborted();
33
- const pending = readers.pending(cwd);
31
+ async #ensure(readers, query) {
32
+ query.signal.throwIfAborted();
33
+ const key = nativeSessionQueryKey(query);
34
+ const pending = readers.pending(key);
34
35
  if (pending !== undefined) {
35
- return await waitForSharedOperation(pending, signal);
36
+ return await waitForSharedOperation(pending, query.signal);
36
37
  }
37
- const existing = readers.get(cwd);
38
+ const existing = readers.get(key);
38
39
  if (existing !== undefined && !existing.hasTerminated()) {
39
- readers.touch(cwd, existing);
40
+ readers.touch(key, existing);
40
41
  return existing;
41
42
  }
42
- return await readers.prepare(cwd, async () => {
43
+ return await readers.prepare(key, async () => {
43
44
  if (existing !== undefined) {
44
- await this.retire(readers, cwd, existing);
45
+ await this.retire(readers, key, existing);
45
46
  }
46
- // This ID belongs to the reader, never to a user's conversation.
47
- const readerId = randomUUID();
48
- const runtime = await this.#processes.startRetained(signal, () => AcpQuerySession.start(agent, cwd, readerId, this.#store, this.#connector, signal), {
49
- isBusy: () => readers.isBusy(cwd),
50
- retire: (runtime) => this.retire(readers, cwd, runtime),
51
- retireIdle: (runtime) => this.retire(readers, cwd, runtime),
47
+ const runtime = await this.#processes.startRetained(query.signal, () => AcpQuerySession.start(query, this.#store, this.#connector), {
48
+ isBusy: () => readers.isBusy(key),
49
+ retire: (runtime) => this.retire(readers, key, runtime),
50
+ retireIdle: (runtime) => this.retire(readers, key, runtime),
52
51
  });
53
- readers.retain(cwd, runtime);
52
+ readers.retain(key, runtime);
54
53
  return runtime;
55
54
  });
56
55
  }
57
- #use = async (cwd, signal, operation) => {
58
- // Capture one immutable definition for this operation, including while it waits for capacity.
56
+ #use = async (query, operation) => {
57
+ // Capture one immutable catalog definition while waiting for capacity.
59
58
  const agent = this.#agent;
59
+ const scoped = { ...query, agent };
60
60
  let readers = this.#processesByAgent.get(agent);
61
61
  if (readers === undefined) {
62
62
  readers = new RetainedAgentProcesses({
@@ -66,38 +66,38 @@ export class AgentQueryProcesses {
66
66
  this.#processesByAgent.set(agent, readers);
67
67
  }
68
68
  const current = readers;
69
- return await current.use(cwd, async () => await operation(await this.#ensure(agent, current, cwd, signal)));
69
+ return await current.use(nativeSessionQueryKey(scoped), async () => await operation(await this.#ensure(current, scoped)));
70
70
  };
71
- capabilities = async (cwd, signal) => await this.#use(cwd, signal, async (runtime) => runtime.capabilities());
72
- listNativeSessions = async (cwd, cursor, signal) => await this.#use(cwd, signal, async (runtime) => await runtime.listNativeSessions(cursor, signal));
73
- previewSessionEvents = async (cwd, additionalDirectories, request, signal) => {
74
- signal.throwIfAborted();
75
- const agent = this.#agent;
76
- const { nativeSessionId, eventLimit, cursor, sessionId } = request;
71
+ capabilities = async (query) => await this.#use(query, async (runtime) => runtime.capabilities());
72
+ listNativeSessions = async (query, cursor) => await this.#use(query, async (runtime) => await runtime.listNativeSessions(cursor, query.signal));
73
+ previewSessionEvents = async (query, request) => {
74
+ query.signal.throwIfAborted();
75
+ const scoped = { ...query, agent: this.#agent };
76
+ const { nativeSessionId, eventLimit, cursor } = request;
77
+ const key = nativeSessionPreviewKey(nativeSessionQueryKey(scoped), nativeSessionId);
77
78
  if (cursor !== null) {
78
- const preview = this.#eventPreviewsBySession.get(sessionId);
79
+ const preview = this.#eventPreviewsBySession.get(key);
79
80
  if (preview === undefined || preview.nativeSessionId !== nativeSessionId) {
80
81
  throw new Error("The native event cursor is invalid");
81
82
  }
82
- return preview.store.page(sessionId, eventLimit, cursor);
83
+ return preview.store.page(nativeSessionId, eventLimit, cursor);
83
84
  }
84
85
  const store = new MemorySessionEventStore();
85
- const previous = this.#eventPreviewsBySession.get(sessionId);
86
- previous?.store.close();
87
- this.#eventPreviewsBySession.set(sessionId, { nativeSessionId, store });
86
+ this.#eventPreviewsBySession.get(key)?.store.close();
87
+ this.#eventPreviewsBySession.set(key, { nativeSessionId, store });
88
88
  try {
89
- return await this.#processes.runTransient(signal, async () => await AcpQuerySession.start(agent, cwd, sessionId, store, this.#connector, signal), async (runtime) => await runtime.previewEvents(nativeSessionId, eventLimit, additionalDirectories, signal), async (runtime) => await runtime.closeProcess());
89
+ return await this.#processes.runTransient(query.signal, () => AcpQuerySession.start(scoped, store, this.#connector), (runtime) => runtime.previewEvents(nativeSessionId, eventLimit, query.signal), (runtime) => runtime.closeProcess());
90
90
  }
91
91
  catch (error) {
92
- if (this.#eventPreviewsBySession.get(sessionId)?.store === store) {
93
- this.#eventPreviewsBySession.delete(sessionId);
92
+ if (this.#eventPreviewsBySession.get(key)?.store === store) {
93
+ this.#eventPreviewsBySession.delete(key);
94
94
  }
95
95
  store.close();
96
96
  throw error;
97
97
  }
98
98
  };
99
99
  close = async () => {
100
- await Promise.all([...this.#processesByAgent.values()].flatMap((readers) => readers.entries().map(async ([cwd, runtime]) => await this.retire(readers, cwd, runtime))));
100
+ await Promise.all([...this.#processesByAgent.values()].flatMap((readers) => readers.entries().map(async ([key, runtime]) => await this.retire(readers, key, runtime))));
101
101
  this.#processesByAgent.clear();
102
102
  for (const preview of this.#eventPreviewsBySession.values()) {
103
103
  preview.store.close();
@@ -1 +1 @@
1
- {"version":3,"file":"query-processes.js","sourceRoot":"","sources":["../../../../src/engine/acp/adapter/query-processes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"query-processes.js","sourceRoot":"","sources":["../../../../src/engine/acp/adapter/query-processes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { BrandedType } from "../../util/branded-type.ts";
2
+ import type { NativeSessionQuery } from "../native-history/preview-contract.ts";
3
+ export type NativeSessionQueryKey = BrandedType<string, "NativeSessionQueryKey">;
4
+ export type NativeSessionPreviewKey = BrandedType<string, "NativeSessionPreviewKey">;
5
+ /** Query-process identity is native workspace scope, never a product conversation. */
6
+ export declare function nativeSessionQueryKey(query: NativeSessionQuery): NativeSessionQueryKey;
7
+ export declare function nativeSessionPreviewKey(queryKey: NativeSessionQueryKey, nativeSessionId: string): NativeSessionPreviewKey;
8
+ //# sourceMappingURL=query-scope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-scope.d.ts","sourceRoot":"","sources":["../../../../src/engine/acp/adapter/query-scope.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAKhF,MAAM,MAAM,qBAAqB,GAAG,WAAW,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;AACjF,MAAM,MAAM,uBAAuB,GAAG,WAAW,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC;AAErF,sFAAsF;AACtF,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,kBAAkB,GAAG,qBAAqB,CAStF;AAED,wBAAgB,uBAAuB,CACnC,QAAQ,EAAE,qBAAqB,EAC/B,eAAe,EAAE,MAAM,GACxB,uBAAuB,CAEzB"}
@@ -0,0 +1,16 @@
1
+ import { z } from "zod";
2
+ const queryKeySchema = z.string().brand();
3
+ const previewKeySchema = z.string().brand();
4
+ /** Query-process identity is native workspace scope, never a product conversation. */
5
+ export function nativeSessionQueryKey(query) {
6
+ return queryKeySchema.parse(JSON.stringify([
7
+ query.agent.id,
8
+ query.cwd,
9
+ query.additionalDirectories,
10
+ Object.entries(query.agent.environment).sort(([left], [right]) => left.localeCompare(right)),
11
+ ]));
12
+ }
13
+ export function nativeSessionPreviewKey(queryKey, nativeSessionId) {
14
+ return previewKeySchema.parse(JSON.stringify([queryKey, nativeSessionId]));
15
+ }
16
+ //# sourceMappingURL=query-scope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-scope.js","sourceRoot":"","sources":["../../../../src/engine/acp/adapter/query-scope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAA2B,CAAC;AACnE,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAA6B,CAAC;AAKvE,sFAAsF;AACtF,MAAM,UAAU,qBAAqB,CAAC,KAAyB;IAC3D,OAAO,cAAc,CAAC,KAAK,CACvB,IAAI,CAAC,SAAS,CAAC;QACX,KAAK,CAAC,KAAK,CAAC,EAAE;QACd,KAAK,CAAC,GAAG;QACT,KAAK,CAAC,qBAAqB;QAC3B,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;KAC/F,CAAC,CACL,CAAC;AACN,CAAC;AAED,MAAM,UAAU,uBAAuB,CACnC,QAA+B,EAC/B,eAAuB;IAEvB,OAAO,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;AAC/E,CAAC"}
@@ -1,17 +1,16 @@
1
1
  import type { SessionCapabilities } from "@moxt-ai/mobius-sdk/protocol";
2
- import type { AcpAgentDefinition } from "../agent/agent-definition.ts";
3
- import type { SessionEventPage, SessionEventStore } from "../native-history/preview-contract.ts";
2
+ import type { NativeSessionQuery, SessionEventPage, SessionEventStore } from "../native-history/preview-contract.ts";
4
3
  import { type NativeSessionPage } from "../protocol/native-session.ts";
5
4
  import type { AcpSessionConnector } from "./session-events.ts";
6
5
  /** Adapter-owned ACP reader. It has neither a live observer nor interactive-session state. */
7
6
  export declare class AcpQuerySession {
8
7
  #private;
9
8
  private constructor();
10
- static readonly start: (agent: AcpAgentDefinition, cwd: string, sessionId: string, events: SessionEventStore, connector: AcpSessionConnector, signal: AbortSignal) => Promise<AcpQuerySession>;
9
+ static readonly start: (options: NativeSessionQuery, events: SessionEventStore, connector: AcpSessionConnector) => Promise<AcpQuerySession>;
11
10
  readonly capabilities: () => SessionCapabilities;
12
11
  readonly hasTerminated: () => boolean;
13
12
  readonly listNativeSessions: (cursor: string | null, signal: AbortSignal) => Promise<NativeSessionPage>;
14
- readonly previewEvents: (nativeSessionId: string, eventLimit: number, additionalDirectories: readonly string[], signal: AbortSignal) => Promise<SessionEventPage>;
13
+ readonly previewEvents: (nativeSessionId: string, eventLimit: number, signal: AbortSignal) => Promise<SessionEventPage>;
15
14
  readonly closeProcess: () => Promise<void>;
16
15
  readonly discardEvents: () => void;
17
16
  }
@@ -1 +1 @@
1
- {"version":3,"file":"query-session.d.ts","sourceRoot":"","sources":["../../../../src/engine/acp/adapter/query-session.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAuB,MAAM,8BAA8B,CAAC;AAE7F,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AACjG,OAAO,EAAE,KAAK,iBAAiB,EAA2B,MAAM,+BAA+B,CAAC;AAOhG,OAAO,KAAK,EAAE,mBAAmB,EAA4B,MAAM,qBAAqB,CAAC;AAEzF,8FAA8F;AAC9F,qBAAa,eAAe;;IASxB,OAAO,eAyBN;IAED,MAAM,CAAC,QAAQ,CAAC,KAAK,UACV,kBAAkB,OACpB,MAAM,aACA,MAAM,UACT,iBAAiB,aACd,mBAAmB,UACtB,WAAW,KACpB,OAAO,CAAC,eAAe,CAAC,CA2BzB;IAEF,QAAQ,CAAC,YAAY,QAAO,mBAAmB,CAAuB;IACtE,QAAQ,CAAC,aAAa,QAAO,OAAO,CAWlC;IACF,QAAQ,CAAC,kBAAkB,WAAkB,MAAM,GAAG,IAAI,UAAU,WAAW,KAAG,OAAO,CAAC,iBAAiB,CAAC,CAwB1G;IAEF,QAAQ,CAAC,aAAa,oBACD,MAAM,cACX,MAAM,yBACK,SAAS,MAAM,EAAE,UAChC,WAAW,KACpB,OAAO,CAAC,gBAAgB,CAAC,CA2B1B;IAEF,QAAQ,CAAC,YAAY,QAAa,OAAO,CAAC,IAAI,CAAC,CAA0C;IACzF,QAAQ,CAAC,aAAa,QAAO,IAAI,CAAyC;CAC7E"}
1
+ {"version":3,"file":"query-session.d.ts","sourceRoot":"","sources":["../../../../src/engine/acp/adapter/query-session.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAExE,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AACrH,OAAO,EAAE,KAAK,iBAAiB,EAA2B,MAAM,+BAA+B,CAAC;AAEhG,OAAO,KAAK,EAAE,mBAAmB,EAA4B,MAAM,qBAAqB,CAAC;AAEzF,8FAA8F;AAC9F,qBAAa,eAAe;;IAOxB,OAAO,eAcN;IAED,MAAM,CAAC,QAAQ,CAAC,KAAK,YACR,kBAAkB,UACnB,iBAAiB,aACd,mBAAmB,KAC/B,OAAO,CAAC,eAAe,CAAC,CAsBzB;IAEF,QAAQ,CAAC,YAAY,QAAO,mBAAmB,CAA6C;IAC5F,QAAQ,CAAC,aAAa,QAAO,OAAO,CAWlC;IACF,QAAQ,CAAC,kBAAkB,WAAkB,MAAM,GAAG,IAAI,UAAU,WAAW,KAAG,OAAO,CAAC,iBAAiB,CAAC,CAwB1G;IAEF,QAAQ,CAAC,aAAa,oBACD,MAAM,cACX,MAAM,UACV,WAAW,KACpB,OAAO,CAAC,gBAAgB,CAAC,CA8B1B;IAEF,QAAQ,CAAC,YAAY,QAAa,OAAO,CAAC,IAAI,CAAC,CAA0C;IACzF,QAAQ,CAAC,aAAa,QAAO,IAAI,CAA0C;CAC9E"}
@@ -1,44 +1,36 @@
1
1
  import { methods } from "@agentclientprotocol/sdk";
2
2
  import { AcpExecutionError } from "../acp-error.js";
3
3
  import { nativeSessionPageSchema } from "../protocol/native-session.js";
4
- import { unsupportedSessionCapabilities } from "../protocol/session-capabilities.js";
5
- import { initializeAgentConnection, RetryableAcpInitializationError, validateAgentRuntime, } from "./agent-initialization.js";
4
+ import { RetryableAcpInitializationError, validateAgentRuntime } from "./agent-initialization.js";
6
5
  /** Adapter-owned ACP reader. It has neither a live observer nor interactive-session state. */
7
6
  export class AcpQuerySession {
8
- #cwd;
9
- #sessionId;
7
+ #options;
10
8
  #events;
11
9
  #connection;
12
10
  #lifecycle = { kind: "open" };
13
- #capabilities = unsupportedSessionCapabilities();
14
- #configOptions = [];
15
- constructor(agent, cwd, sessionId, events, connector) {
16
- this.#cwd = cwd;
17
- this.#sessionId = sessionId;
11
+ #eventScope = crypto.randomUUID();
12
+ constructor(options, events, connector) {
13
+ this.#options = options;
18
14
  this.#events = events;
19
15
  this.#connection = connector.connectQuerySession({
20
- agent,
21
- cwd,
22
- sessionId: () => sessionId,
23
- configOptions: () => this.#configOptions,
16
+ agent: options.agent,
17
+ cwd: options.cwd,
18
+ ...(options.externalizeUpdate === undefined ? {} : { externalizeUpdate: options.externalizeUpdate }),
24
19
  onEvent: async (event) => {
25
- this.#events.append(sessionId, { type: "acp", payload: event.payload });
26
- if (event.kind === "configuration") {
27
- this.#configOptions = event.configOptions;
28
- }
20
+ this.#events.append(this.#eventScope, { type: "acp", payload: event.payload });
29
21
  },
30
22
  });
31
23
  void this.#connection.termination.then(() => {
32
24
  this.#lifecycle = { kind: "terminated" };
33
25
  });
34
26
  }
35
- static start = async (agent, cwd, sessionId, events, connector, signal) => {
27
+ static start = async (options, events, connector) => {
28
+ const { agent, signal } = options;
36
29
  for (let attempt = 1; attempt <= 2; attempt += 1) {
37
30
  await validateAgentRuntime(agent, signal);
38
- const runtime = new AcpQuerySession(agent, cwd, sessionId, events, connector);
31
+ const runtime = new AcpQuerySession(options, events, connector);
39
32
  try {
40
- const initialized = await initializeAgentConnection(runtime.#connection, agent.id, agent.agentVersion, signal);
41
- runtime.#capabilities = initialized.capabilities;
33
+ await runtime.#connection.initializeAgent(options.signal);
42
34
  return runtime;
43
35
  }
44
36
  catch (error) {
@@ -56,7 +48,7 @@ export class AcpQuerySession {
56
48
  }
57
49
  throw new AcpExecutionError("ACP agent initialization failed");
58
50
  };
59
- capabilities = () => this.#capabilities;
51
+ capabilities = () => this.#connection.snapshot().capabilities;
60
52
  hasTerminated = () => {
61
53
  switch (this.#lifecycle.kind) {
62
54
  case "open":
@@ -70,7 +62,7 @@ export class AcpQuerySession {
70
62
  }
71
63
  };
72
64
  listNativeSessions = async (cursor, signal) => {
73
- if (!this.#capabilities.listSessions) {
65
+ if (!this.capabilities().listSessions) {
74
66
  throw new AcpExecutionError("This Agent does not support native session listing", {}, "native_session_unsupported");
75
67
  }
76
68
  const response = await this.#connection.race(this.#connection.connection.agent.request(methods.agent.session.list, cursor === null ? {} : { cursor }, {
@@ -82,23 +74,26 @@ export class AcpQuerySession {
82
74
  }
83
75
  return decoded.data;
84
76
  };
85
- previewEvents = async (nativeSessionId, eventLimit, additionalDirectories, signal) => {
86
- if (!this.#capabilities.loadSession) {
77
+ previewEvents = async (nativeSessionId, eventLimit, signal) => {
78
+ if (!this.capabilities().loadSession) {
87
79
  throw new AcpExecutionError("This Agent restores context but does not provide message history.", {}, "native_history_unsupported");
88
80
  }
89
- this.#events.reset(this.#sessionId);
81
+ this.#eventScope = nativeSessionId;
82
+ this.#events.reset(nativeSessionId);
90
83
  this.#connection.events.select(nativeSessionId);
91
- await this.#connection.race(this.#connection.connection.agent.request(methods.agent.session.load, {
92
- additionalDirectories: [...additionalDirectories],
93
- cwd: this.#cwd,
84
+ this.#connection.beginStateChange();
85
+ const response = await this.#connection.race(this.#connection.connection.agent.request(methods.agent.session.load, {
86
+ additionalDirectories: [...this.#options.additionalDirectories],
87
+ cwd: this.#options.cwd,
94
88
  mcpServers: [],
95
89
  sessionId: nativeSessionId,
96
90
  }, { cancellationSignal: signal }), "ACP agent exited while loading history", signal);
97
91
  await this.#connection.events.drained();
98
92
  signal.throwIfAborted();
99
- return this.#events.page(this.#sessionId, eventLimit, null);
93
+ this.#connection.commitLifecycle(response);
94
+ return this.#events.page(nativeSessionId, eventLimit, null);
100
95
  };
101
96
  closeProcess = async () => await this.#connection.closeProcess();
102
- discardEvents = () => this.#events.remove(this.#sessionId);
97
+ discardEvents = () => this.#events.remove(this.#eventScope);
103
98
  }
104
99
  //# sourceMappingURL=query-session.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"query-session.js","sourceRoot":"","sources":["../../../../src/engine/acp/adapter/query-session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"query-session.js","sourceRoot":"","sources":["../../../../src/engine/acp/adapter/query-session.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@ import type { AcpAgentDefinition } from "../agent/agent-definition.ts";
3
3
  import type { BackgroundActivity } from "../agent/in-process-endpoint.ts";
4
4
  import { AgentUpdateStream } from "../connection/agent-update-stream.ts";
5
5
  import type { AcpClientHandler } from "../connection/create-client.ts";
6
- import type { AcpContentExternalizer } from "../content/content-externalizer.ts";
6
+ import type { AcpContentExternalizer, ExternalizeSessionUpdate } from "../content/content-externalizer.ts";
7
7
  type SessionInfoChange = {
8
8
  readonly kind: "title";
9
9
  readonly value: string;
@@ -35,22 +35,26 @@ export type AdapterSessionEvent = {
35
35
  interface SessionConnectionScope {
36
36
  readonly agent: AcpAgentDefinition;
37
37
  readonly cwd: string;
38
- readonly sessionId: () => string;
39
- readonly configOptions: () => readonly SessionConfigOption[];
38
+ readonly externalizeUpdate?: ExternalizeSessionUpdate;
40
39
  readonly onEvent: (event: AdapterSessionEvent) => Promise<void>;
41
40
  }
42
41
  export interface AdapterSessionConnectionOptions extends SessionConnectionScope {
43
42
  readonly onBackgroundActivity?: (activity: BackgroundActivity) => void;
44
43
  readonly interactions: Pick<AcpClientHandler, "onPermission" | "onElicitation" | "onElicitationComplete">;
45
44
  }
46
- export interface LiveSessionConnectionOptions extends AdapterSessionConnectionOptions {
47
- readonly additionalDirectories: readonly string[];
48
- readonly capabilities: () => SessionCapabilities;
45
+ export interface AdapterSessionSubscriber {
46
+ readonly onSessionEvent: (nativeSessionId: string, event: AdapterSessionEvent) => Promise<void>;
47
+ readonly onBackgroundActivity?: (activity: BackgroundActivity) => void;
48
+ readonly interactions: AdapterSessionConnectionOptions["interactions"];
49
49
  }
50
50
  /** Internal execution port shared by the live session and adapter-owned history capture. */
51
51
  export interface AdapterSessionConnector {
52
52
  readonly connectSession: (options: AdapterSessionConnectionOptions) => AdapterSessionConnection;
53
53
  }
54
+ export interface AdapterSessionSnapshot {
55
+ readonly capabilities: SessionCapabilities;
56
+ readonly configOptions: readonly SessionConfigOption[];
57
+ }
54
58
  /** ACP subscription lifetime, ordered delivery and harness normalization belong to the adapter. */
55
59
  export declare class AdapterSessionConnection {
56
60
  #private;
@@ -59,7 +63,31 @@ export declare class AdapterSessionConnection {
59
63
  constructor(options: AdapterSessionConnectionOptions, externalizer: Pick<AcpContentExternalizer, "update">, normalizeEvent: (event: unknown) => unknown, onClosed?: () => void);
60
64
  get connection(): import("@agentclientprotocol/sdk").ClientConnection;
61
65
  get termination(): Promise<import("../agent/in-process-endpoint.ts").AcpEndpointTermination>;
66
+ readonly snapshot: () => AdapterSessionSnapshot;
67
+ readonly beginStateChange: () => void;
68
+ readonly cancelStateChange: () => void;
69
+ readonly commitConfiguration: (options: readonly SessionConfigOption[]) => readonly SessionConfigOption[];
70
+ readonly commitLifecycle: (response: unknown) => AdapterSessionSnapshot;
62
71
  readonly initialize: (signal: AbortSignal) => Promise<void>;
72
+ readonly initializeAgent: (signal: AbortSignal) => Promise<{
73
+ capabilities: Readonly<{
74
+ additionalDirectories: boolean;
75
+ audioPrompt: boolean;
76
+ closeSession: boolean;
77
+ deleteSession: boolean;
78
+ embeddedContextPrompt: boolean;
79
+ imagePrompt: boolean;
80
+ listSessions: boolean;
81
+ loadSession: boolean;
82
+ promptQueueing: boolean;
83
+ renameSession: boolean;
84
+ resumeSession: boolean;
85
+ steering: boolean;
86
+ unstableForkSession: boolean;
87
+ }>;
88
+ agentName: string;
89
+ agentVersion: string;
90
+ }>;
63
91
  readonly agentSettingsModelEffort: () => Readonly<{
64
92
  effortSettingId: string;
65
93
  modelSettingId: string;
@@ -1 +1 @@
1
- {"version":3,"file":"session-events.d.ts","sourceRoot":"","sources":["../../../../src/engine/acp/adapter/session-events.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-events.d.ts","sourceRoot":"","sources":["../../../../src/engine/acp/adapter/session-events.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,10 @@ import { decodeAcpSessionUpdate, } from "@moxt-ai/mobius-sdk/protocol";
3
3
  import { truncate } from "../../util/value-utils.js";
4
4
  import { AcpExecutionError } from "../acp-error.js";
5
5
  import { AgentUpdateStream } from "../connection/agent-update-stream.js";
6
+ import { restrictAcpSessionCapabilities } from "../protocol/session-capabilities.js";
6
7
  import { sessionConfigProtocolForAgent } from "../protocol/session-config-protocol.js";
8
+ import { initializeAgentConnection } from "./agent-initialization.js";
9
+ import { applyConfigurationChanges, applyConfigurationMode, recordConfigurationMode, recordConfigurationOptions, } from "./configuration-changes.js";
7
10
  /** ACP subscription lifetime, ordered delivery and harness normalization belong to the adapter. */
8
11
  export class AdapterSessionConnection {
9
12
  #connection;
@@ -13,18 +16,25 @@ export class AdapterSessionConnection {
13
16
  #updates;
14
17
  #lifetime = new AbortController();
15
18
  #onClosed;
19
+ #agent;
20
+ #state = { kind: "uninitialized" };
21
+ #initialization = {
22
+ kind: "not-started",
23
+ };
16
24
  events;
17
25
  constructor(options, externalizer, normalizeEvent, onClosed = () => undefined) {
26
+ this.#agent = options.agent;
18
27
  this.#onClosed = onClosed;
19
28
  this.#onBackgroundActivity = options.onBackgroundActivity ?? (() => { });
20
- const protocol = sessionConfigProtocolForAgent(options.agent.id);
21
29
  this.#updates = new AgentUpdateStream(async (notification) => {
22
30
  this.#lifetime.signal.throwIfAborted();
23
31
  if (notification.sessionId !== this.#updates.sessionId()) {
24
32
  throw new AcpExecutionError("ACP agent referenced an unknown session", {}, "invalid_agent_session");
25
33
  }
26
34
  const signal = AbortSignal.any([this.#lifetime.signal, AbortSignal.timeout(30_000)]);
27
- const externalized = await externalizer.update(options.sessionId(), notification.update, signal);
35
+ const externalized = options.externalizeUpdate === undefined
36
+ ? await externalizer.update(notification.sessionId, notification.update, signal)
37
+ : await options.externalizeUpdate(notification.update, signal);
28
38
  signal.throwIfAborted();
29
39
  const update = externalized.agent;
30
40
  for (const eventUpdate of externalized.events) {
@@ -52,13 +62,15 @@ export class AdapterSessionConnection {
52
62
  };
53
63
  break;
54
64
  case "config_option_update":
65
+ this.#applyConfigurationUpdate(update.configOptions);
55
66
  event = {
56
67
  kind: "configuration",
57
68
  payload,
58
- configOptions: protocol.normalizeUpdate(options.configOptions(), update.configOptions),
69
+ configOptions: this.snapshot().configOptions,
59
70
  };
60
71
  break;
61
72
  case "current_mode_update":
73
+ this.#applyModeUpdate(update.currentModeId);
62
74
  event = { kind: "mode", payload, modeId: update.currentModeId };
63
75
  break;
64
76
  case "session_info_update": {
@@ -135,10 +147,90 @@ export class AdapterSessionConnection {
135
147
  get termination() {
136
148
  return this.#connection.termination;
137
149
  }
150
+ #ready = () => {
151
+ const state = this.#state;
152
+ if (state.kind !== "ready") {
153
+ throw new AcpExecutionError("The Agent session is not initialized or has closed", {}, "invalid_agent_session");
154
+ }
155
+ return state;
156
+ };
157
+ snapshot = () => this.#ready().snapshot;
158
+ beginStateChange = () => {
159
+ const state = this.#ready();
160
+ if (state.operation.kind !== "idle") {
161
+ throw new AcpExecutionError("Another session configuration operation is running", {}, "session_busy");
162
+ }
163
+ this.#state = { ...state, operation: { kind: "pending", changes: { kind: "unchanged" } } };
164
+ };
165
+ cancelStateChange = () => {
166
+ if (this.#state.kind === "ready") {
167
+ this.#state = { ...this.#state, operation: { kind: "idle" } };
168
+ }
169
+ };
170
+ commitConfiguration = (options) => {
171
+ const state = this.#ready();
172
+ if (state.operation.kind !== "pending") {
173
+ throw new AcpExecutionError("No session configuration operation is running", {}, "invalid_agent_session");
174
+ }
175
+ const configOptions = applyConfigurationChanges(options, state.operation.changes);
176
+ this.#state = { ...state, snapshot: { ...state.snapshot, configOptions }, operation: { kind: "idle" } };
177
+ return configOptions;
178
+ };
179
+ commitLifecycle = (response) => {
180
+ const state = this.#ready();
181
+ const capabilities = restrictAcpSessionCapabilities(state.snapshot.capabilities, response);
182
+ this.commitConfiguration(sessionConfigProtocolForAgent(this.#agent.id).normalizeLifecycle(response));
183
+ this.#state = { ...this.#ready(), snapshot: { capabilities, configOptions: this.snapshot().configOptions } };
184
+ return this.snapshot();
185
+ };
186
+ #applyConfigurationUpdate = (value) => {
187
+ const state = this.#ready();
188
+ const protocol = sessionConfigProtocolForAgent(this.#agent.id);
189
+ const configOptions = protocol.normalizeUpdate(state.snapshot.configOptions, value);
190
+ const operation = state.operation.kind === "pending"
191
+ ? {
192
+ kind: "pending",
193
+ changes: recordConfigurationOptions(state.operation.changes, protocol.normalizeUpdate([], value)),
194
+ }
195
+ : state.operation;
196
+ this.#state = { ...state, snapshot: { ...state.snapshot, configOptions }, operation };
197
+ };
198
+ #applyModeUpdate = (modeId) => {
199
+ const state = this.#ready();
200
+ const operation = state.operation.kind === "pending"
201
+ ? { kind: "pending", changes: recordConfigurationMode(state.operation.changes, modeId) }
202
+ : state.operation;
203
+ this.#state = {
204
+ ...state,
205
+ snapshot: {
206
+ ...state.snapshot,
207
+ configOptions: applyConfigurationMode(state.snapshot.configOptions, modeId),
208
+ },
209
+ operation,
210
+ };
211
+ };
138
212
  initialize = (signal) => this.#connection.initialize(signal);
213
+ initializeAgent = (signal) => {
214
+ if (this.#initialization.kind === "not-started") {
215
+ this.#initialization = {
216
+ kind: "started",
217
+ result: initializeAgentConnection(this, this.#agent.id, this.#agent.agentVersion, signal).then((agent) => {
218
+ this.#lifetime.signal.throwIfAborted();
219
+ this.#state = {
220
+ kind: "ready",
221
+ snapshot: { capabilities: agent.capabilities, configOptions: [] },
222
+ operation: { kind: "idle" },
223
+ };
224
+ return agent;
225
+ }),
226
+ };
227
+ }
228
+ return this.#initialization.result;
229
+ };
139
230
  agentSettingsModelEffort = () => this.#connection.agentSettingsModelEffort();
140
231
  race = (operation, exitMessage, signal) => this.#connection.race(operation, exitMessage, signal);
141
232
  closeProcess = async () => {
233
+ this.#state = { kind: "closed" };
142
234
  this.#lifetime.abort(new DOMException("The adapter event subscription closed", "AbortError"));
143
235
  try {
144
236
  await this.#connection.closeProcess();