@botiverse/oar 0.0.11 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/contracts/model-catalog.d.ts +1 -1
- package/dist/contracts/model-catalog.js +1 -1
- package/dist/contracts/provider-auth.d.ts +2 -2
- package/dist/contracts/provider-auth.js +2 -2
- package/dist/contracts/records.d.ts +205 -0
- package/dist/contracts/records.d.ts.map +1 -0
- package/dist/contracts/records.js +8 -0
- package/dist/contracts/records.js.map +1 -0
- package/dist/contracts/session.d.ts +83 -144
- package/dist/contracts/session.d.ts.map +1 -1
- package/dist/index.d.ts +6 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/observe/agent-status.d.ts +32 -18
- package/dist/observe/agent-status.d.ts.map +1 -1
- package/dist/observe/agent-status.js +66 -14
- package/dist/observe/agent-status.js.map +1 -1
- package/dist/observe/aggregate-events.d.ts +7 -6
- package/dist/observe/aggregate-events.d.ts.map +1 -1
- package/dist/observe/aggregate-events.js +38 -28
- package/dist/observe/aggregate-events.js.map +1 -1
- package/dist/observe/index.d.ts +4 -1
- package/dist/observe/index.d.ts.map +1 -1
- package/dist/observe/index.js +3 -1
- package/dist/observe/index.js.map +1 -1
- package/dist/observe/observe-agent.d.ts +4 -4
- package/dist/observe/observe-agent.d.ts.map +1 -1
- package/dist/observe/observe-agent.js +3 -3
- package/dist/observe/observe-agent.js.map +1 -1
- package/dist/observe/stall-observer.d.ts +7 -6
- package/dist/observe/stall-observer.d.ts.map +1 -1
- package/dist/observe/stall-observer.js +6 -5
- package/dist/observe/stall-observer.js.map +1 -1
- package/dist/observe/tool-activity.d.ts +2 -2
- package/dist/observe/tool-activity.d.ts.map +1 -1
- package/dist/observe/tool-activity.js +1 -1
- package/dist/observe/tool-activity.js.map +1 -1
- package/dist/observe/turns.d.ts +37 -0
- package/dist/observe/turns.d.ts.map +1 -0
- package/dist/observe/turns.js +70 -0
- package/dist/observe/turns.js.map +1 -0
- package/dist/observe/usage.d.ts +15 -0
- package/dist/observe/usage.d.ts.map +1 -0
- package/dist/observe/usage.js +79 -0
- package/dist/observe/usage.js.map +1 -0
- package/dist/runtimes/claude/account-usage.js +1 -1
- package/dist/runtimes/claude/context-usage.d.ts +1 -1
- package/dist/runtimes/claude/context-usage.js +1 -1
- package/dist/runtimes/claude/projection.d.ts +40 -27
- package/dist/runtimes/claude/projection.d.ts.map +1 -1
- package/dist/runtimes/claude/projection.js +107 -21
- package/dist/runtimes/claude/projection.js.map +1 -1
- package/dist/runtimes/claude/session.d.ts.map +1 -1
- package/dist/runtimes/claude/session.js +119 -87
- package/dist/runtimes/claude/session.js.map +1 -1
- package/dist/runtimes/codex/app-server-client.d.ts +38 -3
- package/dist/runtimes/codex/app-server-client.d.ts.map +1 -1
- package/dist/runtimes/codex/app-server-client.js +62 -15
- package/dist/runtimes/codex/app-server-client.js.map +1 -1
- package/dist/runtimes/codex/projection.d.ts +12 -12
- package/dist/runtimes/codex/projection.d.ts.map +1 -1
- package/dist/runtimes/codex/projection.js +101 -38
- package/dist/runtimes/codex/projection.js.map +1 -1
- package/dist/runtimes/codex/rpc-control.d.ts +31 -0
- package/dist/runtimes/codex/rpc-control.d.ts.map +1 -0
- package/dist/runtimes/codex/rpc-control.js +51 -0
- package/dist/runtimes/codex/rpc-control.js.map +1 -0
- package/dist/runtimes/codex/session.d.ts.map +1 -1
- package/dist/runtimes/codex/session.js +199 -149
- package/dist/runtimes/codex/session.js.map +1 -1
- package/dist/runtimes/grok/session.d.ts +37 -1
- package/dist/runtimes/grok/session.d.ts.map +1 -1
- package/dist/runtimes/grok/session.js +74 -0
- package/dist/runtimes/grok/session.js.map +1 -1
- package/dist/runtimes/kimi/session.d.ts.map +1 -1
- package/dist/runtimes/kimi/session.js +5 -0
- package/dist/runtimes/kimi/session.js.map +1 -1
- package/dist/runtimes/pi/auth.d.ts.map +1 -1
- package/dist/runtimes/pi/auth.js +6 -1
- package/dist/runtimes/pi/auth.js.map +1 -1
- package/dist/runtimes/pi/catalog.d.ts.map +1 -1
- package/dist/runtimes/pi/catalog.js +6 -1
- package/dist/runtimes/pi/catalog.js.map +1 -1
- package/dist/runtimes/pi/http.d.ts +34 -0
- package/dist/runtimes/pi/http.d.ts.map +1 -0
- package/dist/runtimes/pi/http.js +95 -0
- package/dist/runtimes/pi/http.js.map +1 -0
- package/dist/runtimes/pi/list-models.d.ts.map +1 -1
- package/dist/runtimes/pi/list-models.js +10 -3
- package/dist/runtimes/pi/list-models.js.map +1 -1
- package/dist/runtimes/pi/open.d.ts +32 -0
- package/dist/runtimes/pi/open.d.ts.map +1 -0
- package/dist/runtimes/pi/open.js +106 -0
- package/dist/runtimes/pi/open.js.map +1 -0
- package/dist/runtimes/pi/projection.d.ts +27 -25
- package/dist/runtimes/pi/projection.d.ts.map +1 -1
- package/dist/runtimes/pi/projection.js +85 -50
- package/dist/runtimes/pi/projection.js.map +1 -1
- package/dist/runtimes/pi/session.d.ts +1 -22
- package/dist/runtimes/pi/session.d.ts.map +1 -1
- package/dist/runtimes/pi/session.js +178 -184
- package/dist/runtimes/pi/session.js.map +1 -1
- package/dist/shared/acp/client-app.d.ts +23 -0
- package/dist/shared/acp/client-app.d.ts.map +1 -0
- package/dist/shared/acp/client-app.js +55 -0
- package/dist/shared/acp/client-app.js.map +1 -0
- package/dist/shared/acp/model.d.ts +3 -17
- package/dist/shared/acp/model.d.ts.map +1 -1
- package/dist/shared/acp/model.js +3 -14
- package/dist/shared/acp/model.js.map +1 -1
- package/dist/shared/acp/profile.d.ts +32 -7
- package/dist/shared/acp/profile.d.ts.map +1 -1
- package/dist/shared/acp/profile.js +17 -8
- package/dist/shared/acp/profile.js.map +1 -1
- package/dist/shared/acp/projection.d.ts +16 -8
- package/dist/shared/acp/projection.d.ts.map +1 -1
- package/dist/shared/acp/projection.js +51 -32
- package/dist/shared/acp/projection.js.map +1 -1
- package/dist/shared/acp/records.d.ts +46 -0
- package/dist/shared/acp/records.d.ts.map +1 -0
- package/dist/shared/acp/records.js +125 -0
- package/dist/shared/acp/records.js.map +1 -0
- package/dist/shared/acp/session.d.ts.map +1 -1
- package/dist/shared/acp/session.js +98 -224
- package/dist/shared/acp/session.js.map +1 -1
- package/dist/shared/acp/terminal.d.ts +1 -3
- package/dist/shared/acp/terminal.d.ts.map +1 -1
- package/dist/shared/acp/terminal.js +1 -21
- package/dist/shared/acp/terminal.js.map +1 -1
- package/dist/shared/acp/turns.d.ts +45 -0
- package/dist/shared/acp/turns.d.ts.map +1 -0
- package/dist/shared/acp/turns.js +160 -0
- package/dist/shared/acp/turns.js.map +1 -0
- package/dist/shared/acp/usage-wait.d.ts +6 -6
- package/dist/shared/acp/usage-wait.d.ts.map +1 -1
- package/dist/shared/acp/usage-wait.js +2 -2
- package/dist/shared/acp/usage-wait.js.map +1 -1
- package/dist/shared/failure-class.d.ts +1 -1
- package/dist/shared/failure-class.js +2 -2
- package/dist/shared/failure-class.js.map +1 -1
- package/dist/shared/seal-session.d.ts +5 -3
- package/dist/shared/seal-session.d.ts.map +1 -1
- package/dist/shared/seal-session.js +24 -16
- package/dist/shared/seal-session.js.map +1 -1
- package/dist/shared/session-kernel.d.ts +68 -18
- package/dist/shared/session-kernel.d.ts.map +1 -1
- package/dist/shared/session-kernel.js +82 -42
- package/dist/shared/session-kernel.js.map +1 -1
- package/dist/voyage.d.ts +4 -7
- package/dist/voyage.d.ts.map +1 -1
- package/dist/voyage.js +14 -19
- package/dist/voyage.js.map +1 -1
- package/package.json +4 -3
- package/dist/runtimes/codex/context-usage.d.ts +0 -10
- package/dist/runtimes/codex/context-usage.d.ts.map +0 -1
- package/dist/runtimes/codex/context-usage.js +0 -16
- package/dist/runtimes/codex/context-usage.js.map +0 -1
package/dist/shared/acp/model.js
CHANGED
|
@@ -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
|
|
18
|
-
*
|
|
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;
|
|
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
|
|
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
|
|
35
|
-
*
|
|
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":"AACA,OAAO,EAGL,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACxB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;
|
|
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
|
-
|
|
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":"AAAA,2HAA2H;AAC3H,OAAO,EACL,OAAO,EACP,gBAAgB,GAGjB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,QAAQ,EAAmB,MAAM,YAAY,CAAC;AACvD,OAAO,EAAmB,eAAe,EAAE,MAAM,cAAc,CAAC;AAEhE,OAAO,EAAE,
|
|
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,
|
|
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
|
-
|
|
16
|
-
export declare function
|
|
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
|
-
|
|
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,
|
|
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;AA0FD,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
|
-
|
|
49
|
-
|
|
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.
|
|
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
|
|
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
|
-
|
|
71
|
+
views.push({
|
|
65
72
|
kind: "tool_call_started",
|
|
66
73
|
callId,
|
|
67
74
|
tool: toolName(update),
|
|
@@ -74,15 +81,16 @@ 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
|
-
|
|
84
|
+
views.push({
|
|
78
85
|
kind: "tool_call_ended",
|
|
79
86
|
callId,
|
|
80
87
|
...(output === undefined ? {} : { output }),
|
|
81
88
|
});
|
|
82
89
|
}
|
|
83
|
-
return
|
|
90
|
+
return views;
|
|
84
91
|
}
|
|
85
|
-
|
|
92
|
+
/** Context fullness from a `usage_update` (`used` / `size`), when it carries any. */
|
|
93
|
+
export function acpContextUsage(update) {
|
|
86
94
|
const tokens = asNumber(update.used);
|
|
87
95
|
const contextWindow = asNumber(update.size);
|
|
88
96
|
if (tokens === null && contextWindow === null) {
|
|
@@ -93,7 +101,7 @@ function usageFromUpdate(update) {
|
|
|
93
101
|
: Math.round((tokens / contextWindow) * 100);
|
|
94
102
|
return { tokens, contextWindow, percent };
|
|
95
103
|
}
|
|
96
|
-
function
|
|
104
|
+
function reasoningView(value) {
|
|
97
105
|
const text = textContent(value);
|
|
98
106
|
return {
|
|
99
107
|
kind: "reasoning",
|
|
@@ -104,42 +112,49 @@ function reasoningBody(value) {
|
|
|
104
112
|
: { kind: "text", text }),
|
|
105
113
|
};
|
|
106
114
|
}
|
|
115
|
+
/** The views oar reads out of one `session/update`; the update itself is recorded verbatim by the caller. */
|
|
107
116
|
export function projectAcpUpdate(state, update) {
|
|
117
|
+
const views = [];
|
|
108
118
|
switch (update.sessionUpdate) {
|
|
109
119
|
case "usage_update": {
|
|
110
|
-
const
|
|
111
|
-
|
|
120
|
+
const context = acpContextUsage(update);
|
|
121
|
+
if (context !== null) {
|
|
122
|
+
views.push({ kind: "usage", usage: { context } });
|
|
123
|
+
}
|
|
124
|
+
break;
|
|
112
125
|
}
|
|
113
126
|
case "agent_message_chunk": {
|
|
114
127
|
const text = textContent(update.content);
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
128
|
+
if (text !== null && text.length > 0) {
|
|
129
|
+
views.push({ kind: "text_delta", text });
|
|
130
|
+
}
|
|
131
|
+
break;
|
|
118
132
|
}
|
|
119
133
|
case "agent_thought_chunk":
|
|
120
|
-
|
|
134
|
+
views.push(reasoningView(update.content));
|
|
135
|
+
break;
|
|
121
136
|
case "tool_call":
|
|
122
137
|
case "tool_call_update":
|
|
123
|
-
|
|
138
|
+
views.push(...projectTool(state, update));
|
|
139
|
+
break;
|
|
124
140
|
default:
|
|
125
|
-
|
|
141
|
+
break;
|
|
126
142
|
}
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
const
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
tool.ended = true;
|
|
133
|
-
bodies.push({ kind: "tool_call_ended", callId: tool.callId });
|
|
134
|
-
}
|
|
143
|
+
// Any frame that names the effective model (kimi's config_option_update,
|
|
144
|
+
// grok's `_meta.model`) is also a model report.
|
|
145
|
+
const model = acpReportedModel(update);
|
|
146
|
+
if (model !== null) {
|
|
147
|
+
views.push({ kind: "model", model });
|
|
135
148
|
}
|
|
136
|
-
return
|
|
149
|
+
return views;
|
|
137
150
|
}
|
|
151
|
+
/** The outcome an ACP prompt answer reports: `cancelled` is the runtime honoring session/cancel. */
|
|
138
152
|
export function defaultAcpPromptOutcome(response) {
|
|
139
153
|
return response.stopReason === "cancelled"
|
|
140
154
|
? { kind: "aborted" }
|
|
141
155
|
: { kind: "completed" };
|
|
142
156
|
}
|
|
157
|
+
/** The outcome a rejected prompt request reports (an RPC error answer). */
|
|
143
158
|
export function acpFailureOutcome(error) {
|
|
144
159
|
const reason = error instanceof Error ? error.message : "ACP prompt failed";
|
|
145
160
|
return {
|
|
@@ -150,11 +165,15 @@ export function acpFailureOutcome(error) {
|
|
|
150
165
|
: classifyFailure(reason),
|
|
151
166
|
};
|
|
152
167
|
}
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
168
|
+
/** A JSON-safe rendering of an RPC error for the `native` of a prompt-error event. */
|
|
169
|
+
export function acpErrorNative(error) {
|
|
170
|
+
if (error instanceof AcpError) {
|
|
171
|
+
return { name: error.name, kind: error.kind, message: error.message, exitCode: error.exitCode, method: error.method, timeoutMs: error.timeoutMs };
|
|
172
|
+
}
|
|
173
|
+
if (error instanceof Error) {
|
|
174
|
+
const extra = asRecord(error) ?? {};
|
|
175
|
+
return { ...extra, name: error.name, message: error.message };
|
|
176
|
+
}
|
|
177
|
+
return { message: String(error) };
|
|
159
178
|
}
|
|
160
179
|
//# 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;
|
|
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"}
|