@windowkit/agent-chat 0.0.0-stage → 0.3.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/LICENSE +21 -0
- package/README.md +147 -2
- package/dist/core/driver.d.ts +183 -0
- package/dist/core/driver.d.ts.map +1 -0
- package/dist/core/driver.js +12 -0
- package/dist/core/driver.js.map +1 -0
- package/dist/core/index.d.ts +8 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +11 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/markdown.d.ts +7 -0
- package/dist/core/markdown.d.ts.map +1 -0
- package/dist/core/markdown.js +53 -0
- package/dist/core/markdown.js.map +1 -0
- package/dist/core/policy.d.ts +18 -0
- package/dist/core/policy.d.ts.map +1 -0
- package/dist/core/policy.js +67 -0
- package/dist/core/policy.js.map +1 -0
- package/dist/core/reducer.d.ts +61 -0
- package/dist/core/reducer.d.ts.map +1 -0
- package/dist/core/reducer.js +391 -0
- package/dist/core/reducer.js.map +1 -0
- package/dist/core/session.d.ts +105 -0
- package/dist/core/session.d.ts.map +1 -0
- package/dist/core/session.js +648 -0
- package/dist/core/session.js.map +1 -0
- package/dist/core/tools.d.ts +120 -0
- package/dist/core/tools.d.ts.map +1 -0
- package/dist/core/tools.js +120 -0
- package/dist/core/tools.js.map +1 -0
- package/dist/core/types.d.ts +295 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +21 -0
- package/dist/core/types.js.map +1 -0
- package/dist/drivers/claude/index.d.ts +20 -0
- package/dist/drivers/claude/index.d.ts.map +1 -0
- package/dist/drivers/claude/index.js +727 -0
- package/dist/drivers/claude/index.js.map +1 -0
- package/dist/drivers/claude/input.d.ts +7 -0
- package/dist/drivers/claude/input.d.ts.map +1 -0
- package/dist/drivers/claude/input.js +46 -0
- package/dist/drivers/claude/input.js.map +1 -0
- package/dist/drivers/claude/peers.d.ts +16 -0
- package/dist/drivers/claude/peers.d.ts.map +1 -0
- package/dist/drivers/claude/peers.js +137 -0
- package/dist/drivers/claude/peers.js.map +1 -0
- package/dist/drivers/claude/schema.d.ts +5 -0
- package/dist/drivers/claude/schema.d.ts.map +1 -0
- package/dist/drivers/claude/schema.js +77 -0
- package/dist/drivers/claude/schema.js.map +1 -0
- package/dist/drivers/claude/sdk.d.ts +86 -0
- package/dist/drivers/claude/sdk.d.ts.map +1 -0
- package/dist/drivers/claude/sdk.js +47 -0
- package/dist/drivers/claude/sdk.js.map +1 -0
- package/dist/drivers/claude/tools.d.ts +18 -0
- package/dist/drivers/claude/tools.d.ts.map +1 -0
- package/dist/drivers/claude/tools.js +119 -0
- package/dist/drivers/claude/tools.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/testing/fake.d.ts +63 -0
- package/dist/testing/fake.d.ts.map +1 -0
- package/dist/testing/fake.js +270 -0
- package/dist/testing/fake.js.map +1 -0
- package/dist/testing/index.d.ts +2 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +4 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/view/AgentChat.d.ts +53 -0
- package/dist/view/AgentChat.d.ts.map +1 -0
- package/dist/view/AgentChat.js +87 -0
- package/dist/view/AgentChat.js.map +1 -0
- package/dist/view/CodeBlock.d.ts +9 -0
- package/dist/view/CodeBlock.d.ts.map +1 -0
- package/dist/view/CodeBlock.js +67 -0
- package/dist/view/CodeBlock.js.map +1 -0
- package/dist/view/Composer.d.ts +24 -0
- package/dist/view/Composer.d.ts.map +1 -0
- package/dist/view/Composer.js +144 -0
- package/dist/view/Composer.js.map +1 -0
- package/dist/view/Header.d.ts +3 -0
- package/dist/view/Header.d.ts.map +1 -0
- package/dist/view/Header.js +30 -0
- package/dist/view/Header.js.map +1 -0
- package/dist/view/MessageList.d.ts +9 -0
- package/dist/view/MessageList.d.ts.map +1 -0
- package/dist/view/MessageList.js +111 -0
- package/dist/view/MessageList.js.map +1 -0
- package/dist/view/QuestionCard.d.ts +6 -0
- package/dist/view/QuestionCard.d.ts.map +1 -0
- package/dist/view/QuestionCard.js +39 -0
- package/dist/view/QuestionCard.js.map +1 -0
- package/dist/view/TextBlock.d.ts +9 -0
- package/dist/view/TextBlock.d.ts.map +1 -0
- package/dist/view/TextBlock.js +25 -0
- package/dist/view/TextBlock.js.map +1 -0
- package/dist/view/ToolCard.d.ts +7 -0
- package/dist/view/ToolCard.d.ts.map +1 -0
- package/dist/view/ToolCard.js +155 -0
- package/dist/view/ToolCard.js.map +1 -0
- package/dist/view/Transcript.d.ts +5 -0
- package/dist/view/Transcript.d.ts.map +1 -0
- package/dist/view/Transcript.js +56 -0
- package/dist/view/Transcript.js.map +1 -0
- package/dist/view/context.d.ts +21 -0
- package/dist/view/context.d.ts.map +1 -0
- package/dist/view/context.js +37 -0
- package/dist/view/context.js.map +1 -0
- package/dist/view/fences.d.ts +13 -0
- package/dist/view/fences.d.ts.map +1 -0
- package/dist/view/fences.js +59 -0
- package/dist/view/fences.js.map +1 -0
- package/dist/view/files.d.ts +11 -0
- package/dist/view/files.d.ts.map +1 -0
- package/dist/view/files.js +109 -0
- package/dist/view/files.js.map +1 -0
- package/dist/view/look.d.ts +25 -0
- package/dist/view/look.d.ts.map +1 -0
- package/dist/view/look.js +47 -0
- package/dist/view/look.js.map +1 -0
- package/dist/view/types.d.ts +50 -0
- package/dist/view/types.d.ts.map +1 -0
- package/dist/view/types.js +14 -0
- package/dist/view/types.js.map +1 -0
- package/dist/view/use-agent.d.ts +11 -0
- package/dist/view/use-agent.d.ts.map +1 -0
- package/dist/view/use-agent.js +33 -0
- package/dist/view/use-agent.js.map +1 -0
- package/package.json +92 -4
- package/src/core/driver.ts +191 -0
- package/src/core/index.ts +54 -0
- package/src/core/markdown.ts +56 -0
- package/src/core/policy.ts +77 -0
- package/src/core/reducer.ts +490 -0
- package/src/core/session.ts +824 -0
- package/src/core/tools.ts +233 -0
- package/src/core/types.ts +321 -0
- package/src/drivers/claude/index.ts +825 -0
- package/src/drivers/claude/input.ts +47 -0
- package/src/drivers/claude/peers.ts +153 -0
- package/src/drivers/claude/schema.ts +99 -0
- package/src/drivers/claude/sdk.ts +138 -0
- package/src/drivers/claude/tools.ts +141 -0
- package/src/index.ts +51 -0
- package/src/testing/fake.ts +374 -0
- package/src/testing/index.ts +11 -0
- package/src/view/AgentChat.tsx +204 -0
- package/src/view/CodeBlock.tsx +115 -0
- package/src/view/Composer.tsx +230 -0
- package/src/view/Header.tsx +73 -0
- package/src/view/MessageList.tsx +290 -0
- package/src/view/QuestionCard.tsx +107 -0
- package/src/view/TextBlock.tsx +61 -0
- package/src/view/ToolCard.tsx +283 -0
- package/src/view/Transcript.tsx +91 -0
- package/src/view/context.ts +70 -0
- package/src/view/dom-globals.d.ts +10 -0
- package/src/view/fences.ts +73 -0
- package/src/view/files.ts +111 -0
- package/src/view/look.ts +70 -0
- package/src/view/types.ts +71 -0
- package/src/view/use-agent.ts +40 -0
|
@@ -0,0 +1,391 @@
|
|
|
1
|
+
// The transcript, as a pure function of what happened to it.
|
|
2
|
+
//
|
|
3
|
+
// Every change makes new objects along the path it touched and shares the
|
|
4
|
+
// rest: a streamed token replaces one text part, its message and the array,
|
|
5
|
+
// and every other message is the object it was. The view memoizes a message
|
|
6
|
+
// by identity, so a token re-renders one message.
|
|
7
|
+
const OPEN_TOOL = new Set([
|
|
8
|
+
'input-streaming',
|
|
9
|
+
'pending',
|
|
10
|
+
'awaiting-approval',
|
|
11
|
+
'running',
|
|
12
|
+
]);
|
|
13
|
+
export function reduce(messages, action, now = Date.now()) {
|
|
14
|
+
switch (action.type) {
|
|
15
|
+
case 'user':
|
|
16
|
+
return [...messages, action.message];
|
|
17
|
+
case 'unqueue':
|
|
18
|
+
return mapMessage(messages, action.id, (m) => ({
|
|
19
|
+
...m,
|
|
20
|
+
queued: false,
|
|
21
|
+
}));
|
|
22
|
+
case 'text':
|
|
23
|
+
return action.parent
|
|
24
|
+
? inChildren(messages, action.parent, now, (kids) => text(kids, action, now))
|
|
25
|
+
: text(messages, action, now);
|
|
26
|
+
case 'tool-start':
|
|
27
|
+
return action.parent
|
|
28
|
+
? inChildren(messages, action.parent, now, (kids) => toolStart(kids, action, now))
|
|
29
|
+
: toolStart(messages, action, now);
|
|
30
|
+
case 'tool-input':
|
|
31
|
+
return mapPart(messages, action.id, (p) => {
|
|
32
|
+
if (p.type !== 'tool')
|
|
33
|
+
return p;
|
|
34
|
+
const inputText = p.inputText + action.delta;
|
|
35
|
+
return { ...p, inputText, input: parseJson(inputText) ?? p.input };
|
|
36
|
+
});
|
|
37
|
+
case 'tool-update':
|
|
38
|
+
return mapPart(messages, action.id, (p) => {
|
|
39
|
+
if (p.type !== 'tool')
|
|
40
|
+
return p;
|
|
41
|
+
const next = { ...p };
|
|
42
|
+
if (action.input !== undefined) {
|
|
43
|
+
next.input = action.input;
|
|
44
|
+
next.inputText = JSON.stringify(action.input);
|
|
45
|
+
if (next.state === 'input-streaming')
|
|
46
|
+
next.state = 'pending';
|
|
47
|
+
}
|
|
48
|
+
if (action.title !== undefined)
|
|
49
|
+
next.title = action.title;
|
|
50
|
+
if (action.kind !== undefined)
|
|
51
|
+
next.kind = action.kind;
|
|
52
|
+
if (action.state !== undefined)
|
|
53
|
+
next.state = action.state;
|
|
54
|
+
if (action.output)
|
|
55
|
+
next.output = action.output;
|
|
56
|
+
if (action.append)
|
|
57
|
+
next.output = [...next.output, action.append];
|
|
58
|
+
if (action.progress !== undefined) {
|
|
59
|
+
next.output = [
|
|
60
|
+
...next.output.filter((o) => !isProgress(o)),
|
|
61
|
+
{ type: 'text', text: action.progress, progress: true },
|
|
62
|
+
];
|
|
63
|
+
}
|
|
64
|
+
return next;
|
|
65
|
+
});
|
|
66
|
+
case 'tool-end':
|
|
67
|
+
return mapPart(messages, action.id, (p) => {
|
|
68
|
+
if (p.type !== 'tool')
|
|
69
|
+
return p;
|
|
70
|
+
const kept = p.output.filter((o) => !isProgress(o));
|
|
71
|
+
const next = {
|
|
72
|
+
...p,
|
|
73
|
+
state: action.state,
|
|
74
|
+
output: action.output ? [...kept, ...action.output] : kept,
|
|
75
|
+
};
|
|
76
|
+
delete next.approval;
|
|
77
|
+
if (action.error !== undefined)
|
|
78
|
+
next.error = action.error;
|
|
79
|
+
if (next.state === 'done' && next.inputText === '') {
|
|
80
|
+
next.inputText = JSON.stringify(next.input ?? {});
|
|
81
|
+
}
|
|
82
|
+
return next;
|
|
83
|
+
});
|
|
84
|
+
case 'message':
|
|
85
|
+
return incoming(messages, action, now);
|
|
86
|
+
case 'plan':
|
|
87
|
+
return action.parent
|
|
88
|
+
? inChildren(messages, action.parent, now, (kids) => plan(kids, action.entries, now))
|
|
89
|
+
: plan(messages, action.entries, now);
|
|
90
|
+
case 'notice':
|
|
91
|
+
return appendPart(messages, now, (m) => ({
|
|
92
|
+
type: 'notice',
|
|
93
|
+
id: `${m.id}:n${m.parts.length}`,
|
|
94
|
+
level: action.level,
|
|
95
|
+
text: action.text,
|
|
96
|
+
}));
|
|
97
|
+
case 'approval':
|
|
98
|
+
return mapPart(messages, action.id, (p) => p.type === 'tool'
|
|
99
|
+
? {
|
|
100
|
+
...p,
|
|
101
|
+
state: 'awaiting-approval',
|
|
102
|
+
approval: { options: action.options, reason: action.reason },
|
|
103
|
+
}
|
|
104
|
+
: p);
|
|
105
|
+
case 'approved':
|
|
106
|
+
return mapPart(messages, action.id, (p) => {
|
|
107
|
+
if (p.type !== 'tool')
|
|
108
|
+
return p;
|
|
109
|
+
const next = {
|
|
110
|
+
...p,
|
|
111
|
+
state: action.allowed
|
|
112
|
+
? p.state === 'awaiting-approval'
|
|
113
|
+
? 'running'
|
|
114
|
+
: p.state
|
|
115
|
+
: 'denied',
|
|
116
|
+
};
|
|
117
|
+
delete next.approval;
|
|
118
|
+
return next;
|
|
119
|
+
});
|
|
120
|
+
case 'question':
|
|
121
|
+
return appendPart(messages, now, () => ({
|
|
122
|
+
type: 'question',
|
|
123
|
+
id: action.id,
|
|
124
|
+
questions: action.questions,
|
|
125
|
+
state: 'open',
|
|
126
|
+
}));
|
|
127
|
+
case 'answered':
|
|
128
|
+
return mapPart(messages, action.id, (p) => p.type === 'question'
|
|
129
|
+
? action.answers
|
|
130
|
+
? { ...p, state: 'answered', answers: action.answers }
|
|
131
|
+
: { ...p, state: 'cancelled' }
|
|
132
|
+
: p);
|
|
133
|
+
case 'stopped':
|
|
134
|
+
return closeTurn(messages, true);
|
|
135
|
+
case 'turn-end':
|
|
136
|
+
return closeTurn(messages, action.reason === 'stopped');
|
|
137
|
+
case 'info':
|
|
138
|
+
case 'usage':
|
|
139
|
+
return messages;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
// --- the assistant message a turn writes to --------------------------------
|
|
143
|
+
/**
|
|
144
|
+
* The index of the message the current turn writes to, making one if the
|
|
145
|
+
* turn has none yet. A queued user message sits after the running turn's
|
|
146
|
+
* message, so it is passed over.
|
|
147
|
+
*/
|
|
148
|
+
function current(messages, now) {
|
|
149
|
+
for (let i = messages.length - 1; i >= 0; i--) {
|
|
150
|
+
const m = messages[i];
|
|
151
|
+
if (m.role === 'user' && m.queued)
|
|
152
|
+
continue;
|
|
153
|
+
if (m.role === 'assistant' && !m.done)
|
|
154
|
+
return [messages, i];
|
|
155
|
+
break;
|
|
156
|
+
}
|
|
157
|
+
const fresh = {
|
|
158
|
+
id: `a${messages.length}:${now.toString(36)}`,
|
|
159
|
+
role: 'assistant',
|
|
160
|
+
parts: [],
|
|
161
|
+
createdAt: now,
|
|
162
|
+
};
|
|
163
|
+
const at = beforeQueued(messages);
|
|
164
|
+
return [[...messages.slice(0, at), fresh, ...messages.slice(at)], at];
|
|
165
|
+
}
|
|
166
|
+
/** Where something the harness is acting on now goes: before any queued
|
|
167
|
+
* user messages, which wait for the turn to end. */
|
|
168
|
+
function beforeQueued(messages) {
|
|
169
|
+
let at = messages.length;
|
|
170
|
+
while (at > 0 &&
|
|
171
|
+
messages[at - 1].role === 'user' &&
|
|
172
|
+
messages[at - 1].queued) {
|
|
173
|
+
at--;
|
|
174
|
+
}
|
|
175
|
+
return at;
|
|
176
|
+
}
|
|
177
|
+
/** A message from someone other than the user, which the harness took. A
|
|
178
|
+
* driver that reports one twice is reporting the same message. */
|
|
179
|
+
function incoming(messages, ev, now) {
|
|
180
|
+
if (messages.some((m) => m.id === ev.id))
|
|
181
|
+
return messages;
|
|
182
|
+
const message = {
|
|
183
|
+
id: ev.id,
|
|
184
|
+
role: 'user',
|
|
185
|
+
parts: [
|
|
186
|
+
{ type: 'text', id: `${ev.id}:t`, text: ev.text, streaming: false },
|
|
187
|
+
],
|
|
188
|
+
createdAt: now,
|
|
189
|
+
from: ev.from,
|
|
190
|
+
};
|
|
191
|
+
const at = beforeQueued(messages);
|
|
192
|
+
return [...messages.slice(0, at), message, ...messages.slice(at)];
|
|
193
|
+
}
|
|
194
|
+
function appendPart(messages, now, make) {
|
|
195
|
+
const [all, i] = current(messages, now);
|
|
196
|
+
const m = all[i];
|
|
197
|
+
return replaceAt(all, i, { ...m, parts: [...m.parts, make(m)] });
|
|
198
|
+
}
|
|
199
|
+
function text(messages, ev, now) {
|
|
200
|
+
const kind = ev.reasoning ? 'reasoning' : 'text';
|
|
201
|
+
const found = findLivePart(messages, ev.id);
|
|
202
|
+
if (found) {
|
|
203
|
+
return mapPart(messages, ev.id, (p) => p.type === 'text' || p.type === 'reasoning'
|
|
204
|
+
? {
|
|
205
|
+
...p,
|
|
206
|
+
text: ev.text ?? p.text + (ev.delta ?? ''),
|
|
207
|
+
streaming: !ev.done,
|
|
208
|
+
}
|
|
209
|
+
: p);
|
|
210
|
+
}
|
|
211
|
+
return appendPart(messages, now, () => ({
|
|
212
|
+
type: kind,
|
|
213
|
+
id: ev.id,
|
|
214
|
+
text: ev.text ?? ev.delta ?? '',
|
|
215
|
+
streaming: !ev.done,
|
|
216
|
+
}));
|
|
217
|
+
}
|
|
218
|
+
function toolStart(messages, ev, now) {
|
|
219
|
+
if (findLivePart(messages, ev.id)) {
|
|
220
|
+
// a driver that saw the call twice (a stream event, then the block)
|
|
221
|
+
return mapPart(messages, ev.id, (p) => p.type === 'tool'
|
|
222
|
+
? {
|
|
223
|
+
...p,
|
|
224
|
+
...(ev.input !== undefined
|
|
225
|
+
? { input: ev.input, inputText: JSON.stringify(ev.input) }
|
|
226
|
+
: {}),
|
|
227
|
+
...(ev.title ? { title: ev.title } : {}),
|
|
228
|
+
...(ev.kind ? { kind: ev.kind } : {}),
|
|
229
|
+
}
|
|
230
|
+
: p);
|
|
231
|
+
}
|
|
232
|
+
const label = ev.label ?? ev.name;
|
|
233
|
+
return appendPart(messages, now, () => ({
|
|
234
|
+
type: 'tool',
|
|
235
|
+
id: ev.id,
|
|
236
|
+
name: ev.name,
|
|
237
|
+
label,
|
|
238
|
+
kind: ev.kind ?? 'other',
|
|
239
|
+
title: ev.title ?? label,
|
|
240
|
+
input: ev.input,
|
|
241
|
+
inputText: ev.input === undefined ? '' : JSON.stringify(ev.input),
|
|
242
|
+
state: ev.input === undefined ? 'input-streaming' : 'pending',
|
|
243
|
+
output: [],
|
|
244
|
+
app: ev.app ?? false,
|
|
245
|
+
}));
|
|
246
|
+
}
|
|
247
|
+
function plan(messages, entries, now) {
|
|
248
|
+
const [all, i] = current(messages, now);
|
|
249
|
+
const m = all[i];
|
|
250
|
+
// one plan a turn, updated in place: a checklist, not a log of checklists
|
|
251
|
+
const at = m.parts.findIndex((p) => p.type === 'plan');
|
|
252
|
+
const part = {
|
|
253
|
+
type: 'plan',
|
|
254
|
+
id: at >= 0 ? m.parts[at].id : `${m.id}:plan`,
|
|
255
|
+
entries,
|
|
256
|
+
};
|
|
257
|
+
const parts = at >= 0
|
|
258
|
+
? [...m.parts.slice(0, at), part, ...m.parts.slice(at + 1)]
|
|
259
|
+
: [...m.parts, part];
|
|
260
|
+
return replaceAt(all, i, { ...m, parts });
|
|
261
|
+
}
|
|
262
|
+
/** Apply `fn` to the children of the tool call `parent` — a subagent. */
|
|
263
|
+
function inChildren(messages, parent, now, fn) {
|
|
264
|
+
if (!findLivePart(messages, parent))
|
|
265
|
+
return fn(messages);
|
|
266
|
+
return mapPart(messages, parent, (p) => p.type === 'tool' ? { ...p, children: fn(p.children ?? []) } : p);
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* A transcript saved from an earlier session, made ready to show again:
|
|
270
|
+
* whatever was queued was never sent and is dropped, and whatever was still
|
|
271
|
+
* open ends as a stopped turn does — a stream stops streaming, a tool call
|
|
272
|
+
* is cancelled, a question is closed. Nothing in it is live any more.
|
|
273
|
+
*/
|
|
274
|
+
export function restore(messages) {
|
|
275
|
+
return closeTurn(messages.filter((m) => !(m.role === 'user' && m.queued)), true);
|
|
276
|
+
}
|
|
277
|
+
function closeTurn(messages, stopped) {
|
|
278
|
+
let changed = false;
|
|
279
|
+
const out = messages.map((m) => {
|
|
280
|
+
if (m.role !== 'assistant' || m.done)
|
|
281
|
+
return m;
|
|
282
|
+
changed = true;
|
|
283
|
+
return { ...m, done: true, parts: m.parts.map((p) => settle(p, stopped)) };
|
|
284
|
+
});
|
|
285
|
+
return changed ? out : messages;
|
|
286
|
+
}
|
|
287
|
+
function settle(p, stopped) {
|
|
288
|
+
if ((p.type === 'text' || p.type === 'reasoning') && p.streaming) {
|
|
289
|
+
return { ...p, streaming: false };
|
|
290
|
+
}
|
|
291
|
+
if (p.type === 'tool') {
|
|
292
|
+
const children = p.children?.map((m) => m.done
|
|
293
|
+
? m
|
|
294
|
+
: { ...m, done: true, parts: m.parts.map((c) => settle(c, stopped)) });
|
|
295
|
+
if (OPEN_TOOL.has(p.state)) {
|
|
296
|
+
const next = {
|
|
297
|
+
...p,
|
|
298
|
+
state: stopped ? 'cancelled' : 'done',
|
|
299
|
+
output: p.output.filter((o) => !isProgress(o)),
|
|
300
|
+
...(children ? { children } : {}),
|
|
301
|
+
};
|
|
302
|
+
delete next.approval;
|
|
303
|
+
return next;
|
|
304
|
+
}
|
|
305
|
+
return children ? { ...p, children } : p;
|
|
306
|
+
}
|
|
307
|
+
if (p.type === 'question' && p.state === 'open') {
|
|
308
|
+
return { ...p, state: 'cancelled' };
|
|
309
|
+
}
|
|
310
|
+
return p;
|
|
311
|
+
}
|
|
312
|
+
// --- finding and replacing, children included ------------------------------
|
|
313
|
+
/** The part with this id, in any message. */
|
|
314
|
+
export function findPart(messages, id) {
|
|
315
|
+
return find(messages, id, false);
|
|
316
|
+
}
|
|
317
|
+
/**
|
|
318
|
+
* The part with this id in a turn still under way: what an event may touch.
|
|
319
|
+
* A driver's ids are unique within a turn, not across a session — a script
|
|
320
|
+
* that names its calls runs the same names every turn — so a finished turn's
|
|
321
|
+
* parts are never the ones an event means. They keep the state they ended in.
|
|
322
|
+
*/
|
|
323
|
+
export function findLivePart(messages, id) {
|
|
324
|
+
return find(messages, id, true);
|
|
325
|
+
}
|
|
326
|
+
function find(messages, id, live) {
|
|
327
|
+
for (let i = messages.length - 1; i >= 0; i--) {
|
|
328
|
+
const m = messages[i];
|
|
329
|
+
if (live && m.done)
|
|
330
|
+
continue;
|
|
331
|
+
for (const p of m.parts) {
|
|
332
|
+
if (p.id === id)
|
|
333
|
+
return p;
|
|
334
|
+
if (p.type === 'tool' && p.children) {
|
|
335
|
+
const inner = find(p.children, id, live);
|
|
336
|
+
if (inner)
|
|
337
|
+
return inner;
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
return undefined;
|
|
342
|
+
}
|
|
343
|
+
/** Replace the live part with this id (`findLivePart`'s), and the path to it. */
|
|
344
|
+
function mapPart(messages, id, fn) {
|
|
345
|
+
for (let i = messages.length - 1; i >= 0; i--) {
|
|
346
|
+
const m = messages[i];
|
|
347
|
+
if (m.done)
|
|
348
|
+
continue;
|
|
349
|
+
for (let j = 0; j < m.parts.length; j++) {
|
|
350
|
+
const p = m.parts[j];
|
|
351
|
+
let next;
|
|
352
|
+
if (p.id === id)
|
|
353
|
+
next = fn(p);
|
|
354
|
+
else if (p.type === 'tool' &&
|
|
355
|
+
p.children &&
|
|
356
|
+
findLivePart(p.children, id)) {
|
|
357
|
+
next = { ...p, children: mapPart(p.children, id, fn) };
|
|
358
|
+
}
|
|
359
|
+
if (next !== undefined) {
|
|
360
|
+
if (next === p)
|
|
361
|
+
return messages;
|
|
362
|
+
return replaceAt(messages, i, {
|
|
363
|
+
...m,
|
|
364
|
+
parts: [...m.parts.slice(0, j), next, ...m.parts.slice(j + 1)],
|
|
365
|
+
});
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
return messages;
|
|
370
|
+
}
|
|
371
|
+
function mapMessage(messages, id, fn) {
|
|
372
|
+
const i = messages.findIndex((m) => m.id === id);
|
|
373
|
+
return i < 0 ? messages : replaceAt(messages, i, fn(messages[i]));
|
|
374
|
+
}
|
|
375
|
+
function replaceAt(messages, i, m) {
|
|
376
|
+
return [...messages.slice(0, i), m, ...messages.slice(i + 1)];
|
|
377
|
+
}
|
|
378
|
+
function parseJson(text) {
|
|
379
|
+
try {
|
|
380
|
+
return JSON.parse(text);
|
|
381
|
+
}
|
|
382
|
+
catch {
|
|
383
|
+
return undefined;
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
/** A tool's progress line: a text output it replaces as it goes, and drops
|
|
387
|
+
* when the tool ends. */
|
|
388
|
+
export function isProgress(o) {
|
|
389
|
+
return o.type === 'text' && o.progress === true;
|
|
390
|
+
}
|
|
391
|
+
//# sourceMappingURL=reducer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reducer.js","sourceRoot":"","sources":["../../src/core/reducer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { type AgentDriver } from './driver.js';
|
|
2
|
+
import { type AnyToolDef } from './tools.js';
|
|
3
|
+
import { type AgentMessage, type AgentStatus, type ApprovalChoice, type Capabilities, type ComposedMessage, type CoreToolKey, type PermissionPolicy, type SessionInfo, type ToolCall, type ToolDecision } from './types.js';
|
|
4
|
+
/** A `coreTools` value: on, off, always asking, or replaced by a tool. */
|
|
5
|
+
export type CoreToolSetting = boolean | 'ask' | AnyToolDef;
|
|
6
|
+
export interface AgentOptions {
|
|
7
|
+
/** Which harness. Default `'claude'`: the Claude Agent SDK. */
|
|
8
|
+
agent?: 'claude' | AgentDriver;
|
|
9
|
+
/** Where it works. Default: the process's working directory. */
|
|
10
|
+
cwd?: string;
|
|
11
|
+
/** More directories it may read and write. */
|
|
12
|
+
folders?: readonly string[];
|
|
13
|
+
/** Appended to the harness's own system prompt. An array is joined with
|
|
14
|
+
* blank lines — `describeRenderers()` returns one. */
|
|
15
|
+
instructions?: string | readonly string[];
|
|
16
|
+
/** Replaces the harness's system prompt. `instructions` still follow it. */
|
|
17
|
+
systemPrompt?: string;
|
|
18
|
+
/**
|
|
19
|
+
* The harness's built-in tools, by what they do — `shell`, `read`, `edit`,
|
|
20
|
+
* `web`, `agents`, `todos` — or by a harness's own name (`NotebookEdit`).
|
|
21
|
+
* `false` removes one, `'ask'` makes it always ask, and a tool of the app's
|
|
22
|
+
* replaces it, which the agent then reaches by the built-in's name.
|
|
23
|
+
*/
|
|
24
|
+
coreTools?: Readonly<Partial<Record<CoreToolKey, CoreToolSetting>>> & Readonly<Record<string, CoreToolSetting | undefined>>;
|
|
25
|
+
/** The app's own tools, by name. */
|
|
26
|
+
tools?: Readonly<Record<string, AnyToolDef>>;
|
|
27
|
+
/** What runs without asking. Default `'ask'`. */
|
|
28
|
+
permissions?: PermissionPolicy;
|
|
29
|
+
/** Before every tool call the session sees: the app's say, ahead of the
|
|
30
|
+
* policy. `undefined` leaves it to the policy. */
|
|
31
|
+
onToolCall?: (call: ToolCall) => ToolDecision | Promise<ToolDecision>;
|
|
32
|
+
model?: string;
|
|
33
|
+
mode?: string;
|
|
34
|
+
/** A harness session to resume, by its id. */
|
|
35
|
+
resume?: string;
|
|
36
|
+
/**
|
|
37
|
+
* The transcript to start from: an earlier session's `snapshot.messages`,
|
|
38
|
+
* saved by the app. It is shown as it was, with anything left open
|
|
39
|
+
* settled as a stopped turn. The harness remembers the conversation only
|
|
40
|
+
* through `resume`, so pass its `info.id` beside it.
|
|
41
|
+
*/
|
|
42
|
+
messages?: readonly AgentMessage[];
|
|
43
|
+
/**
|
|
44
|
+
* `'cli'` (default): the harness behaves as it does on the command line,
|
|
45
|
+
* with the user's settings and project instructions (`CLAUDE.md`).
|
|
46
|
+
* `'isolated'`: none of them.
|
|
47
|
+
*/
|
|
48
|
+
settings?: 'cli' | 'isolated';
|
|
49
|
+
/** Passed to the driver as they are, after everything above. */
|
|
50
|
+
driverOptions?: Readonly<Record<string, unknown>>;
|
|
51
|
+
}
|
|
52
|
+
export interface SessionSnapshot {
|
|
53
|
+
readonly status: AgentStatus;
|
|
54
|
+
/** The transcript. */
|
|
55
|
+
readonly messages: readonly AgentMessage[];
|
|
56
|
+
readonly info: SessionInfo;
|
|
57
|
+
readonly capabilities: Capabilities;
|
|
58
|
+
/** Why the status is `'error'` or `'unavailable'`. */
|
|
59
|
+
readonly error?: string;
|
|
60
|
+
readonly paused: boolean;
|
|
61
|
+
/** Text taken back out of the queue by `stop()`, for the composer. */
|
|
62
|
+
readonly restored?: string;
|
|
63
|
+
}
|
|
64
|
+
export interface AgentSession {
|
|
65
|
+
readonly snapshot: SessionSnapshot;
|
|
66
|
+
/** Bound, so `useSyncExternalStore(session.subscribe, …)` works as is. */
|
|
67
|
+
readonly subscribe: (listener: () => void) => () => void;
|
|
68
|
+
/** The app's tools, replacements included, by name: what the view asks
|
|
69
|
+
* for a tool's `render`. */
|
|
70
|
+
readonly tools: ReadonlyMap<string, AnyToolDef>;
|
|
71
|
+
/** Start the harness now, rather than at the first `send`. */
|
|
72
|
+
start(): Promise<void>;
|
|
73
|
+
/**
|
|
74
|
+
* Send a message: the user's, or, with `from`, another session's. Sent
|
|
75
|
+
* mid-turn it steers where the harness can, and otherwise waits its turn.
|
|
76
|
+
*/
|
|
77
|
+
send(input: string | ComposedMessage): void;
|
|
78
|
+
/** Stop the turn. Queued messages come back as `snapshot.restored`. */
|
|
79
|
+
stop(): Promise<void>;
|
|
80
|
+
/** Hold every tool call at the gate. Needs `capabilities.gate` to be
|
|
81
|
+
* `'every-call'`; elsewhere it holds only the calls the agent asks about. */
|
|
82
|
+
pause(): void;
|
|
83
|
+
resume(): void;
|
|
84
|
+
/** Answer a tool call waiting for approval. */
|
|
85
|
+
respond(toolId: string, choice: ApprovalChoice, note?: string): void;
|
|
86
|
+
/** Answer a question; `null` dismisses it. */
|
|
87
|
+
answer(questionId: string, answers: Record<string, string> | null): void;
|
|
88
|
+
setModel(id: string): Promise<void>;
|
|
89
|
+
setMode(id: string): Promise<void>;
|
|
90
|
+
/** A line in the transcript from the app: an action's result, a failure. */
|
|
91
|
+
notify(level: 'info' | 'warning' | 'error', text: string): void;
|
|
92
|
+
/** The transcript as markdown, for Copy. */
|
|
93
|
+
toMarkdown(): string;
|
|
94
|
+
/** Mark `restored` as taken. */
|
|
95
|
+
takeRestored(): string | undefined;
|
|
96
|
+
close(): Promise<void>;
|
|
97
|
+
}
|
|
98
|
+
export declare function createAgentSession(options?: AgentOptions): AgentSession;
|
|
99
|
+
/** Lines that tell the agent what the UI can draw — see `describe` on a
|
|
100
|
+
* fence or a component. */
|
|
101
|
+
export declare function describeRenderers(renderers?: {
|
|
102
|
+
fences?: Readonly<Record<string, unknown>>;
|
|
103
|
+
components?: Readonly<Record<string, unknown>>;
|
|
104
|
+
}): string[];
|
|
105
|
+
//# sourceMappingURL=session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/core/session.ts"],"names":[],"mappings":"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"}
|