@theokit/agents 7.4.2 → 7.6.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 +201 -0
- package/dist/auth.d.ts +1 -1
- package/dist/auth.js +73 -74
- package/dist/auth.js.map +1 -1
- package/dist/{bridge-entry-Z8GjrwH4.d.ts → bridge-entry-CvmBrmc9.d.ts} +101 -5
- package/dist/bridge.d.ts +1 -1
- package/dist/bridge.js +6 -1
- package/dist/{chunk-PHUNONZT.js → chunk-22IPZFVT.js} +1007 -446
- package/dist/chunk-22IPZFVT.js.map +1 -0
- package/dist/{chunk-FJA4QQLZ.js → chunk-2BAFKRXT.js} +221 -165
- package/dist/chunk-2BAFKRXT.js.map +1 -0
- package/dist/chunk-Z4QWC7IK.js +7 -0
- package/dist/chunk-Z4QWC7IK.js.map +1 -0
- package/dist/client-react.js +9 -3
- package/dist/client-react.js.map +1 -1
- package/dist/client.js +2 -1
- package/dist/index.d.ts +18 -3
- package/dist/index.js +382 -129
- package/dist/index.js.map +1 -1
- package/dist/interactive.js +3 -6
- package/dist/interactive.js.map +1 -1
- package/dist/persistence.d.ts +1 -1
- package/dist/persistence.js +6 -0
- package/dist/persistence.js.map +1 -1
- package/dist/pty.js +3 -7
- package/dist/pty.js.map +1 -1
- package/dist/sandbox.d.ts +1 -1
- package/dist/sandbox.js +6 -2
- package/dist/sandbox.js.map +1 -1
- package/dist/testing.js +21 -3
- package/dist/testing.js.map +1 -1
- package/dist/tools.js +3 -55
- package/dist/tools.js.map +1 -1
- package/package.json +14 -21
- package/dist/chunk-FJA4QQLZ.js.map +0 -1
- package/dist/chunk-PHUNONZT.js.map +0 -1
|
@@ -1,26 +1,31 @@
|
|
|
1
|
+
import {
|
|
2
|
+
__name
|
|
3
|
+
} from "./chunk-Z4QWC7IK.js";
|
|
4
|
+
|
|
1
5
|
// src/client/consume-ui-message-stream.ts
|
|
2
6
|
import { parseWireStream, readMessageStream } from "@theokit/presenter/wire";
|
|
3
7
|
async function consumeUIMessageStream(response, onMessage) {
|
|
4
8
|
const chunkStream = await responseToChunkStream(response);
|
|
5
9
|
await consumeChunkStream(chunkStream, onMessage);
|
|
6
10
|
}
|
|
11
|
+
__name(consumeUIMessageStream, "consumeUIMessageStream");
|
|
7
12
|
function responseToChunkStream(response) {
|
|
8
13
|
if (response.body === null) {
|
|
9
|
-
return Promise.resolve(
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
})
|
|
15
|
-
);
|
|
14
|
+
return Promise.resolve(new ReadableStream({
|
|
15
|
+
start(controller) {
|
|
16
|
+
controller.close();
|
|
17
|
+
}
|
|
18
|
+
}));
|
|
16
19
|
}
|
|
17
20
|
return Promise.resolve(parseWireStream(response.body));
|
|
18
21
|
}
|
|
22
|
+
__name(responseToChunkStream, "responseToChunkStream");
|
|
19
23
|
async function consumeChunkStream(stream, onMessage) {
|
|
20
24
|
for await (const message of readMessageStream(stream)) {
|
|
21
25
|
onMessage(message);
|
|
22
26
|
}
|
|
23
27
|
}
|
|
28
|
+
__name(consumeChunkStream, "consumeChunkStream");
|
|
24
29
|
|
|
25
30
|
// src/client/http-transport.ts
|
|
26
31
|
function toRecord(headers) {
|
|
@@ -28,7 +33,11 @@ function toRecord(headers) {
|
|
|
28
33
|
if (headers instanceof Headers) return Object.fromEntries(headers.entries());
|
|
29
34
|
return headers;
|
|
30
35
|
}
|
|
36
|
+
__name(toRecord, "toRecord");
|
|
31
37
|
var HttpTransport = class {
|
|
38
|
+
static {
|
|
39
|
+
__name(this, "HttpTransport");
|
|
40
|
+
}
|
|
32
41
|
#api;
|
|
33
42
|
#headers;
|
|
34
43
|
#fetch;
|
|
@@ -59,13 +68,15 @@ var HttpTransport = class {
|
|
|
59
68
|
// conversation (SDK history + session-scoped tools like `todolist`) persists across turns instead of
|
|
60
69
|
// resetting on a fresh random session each request. Placed last so a session is never shadowed by an
|
|
61
70
|
// `id` field inside the typed input. Undefined chatId ⇒ key omitted ⇒ server falls back (unchanged).
|
|
62
|
-
body: JSON.stringify({
|
|
71
|
+
body: JSON.stringify({
|
|
72
|
+
...extra,
|
|
73
|
+
messages,
|
|
74
|
+
id: chatId
|
|
75
|
+
}),
|
|
63
76
|
signal: abortSignal
|
|
64
77
|
});
|
|
65
78
|
if (!response.ok) {
|
|
66
|
-
throw new Error(
|
|
67
|
-
`Agent request to ${this.#api} failed: ${response.status} ${response.statusText}`
|
|
68
|
-
);
|
|
79
|
+
throw new Error(`Agent request to ${this.#api} failed: ${response.status} ${response.statusText}`);
|
|
69
80
|
}
|
|
70
81
|
this.#lastRunId = response.headers.get("x-theokit-run-id") ?? void 0;
|
|
71
82
|
return responseToChunkStream(response);
|
|
@@ -74,13 +85,14 @@ var HttpTransport = class {
|
|
|
74
85
|
if (this.#lastRunId === void 0) return null;
|
|
75
86
|
const response = await this.#fetch(`${this.#api}/runs/${this.#lastRunId}/stream`, {
|
|
76
87
|
method: "GET",
|
|
77
|
-
headers: {
|
|
88
|
+
headers: {
|
|
89
|
+
...this.#resolveHeaders(),
|
|
90
|
+
...toRecord(options.headers)
|
|
91
|
+
}
|
|
78
92
|
});
|
|
79
93
|
if (response.status === 404) return null;
|
|
80
94
|
if (!response.ok) {
|
|
81
|
-
throw new Error(
|
|
82
|
-
`Agent reconnect to run ${this.#lastRunId} failed: ${response.status} ${response.statusText}`
|
|
83
|
-
);
|
|
95
|
+
throw new Error(`Agent reconnect to run ${this.#lastRunId} failed: ${response.status} ${response.statusText}`);
|
|
84
96
|
}
|
|
85
97
|
return responseToChunkStream(response);
|
|
86
98
|
}
|
|
@@ -110,6 +122,7 @@ function extractLastUserText(messages) {
|
|
|
110
122
|
}
|
|
111
123
|
return "";
|
|
112
124
|
}
|
|
125
|
+
__name(extractLastUserText, "extractLastUserText");
|
|
113
126
|
|
|
114
127
|
// src/client/in-process-transport.ts
|
|
115
128
|
function generatorToStream(gen) {
|
|
@@ -131,24 +144,30 @@ function generatorToStream(gen) {
|
|
|
131
144
|
}
|
|
132
145
|
});
|
|
133
146
|
}
|
|
147
|
+
__name(generatorToStream, "generatorToStream");
|
|
134
148
|
var ApprovalAbortedError = class extends Error {
|
|
149
|
+
static {
|
|
150
|
+
__name(this, "ApprovalAbortedError");
|
|
151
|
+
}
|
|
152
|
+
approvalId;
|
|
135
153
|
constructor(approvalId, reason) {
|
|
136
|
-
super(`Approval '${approvalId}' discarded: ${reason}.`);
|
|
137
|
-
this.approvalId = approvalId;
|
|
154
|
+
super(`Approval '${approvalId}' discarded: ${reason}.`), this.approvalId = approvalId;
|
|
138
155
|
this.name = "ApprovalAbortedError";
|
|
139
156
|
}
|
|
140
|
-
approvalId;
|
|
141
157
|
};
|
|
142
158
|
var InProcessTransport = class {
|
|
159
|
+
static {
|
|
160
|
+
__name(this, "InProcessTransport");
|
|
161
|
+
}
|
|
143
162
|
#run;
|
|
144
163
|
/**
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
164
|
+
* Parked inline approvals: `approvalId` → how to resolve **or reject** the stalled promise.
|
|
165
|
+
*
|
|
166
|
+
* M92 — `reject` arrived together with the eviction. Before there was only `resolve`, and nothing
|
|
167
|
+
* erased the entry when the turn aborted: the promise stayed pending **forever**, and the SDK tool
|
|
168
|
+
* call hung with it. A promise that neither resolves **nor** rejects is the quietest way to swallow
|
|
169
|
+
* an error — not even a stack trace exists (`error-handling.md § 2`).
|
|
170
|
+
*/
|
|
152
171
|
#pending = /* @__PURE__ */ new Map();
|
|
153
172
|
/** The current turn. A new `send()` increments it and sweeps the previous one. */
|
|
154
173
|
#turn = 0;
|
|
@@ -156,15 +175,15 @@ var InProcessTransport = class {
|
|
|
156
175
|
this.#run = options.run;
|
|
157
176
|
}
|
|
158
177
|
/**
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
178
|
+
* Creates the `awaitApproval` for THIS turn, with the number and the signal closed over.
|
|
179
|
+
*
|
|
180
|
+
* A shared field will not do, and the M92 review measured why: a turn-1 runner that parks **after**
|
|
181
|
+
* turn 2's `send` reads the already-overwritten field and is born labelled turn 2 — turn 1's abort
|
|
182
|
+
* does not sweep it, and the promise hangs. M92's first fix swapped "read at approval time" for
|
|
183
|
+
* "read at `send`", and stayed wrong for the same reason: a single field.
|
|
184
|
+
*
|
|
185
|
+
* The closure is the only place a runner's turn can live without another one overwriting it.
|
|
186
|
+
*/
|
|
168
187
|
#createAwaitApproval(turn, signal) {
|
|
169
188
|
return (req) => new Promise((resolve, reject) => {
|
|
170
189
|
if (signal?.aborted === true) {
|
|
@@ -172,23 +191,27 @@ var InProcessTransport = class {
|
|
|
172
191
|
return;
|
|
173
192
|
}
|
|
174
193
|
if (this.#pending.has(req.approvalId)) {
|
|
175
|
-
reject(
|
|
176
|
-
new Error(`Duplicate pending approval id '${req.approvalId}' \u2014 ids must be unique.`)
|
|
177
|
-
);
|
|
194
|
+
reject(new Error(`Duplicate pending approval id '${req.approvalId}' \u2014 ids must be unique.`));
|
|
178
195
|
return;
|
|
179
196
|
}
|
|
180
|
-
this.#pending.set(req.approvalId, {
|
|
197
|
+
this.#pending.set(req.approvalId, {
|
|
198
|
+
resolve,
|
|
199
|
+
reject,
|
|
200
|
+
turn
|
|
201
|
+
});
|
|
181
202
|
});
|
|
182
203
|
}
|
|
183
204
|
/**
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
205
|
+
* Sweeps a turn's approvals, rejecting each one with a TYPED error.
|
|
206
|
+
*
|
|
207
|
+
* Reject rather than `resolve(false)`: a `false` is indistinguishable from *"the user denied"*, and
|
|
208
|
+
* the difference matters — denying is a decision, aborting is an interruption. The SDK needs both to
|
|
209
|
+
* unwind the tool call correctly.
|
|
210
|
+
*/
|
|
190
211
|
#sweepTurn(turn, reason) {
|
|
191
|
-
for (const [id, entry] of [
|
|
212
|
+
for (const [id, entry] of [
|
|
213
|
+
...this.#pending
|
|
214
|
+
]) {
|
|
192
215
|
if (entry.turn !== turn) continue;
|
|
193
216
|
this.#pending.delete(id);
|
|
194
217
|
entry.reject(new ApprovalAbortedError(id, reason));
|
|
@@ -206,13 +229,11 @@ var InProcessTransport = class {
|
|
|
206
229
|
if (abortSignal?.aborted === true) {
|
|
207
230
|
this.#sweepTurn(currentTurn, "the turn was already aborted");
|
|
208
231
|
} else {
|
|
209
|
-
abortSignal?.addEventListener(
|
|
210
|
-
"
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
{ once: true }
|
|
215
|
-
);
|
|
232
|
+
abortSignal?.addEventListener("abort", () => {
|
|
233
|
+
this.#sweepTurn(currentTurn, "the turn was aborted");
|
|
234
|
+
}, {
|
|
235
|
+
once: true
|
|
236
|
+
});
|
|
216
237
|
}
|
|
217
238
|
const generator = this.#run({
|
|
218
239
|
message: extractLastUserText(messages),
|
|
@@ -229,9 +250,7 @@ var InProcessTransport = class {
|
|
|
229
250
|
approve(approvalId, decision) {
|
|
230
251
|
const entry = this.#pending.get(approvalId);
|
|
231
252
|
if (entry === void 0) {
|
|
232
|
-
return Promise.reject(
|
|
233
|
-
new Error(`No pending approval '${approvalId}' (unknown or already settled).`)
|
|
234
|
-
);
|
|
253
|
+
return Promise.reject(new Error(`No pending approval '${approvalId}' (unknown or already settled).`));
|
|
235
254
|
}
|
|
236
255
|
this.#pending.delete(approvalId);
|
|
237
256
|
entry.resolve(decision);
|
|
@@ -241,6 +260,9 @@ var InProcessTransport = class {
|
|
|
241
260
|
|
|
242
261
|
// src/client/channel-transport.ts
|
|
243
262
|
var ChannelTransport = class {
|
|
263
|
+
static {
|
|
264
|
+
__name(this, "ChannelTransport");
|
|
265
|
+
}
|
|
244
266
|
#source;
|
|
245
267
|
constructor(options) {
|
|
246
268
|
this.#source = options.source;
|
|
@@ -250,57 +272,57 @@ var ChannelTransport = class {
|
|
|
250
272
|
const message = extractLastUserText(messages);
|
|
251
273
|
const source = this.#source;
|
|
252
274
|
let closed = false;
|
|
253
|
-
let teardown = () => void 0;
|
|
254
|
-
let detachAbort = () => void 0;
|
|
275
|
+
let teardown = /* @__PURE__ */ __name(() => void 0, "teardown");
|
|
276
|
+
let detachAbort = /* @__PURE__ */ __name(() => void 0, "detachAbort");
|
|
255
277
|
const stream = new ReadableStream({
|
|
256
278
|
start(controller) {
|
|
257
|
-
const finish = (settle) => {
|
|
279
|
+
const finish = /* @__PURE__ */ __name((settle) => {
|
|
258
280
|
if (closed) return;
|
|
259
281
|
closed = true;
|
|
260
282
|
detachAbort();
|
|
261
283
|
settle();
|
|
262
|
-
};
|
|
263
|
-
teardown = source.start(
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
if (typeof parsed !== "object" || parsed === null || typeof parsed.type !== "string") {
|
|
275
|
-
return;
|
|
276
|
-
}
|
|
277
|
-
controller.enqueue(parsed);
|
|
278
|
-
},
|
|
279
|
-
onClose: () => {
|
|
280
|
-
finish(() => {
|
|
281
|
-
controller.close();
|
|
282
|
-
});
|
|
283
|
-
},
|
|
284
|
-
onError: (err) => {
|
|
285
|
-
finish(() => {
|
|
286
|
-
controller.error(err);
|
|
287
|
-
});
|
|
284
|
+
}, "finish");
|
|
285
|
+
teardown = source.start({
|
|
286
|
+
message,
|
|
287
|
+
context: metadata
|
|
288
|
+
}, {
|
|
289
|
+
onLine: /* @__PURE__ */ __name((line) => {
|
|
290
|
+
if (closed) return;
|
|
291
|
+
let parsed;
|
|
292
|
+
try {
|
|
293
|
+
parsed = JSON.parse(line);
|
|
294
|
+
} catch {
|
|
295
|
+
return;
|
|
288
296
|
}
|
|
289
|
-
|
|
290
|
-
|
|
297
|
+
if (typeof parsed !== "object" || parsed === null || typeof parsed.type !== "string") {
|
|
298
|
+
return;
|
|
299
|
+
}
|
|
300
|
+
controller.enqueue(parsed);
|
|
301
|
+
}, "onLine"),
|
|
302
|
+
onClose: /* @__PURE__ */ __name(() => {
|
|
303
|
+
finish(() => {
|
|
304
|
+
controller.close();
|
|
305
|
+
});
|
|
306
|
+
}, "onClose"),
|
|
307
|
+
onError: /* @__PURE__ */ __name((err) => {
|
|
308
|
+
finish(() => {
|
|
309
|
+
controller.error(err);
|
|
310
|
+
});
|
|
311
|
+
}, "onError")
|
|
312
|
+
});
|
|
291
313
|
if (abortSignal !== void 0) {
|
|
292
|
-
const onAbort = () => {
|
|
314
|
+
const onAbort = /* @__PURE__ */ __name(() => {
|
|
293
315
|
finish(() => {
|
|
294
316
|
teardown();
|
|
295
317
|
controller.close();
|
|
296
318
|
});
|
|
297
|
-
};
|
|
319
|
+
}, "onAbort");
|
|
298
320
|
if (abortSignal.aborted) onAbort();
|
|
299
321
|
else {
|
|
300
322
|
abortSignal.addEventListener("abort", onAbort);
|
|
301
|
-
detachAbort = () => {
|
|
323
|
+
detachAbort = /* @__PURE__ */ __name(() => {
|
|
302
324
|
abortSignal.removeEventListener("abort", onAbort);
|
|
303
|
-
};
|
|
325
|
+
}, "detachAbort");
|
|
304
326
|
}
|
|
305
327
|
}
|
|
306
328
|
},
|
|
@@ -332,14 +354,24 @@ function inputToText(input) {
|
|
|
332
354
|
if (typeof input === "string") return input;
|
|
333
355
|
return JSON.stringify(input);
|
|
334
356
|
}
|
|
357
|
+
__name(inputToText, "inputToText");
|
|
335
358
|
function buildUserMessage(input) {
|
|
336
359
|
return {
|
|
337
360
|
id: crypto.randomUUID(),
|
|
338
361
|
role: "user",
|
|
339
|
-
parts: [
|
|
362
|
+
parts: [
|
|
363
|
+
{
|
|
364
|
+
type: "text",
|
|
365
|
+
text: inputToText(input)
|
|
366
|
+
}
|
|
367
|
+
]
|
|
340
368
|
};
|
|
341
369
|
}
|
|
370
|
+
__name(buildUserMessage, "buildUserMessage");
|
|
342
371
|
var AgentClient = class {
|
|
372
|
+
static {
|
|
373
|
+
__name(this, "AgentClient");
|
|
374
|
+
}
|
|
343
375
|
#transport;
|
|
344
376
|
#chatId = crypto.randomUUID();
|
|
345
377
|
#listeners = /* @__PURE__ */ new Set();
|
|
@@ -356,23 +388,28 @@ var AgentClient = class {
|
|
|
356
388
|
#currentUser;
|
|
357
389
|
/** A stable id for the current turn's assistant (the SDK leaves it empty — we fabricate one). */
|
|
358
390
|
#currentAssistantId = "";
|
|
359
|
-
#snapshot = {
|
|
391
|
+
#snapshot = {
|
|
392
|
+
messages: [],
|
|
393
|
+
thread: [],
|
|
394
|
+
status: "idle",
|
|
395
|
+
error: void 0
|
|
396
|
+
};
|
|
360
397
|
/**
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
398
|
+
* M92 — the committed prefix, materialized ONCE per write instead of once per token delta.
|
|
399
|
+
*
|
|
400
|
+
* `#committed` changes in only two places (measured): in `send()`'s `done` and in `reset()`. Between
|
|
401
|
+
* deltas it is constant, so rebuilding it on every `#emit` is work the structure already guarantees
|
|
402
|
+
* is useless.
|
|
403
|
+
*
|
|
404
|
+
* Invalidation happens **on write**, not by comparison: comparing would cost the same O(C) this
|
|
405
|
+
* avoids, and memoizing by length would be wrong in `reset()` — equal length with different content
|
|
406
|
+
* is possible, and the bug would be invisible.
|
|
407
|
+
*
|
|
408
|
+
* Honesty about the size of the win: measured, the spread costs **0.0062 ms per delta @400 messages**
|
|
409
|
+
* — 3.1 ms across a 500-delta turn. It is real and it is micro. The order of magnitude of this
|
|
410
|
+
* milestone is in the coalescing below, because what hangs off each emit (deriving the timeline)
|
|
411
|
+
* costs **3.274 ms per call** at the same thread size (M86).
|
|
412
|
+
*/
|
|
376
413
|
#committedPrefix = [];
|
|
377
414
|
/** Opt-in coalescing: `0` (the default) emits per delta, as always. */
|
|
378
415
|
#emitIntervalMs;
|
|
@@ -383,38 +420,46 @@ var AgentClient = class {
|
|
|
383
420
|
this.#emitIntervalMs = options?.emitIntervalMs ?? 0;
|
|
384
421
|
}
|
|
385
422
|
/** Subscribe to state changes; returns an unsubscribe fn. */
|
|
386
|
-
subscribe = (listener) => {
|
|
423
|
+
subscribe = /* @__PURE__ */ __name((listener) => {
|
|
387
424
|
this.#listeners.add(listener);
|
|
388
425
|
return () => {
|
|
389
426
|
this.#listeners.delete(listener);
|
|
390
427
|
};
|
|
391
|
-
};
|
|
428
|
+
}, "subscribe");
|
|
392
429
|
/** The current immutable snapshot (stable reference until the next emit). */
|
|
393
|
-
getSnapshot = () => this.#snapshot;
|
|
430
|
+
getSnapshot = /* @__PURE__ */ __name(() => this.#snapshot, "getSnapshot");
|
|
394
431
|
/**
|
|
395
|
-
|
|
396
|
-
|
|
432
|
+
* Emits NOW. Used directly on status transitions — see `#scheduleEmit`.
|
|
433
|
+
*/
|
|
397
434
|
#emit() {
|
|
398
435
|
if (this.#timerDeEmit !== void 0) {
|
|
399
436
|
clearTimeout(this.#timerDeEmit);
|
|
400
437
|
this.#timerDeEmit = void 0;
|
|
401
438
|
}
|
|
402
|
-
const tail = this.#currentUser ? [
|
|
439
|
+
const tail = this.#currentUser ? [
|
|
440
|
+
this.#currentUser,
|
|
441
|
+
...this.#messages
|
|
442
|
+
] : this.#messages;
|
|
403
443
|
const thread = this.#committedPrefix.concat(tail);
|
|
404
|
-
this.#snapshot = {
|
|
444
|
+
this.#snapshot = {
|
|
445
|
+
messages: this.#messages,
|
|
446
|
+
thread,
|
|
447
|
+
status: this.#status,
|
|
448
|
+
error: this.#error
|
|
449
|
+
};
|
|
405
450
|
for (const listener of this.#listeners) listener();
|
|
406
451
|
}
|
|
407
452
|
/**
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
453
|
+
* Emits per WINDOW when coalescing is on; immediately when it is off.
|
|
454
|
+
*
|
|
455
|
+
* Trailing edge: the timer emits at the **end** of the window, with the most recent state. What this
|
|
456
|
+
* buys is not a cheaper emit — it is **fewer emits**, and what hangs off each one is the 3.274 ms
|
|
457
|
+
* derivation measured in M86.
|
|
458
|
+
*
|
|
459
|
+
* Status transitions (`done`/`error`/`abort`) do NOT go through here: they call `#emit` directly,
|
|
460
|
+
* because a final state trapped in a 16 ms timer is a final state lost if the process exits first —
|
|
461
|
+
* and `exec` exits right after the turn.
|
|
462
|
+
*/
|
|
418
463
|
#scheduleEmit() {
|
|
419
464
|
if (this.#emitIntervalMs <= 0) {
|
|
420
465
|
this.#emit();
|
|
@@ -427,14 +472,16 @@ var AgentClient = class {
|
|
|
427
472
|
}, this.#emitIntervalMs);
|
|
428
473
|
}
|
|
429
474
|
#upsert(message) {
|
|
430
|
-
const next = [
|
|
475
|
+
const next = [
|
|
476
|
+
...this.#messages
|
|
477
|
+
];
|
|
431
478
|
const idx = next.findIndex((existing) => existing.id === message.id);
|
|
432
479
|
if (idx >= 0) next[idx] = message;
|
|
433
480
|
else next.push(message);
|
|
434
481
|
this.#messages = next;
|
|
435
482
|
}
|
|
436
483
|
async #drive(open, controller) {
|
|
437
|
-
const aborted = () => controller.signal.aborted;
|
|
484
|
+
const aborted = /* @__PURE__ */ __name(() => controller.signal.aborted, "aborted");
|
|
438
485
|
try {
|
|
439
486
|
const stream = await open();
|
|
440
487
|
if (aborted()) return;
|
|
@@ -445,7 +492,10 @@ var AgentClient = class {
|
|
|
445
492
|
}
|
|
446
493
|
await consumeChunkStream(stream, (message) => {
|
|
447
494
|
if (aborted()) return;
|
|
448
|
-
const stamped = message.id ? message : {
|
|
495
|
+
const stamped = message.id ? message : {
|
|
496
|
+
...message,
|
|
497
|
+
id: this.#currentAssistantId
|
|
498
|
+
};
|
|
449
499
|
this.#upsert(stamped);
|
|
450
500
|
this.#scheduleEmit();
|
|
451
501
|
});
|
|
@@ -460,9 +510,13 @@ var AgentClient = class {
|
|
|
460
510
|
}
|
|
461
511
|
}
|
|
462
512
|
/** Send a typed input; opens a fresh stream (replaces prior messages). */
|
|
463
|
-
send = (input) => {
|
|
513
|
+
send = /* @__PURE__ */ __name((input) => {
|
|
464
514
|
if (this.#status === "done" && this.#currentUser) {
|
|
465
|
-
this.#committed = [
|
|
515
|
+
this.#committed = [
|
|
516
|
+
...this.#committed,
|
|
517
|
+
this.#currentUser,
|
|
518
|
+
...this.#messages
|
|
519
|
+
];
|
|
466
520
|
this.#committedPrefix = this.#committed;
|
|
467
521
|
}
|
|
468
522
|
this.abort();
|
|
@@ -476,25 +530,24 @@ var AgentClient = class {
|
|
|
476
530
|
this.#status = "streaming";
|
|
477
531
|
this.#emit();
|
|
478
532
|
const context = this.#contextResolver?.();
|
|
479
|
-
void this.#drive(
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
};
|
|
533
|
+
void this.#drive(() => this.#transport.sendMessages({
|
|
534
|
+
trigger: "submit-message",
|
|
535
|
+
chatId: this.#chatId,
|
|
536
|
+
messageId: void 0,
|
|
537
|
+
messages: [
|
|
538
|
+
userMsg
|
|
539
|
+
],
|
|
540
|
+
abortSignal: controller.signal,
|
|
541
|
+
// Only object inputs flow as the request `body` (the turn text is always in `messages`);
|
|
542
|
+
// a primitive input is carried by the user message, never spread into the body.
|
|
543
|
+
body: typeof input === "object" && input !== null ? input : void 0,
|
|
544
|
+
// M43 — per-request context reaches every transport (headers → HTTP, metadata → in-process/channel).
|
|
545
|
+
headers: context?.headers,
|
|
546
|
+
metadata: context?.metadata
|
|
547
|
+
}), controller);
|
|
548
|
+
}, "send");
|
|
496
549
|
/** Resume an interrupted stream via the transport's `reconnectToStream` (no-op when unavailable). */
|
|
497
|
-
reconnect = () => {
|
|
550
|
+
reconnect = /* @__PURE__ */ __name(() => {
|
|
498
551
|
const controller = new AbortController();
|
|
499
552
|
this.#controller = controller;
|
|
500
553
|
if (!this.#currentAssistantId) this.#currentAssistantId = crypto.randomUUID();
|
|
@@ -502,26 +555,23 @@ var AgentClient = class {
|
|
|
502
555
|
this.#status = "streaming";
|
|
503
556
|
this.#emit();
|
|
504
557
|
const context = this.#contextResolver?.();
|
|
505
|
-
void this.#drive(
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
controller
|
|
512
|
-
);
|
|
513
|
-
};
|
|
558
|
+
void this.#drive(() => this.#transport.reconnectToStream({
|
|
559
|
+
chatId: this.#chatId,
|
|
560
|
+
headers: context?.headers,
|
|
561
|
+
metadata: context?.metadata
|
|
562
|
+
}), controller);
|
|
563
|
+
}, "reconnect");
|
|
514
564
|
/** Abort an in-flight stream (not an error — leaves messages as-is). */
|
|
515
|
-
abort = () => {
|
|
565
|
+
abort = /* @__PURE__ */ __name(() => {
|
|
516
566
|
this.#controller?.abort();
|
|
517
567
|
this.#controller = null;
|
|
518
568
|
if (this.#status === "streaming") {
|
|
519
569
|
this.#status = this.#committed.length > 0 || this.#messages.length > 0 ? "done" : "idle";
|
|
520
570
|
this.#emit();
|
|
521
571
|
}
|
|
522
|
-
};
|
|
572
|
+
}, "abort");
|
|
523
573
|
/** Clear messages + error, back to idle. */
|
|
524
|
-
reset = () => {
|
|
574
|
+
reset = /* @__PURE__ */ __name(() => {
|
|
525
575
|
this.abort();
|
|
526
576
|
this.#messages = [];
|
|
527
577
|
this.#committed = [];
|
|
@@ -530,24 +580,30 @@ var AgentClient = class {
|
|
|
530
580
|
this.#error = void 0;
|
|
531
581
|
this.#status = "idle";
|
|
532
582
|
this.#emit();
|
|
533
|
-
};
|
|
583
|
+
}, "reset");
|
|
534
584
|
/** Settle a paused HITL approval via the transport's HITL path (HTTP POST or inline callback). */
|
|
535
|
-
approve = async (approvalId, decision) => {
|
|
585
|
+
approve = /* @__PURE__ */ __name(async (approvalId, decision) => {
|
|
536
586
|
await this.#transport.approve?.(approvalId, decision);
|
|
537
|
-
};
|
|
587
|
+
}, "approve");
|
|
538
588
|
};
|
|
539
589
|
|
|
540
590
|
// src/client/agent-handle.ts
|
|
541
591
|
function agentHandle(path) {
|
|
542
592
|
return {
|
|
543
593
|
path,
|
|
544
|
-
inProcess: (run) => new InProcessTransport({
|
|
545
|
-
|
|
594
|
+
inProcess: /* @__PURE__ */ __name((run) => new InProcessTransport({
|
|
595
|
+
run
|
|
596
|
+
}), "inProcess"),
|
|
597
|
+
channel: /* @__PURE__ */ __name((source) => new ChannelTransport({
|
|
598
|
+
source
|
|
599
|
+
}), "channel")
|
|
546
600
|
};
|
|
547
601
|
}
|
|
602
|
+
__name(agentHandle, "agentHandle");
|
|
548
603
|
function isAgentHandle(value) {
|
|
549
604
|
return typeof value === "object" && value !== null && typeof value.path === "string" && typeof value.sendMessages !== "function";
|
|
550
605
|
}
|
|
606
|
+
__name(isAgentHandle, "isAgentHandle");
|
|
551
607
|
|
|
552
608
|
export {
|
|
553
609
|
consumeUIMessageStream,
|
|
@@ -562,4 +618,4 @@ export {
|
|
|
562
618
|
agentHandle,
|
|
563
619
|
isAgentHandle
|
|
564
620
|
};
|
|
565
|
-
//# sourceMappingURL=chunk-
|
|
621
|
+
//# sourceMappingURL=chunk-2BAFKRXT.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/client/consume-ui-message-stream.ts","../src/client/http-transport.ts","../src/client/last-user-text.ts","../src/client/in-process-transport.ts","../src/client/channel-transport.ts","../src/client/agent-client.ts","../src/client/agent-handle.ts"],"mappings":"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","names":["parseWireStream","readMessageStream","consumeUIMessageStream","response","onMessage","chunkStream","responseToChunkStream","consumeChunkStream","body","Promise","resolve","ReadableStream","start","controller","close","parseWireStream","stream","message","readMessageStream","toRecord","headers","undefined","Headers","Object","fromEntries","entries","HttpTransport","options","api","fetch","globalThis","bind","sendMessages","messages","abortSignal","body","chatId","extra","response","method","accept","JSON","stringify","id","signal","ok","Error","status","statusText","get","responseToChunkStream","reconnectToStream","approve","approvalId","decision","extractLastUserText","messages","i","length","message","role","text","parts","filter","part","type","map","join","generatorToStream","gen","ReadableStream","pull","controller","result","next","done","close","enqueue","value","err","error","cancel","return","undefined","ApprovalAbortedError","Error","approvalId","reason","name","InProcessTransport","Map","options","run","turn","signal","req","Promise","resolve","reject","aborted","has","set","id","entry","delete","pending","size","sendMessages","messages","abortSignal","metadata","currentTurn","addEventListener","once","generator","message","extractLastUserText","awaitApproval","context","reconnectToStream","approve","decision","get","ChannelTransport","options","source","sendMessages","messages","abortSignal","metadata","message","extractLastUserText","closed","teardown","undefined","detachAbort","stream","ReadableStream","start","controller","finish","settle","context","onLine","line","parsed","JSON","parse","type","enqueue","onClose","close","onError","err","error","onAbort","aborted","addEventListener","removeEventListener","cancel","Promise","resolve","reconnectToStream","approve","approvalId","decision","Error","inputToText","input","message","JSON","stringify","buildUserMessage","id","crypto","randomUUID","role","parts","type","text","AgentClient","Set","messages","thread","status","error","undefined","transport","contextResolver","options","emitIntervalMs","subscribe","listener","add","delete","getSnapshot","clearTimeout","tail","concat","setTimeout","next","idx","findIndex","existing","push","open","controller","aborted","signal","stream","length","consumeChunkStream","stamped","err","Error","String","send","abort","AbortController","userMsg","context","sendMessages","trigger","chatId","messageId","abortSignal","body","headers","metadata","reconnect","reconnectToStream","reset","approve","approvalId","decision","agentHandle","path","inProcess","run","InProcessTransport","channel","source","ChannelTransport","isAgentHandle","value","sendMessages"]}
|