@theokit/agents 7.3.0 → 7.4.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/dist/auth.d.ts +1 -1
- package/dist/auth.js +77 -70
- package/dist/auth.js.map +1 -1
- package/dist/bridge.js +1 -2
- package/dist/{chunk-CVDPGEJF.js → chunk-7ZQTOTK2.js} +164 -220
- package/dist/chunk-7ZQTOTK2.js.map +1 -0
- package/dist/{chunk-7ECCHM4N.js → chunk-NSJDG6XE.js} +448 -980
- package/dist/chunk-NSJDG6XE.js.map +1 -0
- package/dist/client-react.js +3 -9
- package/dist/client-react.js.map +1 -1
- package/dist/client.js +1 -2
- package/dist/index.d.ts +1 -1
- package/dist/index.js +132 -363
- package/dist/index.js.map +1 -1
- package/dist/interactive.js +6 -3
- package/dist/interactive.js.map +1 -1
- package/dist/persistence.js +0 -2
- package/dist/persistence.js.map +1 -1
- package/dist/pty.js +7 -3
- package/dist/pty.js.map +1 -1
- package/dist/sandbox.js +26 -3
- package/dist/sandbox.js.map +1 -1
- package/dist/testing.js +3 -21
- package/dist/testing.js.map +1 -1
- package/dist/tools.js +55 -3
- package/dist/tools.js.map +1 -1
- package/package.json +2 -2
- package/dist/chunk-7ECCHM4N.js.map +0 -1
- package/dist/chunk-CVDPGEJF.js.map +0 -1
- package/dist/chunk-Z4QWC7IK.js +0 -7
- package/dist/chunk-Z4QWC7IK.js.map +0 -1
|
@@ -1,31 +1,26 @@
|
|
|
1
|
-
import {
|
|
2
|
-
__name
|
|
3
|
-
} from "./chunk-Z4QWC7IK.js";
|
|
4
|
-
|
|
5
1
|
// src/client/consume-ui-message-stream.ts
|
|
6
2
|
import { parseWireStream, readMessageStream } from "@theokit/presenter/wire";
|
|
7
3
|
async function consumeUIMessageStream(response, onMessage) {
|
|
8
4
|
const chunkStream = await responseToChunkStream(response);
|
|
9
5
|
await consumeChunkStream(chunkStream, onMessage);
|
|
10
6
|
}
|
|
11
|
-
__name(consumeUIMessageStream, "consumeUIMessageStream");
|
|
12
7
|
function responseToChunkStream(response) {
|
|
13
8
|
if (response.body === null) {
|
|
14
|
-
return Promise.resolve(
|
|
15
|
-
|
|
16
|
-
controller
|
|
17
|
-
|
|
18
|
-
|
|
9
|
+
return Promise.resolve(
|
|
10
|
+
new ReadableStream({
|
|
11
|
+
start(controller) {
|
|
12
|
+
controller.close();
|
|
13
|
+
}
|
|
14
|
+
})
|
|
15
|
+
);
|
|
19
16
|
}
|
|
20
17
|
return Promise.resolve(parseWireStream(response.body));
|
|
21
18
|
}
|
|
22
|
-
__name(responseToChunkStream, "responseToChunkStream");
|
|
23
19
|
async function consumeChunkStream(stream, onMessage) {
|
|
24
20
|
for await (const message of readMessageStream(stream)) {
|
|
25
21
|
onMessage(message);
|
|
26
22
|
}
|
|
27
23
|
}
|
|
28
|
-
__name(consumeChunkStream, "consumeChunkStream");
|
|
29
24
|
|
|
30
25
|
// src/client/http-transport.ts
|
|
31
26
|
function toRecord(headers) {
|
|
@@ -33,11 +28,7 @@ function toRecord(headers) {
|
|
|
33
28
|
if (headers instanceof Headers) return Object.fromEntries(headers.entries());
|
|
34
29
|
return headers;
|
|
35
30
|
}
|
|
36
|
-
__name(toRecord, "toRecord");
|
|
37
31
|
var HttpTransport = class {
|
|
38
|
-
static {
|
|
39
|
-
__name(this, "HttpTransport");
|
|
40
|
-
}
|
|
41
32
|
#api;
|
|
42
33
|
#headers;
|
|
43
34
|
#fetch;
|
|
@@ -68,15 +59,13 @@ var HttpTransport = class {
|
|
|
68
59
|
// conversation (SDK history + session-scoped tools like `todolist`) persists across turns instead of
|
|
69
60
|
// resetting on a fresh random session each request. Placed last so a session is never shadowed by an
|
|
70
61
|
// `id` field inside the typed input. Undefined chatId ⇒ key omitted ⇒ server falls back (unchanged).
|
|
71
|
-
body: JSON.stringify({
|
|
72
|
-
...extra,
|
|
73
|
-
messages,
|
|
74
|
-
id: chatId
|
|
75
|
-
}),
|
|
62
|
+
body: JSON.stringify({ ...extra, messages, id: chatId }),
|
|
76
63
|
signal: abortSignal
|
|
77
64
|
});
|
|
78
65
|
if (!response.ok) {
|
|
79
|
-
throw new Error(
|
|
66
|
+
throw new Error(
|
|
67
|
+
`Agent request to ${this.#api} failed: ${response.status} ${response.statusText}`
|
|
68
|
+
);
|
|
80
69
|
}
|
|
81
70
|
this.#lastRunId = response.headers.get("x-theokit-run-id") ?? void 0;
|
|
82
71
|
return responseToChunkStream(response);
|
|
@@ -85,14 +74,13 @@ var HttpTransport = class {
|
|
|
85
74
|
if (this.#lastRunId === void 0) return null;
|
|
86
75
|
const response = await this.#fetch(`${this.#api}/runs/${this.#lastRunId}/stream`, {
|
|
87
76
|
method: "GET",
|
|
88
|
-
headers: {
|
|
89
|
-
...this.#resolveHeaders(),
|
|
90
|
-
...toRecord(options.headers)
|
|
91
|
-
}
|
|
77
|
+
headers: { ...this.#resolveHeaders(), ...toRecord(options.headers) }
|
|
92
78
|
});
|
|
93
79
|
if (response.status === 404) return null;
|
|
94
80
|
if (!response.ok) {
|
|
95
|
-
throw new Error(
|
|
81
|
+
throw new Error(
|
|
82
|
+
`Agent reconnect to run ${this.#lastRunId} failed: ${response.status} ${response.statusText}`
|
|
83
|
+
);
|
|
96
84
|
}
|
|
97
85
|
return responseToChunkStream(response);
|
|
98
86
|
}
|
|
@@ -122,7 +110,6 @@ function extractLastUserText(messages) {
|
|
|
122
110
|
}
|
|
123
111
|
return "";
|
|
124
112
|
}
|
|
125
|
-
__name(extractLastUserText, "extractLastUserText");
|
|
126
113
|
|
|
127
114
|
// src/client/in-process-transport.ts
|
|
128
115
|
function generatorToStream(gen) {
|
|
@@ -144,30 +131,24 @@ function generatorToStream(gen) {
|
|
|
144
131
|
}
|
|
145
132
|
});
|
|
146
133
|
}
|
|
147
|
-
__name(generatorToStream, "generatorToStream");
|
|
148
134
|
var ApprovalAbortedError = class extends Error {
|
|
149
|
-
static {
|
|
150
|
-
__name(this, "ApprovalAbortedError");
|
|
151
|
-
}
|
|
152
|
-
approvalId;
|
|
153
135
|
constructor(approvalId, motivo) {
|
|
154
|
-
super(`Aprova\xE7\xE3o '${approvalId}' descartada: ${motivo}.`)
|
|
136
|
+
super(`Aprova\xE7\xE3o '${approvalId}' descartada: ${motivo}.`);
|
|
137
|
+
this.approvalId = approvalId;
|
|
155
138
|
this.name = "ApprovalAbortedError";
|
|
156
139
|
}
|
|
140
|
+
approvalId;
|
|
157
141
|
};
|
|
158
142
|
var InProcessTransport = class {
|
|
159
|
-
static {
|
|
160
|
-
__name(this, "InProcessTransport");
|
|
161
|
-
}
|
|
162
143
|
#run;
|
|
163
144
|
/**
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
145
|
+
* Aprovações inline estacionadas: `approvalId` → como resolver **ou rejeitar** a promessa parada.
|
|
146
|
+
*
|
|
147
|
+
* M92 — o `reject` entrou junto com a eviction. Antes havia só o `resolve`, e nada apagava a entrada
|
|
148
|
+
* quando o turno abortava: a promessa ficava pendente **para sempre**, e a chamada de tool do SDK
|
|
149
|
+
* pendurava com ela. Uma promessa que nunca resolve **nem** rejeita é a forma mais silenciosa de
|
|
150
|
+
* engolir um erro — nem stack trace existe (`error-handling.md § 2`).
|
|
151
|
+
*/
|
|
171
152
|
#pending = /* @__PURE__ */ new Map();
|
|
172
153
|
/** O turno corrente. Um `send()` novo incrementa e varre o anterior. */
|
|
173
154
|
#turno = 0;
|
|
@@ -175,15 +156,15 @@ var InProcessTransport = class {
|
|
|
175
156
|
this.#run = options.run;
|
|
176
157
|
}
|
|
177
158
|
/**
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
159
|
+
* Cria o `awaitApproval` DESTE turno, com o número e o sinal fechados no closure.
|
|
160
|
+
*
|
|
161
|
+
* Campo compartilhado não serve, e a revisão do M92 mediu por quê: um runner do turno 1 que
|
|
162
|
+
* estaciona **depois** do `send` do turno 2 lê o campo já sobrescrito e nasce etiquetado turno 2 —
|
|
163
|
+
* o abort do turno 1 não o varre, e a promessa pendura. A primeira correção do M92 trocou "ler no
|
|
164
|
+
* momento da aprovação" por "ler no `send`", e continuou errada pela mesma razão: um campo só.
|
|
165
|
+
*
|
|
166
|
+
* O closure é o único lugar onde o turno de um runner pode viver sem ser sobrescrito por outro.
|
|
167
|
+
*/
|
|
187
168
|
#criarAwaitApproval(turno, sinal) {
|
|
188
169
|
return (req) => new Promise((resolve, reject) => {
|
|
189
170
|
if (sinal?.aborted === true) {
|
|
@@ -191,27 +172,23 @@ var InProcessTransport = class {
|
|
|
191
172
|
return;
|
|
192
173
|
}
|
|
193
174
|
if (this.#pending.has(req.approvalId)) {
|
|
194
|
-
reject(
|
|
175
|
+
reject(
|
|
176
|
+
new Error(`Duplicate pending approval id '${req.approvalId}' \u2014 ids must be unique.`)
|
|
177
|
+
);
|
|
195
178
|
return;
|
|
196
179
|
}
|
|
197
|
-
this.#pending.set(req.approvalId, {
|
|
198
|
-
resolve,
|
|
199
|
-
reject,
|
|
200
|
-
turno
|
|
201
|
-
});
|
|
180
|
+
this.#pending.set(req.approvalId, { resolve, reject, turno });
|
|
202
181
|
});
|
|
203
182
|
}
|
|
204
183
|
/**
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
184
|
+
* Varre as aprovações de um turno, rejeitando cada uma com erro TIPADO.
|
|
185
|
+
*
|
|
186
|
+
* Rejeitar e não `resolve(false)`: um `false` é indistinguível de *"o usuário negou"*, e a diferença
|
|
187
|
+
* importa — negar é decisão, abortar é interrupção. O SDK precisa das duas para desenrolar a chamada
|
|
188
|
+
* de tool corretamente.
|
|
189
|
+
*/
|
|
211
190
|
#varrerTurno(turno, motivo) {
|
|
212
|
-
for (const [id, entrada] of [
|
|
213
|
-
...this.#pending
|
|
214
|
-
]) {
|
|
191
|
+
for (const [id, entrada] of [...this.#pending]) {
|
|
215
192
|
if (entrada.turno !== turno) continue;
|
|
216
193
|
this.#pending.delete(id);
|
|
217
194
|
entrada.reject(new ApprovalAbortedError(id, motivo));
|
|
@@ -229,11 +206,13 @@ var InProcessTransport = class {
|
|
|
229
206
|
if (abortSignal?.aborted === true) {
|
|
230
207
|
this.#varrerTurno(turnoAtual, "o turno j\xE1 estava abortado");
|
|
231
208
|
} else {
|
|
232
|
-
abortSignal?.addEventListener(
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
209
|
+
abortSignal?.addEventListener(
|
|
210
|
+
"abort",
|
|
211
|
+
() => {
|
|
212
|
+
this.#varrerTurno(turnoAtual, "o turno foi abortado");
|
|
213
|
+
},
|
|
214
|
+
{ once: true }
|
|
215
|
+
);
|
|
237
216
|
}
|
|
238
217
|
const generator = this.#run({
|
|
239
218
|
message: extractLastUserText(messages),
|
|
@@ -250,7 +229,9 @@ var InProcessTransport = class {
|
|
|
250
229
|
approve(approvalId, decision) {
|
|
251
230
|
const entrada = this.#pending.get(approvalId);
|
|
252
231
|
if (entrada === void 0) {
|
|
253
|
-
return Promise.reject(
|
|
232
|
+
return Promise.reject(
|
|
233
|
+
new Error(`No pending approval '${approvalId}' (unknown or already settled).`)
|
|
234
|
+
);
|
|
254
235
|
}
|
|
255
236
|
this.#pending.delete(approvalId);
|
|
256
237
|
entrada.resolve(decision);
|
|
@@ -260,9 +241,6 @@ var InProcessTransport = class {
|
|
|
260
241
|
|
|
261
242
|
// src/client/channel-transport.ts
|
|
262
243
|
var ChannelTransport = class {
|
|
263
|
-
static {
|
|
264
|
-
__name(this, "ChannelTransport");
|
|
265
|
-
}
|
|
266
244
|
#source;
|
|
267
245
|
constructor(options) {
|
|
268
246
|
this.#source = options.source;
|
|
@@ -272,57 +250,57 @@ var ChannelTransport = class {
|
|
|
272
250
|
const message = extractLastUserText(messages);
|
|
273
251
|
const source = this.#source;
|
|
274
252
|
let closed = false;
|
|
275
|
-
let teardown =
|
|
276
|
-
let detachAbort =
|
|
253
|
+
let teardown = () => void 0;
|
|
254
|
+
let detachAbort = () => void 0;
|
|
277
255
|
const stream = new ReadableStream({
|
|
278
256
|
start(controller) {
|
|
279
|
-
const finish =
|
|
257
|
+
const finish = (settle) => {
|
|
280
258
|
if (closed) return;
|
|
281
259
|
closed = true;
|
|
282
260
|
detachAbort();
|
|
283
261
|
settle();
|
|
284
|
-
}
|
|
285
|
-
teardown = source.start(
|
|
286
|
-
message,
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
262
|
+
};
|
|
263
|
+
teardown = source.start(
|
|
264
|
+
{ message, context: metadata },
|
|
265
|
+
{
|
|
266
|
+
onLine: (line) => {
|
|
267
|
+
if (closed) return;
|
|
268
|
+
let parsed;
|
|
269
|
+
try {
|
|
270
|
+
parsed = JSON.parse(line);
|
|
271
|
+
} catch {
|
|
272
|
+
return;
|
|
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
|
+
});
|
|
299
288
|
}
|
|
300
|
-
|
|
301
|
-
|
|
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
|
-
});
|
|
289
|
+
}
|
|
290
|
+
);
|
|
313
291
|
if (abortSignal !== void 0) {
|
|
314
|
-
const onAbort =
|
|
292
|
+
const onAbort = () => {
|
|
315
293
|
finish(() => {
|
|
316
294
|
teardown();
|
|
317
295
|
controller.close();
|
|
318
296
|
});
|
|
319
|
-
}
|
|
297
|
+
};
|
|
320
298
|
if (abortSignal.aborted) onAbort();
|
|
321
299
|
else {
|
|
322
300
|
abortSignal.addEventListener("abort", onAbort);
|
|
323
|
-
detachAbort =
|
|
301
|
+
detachAbort = () => {
|
|
324
302
|
abortSignal.removeEventListener("abort", onAbort);
|
|
325
|
-
}
|
|
303
|
+
};
|
|
326
304
|
}
|
|
327
305
|
}
|
|
328
306
|
},
|
|
@@ -354,24 +332,14 @@ function inputToText(input) {
|
|
|
354
332
|
if (typeof input === "string") return input;
|
|
355
333
|
return JSON.stringify(input);
|
|
356
334
|
}
|
|
357
|
-
__name(inputToText, "inputToText");
|
|
358
335
|
function buildUserMessage(input) {
|
|
359
336
|
return {
|
|
360
337
|
id: crypto.randomUUID(),
|
|
361
338
|
role: "user",
|
|
362
|
-
parts: [
|
|
363
|
-
{
|
|
364
|
-
type: "text",
|
|
365
|
-
text: inputToText(input)
|
|
366
|
-
}
|
|
367
|
-
]
|
|
339
|
+
parts: [{ type: "text", text: inputToText(input) }]
|
|
368
340
|
};
|
|
369
341
|
}
|
|
370
|
-
__name(buildUserMessage, "buildUserMessage");
|
|
371
342
|
var AgentClient = class {
|
|
372
|
-
static {
|
|
373
|
-
__name(this, "AgentClient");
|
|
374
|
-
}
|
|
375
343
|
#transport;
|
|
376
344
|
#chatId = crypto.randomUUID();
|
|
377
345
|
#listeners = /* @__PURE__ */ new Set();
|
|
@@ -388,27 +356,22 @@ var AgentClient = class {
|
|
|
388
356
|
#currentUser;
|
|
389
357
|
/** A stable id for the current turn's assistant (the SDK leaves it empty — we fabricate one). */
|
|
390
358
|
#currentAssistantId = "";
|
|
391
|
-
#snapshot = {
|
|
392
|
-
messages: [],
|
|
393
|
-
thread: [],
|
|
394
|
-
status: "idle",
|
|
395
|
-
error: void 0
|
|
396
|
-
};
|
|
359
|
+
#snapshot = { messages: [], thread: [], status: "idle", error: void 0 };
|
|
397
360
|
/**
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
361
|
+
* M92 — o prefixo commitado, materializado UMA vez por escrita em vez de por delta de token.
|
|
362
|
+
*
|
|
363
|
+
* `#committed` só muda em dois lugares (medido): no `done` de `send()` e em `reset()`. Entre deltas
|
|
364
|
+
* ele é constante, então reconstruí-lo a cada `#emit` é trabalho que a estrutura já garante inútil.
|
|
365
|
+
*
|
|
366
|
+
* Invalidação é **na escrita**, não por comparação: comparar custaria o mesmo O(C) que isto evita, e
|
|
367
|
+
* memoizar por comprimento erraria em `reset()` — comprimento igual com conteúdo diferente é
|
|
368
|
+
* possível, e o bug seria invisível.
|
|
369
|
+
*
|
|
370
|
+
* Honestidade sobre o tamanho do ganho: medido, o spread custa **0,0062 ms por delta @400 mensagens**
|
|
371
|
+
* — 3,1 ms num turno de 500 deltas. É real e é micro. A ordem de grandeza deste milestone está no
|
|
372
|
+
* coalescing abaixo, porque o que pende de cada emit (a derivação da timeline) custa **3,274 ms por
|
|
373
|
+
* chamada** no mesmo tamanho de thread (M86).
|
|
374
|
+
*/
|
|
412
375
|
#prefixo = [];
|
|
413
376
|
/** Coalescing opt-in: `0` (default) emite por delta, como sempre. */
|
|
414
377
|
#emitIntervalMs;
|
|
@@ -419,46 +382,38 @@ var AgentClient = class {
|
|
|
419
382
|
this.#emitIntervalMs = options?.emitIntervalMs ?? 0;
|
|
420
383
|
}
|
|
421
384
|
/** Subscribe to state changes; returns an unsubscribe fn. */
|
|
422
|
-
subscribe =
|
|
385
|
+
subscribe = (listener) => {
|
|
423
386
|
this.#listeners.add(listener);
|
|
424
387
|
return () => {
|
|
425
388
|
this.#listeners.delete(listener);
|
|
426
389
|
};
|
|
427
|
-
}
|
|
390
|
+
};
|
|
428
391
|
/** The current immutable snapshot (stable reference until the next emit). */
|
|
429
|
-
getSnapshot =
|
|
392
|
+
getSnapshot = () => this.#snapshot;
|
|
430
393
|
/**
|
|
431
|
-
|
|
432
|
-
|
|
394
|
+
* Emite AGORA. Usado diretamente nas transições de status — ver `#agendarEmit`.
|
|
395
|
+
*/
|
|
433
396
|
#emit() {
|
|
434
397
|
if (this.#timerDeEmit !== void 0) {
|
|
435
398
|
clearTimeout(this.#timerDeEmit);
|
|
436
399
|
this.#timerDeEmit = void 0;
|
|
437
400
|
}
|
|
438
|
-
const cauda = this.#currentUser ? [
|
|
439
|
-
this.#currentUser,
|
|
440
|
-
...this.#messages
|
|
441
|
-
] : this.#messages;
|
|
401
|
+
const cauda = this.#currentUser ? [this.#currentUser, ...this.#messages] : this.#messages;
|
|
442
402
|
const thread = this.#prefixo.concat(cauda);
|
|
443
|
-
this.#snapshot = {
|
|
444
|
-
messages: this.#messages,
|
|
445
|
-
thread,
|
|
446
|
-
status: this.#status,
|
|
447
|
-
error: this.#error
|
|
448
|
-
};
|
|
403
|
+
this.#snapshot = { messages: this.#messages, thread, status: this.#status, error: this.#error };
|
|
449
404
|
for (const listener of this.#listeners) listener();
|
|
450
405
|
}
|
|
451
406
|
/**
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
407
|
+
* Emite por JANELA quando o coalescing está ligado; imediatamente quando não está.
|
|
408
|
+
*
|
|
409
|
+
* Borda de saída: o timer emite ao **fim** da janela, com o estado mais recente. O que isto compra
|
|
410
|
+
* não é um emit mais barato — é **menos emits**, e o que pende de cada um é a derivação de 3,274 ms
|
|
411
|
+
* medida no M86.
|
|
412
|
+
*
|
|
413
|
+
* As transições de status (`done`/`error`/`abort`) NÃO passam por aqui: elas chamam `#emit` direto,
|
|
414
|
+
* porque um estado final preso num timer de 16 ms é um estado final perdido se o processo sair antes
|
|
415
|
+
* — e `exec` sai logo após o turno.
|
|
416
|
+
*/
|
|
462
417
|
#agendarEmit() {
|
|
463
418
|
if (this.#emitIntervalMs <= 0) {
|
|
464
419
|
this.#emit();
|
|
@@ -471,16 +426,14 @@ var AgentClient = class {
|
|
|
471
426
|
}, this.#emitIntervalMs);
|
|
472
427
|
}
|
|
473
428
|
#upsert(message) {
|
|
474
|
-
const next = [
|
|
475
|
-
...this.#messages
|
|
476
|
-
];
|
|
429
|
+
const next = [...this.#messages];
|
|
477
430
|
const idx = next.findIndex((existing) => existing.id === message.id);
|
|
478
431
|
if (idx >= 0) next[idx] = message;
|
|
479
432
|
else next.push(message);
|
|
480
433
|
this.#messages = next;
|
|
481
434
|
}
|
|
482
435
|
async #drive(open, controller) {
|
|
483
|
-
const aborted =
|
|
436
|
+
const aborted = () => controller.signal.aborted;
|
|
484
437
|
try {
|
|
485
438
|
const stream = await open();
|
|
486
439
|
if (aborted()) return;
|
|
@@ -491,10 +444,7 @@ var AgentClient = class {
|
|
|
491
444
|
}
|
|
492
445
|
await consumeChunkStream(stream, (message) => {
|
|
493
446
|
if (aborted()) return;
|
|
494
|
-
const stamped = message.id ? message : {
|
|
495
|
-
...message,
|
|
496
|
-
id: this.#currentAssistantId
|
|
497
|
-
};
|
|
447
|
+
const stamped = message.id ? message : { ...message, id: this.#currentAssistantId };
|
|
498
448
|
this.#upsert(stamped);
|
|
499
449
|
this.#agendarEmit();
|
|
500
450
|
});
|
|
@@ -509,13 +459,9 @@ var AgentClient = class {
|
|
|
509
459
|
}
|
|
510
460
|
}
|
|
511
461
|
/** Send a typed input; opens a fresh stream (replaces prior messages). */
|
|
512
|
-
send =
|
|
462
|
+
send = (input) => {
|
|
513
463
|
if (this.#status === "done" && this.#currentUser) {
|
|
514
|
-
this.#committed = [
|
|
515
|
-
...this.#committed,
|
|
516
|
-
this.#currentUser,
|
|
517
|
-
...this.#messages
|
|
518
|
-
];
|
|
464
|
+
this.#committed = [...this.#committed, this.#currentUser, ...this.#messages];
|
|
519
465
|
this.#prefixo = this.#committed;
|
|
520
466
|
}
|
|
521
467
|
this.abort();
|
|
@@ -529,24 +475,25 @@ var AgentClient = class {
|
|
|
529
475
|
this.#status = "streaming";
|
|
530
476
|
this.#emit();
|
|
531
477
|
const context = this.#contextResolver?.();
|
|
532
|
-
void this.#drive(
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
userMsg
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
478
|
+
void this.#drive(
|
|
479
|
+
() => this.#transport.sendMessages({
|
|
480
|
+
trigger: "submit-message",
|
|
481
|
+
chatId: this.#chatId,
|
|
482
|
+
messageId: void 0,
|
|
483
|
+
messages: [userMsg],
|
|
484
|
+
abortSignal: controller.signal,
|
|
485
|
+
// Only object inputs flow as the request `body` (the turn text is always in `messages`);
|
|
486
|
+
// a primitive input is carried by the user message, never spread into the body.
|
|
487
|
+
body: typeof input === "object" && input !== null ? input : void 0,
|
|
488
|
+
// M43 — per-request context reaches every transport (headers → HTTP, metadata → in-process/channel).
|
|
489
|
+
headers: context?.headers,
|
|
490
|
+
metadata: context?.metadata
|
|
491
|
+
}),
|
|
492
|
+
controller
|
|
493
|
+
);
|
|
494
|
+
};
|
|
548
495
|
/** Resume an interrupted stream via the transport's `reconnectToStream` (no-op when unavailable). */
|
|
549
|
-
reconnect =
|
|
496
|
+
reconnect = () => {
|
|
550
497
|
const controller = new AbortController();
|
|
551
498
|
this.#controller = controller;
|
|
552
499
|
if (!this.#currentAssistantId) this.#currentAssistantId = crypto.randomUUID();
|
|
@@ -554,23 +501,26 @@ var AgentClient = class {
|
|
|
554
501
|
this.#status = "streaming";
|
|
555
502
|
this.#emit();
|
|
556
503
|
const context = this.#contextResolver?.();
|
|
557
|
-
void this.#drive(
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
504
|
+
void this.#drive(
|
|
505
|
+
() => this.#transport.reconnectToStream({
|
|
506
|
+
chatId: this.#chatId,
|
|
507
|
+
headers: context?.headers,
|
|
508
|
+
metadata: context?.metadata
|
|
509
|
+
}),
|
|
510
|
+
controller
|
|
511
|
+
);
|
|
512
|
+
};
|
|
563
513
|
/** Abort an in-flight stream (not an error — leaves messages as-is). */
|
|
564
|
-
abort =
|
|
514
|
+
abort = () => {
|
|
565
515
|
this.#controller?.abort();
|
|
566
516
|
this.#controller = null;
|
|
567
517
|
if (this.#status === "streaming") {
|
|
568
518
|
this.#status = this.#committed.length > 0 || this.#messages.length > 0 ? "done" : "idle";
|
|
569
519
|
this.#emit();
|
|
570
520
|
}
|
|
571
|
-
}
|
|
521
|
+
};
|
|
572
522
|
/** Clear messages + error, back to idle. */
|
|
573
|
-
reset =
|
|
523
|
+
reset = () => {
|
|
574
524
|
this.abort();
|
|
575
525
|
this.#messages = [];
|
|
576
526
|
this.#committed = [];
|
|
@@ -579,30 +529,24 @@ var AgentClient = class {
|
|
|
579
529
|
this.#error = void 0;
|
|
580
530
|
this.#status = "idle";
|
|
581
531
|
this.#emit();
|
|
582
|
-
}
|
|
532
|
+
};
|
|
583
533
|
/** Settle a paused HITL approval via the transport's HITL path (HTTP POST or inline callback). */
|
|
584
|
-
approve =
|
|
534
|
+
approve = async (approvalId, decision) => {
|
|
585
535
|
await this.#transport.approve?.(approvalId, decision);
|
|
586
|
-
}
|
|
536
|
+
};
|
|
587
537
|
};
|
|
588
538
|
|
|
589
539
|
// src/client/agent-handle.ts
|
|
590
540
|
function agentHandle(path) {
|
|
591
541
|
return {
|
|
592
542
|
path,
|
|
593
|
-
inProcess:
|
|
594
|
-
|
|
595
|
-
}), "inProcess"),
|
|
596
|
-
channel: /* @__PURE__ */ __name((source) => new ChannelTransport({
|
|
597
|
-
source
|
|
598
|
-
}), "channel")
|
|
543
|
+
inProcess: (run) => new InProcessTransport({ run }),
|
|
544
|
+
channel: (source) => new ChannelTransport({ source })
|
|
599
545
|
};
|
|
600
546
|
}
|
|
601
|
-
__name(agentHandle, "agentHandle");
|
|
602
547
|
function isAgentHandle(value) {
|
|
603
548
|
return typeof value === "object" && value !== null && typeof value.path === "string" && typeof value.sendMessages !== "function";
|
|
604
549
|
}
|
|
605
|
-
__name(isAgentHandle, "isAgentHandle");
|
|
606
550
|
|
|
607
551
|
export {
|
|
608
552
|
consumeUIMessageStream,
|
|
@@ -617,4 +561,4 @@ export {
|
|
|
617
561
|
agentHandle,
|
|
618
562
|
isAgentHandle
|
|
619
563
|
};
|
|
620
|
-
//# sourceMappingURL=chunk-
|
|
564
|
+
//# sourceMappingURL=chunk-7ZQTOTK2.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":[]}
|