@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.
@@ -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(new ReadableStream({
15
- start(controller) {
16
- controller.close();
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(`Agent request to ${this.#api} failed: ${response.status} ${response.statusText}`);
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(`Agent reconnect to run ${this.#lastRunId} failed: ${response.status} ${response.statusText}`);
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}.`), this.approvalId = approvalId;
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
- * Aprovações inline estacionadas: `approvalId` → como resolver **ou rejeitar** a promessa parada.
165
- *
166
- * M92 — o `reject` entrou junto com a eviction. Antes havia só o `resolve`, e nada apagava a entrada
167
- * quando o turno abortava: a promessa ficava pendente **para sempre**, e a chamada de tool do SDK
168
- * pendurava com ela. Uma promessa que nunca resolve **nem** rejeita é a forma mais silenciosa de
169
- * engolir um erro — nem stack trace existe (`error-handling.md § 2`).
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
- * Cria o `awaitApproval` DESTE turno, com o número e o sinal fechados no closure.
179
- *
180
- * Campo compartilhado não serve, e a revisão do M92 mediu por quê: um runner do turno 1 que
181
- * estaciona **depois** do `send` do turno 2 lê o campo já sobrescrito e nasce etiquetado turno 2 —
182
- * o abort do turno 1 não o varre, e a promessa pendura. A primeira correção do M92 trocou "ler no
183
- * momento da aprovação" por "ler no `send`", e continuou errada pela mesma razão: um campo só.
184
- *
185
- * O closure é o único lugar onde o turno de um runner pode viver sem ser sobrescrito por outro.
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(new Error(`Duplicate pending approval id '${req.approvalId}' \u2014 ids must be unique.`));
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
- * Varre as aprovações de um turno, rejeitando cada uma com erro TIPADO.
206
- *
207
- * Rejeitar e não `resolve(false)`: um `false` é indistinguível de *"o usuário negou"*, e a diferença
208
- * importa — negar é decisão, abortar é interrupção. O SDK precisa das duas para desenrolar a chamada
209
- * de tool corretamente.
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("abort", () => {
233
- this.#varrerTurno(turnoAtual, "o turno foi abortado");
234
- }, {
235
- once: true
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(new Error(`No pending approval '${approvalId}' (unknown or already settled).`));
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 = /* @__PURE__ */ __name(() => void 0, "teardown");
276
- let detachAbort = /* @__PURE__ */ __name(() => void 0, "detachAbort");
253
+ let teardown = () => void 0;
254
+ let detachAbort = () => void 0;
277
255
  const stream = new ReadableStream({
278
256
  start(controller) {
279
- const finish = /* @__PURE__ */ __name((settle) => {
257
+ const finish = (settle) => {
280
258
  if (closed) return;
281
259
  closed = true;
282
260
  detachAbort();
283
261
  settle();
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;
296
- }
297
- if (typeof parsed !== "object" || parsed === null || typeof parsed.type !== "string") {
298
- return;
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
- 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
- });
289
+ }
290
+ );
313
291
  if (abortSignal !== void 0) {
314
- const onAbort = /* @__PURE__ */ __name(() => {
292
+ const onAbort = () => {
315
293
  finish(() => {
316
294
  teardown();
317
295
  controller.close();
318
296
  });
319
- }, "onAbort");
297
+ };
320
298
  if (abortSignal.aborted) onAbort();
321
299
  else {
322
300
  abortSignal.addEventListener("abort", onAbort);
323
- detachAbort = /* @__PURE__ */ __name(() => {
301
+ detachAbort = () => {
324
302
  abortSignal.removeEventListener("abort", onAbort);
325
- }, "detachAbort");
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
- * M92 — o prefixo commitado, materializado UMA vez por escrita em vez de por delta de token.
399
- *
400
- * `#committed` só muda em dois lugares (medido): no `done` de `send()` e em `reset()`. Entre deltas
401
- * ele é constante, então reconstruí-lo a cada `#emit` é trabalho que a estrutura já garante inútil.
402
- *
403
- * Invalidação é **na escrita**, não por comparação: comparar custaria o mesmo O(C) que isto evita, e
404
- * memoizar por comprimento erraria em `reset()` — comprimento igual com conteúdo diferente é
405
- * possível, e o bug seria invisível.
406
- *
407
- * Honestidade sobre o tamanho do ganho: medido, o spread custa **0,0062 ms por delta @400 mensagens**
408
- * — 3,1 ms num turno de 500 deltas. É real e é micro. A ordem de grandeza deste milestone está no
409
- * coalescing abaixo, porque o que pende de cada emit (a derivação da timeline) custa **3,274 ms por
410
- * chamada** no mesmo tamanho de thread (M86).
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 = /* @__PURE__ */ __name((listener) => {
385
+ subscribe = (listener) => {
423
386
  this.#listeners.add(listener);
424
387
  return () => {
425
388
  this.#listeners.delete(listener);
426
389
  };
427
- }, "subscribe");
390
+ };
428
391
  /** The current immutable snapshot (stable reference until the next emit). */
429
- getSnapshot = /* @__PURE__ */ __name(() => this.#snapshot, "getSnapshot");
392
+ getSnapshot = () => this.#snapshot;
430
393
  /**
431
- * Emite AGORA. Usado diretamente nas transições de status — ver `#agendarEmit`.
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
- * Emite por JANELA quando o coalescing está ligado; imediatamente quando não está.
453
- *
454
- * Borda de saída: o timer emite ao **fim** da janela, com o estado mais recente. O que isto compra
455
- * não é um emit mais barato — é **menos emits**, e o que pende de cada um é a derivação de 3,274 ms
456
- * medida no M86.
457
- *
458
- * As transições de status (`done`/`error`/`abort`) NÃO passam por aqui: elas chamam `#emit` direto,
459
- * porque um estado final preso num timer de 16 ms é um estado final perdido se o processo sair antes
460
- * — e `exec` sai logo após o turno.
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 = /* @__PURE__ */ __name(() => controller.signal.aborted, "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 = /* @__PURE__ */ __name((input) => {
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(() => this.#transport.sendMessages({
533
- trigger: "submit-message",
534
- chatId: this.#chatId,
535
- messageId: void 0,
536
- messages: [
537
- userMsg
538
- ],
539
- abortSignal: controller.signal,
540
- // Only object inputs flow as the request `body` (the turn text is always in `messages`);
541
- // a primitive input is carried by the user message, never spread into the body.
542
- body: typeof input === "object" && input !== null ? input : void 0,
543
- // M43 — per-request context reaches every transport (headers → HTTP, metadata → in-process/channel).
544
- headers: context?.headers,
545
- metadata: context?.metadata
546
- }), controller);
547
- }, "send");
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 = /* @__PURE__ */ __name(() => {
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(() => this.#transport.reconnectToStream({
558
- chatId: this.#chatId,
559
- headers: context?.headers,
560
- metadata: context?.metadata
561
- }), controller);
562
- }, "reconnect");
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 = /* @__PURE__ */ __name(() => {
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
- }, "abort");
521
+ };
572
522
  /** Clear messages + error, back to idle. */
573
- reset = /* @__PURE__ */ __name(() => {
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
- }, "reset");
532
+ };
583
533
  /** Settle a paused HITL approval via the transport's HITL path (HTTP POST or inline callback). */
584
- approve = /* @__PURE__ */ __name(async (approvalId, decision) => {
534
+ approve = async (approvalId, decision) => {
585
535
  await this.#transport.approve?.(approvalId, decision);
586
- }, "approve");
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: /* @__PURE__ */ __name((run) => new InProcessTransport({
594
- run
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-CVDPGEJF.js.map
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":[]}