@syntrologie/adapt-chatbot 2.28.0 → 2.29.1

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.
Files changed (102) hide show
  1. package/dist/AdaptiveChatBar.composer.test.d.ts +2 -0
  2. package/dist/AdaptiveChatBar.composer.test.d.ts.map +1 -0
  3. package/dist/AdaptiveChatBar.d.ts +140 -4
  4. package/dist/AdaptiveChatBar.d.ts.map +1 -1
  5. package/dist/AdaptiveChatBar.js +4 -3
  6. package/dist/AdaptiveChatBarMountable.d.ts +47 -0
  7. package/dist/AdaptiveChatBarMountable.d.ts.map +1 -1
  8. package/dist/AdaptiveChatTrail.anchor-scroll.test.d.ts +2 -0
  9. package/dist/AdaptiveChatTrail.anchor-scroll.test.d.ts.map +1 -0
  10. package/dist/AdaptiveChatTrail.d.ts +397 -5
  11. package/dist/AdaptiveChatTrail.d.ts.map +1 -1
  12. package/dist/AdaptiveChatTrail.js +6 -4
  13. package/dist/AdaptiveChatTrail.test.d.ts +2 -0
  14. package/dist/AdaptiveChatTrail.test.d.ts.map +1 -0
  15. package/dist/AdaptiveChipsStrip.d.ts +17 -11
  16. package/dist/AdaptiveChipsStrip.d.ts.map +1 -1
  17. package/dist/AdaptiveChipsStrip.js +2 -2
  18. package/dist/ChatAssistantLit.d.ts +5 -3
  19. package/dist/ChatAssistantLit.d.ts.map +1 -1
  20. package/dist/ChatAssistantLit.js +4 -3
  21. package/dist/ChatSession.d.ts +66 -5
  22. package/dist/ChatSession.d.ts.map +1 -1
  23. package/dist/ChatTransport.d.ts +107 -0
  24. package/dist/ChatTransport.d.ts.map +1 -1
  25. package/dist/InlineRegistryWidgetMount.test.d.ts +2 -0
  26. package/dist/InlineRegistryWidgetMount.test.d.ts.map +1 -0
  27. package/dist/InlineWidgetLiveMount.test.d.ts +2 -0
  28. package/dist/InlineWidgetLiveMount.test.d.ts.map +1 -0
  29. package/dist/NavLinkMountable.d.ts.map +1 -1
  30. package/dist/TextAnswerMountable.test.d.ts +2 -0
  31. package/dist/TextAnswerMountable.test.d.ts.map +1 -0
  32. package/dist/Turnstile.d.ts.map +1 -1
  33. package/dist/{chunk-KUO67E2W.js → chunk-A3TIGA4G.js} +718 -237
  34. package/dist/chunk-A3TIGA4G.js.map +7 -0
  35. package/dist/chunk-A7RBZLIX.js +1678 -0
  36. package/dist/chunk-A7RBZLIX.js.map +7 -0
  37. package/dist/{chunk-435KJD27.js → chunk-EACGDSJI.js} +46 -1
  38. package/dist/chunk-EACGDSJI.js.map +7 -0
  39. package/dist/chunk-EWPPVPJ4.js +14 -0
  40. package/dist/chunk-EWPPVPJ4.js.map +7 -0
  41. package/dist/chunk-FXHYE6FY.js +632 -0
  42. package/dist/chunk-FXHYE6FY.js.map +7 -0
  43. package/dist/{chunk-AUER7ZCK.js → chunk-OIGVZGSX.js} +11 -4
  44. package/dist/chunk-OIGVZGSX.js.map +7 -0
  45. package/dist/{chunk-UC4XU6GH.js → chunk-VZIUXXAM.js} +761 -52
  46. package/dist/chunk-VZIUXXAM.js.map +7 -0
  47. package/dist/elements/ActionHandler.d.ts +1 -1
  48. package/dist/elements/ActionHandler.d.ts.map +1 -1
  49. package/dist/elements/ElementInstanceStore.d.ts +62 -0
  50. package/dist/elements/ElementInstanceStore.d.ts.map +1 -1
  51. package/dist/elements/TileHandler.d.ts.map +1 -1
  52. package/dist/elements/TileHandler.test.d.ts +2 -0
  53. package/dist/elements/TileHandler.test.d.ts.map +1 -0
  54. package/dist/elements/__tests__/ElementInstanceStore.recall.test.d.ts +2 -0
  55. package/dist/elements/__tests__/ElementInstanceStore.recall.test.d.ts.map +1 -0
  56. package/dist/elements/fetcher.d.ts +8 -5
  57. package/dist/elements/fetcher.d.ts.map +1 -1
  58. package/dist/elements/index.d.ts +1 -0
  59. package/dist/elements/index.d.ts.map +1 -1
  60. package/dist/elements/store-singleton.d.ts +4 -0
  61. package/dist/elements/store-singleton.d.ts.map +1 -0
  62. package/dist/elements/types.d.ts +4 -0
  63. package/dist/elements/types.d.ts.map +1 -1
  64. package/dist/observer/__tests__/bus-translate.test.d.ts +16 -0
  65. package/dist/observer/__tests__/bus-translate.test.d.ts.map +1 -0
  66. package/dist/observer/__tests__/lifecycle.test.d.ts +2 -0
  67. package/dist/observer/__tests__/lifecycle.test.d.ts.map +1 -0
  68. package/dist/observer/__tests__/observer-enrich.test.d.ts +10 -0
  69. package/dist/observer/__tests__/observer-enrich.test.d.ts.map +1 -0
  70. package/dist/observer/allowlist.d.ts +5 -7
  71. package/dist/observer/allowlist.d.ts.map +1 -1
  72. package/dist/observer/bus-translate.d.ts +33 -0
  73. package/dist/observer/bus-translate.d.ts.map +1 -0
  74. package/dist/observer/index.d.ts +10 -1
  75. package/dist/observer/index.d.ts.map +1 -1
  76. package/dist/observer/queue.d.ts +6 -0
  77. package/dist/observer/queue.d.ts.map +1 -1
  78. package/dist/observer/transport.d.ts +1 -0
  79. package/dist/observer/transport.d.ts.map +1 -1
  80. package/dist/personas.d.ts +30 -0
  81. package/dist/personas.d.ts.map +1 -0
  82. package/dist/runtime.d.ts +2 -0
  83. package/dist/runtime.d.ts.map +1 -1
  84. package/dist/runtime.js +860 -137
  85. package/dist/runtime.js.map +4 -4
  86. package/dist/schema.d.ts +363 -67
  87. package/dist/schema.d.ts.map +1 -1
  88. package/dist/schema.js +176 -3
  89. package/dist/schema.js.map +2 -2
  90. package/dist/test/setup.d.ts +1 -0
  91. package/dist/test/setup.d.ts.map +1 -0
  92. package/dist/types.d.ts +25 -0
  93. package/dist/types.d.ts.map +1 -1
  94. package/package.json +5 -1
  95. package/dist/chunk-435KJD27.js.map +0 -7
  96. package/dist/chunk-AUER7ZCK.js.map +0 -7
  97. package/dist/chunk-DOMEUJR7.js +0 -382
  98. package/dist/chunk-DOMEUJR7.js.map +0 -7
  99. package/dist/chunk-KUO67E2W.js.map +0 -7
  100. package/dist/chunk-QELVKBQV.js +0 -214
  101. package/dist/chunk-QELVKBQV.js.map +0 -7
  102. package/dist/chunk-UC4XU6GH.js.map +0 -7
@@ -4,7 +4,7 @@ import {
4
4
  TILE_REPLAY_REQUEST_EVENT,
5
5
  TILE_UNMOUNTED_EVENT,
6
6
  stripMountPlumbing
7
- } from "./chunk-435KJD27.js";
7
+ } from "./chunk-EACGDSJI.js";
8
8
  import {
9
9
  __export
10
10
  } from "./chunk-UVKRO5ER.js";
@@ -209,6 +209,20 @@ var ToolSchema = z.object({
209
209
  parameters: z.any(),
210
210
  metadata: z.record(z.any()).optional()
211
211
  });
