veryfront 0.1.196 → 0.1.197
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/esm/deno.js +1 -1
- package/esm/src/chat/ag-ui.d.ts +11 -0
- package/esm/src/chat/ag-ui.d.ts.map +1 -1
- package/esm/src/chat/ag-ui.js +14 -2
- package/esm/src/utils/version-constant.d.ts +1 -1
- package/esm/src/utils/version-constant.js +1 -1
- package/package.json +1 -1
- package/src/deno.js +1 -1
- package/src/src/chat/ag-ui.ts +27 -2
- package/src/src/utils/version-constant.ts +1 -1
package/esm/deno.js
CHANGED
package/esm/src/chat/ag-ui.d.ts
CHANGED
|
@@ -18,12 +18,18 @@ export type AgUiDecodedChunk = {
|
|
|
18
18
|
events: AgUiDecodedEvent[];
|
|
19
19
|
remainder: string;
|
|
20
20
|
};
|
|
21
|
+
export type AgUiDecoderValidationMode = "permissive" | "strict";
|
|
21
22
|
export type AgUiChatEventDecoderState = {
|
|
22
23
|
remainder: string;
|
|
23
24
|
lastEventId: number;
|
|
24
25
|
toolCalls: Map<string, ToolCallState>;
|
|
25
26
|
reasoningFallbackIndex: number;
|
|
26
27
|
activeFallbackReasoningPartId: string | null;
|
|
28
|
+
validationMode: AgUiDecoderValidationMode;
|
|
29
|
+
onInvalidJson: ((details: {
|
|
30
|
+
eventName: string | null;
|
|
31
|
+
dataLength: number;
|
|
32
|
+
}) => void) | null;
|
|
27
33
|
};
|
|
28
34
|
export declare const AgUiRunFinishedMetadataSchema: z.ZodObject<{
|
|
29
35
|
provider: z.ZodOptional<z.ZodString>;
|
|
@@ -299,6 +305,11 @@ export type AgUiWireEvent = z.infer<typeof AgUiWireEventSchema>;
|
|
|
299
305
|
export declare function parseSseEvent(raw: string): ParsedSseEvent;
|
|
300
306
|
export declare function createAgUiChatEventDecoderState(input?: {
|
|
301
307
|
lastEventId?: number;
|
|
308
|
+
validationMode?: AgUiDecoderValidationMode;
|
|
309
|
+
onInvalidJson?: (details: {
|
|
310
|
+
eventName: string | null;
|
|
311
|
+
dataLength: number;
|
|
312
|
+
}) => void;
|
|
302
313
|
}): AgUiChatEventDecoderState;
|
|
303
314
|
export declare function decodeAgUiSseChunk(state: AgUiChatEventDecoderState, chunk: string): AgUiDecodedChunk;
|
|
304
315
|
export declare function flushAgUiSseChunk(state: AgUiChatEventDecoderState): AgUiDecodedChunk;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ag-ui.d.ts","sourceRoot":"","sources":["../../../src/src/chat/ag-ui.ts"],"names":[],"mappings":"AAAA,OAAO,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EAAoB,eAAe,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAcxB,KAAK,aAAa,GAAG;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,aAAa,CAAC;IACzB,UAAU,EAAE,eAAe,EAAE,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACtC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,6BAA6B,EAAE,MAAM,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"ag-ui.d.ts","sourceRoot":"","sources":["../../../src/src/chat/ag-ui.ts"],"names":[],"mappings":"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"}
|
package/esm/src/chat/ag-ui.js
CHANGED
|
@@ -361,7 +361,7 @@ function isCommentOnlySseFrame(raw) {
|
|
|
361
361
|
.split("\n")
|
|
362
362
|
.every((line) => line.trim().length === 0 || line.trimStart().startsWith(":"));
|
|
363
363
|
}
|
|
364
|
-
function parseAgUiWireEvent(frame) {
|
|
364
|
+
function parseAgUiWireEvent(frame, input) {
|
|
365
365
|
if (frame.data === "[DONE]" || !frame.event || !frame.data) {
|
|
366
366
|
return null;
|
|
367
367
|
}
|
|
@@ -374,6 +374,10 @@ function parseAgUiWireEvent(frame) {
|
|
|
374
374
|
payload = JSON.parse(frame.data);
|
|
375
375
|
}
|
|
376
376
|
catch {
|
|
377
|
+
input.onInvalidJson?.({
|
|
378
|
+
eventName: frame.event,
|
|
379
|
+
dataLength: frame.data.length,
|
|
380
|
+
});
|
|
377
381
|
return null;
|
|
378
382
|
}
|
|
379
383
|
if (!isRecord(payload)) {
|
|
@@ -383,6 +387,9 @@ function parseAgUiWireEvent(frame) {
|
|
|
383
387
|
eventName: eventName.data,
|
|
384
388
|
payload,
|
|
385
389
|
});
|
|
390
|
+
if (!parsed.success && input.validationMode === "strict") {
|
|
391
|
+
throw new Error(`Malformed AG-UI event payload for ${eventName.data}`);
|
|
392
|
+
}
|
|
386
393
|
return parsed.success ? parsed.data : null;
|
|
387
394
|
}
|
|
388
395
|
function mapWireEventToChatEvents(state, wireEvent) {
|
|
@@ -563,6 +570,8 @@ export function createAgUiChatEventDecoderState(input = {}) {
|
|
|
563
570
|
toolCalls: new Map(),
|
|
564
571
|
reasoningFallbackIndex: 0,
|
|
565
572
|
activeFallbackReasoningPartId: null,
|
|
573
|
+
validationMode: input.validationMode ?? "permissive",
|
|
574
|
+
onInvalidJson: input.onInvalidJson ?? null,
|
|
566
575
|
};
|
|
567
576
|
}
|
|
568
577
|
export function decodeAgUiSseChunk(state, chunk) {
|
|
@@ -581,7 +590,10 @@ export function decodeAgUiSseChunk(state, chunk) {
|
|
|
581
590
|
}
|
|
582
591
|
state.lastEventId = frame.id;
|
|
583
592
|
}
|
|
584
|
-
const wireEvent = parseAgUiWireEvent(frame
|
|
593
|
+
const wireEvent = parseAgUiWireEvent(frame, {
|
|
594
|
+
validationMode: state.validationMode,
|
|
595
|
+
onInvalidJson: state.onInvalidJson,
|
|
596
|
+
});
|
|
585
597
|
if (!wireEvent) {
|
|
586
598
|
continue;
|
|
587
599
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const VERSION = "0.1.
|
|
1
|
+
export declare const VERSION = "0.1.197";
|
|
2
2
|
//# sourceMappingURL=version-constant.d.ts.map
|
package/package.json
CHANGED
package/src/deno.js
CHANGED
package/src/src/chat/ag-ui.ts
CHANGED
|
@@ -37,12 +37,16 @@ export type AgUiDecodedChunk = {
|
|
|
37
37
|
remainder: string;
|
|
38
38
|
};
|
|
39
39
|
|
|
40
|
+
export type AgUiDecoderValidationMode = "permissive" | "strict";
|
|
41
|
+
|
|
40
42
|
export type AgUiChatEventDecoderState = {
|
|
41
43
|
remainder: string;
|
|
42
44
|
lastEventId: number;
|
|
43
45
|
toolCalls: Map<string, ToolCallState>;
|
|
44
46
|
reasoningFallbackIndex: number;
|
|
45
47
|
activeFallbackReasoningPartId: string | null;
|
|
48
|
+
validationMode: AgUiDecoderValidationMode;
|
|
49
|
+
onInvalidJson: ((details: { eventName: string | null; dataLength: number }) => void) | null;
|
|
46
50
|
};
|
|
47
51
|
|
|
48
52
|
export const AgUiRunFinishedMetadataSchema = z.object({
|
|
@@ -449,7 +453,13 @@ function isCommentOnlySseFrame(raw: string): boolean {
|
|
|
449
453
|
.every((line) => line.trim().length === 0 || line.trimStart().startsWith(":"));
|
|
450
454
|
}
|
|
451
455
|
|
|
452
|
-
function parseAgUiWireEvent(
|
|
456
|
+
function parseAgUiWireEvent(
|
|
457
|
+
frame: ParsedSseEvent,
|
|
458
|
+
input: {
|
|
459
|
+
validationMode: AgUiDecoderValidationMode;
|
|
460
|
+
onInvalidJson: ((details: { eventName: string | null; dataLength: number }) => void) | null;
|
|
461
|
+
},
|
|
462
|
+
): AgUiWireEvent | null {
|
|
453
463
|
if (frame.data === "[DONE]" || !frame.event || !frame.data) {
|
|
454
464
|
return null;
|
|
455
465
|
}
|
|
@@ -463,6 +473,10 @@ function parseAgUiWireEvent(frame: ParsedSseEvent): AgUiWireEvent | null {
|
|
|
463
473
|
try {
|
|
464
474
|
payload = JSON.parse(frame.data);
|
|
465
475
|
} catch {
|
|
476
|
+
input.onInvalidJson?.({
|
|
477
|
+
eventName: frame.event,
|
|
478
|
+
dataLength: frame.data.length,
|
|
479
|
+
});
|
|
466
480
|
return null;
|
|
467
481
|
}
|
|
468
482
|
|
|
@@ -475,6 +489,10 @@ function parseAgUiWireEvent(frame: ParsedSseEvent): AgUiWireEvent | null {
|
|
|
475
489
|
payload,
|
|
476
490
|
});
|
|
477
491
|
|
|
492
|
+
if (!parsed.success && input.validationMode === "strict") {
|
|
493
|
+
throw new Error(`Malformed AG-UI event payload for ${eventName.data}`);
|
|
494
|
+
}
|
|
495
|
+
|
|
478
496
|
return parsed.success ? parsed.data : null;
|
|
479
497
|
}
|
|
480
498
|
|
|
@@ -687,6 +705,8 @@ export function parseSseEvent(raw: string): ParsedSseEvent {
|
|
|
687
705
|
export function createAgUiChatEventDecoderState(
|
|
688
706
|
input: {
|
|
689
707
|
lastEventId?: number;
|
|
708
|
+
validationMode?: AgUiDecoderValidationMode;
|
|
709
|
+
onInvalidJson?: (details: { eventName: string | null; dataLength: number }) => void;
|
|
690
710
|
} = {},
|
|
691
711
|
): AgUiChatEventDecoderState {
|
|
692
712
|
return {
|
|
@@ -695,6 +715,8 @@ export function createAgUiChatEventDecoderState(
|
|
|
695
715
|
toolCalls: new Map<string, ToolCallState>(),
|
|
696
716
|
reasoningFallbackIndex: 0,
|
|
697
717
|
activeFallbackReasoningPartId: null,
|
|
718
|
+
validationMode: input.validationMode ?? "permissive",
|
|
719
|
+
onInvalidJson: input.onInvalidJson ?? null,
|
|
698
720
|
};
|
|
699
721
|
}
|
|
700
722
|
|
|
@@ -721,7 +743,10 @@ export function decodeAgUiSseChunk(
|
|
|
721
743
|
state.lastEventId = frame.id;
|
|
722
744
|
}
|
|
723
745
|
|
|
724
|
-
const wireEvent = parseAgUiWireEvent(frame
|
|
746
|
+
const wireEvent = parseAgUiWireEvent(frame, {
|
|
747
|
+
validationMode: state.validationMode,
|
|
748
|
+
onInvalidJson: state.onInvalidJson,
|
|
749
|
+
});
|
|
725
750
|
if (!wireEvent) {
|
|
726
751
|
continue;
|
|
727
752
|
}
|