@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.
Files changed (293) hide show
  1. package/dist/{chunk-5CJR2GZ4.cjs → chunk-2MKUHJ3O.cjs} +31 -31
  2. package/dist/{chunk-5CJR2GZ4.cjs.map → chunk-2MKUHJ3O.cjs.map} +1 -1
  3. package/dist/{chunk-S2NHJDKQ.cjs → chunk-3IEVA5AO.cjs} +62 -62
  4. package/dist/{chunk-S2NHJDKQ.cjs.map → chunk-3IEVA5AO.cjs.map} +1 -1
  5. package/dist/{chunk-GTWO5NAY.js → chunk-6CFFISUC.js} +2 -2
  6. package/dist/{chunk-VHG6AX5V.js → chunk-6CJ2K7BD.js} +2 -2
  7. package/dist/{chunk-4NWARV5I.js → chunk-6QK3ONDD.js} +2 -2
  8. package/dist/{chunk-YHOIAA2E.cjs → chunk-7I42V2OD.cjs} +60 -60
  9. package/dist/chunk-7I42V2OD.cjs.map +1 -0
  10. package/dist/{chunk-T2EGSZFN.js → chunk-AIRNG27G.js} +5 -6
  11. package/dist/chunk-AIRNG27G.js.map +1 -0
  12. package/dist/{chunk-NWX7MMF5.cjs → chunk-AW63ET2A.cjs} +15 -15
  13. package/dist/{chunk-NWX7MMF5.cjs.map → chunk-AW63ET2A.cjs.map} +1 -1
  14. package/dist/{chunk-TKN5667N.js → chunk-BZMOEWWS.js} +10 -10
  15. package/dist/chunk-BZMOEWWS.js.map +1 -0
  16. package/dist/{chunk-DSDZ5T4P.cjs → chunk-D5LQMRPU.cjs} +5 -5
  17. package/dist/{chunk-DSDZ5T4P.cjs.map → chunk-D5LQMRPU.cjs.map} +1 -1
  18. package/dist/{chunk-CORIBKHG.js → chunk-EGXCWZYP.js} +2 -2
  19. package/dist/{chunk-5EYRXSY5.cjs → chunk-EJQUYZXF.cjs} +9 -9
  20. package/dist/{chunk-5EYRXSY5.cjs.map → chunk-EJQUYZXF.cjs.map} +1 -1
  21. package/dist/{chunk-P4WTZU6L.cjs → chunk-FY5XAW3H.cjs} +11 -11
  22. package/dist/{chunk-P4WTZU6L.cjs.map → chunk-FY5XAW3H.cjs.map} +1 -1
  23. package/dist/{chunk-VQ523ORK.cjs → chunk-GMPYR3MX.cjs} +26 -26
  24. package/dist/{chunk-VQ523ORK.cjs.map → chunk-GMPYR3MX.cjs.map} +1 -1
  25. package/dist/{chunk-QSCHCZL3.cjs → chunk-GUTYUMGV.cjs} +7 -7
  26. package/dist/{chunk-QSCHCZL3.cjs.map → chunk-GUTYUMGV.cjs.map} +1 -1
  27. package/dist/{chunk-Q6E7VJ4W.cjs → chunk-IEZ3YBAP.cjs} +27 -28
  28. package/dist/chunk-IEZ3YBAP.cjs.map +1 -0
  29. package/dist/{chunk-HSACATCD.js → chunk-MPYDX5WX.js} +2 -2
  30. package/dist/{chunk-RQLBHKXN.js → chunk-NGEFYPY7.js} +2 -2
  31. package/dist/{chunk-BE6DK7QY.js → chunk-OQIMH2WQ.js} +8985 -11081
  32. package/dist/chunk-OQIMH2WQ.js.map +1 -0
  33. package/dist/{chunk-CSYSYJCF.cjs → chunk-UZZT65PQ.cjs} +37 -37
  34. package/dist/{chunk-CSYSYJCF.cjs.map → chunk-UZZT65PQ.cjs.map} +1 -1
  35. package/dist/{chunk-YZ2OIYQ3.js → chunk-VDZO6IDR.js} +4 -4
  36. package/dist/{chunk-UUYRJPGJ.js → chunk-VL2YMDPH.js} +4 -4
  37. package/dist/{chunk-5LMGFI4J.cjs → chunk-VUXNXWOQ.cjs} +4946 -7042
  38. package/dist/chunk-VUXNXWOQ.cjs.map +1 -0
  39. package/dist/{chunk-XQ2B74SI.js → chunk-WLM3F3WU.js} +2 -2
  40. package/dist/components/case-studies/index.cjs +8 -8
  41. package/dist/components/case-studies/index.js +2 -2
  42. package/dist/components/chat/chat-message-enhanced.d.ts.map +1 -1
  43. package/dist/components/chat/chat-message-list.d.ts.map +1 -1
  44. package/dist/components/chat/guide-display.d.ts +14 -0
  45. package/dist/components/chat/guide-display.d.ts.map +1 -0
  46. package/dist/components/chat/hooks/index.d.ts +1 -0
  47. package/dist/components/chat/hooks/index.d.ts.map +1 -1
  48. package/dist/components/chat/hooks/use-chat.d.ts.map +1 -1
  49. package/dist/components/chat/hooks/use-nats-chat-adapter.d.ts +48 -15
  50. package/dist/components/chat/hooks/use-nats-chat-adapter.d.ts.map +1 -1
  51. package/dist/components/chat/hooks/use-realtime-chunk-processor.d.ts +6 -0
  52. package/dist/components/chat/hooks/use-realtime-chunk-processor.d.ts.map +1 -0
  53. package/dist/components/chat/hooks/use-sse-chat-adapter.d.ts +57 -10
  54. package/dist/components/chat/hooks/use-sse-chat-adapter.d.ts.map +1 -1
  55. package/dist/components/chat/index.cjs +2 -8
  56. package/dist/components/chat/index.cjs.map +1 -1
  57. package/dist/components/chat/index.d.ts +1 -1
  58. package/dist/components/chat/index.d.ts.map +1 -1
  59. package/dist/components/chat/index.js +15 -21
  60. package/dist/components/chat/types/api.types.d.ts +81 -1
  61. package/dist/components/chat/types/api.types.d.ts.map +1 -1
  62. package/dist/components/chat/types/component.types.d.ts +6 -0
  63. package/dist/components/chat/types/component.types.d.ts.map +1 -1
  64. package/dist/components/chat/types/message.types.d.ts +15 -2
  65. package/dist/components/chat/types/message.types.d.ts.map +1 -1
  66. package/dist/components/chat/types/processing.types.d.ts +93 -2
  67. package/dist/components/chat/types/processing.types.d.ts.map +1 -1
  68. package/dist/components/chat/utils/chunk-parser.d.ts +25 -0
  69. package/dist/components/chat/utils/chunk-parser.d.ts.map +1 -0
  70. package/dist/components/chat/utils/extract-incomplete-message-state.d.ts +6 -34
  71. package/dist/components/chat/utils/extract-incomplete-message-state.d.ts.map +1 -1
  72. package/dist/components/chat/utils/index.d.ts +3 -2
  73. package/dist/components/chat/utils/index.d.ts.map +1 -1
  74. package/dist/components/chat/utils/message-segment-accumulator.d.ts +5 -0
  75. package/dist/components/chat/utils/message-segment-accumulator.d.ts.map +1 -1
  76. package/dist/components/chat/utils/process-historical-messages.d.ts +11 -59
  77. package/dist/components/chat/utils/process-historical-messages.d.ts.map +1 -1
  78. package/dist/components/contact/index.cjs +3 -3
  79. package/dist/components/contact/index.js +2 -2
  80. package/dist/components/docs/index.cjs +5 -5
  81. package/dist/components/docs/index.js +4 -4
  82. package/dist/components/embeds/index.cjs +3 -3
  83. package/dist/components/embeds/index.js +2 -2
  84. package/dist/components/faq/index.cjs +3 -3
  85. package/dist/components/faq/index.js +2 -2
  86. package/dist/components/features/index.cjs +2 -2
  87. package/dist/components/features/index.js +1 -1
  88. package/dist/components/help-center-pages/index.cjs +20 -20
  89. package/dist/components/help-center-pages/index.js +11 -11
  90. package/dist/components/index.cjs +130 -170
  91. package/dist/components/index.cjs.map +1 -1
  92. package/dist/components/index.js +23 -63
  93. package/dist/components/index.js.map +1 -1
  94. package/dist/components/navigation/index.cjs +2 -2
  95. package/dist/components/navigation/index.js +1 -1
  96. package/dist/components/onboarding-guides/index.cjs +5 -5
  97. package/dist/components/onboarding-guides/index.js +4 -4
  98. package/dist/components/onboarding-guides/onboarding-guide-detail-view.d.ts.map +1 -1
  99. package/dist/components/related-content/index.cjs +3 -3
  100. package/dist/components/related-content/index.js +2 -2
  101. package/dist/components/shared/product-release/release-detail-page.d.ts.map +1 -1
  102. package/dist/components/tickets/index.cjs +5 -5
  103. package/dist/components/tickets/index.js +4 -4
  104. package/dist/components/ui/index.cjs +2 -42
  105. package/dist/components/ui/index.cjs.map +1 -1
  106. package/dist/components/ui/index.d.ts +2 -1
  107. package/dist/components/ui/index.d.ts.map +1 -1
  108. package/dist/components/ui/index.js +15 -55
  109. package/dist/components/ui/rich-markdown-renderer.d.ts +34 -0
  110. package/dist/components/ui/rich-markdown-renderer.d.ts.map +1 -0
  111. package/dist/components/ui/simple-markdown-renderer.d.ts +73 -0
  112. package/dist/components/ui/simple-markdown-renderer.d.ts.map +1 -0
  113. package/dist/index.cjs +2 -58
  114. package/dist/index.cjs.map +1 -1
  115. package/dist/index.js +15 -71
  116. package/dist/utils/index.cjs +40 -169
  117. package/dist/utils/index.cjs.map +1 -1
  118. package/dist/utils/index.d.ts +0 -1
  119. package/dist/utils/index.d.ts.map +1 -1
  120. package/dist/utils/index.js +41 -162
  121. package/dist/utils/index.js.map +1 -1
  122. package/dist/utils/markdown-section-extractor.d.ts.map +1 -1
  123. package/package.json +1 -7
  124. package/src/components/chat/__tests__/chat-message-list.test.tsx +5 -293
  125. package/src/components/chat/chat-message-enhanced.tsx +80 -163
  126. package/src/components/chat/chat-message-list.tsx +109 -358
  127. package/src/components/chat/embeddable-chat.tsx +0 -6
  128. package/src/components/chat/guide-display.tsx +44 -0
  129. package/src/components/chat/hooks/.index.md +33 -30
  130. package/src/components/chat/hooks/.use-nats-chat-adapter.md +55 -36
  131. package/src/components/chat/hooks/.use-realtime-chunk-processor.md +77 -0
  132. package/src/components/chat/hooks/index.ts +1 -0
  133. package/src/components/chat/hooks/use-chat.ts +0 -8
  134. package/src/components/chat/hooks/use-nats-chat-adapter.ts +825 -243
  135. package/src/components/chat/hooks/use-realtime-chunk-processor.ts +489 -0
  136. package/src/components/chat/hooks/use-sse-chat-adapter.ts +684 -380
  137. package/src/components/chat/index.ts +1 -5
  138. package/src/components/chat/thinking-display.tsx +1 -1
  139. package/src/components/chat/types/.api.types.md +49 -39
  140. package/src/components/chat/types/.processing.types.md +58 -29
  141. package/src/components/chat/types/api.types.ts +73 -6
  142. package/src/components/chat/types/component.types.ts +9 -0
  143. package/src/components/chat/types/message.types.ts +17 -1
  144. package/src/components/chat/types/processing.types.ts +53 -11
  145. package/src/components/chat/utils/.chunk-parser.md +62 -0
  146. package/src/components/chat/utils/.index.md +40 -31
  147. package/src/components/chat/utils/chunk-parser.ts +262 -0
  148. package/src/components/chat/utils/extract-incomplete-message-state.ts +5 -63
  149. package/src/components/chat/utils/index.ts +8 -5
  150. package/src/components/chat/utils/message-segment-accumulator.ts +19 -0
  151. package/src/components/chat/utils/process-historical-messages.ts +390 -352
  152. package/src/components/onboarding-guides/onboarding-guide-detail-view.tsx +4 -22
  153. package/src/components/shared/legal-document/legal-document-page.tsx +1 -1
  154. package/src/components/shared/product-release/release-detail-page.tsx +4 -19
  155. package/src/components/ui/.simple-markdown-renderer.md +52 -0
  156. package/src/components/ui/index.ts +2 -1
  157. package/src/components/ui/release-changelog-section.tsx +1 -1
  158. package/src/components/ui/rich-markdown-renderer.tsx +1223 -0
  159. package/src/components/ui/simple-markdown-renderer.tsx +964 -0
  160. package/src/components/ui/ticket-info-section.tsx +1 -1
  161. package/src/stories/ChatMessageEnhanced.stories.tsx +48 -1
  162. package/src/utils/index.ts +0 -1
  163. package/src/utils/markdown-section-extractor.ts +56 -41
  164. package/dist/chat-protocol/decode.d.ts +0 -58
  165. package/dist/chat-protocol/decode.d.ts.map +0 -1
  166. package/dist/chat-protocol/encode.d.ts +0 -44
  167. package/dist/chat-protocol/encode.d.ts.map +0 -1
  168. package/dist/chat-protocol/env-flag.d.ts +0 -35
  169. package/dist/chat-protocol/env-flag.d.ts.map +0 -1
  170. package/dist/chat-protocol/events.d.ts +0 -196
  171. package/dist/chat-protocol/events.d.ts.map +0 -1
  172. package/dist/chat-protocol/frames.d.ts +0 -213
  173. package/dist/chat-protocol/frames.d.ts.map +0 -1
  174. package/dist/chat-protocol/index.cjs +0 -494
  175. package/dist/chat-protocol/index.cjs.map +0 -1
  176. package/dist/chat-protocol/index.d.ts +0 -18
  177. package/dist/chat-protocol/index.d.ts.map +0 -1
  178. package/dist/chat-protocol/index.js +0 -478
  179. package/dist/chat-protocol/index.js.map +0 -1
  180. package/dist/chat-protocol/ip-normalize.d.ts +0 -44
  181. package/dist/chat-protocol/ip-normalize.d.ts.map +0 -1
  182. package/dist/chat-protocol/nats-decoder.d.ts +0 -26
  183. package/dist/chat-protocol/nats-decoder.d.ts.map +0 -1
  184. package/dist/chunk-5LMGFI4J.cjs.map +0 -1
  185. package/dist/chunk-BE6DK7QY.js.map +0 -1
  186. package/dist/chunk-Q6E7VJ4W.cjs.map +0 -1
  187. package/dist/chunk-T2EGSZFN.js.map +0 -1
  188. package/dist/chunk-TKN5667N.js.map +0 -1
  189. package/dist/chunk-YHOIAA2E.cjs.map +0 -1
  190. package/dist/components/chat/stream/chat-dialog-store.d.ts +0 -184
  191. package/dist/components/chat/stream/chat-dialog-store.d.ts.map +0 -1
  192. package/dist/components/chat/stream/chat-stream-reducer.d.ts +0 -367
  193. package/dist/components/chat/stream/chat-stream-reducer.d.ts.map +0 -1
  194. package/dist/components/chat/stream/delta-batcher.d.ts +0 -51
  195. package/dist/components/chat/stream/delta-batcher.d.ts.map +0 -1
  196. package/dist/components/chat/stream/index.d.ts +0 -17
  197. package/dist/components/chat/stream/index.d.ts.map +0 -1
  198. package/dist/components/chat/stream/message-mutations.d.ts +0 -77
  199. package/dist/components/chat/stream/message-mutations.d.ts.map +0 -1
  200. package/dist/components/chat/stream/use-chat-stream-reducer.d.ts +0 -22
  201. package/dist/components/chat/stream/use-chat-stream-reducer.d.ts.map +0 -1
  202. package/dist/components/ui/markdown/base-components.d.ts +0 -51
  203. package/dist/components/ui/markdown/base-components.d.ts.map +0 -1
  204. package/dist/components/ui/markdown/engine.d.ts +0 -99
  205. package/dist/components/ui/markdown/engine.d.ts.map +0 -1
  206. package/dist/components/ui/markdown/heading-ids.d.ts +0 -65
  207. package/dist/components/ui/markdown/heading-ids.d.ts.map +0 -1
  208. package/dist/components/ui/markdown/index.d.ts +0 -18
  209. package/dist/components/ui/markdown/index.d.ts.map +0 -1
  210. package/dist/components/ui/markdown/mermaid-diagram.d.ts +0 -79
  211. package/dist/components/ui/markdown/mermaid-diagram.d.ts.map +0 -1
  212. package/dist/components/ui/markdown/rich/embed-overrides.d.ts +0 -14
  213. package/dist/components/ui/markdown/rich/embed-overrides.d.ts.map +0 -1
  214. package/dist/components/ui/markdown/rich/rich-markdown-renderer.d.ts +0 -40
  215. package/dist/components/ui/markdown/rich/rich-markdown-renderer.d.ts.map +0 -1
  216. package/dist/components/ui/markdown/rich/shortcodes.d.ts +0 -8
  217. package/dist/components/ui/markdown/rich/shortcodes.d.ts.map +0 -1
  218. package/dist/components/ui/markdown/sanitize.d.ts +0 -153
  219. package/dist/components/ui/markdown/sanitize.d.ts.map +0 -1
  220. package/dist/components/ui/markdown/simple-markdown-renderer.d.ts +0 -23
  221. package/dist/components/ui/markdown/simple-markdown-renderer.d.ts.map +0 -1
  222. package/dist/components/ui/markdown/streaming.d.ts +0 -78
  223. package/dist/components/ui/markdown/streaming.d.ts.map +0 -1
  224. package/dist/components/ui/markdown/text-size.d.ts +0 -34
  225. package/dist/components/ui/markdown/text-size.d.ts.map +0 -1
  226. package/dist/utils/markdown-fences.d.ts +0 -42
  227. package/dist/utils/markdown-fences.d.ts.map +0 -1
  228. package/dist/utils/markdown-heading-id.d.ts +0 -85
  229. package/dist/utils/markdown-heading-id.d.ts.map +0 -1
  230. package/src/chat-protocol/__tests__/__snapshots__/nats-decoder-golden.test.ts.snap +0 -307
  231. package/src/chat-protocol/__tests__/chat-protocol.test.ts +0 -516
  232. package/src/chat-protocol/__tests__/env-flag.test.ts +0 -52
  233. package/src/chat-protocol/__tests__/ip-normalize.test.ts +0 -136
  234. package/src/chat-protocol/__tests__/nats-decoder-golden.test.ts +0 -228
  235. package/src/chat-protocol/decode.ts +0 -278
  236. package/src/chat-protocol/encode.ts +0 -71
  237. package/src/chat-protocol/env-flag.ts +0 -39
  238. package/src/chat-protocol/events.ts +0 -232
  239. package/src/chat-protocol/frames.ts +0 -245
  240. package/src/chat-protocol/index.ts +0 -21
  241. package/src/chat-protocol/ip-normalize.ts +0 -146
  242. package/src/chat-protocol/nats-decoder.ts +0 -252
  243. package/src/components/chat/__tests__/chat-message-streaming-memo.test.tsx +0 -207
  244. package/src/components/chat/__tests__/chat-pending-turn.test.tsx +0 -209
  245. package/src/components/chat/hooks/__tests__/__snapshots__/conversation-id-persistence-golden.test.ts.snap +0 -37
  246. package/src/components/chat/hooks/__tests__/__snapshots__/sse-stream-golden.test.ts.snap +0 -0
  247. package/src/components/chat/hooks/__tests__/conversation-id-persistence-golden.test.ts +0 -438
  248. package/src/components/chat/hooks/__tests__/sse-stream-golden.test.ts +0 -318
  249. package/src/components/chat/stream/__tests__/__snapshots__/chat-stream-reducer-golden.test.ts.snap +0 -940
  250. package/src/components/chat/stream/__tests__/chat-dialog-store.test.ts +0 -756
  251. package/src/components/chat/stream/__tests__/chat-stream-reducer-golden.test.ts +0 -460
  252. package/src/components/chat/stream/__tests__/chat-stream-reducer.test.ts +0 -894
  253. package/src/components/chat/stream/__tests__/delta-batcher.test.ts +0 -255
  254. package/src/components/chat/stream/__tests__/use-chat-stream-reducer.test.ts +0 -98
  255. package/src/components/chat/stream/chat-dialog-store.ts +0 -536
  256. package/src/components/chat/stream/chat-stream-reducer.ts +0 -1796
  257. package/src/components/chat/stream/delta-batcher.ts +0 -159
  258. package/src/components/chat/stream/index.ts +0 -55
  259. package/src/components/chat/stream/message-mutations.ts +0 -338
  260. package/src/components/chat/stream/use-chat-stream-reducer.ts +0 -126
  261. package/src/components/chat/utils/__tests__/__snapshots__/process-historical-messages-golden.test.ts.snap +0 -420
  262. package/src/components/chat/utils/__tests__/__snapshots__/segment-accumulator-golden.test.ts.snap +0 -605
  263. package/src/components/chat/utils/__tests__/process-historical-messages-golden.test.ts +0 -317
  264. package/src/components/chat/utils/__tests__/segment-accumulator-golden.test.ts +0 -270
  265. package/src/components/ui/__tests__/__snapshots__/markdown-parity.test.tsx.snap +0 -2420
  266. package/src/components/ui/__tests__/markdown-parity.test.tsx +0 -2528
  267. package/src/components/ui/markdown/__tests__/mermaid-security.test.ts +0 -115
  268. package/src/components/ui/markdown/__tests__/mermaid-stale-render.test.tsx +0 -95
  269. package/src/components/ui/markdown/__tests__/sanitize-invariant.test.ts +0 -309
  270. package/src/components/ui/markdown/__tests__/streaming.test.tsx +0 -388
  271. package/src/components/ui/markdown/base-components.tsx +0 -360
  272. package/src/components/ui/markdown/engine.tsx +0 -315
  273. package/src/components/ui/markdown/heading-ids.ts +0 -239
  274. package/src/components/ui/markdown/index.ts +0 -49
  275. package/src/components/ui/markdown/mermaid-diagram.tsx +0 -291
  276. package/src/components/ui/markdown/rich/embed-overrides.tsx +0 -199
  277. package/src/components/ui/markdown/rich/rich-markdown-renderer.tsx +0 -184
  278. package/src/components/ui/markdown/rich/shortcodes.ts +0 -170
  279. package/src/components/ui/markdown/sanitize.ts +0 -3499
  280. package/src/components/ui/markdown/simple-markdown-renderer.tsx +0 -28
  281. package/src/components/ui/markdown/streaming.ts +0 -362
  282. package/src/components/ui/markdown/text-size.ts +0 -106
  283. package/src/utils/markdown-fences.ts +0 -127
  284. package/src/utils/markdown-heading-id.ts +0 -348
  285. /package/dist/{chunk-GTWO5NAY.js.map → chunk-6CFFISUC.js.map} +0 -0
  286. /package/dist/{chunk-VHG6AX5V.js.map → chunk-6CJ2K7BD.js.map} +0 -0
  287. /package/dist/{chunk-4NWARV5I.js.map → chunk-6QK3ONDD.js.map} +0 -0
  288. /package/dist/{chunk-CORIBKHG.js.map → chunk-EGXCWZYP.js.map} +0 -0
  289. /package/dist/{chunk-HSACATCD.js.map → chunk-MPYDX5WX.js.map} +0 -0
  290. /package/dist/{chunk-RQLBHKXN.js.map → chunk-NGEFYPY7.js.map} +0 -0
  291. /package/dist/{chunk-YZ2OIYQ3.js.map → chunk-VDZO6IDR.js.map} +0 -0
  292. /package/dist/{chunk-UUYRJPGJ.js.map → chunk-VL2YMDPH.js.map} +0 -0
  293. /package/dist/{chunk-XQ2B74SI.js.map → chunk-WLM3F3WU.js.map} +0 -0
