@agentskit/chat-protocol 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -13,4 +13,9 @@ The package transports snapshots of canonical AgentsKit state. It does not imple
13
13
 
14
14
  It also owns the accepted versioned site-config, local-knowledge, and unified-answer envelopes used by the deterministic answer plane. Decode untrusted data with `decodeDeterministicSiteConfig` and `decodeAnswerResponse`; cryptographically verify local artifacts with `verifyLocalKnowledgeArtifact`. See the [deterministic answer guide](../../docs/protocol/deterministic-answers.md).
15
15
 
16
+ The package also validates the additive Ask request, trusted backend site
17
+ configuration, grounded sources, CAS session records, typed diagnostics,
18
+ usage, and privacy-safe metrics used by `createAskServiceHandler`. See the
19
+ [backend guide](../../docs/backend.md).
20
+
16
21
  For one canonical assistant message containing both streamed prose and registered application components, use `createAssistantContentEncoder` and decode with `decodeAssistantContent`. Every text chunk must pass through the encoder; raw model output must never be appended to the envelope. See the [v1 protocol guide](../../docs/protocol/v1.md#ordered-assistant-content).
package/dist/index.cjs CHANGED
@@ -24,6 +24,11 @@ __export(index_exports, {
24
24
  ANSWER_MAX_SUGGESTIONS: () => ANSWER_MAX_SUGGESTIONS,
25
25
  ANSWER_PROTOCOL: () => ANSWER_PROTOCOL,
26
26
  ANSWER_PROTOCOL_VERSION: () => ANSWER_PROTOCOL_VERSION,
27
+ ASK_BACKEND_MAX_MESSAGES: () => ASK_BACKEND_MAX_MESSAGES,
28
+ ASK_BACKEND_MAX_MESSAGE_CHARS: () => ASK_BACKEND_MAX_MESSAGE_CHARS,
29
+ ASK_BACKEND_MAX_SOURCES: () => ASK_BACKEND_MAX_SOURCES,
30
+ ASK_BACKEND_PROTOCOL: () => ASK_BACKEND_PROTOCOL,
31
+ ASK_BACKEND_PROTOCOL_VERSION: () => ASK_BACKEND_PROTOCOL_VERSION,
27
32
  ASK_EVENT_MAX_BYTES: () => ASK_EVENT_MAX_BYTES,
28
33
  ASK_EVENT_MAX_RECORDS: () => ASK_EVENT_MAX_RECORDS,
29
34
  ASK_SERVICE_PROTOCOL_VERSION: () => ASK_SERVICE_PROTOCOL_VERSION,
@@ -36,6 +41,15 @@ __export(index_exports, {
36
41
  AnswerConfidenceSchema: () => AnswerConfidenceSchema,
37
42
  AnswerResponseSchema: () => AnswerResponseSchema,
38
43
  AnswerSuggestionSchema: () => AnswerSuggestionSchema,
44
+ AskBackendDiagnosticSchema: () => AskBackendDiagnosticSchema,
45
+ AskBackendMessageSchema: () => AskBackendMessageSchema,
46
+ AskBackendMetricNameSchema: () => AskBackendMetricNameSchema,
47
+ AskBackendMetricSchema: () => AskBackendMetricSchema,
48
+ AskBackendRequestSchema: () => AskBackendRequestSchema,
49
+ AskBackendSessionRecordSchema: () => AskBackendSessionRecordSchema,
50
+ AskBackendSiteConfigSchema: () => AskBackendSiteConfigSchema,
51
+ AskBackendSourceSchema: () => AskBackendSourceSchema,
52
+ AskBackendUsageSchema: () => AskBackendUsageSchema,
39
53
  AskEventSchema: () => AskEventSchema,
40
54
  AssistantComponentPartSchema: () => AssistantComponentPartSchema,
41
55
  AssistantContentPartSchema: () => AssistantContentPartSchema,
@@ -93,7 +107,7 @@ __export(index_exports, {
93
107
  module.exports = __toCommonJS(index_exports);
94
108
  var import_core = require("@agentskit/core");
95
109
  var import_memory_validation = require("@agentskit/core/memory-validation");
96
- var import_zod3 = require("zod");
110
+ var import_zod4 = require("zod");
97
111
 
98
112
  // src/ask.ts
99
113
  var import_zod = require("zod");
@@ -105,7 +119,12 @@ var AskEventSchema = import_zod.z.discriminatedUnion("type", [
105
119
  import_zod.z.object({ type: import_zod.z.literal("text"), delta: import_zod.z.string().max(ASK_EVENT_MAX_BYTES) }).strict(),
106
120
  import_zod.z.object({ type: import_zod.z.literal("tool"), id: import_zod.z.string().max(256), name: import_zod.z.string().max(128), args: AskArgsSchema }).strict(),
107
121
  import_zod.z.object({ type: import_zod.z.literal("done"), model: import_zod.z.string().max(256).optional() }).strict(),
108
- import_zod.z.object({ type: import_zod.z.literal("error"), message: import_zod.z.string().min(1).max(4096) }).strict()
122
+ import_zod.z.object({
123
+ type: import_zod.z.literal("error"),
124
+ message: import_zod.z.string().min(1).max(4096),
125
+ code: import_zod.z.string().regex(/^[A-Z][A-Z0-9_]{0,127}$/).optional(),
126
+ retryable: import_zod.z.boolean().optional()
127
+ }).strict()
109
128
  ]);
110
129
  var byteLength = (value) => new TextEncoder().encode(value).byteLength;
111
130
  function decodeAskEvents(buffer) {
@@ -135,6 +154,9 @@ function decodeAskEvents(buffer) {
135
154
  return { events: Object.freeze(events), rest: discardedPartial ? "" : partial, discardedPartial };
136
155
  }
137
156
 
157
+ // src/backend.ts
158
+ var import_zod3 = require("zod");
159
+
138
160
  // src/deterministic.ts
139
161
  var import_sha2 = require("@noble/hashes/sha2.js");
140
162
  var import_utils = require("@noble/hashes/utils.js");
@@ -405,6 +427,128 @@ var verifyLocalKnowledgeArtifactSync = (input, options) => {
405
427
  var verifyLocalKnowledgeArtifact = async (input, options) => verifyLocalKnowledgeArtifactSync(input, options);
406
428
  var decodeAnswerResponse = (input) => parseBoundedInput(input, AnswerResponseSchema, ANSWER_PROTOCOL, ANSWER_PROTOCOL_VERSION, 262144);
407
429
 
430
+ // src/backend.ts
431
+ var ASK_BACKEND_PROTOCOL = "agentskit.chat.ask";
432
+ var ASK_BACKEND_PROTOCOL_VERSION = 1;
433
+ var ASK_BACKEND_MAX_MESSAGES = 64;
434
+ var ASK_BACKEND_MAX_MESSAGE_CHARS = 16384;
435
+ var ASK_BACKEND_MAX_SOURCES = 8;
436
+ var SafeIdentifierSchema2 = import_zod3.z.string().regex(/^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/);
437
+ var SafeLabelSchema = import_zod3.z.string().trim().min(1).max(256);
438
+ var SafeHrefSchema2 = import_zod3.z.string().min(1).max(2048).refine((value) => {
439
+ if (/[\u0000-\u001F\u007F\\]/u.test(value) || value.startsWith("//")) return false;
440
+ if (!/^[A-Za-z][A-Za-z0-9+.-]*:/.test(value)) return /^\/(?!\/)/.test(value);
441
+ try {
442
+ const url = new URL(value);
443
+ return (url.protocol === "http:" || url.protocol === "https:") && url.username === "" && url.password === "";
444
+ } catch {
445
+ return false;
446
+ }
447
+ }, "Source must use a safe relative, HTTP, or HTTPS URL.");
448
+ var AskBackendMessageSchema = import_zod3.z.object({
449
+ role: import_zod3.z.enum(["user", "assistant"]),
450
+ content: import_zod3.z.string().max(ASK_BACKEND_MAX_MESSAGE_CHARS)
451
+ }).strict().readonly();
452
+ var DeterministicEscalationSchema = AnswerResponseSchema.refine(
453
+ (value) => value.outcome === "escalation",
454
+ "Deterministic context must be an escalation."
455
+ );
456
+ var AskBackendRequestSchema = import_zod3.z.object({
457
+ protocol: import_zod3.z.literal(ASK_BACKEND_PROTOCOL).optional(),
458
+ version: import_zod3.z.literal(ASK_BACKEND_PROTOCOL_VERSION).optional(),
459
+ sessionId: SafeIdentifierSchema2.optional(),
460
+ messages: import_zod3.z.array(AskBackendMessageSchema).min(1).max(ASK_BACKEND_MAX_MESSAGES).readonly(),
461
+ deterministic: DeterministicEscalationSchema.optional()
462
+ }).strict().readonly();
463
+ var AskBackendSourceSchema = import_zod3.z.object({
464
+ id: SafeIdentifierSchema2,
465
+ title: SafeLabelSchema,
466
+ href: SafeHrefSchema2,
467
+ excerpt: import_zod3.z.string().trim().min(1).max(4096)
468
+ }).strict().readonly();
469
+ var AskBackendSiteConfigSchema = import_zod3.z.object({
470
+ protocol: import_zod3.z.literal("agentskit.chat.backend-site"),
471
+ version: import_zod3.z.literal(1),
472
+ siteId: SafeIdentifierSchema2,
473
+ assistant: import_zod3.z.object({
474
+ id: SafeIdentifierSchema2,
475
+ name: SafeLabelSchema,
476
+ suggestions: import_zod3.z.array(SafeLabelSchema).max(8).readonly()
477
+ }).strict().readonly(),
478
+ corpus: import_zod3.z.object({
479
+ id: SafeIdentifierSchema2,
480
+ mode: import_zod3.z.enum(["local", "federated"])
481
+ }).strict().readonly(),
482
+ components: import_zod3.z.array(SafeIdentifierSchema2).max(64).readonly(),
483
+ actions: import_zod3.z.array(SafeIdentifierSchema2).max(64).readonly(),
484
+ limits: import_zod3.z.object({
485
+ requestTimeoutMs: import_zod3.z.number().int().min(100).max(12e4),
486
+ retrievalTimeoutMs: import_zod3.z.number().int().min(100).max(6e4),
487
+ generationTimeoutMs: import_zod3.z.number().int().min(100).max(12e4),
488
+ maxSources: import_zod3.z.number().int().min(1).max(ASK_BACKEND_MAX_SOURCES)
489
+ }).strict().readonly(),
490
+ persistence: import_zod3.z.object({ mode: import_zod3.z.enum(["required", "disabled"]) }).strict().readonly()
491
+ }).strict().readonly();
492
+ var AskBackendUsageSchema = import_zod3.z.object({
493
+ inputTokens: import_zod3.z.number().int().nonnegative().optional(),
494
+ outputTokens: import_zod3.z.number().int().nonnegative().optional(),
495
+ totalTokens: import_zod3.z.number().int().nonnegative().optional(),
496
+ costUsd: import_zod3.z.number().nonnegative().finite().optional(),
497
+ model: import_zod3.z.string().trim().min(1).max(256).optional()
498
+ }).strict().readonly();
499
+ var AskBackendSessionRecordSchema = import_zod3.z.object({
500
+ revision: import_zod3.z.number().int().nonnegative(),
501
+ messages: import_zod3.z.array(AskBackendMessageSchema).max(ASK_BACKEND_MAX_MESSAGES).readonly()
502
+ }).strict().readonly();
503
+ var AskBackendDiagnosticSchema = import_zod3.z.object({
504
+ code: import_zod3.z.enum([
505
+ "ASK_INVALID_REQUEST",
506
+ "ASK_UNAUTHORIZED",
507
+ "ASK_FORBIDDEN",
508
+ "ASK_RATE_LIMITED",
509
+ "ASK_TIMEOUT",
510
+ "ASK_CANCELLED",
511
+ "ASK_RETRIEVAL_FAILED",
512
+ "ASK_NO_GROUNDED_SOURCES",
513
+ "ASK_GENERATION_FAILED",
514
+ "ASK_PERSISTENCE_CONFLICT",
515
+ "ASK_INTERNAL"
516
+ ]),
517
+ message: import_zod3.z.string().trim().min(1).max(4096),
518
+ retryable: import_zod3.z.boolean()
519
+ }).strict().readonly();
520
+ var AskBackendMetricNameSchema = import_zod3.z.enum([
521
+ "request.total_ms",
522
+ "stream.first_event_ms",
523
+ "stream.first_token_ms",
524
+ "stream.bytes",
525
+ "stream.events",
526
+ "stream.snapshots",
527
+ "deterministic.fallback",
528
+ "retrieval.total_ms",
529
+ "retrieval.documents",
530
+ "persistence.total_ms",
531
+ "cancellation.count",
532
+ "conflict.count",
533
+ "error.count",
534
+ "usage.input_tokens",
535
+ "usage.output_tokens",
536
+ "usage.total_tokens",
537
+ "cost.usd"
538
+ ]);
539
+ var AskBackendMetricSchema = import_zod3.z.object({
540
+ protocol: import_zod3.z.literal("agentskit.chat.backend-metric"),
541
+ version: import_zod3.z.literal(1),
542
+ name: AskBackendMetricNameSchema,
543
+ siteId: SafeIdentifierSchema2,
544
+ corpusId: SafeIdentifierSchema2,
545
+ requestId: SafeIdentifierSchema2,
546
+ value: import_zod3.z.number().finite().nonnegative(),
547
+ unit: import_zod3.z.enum(["ms", "bytes", "count", "tokens", "usd"]),
548
+ outcome: import_zod3.z.enum(["ok", "rejected", "cancelled", "error"]),
549
+ emittedAt: import_zod3.z.string().datetime({ offset: true })
550
+ }).strict().readonly();
551
+
408
552
  // src/index.ts
409
553
  var isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
410
554
  var isBoundedJsonValue = (input) => {
@@ -441,46 +585,46 @@ var ASSISTANT_CONTENT_PREFIX = `${ASSISTANT_CONTENT_PROTOCOL}/${ASSISTANT_CONTE
441
585
  var ASSISTANT_CONTENT_PREFIX_ROOT = `${ASSISTANT_CONTENT_PROTOCOL}/`;
442
586
  var ASSISTANT_CONTENT_MAX_BYTES = 262144;
443
587
  var ASSISTANT_CONTENT_MAX_RECORDS = 512;
444
- var ComponentKeySchema = import_zod3.z.string().regex(/^[a-z][a-z0-9-]{0,63}$/);
445
- var ComponentFallbackSchema = import_zod3.z.object({
446
- kind: import_zod3.z.string().min(1).max(64),
447
- summary: import_zod3.z.string().min(1).max(4096)
588
+ var ComponentKeySchema = import_zod4.z.string().regex(/^[a-z][a-z0-9-]{0,63}$/);
589
+ var ComponentFallbackSchema = import_zod4.z.object({
590
+ kind: import_zod4.z.string().min(1).max(64),
591
+ summary: import_zod4.z.string().min(1).max(4096)
448
592
  }).readonly();
449
- var ComponentRenderFrameSchema = import_zod3.z.object({
450
- protocol: import_zod3.z.literal(COMPONENT_PROTOCOL),
451
- version: import_zod3.z.literal(COMPONENT_PROTOCOL_VERSION),
452
- type: import_zod3.z.literal("render"),
593
+ var ComponentRenderFrameSchema = import_zod4.z.object({
594
+ protocol: import_zod4.z.literal(COMPONENT_PROTOCOL),
595
+ version: import_zod4.z.literal(COMPONENT_PROTOCOL_VERSION),
596
+ type: import_zod4.z.literal("render"),
453
597
  componentKey: ComponentKeySchema,
454
- instanceId: import_zod3.z.string().regex(/^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/),
455
- props: import_zod3.z.unknown().refine(isBoundedJsonValue),
598
+ instanceId: import_zod4.z.string().regex(/^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/),
599
+ props: import_zod4.z.unknown().refine(isBoundedJsonValue),
456
600
  fallback: ComponentFallbackSchema
457
601
  }).readonly();
458
- var ComponentSelectionEventSchema = import_zod3.z.object({
459
- protocol: import_zod3.z.literal(COMPONENT_PROTOCOL),
460
- version: import_zod3.z.literal(COMPONENT_PROTOCOL_VERSION),
461
- type: import_zod3.z.literal("select"),
602
+ var ComponentSelectionEventSchema = import_zod4.z.object({
603
+ protocol: import_zod4.z.literal(COMPONENT_PROTOCOL),
604
+ version: import_zod4.z.literal(COMPONENT_PROTOCOL_VERSION),
605
+ type: import_zod4.z.literal("select"),
462
606
  componentKey: ComponentKeySchema,
463
- instanceId: import_zod3.z.string().regex(/^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/),
464
- choiceId: import_zod3.z.string().regex(/^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/)
607
+ instanceId: import_zod4.z.string().regex(/^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/),
608
+ choiceId: import_zod4.z.string().regex(/^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/)
465
609
  }).readonly();
466
- var ComponentInteractionEventSchema = import_zod3.z.object({
467
- protocol: import_zod3.z.literal(COMPONENT_PROTOCOL),
468
- version: import_zod3.z.literal(COMPONENT_PROTOCOL_VERSION),
469
- type: import_zod3.z.literal("interact"),
610
+ var ComponentInteractionEventSchema = import_zod4.z.object({
611
+ protocol: import_zod4.z.literal(COMPONENT_PROTOCOL),
612
+ version: import_zod4.z.literal(COMPONENT_PROTOCOL_VERSION),
613
+ type: import_zod4.z.literal("interact"),
470
614
  componentKey: ComponentKeySchema,
471
- instanceId: import_zod3.z.string().regex(/^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/),
472
- event: import_zod3.z.string().regex(/^[a-z][a-z0-9-]{0,63}$/),
473
- value: import_zod3.z.unknown().refine(isBoundedJsonValue).optional()
615
+ instanceId: import_zod4.z.string().regex(/^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/),
616
+ event: import_zod4.z.string().regex(/^[a-z][a-z0-9-]{0,63}$/),
617
+ value: import_zod4.z.unknown().refine(isBoundedJsonValue).optional()
474
618
  }).readonly();
475
- var AssistantTextPartSchema = import_zod3.z.object({
476
- kind: import_zod3.z.literal("text"),
477
- text: import_zod3.z.string().min(1).max(16384)
619
+ var AssistantTextPartSchema = import_zod4.z.object({
620
+ kind: import_zod4.z.literal("text"),
621
+ text: import_zod4.z.string().min(1).max(16384)
478
622
  }).readonly();
479
- var AssistantComponentPartSchema = import_zod3.z.object({
480
- kind: import_zod3.z.literal("component"),
623
+ var AssistantComponentPartSchema = import_zod4.z.object({
624
+ kind: import_zod4.z.literal("component"),
481
625
  frame: ComponentRenderFrameSchema
482
626
  }).readonly();
483
- var AssistantContentPartSchema = import_zod3.z.discriminatedUnion("kind", [AssistantTextPartSchema, AssistantComponentPartSchema]);
627
+ var AssistantContentPartSchema = import_zod4.z.discriminatedUnion("kind", [AssistantTextPartSchema, AssistantComponentPartSchema]);
484
628
  var createAssistantContentEncoder = () => {
485
629
  let started = false;
486
630
  return {
@@ -602,63 +746,63 @@ var createInteractionEvent = (frame, event, value) => ComponentInteractionEventS
602
746
  event,
603
747
  ...value === void 0 ? {} : { value }
604
748
  });
605
- var TokenUsageSchema = import_zod3.z.object({
606
- promptTokens: import_zod3.z.number().int().nonnegative(),
607
- completionTokens: import_zod3.z.number().int().nonnegative(),
608
- totalTokens: import_zod3.z.number().int().nonnegative()
749
+ var TokenUsageSchema = import_zod4.z.object({
750
+ promptTokens: import_zod4.z.number().int().nonnegative(),
751
+ completionTokens: import_zod4.z.number().int().nonnegative(),
752
+ totalTokens: import_zod4.z.number().int().nonnegative()
609
753
  });
610
- var TurnDiagnosticSchema = import_zod3.z.object({
611
- version: import_zod3.z.literal(1),
612
- code: import_zod3.z.string().regex(/^[A-Z][A-Z0-9_]*$/),
613
- message: import_zod3.z.string().min(1),
614
- retryable: import_zod3.z.boolean()
754
+ var TurnDiagnosticSchema = import_zod4.z.object({
755
+ version: import_zod4.z.literal(1),
756
+ code: import_zod4.z.string().regex(/^[A-Z][A-Z0-9_]*$/),
757
+ message: import_zod4.z.string().min(1),
758
+ retryable: import_zod4.z.boolean()
615
759
  });
616
- var SafeIdentifierSchema2 = import_zod3.z.string().regex(/^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/);
760
+ var SafeIdentifierSchema3 = import_zod4.z.string().regex(/^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/);
617
761
  var EnvelopeFields = {
618
- protocol: import_zod3.z.literal(TURN_PROTOCOL),
619
- version: import_zod3.z.literal(TURN_PROTOCOL_VERSION),
620
- eventId: import_zod3.z.string().regex(/^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/),
621
- sessionId: import_zod3.z.string().regex(/^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/),
622
- turnId: import_zod3.z.string().regex(/^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/),
623
- sequence: import_zod3.z.number().int().nonnegative(),
624
- emittedAt: import_zod3.z.string().datetime({ offset: true })
762
+ protocol: import_zod4.z.literal(TURN_PROTOCOL),
763
+ version: import_zod4.z.literal(TURN_PROTOCOL_VERSION),
764
+ eventId: import_zod4.z.string().regex(/^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/),
765
+ sessionId: import_zod4.z.string().regex(/^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/),
766
+ turnId: import_zod4.z.string().regex(/^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/),
767
+ sequence: import_zod4.z.number().int().nonnegative(),
768
+ emittedAt: import_zod4.z.string().datetime({ offset: true })
625
769
  };
626
- var MemoryMessagesSchema = import_zod3.z.array(import_zod3.z.unknown()).transform((messages, context) => {
770
+ var MemoryMessagesSchema = import_zod4.z.array(import_zod4.z.unknown()).transform((messages, context) => {
627
771
  try {
628
772
  return (0, import_memory_validation.validateMemoryRecord)({ version: 1, messages }).messages;
629
773
  } catch {
630
774
  context.addIssue({ code: "custom", message: "Messages are not a valid AgentsKit memory record." });
631
- return import_zod3.z.NEVER;
775
+ return import_zod4.z.NEVER;
632
776
  }
633
777
  });
634
- var TurnLineageSchema = import_zod3.z.discriminatedUnion("operation", [
635
- import_zod3.z.object({ operation: import_zod3.z.literal("submit") }),
636
- import_zod3.z.object({ operation: import_zod3.z.enum(["retry", "edit", "regenerate"]), parentTurnId: SafeIdentifierSchema2, sourceMessageId: SafeIdentifierSchema2 })
778
+ var TurnLineageSchema = import_zod4.z.discriminatedUnion("operation", [
779
+ import_zod4.z.object({ operation: import_zod4.z.literal("submit") }),
780
+ import_zod4.z.object({ operation: import_zod4.z.enum(["retry", "edit", "regenerate"]), parentTurnId: SafeIdentifierSchema3, sourceMessageId: SafeIdentifierSchema3 })
637
781
  ]);
638
- var SubmitEventSchema = import_zod3.z.object({
782
+ var SubmitEventSchema = import_zod4.z.object({
639
783
  ...EnvelopeFields,
640
- event: import_zod3.z.literal("client.turn.submit"),
641
- payload: import_zod3.z.object({
642
- input: import_zod3.z.string().min(1).refine((value) => value.trim().length > 0)
784
+ event: import_zod4.z.literal("client.turn.submit"),
785
+ payload: import_zod4.z.object({
786
+ input: import_zod4.z.string().min(1).refine((value) => value.trim().length > 0)
643
787
  })
644
788
  });
645
- var SnapshotEventSchema = import_zod3.z.object({
789
+ var SnapshotEventSchema = import_zod4.z.object({
646
790
  ...EnvelopeFields,
647
- event: import_zod3.z.literal("server.turn.snapshot"),
648
- payload: import_zod3.z.object({
791
+ event: import_zod4.z.literal("server.turn.snapshot"),
792
+ payload: import_zod4.z.object({
649
793
  messages: MemoryMessagesSchema,
650
- status: import_zod3.z.enum(["idle", "streaming", "complete", "error"]),
794
+ status: import_zod4.z.enum(["idle", "streaming", "complete", "error"]),
651
795
  usage: TokenUsageSchema,
652
796
  error: TurnDiagnosticSchema.optional(),
653
797
  lineage: TurnLineageSchema.optional()
654
798
  })
655
799
  });
656
- var DiagnosticEventSchema = import_zod3.z.object({
800
+ var DiagnosticEventSchema = import_zod4.z.object({
657
801
  ...EnvelopeFields,
658
- event: import_zod3.z.literal("server.turn.diagnostic"),
802
+ event: import_zod4.z.literal("server.turn.diagnostic"),
659
803
  payload: TurnDiagnosticSchema
660
804
  });
661
- var TurnEventSchema = import_zod3.z.discriminatedUnion("event", [
805
+ var TurnEventSchema = import_zod4.z.discriminatedUnion("event", [
662
806
  SubmitEventSchema,
663
807
  SnapshotEventSchema,
664
808
  DiagnosticEventSchema
@@ -686,7 +830,7 @@ var createSnapshotEvent = (options) => SnapshotEventSchema.parse({
686
830
  }
687
831
  });
688
832
  var createTurnSnapshotCursor = (sessionId) => {
689
- const expectedSessionId = SafeIdentifierSchema2.parse(sessionId);
833
+ const expectedSessionId = SafeIdentifierSchema3.parse(sessionId);
690
834
  let snapshot;
691
835
  return {
692
836
  apply(input) {
@@ -704,7 +848,7 @@ var eventNames = /* @__PURE__ */ new Set(["client.turn.submit", "server.turn.sna
704
848
  var safeEventId = (input) => {
705
849
  try {
706
850
  if (!isRecord(input)) return void 0;
707
- const parsed = SafeIdentifierSchema2.safeParse(input.eventId);
851
+ const parsed = SafeIdentifierSchema3.safeParse(input.eventId);
708
852
  return parsed.success ? parsed.data : void 0;
709
853
  } catch {
710
854
  return void 0;
@@ -759,22 +903,22 @@ var snapshotMessages = (event) => {
759
903
  };
760
904
  var SESSION_PROTOCOL = "agentskit.chat.session";
761
905
  var SESSION_PROTOCOL_VERSION = 1;
762
- var SessionDecisionSchema = import_zod3.z.object({
763
- messageId: SafeIdentifierSchema2,
764
- input: import_zod3.z.string().max(16384),
765
- routeId: SafeIdentifierSchema2,
766
- kind: import_zod3.z.enum(["deterministic", "repaired", "fallback"]),
767
- content: import_zod3.z.string().max(65536),
768
- fromState: import_zod3.z.string().min(1).max(128),
769
- toState: import_zod3.z.string().min(1).max(128)
906
+ var SessionDecisionSchema = import_zod4.z.object({
907
+ messageId: SafeIdentifierSchema3,
908
+ input: import_zod4.z.string().max(16384),
909
+ routeId: SafeIdentifierSchema3,
910
+ kind: import_zod4.z.enum(["deterministic", "repaired", "fallback"]),
911
+ content: import_zod4.z.string().max(65536),
912
+ fromState: import_zod4.z.string().min(1).max(128),
913
+ toState: import_zod4.z.string().min(1).max(128)
770
914
  }).readonly();
771
- var SessionConfirmationSchema = import_zod3.z.object({
772
- token: SafeIdentifierSchema2,
773
- action: SafeIdentifierSchema2,
774
- input: import_zod3.z.record(import_zod3.z.string(), import_zod3.z.unknown()).refine(isBoundedJsonValue),
775
- toolCallId: SafeIdentifierSchema2,
776
- expiresAt: import_zod3.z.number().int().nonnegative(),
777
- status: import_zod3.z.enum(["pending", "approving", "rejecting", "expiring", "approved", "rejected", "expired"])
915
+ var SessionConfirmationSchema = import_zod4.z.object({
916
+ token: SafeIdentifierSchema3,
917
+ action: SafeIdentifierSchema3,
918
+ input: import_zod4.z.record(import_zod4.z.string(), import_zod4.z.unknown()).refine(isBoundedJsonValue),
919
+ toolCallId: SafeIdentifierSchema3,
920
+ expiresAt: import_zod4.z.number().int().nonnegative(),
921
+ status: import_zod4.z.enum(["pending", "approving", "rejecting", "expiring", "approved", "rejected", "expired"])
778
922
  }).readonly();
779
923
  var uniqueBy = (items, key, context, path) => {
780
924
  const seen = /* @__PURE__ */ new Set();
@@ -784,29 +928,29 @@ var uniqueBy = (items, key, context, path) => {
784
928
  seen.add(value);
785
929
  });
786
930
  };
787
- var SessionDecisionsSchema = import_zod3.z.array(SessionDecisionSchema).max(1e3).superRefine((items, context) => uniqueBy(items, (item) => item.messageId, context, "messageId"));
788
- var SessionConfirmationsSchema = import_zod3.z.array(SessionConfirmationSchema).max(1e3).superRefine((items, context) => {
931
+ var SessionDecisionsSchema = import_zod4.z.array(SessionDecisionSchema).max(1e3).superRefine((items, context) => uniqueBy(items, (item) => item.messageId, context, "messageId"));
932
+ var SessionConfirmationsSchema = import_zod4.z.array(SessionConfirmationSchema).max(1e3).superRefine((items, context) => {
789
933
  uniqueBy(items, (item) => item.token, context, "token");
790
934
  uniqueBy(items, (item) => item.toolCallId, context, "toolCallId");
791
935
  });
792
- var SessionSnapshotObjectSchema = import_zod3.z.object({
793
- protocol: import_zod3.z.literal(SESSION_PROTOCOL),
794
- version: import_zod3.z.literal(SESSION_PROTOCOL_VERSION),
795
- sessionId: SafeIdentifierSchema2,
796
- definitionId: SafeIdentifierSchema2,
797
- definitionRevision: import_zod3.z.number().int().positive(),
798
- updatedAt: import_zod3.z.string().datetime({ offset: true }),
799
- cursor: import_zod3.z.number().int().nonnegative(),
800
- activeTurn: import_zod3.z.object({ turnId: SafeIdentifierSchema2, expiresAt: import_zod3.z.number().int().nonnegative() }).readonly().optional(),
801
- terminalTurns: import_zod3.z.array(import_zod3.z.object({ turnId: SafeIdentifierSchema2, outcome: import_zod3.z.enum(["completed", "indeterminate"]) }).readonly()).max(64).superRefine((items, context) => uniqueBy(items, (item) => item.turnId, context, "turnId")).readonly().optional(),
802
- conversation: import_zod3.z.object({
803
- state: import_zod3.z.string().min(1).max(128),
936
+ var SessionSnapshotObjectSchema = import_zod4.z.object({
937
+ protocol: import_zod4.z.literal(SESSION_PROTOCOL),
938
+ version: import_zod4.z.literal(SESSION_PROTOCOL_VERSION),
939
+ sessionId: SafeIdentifierSchema3,
940
+ definitionId: SafeIdentifierSchema3,
941
+ definitionRevision: import_zod4.z.number().int().positive(),
942
+ updatedAt: import_zod4.z.string().datetime({ offset: true }),
943
+ cursor: import_zod4.z.number().int().nonnegative(),
944
+ activeTurn: import_zod4.z.object({ turnId: SafeIdentifierSchema3, expiresAt: import_zod4.z.number().int().nonnegative() }).readonly().optional(),
945
+ terminalTurns: import_zod4.z.array(import_zod4.z.object({ turnId: SafeIdentifierSchema3, outcome: import_zod4.z.enum(["completed", "indeterminate"]) }).readonly()).max(64).superRefine((items, context) => uniqueBy(items, (item) => item.turnId, context, "turnId")).readonly().optional(),
946
+ conversation: import_zod4.z.object({
947
+ state: import_zod4.z.string().min(1).max(128),
804
948
  decisions: SessionDecisionsSchema
805
949
  }).readonly().optional(),
806
950
  confirmations: SessionConfirmationsSchema
807
951
  });
808
952
  var SessionSnapshotSchema = SessionSnapshotObjectSchema.readonly();
809
- var LegacySessionSnapshotSchema = SessionSnapshotObjectSchema.omit({ protocol: true, version: true }).extend({ version: import_zod3.z.literal(0) });
953
+ var LegacySessionSnapshotSchema = SessionSnapshotObjectSchema.omit({ protocol: true, version: true }).extend({ version: import_zod4.z.literal(0) });
810
954
  var decodeSessionSnapshot = (input) => {
811
955
  let candidate = input;
812
956
  if (typeof input === "string") {
@@ -834,6 +978,11 @@ var decodeSessionSnapshot = (input) => {
834
978
  ANSWER_MAX_SUGGESTIONS,
835
979
  ANSWER_PROTOCOL,
836
980
  ANSWER_PROTOCOL_VERSION,
981
+ ASK_BACKEND_MAX_MESSAGES,
982
+ ASK_BACKEND_MAX_MESSAGE_CHARS,
983
+ ASK_BACKEND_MAX_SOURCES,
984
+ ASK_BACKEND_PROTOCOL,
985
+ ASK_BACKEND_PROTOCOL_VERSION,
837
986
  ASK_EVENT_MAX_BYTES,
838
987
  ASK_EVENT_MAX_RECORDS,
839
988
  ASK_SERVICE_PROTOCOL_VERSION,
@@ -846,6 +995,15 @@ var decodeSessionSnapshot = (input) => {
846
995
  AnswerConfidenceSchema,
847
996
  AnswerResponseSchema,
848
997
  AnswerSuggestionSchema,
998
+ AskBackendDiagnosticSchema,
999
+ AskBackendMessageSchema,
1000
+ AskBackendMetricNameSchema,
1001
+ AskBackendMetricSchema,
1002
+ AskBackendRequestSchema,
1003
+ AskBackendSessionRecordSchema,
1004
+ AskBackendSiteConfigSchema,
1005
+ AskBackendSourceSchema,
1006
+ AskBackendUsageSchema,
849
1007
  AskEventSchema,
850
1008
  AssistantComponentPartSchema,
851
1009
  AssistantContentPartSchema,