@flamingo-stack/openframe-frontend-core 0.0.467 → 0.0.468-snapshot.20260723140929

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 (289) 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-BIDOIPIT.js → chunk-2BJSRTKU.js} +2 -2
  22. package/dist/{chunk-4DFPQKKJ.js → chunk-33FDAZDB.js} +2 -2
  23. package/dist/{chunk-LOWJWKM5.js → chunk-4QDFNDVW.js} +4 -4
  24. package/dist/{chunk-72NEN4G4.cjs → chunk-4UFRQT7Z.cjs} +15 -15
  25. package/dist/{chunk-72NEN4G4.cjs.map → chunk-4UFRQT7Z.cjs.map} +1 -1
  26. package/dist/{chunk-WWC75D3J.cjs → chunk-4W54HUP7.cjs} +6853 -4609
  27. package/dist/chunk-4W54HUP7.cjs.map +1 -0
  28. package/dist/{chunk-6DZ5QOUM.cjs → chunk-5HUTT3FD.cjs} +11 -11
  29. package/dist/{chunk-6DZ5QOUM.cjs.map → chunk-5HUTT3FD.cjs.map} +1 -1
  30. package/dist/{chunk-GXXLJHQX.js → chunk-7I2QMUEZ.js} +2 -2
  31. package/dist/{chunk-QJ7NIL6A.js → chunk-AJSNF5YF.js} +6 -5
  32. package/dist/chunk-AJSNF5YF.js.map +1 -0
  33. package/dist/{chunk-NYOQNYSI.js → chunk-AW3LVWVV.js} +2 -2
  34. package/dist/{chunk-25YYEVSE.js → chunk-DG7TX763.js} +2 -2
  35. package/dist/{chunk-CZFPPNYV.js → chunk-E6O6XATC.js} +11899 -9655
  36. package/dist/chunk-E6O6XATC.js.map +1 -0
  37. package/dist/{chunk-ZYPHZ3R3.cjs → chunk-GLKULDQN.cjs} +9 -9
  38. package/dist/{chunk-ZYPHZ3R3.cjs.map → chunk-GLKULDQN.cjs.map} +1 -1
  39. package/dist/{chunk-TZSPLSDU.js → chunk-GYEZV4GK.js} +2 -2
  40. package/dist/{chunk-G5D7NRH5.cjs → chunk-LRESZO4L.cjs} +26 -26
  41. package/dist/{chunk-G5D7NRH5.cjs.map → chunk-LRESZO4L.cjs.map} +1 -1
  42. package/dist/{chunk-ABU37QSG.js → chunk-MMF6HJB7.js} +4 -4
  43. package/dist/{chunk-O7LQYYUA.cjs → chunk-MTLBBSLP.cjs} +5 -5
  44. package/dist/{chunk-O7LQYYUA.cjs.map → chunk-MTLBBSLP.cjs.map} +1 -1
  45. package/dist/{chunk-UWW4PQQS.cjs → chunk-OVIUQJ2H.cjs} +28 -27
  46. package/dist/chunk-OVIUQJ2H.cjs.map +1 -0
  47. package/dist/{chunk-3L44PPMF.js → chunk-RPAOSHBN.js} +2 -2
  48. package/dist/{chunk-VERK32MO.cjs → chunk-TOFOK7G5.cjs} +37 -37
  49. package/dist/{chunk-VERK32MO.cjs.map → chunk-TOFOK7G5.cjs.map} +1 -1
  50. package/dist/{chunk-QITN43HN.cjs → chunk-U2KPMWO6.cjs} +7 -7
  51. package/dist/{chunk-QITN43HN.cjs.map → chunk-U2KPMWO6.cjs.map} +1 -1
  52. package/dist/{chunk-YGW7T57C.cjs → chunk-V5YWOQBP.cjs} +31 -31
  53. package/dist/{chunk-YGW7T57C.cjs.map → chunk-V5YWOQBP.cjs.map} +1 -1
  54. package/dist/{chunk-ILZ66CS6.js → chunk-VUCYS36H.js} +10 -10
  55. package/dist/chunk-VUCYS36H.js.map +1 -0
  56. package/dist/{chunk-SGDXS7VT.cjs → chunk-WHWDGCQV.cjs} +60 -60
  57. package/dist/chunk-WHWDGCQV.cjs.map +1 -0
  58. package/dist/{chunk-G2H4AKL3.cjs → chunk-YXNWEVER.cjs} +62 -62
  59. package/dist/{chunk-G2H4AKL3.cjs.map → chunk-YXNWEVER.cjs.map} +1 -1
  60. package/dist/components/case-studies/index.cjs +8 -8
  61. package/dist/components/case-studies/index.js +2 -2
  62. package/dist/components/chat/chat-composer.d.ts +8 -1
  63. package/dist/components/chat/chat-composer.d.ts.map +1 -1
  64. package/dist/components/chat/chat-context-memory-bar.d.ts +37 -0
  65. package/dist/components/chat/chat-context-memory-bar.d.ts.map +1 -0
  66. package/dist/components/chat/chat-message-enhanced.d.ts.map +1 -1
  67. package/dist/components/chat/chat-message-list.d.ts.map +1 -1
  68. package/dist/components/chat/embeddable-chat.d.ts +14 -6
  69. package/dist/components/chat/embeddable-chat.d.ts.map +1 -1
  70. package/dist/components/chat/hooks/index.d.ts +0 -1
  71. package/dist/components/chat/hooks/index.d.ts.map +1 -1
  72. package/dist/components/chat/hooks/use-chat.d.ts.map +1 -1
  73. package/dist/components/chat/hooks/use-nats-chat-adapter.d.ts +15 -48
  74. package/dist/components/chat/hooks/use-nats-chat-adapter.d.ts.map +1 -1
  75. package/dist/components/chat/hooks/use-sse-chat-adapter.d.ts +3 -47
  76. package/dist/components/chat/hooks/use-sse-chat-adapter.d.ts.map +1 -1
  77. package/dist/components/chat/index.cjs +12 -2
  78. package/dist/components/chat/index.cjs.map +1 -1
  79. package/dist/components/chat/index.d.ts +2 -0
  80. package/dist/components/chat/index.d.ts.map +1 -1
  81. package/dist/components/chat/index.js +23 -13
  82. package/dist/components/chat/stream/chat-dialog-store.d.ts +184 -0
  83. package/dist/components/chat/stream/chat-dialog-store.d.ts.map +1 -0
  84. package/dist/components/chat/stream/chat-stream-reducer.d.ts +367 -0
  85. package/dist/components/chat/stream/chat-stream-reducer.d.ts.map +1 -0
  86. package/dist/components/chat/stream/delta-batcher.d.ts +51 -0
  87. package/dist/components/chat/stream/delta-batcher.d.ts.map +1 -0
  88. package/dist/components/chat/stream/index.d.ts +17 -0
  89. package/dist/components/chat/stream/index.d.ts.map +1 -0
  90. package/dist/components/chat/stream/message-mutations.d.ts +77 -0
  91. package/dist/components/chat/stream/message-mutations.d.ts.map +1 -0
  92. package/dist/components/chat/stream/use-chat-stream-reducer.d.ts +22 -0
  93. package/dist/components/chat/stream/use-chat-stream-reducer.d.ts.map +1 -0
  94. package/dist/components/chat/types/api.types.d.ts +1 -81
  95. package/dist/components/chat/types/api.types.d.ts.map +1 -1
  96. package/dist/components/chat/types/processing.types.d.ts +2 -90
  97. package/dist/components/chat/types/processing.types.d.ts.map +1 -1
  98. package/dist/components/chat/utils/extract-incomplete-message-state.d.ts +34 -6
  99. package/dist/components/chat/utils/extract-incomplete-message-state.d.ts.map +1 -1
  100. package/dist/components/chat/utils/index.d.ts +2 -3
  101. package/dist/components/chat/utils/index.d.ts.map +1 -1
  102. package/dist/components/chat/utils/process-historical-messages.d.ts +59 -11
  103. package/dist/components/chat/utils/process-historical-messages.d.ts.map +1 -1
  104. package/dist/components/contact/index.cjs +3 -3
  105. package/dist/components/contact/index.js +2 -2
  106. package/dist/components/docs/index.cjs +5 -5
  107. package/dist/components/docs/index.js +4 -4
  108. package/dist/components/embeds/index.cjs +3 -3
  109. package/dist/components/embeds/index.js +2 -2
  110. package/dist/components/faq/index.cjs +3 -3
  111. package/dist/components/faq/index.js +2 -2
  112. package/dist/components/features/index.cjs +2 -2
  113. package/dist/components/features/index.js +1 -1
  114. package/dist/components/help-center-pages/index.cjs +20 -20
  115. package/dist/components/help-center-pages/index.js +11 -11
  116. package/dist/components/index.cjs +174 -130
  117. package/dist/components/index.cjs.map +1 -1
  118. package/dist/components/index.js +65 -21
  119. package/dist/components/index.js.map +1 -1
  120. package/dist/components/navigation/index.cjs +2 -2
  121. package/dist/components/navigation/index.js +1 -1
  122. package/dist/components/onboarding-guides/index.cjs +5 -5
  123. package/dist/components/onboarding-guides/index.js +4 -4
  124. package/dist/components/onboarding-guides/onboarding-guide-detail-view.d.ts.map +1 -1
  125. package/dist/components/related-content/index.cjs +3 -3
  126. package/dist/components/related-content/index.js +2 -2
  127. package/dist/components/shared/product-release/release-detail-page.d.ts.map +1 -1
  128. package/dist/components/tickets/index.cjs +5 -5
  129. package/dist/components/tickets/index.js +4 -4
  130. package/dist/components/ui/index.cjs +46 -2
  131. package/dist/components/ui/index.cjs.map +1 -1
  132. package/dist/components/ui/index.d.ts +1 -2
  133. package/dist/components/ui/index.d.ts.map +1 -1
  134. package/dist/components/ui/index.js +57 -13
  135. package/dist/components/ui/markdown/base-components.d.ts +56 -0
  136. package/dist/components/ui/markdown/base-components.d.ts.map +1 -0
  137. package/dist/components/ui/markdown/engine.d.ts +99 -0
  138. package/dist/components/ui/markdown/engine.d.ts.map +1 -0
  139. package/dist/components/ui/markdown/heading-ids.d.ts +65 -0
  140. package/dist/components/ui/markdown/heading-ids.d.ts.map +1 -0
  141. package/dist/components/ui/markdown/index.d.ts +18 -0
  142. package/dist/components/ui/markdown/index.d.ts.map +1 -0
  143. package/dist/components/ui/markdown/mermaid-diagram.d.ts +79 -0
  144. package/dist/components/ui/markdown/mermaid-diagram.d.ts.map +1 -0
  145. package/dist/components/ui/markdown/rich/embed-overrides.d.ts +14 -0
  146. package/dist/components/ui/markdown/rich/embed-overrides.d.ts.map +1 -0
  147. package/dist/components/ui/markdown/rich/rich-markdown-renderer.d.ts +40 -0
  148. package/dist/components/ui/markdown/rich/rich-markdown-renderer.d.ts.map +1 -0
  149. package/dist/components/ui/markdown/rich/shortcodes.d.ts +8 -0
  150. package/dist/components/ui/markdown/rich/shortcodes.d.ts.map +1 -0
  151. package/dist/components/ui/markdown/sanitize.d.ts +153 -0
  152. package/dist/components/ui/markdown/sanitize.d.ts.map +1 -0
  153. package/dist/components/ui/markdown/simple-markdown-renderer.d.ts +23 -0
  154. package/dist/components/ui/markdown/simple-markdown-renderer.d.ts.map +1 -0
  155. package/dist/components/ui/markdown/streaming.d.ts +78 -0
  156. package/dist/components/ui/markdown/streaming.d.ts.map +1 -0
  157. package/dist/components/ui/markdown/text-size.d.ts +34 -0
  158. package/dist/components/ui/markdown/text-size.d.ts.map +1 -0
  159. package/dist/index.cjs +62 -2
  160. package/dist/index.cjs.map +1 -1
  161. package/dist/index.js +73 -13
  162. package/dist/utils/index.cjs +169 -40
  163. package/dist/utils/index.cjs.map +1 -1
  164. package/dist/utils/index.d.ts +1 -0
  165. package/dist/utils/index.d.ts.map +1 -1
  166. package/dist/utils/index.js +162 -41
  167. package/dist/utils/index.js.map +1 -1
  168. package/dist/utils/markdown-fences.d.ts +42 -0
  169. package/dist/utils/markdown-fences.d.ts.map +1 -0
  170. package/dist/utils/markdown-heading-id.d.ts +85 -0
  171. package/dist/utils/markdown-heading-id.d.ts.map +1 -0
  172. package/dist/utils/markdown-section-extractor.d.ts.map +1 -1
  173. package/package.json +7 -1
  174. package/src/chat-protocol/__tests__/__snapshots__/nats-decoder-golden.test.ts.snap +307 -0
  175. package/src/chat-protocol/__tests__/chat-protocol.test.ts +515 -0
  176. package/src/chat-protocol/__tests__/env-flag.test.ts +52 -0
  177. package/src/chat-protocol/__tests__/ip-normalize.test.ts +136 -0
  178. package/src/chat-protocol/__tests__/nats-decoder-golden.test.ts +228 -0
  179. package/src/chat-protocol/decode.ts +277 -0
  180. package/src/chat-protocol/encode.ts +71 -0
  181. package/src/chat-protocol/env-flag.ts +39 -0
  182. package/src/chat-protocol/events.ts +228 -0
  183. package/src/chat-protocol/frames.ts +238 -0
  184. package/src/chat-protocol/index.ts +21 -0
  185. package/src/chat-protocol/ip-normalize.ts +146 -0
  186. package/src/chat-protocol/nats-decoder.ts +252 -0
  187. package/src/components/chat/__tests__/chat-message-list.test.tsx +293 -5
  188. package/src/components/chat/__tests__/chat-message-streaming-memo.test.tsx +207 -0
  189. package/src/components/chat/__tests__/chat-pending-turn.test.tsx +209 -0
  190. package/src/components/chat/chat-composer.tsx +32 -5
  191. package/src/components/chat/chat-context-memory-bar.tsx +159 -0
  192. package/src/components/chat/chat-message-enhanced.tsx +111 -17
  193. package/src/components/chat/chat-message-list.tsx +358 -109
  194. package/src/components/chat/embeddable-chat.tsx +23 -15
  195. package/src/components/chat/hooks/.index.md +1 -1
  196. package/src/components/chat/hooks/.use-nats-chat-adapter.md +1 -1
  197. package/src/components/chat/hooks/__tests__/__snapshots__/persisted-state-v1-golden.test.ts.snap +297 -0
  198. package/src/components/chat/hooks/__tests__/__snapshots__/sse-stream-golden.test.ts.snap +0 -0
  199. package/src/components/chat/hooks/__tests__/persisted-state-v1-golden.test.ts +272 -0
  200. package/src/components/chat/hooks/__tests__/sse-stream-golden.test.ts +318 -0
  201. package/src/components/chat/hooks/index.ts +0 -1
  202. package/src/components/chat/hooks/use-chat.ts +8 -0
  203. package/src/components/chat/hooks/use-nats-chat-adapter.ts +243 -822
  204. package/src/components/chat/hooks/use-sse-chat-adapter.ts +318 -666
  205. package/src/components/chat/index.ts +6 -0
  206. package/src/components/chat/stream/__tests__/__snapshots__/chat-stream-reducer-golden.test.ts.snap +937 -0
  207. package/src/components/chat/stream/__tests__/chat-dialog-store.test.ts +756 -0
  208. package/src/components/chat/stream/__tests__/chat-stream-reducer-golden.test.ts +460 -0
  209. package/src/components/chat/stream/__tests__/chat-stream-reducer.test.ts +894 -0
  210. package/src/components/chat/stream/__tests__/delta-batcher.test.ts +255 -0
  211. package/src/components/chat/stream/__tests__/use-chat-stream-reducer.test.ts +98 -0
  212. package/src/components/chat/stream/chat-dialog-store.ts +536 -0
  213. package/src/components/chat/stream/chat-stream-reducer.ts +1796 -0
  214. package/src/components/chat/stream/delta-batcher.ts +159 -0
  215. package/src/components/chat/stream/index.ts +55 -0
  216. package/src/components/chat/stream/message-mutations.ts +338 -0
  217. package/src/components/chat/stream/use-chat-stream-reducer.ts +126 -0
  218. package/src/components/chat/thinking-display.tsx +1 -1
  219. package/src/components/chat/types/.api.types.md +1 -3
  220. package/src/components/chat/types/.processing.types.md +6 -23
  221. package/src/components/chat/types/api.types.ts +6 -73
  222. package/src/components/chat/types/processing.types.ts +11 -52
  223. package/src/components/chat/utils/.index.md +0 -5
  224. package/src/components/chat/utils/__tests__/__snapshots__/process-historical-messages-golden.test.ts.snap +418 -0
  225. package/src/components/chat/utils/__tests__/__snapshots__/segment-accumulator-golden.test.ts.snap +599 -0
  226. package/src/components/chat/utils/__tests__/process-historical-messages-golden.test.ts +317 -0
  227. package/src/components/chat/utils/__tests__/segment-accumulator-golden.test.ts +270 -0
  228. package/src/components/chat/utils/extract-incomplete-message-state.ts +63 -5
  229. package/src/components/chat/utils/index.ts +5 -8
  230. package/src/components/chat/utils/process-historical-messages.ts +352 -383
  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/release-changelog-section.tsx +1 -1
  254. package/src/components/ui/tab-selector.tsx +8 -8
  255. package/src/components/ui/ticket-info-section.tsx +1 -1
  256. package/src/utils/index.ts +1 -0
  257. package/src/utils/markdown-fences.ts +127 -0
  258. package/src/utils/markdown-heading-id.ts +348 -0
  259. package/src/utils/markdown-section-extractor.ts +41 -56
  260. package/dist/chunk-CZFPPNYV.js.map +0 -1
  261. package/dist/chunk-ILZ66CS6.js.map +0 -1
  262. package/dist/chunk-QJ7NIL6A.js.map +0 -1
  263. package/dist/chunk-SGDXS7VT.cjs.map +0 -1
  264. package/dist/chunk-UWW4PQQS.cjs.map +0 -1
  265. package/dist/chunk-WWC75D3J.cjs.map +0 -1
  266. package/dist/components/chat/hooks/use-realtime-chunk-processor.d.ts +0 -6
  267. package/dist/components/chat/hooks/use-realtime-chunk-processor.d.ts.map +0 -1
  268. package/dist/components/chat/utils/chunk-parser.d.ts +0 -25
  269. package/dist/components/chat/utils/chunk-parser.d.ts.map +0 -1
  270. package/dist/components/ui/rich-markdown-renderer.d.ts +0 -34
  271. package/dist/components/ui/rich-markdown-renderer.d.ts.map +0 -1
  272. package/dist/components/ui/simple-markdown-renderer.d.ts +0 -73
  273. package/dist/components/ui/simple-markdown-renderer.d.ts.map +0 -1
  274. package/src/components/chat/hooks/.use-realtime-chunk-processor.md +0 -50
  275. package/src/components/chat/hooks/use-realtime-chunk-processor.ts +0 -479
  276. package/src/components/chat/utils/.chunk-parser.md +0 -51
  277. package/src/components/chat/utils/chunk-parser.ts +0 -255
  278. package/src/components/ui/.simple-markdown-renderer.md +0 -40
  279. package/src/components/ui/rich-markdown-renderer.tsx +0 -1223
  280. package/src/components/ui/simple-markdown-renderer.tsx +0 -965
  281. /package/dist/{chunk-BIDOIPIT.js.map → chunk-2BJSRTKU.js.map} +0 -0
  282. /package/dist/{chunk-4DFPQKKJ.js.map → chunk-33FDAZDB.js.map} +0 -0
  283. /package/dist/{chunk-LOWJWKM5.js.map → chunk-4QDFNDVW.js.map} +0 -0
  284. /package/dist/{chunk-GXXLJHQX.js.map → chunk-7I2QMUEZ.js.map} +0 -0
  285. /package/dist/{chunk-NYOQNYSI.js.map → chunk-AW3LVWVV.js.map} +0 -0
  286. /package/dist/{chunk-25YYEVSE.js.map → chunk-DG7TX763.js.map} +0 -0
  287. /package/dist/{chunk-TZSPLSDU.js.map → chunk-GYEZV4GK.js.map} +0 -0
  288. /package/dist/{chunk-ABU37QSG.js.map → chunk-MMF6HJB7.js.map} +0 -0
  289. /package/dist/{chunk-3L44PPMF.js.map → chunk-RPAOSHBN.js.map} +0 -0
