@excitedjs/agent-runtime-claude-code 0.5.0-beta.168 → 0.5.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 +43 -1
- package/dist/args.d.ts +2 -0
- package/dist/args.d.ts.map +1 -1
- package/dist/args.js +5 -0
- package/dist/args.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/provider.d.ts +5 -0
- package/dist/provider.d.ts.map +1 -1
- package/dist/provider.js +10 -4
- package/dist/provider.js.map +1 -1
- package/dist/rpc.d.ts +79 -6
- package/dist/rpc.d.ts.map +1 -1
- package/dist/rpc.js +329 -57
- package/dist/rpc.js.map +1 -1
- package/dist/runtime-deps.d.ts +30 -0
- package/dist/runtime-deps.d.ts.map +1 -0
- package/dist/runtime-deps.js +2 -0
- package/dist/runtime-deps.js.map +1 -0
- package/dist/runtime-session.d.ts +13 -0
- package/dist/runtime-session.d.ts.map +1 -0
- package/dist/runtime-session.js +41 -0
- package/dist/runtime-session.js.map +1 -0
- package/dist/runtime-submissions.d.ts +34 -0
- package/dist/runtime-submissions.d.ts.map +1 -0
- package/dist/runtime-submissions.js +200 -0
- package/dist/runtime-submissions.js.map +1 -0
- package/dist/runtime.d.ts +33 -131
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +286 -268
- package/dist/runtime.js.map +1 -1
- package/dist/skill-adapter.d.ts +11 -1
- package/dist/skill-adapter.d.ts.map +1 -1
- package/dist/skill-adapter.js +60 -7
- package/dist/skill-adapter.js.map +1 -1
- package/dist/skill-materializer.d.ts +6 -0
- package/dist/skill-materializer.d.ts.map +1 -0
- package/dist/skill-materializer.js +45 -0
- package/dist/skill-materializer.js.map +1 -0
- package/dist/source-reservation.d.ts +6 -0
- package/dist/source-reservation.d.ts.map +1 -0
- package/dist/source-reservation.js +48 -0
- package/dist/source-reservation.js.map +1 -0
- package/dist/stream.d.ts +3 -1
- package/dist/stream.d.ts.map +1 -1
- package/dist/stream.js +48 -1
- package/dist/stream.js.map +1 -1
- package/dist/supervisor.d.ts.map +1 -1
- package/dist/supervisor.js +68 -14
- package/dist/supervisor.js.map +1 -1
- package/dist/transcript/budget.d.ts +8 -0
- package/dist/transcript/budget.d.ts.map +1 -0
- package/dist/transcript/budget.js +9 -0
- package/dist/transcript/budget.js.map +1 -0
- package/dist/transcript/completion.d.ts +8 -0
- package/dist/transcript/completion.d.ts.map +1 -0
- package/dist/transcript/completion.js +57 -0
- package/dist/transcript/completion.js.map +1 -0
- package/dist/transcript/cursor.d.ts +25 -0
- package/dist/transcript/cursor.d.ts.map +1 -0
- package/dist/transcript/cursor.js +62 -0
- package/dist/transcript/cursor.js.map +1 -0
- package/dist/transcript/error.d.ts +9 -0
- package/dist/transcript/error.d.ts.map +1 -0
- package/dist/transcript/error.js +9 -0
- package/dist/transcript/error.js.map +1 -0
- package/dist/transcript/native-hash.d.ts +2 -0
- package/dist/transcript/native-hash.d.ts.map +1 -0
- package/dist/transcript/native-hash.js +79 -0
- package/dist/transcript/native-hash.js.map +1 -0
- package/dist/transcript/opened-file.d.ts +13 -0
- package/dist/transcript/opened-file.d.ts.map +1 -0
- package/dist/transcript/opened-file.js +110 -0
- package/dist/transcript/opened-file.js.map +1 -0
- package/dist/transcript/parallel-tools.d.ts +6 -0
- package/dist/transcript/parallel-tools.d.ts.map +1 -0
- package/dist/transcript/parallel-tools.js +123 -0
- package/dist/transcript/parallel-tools.js.map +1 -0
- package/dist/transcript/path.d.ts +25 -0
- package/dist/transcript/path.d.ts.map +1 -0
- package/dist/transcript/path.js +253 -0
- package/dist/transcript/path.js.map +1 -0
- package/dist/transcript/reader.d.ts +7 -0
- package/dist/transcript/reader.d.ts.map +1 -0
- package/dist/transcript/reader.js +476 -0
- package/dist/transcript/reader.js.map +1 -0
- package/dist/transcript/rewrites.d.ts +5 -0
- package/dist/transcript/rewrites.d.ts.map +1 -0
- package/dist/transcript/rewrites.js +65 -0
- package/dist/transcript/rewrites.js.map +1 -0
- package/dist/types.d.ts +33 -3
- package/dist/types.d.ts.map +1 -1
- package/package.json +4 -3
package/dist/rpc.js
CHANGED
|
@@ -1,22 +1,58 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Claude Code stream-json turn RPC.
|
|
3
3
|
*
|
|
4
|
-
* The supervisor owns the child process. This class owns one in-flight
|
|
5
|
-
* stdout line demux,
|
|
4
|
+
* The supervisor owns the child process. This class owns one in-flight command
|
|
5
|
+
* group, stdout line demux, command drainage, and defensive control replies.
|
|
6
|
+
*
|
|
7
|
+
* One resident CLI execution window can span several submitted commands: a
|
|
8
|
+
* live steer is written while the CLI is already running. How the CLI answers them is
|
|
9
|
+
* not fixed, which is what makes settlement subtle (probed against a live
|
|
10
|
+
* 2.1.231 resident session):
|
|
11
|
+
*
|
|
12
|
+
* - **Commands fold.** A message that arrives while the in-flight turn is
|
|
13
|
+
* inside a tool call is absorbed into that turn at the next query-loop
|
|
14
|
+
* boundary. Several commands then share ONE `result` (3 → 1 observed), and
|
|
15
|
+
* a folded command's uuid never appears on any `result`. Folding does not
|
|
16
|
+
* depend on `priority`.
|
|
17
|
+
* - **Or they do not.** A command that arrives between turns runs on its own
|
|
18
|
+
* and gets its own `result`.
|
|
19
|
+
* - **`result.user_message_uuid` is not a completion ledger.** It is present
|
|
20
|
+
* only sometimes, is not reliably the first-submitted uuid of a fold, and
|
|
21
|
+
* is absent entirely on the `error_during_execution` artifact a
|
|
22
|
+
* `priority: 'now'` interrupt produces.
|
|
23
|
+
* - **`command_lifecycle` is the attribution signal.** Started commands identify
|
|
24
|
+
* the submissions represented by the next native `result`; terminal states
|
|
25
|
+
* drain the resident execution window. Its ordering against `result` is not
|
|
26
|
+
* stable.
|
|
27
|
+
*
|
|
28
|
+
* Every valid `result` is forwarded immediately as its own native completion
|
|
29
|
+
* boundary. Lifecycle terminality only decides when the command group has
|
|
30
|
+
* drained and the resident session may accept a new initial command; it never
|
|
31
|
+
* aggregates several results into one completion.
|
|
6
32
|
*/
|
|
7
33
|
import { randomUUID } from 'node:crypto';
|
|
8
34
|
import { buildCanUseToolAllow, buildControlAck, buildRemoteControlEnable, buildUserMessage, LineBuffer, parseLine, TurnAggregator, } from './stream.js';
|
|
35
|
+
/** Provider-private admission classification; never crosses the neutral API. */
|
|
36
|
+
export class ClaudeSteerAdmissionError extends Error {
|
|
37
|
+
admission;
|
|
38
|
+
constructor(admission, message, options) {
|
|
39
|
+
super(message, options);
|
|
40
|
+
this.admission = admission;
|
|
41
|
+
this.name = 'ClaudeSteerAdmissionError';
|
|
42
|
+
}
|
|
43
|
+
}
|
|
9
44
|
export class ClaudeCodeStreamRpc {
|
|
10
45
|
stdin;
|
|
11
46
|
options;
|
|
12
47
|
lineBuf = new LineBuffer();
|
|
13
48
|
pending = null;
|
|
49
|
+
lifecycleSupported = null;
|
|
14
50
|
remoteControlRequestId = null;
|
|
15
51
|
constructor(stdin, options) {
|
|
16
52
|
this.stdin = stdin;
|
|
17
53
|
this.options = options;
|
|
18
54
|
}
|
|
19
|
-
async submitTurn(prompt, options = {}) {
|
|
55
|
+
async submitTurn(prompt, options = {}, commandUuid = randomUUID()) {
|
|
20
56
|
if (!this.stdin.writable) {
|
|
21
57
|
return Promise.reject(new Error('claude resident child is not running'));
|
|
22
58
|
}
|
|
@@ -29,37 +65,85 @@ export class ClaudeCodeStreamRpc {
|
|
|
29
65
|
reject,
|
|
30
66
|
aggregator: new TurnAggregator(),
|
|
31
67
|
timer: null,
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
68
|
+
submitted: [commandUuid],
|
|
69
|
+
terminal: new Set(),
|
|
70
|
+
startedSinceResult: new Set(),
|
|
71
|
+
ranAnyCommand: false,
|
|
72
|
+
sawResult: false,
|
|
73
|
+
lastAbnormalReason: null,
|
|
74
|
+
capabilityWaiters: [],
|
|
75
|
+
writeWaiters: new Map(),
|
|
35
76
|
};
|
|
36
77
|
this.pending = pending;
|
|
37
78
|
// Arm the idle deadline (reset on every inbound stream line in `onLine`).
|
|
38
79
|
this.armIdleTimer(pending);
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
80
|
+
try {
|
|
81
|
+
this.stdin.write(`${buildUserMessage(prompt, options, commandUuid)}\n`, (err) => {
|
|
82
|
+
if (err != null && this.pending === pending) {
|
|
83
|
+
const error = asError(err);
|
|
84
|
+
this.settlePending(error)?.reject(error);
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
if (this.pending === pending) {
|
|
90
|
+
const failure = asError(error);
|
|
91
|
+
this.settlePending(failure)?.reject(failure);
|
|
42
92
|
}
|
|
43
|
-
}
|
|
93
|
+
}
|
|
44
94
|
});
|
|
45
95
|
}
|
|
46
|
-
async steerTurn(prompt, options = {}) {
|
|
96
|
+
async steerTurn(prompt, options = {}, commandUuid = randomUUID()) {
|
|
47
97
|
if (!this.stdin.writable) {
|
|
48
|
-
return Promise.reject(
|
|
98
|
+
return Promise.reject(preAdmissionError('claude resident child is not running'));
|
|
49
99
|
}
|
|
50
100
|
if (this.pending === null) {
|
|
51
|
-
return Promise.reject(
|
|
101
|
+
return Promise.reject(preAdmissionError('claude resident session has no active turn'));
|
|
52
102
|
}
|
|
53
103
|
const pending = this.pending;
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
}
|
|
61
|
-
resolve();
|
|
104
|
+
if (this.lifecycleSupported === false) {
|
|
105
|
+
return Promise.reject(lifecycleUnsupportedError());
|
|
106
|
+
}
|
|
107
|
+
if (this.lifecycleSupported === null) {
|
|
108
|
+
return new Promise((resolve, reject) => {
|
|
109
|
+
pending.capabilityWaiters.push({ prompt, options, commandUuid, resolve, reject });
|
|
62
110
|
});
|
|
111
|
+
}
|
|
112
|
+
return this.writeSteer(pending, prompt, options, commandUuid);
|
|
113
|
+
}
|
|
114
|
+
writeSteer(pending, prompt, options, commandUuid = randomUUID()) {
|
|
115
|
+
if (this.pending !== pending) {
|
|
116
|
+
return Promise.reject(capabilityUndecidedTurnEndedError());
|
|
117
|
+
}
|
|
118
|
+
if (!this.stdin.writable) {
|
|
119
|
+
return Promise.reject(preAdmissionError('claude resident child is not running'));
|
|
120
|
+
}
|
|
121
|
+
// The steer joins this resident execution window: from here on it cannot drain
|
|
122
|
+
// until this command has also reached a terminal lifecycle state.
|
|
123
|
+
pending.submitted.push(commandUuid);
|
|
124
|
+
return new Promise((resolve, reject) => {
|
|
125
|
+
pending.writeWaiters.set(commandUuid, { resolve, reject });
|
|
126
|
+
const fail = (error) => {
|
|
127
|
+
// A steer whose write failed will never reach the CLI, so no
|
|
128
|
+
// `command_lifecycle` is coming for it: mark it terminal here or the
|
|
129
|
+
// turn waits on a signal that cannot arrive. Reject the waiter first,
|
|
130
|
+
// since marking may settle the turn and settlement rejects surviving
|
|
131
|
+
// waiters with the generic write-unconfirmed message.
|
|
132
|
+
this.rejectWriteWaiter(pending, commandUuid, ambiguousWriteError(error));
|
|
133
|
+
this.markCommandTerminal(pending, commandUuid, 'steer write failed');
|
|
134
|
+
};
|
|
135
|
+
try {
|
|
136
|
+
this.stdin.write(`${buildUserMessage(prompt, { priority: 'now', ...options }, commandUuid)}\n`, (err) => {
|
|
137
|
+
if (err != null) {
|
|
138
|
+
fail(err);
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
this.resolveWriteWaiter(pending, commandUuid);
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
catch (error) {
|
|
145
|
+
fail(error);
|
|
146
|
+
}
|
|
63
147
|
});
|
|
64
148
|
}
|
|
65
149
|
onStdoutChunk(chunk) {
|
|
@@ -67,7 +151,7 @@ export class ClaudeCodeStreamRpc {
|
|
|
67
151
|
this.onLine(parseLine(line));
|
|
68
152
|
}
|
|
69
153
|
failPending(err) {
|
|
70
|
-
this.settlePending()?.reject(err);
|
|
154
|
+
this.settlePending(err)?.reject(err);
|
|
71
155
|
}
|
|
72
156
|
enableRemoteControl() {
|
|
73
157
|
if (!this.stdin.writable)
|
|
@@ -79,17 +163,94 @@ export class ClaudeCodeStreamRpc {
|
|
|
79
163
|
* Detach the in-flight turn: clear its deadline timer and null `pending`,
|
|
80
164
|
* returning it so the caller can resolve or reject it exactly once.
|
|
81
165
|
*/
|
|
82
|
-
settlePending() {
|
|
166
|
+
settlePending(failure) {
|
|
83
167
|
const pending = this.pending;
|
|
84
168
|
if (pending === null)
|
|
85
169
|
return null;
|
|
86
170
|
if (pending.timer !== null)
|
|
87
171
|
clearTimeout(pending.timer);
|
|
88
|
-
if (pending.settleImmediate !== null)
|
|
89
|
-
clearImmediate(pending.settleImmediate);
|
|
90
172
|
this.pending = null;
|
|
173
|
+
// On an explicit failure (write error, stop, idle reap) both waiter kinds
|
|
174
|
+
// get the real error. On a clean `result` settlement there is no error:
|
|
175
|
+
// capability waiters never got a decision, while write waiters were written
|
|
176
|
+
// but unconfirmed — distinct messages for distinct conditions.
|
|
177
|
+
this.rejectCapabilityWaiters(pending, failure ?? capabilityUndecidedTurnEndedError());
|
|
178
|
+
this.rejectWriteWaiters(pending, failure ?? steerWriteUnconfirmedError());
|
|
91
179
|
return pending;
|
|
92
180
|
}
|
|
181
|
+
/**
|
|
182
|
+
* Mark a submitted command as producing nothing further, then re-check
|
|
183
|
+
* settlement. `abnormalReason` is `null` for the normal ending (`completed`)
|
|
184
|
+
* and a short phrase for a command that never ran — those are logged,
|
|
185
|
+
* because the CLI gives no other trace of a command it declined.
|
|
186
|
+
*
|
|
187
|
+
* A command ending abnormally never fails the turn by itself: the probe
|
|
188
|
+
* shows a `cancelled` command coexisting with another that answers normally
|
|
189
|
+
* (that is exactly what a `priority: 'now'` interrupt looks like), so
|
|
190
|
+
* rejecting on `cancelled` — as the pre-#342 code did — is wrong.
|
|
191
|
+
*/
|
|
192
|
+
markCommandTerminal(pending, commandUuid, abnormalReason) {
|
|
193
|
+
if (!pending.submitted.includes(commandUuid))
|
|
194
|
+
return;
|
|
195
|
+
if (!pending.terminal.has(commandUuid)) {
|
|
196
|
+
pending.terminal.add(commandUuid);
|
|
197
|
+
if (abnormalReason === null) {
|
|
198
|
+
pending.ranAnyCommand = true;
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
pending.lastAbnormalReason = abnormalReason;
|
|
202
|
+
this.options.log?.('warn', `claude command ${commandUuid} ${abnormalReason}; it will not ` +
|
|
203
|
+
'produce further output for this turn');
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
this.settleIfReady(pending);
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* The drainage gate: every submitted command has reached a terminal
|
|
210
|
+
* lifecycle state AND at least one valid `result` has been seen. Result
|
|
211
|
+
* identity and settlement have already been forwarded one-by-one.
|
|
212
|
+
*
|
|
213
|
+
* Two escapes, both anti-hang:
|
|
214
|
+
*
|
|
215
|
+
* - no lifecycle signal at all (`msg_lifecycle_v1` absent, so no
|
|
216
|
+
* `command_lifecycle` will ever arrive) — the `result` is then the only
|
|
217
|
+
* terminal event there is, so settle on it;
|
|
218
|
+
* - every command terminal, none of them ever ran, and no result — nothing
|
|
219
|
+
* can answer this turn, so fail it loudly. The idle deadline is not an
|
|
220
|
+
* acceptable backstop here: it reaps the resident child, and any inbound
|
|
221
|
+
* line re-arms it, so a healthy session could be killed long after the
|
|
222
|
+
* turn became unanswerable.
|
|
223
|
+
*
|
|
224
|
+
* When a command *did* run but no result has arrived yet, this waits: the
|
|
225
|
+
* probe shows terminal lifecycle states arriving both before and after the
|
|
226
|
+
* result they belong to, so "terminal, therefore no result is coming" is not
|
|
227
|
+
* a sound inference.
|
|
228
|
+
*/
|
|
229
|
+
settleIfReady(pending) {
|
|
230
|
+
if (this.pending !== pending)
|
|
231
|
+
return;
|
|
232
|
+
if (pending.sawResult && this.lifecycleSupported !== true) {
|
|
233
|
+
this.settlePending()?.resolve();
|
|
234
|
+
return;
|
|
235
|
+
}
|
|
236
|
+
if (pending.startedSinceResult.size > 0)
|
|
237
|
+
return;
|
|
238
|
+
for (const commandUuid of pending.submitted) {
|
|
239
|
+
if (!pending.terminal.has(commandUuid))
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
if (pending.sawResult) {
|
|
243
|
+
this.settlePending()?.resolve();
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
if (pending.ranAnyCommand)
|
|
247
|
+
return;
|
|
248
|
+
const error = new Error('claude turn ended without running any of its commands ' +
|
|
249
|
+
`(last: ${pending.lastAbnormalReason ?? 'no command reached the CLI'})`);
|
|
250
|
+
// Pass the cause into `settlePending` so surviving steer waiters get the
|
|
251
|
+
// real reason instead of the generic write-unconfirmed message.
|
|
252
|
+
this.settlePending(error)?.reject(error);
|
|
253
|
+
}
|
|
93
254
|
/**
|
|
94
255
|
* (Re)arm the per-turn idle deadline. `turnTimeoutMs` is a *max-idle* window,
|
|
95
256
|
* not a total-turn cap: any inbound stream line for this turn pushes it out
|
|
@@ -103,9 +264,12 @@ export class ClaudeCodeStreamRpc {
|
|
|
103
264
|
pending.timer = setTimeout(() => {
|
|
104
265
|
if (this.pending !== pending)
|
|
105
266
|
return;
|
|
106
|
-
|
|
267
|
+
const error = new Error(`claude resident turn stalled: no stream activity for ${this.options.turnTimeoutMs}ms`);
|
|
268
|
+
const stalled = this.settlePending(error);
|
|
269
|
+
if (stalled === null)
|
|
270
|
+
return;
|
|
107
271
|
this.options.log?.('error', `claude turn stalled: no stream activity for ${this.options.turnTimeoutMs}ms; reaping resident child`);
|
|
108
|
-
|
|
272
|
+
stalled.reject(error);
|
|
109
273
|
this.options.reapOnTimeout();
|
|
110
274
|
}, this.options.turnTimeoutMs);
|
|
111
275
|
}
|
|
@@ -117,25 +281,82 @@ export class ClaudeCodeStreamRpc {
|
|
|
117
281
|
this.armIdleTimer(this.pending);
|
|
118
282
|
switch (line.kind) {
|
|
119
283
|
case 'init':
|
|
284
|
+
this.decideLifecycleSupport(line.capabilities.includes('msg_lifecycle_v1'));
|
|
285
|
+
this.pending?.aggregator.accept(line);
|
|
286
|
+
break;
|
|
120
287
|
case 'assistant':
|
|
121
288
|
this.pending?.aggregator.accept(line);
|
|
289
|
+
this.options.onProtocolEvent?.({ kind: 'stream', line });
|
|
122
290
|
break;
|
|
291
|
+
case 'command_lifecycle': {
|
|
292
|
+
const pending = this.pending;
|
|
293
|
+
if (pending === null || line.commandUuid === null)
|
|
294
|
+
break;
|
|
295
|
+
if (line.state !== null) {
|
|
296
|
+
this.options.onProtocolEvent?.({
|
|
297
|
+
kind: 'command_lifecycle',
|
|
298
|
+
commandUuid: line.commandUuid,
|
|
299
|
+
state: line.state,
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
if (line.state === 'started')
|
|
303
|
+
pending.startedSinceResult.add(line.commandUuid);
|
|
304
|
+
// `command_lifecycle` does double duty: it coordinates live-steer
|
|
305
|
+
// admission (writeWaiters) and proves lifecycle capability, and its
|
|
306
|
+
// terminal states are the drainage gate when the CLI represents several
|
|
307
|
+
// started commands with one `result`.
|
|
308
|
+
const newlySupported = this.lifecycleSupported === null;
|
|
309
|
+
if (newlySupported)
|
|
310
|
+
this.lifecycleSupported = true;
|
|
311
|
+
this.resolveWriteWaiter(pending, line.commandUuid);
|
|
312
|
+
if (newlySupported && this.pending === pending) {
|
|
313
|
+
this.flushCapabilityWaiters(pending);
|
|
314
|
+
}
|
|
315
|
+
if (this.pending !== pending)
|
|
316
|
+
break;
|
|
317
|
+
if (line.state === 'completed') {
|
|
318
|
+
this.markCommandTerminal(pending, line.commandUuid, null);
|
|
319
|
+
}
|
|
320
|
+
else if (line.state === 'cancelled' || line.state === 'discarded' || line.state === 'refused') {
|
|
321
|
+
pending.startedSinceResult.delete(line.commandUuid);
|
|
322
|
+
this.markCommandTerminal(pending, line.commandUuid, `was ${line.state} by claude`);
|
|
323
|
+
}
|
|
324
|
+
break;
|
|
325
|
+
}
|
|
123
326
|
case 'result': {
|
|
124
|
-
|
|
327
|
+
const pending = this.pending;
|
|
328
|
+
if (pending === null) {
|
|
329
|
+
const error = new Error('claude result envelope arrived without an attributable command group');
|
|
330
|
+
this.options.log?.('error', error.message, error);
|
|
331
|
+
this.options.reapOnTimeout();
|
|
125
332
|
break;
|
|
126
|
-
|
|
127
|
-
const
|
|
128
|
-
if (
|
|
129
|
-
|
|
333
|
+
}
|
|
334
|
+
const commandUuid = line.outcome.userMessageUuid;
|
|
335
|
+
if (commandUuid !== null && !pending.submitted.includes(commandUuid)) {
|
|
336
|
+
const error = new Error(`claude result envelope for unsubmitted command ${commandUuid}; ` +
|
|
337
|
+
'native completion ownership is ambiguous');
|
|
338
|
+
this.options.log?.('error', error.message, error);
|
|
339
|
+
this.settlePending(error)?.reject(error);
|
|
340
|
+
this.options.reapOnTimeout();
|
|
130
341
|
break;
|
|
131
342
|
}
|
|
132
|
-
|
|
133
|
-
|
|
343
|
+
// The interrupt artifact (`error_during_execution` with no result) is
|
|
344
|
+
// not a native answer boundary. Older valid results may omit the uuid.
|
|
345
|
+
if (line.outcome.subtype === 'error_during_execution' &&
|
|
346
|
+
line.outcome.userMessageUuid === null &&
|
|
347
|
+
line.outcome.text === null) {
|
|
348
|
+
this.options.log?.('warn', 'claude interrupt result artifact ignored');
|
|
134
349
|
break;
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
350
|
+
}
|
|
351
|
+
pending.aggregator.accept(line);
|
|
352
|
+
const outcome = pending.aggregator.takeOutcome();
|
|
353
|
+
pending.startedSinceResult.clear();
|
|
354
|
+
pending.sawResult = true;
|
|
355
|
+
this.options.onProtocolEvent?.({
|
|
356
|
+
kind: 'result',
|
|
357
|
+
outcome,
|
|
358
|
+
});
|
|
359
|
+
this.settleIfReady(pending);
|
|
139
360
|
break;
|
|
140
361
|
}
|
|
141
362
|
case 'control_request':
|
|
@@ -148,29 +369,60 @@ export class ClaudeCodeStreamRpc {
|
|
|
148
369
|
this.options.log?.('warn', `claude stream-json parse error: ${line.raw}`);
|
|
149
370
|
break;
|
|
150
371
|
default:
|
|
372
|
+
this.options.onProtocolEvent?.({ kind: 'stream', line });
|
|
151
373
|
break;
|
|
152
374
|
}
|
|
153
375
|
}
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
if (pending.settleImmediate !== null)
|
|
376
|
+
decideLifecycleSupport(supported) {
|
|
377
|
+
if (this.lifecycleSupported !== null)
|
|
157
378
|
return;
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
379
|
+
this.lifecycleSupported = supported;
|
|
380
|
+
const pending = this.pending;
|
|
381
|
+
if (pending === null)
|
|
382
|
+
return;
|
|
383
|
+
if (supported) {
|
|
384
|
+
this.flushCapabilityWaiters(pending);
|
|
385
|
+
return;
|
|
386
|
+
}
|
|
387
|
+
this.rejectCapabilityWaiters(pending, lifecycleUnsupportedError());
|
|
388
|
+
}
|
|
389
|
+
flushCapabilityWaiters(pending) {
|
|
390
|
+
const waiters = pending.capabilityWaiters.splice(0);
|
|
391
|
+
for (const waiter of waiters) {
|
|
392
|
+
void this.writeSteer(pending, waiter.prompt, waiter.options, waiter.commandUuid).then(waiter.resolve, waiter.reject);
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
rejectCapabilityWaiters(pending, error) {
|
|
396
|
+
const waiters = pending.capabilityWaiters.splice(0);
|
|
397
|
+
const failure = error instanceof ClaudeSteerAdmissionError
|
|
398
|
+
? error
|
|
399
|
+
: preAdmissionError(error.message, error);
|
|
400
|
+
for (const waiter of waiters)
|
|
401
|
+
waiter.reject(failure);
|
|
402
|
+
}
|
|
403
|
+
resolveWriteWaiter(pending, commandUuid) {
|
|
404
|
+
const waiter = pending.writeWaiters.get(commandUuid);
|
|
405
|
+
if (waiter === undefined)
|
|
406
|
+
return;
|
|
407
|
+
pending.writeWaiters.delete(commandUuid);
|
|
408
|
+
waiter.resolve();
|
|
409
|
+
}
|
|
410
|
+
rejectWriteWaiter(pending, commandUuid, error) {
|
|
411
|
+
const waiter = pending.writeWaiters.get(commandUuid);
|
|
412
|
+
if (waiter === undefined)
|
|
413
|
+
return;
|
|
414
|
+
pending.writeWaiters.delete(commandUuid);
|
|
415
|
+
waiter.reject(error);
|
|
416
|
+
}
|
|
417
|
+
rejectWriteWaiters(pending, error) {
|
|
418
|
+
const failure = error instanceof ClaudeSteerAdmissionError &&
|
|
419
|
+
error.admission === 'ambiguous'
|
|
420
|
+
? error
|
|
421
|
+
: ambiguousWriteError(error);
|
|
422
|
+
const waiters = [...pending.writeWaiters.values()];
|
|
423
|
+
pending.writeWaiters.clear();
|
|
424
|
+
for (const waiter of waiters)
|
|
425
|
+
waiter.reject(failure);
|
|
174
426
|
}
|
|
175
427
|
onControlRequest(requestId, subtype, request) {
|
|
176
428
|
if (requestId === null || !this.stdin.writable)
|
|
@@ -209,4 +461,24 @@ export class ClaudeCodeStreamRpc {
|
|
|
209
461
|
this.options.log?.('warn', `claude remote control enable failed${error !== null ? `: ${error}` : ''}`);
|
|
210
462
|
}
|
|
211
463
|
}
|
|
464
|
+
function lifecycleUnsupportedError() {
|
|
465
|
+
return preAdmissionError('claude resident session cannot prove live-steer lifecycle: ' +
|
|
466
|
+
'msg_lifecycle_v1 is unavailable');
|
|
467
|
+
}
|
|
468
|
+
function capabilityUndecidedTurnEndedError() {
|
|
469
|
+
return preAdmissionError('claude resident turn ended before live-steer capability was decided');
|
|
470
|
+
}
|
|
471
|
+
function steerWriteUnconfirmedError() {
|
|
472
|
+
return new ClaudeSteerAdmissionError('ambiguous', 'claude resident turn ended before the steer write was confirmed');
|
|
473
|
+
}
|
|
474
|
+
function preAdmissionError(message, cause) {
|
|
475
|
+
return new ClaudeSteerAdmissionError('failed', message, cause === undefined ? undefined : { cause });
|
|
476
|
+
}
|
|
477
|
+
function ambiguousWriteError(error) {
|
|
478
|
+
const cause = asError(error);
|
|
479
|
+
return new ClaudeSteerAdmissionError('ambiguous', cause.message, { cause });
|
|
480
|
+
}
|
|
481
|
+
function asError(error) {
|
|
482
|
+
return error instanceof Error ? error : new Error(String(error));
|
|
483
|
+
}
|
|
212
484
|
//# sourceMappingURL=rpc.js.map
|
package/dist/rpc.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rpc.js","sourceRoot":"","sources":["../src/rpc.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"rpc.js","sourceRoot":"","sources":["../src/rpc.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { AgentRuntimeMcpServer, AgentRuntimePathContext, AgentRuntimeSkillSource, AgentRuntimeStateCallbacks, DreamuxLogger, RuntimeActivitySink } from '@excitedjs/dreamux-types';
|
|
2
|
+
import type { DispatcherClaudeCodeConfig } from './config.js';
|
|
3
|
+
import type { ClaudeCodeSessionFactory } from './supervisor.js';
|
|
4
|
+
/** Neutral host capabilities required by one resident Claude Code runtime. */
|
|
5
|
+
export interface ClaudeCodeRuntimeDeps {
|
|
6
|
+
config: DispatcherClaudeCodeConfig;
|
|
7
|
+
cwd: string;
|
|
8
|
+
state: AgentRuntimeStateCallbacks;
|
|
9
|
+
paths: AgentRuntimePathContext;
|
|
10
|
+
mcpServers: readonly AgentRuntimeMcpServer[];
|
|
11
|
+
sessionFactory: ClaudeCodeSessionFactory;
|
|
12
|
+
resolveBinPath: (bin: string) => string;
|
|
13
|
+
injectEnv?: Record<string, string>;
|
|
14
|
+
systemPromptAppend?: readonly string[];
|
|
15
|
+
skillSources?: readonly AgentRuntimeSkillSource[];
|
|
16
|
+
disableFeatures?: readonly string[];
|
|
17
|
+
outputSchema?: Record<string, unknown>;
|
|
18
|
+
generateSessionId?: () => string;
|
|
19
|
+
resolveTranscriptPath?: (input: {
|
|
20
|
+
sessionId: string;
|
|
21
|
+
cwd: string;
|
|
22
|
+
locator: string | null;
|
|
23
|
+
env: NodeJS.ProcessEnv;
|
|
24
|
+
resume: boolean;
|
|
25
|
+
}) => Promise<string>;
|
|
26
|
+
sourceIdDedupeWindow?: number;
|
|
27
|
+
logger?: DreamuxLogger;
|
|
28
|
+
activitySink: RuntimeActivitySink;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=runtime-deps.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-deps.d.ts","sourceRoot":"","sources":["../src/runtime-deps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EACrB,uBAAuB,EACvB,uBAAuB,EACvB,0BAA0B,EAC1B,aAAa,EACb,mBAAmB,EACpB,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAEhE,8EAA8E;AAC9E,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,0BAA0B,CAAC;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,0BAA0B,CAAC;IAClC,KAAK,EAAE,uBAAuB,CAAC;IAC/B,UAAU,EAAE,SAAS,qBAAqB,EAAE,CAAC;IAC7C,cAAc,EAAE,wBAAwB,CAAC;IACzC,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,kBAAkB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,YAAY,CAAC,EAAE,SAAS,uBAAuB,EAAE,CAAC;IAClD,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,iBAAiB,CAAC,EAAE,MAAM,MAAM,CAAC;IACjC,qBAAqB,CAAC,EAAE,CAAC,KAAK,EAAE;QAC9B,SAAS,EAAE,MAAM,CAAC;QAClB,GAAG,EAAE,MAAM,CAAC;QACZ,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;QACvB,MAAM,EAAE,OAAO,CAAC;KACjB,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACtB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,YAAY,EAAE,mBAAmB,CAAC;CACnC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-deps.js","sourceRoot":"","sources":["../src/runtime-deps.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { TurnOutcome } from './supervisor.js';
|
|
2
|
+
export interface ResolveRuntimeTranscriptPathInput {
|
|
3
|
+
sessionId: string;
|
|
4
|
+
cwd: string;
|
|
5
|
+
locator: string | null;
|
|
6
|
+
env: NodeJS.ProcessEnv;
|
|
7
|
+
resume: boolean;
|
|
8
|
+
override?: (input: Omit<ResolveRuntimeTranscriptPathInput, 'override'>) => Promise<string>;
|
|
9
|
+
}
|
|
10
|
+
export declare function buildClaudeProcessEnv(injectEnv: Record<string, string> | undefined, extraEnv: Record<string, string>): NodeJS.ProcessEnv;
|
|
11
|
+
export declare function resolveRuntimeTranscriptPath(input: ResolveRuntimeTranscriptPathInput): Promise<string>;
|
|
12
|
+
export declare function resultTextFromTurnOutcome(outcome: TurnOutcome, expectedSessionId: string | null, requiresStructuredOutput: boolean): string | null;
|
|
13
|
+
//# sourceMappingURL=runtime-session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-session.d.ts","sourceRoot":"","sources":["../src/runtime-session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAMnD,MAAM,WAAW,iCAAiC;IAChD,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,CACT,KAAK,EAAE,IAAI,CAAC,iCAAiC,EAAE,UAAU,CAAC,KACvD,OAAO,CAAC,MAAM,CAAC,CAAC;CACtB;AAED,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,EAC7C,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,MAAM,CAAC,UAAU,CAMnB;AAED,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,iCAAiC,GACvC,OAAO,CAAC,MAAM,CAAC,CAWjB;AAED,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,WAAW,EACpB,iBAAiB,EAAE,MAAM,GAAG,IAAI,EAChC,wBAAwB,EAAE,OAAO,GAChC,MAAM,GAAG,IAAI,CA0Bf"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { deriveClaudeTranscriptPath, locateClaudeTranscript, } from './transcript/path.js';
|
|
2
|
+
export function buildClaudeProcessEnv(injectEnv, extraEnv) {
|
|
3
|
+
return {
|
|
4
|
+
...globalThis.process.env,
|
|
5
|
+
...(injectEnv ?? {}),
|
|
6
|
+
...extraEnv,
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
export function resolveRuntimeTranscriptPath(input) {
|
|
10
|
+
const { override, ...pathInput } = input;
|
|
11
|
+
if (override !== undefined)
|
|
12
|
+
return override(pathInput);
|
|
13
|
+
return input.resume
|
|
14
|
+
? locateClaudeTranscript({
|
|
15
|
+
sessionId: input.sessionId,
|
|
16
|
+
cwd: input.cwd,
|
|
17
|
+
locator: input.locator,
|
|
18
|
+
env: input.env,
|
|
19
|
+
}).then((located) => located.path)
|
|
20
|
+
: deriveClaudeTranscriptPath(input.sessionId, input.cwd, input.env);
|
|
21
|
+
}
|
|
22
|
+
export function resultTextFromTurnOutcome(outcome, expectedSessionId, requiresStructuredOutput) {
|
|
23
|
+
if (outcome.sessionId !== null &&
|
|
24
|
+
outcome.sessionId !== '' &&
|
|
25
|
+
outcome.sessionId !== expectedSessionId) {
|
|
26
|
+
throw new Error('claude-code returned a session id that differs from the pinned native session');
|
|
27
|
+
}
|
|
28
|
+
const resultText = outcome.isError || outcome.text === '' ? null : outcome.text;
|
|
29
|
+
if (outcome.isError) {
|
|
30
|
+
const detail = outcome.errors.length > 0
|
|
31
|
+
? outcome.errors.join('; ')
|
|
32
|
+
: (outcome.subtype ?? 'unknown error');
|
|
33
|
+
throw new Error(`claude turn returned an error result: ${detail}`);
|
|
34
|
+
}
|
|
35
|
+
if (requiresStructuredOutput && !outcome.hasStructuredOutput) {
|
|
36
|
+
throw new Error('claude turn did not return structured_output for a ' +
|
|
37
|
+
'--json-schema session');
|
|
38
|
+
}
|
|
39
|
+
return resultText;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=runtime-session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-session.js","sourceRoot":"","sources":["../src/runtime-session.ts"],"names":[],"mappings":"AACA,OAAO,EACL,0BAA0B,EAC1B,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAa9B,MAAM,UAAU,qBAAqB,CACnC,SAA6C,EAC7C,QAAgC;IAEhC,OAAO;QACL,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG;QACzB,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC;QACpB,GAAG,QAAQ;KACZ,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,KAAwC;IAExC,MAAM,EAAE,QAAQ,EAAE,GAAG,SAAS,EAAE,GAAG,KAAK,CAAC;IACzC,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAC;IACvD,OAAO,KAAK,CAAC,MAAM;QACjB,CAAC,CAAC,sBAAsB,CAAC;YACrB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,GAAG,EAAE,KAAK,CAAC,GAAG;SACf,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;QACpC,CAAC,CAAC,0BAA0B,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,OAAoB,EACpB,iBAAgC,EAChC,wBAAiC;IAEjC,IACE,OAAO,CAAC,SAAS,KAAK,IAAI;QAC1B,OAAO,CAAC,SAAS,KAAK,EAAE;QACxB,OAAO,CAAC,SAAS,KAAK,iBAAiB,EACvC,CAAC;QACD,MAAM,IAAI,KAAK,CACb,+EAA+E,CAChF,CAAC;IACJ,CAAC;IACD,MAAM,UAAU,GACd,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;IAC/D,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,MAAM,GACV,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;YACvB,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;YAC3B,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,IAAI,eAAe,CAAC,CAAC;QAC3C,MAAM,IAAI,KAAK,CAAC,yCAAyC,MAAM,EAAE,CAAC,CAAC;IACrE,CAAC;IACD,IAAI,wBAAwB,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC;QAC7D,MAAM,IAAI,KAAK,CACb,qDAAqD;YACnD,uBAAuB,CAC1B,CAAC;IACJ,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC"}
|