@flamingo-stack/openframe-frontend-core 0.0.584-1967.5424.1 → 0.0.584-1973.5427.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (150) hide show
  1. package/dist/chat-protocol/events.d.ts +8 -2
  2. package/dist/chat-protocol/events.d.ts.map +1 -1
  3. package/dist/chat-protocol/index.cjs +188 -0
  4. package/dist/chat-protocol/index.cjs.map +1 -1
  5. package/dist/chat-protocol/index.js +188 -0
  6. package/dist/chat-protocol/index.js.map +1 -1
  7. package/dist/chat-protocol/nats-decoder.d.ts.map +1 -1
  8. package/dist/chat-protocol/source-metadata.d.ts +3 -0
  9. package/dist/chat-protocol/source-metadata.d.ts.map +1 -0
  10. package/dist/{chunk-JFKK3ZOA.cjs → chunk-26B5Q3JD.cjs} +43 -43
  11. package/dist/{chunk-JFKK3ZOA.cjs.map → chunk-26B5Q3JD.cjs.map} +1 -1
  12. package/dist/{chunk-HCKEDTKJ.cjs → chunk-2AVDJPUK.cjs} +10 -10
  13. package/dist/{chunk-HCKEDTKJ.cjs.map → chunk-2AVDJPUK.cjs.map} +1 -1
  14. package/dist/{chunk-ZHUBNWEX.cjs → chunk-2R6RQW7Z.cjs} +3 -3
  15. package/dist/{chunk-ZHUBNWEX.cjs.map → chunk-2R6RQW7Z.cjs.map} +1 -1
  16. package/dist/{chunk-XPJKQ63S.js → chunk-47R7PZ62.js} +3 -3
  17. package/dist/{chunk-MYEG5ZDT.js → chunk-5SXLAADB.js} +2 -2
  18. package/dist/{chunk-33DHEEMP.cjs → chunk-5UZ3IOGE.cjs} +33 -33
  19. package/dist/{chunk-33DHEEMP.cjs.map → chunk-5UZ3IOGE.cjs.map} +1 -1
  20. package/dist/{chunk-RHPCSFJH.js → chunk-A2HTAQSF.js} +4 -4
  21. package/dist/{chunk-IIT5HWLY.cjs → chunk-BYYAOXRH.cjs} +9 -9
  22. package/dist/{chunk-IIT5HWLY.cjs.map → chunk-BYYAOXRH.cjs.map} +1 -1
  23. package/dist/{chunk-7X5TCK4R.cjs → chunk-C7TUJJHD.cjs} +10 -10
  24. package/dist/{chunk-7X5TCK4R.cjs.map → chunk-C7TUJJHD.cjs.map} +1 -1
  25. package/dist/{chunk-QJR32JM2.cjs → chunk-DMVRO47N.cjs} +159 -159
  26. package/dist/{chunk-QJR32JM2.cjs.map → chunk-DMVRO47N.cjs.map} +1 -1
  27. package/dist/{chunk-P2VRLSAP.cjs → chunk-DNUITFLK.cjs} +21 -21
  28. package/dist/{chunk-P2VRLSAP.cjs.map → chunk-DNUITFLK.cjs.map} +1 -1
  29. package/dist/{chunk-LNKULR4V.js → chunk-EOGLVKGS.js} +2 -2
  30. package/dist/{chunk-3ZA2OYRE.cjs → chunk-FJTZMGPX.cjs} +3 -3
  31. package/dist/{chunk-3ZA2OYRE.cjs.map → chunk-FJTZMGPX.cjs.map} +1 -1
  32. package/dist/{chunk-YFZDIEVC.js → chunk-FRUOEALT.js} +5 -5
  33. package/dist/{chunk-Q66AMADB.cjs → chunk-FSUP4EP2.cjs} +4 -4
  34. package/dist/{chunk-Q66AMADB.cjs.map → chunk-FSUP4EP2.cjs.map} +1 -1
  35. package/dist/{chunk-4T5KOD3G.js → chunk-GGRFN3AX.js} +5 -5
  36. package/dist/{chunk-JAJQ5P2Q.cjs → chunk-J3S76OHX.cjs} +22 -22
  37. package/dist/{chunk-JAJQ5P2Q.cjs.map → chunk-J3S76OHX.cjs.map} +1 -1
  38. package/dist/{chunk-MEJFHD5N.cjs → chunk-JTECQTHA.cjs} +15 -15
  39. package/dist/{chunk-MEJFHD5N.cjs.map → chunk-JTECQTHA.cjs.map} +1 -1
  40. package/dist/{chunk-6BJYPG2V.js → chunk-LLCRHQPG.js} +3 -3
  41. package/dist/{chunk-TLKHLGAB.js → chunk-LXO4W55L.js} +3 -3
  42. package/dist/{chunk-VOAZU46B.cjs → chunk-PFKP24C2.cjs} +69 -69
  43. package/dist/{chunk-VOAZU46B.cjs.map → chunk-PFKP24C2.cjs.map} +1 -1
  44. package/dist/{chunk-5CJKZHWO.js → chunk-Q35SMWC2.js} +5 -5
  45. package/dist/{chunk-VZSTL5VG.js → chunk-QPRIWQA5.js} +2 -2
  46. package/dist/{chunk-RURZ6QLN.js → chunk-S23XIQJK.js} +3 -3
  47. package/dist/{chunk-XWBND4G5.js → chunk-S6PT47TJ.js} +368 -38
  48. package/dist/chunk-S6PT47TJ.js.map +1 -0
  49. package/dist/{chunk-3ELW4VML.js → chunk-TVWA2WXF.js} +2 -2
  50. package/dist/{chunk-UCNEQKIT.cjs → chunk-UNPIG4KA.cjs} +5 -5
  51. package/dist/{chunk-UCNEQKIT.cjs.map → chunk-UNPIG4KA.cjs.map} +1 -1
  52. package/dist/{chunk-JVWRMLQZ.js → chunk-VGPNTNAD.js} +2 -2
  53. package/dist/{chunk-IKUSKKFZ.cjs → chunk-W5LFGXFY.cjs} +779 -449
  54. package/dist/chunk-W5LFGXFY.cjs.map +1 -0
  55. package/dist/{chunk-KP6VJP36.js → chunk-YTDZLO72.js} +3 -3
  56. package/dist/{chunk-EJKEDCTH.js → chunk-Z2M4BIZK.js} +6 -6
  57. package/dist/{chunk-NVY2ZP7Z.cjs → chunk-ZAMUKSFL.cjs} +24 -24
  58. package/dist/{chunk-NVY2ZP7Z.cjs.map → chunk-ZAMUKSFL.cjs.map} +1 -1
  59. package/dist/components/case-studies/index.cjs +9 -9
  60. package/dist/components/case-studies/index.js +3 -3
  61. package/dist/components/chat/chat-message-enhanced.d.ts.map +1 -1
  62. package/dist/components/chat/chat-message-list.d.ts.map +1 -1
  63. package/dist/components/chat/embeddable-chat.d.ts.map +1 -1
  64. package/dist/components/chat/entity-cards/dispatch.d.ts.map +1 -1
  65. package/dist/components/chat/hooks/use-nats-chat-adapter.d.ts +4 -1
  66. package/dist/components/chat/hooks/use-nats-chat-adapter.d.ts.map +1 -1
  67. package/dist/components/chat/hooks/use-sse-chat-adapter.d.ts +2 -28
  68. package/dist/components/chat/hooks/use-sse-chat-adapter.d.ts.map +1 -1
  69. package/dist/components/chat/index.cjs +2 -2
  70. package/dist/components/chat/index.js +1 -1
  71. package/dist/components/chat/stream/chat-stream-reducer.d.ts.map +1 -1
  72. package/dist/components/chat/tool-execution-display.d.ts.map +1 -1
  73. package/dist/components/chat/types/component.types.d.ts +2 -0
  74. package/dist/components/chat/types/component.types.d.ts.map +1 -1
  75. package/dist/components/chat/types/message.types.d.ts +35 -1
  76. package/dist/components/chat/types/message.types.d.ts.map +1 -1
  77. package/dist/components/chat/types/unified-chat-state.types.d.ts +3 -3
  78. package/dist/components/chat/types/unified-chat-state.types.d.ts.map +1 -1
  79. package/dist/components/chat/utils/chat-source-metadata.d.ts +5 -0
  80. package/dist/components/chat/utils/chat-source-metadata.d.ts.map +1 -0
  81. package/dist/components/chat/utils/process-historical-messages.d.ts.map +1 -1
  82. package/dist/components/contact/index.cjs +4 -4
  83. package/dist/components/contact/index.js +3 -3
  84. package/dist/components/docs/index.cjs +7 -7
  85. package/dist/components/docs/index.js +6 -6
  86. package/dist/components/embeds/index.cjs +4 -4
  87. package/dist/components/embeds/index.js +3 -3
  88. package/dist/components/faq/index.cjs +4 -4
  89. package/dist/components/faq/index.js +3 -3
  90. package/dist/components/features/index.cjs +3 -3
  91. package/dist/components/features/index.js +2 -2
  92. package/dist/components/help-center-pages/index.cjs +23 -23
  93. package/dist/components/help-center-pages/index.js +14 -14
  94. package/dist/components/index.cjs +36 -36
  95. package/dist/components/index.js +13 -13
  96. package/dist/components/meeting-scheduler/index.cjs +21 -21
  97. package/dist/components/meeting-scheduler/index.js +2 -2
  98. package/dist/components/navigation/index.cjs +6 -6
  99. package/dist/components/navigation/index.js +5 -5
  100. package/dist/components/onboarding-guides/index.cjs +6 -6
  101. package/dist/components/onboarding-guides/index.js +5 -5
  102. package/dist/components/tickets/index.cjs +7 -7
  103. package/dist/components/tickets/index.js +6 -6
  104. package/dist/components/ui/index.cjs +3 -3
  105. package/dist/components/ui/index.js +2 -2
  106. package/dist/index.cjs +7 -7
  107. package/dist/index.js +6 -6
  108. package/dist/utils/index.cjs.map +1 -1
  109. package/dist/utils/index.js.map +1 -1
  110. package/package.json +1 -1
  111. package/src/chat-protocol/__tests__/nats-decoder-golden.test.ts +130 -0
  112. package/src/chat-protocol/events.ts +9 -1
  113. package/src/chat-protocol/nats-decoder.ts +7 -0
  114. package/src/chat-protocol/source-metadata.ts +198 -0
  115. package/src/components/chat/__tests__/chat-message-streaming-memo.test.tsx +86 -0
  116. package/src/components/chat/__tests__/embeddable-chat-sources.test.tsx +305 -0
  117. package/src/components/chat/__tests__/tool-execution-display.test.tsx +93 -0
  118. package/src/components/chat/chat-message-enhanced.tsx +28 -13
  119. package/src/components/chat/chat-message-list.tsx +1 -0
  120. package/src/components/chat/embeddable-chat.tsx +25 -5
  121. package/src/components/chat/entity-cards/__tests__/dispatch-video-refs.test.tsx +74 -0
  122. package/src/components/chat/entity-cards/dispatch.tsx +85 -17
  123. package/src/components/chat/hooks/use-nats-chat-adapter.ts +7 -0
  124. package/src/components/chat/hooks/use-sse-chat-adapter.ts +2 -29
  125. package/src/components/chat/stream/__tests__/chat-stream-reducer.test.ts +56 -0
  126. package/src/components/chat/stream/chat-stream-reducer.ts +31 -0
  127. package/src/components/chat/tool-execution-display.tsx +5 -2
  128. package/src/components/chat/types/component.types.ts +2 -0
  129. package/src/components/chat/types/message.types.ts +39 -0
  130. package/src/components/chat/types/unified-chat-state.types.ts +4 -3
  131. package/src/components/chat/utils/__tests__/process-historical-messages-golden.test.ts +57 -0
  132. package/src/components/chat/utils/chat-source-metadata.ts +19 -0
  133. package/src/components/chat/utils/process-historical-messages.ts +19 -1
  134. package/dist/chunk-IKUSKKFZ.cjs.map +0 -1
  135. package/dist/chunk-XWBND4G5.js.map +0 -1
  136. /package/dist/{chunk-XPJKQ63S.js.map → chunk-47R7PZ62.js.map} +0 -0
  137. /package/dist/{chunk-MYEG5ZDT.js.map → chunk-5SXLAADB.js.map} +0 -0
  138. /package/dist/{chunk-RHPCSFJH.js.map → chunk-A2HTAQSF.js.map} +0 -0
  139. /package/dist/{chunk-LNKULR4V.js.map → chunk-EOGLVKGS.js.map} +0 -0
  140. /package/dist/{chunk-YFZDIEVC.js.map → chunk-FRUOEALT.js.map} +0 -0
  141. /package/dist/{chunk-4T5KOD3G.js.map → chunk-GGRFN3AX.js.map} +0 -0
  142. /package/dist/{chunk-6BJYPG2V.js.map → chunk-LLCRHQPG.js.map} +0 -0
  143. /package/dist/{chunk-TLKHLGAB.js.map → chunk-LXO4W55L.js.map} +0 -0
  144. /package/dist/{chunk-5CJKZHWO.js.map → chunk-Q35SMWC2.js.map} +0 -0
  145. /package/dist/{chunk-VZSTL5VG.js.map → chunk-QPRIWQA5.js.map} +0 -0
  146. /package/dist/{chunk-RURZ6QLN.js.map → chunk-S23XIQJK.js.map} +0 -0
  147. /package/dist/{chunk-3ELW4VML.js.map → chunk-TVWA2WXF.js.map} +0 -0
  148. /package/dist/{chunk-JVWRMLQZ.js.map → chunk-VGPNTNAD.js.map} +0 -0
  149. /package/dist/{chunk-KP6VJP36.js.map → chunk-YTDZLO72.js.map} +0 -0
  150. /package/dist/{chunk-EJKEDCTH.js.map → chunk-Z2M4BIZK.js.map} +0 -0
