@flamingo-stack/openframe-frontend-core 0.0.588 → 0.0.589-1973.5571.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/chat-protocol/events.d.ts +8 -2
- package/dist/chat-protocol/events.d.ts.map +1 -1
- package/dist/chat-protocol/index.cjs +188 -0
- package/dist/chat-protocol/index.cjs.map +1 -1
- package/dist/chat-protocol/index.js +188 -0
- package/dist/chat-protocol/index.js.map +1 -1
- package/dist/chat-protocol/nats-decoder.d.ts.map +1 -1
- package/dist/chat-protocol/source-metadata.d.ts +5 -0
- package/dist/chat-protocol/source-metadata.d.ts.map +1 -0
- package/dist/{chunk-GKPY7VLK.js → chunk-47NIV4FC.js} +4 -4
- package/dist/{chunk-D7YISHXC.js → chunk-4MVGFYRE.js} +534 -190
- package/dist/chunk-4MVGFYRE.js.map +1 -0
- package/dist/{chunk-I5CJJFEJ.js → chunk-4VDGIODG.js} +3 -3
- package/dist/{chunk-PAUJQV3C.cjs → chunk-627JVTID.cjs} +15 -15
- package/dist/{chunk-PAUJQV3C.cjs.map → chunk-627JVTID.cjs.map} +1 -1
- package/dist/{chunk-3OCYNMZ5.js → chunk-CQNILR7U.js} +3 -3
- package/dist/{chunk-BONXSRHZ.cjs → chunk-DPQGO4PH.cjs} +21 -21
- package/dist/{chunk-BONXSRHZ.cjs.map → chunk-DPQGO4PH.cjs.map} +1 -1
- package/dist/{chunk-A6X7EXP6.cjs → chunk-DVAAXDZV.cjs} +10 -10
- package/dist/{chunk-A6X7EXP6.cjs.map → chunk-DVAAXDZV.cjs.map} +1 -1
- package/dist/{chunk-CN36E4PK.js → chunk-EJEHIAOV.js} +2 -2
- package/dist/{chunk-G45RGWHF.cjs → chunk-EKKR5ZFB.cjs} +887 -543
- package/dist/chunk-EKKR5ZFB.cjs.map +1 -0
- package/dist/{chunk-IYDHV2CS.cjs → chunk-FIEOWSXH.cjs} +43 -43
- package/dist/{chunk-IYDHV2CS.cjs.map → chunk-FIEOWSXH.cjs.map} +1 -1
- package/dist/{chunk-CJOWLRUU.js → chunk-G4ND6ZZK.js} +2 -2
- package/dist/{chunk-KWTV3KGY.cjs → chunk-GDHQTVBP.cjs} +9 -9
- package/dist/{chunk-KWTV3KGY.cjs.map → chunk-GDHQTVBP.cjs.map} +1 -1
- package/dist/{chunk-ADANP3ZA.cjs → chunk-GOHHFX4O.cjs} +33 -33
- package/dist/{chunk-ADANP3ZA.cjs.map → chunk-GOHHFX4O.cjs.map} +1 -1
- package/dist/{chunk-KVNGYFFP.js → chunk-GU5TWGAJ.js} +3 -3
- package/dist/{chunk-EGYX55HT.cjs → chunk-HQKWJFFX.cjs} +159 -159
- package/dist/{chunk-EGYX55HT.cjs.map → chunk-HQKWJFFX.cjs.map} +1 -1
- package/dist/{chunk-NXZC6UTN.js → chunk-HZ6VUTLA.js} +2 -2
- package/dist/{chunk-WUCYI3BC.cjs → chunk-KH5KDKCE.cjs} +24 -24
- package/dist/{chunk-WUCYI3BC.cjs.map → chunk-KH5KDKCE.cjs.map} +1 -1
- package/dist/{chunk-JDINUWND.cjs → chunk-MQFA5DXU.cjs} +69 -69
- package/dist/{chunk-JDINUWND.cjs.map → chunk-MQFA5DXU.cjs.map} +1 -1
- package/dist/{chunk-5CHW7AMP.cjs → chunk-NHW2AM2X.cjs} +10 -10
- package/dist/{chunk-5CHW7AMP.cjs.map → chunk-NHW2AM2X.cjs.map} +1 -1
- package/dist/{chunk-KK3XU6YJ.cjs → chunk-NIHPN72N.cjs} +4 -4
- package/dist/{chunk-KK3XU6YJ.cjs.map → chunk-NIHPN72N.cjs.map} +1 -1
- package/dist/{chunk-EGUU3QCU.cjs → chunk-NNRRRWCD.cjs} +3 -3
- package/dist/{chunk-EGUU3QCU.cjs.map → chunk-NNRRRWCD.cjs.map} +1 -1
- package/dist/{chunk-4ZKAMPBX.js → chunk-OAY342OE.js} +2 -2
- package/dist/{chunk-TOYHZHTK.js → chunk-PDFH7CXB.js} +2 -2
- package/dist/{chunk-NIDPX52C.js → chunk-QIHBS5PM.js} +5 -5
- package/dist/{chunk-CNKVEVUN.js → chunk-SPOIDC23.js} +5 -5
- package/dist/{chunk-MENQLD57.cjs → chunk-T5FJOWHA.cjs} +5 -5
- package/dist/{chunk-MENQLD57.cjs.map → chunk-T5FJOWHA.cjs.map} +1 -1
- package/dist/{chunk-5FNWOF46.js → chunk-WZZSFOWG.js} +6 -6
- package/dist/{chunk-FVRRYJ6P.cjs → chunk-XIKSZSHC.cjs} +22 -22
- package/dist/{chunk-FVRRYJ6P.cjs.map → chunk-XIKSZSHC.cjs.map} +1 -1
- package/dist/{chunk-C6RJRSIM.cjs → chunk-XTMNO7MC.cjs} +3 -3
- package/dist/{chunk-C6RJRSIM.cjs.map → chunk-XTMNO7MC.cjs.map} +1 -1
- package/dist/{chunk-FQBR6SCA.js → chunk-XW4GOMK6.js} +3 -3
- package/dist/{chunk-77Y7R243.js → chunk-YEEMXD25.js} +5 -5
- package/dist/{chunk-LGBNHWDN.js → chunk-YTVTZ7JO.js} +3 -3
- package/dist/components/case-studies/index.cjs +9 -9
- package/dist/components/case-studies/index.js +3 -3
- package/dist/components/chat/chat-message-enhanced.d.ts.map +1 -1
- package/dist/components/chat/chat-message-list.d.ts.map +1 -1
- package/dist/components/chat/embeddable-chat.d.ts.map +1 -1
- package/dist/components/chat/entity-cards/dispatch.d.ts.map +1 -1
- package/dist/components/chat/hooks/use-nats-chat-adapter.d.ts +4 -1
- package/dist/components/chat/hooks/use-nats-chat-adapter.d.ts.map +1 -1
- package/dist/components/chat/hooks/use-slash-commands.d.ts +3 -3
- package/dist/components/chat/hooks/use-slash-commands.d.ts.map +1 -1
- package/dist/components/chat/hooks/use-sse-chat-adapter.d.ts +2 -28
- package/dist/components/chat/hooks/use-sse-chat-adapter.d.ts.map +1 -1
- package/dist/components/chat/index.cjs +2 -2
- package/dist/components/chat/index.js +1 -1
- package/dist/components/chat/remark-strip-citations.d.ts.map +1 -1
- package/dist/components/chat/stream/chat-stream-reducer.d.ts.map +1 -1
- package/dist/components/chat/tool-execution-display.d.ts.map +1 -1
- package/dist/components/chat/types/component.types.d.ts +4 -0
- package/dist/components/chat/types/component.types.d.ts.map +1 -1
- package/dist/components/chat/types/message.types.d.ts +35 -1
- package/dist/components/chat/types/message.types.d.ts.map +1 -1
- package/dist/components/chat/types/unified-chat-state.types.d.ts +3 -3
- package/dist/components/chat/types/unified-chat-state.types.d.ts.map +1 -1
- package/dist/components/chat/utils/chat-source-metadata.d.ts +5 -0
- package/dist/components/chat/utils/chat-source-metadata.d.ts.map +1 -0
- package/dist/components/chat/utils/process-historical-messages.d.ts.map +1 -1
- package/dist/components/contact/index.cjs +4 -4
- package/dist/components/contact/index.js +3 -3
- package/dist/components/docs/index.cjs +7 -7
- package/dist/components/docs/index.js +6 -6
- package/dist/components/embeds/index.cjs +4 -4
- package/dist/components/embeds/index.js +3 -3
- package/dist/components/faq/index.cjs +4 -4
- package/dist/components/faq/index.js +3 -3
- package/dist/components/features/index.cjs +3 -3
- package/dist/components/features/index.js +2 -2
- package/dist/components/help-center-pages/index.cjs +23 -23
- package/dist/components/help-center-pages/index.js +14 -14
- package/dist/components/index.cjs +36 -36
- package/dist/components/index.js +13 -13
- package/dist/components/meeting-scheduler/index.cjs +21 -21
- package/dist/components/meeting-scheduler/index.js +2 -2
- package/dist/components/navigation/index.cjs +6 -6
- package/dist/components/navigation/index.js +5 -5
- package/dist/components/onboarding-guides/index.cjs +6 -6
- package/dist/components/onboarding-guides/index.js +5 -5
- package/dist/components/tickets/index.cjs +7 -7
- package/dist/components/tickets/index.js +6 -6
- package/dist/components/ui/hover-dropdown.d.ts.map +1 -1
- package/dist/components/ui/index.cjs +3 -3
- package/dist/components/ui/index.js +2 -2
- package/dist/index.cjs +7 -7
- package/dist/index.js +6 -6
- package/dist/utils/index.cjs.map +1 -1
- package/dist/utils/index.js.map +1 -1
- package/package.json +2 -1
- package/src/chat-protocol/__tests__/nats-decoder-golden.test.ts +130 -0
- package/src/chat-protocol/__tests__/source-metadata.test.ts +74 -0
- package/src/chat-protocol/events.ts +9 -1
- package/src/chat-protocol/nats-decoder.ts +7 -0
- package/src/chat-protocol/source-metadata.ts +202 -0
- package/src/components/chat/__tests__/chat-message-list.test.tsx +70 -0
- package/src/components/chat/__tests__/chat-message-streaming-memo.test.tsx +86 -0
- package/src/components/chat/__tests__/embeddable-chat-sources.test.tsx +411 -0
- package/src/components/chat/__tests__/remark-strip-citations.test.ts +52 -0
- package/src/components/chat/__tests__/tool-execution-display.test.tsx +93 -0
- package/src/components/chat/chat-message-enhanced.tsx +28 -13
- package/src/components/chat/chat-message-list.tsx +27 -22
- package/src/components/chat/embeddable-chat.tsx +55 -36
- package/src/components/chat/entity-cards/__tests__/dispatch-video-refs.test.tsx +74 -0
- package/src/components/chat/entity-cards/dispatch.tsx +86 -17
- package/src/components/chat/hooks/__tests__/use-slash-commands.test.ts +64 -0
- package/src/components/chat/hooks/use-nats-chat-adapter.ts +7 -0
- package/src/components/chat/hooks/use-slash-commands.ts +9 -5
- package/src/components/chat/hooks/use-sse-chat-adapter.ts +2 -29
- package/src/components/chat/remark-strip-citations.ts +5 -3
- package/src/components/chat/stream/__tests__/chat-stream-reducer.test.ts +56 -0
- package/src/components/chat/stream/chat-stream-reducer.ts +31 -0
- package/src/components/chat/tool-execution-display.tsx +5 -2
- package/src/components/chat/types/component.types.ts +4 -0
- package/src/components/chat/types/message.types.ts +39 -0
- package/src/components/chat/types/unified-chat-state.types.ts +4 -3
- package/src/components/chat/utils/__tests__/process-historical-messages-golden.test.ts +57 -0
- package/src/components/chat/utils/chat-source-metadata.ts +19 -0
- package/src/components/chat/utils/process-historical-messages.ts +19 -1
- package/src/components/ui/hover-dropdown.tsx +8 -3
- package/dist/chunk-D7YISHXC.js.map +0 -1
- package/dist/chunk-G45RGWHF.cjs.map +0 -1
- /package/dist/{chunk-GKPY7VLK.js.map → chunk-47NIV4FC.js.map} +0 -0
- /package/dist/{chunk-I5CJJFEJ.js.map → chunk-4VDGIODG.js.map} +0 -0
- /package/dist/{chunk-3OCYNMZ5.js.map → chunk-CQNILR7U.js.map} +0 -0
- /package/dist/{chunk-CN36E4PK.js.map → chunk-EJEHIAOV.js.map} +0 -0
- /package/dist/{chunk-CJOWLRUU.js.map → chunk-G4ND6ZZK.js.map} +0 -0
- /package/dist/{chunk-KVNGYFFP.js.map → chunk-GU5TWGAJ.js.map} +0 -0
- /package/dist/{chunk-NXZC6UTN.js.map → chunk-HZ6VUTLA.js.map} +0 -0
- /package/dist/{chunk-4ZKAMPBX.js.map → chunk-OAY342OE.js.map} +0 -0
- /package/dist/{chunk-TOYHZHTK.js.map → chunk-PDFH7CXB.js.map} +0 -0
- /package/dist/{chunk-NIDPX52C.js.map → chunk-QIHBS5PM.js.map} +0 -0
- /package/dist/{chunk-CNKVEVUN.js.map → chunk-SPOIDC23.js.map} +0 -0
- /package/dist/{chunk-5FNWOF46.js.map → chunk-WZZSFOWG.js.map} +0 -0
- /package/dist/{chunk-FQBR6SCA.js.map → chunk-XW4GOMK6.js.map} +0 -0
- /package/dist/{chunk-77Y7R243.js.map → chunk-YEEMXD25.js.map} +0 -0
- /package/dist/{chunk-LGBNHWDN.js.map → chunk-YTVTZ7JO.js.map} +0 -0
|
@@ -7,7 +7,8 @@
|
|
|
7
7
|
*
|
|
8
8
|
* Server-safe: no React, no browser APIs.
|
|
9
9
|
*/
|
|
10
|
-
import type {
|
|
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":"AAAA;;;;;;;;GAQG;AAMH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;
|
|
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
|
+
var SOURCE_METADATA_MATCHED = "sourceMetadataMatched";
|
|
315
|
+
function requiredString(value) {
|
|
316
|
+
if (typeof value !== "string") return null;
|
|
317
|
+
const normalized = value.trim();
|
|
318
|
+
return normalized ? normalized : null;
|
|
319
|
+
}
|
|
320
|
+
function optionalString(value) {
|
|
321
|
+
return requiredString(value) ?? void 0;
|
|
322
|
+
}
|
|
323
|
+
function httpsUrl(value) {
|
|
324
|
+
const candidate = optionalString(value);
|
|
325
|
+
if (!candidate) return void 0;
|
|
326
|
+
try {
|
|
327
|
+
return new URL(candidate).protocol === "https:" ? candidate : void 0;
|
|
328
|
+
} catch {
|
|
329
|
+
return void 0;
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
function youtubeId(value) {
|
|
333
|
+
const candidate = optionalString(value);
|
|
334
|
+
if (!candidate) return void 0;
|
|
335
|
+
if (/^[A-Za-z0-9_-]{11}$/.test(candidate)) return candidate;
|
|
336
|
+
const url = httpsUrl(candidate);
|
|
337
|
+
if (!url) return void 0;
|
|
338
|
+
const parsed = new URL(url);
|
|
339
|
+
const hostname = parsed.hostname.toLowerCase();
|
|
340
|
+
const youtubeHost = hostname === "youtu.be" || hostname === "youtube.com" || hostname.endsWith(".youtube.com");
|
|
341
|
+
if (!youtubeHost) return void 0;
|
|
342
|
+
const pathId = hostname === "youtu.be" ? parsed.pathname.split("/").filter(Boolean)[0] : parsed.pathname.match(/^\/(?:embed|v|shorts)\/([A-Za-z0-9_-]{11})(?:\/|$)/)?.[1];
|
|
343
|
+
const id = pathId ?? parsed.searchParams.get("v") ?? void 0;
|
|
344
|
+
return id && /^[A-Za-z0-9_-]{11}$/.test(id) ? id : void 0;
|
|
345
|
+
}
|
|
346
|
+
function nullableString(value) {
|
|
347
|
+
return value === null ? null : optionalString(value);
|
|
348
|
+
}
|
|
349
|
+
function normalizeSourceItems(value) {
|
|
350
|
+
if (!Array.isArray(value)) return void 0;
|
|
351
|
+
const items = value.flatMap((candidate) => {
|
|
352
|
+
if (!candidate || typeof candidate !== "object" || Array.isArray(candidate)) return [];
|
|
353
|
+
const item = candidate;
|
|
354
|
+
const id = requiredString(item.id);
|
|
355
|
+
const documentType = requiredString(item.documentType);
|
|
356
|
+
const name = requiredString(item.name);
|
|
357
|
+
if (!id || !documentType || !name) return [];
|
|
358
|
+
const externalUrl = httpsUrl(item.externalUrl);
|
|
359
|
+
const targetPlatform = nullableString(item.targetPlatform);
|
|
360
|
+
const path = nullableString(item.path);
|
|
361
|
+
return [
|
|
362
|
+
{
|
|
363
|
+
id,
|
|
364
|
+
documentType,
|
|
365
|
+
name,
|
|
366
|
+
...externalUrl ? { externalUrl } : {},
|
|
367
|
+
...targetPlatform !== void 0 ? { targetPlatform } : {},
|
|
368
|
+
...path !== void 0 ? { path } : {}
|
|
369
|
+
}
|
|
370
|
+
];
|
|
371
|
+
});
|
|
372
|
+
return items.length > 0 ? items : void 0;
|
|
373
|
+
}
|
|
374
|
+
function normalizeSources(value) {
|
|
375
|
+
if (!Array.isArray(value)) return [];
|
|
376
|
+
const seen = /* @__PURE__ */ new Set();
|
|
377
|
+
const sources = [];
|
|
378
|
+
for (const candidate of value) {
|
|
379
|
+
if (!candidate || typeof candidate !== "object" || Array.isArray(candidate)) continue;
|
|
380
|
+
const source = candidate;
|
|
381
|
+
const index = source.index;
|
|
382
|
+
const name = requiredString(source.name);
|
|
383
|
+
const path = requiredString(source.path);
|
|
384
|
+
const documentType = requiredString(source.documentType);
|
|
385
|
+
const validIndex = typeof index === "number" && Number.isFinite(index) && Number.isInteger(index) && index > 0 && !seen.has(index);
|
|
386
|
+
if (!validIndex || !name || !path || !documentType) continue;
|
|
387
|
+
seen.add(index);
|
|
388
|
+
const externalUrl = httpsUrl(source.externalUrl);
|
|
389
|
+
const targetPlatform = nullableString(source.targetPlatform);
|
|
390
|
+
const id = optionalString(source.id);
|
|
391
|
+
const sourceRepo = optionalString(source.sourceRepo);
|
|
392
|
+
const label = optionalString(source.label);
|
|
393
|
+
const items = normalizeSourceItems(source.items);
|
|
394
|
+
sources.push({
|
|
395
|
+
index,
|
|
396
|
+
name,
|
|
397
|
+
path,
|
|
398
|
+
documentType,
|
|
399
|
+
...externalUrl ? { externalUrl } : {},
|
|
400
|
+
...targetPlatform !== void 0 ? { targetPlatform } : {},
|
|
401
|
+
...id ? { id } : {},
|
|
402
|
+
...sourceRepo ? { sourceRepo } : {},
|
|
403
|
+
...label ? { label } : {},
|
|
404
|
+
...items ? { items } : {}
|
|
405
|
+
});
|
|
406
|
+
}
|
|
407
|
+
return sources;
|
|
408
|
+
}
|
|
409
|
+
function normalizeVideoMetadata(value) {
|
|
410
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) return {};
|
|
411
|
+
const input = value;
|
|
412
|
+
const metadata = {};
|
|
413
|
+
for (const key of ["videoUrl", "highlightVideoUrl", "videoPoster", "highlightVideoPoster"]) {
|
|
414
|
+
const url = httpsUrl(input[key]);
|
|
415
|
+
if (url) metadata[key] = url;
|
|
416
|
+
}
|
|
417
|
+
const id = youtubeId(input.youtubeUrl);
|
|
418
|
+
if (id) metadata.youtubeUrl = id;
|
|
419
|
+
return metadata;
|
|
420
|
+
}
|
|
421
|
+
function normalizeVideos(value) {
|
|
422
|
+
if (!Array.isArray(value)) return [];
|
|
423
|
+
return value.flatMap((candidate) => {
|
|
424
|
+
if (!candidate || typeof candidate !== "object" || Array.isArray(candidate)) return [];
|
|
425
|
+
const video = candidate;
|
|
426
|
+
const match = typeof video.ref === "string" ? CARD_REFERENCE.exec(video.ref) : null;
|
|
427
|
+
if (!match || match[1] !== "video") return [];
|
|
428
|
+
const id = match[2];
|
|
429
|
+
const title = optionalString(video.title) ?? id;
|
|
430
|
+
const url = httpsUrl(video.url) ?? null;
|
|
431
|
+
const sourceRepo = optionalString(video.sourceRepo);
|
|
432
|
+
const metadata = normalizeVideoMetadata(video.metadata);
|
|
433
|
+
if (url) {
|
|
434
|
+
const idFromUrl = youtubeId(url);
|
|
435
|
+
if (idFromUrl) {
|
|
436
|
+
metadata.youtubeUrl = idFromUrl;
|
|
437
|
+
delete metadata.videoUrl;
|
|
438
|
+
} else {
|
|
439
|
+
metadata.videoUrl = url;
|
|
440
|
+
delete metadata.youtubeUrl;
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
return [
|
|
444
|
+
{
|
|
445
|
+
type: "video",
|
|
446
|
+
id,
|
|
447
|
+
title,
|
|
448
|
+
url,
|
|
449
|
+
...sourceRepo ? { sourceRepo } : {},
|
|
450
|
+
...Object.keys(metadata).length > 0 ? { metadata } : {}
|
|
451
|
+
}
|
|
452
|
+
];
|
|
453
|
+
});
|
|
454
|
+
}
|
|
455
|
+
function normalizeCards(value, sources) {
|
|
456
|
+
if (!Array.isArray(value)) return [];
|
|
457
|
+
return value.flatMap((candidate) => {
|
|
458
|
+
if (!candidate || typeof candidate !== "object" || Array.isArray(candidate)) return [];
|
|
459
|
+
const card = candidate;
|
|
460
|
+
const match = typeof card.ref === "string" ? CARD_REFERENCE.exec(card.ref) : null;
|
|
461
|
+
if (!match || match[1] === "video") return [];
|
|
462
|
+
const type = requiredString(card.entityType);
|
|
463
|
+
const id = requiredString(card.entityId);
|
|
464
|
+
if (!type || !id || type !== match[1] || id !== match[2]) return [];
|
|
465
|
+
const source = sources.find((item) => item.id === id && item.documentType === type);
|
|
466
|
+
const ref = {
|
|
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, [SOURCE_METADATA_MATCHED]: true } } : {}
|
|
474
|
+
};
|
|
475
|
+
return [ref];
|
|
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
|