@flamingo-stack/openframe-frontend-core 0.0.498-1506.4000.1 → 0.0.498

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 (290) hide show
  1. package/dist/{chunk-ZHC2BCXK.js → chunk-2OPD6KRB.js} +4 -4
  2. package/dist/{chunk-5BQWVNRS.cjs → chunk-2R25CGSO.cjs} +62 -62
  3. package/dist/{chunk-5BQWVNRS.cjs.map → chunk-2R25CGSO.cjs.map} +1 -1
  4. package/dist/{chunk-242K7LZY.cjs → chunk-4EHQEMN4.cjs} +11 -11
  5. package/dist/{chunk-242K7LZY.cjs.map → chunk-4EHQEMN4.cjs.map} +1 -1
  6. package/dist/{chunk-4KKGHPNE.cjs → chunk-4NIBKEED.cjs} +9 -9
  7. package/dist/{chunk-4KKGHPNE.cjs.map → chunk-4NIBKEED.cjs.map} +1 -1
  8. package/dist/{chunk-5QWYIPMH.js → chunk-5ZL7PA63.js} +2 -2
  9. package/dist/{chunk-3VGRZ62V.js → chunk-6GAJETAP.js} +2 -2
  10. package/dist/{chunk-EO35UHFT.cjs → chunk-A3Z63ZL5.cjs} +60 -60
  11. package/dist/chunk-A3Z63ZL5.cjs.map +1 -0
  12. package/dist/{chunk-34C2JV2C.js → chunk-G6ARA2HD.js} +2 -2
  13. package/dist/{chunk-WNXIG6YY.js → chunk-K5HHLTSG.js} +2 -2
  14. package/dist/{chunk-42NYDEHH.js → chunk-KK4M4URN.js} +2 -2
  15. package/dist/{chunk-42SMPKGY.js → chunk-MF3VJKHT.js} +2 -2
  16. package/dist/{chunk-EORFD5WB.cjs → chunk-MSB3PEPP.cjs} +15 -15
  17. package/dist/{chunk-EORFD5WB.cjs.map → chunk-MSB3PEPP.cjs.map} +1 -1
  18. package/dist/{chunk-F7XPMG25.cjs → chunk-MVORKLWX.cjs} +27 -28
  19. package/dist/chunk-MVORKLWX.cjs.map +1 -0
  20. package/dist/{chunk-D3LUKR2Y.js → chunk-OYPUQJJ2.js} +10044 -12292
  21. package/dist/chunk-OYPUQJJ2.js.map +1 -0
  22. package/dist/{chunk-62TM2RVZ.cjs → chunk-T67MZAQJ.cjs} +26 -26
  23. package/dist/{chunk-62TM2RVZ.cjs.map → chunk-T67MZAQJ.cjs.map} +1 -1
  24. package/dist/{chunk-BUBQEZ5J.js → chunk-VLWVM6ZS.js} +2 -2
  25. package/dist/{chunk-632XJ2ZT.js → chunk-VOOEX4IZ.js} +5 -6
  26. package/dist/chunk-VOOEX4IZ.js.map +1 -0
  27. package/dist/{chunk-5ZY5JM4Z.js → chunk-W4XZ3FBZ.js} +10 -10
  28. package/dist/chunk-W4XZ3FBZ.js.map +1 -0
  29. package/dist/{chunk-2LYA3RBT.cjs → chunk-XI44QDCD.cjs} +37 -37
  30. package/dist/{chunk-2LYA3RBT.cjs.map → chunk-XI44QDCD.cjs.map} +1 -1
  31. package/dist/{chunk-WZCQW4MW.js → chunk-XSNKSMB3.js} +4 -4
  32. package/dist/{chunk-J3NHQ4JB.cjs → chunk-ZBTIN7RC.cjs} +31 -31
  33. package/dist/{chunk-J3NHQ4JB.cjs.map → chunk-ZBTIN7RC.cjs.map} +1 -1
  34. package/dist/{chunk-SS3D3DHL.cjs → chunk-ZEZTITQZ.cjs} +4886 -7134
  35. package/dist/chunk-ZEZTITQZ.cjs.map +1 -0
  36. package/dist/{chunk-44C23SSC.cjs → chunk-ZHNWWFIM.cjs} +5 -5
  37. package/dist/{chunk-44C23SSC.cjs.map → chunk-ZHNWWFIM.cjs.map} +1 -1
  38. package/dist/{chunk-H6GFQ4AO.cjs → chunk-ZTE32A7C.cjs} +7 -7
  39. package/dist/{chunk-H6GFQ4AO.cjs.map → chunk-ZTE32A7C.cjs.map} +1 -1
  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/hooks/index.d.ts +1 -0
  45. package/dist/components/chat/hooks/index.d.ts.map +1 -1
  46. package/dist/components/chat/hooks/use-chat.d.ts.map +1 -1
  47. package/dist/components/chat/hooks/use-chunk-catchup.d.ts.map +1 -1
  48. package/dist/components/chat/hooks/use-nats-chat-adapter.d.ts +48 -15
  49. package/dist/components/chat/hooks/use-nats-chat-adapter.d.ts.map +1 -1
  50. package/dist/components/chat/hooks/use-realtime-chunk-processor.d.ts +6 -0
  51. package/dist/components/chat/hooks/use-realtime-chunk-processor.d.ts.map +1 -0
  52. package/dist/components/chat/hooks/use-sse-chat-adapter.d.ts +57 -10
  53. package/dist/components/chat/hooks/use-sse-chat-adapter.d.ts.map +1 -1
  54. package/dist/components/chat/index.cjs +2 -10
  55. package/dist/components/chat/index.cjs.map +1 -1
  56. package/dist/components/chat/index.d.ts +0 -1
  57. package/dist/components/chat/index.d.ts.map +1 -1
  58. package/dist/components/chat/index.js +13 -21
  59. package/dist/components/chat/types/api.types.d.ts +81 -1
  60. package/dist/components/chat/types/api.types.d.ts.map +1 -1
  61. package/dist/components/chat/types/processing.types.d.ts +93 -2
  62. package/dist/components/chat/types/processing.types.d.ts.map +1 -1
  63. package/dist/components/chat/utils/chunk-parser.d.ts +25 -0
  64. package/dist/components/chat/utils/chunk-parser.d.ts.map +1 -0
  65. package/dist/components/chat/utils/extract-incomplete-message-state.d.ts +6 -34
  66. package/dist/components/chat/utils/extract-incomplete-message-state.d.ts.map +1 -1
  67. package/dist/components/chat/utils/index.d.ts +3 -2
  68. package/dist/components/chat/utils/index.d.ts.map +1 -1
  69. package/dist/components/chat/utils/process-historical-messages.d.ts +11 -59
  70. package/dist/components/chat/utils/process-historical-messages.d.ts.map +1 -1
  71. package/dist/components/contact/index.cjs +3 -3
  72. package/dist/components/contact/index.js +2 -2
  73. package/dist/components/docs/index.cjs +5 -5
  74. package/dist/components/docs/index.js +4 -4
  75. package/dist/components/embeds/index.cjs +3 -3
  76. package/dist/components/embeds/index.js +2 -2
  77. package/dist/components/faq/index.cjs +3 -3
  78. package/dist/components/faq/index.js +2 -2
  79. package/dist/components/features/index.cjs +2 -2
  80. package/dist/components/features/index.js +1 -1
  81. package/dist/components/help-center-pages/index.cjs +20 -20
  82. package/dist/components/help-center-pages/index.js +11 -11
  83. package/dist/components/index.cjs +130 -172
  84. package/dist/components/index.cjs.map +1 -1
  85. package/dist/components/index.js +21 -63
  86. package/dist/components/index.js.map +1 -1
  87. package/dist/components/navigation/header.d.ts.map +1 -1
  88. package/dist/components/navigation/index.cjs +2 -2
  89. package/dist/components/navigation/index.js +1 -1
  90. package/dist/components/navigation/mingo-ai-button.d.ts.map +1 -1
  91. package/dist/components/onboarding-guides/index.cjs +5 -5
  92. package/dist/components/onboarding-guides/index.js +4 -4
  93. package/dist/components/onboarding-guides/onboarding-guide-detail-view.d.ts.map +1 -1
  94. package/dist/components/related-content/index.cjs +3 -3
  95. package/dist/components/related-content/index.js +2 -2
  96. package/dist/components/shared/product-release/release-detail-page.d.ts.map +1 -1
  97. package/dist/components/tickets/index.cjs +5 -5
  98. package/dist/components/tickets/index.js +4 -4
  99. package/dist/components/ui/index.cjs +2 -44
  100. package/dist/components/ui/index.cjs.map +1 -1
  101. package/dist/components/ui/index.d.ts +2 -1
  102. package/dist/components/ui/index.d.ts.map +1 -1
  103. package/dist/components/ui/index.js +13 -55
  104. package/dist/components/ui/rich-markdown-renderer.d.ts +34 -0
  105. package/dist/components/ui/rich-markdown-renderer.d.ts.map +1 -0
  106. package/dist/components/ui/simple-markdown-renderer.d.ts +73 -0
  107. package/dist/components/ui/simple-markdown-renderer.d.ts.map +1 -0
  108. package/dist/index.cjs +2 -60
  109. package/dist/index.cjs.map +1 -1
  110. package/dist/index.js +13 -71
  111. package/dist/utils/index.cjs +40 -169
  112. package/dist/utils/index.cjs.map +1 -1
  113. package/dist/utils/index.d.ts +0 -1
  114. package/dist/utils/index.d.ts.map +1 -1
  115. package/dist/utils/index.js +41 -162
  116. package/dist/utils/index.js.map +1 -1
  117. package/dist/utils/markdown-section-extractor.d.ts.map +1 -1
  118. package/package.json +1 -7
  119. package/src/components/chat/__tests__/chat-message-list.test.tsx +6 -381
  120. package/src/components/chat/chat-message-enhanced.tsx +20 -122
  121. package/src/components/chat/chat-message-list.tsx +132 -409
  122. package/src/components/chat/embeddable-chat.tsx +0 -6
  123. package/src/components/chat/hooks/.index.md +33 -30
  124. package/src/components/chat/hooks/.use-nats-chat-adapter.md +55 -36
  125. package/src/components/chat/hooks/.use-realtime-chunk-processor.md +77 -0
  126. package/src/components/chat/hooks/index.ts +1 -0
  127. package/src/components/chat/hooks/use-chat.ts +0 -8
  128. package/src/components/chat/hooks/use-chunk-catchup.ts +1 -26
  129. package/src/components/chat/hooks/use-nats-chat-adapter.ts +825 -254
  130. package/src/components/chat/hooks/use-realtime-chunk-processor.ts +489 -0
  131. package/src/components/chat/hooks/use-sse-chat-adapter.ts +684 -380
  132. package/src/components/chat/index.ts +0 -5
  133. package/src/components/chat/thinking-display.tsx +1 -1
  134. package/src/components/chat/types/.api.types.md +49 -39
  135. package/src/components/chat/types/.processing.types.md +58 -29
  136. package/src/components/chat/types/api.types.ts +73 -6
  137. package/src/components/chat/types/processing.types.ts +53 -11
  138. package/src/components/chat/utils/.chunk-parser.md +62 -0
  139. package/src/components/chat/utils/.index.md +40 -31
  140. package/src/components/chat/utils/__tests__/process-historical-messages-approvals.test.ts +0 -61
  141. package/src/components/chat/utils/chunk-parser.ts +262 -0
  142. package/src/components/chat/utils/extract-incomplete-message-state.ts +5 -63
  143. package/src/components/chat/utils/index.ts +8 -5
  144. package/src/components/chat/utils/process-historical-messages.ts +386 -358
  145. package/src/components/navigation/header.tsx +2 -1
  146. package/src/components/navigation/mingo-ai-button.tsx +4 -1
  147. package/src/components/navigation/mobile-nav-panel.tsx +5 -5
  148. package/src/components/onboarding-guides/onboarding-guide-detail-view.tsx +4 -22
  149. package/src/components/shared/legal-document/legal-document-page.tsx +1 -1
  150. package/src/components/shared/product-release/release-detail-page.tsx +4 -19
  151. package/src/components/ui/.simple-markdown-renderer.md +52 -0
  152. package/src/components/ui/index.ts +2 -1
  153. package/src/components/ui/release-changelog-section.tsx +1 -1
  154. package/src/components/ui/rich-markdown-renderer.tsx +1223 -0
  155. package/src/components/ui/simple-markdown-renderer.tsx +964 -0
  156. package/src/components/ui/ticket-info-section.tsx +1 -1
  157. package/src/utils/index.ts +0 -1
  158. package/src/utils/markdown-section-extractor.ts +56 -41
  159. package/dist/chat-protocol/decode.d.ts +0 -58
  160. package/dist/chat-protocol/decode.d.ts.map +0 -1
  161. package/dist/chat-protocol/encode.d.ts +0 -44
  162. package/dist/chat-protocol/encode.d.ts.map +0 -1
  163. package/dist/chat-protocol/env-flag.d.ts +0 -35
  164. package/dist/chat-protocol/env-flag.d.ts.map +0 -1
  165. package/dist/chat-protocol/events.d.ts +0 -207
  166. package/dist/chat-protocol/events.d.ts.map +0 -1
  167. package/dist/chat-protocol/frames.d.ts +0 -213
  168. package/dist/chat-protocol/frames.d.ts.map +0 -1
  169. package/dist/chat-protocol/index.cjs +0 -500
  170. package/dist/chat-protocol/index.cjs.map +0 -1
  171. package/dist/chat-protocol/index.d.ts +0 -18
  172. package/dist/chat-protocol/index.d.ts.map +0 -1
  173. package/dist/chat-protocol/index.js +0 -484
  174. package/dist/chat-protocol/index.js.map +0 -1
  175. package/dist/chat-protocol/ip-normalize.d.ts +0 -44
  176. package/dist/chat-protocol/ip-normalize.d.ts.map +0 -1
  177. package/dist/chat-protocol/nats-decoder.d.ts +0 -26
  178. package/dist/chat-protocol/nats-decoder.d.ts.map +0 -1
  179. package/dist/chunk-5ZY5JM4Z.js.map +0 -1
  180. package/dist/chunk-632XJ2ZT.js.map +0 -1
  181. package/dist/chunk-D3LUKR2Y.js.map +0 -1
  182. package/dist/chunk-EO35UHFT.cjs.map +0 -1
  183. package/dist/chunk-F7XPMG25.cjs.map +0 -1
  184. package/dist/chunk-SS3D3DHL.cjs.map +0 -1
  185. package/dist/components/chat/stream/chat-dialog-store.d.ts +0 -184
  186. package/dist/components/chat/stream/chat-dialog-store.d.ts.map +0 -1
  187. package/dist/components/chat/stream/chat-stream-reducer.d.ts +0 -367
  188. package/dist/components/chat/stream/chat-stream-reducer.d.ts.map +0 -1
  189. package/dist/components/chat/stream/delta-batcher.d.ts +0 -51
  190. package/dist/components/chat/stream/delta-batcher.d.ts.map +0 -1
  191. package/dist/components/chat/stream/index.d.ts +0 -17
  192. package/dist/components/chat/stream/index.d.ts.map +0 -1
  193. package/dist/components/chat/stream/message-mutations.d.ts +0 -77
  194. package/dist/components/chat/stream/message-mutations.d.ts.map +0 -1
  195. package/dist/components/chat/stream/use-chat-stream-reducer.d.ts +0 -22
  196. package/dist/components/chat/stream/use-chat-stream-reducer.d.ts.map +0 -1
  197. package/dist/components/ui/markdown/base-components.d.ts +0 -51
  198. package/dist/components/ui/markdown/base-components.d.ts.map +0 -1
  199. package/dist/components/ui/markdown/engine.d.ts +0 -99
  200. package/dist/components/ui/markdown/engine.d.ts.map +0 -1
  201. package/dist/components/ui/markdown/heading-ids.d.ts +0 -65
  202. package/dist/components/ui/markdown/heading-ids.d.ts.map +0 -1
  203. package/dist/components/ui/markdown/index.d.ts +0 -18
  204. package/dist/components/ui/markdown/index.d.ts.map +0 -1
  205. package/dist/components/ui/markdown/mermaid-diagram.d.ts +0 -79
  206. package/dist/components/ui/markdown/mermaid-diagram.d.ts.map +0 -1
  207. package/dist/components/ui/markdown/rich/embed-overrides.d.ts +0 -14
  208. package/dist/components/ui/markdown/rich/embed-overrides.d.ts.map +0 -1
  209. package/dist/components/ui/markdown/rich/rich-markdown-renderer.d.ts +0 -40
  210. package/dist/components/ui/markdown/rich/rich-markdown-renderer.d.ts.map +0 -1
  211. package/dist/components/ui/markdown/rich/shortcodes.d.ts +0 -8
  212. package/dist/components/ui/markdown/rich/shortcodes.d.ts.map +0 -1
  213. package/dist/components/ui/markdown/sanitize.d.ts +0 -153
  214. package/dist/components/ui/markdown/sanitize.d.ts.map +0 -1
  215. package/dist/components/ui/markdown/simple-markdown-renderer.d.ts +0 -23
  216. package/dist/components/ui/markdown/simple-markdown-renderer.d.ts.map +0 -1
  217. package/dist/components/ui/markdown/streaming.d.ts +0 -78
  218. package/dist/components/ui/markdown/streaming.d.ts.map +0 -1
  219. package/dist/components/ui/markdown/text-size.d.ts +0 -34
  220. package/dist/components/ui/markdown/text-size.d.ts.map +0 -1
  221. package/dist/utils/markdown-fences.d.ts +0 -42
  222. package/dist/utils/markdown-fences.d.ts.map +0 -1
  223. package/dist/utils/markdown-heading-id.d.ts +0 -85
  224. package/dist/utils/markdown-heading-id.d.ts.map +0 -1
  225. package/src/chat-protocol/__tests__/__snapshots__/nats-decoder-golden.test.ts.snap +0 -317
  226. package/src/chat-protocol/__tests__/chat-protocol.test.ts +0 -516
  227. package/src/chat-protocol/__tests__/env-flag.test.ts +0 -52
  228. package/src/chat-protocol/__tests__/ip-normalize.test.ts +0 -136
  229. package/src/chat-protocol/__tests__/nats-decoder-golden.test.ts +0 -232
  230. package/src/chat-protocol/decode.ts +0 -278
  231. package/src/chat-protocol/encode.ts +0 -71
  232. package/src/chat-protocol/env-flag.ts +0 -39
  233. package/src/chat-protocol/events.ts +0 -245
  234. package/src/chat-protocol/frames.ts +0 -245
  235. package/src/chat-protocol/index.ts +0 -21
  236. package/src/chat-protocol/ip-normalize.ts +0 -146
  237. package/src/chat-protocol/nats-decoder.ts +0 -258
  238. package/src/components/chat/__tests__/chat-message-streaming-memo.test.tsx +0 -207
  239. package/src/components/chat/__tests__/chat-pending-turn.test.tsx +0 -250
  240. package/src/components/chat/hooks/__tests__/__snapshots__/conversation-id-persistence-golden.test.ts.snap +0 -37
  241. package/src/components/chat/hooks/__tests__/__snapshots__/sse-stream-golden.test.ts.snap +0 -0
  242. package/src/components/chat/hooks/__tests__/chunk-catchup-dialog-staleness.test.ts +0 -92
  243. package/src/components/chat/hooks/__tests__/conversation-id-persistence-golden.test.ts +0 -438
  244. package/src/components/chat/hooks/__tests__/sse-stream-golden.test.ts +0 -318
  245. package/src/components/chat/stream/__tests__/__snapshots__/chat-stream-reducer-golden.test.ts.snap +0 -940
  246. package/src/components/chat/stream/__tests__/chat-dialog-store.test.ts +0 -806
  247. package/src/components/chat/stream/__tests__/chat-stream-reducer-golden.test.ts +0 -467
  248. package/src/components/chat/stream/__tests__/chat-stream-reducer.test.ts +0 -1248
  249. package/src/components/chat/stream/__tests__/delta-batcher.test.ts +0 -255
  250. package/src/components/chat/stream/__tests__/use-chat-stream-reducer.test.ts +0 -105
  251. package/src/components/chat/stream/chat-dialog-store.ts +0 -536
  252. package/src/components/chat/stream/chat-stream-reducer.ts +0 -1876
  253. package/src/components/chat/stream/delta-batcher.ts +0 -168
  254. package/src/components/chat/stream/index.ts +0 -55
  255. package/src/components/chat/stream/message-mutations.ts +0 -340
  256. package/src/components/chat/stream/use-chat-stream-reducer.ts +0 -126
  257. package/src/components/chat/utils/__tests__/__snapshots__/process-historical-messages-golden.test.ts.snap +0 -420
  258. package/src/components/chat/utils/__tests__/__snapshots__/segment-accumulator-golden.test.ts.snap +0 -605
  259. package/src/components/chat/utils/__tests__/process-historical-messages-golden.test.ts +0 -394
  260. package/src/components/chat/utils/__tests__/segment-accumulator-golden.test.ts +0 -270
  261. package/src/components/ui/__tests__/__snapshots__/markdown-parity.test.tsx.snap +0 -2420
  262. package/src/components/ui/__tests__/markdown-parity.test.tsx +0 -2540
  263. package/src/components/ui/markdown/__tests__/mermaid-security.test.ts +0 -176
  264. package/src/components/ui/markdown/__tests__/mermaid-stale-render.test.tsx +0 -151
  265. package/src/components/ui/markdown/__tests__/sanitize-invariant.test.ts +0 -354
  266. package/src/components/ui/markdown/__tests__/sanitize-render.test.tsx +0 -118
  267. package/src/components/ui/markdown/__tests__/streaming.test.tsx +0 -436
  268. package/src/components/ui/markdown/base-components.tsx +0 -360
  269. package/src/components/ui/markdown/engine.tsx +0 -315
  270. package/src/components/ui/markdown/heading-ids.ts +0 -239
  271. package/src/components/ui/markdown/index.ts +0 -49
  272. package/src/components/ui/markdown/mermaid-diagram.tsx +0 -323
  273. package/src/components/ui/markdown/rich/embed-overrides.tsx +0 -199
  274. package/src/components/ui/markdown/rich/rich-markdown-renderer.tsx +0 -184
  275. package/src/components/ui/markdown/rich/shortcodes.ts +0 -170
  276. package/src/components/ui/markdown/sanitize.ts +0 -3584
  277. package/src/components/ui/markdown/simple-markdown-renderer.tsx +0 -28
  278. package/src/components/ui/markdown/streaming.ts +0 -390
  279. package/src/components/ui/markdown/text-size.ts +0 -106
  280. package/src/utils/markdown-fences.ts +0 -127
  281. package/src/utils/markdown-heading-id.ts +0 -348
  282. /package/dist/{chunk-ZHC2BCXK.js.map → chunk-2OPD6KRB.js.map} +0 -0
  283. /package/dist/{chunk-5QWYIPMH.js.map → chunk-5ZL7PA63.js.map} +0 -0
  284. /package/dist/{chunk-3VGRZ62V.js.map → chunk-6GAJETAP.js.map} +0 -0
  285. /package/dist/{chunk-34C2JV2C.js.map → chunk-G6ARA2HD.js.map} +0 -0
  286. /package/dist/{chunk-WNXIG6YY.js.map → chunk-K5HHLTSG.js.map} +0 -0
  287. /package/dist/{chunk-42NYDEHH.js.map → chunk-KK4M4URN.js.map} +0 -0
  288. /package/dist/{chunk-42SMPKGY.js.map → chunk-MF3VJKHT.js.map} +0 -0
  289. /package/dist/{chunk-BUBQEZ5J.js.map → chunk-VLWVM6ZS.js.map} +0 -0
  290. /package/dist/{chunk-WZCQW4MW.js.map → chunk-XSNKSMB3.js.map} +0 -0