@@ -0,0 +1,937 @@
1
+ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2
+
3
+ exports[`chat stream reducer — legacy chunk-processor golden event logs > CHARACTERIZATION duplicate/out-of-order: redelivered EXECUTING after EXECUTED in-stream appends a NEW executing segment (no dedup) 1`] = `
4
+ [
5
+ {
6
+ "event": "onStreamStart",
7
+ },
8
+ {
9
+ "event": "onAgentBusy",
10
+ },
11
+ {
12
+ "event": "onSegmentsUpdate",
13
+ "metadata": undefined,
14
+ "segments": [
15
+ {
16
+ "data": {
17
+ "integratedToolType": "TACTICAL_RMM",
18
+ "parameters": {
19
+ "script": "cleanup.sh",
20
+ },
21
+ "toolExecutionRequestId": "exec-1",
22
+ "toolFunction": "run_script",
23
+ "toolTitle": "Run cleanup script",
24
+ "type": "EXECUTING_TOOL",
25
+ },
26
+ "type": "tool_execution",
27
+ },
28
+ ],
29
+ },
30
+ {
31
+ "event": "onSegmentsUpdate",
32
+ "metadata": undefined,
33
+ "segments": [
34
+ {
35
+ "data": {
36
+ "integratedToolType": "TACTICAL_RMM",
37
+ "parameters": {
38
+ "script": "cleanup.sh",
39
+ },
40
+ "result": "Freed 2.3 GB",
41
+ "success": true,
42
+ "toolExecutionRequestId": "exec-1",
43
+ "toolFunction": "run_script",
44
+ "toolTitle": "Run cleanup script",
45
+ "type": "EXECUTED_TOOL",
46
+ },
47
+ "type": "tool_execution",
48
+ },
49
+ ],
50
+ },
51
+ {
52
+ "event": "onAgentBusy",
53
+ },
54
+ {
55
+ "event": "onSegmentsUpdate",
56
+ "metadata": undefined,
57
+ "segments": [
58
+ {
59
+ "data": {
60
+ "integratedToolType": "TACTICAL_RMM",
61
+ "parameters": {
62
+ "script": "cleanup.sh",
63
+ },
64
+ "result": "Freed 2.3 GB",
65
+ "success": true,
66
+ "toolExecutionRequestId": "exec-1",
67
+ "toolFunction": "run_script",
68
+ "toolTitle": "Run cleanup script",
69
+ "type": "EXECUTED_TOOL",
70
+ },
71
+ "type": "tool_execution",
72
+ },
73
+ {
74
+ "data": {
75
+ "integratedToolType": "TACTICAL_RMM",
76
+ "parameters": {
77
+ "script": "cleanup.sh",
78
+ },
79
+ "toolExecutionRequestId": "exec-1",
80
+ "toolFunction": "run_script",
81
+ "toolTitle": "Run cleanup script",
82
+ "type": "EXECUTING_TOOL",
83
+ },
84
+ "type": "tool_execution",
85
+ },
86
+ ],
87
+ },
88
+ {
89
+ "event": "onStreamEnd",
90
+ },
91
+ ]
92
+ `;
93
+
94
+ exports[`chat stream reducer — legacy chunk-processor golden event logs > approval request (displayed) → approval result: in-message flip + onApprovalResolved 1`] = `
95
+ [
96
+ {
97
+ "event": "onStreamStart",
98
+ },
99
+ {
100
+ "event": "onSegmentsUpdate",
101
+ "metadata": undefined,
102
+ "segments": [
103
+ {
104
+ "data": {
105
+ "approvalType": "CLIENT",
106
+ "command": "systemctl restart nats",
107
+ "explanation": "Restart the broker",
108
+ "requestId": "req-1",
109
+ },
110
+ "onApprove": [Function],
111
+ "onReject": [Function],
112
+ "status": "pending",
113
+ "type": "approval_request",
114
+ },
115
+ ],
116
+ },
117
+ {
118
+ "event": "onStreamEnd",
119
+ },
120
+ {
121
+ "event": "onAgentBusy",
122
+ },
123
+ {
124
+ "approvalType": "CLIENT",
125
+ "event": "onApprovalResolved",
126
+ "requestId": "req-1",
127
+ "resolvedByName": "Jane Admin",
128
+ "status": "approved",
129
+ },
130
+ ]
131
+ `;
132
+
133
+ exports[`chat stream reducer — legacy chunk-processor golden event logs > approval result WITHOUT onApprovalResolved wired: emits cumulative onSegmentsUpdate instead 1`] = `
134
+ [
135
+ {
136
+ "event": "onStreamStart",
137
+ },
138
+ {
139
+ "event": "onSegmentsUpdate",
140
+ "metadata": undefined,
141
+ "segments": [
142
+ {
143
+ "data": {
144
+ "approvalType": "CLIENT",
145
+ "command": "reboot",
146
+ "explanation": undefined,
147
+ "requestId": "req-1",
148
+ },
149
+ "onApprove": [Function],
150
+ "onReject": [Function],
151
+ "status": "pending",
152
+ "type": "approval_request",
153
+ },
154
+ ],
155
+ },
156
+ {
157
+ "event": "onSegmentsUpdate",
158
+ "metadata": undefined,
159
+ "segments": [
160
+ {
161
+ "data": {
162
+ "approvalType": "CLIENT",
163
+ "command": "reboot",
164
+ "explanation": undefined,
165
+ "requestId": "req-1",
166
+ },
167
+ "onApprove": [Function],
168
+ "onReject": [Function],
169
+ "status": "rejected",
170
+ "type": "approval_request",
171
+ },
172
+ ],
173
+ },
174
+ ]
175
+ `;
176
+
177
+ exports[`chat stream reducer — legacy chunk-processor golden event logs > batch approval (batchApprovalsEnabled default ON): one batch segment, executions merge into it 1`] = `
178
+ [
179
+ {
180
+ "event": "onStreamStart",
181
+ },
182
+ {
183
+ "event": "onSegmentsUpdate",
184
+ "metadata": undefined,
185
+ "segments": [
186
+ {
187
+ "data": {
188
+ "approvalRequestId": "batch-1",
189
+ "approvalType": "CLIENT",
190
+ "toolCalls": [
191
+ {
192
+ "approvalType": "CLIENT",
193
+ "requiresApproval": true,
194
+ "toolCallArguments": {
195
+ "subject": "Printer down",
196
+ },
197
+ "toolExecutionRequestId": "exec-a",
198
+ "toolExplanation": undefined,
199
+ "toolName": "create_ticket",
200
+ "toolTitle": "Create ticket",
201
+ "toolType": undefined,
202
+ },
203
+ {
204
+ "approvalType": null,
205
+ "requiresApproval": false,
206
+ "toolCallArguments": null,
207
+ "toolExecutionRequestId": "exec-b",
208
+ "toolExplanation": undefined,
209
+ "toolName": "read_kb",
210
+ "toolTitle": undefined,
211
+ "toolType": undefined,
212
+ },
213
+ ],
214
+ },
215
+ "onApprove": [Function],
216
+ "onReject": [Function],
217
+ "resolvedByName": undefined,
218
+ "status": "pending",
219
+ "type": "approval_batch",
220
+ },
221
+ ],
222
+ },
223
+ {
224
+ "event": "onAgentBusy",
225
+ },
226
+ {
227
+ "approvalType": "CLIENT",
228
+ "event": "onApprovalResolved",
229
+ "requestId": "batch-1",
230
+ "resolvedByName": "Alice Client",
231
+ "status": "approved",
232
+ },
233
+ {
234
+ "event": "onAgentBusy",
235
+ },
236
+ {
237
+ "event": "onSegmentsUpdate",
238
+ "metadata": undefined,
239
+ "segments": [
240
+ {
241
+ "data": {
242
+ "approvalRequestId": "batch-1",
243
+ "approvalType": "CLIENT",
244
+ "executions": {
245
+ "exec-a": {
246
+ "result": undefined,
247
+ "status": "executing",
248
+ "success": undefined,
249
+ },
250
+ },
251
+ "toolCalls": [
252
+ {
253
+ "approvalType": "CLIENT",
254
+ "requiresApproval": true,
255
+ "toolCallArguments": {
256
+ "subject": "Printer down",
257
+ },
258
+ "toolExecutionRequestId": "exec-a",
259
+ "toolExplanation": undefined,
260
+ "toolName": "create_ticket",
261
+ "toolTitle": "Create ticket",
262
+ "toolType": undefined,
263
+ },
264
+ {
265
+ "approvalType": null,
266
+ "requiresApproval": false,
267
+ "toolCallArguments": null,
268
+ "toolExecutionRequestId": "exec-b",
269
+ "toolExplanation": undefined,
270
+ "toolName": "read_kb",
271
+ "toolTitle": undefined,
272
+ "toolType": undefined,
273
+ },
274
+ ],
275
+ },
276
+ "onApprove": [Function],
277
+ "onReject": [Function],
278
+ "resolvedByName": "Alice Client",
279
+ "status": "approved",
280
+ "type": "approval_batch",
281
+ },
282
+ ],
283
+ },
284
+ {
285
+ "event": "onSegmentsUpdate",
286
+ "metadata": undefined,
287
+ "segments": [
288
+ {
289
+ "data": {
290
+ "approvalRequestId": "batch-1",
291
+ "approvalType": "CLIENT",
292
+ "executions": {
293
+ "exec-a": {
294
+ "result": "Ticket #77 created",
295
+ "status": "done",
296
+ "success": true,
297
+ },
298
+ },
299
+ "toolCalls": [
300
+ {
301
+ "approvalType": "CLIENT",
302
+ "requiresApproval": true,
303
+ "toolCallArguments": {
304
+ "subject": "Printer down",
305
+ },
306
+ "toolExecutionRequestId": "exec-a",
307
+ "toolExplanation": undefined,
308
+ "toolName": "create_ticket",
309
+ "toolTitle": "Create ticket",
310
+ "toolType": undefined,
311
+ },
312
+ {
313
+ "approvalType": null,
314
+ "requiresApproval": false,
315
+ "toolCallArguments": null,
316
+ "toolExecutionRequestId": "exec-b",
317
+ "toolExplanation": undefined,
318
+ "toolName": "read_kb",
319
+ "toolTitle": undefined,
320
+ "toolType": undefined,
321
+ },
322
+ ],
323
+ },
324
+ "onApprove": [Function],
325
+ "onReject": [Function],
326
+ "resolvedByName": "Alice Client",
327
+ "status": "approved",
328
+ "type": "approval_batch",
329
+ },
330
+ ],
331
+ },
332
+ {
333
+ "event": "onStreamEnd",
334
+ },
335
+ ]
336
+ `;
337
+
338
+ exports[`chat stream reducer — legacy chunk-processor golden event logs > batch approval with batchApprovalsEnabled:false unfolds into legacy cards (requiresApproval only) 1`] = `
339
+ [
340
+ {
341
+ "event": "onStreamStart",
342
+ },
343
+ {
344
+ "event": "onSegmentsUpdate",
345
+ "metadata": undefined,
346
+ "segments": [
347
+ {
348
+ "data": {
349
+ "approvalType": "CLIENT",
350
+ "command": "Create ticket",
351
+ "explanation": undefined,
352
+ "requestId": "batch-1",
353
+ },
354
+ "onApprove": [Function],
355
+ "onReject": [Function],
356
+ "status": "pending",
357
+ "type": "approval_request",
358
+ },
359
+ ],
360
+ },
361
+ {
362
+ "event": "onStreamEnd",
363
+ },
364
+ ]
365
+ `;
366
+
367
+ exports[`chat stream reducer — legacy chunk-processor golden event logs > cold start (no MESSAGE_START ever): text emits CUMULATIVE segments (no append flag) 1`] = `
368
+ [
369
+ {
370
+ "event": "onSegmentsUpdate",
371
+ "metadata": undefined,
372
+ "segments": [
373
+ {
374
+ "text": "cold ",
375
+ "type": "text",
376
+ },
377
+ ],
378
+ },
379
+ {
380
+ "event": "onSegmentsUpdate",
381
+ "metadata": undefined,
382
+ "segments": [
383
+ {
384
+ "text": "cold start",
385
+ "type": "text",
386
+ },
387
+ ],
388
+ },
389
+ ]
390
+ `;
391
+
392
+ exports[`chat stream reducer — legacy chunk-processor golden event logs > context compaction outside a stream emits append+isCompacting metadata; inside a stream it is cumulative 1`] = `
393
+ {
394
+ "inStream": [
395
+ {
396
+ "event": "onStreamStart",
397
+ },
398
+ {
399
+ "event": "onSegmentsUpdate",
400
+ "metadata": undefined,
401
+ "segments": [
402
+ {
403
+ "status": "started",
404
+ "type": "context_compaction",
405
+ },
406
+ ],
407
+ },
408
+ {
409
+ "event": "onSegmentsUpdate",
410
+ "metadata": undefined,
411
+ "segments": [
412
+ {
413
+ "status": "completed",
414
+ "summary": "Mid-stream summary",
415
+ "type": "context_compaction",
416
+ },
417
+ ],
418
+ },
419
+ {
420
+ "event": "onStreamEnd",
421
+ },
422
+ ],
423
+ "standalone": [
424
+ {
425
+ "event": "onSegmentsUpdate",
426
+ "metadata": {
427
+ "append": true,
428
+ "isCompacting": true,
429
+ },
430
+ "segments": [
431
+ {
432
+ "status": "started",
433
+ "type": "context_compaction",
434
+ },
435
+ ],
436
+ },
437
+ {
438
+ "event": "onSegmentsUpdate",
439
+ "metadata": {
440
+ "append": true,
441
+ "isCompacting": true,
442
+ },
443
+ "segments": [
444
+ {
445
+ "status": "completed",
446
+ "summary": "Summarized 12 messages",
447
+ "type": "context_compaction",
448
+ },
449
+ ],
450
+ },
451
+ ],
452
+ }
453
+ `;
454
+
455
+ exports[`chat stream reducer — legacy chunk-processor golden event logs > direct-mode barrier: after a DIRECT_MESSAGE, AI chunks are dropped with a one-shot teardown 1`] = `
456
+ [
457
+ {
458
+ "event": "onStreamStart",
459
+ },
460
+ {
461
+ "event": "onSegmentsUpdate",
462
+ "metadata": undefined,
463
+ "segments": [
464
+ {
465
+ "text": "ai text before takeover",
466
+ "type": "text",
467
+ },
468
+ ],
469
+ },
470
+ {
471
+ "event": "onDirectMessage",
472
+ "metadata": {
473
+ "displayName": undefined,
474
+ "ownerType": "ADMIN",
475
+ "streamSeq": undefined,
476
+ "userId": undefined,
477
+ },
478
+ "text": "Human takeover",
479
+ },
480
+ {
481
+ "event": "onStreamEnd",
482
+ },
483
+ {
484
+ "event": "onSystemMessage",
485
+ "metadata": {
486
+ "streamSeq": undefined,
487
+ },
488
+ "text": "still visible",
489
+ },
490
+ {
491
+ "event": "onDirectMessage",
492
+ "metadata": {
493
+ "displayName": undefined,
494
+ "ownerType": undefined,
495
+ "streamSeq": undefined,
496
+ "userId": undefined,
497
+ },
498
+ "text": "second human message",
499
+ },
500
+ ]
501
+ `;
502
+
503
+ exports[`chat stream reducer — legacy chunk-processor golden event logs > error chunk: segment append + onError with JSON-extracted message 1`] = `
504
+ [
505
+ {
506
+ "event": "onStreamStart",
507
+ },
508
+ {
509
+ "event": "onSegmentsUpdate",
510
+ "metadata": undefined,
511
+ "segments": [
512
+ {
513
+ "text": "partial",
514
+ "type": "text",
515
+ },
516
+ ],
517
+ },
518
+ {
519
+ "event": "onSegmentsUpdate",
520
+ "metadata": undefined,
521
+ "segments": [
522
+ {
523
+ "text": "partial",
524
+ "type": "text",
525
+ },
526
+ {
527
+ "details": "boom",
528
+ "title": "Agent crashed",
529
+ "type": "error",
530
+ },
531
+ ],
532
+ },
533
+ {
534
+ "details": "boom",
535
+ "error": "Agent crashed",
536
+ "event": "onError",
537
+ },
538
+ {
539
+ "event": "onSegmentsUpdate",
540
+ "metadata": undefined,
541
+ "segments": [
542
+ {
543
+ "text": "partial",
544
+ "type": "text",
545
+ },
546
+ {
547
+ "details": "boom",
548
+ "title": "Agent crashed",
549
+ "type": "error",
550
+ },
551
+ {
552
+ "details": "not-json",
553
+ "title": "Plain details",
554
+ "type": "error",
555
+ },
556
+ ],
557
+ },
558
+ {
559
+ "details": "not-json",
560
+ "error": "Plain details",
561
+ "event": "onError",
562
+ },
563
+ ]
564
+ `;
565
+
566
+ exports[`chat stream reducer — legacy chunk-processor golden event logs > escalated approval (type not displayed) → onEscalatedApproval, then result appends resolved card 1`] = `
567
+ {
568
+ "log": [
569
+ {
570
+ "event": "onStreamStart",
571
+ },
572
+ {
573
+ "data": {
574
+ "approvalType": "ADMIN",
575
+ "command": "drop database prod",
576
+ "explanation": undefined,
577
+ },
578
+ "event": "onEscalatedApproval",
579
+ "requestId": "req-adm",
580
+ },
581
+ {
582
+ "event": "onStreamEnd",
583
+ },
584
+ {
585
+ "event": "onAgentBusy",
586
+ },
587
+ {
588
+ "approved": true,
589
+ "data": {
590
+ "approvalType": "ADMIN",
591
+ "command": "drop database prod",
592
+ "explanation": undefined,
593
+ },
594
+ "event": "onEscalatedApprovalResult",
595
+ "requestId": "req-adm",
596
+ },
597
+ {
598
+ "event": "onSegmentsUpdate",
599
+ "metadata": {
600
+ "append": true,
601
+ },
602
+ "segments": [
603
+ {
604
+ "data": {
605
+ "approvalType": "ADMIN",
606
+ "command": "drop database prod",
607
+ "explanation": undefined,
608
+ "requestId": "req-adm",
609
+ },
610
+ "onApprove": [Function],
611
+ "onReject": [Function],
612
+ "status": "approved",
613
+ "type": "approval_request",
614
+ },
615
+ ],
616
+ },
617
+ {
618
+ "approvalType": "ADMIN",
619
+ "event": "onApprovalResolved",
620
+ "requestId": "req-adm",
621
+ "resolvedByName": undefined,
622
+ "status": "approved",
623
+ },
624
+ ],
625
+ "pendingAfter": [],
626
+ }
627
+ `;
628
+
629
+ exports[`chat stream reducer — legacy chunk-processor golden event logs > initialState resume: continuation chunks after resume take the post-stream append path 1`] = `
630
+ [
631
+ {
632
+ "data": {
633
+ "approvalType": "ADMIN",
634
+ "command": "escalated cmd",
635
+ },
636
+ "event": "onEscalatedApproval",
637
+ "requestId": "req-esc",
638
+ },
639
+ ]
640
+ `;
641
+
642
+ exports[`chat stream reducer — legacy chunk-processor golden event logs > normal turn: start → metadata → text ×3 → token usage → end 1`] = `
643
+ [
644
+ {
645
+ "event": "onStreamStart",
646
+ },
647
+ {
648
+ "event": "onMetadata",
649
+ "metadata": {
650
+ "action": "metadata",
651
+ "contextWindow": 200000,
652
+ "modelDisplayName": "Claude Sonnet",
653
+ "modelName": "claude-sonnet-x",
654
+ "providerName": "anthropic",
655
+ },
656
+ },
657
+ {
658
+ "event": "onSegmentsUpdate",
659
+ "metadata": undefined,
660
+ "segments": [
661
+ {
662
+ "text": "Hello",
663
+ "type": "text",
664
+ },
665
+ ],
666
+ },
667
+ {
668
+ "event": "onSegmentsUpdate",
669
+ "metadata": undefined,
670
+ "segments": [
671
+ {
672
+ "text": "Hello, ",
673
+ "type": "text",
674
+ },
675
+ ],
676
+ },
677
+ {
678
+ "event": "onSegmentsUpdate",
679
+ "metadata": undefined,
680
+ "segments": [
681
+ {
682
+ "text": "Hello, world",
683
+ "type": "text",
684
+ },
685
+ ],
686
+ },
687
+ {
688
+ "data": {
689
+ "contextSize": 180000,
690
+ "inputTokensSize": 100,
691
+ "outputTokensSize": 20,
692
+ "totalTokensSize": 120,
693
+ },
694
+ "event": "onTokenUsage",
695
+ },
696
+ {
697
+ "event": "onStreamEnd",
698
+ },
699
+ ]
700
+ `;
701
+
702
+ exports[`chat stream reducer — legacy chunk-processor golden event logs > post-MESSAGE_END continuation: text/thinking emit DELTA segments with append:true 1`] = `
703
+ [
704
+ {
705
+ "event": "onStreamStart",
706
+ },
707
+ {
708
+ "event": "onSegmentsUpdate",
709
+ "metadata": undefined,
710
+ "segments": [
711
+ {
712
+ "text": "in-stream",
713
+ "type": "text",
714
+ },
715
+ ],
716
+ },
717
+ {
718
+ "event": "onStreamEnd",
719
+ },
720
+ {
721
+ "event": "onSegmentsUpdate",
722
+ "metadata": {
723
+ "append": true,
724
+ },
725
+ "segments": [
726
+ {
727
+ "text": "post-end text",
728
+ "type": "text",
729
+ },
730
+ ],
731
+ },
732
+ {
733
+ "event": "onSegmentsUpdate",
734
+ "metadata": {
735
+ "append": true,
736
+ },
737
+ "segments": [
738
+ {
739
+ "text": "post-end thinking",
740
+ "type": "thinking",
741
+ },
742
+ ],
743
+ },
744
+ ]
745
+ `;
746
+
747
+ exports[`chat stream reducer — legacy chunk-processor golden event logs > reset() clears accumulator + stream flags so the next dialog cold-starts cumulative 1`] = `
748
+ [
749
+ {
750
+ "event": "onSegmentsUpdate",
751
+ "metadata": undefined,
752
+ "segments": [
753
+ {
754
+ "text": "dialog two cold start",
755
+ "type": "text",
756
+ },
757
+ ],
758
+ },
759
+ ]
760
+ `;
761
+
762
+ exports[`chat stream reducer — legacy chunk-processor golden event logs > streamSeq on content chunks is threaded into onSegmentsUpdate metadata 1`] = `
763
+ [
764
+ {
765
+ "event": "onStreamStart",
766
+ },
767
+ {
768
+ "event": "onSegmentsUpdate",
769
+ "metadata": {
770
+ "streamSeq": 7,
771
+ },
772
+ "segments": [
773
+ {
774
+ "text": "seq-stamped",
775
+ "type": "text",
776
+ },
777
+ ],
778
+ },
779
+ {
780
+ "event": "onStreamEnd",
781
+ },
782
+ ]
783
+ `;
784
+
785
+ exports[`chat stream reducer — legacy chunk-processor golden event logs > tool execution IN-stream: accumulator-driven segment updates, onToolExecuted NOT fired 1`] = `
786
+ [
787
+ {
788
+ "event": "onStreamStart",
789
+ },
790
+ {
791
+ "event": "onSegmentsUpdate",
792
+ "metadata": undefined,
793
+ "segments": [
794
+ {
795
+ "text": "Running now. ",
796
+ "type": "text",
797
+ },
798
+ ],
799
+ },
800
+ {
801
+ "event": "onAgentBusy",
802
+ },
803
+ {
804
+ "event": "onSegmentsUpdate",
805
+ "metadata": undefined,
806
+ "segments": [
807
+ {
808
+ "text": "Running now. ",
809
+ "type": "text",
810
+ },
811
+ {
812
+ "data": {
813
+ "integratedToolType": "TACTICAL_RMM",
814
+ "parameters": {
815
+ "script": "cleanup.sh",
816
+ },
817
+ "toolExecutionRequestId": "exec-1",
818
+ "toolFunction": "run_script",
819
+ "toolTitle": "Run cleanup script",
820
+ "type": "EXECUTING_TOOL",
821
+ },
822
+ "type": "tool_execution",
823
+ },
824
+ ],
825
+ },
826
+ {
827
+ "event": "onSegmentsUpdate",
828
+ "metadata": undefined,
829
+ "segments": [
830
+ {
831
+ "text": "Running now. ",
832
+ "type": "text",
833
+ },
834
+ {
835
+ "data": {
836
+ "integratedToolType": "TACTICAL_RMM",
837
+ "parameters": {
838
+ "script": "cleanup.sh",
839
+ },
840
+ "result": "Freed 2.3 GB",
841
+ "success": true,
842
+ "toolExecutionRequestId": "exec-1",
843
+ "toolFunction": "run_script",
844
+ "toolTitle": "Run cleanup script",
845
+ "type": "EXECUTED_TOOL",
846
+ },
847
+ "type": "tool_execution",
848
+ },
849
+ ],
850
+ },
851
+ {
852
+ "event": "onStreamEnd",
853
+ },
854
+ ]
855
+ `;
856
+
857
+ exports[`chat stream reducer — legacy chunk-processor golden event logs > tool execution OUTSIDE a message window: onAgentBusy + cross-message onToolExecuted (accumulator skipped) 1`] = `
858
+ [
859
+ {
860
+ "event": "onAgentBusy",
861
+ },
862
+ {
863
+ "event": "onToolExecuted",
864
+ "segment": {
865
+ "data": {
866
+ "integratedToolType": "TACTICAL_RMM",
867
+ "parameters": {
868
+ "script": "cleanup.sh",
869
+ },
870
+ "toolExecutionRequestId": "exec-1",
871
+ "toolFunction": "run_script",
872
+ "toolTitle": "Run cleanup script",
873
+ "type": "EXECUTING_TOOL",
874
+ },
875
+ "type": "tool_execution",
876
+ },
877
+ },
878
+ {
879
+ "event": "onToolExecuted",
880
+ "segment": {
881
+ "data": {
882
+ "integratedToolType": "TACTICAL_RMM",
883
+ "parameters": undefined,
884
+ "result": "Freed 2.3 GB",
885
+ "success": true,
886
+ "toolExecutionRequestId": "exec-1",
887
+ "toolFunction": "run_script",
888
+ "toolTitle": undefined,
889
+ "type": "EXECUTED_TOOL",
890
+ },
891
+ "type": "tool_execution",
892
+ },
893
+ },
894
+ ]
895
+ `;
896
+
897
+ exports[`chat stream reducer — legacy chunk-processor golden event logs > user echo / system / direct-message / dialog-closed routing 1`] = `
898
+ [
899
+ {
900
+ "event": "onUserMessage",
901
+ "metadata": {
902
+ "contextItems": [
903
+ {
904
+ "id": "dev-1",
905
+ "label": "dev-1",
906
+ "type": "device",
907
+ },
908
+ ],
909
+ "displayName": "Alice",
910
+ "ownerType": "CLIENT",
911
+ "streamSeq": 3,
912
+ "userId": "user-42",
913
+ },
914
+ "text": "open a ticket",
915
+ },
916
+ {
917
+ "event": "onSystemMessage",
918
+ "metadata": {
919
+ "streamSeq": 4,
920
+ },
921
+ "text": "User joined the chat",
922
+ },
923
+ {
924
+ "event": "onDirectMessage",
925
+ "metadata": {
926
+ "displayName": "Jane Admin",
927
+ "ownerType": "ADMIN",
928
+ "streamSeq": 5,
929
+ "userId": "admin-7",
930
+ },
931
+ "text": "Human here now",
932
+ },
933
+ {
934
+ "event": "onDialogClosed",
935
+ },
936
+ ]
937
+ `;