@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,484 +0,0 @@
1
- // src/chat-protocol/frames.ts
2
- var FRAME_TERMINATOR = "\0";
3
- var END_OF_LEADING = "";
4
- var TRAILER_SENTINEL = "";
5
-
6
- // src/chat-protocol/events.ts
7
- var CHAT_OWNER_ADMIN = "ADMIN";
8
-
9
- // src/chat-protocol/encode.ts
10
- var encoder = new TextEncoder();
11
- var SENTINEL_BYTES_RE = /[\u0000\u001E\u001F]/g;
12
- function stripSentinelBytes(text) {
13
- return text.replace(SENTINEL_BYTES_RE, "");
14
- }
15
- function encodeLeadingFrame(frame) {
16
- return encoder.encode(JSON.stringify(frame) + FRAME_TERMINATOR);
17
- }
18
- function encodeEndOfLeading() {
19
- return encoder.encode(END_OF_LEADING);
20
- }
21
- function encodeTextDelta(text) {
22
- return encoder.encode(stripSentinelBytes(text));
23
- }
24
- function encodeTrailingUsageFrame(frame) {
25
- return encoder.encode(TRAILER_SENTINEL + JSON.stringify(frame));
26
- }
27
-
28
- // src/chat-protocol/decode.ts
29
- function escapeThinkingTags(text) {
30
- return text.replace(/</g, "&lt;");
31
- }
32
- function mapLeadingFrame(meta, out) {
33
- if (meta.status === "thinking") {
34
- out.push({ type: "status", phase: "thinking" });
35
- } else if (meta.kind === "thinking-delta" && typeof meta.text === "string") {
36
- out.push({ type: "thinking-delta", text: meta.text });
37
- } else if (meta.kind === "usage" && meta.stage === "start") {
38
- out.push({
39
- type: "usage",
40
- stage: "start",
41
- input_tokens: meta.input_tokens,
42
- cache_read_input_tokens: meta.cache_read_input_tokens,
43
- cache_creation_input_tokens: meta.cache_creation_input_tokens
44
- });
45
- } else if (meta.kind === "decision_resolved" && typeof meta.action === "string") {
46
- const status = meta.action === "rejected" ? "rejected" : "approved";
47
- const toolName = typeof meta.tool_name === "string" ? meta.tool_name : void 0;
48
- const result = meta.result ?? null;
49
- const card = meta.card ?? null;
50
- out.push({
51
- type: "approval-resolved",
52
- status,
53
- ok: meta.ok === true,
54
- willAutoContinue: meta.willAutoContinue === true,
55
- ...toolName ? { toolName } : {},
56
- ...result ? { result } : {},
57
- ...card?.marker ? { marker: card.marker } : {},
58
- ...card?.ref ? { cardRef: card.ref } : {},
59
- ...card?.type ? { cardType: card.type } : {},
60
- ...typeof meta.receiptText === "string" ? { receiptText: meta.receiptText } : {},
61
- requestId: typeof meta.proposalId === "string" ? meta.proposalId : void 0
62
- });
63
- } else if (meta.kind === "approval_request" && meta.proposalId) {
64
- const proposalId = String(meta.proposalId);
65
- const toolName = String(meta.toolName ?? "tool");
66
- const headline = typeof meta.title === "string" && meta.title.length > 0 ? meta.title : toolName;
67
- const rawFields = Array.isArray(meta.fields) ? meta.fields : [];
68
- const fields = [];
69
- for (const f of rawFields) {
70
- if (!f || !f.label || !f.value) continue;
71
- fields.push({ label: f.label, value: f.value });
72
- }
73
- out.push({
74
- type: "approval-request",
75
- requestId: proposalId,
76
- approvalType: toolName,
77
- command: headline,
78
- fields,
79
- status: "pending"
80
- });
81
- } else if (meta.kind === "text-leading" && typeof meta.text === "string") {
82
- out.push({ type: "text-delta", text: meta.text, leading: true });
83
- } else if (meta.kind === "tool_error") {
84
- const msg = typeof meta.message === "string" && meta.message.length > 0 ? meta.message : "Could not complete the requested action right now.";
85
- out.push({ type: "error", title: msg });
86
- } else if (meta.kind === "routing") {
87
- if (typeof meta.routedComplexity === "string") {
88
- out.push({
89
- type: "metadata",
90
- routing: {
91
- routedComplexity: meta.routedComplexity,
92
- ...typeof meta.routedModel === "string" ? { routedModel: meta.routedModel } : {},
93
- routedThinkingBudget: typeof meta.routedThinkingBudget === "number" ? meta.routedThinkingBudget : null
94
- }
95
- });
96
- }
97
- } else {
98
- out.push({
99
- type: "metadata",
100
- sources: meta.sources,
101
- refs: meta.refs,
102
- provider: meta.provider,
103
- modelLabel: meta.modelLabel,
104
- modelName: meta.model,
105
- contextWindowMaxTokens: meta.contextWindowMaxTokens,
106
- scrollAnchor: meta.scrollAnchor,
107
- conversationId: meta.conversationId
108
- });
109
- }
110
- }
111
- function createSseFrameDecoder() {
112
- const textDecoder = new TextDecoder();
113
- let buffer = "";
114
- let inText = false;
115
- let inTrailer = false;
116
- let trailerBuffer = "";
117
- let ended = false;
118
- function push(bytes) {
119
- const out = [];
120
- const chunk = textDecoder.decode(bytes, { stream: true });
121
- if (!inText) {
122
- buffer += chunk;
123
- while (!inText) {
124
- const recIdx = buffer.indexOf(END_OF_LEADING);
125
- const nullIdx = buffer.indexOf(FRAME_TERMINATOR);
126
- if (recIdx !== -1 && (nullIdx === -1 || recIdx < nullIdx)) {
127
- inText = true;
128
- out.push({ type: "turn-start" });
129
- const after = buffer.slice(recIdx + 1);
130
- buffer = "";
131
- if (after) {
132
- const unitIdx = after.indexOf(TRAILER_SENTINEL);
133
- if (unitIdx === -1) {
134
- out.push({ type: "text-delta", text: after });
135
- } else {
136
- const textBefore = after.slice(0, unitIdx);
137
- const trailerAfter = after.slice(unitIdx + 1);
138
- if (textBefore) {
139
- out.push({ type: "text-delta", text: textBefore });
140
- }
141
- inTrailer = true;
142
- trailerBuffer = trailerAfter;
143
- }
144
- }
145
- break;
146
- }
147
- if (nullIdx === -1) break;
148
- const metaStr = buffer.slice(0, nullIdx);
149
- const remaining = buffer.slice(nullIdx + 1);
150
- let meta;
151
- try {
152
- meta = JSON.parse(metaStr);
153
- } catch {
154
- inText = true;
155
- out.push({ type: "turn-start", implicit: true });
156
- if (buffer.length > 0) {
157
- out.push({ type: "text-delta", text: buffer });
158
- buffer = "";
159
- }
160
- break;
161
- }
162
- mapLeadingFrame(meta, out);
163
- buffer = remaining;
164
- }
165
- } else if (inTrailer) {
166
- trailerBuffer += chunk;
167
- } else {
168
- const sepIdx = chunk.indexOf(TRAILER_SENTINEL);
169
- if (sepIdx === -1) {
170
- out.push({ type: "text-delta", text: chunk });
171
- } else {
172
- const before = chunk.slice(0, sepIdx);
173
- const after = chunk.slice(sepIdx + 1);
174
- if (before) out.push({ type: "text-delta", text: before });
175
- inTrailer = true;
176
- trailerBuffer = after;
177
- }
178
- }
179
- return out;
180
- }
181
- function end() {
182
- if (ended) return [];
183
- ended = true;
184
- const out = [];
185
- if (trailerBuffer.length > 0) {
186
- const raw = trailerBuffer;
187
- trailerBuffer = "";
188
- try {
189
- const meta = JSON.parse(raw);
190
- if (meta.kind === "usage" && (meta.stage === "end" || meta.stage === "display")) {
191
- out.push({
192
- type: "usage",
193
- stage: "end",
194
- input_tokens: meta.input_tokens,
195
- output_tokens: meta.output_tokens,
196
- cache_read_input_tokens: meta.cache_read_input_tokens,
197
- cache_creation_input_tokens: meta.cache_creation_input_tokens,
198
- hit_rate_pct: meta.hit_rate_pct,
199
- telemetry: meta.telemetry,
200
- breakdown: meta.breakdown,
201
- debug: meta.debug
202
- });
203
- }
204
- } catch {
205
- }
206
- }
207
- return out;
208
- }
209
- return { push, end };
210
- }
211
-
212
- // src/components/chat/types/message.types.ts
213
- var MESSAGE_TYPE = {
214
- TEXT: "TEXT",
215
- THINKING: "THINKING",
216
- GUIDE: "GUIDE",
217
- EXECUTING_TOOL: "EXECUTING_TOOL",
218
- EXECUTED_TOOL: "EXECUTED_TOOL",
219
- APPROVAL_REQUEST: "APPROVAL_REQUEST",
220
- APPROVAL_RESULT: "APPROVAL_RESULT",
221
- ERROR: "ERROR",
222
- MESSAGE_START: "MESSAGE_START",
223
- MESSAGE_END: "MESSAGE_END",
224
- MESSAGE_REQUEST: "MESSAGE_REQUEST",
225
- AI_METADATA: "AI_METADATA",
226
- TOKEN_USAGE: "TOKEN_USAGE",
227
- CONTEXT_COMPACTION_START: "CONTEXT_COMPACTION_START",
228
- CONTEXT_COMPACTION_END: "CONTEXT_COMPACTION_END",
229
- DIRECT_MESSAGE: "DIRECT_MESSAGE",
230
- SYSTEM: "SYSTEM",
231
- DIALOG_CLOSED: "DIALOG_CLOSED"
232
- };
233
-
234
- // src/chat-protocol/nats-decoder.ts
235
- function normalizeToolCalls(raw) {
236
- if (!Array.isArray(raw)) return [];
237
- return raw.filter((item) => !!item && typeof item === "object").map((item) => ({
238
- toolExecutionRequestId: String(item.toolExecutionRequestId ?? ""),
239
- toolName: String(item.toolName ?? ""),
240
- toolTitle: typeof item.toolTitle === "string" ? item.toolTitle : void 0,
241
- toolExplanation: typeof item.toolExplanation === "string" ? item.toolExplanation : void 0,
242
- toolType: typeof item.toolType === "string" ? item.toolType : void 0,
243
- requiresApproval: item.requiresApproval === true,
244
- approvalType: typeof item.approvalType === "string" ? item.approvalType : null,
245
- toolCallArguments: item.toolCallArguments && typeof item.toolCallArguments === "object" ? item.toolCallArguments : null
246
- }));
247
- }
248
- function decodeNatsChunk(chunk) {
249
- if (!chunk || typeof chunk !== "object") return null;
250
- const data = chunk;
251
- const type = String(data.type || "");
252
- const seq = typeof data.streamSeq === "number" ? { seq: data.streamSeq } : {};
253
- switch (type) {
254
- case MESSAGE_TYPE.MESSAGE_START:
255
- return { type: "turn-start", ...seq };
256
- case MESSAGE_TYPE.MESSAGE_END:
257
- return { type: "turn-end", ...seq };
258
- case MESSAGE_TYPE.AI_METADATA: {
259
- const providerName = data.providerName || data.provider;
260
- if (typeof data.modelName === "string" && typeof providerName === "string") {
261
- return {
262
- type: "metadata",
263
- modelLabel: data.modelDisplayName,
264
- modelName: data.modelName,
265
- provider: providerName,
266
- contextWindowMaxTokens: typeof data.contextWindow === "number" ? data.contextWindow : 0,
267
- ...seq
268
- };
269
- }
270
- return null;
271
- }
272
- case MESSAGE_TYPE.TEXT:
273
- if (typeof data.text === "string") {
274
- return { type: "text-delta", text: data.text, ...seq };
275
- }
276
- return null;
277
- case MESSAGE_TYPE.THINKING:
278
- if (typeof data.text === "string") {
279
- return { type: "thinking-delta", text: data.text, ...seq };
280
- }
281
- return null;
282
- case MESSAGE_TYPE.GUIDE:
283
- if (typeof data.text === "string") {
284
- return { type: "guide-delta", text: data.text, ...seq };
285
- }
286
- return null;
287
- case MESSAGE_TYPE.EXECUTING_TOOL:
288
- return {
289
- type: "tool-execution",
290
- data: {
291
- type: "EXECUTING_TOOL",
292
- integratedToolType: data.integratedToolType || "",
293
- toolFunction: data.toolFunction || "",
294
- toolTitle: typeof data.title === "string" ? data.title : void 0,
295
- parameters: data.parameters,
296
- toolExecutionRequestId: typeof data.toolExecutionRequestId === "string" ? data.toolExecutionRequestId : void 0
297
- },
298
- ...seq
299
- };
300
- case MESSAGE_TYPE.EXECUTED_TOOL:
301
- return {
302
- type: "tool-execution",
303
- data: {
304
- type: "EXECUTED_TOOL",
305
- integratedToolType: data.integratedToolType || "",
306
- toolFunction: data.toolFunction || "",
307
- toolTitle: typeof data.title === "string" ? data.title : void 0,
308
- parameters: data.parameters,
309
- result: data.result,
310
- success: data.success,
311
- toolExecutionRequestId: typeof data.toolExecutionRequestId === "string" ? data.toolExecutionRequestId : void 0
312
- },
313
- ...seq
314
- };
315
- case MESSAGE_TYPE.APPROVAL_REQUEST: {
316
- const requestId = data.approvalRequestId || data.approval_request_id || "";
317
- const approvalType = data.approvalType || "USER";
318
- const toolCalls = normalizeToolCalls(data.toolCalls);
319
- if (toolCalls.length > 0) {
320
- return { type: "approval-request", requestId, approvalType, toolCalls, ...seq };
321
- }
322
- return {
323
- type: "approval-request",
324
- requestId,
325
- approvalType,
326
- command: data.command || "",
327
- explanation: data.explanation,
328
- ...seq
329
- };
330
- }
331
- case MESSAGE_TYPE.APPROVAL_RESULT: {
332
- const resolvedByName = typeof data.resolvedByName === "string" ? data.resolvedByName : typeof data.displayName === "string" ? data.displayName : void 0;
333
- return {
334
- type: "approval-resolved",
335
- requestId: data.approvalRequestId || data.approval_request_id || "",
336
- status: data.approved === true ? "approved" : "rejected",
337
- approvalType: data.approvalType || "CLIENT",
338
- resolvedByName,
339
- ...seq
340
- };
341
- }
342
- case MESSAGE_TYPE.ERROR:
343
- return {
344
- type: "error",
345
- title: data.error || "An error occurred",
346
- details: data.details,
347
- ...seq
348
- };
349
- case MESSAGE_TYPE.MESSAGE_REQUEST:
350
- return {
351
- type: "participant",
352
- kind: "message-request",
353
- text: String(data.text || ""),
354
- ownerType: typeof data.ownerType === "string" ? data.ownerType : void 0,
355
- displayName: typeof data.displayName === "string" ? data.displayName : void 0,
356
- userId: typeof data.userId === "string" ? data.userId : void 0,
357
- // Wire shape carries no label; fall back to the id (parity with
358
- // the history path in `process-historical-messages.ts`).
359
- contextItems: Array.isArray(data.contextItems) ? data.contextItems.filter((it) => typeof it?.type === "string" && typeof it?.id === "string").map((it) => ({
360
- type: it.type,
361
- id: it.id,
362
- label: it.id
363
- })) : void 0,
364
- ...seq
365
- };
366
- case MESSAGE_TYPE.TOKEN_USAGE:
367
- return {
368
- type: "token-usage",
369
- inputTokensSize: data.inputTokensSize ?? 0,
370
- outputTokensSize: data.outputTokensSize ?? 0,
371
- totalTokensSize: data.totalTokensSize ?? 0,
372
- contextSize: data.contextSize ?? 0,
373
- ...seq
374
- };
375
- case MESSAGE_TYPE.CONTEXT_COMPACTION_START:
376
- return { type: "compaction", phase: "start", ...seq };
377
- case MESSAGE_TYPE.CONTEXT_COMPACTION_END:
378
- return {
379
- type: "compaction",
380
- phase: "end",
381
- summary: typeof data.text === "string" ? data.text : void 0,
382
- ...seq
383
- };
384
- case MESSAGE_TYPE.SYSTEM:
385
- if (typeof data.text === "string") {
386
- return { type: "participant", kind: "system", text: data.text, ...seq };
387
- }
388
- return null;
389
- case MESSAGE_TYPE.DIRECT_MESSAGE:
390
- if (typeof data.text === "string") {
391
- return {
392
- type: "participant",
393
- kind: "direct-message",
394
- text: data.text,
395
- ownerType: typeof data.ownerType === "string" ? data.ownerType : void 0,
396
- displayName: typeof data.displayName === "string" ? data.displayName : void 0,
397
- userId: typeof data.userId === "string" ? data.userId : void 0,
398
- ...seq
399
- };
400
- }
401
- return null;
402
- case MESSAGE_TYPE.DIALOG_CLOSED:
403
- return { type: "dialog-closed", ...seq };
404
- default:
405
- return null;
406
- }
407
- }
408
-
409
- // src/chat-protocol/ip-normalize.ts
410
- var IP_BUCKET_KEY_MAX_LENGTH = 64;
411
- function isIpv4(value) {
412
- const parts = value.split(".");
413
- if (parts.length !== 4) return false;
414
- for (const part of parts) {
415
- if (!/^\d{1,3}$/.test(part)) return false;
416
- if (part.length > 1 && part.startsWith("0")) return false;
417
- if (Number(part) > 255) return false;
418
- }
419
- return true;
420
- }
421
- function isIpv6(value) {
422
- if (!value.includes(":")) return false;
423
- if (!/^[0-9a-f:.]+$/.test(value)) return false;
424
- if (value.includes(":::")) return false;
425
- if (value.endsWith(":") && !value.endsWith("::")) return false;
426
- if (value.startsWith(":") && !value.startsWith("::")) return false;
427
- const compressions = value.split("::").length - 1;
428
- if (compressions > 1) return false;
429
- const groups = value.split(":");
430
- if (groups.length > 8) return false;
431
- for (let i = 0; i < groups.length; i += 1) {
432
- const group = groups[i];
433
- if (group === "") continue;
434
- if (group.includes(".")) {
435
- if (i !== groups.length - 1) return false;
436
- if (!isIpv4(group)) return false;
437
- continue;
438
- }
439
- if (!/^[0-9a-f]{1,4}$/.test(group)) return false;
440
- }
441
- if (compressions === 0) {
442
- const embedsIpv4 = groups[groups.length - 1]?.includes(".") ?? false;
443
- if (groups.length !== (embedsIpv4 ? 7 : 8)) return false;
444
- }
445
- return true;
446
- }
447
- function normalizeIpForBucketKey(value) {
448
- if (typeof value !== "string") return null;
449
- let candidate = value.trim();
450
- if (candidate === "" || candidate.length > IP_BUCKET_KEY_MAX_LENGTH) return null;
451
- if (candidate.startsWith("[")) {
452
- const close = candidate.indexOf("]");
453
- if (close === -1) return null;
454
- const trailer = candidate.slice(close + 1);
455
- if (trailer !== "" && !/^:\d{1,5}$/.test(trailer)) return null;
456
- candidate = candidate.slice(1, close);
457
- }
458
- const zone = candidate.indexOf("%");
459
- if (zone !== -1) candidate = candidate.slice(0, zone);
460
- if (candidate === "") return null;
461
- const portSplit = candidate.lastIndexOf(":");
462
- if (portSplit > 0 && /^\d{1,5}$/.test(candidate.slice(portSplit + 1))) {
463
- const head = candidate.slice(0, portSplit);
464
- if (isIpv4(head)) candidate = head;
465
- }
466
- if (isIpv4(candidate)) return candidate;
467
- const lowered = candidate.toLowerCase();
468
- const mapped = /^(?:(?:0{1,4}:){5}|::)ffff:(\d{1,3}(?:\.\d{1,3}){3})$/.exec(lowered);
469
- if (mapped) return isIpv4(mapped[1]) ? mapped[1] : null;
470
- if (isIpv6(lowered)) return lowered;
471
- return null;
472
- }
473
-
474
- // src/chat-protocol/env-flag.ts
475
- function envFlagEnabled(name) {
476
- const raw = process.env[name];
477
- if (!raw) return false;
478
- const v = raw.trim().toLowerCase();
479
- return v !== "" && v !== "0" && v !== "false" && v !== "off";
480
- }
481
-
482
- export { CHAT_OWNER_ADMIN, END_OF_LEADING, FRAME_TERMINATOR, IP_BUCKET_KEY_MAX_LENGTH, TRAILER_SENTINEL, createSseFrameDecoder, decodeNatsChunk, encodeEndOfLeading, encodeLeadingFrame, encodeTextDelta, encodeTrailingUsageFrame, envFlagEnabled, escapeThinkingTags, normalizeIpForBucketKey, stripSentinelBytes };
483
- //# sourceMappingURL=index.js.map
484
- //# sourceMappingURL=index.js.map