212
+ var InterruptSchema = z.object({
213
+ id: z.string(),
214
+ reason: z.string(),
215
+ message: z.string().optional(),
216
+ toolCallId: z.string().optional(),
217
+ responseSchema: z.record(z.any()).optional(),
218
+ expiresAt: z.string().optional(),
219
+ metadata: z.record(z.any()).optional()
220
+ });
221
+ var ResumeEntrySchema = z.object({
222
+ interruptId: z.string(),
223
+ status: z.enum(["resolved", "cancelled"]),
224
+ payload: z.any().optional()
225
+ });
212
226
  var RunAgentInputSchema = z.object({
213
227
  threadId: z.string(),
214
228
  runId: z.string(),
@@ -217,7 +231,8 @@ var RunAgentInputSchema = z.object({
217
231
  messages: z.array(MessageSchema),
218
232
  tools: z.array(ToolSchema),
219
233
  context: z.array(ContextSchema),
220
- forwardedProps: z.any()
234
+ forwardedProps: z.any(),
235
+ resume: z.array(ResumeEntrySchema).optional()
221
236
  });
222
237
  var StateSchema = z.any();
223
238
  var AGUIError = class extends Error {
@@ -302,7 +317,9 @@ var HumanInTheLoopCapabilitiesSchema = z.object({
302
317
  supported: z.boolean().optional(),
303
318
  approvals: z.boolean().optional(),
304
319
  interventions: z.boolean().optional(),
305
- feedback: z.boolean().optional()
320
+ feedback: z.boolean().optional(),
321
+ interrupts: z.boolean().optional(),
322
+ approveWithEdits: z.boolean().optional()
306
323
  });
307
324
  var AgentCapabilitiesSchema = z.object({
308
325
  identity: IdentityCapabilitiesSchema.optional(),
@@ -468,26 +485,12 @@ var RunStartedEventSchema = BaseEventSchema.extend({
468
485
  parentRunId: z.string().optional(),
469
486
  input: RunAgentInputSchema.optional()
470
487
  });
471
- var InterruptSchema = z.object({
472
- id: z.string(),
473
- reason: z.string(),
474
- message: z.string().optional(),
475
- toolCallId: z.string().optional(),
476
- responseSchema: z.record(z.any()).optional(),
477
- expiresAt: z.string().optional(),
478
- metadata: z.record(z.any()).optional()
479
- });
480
- var RunFinishedSuccessOutcomeSchema = z.object({
481
- type: z.literal("success")
482
- }).strict();
488
+ var RunFinishedSuccessOutcomeSchema = z.object({ type: z.literal("success") }).strict();
483
489
  var RunFinishedInterruptOutcomeSchema = z.object({
484
490
  type: z.literal("interrupt"),
485
491
  interrupts: z.array(InterruptSchema).min(1)
486
492
  }).strict();
487
- var RunFinishedOutcomeSchema = z.discriminatedUnion("type", [
488
- RunFinishedSuccessOutcomeSchema,
489
- RunFinishedInterruptOutcomeSchema
490
- ]);
493
+ var RunFinishedOutcomeSchema = z.discriminatedUnion("type", [RunFinishedSuccessOutcomeSchema, RunFinishedInterruptOutcomeSchema]);
491
494
  var RunFinishedEventSchema = BaseEventSchema.extend({
492
495
  type: z.literal(EventType.RUN_FINISHED),
493
496
  threadId: z.string(),
@@ -4897,6 +4900,84 @@ var Message = {
4897
4900
  return message;
4898
4901
  }
4899
4902
  };
4903
+ function createBaseInterrupt() {
4904
+ return {
4905
+ id: "",
4906
+ reason: "",
4907
+ message: void 0,
4908
+ toolCallId: void 0,
4909
+ responseSchema: void 0,
4910
+ expiresAt: void 0,
4911
+ metadata: void 0
4912
+ };
4913
+ }
4914
+ var Interrupt = {
4915
+ encode(message, writer = new BinaryWriter()) {
4916
+ if (message.id !== "") writer.uint32(10).string(message.id);
4917
+ if (message.reason !== "") writer.uint32(18).string(message.reason);
4918
+ if (message.message !== void 0) writer.uint32(26).string(message.message);
4919
+ if (message.toolCallId !== void 0) writer.uint32(34).string(message.toolCallId);
4920
+ if (message.responseSchema !== void 0) Value.encode(Value.wrap(message.responseSchema), writer.uint32(42).fork()).join();
4921
+ if (message.expiresAt !== void 0) writer.uint32(50).string(message.expiresAt);
4922
+ if (message.metadata !== void 0) Value.encode(Value.wrap(message.metadata), writer.uint32(58).fork()).join();
4923
+ return writer;
4924
+ },
4925
+ decode(input, length) {
4926
+ const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
4927
+ const end = length === void 0 ? reader.len : reader.pos + length;
4928
+ const message = createBaseInterrupt();
4929
+ while (reader.pos < end) {
4930
+ const tag = reader.uint32();
4931
+ switch (tag >>> 3) {
4932
+ case 1:
4933
+ if (tag !== 10) break;
4934
+ message.id = reader.string();
4935
+ continue;
4936
+ case 2:
4937
+ if (tag !== 18) break;
4938
+ message.reason = reader.string();
4939
+ continue;
4940
+ case 3:
4941
+ if (tag !== 26) break;
4942
+ message.message = reader.string();
4943
+ continue;
4944
+ case 4:
4945
+ if (tag !== 34) break;
4946
+ message.toolCallId = reader.string();
4947
+ continue;
4948
+ case 5:
4949
+ if (tag !== 42) break;
4950
+ message.responseSchema = Value.unwrap(Value.decode(reader, reader.uint32()));
4951
+ continue;
4952
+ case 6:
4953
+ if (tag !== 50) break;
4954
+ message.expiresAt = reader.string();
4955
+ continue;
4956
+ case 7:
4957
+ if (tag !== 58) break;
4958
+ message.metadata = Value.unwrap(Value.decode(reader, reader.uint32()));
4959
+ continue;
4960
+ }
4961
+ if ((tag & 7) === 4 || tag === 0) break;
4962
+ reader.skip(tag & 7);
4963
+ }
4964
+ return message;
4965
+ },
4966
+ create(base) {
4967
+ return Interrupt.fromPartial(base ?? {});
4968
+ },
4969
+ fromPartial(object) {
4970
+ const message = createBaseInterrupt();
4971
+ message.id = object.id ?? "";
4972
+ message.reason = object.reason ?? "";
4973
+ message.message = object.message ?? void 0;
4974
+ message.toolCallId = object.toolCallId ?? void 0;
4975
+ message.responseSchema = object.responseSchema ?? void 0;
4976
+ message.expiresAt = object.expiresAt ?? void 0;
4977
+ message.metadata = object.metadata ?? void 0;
4978
+ return message;
4979
+ }
4980
+ };
4900
4981
  var EventType$1 = /* @__PURE__ */ (function(EventType2) {
4901
4982
  EventType2[EventType2["TEXT_MESSAGE_START"] = 0] = "TEXT_MESSAGE_START";
4902
4983
  EventType2[EventType2["TEXT_MESSAGE_CONTENT"] = 1] = "TEXT_MESSAGE_CONTENT";
@@ -5551,7 +5632,9 @@ function createBaseRunFinishedEvent() {
5551
5632
  baseEvent: void 0,
5552
5633
  threadId: "",
5553
5634
  runId: "",
5554
- result: void 0
5635
+ result: void 0,
5636
+ outcome: "",
5637
+ interrupts: []
5555
5638
  };
5556
5639
  }
5557
5640
  var RunFinishedEvent = {
@@ -5560,6 +5643,8 @@ var RunFinishedEvent = {
5560
5643
  if (message.threadId !== "") writer.uint32(18).string(message.threadId);
5561
5644
  if (message.runId !== "") writer.uint32(26).string(message.runId);
5562
5645
  if (message.result !== void 0) Value.encode(Value.wrap(message.result), writer.uint32(34).fork()).join();
5646
+ if (message.outcome !== "") writer.uint32(42).string(message.outcome);
5647
+ for (const v of message.interrupts) Interrupt.encode(v, writer.uint32(50).fork()).join();
5563
5648
  return writer;
5564
5649
  },
5565
5650
  decode(input, length) {
@@ -5585,6 +5670,14 @@ var RunFinishedEvent = {
5585
5670
  if (tag !== 34) break;
5586
5671
  message.result = Value.unwrap(Value.decode(reader, reader.uint32()));
5587
5672
  continue;
5673
+ case 5:
5674
+ if (tag !== 42) break;
5675
+ message.outcome = reader.string();
5676
+ continue;
5677
+ case 6:
5678
+ if (tag !== 50) break;
5679
+ message.interrupts.push(Interrupt.decode(reader, reader.uint32()));
5680
+ continue;
5588
5681
  }
5589
5682
  if ((tag & 7) === 4 || tag === 0) break;
5590
5683
  reader.skip(tag & 7);
@@ -5600,6 +5693,8 @@ var RunFinishedEvent = {
5600
5693
  message.threadId = object.threadId ?? "";
5601
5694
  message.runId = object.runId ?? "";
5602
5695
  message.result = object.result ?? void 0;
5696
+ message.outcome = object.outcome ?? "";
5697
+ message.interrupts = object.interrupts?.map((e) => Interrupt.fromPartial(e)) || [];
5603
5698
  return message;
5604
5699
  }
5605
5700
  };
@@ -6075,6 +6170,7 @@ function decode(data) {
6075
6170
  decoded.type = EventType$1[decoded.baseEvent.type];
6076
6171
  decoded.timestamp = decoded.baseEvent.timestamp;
6077
6172
  decoded.rawEvent = decoded.baseEvent.rawEvent;
6173
+ delete decoded.baseEvent;
6078
6174
  if (decoded.type === EventType.MESSAGES_SNAPSHOT) for (const message of decoded.messages) {
6079
6175
  const untypedMessage = message;
6080
6176
  if (untypedMessage.role === "user" && Array.isArray(untypedMessage.contentParts)) {
@@ -6084,6 +6180,18 @@ function decode(data) {
6084
6180
  if (Array.isArray(untypedMessage.contentParts) && untypedMessage.contentParts.length === 0) untypedMessage.contentParts = void 0;
6085
6181
  if (untypedMessage.toolCalls?.length === 0) untypedMessage.toolCalls = void 0;
6086
6182
  }
6183
+ if (decoded.type === EventType.RUN_FINISHED) {
6184
+ const runFinished = decoded;
6185
+ const wireOutcome = typeof runFinished.outcome === "string" && runFinished.outcome !== "" ? runFinished.outcome : void 0;
6186
+ const wireInterrupts = Array.isArray(runFinished.interrupts) ? runFinished.interrupts : [];
6187
+ delete runFinished.interrupts;
6188
+ if (wireOutcome === "interrupt") runFinished.outcome = {
6189
+ type: "interrupt",
6190
+ interrupts: wireInterrupts
6191
+ };
6192
+ else if (wireOutcome === "success") runFinished.outcome = { type: "success" };
6193
+ else delete runFinished.outcome;
6194
+ }
6087
6195
  if (decoded.type === EventType.STATE_DELTA) for (const operation of decoded.delta) {
6088
6196
  operation.op = JsonPatchOperationType[operation.op].toLowerCase();
6089
6197
  Object.keys(operation).forEach((key) => {
@@ -6098,7 +6206,7 @@ function decode(data) {
6098
6206
  var AGUI_MEDIA_TYPE = "application/vnd.ag-ui.event+proto";
6099
6207
 
6100
6208
  // ../../../node_modules/@ag-ui/client/dist/index.mjs
6101
- import { z as E } from "zod";
6209
+ import { z as T } from "zod";
6102
6210
 
6103
6211
  // ../../../node_modules/compare-versions/lib/esm/utils.js
6104
6212
  var semver = /^[v^~<>=]*?(\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+))?(?:-([\da-z\-]+(?:\.[\da-z\-]+)*))?(?:\+[\da-z\-]+(?:\.[\da-z\-]+)*)?)?)?$/i;
@@ -6156,7 +6264,7 @@ var compareVersions = (v1, v2) => {
6156
6264
  };
6157
6265
 
6158
6266
  // ../../../node_modules/@ag-ui/client/dist/index.mjs
6159
- var O = (e) => {
6267
+ var D = (e) => {
6160
6268
  if (typeof structuredClone == `function`) return structuredClone(e);
6161
6269
  try {
6162
6270
  return JSON.parse(JSON.stringify(e));
@@ -6164,20 +6272,20 @@ var O = (e) => {
6164
6272
  return Array.isArray(e) ? [...e] : { ...e };
6165
6273
  }
6166
6274
  };
6167
- function k() {
6275
+ function O() {
6168
6276
  return v4_default();
6169
6277
  }
6170
- function A(e) {
6171
- if (Object.freeze(e), typeof e == `object` && e) for (let t of Object.values(e)) typeof t == `object` && t && !Object.isFrozen(t) && A(t);
6278
+ function k(e) {
6279
+ if (Object.freeze(e), typeof e == `object` && e) for (let t of Object.values(e)) typeof t == `object` && t && !Object.isFrozen(t) && k(t);
6172
6280
  return e;
6173
6281
  }
6174
- async function j(e, t, n, r) {
6175
- let i = typeof process < `u` && process.env !== void 0, a = i && false, o = i && false, s = O(t), c = O(n), l = s, u = c, d;
6282
+ async function A(e, t, n, r) {
6283
+ let i = typeof process < `u` && process.env !== void 0, a = i && false, o = i && false, s = D(t), c = D(n), l = s, u = c, d;
6176
6284
  for (let t2 of e) try {
6177
- o && (A(l), A(u));
6285
+ o && (k(l), k(u));
6178
6286
  let e2 = await r(t2, l, u);
6179
6287
  if (e2 === void 0) continue;
6180
- if (e2.messages !== void 0 && e2.messages !== l && (l = O(e2.messages)), e2.state !== void 0 && e2.state !== u && (u = O(e2.state)), d = e2.stopPropagation, d === true) break;
6288
+ if (e2.messages !== void 0 && e2.messages !== l && (l = D(e2.messages)), e2.state !== void 0 && e2.state !== u && (u = D(e2.state)), d = e2.stopPropagation, d === true) break;
6181
6289
  } catch (e2) {
6182
6290
  if (o && e2 instanceof TypeError) {
6183
6291
  if (a) throw e2;
@@ -6185,19 +6293,19 @@ async function j(e, t, n, r) {
6185
6293
  } else a || console.error(`Subscriber error:`, e2);
6186
6294
  continue;
6187
6295
  }
6188
- return { ...l === s ? {} : { messages: o && Object.isFrozen(l) ? O(l) : l }, ...u === c ? {} : { state: o && Object.isFrozen(u) ? O(u) : u }, ...d === void 0 ? {} : { stopPropagation: d } };
6296
+ return { ...l === s ? {} : { messages: o && Object.isFrozen(l) ? D(l) : l }, ...u === c ? {} : { state: o && Object.isFrozen(u) ? D(u) : u }, ...d === void 0 ? {} : { stopPropagation: d } };
6189
6297
  }
6190
- function M(e) {
6298
+ function j(e) {
6191
6299
  if (!e) return { enabled: false, events: false, lifecycle: false, verbose: false };
6192
6300
  if (e === true) return { enabled: true, events: true, lifecycle: true, verbose: true };
6193
6301
  let t = e.events ?? true, n = e.lifecycle ?? true, r = e.verbose ?? false;
6194
6302
  return { enabled: t || n, events: t, lifecycle: n, verbose: r };
6195
6303
  }
6196
- function N(e) {
6197
- if (e instanceof P) return e;
6198
- if (e === true) return new P(M(true));
6304
+ function M(e) {
6305
+ if (e instanceof N) return e;
6306
+ if (e === true) return new N(j(true));
6199
6307
  }
6200
- var P = class {
6308
+ var N = class {
6201
6309
  constructor(e) {
6202
6310
  this.config = e;
6203
6311
  }
@@ -6217,10 +6325,10 @@ var P = class {
6217
6325
  return this.config.enabled;
6218
6326
  }
6219
6327
  };
6220
- function F(e) {
6221
- return e.enabled ? new P(e) : void 0;
6328
+ function P(e) {
6329
+ return e.enabled ? new N(e) : void 0;
6222
6330
  }
6223
- function ae(e, t, n) {
6331
+ function oe(e, t, n) {
6224
6332
  if (t) {
6225
6333
  let r2 = e.find((e2) => e2.id === t);
6226
6334
  if (r2?.role === `assistant`) return r2;
@@ -6231,19 +6339,19 @@ function ae(e, t, n) {
6231
6339
  let r = { id: n, role: `assistant`, toolCalls: [] };
6232
6340
  return e.push(r), r;
6233
6341
  }
6234
- var I = (e, t, n, r, s) => {
6235
- let c = N(s), l = O(n.messages), u = O(e.state), d = {}, f = (e2) => {
6342
+ var F = (e, t, n, r, s) => {
6343
+ let c = M(s), l = D(n.messages), u = D(e.state), d = {}, f = (e2) => {
6236
6344
  e2.messages !== void 0 && (l = e2.messages, d.messages = e2.messages), e2.state !== void 0 && (u = e2.state, d.state = e2.state);
6237
6345
  }, p = () => {
6238
- let e2 = O(d);
6346
+ let e2 = D(d);
6239
6347
  return d = {}, e2.messages !== void 0 || e2.state !== void 0 ? of(e2) : EMPTY;
6240
6348
  };
6241
6349
  return t.pipe(concatMap(async (t2) => {
6242
- let o = await j(r, l, u, (r2, i, a) => r2.onEvent?.({ event: t2, agent: n, input: e, messages: i, state: a }));
6350
+ let o = await A(r, l, u, (r2, i, a) => r2.onEvent?.({ event: t2, agent: n, input: e, messages: i, state: a }));
6243
6351
  if (f(o), o.stopPropagation === true ? c?.event(`APPLY`, `Event dropped:`, t2, { type: t2.type, reason: `stopPropagation by subscriber` }) : c?.event(`APPLY`, `Event applied:`, t2, { type: t2.type, subscribers: r.length }), o.stopPropagation === true) return p();
6244
6352
  switch (t2.type) {
6245
6353
  case EventType.TEXT_MESSAGE_START: {
6246
- let i = await j(r, l, u, (r2, i2, a) => r2.onTextMessageStartEvent?.({ event: t2, messages: i2, state: a, agent: n, input: e }));
6354
+ let i = await A(r, l, u, (r2, i2, a) => r2.onTextMessageStartEvent?.({ event: t2, messages: i2, state: a, agent: n, input: e }));
6247
6355
  if (f(i), i.stopPropagation !== true) {
6248
6356
  let { messageId: e2, role: n2 = `assistant`, name: r2 } = t2;
6249
6357
  if (!l.find((t3) => t3.id === e2)) {
@@ -6256,19 +6364,19 @@ var I = (e, t, n, r, s) => {
6256
6364
  case EventType.TEXT_MESSAGE_CONTENT: {
6257
6365
  let { messageId: i, delta: a } = t2, o2 = l.find((e2) => e2.id === i);
6258
6366
  if (!o2) return console.warn(`TEXT_MESSAGE_CONTENT: No message found with ID '${i}'`), p();
6259
- let s2 = await j(r, l, u, (r2, i2, a2) => r2.onTextMessageContentEvent?.({ event: t2, messages: i2, state: a2, agent: n, input: e, textMessageBuffer: typeof o2.content == `string` ? o2.content : `` }));
6367
+ let s2 = await A(r, l, u, (r2, i2, a2) => r2.onTextMessageContentEvent?.({ event: t2, messages: i2, state: a2, agent: n, input: e, textMessageBuffer: typeof o2.content == `string` ? o2.content : `` }));
6260
6368
  return f(s2), s2.stopPropagation !== true && (o2.content = `${typeof o2.content == `string` ? o2.content : ``}${a}`, f({ messages: l })), p();
6261
6369
  }
6262
6370
  case EventType.TEXT_MESSAGE_END: {
6263
6371
  let { messageId: i } = t2, a = l.find((e2) => e2.id === i);
6264
- return a ? (f(await j(r, l, u, (r2, i2, o2) => r2.onTextMessageEndEvent?.({ event: t2, messages: i2, state: o2, agent: n, input: e, textMessageBuffer: typeof a.content == `string` ? a.content : `` }))), await Promise.all(r.map((t3) => {
6372
+ return a ? (f(await A(r, l, u, (r2, i2, o2) => r2.onTextMessageEndEvent?.({ event: t2, messages: i2, state: o2, agent: n, input: e, textMessageBuffer: typeof a.content == `string` ? a.content : `` }))), await Promise.all(r.map((t3) => {
6265
6373
  t3.onNewMessage?.({ message: a, messages: l, state: u, agent: n, input: e });
6266
6374
  })), p()) : (console.warn(`TEXT_MESSAGE_END: No message found with ID '${i}'`), p());
6267
6375
  }
6268
6376
  case EventType.TOOL_CALL_START: {
6269
- let i = await j(r, l, u, (r2, i2, a) => r2.onToolCallStartEvent?.({ event: t2, messages: i2, state: a, agent: n, input: e }));
6377
+ let i = await A(r, l, u, (r2, i2, a) => r2.onToolCallStartEvent?.({ event: t2, messages: i2, state: a, agent: n, input: e }));
6270
6378
  if (f(i), i.stopPropagation !== true) {
6271
- let { toolCallId: e2, toolCallName: n2, parentMessageId: r2 } = t2, i2 = ae(l, r2, e2);
6379
+ let { toolCallId: e2, toolCallName: n2, parentMessageId: r2 } = t2, i2 = oe(l, r2, e2);
6272
6380
  i2.toolCalls ?? (i2.toolCalls = []), i2.toolCalls.push({ id: e2, type: `function`, function: { name: n2, arguments: `` } }), f({ messages: l });
6273
6381
  }
6274
6382
  return p();
@@ -6278,7 +6386,7 @@ var I = (e, t, n, r, s) => {
6278
6386
  if (!o2) return console.warn(`TOOL_CALL_ARGS: No message found containing tool call with ID '${i}'`), p();
6279
6387
  let s2 = o2.toolCalls?.find((e2) => e2.id === i);
6280
6388
  if (!s2) return console.warn(`TOOL_CALL_ARGS: No tool call found with ID '${i}'`), p();
6281
- let c2 = await j(r, l, u, (r2, i2, a2) => {
6389
+ let c2 = await A(r, l, u, (r2, i2, a2) => {
6282
6390
  let o3 = s2.function.arguments, c3 = s2.function.name, l2 = {};
6283
6391
  try {
6284
6392
  l2 = untruncateJson(o3);
@@ -6292,7 +6400,7 @@ var I = (e, t, n, r, s) => {
6292
6400
  let { toolCallId: i } = t2, a = l.find((e2) => e2.toolCalls?.some((e3) => e3.id === i));
6293
6401
  if (!a) return console.warn(`TOOL_CALL_END: No message found containing tool call with ID '${i}'`), p();
6294
6402
  let o2 = a.toolCalls?.find((e2) => e2.id === i);
6295
- return o2 ? (f(await j(r, l, u, (r2, i2, a2) => {
6403
+ return o2 ? (f(await A(r, l, u, (r2, i2, a2) => {
6296
6404
  let s2 = o2.function.arguments, c2 = o2.function.name, l2 = {};
6297
6405
  try {
6298
6406
  l2 = JSON.parse(s2);
@@ -6304,17 +6412,23 @@ var I = (e, t, n, r, s) => {
6304
6412
  })), p()) : (console.warn(`TOOL_CALL_END: No tool call found with ID '${i}'`), p());
6305
6413
  }
6306
6414
  case EventType.TOOL_CALL_RESULT: {
6307
- let i = await j(r, l, u, (r2, i2, a) => r2.onToolCallResultEvent?.({ event: t2, messages: i2, state: a, agent: n, input: e }));
6415
+ let i = await A(r, l, u, (r2, i2, a) => r2.onToolCallResultEvent?.({ event: t2, messages: i2, state: a, agent: n, input: e }));
6308
6416
  if (f(i), i.stopPropagation !== true) {
6309
- let { messageId: i2, toolCallId: a, content: o2, role: s2 } = t2, c2 = { id: i2, toolCallId: a, role: s2 || `tool`, content: o2 };
6310
- l.push(c2), await Promise.all(r.map((t3) => {
6417
+ let { messageId: i2, toolCallId: a, content: o2, role: s2 } = t2, c2 = { id: i2, toolCallId: a, role: s2 || `tool`, content: o2 }, d2 = l.findIndex((e2) => e2.role === `assistant` && e2.toolCalls?.some((e3) => e3.id === a));
6418
+ if (d2 === -1) l.push(c2);
6419
+ else {
6420
+ let e2 = d2 + 1;
6421
+ for (; e2 < l.length && l[e2].role === `tool`; ) e2++;
6422
+ l.splice(e2, 0, c2);
6423
+ }
6424
+ await Promise.all(r.map((t3) => {
6311
6425
  t3.onNewMessage?.({ message: c2, messages: l, state: u, agent: n, input: e });
6312
6426
  })), f({ messages: l });
6313
6427
  }
6314
6428
  return p();
6315
6429
  }
6316
6430
  case EventType.STATE_SNAPSHOT: {
6317
- let i = await j(r, l, u, (r2, i2, a) => r2.onStateSnapshotEvent?.({ event: t2, messages: i2, state: a, agent: n, input: e }));
6431
+ let i = await A(r, l, u, (r2, i2, a) => r2.onStateSnapshotEvent?.({ event: t2, messages: i2, state: a, agent: n, input: e }));
6318
6432
  if (f(i), i.stopPropagation !== true) {
6319
6433
  let { snapshot: e2 } = t2;
6320
6434
  u = e2, f({ state: u });
@@ -6322,7 +6436,7 @@ var I = (e, t, n, r, s) => {
6322
6436
  return p();
6323
6437
  }
6324
6438
  case EventType.STATE_DELTA: {
6325
- let i = await j(r, l, u, (r2, i2, a) => r2.onStateDeltaEvent?.({ event: t2, messages: i2, state: a, agent: n, input: e }));
6439
+ let i = await A(r, l, u, (r2, i2, a) => r2.onStateDeltaEvent?.({ event: t2, messages: i2, state: a, agent: n, input: e }));
6326
6440
  if (f(i), i.stopPropagation !== true) {
6327
6441
  let { delta: e2 } = t2;
6328
6442
  try {
@@ -6338,7 +6452,7 @@ Error: ${n2}`);
6338
6452
  return p();
6339
6453
  }
6340
6454
  case EventType.MESSAGES_SNAPSHOT: {
6341
- let i = await j(r, l, u, (r2, i2, a) => r2.onMessagesSnapshotEvent?.({ event: t2, messages: i2, state: a, agent: n, input: e }));
6455
+ let i = await A(r, l, u, (r2, i2, a) => r2.onMessagesSnapshotEvent?.({ event: t2, messages: i2, state: a, agent: n, input: e }));
6342
6456
  if (f(i), i.stopPropagation !== true) {
6343
6457
  let { messages: e2 } = t2, n2 = new Map(e2.map((e3) => [e3.id, e3])), r2 = (e3) => e3 === `activity` || e3 === `reasoning`;
6344
6458
  l = l.filter((e3) => r2(e3.role) || n2.has(e3.id)).map((e3) => r2(e3.role) ? e3 : n2.get(e3.id));
@@ -6349,10 +6463,10 @@ Error: ${n2}`);
6349
6463
  return p();
6350
6464
  }
6351
6465
  case EventType.ACTIVITY_SNAPSHOT: {
6352
- let i = t2, a = l.findIndex((e2) => e2.id === i.messageId), o2 = a >= 0 ? l[a] : void 0, s2 = o2?.role === `activity` ? o2 : void 0, c2 = i.replace ?? true, d2 = await j(r, l, u, (t3, r2, a2) => t3.onActivitySnapshotEvent?.({ event: i, messages: r2, state: a2, agent: n, input: e, activityMessage: s2, existingMessage: o2 }));
6466
+ let i = t2, a = l.findIndex((e2) => e2.id === i.messageId), o2 = a >= 0 ? l[a] : void 0, s2 = o2?.role === `activity` ? o2 : void 0, c2 = i.replace ?? true, d2 = await A(r, l, u, (t3, r2, a2) => t3.onActivitySnapshotEvent?.({ event: i, messages: r2, state: a2, agent: n, input: e, activityMessage: s2, existingMessage: o2 }));
6353
6467
  if (f(d2), d2.stopPropagation !== true) {
6354
- let t3 = { id: i.messageId, role: `activity`, activityType: i.activityType, content: O(i.content) }, o3;
6355
- a === -1 ? (l.push(t3), o3 = t3) : s2 ? c2 && (l[a] = { ...s2, activityType: i.activityType, content: O(i.content) }) : c2 && (l[a] = t3, o3 = t3), f({ messages: l }), o3 && await Promise.all(r.map((t4) => t4.onNewMessage?.({ message: o3, messages: l, state: u, agent: n, input: e })));
6468
+ let t3 = { id: i.messageId, role: `activity`, activityType: i.activityType, content: D(i.content) }, o3;
6469
+ a === -1 ? (l.push(t3), o3 = t3) : s2 ? c2 && (l[a] = { ...s2, activityType: i.activityType, content: D(i.content) }) : c2 && (l[a] = t3, o3 = t3), f({ messages: l }), o3 && await Promise.all(r.map((t4) => t4.onNewMessage?.({ message: o3, messages: l, state: u, agent: n, input: e })));
6356
6470
  }
6357
6471
  return p();
6358
6472
  }
@@ -6361,10 +6475,10 @@ Error: ${n2}`);
6361
6475
  if (o2 === -1) return p();
6362
6476
  let s2 = l[o2];
6363
6477
  if (s2.role !== `activity`) return console.warn(`ACTIVITY_DELTA: Message '${i.messageId}' is not an activity message`), p();
6364
- let c2 = s2, d2 = await j(r, l, u, (t3, r2, a) => t3.onActivityDeltaEvent?.({ event: i, messages: r2, state: a, agent: n, input: e, activityMessage: c2 }));
6478
+ let c2 = s2, d2 = await A(r, l, u, (t3, r2, a) => t3.onActivityDeltaEvent?.({ event: i, messages: r2, state: a, agent: n, input: e, activityMessage: c2 }));
6365
6479
  if (f(d2), d2.stopPropagation !== true) try {
6366
- let e2 = O(c2.content ?? {}), t3 = fast_json_patch_default.applyPatch(e2, i.patch ?? [], true, false).newDocument;
6367
- l[o2] = { ...c2, content: O(t3), activityType: i.activityType }, f({ messages: l });
6480
+ let e2 = D(c2.content ?? {}), t3 = fast_json_patch_default.applyPatch(e2, i.patch ?? [], true, false).newDocument;
6481
+ l[o2] = { ...c2, content: D(t3), activityType: i.activityType }, f({ messages: l });
6368
6482
  } catch (e2) {
6369
6483
  let t3 = e2 instanceof Error ? e2.message : String(e2);
6370
6484
  console.warn(`Failed to apply activity patch for '${i.messageId}': ${t3}`);
@@ -6372,11 +6486,11 @@ Error: ${n2}`);
6372
6486
  return p();
6373
6487
  }
6374
6488
  case EventType.RAW:
6375
- return f(await j(r, l, u, (r2, i, a) => r2.onRawEvent?.({ event: t2, messages: i, state: a, agent: n, input: e }))), p();
6489
+ return f(await A(r, l, u, (r2, i, a) => r2.onRawEvent?.({ event: t2, messages: i, state: a, agent: n, input: e }))), p();
6376
6490
  case EventType.CUSTOM:
6377
- return f(await j(r, l, u, (r2, i, a) => r2.onCustomEvent?.({ event: t2, messages: i, state: a, agent: n, input: e }))), p();
6491
+ return f(await A(r, l, u, (r2, i, a) => r2.onCustomEvent?.({ event: t2, messages: i, state: a, agent: n, input: e }))), p();
6378
6492
  case EventType.RUN_STARTED: {
6379
- let i = await j(r, l, u, (r2, i2, a) => r2.onRunStartedEvent?.({ event: t2, messages: i2, state: a, agent: n, input: e }));
6493
+ let i = await A(r, l, u, (r2, i2, a) => r2.onRunStartedEvent?.({ event: t2, messages: i2, state: a, agent: n, input: e }));
6380
6494
  if (f(i), i.stopPropagation !== true) {
6381
6495
  let e2 = t2;
6382
6496
  if (e2.input?.messages) {
@@ -6386,14 +6500,16 @@ Error: ${n2}`);
6386
6500
  }
6387
6501
  return p();
6388
6502
  }
6389
- case EventType.RUN_FINISHED:
6390
- return f(await j(r, l, u, (r2, i, a) => r2.onRunFinishedEvent?.({ event: t2, messages: i, state: a, agent: n, input: e, result: t2.result }))), p();
6503
+ case EventType.RUN_FINISHED: {
6504
+ let i = t2, a = i.outcome?.type === `interrupt` ? { event: i, outcome: `interrupt`, interrupts: i.outcome.interrupts } : { event: i, outcome: `success`, result: i.result }, o2 = await A(r, l, u, (t3, r2, i2) => t3.onRunFinishedEvent?.({ ...a, messages: r2, state: i2, agent: n, input: e }));
6505
+ return f(o2), o2.stopPropagation !== true && (n.pendingInterrupts = a.outcome === `interrupt` ? [...a.interrupts] : []), p();
6506
+ }
6391
6507
  case EventType.RUN_ERROR:
6392
- return f(await j(r, l, u, (r2, i, a) => r2.onRunErrorEvent?.({ event: t2, messages: i, state: a, agent: n, input: e }))), p();
6508
+ return f(await A(r, l, u, (r2, i, a) => r2.onRunErrorEvent?.({ event: t2, messages: i, state: a, agent: n, input: e }))), p();
6393
6509
  case EventType.STEP_STARTED:
6394
- return f(await j(r, l, u, (r2, i, a) => r2.onStepStartedEvent?.({ event: t2, messages: i, state: a, agent: n, input: e }))), p();
6510
+ return f(await A(r, l, u, (r2, i, a) => r2.onStepStartedEvent?.({ event: t2, messages: i, state: a, agent: n, input: e }))), p();
6395
6511
  case EventType.STEP_FINISHED:
6396
- return f(await j(r, l, u, (r2, i, a) => r2.onStepFinishedEvent?.({ event: t2, messages: i, state: a, agent: n, input: e }))), p();
6512
+ return f(await A(r, l, u, (r2, i, a) => r2.onStepFinishedEvent?.({ event: t2, messages: i, state: a, agent: n, input: e }))), p();
6397
6513
  case EventType.TEXT_MESSAGE_CHUNK:
6398
6514
  throw Error(`TEXT_MESSAGE_CHUNK must be tranformed before being applied`);
6399
6515
  case EventType.TOOL_CALL_CHUNK:
@@ -6409,9 +6525,9 @@ Error: ${n2}`);
6409
6525
  case EventType.THINKING_TEXT_MESSAGE_END:
6410
6526
  return p();
6411
6527
  case EventType.REASONING_START:
6412
- return f(await j(r, l, u, (r2, i, a) => r2.onReasoningStartEvent?.({ event: t2, messages: i, state: a, agent: n, input: e }))), p();
6528
+ return f(await A(r, l, u, (r2, i, a) => r2.onReasoningStartEvent?.({ event: t2, messages: i, state: a, agent: n, input: e }))), p();
6413
6529
  case EventType.REASONING_MESSAGE_START: {
6414
- let i = await j(r, l, u, (r2, i2, a) => r2.onReasoningMessageStartEvent?.({ event: t2, messages: i2, state: a, agent: n, input: e }));
6530
+ let i = await A(r, l, u, (r2, i2, a) => r2.onReasoningMessageStartEvent?.({ event: t2, messages: i2, state: a, agent: n, input: e }));
6415
6531
  if (f(i), i.stopPropagation !== true) {
6416
6532
  let { messageId: e2 } = t2;
6417
6533
  if (!l.find((t3) => t3.id === e2)) {
@@ -6424,21 +6540,21 @@ Error: ${n2}`);
6424
6540
  case EventType.REASONING_MESSAGE_CONTENT: {
6425
6541
  let { messageId: i, delta: a } = t2, o2 = l.find((e2) => e2.id === i);
6426
6542
  if (!o2) return console.warn(`REASONING_MESSAGE_CONTENT: No message found with ID '${i}'`), p();
6427
- let s2 = await j(r, l, u, (r2, i2, a2) => r2.onReasoningMessageContentEvent?.({ event: t2, messages: i2, state: a2, agent: n, input: e, reasoningMessageBuffer: typeof o2.content == `string` ? o2.content : `` }));
6543
+ let s2 = await A(r, l, u, (r2, i2, a2) => r2.onReasoningMessageContentEvent?.({ event: t2, messages: i2, state: a2, agent: n, input: e, reasoningMessageBuffer: typeof o2.content == `string` ? o2.content : `` }));
6428
6544
  return f(s2), s2.stopPropagation !== true && (o2.content = `${typeof o2.content == `string` ? o2.content : ``}${a}`, f({ messages: l })), p();
6429
6545
  }
6430
6546
  case EventType.REASONING_MESSAGE_END: {
6431
6547
  let { messageId: i } = t2, a = l.find((e2) => e2.id === i);
6432
- return a ? (f(await j(r, l, u, (r2, i2, o2) => r2.onReasoningMessageEndEvent?.({ event: t2, messages: i2, state: o2, agent: n, input: e, reasoningMessageBuffer: typeof a.content == `string` ? a.content : `` }))), await Promise.all(r.map((t3) => {
6548
+ return a ? (f(await A(r, l, u, (r2, i2, o2) => r2.onReasoningMessageEndEvent?.({ event: t2, messages: i2, state: o2, agent: n, input: e, reasoningMessageBuffer: typeof a.content == `string` ? a.content : `` }))), await Promise.all(r.map((t3) => {
6433
6549
  t3.onNewMessage?.({ message: a, messages: l, state: u, agent: n, input: e });
6434
6550
  })), p()) : (console.warn(`REASONING_MESSAGE_END: No message found with ID '${i}'`), p());
6435
6551
  }
6436
6552
  case EventType.REASONING_MESSAGE_CHUNK:
6437
6553
  throw Error(`REASONING_MESSAGE_CHUNK must be transformed before being applied`);
6438
6554
  case EventType.REASONING_END:
6439
- return f(await j(r, l, u, (r2, i, a) => r2.onReasoningEndEvent?.({ event: t2, messages: i, state: a, agent: n, input: e }))), p();
6555
+ return f(await A(r, l, u, (r2, i, a) => r2.onReasoningEndEvent?.({ event: t2, messages: i, state: a, agent: n, input: e }))), p();
6440
6556
  case EventType.REASONING_ENCRYPTED_VALUE: {
6441
- let { subtype: i, entityId: a, encryptedValue: o2 } = t2, s2 = await j(r, l, u, (r2, i2, a2) => r2.onReasoningEncryptedValueEvent?.({ event: t2, messages: i2, state: a2, agent: n, input: e }));
6557
+ let { subtype: i, entityId: a, encryptedValue: o2 } = t2, s2 = await A(r, l, u, (r2, i2, a2) => r2.onReasoningEncryptedValueEvent?.({ event: t2, messages: i2, state: a2, agent: n, input: e }));
6442
6558
  if (f(s2), s2.stopPropagation !== true) {
6443
6559
  let e2 = false;
6444
6560
  if (i === `tool-call`) {
@@ -6461,8 +6577,8 @@ Error: ${n2}`);
6461
6577
  return t2.type, p();
6462
6578
  }), mergeAll(), r.length > 0 ? defaultIfEmpty({}) : (e2) => e2);
6463
6579
  };
6464
- var L = (e) => (t) => {
6465
- let r = N(e), a = /* @__PURE__ */ new Map(), o = /* @__PURE__ */ new Map(), s = false, c = false, l = false, u = /* @__PURE__ */ new Map(), d = false, f = false, p = false, m = () => {
6580
+ var I = (e) => (t) => {
6581
+ let r = M(e), a = /* @__PURE__ */ new Map(), o = /* @__PURE__ */ new Map(), s = false, c = false, l = false, u = /* @__PURE__ */ new Map(), d = false, f = false, p = false, m = () => {
6466
6582
  a.clear(), o.clear(), u.clear(), d = false, f = false, s = false, c = false, p = true;
6467
6583
  };
6468
6584
  return t.pipe(mergeMap((e2) => {
@@ -6543,15 +6659,15 @@ var L = (e) => (t) => {
6543
6659
  }
6544
6660
  }));
6545
6661
  };
6546
- var R = (function(e) {
6662
+ var L = (function(e) {
6547
6663
  return e.HEADERS = `headers`, e.DATA = `data`, e;
6548
6664
  })({});
6549
- var z2 = (e, t) => defer(() => from(fetch(e, t))).pipe(switchMap((e2) => {
6665
+ var R = (e) => defer(() => from(e())).pipe(switchMap((e2) => {
6550
6666
  if (!e2.ok) {
6551
- let t3 = e2.headers.get(`content-type`) || ``;
6667
+ let t2 = e2.headers.get(`content-type`) || ``;
6552
6668
  return from(e2.text()).pipe(mergeMap((n2) => {
6553
6669
  let r = n2;
6554
- if (t3.includes(`application/json`)) try {
6670
+ if (t2.includes(`application/json`)) try {
6555
6671
  r = JSON.parse(n2);
6556
6672
  } catch {
6557
6673
  }
@@ -6559,18 +6675,18 @@ var z2 = (e, t) => defer(() => from(fetch(e, t))).pipe(switchMap((e2) => {
6559
6675
  return i.status = e2.status, i.payload = r, throwError(() => i);
6560
6676
  }));
6561
6677
  }
6562
- let t2 = { type: R.HEADERS, status: e2.status, headers: e2.headers }, n = e2.body?.getReader();
6563
- return n ? new Observable((e3) => (e3.next(t2), (async () => {
6678
+ let t = { type: L.HEADERS, status: e2.status, headers: e2.headers }, n = e2.body?.getReader();
6679
+ return n ? new Observable((e3) => (e3.next(t), (async () => {
6564
6680
  try {
6565
6681
  for (; ; ) {
6566
- let { done: t3, value: r } = await n.read();
6567
- if (t3) break;
6568
- let i = { type: R.DATA, data: r };
6682
+ let { done: t2, value: r } = await n.read();
6683
+ if (t2) break;
6684
+ let i = { type: L.DATA, data: r };
6569
6685
  e3.next(i);
6570
6686
  }
6571
6687
  e3.complete();
6572
- } catch (t3) {
6573
- e3.error(t3);
6688
+ } catch (t2) {
6689
+ e3.error(t2);
6574
6690
  }
6575
6691
  })(), () => {
6576
6692
  n.cancel().catch((e4) => {
@@ -6578,10 +6694,10 @@ var z2 = (e, t) => defer(() => from(fetch(e, t))).pipe(switchMap((e2) => {
6578
6694
  });
6579
6695
  })) : throwError(() => Error(`Failed to getReader() from response`));
6580
6696
  }));
6581
- var B = (e, t) => {
6582
- let n = N(t), r = new Subject(), i = new TextDecoder(`utf-8`, { fatal: false }), a = ``;
6697
+ var z2 = (e, t) => {
6698
+ let n = M(t), r = new Subject(), i = new TextDecoder(`utf-8`, { fatal: false }), a = ``;
6583
6699
  e.subscribe({ next: (e2) => {
6584
- if (e2.type !== R.HEADERS && e2.type === R.DATA && e2.data) {
6700
+ if (e2.type !== L.HEADERS && e2.type === L.DATA && e2.data) {
6585
6701
  let t2 = i.decode(e2.data, { stream: true });
6586
6702
  a += t2;
6587
6703
  let n2 = a.split(/\n\n/);
@@ -6605,10 +6721,10 @@ var B = (e, t) => {
6605
6721
  }
6606
6722
  return r.asObservable();
6607
6723
  };
6608
- var V = (e) => {
6724
+ var B = (e) => {
6609
6725
  let t = new Subject(), n = new Uint8Array();
6610
6726
  e.subscribe({ next: (e2) => {
6611
- if (e2.type !== R.HEADERS && e2.type === R.DATA && e2.data) {
6727
+ if (e2.type !== L.HEADERS && e2.type === L.DATA && e2.data) {
6612
6728
  let t2 = new Uint8Array(n.length + e2.data.length);
6613
6729
  t2.set(n, 0), t2.set(e2.data, n.length), n = t2, r();
6614
6730
  }
@@ -6636,13 +6752,13 @@ var V = (e) => {
6636
6752
  }
6637
6753
  return t.asObservable();
6638
6754
  };
6639
- var H = (e, t) => {
6640
- let n = N(t), a = new Subject(), o = new ReplaySubject(), s = false;
6755
+ var V = (e, t) => {
6756
+ let n = M(t), a = new Subject(), o = new ReplaySubject(), s = false;
6641
6757
  return e.subscribe({ next: (e2) => {
6642
- if (o.next(e2), e2.type === R.HEADERS && !s) {
6758
+ if (o.next(e2), e2.type === L.HEADERS && !s) {
6643
6759
  s = true;
6644
6760
  let t2 = e2.headers.get(`content-type`);
6645
- n?.lifecycle(`HTTP`, `Stream format detected:`, { contentType: t2, parser: t2 === AGUI_MEDIA_TYPE ? `protobuf` : `sse` }), t2 === AGUI_MEDIA_TYPE ? V(o).subscribe({ next: (e3) => a.next(e3), error: (e3) => a.error(e3), complete: () => a.complete() }) : B(o, n).subscribe({ next: (e3) => {
6761
+ n?.lifecycle(`HTTP`, `Stream format detected:`, { contentType: t2, parser: t2 === AGUI_MEDIA_TYPE ? `protobuf` : `sse` }), t2 === AGUI_MEDIA_TYPE ? B(o).subscribe({ next: (e3) => a.next(e3), error: (e3) => a.error(e3), complete: () => a.complete() }) : z2(o, n).subscribe({ next: (e3) => {
6646
6762
  try {
6647
6763
  let t3 = EventSchemas.parse(e3);
6648
6764
  n?.event(`HTTP`, `Event validated:`, t3, { type: t3.type, valid: true }), a.next(t3);
@@ -6663,27 +6779,27 @@ var H = (e, t) => {
6663
6779
  o.complete();
6664
6780
  } }), a.asObservable();
6665
6781
  };
6666
- var U = E.enum([`TextMessageStart`, `TextMessageContent`, `TextMessageEnd`, `ActionExecutionStart`, `ActionExecutionArgs`, `ActionExecutionEnd`, `ActionExecutionResult`, `AgentStateMessage`, `MetaEvent`, `RunStarted`, `RunFinished`, `RunError`, `NodeStarted`, `NodeFinished`]);
6667
- var oe = E.enum([`LangGraphInterruptEvent`, `PredictState`, `Exit`]);
6668
- var se = E.object({ type: E.literal(U.enum.TextMessageStart), messageId: E.string(), parentMessageId: E.string().optional(), role: E.string().optional() });
6669
- var ce = E.object({ type: E.literal(U.enum.TextMessageContent), messageId: E.string(), content: E.string() });
6670
- var le = E.object({ type: E.literal(U.enum.TextMessageEnd), messageId: E.string() });
6671
- var ue = E.object({ type: E.literal(U.enum.ActionExecutionStart), actionExecutionId: E.string(), actionName: E.string(), parentMessageId: E.string().optional() });
6672
- var de = E.object({ type: E.literal(U.enum.ActionExecutionArgs), actionExecutionId: E.string(), args: E.string() });
6673
- var fe = E.object({ type: E.literal(U.enum.ActionExecutionEnd), actionExecutionId: E.string() });
6674
- var pe = E.object({ type: E.literal(U.enum.ActionExecutionResult), actionName: E.string(), actionExecutionId: E.string(), result: E.string() });
6675
- var me = E.object({ type: E.literal(U.enum.AgentStateMessage), threadId: E.string(), agentName: E.string(), nodeName: E.string(), runId: E.string(), active: E.boolean(), role: E.string(), state: E.string(), running: E.boolean() });
6676
- var he = E.object({ type: E.literal(U.enum.MetaEvent), name: oe, value: E.any() });
6677
- var ge = E.object({ type: E.literal(U.enum.RunError), message: E.string(), code: E.string().optional() });
6678
- E.discriminatedUnion(`type`, [se, ce, le, ue, de, fe, pe, me, he, ge]), E.object({ id: E.string(), role: E.string(), content: E.string(), parentMessageId: E.string().optional() }), E.object({ id: E.string(), name: E.string(), arguments: E.any(), parentMessageId: E.string().optional() }), E.object({ id: E.string(), result: E.any(), actionExecutionId: E.string(), actionName: E.string() });
6679
- var _e = (e) => {
6782
+ var H = T.enum([`TextMessageStart`, `TextMessageContent`, `TextMessageEnd`, `ActionExecutionStart`, `ActionExecutionArgs`, `ActionExecutionEnd`, `ActionExecutionResult`, `AgentStateMessage`, `MetaEvent`, `RunStarted`, `RunFinished`, `RunError`, `NodeStarted`, `NodeFinished`]);
6783
+ var se = T.enum([`LangGraphInterruptEvent`, `PredictState`, `Exit`]);
6784
+ var ce = T.object({ type: T.literal(H.enum.TextMessageStart), messageId: T.string(), parentMessageId: T.string().optional(), role: T.string().optional() });
6785
+ var le = T.object({ type: T.literal(H.enum.TextMessageContent), messageId: T.string(), content: T.string() });
6786
+ var ue = T.object({ type: T.literal(H.enum.TextMessageEnd), messageId: T.string() });
6787
+ var de = T.object({ type: T.literal(H.enum.ActionExecutionStart), actionExecutionId: T.string(), actionName: T.string(), parentMessageId: T.string().optional() });
6788
+ var fe = T.object({ type: T.literal(H.enum.ActionExecutionArgs), actionExecutionId: T.string(), args: T.string() });
6789
+ var pe = T.object({ type: T.literal(H.enum.ActionExecutionEnd), actionExecutionId: T.string() });
6790
+ var me = T.object({ type: T.literal(H.enum.ActionExecutionResult), actionName: T.string(), actionExecutionId: T.string(), result: T.string() });
6791
+ var he = T.object({ type: T.literal(H.enum.AgentStateMessage), threadId: T.string(), agentName: T.string(), nodeName: T.string(), runId: T.string(), active: T.boolean(), role: T.string(), state: T.string(), running: T.boolean() });
6792
+ var ge = T.object({ type: T.literal(H.enum.MetaEvent), name: se, value: T.any() });
6793
+ var _e = T.object({ type: T.literal(H.enum.RunError), message: T.string(), code: T.string().optional() });
6794
+ T.discriminatedUnion(`type`, [ce, le, ue, de, fe, pe, me, he, ge, _e]), T.object({ id: T.string(), role: T.string(), content: T.string(), parentMessageId: T.string().optional() }), T.object({ id: T.string(), name: T.string(), arguments: T.any(), parentMessageId: T.string().optional() }), T.object({ id: T.string(), result: T.any(), actionExecutionId: T.string(), actionName: T.string() });
6795
+ var ve = (e) => {
6680
6796
  if (typeof e == `string`) return e;
6681
6797
  if (!Array.isArray(e)) return;
6682
6798
  let t = e.filter((e2) => e2.type === `text`).map((e2) => e2.text).filter((e2) => e2.length > 0);
6683
6799
  if (t.length !== 0) return t.join(`
6684
6800
  `);
6685
6801
  };
6686
- var ve = (e, t, n) => (r) => {
6802
+ var U = (e, t, n) => (r) => {
6687
6803
  let o = {}, s = true, c = true, l = ``, u = null, d = null, f = [], p = {}, m = (e2) => {
6688
6804
  typeof e2 == `object` && e2 && (`messages` in e2 && delete e2.messages, o = e2);
6689
6805
  };
@@ -6691,19 +6807,19 @@ var ve = (e, t, n) => (r) => {
6691
6807
  switch (r2.type) {
6692
6808
  case EventType.TEXT_MESSAGE_START: {
6693
6809
  let e2 = r2;
6694
- return [{ type: U.enum.TextMessageStart, messageId: e2.messageId, role: e2.role }];
6810
+ return [{ type: H.enum.TextMessageStart, messageId: e2.messageId, role: e2.role }];
6695
6811
  }
6696
6812
  case EventType.TEXT_MESSAGE_CONTENT: {
6697
6813
  let e2 = r2;
6698
- return [{ type: U.enum.TextMessageContent, messageId: e2.messageId, content: e2.delta }];
6814
+ return [{ type: H.enum.TextMessageContent, messageId: e2.messageId, content: e2.delta }];
6699
6815
  }
6700
6816
  case EventType.TEXT_MESSAGE_END: {
6701
6817
  let e2 = r2;
6702
- return [{ type: U.enum.TextMessageEnd, messageId: e2.messageId }];
6818
+ return [{ type: H.enum.TextMessageEnd, messageId: e2.messageId }];
6703
6819
  }
6704
6820
  case EventType.TOOL_CALL_START: {
6705
6821
  let e2 = r2;
6706
- return f.push({ id: e2.toolCallId, type: `function`, function: { name: e2.toolCallName, arguments: `` } }), c = true, p[e2.toolCallId] = e2.toolCallName, [{ type: U.enum.ActionExecutionStart, actionExecutionId: e2.toolCallId, actionName: e2.toolCallName, parentMessageId: e2.parentMessageId }];
6822
+ return f.push({ id: e2.toolCallId, type: `function`, function: { name: e2.toolCallName, arguments: `` } }), c = true, p[e2.toolCallId] = e2.toolCallName, [{ type: H.enum.ActionExecutionStart, actionExecutionId: e2.toolCallId, actionName: e2.toolCallName, parentMessageId: e2.parentMessageId }];
6707
6823
  }
6708
6824
  case EventType.TOOL_CALL_ARGS: {
6709
6825
  let i = r2, a = f.find((e2) => e2.id === i.toolCallId);
@@ -6718,15 +6834,15 @@ var ve = (e, t, n) => (r) => {
6718
6834
  } catch {
6719
6835
  }
6720
6836
  }
6721
- return [{ type: U.enum.ActionExecutionArgs, actionExecutionId: i.toolCallId, args: i.delta }, ...u2 ? [{ type: U.enum.AgentStateMessage, threadId: e, agentName: n, nodeName: l, runId: t, running: s, role: `assistant`, state: JSON.stringify(o), active: c }] : []];
6837
+ return [{ type: H.enum.ActionExecutionArgs, actionExecutionId: i.toolCallId, args: i.delta }, ...u2 ? [{ type: H.enum.AgentStateMessage, threadId: e, agentName: n, nodeName: l, runId: t, running: s, role: `assistant`, state: JSON.stringify(o), active: c }] : []];
6722
6838
  }
6723
6839
  case EventType.TOOL_CALL_END: {
6724
6840
  let e2 = r2;
6725
- return [{ type: U.enum.ActionExecutionEnd, actionExecutionId: e2.toolCallId }];
6841
+ return [{ type: H.enum.ActionExecutionEnd, actionExecutionId: e2.toolCallId }];
6726
6842
  }
6727
6843
  case EventType.TOOL_CALL_RESULT: {
6728
6844
  let e2 = r2;
6729
- return [{ type: U.enum.ActionExecutionResult, actionExecutionId: e2.toolCallId, result: e2.content, actionName: p[e2.toolCallId] || `unknown` }];
6845
+ return [{ type: H.enum.ActionExecutionResult, actionExecutionId: e2.toolCallId, result: e2.content, actionName: p[e2.toolCallId] || `unknown` }];
6730
6846
  }
6731
6847
  case EventType.RAW:
6732
6848
  return [];
@@ -6740,28 +6856,28 @@ var ve = (e, t, n) => (r) => {
6740
6856
  d = e2.value;
6741
6857
  break;
6742
6858
  }
6743
- return [{ type: U.enum.MetaEvent, name: e2.name, value: e2.value }];
6859
+ return [{ type: H.enum.MetaEvent, name: e2.name, value: e2.value }];
6744
6860
  }
6745
6861
  case EventType.STATE_SNAPSHOT:
6746
- return m(r2.snapshot), [{ type: U.enum.AgentStateMessage, threadId: e, agentName: n, nodeName: l, runId: t, running: s, role: `assistant`, state: JSON.stringify(o), active: c }];
6862
+ return m(r2.snapshot), [{ type: H.enum.AgentStateMessage, threadId: e, agentName: n, nodeName: l, runId: t, running: s, role: `assistant`, state: JSON.stringify(o), active: c }];
6747
6863
  case EventType.STATE_DELTA: {
6748
6864
  let i = r2, u2 = fast_json_patch_default.applyPatch(o, i.delta, true, false);
6749
- return u2 ? (m(u2.newDocument), [{ type: U.enum.AgentStateMessage, threadId: e, agentName: n, nodeName: l, runId: t, running: s, role: `assistant`, state: JSON.stringify(o), active: c }]) : [];
6865
+ return u2 ? (m(u2.newDocument), [{ type: H.enum.AgentStateMessage, threadId: e, agentName: n, nodeName: l, runId: t, running: s, role: `assistant`, state: JSON.stringify(o), active: c }]) : [];
6750
6866
  }
6751
6867
  case EventType.MESSAGES_SNAPSHOT:
6752
- return u = r2.messages, [{ type: U.enum.AgentStateMessage, threadId: e, agentName: n, nodeName: l, runId: t, running: s, role: `assistant`, state: JSON.stringify({ ...o, ...u ? { messages: u } : {} }), active: true }];
6868
+ return u = r2.messages, [{ type: H.enum.AgentStateMessage, threadId: e, agentName: n, nodeName: l, runId: t, running: s, role: `assistant`, state: JSON.stringify({ ...o, ...u ? { messages: u } : {} }), active: true }];
6753
6869
  case EventType.RUN_STARTED:
6754
6870
  return [];
6755
6871
  case EventType.RUN_FINISHED:
6756
- return u && (o.messages = u), Object.keys(o).length === 0 ? [] : [{ type: U.enum.AgentStateMessage, threadId: e, agentName: n, nodeName: l, runId: t, running: s, role: `assistant`, state: JSON.stringify({ ...o, ...u ? { messages: ye(u) } : {} }), active: false }];
6872
+ return u && (o.messages = u), Object.keys(o).length === 0 ? [] : [{ type: H.enum.AgentStateMessage, threadId: e, agentName: n, nodeName: l, runId: t, running: s, role: `assistant`, state: JSON.stringify({ ...o, ...u ? { messages: ye(u) } : {} }), active: false }];
6757
6873
  case EventType.RUN_ERROR: {
6758
6874
  let e2 = r2;
6759
- return [{ type: U.enum.RunError, message: e2.message, code: e2.code }];
6875
+ return [{ type: H.enum.RunError, message: e2.message, code: e2.code }];
6760
6876
  }
6761
6877
  case EventType.STEP_STARTED:
6762
- return l = r2.stepName, f = [], d = null, [{ type: U.enum.AgentStateMessage, threadId: e, agentName: n, nodeName: l, runId: t, running: s, role: `assistant`, state: JSON.stringify(o), active: true }];
6878
+ return l = r2.stepName, f = [], d = null, [{ type: H.enum.AgentStateMessage, threadId: e, agentName: n, nodeName: l, runId: t, running: s, role: `assistant`, state: JSON.stringify(o), active: true }];
6763
6879
  case EventType.STEP_FINISHED:
6764
- return f = [], d = null, [{ type: U.enum.AgentStateMessage, threadId: e, agentName: n, nodeName: l, runId: t, running: s, role: `assistant`, state: JSON.stringify(o), active: false }];
6880
+ return f = [], d = null, [{ type: H.enum.AgentStateMessage, threadId: e, agentName: n, nodeName: l, runId: t, running: s, role: `assistant`, state: JSON.stringify(o), active: false }];
6765
6881
  default:
6766
6882
  return [];
6767
6883
  }
@@ -6770,7 +6886,7 @@ var ve = (e, t, n) => (r) => {
6770
6886
  function ye(e) {
6771
6887
  let t = [];
6772
6888
  for (let n of e) if (n.role === `assistant` || n.role === `user` || n.role === `system`) {
6773
- let e2 = _e(n.content);
6889
+ let e2 = ve(n.content);
6774
6890
  if (e2) {
6775
6891
  let r = { id: n.id, role: n.role, content: e2 };
6776
6892
  t.push(r);
@@ -6793,7 +6909,7 @@ function ye(e) {
6793
6909
  return t;
6794
6910
  }
6795
6911
  var W = (e) => (t) => {
6796
- let n = N(e), r, a, o, s, c = () => {
6912
+ let n = M(e), r, a, o, s, c = () => {
6797
6913
  if (!r || s !== `text`) throw Error(`No text message to close`);
6798
6914
  let e2 = { type: EventType.TEXT_MESSAGE_END, messageId: r.messageId };
6799
6915
  return s = void 0, r = void 0, n?.event(`TRANSFORM`, `TEXT_MESSAGE_END`, e2, { messageId: e2.messageId }), e2;
@@ -6886,18 +7002,21 @@ var W = (e) => (t) => {
6886
7002
  f();
6887
7003
  }));
6888
7004
  };
6889
- var G = class {
7005
+ function G(e, t = /* @__PURE__ */ new Date()) {
7006
+ return e.expiresAt === void 0 ? false : new Date(e.expiresAt) <= t;
7007
+ }
7008
+ var K = class {
6890
7009
  runNext(e, t) {
6891
7010
  return t.run(e).pipe(W(false));
6892
7011
  }
6893
7012
  runNextWithState(e, t) {
6894
- let n = O(e.messages || []), r = O(e.state || {}), i = new ReplaySubject();
6895
- return I(e, i, t, []).subscribe((e2) => {
7013
+ let n = D(e.messages || []), r = D(e.state || {}), i = new ReplaySubject();
7014
+ return F(e, i, t, []).subscribe((e2) => {
6896
7015
  e2.messages !== void 0 && (n = e2.messages), e2.state !== void 0 && (r = e2.state);
6897
- }), this.runNext(e, t).pipe(concatMap(async (e2) => (i.next(e2), await new Promise((e3) => setTimeout(e3, 0)), { event: e2, messages: O(n), state: O(r) })));
7016
+ }), this.runNext(e, t).pipe(concatMap(async (e2) => (i.next(e2), await new Promise((e3) => setTimeout(e3, 0)), { event: e2, messages: D(n), state: D(r) })));
6898
7017
  }
6899
7018
  };
6900
- var K = class extends G {
7019
+ var q = class extends K {
6901
7020
  constructor(e) {
6902
7021
  super(), this.fn = e;
6903
7022
  }
@@ -6905,7 +7024,7 @@ var K = class extends G {
6905
7024
  return this.fn(e, t);
6906
7025
  }
6907
7026
  };
6908
- function xe(e) {
7027
+ function Ce(e) {
6909
7028
  let t = e.content;
6910
7029
  if (Array.isArray(t)) {
6911
7030
  let n = t.filter((e2) => typeof e2 == `object` && !!e2 && `type` in e2 && e2.type === `text` && typeof e2.text == `string`).map((e2) => e2.text).join(``);
@@ -6913,18 +7032,18 @@ function xe(e) {
6913
7032
  }
6914
7033
  return typeof t == `string` ? e : { ...e, content: `` };
6915
7034
  }
6916
- var q = class extends G {
7035
+ var J = class extends K {
6917
7036
  run(e, t) {
6918
- let { parentRunId: n, ...r } = e, i = { ...r, messages: r.messages.map(xe) };
7037
+ let { parentRunId: n, ...r } = e, i = { ...r, messages: r.messages.map(Ce) };
6919
7038
  return this.runNext(i, t);
6920
7039
  }
6921
7040
  };
6922
- var J = `THINKING_START`;
6923
- var Y = `THINKING_END`;
6924
- var X = `THINKING_TEXT_MESSAGE_START`;
6925
- var Z = `THINKING_TEXT_MESSAGE_CONTENT`;
6926
- var Se = `THINKING_TEXT_MESSAGE_END`;
6927
- var Ce = class extends G {
7041
+ var Y = `THINKING_START`;
7042
+ var X = `THINKING_END`;
7043
+ var Z = `THINKING_TEXT_MESSAGE_START`;
7044
+ var we = `THINKING_TEXT_MESSAGE_CONTENT`;
7045
+ var Te = `THINKING_TEXT_MESSAGE_END`;
7046
+ var Ee = class extends K {
6928
7047
  constructor(...e) {
6929
7048
  super(...e), this.currentReasoningId = null, this.currentMessageId = null;
6930
7049
  }
@@ -6936,71 +7055,71 @@ var Ce = class extends G {
6936
7055
  }
6937
7056
  transformEvent(e) {
6938
7057
  switch (e.type) {
6939
- case J: {
6940
- this.currentReasoningId = k();
7058
+ case Y: {
7059
+ this.currentReasoningId = O();
6941
7060
  let { title: t, ...n } = e;
6942
- return this.warnAboutTransformation(J, EventType.REASONING_START), { ...n, type: EventType.REASONING_START, messageId: this.currentReasoningId };
7061
+ return this.warnAboutTransformation(Y, EventType.REASONING_START), { ...n, type: EventType.REASONING_START, messageId: this.currentReasoningId };
6943
7062
  }
6944
- case X:
6945
- return this.currentMessageId = k(), this.warnAboutTransformation(X, EventType.REASONING_MESSAGE_START), { ...e, type: EventType.REASONING_MESSAGE_START, messageId: this.currentMessageId, role: `assistant` };
6946
- case Z: {
7063
+ case Z:
7064
+ return this.currentMessageId = O(), this.warnAboutTransformation(Z, EventType.REASONING_MESSAGE_START), { ...e, type: EventType.REASONING_MESSAGE_START, messageId: this.currentMessageId, role: `assistant` };
7065
+ case we: {
6947
7066
  let { delta: t, ...n } = e;
6948
- return this.warnAboutTransformation(Z, EventType.REASONING_MESSAGE_CONTENT), { ...n, type: EventType.REASONING_MESSAGE_CONTENT, messageId: this.currentMessageId ?? k(), delta: t };
7067
+ return this.warnAboutTransformation(we, EventType.REASONING_MESSAGE_CONTENT), { ...n, type: EventType.REASONING_MESSAGE_CONTENT, messageId: this.currentMessageId ?? O(), delta: t };
6949
7068
  }
6950
- case Se: {
6951
- let t = this.currentMessageId ?? k();
6952
- return this.warnAboutTransformation(Se, EventType.REASONING_MESSAGE_END), { ...e, type: EventType.REASONING_MESSAGE_END, messageId: t };
7069
+ case Te: {
7070
+ let t = this.currentMessageId ?? O();
7071
+ return this.warnAboutTransformation(Te, EventType.REASONING_MESSAGE_END), { ...e, type: EventType.REASONING_MESSAGE_END, messageId: t };
6953
7072
  }
6954
- case Y: {
6955
- let t = this.currentReasoningId ?? k();
6956
- return this.warnAboutTransformation(Y, EventType.REASONING_END), { ...e, type: EventType.REASONING_END, messageId: t };
7073
+ case X: {
7074
+ let t = this.currentReasoningId ?? O();
7075
+ return this.warnAboutTransformation(X, EventType.REASONING_END), { ...e, type: EventType.REASONING_END, messageId: t };
6957
7076
  }
6958
7077
  default:
6959
7078
  return e;
6960
7079
  }
6961
7080
  }
6962
7081
  };
6963
- function we(e) {
7082
+ function De(e) {
6964
7083
  return e.startsWith(`image/`) ? `image` : e.startsWith(`audio/`) ? `audio` : e.startsWith(`video/`) ? `video` : `document`;
6965
7084
  }
6966
- function Te(e) {
7085
+ function Oe(e) {
6967
7086
  return typeof e == `object` && !!e && `type` in e && e.type === `binary` && `mimeType` in e && typeof e.mimeType == `string`;
6968
7087
  }
6969
- function Ee(e) {
6970
- let t = we(e.mimeType);
7088
+ function ke(e) {
7089
+ let t = De(e.mimeType);
6971
7090
  return e.data ? { type: t, source: { type: `data`, value: e.data, mimeType: e.mimeType }, ...e.filename ? { metadata: { filename: e.filename } } : {} } : e.url ? { type: t, source: { type: `url`, value: e.url, mimeType: e.mimeType }, ...e.filename ? { metadata: { filename: e.filename } } : {} } : e;
6972
7091
  }
6973
- function De(e) {
7092
+ function Ae(e) {
6974
7093
  let t = e.content;
6975
7094
  if (!Array.isArray(t)) return e;
6976
- let n = t.map((e2) => Te(e2) ? Ee(e2) : e2);
7095
+ let n = t.map((e2) => Oe(e2) ? ke(e2) : e2);
6977
7096
  return { ...e, content: n };
6978
7097
  }
6979
- var Oe = class extends G {
7098
+ var je = class extends K {
6980
7099
  run(e, t) {
6981
- let n = { ...e, messages: e.messages.map(De) };
7100
+ let n = { ...e, messages: e.messages.map(Ae) };
6982
7101
  return this.runNext(n, t);
6983
7102
  }
6984
7103
  };
6985
- var ke = `0.0.53`;
6986
- var Ae = class {
7104
+ var Me = `0.0.55`;
7105
+ var Ne = class {
6987
7106
  get maxVersion() {
6988
- return ke;
7107
+ return Me;
6989
7108
  }
6990
7109
  get debug() {
6991
7110
  return this._debug;
6992
7111
  }
6993
7112
  set debug(e) {
6994
- this._debug = M(e), this._debugLogger = F(this._debug);
7113
+ this._debug = j(e), this._debugLogger = P(this._debug);
6995
7114
  }
6996
7115
  get debugLogger() {
6997
7116
  return this._debugLogger;
6998
7117
  }
6999
7118
  set debugLogger(e) {
7000
- typeof e == `boolean` ? this._debugLogger = e ? F(M(true)) : void 0 : this._debugLogger = e;
7119
+ typeof e == `boolean` ? this._debugLogger = e ? P(j(true)) : void 0 : this._debugLogger = e;
7001
7120
  }
7002
7121
  constructor({ agentId: t, description: n, threadId: r, initialMessages: i, initialState: a, debug: o } = {}) {
7003
- this.subscribers = [], this.isRunning = false, this.middlewares = [], this.agentId = t, this.description = n ?? ``, this.threadId = r ?? v4_default(), this.messages = O(i ?? []), this.state = O(a ?? {}), this._debug = M(o), this._debugLogger = F(this._debug), compareVersions(this.maxVersion, `0.0.39`) <= 0 && this.middlewares.unshift(new q()), compareVersions(this.maxVersion, `0.0.45`) <= 0 && this.middlewares.unshift(new Ce()), compareVersions(this.maxVersion, `0.0.47`) <= 0 && this.middlewares.unshift(new Oe());
7122
+ this.subscribers = [], this.isRunning = false, this.pendingInterrupts = [], this.middlewares = [], this.agentId = t, this.description = n ?? ``, this.threadId = r ?? v4_default(), this.messages = D(i ?? []), this.state = D(a ?? {}), this._debug = j(o), this._debugLogger = P(this._debug), compareVersions(this.maxVersion, `0.0.39`) <= 0 && this.middlewares.unshift(new J()), compareVersions(this.maxVersion, `0.0.45`) <= 0 && this.middlewares.unshift(new Ee()), compareVersions(this.maxVersion, `0.0.47`) <= 0 && this.middlewares.unshift(new je());
7004
7123
  }
7005
7124
  subscribe(e) {
7006
7125
  return this.subscribers.push(e), { unsubscribe: () => {
@@ -7008,7 +7127,7 @@ var Ae = class {
7008
7127
  } };
7009
7128
  }
7010
7129
  use(...e) {
7011
- let t = e.map((e2) => typeof e2 == `function` ? new K(e2) : e2);
7130
+ let t = e.map((e2) => typeof e2 == `function` ? new q(e2) : e2);
7012
7131
  return this.middlewares.push(...t), this;
7013
7132
  }
7014
7133
  async runAgent(t, n) {
@@ -7017,7 +7136,7 @@ var Ae = class {
7017
7136
  let r = this.prepareRunAgentInput(t);
7018
7137
  this.debugLogger?.lifecycle(`LIFECYCLE`, `Run started:`, { agentId: this.agentId, threadId: this.threadId });
7019
7138
  let i, a = new Set(this.messages.map((e) => e.id)), o = [{ onRunFinishedEvent: (e) => {
7020
- i = e.result;
7139
+ e.outcome === `success` && (i = e.result);
7021
7140
  } }, ...this.subscribers, n ?? {}];
7022
7141
  await this.onInitialize(r, o), this.activeRunDetach$ = new Subject();
7023
7142
  let s;
@@ -7027,10 +7146,10 @@ var Ae = class {
7027
7146
  return e.messages;
7028
7147
  }, get state() {
7029
7148
  return e.state;
7030
- } }), this).run(r), W(this.debugLogger), L(this.debugLogger), (e) => e.pipe(takeUntil(this.activeRunDetach$)), (e) => this.apply(r, e, o), (e) => this.processApplyEvents(r, e, o), catchError((e) => (this.debugLogger?.lifecycle(`LIFECYCLE`, `Run errored:`, { agentId: this.agentId, error: e instanceof Error ? e.message : String(e) }), this.isRunning = false, this.onError(r, e, o))), finalize(() => {
7149
+ } }), this).run(r), W(this.debugLogger), I(this.debugLogger), (e) => e.pipe(takeUntil(this.activeRunDetach$)), (e) => this.apply(r, e, o), (e) => this.processApplyEvents(r, e, o), catchError((e) => (this.debugLogger?.lifecycle(`LIFECYCLE`, `Run errored:`, { agentId: this.agentId, error: e instanceof Error ? e.message : String(e) }), this.isRunning = false, this.onError(r, e, o))), finalize(() => {
7031
7150
  this.debugLogger?.lifecycle(`LIFECYCLE`, `Run finished:`, { agentId: this.agentId, threadId: this.threadId }), this.isRunning = false, this.onFinalize(r, o), s?.(), s = void 0, this.activeRunCompletionPromise = void 0, this.activeRunDetach$ = void 0;
7032
7151
  }))(of(null)));
7033
- let c = O(this.messages).filter((e) => !a.has(e.id));
7152
+ let c = D(this.messages).filter((e) => !a.has(e.id));
7034
7153
  return { result: i, newMessages: c };
7035
7154
  } finally {
7036
7155
  this.isRunning = false;
@@ -7043,16 +7162,16 @@ var Ae = class {
7043
7162
  try {
7044
7163
  this.isRunning = true, this.agentId = this.agentId ?? v4_default();
7045
7164
  let i = this.prepareRunAgentInput(n), a, s = new Set(this.messages.map((e) => e.id)), c = [{ onRunFinishedEvent: (e) => {
7046
- a = e.result;
7165
+ e.outcome === `success` && (a = e.result);
7047
7166
  } }, ...this.subscribers, r ?? {}];
7048
7167
  await this.onInitialize(i, c), this.activeRunDetach$ = new Subject();
7049
7168
  let d;
7050
7169
  this.activeRunCompletionPromise = new Promise((e) => {
7051
7170
  d = e;
7052
- }), await lastValueFrom(pipe(() => defer(() => this.connect(i)), W(this.debugLogger), L(this.debugLogger), (e) => e.pipe(takeUntil(this.activeRunDetach$)), (e) => this.apply(i, e, c), (e) => this.processApplyEvents(i, e, c), catchError((e) => (this.isRunning = false, e instanceof AGUIConnectNotImplementedError ? EMPTY : this.onError(i, e, c))), finalize(() => {
7171
+ }), await lastValueFrom(pipe(() => defer(() => this.connect(i)), W(this.debugLogger), I(this.debugLogger), (e) => e.pipe(takeUntil(this.activeRunDetach$)), (e) => this.apply(i, e, c), (e) => this.processApplyEvents(i, e, c), catchError((e) => (this.isRunning = false, e instanceof AGUIConnectNotImplementedError ? EMPTY : this.onError(i, e, c))), finalize(() => {
7053
7172
  this.isRunning = false, this.onFinalize(i, c), d?.(), d = void 0, this.activeRunCompletionPromise = void 0, this.activeRunDetach$ = void 0;
7054
7173
  }))(of(null)), { defaultValue: void 0 });
7055
- let f = O(this.messages).filter((e) => !s.has(e.id));
7174
+ let f = D(this.messages).filter((e) => !s.has(e.id));
7056
7175
  return { result: a, newMessages: f };
7057
7176
  } finally {
7058
7177
  this.isRunning = false;
@@ -7066,7 +7185,7 @@ var Ae = class {
7066
7185
  this.activeRunDetach$.next(), this.activeRunDetach$?.complete(), await e;
7067
7186
  }
7068
7187
  apply(e, t, n) {
7069
- return I(e, t, this, n, this.debugLogger);
7188
+ return F(e, t, this, n, this.debugLogger);
7070
7189
  }
7071
7190
  processApplyEvents(e, t, n) {
7072
7191
  return t.pipe(tap((t2) => {
@@ -7078,19 +7197,24 @@ var Ae = class {
7078
7197
  }));
7079
7198
  }
7080
7199
  prepareRunAgentInput(t) {
7081
- let n = O(this.messages).filter((e) => e.role !== `activity`);
7082
- return { threadId: this.threadId, runId: t?.runId || v4_default(), tools: O(t?.tools ?? []), context: O(t?.context ?? []), forwardedProps: O(t?.forwardedProps ?? {}), state: O(this.state), messages: n };
7200
+ let n = D(this.messages).filter((e) => e.role !== `activity`);
7201
+ return { threadId: this.threadId, runId: t?.runId || v4_default(), tools: D(t?.tools ?? []), context: D(t?.context ?? []), forwardedProps: D(t?.forwardedProps ?? {}), state: D(this.state), messages: n, ...t?.resume === void 0 ? {} : { resume: D(t.resume) } };
7083
7202
  }
7084
7203
  async onInitialize(e, t) {
7085
- let n = await j(t, this.messages, this.state, (t2, n2, r) => t2.onRunInitialized?.({ messages: n2, state: r, agent: this, input: e }));
7086
- (n.messages !== void 0 || n.state !== void 0) && (n.messages && (this.messages = n.messages, e.messages = n.messages, t.forEach((t2) => {
7204
+ if (this.pendingInterrupts.length > 0) {
7205
+ let t2 = new Set((e.resume ?? []).map((e2) => e2.interruptId)), r2 = this.pendingInterrupts.map((e2) => e2.id).filter((e2) => !t2.has(e2));
7206
+ if (r2.length > 0) throw new AGUIError(`Thread has ${r2.length} pending interrupt(s) not addressed by resume: ${r2.join(`, `)}`);
7207
+ for (let e2 of this.pendingInterrupts) if (G(e2)) throw new AGUIError(`Interrupt ${e2.id} expired at ${e2.expiresAt}`);
7208
+ }
7209
+ let r = await A(t, this.messages, this.state, (t2, n, r2) => t2.onRunInitialized?.({ messages: n, state: r2, agent: this, input: e }));
7210
+ (r.messages !== void 0 || r.state !== void 0) && (r.messages && (this.messages = r.messages, e.messages = r.messages, t.forEach((t2) => {
7087
7211
  t2.onMessagesChanged?.({ messages: this.messages, state: this.state, agent: this, input: e });
7088
- })), n.state && (this.state = n.state, e.state = n.state, t.forEach((t2) => {
7212
+ })), r.state && (this.state = r.state, e.state = r.state, t.forEach((t2) => {
7089
7213
  t2.onStateChanged?.({ state: this.state, messages: this.messages, agent: this, input: e });
7090
7214
  })));
7091
7215
  }
7092
7216
  onError(e, t, n) {
7093
- return from(j(n, this.messages, this.state, (n2, r, i) => n2.onRunFailed?.({ error: t, messages: r, state: i, agent: this, input: e }))).pipe(map((r) => {
7217
+ return from(A(n, this.messages, this.state, (n2, r, i) => n2.onRunFailed?.({ error: t, messages: r, state: i, agent: this, input: e }))).pipe(map((r) => {
7094
7218
  let i = r;
7095
7219
  if ((i.messages !== void 0 || i.state !== void 0) && (i.messages !== void 0 && (this.messages = i.messages, n.forEach((t2) => {
7096
7220
  t2.onMessagesChanged?.({ messages: this.messages, state: this.state, agent: this, input: e });
@@ -7104,7 +7228,7 @@ var Ae = class {
7104
7228
  }));
7105
7229
  }
7106
7230
  async onFinalize(e, t) {
7107
- let n = await j(t, this.messages, this.state, (t2, n2, r) => t2.onRunFinalized?.({ messages: n2, state: r, agent: this, input: e }));
7231
+ let n = await A(t, this.messages, this.state, (t2, n2, r) => t2.onRunFinalized?.({ messages: n2, state: r, agent: this, input: e }));
7108
7232
  (n.messages !== void 0 || n.state !== void 0) && (n.messages !== void 0 && (this.messages = n.messages, t.forEach((t2) => {
7109
7233
  t2.onMessagesChanged?.({ messages: this.messages, state: this.state, agent: this, input: e });
7110
7234
  })), n.state !== void 0 && (this.state = n.state, t.forEach((t2) => {
@@ -7113,7 +7237,7 @@ var Ae = class {
7113
7237
  }
7114
7238
  clone() {
7115
7239
  let e = Object.create(Object.getPrototypeOf(this));
7116
- return e.agentId = this.agentId, e.description = this.description, e.threadId = this.threadId, e.messages = O(this.messages), e.state = O(this.state), e._debug = this._debug, e._debugLogger = this._debugLogger, e.isRunning = this.isRunning, e.subscribers = [...this.subscribers], e.middlewares = [...this.middlewares], e;
7240
+ return e.agentId = this.agentId, e.description = this.description, e.threadId = this.threadId, e.messages = D(this.messages), e.state = D(this.state), e._debug = this._debug, e._debugLogger = this._debugLogger, e.isRunning = this.isRunning, e.subscribers = [...this.subscribers], e.middlewares = [...this.middlewares], e.pendingInterrupts = D(this.pendingInterrupts), e;
7117
7241
  }
7118
7242
  addMessage(e) {
7119
7243
  this.messages.push(e), (async () => {
@@ -7132,12 +7256,12 @@ var Ae = class {
7132
7256
  })();
7133
7257
  }
7134
7258
  setMessages(e) {
7135
- this.messages = O(e), (async () => {
7259
+ this.messages = D(e), (async () => {
7136
7260
  for (let e2 of this.subscribers) await e2.onMessagesChanged?.({ messages: this.messages, state: this.state, agent: this });
7137
7261
  })();
7138
7262
  }
7139
7263
  setState(e) {
7140
- this.state = O(e), (async () => {
7264
+ this.state = D(e), (async () => {
7141
7265
  for (let e2 of this.subscribers) await e2.onStateChanged?.({ messages: this.messages, state: this.state, agent: this });
7142
7266
  })();
7143
7267
  }
@@ -7148,10 +7272,10 @@ var Ae = class {
7148
7272
  return e.messages;
7149
7273
  }, get state() {
7150
7274
  return e.state;
7151
- } }), this).run(n)).pipe(W(this.debugLogger), L(this.debugLogger), ve(this.threadId, n.runId, this.agentId), (e) => e.pipe(map((e2) => (this.debugLogger?.event(`LEGACY`, `Event:`, e2, { type: e2.type }), e2))));
7275
+ } }), this).run(n)).pipe(W(this.debugLogger), I(this.debugLogger), U(this.threadId, n.runId, this.agentId), (e) => e.pipe(map((e2) => (this.debugLogger?.event(`LEGACY`, `Event:`, e2, { type: e2.type }), e2))));
7152
7276
  }
7153
7277
  };
7154
- var je = class extends Ae {
7278
+ var Pe = class extends Ne {
7155
7279
  requestInit(e) {
7156
7280
  return { method: `POST`, headers: { ...this.headers, "Content-Type": `application/json`, Accept: `text/event-stream` }, body: JSON.stringify(e), signal: this.abortController.signal };
7157
7281
  }
@@ -7162,21 +7286,21 @@ var je = class extends Ae {
7162
7286
  this.abortController.abort(), super.abortRun();
7163
7287
  }
7164
7288
  constructor(e) {
7165
- super(e), this.abortController = new AbortController(), this.url = e.url, this.headers = O(e.headers ?? {});
7289
+ super(e), this.abortController = new AbortController(), this.url = e.url, this.headers = D(e.headers ?? {}), this.fetch = e.fetch ?? fetch;
7166
7290
  }
7167
7291
  run(e) {
7168
- return H(z2(this.url, this.requestInit(e)), this.debugLogger);
7292
+ return V(R(() => this.fetch(this.url, this.requestInit(e))), this.debugLogger);
7169
7293
  }
7170
7294
  clone() {
7171
7295
  let e = super.clone();
7172
- e.url = this.url, e.headers = O(this.headers ?? {});
7296
+ e.url = this.url, e.headers = D(this.headers ?? {}), e.fetch = this.fetch;
7173
7297
  let t = new AbortController(), n = this.abortController.signal;
7174
7298
  return n.aborted && t.abort(n.reason), e.abortController = t, e;
7175
7299
  }
7176
7300
  };
7177
7301
 
7178
7302
  // ../../chat/dist/transport/agui.js
7179
- var ConfigurableCredentialsHttpAgent = class extends je {
7303
+ var ConfigurableCredentialsHttpAgent = class extends Pe {
7180
7304
  constructor(config2, credentials) {
7181
7305
  super(config2);
7182
7306
  this._credentials = credentials;
@@ -7193,6 +7317,13 @@ var _idCounter = 0;
7193
7317
  function generateId() {
7194
7318
  return `agui-${Date.now()}-${++_idCounter}`;
7195
7319
  }
7320
+ var MAX_TRANSIENT_RETRIES = 2;
7321
+ var TRANSIENT_RETRY_BACKOFF_MS = [400, 1200];
7322
+ function isTransientRunFailure(status, errorName) {
7323
+ if (errorName === "AbortError") return false;
7324
+ if (status == null) return errorName === "TypeError";
7325
+ return status === 408 || status === 425 || status === 429 || status >= 500;
7326
+ }
7196
7327
  var AgUiTransport = class {
7197
7328
  constructor(options) {
7198
7329
  this._agent = null;
@@ -7200,6 +7331,10 @@ var AgUiTransport = class {
7200
7331
  this._handlers = /* @__PURE__ */ new Set();
7201
7332
  this._pendingResume = false;
7202
7333
  this._currentAssistantMessageId = null;
7334
+ this._toolCallMessageIds = /* @__PURE__ */ new Map();
7335
+ this._localPendingInterrupts = /* @__PURE__ */ new Map();
7336
+ this._runProducedOutput = false;
7337
+ this._retryTimer = null;
7203
7338
  this._url = options.url;
7204
7339
  this._headers = options.headers ?? {};
7205
7340
  this._threadId = options.threadId;
@@ -7207,6 +7342,7 @@ var AgUiTransport = class {
7207
7342
  this._credentials = options.credentials;
7208
7343
  this._onA2UIEvent = options.onA2UIEvent;
7209
7344
  this._forwardedProps = options.forwardedProps;
7345
+ this._serverOwnedHistory = options.serverOwnedHistory ?? false;
7210
7346
  }
7211
7347
  get connected() {
7212
7348
  return this._connected;
@@ -7217,7 +7353,12 @@ var AgUiTransport = class {
7217
7353
  {
7218
7354
  url: this._url,
7219
7355
  headers: resolvedHeaders,
7220
- threadId: this._threadId || void 0
7356
+ threadId: this._threadId || void 0,
7357
+ // @ag-ui/client@0.0.54+ stores `fetch` as a plain instance field and
7358
+ // invokes it as `this.fetch(...)`. The browser's `window.fetch`
7359
+ // throws "Illegal invocation" when called with a `this` other than
7360
+ // `window`, so we must hand them an explicitly-bound function.
7361
+ fetch: typeof globalThis !== "undefined" && typeof globalThis.fetch === "function" ? globalThis.fetch.bind(globalThis) : void 0
7221
7362
  },
7222
7363
  this._credentials
7223
7364
  );
@@ -7227,22 +7368,32 @@ var AgUiTransport = class {
7227
7368
  this._emit({ type: "messages-snapshot", messages: [] });
7228
7369
  }
7229
7370
  disconnect() {
7371
+ if (this._retryTimer != null) {
7372
+ clearTimeout(this._retryTimer);
7373
+ this._retryTimer = null;
7374
+ }
7230
7375
  if (this._agent?.isRunning) {
7231
7376
  this._agent.abortRun();
7232
7377
  }
7233
7378
  this._agent = null;
7234
7379
  this._connected = false;
7235
7380
  this._pendingResume = false;
7381
+ this._currentAssistantMessageId = null;
7382
+ this._toolCallMessageIds.clear();
7383
+ this._localPendingInterrupts.clear();
7236
7384
  }
7237
7385
  send(action) {
7238
7386
  if (!this._agent) return;
7239
7387
  switch (action.type) {
7240
7388
  case "user-message":
7241
- this._sendUserMessage(action.text);
7389
+ this._sendUserMessage(action.text, action.id);
7242
7390
  break;
7243
7391
  case "tool-result":
7244
7392
  this._sendToolResult(action.toolCallId, action.result, action.approved);
7245
7393
  break;
7394
+ case "deferred-tool-resume":
7395
+ this._sendDeferredToolResume(action);
7396
+ break;
7246
7397
  case "stop-generation":
7247
7398
  this._agent.abortRun();
7248
7399
  break;
@@ -7257,14 +7408,35 @@ var AgUiTransport = class {
7257
7408
  // ---------------------------------------------------------------------------
7258
7409
  // Private — user message flow
7259
7410
  // ---------------------------------------------------------------------------
7260
- _sendUserMessage(text) {
7411
+ _sendUserMessage(text, id) {
7412
+ if (!text || !text.trim()) return;
7261
7413
  const agent = this._agent;
7414
+ const upstream = (agent.pendingInterrupts ?? []).map((i) => i).filter(
7415
+ (i) => typeof i?.id === "string" && i.id.length > 0
7416
+ );
7417
+ const byId = /* @__PURE__ */ new Map();
7418
+ for (const i of this._localPendingInterrupts.values()) byId.set(i.id, i);
7419
+ for (const i of upstream) byId.set(i.id, i);
7420
+ const pendingInterrupts = [...byId.values()];
7421
+ const cancelResume = pendingInterrupts.length > 0 ? pendingInterrupts.map((i) => {
7422
+ const toolCallId = i.toolCallId ?? i.tool_call_id;
7423
+ if (toolCallId) {
7424
+ this._emit({ type: "tool-call-cancelled", toolCallId });
7425
+ }
7426
+ return {
7427
+ interruptId: i.id,
7428
+ status: "cancelled"
7429
+ };
7430
+ }) : void 0;
7431
+ if (cancelResume) this._localPendingInterrupts.clear();
7262
7432
  agent.addMessage({
7263
- id: generateId(),
7433
+ // Caller-minted id (id parity with the server transcript,
7434
+ // FEAT-1783701440) or a transport-local fallback.
7435
+ id: id ?? generateId(),
7264
7436
  role: "user",
7265
7437
  content: text
7266
7438
  });
7267
- this._runAgent();
7439
+ this._runAgent(cancelResume);
7268
7440
  }
7269
7441
  // ---------------------------------------------------------------------------
7270
7442
  // Private — tool result flow
@@ -7288,34 +7460,128 @@ var AgUiTransport = class {
7288
7460
  this._runAgent();
7289
7461
  }
7290
7462
  // ---------------------------------------------------------------------------
7463
+ // Private — deferred-tool resume (HITL approve/deny via AG-UI resume[])
7464
+ // ---------------------------------------------------------------------------
7465
+ _sendDeferredToolResume(action) {
7466
+ let entry;
7467
+ this._localPendingInterrupts.delete(action.interruptId);
7468
+ if (action.decision === "cancel") {
7469
+ entry = { interruptId: action.interruptId, status: "cancelled" };
7470
+ } else if (action.decision === "approve") {
7471
+ const payload = { approved: true };
7472
+ if (action.editedArgs !== void 0) payload.editedArgs = action.editedArgs;
7473
+ entry = { interruptId: action.interruptId, status: "resolved", payload };
7474
+ } else {
7475
+ const payload = { approved: false };
7476
+ if (typeof action.reason === "string" && action.reason.length > 0) {
7477
+ payload.reason = action.reason;
7478
+ }
7479
+ entry = { interruptId: action.interruptId, status: "resolved", payload };
7480
+ }
7481
+ this._runAgent([entry]);
7482
+ }
7483
+ // ---------------------------------------------------------------------------
7291
7484
  // Private — run agent with subscriber
7292
7485
  // ---------------------------------------------------------------------------
7293
- _runAgent() {
7486
+ _runAgent(resume, attempt = 0) {
7294
7487
  const agent = this._agent;
7295
7488
  if (!agent) return;
7296
7489
  this._currentAssistantMessageId = null;
7490
+ this._runProducedOutput = false;
7297
7491
  this._emit({ type: "typing", isTyping: true });
7298
7492
  if (typeof this._headers === "function") {
7299
7493
  agent.headers = this._headers();
7300
7494
  }
7495
+ const sentMessageIds = new Set((agent.messages ?? []).map((m) => m.id));
7301
7496
  const fwd = typeof this._forwardedProps === "function" ? this._forwardedProps() : this._forwardedProps;
7302
- const runParams = fwd ? { forwardedProps: fwd } : void 0;
7303
- agent.runAgent(runParams, this._buildSubscriber()).catch((err) => {
7497
+ const runParams = {
7498
+ ...fwd ? { forwardedProps: fwd } : {},
7499
+ ...resume && resume.length > 0 ? { resume: [...resume] } : {}
7500
+ };
7501
+ const runPromise = agent.runAgent(runParams, this._buildSubscriber());
7502
+ runPromise.then(() => {
7503
+ this._resetAgentMessages(agent, sentMessageIds);
7504
+ }).catch(() => {
7505
+ });
7506
+ runPromise.catch((err) => {
7304
7507
  const message = err instanceof Error ? err.message : "Agent run failed";
7305
7508
  const errorName = err instanceof Error ? err.name : null;
7306
7509
  const e = err;
7307
7510
  const status = typeof e.status === "number" ? e.status : typeof e.statusCode === "number" ? e.statusCode : typeof e.response?.status === "number" ? e.response.status : null;
7308
7511
  const rawBody = e.body ?? e.response?.body ?? null;
7309
7512
  const body = typeof rawBody === "string" ? rawBody.slice(0, 500) : rawBody != null ? JSON.stringify(rawBody).slice(0, 500) : null;
7513
+ if (isTransientRunFailure(status, errorName) && !this._runProducedOutput && attempt < MAX_TRANSIENT_RETRIES && this._agent === agent) {
7514
+ const delay = TRANSIENT_RETRY_BACKOFF_MS[attempt] ?? TRANSIENT_RETRY_BACKOFF_MS[TRANSIENT_RETRY_BACKOFF_MS.length - 1];
7515
+ this._currentAssistantMessageId = null;
7516
+ this._retryTimer = setTimeout(() => {
7517
+ this._retryTimer = null;
7518
+ if (this._agent === agent) this._runAgent(resume, attempt + 1);
7519
+ }, delay);
7520
+ return;
7521
+ }
7522
+ this._pendingResume = false;
7523
+ this._currentAssistantMessageId = null;
7524
+ this._resetAgentMessages(agent, sentMessageIds);
7310
7525
  this._emit({ type: "error", message, status, body, errorName });
7311
7526
  this._emit({ type: "typing", isTyping: false });
7312
7527
  });
7313
7528
  }
7529
+ /**
7530
+ * Reset `agent.messages` after a settled run (server-owned history).
7531
+ *
7532
+ * The backend owns conversation state (`chat_threads.native_messages`);
7533
+ * the agent object is only a request builder, so anything that already
7534
+ * shipped in a run is dropped. The ONLY retention is undelivered
7535
+ * client-tool state: an assistant message carrying `toolCalls` for a
7536
+ * tool in `clientTools` whose result either doesn't exist yet (the UI
7537
+ * is still computing/asking) or was queued mid-run and never shipped
7538
+ * (`_sendToolResult` while `isRunning`). The retained pair makes the
7539
+ * next run's wire self-consistent — a `role: "tool"` message without
7540
+ * its matching call in the SAME client list is dropped by the backend
7541
+ * filter and the result would be lost.
7542
+ *
7543
+ * No-op unless `serverOwnedHistory` is set: the adaptive runtime and
7544
+ * editor chat backends still build the model conversation from the
7545
+ * client's `messages` array.
7546
+ */
7547
+ _resetAgentMessages(agent, sentMessageIds) {
7548
+ if (!this._serverOwnedHistory) return;
7549
+ if (agent !== this._agent) return;
7550
+ const messages = agent.messages ?? [];
7551
+ const resultsByCallId = /* @__PURE__ */ new Map();
7552
+ for (const msg of messages) {
7553
+ if (msg.role === "tool" && typeof msg.toolCallId === "string") {
7554
+ resultsByCallId.set(msg.toolCallId, msg);
7555
+ }
7556
+ }
7557
+ const retained = [];
7558
+ for (const msg of messages) {
7559
+ if (msg.role !== "assistant" || !Array.isArray(msg.toolCalls)) continue;
7560
+ const pendingCalls = msg.toolCalls.filter((tc) => {
7561
+ if (!this._clientTools.has(tc.function?.name)) return false;
7562
+ const result = resultsByCallId.get(tc.id);
7563
+ return result === void 0 || !sentMessageIds.has(result.id);
7564
+ });
7565
+ if (pendingCalls.length === 0) continue;
7566
+ retained.push({ ...msg, toolCalls: pendingCalls });
7567
+ for (const tc of pendingCalls) {
7568
+ const result = resultsByCallId.get(tc.id);
7569
+ if (result !== void 0) retained.push(result);
7570
+ }
7571
+ }
7572
+ if (typeof agent.setMessages === "function") {
7573
+ agent.setMessages(retained);
7574
+ } else {
7575
+ agent.messages = retained;
7576
+ }
7577
+ }
7314
7578
  _buildSubscriber() {
7315
7579
  return {
7316
7580
  onTextMessageStartEvent: (params) => {
7317
7581
  const { event } = params;
7582
+ this._runProducedOutput = true;
7318
7583
  this._currentAssistantMessageId = event.messageId;
7584
+ this._emit({ type: "thinking-clear" });
7319
7585
  const message = {
7320
7586
  id: event.messageId,
7321
7587
  role: "assistant",
@@ -7337,9 +7603,35 @@ var AgUiTransport = class {
7337
7603
  const { event } = params;
7338
7604
  this._emit({ type: "message-complete", messageId: event.messageId });
7339
7605
  },
7606
+ // pydantic-ai's AG-UI adapter emits REASONING_MESSAGE_CONTENT for
7607
+ // every reasoning delta the model produces between turns. We forward
7608
+ // the deltas verbatim — the model already narrates its intent ("Let
7609
+ // me check what we have for student athletes…") in its own words, so
7610
+ // surfacing them gives the visitor real progress instead of silent
7611
+ // loading dots during the tool-call gap between two assistant
7612
+ // messages. REASONING_START/END just bracket the deltas; only the
7613
+ // content carries the narration we care about.
7614
+ //
7615
+ // Naming history: AG-UI 0.0.45+ renamed THINKING_* to REASONING_*
7616
+ // and dropped the THINKING callback names from `AgentSubscriber`.
7617
+ // Registering `onThinkingTextMessageContentEvent` here used to be
7618
+ // a silent no-op — the AG-UI client never invoked it — so reasoning
7619
+ // deltas never reached the trail despite the backend emitting them.
7620
+ // The matching test in agui-transport.test.ts faked the same
7621
+ // callback name, hiding the drift. Both fixed together.
7622
+ onReasoningMessageContentEvent: (params) => {
7623
+ const { event } = params;
7624
+ this._emit({
7625
+ type: "thinking-delta",
7626
+ delta: event.delta ?? ""
7627
+ });
7628
+ },
7340
7629
  onToolCallStartEvent: (params) => {
7341
7630
  const { event } = params;
7631
+ this._runProducedOutput = true;
7632
+ this._emit({ type: "thinking-clear" });
7342
7633
  const messageId = event.parentMessageId ?? this._currentAssistantMessageId ?? event.toolCallId;
7634
+ this._toolCallMessageIds.set(event.toolCallId, messageId);
7343
7635
  this._emit({
7344
7636
  type: "tool-call",
7345
7637
  messageId,
@@ -7362,8 +7654,10 @@ var AgUiTransport = class {
7362
7654
  },
7363
7655
  onToolCallEndEvent: (params) => {
7364
7656
  const { event, toolCallName, toolCallArgs } = params;
7657
+ const startMessageId = this._toolCallMessageIds.get(event.toolCallId);
7658
+ this._toolCallMessageIds.delete(event.toolCallId);
7365
7659
  if (this._clientTools.has(toolCallName)) {
7366
- const messageId = this._currentAssistantMessageId ?? event.toolCallId;
7660
+ const messageId = startMessageId ?? this._currentAssistantMessageId ?? event.toolCallId;
7367
7661
  this._emit({
7368
7662
  type: "tool-call",
7369
7663
  messageId,
@@ -7378,12 +7672,46 @@ var AgUiTransport = class {
7378
7672
  } else {
7379
7673
  this._emit({
7380
7674
  type: "tool-call-done",
7381
- toolCallId: event.toolCallId
7675
+ toolCallId: event.toolCallId,
7676
+ ...toolCallArgs && Object.keys(toolCallArgs).length > 0 ? { args: toolCallArgs, argsBuffer: JSON.stringify(toolCallArgs) } : {}
7382
7677
  });
7383
7678
  }
7384
7679
  },
7385
- onRunFinishedEvent: (_params) => {
7680
+ onToolCallResultEvent: (params) => {
7681
+ const { event } = params;
7682
+ const raw = event?.content;
7683
+ const result = (() => {
7684
+ if (raw === void 0 || raw === null) return null;
7685
+ if (typeof raw !== "string") return raw;
7686
+ try {
7687
+ return JSON.parse(raw);
7688
+ } catch {
7689
+ return raw;
7690
+ }
7691
+ })();
7692
+ this._emit({ type: "tool-call-result", toolCallId: event.toolCallId, result });
7693
+ },
7694
+ onRunFinishedEvent: (params) => {
7386
7695
  this._emit({ type: "typing", isTyping: false });
7696
+ const outcome = params?.event?.outcome;
7697
+ if (outcome?.type === "interrupt" && Array.isArray(outcome.interrupts)) {
7698
+ for (const interrupt of outcome.interrupts) {
7699
+ const toolCallId = interrupt.toolCallId ?? interrupt.tool_call_id;
7700
+ if (typeof interrupt.id === "string" && interrupt.id) {
7701
+ this._localPendingInterrupts.set(interrupt.id, {
7702
+ id: interrupt.id,
7703
+ toolCallId: typeof toolCallId === "string" ? toolCallId : void 0
7704
+ });
7705
+ }
7706
+ if (typeof toolCallId === "string" && typeof interrupt.id === "string") {
7707
+ this._emit({
7708
+ type: "tool-call-deferred",
7709
+ toolCallId,
7710
+ interruptId: interrupt.id
7711
+ });
7712
+ }
7713
+ }
7714
+ }
7387
7715
  if (this._pendingResume) {
7388
7716
  this._pendingResume = false;
7389
7717
  this._runAgent();
@@ -7391,11 +7719,16 @@ var AgUiTransport = class {
7391
7719
  },
7392
7720
  onRunErrorEvent: (params) => {
7393
7721
  const { event } = params;
7394
- this._emit({ type: "error", message: event.message });
7722
+ const code = typeof event.code === "string" ? event.code : void 0;
7723
+ this._emit({ type: "error", message: event.message, ...code ? { code } : {} });
7395
7724
  this._emit({ type: "typing", isTyping: false });
7396
7725
  },
7397
7726
  onCustomEvent: (params) => {
7398
7727
  const { event } = params;
7728
+ if (typeof event.name === "string" && event.name.startsWith("syntro.recovery.")) {
7729
+ return;
7730
+ }
7731
+ this._runProducedOutput = true;
7399
7732
  const payload = event.value;
7400
7733
  this._onA2UIEvent?.(payload);
7401
7734
  this._emit({ type: "a2ui", payload });
@@ -7406,6 +7739,7 @@ var AgUiTransport = class {
7406
7739
  // Private — emit to subscribers
7407
7740
  // ---------------------------------------------------------------------------
7408
7741
  _emit(event) {
7742
+ if (!this._connected) return;
7409
7743
  for (const handler of this._handlers) {
7410
7744
  handler(event);
7411
7745
  }
@@ -7434,9 +7768,7 @@ var ActionHandler = class {
7434
7768
  const action = this._actionFromInstance(instance);
7435
7769
  await ctx.actions.applyBatch([action]);
7436
7770
  }
7437
- async patch(instance, ctx) {
7438
- const action = this._actionFromInstance(instance);
7439
- await ctx.actions.applyBatch([action]);
7771
+ async patch(_instance, _ctx) {
7440
7772
  }
7441
7773
  async unmount(_instance, _ctx) {
7442
7774
  }
@@ -7459,11 +7791,15 @@ var ActionHandler = class {
7459
7791
  // src/elements/ElementInstanceStore.ts
7460
7792
  var COMPOSITIONAL_REPLAY_REQUEST_EVENT = "element.compositional_replay_request";
7461
7793
  var COMPOSITIONAL_APPEND_EVENT = "element.compositional_append";
7794
+ var CHAT_INLINE_SLOT = "chat-inline";
7462
7795
  var ElementInstanceStore = class {
7463
7796
  constructor(options) {
7464
7797
  this._instances = /* @__PURE__ */ new Map();
7465
7798
  /** Active TTL timeout — replaced on each call to `scheduleClientTtl`. */
7466
7799
  this._ttlTimer = null;
7800
+ /** Instance IDs the client has dismissed. Persists across canvas remounts
7801
+ * so a dismissed tile never silently reappears on replay/broadcast. */
7802
+ this._dismissedIds = /* @__PURE__ */ new Set();
7467
7803
  this._actions = options.actions;
7468
7804
  this._events = options.events;
7469
7805
  this._resolveTileWidget = options.resolveTileWidget;
@@ -7488,8 +7824,19 @@ var ElementInstanceStore = class {
7488
7824
  const publish = this._events?.publish;
7489
7825
  if (!subscribe || !publish) return;
7490
7826
  subscribe(
7491
- { names: [COMPOSITIONAL_REPLAY_REQUEST_EVENT, TILE_REPLAY_REQUEST_EVENT] },
7827
+ {
7828
+ names: [
7829
+ COMPOSITIONAL_REPLAY_REQUEST_EVENT,
7830
+ TILE_REPLAY_REQUEST_EVENT,
7831
+ TILE_UNMOUNTED_EVENT
7832
+ ]
7833
+ },
7492
7834
  (event) => {
7835
+ if (event.name === TILE_UNMOUNTED_EVENT) {
7836
+ const id = String(event.props?.instance_id ?? "");
7837
+ if (id) this._dismissedIds.add(id);
7838
+ return;
7839
+ }
7493
7840
  if (event.name === COMPOSITIONAL_REPLAY_REQUEST_EVENT) {
7494
7841
  const tileId = String(event.props?.tile_id ?? "");
7495
7842
  if (!tileId) return;
@@ -7522,6 +7869,7 @@ var ElementInstanceStore = class {
7522
7869
  if (instance.element_type !== "tile") continue;
7523
7870
  if (instance.placement.type !== "slot") continue;
7524
7871
  if (instance.state !== "active") continue;
7872
+ if (this._dismissedIds.has(instance.instance_id)) continue;
7525
7873
  const props = {
7526
7874
  slot: instance.placement.slot,
7527
7875
  instance_id: instance.instance_id,
@@ -7534,6 +7882,89 @@ var ElementInstanceStore = class {
7534
7882
  registerHandler(handler) {
7535
7883
  this._handlers.set(handler.typeName, handler);
7536
7884
  }
7885
+ isDismissed(instanceId) {
7886
+ return this._dismissedIds.has(instanceId);
7887
+ }
7888
+ getDismissedIds() {
7889
+ return this._dismissedIds;
7890
+ }
7891
+ /** Store-driven receipt source for the chat trail (one per active slot-tile). */
7892
+ listTileReceipts() {
7893
+ const out = [];
7894
+ for (const inst of this._instances.values()) {
7895
+ if (inst.element_type !== "tile" || inst.placement.type !== "slot") continue;
7896
+ if (inst.state !== "active") continue;
7897
+ if (inst.placement.slot === CHAT_INLINE_SLOT) continue;
7898
+ const content = inst.content;
7899
+ const productName = content?.product?.name;
7900
+ const contentTitle = content?.title;
7901
+ const contentHeading = content?.heading;
7902
+ const title = typeof productName === "string" && productName ? productName : typeof contentTitle === "string" && contentTitle ? contentTitle : typeof contentHeading === "string" && contentHeading ? contentHeading : (
7903
+ // Never show a raw template id (kebab-case machine name) in the
7904
+ // chat — prettify the last-resort fallback into Title Case.
7905
+ inst.template_id.replace(/[-_]+/g, " ").replace(/\b\w/g, (c) => c.toUpperCase())
7906
+ );
7907
+ if (inst.placement.slot === "alert") {
7908
+ out.push({
7909
+ kind: "alert",
7910
+ instanceId: inst.instance_id,
7911
+ title,
7912
+ turnId: inst.mounted_by?.turn_id,
7913
+ toolCallId: inst.tool_call_id ?? void 0
7914
+ });
7915
+ } else {
7916
+ out.push({
7917
+ kind: "tile",
7918
+ instanceId: inst.instance_id,
7919
+ title,
7920
+ dismissed: this._dismissedIds.has(inst.instance_id),
7921
+ turnId: inst.mounted_by?.turn_id,
7922
+ toolCallId: inst.tool_call_id ?? void 0
7923
+ });
7924
+ }
7925
+ }
7926
+ return out;
7927
+ }
7928
+ /**
7929
+ * Store-driven inline-widget source for the chat trail — one entry per
7930
+ * active `chat-inline` slot-tile. The trail mounts each entry's widget
7931
+ * element (by tag name, via `document.createElement`) inline in the
7932
+ * conversation flow. Distinct from {@link listTileReceipts}: those are
7933
+ * chips that recall a deck tile; these ARE the rendered widget.
7934
+ */
7935
+ listInlineWidgets() {
7936
+ const out = [];
7937
+ for (const inst of this._instances.values()) {
7938
+ if (inst.element_type !== "tile" || inst.placement.type !== "slot") continue;
7939
+ if (inst.placement.slot !== CHAT_INLINE_SLOT) continue;
7940
+ if (inst.state !== "active") continue;
7941
+ if (this._dismissedIds.has(inst.instance_id)) continue;
7942
+ out.push({
7943
+ instanceId: inst.instance_id,
7944
+ tag: this._resolveTileWidget?.(inst.template_id) ?? inst.template_id,
7945
+ props: inst.content ?? {},
7946
+ turnId: inst.mounted_by?.turn_id,
7947
+ toolCallId: inst.tool_call_id ?? void 0
7948
+ });
7949
+ }
7950
+ return out;
7951
+ }
7952
+ /** Clear a client dismissal and re-publish the tile's mount from retained content. */
7953
+ recreate(instanceId) {
7954
+ const instance = this._instances.get(instanceId);
7955
+ const publish = this._events?.publish;
7956
+ if (!instance || instance.element_type !== "tile" || instance.placement.type !== "slot" || !publish) {
7957
+ return;
7958
+ }
7959
+ this._dismissedIds.delete(instanceId);
7960
+ const props = {
7961
+ slot: instance.placement.slot,
7962
+ instance_id: instance.instance_id,
7963
+ widget: this._resolveTileWidget?.(instance.template_id) ?? instance.template_id,
7964
+ props: instance.content ?? {}
7965
+ };
7966
+ publish(TILE_MOUNTED_EVENT, props);
7967
+ }
7537
7968
  /**
7538
7969
  * Apply the server-provided boot snapshot. For each instance:
7539
7970
  * - stateful: validated + mounted via the type handler;
@@ -7674,8 +8105,16 @@ var ElementInstanceStore = class {
7674
8105
  const isActiveStateful = mutation.instance.state === "active" && handler.lifecycle !== "imperative";
7675
8106
  const isAppliedImperative = mutation.instance.state === "applied" && handler.lifecycle === "imperative";
7676
8107
  if (isActiveStateful || isAppliedImperative) {
8108
+ this._instances.set(mutation.instance.instance_id, mutation.instance);
7677
8109
  const applied = await this._mount(handler, mutation.instance);
7678
- if (!applied) return;
8110
+ if (!applied) {
8111
+ if (existing) {
8112
+ this._instances.set(mutation.instance.instance_id, existing);
8113
+ } else {
8114
+ this._instances.delete(mutation.instance.instance_id);
8115
+ }
8116
+ }
8117
+ return;
7679
8118
  }
7680
8119
  this._instances.set(mutation.instance.instance_id, mutation.instance);
7681
8120
  return;
@@ -7688,6 +8127,12 @@ var ElementInstanceStore = class {
7688
8127
  });
7689
8128
  return;
7690
8129
  }
8130
+ if (typeof mutation.resulting_version !== "number" || mutation.resulting_content == null || typeof mutation.resulting_content !== "object") {
8131
+ this._logger.warn("elements: patch dropped \u2014 malformed envelope (missing resulting_*)", {
8132
+ instance_id: mutation.instance_id
8133
+ });
8134
+ return;
8135
+ }
7691
8136
  if (mutation.resulting_version <= existing.version) {
7692
8137
  return;
7693
8138
  }
@@ -7731,6 +8176,7 @@ var ElementInstanceStore = class {
7731
8176
  try {
7732
8177
  await handler.unmount(reverted, this._ctx());
7733
8178
  } catch (err) {
8179
+ this._instances.set(mutation.instance_id, existing);
7734
8180
  this._logger.warn("elements: handler.unmount threw", {
7735
8181
  instance_id: mutation.instance_id,
7736
8182
  err
@@ -7785,11 +8231,15 @@ async function fetchMountedElements(options = {}) {
7785
8231
  if (typeof fetchImpl !== "function") {
7786
8232
  return null;
7787
8233
  }
7788
- const token = options.token ?? _tokenFromGlobalConfig();
8234
+ const token = options.token;
7789
8235
  const headers = {};
7790
8236
  if (token) {
7791
8237
  headers.Authorization = `Bearer ${token}`;
7792
8238
  }
8239
+ const did = _runtimeId("getDistinctId");
8240
+ if (did) headers["X-Distinct-Id"] = did;
8241
+ const sid = _runtimeId("getSessionId");
8242
+ if (sid) headers["X-Syntro-Session"] = sid;
7793
8243
  let response;
7794
8244
  try {
7795
8245
  response = await fetchImpl(endpoint, {
@@ -7812,16 +8262,31 @@ async function fetchMountedElements(options = {}) {
7812
8262
  return null;
7813
8263
  }
7814
8264
  try {
7815
- return await response.json();
8265
+ const parsed = await response.json();
8266
+ if (!isMountedElementsResponse(parsed)) {
8267
+ logger.warn("elements.fetcher: invalid response shape", { endpoint });
8268
+ return null;
8269
+ }
8270
+ return parsed;
7816
8271
  } catch (err) {
7817
8272
  logger.warn("elements.fetcher: malformed JSON", { endpoint, err });
7818
8273
  return null;
7819
8274
  }
7820
8275
  }
7821
- function _tokenFromGlobalConfig() {
7822
- if (typeof globalThis === "undefined") return void 0;
7823
- const cfg = globalThis.__SYNTRO_CONFIG__;
7824
- return cfg?.token;
8276
+ function isMountedElementsResponse(value) {
8277
+ if (typeof value !== "object" || value === null) return false;
8278
+ const response = value;
8279
+ return Array.isArray(response.mounted_elements) && (response.session_expires_at === null || typeof response.session_expires_at === "string") && response.schema_version === "v0";
8280
+ }
8281
+ function _runtimeId(method) {
8282
+ if (typeof window === "undefined") return void 0;
8283
+ const rt = window.SynOS?.runtime;
8284
+ try {
8285
+ const v = rt?.telemetry?.[method]?.();
8286
+ return typeof v === "string" && v.length > 0 ? v : void 0;
8287
+ } catch {
8288
+ return void 0;
8289
+ }
7825
8290
  }
7826
8291
 
7827
8292
  // src/elements/ItemHandler.ts
@@ -7906,6 +8371,9 @@ var TileHandler = class {
7906
8371
  if (typeof instance.template_id !== "string" || instance.template_id.length === 0) {
7907
8372
  return { accepted: false, reason: "missing_template_id" };
7908
8373
  }
8374
+ if (this.resolveWidget && this.resolveWidget(instance.template_id) === void 0) {
8375
+ return { accepted: false, reason: "unknown_template_id", detail: instance.template_id };
8376
+ }
7909
8377
  return { accepted: true };
7910
8378
  }
7911
8379
  async mount(instance, ctx) {
@@ -7980,6 +8448,7 @@ async function acquireTurnstileToken(opts = {}) {
7980
8448
  const appearance = opts.appearance ?? "interaction-only";
7981
8449
  if (!TURNSTILE_SITEKEY) return null;
7982
8450
  if (typeof window === "undefined" || typeof document === "undefined") return null;
8451
+ if (opts.signal?.aborted) return null;
7983
8452
  let turnstile;
7984
8453
  try {
7985
8454
  turnstile = await Promise.race([
@@ -8138,10 +8607,8 @@ async function acquireTokenWithChallenge(options = {}) {
8138
8607
 
8139
8608
  // src/ChatAssistantLit.ts
8140
8609
  var ERROR_DEBOUNCE_MS = 1500;
8141
- function readSyntroToken() {
8142
- if (typeof window === "undefined") return void 0;
8143
- const cfg = window.__SYNTRO_CONFIG__;
8144
- const token = cfg?.token;
8610
+ function readRuntimeToken(runtime) {
8611
+ const token = runtime?.token;
8145
8612
  return typeof token === "string" && token.startsWith("syn_") ? token : void 0;
8146
8613
  }
8147
8614
  var FALLBACK_DEFAULTS = {
@@ -8211,25 +8678,30 @@ var ChatAssistantLitMountable = {
8211
8678
  const flatLooksLikeChatbotConfig = typeof flat.backendUrl === "string";
8212
8679
  const chatbotConfig = nestedConfig ?? (flatLooksLikeChatbotConfig ? flat : void 0);
8213
8680
  const resolvedTileId = tileId ?? instanceId ?? "chatbot-widget";
8214
- if (!chatbotConfig?.backendUrl || !runtime) {
8215
- container.innerHTML = '<div style="padding:16px;color:var(--sc-content-text-secondary-color,#87919f)">Chat widget requires config and runtime.</div>';
8681
+ const backendUrl = runtime?.backendUrl;
8682
+ if (!backendUrl || !runtime) {
8683
+ container.innerHTML = '<div style="padding:16px;color:var(--sc-content-text-secondary-color,#87919f)">Chat widget requires runtime + backendUrl.</div>';
8216
8684
  return () => {
8217
8685
  container.innerHTML = "";
8218
8686
  };
8219
8687
  }
8220
- const baseUrl = chatbotConfig.backendUrl.replace(/\/$/, "");
8221
- const token = readSyntroToken();
8688
+ const baseUrl = backendUrl.replace(/\/$/, "");
8689
+ const token = readRuntimeToken(runtime);
8222
8690
  const streamUrl = `${baseUrl}/api/adaptive/stream`;
8223
8691
  const buildHeaders = (cft) => {
8224
8692
  const h = {};
8225
8693
  if (token) h.Authorization = `Bearer ${token}`;
8226
8694
  if (cft) h["CF-Turnstile-Token"] = cft;
8227
8695
  try {
8228
- const ph = window.posthog;
8229
- const did = ph?.get_distinct_id?.();
8696
+ const rt = runtime;
8697
+ const did = rt?.telemetry?.getDistinctId?.();
8230
8698
  if (typeof did === "string" && did.length > 0) {
8231
8699
  h["X-Distinct-Id"] = did;
8232
8700
  }
8701
+ const sid = rt?.telemetry?.getSessionId?.();
8702
+ if (typeof sid === "string" && sid.length > 0) {
8703
+ h["X-Syntro-Session"] = sid;
8704
+ }
8233
8705
  } catch {
8234
8706
  }
8235
8707
  return h;
@@ -8256,25 +8728,21 @@ var ChatAssistantLitMountable = {
8256
8728
  elementStore.scheduleClientTtl(response.session_expires_at);
8257
8729
  });
8258
8730
  const el = document.createElement("syntro-chat");
8259
- el.greeting = chatbotConfig.greeting;
8260
- if (chatbotConfig.suggestions) {
8731
+ el.greeting = chatbotConfig?.greeting;
8732
+ if (chatbotConfig?.suggestions) {
8261
8733
  el.suggestions = chatbotConfig.suggestions;
8262
8734
  }
8735
+ el.voiceInput = chatbotConfig?.voiceInput ?? false;
8263
8736
  el.style.cssText = "display:flex;flex-direction:column;height:100%;width:100%;";
8264
8737
  let transport = null;
8265
8738
  let hasSucceeded = false;
8266
8739
  let isUnmounted = false;
8267
8740
  let unsubscribe = null;
8268
- let failureTimer = null;
8269
8741
  let errorDebounceTimer = null;
8270
8742
  let fallbackRendered = false;
8271
8743
  let messagesSent = 0;
8272
8744
  let lastErrorPayload = null;
8273
8745
  const clearTimers = () => {
8274
- if (failureTimer) {
8275
- clearTimeout(failureTimer);
8276
- failureTimer = null;
8277
- }
8278
8746
  if (errorDebounceTimer) {
8279
8747
  clearTimeout(errorDebounceTimer);
8280
8748
  errorDebounceTimer = null;
@@ -8316,13 +8784,13 @@ var ChatAssistantLitMountable = {
8316
8784
  );
8317
8785
  transport?.disconnect();
8318
8786
  el.remove();
8319
- container.innerHTML = renderFallbackHtml(chatbotConfig.fallback);
8787
+ container.innerHTML = renderFallbackHtml(chatbotConfig?.fallback);
8320
8788
  };
8321
8789
  const setupTransport = (cftToken) => {
8322
8790
  if (isUnmounted) return;
8323
8791
  transport = new AgUiTransport({
8324
8792
  url: streamUrl,
8325
- headers: buildHeaders(cftToken),
8793
+ headers: () => buildHeaders(cftToken),
8326
8794
  // Adaptive runtime SDK needs the `syntro_chat_session` cookie to
8327
8795
  // round-trip cross-origin so subsequent boot fetches can rehydrate
8328
8796
  // LLM-authored UI elements. Editor / action-plan chat surfaces
@@ -8359,6 +8827,19 @@ var ChatAssistantLitMountable = {
8359
8827
  debug("transport event", { type: event.type, hasSucceeded, fallbackRendered });
8360
8828
  if (event.type === "error") {
8361
8829
  const errEvent = event;
8830
+ if (errEvent.code === "USAGE_LIMIT") {
8831
+ runtime.events.publish("chatbot.usage_limit_exhausted", {
8832
+ tileId: resolvedTileId,
8833
+ mountId,
8834
+ mountAgeMs: mountAgeMs(),
8835
+ messagesSentBeforeExhaust: messagesSent
8836
+ });
8837
+ if (!hasSucceeded) {
8838
+ hasSucceeded = true;
8839
+ debug("hasSucceeded transitioned to true via USAGE_LIMIT");
8840
+ }
8841
+ return;
8842
+ }
8362
8843
  lastErrorPayload = {
8363
8844
  message: errEvent.message,
8364
8845
  status: errEvent.status ?? null,
@@ -8491,4 +8972,4 @@ fast-json-patch/module/duplex.mjs:
8491
8972
  * MIT license
8492
8973
  *)
8493
8974
  */
8494
- //# sourceMappingURL=chunk-KUO67E2W.js.map
8975
+ //# sourceMappingURL=chunk-A3TIGA4G.js.map