@botiverse/oar 0.0.11 → 0.1.1

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 (159) hide show
  1. package/README.md +2 -2
  2. package/dist/contracts/model-catalog.d.ts +1 -1
  3. package/dist/contracts/model-catalog.js +1 -1
  4. package/dist/contracts/provider-auth.d.ts +2 -2
  5. package/dist/contracts/provider-auth.js +2 -2
  6. package/dist/contracts/records.d.ts +214 -0
  7. package/dist/contracts/records.d.ts.map +1 -0
  8. package/dist/contracts/records.js +8 -0
  9. package/dist/contracts/records.js.map +1 -0
  10. package/dist/contracts/session.d.ts +93 -144
  11. package/dist/contracts/session.d.ts.map +1 -1
  12. package/dist/index.d.ts +6 -3
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +3 -1
  15. package/dist/index.js.map +1 -1
  16. package/dist/observe/agent-status.d.ts +32 -18
  17. package/dist/observe/agent-status.d.ts.map +1 -1
  18. package/dist/observe/agent-status.js +66 -14
  19. package/dist/observe/agent-status.js.map +1 -1
  20. package/dist/observe/aggregate-events.d.ts +7 -6
  21. package/dist/observe/aggregate-events.d.ts.map +1 -1
  22. package/dist/observe/aggregate-events.js +38 -28
  23. package/dist/observe/aggregate-events.js.map +1 -1
  24. package/dist/observe/index.d.ts +4 -1
  25. package/dist/observe/index.d.ts.map +1 -1
  26. package/dist/observe/index.js +3 -1
  27. package/dist/observe/index.js.map +1 -1
  28. package/dist/observe/observe-agent.d.ts +4 -4
  29. package/dist/observe/observe-agent.d.ts.map +1 -1
  30. package/dist/observe/observe-agent.js +3 -3
  31. package/dist/observe/observe-agent.js.map +1 -1
  32. package/dist/observe/stall-observer.d.ts +7 -6
  33. package/dist/observe/stall-observer.d.ts.map +1 -1
  34. package/dist/observe/stall-observer.js +6 -5
  35. package/dist/observe/stall-observer.js.map +1 -1
  36. package/dist/observe/tool-activity.d.ts +2 -2
  37. package/dist/observe/tool-activity.d.ts.map +1 -1
  38. package/dist/observe/tool-activity.js +1 -1
  39. package/dist/observe/tool-activity.js.map +1 -1
  40. package/dist/observe/turns.d.ts +37 -0
  41. package/dist/observe/turns.d.ts.map +1 -0
  42. package/dist/observe/turns.js +70 -0
  43. package/dist/observe/turns.js.map +1 -0
  44. package/dist/observe/usage.d.ts +15 -0
  45. package/dist/observe/usage.d.ts.map +1 -0
  46. package/dist/observe/usage.js +94 -0
  47. package/dist/observe/usage.js.map +1 -0
  48. package/dist/runtimes/claude/account-usage.js +1 -1
  49. package/dist/runtimes/claude/context-usage.d.ts +1 -1
  50. package/dist/runtimes/claude/context-usage.js +1 -1
  51. package/dist/runtimes/claude/projection.d.ts +40 -27
  52. package/dist/runtimes/claude/projection.d.ts.map +1 -1
  53. package/dist/runtimes/claude/projection.js +110 -23
  54. package/dist/runtimes/claude/projection.js.map +1 -1
  55. package/dist/runtimes/claude/session.d.ts.map +1 -1
  56. package/dist/runtimes/claude/session.js +120 -87
  57. package/dist/runtimes/claude/session.js.map +1 -1
  58. package/dist/runtimes/codex/app-server-client.d.ts +38 -3
  59. package/dist/runtimes/codex/app-server-client.d.ts.map +1 -1
  60. package/dist/runtimes/codex/app-server-client.js +62 -15
  61. package/dist/runtimes/codex/app-server-client.js.map +1 -1
  62. package/dist/runtimes/codex/projection.d.ts +12 -12
  63. package/dist/runtimes/codex/projection.d.ts.map +1 -1
  64. package/dist/runtimes/codex/projection.js +111 -40
  65. package/dist/runtimes/codex/projection.js.map +1 -1
  66. package/dist/runtimes/codex/rpc-control.d.ts +31 -0
  67. package/dist/runtimes/codex/rpc-control.d.ts.map +1 -0
  68. package/dist/runtimes/codex/rpc-control.js +51 -0
  69. package/dist/runtimes/codex/rpc-control.js.map +1 -0
  70. package/dist/runtimes/codex/session.d.ts.map +1 -1
  71. package/dist/runtimes/codex/session.js +199 -149
  72. package/dist/runtimes/codex/session.js.map +1 -1
  73. package/dist/runtimes/grok/session.d.ts +37 -1
  74. package/dist/runtimes/grok/session.d.ts.map +1 -1
  75. package/dist/runtimes/grok/session.js +74 -0
  76. package/dist/runtimes/grok/session.js.map +1 -1
  77. package/dist/runtimes/kimi/session.d.ts.map +1 -1
  78. package/dist/runtimes/kimi/session.js +5 -0
  79. package/dist/runtimes/kimi/session.js.map +1 -1
  80. package/dist/runtimes/pi/auth.d.ts.map +1 -1
  81. package/dist/runtimes/pi/auth.js +6 -1
  82. package/dist/runtimes/pi/auth.js.map +1 -1
  83. package/dist/runtimes/pi/catalog.d.ts.map +1 -1
  84. package/dist/runtimes/pi/catalog.js +6 -1
  85. package/dist/runtimes/pi/catalog.js.map +1 -1
  86. package/dist/runtimes/pi/http.d.ts +34 -0
  87. package/dist/runtimes/pi/http.d.ts.map +1 -0
  88. package/dist/runtimes/pi/http.js +95 -0
  89. package/dist/runtimes/pi/http.js.map +1 -0
  90. package/dist/runtimes/pi/list-models.d.ts.map +1 -1
  91. package/dist/runtimes/pi/list-models.js +10 -3
  92. package/dist/runtimes/pi/list-models.js.map +1 -1
  93. package/dist/runtimes/pi/open.d.ts +32 -0
  94. package/dist/runtimes/pi/open.d.ts.map +1 -0
  95. package/dist/runtimes/pi/open.js +106 -0
  96. package/dist/runtimes/pi/open.js.map +1 -0
  97. package/dist/runtimes/pi/projection.d.ts +27 -25
  98. package/dist/runtimes/pi/projection.d.ts.map +1 -1
  99. package/dist/runtimes/pi/projection.js +86 -50
  100. package/dist/runtimes/pi/projection.js.map +1 -1
  101. package/dist/runtimes/pi/session.d.ts +1 -22
  102. package/dist/runtimes/pi/session.d.ts.map +1 -1
  103. package/dist/runtimes/pi/session.js +179 -184
  104. package/dist/runtimes/pi/session.js.map +1 -1
  105. package/dist/shared/acp/client-app.d.ts +23 -0
  106. package/dist/shared/acp/client-app.d.ts.map +1 -0
  107. package/dist/shared/acp/client-app.js +55 -0
  108. package/dist/shared/acp/client-app.js.map +1 -0
  109. package/dist/shared/acp/model.d.ts +3 -17
  110. package/dist/shared/acp/model.d.ts.map +1 -1
  111. package/dist/shared/acp/model.js +3 -14
  112. package/dist/shared/acp/model.js.map +1 -1
  113. package/dist/shared/acp/profile.d.ts +32 -7
  114. package/dist/shared/acp/profile.d.ts.map +1 -1
  115. package/dist/shared/acp/profile.js +17 -8
  116. package/dist/shared/acp/profile.js.map +1 -1
  117. package/dist/shared/acp/projection.d.ts +16 -8
  118. package/dist/shared/acp/projection.d.ts.map +1 -1
  119. package/dist/shared/acp/projection.js +59 -32
  120. package/dist/shared/acp/projection.js.map +1 -1
  121. package/dist/shared/acp/records.d.ts +46 -0
  122. package/dist/shared/acp/records.d.ts.map +1 -0
  123. package/dist/shared/acp/records.js +125 -0
  124. package/dist/shared/acp/records.js.map +1 -0
  125. package/dist/shared/acp/session.d.ts.map +1 -1
  126. package/dist/shared/acp/session.js +98 -224
  127. package/dist/shared/acp/session.js.map +1 -1
  128. package/dist/shared/acp/terminal.d.ts +1 -3
  129. package/dist/shared/acp/terminal.d.ts.map +1 -1
  130. package/dist/shared/acp/terminal.js +1 -21
  131. package/dist/shared/acp/terminal.js.map +1 -1
  132. package/dist/shared/acp/turns.d.ts +45 -0
  133. package/dist/shared/acp/turns.d.ts.map +1 -0
  134. package/dist/shared/acp/turns.js +160 -0
  135. package/dist/shared/acp/turns.js.map +1 -0
  136. package/dist/shared/acp/usage-wait.d.ts +6 -6
  137. package/dist/shared/acp/usage-wait.d.ts.map +1 -1
  138. package/dist/shared/acp/usage-wait.js +2 -2
  139. package/dist/shared/acp/usage-wait.js.map +1 -1
  140. package/dist/shared/failure-class.d.ts +1 -1
  141. package/dist/shared/failure-class.js +2 -2
  142. package/dist/shared/failure-class.js.map +1 -1
  143. package/dist/shared/seal-session.d.ts +5 -3
  144. package/dist/shared/seal-session.d.ts.map +1 -1
  145. package/dist/shared/seal-session.js +24 -16
  146. package/dist/shared/seal-session.js.map +1 -1
  147. package/dist/shared/session-kernel.d.ts +68 -18
  148. package/dist/shared/session-kernel.d.ts.map +1 -1
  149. package/dist/shared/session-kernel.js +82 -42
  150. package/dist/shared/session-kernel.js.map +1 -1
  151. package/dist/voyage.d.ts +4 -7
  152. package/dist/voyage.d.ts.map +1 -1
  153. package/dist/voyage.js +14 -19
  154. package/dist/voyage.js.map +1 -1
  155. package/package.json +4 -3
  156. package/dist/runtimes/codex/context-usage.d.ts +0 -10
  157. package/dist/runtimes/codex/context-usage.d.ts.map +0 -1
  158. package/dist/runtimes/codex/context-usage.js +0 -16
  159. package/dist/runtimes/codex/context-usage.js.map +0 -1
