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 CHANGED
@@ -1,6 +1,6 @@
1
1
  export default {
2
2
  "name": "veryfront",
3
- "version": "0.1.196",
3
+ "version": "0.1.197",
4
4
  "license": "Apache-2.0",
5
5
  "nodeModulesDir": "auto",
6
6
  "exclude": [
@@ -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;CAC9C,CAAC;AAEF,eAAO,MAAM,6BAA6B;;;;;;;;;;iBAUxC,CAAC;AAEH,eAAO,MAAM,0BAA0B;;;;;;;;iBAQrC,CAAC;AAiBH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BA+BpC,CAAC;AAEH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;EAmBlC,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCAgJ9B,CAAC;AAEH,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;AACpF,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAC5E,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AACxE,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AA8WhE,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CA+BzD;AAED,wBAAgB,+BAA+B,CAC7C,KAAK,GAAE;IACL,WAAW,CAAC,EAAE,MAAM,CAAC;CACjB,GACL,yBAAyB,CAQ3B;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,yBAAyB,EAChC,KAAK,EAAE,MAAM,GACZ,gBAAgB,CAoClB;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,yBAAyB,GAAG,gBAAgB,CAWpF"}
1
+ {"version":3,"file":"ag-ui.d.ts","sourceRoot":"","sources":["../../../src/src/chat/ag-ui.ts"],"names":[],"mappings":"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"}
@@ -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.196";
1
+ export declare const VERSION = "0.1.197";
2
2
  //# sourceMappingURL=version-constant.d.ts.map
@@ -1,3 +1,3 @@
1
1
  // Keep in sync with deno.json version.
2
2
  // scripts/release.ts updates this constant during releases.
3
- export const VERSION = "0.1.196";
3
+ export const VERSION = "0.1.197";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "veryfront",
3
- "version": "0.1.196",
3
+ "version": "0.1.197",
4
4
  "description": "The simplest way to build AI-powered apps",
5
5
  "keywords": [
6
6
  "react",
package/src/deno.js CHANGED
@@ -1,6 +1,6 @@
1
1
  export default {
2
2
  "name": "veryfront",
3
- "version": "0.1.196",
3
+ "version": "0.1.197",
4
4
  "license": "Apache-2.0",
5
5
  "nodeModulesDir": "auto",
6
6
  "exclude": [
@@ -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(frame: ParsedSseEvent): AgUiWireEvent | null {
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
  }
@@ -1,3 +1,3 @@
1
1
  // Keep in sync with deno.json version.
2
2
  // scripts/release.ts updates this constant during releases.
3
- export const VERSION = "0.1.196";
3
+ export const VERSION = "0.1.197";