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

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/chat-protocol/decode.d.ts +58 -0
  2. package/dist/chat-protocol/decode.d.ts.map +1 -0
  3. package/dist/chat-protocol/encode.d.ts +44 -0
  4. package/dist/chat-protocol/encode.d.ts.map +1 -0
  5. package/dist/chat-protocol/env-flag.d.ts +35 -0
  6. package/dist/chat-protocol/env-flag.d.ts.map +1 -0
  7. package/dist/chat-protocol/events.d.ts +192 -0
  8. package/dist/chat-protocol/events.d.ts.map +1 -0
  9. package/dist/chat-protocol/frames.d.ts +206 -0
  10. package/dist/chat-protocol/frames.d.ts.map +1 -0
  11. package/dist/chat-protocol/index.cjs +493 -0
  12. package/dist/chat-protocol/index.cjs.map +1 -0
  13. package/dist/chat-protocol/index.d.ts +18 -0
  14. package/dist/chat-protocol/index.d.ts.map +1 -0
  15. package/dist/chat-protocol/index.js +477 -0
  16. package/dist/chat-protocol/index.js.map +1 -0
  17. package/dist/chat-protocol/ip-normalize.d.ts +44 -0
  18. package/dist/chat-protocol/ip-normalize.d.ts.map +1 -0
  19. package/dist/chat-protocol/nats-decoder.d.ts +26 -0
  20. package/dist/chat-protocol/nats-decoder.d.ts.map +1 -0
  21. package/dist/{chunk-SQ3CP2IV.cjs → chunk-3N3TMZ62.cjs} +7 -7
  22. package/dist/{chunk-SQ3CP2IV.cjs.map → chunk-3N3TMZ62.cjs.map} +1 -1
  23. package/dist/{chunk-I7M6KCCS.js → chunk-4R6H2U77.js} +4 -4
  24. package/dist/{chunk-CCT5VCRP.cjs → chunk-4XDWNAZW.cjs} +9 -9
  25. package/dist/{chunk-CCT5VCRP.cjs.map → chunk-4XDWNAZW.cjs.map} +1 -1
  26. package/dist/{chunk-KQ36EHE4.cjs → chunk-7KSEINAE.cjs} +15 -15
  27. package/dist/{chunk-KQ36EHE4.cjs.map → chunk-7KSEINAE.cjs.map} +1 -1
  28. package/dist/{chunk-FM5DTJPA.cjs → chunk-ADD3FPDG.cjs} +6851 -4713
  29. package/dist/chunk-ADD3FPDG.cjs.map +1 -0
  30. package/dist/{chunk-RSW42GTZ.js → chunk-APF5QBAU.js} +2 -2
  31. package/dist/{chunk-YCIVMKRS.cjs → chunk-BLZZXZNM.cjs} +26 -26
  32. package/dist/{chunk-YCIVMKRS.cjs.map → chunk-BLZZXZNM.cjs.map} +1 -1
  33. package/dist/{chunk-YHB4MNUX.cjs → chunk-BQ7PMWLM.cjs} +28 -27
  34. package/dist/chunk-BQ7PMWLM.cjs.map +1 -0
  35. package/dist/{chunk-GJ7BN4MI.js → chunk-CGNDAJ7V.js} +4 -4
  36. package/dist/{chunk-R5IQJXA3.js → chunk-F2NMWV44.js} +2 -2
  37. package/dist/{chunk-EOVQVVDJ.cjs → chunk-F7F43U7Q.cjs} +11 -11
  38. package/dist/{chunk-EOVQVVDJ.cjs.map → chunk-F7F43U7Q.cjs.map} +1 -1
  39. package/dist/{chunk-2ZW2ZPDW.js → chunk-LAOO7XHO.js} +2 -2
  40. package/dist/{chunk-O7F7RZFN.js → chunk-LJKZIIK4.js} +6 -5
  41. package/dist/chunk-LJKZIIK4.js.map +1 -0
  42. package/dist/{chunk-AJGZ3YSR.js → chunk-OR5AMXYN.js} +2 -2
  43. package/dist/{chunk-5XFJG3TC.cjs → chunk-P5JQDFRM.cjs} +60 -60
  44. package/dist/chunk-P5JQDFRM.cjs.map +1 -0
  45. package/dist/{chunk-U4APSAAR.cjs → chunk-PXZ7YQ5V.cjs} +5 -5
  46. package/dist/{chunk-U4APSAAR.cjs.map → chunk-PXZ7YQ5V.cjs.map} +1 -1
  47. package/dist/{chunk-WXDEMTLD.js → chunk-QO2XD3FR.js} +2 -2
  48. package/dist/{chunk-C2TDHJBO.cjs → chunk-QSGZE6AZ.cjs} +37 -37
  49. package/dist/{chunk-C2TDHJBO.cjs.map → chunk-QSGZE6AZ.cjs.map} +1 -1
  50. package/dist/{chunk-NSL5MNS4.js → chunk-REWRUV3K.js} +11644 -9506
  51. package/dist/chunk-REWRUV3K.js.map +1 -0
  52. package/dist/{chunk-BDTQIIJR.cjs → chunk-TA7MFVUS.cjs} +31 -31
  53. package/dist/{chunk-BDTQIIJR.cjs.map → chunk-TA7MFVUS.cjs.map} +1 -1
  54. package/dist/{chunk-4423DHRX.js → chunk-UI7CIUAR.js} +2 -2
  55. package/dist/{chunk-5BKBG653.js → chunk-VXJH5TDN.js} +10 -10
  56. package/dist/chunk-VXJH5TDN.js.map +1 -0
  57. package/dist/{chunk-AB65PWU2.cjs → chunk-WCE66C2Z.cjs} +62 -62
  58. package/dist/{chunk-AB65PWU2.cjs.map → chunk-WCE66C2Z.cjs.map} +1 -1
  59. package/dist/{chunk-KXIIUE75.js → chunk-XF5ROTMQ.js} +2 -2
  60. package/dist/components/case-studies/index.cjs +8 -8
  61. package/dist/components/case-studies/index.js +2 -2
  62. package/dist/components/chart.d.ts +1 -1
  63. package/dist/components/chat/chat-message-enhanced.d.ts.map +1 -1
  64. package/dist/components/chat/chat-message-list.d.ts.map +1 -1
  65. package/dist/components/chat/hooks/index.d.ts +0 -1
  66. package/dist/components/chat/hooks/index.d.ts.map +1 -1
  67. package/dist/components/chat/hooks/use-chat.d.ts.map +1 -1
  68. package/dist/components/chat/hooks/use-nats-chat-adapter.d.ts +15 -48
  69. package/dist/components/chat/hooks/use-nats-chat-adapter.d.ts.map +1 -1
  70. package/dist/components/chat/hooks/use-sse-chat-adapter.d.ts +3 -47
  71. package/dist/components/chat/hooks/use-sse-chat-adapter.d.ts.map +1 -1
  72. package/dist/components/chat/index.cjs +10 -2
  73. package/dist/components/chat/index.cjs.map +1 -1
  74. package/dist/components/chat/index.d.ts +1 -0
  75. package/dist/components/chat/index.d.ts.map +1 -1
  76. package/dist/components/chat/index.js +21 -13
  77. package/dist/components/chat/stream/chat-dialog-store.d.ts +184 -0
  78. package/dist/components/chat/stream/chat-dialog-store.d.ts.map +1 -0
  79. package/dist/components/chat/stream/chat-stream-reducer.d.ts +367 -0
  80. package/dist/components/chat/stream/chat-stream-reducer.d.ts.map +1 -0
  81. package/dist/components/chat/stream/delta-batcher.d.ts +51 -0
  82. package/dist/components/chat/stream/delta-batcher.d.ts.map +1 -0
  83. package/dist/components/chat/stream/index.d.ts +17 -0
  84. package/dist/components/chat/stream/index.d.ts.map +1 -0
  85. package/dist/components/chat/stream/message-mutations.d.ts +77 -0
  86. package/dist/components/chat/stream/message-mutations.d.ts.map +1 -0
  87. package/dist/components/chat/stream/use-chat-stream-reducer.d.ts +22 -0
  88. package/dist/components/chat/stream/use-chat-stream-reducer.d.ts.map +1 -0
  89. package/dist/components/chat/types/api.types.d.ts +1 -81
  90. package/dist/components/chat/types/api.types.d.ts.map +1 -1
  91. package/dist/components/chat/types/processing.types.d.ts +2 -90
  92. package/dist/components/chat/types/processing.types.d.ts.map +1 -1
  93. package/dist/components/chat/utils/extract-incomplete-message-state.d.ts +34 -6
  94. package/dist/components/chat/utils/extract-incomplete-message-state.d.ts.map +1 -1
  95. package/dist/components/chat/utils/index.d.ts +2 -3
  96. package/dist/components/chat/utils/index.d.ts.map +1 -1
  97. package/dist/components/chat/utils/process-historical-messages.d.ts +59 -11
  98. package/dist/components/chat/utils/process-historical-messages.d.ts.map +1 -1
  99. package/dist/components/contact/index.cjs +3 -3
  100. package/dist/components/contact/index.js +2 -2
  101. package/dist/components/docs/index.cjs +5 -5
  102. package/dist/components/docs/index.js +4 -4
  103. package/dist/components/embeds/index.cjs +3 -3
  104. package/dist/components/embeds/index.js +2 -2
  105. package/dist/components/faq/index.cjs +3 -3
  106. package/dist/components/faq/index.js +2 -2
  107. package/dist/components/features/index.cjs +2 -2
  108. package/dist/components/features/index.js +1 -1
  109. package/dist/components/features/time-tracker/time-tracker-panel.d.ts.map +1 -1
  110. package/dist/components/help-center-pages/index.cjs +20 -20
  111. package/dist/components/help-center-pages/index.js +11 -11
  112. package/dist/components/index.cjs +171 -129
  113. package/dist/components/index.cjs.map +1 -1
  114. package/dist/components/index.js +63 -21
  115. package/dist/components/index.js.map +1 -1
  116. package/dist/components/layout/page-container.d.ts.map +1 -1
  117. package/dist/components/navigation/index.cjs +2 -2
  118. package/dist/components/navigation/index.js +1 -1
  119. package/dist/components/onboarding-guides/index.cjs +5 -5
  120. package/dist/components/onboarding-guides/index.js +4 -4
  121. package/dist/components/onboarding-guides/onboarding-guide-detail-view.d.ts.map +1 -1
  122. package/dist/components/related-content/index.cjs +3 -3
  123. package/dist/components/related-content/index.js +2 -2
  124. package/dist/components/shared/product-release/release-detail-page.d.ts.map +1 -1
  125. package/dist/components/tickets/index.cjs +5 -5
  126. package/dist/components/tickets/index.js +4 -4
  127. package/dist/components/ui/index.cjs +44 -2
  128. package/dist/components/ui/index.cjs.map +1 -1
  129. package/dist/components/ui/index.d.ts +1 -2
  130. package/dist/components/ui/index.d.ts.map +1 -1
  131. package/dist/components/ui/index.js +55 -13
  132. package/dist/components/ui/markdown/base-components.d.ts +56 -0
  133. package/dist/components/ui/markdown/base-components.d.ts.map +1 -0
  134. package/dist/components/ui/markdown/engine.d.ts +99 -0
  135. package/dist/components/ui/markdown/engine.d.ts.map +1 -0
  136. package/dist/components/ui/markdown/heading-ids.d.ts +65 -0
  137. package/dist/components/ui/markdown/heading-ids.d.ts.map +1 -0
  138. package/dist/components/ui/markdown/index.d.ts +18 -0
  139. package/dist/components/ui/markdown/index.d.ts.map +1 -0
  140. package/dist/components/ui/markdown/mermaid-diagram.d.ts +79 -0
  141. package/dist/components/ui/markdown/mermaid-diagram.d.ts.map +1 -0
  142. package/dist/components/ui/markdown/rich/embed-overrides.d.ts +14 -0
  143. package/dist/components/ui/markdown/rich/embed-overrides.d.ts.map +1 -0
  144. package/dist/components/ui/markdown/rich/rich-markdown-renderer.d.ts +40 -0
  145. package/dist/components/ui/markdown/rich/rich-markdown-renderer.d.ts.map +1 -0
  146. package/dist/components/ui/markdown/rich/shortcodes.d.ts +8 -0
  147. package/dist/components/ui/markdown/rich/shortcodes.d.ts.map +1 -0
  148. package/dist/components/ui/markdown/sanitize.d.ts +153 -0
  149. package/dist/components/ui/markdown/sanitize.d.ts.map +1 -0
  150. package/dist/components/ui/markdown/simple-markdown-renderer.d.ts +23 -0
  151. package/dist/components/ui/markdown/simple-markdown-renderer.d.ts.map +1 -0
  152. package/dist/components/ui/markdown/streaming.d.ts +78 -0
  153. package/dist/components/ui/markdown/streaming.d.ts.map +1 -0
  154. package/dist/components/ui/markdown/text-size.d.ts +34 -0
  155. package/dist/components/ui/markdown/text-size.d.ts.map +1 -0
  156. package/dist/components/ui/modal-v2.d.ts.map +1 -1
  157. package/dist/components/ui/modal.d.ts.map +1 -1
  158. package/dist/index.cjs +60 -2
  159. package/dist/index.cjs.map +1 -1
  160. package/dist/index.js +71 -13
  161. package/dist/utils/index.cjs +169 -40
  162. package/dist/utils/index.cjs.map +1 -1
  163. package/dist/utils/index.d.ts +1 -0
  164. package/dist/utils/index.d.ts.map +1 -1
  165. package/dist/utils/index.js +162 -41
  166. package/dist/utils/index.js.map +1 -1
  167. package/dist/utils/markdown-fences.d.ts +42 -0
  168. package/dist/utils/markdown-fences.d.ts.map +1 -0
  169. package/dist/utils/markdown-heading-id.d.ts +85 -0
  170. package/dist/utils/markdown-heading-id.d.ts.map +1 -0
  171. package/dist/utils/markdown-section-extractor.d.ts.map +1 -1
  172. package/package.json +7 -1
  173. package/src/chat-protocol/__tests__/__snapshots__/nats-decoder-golden.test.ts.snap +307 -0
  174. package/src/chat-protocol/__tests__/chat-protocol.test.ts +515 -0
  175. package/src/chat-protocol/__tests__/env-flag.test.ts +52 -0
  176. package/src/chat-protocol/__tests__/ip-normalize.test.ts +136 -0
  177. package/src/chat-protocol/__tests__/nats-decoder-golden.test.ts +228 -0
  178. package/src/chat-protocol/decode.ts +277 -0
  179. package/src/chat-protocol/encode.ts +71 -0
  180. package/src/chat-protocol/env-flag.ts +39 -0
  181. package/src/chat-protocol/events.ts +228 -0
  182. package/src/chat-protocol/frames.ts +238 -0
  183. package/src/chat-protocol/index.ts +21 -0
  184. package/src/chat-protocol/ip-normalize.ts +146 -0
  185. package/src/chat-protocol/nats-decoder.ts +252 -0
  186. package/src/components/chat/__tests__/chat-message-list.test.tsx +293 -5
  187. package/src/components/chat/__tests__/chat-message-streaming-memo.test.tsx +207 -0
  188. package/src/components/chat/__tests__/chat-pending-turn.test.tsx +209 -0
  189. package/src/components/chat/chat-message-enhanced.tsx +111 -17
  190. package/src/components/chat/chat-message-list.tsx +367 -113
  191. package/src/components/chat/embeddable-chat.tsx +6 -0
  192. package/src/components/chat/hooks/.index.md +1 -1
  193. package/src/components/chat/hooks/.use-nats-chat-adapter.md +1 -1
  194. package/src/components/chat/hooks/__tests__/__snapshots__/persisted-state-v1-golden.test.ts.snap +297 -0
  195. package/src/components/chat/hooks/__tests__/__snapshots__/sse-stream-golden.test.ts.snap +0 -0
  196. package/src/components/chat/hooks/__tests__/persisted-state-v1-golden.test.ts +272 -0
  197. package/src/components/chat/hooks/__tests__/sse-stream-golden.test.ts +318 -0
  198. package/src/components/chat/hooks/index.ts +0 -1
  199. package/src/components/chat/hooks/use-chat.ts +8 -0
  200. package/src/components/chat/hooks/use-nats-chat-adapter.ts +243 -822
  201. package/src/components/chat/hooks/use-sse-chat-adapter.ts +318 -666
  202. package/src/components/chat/index.ts +5 -0
  203. package/src/components/chat/stream/__tests__/__snapshots__/chat-stream-reducer-golden.test.ts.snap +937 -0
  204. package/src/components/chat/stream/__tests__/chat-dialog-store.test.ts +756 -0
  205. package/src/components/chat/stream/__tests__/chat-stream-reducer-golden.test.ts +460 -0
  206. package/src/components/chat/stream/__tests__/chat-stream-reducer.test.ts +894 -0
  207. package/src/components/chat/stream/__tests__/delta-batcher.test.ts +255 -0
  208. package/src/components/chat/stream/__tests__/use-chat-stream-reducer.test.ts +98 -0
  209. package/src/components/chat/stream/chat-dialog-store.ts +536 -0
  210. package/src/components/chat/stream/chat-stream-reducer.ts +1796 -0
  211. package/src/components/chat/stream/delta-batcher.ts +159 -0
  212. package/src/components/chat/stream/index.ts +55 -0
  213. package/src/components/chat/stream/message-mutations.ts +338 -0
  214. package/src/components/chat/stream/use-chat-stream-reducer.ts +126 -0
  215. package/src/components/chat/thinking-display.tsx +1 -1
  216. package/src/components/chat/types/.api.types.md +1 -3
  217. package/src/components/chat/types/.processing.types.md +6 -23
  218. package/src/components/chat/types/api.types.ts +6 -73
  219. package/src/components/chat/types/processing.types.ts +11 -52
  220. package/src/components/chat/utils/.index.md +0 -5
  221. package/src/components/chat/utils/__tests__/__snapshots__/process-historical-messages-golden.test.ts.snap +418 -0
  222. package/src/components/chat/utils/__tests__/__snapshots__/segment-accumulator-golden.test.ts.snap +599 -0
  223. package/src/components/chat/utils/__tests__/process-historical-messages-golden.test.ts +317 -0
  224. package/src/components/chat/utils/__tests__/segment-accumulator-golden.test.ts +270 -0
  225. package/src/components/chat/utils/extract-incomplete-message-state.ts +63 -5
  226. package/src/components/chat/utils/index.ts +5 -8
  227. package/src/components/chat/utils/process-historical-messages.ts +352 -383
  228. package/src/components/features/notifications/notification-drawer.tsx +4 -2
  229. package/src/components/features/time-tracker/time-tracker-panel.tsx +8 -2
  230. package/src/components/layout/page-container.tsx +5 -1
  231. package/src/components/onboarding-guides/onboarding-guide-detail-view.tsx +22 -4
  232. package/src/components/shared/legal-document/legal-document-page.tsx +1 -1
  233. package/src/components/shared/product-release/release-detail-page.tsx +19 -4
  234. package/src/components/ui/__tests__/__snapshots__/markdown-parity.test.tsx.snap +2420 -0
  235. package/src/components/ui/__tests__/markdown-parity.test.tsx +2528 -0
  236. package/src/components/ui/index.ts +1 -2
  237. package/src/components/ui/markdown/__tests__/mermaid-security.test.ts +115 -0
  238. package/src/components/ui/markdown/__tests__/mermaid-stale-render.test.tsx +95 -0
  239. package/src/components/ui/markdown/__tests__/sanitize-invariant.test.ts +309 -0
  240. package/src/components/ui/markdown/__tests__/streaming.test.tsx +388 -0
  241. package/src/components/ui/markdown/base-components.tsx +341 -0
  242. package/src/components/ui/markdown/engine.tsx +315 -0
  243. package/src/components/ui/markdown/heading-ids.ts +239 -0
  244. package/src/components/ui/markdown/index.ts +49 -0
  245. package/src/components/ui/markdown/mermaid-diagram.tsx +291 -0
  246. package/src/components/ui/markdown/rich/embed-overrides.tsx +199 -0
  247. package/src/components/ui/markdown/rich/rich-markdown-renderer.tsx +184 -0
  248. package/src/components/ui/markdown/rich/shortcodes.ts +170 -0
  249. package/src/components/ui/markdown/sanitize.ts +3499 -0
  250. package/src/components/ui/markdown/simple-markdown-renderer.tsx +28 -0
  251. package/src/components/ui/markdown/streaming.ts +362 -0
  252. package/src/components/ui/markdown/text-size.ts +106 -0
  253. package/src/components/ui/modal-v2.tsx +6 -0
  254. package/src/components/ui/modal.tsx +3 -0
  255. package/src/components/ui/release-changelog-section.tsx +1 -1
  256. package/src/components/ui/ticket-info-section.tsx +1 -1
  257. package/src/utils/index.ts +1 -0
  258. package/src/utils/markdown-fences.ts +127 -0
  259. package/src/utils/markdown-heading-id.ts +348 -0
  260. package/src/utils/markdown-section-extractor.ts +41 -56
  261. package/dist/chunk-5BKBG653.js.map +0 -1
  262. package/dist/chunk-5XFJG3TC.cjs.map +0 -1
  263. package/dist/chunk-FM5DTJPA.cjs.map +0 -1
  264. package/dist/chunk-NSL5MNS4.js.map +0 -1
  265. package/dist/chunk-O7F7RZFN.js.map +0 -1
  266. package/dist/chunk-YHB4MNUX.cjs.map +0 -1
  267. package/dist/components/chat/hooks/use-realtime-chunk-processor.d.ts +0 -6
  268. package/dist/components/chat/hooks/use-realtime-chunk-processor.d.ts.map +0 -1
  269. package/dist/components/chat/utils/chunk-parser.d.ts +0 -25
  270. package/dist/components/chat/utils/chunk-parser.d.ts.map +0 -1
  271. package/dist/components/ui/rich-markdown-renderer.d.ts +0 -34
  272. package/dist/components/ui/rich-markdown-renderer.d.ts.map +0 -1
  273. package/dist/components/ui/simple-markdown-renderer.d.ts +0 -73
  274. package/dist/components/ui/simple-markdown-renderer.d.ts.map +0 -1
  275. package/src/components/chat/hooks/.use-realtime-chunk-processor.md +0 -50
  276. package/src/components/chat/hooks/use-realtime-chunk-processor.ts +0 -479
  277. package/src/components/chat/utils/.chunk-parser.md +0 -51
  278. package/src/components/chat/utils/chunk-parser.ts +0 -255
  279. package/src/components/ui/.simple-markdown-renderer.md +0 -40
  280. package/src/components/ui/rich-markdown-renderer.tsx +0 -1223
  281. package/src/components/ui/simple-markdown-renderer.tsx +0 -965
  282. /package/dist/{chunk-I7M6KCCS.js.map → chunk-4R6H2U77.js.map} +0 -0
  283. /package/dist/{chunk-RSW42GTZ.js.map → chunk-APF5QBAU.js.map} +0 -0
  284. /package/dist/{chunk-GJ7BN4MI.js.map → chunk-CGNDAJ7V.js.map} +0 -0
  285. /package/dist/{chunk-R5IQJXA3.js.map → chunk-F2NMWV44.js.map} +0 -0
  286. /package/dist/{chunk-2ZW2ZPDW.js.map → chunk-LAOO7XHO.js.map} +0 -0
  287. /package/dist/{chunk-AJGZ3YSR.js.map → chunk-OR5AMXYN.js.map} +0 -0
  288. /package/dist/{chunk-WXDEMTLD.js.map → chunk-QO2XD3FR.js.map} +0 -0
  289. /package/dist/{chunk-4423DHRX.js.map → chunk-UI7CIUAR.js.map} +0 -0
  290. /package/dist/{chunk-KXIIUE75.js.map → chunk-XF5ROTMQ.js.map} +0 -0