@@ -1,46 +1,49 @@
1
- <!-- source-hash: d1cebe46eff04115f214c16b75a69467 -->
2
- Barrel export file for the chat hooks module, re-exporting all public hooks from their individual files into a single `'use client'` entry point.
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
- | Export Group | Hooks |
7
- |---|---|
8
- | **Realtime / Streaming** | `useChunkCatchup`, `useJetstreamDialogSubscription`, `useNatsDialogSubscription` |
9
- | **UI Utilities** | `useCollapsible`, `useCloseOnNavigation`, `useChatCardItem` |
10
- | **Chat Core** | `useChat`, `useSSE`, `useChatIdentity`, `useChatAttachments`, `useChatAttachmentImageGallery`, `useSlashCommands` |
11
- | **Transport Adapters** | `useSSEChatAdapter`, `useNatsChatAdapter` |
12
- | **Unified Surface** | `useUnifiedChat` (primary), `useEmbeddedChat` (legacy SSE alias) |
13
- | **Image Proxy** | `useProxiedImageUrl` |
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
- // Typical consumer — import directly from the module index
33
+ // Preferred: import everything from the barrel
19
34
  import {
20
35
  useUnifiedChat,
21
36
  useChatAttachments,
22
- useSlashCommands,
23
- } from '@flamingo/chat-hooks'
37
+ useProxiedImageUrl,
38
+ } from '@openframe/chat-hooks'
24
39
 