@@ -14,8 +14,9 @@ import { asRecord, asRecordList } from "../json.js";
14
14
  * back to the default silently) and `session/set_model` answers
15
15
  * `{_meta: {model}}` with the applied id.
16
16
  *
17
- * Null when the frame carries neither: it is the caller's job to keep the
18
- * last reported value, never to substitute the requested one.
17
+ * Null when the frame carries neither. Every such frame is an event
18
+ * record with a `model` view, so `Session.model()` is the latest of them;
19
+ * the request parameter is never consulted.
19
20
  */
20
21
  export function acpReportedModel(frame) {
21
22
  if (frame === null) {
@@ -33,16 +34,4 @@ export function acpReportedModel(frame) {
33
34
  const metaModel = asRecord(frame._meta)?.model;
34
35
  return typeof metaModel === "string" ? metaModel : null;
35
36
  }
36
- export function createAcpModelReadback() {
37
- let model = null;
38
- return {
39
- current: () => model,
40
- observe: (frame) => {
41
- model = acpReportedModel(frame) ?? model;
42
- },
43
- opened: (opened) => {
44
- model = acpReportedModel(opened.setModelResponse ?? null) ?? model ?? acpReportedModel(opened.response);
45
- },
46
- };
47
- }
48
37
  //# sourceMappingURL=model.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"model.js","sourceRoot":"","sources":["../../../src/shared/acp/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAmB,MAAM,YAAY,CAAC;AAGrE;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAwB;IACvD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC;IACvF,IAAI,OAAO,MAAM,EAAE,YAAY,KAAK,QAAQ,EAAE,CAAC;QAC7C,OAAO,MAAM,CAAC,YAAY,CAAC;IAC7B,CAAC;IACD,MAAM,cAAc,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,cAAc,CAAC;IAC9D,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE,CAAC;QACvC,OAAO,cAAc,CAAC;IACxB,CAAC;IACD,iGAAiG;IACjG,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;IAC/C,OAAO,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1D,CAAC;AAgBD,MAAM,UAAU,sBAAsB;IACpC,IAAI,KAAK,GAAkB,IAAI,CAAC;IAChC,OAAO;QACL,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK;QACpB,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACjB,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;QAC3C,CAAC;QACD,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;YACjB,KAAK,GAAG,gBAAgB,CAAC,MAAM,CAAC,gBAAgB,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1G,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../../src/shared/acp/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAmB,MAAM,YAAY,CAAC;AAErE;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAwB;IACvD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC;IACvF,IAAI,OAAO,MAAM,EAAE,YAAY,KAAK,QAAQ,EAAE,CAAC;QAC7C,OAAO,MAAM,CAAC,YAAY,CAAC;IAC7B,CAAC;IACD,MAAM,cAAc,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,cAAc,CAAC;IAC9D,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE,CAAC;QACvC,OAAO,cAAc,CAAC;IACxB,CAAC;IACD,iGAAiG;IACjG,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;IAC/C,OAAO,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1D,CAAC"}
@@ -1,15 +1,23 @@
1
1
  import { type ClientConnection, type SendRequestOptions } from "@agentclientprotocol/sdk";
2
- import type { ContextUsage, SessionOptions, TurnOutcome } from "../../contracts/session.js";
2
+ import type { ContextUsage, SessionCapabilities, SessionOptions, TokenTotals, TurnOutcome } from "../../contracts/session.js";
3
3
  import { type JsonRecord } from "../json.js";
4
4
  import { type AcpProcess } from "./process.js";
5
- export { createAcpModelReadback } from "./model.js";
6
5
  export { createUsageUpdateGate } from "./usage-wait.js";
7
6
  export interface AcpSessionProfile {
8
7
  readonly args: readonly string[] | ((options: SessionOptions) => readonly string[]);
8
+ /** What this runtime's ACP surface lets the adapter carry (docs/spec attribution tier included). */
9
+ readonly capabilities: SessionCapabilities;
9
10
  readonly requestTimeoutMs?: number;
10
11
  readonly abortTimeoutMs?: number;
11
12
  /** Compatibility for agents that put a fully quoted shell line in `command`. */
12
13
  readonly terminalShellCommand?: boolean;
14
+ /**
15
+ * Vendor notification methods beyond `session/update` to subscribe to and
16
+ * record verbatim (child-session lifecycle, background tasks, usage).
17
+ * The SDK routes only registered methods, so a name missing here is a
18
+ * frame oar never sees, so list everything the runtime is known to emit.
19
+ */
20
+ readonly extensionNotifications?: readonly string[];
13
21
  readonly initializeMeta?: (options: SessionOptions) => JsonRecord | undefined;
14
22
  readonly sessionMeta?: (options: SessionOptions) => JsonRecord | undefined;
15
23
  readonly selectAuthMethod?: (initialized: JsonRecord) => string | undefined;
@@ -21,18 +29,26 @@ export interface AcpSessionProfile {
21
29
  readonly options: SessionOptions;
22
30
  readonly requestOptions?: SendRequestOptions;
23
31
  }) => Promise<void>;
24
- /** Return prompt-level extension fields for the runtime's native steer. */
32
+ /** Return prompt-level extension fields for the runtime's native steer; absent when the runtime cannot steer. */
25
33
  readonly steerParams?: (input: string) => JsonRecord;
26
34
  readonly promptContextUsage?: (response: JsonRecord) => ContextUsage | null;
35
+ /**
36
+ * The tokens ONE `session/prompt` answer bills for that prompt alone (grok
37
+ * 1.0.25 `_meta.usage`, live 2026-09-11: a per-prompt ledger summed over
38
+ * the prompt's model calls, not a session total). The turn machinery keeps
39
+ * the running session sum and stamps the cumulative figure on the answer's
40
+ * usage view, so `Session.usage()` is directly summable per its contract.
41
+ */
42
+ readonly promptTokenUsage?: (response: JsonRecord) => TokenTotals | null;
27
43
  readonly promptOutcome?: (response: JsonRecord) => TurnOutcome | null;
28
44
  /**
29
45
  * The agent answers `session/prompt` BEFORE it pushes the turn's
30
46
  * `usage_update` (kimi-code f9ca33376 packages/acp-server/src/session.ts:
31
47
  * `onTurnEnded` resolves the prompt driver, then `void emitUsageUpdate()`
32
- * awaits `listModels` + `getContext` and only then notifies — or skips the
48
+ * awaits `listModels` + `getContext` and only then notifies, or skips the
33
49
  * push when the catalog has no size for the model). When true, the session
34
- * holds the turn open after the response until that update lands, bounded
35
- * by `usageUpdateTimeoutMs`; on timeout it settles with whatever it has.
50
+ * holds the prompt-answer event back until that update lands, bounded by
51
+ * `usageUpdateTimeoutMs`; on timeout it records the answer as-is.
36
52
  */
37
53
  readonly usageUpdateAfterPrompt?: boolean;
38
54
  /** Bound for `usageUpdateAfterPrompt`; default 500 ms. */
@@ -42,11 +58,20 @@ export interface OpenedAcpSession {
42
58
  readonly initialized: JsonRecord;
43
59
  readonly response: JsonRecord;
44
60
  readonly sessionId: string;
61
+ /** Which native call opened the session. */
62
+ readonly openMethod: "session/new" | "session/resume" | "session/load";
63
+ /** The agent advertised `session/close`. */
64
+ readonly supportsClose: boolean;
45
65
  /** The `session/set_model` response, when a model was requested; grok reports the applied model in its `_meta`. */
46
66
  readonly setModelResponse?: JsonRecord;
47
67
  }
68
+ /** Observer for the handshake: every runtime answer, in order, so the adapter can record them as events. */
69
+ export type AcpOpenObserver = (step: {
70
+ readonly method: string;
71
+ readonly response: JsonRecord;
72
+ }) => void;
48
73
  export declare function hasAcpCapability(value: unknown): boolean;
49
74
  export declare function promptAcp(process: AcpProcess, sessionId: string, input: string, extraParams?: JsonRecord): Promise<JsonRecord>;
50
75
  export declare function closeAcpSession(process: AcpProcess, sessionId: string): Promise<void>;
51
- export declare function openAcpSession(process: AcpProcess, profile: AcpSessionProfile, options: SessionOptions): Promise<OpenedAcpSession>;
76
+ export declare function openAcpSession(process: AcpProcess, profile: AcpSessionProfile, options: SessionOptions, observe?: AcpOpenObserver): Promise<OpenedAcpSession>;
52
77
  //# sourceMappingURL=profile.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../../src/shared/acp/profile.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../../src/shared/acp/profile.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,6 @@
2
2
  import { methods, PROTOCOL_VERSION, } from "@agentclientprotocol/sdk";
3
3
  import { asRecord } from "../json.js";
4
4
  import { withAcpDeadline } from "./process.js";
5
- export { createAcpModelReadback } from "./model.js";
6
5
  export { createUsageUpdateGate } from "./usage-wait.js";
7
6
  export function hasAcpCapability(value) {
8
7
  return value === true || asRecord(value) !== null;
@@ -31,7 +30,7 @@ export async function closeAcpSession(process, sessionId) {
31
30
  const method = methods.agent.session.close;
32
31
  await withAcpDeadline(process, method, 2000, (requestOptions) => process.connection.agent.request(method, { sessionId }, requestOptions));
33
32
  }
34
- async function initialize(process, profile, options) {
33
+ async function initialize(process, profile, options, observe) {
35
34
  const meta = profile.initializeMeta?.(options);
36
35
  const method = methods.agent.initialize;
37
36
  const initialized = await withAcpDeadline(process, method, profile.requestTimeoutMs ?? 15_000, (requestOptions) => process.connection.agent.request(method, {
@@ -44,10 +43,12 @@ async function initialize(process, profile, options) {
44
43
  ...(meta === undefined ? {} : { _meta: meta }),
45
44
  }, requestOptions));
46
45
  const response = responseRecord(method, initialized);
46
+ observe({ method, response });
47
47
  const authMethod = profile.selectAuthMethod?.(response);
48
48
  if (authMethod !== undefined) {
49
49
  const authenticate = methods.agent.authenticate;
50
- await withAcpDeadline(process, authenticate, profile.requestTimeoutMs ?? 15_000, (requestOptions) => process.connection.agent.request(authenticate, { methodId: authMethod }, requestOptions));
50
+ const authenticated = await withAcpDeadline(process, authenticate, profile.requestTimeoutMs ?? 15_000, (requestOptions) => process.connection.agent.request(authenticate, { methodId: authMethod }, requestOptions));
51
+ observe({ method: authenticate, response: asRecord(authenticated) ?? {} });
51
52
  }
52
53
  return response;
53
54
  }
@@ -74,7 +75,7 @@ async function createOrResume(process, profile, initialized, options, meta) {
74
75
  throw new Error("ACP runtime does not support session resume");
75
76
  }
76
77
  const resumed = await withAcpDeadline(process, method, timeoutMs, (requestOptions) => process.connection.agent.request(method, params, requestOptions));
77
- return { response: responseRecord(method, resumed), sessionId };
78
+ return { response: responseRecord(method, resumed), sessionId, openMethod: method };
78
79
  }
79
80
  const method = methods.agent.session.new;
80
81
  const created = await withAcpDeadline(process, method, timeoutMs, (requestOptions) => process.connection.agent.request(method, baseParams, requestOptions));
@@ -83,14 +84,16 @@ async function createOrResume(process, profile, initialized, options, meta) {
83
84
  if (typeof sessionId !== "string" || sessionId.length === 0) {
84
85
  throw new TypeError("ACP session/new returned no session id");
85
86
  }
86
- return { response, sessionId };
87
+ return { response, sessionId, openMethod: method };
87
88
  }
88
- export async function openAcpSession(process, profile, options) {
89
- const initialized = await initialize(process, profile, options);
89
+ export async function openAcpSession(process, profile, options, observe = () => { }) {
90
+ const initialized = await initialize(process, profile, options, observe);
90
91
  const opened = await createOrResume(process, profile, initialized, options, profile.sessionMeta?.(options));
92
+ observe({ method: opened.openMethod, response: opened.response });
91
93
  let setModelResponse = undefined;
92
94
  if (options.model !== undefined) {
93
95
  setModelResponse = asRecord(await withAcpDeadline(process, "session/set_model", profile.requestTimeoutMs ?? 15_000, (requestOptions) => process.connection.agent.request("session/set_model", { sessionId: opened.sessionId, modelId: options.model }, requestOptions))) ?? undefined;
96
+ observe({ method: "session/set_model", response: setModelResponse ?? {} });
94
97
  }
95
98
  const configure = profile.configureSession;
96
99
  if (configure !== undefined) {
@@ -102,6 +105,12 @@ export async function openAcpSession(process, profile, options) {
102
105
  ...(requestOptions === undefined ? {} : { requestOptions }),
103
106
  }));
104
107
  }
105
- return { initialized, ...opened, ...(setModelResponse === undefined ? {} : { setModelResponse }) };
108
+ const sessionCapabilities = asRecord(asRecord(initialized.agentCapabilities)?.sessionCapabilities);
109
+ return {
110
+ initialized,
111
+ ...opened,
112
+ supportsClose: hasAcpCapability(sessionCapabilities?.close),
113
+ ...(setModelResponse === undefined ? {} : { setModelResponse }),
114
+ };
106
115
  }
107
116
  //# sourceMappingURL=profile.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"profile.js","sourceRoot":"","sources":["../../../src/shared/acp/profile.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"profile.js","sourceRoot":"","sources":["../../../src/shared/acp/profile.ts"],"names":[],"mappings":"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"}
@@ -1,21 +1,29 @@
1
- import type { ContextUsage, SessionEventBody, TurnOutcome } from "../../contracts/session.js";
1
+ import type { ContextUsage, EventView, TurnOutcome } from "../../contracts/session.js";
2
2
  import { type JsonRecord } from "../json.js";
3
+ /**
4
+ * ACP `session/update` → views, as a pure projection. Every update becomes
5
+ * exactly one event record (the adapter records the notification verbatim as
6
+ * `native`); this file only decides what oar READ out of it. Unknown update
7
+ * kinds yield no views and are still recorded.
8
+ */
3
9
  interface ToolState {
4
10
  readonly callId: string;
5
11
  ended: boolean;
6
12
  }
13
+ /** Per-session tool lifecycle memory: a terminal status ends a call once. */
7
14
  export interface AcpProjectionState {
8
15
  readonly tools: Map<string, ToolState>;
9
16
  }
10
- export interface AcpProjectionResult {
11
- readonly bodies: readonly SessionEventBody[];
12
- readonly contextUsage?: ContextUsage;
13
- }
14
17
  export declare function createAcpProjectionState(): AcpProjectionState;
15
- export declare function projectAcpUpdate(state: AcpProjectionState, update: JsonRecord): AcpProjectionResult;
16
- export declare function finishAcpTools(state: AcpProjectionState): SessionEventBody[];
18
+ /** Context fullness from a `usage_update` (`used` / `size`), when it carries any. */
19
+ export declare function acpContextUsage(update: JsonRecord): ContextUsage | null;
20
+ /** The views oar reads out of one `session/update`; the update itself is recorded verbatim by the caller. */
21
+ export declare function projectAcpUpdate(state: AcpProjectionState, update: JsonRecord): EventView[];
22
+ /** The outcome an ACP prompt answer reports: `cancelled` is the runtime honoring session/cancel. */
17
23
  export declare function defaultAcpPromptOutcome(response: JsonRecord): TurnOutcome;
24
+ /** The outcome a rejected prompt request reports (an RPC error answer). */
18
25
  export declare function acpFailureOutcome(error: unknown): TurnOutcome;
19
- export declare function acpRuntimeExitedOutcome(code: number | null): TurnOutcome;
26
+ /** A JSON-safe rendering of an RPC error for the `native` of a prompt-error event. */
27
+ export declare function acpErrorNative(error: unknown): JsonRecord;
20
28
  export {};
21
29
  //# sourceMappingURL=projection.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"projection.d.ts","sourceRoot":"","sources":["../../../src/shared/acp/projection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACZ,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAsB,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAGjE,UAAU,SAAS;IACjB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC7C,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC;CACtC;AAED,wBAAgB,wBAAwB,IAAI,kBAAkB,CAE7D;AA4GD,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,kBAAkB,EACzB,MAAM,EAAE,UAAU,GACjB,mBAAmB,CAoBrB;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,kBAAkB,GAAG,gBAAgB,EAAE,CAS5E;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,UAAU,GAAG,WAAW,CAIzE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAS7D;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,WAAW,CAMxE"}
1
+ {"version":3,"file":"projection.d.ts","sourceRoot":"","sources":["../../../src/shared/acp/projection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,SAAS,EACT,WAAW,EACZ,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAsB,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAIjE;;;;;GAKG;AAEH,UAAU,SAAS;IACjB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,6EAA6E;AAC7E,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;CACxC;AAED,wBAAgB,wBAAwB,IAAI,kBAAkB,CAE7D;AAiGD,qFAAqF;AACrF,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,GAAG,YAAY,GAAG,IAAI,CAUvE;AAcD,6GAA6G;AAC7G,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,kBAAkB,EAAE,MAAM,EAAE,UAAU,GAAG,SAAS,EAAE,CAkC3F;AAED,oGAAoG;AACpG,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,UAAU,GAAG,WAAW,CAIzE;AAED,2EAA2E;AAC3E,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAS7D;AAED,sFAAsF;AACtF,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,CASzD"}
@@ -1,6 +1,7 @@
1
1
  import { classifyFailure } from "../failure-class.js";
2
2
  import { asNumber, asRecord } from "../json.js";
3
3
  import { AcpError } from "./errors.js";
4
+ import { acpReportedModel } from "./model.js";
4
5
  export function createAcpProjectionState() {
5
6
  return { tools: new Map() };
6
7
  }
@@ -45,23 +46,29 @@ function toolName(update) {
45
46
  if (typeof update.toolName === "string") {
46
47
  return update.toolName;
47
48
  }
48
- if (typeof update.kind === "string") {
49
- return update.kind;
49
+ // ACP's `kind` is a category (execute, other, …), never a tool's name; the
50
+ // OPENING `tool_call` frame's `title` is the closest thing the protocol has
51
+ // (kimi 0.42.0: title "Bash"/"Agent" with kind "execute"/"other" for the
52
+ // two tools observed; grok: title "run_terminal_command" and no kind). A
53
+ // later `tool_call_update` retitles the call with progress text ("Running:
54
+ // …", kimi seq 25), so a call first seen on an update falls back to `kind`.
55
+ if (update.sessionUpdate === "tool_call" && typeof update.title === "string") {
56
+ return update.title;
50
57
  }
51
- return typeof update.title === "string" ? update.title : "tool";
58
+ return typeof update.kind === "string" ? update.kind : "tool";
52
59
  }
53
60
  function projectTool(state, update) {
54
61
  const callId = typeof update.toolCallId === "string" ? update.toolCallId : null;
55
62
  if (callId === null) {
56
63
  return [];
57
64
  }
58
- const bodies = [];
65
+ const views = [];
59
66
  let tool = state.tools.get(callId);
60
67
  if (tool === undefined) {
61
68
  tool = { callId, ended: false };
62
69
  state.tools.set(callId, tool);
63
70
  const input = detail(update.rawInput);
64
- bodies.push({
71
+ views.push({
65
72
  kind: "tool_call_started",
66
73
  callId,
67
74
  tool: toolName(update),
@@ -74,15 +81,24 @@ function projectTool(state, update) {
74
81
  if (!tool.ended && terminal) {
75
82
  tool.ended = true;
76
83
  const output = detail(update.rawOutput) ?? detail(update.content);
77
- bodies.push({
84
+ let result = undefined;
85
+ if (update.status === "completed") {
86
+ result = "ok";
87
+ }
88
+ else if (update.status === "failed") {
89
+ result = "failed";
90
+ }
91
+ views.push({
78
92
  kind: "tool_call_ended",
79
93
  callId,
80
94
  ...(output === undefined ? {} : { output }),
95
+ ...(result === undefined ? {} : { result }),
81
96
  });
82
97
  }
83
- return bodies;
98
+ return views;
84
99
  }
85
- function usageFromUpdate(update) {
100
+ /** Context fullness from a `usage_update` (`used` / `size`), when it carries any. */
101
+ export function acpContextUsage(update) {
86
102
  const tokens = asNumber(update.used);
87
103
  const contextWindow = asNumber(update.size);
88
104
  if (tokens === null && contextWindow === null) {
@@ -93,7 +109,7 @@ function usageFromUpdate(update) {
93
109
  : Math.round((tokens / contextWindow) * 100);
94
110
  return { tokens, contextWindow, percent };
95
111
  }
96
- function reasoningBody(value) {
112
+ function reasoningView(value) {
97
113
  const text = textContent(value);
98
114
  return {
99
115
  kind: "reasoning",
@@ -104,42 +120,49 @@ function reasoningBody(value) {
104
120
  : { kind: "text", text }),
105
121
  };
106
122
  }
123
+ /** The views oar reads out of one `session/update`; the update itself is recorded verbatim by the caller. */
107
124
  export function projectAcpUpdate(state, update) {
125
+ const views = [];
108
126
  switch (update.sessionUpdate) {
109
127
  case "usage_update": {
110
- const contextUsage = usageFromUpdate(update);
111
- return contextUsage === null ? { bodies: [] } : { bodies: [], contextUsage };
128
+ const context = acpContextUsage(update);
129
+ if (context !== null) {
130
+ views.push({ kind: "usage", usage: { context } });
131
+ }
132
+ break;
112
133
  }
113
134
  case "agent_message_chunk": {
114
135
  const text = textContent(update.content);
115
- return text === null || text.length === 0
116
- ? { bodies: [] }
117
- : { bodies: [{ kind: "text_delta", text }] };
136
+ if (text !== null && text.length > 0) {
137
+ views.push({ kind: "text_delta", text });
138
+ }
139
+ break;
118
140
  }
119
141
  case "agent_thought_chunk":
120
- return { bodies: [reasoningBody(update.content)] };
142
+ views.push(reasoningView(update.content));
143
+ break;
121
144
  case "tool_call":
122
145
  case "tool_call_update":
123
- return { bodies: projectTool(state, update) };
146
+ views.push(...projectTool(state, update));
147
+ break;
124
148
  default:
125
- return { bodies: [] };
149
+ break;
126
150
  }
127
- }
128
- export function finishAcpTools(state) {
129
- const bodies = [];
130
- for (const tool of state.tools.values()) {
131
- if (!tool.ended) {
132
- tool.ended = true;
133
- bodies.push({ kind: "tool_call_ended", callId: tool.callId });
134
- }
151
+ // Any frame that names the effective model (kimi's config_option_update,
152
+ // grok's `_meta.model`) is also a model report.
153
+ const model = acpReportedModel(update);
154
+ if (model !== null) {
155
+ views.push({ kind: "model", model });
135
156
  }
136
- return bodies;
157
+ return views;
137
158
  }
159
+ /** The outcome an ACP prompt answer reports: `cancelled` is the runtime honoring session/cancel. */
138
160
  export function defaultAcpPromptOutcome(response) {
139
161
  return response.stopReason === "cancelled"
140
162
  ? { kind: "aborted" }
141
163
  : { kind: "completed" };
142
164
  }
165
+ /** The outcome a rejected prompt request reports (an RPC error answer). */
143
166
  export function acpFailureOutcome(error) {
144
167
  const reason = error instanceof Error ? error.message : "ACP prompt failed";
145
168
  return {
@@ -150,11 +173,15 @@ export function acpFailureOutcome(error) {
150
173
  : classifyFailure(reason),
151
174
  };
152
175
  }
153
- export function acpRuntimeExitedOutcome(code) {
154
- return {
155
- kind: "failed",
156
- reason: code === null ? "ACP process exited" : `ACP process exited with code ${code}`,
157
- failure: "runtime_exited",
158
- };
176
+ /** A JSON-safe rendering of an RPC error for the `native` of a prompt-error event. */
177
+ export function acpErrorNative(error) {
178
+ if (error instanceof AcpError) {
179
+ return { name: error.name, kind: error.kind, message: error.message, exitCode: error.exitCode, method: error.method, timeoutMs: error.timeoutMs };
180
+ }
181
+ if (error instanceof Error) {
182
+ const extra = asRecord(error) ?? {};
183
+ return { ...extra, name: error.name, message: error.message };
184
+ }
185
+ return { message: String(error) };
159
186
  }
160
187
  //# sourceMappingURL=projection.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"projection.js","sourceRoot":"","sources":["../../../src/shared/acp/projection.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAmB,MAAM,YAAY,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAgBvC,MAAM,UAAU,wBAAwB;IACtC,OAAO,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;AAC9B,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACzD,OAAO,OAAO,CAAC,IAAI,CAAC;IACtB,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,KAAK;aAChB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;aAChC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QACnD,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,QAAQ,CAAC,KAAa;IAC7B,OAAO,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;AACtE,CAAC;AAED,SAAS,MAAM,CAAC,KAAc;IAC5B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IACD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAC1C,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAClB,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IACD,IAAI,CAAC;QACH,OAAO,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,MAAkB;IAClC,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACpC,OAAO,MAAM,CAAC,IAAI,CAAC;IACrB,CAAC;IACD,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO,MAAM,CAAC,QAAQ,CAAC;IACzB,CAAC;IACD,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACpC,OAAO,MAAM,CAAC,IAAI,CAAC;IACrB,CAAC;IACD,OAAO,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;AAClE,CAAC;AAED,SAAS,WAAW,CAAC,KAAyB,EAAE,MAAkB;IAChE,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;IAChF,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,MAAM,GAAuB,EAAE,CAAC;IACtC,IAAI,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACnC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,IAAI,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QAChC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC9B,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,mBAAmB;YACzB,MAAM;YACN,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC;YACtB,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;SAC1C,CAAC,CAAC;IACL,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,KAAK,WAAW;WACzC,MAAM,CAAC,MAAM,KAAK,QAAQ;WAC1B,MAAM,CAAC,MAAM,KAAK,WAAW,CAAC;IACnC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC5B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAClE,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,iBAAiB;YACvB,MAAM;YACN,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;SAC5C,CAAC,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,eAAe,CAAC,MAAkB;IACzC,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC5C,IAAI,MAAM,KAAK,IAAI,IAAI,aAAa,KAAK,IAAI,EAAE,CAAC;QAC9C,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,KAAK,IAAI,IAAI,aAAa,KAAK,IAAI,IAAI,aAAa,KAAK,CAAC;QAC9E,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,aAAa,CAAC,GAAG,GAAG,CAAC,CAAC;IAC/C,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC;AAC5C,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAChC,OAAO;QACL,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,IAAI,KAAK,IAAI;YACpB,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE;YACtB,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;gBAClB,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE;gBACnB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;KAC9B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,KAAyB,EACzB,MAAkB;IAElB,QAAQ,MAAM,CAAC,aAAa,EAAE,CAAC;QAC7B,KAAK,cAAc,CAAC,CAAC,CAAC;YACpB,MAAM,YAAY,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;YAC7C,OAAO,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC;QAC/E,CAAC;QACD,KAAK,qBAAqB,CAAC,CAAC,CAAC;YAC3B,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACzC,OAAO,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;gBACvC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;gBAChB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACjD,CAAC;QACD,KAAK,qBAAqB;YACxB,OAAO,EAAE,MAAM,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;QACrD,KAAK,WAAW,CAAC;QACjB,KAAK,kBAAkB;YACrB,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC;QAChD;YACE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAyB;IACtD,MAAM,MAAM,GAAuB,EAAE,CAAC;IACtC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;QACxC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,QAAoB;IAC1D,OAAO,QAAQ,CAAC,UAAU,KAAK,WAAW;QACxC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE;QACrB,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC;IAC5E,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,MAAM;QACN,OAAO,EAAE,KAAK,YAAY,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB;YACnE,CAAC,CAAC,gBAAgB;YAClB,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC;KAC5B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,IAAmB;IACzD,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,gCAAgC,IAAI,EAAE;QACrF,OAAO,EAAE,gBAAgB;KAC1B,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"projection.js","sourceRoot":"","sources":["../../../src/shared/acp/projection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import { type JsonRecord } from "../json.js";
2
+ import type { SessionKernel } from "../session-kernel.js";
3
+ import { type SessionNotification } from "./process.js";
4
+ import type { UsageUpdateGate } from "./usage-wait.js";
5
+ /**
6
+ * How ACP wire traffic lands in the record stream. Every frame is recorded
7
+ * verbatim; this module only decides the envelope (which session id) and the
8
+ * views. Nothing is filtered: an update for a session id other than the root
9
+ * is a derived child session, recorded under ITS id and added to the graph
10
+ * (filtering by session id is the adapter red line in
11
+ * docs/spec/runtime-matrix.md).
12
+ */
13
+ export interface AcpRecorder {
14
+ /**
15
+ * Attach the kernel. The session id is only known after the handshake, so
16
+ * everything recorded before this point is queued in arrival order and
17
+ * appended now (kimi pushes its model config_option_update before
18
+ * session/set_model is answered, i.e. while still opening).
19
+ */
20
+ bind(kernel: SessionKernel): void;
21
+ update(notification: SessionNotification): void;
22
+ /** A vendor extension notification, verbatim; a parent/child session pair in it links the graph. */
23
+ extension(method: string, params: JsonRecord): void;
24
+ /** A handshake answer (initialize, session/new|resume|load, session/set_model): the runtime's word, with its model report as a view. */
25
+ step(method: string, response: JsonRecord): void;
26
+ /** A runtime→app request, verbatim, under the runtime's own request id. */
27
+ requested(id: string, method: string, params: unknown): void;
28
+ /** oar's answer to a runtime→app request. */
29
+ answered(id: string, reply: unknown): void;
30
+ }
31
+ /**
32
+ * The parent/child session pair a vendor notification names, in either
33
+ * spelling and at either depth. grok 1.0.25 (live, 2026-09-11) spells it
34
+ * `_x.ai/session_notification {sessionId: <parent>, update: {sessionUpdate:
35
+ * "subagent_spawned" | "subagent_progress", parent_session_id,
36
+ * child_session_id, subagent_type, …}}`: snake_case, nested under `update`;
37
+ * its `subagent_finished` carries only `child_session_id`, the parent being
38
+ * the envelope's `sessionId`. A flat camelCase `{parentSessionId,
39
+ * childSessionId | sessionId}` is the fixture spelling.
40
+ */
41
+ export declare function acpLineageOf(params: JsonRecord): {
42
+ readonly parent: string;
43
+ readonly child: string;
44
+ } | null;
45
+ export declare function createAcpRecorder(usageGate: UsageUpdateGate): AcpRecorder;
46
+ //# sourceMappingURL=records.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"records.d.ts","sourceRoot":"","sources":["../../../src/shared/acp/records.ts"],"names":[],"mappings":"AACA,OAAO,EAAY,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAAW,KAAK,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAEjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvD;;;;;;;GAOG;AACH,MAAM,WAAW,WAAW;IAC1B;;;;;OAKG;IACH,IAAI,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IAClC,MAAM,CAAC,YAAY,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAChD,oGAAoG;IACpG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;IACpD,wIAAwI;IACxI,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,GAAG,IAAI,CAAC;IACjD,2EAA2E;IAC3E,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;IAC7D,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;CAC5C;AAYD;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAgB3G;AASD,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,eAAe,GAAG,WAAW,CA4EzE"}