@flamingo-stack/openframe-frontend-core 0.0.490-1506.3944.1 → 0.0.490
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/{chunk-5CJR2GZ4.cjs → chunk-2MKUHJ3O.cjs} +31 -31
- package/dist/{chunk-5CJR2GZ4.cjs.map → chunk-2MKUHJ3O.cjs.map} +1 -1
- package/dist/{chunk-S2NHJDKQ.cjs → chunk-3IEVA5AO.cjs} +62 -62
- package/dist/{chunk-S2NHJDKQ.cjs.map → chunk-3IEVA5AO.cjs.map} +1 -1
- package/dist/{chunk-GTWO5NAY.js → chunk-6CFFISUC.js} +2 -2
- package/dist/{chunk-VHG6AX5V.js → chunk-6CJ2K7BD.js} +2 -2
- package/dist/{chunk-4NWARV5I.js → chunk-6QK3ONDD.js} +2 -2
- package/dist/{chunk-YHOIAA2E.cjs → chunk-7I42V2OD.cjs} +60 -60
- package/dist/chunk-7I42V2OD.cjs.map +1 -0
- package/dist/{chunk-T2EGSZFN.js → chunk-AIRNG27G.js} +5 -6
- package/dist/chunk-AIRNG27G.js.map +1 -0
- package/dist/{chunk-NWX7MMF5.cjs → chunk-AW63ET2A.cjs} +15 -15
- package/dist/{chunk-NWX7MMF5.cjs.map → chunk-AW63ET2A.cjs.map} +1 -1
- package/dist/{chunk-TKN5667N.js → chunk-BZMOEWWS.js} +10 -10
- package/dist/chunk-BZMOEWWS.js.map +1 -0
- package/dist/{chunk-DSDZ5T4P.cjs → chunk-D5LQMRPU.cjs} +5 -5
- package/dist/{chunk-DSDZ5T4P.cjs.map → chunk-D5LQMRPU.cjs.map} +1 -1
- package/dist/{chunk-CORIBKHG.js → chunk-EGXCWZYP.js} +2 -2
- package/dist/{chunk-5EYRXSY5.cjs → chunk-EJQUYZXF.cjs} +9 -9
- package/dist/{chunk-5EYRXSY5.cjs.map → chunk-EJQUYZXF.cjs.map} +1 -1
- package/dist/{chunk-P4WTZU6L.cjs → chunk-FY5XAW3H.cjs} +11 -11
- package/dist/{chunk-P4WTZU6L.cjs.map → chunk-FY5XAW3H.cjs.map} +1 -1
- package/dist/{chunk-VQ523ORK.cjs → chunk-GMPYR3MX.cjs} +26 -26
- package/dist/{chunk-VQ523ORK.cjs.map → chunk-GMPYR3MX.cjs.map} +1 -1
- package/dist/{chunk-QSCHCZL3.cjs → chunk-GUTYUMGV.cjs} +7 -7
- package/dist/{chunk-QSCHCZL3.cjs.map → chunk-GUTYUMGV.cjs.map} +1 -1
- package/dist/{chunk-Q6E7VJ4W.cjs → chunk-IEZ3YBAP.cjs} +27 -28
- package/dist/chunk-IEZ3YBAP.cjs.map +1 -0
- package/dist/{chunk-HSACATCD.js → chunk-MPYDX5WX.js} +2 -2
- package/dist/{chunk-RQLBHKXN.js → chunk-NGEFYPY7.js} +2 -2
- package/dist/{chunk-BE6DK7QY.js → chunk-OQIMH2WQ.js} +8985 -11081
- package/dist/chunk-OQIMH2WQ.js.map +1 -0
- package/dist/{chunk-CSYSYJCF.cjs → chunk-UZZT65PQ.cjs} +37 -37
- package/dist/{chunk-CSYSYJCF.cjs.map → chunk-UZZT65PQ.cjs.map} +1 -1
- package/dist/{chunk-YZ2OIYQ3.js → chunk-VDZO6IDR.js} +4 -4
- package/dist/{chunk-UUYRJPGJ.js → chunk-VL2YMDPH.js} +4 -4
- package/dist/{chunk-5LMGFI4J.cjs → chunk-VUXNXWOQ.cjs} +4946 -7042
- package/dist/chunk-VUXNXWOQ.cjs.map +1 -0
- package/dist/{chunk-XQ2B74SI.js → chunk-WLM3F3WU.js} +2 -2
- package/dist/components/case-studies/index.cjs +8 -8
- package/dist/components/case-studies/index.js +2 -2
- 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/guide-display.d.ts +14 -0
- package/dist/components/chat/guide-display.d.ts.map +1 -0
- package/dist/components/chat/hooks/index.d.ts +1 -0
- package/dist/components/chat/hooks/index.d.ts.map +1 -1
- package/dist/components/chat/hooks/use-chat.d.ts.map +1 -1
- package/dist/components/chat/hooks/use-nats-chat-adapter.d.ts +48 -15
- package/dist/components/chat/hooks/use-nats-chat-adapter.d.ts.map +1 -1
- package/dist/components/chat/hooks/use-realtime-chunk-processor.d.ts +6 -0
- package/dist/components/chat/hooks/use-realtime-chunk-processor.d.ts.map +1 -0
- package/dist/components/chat/hooks/use-sse-chat-adapter.d.ts +57 -10
- package/dist/components/chat/hooks/use-sse-chat-adapter.d.ts.map +1 -1
- package/dist/components/chat/index.cjs +2 -8
- package/dist/components/chat/index.cjs.map +1 -1
- package/dist/components/chat/index.d.ts +1 -1
- package/dist/components/chat/index.d.ts.map +1 -1
- package/dist/components/chat/index.js +15 -21
- package/dist/components/chat/types/api.types.d.ts +81 -1
- package/dist/components/chat/types/api.types.d.ts.map +1 -1
- package/dist/components/chat/types/component.types.d.ts +6 -0
- package/dist/components/chat/types/component.types.d.ts.map +1 -1
- package/dist/components/chat/types/message.types.d.ts +15 -2
- package/dist/components/chat/types/message.types.d.ts.map +1 -1
- package/dist/components/chat/types/processing.types.d.ts +93 -2
- package/dist/components/chat/types/processing.types.d.ts.map +1 -1
- package/dist/components/chat/utils/chunk-parser.d.ts +25 -0
- package/dist/components/chat/utils/chunk-parser.d.ts.map +1 -0
- package/dist/components/chat/utils/extract-incomplete-message-state.d.ts +6 -34
- package/dist/components/chat/utils/extract-incomplete-message-state.d.ts.map +1 -1
- package/dist/components/chat/utils/index.d.ts +3 -2
- package/dist/components/chat/utils/index.d.ts.map +1 -1
- package/dist/components/chat/utils/message-segment-accumulator.d.ts +5 -0
- package/dist/components/chat/utils/message-segment-accumulator.d.ts.map +1 -1
- package/dist/components/chat/utils/process-historical-messages.d.ts +11 -59
- package/dist/components/chat/utils/process-historical-messages.d.ts.map +1 -1
- package/dist/components/contact/index.cjs +3 -3
- package/dist/components/contact/index.js +2 -2
- package/dist/components/docs/index.cjs +5 -5
- package/dist/components/docs/index.js +4 -4
- package/dist/components/embeds/index.cjs +3 -3
- package/dist/components/embeds/index.js +2 -2
- package/dist/components/faq/index.cjs +3 -3
- package/dist/components/faq/index.js +2 -2
- package/dist/components/features/index.cjs +2 -2
- package/dist/components/features/index.js +1 -1
- package/dist/components/help-center-pages/index.cjs +20 -20
- package/dist/components/help-center-pages/index.js +11 -11
- package/dist/components/index.cjs +130 -170
- package/dist/components/index.cjs.map +1 -1
- package/dist/components/index.js +23 -63
- package/dist/components/index.js.map +1 -1
- package/dist/components/navigation/index.cjs +2 -2
- package/dist/components/navigation/index.js +1 -1
- package/dist/components/onboarding-guides/index.cjs +5 -5
- package/dist/components/onboarding-guides/index.js +4 -4
- package/dist/components/onboarding-guides/onboarding-guide-detail-view.d.ts.map +1 -1
- package/dist/components/related-content/index.cjs +3 -3
- package/dist/components/related-content/index.js +2 -2
- package/dist/components/shared/product-release/release-detail-page.d.ts.map +1 -1
- package/dist/components/tickets/index.cjs +5 -5
- package/dist/components/tickets/index.js +4 -4
- package/dist/components/ui/index.cjs +2 -42
- package/dist/components/ui/index.cjs.map +1 -1
- package/dist/components/ui/index.d.ts +2 -1
- package/dist/components/ui/index.d.ts.map +1 -1
- package/dist/components/ui/index.js +15 -55
- package/dist/components/ui/rich-markdown-renderer.d.ts +34 -0
- package/dist/components/ui/rich-markdown-renderer.d.ts.map +1 -0
- package/dist/components/ui/simple-markdown-renderer.d.ts +73 -0
- package/dist/components/ui/simple-markdown-renderer.d.ts.map +1 -0
- package/dist/index.cjs +2 -58
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +15 -71
- package/dist/utils/index.cjs +40 -169
- package/dist/utils/index.cjs.map +1 -1
- package/dist/utils/index.d.ts +0 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +41 -162
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/markdown-section-extractor.d.ts.map +1 -1
- package/package.json +1 -7
- package/src/components/chat/__tests__/chat-message-list.test.tsx +5 -293
- package/src/components/chat/chat-message-enhanced.tsx +80 -163
- package/src/components/chat/chat-message-list.tsx +109 -358
- package/src/components/chat/embeddable-chat.tsx +0 -6
- package/src/components/chat/guide-display.tsx +44 -0
- package/src/components/chat/hooks/.index.md +33 -30
- package/src/components/chat/hooks/.use-nats-chat-adapter.md +55 -36
- package/src/components/chat/hooks/.use-realtime-chunk-processor.md +77 -0
- package/src/components/chat/hooks/index.ts +1 -0
- package/src/components/chat/hooks/use-chat.ts +0 -8
- package/src/components/chat/hooks/use-nats-chat-adapter.ts +825 -243
- package/src/components/chat/hooks/use-realtime-chunk-processor.ts +489 -0
- package/src/components/chat/hooks/use-sse-chat-adapter.ts +684 -380
- package/src/components/chat/index.ts +1 -5
- package/src/components/chat/thinking-display.tsx +1 -1
- package/src/components/chat/types/.api.types.md +49 -39
- package/src/components/chat/types/.processing.types.md +58 -29
- package/src/components/chat/types/api.types.ts +73 -6
- package/src/components/chat/types/component.types.ts +9 -0
- package/src/components/chat/types/message.types.ts +17 -1
- package/src/components/chat/types/processing.types.ts +53 -11
- package/src/components/chat/utils/.chunk-parser.md +62 -0
- package/src/components/chat/utils/.index.md +40 -31
- package/src/components/chat/utils/chunk-parser.ts +262 -0
- package/src/components/chat/utils/extract-incomplete-message-state.ts +5 -63
- package/src/components/chat/utils/index.ts +8 -5
- package/src/components/chat/utils/message-segment-accumulator.ts +19 -0
- package/src/components/chat/utils/process-historical-messages.ts +390 -352
- package/src/components/onboarding-guides/onboarding-guide-detail-view.tsx +4 -22
- package/src/components/shared/legal-document/legal-document-page.tsx +1 -1
- package/src/components/shared/product-release/release-detail-page.tsx +4 -19
- package/src/components/ui/.simple-markdown-renderer.md +52 -0
- package/src/components/ui/index.ts +2 -1
- package/src/components/ui/release-changelog-section.tsx +1 -1
- package/src/components/ui/rich-markdown-renderer.tsx +1223 -0
- package/src/components/ui/simple-markdown-renderer.tsx +964 -0
- package/src/components/ui/ticket-info-section.tsx +1 -1
- package/src/stories/ChatMessageEnhanced.stories.tsx +48 -1
- package/src/utils/index.ts +0 -1
- package/src/utils/markdown-section-extractor.ts +56 -41
- package/dist/chat-protocol/decode.d.ts +0 -58
- package/dist/chat-protocol/decode.d.ts.map +0 -1
- package/dist/chat-protocol/encode.d.ts +0 -44
- package/dist/chat-protocol/encode.d.ts.map +0 -1
- package/dist/chat-protocol/env-flag.d.ts +0 -35
- package/dist/chat-protocol/env-flag.d.ts.map +0 -1
- package/dist/chat-protocol/events.d.ts +0 -196
- package/dist/chat-protocol/events.d.ts.map +0 -1
- package/dist/chat-protocol/frames.d.ts +0 -213
- package/dist/chat-protocol/frames.d.ts.map +0 -1
- package/dist/chat-protocol/index.cjs +0 -494
- package/dist/chat-protocol/index.cjs.map +0 -1
- package/dist/chat-protocol/index.d.ts +0 -18
- package/dist/chat-protocol/index.d.ts.map +0 -1
- package/dist/chat-protocol/index.js +0 -478
- package/dist/chat-protocol/index.js.map +0 -1
- package/dist/chat-protocol/ip-normalize.d.ts +0 -44
- package/dist/chat-protocol/ip-normalize.d.ts.map +0 -1
- package/dist/chat-protocol/nats-decoder.d.ts +0 -26
- package/dist/chat-protocol/nats-decoder.d.ts.map +0 -1
- package/dist/chunk-5LMGFI4J.cjs.map +0 -1
- package/dist/chunk-BE6DK7QY.js.map +0 -1
- package/dist/chunk-Q6E7VJ4W.cjs.map +0 -1
- package/dist/chunk-T2EGSZFN.js.map +0 -1
- package/dist/chunk-TKN5667N.js.map +0 -1
- package/dist/chunk-YHOIAA2E.cjs.map +0 -1
- package/dist/components/chat/stream/chat-dialog-store.d.ts +0 -184
- package/dist/components/chat/stream/chat-dialog-store.d.ts.map +0 -1
- package/dist/components/chat/stream/chat-stream-reducer.d.ts +0 -367
- package/dist/components/chat/stream/chat-stream-reducer.d.ts.map +0 -1
- package/dist/components/chat/stream/delta-batcher.d.ts +0 -51
- package/dist/components/chat/stream/delta-batcher.d.ts.map +0 -1
- package/dist/components/chat/stream/index.d.ts +0 -17
- package/dist/components/chat/stream/index.d.ts.map +0 -1
- package/dist/components/chat/stream/message-mutations.d.ts +0 -77
- package/dist/components/chat/stream/message-mutations.d.ts.map +0 -1
- package/dist/components/chat/stream/use-chat-stream-reducer.d.ts +0 -22
- package/dist/components/chat/stream/use-chat-stream-reducer.d.ts.map +0 -1
- package/dist/components/ui/markdown/base-components.d.ts +0 -51
- package/dist/components/ui/markdown/base-components.d.ts.map +0 -1
- package/dist/components/ui/markdown/engine.d.ts +0 -99
- package/dist/components/ui/markdown/engine.d.ts.map +0 -1
- package/dist/components/ui/markdown/heading-ids.d.ts +0 -65
- package/dist/components/ui/markdown/heading-ids.d.ts.map +0 -1
- package/dist/components/ui/markdown/index.d.ts +0 -18
- package/dist/components/ui/markdown/index.d.ts.map +0 -1
- package/dist/components/ui/markdown/mermaid-diagram.d.ts +0 -79
- package/dist/components/ui/markdown/mermaid-diagram.d.ts.map +0 -1
- package/dist/components/ui/markdown/rich/embed-overrides.d.ts +0 -14
- package/dist/components/ui/markdown/rich/embed-overrides.d.ts.map +0 -1
- package/dist/components/ui/markdown/rich/rich-markdown-renderer.d.ts +0 -40
- package/dist/components/ui/markdown/rich/rich-markdown-renderer.d.ts.map +0 -1
- package/dist/components/ui/markdown/rich/shortcodes.d.ts +0 -8
- package/dist/components/ui/markdown/rich/shortcodes.d.ts.map +0 -1
- package/dist/components/ui/markdown/sanitize.d.ts +0 -153
- package/dist/components/ui/markdown/sanitize.d.ts.map +0 -1
- package/dist/components/ui/markdown/simple-markdown-renderer.d.ts +0 -23
- package/dist/components/ui/markdown/simple-markdown-renderer.d.ts.map +0 -1
- package/dist/components/ui/markdown/streaming.d.ts +0 -78
- package/dist/components/ui/markdown/streaming.d.ts.map +0 -1
- package/dist/components/ui/markdown/text-size.d.ts +0 -34
- package/dist/components/ui/markdown/text-size.d.ts.map +0 -1
- package/dist/utils/markdown-fences.d.ts +0 -42
- package/dist/utils/markdown-fences.d.ts.map +0 -1
- package/dist/utils/markdown-heading-id.d.ts +0 -85
- package/dist/utils/markdown-heading-id.d.ts.map +0 -1
- package/src/chat-protocol/__tests__/__snapshots__/nats-decoder-golden.test.ts.snap +0 -307
- package/src/chat-protocol/__tests__/chat-protocol.test.ts +0 -516
- package/src/chat-protocol/__tests__/env-flag.test.ts +0 -52
- package/src/chat-protocol/__tests__/ip-normalize.test.ts +0 -136
- package/src/chat-protocol/__tests__/nats-decoder-golden.test.ts +0 -228
- package/src/chat-protocol/decode.ts +0 -278
- package/src/chat-protocol/encode.ts +0 -71
- package/src/chat-protocol/env-flag.ts +0 -39
- package/src/chat-protocol/events.ts +0 -232
- package/src/chat-protocol/frames.ts +0 -245
- package/src/chat-protocol/index.ts +0 -21
- package/src/chat-protocol/ip-normalize.ts +0 -146
- package/src/chat-protocol/nats-decoder.ts +0 -252
- package/src/components/chat/__tests__/chat-message-streaming-memo.test.tsx +0 -207
- package/src/components/chat/__tests__/chat-pending-turn.test.tsx +0 -209
- package/src/components/chat/hooks/__tests__/__snapshots__/conversation-id-persistence-golden.test.ts.snap +0 -37
- package/src/components/chat/hooks/__tests__/__snapshots__/sse-stream-golden.test.ts.snap +0 -0
- package/src/components/chat/hooks/__tests__/conversation-id-persistence-golden.test.ts +0 -438
- package/src/components/chat/hooks/__tests__/sse-stream-golden.test.ts +0 -318
- package/src/components/chat/stream/__tests__/__snapshots__/chat-stream-reducer-golden.test.ts.snap +0 -940
- package/src/components/chat/stream/__tests__/chat-dialog-store.test.ts +0 -756
- package/src/components/chat/stream/__tests__/chat-stream-reducer-golden.test.ts +0 -460
- package/src/components/chat/stream/__tests__/chat-stream-reducer.test.ts +0 -894
- package/src/components/chat/stream/__tests__/delta-batcher.test.ts +0 -255
- package/src/components/chat/stream/__tests__/use-chat-stream-reducer.test.ts +0 -98
- package/src/components/chat/stream/chat-dialog-store.ts +0 -536
- package/src/components/chat/stream/chat-stream-reducer.ts +0 -1796
- package/src/components/chat/stream/delta-batcher.ts +0 -159
- package/src/components/chat/stream/index.ts +0 -55
- package/src/components/chat/stream/message-mutations.ts +0 -338
- package/src/components/chat/stream/use-chat-stream-reducer.ts +0 -126
- package/src/components/chat/utils/__tests__/__snapshots__/process-historical-messages-golden.test.ts.snap +0 -420
- package/src/components/chat/utils/__tests__/__snapshots__/segment-accumulator-golden.test.ts.snap +0 -605
- package/src/components/chat/utils/__tests__/process-historical-messages-golden.test.ts +0 -317
- package/src/components/chat/utils/__tests__/segment-accumulator-golden.test.ts +0 -270
- package/src/components/ui/__tests__/__snapshots__/markdown-parity.test.tsx.snap +0 -2420
- package/src/components/ui/__tests__/markdown-parity.test.tsx +0 -2528
- package/src/components/ui/markdown/__tests__/mermaid-security.test.ts +0 -115
- package/src/components/ui/markdown/__tests__/mermaid-stale-render.test.tsx +0 -95
- package/src/components/ui/markdown/__tests__/sanitize-invariant.test.ts +0 -309
- package/src/components/ui/markdown/__tests__/streaming.test.tsx +0 -388
- package/src/components/ui/markdown/base-components.tsx +0 -360
- package/src/components/ui/markdown/engine.tsx +0 -315
- package/src/components/ui/markdown/heading-ids.ts +0 -239
- package/src/components/ui/markdown/index.ts +0 -49
- package/src/components/ui/markdown/mermaid-diagram.tsx +0 -291
- package/src/components/ui/markdown/rich/embed-overrides.tsx +0 -199
- package/src/components/ui/markdown/rich/rich-markdown-renderer.tsx +0 -184
- package/src/components/ui/markdown/rich/shortcodes.ts +0 -170
- package/src/components/ui/markdown/sanitize.ts +0 -3499
- package/src/components/ui/markdown/simple-markdown-renderer.tsx +0 -28
- package/src/components/ui/markdown/streaming.ts +0 -362
- package/src/components/ui/markdown/text-size.ts +0 -106
- package/src/utils/markdown-fences.ts +0 -127
- package/src/utils/markdown-heading-id.ts +0 -348
- /package/dist/{chunk-GTWO5NAY.js.map → chunk-6CFFISUC.js.map} +0 -0
- /package/dist/{chunk-VHG6AX5V.js.map → chunk-6CJ2K7BD.js.map} +0 -0
- /package/dist/{chunk-4NWARV5I.js.map → chunk-6QK3ONDD.js.map} +0 -0
- /package/dist/{chunk-CORIBKHG.js.map → chunk-EGXCWZYP.js.map} +0 -0
- /package/dist/{chunk-HSACATCD.js.map → chunk-MPYDX5WX.js.map} +0 -0
- /package/dist/{chunk-RQLBHKXN.js.map → chunk-NGEFYPY7.js.map} +0 -0
- /package/dist/{chunk-YZ2OIYQ3.js.map → chunk-VDZO6IDR.js.map} +0 -0
- /package/dist/{chunk-UUYRJPGJ.js.map → chunk-VL2YMDPH.js.map} +0 -0
- /package/dist/{chunk-XQ2B74SI.js.map → chunk-WLM3F3WU.js.map} +0 -0
|
@@ -1,46 +1,49 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
Barrel export file
|
|
1
|
+
<!-- source-hash: 31ada6e53cd71ce93d35361e48559a56 -->
|
|
2
|
+
Barrel export file (`'use client'`) that re-exports all React hooks from the chat hooks module, providing a single import surface for consumers.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
6
|
+
### Streaming & Real-time Hooks
|
|
7
|
+
- **`useChunkCatchup`** — Replays missed chunks after reconnection
|
|
8
|
+
- **`useScriptedStream`** — Drives scripted/mock streaming sequences
|
|
9
|
+
- **`useRealtimeChunkProcessor`** — Processes incoming real-time message chunks
|
|
10
|
+
- **`useJetstreamDialogSubscription`** / **`useNatsDialogSubscription`** — NATS/JetStream transport subscriptions
|
|
11
|
+
- **`useCollapsible`** — Collapsible UI state management
|
|
12
|
+
|
|
13
|
+
### Chat Core Hooks
|
|
14
|
+
- **`useChat`** / **`useSSE`** — Core chat and Server-Sent Events hooks (ported from hub, without `MockChatService`/`useChatConfig`)
|
|
15
|
+
- **`useSlashCommands`** — Slash command parsing and dispatch
|
|
16
|
+
- **`useEmptyStateConfig`** — Empty state configuration
|
|
17
|
+
- **`useChatAttachments`** / **`useChatAttachmentImageGallery`** — File attachment handling and image gallery
|
|
18
|
+
- **`useChatIdentity`** — Chat user/agent identity resolution
|
|
19
|
+
- **`useChatCardItem`** — Chat card rendering state
|
|
20
|
+
- **`useCloseOnNavigation`** — Dismisses dialogs/panels on route change
|
|
21
|
+
|
|
22
|
+
### Unified Chat Surface
|
|
23
|
+
- **`useUnifiedChat`** — Primary public hook; selects transport by `activeMode`
|
|
24
|
+
- **`useSSEChatAdapter`** / **`useNatsChatAdapter`** — Transport adapters (SSE and NATS)
|
|
25
|
+
- **`useEmbeddedChat`** — Legacy SSE alias for embedded surfaces
|
|
26
|
+
|
|
27
|
+
### Utilities
|
|
28
|
+
- **`useProxiedImageUrl`** — Resolves proxied image URLs from `ChatRuntime.endpoints`
|
|
14
29
|
|
|
15
30
|
## Usage Example
|
|
16
31
|
|
|
17
32
|
```typescript
|
|
18
|
-
//
|
|
33
|
+
// Preferred: import everything from the barrel
|
|
19
34
|
import {
|
|
20
35
|
useUnifiedChat,
|
|
21
36
|
useChatAttachments,
|
|
22
|
-
|
|
23
|
-
} from '@
|
|
37
|
+
useProxiedImageUrl,
|
|
38
|
+
} from '@openframe/chat-hooks'
|
|
24
39
|
|
|
25
40
|
function ChatPanel({ modes, activeMode }) {
|
|
26
|
-
const
|
|
27
|
-
const attachments = useChatAttachments()
|
|
28
|
-
const
|
|
41
|
+
const { messages, send } = useUnifiedChat({ modes, activeMode })
|
|
42
|
+
const { attachments, addAttachment } = useChatAttachments()
|
|
43
|
+
const proxied = useProxiedImageUrl(rawImageUrl)
|
|
29
44
|
|
|
30
|
-
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
// Advanced: direct transport access
|
|
34
|
-
import { useNatsChatAdapter } from '@flamingo/chat-hooks'
|
|
35
|
-
|
|
36
|
-
function CustomTransportPanel() {
|
|
37
|
-
const nats = useNatsChatAdapter({ /* config */ })
|
|
38
|
-
// ...
|
|
45
|
+
return <ChatUI messages={messages} onSend={send} />
|
|
39
46
|
}
|
|
40
47
|
```
|
|
41
48
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
- Marked `'use client'` — safe for React Server Component trees; hooks run only on the client.
|
|
45
|
-
- `useUnifiedChat` is the recommended entry point for new consumers; `useEmbeddedChat` is the legacy SSE alias kept for backward compatibility.
|
|
46
|
-
- `useProxiedImageUrl` reads proxy config from `ChatRuntime.endpoints`, keeping image-proxy resolution consistent between hub and embedder environments.
|
|
49
|
+
> **Note:** For standard usage, prefer `useUnifiedChat`. The adapter hooks (`useSSEChatAdapter`, `useNatsChatAdapter`) are exposed for advanced cases requiring direct transport access.
|
|
@@ -1,52 +1,71 @@
|
|
|
1
|
-
<!-- source-hash:
|
|
2
|
-
|
|
1
|
+
<!-- source-hash: 3fbde71f6e5fc7f9b4576423ebdb08e2 -->
|
|
2
|
+
Thin wrapper that wires together NATS subscriptions, real-time chunk processing, and dialog management into a single `UnifiedChatState` object for the Mingo/NATS transport mode of the unified chat surface.
|
|
3
3
|
|
|
4
4
|
## Key Components
|
|
5
5
|
|
|
6
6
|
### `UseNatsChatAdapterConfig`
|
|
7
|
-
|
|
8
|
-
- `dialogId`
|
|
9
|
-
- `
|
|
10
|
-
- `publishUserMessage` — consumer-owned send callback (HTTP POST or NATS publish)
|
|
11
|
-
- `fetchChunks` — optional historical chunk fetcher for catchup
|
|
12
|
-
- `clientConfig` — optional NATS auth credentials
|
|
13
|
-
- `enableThinking` / `batchApprovalsEnabled` — processor feature flags
|
|
7
|
+
Primary configuration interface with two operational modes:
|
|
8
|
+
- **Bare-transport mode** — caller supplies `dialogId` explicitly and owns dialog lifecycle (original v0 API, used by Tauri Fae Chat)
|
|
9
|
+
- **Managed-dialog mode** — caller supplies `fetchDialogs` and related callbacks; the adapter owns dialog state, pagination, and history
|
|
14
10
|
|
|
15
|
-
###
|
|
16
|
-
- `active` — gates the live subscription; keeps message state alive while the mode is hidden
|
|
11
|
+
### Core Config Fields
|
|
17
12
|
|
|
18
|
-
|
|
19
|
-
|
|
13
|
+
| Field | Required | Description |
|
|
14
|
+
|-------|----------|-------------|
|
|
15
|
+
| `getNatsWsUrl` | ✅ | Returns the NATS WebSocket URL or `null` to suspend |
|
|
16
|
+
| `publishUserMessage` | ✅ | Consumer-owned send callback (HTTP POST or NATS publish) |
|
|
17
|
+
| `dialogId` | ❌ | Explicit dialog ID (bare-transport mode) |
|
|
18
|
+
| `fetchDialogs` | ❌ | Enables managed-dialog mode with sidebar support |
|
|
19
|
+
| `fetchDialogMessages` | ❌ | Populates history on dialog switch |
|
|
20
|
+
| `topics` | ❌ | NATS subject suffixes to tail (default: `['message']`) |
|
|
21
|
+
|
|
22
|
+
### Supporting Interfaces
|
|
23
|
+
|
|
24
|
+
- **`FetchDialogsParams`** / **`FetchDialogsResult`** — paginated dialog list with cursor-based pagination
|
|
25
|
+
- **`FetchDialogMessagesParams`** / **`FetchDialogMessagesResult`** — paginated message history with optional `tokenUsage`
|
|
26
|
+
|
|
27
|
+
### Composition Stack
|
|
20
28
|
|
|
21
29
|
```text
|
|
22
|
-
useNatsDialogSubscription →
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
useChunkCatchup →
|
|
30
|
+
useNatsDialogSubscription → live NATS event tail
|
|
31
|
+
↓
|
|
32
|
+
useRealtimeChunkProcessor → chunk → MessageSegment[]
|
|
33
|
+
↓
|
|
34
|
+
useChunkCatchup → back-fills missed chunks on reconnect
|
|
35
|
+
↓
|
|
36
|
+
config.publishUserMessage → consumer-owned send (HTTP/NATS)
|
|
27
37
|
```
|
|
28
38
|
|
|
29
|
-
Returns a full `UnifiedChatState` object including `messages`, `isLoading`, `streamingPhase`, `sendMessage`, `stopMessage`, and `clearMessages`.
|
|
30
|
-
|
|
31
39
|
## Usage Example
|
|
32
40
|
|
|
33
41
|
```typescript
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
},
|
|
44
|
-
fetchChunks: ({ dialogId, after }) =>
|
|
45
|
-
fetch(`/api/chunks?dialogId=${dialogId}&after=${after}`).then(r => r.json()),
|
|
46
|
-
batchApprovalsEnabled: true,
|
|
42
|
+
// Bare-transport mode (v0 — Tauri Fae Chat)
|
|
43
|
+
const chatState = useNatsChatAdapter({
|
|
44
|
+
dialogId: activeDialogId,
|
|
45
|
+
getNatsWsUrl: () => `wss://nats.example.com`,
|
|
46
|
+
publishUserMessage: async (text, { dialogId }) => {
|
|
47
|
+
await fetch(`/api/chat/${dialogId}/message`, {
|
|
48
|
+
method: 'POST',
|
|
49
|
+
body: JSON.stringify({ text }),
|
|
50
|
+
})
|
|
47
51
|
},
|
|
48
|
-
|
|
49
|
-
)
|
|
52
|
+
topics: ['admin-message'],
|
|
53
|
+
})
|
|
54
|
+
|
|
55
|
+
// Managed-dialog mode (openframe-frontend / EmbeddableChat)
|
|
56
|
+
const chatState = useNatsChatAdapter({
|
|
57
|
+
getNatsWsUrl: () => natsUrl,
|
|
58
|
+
publishUserMessage: sendMessage,
|
|
59
|
+
fetchDialogs: async ({ cursor, limit }) => api.listDialogs({ cursor, limit }),
|
|
60
|
+
fetchDialogMessages: async ({ dialogId, cursor }) =>
|
|
61
|
+
api.getMessages(dialogId, { cursor }),
|
|
62
|
+
createDialog: () => api.createDialog(),
|
|
63
|
+
deleteDialog: (id) => api.deleteDialog(id),
|
|
64
|
+
approveRequest: (requestId) => api.approve(requestId),
|
|
65
|
+
rejectRequest: (requestId, reason) => api.reject(requestId, reason),
|
|
66
|
+
})
|
|
50
67
|
```
|
|
51
68
|
|
|
52
|
-
> **Note:** `
|
|
69
|
+
> **Note:** Set `topics: ['admin-message']` for Mingo/admin deployments. The default `'message'` topic is for Fae client-chat. Mismatched topics cause the assistant to hang in the `thinking` phase indefinitely.
|
|
70
|
+
|
|
71
|
+
**Source:** [`use-nats-chat-adapter.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/use-nats-chat-adapter.ts)
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
<!-- source-hash: 681c783784fdc89f0c86eb3e539c482b -->
|
|
2
|
+
Processes real-time NATS streaming chunks into structured message segments, managing streaming state, approval flows, direct-mode barriers, and tool execution events for AI assistant chat interfaces.
|
|
3
|
+
|
|
4
|
+
## Key Components
|
|
5
|
+
|
|
6
|
+
### `useRealtimeChunkProcessor(options)`
|
|
7
|
+
|
|
8
|
+
Main hook export. Accepts `UseRealtimeChunkProcessorOptions` and returns `UseRealtimeChunkProcessorReturn`.
|
|
9
|
+
|
|
10
|
+
**Options:**
|
|
11
|
+
|
|
12
|
+
| Option | Type | Default | Description |
|
|
13
|
+
|---|---|---|---|
|
|
14
|
+
| `callbacks` | `object` | required | Event handlers (`onSegmentsUpdate`, `onStreamStart`, `onStreamEnd`, `onApprove`, `onReject`, etc.) |
|
|
15
|
+
| `displayApprovalTypes` | `string[]` | `['CLIENT']` | Approval types rendered inline; others are escalated |
|
|
16
|
+
| `approvalStatuses` | `object` | `{}` | Current status map keyed by `requestId` |
|
|
17
|
+
| `initialState` | `object` | — | Hydrates accumulator for resumed dialogs |
|
|
18
|
+
| `batchApprovalsEnabled` | `boolean` | `true` | Renders batch approvals as a single card; `false` unfolds into individual cards |
|
|
19
|
+
| `isDirectMode` | `boolean` | `false` | Activates the direct-mode barrier, dropping AI assistant chunks |
|
|
20
|
+
|
|
21
|
+
### Internal Refs
|
|
22
|
+
|
|
23
|
+
| Ref | Purpose |
|
|
24
|
+
|---|---|
|
|
25
|
+
| `accumulatorRef` | `MessageSegmentAccumulator` instance managing segment state |
|
|
26
|
+
| `isInStreamRef` | Tracks open/closed stream window (`MESSAGE_START` → `MESSAGE_END`) |
|
|
27
|
+
| `hasEverStreamedRef` | Distinguishes cold-start vs. post-stream continuation for append mode |
|
|
28
|
+
| `directModeFlagRef` / `sawDirectMessageRef` | Direct-mode barrier gate |
|
|
29
|
+
| `directTeardownFiredRef` | One-shot guard: ensures teardown fires exactly once on barrier entry |
|
|
30
|
+
| `pendingEscalatedRef` | Map of escalated approval requests not shown inline |
|
|
31
|
+
|
|
32
|
+
### Supported Chunk Actions
|
|
33
|
+
|
|
34
|
+
| Action | Behavior |
|
|
35
|
+
|---|---|
|
|
36
|
+
| `message_start` / `message_end` | Opens/closes stream, resets accumulator |
|
|
37
|
+
| `text` / `thinking` | Appends to accumulator; uses append-mode after `MESSAGE_END` |
|
|
38
|
+
| `tool_execution` | Routes in-stream to accumulator; post-stream to `onToolExecuted` callback |
|
|
39
|
+
| `approval_request` | Inline or escalated based on `displayApprovalTypes` |
|
|
40
|
+
| `approval_batch` | Single batch card, legacy card fan-out, or escalated |
|
|
41
|
+
| `metadata` | Forwarded directly to `onMetadata` |
|
|
42
|
+
| `direct_message` | Activates direct-mode barrier |
|
|
43
|
+
|
|
44
|
+
## Usage Example
|
|
45
|
+
|
|
46
|
+
```typescript
|
|
47
|
+
const { processChunk } = useRealtimeChunkProcessor({
|
|
48
|
+
callbacks: {
|
|
49
|
+
onSegmentsUpdate: (segments, meta) => setSegments(segments),
|
|
50
|
+
onStreamStart: () => setIsStreaming(true),
|
|
51
|
+
onStreamEnd: () => setIsStreaming(false),
|
|
52
|
+
onApprove: (requestId) => approveAction(requestId),
|
|
53
|
+
onReject: (requestId) => rejectAction(requestId),
|
|
54
|
+
onEscalatedApproval: (requestId, data) => notifyAdmin(requestId, data),
|
|
55
|
+
onToolExecuted: (segment) => updateToolCard(segment),
|
|
56
|
+
onAgentBusy: () => showTypingIndicator(),
|
|
57
|
+
onMetadata: (meta) => handleMetadata(meta),
|
|
58
|
+
},
|
|
59
|
+
displayApprovalTypes: ['CLIENT'],
|
|
60
|
+
batchApprovalsEnabled: true,
|
|
61
|
+
isDirectMode: false,
|
|
62
|
+
approvalStatuses: { 'req-123': 'approved' },
|
|
63
|
+
})
|
|
64
|
+
|
|
65
|
+
// Wire to your NATS subscription
|
|
66
|
+
natsSubscription.onMessage((rawChunk) => {
|
|
67
|
+
processChunk(rawChunk)
|
|
68
|
+
})
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Direct-Mode Barrier
|
|
72
|
+
|
|
73
|
+
When `isDirectMode` is `true` or a `direct_message` chunk arrives, the hook drops all subsequent AI-assistant chunks (everything not in `DIRECT_MODE_ALLOWED`). Teardown fires exactly once — clearing the typing indicator, composer lock, and in-progress bubble — even if no stream is currently open (e.g., during post-approval tool execution).
|
|
74
|
+
|
|
75
|
+
## Source
|
|
76
|
+
|
|
77
|
+
[`use-realtime-chunk-processor.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/use-realtime-chunk-processor.ts)
|
|
@@ -5,6 +5,7 @@ export * from './use-collapsible'
|
|
|
5
5
|
export * from './use-scripted-stream'
|
|
6
6
|
export * from './use-jetstream-dialog-subscription'
|
|
7
7
|
export * from './use-nats-dialog-subscription'
|
|
8
|
+
export * from './use-realtime-chunk-processor'
|
|
8
9
|
|
|
9
10
|
// Chat hooks migrated from hub `hooks/*` (Task #7).
|
|
10
11
|
export * from './use-slash-commands'
|
|
@@ -1,13 +1,5 @@
|
|
|
1
1
|
'use client'
|
|
2
2
|
|
|
3
|
-
/**
|
|
4
|
-
* @deprecated Phase 3 of the chat unification moved the SSE adapter off this
|
|
5
|
-
* hook — its trailing-assistant merge + `decision_resolved` receipt path now
|
|
6
|
-
* live in `../stream/chat-stream-reducer` (transport: 'sse'). No lib-internal
|
|
7
|
-
* code consumes `useChat`/`useSSE` anymore; they remain exported for external
|
|
8
|
-
* consumers until Phase 4 migrates them, then get deleted (Phase 6).
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
3
|
import { useState, useCallback, useEffect, useRef } from 'react'
|
|
12
4
|
import { useSSE, type StreamFn, type StreamFnExtraOptions } from './use-sse'
|
|
13
5
|
import type {
|