25
40
  function ChatPanel({ modes, activeMode }) {
26
- const chat = useUnifiedChat({ modes, activeMode })
27
- const attachments = useChatAttachments()
28
- const slashCommands = useSlashCommands()
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
- ## Notes
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: 6c5780e92306ea381bac35aaf97c435f -->
2
- Provides the NATS/Mingo-mode transport adapter for the unified chat surface, implementing the `UnifiedChatState` contract so the `useChat({ mode })` dispatcher can switch between NATS and SSE adapters without shell-side branching.
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
- Consumer-supplied configuration interface covering:
8
- - `dialogId` active conversation identifier
9
- - `getNatsWsUrl` factory returning the NATS WebSocket URL
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
- ### `UseNatsChatAdapterOptions`
16
- - `active` — gates the live subscription; keeps message state alive while the mode is hidden
11
+ ### Core Config Fields
17
12
 
18
- ### `useNatsChatAdapter(config, options)`
19
- Main hook. Composes three internal hooks:
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 → live NATS event tail
23
-
24
- decodeNatsChunk + reducer chunk → ChatStreamEvent → state
25
-
26
- useChunkCatchup → back-fills missed chunks on reconnect/activation
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
- const chatState = useNatsChatAdapter(
35
- {
36
- dialogId: 'dialog-abc123',
37
- getNatsWsUrl: () => `wss://nats.example.com`,
38
- publishUserMessage: async (text, { dialogId }) => {
39
- await fetch('/api/chat', {
40
- method: 'POST',
41
- body: JSON.stringify({ text, dialogId }),
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
- { active: isNatsModeVisible },
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:** `publishUserMessage` is intentionally consumer-owned the adapter only handles optimistic UI updates and phase transitions; the actual transport is wired externally.
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 {