@excitedjs/agent-runtime-claude-code 0.6.1 → 0.7.0-alpha.g1e011989dff1
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 +92 -44
- package/dist/config.d.ts +2 -2
- package/dist/control-rpc.d.ts +32 -0
- package/dist/control-rpc.d.ts.map +1 -0
- package/dist/control-rpc.js +112 -0
- package/dist/control-rpc.js.map +1 -0
- package/dist/rpc.d.ts +37 -93
- package/dist/rpc.d.ts.map +1 -1
- package/dist/rpc.js +242 -405
- package/dist/rpc.js.map +1 -1
- package/dist/runtime-activity.d.ts +33 -0
- package/dist/runtime-activity.d.ts.map +1 -0
- package/dist/runtime-activity.js +221 -0
- package/dist/runtime-activity.js.map +1 -0
- package/dist/runtime-session.d.ts +6 -2
- package/dist/runtime-session.d.ts.map +1 -1
- package/dist/runtime-session.js +20 -11
- package/dist/runtime-session.js.map +1 -1
- package/dist/runtime.d.ts +13 -15
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +53 -152
- package/dist/runtime.js.map +1 -1
- package/dist/stream.d.ts +17 -3
- package/dist/stream.d.ts.map +1 -1
- package/dist/stream.js +75 -11
- package/dist/stream.js.map +1 -1
- package/dist/supervisor.d.ts.map +1 -1
- package/dist/supervisor.js +35 -31
- package/dist/supervisor.js.map +1 -1
- package/dist/types.d.ts +38 -17
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +0 -5
- package/dist/types.js.map +1 -1
- package/package.json +3 -3
- package/dist/admission-classify.d.ts +0 -7
- package/dist/admission-classify.d.ts.map +0 -1
- package/dist/admission-classify.js +0 -17
- package/dist/admission-classify.js.map +0 -1
- package/dist/runtime-submissions.d.ts +0 -58
- package/dist/runtime-submissions.d.ts.map +0 -1
- package/dist/runtime-submissions.js +0 -281
- package/dist/runtime-submissions.js.map +0 -1
|
@@ -1,281 +0,0 @@
|
|
|
1
|
-
import { resultTextFromTurnOutcome } from './runtime-session.js';
|
|
2
|
-
import { toolDisplay } from './tool-display.js';
|
|
3
|
-
/**
|
|
4
|
-
* Report a native turn's end on the display line.
|
|
5
|
-
*
|
|
6
|
-
* `status` and `reason` are claude's own terminal fact and nothing else: a
|
|
7
|
-
* `result` completed or failed with its errors, a run that died, a teardown
|
|
8
|
-
* that interrupted. What the push-back line then makes of it (a result text it
|
|
9
|
-
* cannot extract, a command it cannot attribute, a submission already settled)
|
|
10
|
-
* is push-back's own outcome and never colours the card.
|
|
11
|
-
*
|
|
12
|
-
* The runtime keeps no display state: it does not know, and does not ask,
|
|
13
|
-
* whether a native turn is open before reporting an end. Whether the end is
|
|
14
|
-
* *shown* is not this layer's decision. A card belongs to no turn
|
|
15
|
-
* (`feishu-cot-conversation-cards` requirement, rule 1), and a native end
|
|
16
|
-
* "closes an existing open card but never opens a new one; when no card is
|
|
17
|
-
* open, Feishu ignores it" (rule 8). This layer pushes; the Channel decides.
|
|
18
|
-
*/
|
|
19
|
-
export function endNativeTurn(status, reason, sink) {
|
|
20
|
-
emitActivity({ kind: 'turn.ended', occurredAt: Date.now(), status, reason }, sink);
|
|
21
|
-
}
|
|
22
|
-
/** The sink is Core's and never throws (`AgentRuntimeActivitySink`). */
|
|
23
|
-
function emitActivity(activity, sink) {
|
|
24
|
-
sink(Object.freeze(activity));
|
|
25
|
-
}
|
|
26
|
-
export function createRuntimeSubmission() {
|
|
27
|
-
let resolve;
|
|
28
|
-
let settled = false;
|
|
29
|
-
const submission = Object.freeze({
|
|
30
|
-
settled: new Promise((value) => {
|
|
31
|
-
resolve = value;
|
|
32
|
-
}),
|
|
33
|
-
});
|
|
34
|
-
return {
|
|
35
|
-
submission,
|
|
36
|
-
settle(settlement) {
|
|
37
|
-
if (settled)
|
|
38
|
-
return false;
|
|
39
|
-
settled = true;
|
|
40
|
-
resolve(settlement);
|
|
41
|
-
return true;
|
|
42
|
-
},
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
export function handleProtocolEvent(active, event, context) {
|
|
46
|
-
if (event.kind === 'command_lifecycle') {
|
|
47
|
-
// `started` is the one lifecycle state recorded here: it is the
|
|
48
|
-
// attribution input for the group the next `result` completes. The
|
|
49
|
-
// terminal states are drainage bookkeeping that arrives after that
|
|
50
|
-
// `result`.
|
|
51
|
-
if (event.state !== 'started')
|
|
52
|
-
return;
|
|
53
|
-
if (active.submissions.has(event.commandUuid) &&
|
|
54
|
-
!active.completedCommands.has(event.commandUuid) &&
|
|
55
|
-
!active.started.includes(event.commandUuid)) {
|
|
56
|
-
active.started.push(event.commandUuid);
|
|
57
|
-
}
|
|
58
|
-
return;
|
|
59
|
-
}
|
|
60
|
-
if (event.kind === 'result') {
|
|
61
|
-
// `result` is claude's native terminal, and the display line ends on it:
|
|
62
|
-
// the attribution, the completion and the settlements below are
|
|
63
|
-
// push-back's work on the same fact, and none of them may change the end,
|
|
64
|
-
// delay it, or withhold it.
|
|
65
|
-
endNativeTurn(event.outcome.isError ? 'failed' : 'completed', event.outcome.isError ? turnFailureMessage(event.outcome) : null, context.activitySink);
|
|
66
|
-
completeStartedGroup(active, event.outcome, context);
|
|
67
|
-
return;
|
|
68
|
-
}
|
|
69
|
-
emitStreamActivity(active, event.line, context);
|
|
70
|
-
}
|
|
71
|
-
/** claude's own words for why its turn failed. */
|
|
72
|
-
function turnFailureMessage(outcome) {
|
|
73
|
-
return outcome.errors.join('; ') || outcome.subtype || 'claude turn failed';
|
|
74
|
-
}
|
|
75
|
-
function completeStartedGroup(active, outcome, context) {
|
|
76
|
-
const commandUuids = active.started.splice(0);
|
|
77
|
-
if (commandUuids.length === 0 &&
|
|
78
|
-
(active.submissions.size > 1 || active.completedCommands.size > 0)) {
|
|
79
|
-
failUnattributedResult(active, context);
|
|
80
|
-
return;
|
|
81
|
-
}
|
|
82
|
-
for (const uuid of commandUuids)
|
|
83
|
-
active.completedCommands.add(uuid);
|
|
84
|
-
let representative = commandUuids
|
|
85
|
-
.map(uuid => active.submissions.get(uuid))
|
|
86
|
-
.find((deferred) => deferred !== undefined);
|
|
87
|
-
if (representative === undefined && active.submissions.size === 1) {
|
|
88
|
-
const only = active.submissions.entries().next().value;
|
|
89
|
-
if (only !== undefined) {
|
|
90
|
-
commandUuids.push(only[0]);
|
|
91
|
-
representative = only[1];
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
if (representative === undefined) {
|
|
95
|
-
failUnattributedResult(active, context);
|
|
96
|
-
return;
|
|
97
|
-
}
|
|
98
|
-
let completion;
|
|
99
|
-
if (outcome.isError) {
|
|
100
|
-
completion = Object.freeze({
|
|
101
|
-
status: 'failed',
|
|
102
|
-
error: new Error(turnFailureMessage(outcome)),
|
|
103
|
-
});
|
|
104
|
-
}
|
|
105
|
-
else {
|
|
106
|
-
try {
|
|
107
|
-
completion = Object.freeze({
|
|
108
|
-
status: 'completed',
|
|
109
|
-
resultText: resultTextFromTurnOutcome(outcome, context.threadId, context.outputSchemaEnabled),
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
|
-
catch (error) {
|
|
113
|
-
completion = Object.freeze({
|
|
114
|
-
status: 'failed',
|
|
115
|
-
error: asError(error),
|
|
116
|
-
});
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
for (const uuid of commandUuids) {
|
|
120
|
-
active.submissions.get(uuid)?.settle({ kind: 'completion', completion });
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
function failUnattributedResult(active, context) {
|
|
124
|
-
const error = new Error(active.completedCommands.size > 0
|
|
125
|
-
? 'claude emitted a conflicting result without a new started command'
|
|
126
|
-
: 'claude result cannot be attributed without command started lifecycle');
|
|
127
|
-
context.log('error', error.message, error);
|
|
128
|
-
for (const deferred of active.submissions.values()) {
|
|
129
|
-
deferred.settle({ kind: 'failed', error });
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
/**
|
|
133
|
-
* Put what claude said and did on this agent's activity stream.
|
|
134
|
-
*
|
|
135
|
-
* No submission is looked up. A window folds any number of commands into one
|
|
136
|
-
* native turn, so naming one of them as the activity's owner was always a
|
|
137
|
-
* guess — and when the guess failed, which it did for anything claude emitted
|
|
138
|
-
* before a command's `started` lifecycle arrived, the fact was dropped
|
|
139
|
-
* entirely. The agent is the subject, and it is always known.
|
|
140
|
-
*
|
|
141
|
-
* The envelope decides what a block means, not the block's own type. An
|
|
142
|
-
* `assistant` envelope carries the model's words and its tool calls. A `user`
|
|
143
|
-
* envelope carries what those tools returned — and, as plain text blocks, the
|
|
144
|
-
* context the CLI injected into its own conversation: the body of a skill it
|
|
145
|
-
* just loaded, hook output, reminders. None of that text is the agent's, and
|
|
146
|
-
* none of it is the operator's (stdin is never echoed back), so it is not
|
|
147
|
-
* displayed at all. Operator ruling, 2026-09-03: 「所有的 user 消息都隐藏即可」.
|
|
148
|
-
*/
|
|
149
|
-
function emitStreamActivity(active, line, context) {
|
|
150
|
-
if (line.kind === 'compact_boundary') {
|
|
151
|
-
emitActivity(compactedActivity(active), context.activitySink);
|
|
152
|
-
return;
|
|
153
|
-
}
|
|
154
|
-
const message = recordValue(line.raw['message']) ?? line.raw;
|
|
155
|
-
const messageId = stringValue(message['id']) ?? `stream-${active.activitySequence++}`;
|
|
156
|
-
const content = Array.isArray(message['content']) ? message['content'] : [];
|
|
157
|
-
for (const [blockIndex, candidate] of content.entries()) {
|
|
158
|
-
const block = recordValue(candidate);
|
|
159
|
-
if (block === null)
|
|
160
|
-
continue;
|
|
161
|
-
const activity = line.kind === 'assistant'
|
|
162
|
-
? assistantBlockActivity(active, messageId, blockIndex, block)
|
|
163
|
-
: toolResultActivity(active, messageId, block);
|
|
164
|
-
if (activity === null)
|
|
165
|
-
continue;
|
|
166
|
-
emitActivity(activity, context.activitySink);
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
/**
|
|
170
|
-
* The one line the card shows for a compaction, in the words Claude Code's
|
|
171
|
-
* own UI uses. The summary the CLI wrote is not shown. Operator ruling,
|
|
172
|
-
* 2026-09-04: 「我不要正文,正文太长了,只显示压缩发生了即可。claude code 的网页上只
|
|
173
|
-
* 显示了 Compacted session,我只需要这一行字即可。」 — and on the shape, 「没必要给他
|
|
174
|
-
* 单独加一个新的 activity 类型,你直接在provider 里,多推一个 assistant message,
|
|
175
|
-
* 内容就这一行。」
|
|
176
|
-
*/
|
|
177
|
-
const COMPACTED_SESSION_MESSAGE = 'Compacted session';
|
|
178
|
-
function compactedActivity(active) {
|
|
179
|
-
return {
|
|
180
|
-
kind: 'assistant.message',
|
|
181
|
-
occurredAt: Date.now(),
|
|
182
|
-
id: `stream-${active.activitySequence++}:compacted`,
|
|
183
|
-
text: COMPACTED_SESSION_MESSAGE,
|
|
184
|
-
};
|
|
185
|
-
}
|
|
186
|
-
/** What the model said, or a tool it called. */
|
|
187
|
-
function assistantBlockActivity(active, messageId, blockIndex, block) {
|
|
188
|
-
if (block['type'] === 'text' && typeof block['text'] === 'string' && block['text'] !== '') {
|
|
189
|
-
return {
|
|
190
|
-
kind: 'assistant.message',
|
|
191
|
-
occurredAt: Date.now(),
|
|
192
|
-
id: `${messageId}:text:${blockIndex}`,
|
|
193
|
-
text: block['text'],
|
|
194
|
-
};
|
|
195
|
-
}
|
|
196
|
-
if (block['type'] !== 'tool_use')
|
|
197
|
-
return null;
|
|
198
|
-
const callId = stringValue(block['id']);
|
|
199
|
-
const name = stringValue(block['name']);
|
|
200
|
-
if (callId === null || callId === '' || name === null)
|
|
201
|
-
return null;
|
|
202
|
-
const args = toJsonValue(block['input']);
|
|
203
|
-
active.tools.set(callId, { name, arguments: args });
|
|
204
|
-
return {
|
|
205
|
-
kind: 'tool.call',
|
|
206
|
-
occurredAt: Date.now(),
|
|
207
|
-
id: `${messageId}:${callId}:started`,
|
|
208
|
-
callId,
|
|
209
|
-
toolName: name,
|
|
210
|
-
...toolDisplay(name, args),
|
|
211
|
-
status: 'started',
|
|
212
|
-
arguments: args,
|
|
213
|
-
result: null,
|
|
214
|
-
error: null,
|
|
215
|
-
};
|
|
216
|
-
}
|
|
217
|
-
/** What a tool returned, correlated to the call the model made. */
|
|
218
|
-
function toolResultActivity(active, messageId, block) {
|
|
219
|
-
if (block['type'] !== 'tool_result')
|
|
220
|
-
return null;
|
|
221
|
-
const callId = stringValue(block['tool_use_id']);
|
|
222
|
-
if (callId === null || callId === '')
|
|
223
|
-
return null;
|
|
224
|
-
const known = active.tools.get(callId);
|
|
225
|
-
const failed = block['is_error'] === true;
|
|
226
|
-
const result = normalizeTextBlocks(block['content']);
|
|
227
|
-
return {
|
|
228
|
-
kind: 'tool.call',
|
|
229
|
-
occurredAt: Date.now(),
|
|
230
|
-
id: `${messageId}:${callId}:result`,
|
|
231
|
-
callId,
|
|
232
|
-
toolName: known?.name ?? 'tool',
|
|
233
|
-
...toolDisplay(known?.name, known?.arguments ?? null),
|
|
234
|
-
status: failed ? 'failed' : 'completed',
|
|
235
|
-
arguments: known?.arguments ?? null,
|
|
236
|
-
result,
|
|
237
|
-
error: failed ? displayError(result) : null,
|
|
238
|
-
};
|
|
239
|
-
}
|
|
240
|
-
function displayError(value) {
|
|
241
|
-
if (value === null)
|
|
242
|
-
return null;
|
|
243
|
-
return typeof value === 'string' ? value : JSON.stringify(value);
|
|
244
|
-
}
|
|
245
|
-
function normalizeTextBlocks(value) {
|
|
246
|
-
if (!Array.isArray(value))
|
|
247
|
-
return toJsonValue(value);
|
|
248
|
-
if (value.length === 0)
|
|
249
|
-
return null;
|
|
250
|
-
const texts = value.map((entry) => {
|
|
251
|
-
const record = recordValue(entry);
|
|
252
|
-
return record?.['type'] === 'text' && typeof record['text'] === 'string'
|
|
253
|
-
? record['text']
|
|
254
|
-
: null;
|
|
255
|
-
});
|
|
256
|
-
return texts.every((text) => text !== null)
|
|
257
|
-
? texts.join('\n')
|
|
258
|
-
: toJsonValue(value);
|
|
259
|
-
}
|
|
260
|
-
function recordValue(value) {
|
|
261
|
-
return value !== null && typeof value === 'object' && !Array.isArray(value)
|
|
262
|
-
? value
|
|
263
|
-
: null;
|
|
264
|
-
}
|
|
265
|
-
function stringValue(value) {
|
|
266
|
-
return typeof value === 'string' ? value : null;
|
|
267
|
-
}
|
|
268
|
-
function toJsonValue(value) {
|
|
269
|
-
if (value === undefined)
|
|
270
|
-
return null;
|
|
271
|
-
try {
|
|
272
|
-
return JSON.parse(JSON.stringify(value));
|
|
273
|
-
}
|
|
274
|
-
catch {
|
|
275
|
-
return String(value);
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
function asError(error) {
|
|
279
|
-
return error instanceof Error ? error : new Error(String(error));
|
|
280
|
-
}
|
|
281
|
-
//# sourceMappingURL=runtime-submissions.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-submissions.js","sourceRoot":"","sources":["../src/runtime-submissions.ts"],"names":[],"mappings":"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"}
|