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

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 (280) hide show
  1. package/dist/{chunk-TOFOK7G5.cjs → chunk-2WZAR2MB.cjs} +37 -37
  2. package/dist/{chunk-TOFOK7G5.cjs.map → chunk-2WZAR2MB.cjs.map} +1 -1
  3. package/dist/{chunk-YXNWEVER.cjs → chunk-3I34MUEG.cjs} +62 -62
  4. package/dist/{chunk-YXNWEVER.cjs.map → chunk-3I34MUEG.cjs.map} +1 -1
  5. package/dist/{chunk-4W54HUP7.cjs → chunk-3PLQWO4H.cjs} +4896 -7014
  6. package/dist/chunk-3PLQWO4H.cjs.map +1 -0
  7. package/dist/{chunk-33FDAZDB.js → chunk-3TU6QURP.js} +2 -2
  8. package/dist/{chunk-2BJSRTKU.js → chunk-AEM7ADDG.js} +2 -2
  9. package/dist/{chunk-VUCYS36H.js → chunk-CLW2S55N.js} +10 -10
  10. package/dist/chunk-CLW2S55N.js.map +1 -0
  11. package/dist/{chunk-LRESZO4L.cjs → chunk-ELIY4AO2.cjs} +26 -26
  12. package/dist/{chunk-LRESZO4L.cjs.map → chunk-ELIY4AO2.cjs.map} +1 -1
  13. package/dist/{chunk-MMF6HJB7.js → chunk-EZESVVIM.js} +4 -4
  14. package/dist/{chunk-AW3LVWVV.js → chunk-HTSWLPMU.js} +2 -2
  15. package/dist/{chunk-MTLBBSLP.cjs → chunk-HVLMAT4T.cjs} +5 -5
  16. package/dist/{chunk-MTLBBSLP.cjs.map → chunk-HVLMAT4T.cjs.map} +1 -1
  17. package/dist/{chunk-RPAOSHBN.js → chunk-IUMPVRSH.js} +2 -2
  18. package/dist/{chunk-5HUTT3FD.cjs → chunk-J6CE6HZS.cjs} +11 -11
  19. package/dist/{chunk-5HUTT3FD.cjs.map → chunk-J6CE6HZS.cjs.map} +1 -1
  20. package/dist/{chunk-7I2QMUEZ.js → chunk-JW3UNHGW.js} +2 -2
  21. package/dist/{chunk-4UFRQT7Z.cjs → chunk-L3BWGFHT.cjs} +15 -15
  22. package/dist/{chunk-4UFRQT7Z.cjs.map → chunk-L3BWGFHT.cjs.map} +1 -1
  23. package/dist/{chunk-WHWDGCQV.cjs → chunk-MULVIGIN.cjs} +60 -60
  24. package/dist/chunk-MULVIGIN.cjs.map +1 -0
  25. package/dist/{chunk-AJSNF5YF.js → chunk-O2QOC5FA.js} +5 -6
  26. package/dist/chunk-O2QOC5FA.js.map +1 -0
  27. package/dist/{chunk-E6O6XATC.js → chunk-P5SLNM3C.js} +9699 -11817
  28. package/dist/chunk-P5SLNM3C.js.map +1 -0
  29. package/dist/{chunk-GYEZV4GK.js → chunk-QTGYQ2U7.js} +2 -2
  30. package/dist/{chunk-4QDFNDVW.js → chunk-QZJN5OHK.js} +4 -4
  31. package/dist/{chunk-U2KPMWO6.cjs → chunk-TISXEAGH.cjs} +7 -7
  32. package/dist/{chunk-U2KPMWO6.cjs.map → chunk-TISXEAGH.cjs.map} +1 -1
  33. package/dist/{chunk-V5YWOQBP.cjs → chunk-VHFH3BG6.cjs} +31 -31
  34. package/dist/{chunk-V5YWOQBP.cjs.map → chunk-VHFH3BG6.cjs.map} +1 -1
  35. package/dist/{chunk-OVIUQJ2H.cjs → chunk-VRJXY6TM.cjs} +27 -28
  36. package/dist/chunk-VRJXY6TM.cjs.map +1 -0
  37. package/dist/{chunk-DG7TX763.js → chunk-VYUEOKI6.js} +2 -2
  38. package/dist/{chunk-GLKULDQN.cjs → chunk-X77X3RKH.cjs} +9 -9
  39. package/dist/{chunk-GLKULDQN.cjs.map → chunk-X77X3RKH.cjs.map} +1 -1
  40. package/dist/components/case-studies/index.cjs +8 -8
  41. package/dist/components/case-studies/index.js +2 -2
  42. package/dist/components/chat/chat-message-enhanced.d.ts.map +1 -1
  43. package/dist/components/chat/chat-message-list.d.ts.map +1 -1
  44. package/dist/components/chat/hooks/index.d.ts +1 -0
  45. package/dist/components/chat/hooks/index.d.ts.map +1 -1
  46. package/dist/components/chat/hooks/use-chat.d.ts.map +1 -1
  47. package/dist/components/chat/hooks/use-nats-chat-adapter.d.ts +48 -15
  48. package/dist/components/chat/hooks/use-nats-chat-adapter.d.ts.map +1 -1
  49. package/dist/components/chat/hooks/use-realtime-chunk-processor.d.ts +6 -0
  50. package/dist/components/chat/hooks/use-realtime-chunk-processor.d.ts.map +1 -0
  51. package/dist/components/chat/hooks/use-sse-chat-adapter.d.ts +47 -3
  52. package/dist/components/chat/hooks/use-sse-chat-adapter.d.ts.map +1 -1
  53. package/dist/components/chat/index.cjs +2 -10
  54. package/dist/components/chat/index.cjs.map +1 -1
  55. package/dist/components/chat/index.d.ts +0 -1
  56. package/dist/components/chat/index.d.ts.map +1 -1
  57. package/dist/components/chat/index.js +13 -21
  58. package/dist/components/chat/types/api.types.d.ts +81 -1
  59. package/dist/components/chat/types/api.types.d.ts.map +1 -1
  60. package/dist/components/chat/types/processing.types.d.ts +90 -2
  61. package/dist/components/chat/types/processing.types.d.ts.map +1 -1
  62. package/dist/components/chat/utils/chunk-parser.d.ts +25 -0
  63. package/dist/components/chat/utils/chunk-parser.d.ts.map +1 -0
  64. package/dist/components/chat/utils/extract-incomplete-message-state.d.ts +6 -34
  65. package/dist/components/chat/utils/extract-incomplete-message-state.d.ts.map +1 -1
  66. package/dist/components/chat/utils/index.d.ts +3 -2
  67. package/dist/components/chat/utils/index.d.ts.map +1 -1
  68. package/dist/components/chat/utils/process-historical-messages.d.ts +11 -59
  69. package/dist/components/chat/utils/process-historical-messages.d.ts.map +1 -1
  70. package/dist/components/contact/index.cjs +3 -3
  71. package/dist/components/contact/index.js +2 -2
  72. package/dist/components/docs/index.cjs +5 -5
  73. package/dist/components/docs/index.js +4 -4
  74. package/dist/components/embeds/index.cjs +3 -3
  75. package/dist/components/embeds/index.js +2 -2
  76. package/dist/components/faq/index.cjs +3 -3
  77. package/dist/components/faq/index.js +2 -2
  78. package/dist/components/features/index.cjs +2 -2
  79. package/dist/components/features/index.js +1 -1
  80. package/dist/components/help-center-pages/index.cjs +20 -20
  81. package/dist/components/help-center-pages/index.js +11 -11
  82. package/dist/components/index.cjs +130 -172
  83. package/dist/components/index.cjs.map +1 -1
  84. package/dist/components/index.js +21 -63
  85. package/dist/components/index.js.map +1 -1
  86. package/dist/components/navigation/index.cjs +2 -2
  87. package/dist/components/navigation/index.js +1 -1
  88. package/dist/components/onboarding-guides/index.cjs +5 -5
  89. package/dist/components/onboarding-guides/index.js +4 -4
  90. package/dist/components/onboarding-guides/onboarding-guide-detail-view.d.ts.map +1 -1
  91. package/dist/components/related-content/index.cjs +3 -3
  92. package/dist/components/related-content/index.js +2 -2
  93. package/dist/components/shared/product-release/release-detail-page.d.ts.map +1 -1
  94. package/dist/components/tickets/index.cjs +5 -5
  95. package/dist/components/tickets/index.js +4 -4
  96. package/dist/components/ui/index.cjs +2 -44
  97. package/dist/components/ui/index.cjs.map +1 -1
  98. package/dist/components/ui/index.d.ts +2 -1
  99. package/dist/components/ui/index.d.ts.map +1 -1
  100. package/dist/components/ui/index.js +13 -55
  101. package/dist/components/ui/rich-markdown-renderer.d.ts +34 -0
  102. package/dist/components/ui/rich-markdown-renderer.d.ts.map +1 -0
  103. package/dist/components/ui/simple-markdown-renderer.d.ts +73 -0
  104. package/dist/components/ui/simple-markdown-renderer.d.ts.map +1 -0
  105. package/dist/index.cjs +2 -60
  106. package/dist/index.cjs.map +1 -1
  107. package/dist/index.js +13 -71
  108. package/dist/utils/index.cjs +40 -169
  109. package/dist/utils/index.cjs.map +1 -1
  110. package/dist/utils/index.d.ts +0 -1
  111. package/dist/utils/index.d.ts.map +1 -1
  112. package/dist/utils/index.js +41 -162
  113. package/dist/utils/index.js.map +1 -1
  114. package/dist/utils/markdown-section-extractor.d.ts.map +1 -1
  115. package/package.json +1 -7
  116. package/src/components/chat/__tests__/chat-message-list.test.tsx +5 -293
  117. package/src/components/chat/chat-message-enhanced.tsx +17 -111
  118. package/src/components/chat/chat-message-list.tsx +109 -358
  119. package/src/components/chat/embeddable-chat.tsx +0 -6
  120. package/src/components/chat/hooks/.index.md +1 -1
  121. package/src/components/chat/hooks/.use-nats-chat-adapter.md +1 -1
  122. package/src/components/chat/hooks/.use-realtime-chunk-processor.md +50 -0
  123. package/src/components/chat/hooks/index.ts +1 -0
  124. package/src/components/chat/hooks/use-chat.ts +0 -8
  125. package/src/components/chat/hooks/use-nats-chat-adapter.ts +822 -243
  126. package/src/components/chat/hooks/use-realtime-chunk-processor.ts +479 -0
  127. package/src/components/chat/hooks/use-sse-chat-adapter.ts +666 -318
  128. package/src/components/chat/index.ts +0 -5
  129. package/src/components/chat/thinking-display.tsx +1 -1
  130. package/src/components/chat/types/.api.types.md +3 -1
  131. package/src/components/chat/types/.processing.types.md +23 -6
  132. package/src/components/chat/types/api.types.ts +73 -6
  133. package/src/components/chat/types/processing.types.ts +52 -11
  134. package/src/components/chat/utils/.chunk-parser.md +51 -0
  135. package/src/components/chat/utils/.index.md +5 -0
  136. package/src/components/chat/utils/chunk-parser.ts +255 -0
  137. package/src/components/chat/utils/extract-incomplete-message-state.ts +5 -63
  138. package/src/components/chat/utils/index.ts +8 -5
  139. package/src/components/chat/utils/process-historical-messages.ts +383 -352
  140. package/src/components/onboarding-guides/onboarding-guide-detail-view.tsx +4 -22
  141. package/src/components/shared/legal-document/legal-document-page.tsx +1 -1
  142. package/src/components/shared/product-release/release-detail-page.tsx +4 -19
  143. package/src/components/ui/.simple-markdown-renderer.md +40 -0
  144. package/src/components/ui/index.ts +2 -1
  145. package/src/components/ui/release-changelog-section.tsx +1 -1
  146. package/src/components/ui/rich-markdown-renderer.tsx +1223 -0
  147. package/src/components/ui/simple-markdown-renderer.tsx +965 -0
  148. package/src/components/ui/ticket-info-section.tsx +1 -1
  149. package/src/utils/index.ts +0 -1
  150. package/src/utils/markdown-section-extractor.ts +56 -41
  151. package/dist/chat-protocol/decode.d.ts +0 -58
  152. package/dist/chat-protocol/decode.d.ts.map +0 -1
  153. package/dist/chat-protocol/encode.d.ts +0 -44
  154. package/dist/chat-protocol/encode.d.ts.map +0 -1
  155. package/dist/chat-protocol/env-flag.d.ts +0 -35
  156. package/dist/chat-protocol/env-flag.d.ts.map +0 -1
  157. package/dist/chat-protocol/events.d.ts +0 -192
  158. package/dist/chat-protocol/events.d.ts.map +0 -1
  159. package/dist/chat-protocol/frames.d.ts +0 -206
  160. package/dist/chat-protocol/frames.d.ts.map +0 -1
  161. package/dist/chat-protocol/index.cjs +0 -493
  162. package/dist/chat-protocol/index.cjs.map +0 -1
  163. package/dist/chat-protocol/index.d.ts +0 -18
  164. package/dist/chat-protocol/index.d.ts.map +0 -1
  165. package/dist/chat-protocol/index.js +0 -477
  166. package/dist/chat-protocol/index.js.map +0 -1
  167. package/dist/chat-protocol/ip-normalize.d.ts +0 -44
  168. package/dist/chat-protocol/ip-normalize.d.ts.map +0 -1
  169. package/dist/chat-protocol/nats-decoder.d.ts +0 -26
  170. package/dist/chat-protocol/nats-decoder.d.ts.map +0 -1
  171. package/dist/chunk-4W54HUP7.cjs.map +0 -1
  172. package/dist/chunk-AJSNF5YF.js.map +0 -1
  173. package/dist/chunk-E6O6XATC.js.map +0 -1
  174. package/dist/chunk-OVIUQJ2H.cjs.map +0 -1
  175. package/dist/chunk-VUCYS36H.js.map +0 -1
  176. package/dist/chunk-WHWDGCQV.cjs.map +0 -1
  177. package/dist/components/chat/stream/chat-dialog-store.d.ts +0 -184
  178. package/dist/components/chat/stream/chat-dialog-store.d.ts.map +0 -1
  179. package/dist/components/chat/stream/chat-stream-reducer.d.ts +0 -367
  180. package/dist/components/chat/stream/chat-stream-reducer.d.ts.map +0 -1
  181. package/dist/components/chat/stream/delta-batcher.d.ts +0 -51
  182. package/dist/components/chat/stream/delta-batcher.d.ts.map +0 -1
  183. package/dist/components/chat/stream/index.d.ts +0 -17
  184. package/dist/components/chat/stream/index.d.ts.map +0 -1
  185. package/dist/components/chat/stream/message-mutations.d.ts +0 -77
  186. package/dist/components/chat/stream/message-mutations.d.ts.map +0 -1
  187. package/dist/components/chat/stream/use-chat-stream-reducer.d.ts +0 -22
  188. package/dist/components/chat/stream/use-chat-stream-reducer.d.ts.map +0 -1
  189. package/dist/components/ui/markdown/base-components.d.ts +0 -56
  190. package/dist/components/ui/markdown/base-components.d.ts.map +0 -1
  191. package/dist/components/ui/markdown/engine.d.ts +0 -99
  192. package/dist/components/ui/markdown/engine.d.ts.map +0 -1
  193. package/dist/components/ui/markdown/heading-ids.d.ts +0 -65
  194. package/dist/components/ui/markdown/heading-ids.d.ts.map +0 -1
  195. package/dist/components/ui/markdown/index.d.ts +0 -18
  196. package/dist/components/ui/markdown/index.d.ts.map +0 -1
  197. package/dist/components/ui/markdown/mermaid-diagram.d.ts +0 -79
  198. package/dist/components/ui/markdown/mermaid-diagram.d.ts.map +0 -1
  199. package/dist/components/ui/markdown/rich/embed-overrides.d.ts +0 -14
  200. package/dist/components/ui/markdown/rich/embed-overrides.d.ts.map +0 -1
  201. package/dist/components/ui/markdown/rich/rich-markdown-renderer.d.ts +0 -40
  202. package/dist/components/ui/markdown/rich/rich-markdown-renderer.d.ts.map +0 -1
  203. package/dist/components/ui/markdown/rich/shortcodes.d.ts +0 -8
  204. package/dist/components/ui/markdown/rich/shortcodes.d.ts.map +0 -1
  205. package/dist/components/ui/markdown/sanitize.d.ts +0 -153
  206. package/dist/components/ui/markdown/sanitize.d.ts.map +0 -1
  207. package/dist/components/ui/markdown/simple-markdown-renderer.d.ts +0 -23
  208. package/dist/components/ui/markdown/simple-markdown-renderer.d.ts.map +0 -1
  209. package/dist/components/ui/markdown/streaming.d.ts +0 -78
  210. package/dist/components/ui/markdown/streaming.d.ts.map +0 -1
  211. package/dist/components/ui/markdown/text-size.d.ts +0 -34
  212. package/dist/components/ui/markdown/text-size.d.ts.map +0 -1
  213. package/dist/utils/markdown-fences.d.ts +0 -42
  214. package/dist/utils/markdown-fences.d.ts.map +0 -1
  215. package/dist/utils/markdown-heading-id.d.ts +0 -85
  216. package/dist/utils/markdown-heading-id.d.ts.map +0 -1
  217. package/src/chat-protocol/__tests__/__snapshots__/nats-decoder-golden.test.ts.snap +0 -307
  218. package/src/chat-protocol/__tests__/chat-protocol.test.ts +0 -515
  219. package/src/chat-protocol/__tests__/env-flag.test.ts +0 -52
  220. package/src/chat-protocol/__tests__/ip-normalize.test.ts +0 -136
  221. package/src/chat-protocol/__tests__/nats-decoder-golden.test.ts +0 -228
  222. package/src/chat-protocol/decode.ts +0 -277
  223. package/src/chat-protocol/encode.ts +0 -71
  224. package/src/chat-protocol/env-flag.ts +0 -39
  225. package/src/chat-protocol/events.ts +0 -228
  226. package/src/chat-protocol/frames.ts +0 -238
  227. package/src/chat-protocol/index.ts +0 -21
  228. package/src/chat-protocol/ip-normalize.ts +0 -146
  229. package/src/chat-protocol/nats-decoder.ts +0 -252
  230. package/src/components/chat/__tests__/chat-message-streaming-memo.test.tsx +0 -207
  231. package/src/components/chat/__tests__/chat-pending-turn.test.tsx +0 -209
  232. package/src/components/chat/hooks/__tests__/__snapshots__/persisted-state-v1-golden.test.ts.snap +0 -297
  233. package/src/components/chat/hooks/__tests__/__snapshots__/sse-stream-golden.test.ts.snap +0 -0
  234. package/src/components/chat/hooks/__tests__/persisted-state-v1-golden.test.ts +0 -272
  235. package/src/components/chat/hooks/__tests__/sse-stream-golden.test.ts +0 -318
  236. package/src/components/chat/stream/__tests__/__snapshots__/chat-stream-reducer-golden.test.ts.snap +0 -937
  237. package/src/components/chat/stream/__tests__/chat-dialog-store.test.ts +0 -756
  238. package/src/components/chat/stream/__tests__/chat-stream-reducer-golden.test.ts +0 -460
  239. package/src/components/chat/stream/__tests__/chat-stream-reducer.test.ts +0 -894
  240. package/src/components/chat/stream/__tests__/delta-batcher.test.ts +0 -255
  241. package/src/components/chat/stream/__tests__/use-chat-stream-reducer.test.ts +0 -98
  242. package/src/components/chat/stream/chat-dialog-store.ts +0 -536
  243. package/src/components/chat/stream/chat-stream-reducer.ts +0 -1796
  244. package/src/components/chat/stream/delta-batcher.ts +0 -159
  245. package/src/components/chat/stream/index.ts +0 -55
  246. package/src/components/chat/stream/message-mutations.ts +0 -338
  247. package/src/components/chat/stream/use-chat-stream-reducer.ts +0 -126
  248. package/src/components/chat/utils/__tests__/__snapshots__/process-historical-messages-golden.test.ts.snap +0 -418
  249. package/src/components/chat/utils/__tests__/__snapshots__/segment-accumulator-golden.test.ts.snap +0 -599
  250. package/src/components/chat/utils/__tests__/process-historical-messages-golden.test.ts +0 -317
  251. package/src/components/chat/utils/__tests__/segment-accumulator-golden.test.ts +0 -270
  252. package/src/components/ui/__tests__/__snapshots__/markdown-parity.test.tsx.snap +0 -2420
  253. package/src/components/ui/__tests__/markdown-parity.test.tsx +0 -2528
  254. package/src/components/ui/markdown/__tests__/mermaid-security.test.ts +0 -115
  255. package/src/components/ui/markdown/__tests__/mermaid-stale-render.test.tsx +0 -95
  256. package/src/components/ui/markdown/__tests__/sanitize-invariant.test.ts +0 -309
  257. package/src/components/ui/markdown/__tests__/streaming.test.tsx +0 -388
  258. package/src/components/ui/markdown/base-components.tsx +0 -341
  259. package/src/components/ui/markdown/engine.tsx +0 -315
  260. package/src/components/ui/markdown/heading-ids.ts +0 -239
  261. package/src/components/ui/markdown/index.ts +0 -49
  262. package/src/components/ui/markdown/mermaid-diagram.tsx +0 -291
  263. package/src/components/ui/markdown/rich/embed-overrides.tsx +0 -199
  264. package/src/components/ui/markdown/rich/rich-markdown-renderer.tsx +0 -184
  265. package/src/components/ui/markdown/rich/shortcodes.ts +0 -170
  266. package/src/components/ui/markdown/sanitize.ts +0 -3499
  267. package/src/components/ui/markdown/simple-markdown-renderer.tsx +0 -28
  268. package/src/components/ui/markdown/streaming.ts +0 -362
  269. package/src/components/ui/markdown/text-size.ts +0 -106
  270. package/src/utils/markdown-fences.ts +0 -127
  271. package/src/utils/markdown-heading-id.ts +0 -348
  272. /package/dist/{chunk-33FDAZDB.js.map → chunk-3TU6QURP.js.map} +0 -0
  273. /package/dist/{chunk-2BJSRTKU.js.map → chunk-AEM7ADDG.js.map} +0 -0
  274. /package/dist/{chunk-MMF6HJB7.js.map → chunk-EZESVVIM.js.map} +0 -0
  275. /package/dist/{chunk-AW3LVWVV.js.map → chunk-HTSWLPMU.js.map} +0 -0
  276. /package/dist/{chunk-RPAOSHBN.js.map → chunk-IUMPVRSH.js.map} +0 -0
  277. /package/dist/{chunk-7I2QMUEZ.js.map → chunk-JW3UNHGW.js.map} +0 -0
  278. /package/dist/{chunk-GYEZV4GK.js.map → chunk-QTGYQ2U7.js.map} +0 -0
  279. /package/dist/{chunk-4QDFNDVW.js.map → chunk-QZJN5OHK.js.map} +0 -0
  280. /package/dist/{chunk-DG7TX763.js.map → chunk-VYUEOKI6.js.map} +0 -0
