@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.
- package/dist/AdaptiveChatBar.composer.test.d.ts +2 -0
- package/dist/AdaptiveChatBar.composer.test.d.ts.map +1 -0
- package/dist/AdaptiveChatBar.d.ts +140 -4
- package/dist/AdaptiveChatBar.d.ts.map +1 -1
- package/dist/AdaptiveChatBar.js +4 -3
- package/dist/AdaptiveChatBarMountable.d.ts +47 -0
- package/dist/AdaptiveChatBarMountable.d.ts.map +1 -1
- package/dist/AdaptiveChatTrail.anchor-scroll.test.d.ts +2 -0
- package/dist/AdaptiveChatTrail.anchor-scroll.test.d.ts.map +1 -0
- package/dist/AdaptiveChatTrail.d.ts +397 -5
- package/dist/AdaptiveChatTrail.d.ts.map +1 -1
- package/dist/AdaptiveChatTrail.js +6 -4
- package/dist/AdaptiveChatTrail.test.d.ts +2 -0
- package/dist/AdaptiveChatTrail.test.d.ts.map +1 -0
- package/dist/AdaptiveChipsStrip.d.ts +17 -11
- package/dist/AdaptiveChipsStrip.d.ts.map +1 -1
- package/dist/AdaptiveChipsStrip.js +2 -2
- package/dist/ChatAssistantLit.d.ts +5 -3
- package/dist/ChatAssistantLit.d.ts.map +1 -1
- package/dist/ChatAssistantLit.js +4 -3
- package/dist/ChatSession.d.ts +66 -5
- package/dist/ChatSession.d.ts.map +1 -1
- package/dist/ChatTransport.d.ts +107 -0
- package/dist/ChatTransport.d.ts.map +1 -1
- package/dist/InlineRegistryWidgetMount.test.d.ts +2 -0
- package/dist/InlineRegistryWidgetMount.test.d.ts.map +1 -0
- package/dist/InlineWidgetLiveMount.test.d.ts +2 -0
- package/dist/InlineWidgetLiveMount.test.d.ts.map +1 -0
- package/dist/NavLinkMountable.d.ts.map +1 -1
- package/dist/TextAnswerMountable.test.d.ts +2 -0
- package/dist/TextAnswerMountable.test.d.ts.map +1 -0
- package/dist/Turnstile.d.ts.map +1 -1
- package/dist/{chunk-KUO67E2W.js → chunk-A3TIGA4G.js} +718 -237
- package/dist/chunk-A3TIGA4G.js.map +7 -0
- package/dist/chunk-A7RBZLIX.js +1678 -0
- package/dist/chunk-A7RBZLIX.js.map +7 -0
- package/dist/{chunk-435KJD27.js → chunk-EACGDSJI.js} +46 -1
- package/dist/chunk-EACGDSJI.js.map +7 -0
- package/dist/chunk-EWPPVPJ4.js +14 -0
- package/dist/chunk-EWPPVPJ4.js.map +7 -0
- package/dist/chunk-FXHYE6FY.js +632 -0
- package/dist/chunk-FXHYE6FY.js.map +7 -0
- package/dist/{chunk-AUER7ZCK.js → chunk-OIGVZGSX.js} +11 -4
- package/dist/chunk-OIGVZGSX.js.map +7 -0
- package/dist/{chunk-UC4XU6GH.js → chunk-VZIUXXAM.js} +761 -52
- package/dist/chunk-VZIUXXAM.js.map +7 -0
- package/dist/elements/ActionHandler.d.ts +1 -1
- package/dist/elements/ActionHandler.d.ts.map +1 -1
- package/dist/elements/ElementInstanceStore.d.ts +62 -0
- package/dist/elements/ElementInstanceStore.d.ts.map +1 -1
- package/dist/elements/TileHandler.d.ts.map +1 -1
- package/dist/elements/TileHandler.test.d.ts +2 -0
- package/dist/elements/TileHandler.test.d.ts.map +1 -0
- package/dist/elements/__tests__/ElementInstanceStore.recall.test.d.ts +2 -0
- package/dist/elements/__tests__/ElementInstanceStore.recall.test.d.ts.map +1 -0
- package/dist/elements/fetcher.d.ts +8 -5
- package/dist/elements/fetcher.d.ts.map +1 -1
- package/dist/elements/index.d.ts +1 -0
- package/dist/elements/index.d.ts.map +1 -1
- package/dist/elements/store-singleton.d.ts +4 -0
- package/dist/elements/store-singleton.d.ts.map +1 -0
- package/dist/elements/types.d.ts +4 -0
- package/dist/elements/types.d.ts.map +1 -1
- package/dist/observer/__tests__/bus-translate.test.d.ts +16 -0
- package/dist/observer/__tests__/bus-translate.test.d.ts.map +1 -0
- package/dist/observer/__tests__/lifecycle.test.d.ts +2 -0
- package/dist/observer/__tests__/lifecycle.test.d.ts.map +1 -0
- package/dist/observer/__tests__/observer-enrich.test.d.ts +10 -0
- package/dist/observer/__tests__/observer-enrich.test.d.ts.map +1 -0
- package/dist/observer/allowlist.d.ts +5 -7
- package/dist/observer/allowlist.d.ts.map +1 -1
- package/dist/observer/bus-translate.d.ts +33 -0
- package/dist/observer/bus-translate.d.ts.map +1 -0
- package/dist/observer/index.d.ts +10 -1
- package/dist/observer/index.d.ts.map +1 -1
- package/dist/observer/queue.d.ts +6 -0
- package/dist/observer/queue.d.ts.map +1 -1
- package/dist/observer/transport.d.ts +1 -0
- package/dist/observer/transport.d.ts.map +1 -1
- package/dist/personas.d.ts +30 -0
- package/dist/personas.d.ts.map +1 -0
- package/dist/runtime.d.ts +2 -0
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +860 -137
- package/dist/runtime.js.map +4 -4
- package/dist/schema.d.ts +363 -67
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +176 -3
- package/dist/schema.js.map +2 -2
- package/dist/test/setup.d.ts +1 -0
- package/dist/test/setup.d.ts.map +1 -0
- package/dist/types.d.ts +25 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +5 -1
- package/dist/chunk-435KJD27.js.map +0 -7
- package/dist/chunk-AUER7ZCK.js.map +0 -7
- package/dist/chunk-DOMEUJR7.js +0 -382
- package/dist/chunk-DOMEUJR7.js.map +0 -7
- package/dist/chunk-KUO67E2W.js.map +0 -7
- package/dist/chunk-QELVKBQV.js +0 -214
- package/dist/chunk-QELVKBQV.js.map +0 -7
- 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-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
6275
|
+
function O() {
|
|
6168
6276
|
return v4_default();
|
|
6169
6277
|
}
|
|
6170
|
-
function
|
|
6171
|
-
if (Object.freeze(e), typeof e == `object` && e) for (let t of Object.values(e)) typeof t == `object` && t && !Object.isFrozen(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
|
|
6175
|
-
let i = typeof process < `u` && process.env !== void 0, a = i && false, o = i && false, s =
|
|
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 && (
|
|
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 =
|
|
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) ?
|
|
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
|
|
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
|
|
6197
|
-
if (e instanceof
|
|
6198
|
-
if (e === true) return new
|
|
6304
|
+
function M(e) {
|
|
6305
|
+
if (e instanceof N) return e;
|
|
6306
|
+
if (e === true) return new N(j(true));
|
|
6199
6307
|
}
|
|
6200
|
-
var
|
|
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
|
|
6221
|
-
return e.enabled ? new
|
|
6328
|
+
function P(e) {
|
|
6329
|
+
return e.enabled ? new N(e) : void 0;
|
|
6222
6330
|
}
|
|
6223
|
-
function
|
|
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
|
|
6235
|
-
let c =
|
|
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 =
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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 =
|
|
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
|
|
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
|
|
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
|
|
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)
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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:
|
|
6355
|
-
a === -1 ? (l.push(t3), o3 = t3) : s2 ? c2 && (l[a] = { ...s2, activityType: i.activityType, content:
|
|
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
|
|
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 =
|
|
6367
|
-
l[o2] = { ...c2, content:
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
6465
|
-
let r =
|
|
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
|
|
6662
|
+
var L = (function(e) {
|
|
6547
6663
|
return e.HEADERS = `headers`, e.DATA = `data`, e;
|
|
6548
6664
|
})({});
|
|
6549
|
-
var
|
|
6665
|
+
var R = (e) => defer(() => from(e())).pipe(switchMap((e2) => {
|
|
6550
6666
|
if (!e2.ok) {
|
|
6551
|
-
let
|
|
6667
|
+
let t2 = e2.headers.get(`content-type`) || ``;
|
|
6552
6668
|
return from(e2.text()).pipe(mergeMap((n2) => {
|
|
6553
6669
|
let r = n2;
|
|
6554
|
-
if (
|
|
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
|
|
6563
|
-
return n ? new Observable((e3) => (e3.next(
|
|
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:
|
|
6567
|
-
if (
|
|
6568
|
-
let i = { type:
|
|
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 (
|
|
6573
|
-
e3.error(
|
|
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
|
|
6582
|
-
let n =
|
|
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 !==
|
|
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
|
|
6724
|
+
var B = (e) => {
|
|
6609
6725
|
let t = new Subject(), n = new Uint8Array();
|
|
6610
6726
|
e.subscribe({ next: (e2) => {
|
|
6611
|
-
if (e2.type !==
|
|
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
|
|
6640
|
-
let n =
|
|
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 ===
|
|
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 ?
|
|
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
|
|
6667
|
-
var
|
|
6668
|
-
var
|
|
6669
|
-
var
|
|
6670
|
-
var
|
|
6671
|
-
var
|
|
6672
|
-
var
|
|
6673
|
-
var
|
|
6674
|
-
var
|
|
6675
|
-
var
|
|
6676
|
-
var
|
|
6677
|
-
var
|
|
6678
|
-
|
|
6679
|
-
var
|
|
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
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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 =
|
|
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 =
|
|
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
|
-
|
|
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 =
|
|
6895
|
-
return
|
|
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:
|
|
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
|
|
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
|
|
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
|
|
7035
|
+
var J = class extends K {
|
|
6917
7036
|
run(e, t) {
|
|
6918
|
-
let { parentRunId: n, ...r } = e, i = { ...r, messages: r.messages.map(
|
|
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
|
|
6923
|
-
var
|
|
6924
|
-
var
|
|
6925
|
-
var
|
|
6926
|
-
var
|
|
6927
|
-
var
|
|
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
|
|
6940
|
-
this.currentReasoningId =
|
|
7058
|
+
case Y: {
|
|
7059
|
+
this.currentReasoningId = O();
|
|
6941
7060
|
let { title: t, ...n } = e;
|
|
6942
|
-
return this.warnAboutTransformation(
|
|
7061
|
+
return this.warnAboutTransformation(Y, EventType.REASONING_START), { ...n, type: EventType.REASONING_START, messageId: this.currentReasoningId };
|
|
6943
7062
|
}
|
|
6944
|
-
case
|
|
6945
|
-
return this.currentMessageId =
|
|
6946
|
-
case
|
|
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(
|
|
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
|
|
6951
|
-
let t = this.currentMessageId ??
|
|
6952
|
-
return this.warnAboutTransformation(
|
|
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
|
|
6955
|
-
let t = this.currentReasoningId ??
|
|
6956
|
-
return this.warnAboutTransformation(
|
|
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
|
|
7082
|
+
function De(e) {
|
|
6964
7083
|
return e.startsWith(`image/`) ? `image` : e.startsWith(`audio/`) ? `audio` : e.startsWith(`video/`) ? `video` : `document`;
|
|
6965
7084
|
}
|
|
6966
|
-
function
|
|
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
|
|
6970
|
-
let t =
|
|
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
|
|
7092
|
+
function Ae(e) {
|
|
6974
7093
|
let t = e.content;
|
|
6975
7094
|
if (!Array.isArray(t)) return e;
|
|
6976
|
-
let n = t.map((e2) =>
|
|
7095
|
+
let n = t.map((e2) => Oe(e2) ? ke(e2) : e2);
|
|
6977
7096
|
return { ...e, content: n };
|
|
6978
7097
|
}
|
|
6979
|
-
var
|
|
7098
|
+
var je = class extends K {
|
|
6980
7099
|
run(e, t) {
|
|
6981
|
-
let n = { ...e, messages: e.messages.map(
|
|
7100
|
+
let n = { ...e, messages: e.messages.map(Ae) };
|
|
6982
7101
|
return this.runNext(n, t);
|
|
6983
7102
|
}
|
|
6984
7103
|
};
|
|
6985
|
-
var
|
|
6986
|
-
var
|
|
7104
|
+
var Me = `0.0.55`;
|
|
7105
|
+
var Ne = class {
|
|
6987
7106
|
get maxVersion() {
|
|
6988
|
-
return
|
|
7107
|
+
return Me;
|
|
6989
7108
|
}
|
|
6990
7109
|
get debug() {
|
|
6991
7110
|
return this._debug;
|
|
6992
7111
|
}
|
|
6993
7112
|
set debug(e) {
|
|
6994
|
-
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 ?
|
|
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 =
|
|
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
|
|
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),
|
|
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 =
|
|
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),
|
|
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 =
|
|
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
|
|
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 =
|
|
7082
|
-
return { threadId: this.threadId, runId: t?.runId || v4_default(), tools:
|
|
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
|
-
|
|
7086
|
-
|
|
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
|
-
})),
|
|
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(
|
|
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
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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),
|
|
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
|
|
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 =
|
|
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
|
|
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 =
|
|
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
|
|
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
|
|
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 =
|
|
7303
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
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
|
-
{
|
|
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)
|
|
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
|
|
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
|
-
|
|
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
|
|
7822
|
-
if (typeof
|
|
7823
|
-
const
|
|
7824
|
-
return
|
|
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
|
|
8142
|
-
|
|
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
|
-
|
|
8215
|
-
|
|
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 =
|
|
8221
|
-
const token =
|
|
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
|
|
8229
|
-
const did =
|
|
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
|
|
8260
|
-
if (chatbotConfig
|
|
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
|
|
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-
|
|
8975
|
+
//# sourceMappingURL=chunk-A3TIGA4G.js.map
|