@@ -7,7 +7,8 @@
7
7
  *
8
8
  * Server-safe: no React, no browser APIs.
9
9
  */
10
- import type { AskOptionData } from '../components/chat/types/message.types';
10
+ import type { ChatRef } from '../components/chat/chat-ref.types';
11
+ import type { AskOptionData, ChatSource } from '../components/chat/types/message.types';
11
12
  import type { ApprovalRequestField, DecisionResolvedFrame, UsageTelemetry } from './frames';
12
13
  /** Optional envelope on every event. `seq` carries the transport's
13
14
  * stream sequence (JetStream `streamSeq` on NATS; unused on SSE). */
@@ -203,6 +204,11 @@ export interface ChatMetadataEvent extends ChatStreamEventBase {
203
204
  routedThinkingBudget: number | null;
204
205
  };
205
206
  }
207
+ export interface SourcesEvent extends ChatStreamEventBase {
208
+ type: 'sources';
209
+ sources: ChatSource[];
210
+ refs?: ChatRef[];
211
+ }
206
212
  /** SSE usage frames — raw wire keys (snake_case) preserved. */
207
213
  export interface UsageEvent extends ChatStreamEventBase {
208
214
  type: 'usage';
@@ -292,6 +298,6 @@ export interface ParticipantEvent extends ChatStreamEventBase {
292
298
  export interface DialogClosedEvent extends ChatStreamEventBase {
293
299
  type: 'dialog-closed';
294
300
  }
295
- export type ChatStreamEvent = TurnStartEvent | TurnEndEvent | TextDeltaEvent | ThinkingDeltaEvent | AskEvent | StatusEvent | ToolExecutionEvent | ApprovalRequestEvent | ApprovalResolvedEvent | EscalationOfferEvent | EscalationOfferResolvedEvent | TicketEscalatedEvent | TicketEventEvent | ChatMetadataEvent | UsageEvent | TokenUsageEvent | CompactionEvent | ErrorEvent | ParticipantEvent | DialogClosedEvent;
301
+ export type ChatStreamEvent = TurnStartEvent | TurnEndEvent | TextDeltaEvent | ThinkingDeltaEvent | AskEvent | StatusEvent | ToolExecutionEvent | ApprovalRequestEvent | ApprovalResolvedEvent | EscalationOfferEvent | EscalationOfferResolvedEvent | TicketEscalatedEvent | TicketEventEvent | ChatMetadataEvent | SourcesEvent | UsageEvent | TokenUsageEvent | CompactionEvent | ErrorEvent | ParticipantEvent | DialogClosedEvent;
296
302
  export {};
297
303
  //# sourceMappingURL=events.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/chat-protocol/events.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/chat-protocol/events.ts"],"names":[],"mappings":"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"}
@@ -286,6 +286,8 @@ function createSseFrameDecoder() {
286
286
  var MESSAGE_TYPE = {
287
287
  TEXT: "TEXT",
288
288
  THINKING: "THINKING",
289
+ GUIDE: "GUIDE",
290
+ SOURCES: "SOURCES",
289
291
  ASK: "ASK",
290
292
  EXECUTING_TOOL: "EXECUTING_TOOL",
291
293
  EXECUTED_TOOL: "EXECUTED_TOOL",
@@ -307,6 +309,187 @@ var MESSAGE_TYPE = {
307
309
  DIALOG_CLOSED: "DIALOG_CLOSED"
308
310
  };
309
311
 
312
+ // src/chat-protocol/source-metadata.ts
313
+ var CARD_REFERENCE = /^\[card:\/\/([a-zA-Z0-9_-]+):([a-zA-Z0-9_-]+)\]$/;
314
+ function requiredString(value) {
315
+ if (typeof value !== "string") return null;
316
+ const normalized = value.trim();
317
+ return normalized ? normalized : null;
318
+ }
319
+ function optionalString(value) {
320
+ return requiredString(value) ?? void 0;
321
+ }
322
+ function httpsUrl(value) {
323
+ const candidate = optionalString(value);
324
+ if (!candidate) return void 0;
325
+ try {
326
+ return new URL(candidate).protocol === "https:" ? candidate : void 0;
327
+ } catch {
328
+ return void 0;
329
+ }
330
+ }
331
+ function youtubeId(value) {
332
+ const candidate = optionalString(value);
333
+ if (!candidate) return void 0;
334
+ if (/^[A-Za-z0-9_-]{11}$/.test(candidate)) return candidate;
335
+ const url = httpsUrl(candidate);
336
+ if (!url) return void 0;
337
+ const parsed = new URL(url);
338
+ const hostname = parsed.hostname.toLowerCase();
339
+ const youtubeHost = hostname === "youtu.be" || hostname === "youtube.com" || hostname.endsWith(".youtube.com");
340
+ if (!youtubeHost) return void 0;
341
+ const pathId = hostname === "youtu.be" ? parsed.pathname.split("/").filter(Boolean)[0] : parsed.pathname.match(/^\/(?:embed|v|shorts)\/([A-Za-z0-9_-]{11})(?:\/|$)/)?.[1];
342
+ const id = pathId ?? parsed.searchParams.get("v") ?? void 0;
343
+ return id && /^[A-Za-z0-9_-]{11}$/.test(id) ? id : void 0;
344
+ }
345
+ function nullableString(value) {
346
+ return value === null ? null : optionalString(value);
347
+ }
348
+ function normalizeSourceItems(value) {
349
+ if (!Array.isArray(value)) return void 0;
350
+ const items = value.flatMap((candidate) => {
351
+ if (!candidate || typeof candidate !== "object" || Array.isArray(candidate)) return [];
352
+ const item = candidate;
353
+ const id = requiredString(item.id);
354
+ const documentType = requiredString(item.documentType);
355
+ const name = requiredString(item.name);
356
+ if (!id || !documentType || !name) return [];
357
+ const externalUrl = httpsUrl(item.externalUrl);
358
+ const targetPlatform = nullableString(item.targetPlatform);
359
+ const path = nullableString(item.path);
360
+ return [
361
+ {
362
+ id,
363
+ documentType,
364
+ name,
365
+ ...externalUrl ? { externalUrl } : {},
366
+ ...targetPlatform !== void 0 ? { targetPlatform } : {},
367
+ ...path !== void 0 ? { path } : {}
368
+ }
369
+ ];
370
+ });
371
+ return items.length > 0 ? items : void 0;
372
+ }
373
+ function normalizeSources(value) {
374
+ if (!Array.isArray(value)) return [];
375
+ const seen = /* @__PURE__ */ new Set();
376
+ const sources = [];
377
+ for (const candidate of value) {
378
+ if (!candidate || typeof candidate !== "object" || Array.isArray(candidate)) continue;
379
+ const source = candidate;
380
+ const index = source.index;
381
+ const name = requiredString(source.name);
382
+ const path = requiredString(source.path);
383
+ const documentType = requiredString(source.documentType);
384
+ const validIndex = typeof index === "number" && Number.isFinite(index) && Number.isInteger(index) && index > 0 && !seen.has(index);
385
+ if (!validIndex || !name || !path || !documentType) continue;
386
+ seen.add(index);
387
+ const externalUrl = httpsUrl(source.externalUrl);
388
+ const targetPlatform = nullableString(source.targetPlatform);
389
+ const id = optionalString(source.id);
390
+ const sourceRepo = optionalString(source.sourceRepo);
391
+ const label = optionalString(source.label);
392
+ const items = normalizeSourceItems(source.items);
393
+ sources.push({
394
+ index,
395
+ name,
396
+ path,
397
+ documentType,
398
+ ...externalUrl ? { externalUrl } : {},
399
+ ...targetPlatform !== void 0 ? { targetPlatform } : {},
400
+ ...id ? { id } : {},
401
+ ...sourceRepo ? { sourceRepo } : {},
402
+ ...label ? { label } : {},
403
+ ...items ? { items } : {}
404
+ });
405
+ }
406
+ return sources;
407
+ }
408
+ function normalizeVideoMetadata(value) {
409
+ if (!value || typeof value !== "object" || Array.isArray(value)) return {};
410
+ const input = value;
411
+ const metadata = {};
412
+ for (const key of ["videoUrl", "highlightVideoUrl", "videoPoster", "highlightVideoPoster"]) {
413
+ const url = httpsUrl(input[key]);
414
+ if (url) metadata[key] = url;
415
+ }
416
+ const id = youtubeId(input.youtubeUrl);
417
+ if (id) metadata.youtubeUrl = id;
418
+ return metadata;
419
+ }
420
+ function normalizeVideos(value) {
421
+ if (!Array.isArray(value)) return [];
422
+ return value.flatMap((candidate) => {
423
+ if (!candidate || typeof candidate !== "object" || Array.isArray(candidate)) return [];
424
+ const video = candidate;
425
+ const match = typeof video.ref === "string" ? CARD_REFERENCE.exec(video.ref) : null;
426
+ if (!match || match[1] !== "video") return [];
427
+ const id = match[2];
428
+ const title = optionalString(video.title) ?? id;
429
+ const url = httpsUrl(video.url) ?? null;
430
+ const sourceRepo = optionalString(video.sourceRepo);
431
+ const metadata = normalizeVideoMetadata(video.metadata);
432
+ if (url) {
433
+ const idFromUrl = youtubeId(url);
434
+ if (idFromUrl) {
435
+ metadata.youtubeUrl = idFromUrl;
436
+ delete metadata.videoUrl;
437
+ } else {
438
+ metadata.videoUrl = url;
439
+ delete metadata.youtubeUrl;
440
+ }
441
+ }
442
+ return [
443
+ {
444
+ type: "video",
445
+ id,
446
+ title,
447
+ url,
448
+ ...sourceRepo ? { sourceRepo } : {},
449
+ ...Object.keys(metadata).length > 0 ? { metadata } : {}
450
+ }
451
+ ];
452
+ });
453
+ }
454
+ function normalizeCards(value, sources) {
455
+ if (!Array.isArray(value)) return [];
456
+ return value.flatMap((candidate) => {
457
+ if (!candidate || typeof candidate !== "object" || Array.isArray(candidate)) return [];
458
+ const card = candidate;
459
+ const match = typeof card.ref === "string" ? CARD_REFERENCE.exec(card.ref) : null;
460
+ if (!match || match[1] === "video") return [];
461
+ const type = requiredString(card.entityType);
462
+ const id = requiredString(card.entityId);
463
+ if (!type || !id || type !== match[1] || id !== match[2]) return [];
464
+ const source = sources.find((item) => item.id === id && item.documentType === type);
465
+ return [
466
+ {
467
+ type,
468
+ id,
469
+ title: source?.name ?? id,
470
+ url: source?.externalUrl ?? null,
471
+ ...source?.sourceRepo ? { sourceRepo: source.sourceRepo } : {},
472
+ ...source?.targetPlatform !== void 0 ? { targetPlatform: source.targetPlatform } : {},
473
+ ...source?.path ? { metadata: { path: source.path } } : {}
474
+ }
475
+ ];
476
+ });
477
+ }
478
+ function sourceMetadataEvent(payload) {
479
+ if (!payload || typeof payload !== "object" || Array.isArray(payload)) return null;
480
+ const metadata = payload;
481
+ const sources = normalizeSources(metadata.sources);
482
+ const refs = [...normalizeVideos(metadata.videos), ...normalizeCards(metadata.cards, sources)];
483
+ const refsByIdentity = /* @__PURE__ */ new Map();
484
+ refs.forEach((ref) => {
485
+ const identity = `${ref.type}:${ref.id}`;
486
+ if (!refsByIdentity.has(identity)) refsByIdentity.set(identity, ref);
487
+ });
488
+ const uniqueRefs = Array.from(refsByIdentity.values());
489
+ if (sources.length === 0 && uniqueRefs.length === 0) return null;
490
+ return { type: "sources", sources, ...uniqueRefs.length > 0 ? { refs: uniqueRefs } : {} };
491
+ }
492
+
310
493
  // src/chat-protocol/nats-decoder.ts
311
494
  function isRecord(value) {
312
495
  return typeof value === "object" && value !== null;
@@ -375,6 +558,11 @@ function decodeNatsChunk(chunk) {
375
558
  return { type: "thinking-delta", text: data.text, ...seq };
376
559
  }
377
560
  return null;
561
+ case MESSAGE_TYPE.GUIDE:
562
+ case MESSAGE_TYPE.SOURCES: {
563
+ const event = sourceMetadataEvent(data.payload);
564
+ return event ? { ...event, ...seq } : null;
565
+ }
378
566
  // An ask card is only an ask card with something to pick: a question and at
379
567
  // least one option. Anything less is dropped rather than rendered as an
380
568
  // empty card the user can't answer — the backend already falls back to a