@flamingo-stack/openframe-frontend-core 0.0.458-snapshot.20260720215024 → 0.0.458

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