@@ -9,18 +9,6 @@ import type {
9
9
  PendingApproval,
10
10
  ExecutingToolState,
11
11
  } from '../types'
12
- import type { InitializeExtras } from '../stream/chat-stream-reducer'
13
-
14
- /**
15
- * What the realtime accumulator needs to RESUME an unfinished turn.
16
- *
17
- * DERIVED, not restated: this is exactly the reducer's `InitializeExtras`
18
- * minus `escalatedApprovals` (which only the live stream can produce — it has
19
- * no historical representation to extract). Hosts pass the result straight
20
- * into `reducer.initializeWithState(messages, extras)`, so the two must not
21
- * drift; a structural coincidence is not a contract.
22
- */
23
- export type IncompleteMessageState = Omit<InitializeExtras, 'escalatedApprovals'>
24
12
 
25
13
  /**
26
14
  * Extract incomplete message state from the last historical assistant message
@@ -28,7 +16,11 @@ export type IncompleteMessageState = Omit<InitializeExtras, 'escalatedApprovals'
28
16
  */
29
17
  export function extractIncompleteMessageState(
30
18
  lastMessage: ProcessedMessage | undefined
31
- ): IncompleteMessageState | undefined {
19
+ ): {
20
+ existingSegments?: MessageSegment[]
21
+ pendingApprovals?: Map<string, PendingApproval>
22
+ executingTools?: Map<string, ExecutingToolState>
23
+ } | undefined {
32
24
  if (!lastMessage || lastMessage.role !== 'assistant' || typeof lastMessage.content === 'string') {
33
25
  return undefined
34
26
  }
@@ -99,54 +91,4 @@ export function extractIncompleteMessageState(
99
91
  pendingApprovals: pendingApprovals.size > 0 ? pendingApprovals : undefined,
100
92
  executingTools: executingTools.size > 0 ? executingTools : undefined,
101
93
  }
102
- }
103
-
104
- /**
105
- * THREAD-level generalization of `extractIncompleteMessageState`: given a
106
- * processed thread, look at the TRAILING RUN of consecutive assistant
107
- * messages (not just the very last row), flatten it to one segment list, and
108
- * ask the single-message extractor whether that tail is unfinished.
109
- *
110
- * Why the run and not the last row: the backend can split one logical turn
111
- * across several assistant messages (a preamble bubble, then the approval
112
- * card, then the continuation). The unfinished artifact — a pending approval,
113
- * an EXECUTING_TOOL with no result, an open compaction — can therefore sit in
114
- * an EARLIER bubble of the same trailing run, and a last-row-only check
115
- * reports "complete" while the turn is very much still in flight.
116
- *
117
- * SSOT for every "is the tail incomplete?" question — the NATS adapter (which
118
- * used to inline the single-row check) and hosts replaying a stored thread
119
- * both call this instead of re-deriving the walk.
120
- *
121
- * A trailing non-assistant row (user / error) means the last turn closed →
122
- * `undefined`.
123
- */
124
- export function extractIncompleteTailState(
125
- messages: readonly ProcessedMessage[] | undefined,
126
- ): IncompleteMessageState | undefined {
127
- if (!messages || messages.length === 0) return undefined
128
-
129
- // Walk back over the trailing consecutive assistant run.
130
- let start = messages.length
131
- while (start > 0 && messages[start - 1]?.role === 'assistant') start -= 1
132
- if (start === messages.length) return undefined
133
-
134
- const segments: MessageSegment[] = []
135
- for (let i = start; i < messages.length; i += 1) {
136
- const content = messages[i]?.content
137
- // A string-content assistant row is a plain-text bubble with nothing to
138
- // resume; skip it rather than aborting — a later row in the same run may
139
- // still hold the unfinished segment.
140
- if (Array.isArray(content)) segments.push(...(content as MessageSegment[]))
141
- }
142
- if (segments.length === 0) return undefined
143
-
144
- // Reuse the single-message extractor verbatim by handing it a synthetic
145
- // assistant row carrying the flattened run — one incompleteness rule set,
146
- // not two.
147
- return extractIncompleteMessageState({
148
- ...messages[messages.length - 1],
149
- role: 'assistant',
150
- content: segments,
151
- } as ProcessedMessage)
152
94
  }
@@ -3,9 +3,14 @@
3
3
  * Export all utilities for processing chat messages
4
4
  */
5
5
 
6
- // NOTE: NATS chunk parsing lives in `chat-protocol/nats-decoder`
7
- // (`decodeNatsChunk`) — the legacy `chunk-parser` module was deleted once the
8
- // reducer became the single reading path.
6
+ // Chunk parsing utilities
7
+ export {
8
+ parseChunkToAction,
9
+ isControlChunk,
10
+ isErrorChunk,
11
+ isMetadataChunk,
12
+ extractTextFromChunk,
13
+ } from './chunk-parser'
9
14
 
10
15
  // Segment accumulator
11
16
  export {
@@ -19,13 +24,11 @@ export {
19
24
  processHistoricalMessages,
20
25
  extractErrorMessages,
21
26
  processHistoricalMessagesWithErrors,
22
- decodeHistoricalMessageData,
23
27
  } from './process-historical-messages'
24
28
 
25
29
  // Incomplete message state extraction
26
30
  export {
27
31
  extractIncompleteMessageState,
28
- extractIncompleteTailState,
29
32
  } from './extract-incomplete-message-state'
30
33
 
31
34
  // History <-> realtime reconciliation