@agentclientprotocol/claude-agent-acp 0.99.2-preview.10 → 0.99.2-preview.12
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/dist/acp-agent.d.ts +43 -16
- package/dist/acp-agent.d.ts.map +1 -1
- package/dist/acp-agent.js +72 -42
- package/dist/background-work.d.ts +122 -0
- package/dist/background-work.d.ts.map +1 -0
- package/dist/background-work.js +248 -0
- package/dist/native-subagents.d.ts +7 -0
- package/dist/native-subagents.d.ts.map +1 -1
- package/dist/native-subagents.js +25 -0
- package/dist/v2/agent.d.ts.map +1 -1
- package/dist/v2/agent.js +35 -18
- package/dist/v2/background.d.ts +54 -0
- package/dist/v2/background.d.ts.map +1 -0
- package/dist/v2/background.js +123 -0
- package/dist/v2/terminal.d.ts +8 -0
- package/dist/v2/terminal.d.ts.map +1 -1
- package/dist/v2/terminal.js +22 -0
- package/package.json +2 -2
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The background work of a session: the work that Claude Code keeps running
|
|
3
|
+
* independently of the session's foreground work, which ACP v2 lists on every
|
|
4
|
+
* `state_update` of the session as `background` (the v2 prompt lifecycle,
|
|
5
|
+
* "Background work").
|
|
6
|
+
*
|
|
7
|
+
* The lists are built from Claude Code's live background task set
|
|
8
|
+
* (`background_tasks_changed`), without the tasks it marks `ambient`, which
|
|
9
|
+
* are housekeeping that it started on its own. The root session and each
|
|
10
|
+
* announced subagent session (the subagents RFD form) has its own list. Each
|
|
11
|
+
* task is listed once, in the list of the session that runs it:
|
|
12
|
+
*
|
|
13
|
+
* - A command that went to the background: its display terminal, from the
|
|
14
|
+
* Bash tool result until its task ends (`Session.backgroundTerminals`).
|
|
15
|
+
* - A detached subagent: its child session, in its parent's list, while it
|
|
16
|
+
* works, and while it is idle with background work of its own.
|
|
17
|
+
* - Any other task, such as a `Monitor` or a `Workflow`: a `_claude/task`
|
|
18
|
+
* item with the task's id and description. Its tool call ended at its tool
|
|
19
|
+
* result, so it cannot be listed as a tool call.
|
|
20
|
+
*
|
|
21
|
+
* Only a session whose interrupt spares background tasks reports its lists
|
|
22
|
+
* (`Session.reportsBackground`): `session/cancel` must leave listed work
|
|
23
|
+
* running.
|
|
24
|
+
*/
|
|
25
|
+
import { RequestError } from "@agentclientprotocol/sdk/unstable";
|
|
26
|
+
/** The level of a `background_tasks_changed` payload. */
|
|
27
|
+
export function backgroundLevel(tasks) {
|
|
28
|
+
return new Map(tasks.map((task) => [
|
|
29
|
+
task.task_id,
|
|
30
|
+
{
|
|
31
|
+
ambient: task.ambient === true,
|
|
32
|
+
taskType: task.task_type,
|
|
33
|
+
description: task.description,
|
|
34
|
+
...(task.parent_task_id !== undefined ? { parentTaskId: task.parent_task_id } : {}),
|
|
35
|
+
},
|
|
36
|
+
]));
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* The `background` list of the root session `rootSessionId` and of each of
|
|
40
|
+
* its announced subagent sessions, by session id, deeper sessions first and
|
|
41
|
+
* the root last. Each list is empty while
|
|
42
|
+
* the level has not been reported: Claude Code sends none before the first
|
|
43
|
+
* background task starts.
|
|
44
|
+
*/
|
|
45
|
+
export function backgroundLists(session, rootSessionId) {
|
|
46
|
+
const children = [...(session.nativeSubagentsByTaskId ?? [])].filter(([, child]) => child.announced);
|
|
47
|
+
const childByTask = new Map(children);
|
|
48
|
+
const childByToolUse = new Map(children.flatMap(([, child]) => child.parentToolUseId ? [[child.parentToolUseId, child]] : []));
|
|
49
|
+
const lists = new Map([
|
|
50
|
+
[rootSessionId, []],
|
|
51
|
+
...children.map(([, child]) => [child.sessionId, []]),
|
|
52
|
+
]);
|
|
53
|
+
const level = session.backgroundLevel ?? new Map();
|
|
54
|
+
for (const [taskId, task] of level) {
|
|
55
|
+
if (task.ambient)
|
|
56
|
+
continue;
|
|
57
|
+
const terminal = session.backgroundTerminals?.get(taskId);
|
|
58
|
+
if (terminal) {
|
|
59
|
+
// A subagent's command runs on the child's stream.
|
|
60
|
+
const owner = terminal.parentToolUseId
|
|
61
|
+
? childByToolUse.get(terminal.parentToolUseId)?.sessionId
|
|
62
|
+
: rootSessionId;
|
|
63
|
+
if (owner)
|
|
64
|
+
lists.get(owner).push({ type: "terminal", terminalId: terminal.toolCallId });
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
// A command without a terminal yet is one that foreground work waits on.
|
|
68
|
+
// A subagent is listed below, as its session.
|
|
69
|
+
if (task.taskType === "local_bash" || task.taskType === "local_agent")
|
|
70
|
+
continue;
|
|
71
|
+
const parent = task.parentTaskId ? childByTask.get(task.parentTaskId) : undefined;
|
|
72
|
+
lists
|
|
73
|
+
.get(parent?.sessionId ?? rootSessionId)
|
|
74
|
+
.push({ type: "_claude/task", taskId, description: task.description });
|
|
75
|
+
}
|
|
76
|
+
// A child is listed in its parent's list while it works in the background,
|
|
77
|
+
// and while it is idle with background work of its own. Deeper children
|
|
78
|
+
// first, so a child's list is whole before its parent's reads it.
|
|
79
|
+
const sessions = new Map(children.map(([, child]) => [child.sessionId, child]));
|
|
80
|
+
const depth = (child) => {
|
|
81
|
+
const parent = sessions.get(child.parentSessionId);
|
|
82
|
+
return parent ? depth(parent) + 1 : 0;
|
|
83
|
+
};
|
|
84
|
+
for (const [taskId, child] of children.sort(([, a], [, b]) => depth(b) - depth(a))) {
|
|
85
|
+
const task = level.get(taskId);
|
|
86
|
+
const working = child.workState !== undefined &&
|
|
87
|
+
child.workState !== "idle" &&
|
|
88
|
+
task !== undefined &&
|
|
89
|
+
!task.ambient;
|
|
90
|
+
if (working || lists.get(child.sessionId).length > 0) {
|
|
91
|
+
lists.get(child.parentSessionId)?.push({ type: "subagent", sessionId: child.sessionId });
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
// In the same order, the root last: a child's own list goes out before its
|
|
95
|
+
// parent's list drops it.
|
|
96
|
+
return new Map([
|
|
97
|
+
...children.map(([, child]) => [
|
|
98
|
+
child.sessionId,
|
|
99
|
+
lists.get(child.sessionId),
|
|
100
|
+
]),
|
|
101
|
+
[rootSessionId, lists.get(rootSessionId)],
|
|
102
|
+
]);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* The tasks of the terminals that `level` does not hold: Claude Code no
|
|
106
|
+
* longer runs them, so their terminals exit before a list drops them, as v2
|
|
107
|
+
* requires. A terminal is registered at its Bash result, after its task
|
|
108
|
+
* joined the level, so a later level without the task means that it ended.
|
|
109
|
+
* Claude Code usually sends a task's end before that level, which ends the
|
|
110
|
+
* terminal first, but the SDK does not promise that order.
|
|
111
|
+
*/
|
|
112
|
+
export function droppedTerminalTasks(session, level) {
|
|
113
|
+
return [...(session.backgroundTerminals?.keys() ?? [])].filter((taskId) => !level.has(taskId));
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Removes the terminal of the background command `taskId` of the session
|
|
117
|
+
* `sessionId`, and returns the update that exits it, or undefined when the
|
|
118
|
+
* command has no terminal. Claude Code reports no exit code for it, and
|
|
119
|
+
* `completed` does not mean 0: Claude Code accepts some non-zero codes as a
|
|
120
|
+
* success, such as grep's 1.
|
|
121
|
+
*/
|
|
122
|
+
export function takeBackgroundTerminalExit(session, sessionId, taskId) {
|
|
123
|
+
const terminal = session.backgroundTerminals?.get(taskId);
|
|
124
|
+
if (!terminal)
|
|
125
|
+
return undefined;
|
|
126
|
+
session.backgroundTerminals.delete(taskId);
|
|
127
|
+
return {
|
|
128
|
+
sessionId,
|
|
129
|
+
update: {
|
|
130
|
+
sessionUpdate: "tool_call_update",
|
|
131
|
+
toolCallId: terminal.toolCallId,
|
|
132
|
+
_meta: {
|
|
133
|
+
...(terminal.parentToolUseId
|
|
134
|
+
? { claudeCode: { parentToolUseId: terminal.parentToolUseId } }
|
|
135
|
+
: {}),
|
|
136
|
+
terminal_exit: { terminal_id: terminal.toolCallId, exit_code: null, signal: null },
|
|
137
|
+
},
|
|
138
|
+
},
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Ends the background work of a session whose query closed: Claude Code's
|
|
143
|
+
* background tasks end with its process. Returns the updates that exit the
|
|
144
|
+
* root session's terminals, and empties the level, so the next lists are
|
|
145
|
+
* empty. A subagent's command is left as it was: its terminal is on the
|
|
146
|
+
* child's stream, which the closed query's routing owned.
|
|
147
|
+
*/
|
|
148
|
+
export function endBackgroundWork(session, sessionId) {
|
|
149
|
+
if (!session.reportsBackground)
|
|
150
|
+
return [];
|
|
151
|
+
const exits = [...(session.backgroundTerminals ?? [])].flatMap(([taskId, terminal]) => {
|
|
152
|
+
const exit = terminal.parentToolUseId
|
|
153
|
+
? undefined
|
|
154
|
+
: takeBackgroundTerminalExit(session, sessionId, taskId);
|
|
155
|
+
return exit ? [exit] : [];
|
|
156
|
+
});
|
|
157
|
+
session.backgroundLevel = undefined;
|
|
158
|
+
return exits;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Stops the background command whose terminal `terminalId` the session
|
|
162
|
+
* `sessionId` lists (v2 `terminal/cancel`). `sessions` are the root sessions,
|
|
163
|
+
* by id: a subagent session's list is built with its root's. The terminal
|
|
164
|
+
* exits when Claude Code reports the task stopped.
|
|
165
|
+
*/
|
|
166
|
+
export async function cancelBackgroundTerminal(sessions, sessionId, terminalId) {
|
|
167
|
+
const notCancellable = () => RequestError.invalidParams({ sessionId, terminalId }, `Terminal ${terminalId} is not a command running in the background, so it cannot be cancelled.`);
|
|
168
|
+
const listed = (root, session) => session.reportsBackground === true &&
|
|
169
|
+
(backgroundLists(session, root)
|
|
170
|
+
.get(sessionId)
|
|
171
|
+
?.some((item) => item.type === "terminal" && item.terminalId === terminalId) ??
|
|
172
|
+
false);
|
|
173
|
+
const owner = Object.entries(sessions).find(([root, session]) => listed(root, session));
|
|
174
|
+
if (!owner)
|
|
175
|
+
throw notCancellable();
|
|
176
|
+
const [root, session] = owner;
|
|
177
|
+
const taskId = [...(session.backgroundTerminals ?? [])].find(([, terminal]) => terminal.toolCallId === terminalId)[0];
|
|
178
|
+
try {
|
|
179
|
+
await session.query.stopTask(taskId);
|
|
180
|
+
}
|
|
181
|
+
catch (error) {
|
|
182
|
+
// The command ended meanwhile: it has exited, or is about to.
|
|
183
|
+
if (!listed(root, session))
|
|
184
|
+
throw notCancellable();
|
|
185
|
+
throw error;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Publishes the lists of each session that reports them, each time one
|
|
190
|
+
* changes. The sink sends them to the client synchronously, so a list follows
|
|
191
|
+
* the updates sent before it.
|
|
192
|
+
*/
|
|
193
|
+
export class BackgroundWorkReporter {
|
|
194
|
+
sink;
|
|
195
|
+
/** The list last published for each session, as JSON, and the root session it is built with. */
|
|
196
|
+
published = new Map();
|
|
197
|
+
constructor(sink) {
|
|
198
|
+
this.sink = sink;
|
|
199
|
+
}
|
|
200
|
+
/** Whether the lists are reported at all. */
|
|
201
|
+
get enabled() {
|
|
202
|
+
return this.sink !== undefined;
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Publishes each list of the root session `rootSessionId` that changed. The
|
|
206
|
+
* first call for a session publishes its list, also when it is empty.
|
|
207
|
+
* `rootState` is the root session's state now.
|
|
208
|
+
*/
|
|
209
|
+
sync(rootSessionId, session, rootState) {
|
|
210
|
+
if (!this.sink || !session.reportsBackground)
|
|
211
|
+
return;
|
|
212
|
+
const children = new Map([...(session.nativeSubagentsByTaskId?.values() ?? [])].map((child) => [
|
|
213
|
+
child.sessionId,
|
|
214
|
+
child,
|
|
215
|
+
]));
|
|
216
|
+
for (const [sessionId, items] of backgroundLists(session, rootSessionId)) {
|
|
217
|
+
const json = JSON.stringify(items);
|
|
218
|
+
if (this.published.get(sessionId)?.json === json)
|
|
219
|
+
continue;
|
|
220
|
+
this.published.set(sessionId, { json, root: rootSessionId });
|
|
221
|
+
const child = children.get(sessionId);
|
|
222
|
+
this.sink.changed({
|
|
223
|
+
sessionId,
|
|
224
|
+
items,
|
|
225
|
+
state: child ? workStateName(child.workState) : rootState,
|
|
226
|
+
...(child ? { parentSessionId: child.parentSessionId } : {}),
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
/** The root session `rootSessionId` ended, and its subagent sessions with it. */
|
|
231
|
+
forget(rootSessionId) {
|
|
232
|
+
for (const [sessionId, { root }] of this.published) {
|
|
233
|
+
if (root !== rootSessionId)
|
|
234
|
+
continue;
|
|
235
|
+
this.published.delete(sessionId);
|
|
236
|
+
this.sink?.forget(sessionId);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
/** A child's work state, when it is one that v2 names. */
|
|
241
|
+
function workStateName(state) {
|
|
242
|
+
return state === "idle" ||
|
|
243
|
+
state === "running" ||
|
|
244
|
+
state === "requires_action" ||
|
|
245
|
+
state === "unknown"
|
|
246
|
+
? state
|
|
247
|
+
: undefined;
|
|
248
|
+
}
|
|
@@ -218,6 +218,13 @@ export declare class NativeSubagentRuntime {
|
|
|
218
218
|
* `sessionId` of this live session, or undefined when no such child runs here.
|
|
219
219
|
*/
|
|
220
220
|
liveWorkState(sessionId: string): WorkState["state"] | undefined;
|
|
221
|
+
/**
|
|
222
|
+
* The RFD form: the `subagent_update` that tells a client that holds nothing
|
|
223
|
+
* of the announced child `sessionId` of this live session what it is now:
|
|
224
|
+
* its labels, its directory, its `cancel` capability, and its work state.
|
|
225
|
+
* Undefined when no such child runs here.
|
|
226
|
+
*/
|
|
227
|
+
currentUpdate(sessionId: string): AcpSessionNotification | undefined;
|
|
221
228
|
/**
|
|
222
229
|
* Reports the model of a child response, an exact model id, as the entry of
|
|
223
230
|
* the root session's `model` option that matches it, else as the id (see
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native-subagents.d.ts","sourceRoot":"","sources":["../src/native-subagents.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"native-subagents.d.ts","sourceRoot":"","sources":["../src/native-subagents.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACzB,MAAM,mCAAmC,CAAC;AAG3C,OAAO,KAAK,EAAE,sBAAsB,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAK9F,kFAAkF;AAClF,MAAM,MAAM,SAAS,GAAG,WAAW,CACjC,OAAO,CAAC,mBAAmB,CAAC,QAAQ,CAAC,EAAE;IAAE,aAAa,EAAE,iBAAiB,CAAA;CAAE,CAAC,CAAC,OAAO,CAAC,CACtF,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2DAA2D;IAC3D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;IAC/B;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,4EAA4E;IAC5E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;gDAC4C;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8EAA8E;IAC9E,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACxB,6EAA6E;IAC7E,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACxB,4FAA4F;IAC5F,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,0EAA0E;IAC1E,eAAe,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,4FAA4F;IAC5F,aAAa,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,0EAA0E;IAC1E,eAAe,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,mGAAmG;IACnG,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,uBAAuB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACtD,+BAA+B,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtD,+BAA+B,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvD,CAAC;AAEF,KAAK,OAAO,GAAG,CAAC,YAAY,EAAE,sBAAsB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AACvE,KAAK,MAAM,GAAG;IAAE,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;AAE7C,qDAAqD;AACrD,MAAM,MAAM,UAAU,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzD;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B;;;OAGG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;IAC7C,gGAAgG;IAChG,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CACzC,CAAC;AAUF,oEAAoE;AACpE,MAAM,MAAM,OAAO,GAAG;IACpB,oCAAoC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qEAAqE;IACrE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,KAAK,WAAW,GAAG;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AASF,8EAA8E;AAC9E,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,QAAQ,EAAE,MAAM,CAAC;IACjB,kEAAkE;IAClE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,uFAAuF;IACvF,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,kBAAkB,EAAE,CAAC,CAAC;AAE1F;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;AAQ9E;;;GAGG;AACH,qBAAa,qBAAqB;IA6E9B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;IACzB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IAlF1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,gEAAgE;IAChE,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,CAAC;IAExC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA8B;IACvD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAsB;IACpD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAsB;IACtD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAuC;IACzE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA6C;IAC9E,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAyC;IACzE;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA6B;IAC1D,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAqC;IAC1E;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAqC;IACrE,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAoC;IACvE,mDAAmD;IACnD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA6B;IAC7D;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA8C;IAC7E;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAG/B;IACJ;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,SAAS,CAGtB;IACJ,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA6B;IAChE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+C;IACvE,OAAO,CAAC,YAAY,CAAK;IACzB,yEAAyE;IACzE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAoC;IAClE,yEAAyE;IACzE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAoC;IACnE,6EAA6E;IAC7E,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAqB;IACxD,iFAAiF;IACjF,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAqB;IACxD,8DAA8D;IAC9D,OAAO,CAAC,sBAAsB,CAAK;IACnC,wFAAwF;IACxF,OAAO,CAAC,YAAY,CAAK;IACzB,wFAAwF;IACxF,OAAO,CAAC,aAAa,CAAK;IAE1B;;;;;;OAMG;gBAED,IAAI,EAAE,YAAY,GAAG,SAAS,EACb,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,qBAAqB,EAC9B,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,eAAe,YAAA,EACzB,aAAa,CAAC,EAAE,aAAa,YAAA,EAC7B,MAAM,CAAC,EAAE,cAAc,YAAA;IAcpC,KAAK,CACT,YAAY,EAAE,sBAAsB,EACpC,OAAO,EAAE,OAAO,EAChB,eAAe,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC;IAOzC;;;OAGG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,SAAS;IAMhE;;;;;OAKG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,sBAAsB,GAAG,SAAS;IAkBpE;;;;;;OAMG;IACG,WAAW,CACf,eAAe,EAAE,MAAM,GAAG,IAAI,EAC9B,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,IAAI,CAAC;IAuBhB,8FAA8F;IAC9F,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,mBAAmB,EAAE,GAAG,SAAS;IAMrE;;;;OAIG;IACG,mBAAmB,CACvB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,mBAAmB,EAAE,EAC9B,IAAI,CAAC,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAC5C,OAAO,CAAC,IAAI,CAAC;YAgCF,oBAAoB;IA4ClC;;;;;;;;OAQG;IACG,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoB5D;;;;OAIG;YACW,aAAa;IAU3B;;;;OAIG;IACH,OAAO,CAAC,YAAY;IAWpB,4FAA4F;YAC9E,UAAU;YAgBV,WAAW;IA+HnB,WAAW,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAmFrE;;;;;;;;;;;;;OAaG;IACG,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA6BnF;;;;;OAKG;IACG,kBAAkB,CACtB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,EAChB,MAAM,CAAC,EAAE,MAAM,EACf,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC;IAUhB;;;OAGG;IACH,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO;IAKhF;;;;OAIG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO;IAWzE;;;OAGG;IACG,UAAU,CACd,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,OAAO,EACf,OAAO,EAAE,OAAO,EAChB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,EACzB,GAAG,CAAC,EAAE,OAAO,GACZ,OAAO,CAAC,IAAI,CAAC;IAqDhB;;;;;;OAMG;IACG,SAAS,CAAC,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBtE;;;;;;;;;OASG;IACG,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAKtD;;;;;;;;;;;OAWG;IACG,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAW/F;;;;;;;;;;;;;OAaG;IACG,YAAY,CAAC,CAAC,EAClB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACzB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,CAAC,CAAC;IAwBb,cAAc,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI;IAI7C;;;;;;;;;;;;;;;OAeG;YACW,OAAO;IAwDrB;;;;OAIG;IACH,OAAO,CAAC,cAAc;IAMtB,uEAAuE;IACvE,OAAO,CAAC,YAAY;IAUpB;;;;OAIG;IACH,OAAO,CAAC,aAAa;IA4BrB;;;;;;;;;OASG;IACH,OAAO,CAAC,YAAY;IA4CpB;;;;;;;;OAQG;YACW,WAAW;IAiCzB;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ;IAYhB;;;OAGG;YACW,WAAW;IASzB;;;OAGG;YACW,QAAQ;IAUtB,uEAAuE;YACzD,WAAW;IASzB;;;OAGG;IACH,OAAO,CAAC,OAAO;IAiBf;;;;;;;;;;;OAWG;IACH,eAAe,CACb,UAAU,EAAE,MAAM,EAClB,cAAc,CAAC,EAAE,MAAM,GACtB,CAAC,CAAC,YAAY,EAAE,sBAAsB,KAAK,sBAAsB,GAAG,IAAI,CAAC,GAAG,SAAS;IAcxF;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAa3B;;;;;;;OAOG;YACW,cAAc;IAsC5B;;;;;OAKG;YACW,gBAAgB;IAqC9B;;;;;;;OAOG;IACH,OAAO,CAAC,mBAAmB;IA8B3B;iEAC6D;IAC7D,OAAO,CAAC,eAAe;IAYvB,OAAO,CAAC,qBAAqB;IAS7B;;;;;OAKG;IACH,OAAO,CAAC,YAAY;IAYpB,4EAA4E;IAC5E,OAAO,CAAC,cAAc;IAQtB,KAAK,IAAI,IAAI;IAqBb,qFAAqF;IACrF,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,MAAM;IA+Bd,OAAO,CAAC,cAAc;IAMtB,0FAA0F;IAC1F,OAAO,CAAC,sBAAsB;IAM9B,OAAO,CAAC,aAAa;IAQrB;;;;OAIG;YACW,cAAc;IAkC5B;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,kBAAkB;CAoB3B;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,GAAG,mBAAmB,CASvE;AAED,8DAA8D;AAC9D,wBAAgB,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,SAAS,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAEvF;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,cAAc,GAAG,SAAS,GACjC,UAAU,GAAG,SAAS,CAGxB;AAED;;;;;;;GAOG;AACH,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,YAAY,EAClB,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,IAAI,CAAC,CAoDf;AAED,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,IAAI,CAAC,CAsBf;AA2CD;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,MAAM,EACvB,kBAAkB,EAAE,MAAM,EAC1B,IAAI,EAAE,MAAM,GACX,sBAAsB,EAAE,CAkB1B;AAED;;;;;GAKG;AACH,eAAO,MAAM,aAAa,qBAAqB,CAAC;AAEhD,6DAA6D;AAC7D,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAGlE;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CACzB,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,EACtB,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,OAAO,CACb,sBAAsB,CAAC,QAAQ,CAAC,EAChC;IAAE,aAAa,EAAE,kBAAkB,GAAG,WAAW,CAAA;CAAE,CACpD,GACA,sBAAsB,GAAG,SAAS,CAapC;AAmCD;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,CAmBrF;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CACvB,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,OAAO,EACb,WAAW,EAAE,OAAO,GACnB;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAQzD;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,aAAa,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAIlF;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,CAAC,EACtE,OAAO,EAAE,MAAM,EACf,gBAAgB,GAAE,SAAS,MAAM,EAAO,GACvC,MAAM,GAAG,SAAS,CAEpB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,CAAC,EACtE,OAAO,EAAE,MAAM,EACf,gBAAgB,GAAE,SAAS,MAAM,EAAO,GACvC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAkBlD;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,OAAO,GAAG,aAAa,GAAG,SAAS,CAM9E;AAED,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,sBAAsB,CAAC,QAAQ,CAAC,GACvC,MAAM,IAAI,OAAO,CAClB,sBAAsB,CAAC,QAAQ,CAAC,EAChC;IAAE,aAAa,EAAE,WAAW,GAAG,kBAAkB,CAAA;CAAE,CACpD,CASA;AAED,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO,CAEtE;AA4LD;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAKjF"}
|
package/dist/native-subagents.js
CHANGED
|
@@ -123,6 +123,31 @@ export class NativeSubagentRuntime {
|
|
|
123
123
|
const child = this.children.get(sessionId);
|
|
124
124
|
return child?.announced ? child.workState : undefined;
|
|
125
125
|
}
|
|
126
|
+
/**
|
|
127
|
+
* The RFD form: the `subagent_update` that tells a client that holds nothing
|
|
128
|
+
* of the announced child `sessionId` of this live session what it is now:
|
|
129
|
+
* its labels, its directory, its `cancel` capability, and its work state.
|
|
130
|
+
* Undefined when no such child runs here.
|
|
131
|
+
*/
|
|
132
|
+
currentUpdate(sessionId) {
|
|
133
|
+
if (this.form !== "rfd")
|
|
134
|
+
return undefined;
|
|
135
|
+
const child = this.childOfSession(sessionId);
|
|
136
|
+
if (!child?.announced || !child.workState)
|
|
137
|
+
return undefined;
|
|
138
|
+
return {
|
|
139
|
+
sessionId: child.parentSessionId,
|
|
140
|
+
update: {
|
|
141
|
+
sessionUpdate: "subagent_update",
|
|
142
|
+
sessionId: child.sessionId,
|
|
143
|
+
...(child.title ? { title: child.title } : {}),
|
|
144
|
+
...(child.description ? { description: child.description } : {}),
|
|
145
|
+
...(child.reportedCwd ? { cwd: child.reportedCwd } : {}),
|
|
146
|
+
capabilities: { cancel: {} },
|
|
147
|
+
state: { state: child.workState },
|
|
148
|
+
},
|
|
149
|
+
};
|
|
150
|
+
}
|
|
126
151
|
/**
|
|
127
152
|
* Reports the model of a child response, an exact model id, as the entry of
|
|
128
153
|
* the root session's `model` option that matches it, else as the id (see
|
package/dist/v2/agent.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/v2/agent.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,MAAM,mDAAmD,CAAC;AACxE,OAAO,EAAE,cAAc,EAAkB,KAAK,MAAM,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/v2/agent.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,MAAM,mDAAmD,CAAC;AACxE,OAAO,EAAE,cAAc,EAAkB,KAAK,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAsB9E;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,OAAO,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,GACvC,EAAE,CAAC,QAAQ,CAiIb"}
|
package/dist/v2/agent.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as v2 from "@agentclientprotocol/sdk/experimental/v2/unstable";
|
|
2
2
|
import { ClaudeAcpAgent } from "../acp-agent.js";
|
|
3
|
+
import { stateUpdate, V2Background } from "./background.js";
|
|
3
4
|
import { v1InitializeRequest, v2InitializeResponse } from "./initialize.js";
|
|
4
5
|
import { v1PermissionResponse, v2PermissionRequest } from "./permission.js";
|
|
5
6
|
import { v2Foreground, v2Prompt } from "./prompt.js";
|
|
@@ -29,6 +30,14 @@ export function v2AgentApp(logger, onAgent) {
|
|
|
29
30
|
foreground: (sessionId) => v2Foreground((update) => {
|
|
30
31
|
void client.send({ sessionId, update });
|
|
31
32
|
}),
|
|
33
|
+
background: {
|
|
34
|
+
changed: (report) => {
|
|
35
|
+
for (const notification of client.background.changed(report)) {
|
|
36
|
+
void client.send(notification);
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
forget: (sessionId) => client.background.forget(sessionId),
|
|
40
|
+
},
|
|
32
41
|
});
|
|
33
42
|
onAgent(agent);
|
|
34
43
|
})
|
|
@@ -57,10 +66,16 @@ export function v2AgentApp(logger, onAgent) {
|
|
|
57
66
|
await agent.publishCurrentSessionInfo(params.sessionId);
|
|
58
67
|
// v2 requires a snapshot of the foreground state after the replay and
|
|
59
68
|
// before the response, also without a replay: a resumed live session can
|
|
60
|
-
// be running a turn, or waiting on a permission request.
|
|
69
|
+
// be running a turn, or waiting on a permission request. The current
|
|
70
|
+
// state of each subagent and terminal it lists comes first, as v2
|
|
71
|
+
// requires. The subagents' go again after the response (see below).
|
|
72
|
+
await agent.publishLiveSubagents(params.sessionId, client.background.listedSubagents(params.sessionId));
|
|
73
|
+
for (const notification of client.background.currentTerminals(params.sessionId)) {
|
|
74
|
+
void client.send(notification);
|
|
75
|
+
}
|
|
61
76
|
void client.send({
|
|
62
77
|
sessionId: params.sessionId,
|
|
63
|
-
update:
|
|
78
|
+
update: stateUpdate(agent.foregroundState(params.sessionId)),
|
|
64
79
|
});
|
|
65
80
|
const commands = await setupCommands(agent, params.sessionId, logger);
|
|
66
81
|
// The response ends a replay. The subagents RFD treats the replayed
|
|
@@ -103,16 +118,12 @@ export function v2AgentApp(logger, onAgent) {
|
|
|
103
118
|
.onRequest(v2.methods.agent.session.prompt, ({ params }) => v2Prompt(agent, params, (update) => {
|
|
104
119
|
void client.send({ sessionId: params.sessionId, update });
|
|
105
120
|
}))
|
|
121
|
+
.onRequest(v2.methods.agent.terminal.cancel, async ({ params }) => {
|
|
122
|
+
await agent.cancelBackgroundTerminal(params);
|
|
123
|
+
return {};
|
|
124
|
+
})
|
|
106
125
|
.onNotification(v2.methods.agent.session.cancel, ({ params }) => agent.cancel(params));
|
|
107
126
|
}
|
|
108
|
-
/** The `state_update` that reports `state` as the current foreground state. */
|
|
109
|
-
function stateSnapshot(state) {
|
|
110
|
-
if (state === "idle")
|
|
111
|
-
return { sessionUpdate: "state_update", state: "idle" };
|
|
112
|
-
if (state === "running")
|
|
113
|
-
return { sessionUpdate: "state_update", state: "running" };
|
|
114
|
-
return { sessionUpdate: "state_update", state: "requires_action" };
|
|
115
|
-
}
|
|
116
127
|
/**
|
|
117
128
|
* The `availableCommands` of a setup response, which v2 requires when the
|
|
118
129
|
* session has commands. The agent sends a v1 client the same list as an
|
|
@@ -179,6 +190,8 @@ class V2ClientConnection {
|
|
|
179
190
|
terminals = new V2Terminals();
|
|
180
191
|
/** The `_meta` that the client stores for each tool call. */
|
|
181
192
|
toolCallMeta = new V2ToolCallMeta();
|
|
193
|
+
/** The `background` list of each session's `state_update`s. */
|
|
194
|
+
background = new V2Background(this.terminals);
|
|
182
195
|
constructor(ctx, logger) {
|
|
183
196
|
this.ctx = ctx;
|
|
184
197
|
this.logger = logger;
|
|
@@ -225,7 +238,9 @@ class V2ClientConnection {
|
|
|
225
238
|
* request opening.)
|
|
226
239
|
*/
|
|
227
240
|
send(notification) {
|
|
228
|
-
return this.ctx
|
|
241
|
+
return this.ctx
|
|
242
|
+
.notify(v2.methods.client.session.update, this.background.stamp(notification))
|
|
243
|
+
.catch((error) => {
|
|
229
244
|
this.logger.error(`Failed to send a ${notification.update.sessionUpdate} update:`, error);
|
|
230
245
|
});
|
|
231
246
|
}
|
|
@@ -257,11 +272,13 @@ class V2ClientConnection {
|
|
|
257
272
|
childState = undefined;
|
|
258
273
|
}
|
|
259
274
|
// Every update goes to the connection before any is awaited, so an update
|
|
260
|
-
// that another call sends meanwhile cannot come between them.
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
...(
|
|
264
|
-
|
|
275
|
+
// that another call sends meanwhile cannot come between them. The parent's
|
|
276
|
+
// copy is stamped first: a child's announcement starts its list.
|
|
277
|
+
const stamped = [
|
|
278
|
+
...updates.map((v2Update) => this.background.stamp({ ...notification, update: v2Update })),
|
|
279
|
+
...(childState ? [this.background.stamp(childState)] : []),
|
|
280
|
+
];
|
|
281
|
+
await Promise.all(stamped.map((v2Notification) => this.ctx.notify(v2.methods.client.session.update, v2Notification)));
|
|
265
282
|
}
|
|
266
283
|
/**
|
|
267
284
|
* The v2 updates of a v1 update: for a tool call report, the updates of its
|
|
@@ -316,7 +333,7 @@ class V2ClientConnection {
|
|
|
316
333
|
async requestPermission(params, signal) {
|
|
317
334
|
// The subject is an update of the tool call, with its stored `_meta`.
|
|
318
335
|
const toolCall = this.toolCallMeta.subject(params.sessionId, params.toolCall);
|
|
319
|
-
const response = await this.ctx.request(v2.methods.client.session.requestPermission, v2PermissionRequest({ ...params, toolCall }), { cancellationSignal: signal });
|
|
336
|
+
const response = await this.ctx.request(v2.methods.client.session.requestPermission, v2PermissionRequest({ ...params, toolCall }), { cancellationSignal: signal, stopWaitingOnCancel: true });
|
|
320
337
|
return v1PermissionResponse(response);
|
|
321
338
|
}
|
|
322
339
|
// Elicitation is the same in v1 and v2.
|
|
@@ -325,7 +342,7 @@ class V2ClientConnection {
|
|
|
325
342
|
// The v1 types accept a property schema with any tag; the v2 types accept
|
|
326
343
|
// one only in a received value. As on v1, an MCP server's schema is
|
|
327
344
|
// relayed here unchanged, so this cast does not check it.
|
|
328
|
-
params, { cancellationSignal: signal });
|
|
345
|
+
params, { cancellationSignal: signal, stopWaitingOnCancel: true });
|
|
329
346
|
}
|
|
330
347
|
completeElicitation(params) {
|
|
331
348
|
return this.ctx.notify(v2.methods.client.elicitation.complete, params);
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `background` lists of the v2 sessions of a connection (see
|
|
3
|
+
* `background-work.ts`, which builds them).
|
|
4
|
+
*
|
|
5
|
+
* A session that reports its background work gets its list on every
|
|
6
|
+
* `state_update` of its own stream, as v2 requires, from the list the agent
|
|
7
|
+
* reports when the session starts. A subagent session of such a session
|
|
8
|
+
* reports its own list from its announcement on, also in the parent's mirror
|
|
9
|
+
* of its state (`subagent_update.state`).
|
|
10
|
+
*/
|
|
11
|
+
import type * as v2 from "@agentclientprotocol/sdk/experimental/v2/unstable";
|
|
12
|
+
import type { BackgroundReport, WorkStateName } from "../background-work.js";
|
|
13
|
+
import type { V2Terminals } from "./terminal.js";
|
|
14
|
+
/** The `state_update` that reports `state` as the session's current work state. */
|
|
15
|
+
export declare function stateUpdate(state: WorkStateName): v2.SessionUpdate;
|
|
16
|
+
export declare class V2Background {
|
|
17
|
+
private readonly terminals;
|
|
18
|
+
/**
|
|
19
|
+
* The latest list of each session that reports one, whether a state of the
|
|
20
|
+
* session carried it, and the parent of a subagent session.
|
|
21
|
+
*/
|
|
22
|
+
private readonly sessions;
|
|
23
|
+
constructor(terminals: V2Terminals);
|
|
24
|
+
/**
|
|
25
|
+
* `notification` with the session's list, when it is a `state_update` of a
|
|
26
|
+
* session that reports one, or a `subagent_update` that mirrors the state of
|
|
27
|
+
* such a child. A child of a session that reports its list reports its own
|
|
28
|
+
* from its announcement on: empty, until the agent reports it.
|
|
29
|
+
*/
|
|
30
|
+
stamp(notification: v2.UpdateSessionNotification): v2.UpdateSessionNotification;
|
|
31
|
+
/**
|
|
32
|
+
* Records the new list of a session, and returns the updates that report it:
|
|
33
|
+
*
|
|
34
|
+
* - For each terminal that the list adds, a `terminal_update` that lets the
|
|
35
|
+
* client cancel it. It also comes before the first list that names the
|
|
36
|
+
* terminal, as v2 requires: the terminal's own updates came earlier.
|
|
37
|
+
* - Once a state of the session carried a list, the state again with the
|
|
38
|
+
* new list, without a stop reason: a repeated `idle` is no new
|
|
39
|
+
* completion. A subagent's goes to its parent's mirror first, as its
|
|
40
|
+
* other states do.
|
|
41
|
+
*/
|
|
42
|
+
changed(report: BackgroundReport): v2.UpdateSessionNotification[];
|
|
43
|
+
/**
|
|
44
|
+
* The current `terminal_update` of each terminal that the session
|
|
45
|
+
* `sessionId` lists. v2 requires it before the state snapshot of
|
|
46
|
+
* `session/resume`, as a replay may not have delivered it.
|
|
47
|
+
*/
|
|
48
|
+
currentTerminals(sessionId: string): v2.UpdateSessionNotification[];
|
|
49
|
+
/** The subagent sessions that the session `sessionId` lists. */
|
|
50
|
+
listedSubagents(sessionId: string): string[];
|
|
51
|
+
/** Forgets the list of a session, and those of its subagent sessions. */
|
|
52
|
+
forget(sessionId: string): void;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=background.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"background.d.ts","sourceRoot":"","sources":["../../src/v2/background.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,KAAK,EAAE,MAAM,mDAAmD,CAAC;AAC7E,OAAO,KAAK,EAAkB,gBAAgB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC7F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAUjD,mFAAmF;AACnF,wBAAgB,WAAW,CAAC,KAAK,EAAE,aAAa,GAAG,EAAE,CAAC,aAAa,CAElE;AAOD,qBAAa,YAAY;IAUX,OAAO,CAAC,QAAQ,CAAC,SAAS;IATtC;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAGrB;gBAEyB,SAAS,EAAE,WAAW;IAEnD;;;;;OAKG;IACH,KAAK,CAAC,YAAY,EAAE,EAAE,CAAC,yBAAyB,GAAG,EAAE,CAAC,yBAAyB;IAyB/E;;;;;;;;;;OAUG;IACH,OAAO,CAAC,MAAM,EAAE,gBAAgB,GAAG,EAAE,CAAC,yBAAyB,EAAE;IA6BjE;;;;OAIG;IACH,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,EAAE,CAAC,yBAAyB,EAAE;IAQnE,gEAAgE;IAChE,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE;IAM5C,yEAAyE;IACzE,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;CAMhC"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/** `state` as the current work state of a session, with no stop reason. */
|
|
2
|
+
function currentState(state) {
|
|
3
|
+
if (state === "idle")
|
|
4
|
+
return { state: "idle" };
|
|
5
|
+
if (state === "running")
|
|
6
|
+
return { state: "running" };
|
|
7
|
+
if (state === "requires_action")
|
|
8
|
+
return { state: "requires_action" };
|
|
9
|
+
return { state: "unknown" };
|
|
10
|
+
}
|
|
11
|
+
/** The `state_update` that reports `state` as the session's current work state. */
|
|
12
|
+
export function stateUpdate(state) {
|
|
13
|
+
return { sessionUpdate: "state_update", ...currentState(state) };
|
|
14
|
+
}
|
|
15
|
+
/** `state` with the list `background`. */
|
|
16
|
+
function withBackground(state, background) {
|
|
17
|
+
return { ...state, background };
|
|
18
|
+
}
|
|
19
|
+
export class V2Background {
|
|
20
|
+
terminals;
|
|
21
|
+
/**
|
|
22
|
+
* The latest list of each session that reports one, whether a state of the
|
|
23
|
+
* session carried it, and the parent of a subagent session.
|
|
24
|
+
*/
|
|
25
|
+
sessions = new Map();
|
|
26
|
+
constructor(terminals) {
|
|
27
|
+
this.terminals = terminals;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* `notification` with the session's list, when it is a `state_update` of a
|
|
31
|
+
* session that reports one, or a `subagent_update` that mirrors the state of
|
|
32
|
+
* such a child. A child of a session that reports its list reports its own
|
|
33
|
+
* from its announcement on: empty, until the agent reports it.
|
|
34
|
+
*/
|
|
35
|
+
stamp(notification) {
|
|
36
|
+
const { sessionId, update } = notification;
|
|
37
|
+
if (update.sessionUpdate === "state_update") {
|
|
38
|
+
const session = this.sessions.get(sessionId);
|
|
39
|
+
if (!session)
|
|
40
|
+
return notification;
|
|
41
|
+
session.reported = true;
|
|
42
|
+
return { ...notification, update: { ...update, background: session.items } };
|
|
43
|
+
}
|
|
44
|
+
if (update.sessionUpdate === "subagent_update" && this.sessions.has(sessionId)) {
|
|
45
|
+
const subagent = update;
|
|
46
|
+
let child = this.sessions.get(subagent.sessionId);
|
|
47
|
+
if (!child) {
|
|
48
|
+
child = { items: [], reported: false, parent: sessionId };
|
|
49
|
+
this.sessions.set(subagent.sessionId, child);
|
|
50
|
+
}
|
|
51
|
+
if (subagent.state) {
|
|
52
|
+
return {
|
|
53
|
+
...notification,
|
|
54
|
+
update: { ...subagent, state: withBackground(subagent.state, child.items) },
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return notification;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Records the new list of a session, and returns the updates that report it:
|
|
62
|
+
*
|
|
63
|
+
* - For each terminal that the list adds, a `terminal_update` that lets the
|
|
64
|
+
* client cancel it. It also comes before the first list that names the
|
|
65
|
+
* terminal, as v2 requires: the terminal's own updates came earlier.
|
|
66
|
+
* - Once a state of the session carried a list, the state again with the
|
|
67
|
+
* new list, without a stop reason: a repeated `idle` is no new
|
|
68
|
+
* completion. A subagent's goes to its parent's mirror first, as its
|
|
69
|
+
* other states do.
|
|
70
|
+
*/
|
|
71
|
+
changed(report) {
|
|
72
|
+
const { sessionId, items, state, parentSessionId } = report;
|
|
73
|
+
const session = this.sessions.get(sessionId);
|
|
74
|
+
const unchanged = session && JSON.stringify(session.items) === JSON.stringify(items);
|
|
75
|
+
this.sessions.set(sessionId, {
|
|
76
|
+
items,
|
|
77
|
+
reported: session?.reported ?? false,
|
|
78
|
+
parent: parentSessionId ?? session?.parent,
|
|
79
|
+
});
|
|
80
|
+
const known = new Set((session?.items ?? []).flatMap((item) => (item.type === "terminal" ? [item.terminalId] : [])));
|
|
81
|
+
const updates = items.flatMap((item) => {
|
|
82
|
+
if (item.type !== "terminal" || known.has(item.terminalId))
|
|
83
|
+
return [];
|
|
84
|
+
const update = this.terminals.advertiseCancel(sessionId, item.terminalId);
|
|
85
|
+
return update ? [{ sessionId, update }] : [];
|
|
86
|
+
});
|
|
87
|
+
if (session?.reported && state && !unchanged) {
|
|
88
|
+
if (parentSessionId) {
|
|
89
|
+
updates.push({
|
|
90
|
+
sessionId: parentSessionId,
|
|
91
|
+
update: { sessionUpdate: "subagent_update", sessionId, state: currentState(state) },
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
updates.push({ sessionId, update: stateUpdate(state) });
|
|
95
|
+
}
|
|
96
|
+
return updates;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* The current `terminal_update` of each terminal that the session
|
|
100
|
+
* `sessionId` lists. v2 requires it before the state snapshot of
|
|
101
|
+
* `session/resume`, as a replay may not have delivered it.
|
|
102
|
+
*/
|
|
103
|
+
currentTerminals(sessionId) {
|
|
104
|
+
return (this.sessions.get(sessionId)?.items ?? []).flatMap((item) => {
|
|
105
|
+
if (item.type !== "terminal")
|
|
106
|
+
return [];
|
|
107
|
+
const update = this.terminals.advertiseCancel(sessionId, item.terminalId, true);
|
|
108
|
+
return update ? [{ sessionId, update }] : [];
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
/** The subagent sessions that the session `sessionId` lists. */
|
|
112
|
+
listedSubagents(sessionId) {
|
|
113
|
+
return (this.sessions.get(sessionId)?.items ?? []).flatMap((item) => item.type === "subagent" ? [item.sessionId] : []);
|
|
114
|
+
}
|
|
115
|
+
/** Forgets the list of a session, and those of its subagent sessions. */
|
|
116
|
+
forget(sessionId) {
|
|
117
|
+
this.sessions.delete(sessionId);
|
|
118
|
+
for (const [child, { parent }] of this.sessions) {
|
|
119
|
+
if (parent === sessionId)
|
|
120
|
+
this.forget(child);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
package/dist/v2/terminal.d.ts
CHANGED
|
@@ -35,6 +35,14 @@ export declare class V2Terminals {
|
|
|
35
35
|
terminal: v2.SessionUpdate[];
|
|
36
36
|
report: V1ToolCallReport | undefined;
|
|
37
37
|
};
|
|
38
|
+
/**
|
|
39
|
+
* The `terminal_update` that lets the client cancel the running terminal
|
|
40
|
+
* `terminalId` of the session `sessionId` with `terminal/cancel`, with its
|
|
41
|
+
* command, or undefined when the terminal is not running. `again` sends it
|
|
42
|
+
* also when the terminal advertises the capability already, as the current
|
|
43
|
+
* state of the terminal.
|
|
44
|
+
*/
|
|
45
|
+
advertiseCancel(sessionId: string, terminalId: string, again?: boolean): v2.SessionUpdate | undefined;
|
|
38
46
|
/** Forgets the terminals of a session. */
|
|
39
47
|
forget(sessionId: string): void;
|
|
40
48
|
}
|