@botiverse/oar 0.9.1 → 0.10.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.
- package/README.md +2 -2
- package/assets/brands/NOTICE.md +6 -5
- package/assets/brands/antigravity.svg +1 -0
- package/assets/brands/cursor-on-dark.svg +1 -0
- package/assets/brands/cursor-on-light.svg +1 -0
- package/assets/brands/cursor.svg +1 -0
- package/dist/brands.d.ts +12 -0
- package/dist/brands.d.ts.map +1 -1
- package/dist/brands.js +12 -0
- package/dist/brands.js.map +1 -1
- package/dist/contracts/input.d.ts +8 -0
- package/dist/contracts/input.d.ts.map +1 -0
- package/dist/contracts/input.js +2 -0
- package/dist/contracts/input.js.map +1 -0
- package/dist/contracts/records.d.ts +4 -0
- package/dist/contracts/records.d.ts.map +1 -1
- package/dist/contracts/records.js +0 -15
- package/dist/contracts/records.js.map +1 -1
- package/dist/contracts/session.d.ts +11 -0
- package/dist/contracts/session.d.ts.map +1 -1
- package/dist/index.d.ts +9 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -1
- package/dist/observe/conversation.d.ts +3 -1
- package/dist/observe/conversation.d.ts.map +1 -1
- package/dist/observe/conversation.js +2 -2
- package/dist/observe/conversation.js.map +1 -1
- package/dist/observe/turns.d.ts +3 -1
- package/dist/observe/turns.d.ts.map +1 -1
- package/dist/observe/turns.js +1 -1
- package/dist/observe/turns.js.map +1 -1
- package/dist/runtimes/antigravity/index.d.ts +14 -0
- package/dist/runtimes/antigravity/index.d.ts.map +1 -0
- package/dist/runtimes/antigravity/index.js +14 -0
- package/dist/runtimes/antigravity/index.js.map +1 -0
- package/dist/runtimes/antigravity/installation.d.ts +13 -0
- package/dist/runtimes/antigravity/installation.d.ts.map +1 -0
- package/dist/runtimes/antigravity/installation.js +16 -0
- package/dist/runtimes/antigravity/installation.js.map +1 -0
- package/dist/runtimes/antigravity/list-models.d.ts +12 -0
- package/dist/runtimes/antigravity/list-models.d.ts.map +1 -0
- package/dist/runtimes/antigravity/list-models.js +79 -0
- package/dist/runtimes/antigravity/list-models.js.map +1 -0
- package/dist/runtimes/antigravity/session.d.ts +17 -0
- package/dist/runtimes/antigravity/session.d.ts.map +1 -0
- package/dist/runtimes/antigravity/session.js +57 -0
- package/dist/runtimes/antigravity/session.js.map +1 -0
- package/dist/runtimes/claude/session.d.ts.map +1 -1
- package/dist/runtimes/claude/session.js +27 -14
- package/dist/runtimes/claude/session.js.map +1 -1
- package/dist/runtimes/codex/session.d.ts.map +1 -1
- package/dist/runtimes/codex/session.js +13 -9
- package/dist/runtimes/codex/session.js.map +1 -1
- package/dist/runtimes/cursor/index.d.ts +19 -0
- package/dist/runtimes/cursor/index.d.ts.map +1 -0
- package/dist/runtimes/cursor/index.js +15 -0
- package/dist/runtimes/cursor/index.js.map +1 -0
- package/dist/runtimes/cursor/installation.d.ts +9 -0
- package/dist/runtimes/cursor/installation.d.ts.map +1 -0
- package/dist/runtimes/cursor/installation.js +17 -0
- package/dist/runtimes/cursor/installation.js.map +1 -0
- package/dist/runtimes/cursor/list-models.d.ts +13 -0
- package/dist/runtimes/cursor/list-models.d.ts.map +1 -0
- package/dist/runtimes/cursor/list-models.js +92 -0
- package/dist/runtimes/cursor/list-models.js.map +1 -0
- package/dist/runtimes/cursor/session.d.ts +38 -0
- package/dist/runtimes/cursor/session.d.ts.map +1 -0
- package/dist/runtimes/cursor/session.js +74 -0
- package/dist/runtimes/cursor/session.js.map +1 -0
- package/dist/runtimes/grok/session.d.ts.map +1 -1
- package/dist/runtimes/grok/session.js +3 -1
- package/dist/runtimes/grok/session.js.map +1 -1
- package/dist/runtimes/pi/session.d.ts.map +1 -1
- package/dist/runtimes/pi/session.js +20 -10
- package/dist/runtimes/pi/session.js.map +1 -1
- package/dist/shared/acp/client-app.d.ts +2 -0
- package/dist/shared/acp/client-app.d.ts.map +1 -1
- package/dist/shared/acp/client-app.js +8 -1
- package/dist/shared/acp/client-app.js.map +1 -1
- package/dist/shared/acp/effort.d.ts +14 -0
- package/dist/shared/acp/effort.d.ts.map +1 -1
- package/dist/shared/acp/effort.js +15 -0
- package/dist/shared/acp/effort.js.map +1 -1
- package/dist/shared/acp/model.d.ts +4 -0
- package/dist/shared/acp/model.d.ts.map +1 -1
- package/dist/shared/acp/model.js +10 -1
- package/dist/shared/acp/model.js.map +1 -1
- package/dist/shared/acp/process.d.ts +2 -0
- package/dist/shared/acp/process.d.ts.map +1 -1
- package/dist/shared/acp/process.js +7 -2
- package/dist/shared/acp/process.js.map +1 -1
- package/dist/shared/acp/profile.d.ts +25 -3
- package/dist/shared/acp/profile.d.ts.map +1 -1
- package/dist/shared/acp/profile.js +15 -9
- package/dist/shared/acp/profile.js.map +1 -1
- package/dist/shared/acp/records.d.ts +3 -1
- package/dist/shared/acp/records.d.ts.map +1 -1
- package/dist/shared/acp/records.js +14 -6
- package/dist/shared/acp/records.js.map +1 -1
- package/dist/shared/acp/session.d.ts.map +1 -1
- package/dist/shared/acp/session.js +13 -7
- package/dist/shared/acp/session.js.map +1 -1
- package/dist/shared/acp/turns.d.ts +11 -8
- package/dist/shared/acp/turns.d.ts.map +1 -1
- package/dist/shared/acp/turns.js +34 -15
- package/dist/shared/acp/turns.js.map +1 -1
- package/dist/shared/acp/vendor-updates.d.ts +7 -0
- package/dist/shared/acp/vendor-updates.d.ts.map +1 -0
- package/dist/shared/acp/vendor-updates.js +46 -0
- package/dist/shared/acp/vendor-updates.js.map +1 -0
- package/dist/shared/executable/index.d.ts +1 -1
- package/dist/shared/executable/index.d.ts.map +1 -1
- package/dist/shared/executable/index.js.map +1 -1
- package/dist/shared/executable/version.d.ts +4 -2
- package/dist/shared/executable/version.d.ts.map +1 -1
- package/dist/shared/executable/version.js +7 -4
- package/dist/shared/executable/version.js.map +1 -1
- package/dist/shared/input-images.d.ts +23 -0
- package/dist/shared/input-images.d.ts.map +1 -0
- package/dist/shared/input-images.js +60 -0
- package/dist/shared/input-images.js.map +1 -0
- package/dist/shared/installation.d.ts +3 -0
- package/dist/shared/installation.d.ts.map +1 -1
- package/dist/shared/installation.js +4 -4
- package/dist/shared/installation.js.map +1 -1
- package/dist/testing/scripted-runtime.d.ts +3 -1
- package/dist/testing/scripted-runtime.d.ts.map +1 -1
- package/dist/testing/scripted-runtime.js +7 -6
- package/dist/testing/scripted-runtime.js.map +1 -1
- package/package.json +3 -3
|
@@ -2,6 +2,7 @@ import { ndJsonStream, } from "@agentclientprotocol/sdk";
|
|
|
2
2
|
import { Readable, Writable } from "node:stream";
|
|
3
3
|
import { spawnLineProcess } from "../executable/index.js";
|
|
4
4
|
import { AcpError, acpProcessExitedError, acpRequestTimeoutError } from "./errors.js";
|
|
5
|
+
import { vendorSessionUpdateCarrier } from "./vendor-updates.js";
|
|
5
6
|
export { client as createAcpClient, methods } from "@agentclientprotocol/sdk";
|
|
6
7
|
function deadline(method, timeoutMs, controller) {
|
|
7
8
|
const { promise, reject } = Promise.withResolvers();
|
|
@@ -52,14 +53,18 @@ export async function withAcpDeadline(process, method, timeoutMs, send) {
|
|
|
52
53
|
}
|
|
53
54
|
/** Spawn a stdio ACP agent and let the official SDK own the wire protocol. */
|
|
54
55
|
export function startAcpProcess(command, args, app, options = {}) {
|
|
55
|
-
const
|
|
56
|
+
const { vendorSessionUpdates = [], ...spawnOptions } = options;
|
|
57
|
+
const child = spawnLineProcess(command, args, spawnOptions);
|
|
56
58
|
// Node and TypeScript model the same WHATWG byte streams with incompatible
|
|
57
59
|
// generic constraints.
|
|
58
60
|
// oxlint-disable-next-line typescript/consistent-type-assertions, typescript/no-unsafe-type-assertion -- Native WHATWG stream expected by the SDK.
|
|
59
61
|
const output = Writable.toWeb(child.stdin);
|
|
60
62
|
// oxlint-disable-next-line typescript/consistent-type-assertions, typescript/no-unsafe-type-assertion -- Native WHATWG stream expected by the SDK.
|
|
61
63
|
const input = Readable.toWeb(child.stdout);
|
|
62
|
-
const
|
|
64
|
+
const stream = ndJsonStream(output, input);
|
|
65
|
+
const connection = app.connect(vendorSessionUpdates.length === 0
|
|
66
|
+
? stream
|
|
67
|
+
: { readable: stream.readable.pipeThrough(vendorSessionUpdateCarrier(vendorSessionUpdates)), writable: stream.writable });
|
|
63
68
|
let ended = false;
|
|
64
69
|
let exitCode = null;
|
|
65
70
|
child.onExit((code) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process.js","sourceRoot":"","sources":["../../../src/shared/acp/process.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,GAIb,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"process.js","sourceRoot":"","sources":["../../../src/shared/acp/process.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,9 @@ export { createUsageUpdateGate } from "./usage-wait.js";
|
|
|
6
6
|
export interface AcpSessionProfile {
|
|
7
7
|
readonly args: readonly string[] | ((options: SessionOptions) => readonly string[]);
|
|
8
8
|
/** What this runtime's ACP surface lets the adapter carry (docs/spec attribution tier included). */
|
|
9
|
-
readonly capabilities: SessionCapabilities
|
|
9
|
+
readonly capabilities: Omit<SessionCapabilities, "images"> & {
|
|
10
|
+
readonly images?: boolean;
|
|
11
|
+
};
|
|
10
12
|
readonly requestTimeoutMs?: number;
|
|
11
13
|
readonly abortTimeoutMs?: number;
|
|
12
14
|
/** Compatibility for agents that put a fully quoted shell line in `command`. */
|
|
@@ -18,7 +20,27 @@ export interface AcpSessionProfile {
|
|
|
18
20
|
* frame oar never sees, so list everything the runtime is known to emit.
|
|
19
21
|
*/
|
|
20
22
|
readonly extensionNotifications?: readonly string[];
|
|
23
|
+
/**
|
|
24
|
+
* Vendor request methods (runtime→app) oar records, then answers `-32601`, so the agent takes
|
|
25
|
+
* its fallback (cursor-agent 2026.09.28 `cursor/ask_question` → `session/request_permission`).
|
|
26
|
+
*/
|
|
27
|
+
readonly extensionRequests?: readonly string[];
|
|
28
|
+
/**
|
|
29
|
+
* Vendor `session/update` kinds the SDK would drop (cursor-agent 2026.09.28 `subagent_spawned`);
|
|
30
|
+
* listed ones are recorded in wire order and their `subagentSessionId` links the child session.
|
|
31
|
+
*/
|
|
32
|
+
readonly vendorSessionUpdates?: readonly string[];
|
|
21
33
|
readonly initializeMeta?: (options: SessionOptions) => JsonRecord | undefined;
|
|
34
|
+
/**
|
|
35
|
+
* `clientCapabilities._meta` on initialize (cursor-agent 2026.09.28 `parameterizedModelPicker`,
|
|
36
|
+
* without which it folds effort into the model id and advertises no `thought_level` option).
|
|
37
|
+
*/
|
|
38
|
+
readonly clientCapabilitiesMeta?: (options: SessionOptions) => JsonRecord | undefined;
|
|
39
|
+
/**
|
|
40
|
+
* Switch models with `session/set_config_option` on `model`, for agents whose `set_model` answers
|
|
41
|
+
* `{}` and pushes nothing (cursor-agent 2026.09.28): only that answer reports the effort menu.
|
|
42
|
+
*/
|
|
43
|
+
readonly modelViaConfigOption?: boolean;
|
|
22
44
|
readonly sessionMeta?: (options: SessionOptions) => JsonRecord | undefined;
|
|
23
45
|
readonly selectAuthMethod?: (initialized: JsonRecord) => string | undefined;
|
|
24
46
|
readonly validateOptions?: (options: SessionOptions) => void;
|
|
@@ -62,7 +84,7 @@ export interface OpenedAcpSession {
|
|
|
62
84
|
readonly openMethod: "session/new" | "session/resume" | "session/load";
|
|
63
85
|
/** The agent advertised `session/close`. */
|
|
64
86
|
readonly supportsClose: boolean;
|
|
65
|
-
/** The
|
|
87
|
+
/** The model switch response, when a model was requested; grok reports the applied model in its `_meta`, cursor in its `configOptions`. */
|
|
66
88
|
readonly setModelResponse?: JsonRecord;
|
|
67
89
|
}
|
|
68
90
|
/** Observer for the handshake: every runtime answer, in order, so the adapter can record them as events. */
|
|
@@ -71,7 +93,7 @@ export type AcpOpenObserver = (step: {
|
|
|
71
93
|
readonly response: JsonRecord;
|
|
72
94
|
}) => void;
|
|
73
95
|
export declare function hasAcpCapability(value: unknown): boolean;
|
|
74
|
-
export declare function promptAcp(process: AcpProcess, sessionId: string,
|
|
96
|
+
export declare function promptAcp(process: AcpProcess, sessionId: string, prompt: readonly JsonRecord[], extraParams?: JsonRecord): Promise<JsonRecord>;
|
|
75
97
|
export declare function closeAcpSession(process: AcpProcess, sessionId: string): Promise<void>;
|
|
76
98
|
export declare function openAcpSession(process: AcpProcess, profile: AcpSessionProfile, options: SessionOptions, observe?: AcpOpenObserver): Promise<OpenedAcpSession>;
|
|
77
99
|
//# 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,mBAAmB,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9H,OAAO,EAAY,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAEvD,OAAO,EAAE,KAAK,UAAU,EAAmB,MAAM,cAAc,CAAC;AAEhE,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAExD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,cAAc,KAAK,SAAS,MAAM,EAAE,CAAC,CAAC;IACpF,oGAAoG;IACpG,QAAQ,CAAC,YAAY,EAAE,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../../src/shared/acp/profile.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/* oxlint-disable typescript/promise-function-async -- Deadline callbacks deliberately return the SDK's native promises. */
|
|
2
2
|
import { methods, PROTOCOL_VERSION, } from "@agentclientprotocol/sdk";
|
|
3
3
|
import { asRecord } from "../json.js";
|
|
4
|
-
import { applyAcpEffort } from "./effort.js";
|
|
4
|
+
import { applyAcpEffort, applyAcpModel } from "./effort.js";
|
|
5
5
|
import { withAcpDeadline } from "./process.js";
|
|
6
6
|
export { createUsageUpdateGate } from "./usage-wait.js";
|
|
7
7
|
export function hasAcpCapability(value) {
|
|
@@ -14,11 +14,11 @@ function responseRecord(method, value) {
|
|
|
14
14
|
}
|
|
15
15
|
return response;
|
|
16
16
|
}
|
|
17
|
-
export async function promptAcp(process, sessionId,
|
|
17
|
+
export async function promptAcp(process, sessionId, prompt, extraParams = {}) {
|
|
18
18
|
const method = methods.agent.session.prompt;
|
|
19
19
|
const response = await withAcpDeadline(process, method, null, (requestOptions) => process.connection.agent.request(method, {
|
|
20
20
|
sessionId,
|
|
21
|
-
prompt
|
|
21
|
+
prompt,
|
|
22
22
|
...extraParams,
|
|
23
23
|
}, requestOptions));
|
|
24
24
|
// The SDK's built-in session router yields once before OAR's update handler.
|
|
@@ -33,12 +33,14 @@ export async function closeAcpSession(process, sessionId) {
|
|
|
33
33
|
}
|
|
34
34
|
async function initialize(process, profile, options, observe) {
|
|
35
35
|
const meta = profile.initializeMeta?.(options);
|
|
36
|
+
const capabilitiesMeta = profile.clientCapabilitiesMeta?.(options);
|
|
36
37
|
const method = methods.agent.initialize;
|
|
37
38
|
const initialized = await withAcpDeadline(process, method, profile.requestTimeoutMs ?? 15_000, (requestOptions) => process.connection.agent.request(method, {
|
|
38
39
|
protocolVersion: PROTOCOL_VERSION,
|
|
39
40
|
clientCapabilities: {
|
|
40
41
|
fs: { readTextFile: false, writeTextFile: false },
|
|
41
42
|
terminal: true,
|
|
43
|
+
...(capabilitiesMeta === undefined ? {} : { _meta: capabilitiesMeta }),
|
|
42
44
|
},
|
|
43
45
|
clientInfo: { name: "oar", version: "0.0.0" },
|
|
44
46
|
...(meta === undefined ? {} : { _meta: meta }),
|
|
@@ -91,13 +93,17 @@ export async function openAcpSession(process, profile, options, observe = () =>
|
|
|
91
93
|
const initialized = await initialize(process, profile, options, observe);
|
|
92
94
|
const opened = await createOrResume(process, profile, initialized, options, profile.sessionMeta?.(options));
|
|
93
95
|
observe({ method: opened.openMethod, response: opened.response });
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
96
|
+
const setModelResponse = options.model === undefined
|
|
97
|
+
? undefined
|
|
98
|
+
: await applyAcpModel(process, opened.sessionId, options.model, {
|
|
99
|
+
viaConfigOption: profile.modelViaConfigOption === true,
|
|
100
|
+
timeoutMs: profile.requestTimeoutMs ?? 15_000,
|
|
101
|
+
observe,
|
|
102
|
+
});
|
|
103
|
+
// A model switch re-derives the effort menu, so effort reads its answer when it lists one.
|
|
104
|
+
const configAnswer = Array.isArray(setModelResponse?.configOptions) ? setModelResponse : opened.response;
|
|
99
105
|
if (options.effort !== undefined) {
|
|
100
|
-
await applyAcpEffort(process, opened, options.effort, {
|
|
106
|
+
await applyAcpEffort(process, { ...opened, response: configAnswer }, options.effort, {
|
|
101
107
|
timeoutMs: profile.requestTimeoutMs ?? 15_000,
|
|
102
108
|
observe,
|
|
103
109
|
});
|
|
@@ -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,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../../../src/shared/acp/profile.ts"],"names":[],"mappings":"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"}
|
|
@@ -35,7 +35,9 @@ export interface AcpRecorder {
|
|
|
35
35
|
* "subagent_spawned" | "subagent_progress", parent_session_id,
|
|
36
36
|
* child_session_id, subagent_type, …}}`: snake_case, nested under `update`;
|
|
37
37
|
* its `subagent_finished` carries only `child_session_id`, the parent being
|
|
38
|
-
* the envelope's `sessionId`.
|
|
38
|
+
* the envelope's `sessionId`. cursor-agent 2026.09.28 names the child
|
|
39
|
+
* `subagentSessionId` in a parent `session/update` (`subagent_spawned`,
|
|
40
|
+
* `subagent_state_update`). A flat camelCase `{parentSessionId,
|
|
39
41
|
* childSessionId | sessionId}` is the fixture spelling.
|
|
40
42
|
*/
|
|
41
43
|
export declare function acpLineageOf(params: JsonRecord): {
|
|
@@ -1 +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;
|
|
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;AAGvD;;;;;;;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,+KAA+K;IAC/K,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;;;;;;;;;;;GAWG;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,CAqFzE"}
|
|
@@ -2,6 +2,7 @@ import { asRecord } from "../json.js";
|
|
|
2
2
|
import { acpReportedEffort, acpReportedModel } from "./model.js";
|
|
3
3
|
import { methods } from "./process.js";
|
|
4
4
|
import { createAcpProjectionState, projectAcpUpdate } from "./projection.js";
|
|
5
|
+
import { carriedVendorUpdate } from "./vendor-updates.js";
|
|
5
6
|
function stringField(record, names) {
|
|
6
7
|
for (const name of names) {
|
|
7
8
|
const value = record[name];
|
|
@@ -18,7 +19,9 @@ function stringField(record, names) {
|
|
|
18
19
|
* "subagent_spawned" | "subagent_progress", parent_session_id,
|
|
19
20
|
* child_session_id, subagent_type, …}}`: snake_case, nested under `update`;
|
|
20
21
|
* its `subagent_finished` carries only `child_session_id`, the parent being
|
|
21
|
-
* the envelope's `sessionId`.
|
|
22
|
+
* the envelope's `sessionId`. cursor-agent 2026.09.28 names the child
|
|
23
|
+
* `subagentSessionId` in a parent `session/update` (`subagent_spawned`,
|
|
24
|
+
* `subagent_state_update`). A flat camelCase `{parentSessionId,
|
|
22
25
|
* childSessionId | sessionId}` is the fixture spelling.
|
|
23
26
|
*/
|
|
24
27
|
export function acpLineageOf(params) {
|
|
@@ -31,14 +34,14 @@ export function acpLineageOf(params) {
|
|
|
31
34
|
}
|
|
32
35
|
// Nested: an explicit child, the parent explicit or the envelope's own id.
|
|
33
36
|
const update = asRecord(params.update);
|
|
34
|
-
const nestedChild = update === null ? null : stringField(update, ["childSessionId", "child_session_id"]);
|
|
37
|
+
const nestedChild = update === null ? null : stringField(update, ["childSessionId", "child_session_id", "subagentSessionId"]);
|
|
35
38
|
const nestedParent = update === null ? null : (stringField(update, ["parentSessionId", "parent_session_id"]) ?? envelope);
|
|
36
39
|
if (nestedParent !== null && nestedChild !== null && nestedParent !== nestedChild) {
|
|
37
40
|
return { parent: nestedParent, child: nestedChild };
|
|
38
41
|
}
|
|
39
42
|
return null;
|
|
40
43
|
}
|
|
41
|
-
function
|
|
44
|
+
function linkLineage(kernel, params) {
|
|
42
45
|
const lineage = acpLineageOf(params);
|
|
43
46
|
if (lineage !== null) {
|
|
44
47
|
kernel.link({ ...lineage, via: "tool_call" });
|
|
@@ -71,9 +74,13 @@ export function createAcpRecorder(usageGate) {
|
|
|
71
74
|
append(kernel);
|
|
72
75
|
}
|
|
73
76
|
},
|
|
74
|
-
update(
|
|
77
|
+
update(received) {
|
|
75
78
|
write((kernel) => {
|
|
76
|
-
|
|
79
|
+
// A vendor kind carried past the SDK's parse is recorded as the
|
|
80
|
+
// runtime sent it (vendor-updates.ts).
|
|
81
|
+
const carried = carriedVendorUpdate(received);
|
|
82
|
+
const notification = carried === null ? received : { ...received, update: carried };
|
|
83
|
+
const update = carried ?? asRecord(notification.update);
|
|
77
84
|
const { sessionId } = notification;
|
|
78
85
|
const foreign = sessionId !== kernel.sessionId;
|
|
79
86
|
if (foreign) {
|
|
@@ -85,6 +92,7 @@ export function createAcpRecorder(usageGate) {
|
|
|
85
92
|
if (!foreign) {
|
|
86
93
|
usageGate.observe(events.some((event) => event.kind === "usage") ? record.seq : undefined);
|
|
87
94
|
}
|
|
95
|
+
linkLineage(kernel, notification);
|
|
88
96
|
});
|
|
89
97
|
},
|
|
90
98
|
extension(method, params) {
|
|
@@ -101,7 +109,7 @@ export function createAcpRecorder(usageGate) {
|
|
|
101
109
|
kernel.node(sessionId);
|
|
102
110
|
}
|
|
103
111
|
kernel.frame({ type: method, native: params, events: [] }, foreign ? { sessionId } : undefined);
|
|
104
|
-
|
|
112
|
+
linkLineage(kernel, params);
|
|
105
113
|
});
|
|
106
114
|
},
|
|
107
115
|
step(method, response) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"records.js","sourceRoot":"","sources":["../../../src/shared/acp/records.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAmB,MAAM,YAAY,CAAC;AAEvD,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,EAAE,OAAO,EAA4B,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,gBAAgB,EAA2B,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"records.js","sourceRoot":"","sources":["../../../src/shared/acp/records.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/shared/acp/session.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAQV,YAAY,EACb,MAAM,4BAA4B,CAAC;AAIpC,OAAO,EAIL,KAAK,iBAAiB,EACvB,MAAM,cAAc,CAAC;AAMtB,YAAY,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AActD,wBAAgB,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,YAAY,
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/shared/acp/session.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAQV,YAAY,EACb,MAAM,4BAA4B,CAAC;AAIpC,OAAO,EAIL,KAAK,iBAAiB,EACvB,MAAM,cAAc,CAAC;AAMtB,YAAY,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AActD,wBAAgB,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,YAAY,CAiInE"}
|
|
@@ -5,7 +5,7 @@ import { closeAcpSession, createUsageUpdateGate, openAcpSession, } from "./profi
|
|
|
5
5
|
import { startAcpProcess } from "./process.js";
|
|
6
6
|
import { createAcpRecorder } from "./records.js";
|
|
7
7
|
import { createAcpTerminalHost } from "./terminal.js";
|
|
8
|
-
import { createAcpTurns } from "./turns.js";
|
|
8
|
+
import { acpTakesImages, createAcpTurns } from "./turns.js";
|
|
9
9
|
/*
|
|
10
10
|
* ACP mapping onto the record stream (shared by grok and kimi; profiles carry the vendor bits):
|
|
11
11
|
* - every `session/update` is ONE event record, native verbatim, for WHATEVER
|
|
@@ -46,8 +46,13 @@ export function acpSession(profile) {
|
|
|
46
46
|
recorder.answered(id, reply);
|
|
47
47
|
},
|
|
48
48
|
extensionNotifications: profile.extensionNotifications ?? [],
|
|
49
|
+
extensionRequests: profile.extensionRequests ?? [],
|
|
50
|
+
});
|
|
51
|
+
const runtime = startAcpProcess(installation.command, args, client, {
|
|
52
|
+
cwd: options.cwd,
|
|
53
|
+
env: environment,
|
|
54
|
+
...(profile.vendorSessionUpdates === undefined ? {} : { vendorSessionUpdates: profile.vendorSessionUpdates }),
|
|
49
55
|
});
|
|
50
|
-
const runtime = startAcpProcess(installation.command, args, client, { cwd: options.cwd, env: environment });
|
|
51
56
|
const opened = await openAcpSession(runtime, profile, options, (step) => {
|
|
52
57
|
recorder.step(step.method, step.response);
|
|
53
58
|
}).catch(async (error) => {
|
|
@@ -59,7 +64,8 @@ export function acpSession(profile) {
|
|
|
59
64
|
const kernel = createSessionKernel(opened.sessionId);
|
|
60
65
|
recorder.bind(kernel);
|
|
61
66
|
let disposeRequest = null;
|
|
62
|
-
const
|
|
67
|
+
const capabilities = { ...profile.capabilities, images: profile.capabilities.images ?? acpTakesImages(opened.initialized) };
|
|
68
|
+
const turns = createAcpTurns({ kernel, runtime, profile, usageGate, capabilities });
|
|
63
69
|
// oxlint-disable-next-line promise/prefer-await-to-then, promise/always-return -- Exit observation outlives session creation.
|
|
64
70
|
void runtime.exited.then((code) => {
|
|
65
71
|
void terminalHost.dispose();
|
|
@@ -83,8 +89,8 @@ export function acpSession(profile) {
|
|
|
83
89
|
};
|
|
84
90
|
return sealSession({
|
|
85
91
|
id: kernel.sessionId,
|
|
86
|
-
capabilities
|
|
87
|
-
prompt: (input, inputOptions) => control({ kind: "prompt", input, ...inputOptions }, (request) => (turns.active() === null ? turns.begin(request, input) : { kind: "rejected", code: "busy", reason: "busy" })),
|
|
92
|
+
capabilities,
|
|
93
|
+
prompt: (input, inputOptions) => control({ kind: "prompt", input, ...inputOptions }, (request) => (turns.active() === null ? turns.begin(request, input, inputOptions?.images) : { kind: "rejected", code: "busy", reason: "busy" })),
|
|
88
94
|
steer: (input, inputOptions) => control({ kind: "steer", input, ...inputOptions }, () => {
|
|
89
95
|
const steerParams = profile.steerParams;
|
|
90
96
|
if (steerParams === undefined) {
|
|
@@ -93,9 +99,9 @@ export function acpSession(profile) {
|
|
|
93
99
|
const state = turns.active();
|
|
94
100
|
return state === null
|
|
95
101
|
? { kind: "rejected", code: "no_active_turn", reason: "not_steerable: no active turn" }
|
|
96
|
-
: turns.steer(state, input, steerParams(input));
|
|
102
|
+
: turns.steer(state, input, inputOptions?.images, steerParams(input));
|
|
97
103
|
}),
|
|
98
|
-
queue: (input, inputOptions) => control({ kind: "queue", input, ...inputOptions }, () => turns.hold(input)),
|
|
104
|
+
queue: (input, inputOptions) => control({ kind: "queue", input, ...inputOptions }, () => turns.hold(input, inputOptions?.images)),
|
|
99
105
|
abort: () => control({ kind: "abort" }, () => {
|
|
100
106
|
const state = turns.active();
|
|
101
107
|
return state === null ? { kind: "rejected", code: "no_active_turn", reason: "no active turn" } : turns.abort(state);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/shared/acp/session.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,cAAc,GAEf,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/shared/acp/session.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { RequestRecord, ResponseBody, TurnOutcome } from "../../contracts/session.js";
|
|
2
|
-
import type
|
|
1
|
+
import type { InputImage, RequestRecord, ResponseBody, SessionCapabilities, TurnOutcome } from "../../contracts/session.js";
|
|
2
|
+
import { type JsonRecord } from "../json.js";
|
|
3
3
|
import type { SessionKernel } from "../session-kernel.js";
|
|
4
4
|
import { type AcpSessionProfile } from "./profile.js";
|
|
5
5
|
import { type AcpProcess } from "./process.js";
|
|
@@ -23,16 +23,18 @@ export interface ActiveTurn {
|
|
|
23
23
|
latestRequest: number;
|
|
24
24
|
fallback: NodeJS.Timeout | null;
|
|
25
25
|
}
|
|
26
|
+
/** The agent advertised image prompts in `initialize` (`agentCapabilities.promptCapabilities.image`). */
|
|
27
|
+
export declare function acpTakesImages(initialized: JsonRecord): boolean;
|
|
26
28
|
export interface AcpTurns {
|
|
27
29
|
active(): ActiveTurn | null;
|
|
28
|
-
/** Open a turn with one prompt RPC; rejected when the process is gone. */
|
|
29
|
-
begin(request: RequestRecord | null, input: string): ResponseBody;
|
|
30
|
-
/** Another prompt RPC inside the active turn (the profile's steer params); rejected
|
|
31
|
-
steer(state: ActiveTurn, input: string, extraParams: JsonRecord): Promise<ResponseBody>;
|
|
30
|
+
/** Open a turn with one prompt RPC; rejected when the process is gone or its images can't go (`inputImagesRefusal`). */
|
|
31
|
+
begin(request: RequestRecord | null, input: string, images?: readonly InputImage[]): ResponseBody;
|
|
32
|
+
/** Another prompt RPC inside the active turn (the profile's steer params); rejected like `begin`. */
|
|
33
|
+
steer(state: ActiveTurn, input: string, images: readonly InputImage[] | undefined, extraParams: JsonRecord): Promise<ResponseBody>;
|
|
32
34
|
/** session/cancel, then a bounded wait after which the process is killed. */
|
|
33
35
|
abort(state: ActiveTurn): Promise<ResponseBody>;
|
|
34
|
-
/** Hold input for the next turn, drained when the active one closes; rejected
|
|
35
|
-
hold(input: string): Promise<ResponseBody>;
|
|
36
|
+
/** Hold input for the next turn, drained when the active one closes; rejected like `begin`. */
|
|
37
|
+
hold(input: string, images?: readonly InputImage[]): Promise<ResponseBody>;
|
|
36
38
|
/** The process is gone: close the active turn (its end is the exited response) and drop held input. */
|
|
37
39
|
onExit(): void;
|
|
38
40
|
}
|
|
@@ -41,5 +43,6 @@ export declare function createAcpTurns(deps: {
|
|
|
41
43
|
readonly runtime: AcpProcess;
|
|
42
44
|
readonly profile: AcpSessionProfile;
|
|
43
45
|
readonly usageGate: UsageUpdateGate;
|
|
46
|
+
readonly capabilities: Pick<SessionCapabilities, "images">;
|
|
44
47
|
}): AcpTurns;
|
|
45
48
|
//# sourceMappingURL=turns.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"turns.d.ts","sourceRoot":"","sources":["../../../src/shared/acp/turns.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,aAAa,EACb,YAAY,
|
|
1
|
+
{"version":3,"file":"turns.d.ts","sourceRoot":"","sources":["../../../src/shared/acp/turns.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EAEV,aAAa,EACb,YAAY,EACZ,mBAAmB,EAEnB,WAAW,EACZ,MAAM,4BAA4B,CAAC;AAGpC,OAAO,EAAY,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAAa,KAAK,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAAW,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAMxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvD;;;;;;;;;GASG;AACH,MAAM,WAAW,UAAU;IACzB,6FAA6F;IAC7F,QAAQ,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC5C,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9B,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;CACjC;AAED,yGAAyG;AACzG,wBAAgB,cAAc,CAAC,WAAW,EAAE,UAAU,GAAG,OAAO,CAE/D;AAUD,MAAM,WAAW,QAAQ;IACvB,MAAM,IAAI,UAAU,GAAG,IAAI,CAAC;IAC5B,wHAAwH;IACxH,KAAK,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,UAAU,EAAE,GAAG,YAAY,CAAC;IAClG,qGAAqG;IACrG,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,UAAU,EAAE,GAAG,SAAS,EAAE,WAAW,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACnI,6EAA6E;IAC7E,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAChD,+FAA+F;IAC/F,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,UAAU,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAC3E,uGAAuG;IACvG,MAAM,IAAI,IAAI,CAAC;CAChB;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE;IACnC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;IACpC,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAC;IACpC,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAAC;CAC5D,GAAG,QAAQ,CAqKX"}
|
package/dist/shared/acp/turns.js
CHANGED
|
@@ -1,9 +1,23 @@
|
|
|
1
|
+
import { pathToFileURL } from "node:url";
|
|
2
|
+
import { withInputImages } from "../input-images.js";
|
|
3
|
+
import { asRecord } from "../json.js";
|
|
1
4
|
import { AcpError, acpProcessExitedError } from "./errors.js";
|
|
2
5
|
import { promptAcp } from "./profile.js";
|
|
3
6
|
import { methods } from "./process.js";
|
|
4
7
|
import { acpErrorNative, acpFailureOutcome, defaultAcpPromptOutcome, } from "./projection.js";
|
|
8
|
+
/** The agent advertised image prompts in `initialize` (`agentCapabilities.promptCapabilities.image`). */
|
|
9
|
+
export function acpTakesImages(initialized) {
|
|
10
|
+
return asRecord(asRecord(initialized.agentCapabilities)?.promptCapabilities)?.image === true;
|
|
11
|
+
}
|
|
12
|
+
/** One input as ACP ContentBlocks: the images (each naming its file as `uri`), then the text. */
|
|
13
|
+
function acpPrompt(input, images) {
|
|
14
|
+
return [
|
|
15
|
+
...images.map((image) => ({ type: "image", mimeType: image.mediaType, data: image.data, uri: pathToFileURL(image.path).href })),
|
|
16
|
+
{ type: "text", text: input },
|
|
17
|
+
];
|
|
18
|
+
}
|
|
5
19
|
export function createAcpTurns(deps) {
|
|
6
|
-
const { kernel, runtime, profile, usageGate } = deps;
|
|
20
|
+
const { kernel, runtime, profile, usageGate, capabilities } = deps;
|
|
7
21
|
const rootId = kernel.sessionId;
|
|
8
22
|
const held = [];
|
|
9
23
|
let active = null;
|
|
@@ -36,7 +50,7 @@ export function createAcpTurns(deps) {
|
|
|
36
50
|
closeTurn(state);
|
|
37
51
|
}
|
|
38
52
|
};
|
|
39
|
-
const startVendorPrompt = (state,
|
|
53
|
+
const startVendorPrompt = (state, prompt, extraParams = {}) => {
|
|
40
54
|
nextRequest += 1;
|
|
41
55
|
const requestNumber = nextRequest;
|
|
42
56
|
state.latestRequest = requestNumber;
|
|
@@ -44,7 +58,7 @@ export function createAcpTurns(deps) {
|
|
|
44
58
|
void (async () => {
|
|
45
59
|
try {
|
|
46
60
|
usageGate.arm();
|
|
47
|
-
const result = await promptAcp(runtime, rootId,
|
|
61
|
+
const result = await promptAcp(runtime, rootId, prompt, extraParams);
|
|
48
62
|
// Deliberate ordering: the answer's event waits (bounded) for the
|
|
49
63
|
// usage_update kimi pushes AFTER answering, so the usage record
|
|
50
64
|
// precedes the turn end and contextUsage() at turn_ended is this
|
|
@@ -82,7 +96,7 @@ export function createAcpTurns(deps) {
|
|
|
82
96
|
})();
|
|
83
97
|
};
|
|
84
98
|
const gone = () => ({ kind: "rejected", code: "runtime_exited", reason: acpProcessExitedError(runtime.exitCode).message });
|
|
85
|
-
const
|
|
99
|
+
const open = (request, prompt) => {
|
|
86
100
|
if (runtime.closed) {
|
|
87
101
|
return gone();
|
|
88
102
|
}
|
|
@@ -95,30 +109,33 @@ export function createAcpTurns(deps) {
|
|
|
95
109
|
fallback: null,
|
|
96
110
|
};
|
|
97
111
|
active = state;
|
|
98
|
-
startVendorPrompt(state,
|
|
112
|
+
startVendorPrompt(state, prompt);
|
|
99
113
|
return { kind: "accepted" };
|
|
100
114
|
};
|
|
115
|
+
const begin = (request, input, images) => withInputImages(capabilities, images, (loaded) => open(request, acpPrompt(input, loaded)));
|
|
101
116
|
function drainHeld() {
|
|
102
117
|
// Held input is dropped once the stream says the runtime is unreachable
|
|
103
118
|
// (an `exited` response or a `dispose` request), not by an adapter flag.
|
|
104
119
|
if (kernel.unreachable() !== null || active !== null || runtime.closed) {
|
|
105
120
|
return;
|
|
106
121
|
}
|
|
107
|
-
const
|
|
108
|
-
if (
|
|
109
|
-
|
|
122
|
+
const prompt = held.shift();
|
|
123
|
+
if (prompt !== undefined) {
|
|
124
|
+
open(null, prompt);
|
|
110
125
|
}
|
|
111
126
|
}
|
|
112
127
|
return {
|
|
113
128
|
active: () => active,
|
|
114
129
|
begin,
|
|
115
|
-
async steer(state, input, extraParams) {
|
|
130
|
+
async steer(state, input, images, extraParams) {
|
|
116
131
|
await runtime.spawned;
|
|
117
132
|
if (runtime.closed) {
|
|
118
133
|
return gone();
|
|
119
134
|
}
|
|
120
|
-
|
|
121
|
-
|
|
135
|
+
return withInputImages(capabilities, images, (loaded) => {
|
|
136
|
+
startVendorPrompt(state, acpPrompt(input, loaded), extraParams);
|
|
137
|
+
return { kind: "accepted" };
|
|
138
|
+
});
|
|
122
139
|
},
|
|
123
140
|
async abort(state) {
|
|
124
141
|
if (!state.abortRequested) {
|
|
@@ -140,14 +157,16 @@ export function createAcpTurns(deps) {
|
|
|
140
157
|
}
|
|
141
158
|
return { kind: "accepted" };
|
|
142
159
|
},
|
|
143
|
-
async hold(input) {
|
|
160
|
+
async hold(input, images) {
|
|
144
161
|
await runtime.spawned;
|
|
145
162
|
if (runtime.closed) {
|
|
146
163
|
return gone();
|
|
147
164
|
}
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
165
|
+
return withInputImages(capabilities, images, (loaded) => {
|
|
166
|
+
held.push(acpPrompt(input, loaded));
|
|
167
|
+
queueMicrotask(drainHeld);
|
|
168
|
+
return { kind: "accepted" };
|
|
169
|
+
});
|
|
151
170
|
},
|
|
152
171
|
onExit() {
|
|
153
172
|
if (active !== null) {
|