@@ -1,77 +0,0 @@
1
- /**
2
- * Pure message-mutation kernel for the master chat-stream reducer.
3
- *
4
- * These helpers were absorbed from `use-nats-chat-adapter.ts` in Phase 3 of
5
- * the chat unification — they are the ONE implementation of "apply a stream
6
- * fragment to a message thread". The reducer (`chat-stream-reducer.ts`) and
7
- * the cross-side projections (`chat-dialog-store.ts`) both build on them.
8
- *
9
- * REFERENTIAL-STABILITY CONTRACT: every helper clones ONLY the touched
10
- * message object (and the touched segment slot inside it). A value-level
11
- * no-op — e.g. a replayed duplicate EXECUTED_TOOL whose merge would write
12
- * identical values — returns the PRIOR references untouched, so React
13
- * memoization over untouched messages survives redeliveries.
14
- *
15
- * Framework-free: no React, no timers.
16
- */
17
- import type { ChatApprovalStatus, MessageSegment, ToolExecutionSegment } from '../types';
18
- import type { UnifiedChatMessage } from '../types/unified-chat-state.types';
19
- export declare function nextId(role: 'user' | 'assistant'): string;
20
- /**
21
- * Realtime user/direct/system chunks can be replays of rows already on
22
- * screen. Content-window dedup is the LAST layer (seq-less transports only)
23
- * — see the layer list in `chat-stream-reducer.ts`.
24
- */
25
- export declare const CONTENT_DEDUP_WINDOW = 4;
26
- export declare const SYSTEM_DEDUP_WINDOW = 10;
27
- export declare function hasRecentMessage(prev: UnifiedChatMessage[], predicate: (message: UnifiedChatMessage) => boolean, window: number): boolean;
28
- /**
29
- * Replace (or append) the trailing assistant message with the latest
30
- * accumulated segments.
31
- */
32
- export declare function updateTrailingAssistant(prev: UnifiedChatMessage[], segments: MessageSegment[]): UnifiedChatMessage[];
33
- /**
34
- * Append-mode counterpart of `updateTrailingAssistant` for post-MESSAGE_END
35
- * continuation fragments (`SegmentsUpdateMetadata.append`). Coalesces
36
- * trailing fragments of the same type, mirroring the accumulator; approval
37
- * deltas upsert by request id so a replayed emit stays idempotent.
38
- */
39
- export declare function appendToTrailingAssistant(prev: UnifiedChatMessage[], segments: MessageSegment[]): UnifiedChatMessage[];
40
- /**
41
- * Upsert a standalone context-compaction segment into the trailing assistant
42
- * bubble. Compaction emissions arrive as the accumulator's CUMULATIVE array —
43
- * only the compaction segment itself may be applied, or interleaved
44
- * continuation text would duplicate. A `completed` segment replaces the last
45
- * `started` one in place.
46
- */
47
- export declare function upsertTrailingCompaction(prev: UnifiedChatMessage[], segments: MessageSegment[]): UnifiedChatMessage[];
48
- /**
49
- * Cross-message tool-execution updater for post-MESSAGE_END tool chunks
50
- * (approved commands executing after the approval bubble, async batch
51
- * results). Scans messages from the end:
52
- * 1) an `approval_batch` whose `toolCalls` contains the execution id →
53
- * merge into its `executions` map;
54
- * 2) a matching `tool_execution` segment (same id, or EXECUTING with the
55
- * same tool for legacy id-less backends) → update in place;
56
- * 3) no match → append the segment to the trailing assistant bubble.
57
- *
58
- * A value-level no-op (replayed duplicate) returns `prev` untouched.
59
- */
60
- export declare function applyToolExecutionToMessages(prev: UnifiedChatMessage[], segment: ToolExecutionSegment): UnifiedChatMessage[];
61
- /**
62
- * Merge-only variant of `applyToolExecutionToMessages` — the pure projection
63
- * used for the cross-SIDE fan-out in `chat-dialog-store.ts`. Updates a
64
- * matching batch slot / tool segment when present; returns `null` when
65
- * nothing matches (the caller decides whether to append — projections never
66
- * do, so a tool that belongs to one side only never grows a card on the
67
- * other).
68
- */
69
- export declare function mergeToolExecutionIfPresent(prev: UnifiedChatMessage[], segment: ToolExecutionSegment): UnifiedChatMessage[] | null;
70
- /**
71
- * Cross-message approval status flip (absorbed from the NATS adapter's
72
- * `onApprovalResolved` handler). Idempotent + reference-preserving: only the
73
- * messages/segments whose status (or resolvedByName) actually changes are
74
- * cloned; a no-op returns `prev`.
75
- */
76
- export declare function projectApprovalResolutionToMessages(prev: UnifiedChatMessage[], requestId: string, status: ChatApprovalStatus, resolvedByName?: string | null): UnifiedChatMessage[];
77
- //# sourceMappingURL=message-mutations.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"message-mutations.d.ts","sourceRoot":"","sources":["../../../../src/components/chat/stream/message-mutations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAEV,kBAAkB,EAClB,cAAc,EACd,oBAAoB,EAErB,MAAM,UAAU,CAAA;AACjB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAA;AAE3E,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,MAAM,CAKzD;AAED;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,IAAI,CAAA;AACrC,eAAO,MAAM,mBAAmB,KAAK,CAAA;AAErC,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,kBAAkB,EAAE,EAC1B,SAAS,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,OAAO,EACnD,MAAM,EAAE,MAAM,GACb,OAAO,CAMT;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,kBAAkB,EAAE,EAC1B,QAAQ,EAAE,cAAc,EAAE,GACzB,kBAAkB,EAAE,CAetB;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,kBAAkB,EAAE,EAC1B,QAAQ,EAAE,cAAc,EAAE,GACzB,kBAAkB,EAAE,CAgDtB;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,kBAAkB,EAAE,EAC1B,QAAQ,EAAE,cAAc,EAAE,GACzB,kBAAkB,EAAE,CAsBtB;AA2BD;;;;;;;;;;;GAWG;AACH,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,kBAAkB,EAAE,EAC1B,OAAO,EAAE,oBAAoB,GAC5B,kBAAkB,EAAE,CAItB;AAED;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,kBAAkB,EAAE,EAC1B,OAAO,EAAE,oBAAoB,GAC5B,kBAAkB,EAAE,GAAG,IAAI,CA4E7B;AAED;;;;;GAKG;AACH,wBAAgB,mCAAmC,CACjD,IAAI,EAAE,kBAAkB,EAAE,EAC1B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,kBAAkB,EAC1B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,GAC7B,kBAAkB,EAAE,CAuBtB"}
@@ -1,22 +0,0 @@
1
- import type { ChatStreamEvent } from '../../../chat-protocol/events';
2
- import { type ChatDialogSide, type ChatDialogStore } from './chat-dialog-store';
3
- import type { ChatReducerState, ChatStreamReducer, ChatStreamReducerOptions } from './chat-stream-reducer';
4
- export interface UseChatStreamReducerOptions {
5
- store: ChatDialogStore;
6
- dialogId: string;
7
- side?: ChatDialogSide;
8
- /** Consulted once, when this (dialogId, side) reducer is first created. */
9
- createReducerOptions?: () => ChatStreamReducerOptions;
10
- }
11
- export interface UseChatStreamReducerReturn {
12
- state: ChatReducerState;
13
- /** Apply a decoded event (deltas are batched; everything else immediate). */
14
- applyEvent: (event: ChatStreamEvent) => void;
15
- /** Synchronously apply any pending delta batch. */
16
- flushDeltas: () => void;
17
- /** Run reducer commands (adapter-driven, non-wire mutations). */
18
- mutate: <T>(fn: (reducer: ChatStreamReducer) => T) => T;
19
- reducer: ChatStreamReducer;
20
- }
21
- export declare function useChatStreamReducer({ store, dialogId, side, createReducerOptions, }: UseChatStreamReducerOptions): UseChatStreamReducerReturn;
22
- //# sourceMappingURL=use-chat-stream-reducer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-chat-stream-reducer.d.ts","sourceRoot":"","sources":["../../../../src/components/chat/stream/use-chat-stream-reducer.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AACpE,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,eAAe,EACrB,MAAM,qBAAqB,CAAA;AAE5B,OAAO,KAAK,EACV,gBAAgB,EAChB,iBAAiB,EACjB,wBAAwB,EACzB,MAAM,uBAAuB,CAAA;AAO9B,MAAM,WAAW,2BAA2B;IAC1C,KAAK,EAAE,eAAe,CAAA;IACtB,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,cAAc,CAAA;IACrB,2EAA2E;IAC3E,oBAAoB,CAAC,EAAE,MAAM,wBAAwB,CAAA;CACtD;AAED,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,gBAAgB,CAAA;IACvB,6EAA6E;IAC7E,UAAU,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAA;IAC5C,mDAAmD;IACnD,WAAW,EAAE,MAAM,IAAI,CAAA;IACvB,iEAAiE;IACjE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,CAAC,KAAK,CAAC,CAAA;IACvD,OAAO,EAAE,iBAAiB,CAAA;CAC3B;AAED,wBAAgB,oBAAoB,CAAC,EACnC,KAAK,EACL,QAAQ,EACR,IAA0B,EAC1B,oBAAoB,GACrB,EAAE,2BAA2B,GAAG,0BAA0B,CAiE1D"}
@@ -1,51 +0,0 @@
1
- import type { Components } from 'react-markdown';
2
- import type { ResolveLinkResult } from '../../../types/doc-source';
3
- import type { TextSizeElement } from './text-size';
4
- export declare function hasRenderableSrc(src: unknown): src is string;
5
- export interface BuildBaseComponentsOptions {
6
- textSizes: Record<TextSizeElement, string>;
7
- demoteMarkdownH1ToH2: boolean;
8
- brokenLinks: readonly string[];
9
- currentPath?: string;
10
- onInternalLinkClick?: (path: string, options?: {
11
- expandFolder?: boolean;
12
- fromInternalLink?: boolean;
13
- }) => void;
14
- onResolveLink?: (href: string, currentPath: string) => Promise<ResolveLinkResult>;
15
- }
16
- /**
17
- * The standard leaf renderers (`code` block + inline, `blockquote`, `div`
18
- * pass-through) as standalone functions.
19
- *
20
- * SSOT for compositions that must OVERRIDE these renderers for a narrow
21
- * special case and then fall through: the rich composition intercepts embed
22
- * fence languages, shortcode-expanded `div`s and Reddit's `reddit-embed-bq`
23
- * blockquote, and delegates everything else here. Previously it reproduced
24
- * these renderers byte-for-byte, so any class change here silently drifted
25
- * on content surfaces.
26
- *
27
- * THESE MUST STAY HOOK-FREE: the rich composition calls them as plain
28
- * functions from inside its own renderers (`standard.code(props)`), which is
29
- * not a React render of a component and would break the rules of hooks.
30
- * Hook-using renderers (the headings, which read the heading-line offset
31
- * from context) live in `buildBaseComponents` below and are never delegated
32
- * to this way.
33
- *
34
- * ODS-TOKENS FLAG (ODS_TOKEN_RULES §Typography / §General): inline code keeps
35
- * an inline `text-[0.9em]`, carried over verbatim from the pre-unification
36
- * renderers — ODS has no relative-to-parent code size, so mapping it onto an
37
- * existing token would visibly change every inline code span. Same shape as
38
- * the flag in ./text-size.ts — flagged for addition to ODS, not copied
39
- * anywhere else.
40
- *
41
- * The code BLOCK's font is NOT flagged: the raw "JetBrains Mono", "SF Mono",
42
- * Consolas stack the old renderer inlined is gone, replaced by Tailwind's
43
- * `font-mono` (→ `var(--font-family-heading)`, the Azeret Mono ODS stack) —
44
- * the same class the inline-code branch below already used, so the two code
45
- * surfaces no longer disagree about their family.
46
- */
47
- export declare function buildStandardLeafRenderers({ textSizes, }: {
48
- textSizes: Record<TextSizeElement, string>;
49
- }): Pick<Components, 'code' | 'blockquote' | 'div'>;
50
- export declare function buildBaseComponents({ textSizes, demoteMarkdownH1ToH2, brokenLinks, currentPath: propCurrentPath, onInternalLinkClick, onResolveLink, }: BuildBaseComponentsOptions): Components;
51
- //# sourceMappingURL=base-components.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"base-components.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/markdown/base-components.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAIjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AA4CnD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,MAAM,CAE5D;AAED,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;IAC3C,oBAAoB,EAAE,OAAO,CAAC;IAC9B,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,OAAO,CAAC;QAAC,gBAAgB,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IAC/G,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACnF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,0BAA0B,CAAC,EACzC,SAAS,GACV,EAAE;IACD,SAAS,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;CAC5C,GAAG,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,YAAY,GAAG,KAAK,CAAC,CA4DlD;AAED,wBAAgB,mBAAmB,CAAC,EAClC,SAAS,EACT,oBAAoB,EACpB,WAAW,EACX,WAAW,EAAE,eAAe,EAC5B,mBAAmB,EACnB,aAAa,GACd,EAAE,0BAA0B,GAAG,UAAU,CAwLzC"}
@@ -1,99 +0,0 @@
1
- /**
2
- * MarkdownEngine — THE one react-markdown pipeline for every surface
3
- * (chat messages, blog, docs, KB articles, legal, releases, admin previews).
4
- *
5
- * `SimpleMarkdownRenderer` and `RichMarkdownRenderer` are thin compositions
6
- * over this engine (see ./simple-markdown-renderer.tsx and ./rich/) — there
7
- * is exactly ONE parse path, ONE sanitizer stack, ONE mermaid, ONE
8
- * heading-id algorithm, ONE link-click model. Do not fork this pipeline;
9
- * extend via `componentOverrides` / `additionalRemarkPlugins` /
10
- * `preprocessContent` / `extraAllowedHtmlTags`.
11
- *
12
- * Pipeline order (each stage documented in ./sanitize.ts):
13
- * preprocessContent (composition hook, e.g. shortcodes)
14
- * → completeStreamingTail (streaming only — MUST precede the escape pass)
15
- * → escapeUnknownHtmlTags (text pre-pass, React 19 crash guard)
16
- * → remark: remarkGfm, remarkBreaks, ...additionalRemarkPlugins
17
- * → rehype: rehypeRaw → rehypeSanitize(schema) → rehypeStripUnsafe
18
- * → rehypeHighlight
19
- * → urlTransform: cardAwareUrlTransform
20
- * → components: buildBaseComponents(...) spread-last componentOverrides
21
- */
22
- import React from 'react';
23
- import { type Components } from 'react-markdown';
24
- import type { PluggableList } from 'unified';
25
- import type { ResolveLinkResult } from '../../../types/doc-source';
26
- import { type TextSizeConfig } from './text-size';
27
- import { type HeadingSection } from './heading-ids';
28
- export type { ResolveLinkResult };
29
- /**
30
- * Module-scope empty default for `brokenLinks`.
31
- *
32
- * A `brokenLinks = []` DEFAULT PARAMETER allocates a fresh array on every
33
- * render, so the `components` useMemo (which lists it as a dep) recomputed
34
- * every render, which changed `StreamingBlockRenderer`'s `components` prop
35
- * identity, which made its `memo` bail EVERY time — every completed block
36
- * re-parsed on every streamed token, defeating the entire atomic-block
37
- * optimization. Any new default that is an object/array/function MUST be
38
- * hoisted here for the same reason.
39
- *
40
- * Exported so the compositions that apply the SAME default before handing
41
- * props down (rich) share this ONE identity instead of declaring a second
42
- * module-scope empty array with a copy of this rationale. Deliberately NOT
43
- * re-exported from ./index — it is an internal identity contract between the
44
- * engine and its compositions, not public API.
45
- */
46
- export declare const NO_BROKEN_LINKS: readonly string[];
47
- export interface MarkdownEngineProps {
48
- content: string;
49
- className?: string;
50
- /** Backend-provided heading IDs for deep-link anchors */
51
- sectionIds?: HeadingSection[];
52
- /** When the page already has an H1, render markdown `#` as `<h2>` */
53
- demoteMarkdownH1ToH2?: boolean;
54
- /** List of broken link hrefs detected server-side (shown with [BROKEN] badge) */
55
- brokenLinks?: readonly string[];
56
- /** Callback for internal (non-http, non-anchor) link clicks */
57
- onInternalLinkClick?: (path: string, options?: {
58
- expandFolder?: boolean;
59
- fromInternalLink?: boolean;
60
- }) => void;
61
- /** Current documentation path — enables internal-link mode when set */
62
- currentPath?: string;
63
- /** Resolve an internal link href to a navigation path. */
64
- onResolveLink?: (href: string, currentPath: string) => Promise<ResolveLinkResult>;
65
- /** Pre-process the raw markdown string before rendering (e.g. shortcode expansion) */
66
- preprocessContent?: (content: string) => string;
67
- /** Merge additional or override react-markdown component renderers (spread LAST — caller wins) */
68
- componentOverrides?: Partial<Components>;
69
- /** Extra remark plugins appended after the built-in remarkGfm + remarkBreaks */
70
- additionalRemarkPlugins?: PluggableList;
71
- /** Text sizing preset / per-element overrides */
72
- textSize?: TextSizeConfig;
73
- /**
74
- * Extra raw-HTML tags this composition admits. Unioned into BOTH the
75
- * text pre-pass allowlist AND the sanitize schema together (the
76
- * coupled-allowlist invariant — see ./sanitize.ts).
77
- */
78
- extraAllowedHtmlTags?: string[];
79
- /**
80
- * Set true for the actively streaming message ONLY. Enables atomic-block
81
- * memoization + fence tail-completion + an aria-live wrapper. The caller
82
- * MUST flip back to false on completion — that final render is one
83
- * authoritative whole-document parse (block cache discarded), so
84
- * streaming can never permanently diverge from the settled output.
85
- */
86
- streaming?: boolean;
87
- }
88
- /**
89
- * Memoized so a parent re-render with UNCHANGED props (same `content`
90
- * string, same memoized `componentOverrides`/plugins) does NOT re-parse the
91
- * markdown. Re-parsing rebuilds the entire react-markdown subtree, which
92
- * RE-MOUNTS any embedded inline entity cards — closing their open menus and
93
- * re-triggering their fetch on every chat re-render (streaming chunk AND
94
- * scroll). With stable props the renderer bails, so completed messages'
95
- * cards stay mounted. The streaming path additionally memoizes completed
96
- * atomic blocks so the in-flight message re-parses only its live tail.
97
- */
98
- export declare const MarkdownEngine: React.NamedExoticComponent<MarkdownEngineProps>;
99
- //# sourceMappingURL=engine.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/markdown/engine.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAwB,MAAM,OAAO,CAAC;AAC7C,OAAsB,EAAE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAM7C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAQnE,OAAO,EAAyB,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,EAIL,KAAK,cAAc,EACpB,MAAM,eAAe,CAAC;AAIvB,YAAY,EAAE,iBAAiB,EAAE,CAAC;AAElC;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,eAAe,EAAE,SAAS,MAAM,EAAO,CAAC;AAErD,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yDAAyD;IACzD,UAAU,CAAC,EAAE,cAAc,EAAE,CAAC;IAC9B,qEAAqE;IACrE,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,iFAAiF;IACjF,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,+DAA+D;IAC/D,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,OAAO,CAAC;QAAC,gBAAgB,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IAC/G,uEAAuE;IACvE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0DAA0D;IAC1D,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAClF,sFAAsF;IACtF,iBAAiB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC;IAChD,kGAAkG;IAClG,kBAAkB,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IACzC,gFAAgF;IAChF,uBAAuB,CAAC,EAAE,aAAa,CAAC;IACxC,iDAAiD;IACjD,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAqMD;;;;;;;;;GASG;AACH,eAAO,MAAM,cAAc,iDAA2B,CAAC"}
@@ -1,65 +0,0 @@
1
- export interface HeadingSection {
2
- id: string;
3
- title: string;
4
- level: number;
5
- }
6
- /** `line (1-based, document-wide) → heading id`. */
7
- export type HeadingIdMap = ReadonlyMap<number, string>;
8
- /**
9
- * Line offset added to unit-relative hast positions. Non-zero only on the
10
- * streaming path, where each atomic unit is parsed by its own
11
- * `ReactMarkdown` (see `StreamingBlock.startLine`).
12
- */
13
- export declare const HeadingLineOffsetContext: import("react").Context<number>;
14
- /**
15
- * The document's heading-id map, delivered by CONTEXT rather than baked into
16
- * the react-markdown `components` map on purpose: the map is rebuilt on every
17
- * streamed token (its input is the growing `processedContent`), so listing it
18
- * as a `components` memo dep would change that map's identity each token and
19
- * make every completed streaming block's `memo` bail — the exact regression
20
- * `NO_BROKEN_LINKS` was introduced to fix. Through context only the heading
21
- * renderers re-render.
22
- */
23
- export declare const HeadingIdMapContext: import("react").Context<HeadingIdMap>;
24
- /** Look up the pre-computed id for a heading hast node. Pure. */
25
- export declare function useHeadingId(node: any): string | undefined;
26
- /**
27
- * Build the document's `line → id` map. Pure: same content + same
28
- * `sectionIds` always yields the same map.
29
- */
30
- export declare function buildHeadingIdMap(content: string, sectionIds?: HeadingSection[]): HeadingIdMap;
31
- /**
32
- * Memoized `buildHeadingIdMap` for the engine, with the map's IDENTITY held
33
- * stable across content changes that don't touch any heading.
34
- *
35
- * `content` changes on every streamed token, so the `useMemo` alone rebuilt
36
- * a fresh `Map` per token; that map is the context value, so EVERY heading
37
- * consumer in every already-completed block re-rendered on every token —
38
- * the same identity-churn class `NO_BROKEN_LINKS` exists to prevent, just
39
- * one layer down. Rebuilding is cheap; re-rendering the consumers is not, so
40
- * the newly built map is compared to the previous one and the previous
41
- * object is returned when the entries match.
42
- */
43
- export declare function useHeadingIdMap(content: string, sectionIds?: HeadingSection[]): HeadingIdMap;
44
- /**
45
- * Fallback id for a heading the source scan could NOT see — in practice only
46
- * a heading synthesized by a caller remark/rehype plugin, which carries no
47
- * source position. (Setext, blockquote/list-nested ATX and multiple raw
48
- * `<hN>`s on one line are all scanned now, so they no longer land here.)
49
- *
50
- * Routed through the SAME dedupe shape as the map so a fallback id can never
51
- * collide with an assigned one. It stays PURE — `taken` is derived from the
52
- * map, not from render order — which is why two position-less headings with
53
- * IDENTICAL text still collide with each other: disambiguating those would
54
- * require the shared mutable counter this module deleted.
55
- */
56
- export declare function resolveFallbackHeadingId(base: string, taken: ReadonlySet<string>): string;
57
- /**
58
- * The ids already assigned by the document's heading-id map. Cached per map
59
- * IDENTITY, which `useHeadingIdMap` now keeps stable across heading-free
60
- * token growth — so this is O(headings) once, not per heading per token.
61
- */
62
- export declare function useAssignedHeadingIds(): ReadonlySet<string>;
63
- /** Extract plain text from React children (headings receive mixed nodes). */
64
- export declare function extractText(node: any): string;
65
- //# sourceMappingURL=heading-ids.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"heading-ids.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/markdown/heading-ids.ts"],"names":[],"mappings":"AAoCA,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;CACd;AAED,oDAAoD;AACpD,MAAM,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAUtD;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,iCAAmB,CAAA;AAIxD;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB,uCAAiD,CAAA;AAEjF,iEAAiE;AAEjE,wBAAgB,YAAY,CAAC,IAAI,EAAE,GAAG,GAAG,MAAM,GAAG,SAAS,CAK1D;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,cAAc,EAAE,GAC5B,YAAY,CAoEd;AAYD;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,cAAc,EAAE,GAC5B,YAAY,CAQd;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,MAAM,CAMzF;AAKD;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,WAAW,CAAC,MAAM,CAAC,CAO3D;AAED,6EAA6E;AAE7E,wBAAgB,WAAW,CAAC,IAAI,EAAE,GAAG,GAAG,MAAM,CAK7C"}
@@ -1,18 +0,0 @@
1
- /**
2
- * Unified markdown module — public surface.
3
- *
4
- * ONE engine (`MarkdownEngine`), two named compositions:
5
- * - `SimpleMarkdownRenderer` — chat/doc surfaces (embed-free bundle)
6
- * - `RichMarkdownRenderer` — authored-content surfaces (shortcodes,
7
- * social embeds, Video SSOT, OG previews)
8
- */
9
- export { MarkdownEngine, type MarkdownEngineProps } from './engine';
10
- export { SimpleMarkdownRenderer, type SimpleMarkdownRendererProps, type ResolveLinkResult, } from './simple-markdown-renderer';
11
- export { RichMarkdownRenderer, type RichMarkdownRendererProps, } from './rich/rich-markdown-renderer';
12
- export { processShortcodes } from './rich/shortcodes';
13
- export { SAFE_HTML_TAGS, SVG_TAGS, buildEffectiveTagSet, buildSanitizeSchema, cardAwareUrlTransform, escapeUnknownHtmlTags, rehypeStripUnsafe, } from './sanitize';
14
- export { TEXT_SIZE_PRESETS, resolveTextSizeConfig, type TextSizeConfig, type TextSizeClassMap, type TextSizeElement, type TextSizePreset, } from './text-size';
15
- export { MermaidDiagram } from './mermaid-diagram';
16
- export { buildHeadingIdMap, useHeadingIdMap, extractText, type HeadingSection, type HeadingIdMap, } from './heading-ids';
17
- export { splitStreamingBlocks, completeStreamingTail, type StreamingBlock } from './streaming';
18
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/markdown/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,UAAU,CAAC;AACpE,OAAO,EACL,sBAAsB,EACtB,KAAK,2BAA2B,EAChC,KAAK,iBAAiB,GACvB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,oBAAoB,EACpB,KAAK,yBAAyB,GAC/B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EACL,cAAc,EACd,QAAQ,EACR,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,cAAc,GACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,WAAW,EACX,KAAK,cAAc,EACnB,KAAK,YAAY,GAClB,MAAM,eAAe,CAAC;AAKvB,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC"}
@@ -1,79 +0,0 @@
1
- /**
2
- * Single MermaidDiagram for the unified markdown engine (dark theme only —
3
- * the old RichMarkdownRenderer's light-theme branch was dead code behind a
4
- * hardcoded `isDarkMode = true` and is deleted, not carried over).
5
- *
6
- * `mermaid` stays a dynamic import so neither chat nor content bundles pay
7
- * for it unless a diagram is actually rendered.
8
- */
9
- import React from 'react';
10
- /**
11
- * SECURITY SSOT for the mermaid renderer — the ONLY place these knobs are
12
- * written. `./__tests__/mermaid-security.test.ts` imports THIS constant and
13
- * spreads it into its own `mermaid.initialize`, so the fixture and the
14
- * component can no longer drift: flipping `securityLevel` to `'loose'` here
15
- * fails the suite (verified by doing exactly that).
16
- *
17
- * This renderer sits on the CHAT path, so the diagram source is MODEL output
18
- * — untrusted by construction — and the rendered SVG goes through
19
- * `dangerouslySetInnerHTML`. The pre-unification renderer used `'loose'`,
20
- * which permits raw HTML inside labels and enables mermaid's `click`
21
- * interaction directive: a node label like `A["<img src=x onerror=...>"]`
22
- * would have produced LIVE HTML.
23
- *
24
- * - `securityLevel: 'strict'` encodes HTML tags in text and disables click
25
- * handlers.
26
- * - `htmlLabels: false` renders labels as SVG `<text>` instead of a
27
- * foreignObject HTML subtree, so there is no HTML surface at all. Verified:
28
- * no authored diagram in this repo or in the consuming hub's markdown uses
29
- * HTML labels (not even `<br/>`), so 'antiscript' (which still allows tags)
30
- * is not needed. (`htmlLabels` is set at the ROOT — `flowchart.htmlLabels`
31
- * is deprecated in mermaid 11 and the root value takes precedence.)
32
- * - `secure` is the allowlist of config keys a `%%{init}%%` directive in the
33
- * diagram SOURCE may NOT override. mermaid's default list covers
34
- * `securityLevel` but NOT `htmlLabels`, so model-authored source could
35
- * otherwise re-enable HTML labels while `securityLevel` stayed locked.
36
- * Adding `htmlLabels` (plus `secure` itself and the resource limits) closes
37
- * that hole.
38
- *
39
- * jsdom NOTE: with `htmlLabels` unlocked, a `%%{init: {"htmlLabels": true}}%%`
40
- * directive was observed to make `mermaid.render` never settle under jsdom
41
- * (>60s, against a passing two-render control). This was NOT reproduced in a
42
- * real browser and may well be an artifact of jsdom having no layout — do not
43
- * read it as a confirmed browser DoS. Either way the render below is wrapped
44
- * in a timeout so a non-settling render surfaces the error state instead of
45
- * sitting on "Rendering diagram…" forever.
46
- */
47
- export declare const MERMAID_SECURITY_OPTIONS: {
48
- htmlLabels: false;
49
- securityLevel: "strict";
50
- secure: string[];
51
- };
52
- /** Upper bound on a single `mermaid.render`. Generous enough that no honest
53
- * diagram hits it; short enough that a wedged render becomes a visible error
54
- * instead of a permanent skeleton. */
55
- export declare const MERMAID_RENDER_TIMEOUT_MS = 15000;
56
- /**
57
- * ODS-TOKENS FLAG (ODS_TOKEN_RULES §Colors / §Typography / §General):
58
- * `mermaidStyles` below and the `themeVariables` / `fontFamily` / `fontSize`
59
- * block in `MermaidDiagram` carry RAW hex colors, a literal font-family and
60
- * literal px font sizes.
61
- *
62
- * Reason: mermaid's configuration is not CSS — `themeVariables` is a
63
- * JavaScript API whose values are baked into the generated SVG as literal
64
- * attribute strings, so a `var(--color-…)` reference resolves to nothing
65
- * there. On top of that, ODS has NO 10-step categorical color ramp, and
66
- * mermaid's `cScale0…cScale9` requires exactly one. The palette is carried
67
- * over VERBATIM from the pre-unification RichMarkdownRenderer, so this is
68
- * parity, not new divergence; the missing categorical-ramp tokens are
69
- * flagged here for addition to ODS.
70
- *
71
- * Scope: this exemption covers THIS file only, and only the mermaid config
72
- * surface. Do NOT copy this pattern — every other style in the markdown
73
- * module uses ODS semantic classes.
74
- */
75
- export declare const mermaidStyles = "\n .mermaid-svg-container svg {\n max-width: 100% !important;\n height: auto !important;\n min-height: 200px;\n font-family: 'DM Sans', sans-serif !important;\n font-size: 14px !important;\n }\n @media (min-width: 1520px) {\n .mermaid-svg-container svg {\n max-width: 900px !important;\n max-height: 700px !important;\n min-height: 300px;\n font-size: 16px !important;\n }\n }\n @media (min-width: 768px) and (max-width: 1519px) {\n .mermaid-svg-container svg {\n max-width: 700px !important;\n max-height: 600px !important;\n min-height: 250px;\n font-size: 15px !important;\n }\n }\n @media (max-width: 767px) {\n .mermaid-svg-container svg {\n max-width: 90vw !important;\n max-height: 400px !important;\n min-height: 200px;\n font-size: 13px !important;\n }\n }\n .mermaid-svg-container svg[width] { width: 100% !important; }\n .mermaid-svg-container .node rect,\n .mermaid-svg-container .node circle,\n .mermaid-svg-container .node ellipse,\n .mermaid-svg-container .node polygon { stroke-width: 2px !important; }\n .mermaid-svg-container .edgePath path { stroke-width: 2px !important; }\n @media (min-width: 768px) {\n .mermaid-svg-container .node text,\n .mermaid-svg-container .edgeLabel text { font-size: 14px !important; }\n }\n @media (min-width: 1520px) {\n .mermaid-svg-container .node text,\n .mermaid-svg-container .edgeLabel text { font-size: 16px !important; }\n }\n";
76
- export declare const MermaidDiagram: React.FC<{
77
- chart: string;
78
- }>;
79
- //# sourceMappingURL=mermaid-diagram.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mermaid-diagram.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/markdown/mermaid-diagram.tsx"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,OAAO,KAA8B,MAAM,OAAO,CAAC;AAInD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,eAAO,MAAM,wBAAwB;;;;CA6BqC,CAAC;AAE3E;;uCAEuC;AACvC,eAAO,MAAM,yBAAyB,QAAS,CAAC;AAkBhD;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,aAAa,u+CA8CzB,CAAC;AAQF,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAkJtD,CAAC"}
@@ -1,14 +0,0 @@
1
- import type { Components } from 'react-markdown';
2
- import type { TextSizeElement } from '../text-size';
3
- export interface BuildRichEmbedOverridesOptions {
4
- ogApiBaseUrl: string;
5
- ogEndpointPath: string;
6
- textSizes: Record<TextSizeElement, string>;
7
- }
8
- /**
9
- * Overrides spread LAST onto the engine's base map: `code` (fence-language
10
- * embeds), `div` (shortcode-expanded embeds), `img` (MarkdownImage with
11
- * runtime transformImageSrc), `video` (raw tags → Video SSOT).
12
- */
13
- export declare function buildRichEmbedOverrides({ ogApiBaseUrl, ogEndpointPath, textSizes, }: BuildRichEmbedOverridesOptions): Partial<Components>;
14
- //# sourceMappingURL=embed-overrides.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"embed-overrides.d.ts","sourceRoot":"","sources":["../../../../../src/components/ui/markdown/rich/embed-overrides.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AASjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAiBpD,MAAM,WAAW,8BAA8B;IAC7C,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;CAC5C;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,EACtC,YAAY,EACZ,cAAc,EACd,SAAS,GACV,EAAE,8BAA8B,GAAG,OAAO,CAAC,UAAU,CAAC,CAiJtD"}
@@ -1,40 +0,0 @@
1
- /**
2
- * RichMarkdownRenderer — the content composition over the unified
3
- * `MarkdownEngine`: RuntimeProvider + shortcodes + embed overrides +
4
- * fetch-based internal-link resolver + `article` typography.
5
- *
6
- * This IS the real component (the old 1223-line standalone implementation
7
- * was deleted in the unification). Public prop surface is unchanged, so
8
- * every hub/app call site compiles untouched. Deltas vs the old
9
- * implementation are the ones reviewed in the unification plan: the
10
- * sanitize stack + tag-escape pre-pass now apply to content surfaces
11
- * (`extraAllowedHtmlTags={['video','source']}` keeps authored video
12
- * working), the engine is memoized, and the dead light-mode branches are
13
- * gone.
14
- */
15
- import React from 'react';
16
- import { type MarkdownEngineProps } from '../engine';
17
- import { type RichMarkdownRuntime } from '../../../embeds/rich-markdown-runtime';
18
- /**
19
- * The engine props this composition OWNS and therefore does not forward:
20
- * shortcode preprocessing, the embed component map, the `article` text
21
- * preset, the fetch link resolver, the rich tag allowlist, and streaming
22
- * (authored content is never streamed).
23
- */
24
- type RichOwnedEngineProps = 'extraAllowedHtmlTags' | 'preprocessContent' | 'componentOverrides' | 'textSize' | 'onResolveLink' | 'additionalRemarkPlugins' | 'streaming';
25
- /**
26
- * Derived from `MarkdownEngineProps` rather than hand-copied. The previous
27
- * shape restated 7 engine props here and a THIRD time in `InnerProps`, so
28
- * every engine prop doc/type change had to be mirrored in three places (and
29
- * a missed mirror type-checks fine while silently dropping the prop).
30
- */
31
- export interface RichMarkdownRendererProps extends Partial<RichMarkdownRuntime>, Omit<MarkdownEngineProps, RichOwnedEngineProps> {
32
- /** Source for resolving internal links (default: 'openframe-docs'). Registry id from DOC_SOURCES. */
33
- resolveSource?: string;
34
- /** Path of the internal link-resolver endpoint. Default '/api/docs/resolve-link'. */
35
- resolveLinkEndpointUrl?: string;
36
- }
37
- /** Memoized — see the engine's memo rationale. */
38
- export declare const RichMarkdownRenderer: React.NamedExoticComponent<RichMarkdownRendererProps>;
39
- export {};
40
- //# sourceMappingURL=rich-markdown-renderer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rich-markdown-renderer.d.ts","sourceRoot":"","sources":["../../../../../src/components/ui/markdown/rich/rich-markdown-renderer.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAqC,MAAM,OAAO,CAAC;AAC1D,OAAO,EAAmC,KAAK,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAEtF,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,uCAAuC,CAAC;AAQ/C;;;;;GAKG;AACH,KAAK,oBAAoB,GACrB,sBAAsB,GACtB,mBAAmB,GACnB,oBAAoB,GACpB,UAAU,GACV,eAAe,GACf,yBAAyB,GACzB,WAAW,CAAC;AAEhB;;;;;GAKG;AACH,MAAM,WAAW,yBACf,SAAQ,OAAO,CAAC,mBAAmB,CAAC,EAClC,IAAI,CAAC,mBAAmB,EAAE,oBAAoB,CAAC;IACjD,qGAAqG;IACrG,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qFAAqF;IACrF,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AA0HD,kDAAkD;AAClD,eAAO,MAAM,oBAAoB,uDAAiC,CAAC"}
@@ -1,8 +0,0 @@
1
- /**
2
- * Shortcode + auto-URL-embed preprocessing for the rich (content)
3
- * composition. Moved verbatim from the old RichMarkdownRenderer — the
4
- * `{{youtube:...}}` / `{% youtube %}` / thumbnail-link / auto-URL grammar
5
- * is authored-content SSOT; chat surfaces never run this.
6
- */
7
- export declare const processShortcodes: (content: string) => string;
8
- //# sourceMappingURL=shortcodes.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shortcodes.d.ts","sourceRoot":"","sources":["../../../../../src/components/ui/markdown/rich/shortcodes.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,iBAAiB,GAAI,SAAS,MAAM,KAAG,MAkKnD,CAAC"}