@@ -0,0 +1,599 @@
1
+ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2
+
3
+ exports[`MessageSegmentAccumulator — golden sequences > CHARACTERIZATION: a LATE standalone EXECUTING after its EXECUTED pushes a NEW executing segment (no in-place downgrade, but a duplicate card appears) 1`] = `
4
+ [
5
+ {
6
+ "data": {
7
+ "integratedToolType": "TACTICAL_RMM",
8
+ "parameters": {
9
+ "script": "cleanup.sh",
10
+ },
11
+ "result": "Freed 2.3 GB",
12
+ "success": true,
13
+ "toolExecutionRequestId": "exec-1",
14
+ "toolFunction": "run_script",
15
+ "toolTitle": "Run cleanup script",
16
+ "type": "EXECUTED_TOOL",
17
+ },
18
+ "type": "tool_execution",
19
+ },
20
+ {
21
+ "data": {
22
+ "integratedToolType": "TACTICAL_RMM",
23
+ "parameters": {
24
+ "script": "cleanup.sh",
25
+ },
26
+ "toolExecutionRequestId": "exec-1",
27
+ "toolFunction": "run_script",
28
+ "toolTitle": "Run cleanup script",
29
+ "type": "EXECUTING_TOOL",
30
+ },
31
+ "type": "tool_execution",
32
+ },
33
+ ]
34
+ `;
35
+
36
+ exports[`MessageSegmentAccumulator — golden sequences > EXECUTED with no prior EXECUTING lands as a standalone completed segment 1`] = `
37
+ [
38
+ {
39
+ "data": {
40
+ "integratedToolType": "TACTICAL_RMM",
41
+ "parameters": undefined,
42
+ "result": "Freed 2.3 GB",
43
+ "success": true,
44
+ "toolExecutionRequestId": "exec-orphan",
45
+ "toolFunction": "run_script",
46
+ "toolTitle": undefined,
47
+ "type": "EXECUTED_TOOL",
48
+ },
49
+ "type": "tool_execution",
50
+ },
51
+ ]
52
+ `;
53
+
54
+ exports[`MessageSegmentAccumulator — golden sequences > addApprovalBatch upserts by approvalRequestId (replay path produces ONE batch segment) 1`] = `
55
+ [
56
+ {
57
+ "data": {
58
+ "approvalRequestId": "batch-1",
59
+ "approvalType": "CLIENT",
60
+ "executions": {
61
+ "exec-a": {
62
+ "result": "ok",
63
+ "status": "done",
64
+ "success": true,
65
+ },
66
+ },
67
+ "toolCalls": [
68
+ {
69
+ "approvalType": "CLIENT",
70
+ "requiresApproval": true,
71
+ "toolCallArguments": {
72
+ "subject": "Printer down",
73
+ },
74
+ "toolExecutionRequestId": "exec-a",
75
+ "toolExplanation": "Opens a support ticket",
76
+ "toolName": "create_ticket",
77
+ "toolTitle": "Create ticket",
78
+ },
79
+ {
80
+ "approvalType": null,
81
+ "requiresApproval": false,
82
+ "toolCallArguments": null,
83
+ "toolExecutionRequestId": "exec-b",
84
+ "toolName": "read_kb",
85
+ },
86
+ ],
87
+ },
88
+ "onApprove": undefined,
89
+ "onReject": undefined,
90
+ "resolvedByName": "Jane Admin",
91
+ "status": "approved",
92
+ "type": "approval_batch",
93
+ },
94
+ ]
95
+ `;
96
+
97
+ exports[`MessageSegmentAccumulator — golden sequences > batch approval with per-tool executions merged into the batch (no standalone segments) 1`] = `
98
+ [
99
+ {
100
+ "data": {
101
+ "approvalRequestId": "batch-1",
102
+ "approvalType": "CLIENT",
103
+ "executions": {
104
+ "exec-a": {
105
+ "result": "Ticket #77 created",
106
+ "status": "done",
107
+ "success": true,
108
+ },
109
+ "exec-b": {
110
+ "result": undefined,
111
+ "status": "executing",
112
+ "success": undefined,
113
+ },
114
+ },
115
+ "toolCalls": [
116
+ {
117
+ "approvalType": "CLIENT",
118
+ "requiresApproval": true,
119
+ "toolCallArguments": {
120
+ "subject": "Printer down",
121
+ },
122
+ "toolExecutionRequestId": "exec-a",
123
+ "toolExplanation": "Opens a support ticket",
124
+ "toolName": "create_ticket",
125
+ "toolTitle": "Create ticket",
126
+ },
127
+ {
128
+ "approvalType": null,
129
+ "requiresApproval": false,
130
+ "toolCallArguments": null,
131
+ "toolExecutionRequestId": "exec-b",
132
+ "toolName": "read_kb",
133
+ },
134
+ ],
135
+ },
136
+ "onApprove": undefined,
137
+ "onReject": undefined,
138
+ "resolvedByName": "Jane Admin",
139
+ "status": "approved",
140
+ "type": "approval_batch",
141
+ },
142
+ ]
143
+ `;
144
+
145
+ exports[`MessageSegmentAccumulator — golden sequences > batch no-downgrade rule: a redelivered EXECUTING after EXECUTED keeps the done slot 1`] = `
146
+ [
147
+ {
148
+ "data": {
149
+ "approvalRequestId": "batch-1",
150
+ "approvalType": "CLIENT",
151
+ "executions": {
152
+ "exec-a": {
153
+ "result": "done!",
154
+ "status": "done",
155
+ "success": true,
156
+ },
157
+ },
158
+ "toolCalls": [
159
+ {
160
+ "approvalType": "CLIENT",
161
+ "requiresApproval": true,
162
+ "toolCallArguments": {
163
+ "subject": "Printer down",
164
+ },
165
+ "toolExecutionRequestId": "exec-a",
166
+ "toolExplanation": "Opens a support ticket",
167
+ "toolName": "create_ticket",
168
+ "toolTitle": "Create ticket",
169
+ },
170
+ {
171
+ "approvalType": null,
172
+ "requiresApproval": false,
173
+ "toolCallArguments": null,
174
+ "toolExecutionRequestId": "exec-b",
175
+ "toolName": "read_kb",
176
+ },
177
+ ],
178
+ },
179
+ "onApprove": undefined,
180
+ "onReject": undefined,
181
+ "resolvedByName": undefined,
182
+ "status": "approved",
183
+ "type": "approval_batch",
184
+ },
185
+ ]
186
+ `;
187
+
188
+ exports[`MessageSegmentAccumulator — golden sequences > coalesces consecutive text deltas into one text segment 1`] = `
189
+ [
190
+ {
191
+ "text": "Hello, world",
192
+ "type": "text",
193
+ },
194
+ ]
195
+ `;
196
+
197
+ exports[`MessageSegmentAccumulator — golden sequences > coalesces thinking deltas, and text after thinking starts a NEW segment 1`] = `
198
+ [
199
+ {
200
+ "text": "Let me think… ok.",
201
+ "type": "thinking",
202
+ },
203
+ {
204
+ "text": "Answer: 42",
205
+ "type": "text",
206
+ },
207
+ {
208
+ "text": "post-answer thought",
209
+ "type": "thinking",
210
+ },
211
+ ]
212
+ `;
213
+
214
+ exports[`MessageSegmentAccumulator — golden sequences > completeContextCompaction with no started segment pushes a completed one 1`] = `
215
+ [
216
+ {
217
+ "status": "completed",
218
+ "summary": undefined,
219
+ "type": "context_compaction",
220
+ },
221
+ ]
222
+ `;
223
+
224
+ exports[`MessageSegmentAccumulator — golden sequences > context compaction start → complete replaces the started segment in place 1`] = `
225
+ [
226
+ {
227
+ "text": "Before compaction",
228
+ "type": "text",
229
+ },
230
+ {
231
+ "status": "completed",
232
+ "summary": "Summarized 34 messages",
233
+ "type": "context_compaction",
234
+ },
235
+ {
236
+ "text": "After compaction",
237
+ "type": "text",
238
+ },
239
+ ]
240
+ `;
241
+
242
+ exports[`MessageSegmentAccumulator — golden sequences > error segments append verbatim 1`] = `
243
+ [
244
+ {
245
+ "text": "partial answer",
246
+ "type": "text",
247
+ },
248
+ {
249
+ "details": "boom",
250
+ "title": "Agent crashed",
251
+ "type": "error",
252
+ },
253
+ ]
254
+ `;
255
+
256
+ exports[`MessageSegmentAccumulator — golden sequences > flushPendingApprovals emits pending cards for every tracked-but-unresolved approval 1`] = `
257
+ [
258
+ {
259
+ "data": {
260
+ "approvalType": "CLIENT",
261
+ "command": "cmd-1",
262
+ "explanation": undefined,
263
+ "requestId": "req-1",
264
+ },
265
+ "onApprove": undefined,
266
+ "onReject": undefined,
267
+ "status": "pending",
268
+ "type": "approval_request",
269
+ },
270
+ {
271
+ "data": {
272
+ "approvalType": "ADMIN",
273
+ "command": "cmd-2",
274
+ "explanation": "why",
275
+ "requestId": "req-2",
276
+ },
277
+ "onApprove": undefined,
278
+ "onReject": undefined,
279
+ "status": "pending",
280
+ "type": "approval_request",
281
+ },
282
+ ]
283
+ `;
284
+
285
+ exports[`MessageSegmentAccumulator — golden sequences > implicit approval does NOT touch approval_batch segments (handled by applyExecutionToBatch only) 1`] = `
286
+ [
287
+ {
288
+ "data": {
289
+ "approvalRequestId": "batch-1",
290
+ "approvalType": "CLIENT",
291
+ "toolCalls": [
292
+ {
293
+ "approvalType": "CLIENT",
294
+ "requiresApproval": true,
295
+ "toolCallArguments": {
296
+ "subject": "Printer down",
297
+ },
298
+ "toolExecutionRequestId": "exec-a",
299
+ "toolExplanation": "Opens a support ticket",
300
+ "toolName": "create_ticket",
301
+ "toolTitle": "Create ticket",
302
+ },
303
+ {
304
+ "approvalType": null,
305
+ "requiresApproval": false,
306
+ "toolCallArguments": null,
307
+ "toolExecutionRequestId": "exec-b",
308
+ "toolName": "read_kb",
309
+ },
310
+ ],
311
+ },
312
+ "onApprove": undefined,
313
+ "onReject": undefined,
314
+ "resolvedByName": undefined,
315
+ "status": "pending",
316
+ "type": "approval_batch",
317
+ },
318
+ {
319
+ "data": {
320
+ "integratedToolType": "TACTICAL_RMM",
321
+ "parameters": {
322
+ "script": "cleanup.sh",
323
+ },
324
+ "toolExecutionRequestId": "exec-unrelated",
325
+ "toolFunction": "run_script",
326
+ "toolTitle": "Run cleanup script",
327
+ "type": "EXECUTING_TOOL",
328
+ },
329
+ "type": "tool_execution",
330
+ },
331
+ ]
332
+ `;
333
+
334
+ exports[`MessageSegmentAccumulator — golden sequences > implicit approval flips ONLY the latest pending gate, earlier pending gates stay pending 1`] = `
335
+ [
336
+ {
337
+ "data": {
338
+ "approvalType": "CLIENT",
339
+ "command": "first",
340
+ "explanation": undefined,
341
+ "requestId": "req-1",
342
+ },
343
+ "onApprove": undefined,
344
+ "onReject": undefined,
345
+ "status": "pending",
346
+ "type": "approval_request",
347
+ },
348
+ {
349
+ "data": {
350
+ "approvalType": "CLIENT",
351
+ "command": "second",
352
+ "explanation": undefined,
353
+ "requestId": "req-2",
354
+ },
355
+ "onApprove": undefined,
356
+ "onReject": undefined,
357
+ "status": "approved",
358
+ "type": "approval_request",
359
+ },
360
+ {
361
+ "data": {
362
+ "integratedToolType": "TACTICAL_RMM",
363
+ "parameters": {
364
+ "script": "cleanup.sh",
365
+ },
366
+ "toolExecutionRequestId": "exec-1",
367
+ "toolFunction": "run_script",
368
+ "toolTitle": "Run cleanup script",
369
+ "type": "EXECUTING_TOOL",
370
+ },
371
+ "type": "tool_execution",
372
+ },
373
+ ]
374
+ `;
375
+
376
+ exports[`MessageSegmentAccumulator — golden sequences > implicit resolvePendingApprovalForExecution: a tool execution flips the LATEST pending single approval (NATS-observer behavior) 1`] = `
377
+ [
378
+ {
379
+ "data": {
380
+ "approvalType": "CLIENT",
381
+ "command": "echo old",
382
+ "explanation": undefined,
383
+ "requestId": "req-old",
384
+ },
385
+ "onApprove": undefined,
386
+ "onReject": undefined,
387
+ "status": "rejected",
388
+ "type": "approval_request",
389
+ },
390
+ {
391
+ "data": {
392
+ "approvalType": "CLIENT",
393
+ "command": "systemctl restart nats",
394
+ "explanation": undefined,
395
+ "requestId": "req-1",
396
+ },
397
+ "onApprove": undefined,
398
+ "onReject": undefined,
399
+ "status": "approved",
400
+ "type": "approval_request",
401
+ },
402
+ {
403
+ "data": {
404
+ "integratedToolType": "TACTICAL_RMM",
405
+ "parameters": {
406
+ "script": "cleanup.sh",
407
+ },
408
+ "toolExecutionRequestId": "exec-9",
409
+ "toolFunction": "run_script",
410
+ "toolTitle": "Run cleanup script",
411
+ "type": "EXECUTING_TOOL",
412
+ },
413
+ "type": "tool_execution",
414
+ },
415
+ ]
416
+ `;
417
+
418
+ exports[`MessageSegmentAccumulator — golden sequences > initializeWithState continues an incomplete message across reconnect 1`] = `
419
+ [
420
+ {
421
+ "text": "partial ",
422
+ "type": "text",
423
+ },
424
+ {
425
+ "data": {
426
+ "integratedToolType": "TACTICAL_RMM",
427
+ "parameters": {
428
+ "script": "cleanup.sh",
429
+ },
430
+ "result": "Freed 2.3 GB",
431
+ "success": true,
432
+ "toolExecutionRequestId": "exec-1",
433
+ "toolFunction": "run_script",
434
+ "toolTitle": "Run cleanup script",
435
+ "type": "EXECUTED_TOOL",
436
+ },
437
+ "type": "tool_execution",
438
+ },
439
+ {
440
+ "text": "and the rest.",
441
+ "type": "text",
442
+ },
443
+ ]
444
+ `;
445
+
446
+ exports[`MessageSegmentAccumulator — golden sequences > merges EXECUTING_TOOL → EXECUTED_TOOL in place by toolExecutionRequestId (title restored) 1`] = `
447
+ [
448
+ {
449
+ "text": "Running a cleanup now.",
450
+ "type": "text",
451
+ },
452
+ {
453
+ "data": {
454
+ "integratedToolType": "TACTICAL_RMM",
455
+ "parameters": {
456
+ "script": "cleanup.sh",
457
+ },
458
+ "result": "Freed 2.3 GB",
459
+ "success": true,
460
+ "toolExecutionRequestId": "exec-1",
461
+ "toolFunction": "run_script",
462
+ "toolTitle": "Run cleanup script",
463
+ "type": "EXECUTED_TOOL",
464
+ },
465
+ "type": "tool_execution",
466
+ },
467
+ ]
468
+ `;
469
+
470
+ exports[`MessageSegmentAccumulator — golden sequences > pairs by (integratedToolType, toolFunction) when no exec id is present (older backends) 1`] = `
471
+ [
472
+ {
473
+ "data": {
474
+ "integratedToolType": "TACTICAL_RMM",
475
+ "parameters": {
476
+ "script": "cleanup.sh",
477
+ },
478
+ "result": "Freed 2.3 GB",
479
+ "success": true,
480
+ "toolFunction": "run_script",
481
+ "toolTitle": "Run cleanup script",
482
+ "type": "EXECUTED_TOOL",
483
+ },
484
+ "type": "tool_execution",
485
+ },
486
+ ]
487
+ `;
488
+
489
+ exports[`MessageSegmentAccumulator — golden sequences > replaySegments reproduces a mixed recorded segment array (idempotent replay) 1`] = `
490
+ [
491
+ {
492
+ "text": "hmm",
493
+ "type": "thinking",
494
+ },
495
+ {
496
+ "text": "Sure — ",
497
+ "type": "text",
498
+ },
499
+ {
500
+ "data": {
501
+ "integratedToolType": "TACTICAL_RMM",
502
+ "parameters": {
503
+ "script": "cleanup.sh",
504
+ },
505
+ "result": "Freed 2.3 GB",
506
+ "success": true,
507
+ "toolExecutionRequestId": "exec-1",
508
+ "toolFunction": "run_script",
509
+ "toolTitle": "Run cleanup script",
510
+ "type": "EXECUTED_TOOL",
511
+ },
512
+ "type": "tool_execution",
513
+ },
514
+ {
515
+ "data": {
516
+ "approvalRequestId": "batch-1",
517
+ "approvalType": "CLIENT",
518
+ "executions": {
519
+ "exec-a": {
520
+ "result": "ok",
521
+ "status": "done",
522
+ "success": true,
523
+ },
524
+ },
525
+ "toolCalls": [
526
+ {
527
+ "approvalType": "CLIENT",
528
+ "requiresApproval": true,
529
+ "toolCallArguments": {
530
+ "subject": "Printer down",
531
+ },
532
+ "toolExecutionRequestId": "exec-a",
533
+ "toolExplanation": "Opens a support ticket",
534
+ "toolName": "create_ticket",
535
+ "toolTitle": "Create ticket",
536
+ },
537
+ {
538
+ "approvalType": null,
539
+ "requiresApproval": false,
540
+ "toolCallArguments": null,
541
+ "toolExecutionRequestId": "exec-b",
542
+ "toolName": "read_kb",
543
+ },
544
+ ],
545
+ },
546
+ "onApprove": undefined,
547
+ "onReject": undefined,
548
+ "resolvedByName": undefined,
549
+ "status": "approved",
550
+ "type": "approval_batch",
551
+ },
552
+ {
553
+ "text": "done.",
554
+ "type": "text",
555
+ },
556
+ ]
557
+ `;
558
+
559
+ exports[`MessageSegmentAccumulator — golden sequences > single approval request → updateApprovalStatus flips status and stamps resolvedByName only on batches 1`] = `
560
+ [
561
+ {
562
+ "data": {
563
+ "approvalType": "CLIENT",
564
+ "command": "systemctl restart nats",
565
+ "explanation": "Restart broker",
566
+ "requestId": "req-1",
567
+ },
568
+ "onApprove": [Function],
569
+ "onReject": [Function],
570
+ "status": "approved",
571
+ "type": "approval_request",
572
+ },
573
+ ]
574
+ `;
575
+
576
+ exports[`MessageSegmentAccumulator — golden sequences > tracked (pending) approval + processApprovalResult appends a resolved segment 1`] = `
577
+ {
578
+ "hasPendingAfter": false,
579
+ "pendingData": {
580
+ "approvalType": "CLIENT",
581
+ "command": "rm -rf /tmp/cache",
582
+ "explanation": "Clear caches",
583
+ },
584
+ "segments": [
585
+ {
586
+ "data": {
587
+ "approvalType": "CLIENT",
588
+ "command": "rm -rf /tmp/cache",
589
+ "explanation": "Clear caches",
590
+ "requestId": "req-2",
591
+ },
592
+ "onApprove": undefined,
593
+ "onReject": undefined,
594
+ "status": "rejected",
595
+ "type": "approval_request",
596
+ },
597
+ ],
598
+ }
599
+ `;