@lostgradient/cinder 0.8.0 → 0.9.0

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 (271) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/README.md +2 -2
  3. package/components.json +59 -15
  4. package/dist/components/_internal/command-list-context.d.ts +3 -3
  5. package/dist/components/_internal/create-command-list-state.svelte.d.ts +11 -11
  6. package/dist/components/access-gate/index.js +201 -126
  7. package/dist/components/approval-card/approval-card-actions.svelte.d.ts +16 -0
  8. package/dist/components/approval-card/approval-card-state.d.ts +65 -0
  9. package/dist/components/approval-card/approval-card.css +269 -92
  10. package/dist/components/approval-card/approval-card.schema.js +10 -31
  11. package/dist/components/approval-card/approval-card.svelte.d.ts +3 -3
  12. package/dist/components/approval-card/approval-card.types.d.ts +14 -28
  13. package/dist/components/approval-card/index.d.ts +1 -1
  14. package/dist/components/approval-card/index.js +4268 -2884
  15. package/dist/components/card/card.css +5 -0
  16. package/dist/components/card/card.schema.js +2 -2
  17. package/dist/components/card/card.types.d.ts +2 -2
  18. package/dist/components/card/index.js +2 -1
  19. package/dist/components/chat/chat.schema.js +44 -2
  20. package/dist/components/chat/chat.svelte.d.ts +4 -2
  21. package/dist/components/chat/chat.types.d.ts +34 -3
  22. package/dist/components/chat/container/chat.svelte.d.ts +4 -2
  23. package/dist/components/chat/index.d.ts +3 -3
  24. package/dist/components/chat/index.js +2485 -6279
  25. package/dist/components/chat/input/chat-attachment-serialization.d.ts +9 -0
  26. package/dist/components/chat/input/chat-input.svelte.d.ts +22 -1
  27. package/dist/components/chat/input/index.d.ts +1 -0
  28. package/dist/components/chat-composer-popover/chat-composer-popover-filter.d.ts +11 -0
  29. package/dist/components/chat-composer-popover/chat-composer-popover.css +7 -0
  30. package/dist/components/chat-composer-popover/chat-composer-popover.css.d.ts +1 -0
  31. package/dist/components/chat-composer-popover/chat-composer-popover.schema.d.ts +3 -0
  32. package/dist/components/chat-composer-popover/chat-composer-popover.schema.js +150 -0
  33. package/dist/components/chat-composer-popover/chat-composer-popover.svelte.d.ts +46 -0
  34. package/dist/components/chat-composer-popover/chat-composer-popover.types.d.ts +77 -0
  35. package/dist/components/chat-composer-popover/chat-composer-popover.variables.d.ts +2 -0
  36. package/dist/components/chat-composer-popover/chat-composer-popover.variables.js +61 -0
  37. package/dist/components/chat-composer-popover/index.d.ts +6 -0
  38. package/dist/components/chat-composer-popover/index.js +3285 -0
  39. package/dist/components/chat-conversation-header/index.js +1627 -5600
  40. package/dist/components/chat-conversation-list/index.js +15 -3988
  41. package/dist/components/code-block/code-block.schema.js +5 -1
  42. package/dist/components/code-block/code-block.types.d.ts +6 -0
  43. package/dist/components/code-block/index.js +4 -4
  44. package/dist/components/command-item/index.js +7 -6
  45. package/dist/components/command-menu/command-menu.schema.js +5 -1
  46. package/dist/components/command-menu/command-menu.types.d.ts +2 -0
  47. package/dist/components/command-menu/index.js +48 -19
  48. package/dist/components/command-palette/index.js +40 -14
  49. package/dist/components/event-stream-viewer/index.js +44 -44
  50. package/dist/components/experimental/json-viewer/index.js +44 -44
  51. package/dist/components/json-schema-editor/index.js +5 -2
  52. package/dist/components/json-viewer/index.js +44 -44
  53. package/dist/components/json-viewer/json-viewer.css +10 -6
  54. package/dist/components/payload-inspector/index.d.ts +1 -1
  55. package/dist/components/payload-inspector/index.js +306 -1422
  56. package/dist/components/payload-inspector/payload-inspector.css +15 -75
  57. package/dist/components/payload-inspector/payload-inspector.schema.js +5 -41
  58. package/dist/components/payload-inspector/payload-inspector.svelte.d.ts +5 -5
  59. package/dist/components/payload-inspector/payload-inspector.types.d.ts +10 -56
  60. package/dist/components/tab/index.js +5 -2
  61. package/dist/components/tab/tab.schema.js +7 -3
  62. package/dist/components/tab/tab.svelte.d.ts +2 -1
  63. package/dist/components/tab/tab.types.d.ts +8 -2
  64. package/dist/components/tabs/index.js +5 -2
  65. package/dist/components/team-section/index.js +2 -1
  66. package/dist/components/testimonial-section/index.js +2 -1
  67. package/dist/index.d.ts +4 -2
  68. package/dist/index.js +23711 -27432
  69. package/dist/server/components/access-gate/index.js +2 -1
  70. package/dist/server/components/accordion/index.js +2 -2
  71. package/dist/server/components/alert-dialog/index.js +2 -2
  72. package/dist/server/components/approval-card/index.js +15 -19
  73. package/dist/server/components/autocomplete/index.js +7 -7
  74. package/dist/server/components/avatar-group/index.js +5 -5
  75. package/dist/server/components/button-group/index.js +3 -5
  76. package/dist/server/components/card/index.js +2 -2
  77. package/dist/server/components/chat/index.js +14 -11
  78. package/dist/server/components/chat-composer-popover/index.js +26 -0
  79. package/dist/server/components/chat-conversation-header/index.js +9 -10
  80. package/dist/server/components/chat-conversation-list/index.js +4 -5
  81. package/dist/server/components/checkbox/index.js +3 -3
  82. package/dist/server/components/choice-grid/index.js +2 -2
  83. package/dist/server/components/code-block/index.js +2 -2
  84. package/dist/server/components/color-field/index.js +3 -3
  85. package/dist/server/components/combobox/index.js +6 -6
  86. package/dist/server/components/command-item/index.js +5 -3
  87. package/dist/server/components/command-menu/index.js +6 -4
  88. package/dist/server/components/command-palette/index.js +2 -2
  89. package/dist/server/components/confirm-dialog/index.js +2 -2
  90. package/dist/server/components/context-menu/index.js +5 -5
  91. package/dist/server/components/data-table/index.js +5 -5
  92. package/dist/server/components/date-picker/index.js +6 -6
  93. package/dist/server/components/date-range-field/index.js +7 -7
  94. package/dist/server/components/description-list/index.js +3 -5
  95. package/dist/server/components/diff-viewer/index.js +7 -7
  96. package/dist/server/components/drawer/index.js +3 -3
  97. package/dist/server/components/dropdown/index.js +4 -4
  98. package/dist/server/components/event-stream-viewer/index.js +2 -2
  99. package/dist/server/components/experimental/json-viewer/index.js +2 -2
  100. package/dist/server/components/faceted-filter-bar/index.js +1 -1
  101. package/dist/server/components/hover-card/index.js +1 -1
  102. package/dist/server/components/input/index.js +3 -3
  103. package/dist/server/components/json-schema-editor/index.js +22 -22
  104. package/dist/server/components/json-viewer/index.js +2 -2
  105. package/dist/server/components/markdown-editor/index.js +13 -13
  106. package/dist/server/components/modal/index.js +1 -1
  107. package/dist/server/components/multi-select/index.js +1 -1
  108. package/dist/server/components/newsletter-section/index.js +3 -3
  109. package/dist/server/components/payload-inspector/index.js +4 -16
  110. package/dist/server/components/popover/index.js +5 -5
  111. package/dist/server/components/review-editor/index.js +25 -25
  112. package/dist/server/components/run-step-timeline/index.js +2 -2
  113. package/dist/server/components/schema-form/index.js +4 -4
  114. package/dist/server/components/secret-value-field/index.js +3 -5
  115. package/dist/server/components/segment/index.js +3 -3
  116. package/dist/server/components/segmented-control/index.js +4 -4
  117. package/dist/server/components/selection-popover/index.js +4 -4
  118. package/dist/server/components/sheet/index.js +2 -2
  119. package/dist/server/components/sidebar/index.js +3 -3
  120. package/dist/server/components/tab/index.js +2 -2
  121. package/dist/server/components/table/index.js +3 -3
  122. package/dist/server/components/tabs/index.js +4 -4
  123. package/dist/server/components/tag-input/index.js +3 -3
  124. package/dist/server/components/team-section/index.js +8 -8
  125. package/dist/server/components/testimonial-section/index.js +2 -2
  126. package/dist/server/components/toggle/index.js +2 -2
  127. package/dist/server/components/tooltip/index.js +1 -1
  128. package/dist/server/index.js +159 -148
  129. package/dist/server/{index.server-cbtg8rq5.js → index.server-0atyznp7.js} +5 -5
  130. package/dist/server/{index.server-20y4mdhm.js → index.server-0chhpkg7.js} +40 -14
  131. package/dist/server/{index.server-ecm1vs3g.js → index.server-1nq7z1qw.js} +1 -1
  132. package/dist/server/{index.server-jync915v.js → index.server-2dga5yzr.js} +25 -25
  133. package/dist/server/index.server-2hqrv7ca.js +9 -0
  134. package/dist/server/{index.server-69epaape.js → index.server-2qj6s2mh.js} +1 -1
  135. package/dist/server/{index.server-pt8b65mt.js → index.server-38aywdk1.js} +1 -1
  136. package/dist/server/{index.server-rermas0k.js → index.server-47v2fhp4.js} +4 -4
  137. package/dist/server/{index.server-9j5sym59.js → index.server-4x91gzy1.js} +2 -2
  138. package/dist/server/{index.server-q48q15g7.js → index.server-4y2jtvv1.js} +4 -2
  139. package/dist/server/index.server-67qgdypc.js +9 -0
  140. package/dist/server/{index.server-9jete4xx.js → index.server-6sh11ap6.js} +4 -4
  141. package/dist/server/{index.server-4ztq565m.js → index.server-85p4ydph.js} +1 -1
  142. package/dist/server/{index.server-4nk7gy0q.js → index.server-894t97kv.js} +1 -1
  143. package/dist/server/{index.server-1vscnped.js → index.server-8dt36sdm.js} +2 -1
  144. package/dist/server/{index.server-bfsbp9dz.js → index.server-8xvc73zh.js} +4 -4
  145. package/dist/server/{index.server-cvnw3hw9.js → index.server-9kz37z89.js} +1 -1
  146. package/dist/server/{index.server-kc1k02tk.js → index.server-9ykk1kbg.js} +1 -1
  147. package/dist/server/{index.server-g789yep6.js → index.server-aqethy0w.js} +2 -2
  148. package/dist/server/{index.server-wc9aggfz.js → index.server-bmxbsk4y.js} +7 -7
  149. package/dist/server/{index.server-j3ddzcaa.js → index.server-c6pe4kaf.js} +6 -6
  150. package/dist/server/{index.server-q89dz8h1.js → index.server-d3pqthtp.js} +4 -3
  151. package/dist/server/{index.server-qfa2rxzx.js → index.server-dg83ke3k.js} +3 -5
  152. package/dist/server/{index.server-jk4rx4aa.js → index.server-dmmvwy6p.js} +1 -1
  153. package/dist/server/{index.server-hcfnae5y.js → index.server-dwwqssey.js} +4 -4
  154. package/dist/server/{index.server-e8x1hgw6.js → index.server-dz1r9xw5.js} +4 -4
  155. package/dist/server/{index.server-wm7mk5kw.js → index.server-ez5hp0ya.js} +1 -1
  156. package/dist/server/{index.server-ejyf7e48.js → index.server-fy068yne.js} +1 -1
  157. package/dist/server/{index.server-wc8dbm5e.js → index.server-g95bk8rc.js} +4 -2
  158. package/dist/server/index.server-gkazv439.js +576 -0
  159. package/dist/server/{index.server-dp9j2kkr.js → index.server-h0cvwvhy.js} +1 -1
  160. package/dist/server/{index.server-pacrqvyz.js → index.server-h90pjrez.js} +1 -1
  161. package/dist/server/{index.server-p8d04em5.js → index.server-hcsd5gdb.js} +6 -2
  162. package/dist/server/{index.server-n39drzes.js → index.server-hpeavvnq.js} +1 -1
  163. package/dist/server/{index.server-1p3patnj.js → index.server-hx91ng7z.js} +1 -1
  164. package/dist/server/{index.server-jtj3r53y.js → index.server-jgb8yh5k.js} +1 -1
  165. package/dist/server/{index.server-w1g5q9j9.js → index.server-jtgw9d23.js} +4 -2
  166. package/dist/server/{index.server-mehav5vs.js → index.server-jxg42jpz.js} +4 -4
  167. package/dist/server/{index.server-hd8gpehd.js → index.server-jxseyx33.js} +1 -1
  168. package/dist/server/{index.server-kg2sepsr.js → index.server-krqvnt6p.js} +14 -15
  169. package/dist/server/{index.server-0e1m3agz.js → index.server-ks49bprh.js} +1 -1
  170. package/dist/server/{index.server-f0hma3jp.js → index.server-kt0ncrqs.js} +1 -1
  171. package/dist/server/index.server-m0ezemav.js +170 -0
  172. package/dist/server/index.server-m191rm44.js +79 -0
  173. package/dist/server/{index.server-f23vtaw4.js → index.server-marjz8ps.js} +6 -6
  174. package/dist/server/index.server-mqt1ngqw.js +250 -0
  175. package/dist/server/{index.server-s9khh4ry.js → index.server-mzzb7dnm.js} +3 -5
  176. package/dist/server/{index.server-z721a5gp.js → index.server-n82rcv0m.js} +4 -4
  177. package/dist/server/{index.server-rhhmdxtz.js → index.server-np3c7kx0.js} +4 -4
  178. package/dist/server/{index.server-hpcs7tmh.js → index.server-p56xxef1.js} +1 -1
  179. package/dist/server/{index.server-w83kmcrx.js → index.server-pag862vz.js} +10 -10
  180. package/dist/server/{index.server-gxf0d1p5.js → index.server-q7w4jw89.js} +2 -2
  181. package/dist/server/{index.server-v4zabrsx.js → index.server-qh9qzd5t.js} +163 -25
  182. package/dist/server/{index.server-pxg74pyp.js → index.server-qk1h0n02.js} +4 -4
  183. package/dist/server/{index.server-sh2rxejg.js → index.server-qke3ekjt.js} +1 -1
  184. package/dist/server/{index.server-73x2d3j3.js → index.server-rbpvcrr3.js} +1 -1
  185. package/dist/server/{index.server-8cxs4kya.js → index.server-rga8sc7j.js} +41 -44
  186. package/dist/server/{index.server-e3fnv1g6.js → index.server-sedjxt36.js} +5 -5
  187. package/dist/server/{index.server-pen9pxt6.js → index.server-sf3nk3j2.js} +2 -2
  188. package/dist/server/{index.server-7fp0epev.js → index.server-veastatv.js} +4 -4
  189. package/dist/server/{index.server-jeqg2d22.js → index.server-xeqtpv61.js} +1 -1
  190. package/dist/server/{index.server-9s4na701.js → index.server-xjnge1yw.js} +4 -4
  191. package/dist/server/index.server-xtjjmsyq.js +315 -0
  192. package/dist/server/{index.server-hhxjaeen.js → index.server-xz99aed4.js} +4 -4
  193. package/dist/server/{index.server-vne4rzfa.js → index.server-y4n8vc08.js} +1 -1
  194. package/dist/server/{index.server-5d01cn4f.js → index.server-y83kqayt.js} +4 -4
  195. package/dist/server/{index.server-1nh09ck7.js → index.server-yhzydqxe.js} +5 -5
  196. package/dist/server/{index.server-atjc1qcq.js → index.server-yz4k36cw.js} +1 -1
  197. package/dist/server/{index.server-w6k62afr.js → index.server-ze1ymmbw.js} +2 -2
  198. package/dist/server/{index.server-914v805w.js → index.server-zgd1g8mk.js} +1 -1
  199. package/dist/server/{index.server-aeexcxdp.js → index.server-zh3r8vfd.js} +1 -1
  200. package/dist/server/{index.server-10jb2jzm.js → index.server-zsjf8enc.js} +4 -4
  201. package/package.json +40 -6
  202. package/src/components/_internal/command-list-context.ts +3 -3
  203. package/src/components/_internal/create-command-list-state.svelte.ts +39 -13
  204. package/src/components/approval-card/approval-card-actions.svelte +168 -0
  205. package/src/components/approval-card/approval-card-state.ts +152 -1
  206. package/src/components/approval-card/approval-card.css +269 -92
  207. package/src/components/approval-card/approval-card.examples.json +3 -3
  208. package/src/components/approval-card/approval-card.schema.json +9 -30
  209. package/src/components/approval-card/approval-card.schema.ts +13 -31
  210. package/src/components/approval-card/approval-card.svelte +176 -470
  211. package/src/components/approval-card/approval-card.types.ts +15 -28
  212. package/src/components/approval-card/index.ts +1 -0
  213. package/src/components/card/card.css +5 -0
  214. package/src/components/card/card.schema.json +1 -1
  215. package/src/components/card/card.schema.ts +1 -1
  216. package/src/components/card/card.svelte +1 -0
  217. package/src/components/card/card.types.ts +2 -2
  218. package/src/components/chat/chat.schema.json +36 -1
  219. package/src/components/chat/chat.schema.ts +44 -1
  220. package/src/components/chat/chat.svelte +12 -0
  221. package/src/components/chat/chat.types.ts +35 -3
  222. package/src/components/chat/container/chat.svelte +73 -3
  223. package/src/components/chat/index.ts +15 -3
  224. package/src/components/chat/input/chat-attachment-serialization.ts +63 -0
  225. package/src/components/chat/input/chat-input.svelte +22 -5
  226. package/src/components/chat/input/index.ts +5 -0
  227. package/src/components/chat-composer-popover/chat-composer-popover-filter.ts +68 -0
  228. package/src/components/chat-composer-popover/chat-composer-popover.css +7 -0
  229. package/src/components/chat-composer-popover/chat-composer-popover.examples.json +13 -0
  230. package/src/components/chat-composer-popover/chat-composer-popover.schema.json +90 -0
  231. package/src/components/chat-composer-popover/chat-composer-popover.schema.ts +95 -0
  232. package/src/components/chat-composer-popover/chat-composer-popover.svelte +234 -0
  233. package/src/components/chat-composer-popover/chat-composer-popover.types.ts +88 -0
  234. package/src/components/chat-composer-popover/chat-composer-popover.variables.json +1 -0
  235. package/src/components/chat-composer-popover/chat-composer-popover.variables.ts +3 -0
  236. package/src/components/chat-composer-popover/index.ts +19 -0
  237. package/src/components/code-block/code-block.schema.json +4 -0
  238. package/src/components/code-block/code-block.schema.ts +5 -0
  239. package/src/components/code-block/code-block.svelte +3 -3
  240. package/src/components/code-block/code-block.types.ts +6 -0
  241. package/src/components/command-item/command-item.svelte +7 -6
  242. package/src/components/command-menu/command-menu.schema.json +4 -0
  243. package/src/components/command-menu/command-menu.schema.ts +4 -0
  244. package/src/components/command-menu/command-menu.svelte +16 -5
  245. package/src/components/command-menu/command-menu.types.ts +2 -0
  246. package/src/components/json-viewer/_json-viewer-node.svelte +15 -1
  247. package/src/components/json-viewer/json-viewer.css +10 -6
  248. package/src/components/payload-inspector/index.ts +0 -2
  249. package/src/components/payload-inspector/payload-inspector.css +15 -75
  250. package/src/components/payload-inspector/payload-inspector.examples.json +5 -5
  251. package/src/components/payload-inspector/payload-inspector.schema.json +3 -31
  252. package/src/components/payload-inspector/payload-inspector.schema.ts +3 -36
  253. package/src/components/payload-inspector/payload-inspector.svelte +46 -239
  254. package/src/components/payload-inspector/payload-inspector.types.ts +10 -58
  255. package/src/components/tab/tab.schema.json +6 -2
  256. package/src/components/tab/tab.schema.ts +8 -2
  257. package/src/components/tab/tab.svelte +9 -5
  258. package/src/components/tab/tab.types.ts +8 -2
  259. package/src/index.ts +18 -5
  260. package/src/styles/components.css +1 -0
  261. package/dist/server/index-49we2xfs.js +0 -344
  262. package/dist/server/index-8fhvxk30.js +0 -265
  263. package/dist/server/index-x2ysg8ds.js +0 -388
  264. package/dist/server/index.server-20j0jh30.js +0 -9
  265. package/dist/server/index.server-dc35kh7d.js +0 -1835
  266. package/dist/server/index.server-kd4b0342.js +0 -607
  267. package/dist/server/index.server-n5cdmsz4.js +0 -30
  268. package/dist/server/index.server-rjap4k7y.js +0 -1389
  269. package/dist/server/index.server-vt6sn9y4.js +0 -447
  270. package/dist/server/index.server-w63n618v.js +0 -9
  271. package/dist/server/index.server-y2pa1k46.js +0 -9
@@ -1,1389 +0,0 @@
1
- // ../../node_modules/conversationalist/dist/message-BEjqY7Jv.js
2
- function copyMultiModalContent(item) {
3
- if (item.type === "text")
4
- return {
5
- type: "text",
6
- text: item.text,
7
- ...item.citations !== undefined ? { citations: structuredClone(item.citations) } : {}
8
- };
9
- if (item.type === "thinking")
10
- return {
11
- type: "thinking",
12
- thinking: item.thinking,
13
- signature: item.signature
14
- };
15
- if (item.type === "redacted_thinking")
16
- return {
17
- type: "redacted_thinking",
18
- data: item.data
19
- };
20
- if (item.type === "server_tool_use")
21
- return {
22
- type: "server_tool_use",
23
- id: item.id,
24
- name: item.name,
25
- input: structuredClone(item.input)
26
- };
27
- if (item.type === "web_search_tool_result")
28
- return {
29
- type: "web_search_tool_result",
30
- tool_use_id: item.tool_use_id,
31
- content: structuredClone(item.content)
32
- };
33
- if (item.type === "code_execution_tool_result" || item.type === "bash_code_execution_tool_result" || item.type === "text_editor_code_execution_tool_result" || item.type === "web_fetch_tool_result")
34
- return {
35
- type: item.type,
36
- tool_use_id: item.tool_use_id,
37
- content: structuredClone(item.content)
38
- };
39
- if (item.type === "container_upload")
40
- return {
41
- type: "container_upload",
42
- file_id: item.file_id
43
- };
44
- const image = item;
45
- return {
46
- type: "image",
47
- url: image.url,
48
- ...image.mimeType !== undefined ? { mimeType: image.mimeType } : {},
49
- ...image.text !== undefined ? { text: image.text } : {}
50
- };
51
- }
52
- function copyContent(content) {
53
- if (typeof content === "string")
54
- return content;
55
- return content.map(copyMultiModalContent);
56
- }
57
- function toReadonly(value) {
58
- return value;
59
- }
60
- function createMessage(props) {
61
- const content = typeof props.content === "string" ? props.content : toReadonly(structuredClone([...props.content]));
62
- const message = {
63
- id: props.id,
64
- role: props.role,
65
- content,
66
- position: props.position,
67
- createdAt: props.createdAt,
68
- metadata: toReadonly({ ...props.metadata }),
69
- hidden: props.hidden,
70
- toolCall: props.toolCall ? toReadonly(structuredClone(props.toolCall)) : undefined,
71
- toolResult: props.toolResult ? toReadonly(structuredClone(props.toolResult)) : undefined,
72
- tokenUsage: props.tokenUsage ? toReadonly({ ...props.tokenUsage }) : undefined
73
- };
74
- if (isAssistantMessage(props))
75
- return toReadonly({
76
- ...message,
77
- role: "assistant",
78
- goalCompleted: props.goalCompleted
79
- });
80
- return toReadonly(message);
81
- }
82
- function messageParts(message) {
83
- if (typeof message.content === "string")
84
- return message.content ? [{
85
- type: "text",
86
- text: message.content
87
- }] : [];
88
- return message.content;
89
- }
90
- function messageHasImages(message) {
91
- return messageParts(message).some((p) => p.type === "image");
92
- }
93
- function isAssistantMessage(message) {
94
- return message.role === "assistant";
95
- }
96
-
97
- // ../../node_modules/conversationalist/dist/schemas.js
98
- import { z } from "zod";
99
- var isPlainObject = (value) => {
100
- if (!value || typeof value !== "object")
101
- return false;
102
- const prototype = Reflect.getPrototypeOf(value);
103
- return prototype === Object.prototype || prototype === null;
104
- };
105
- var jsonValueSchema = z.lazy(() => {
106
- const jsonObjectSchema = z.preprocess((value, ctx) => {
107
- if (!isPlainObject(value)) {
108
- ctx.addIssue({
109
- code: z.ZodIssueCode.custom,
110
- message: "expected a plain object"
111
- });
112
- return z.NEVER;
113
- }
114
- return value;
115
- }, z.record(z.string(), jsonValueSchema));
116
- return z.union([
117
- z.string(),
118
- z.number().refine((value) => Number.isFinite(value), { message: "expected a finite number" }),
119
- z.boolean(),
120
- z.null(),
121
- z.array(jsonValueSchema),
122
- jsonObjectSchema
123
- ]);
124
- });
125
- var multiModalContentSchema = z.discriminatedUnion("type", [
126
- z.object({
127
- type: z.literal("text"),
128
- text: z.string(),
129
- citations: jsonValueSchema.optional()
130
- }),
131
- z.object({
132
- type: z.literal("image"),
133
- url: z.string().url(),
134
- mimeType: z.string().optional(),
135
- text: z.string().optional()
136
- }),
137
- z.object({
138
- type: z.literal("thinking"),
139
- thinking: z.string(),
140
- signature: z.string()
141
- }),
142
- z.object({
143
- type: z.literal("redacted_thinking"),
144
- data: z.string()
145
- }),
146
- z.object({
147
- type: z.literal("server_tool_use"),
148
- id: z.string(),
149
- name: z.string(),
150
- input: jsonValueSchema
151
- }),
152
- z.object({
153
- type: z.literal("web_search_tool_result"),
154
- tool_use_id: z.string(),
155
- content: jsonValueSchema
156
- }),
157
- z.object({
158
- type: z.enum([
159
- "code_execution_tool_result",
160
- "bash_code_execution_tool_result",
161
- "text_editor_code_execution_tool_result",
162
- "web_fetch_tool_result"
163
- ]),
164
- tool_use_id: z.string(),
165
- content: jsonValueSchema
166
- }),
167
- z.object({
168
- type: z.literal("container_upload"),
169
- file_id: z.string()
170
- })
171
- ]).transform((value) => {
172
- if (value.type === "image")
173
- return {
174
- type: "image",
175
- url: value.url,
176
- ...value.mimeType !== undefined ? { mimeType: value.mimeType } : {},
177
- ...value.text !== undefined ? { text: value.text } : {}
178
- };
179
- if (value.type === "text")
180
- return {
181
- type: "text",
182
- text: value.text,
183
- ...value.citations !== undefined ? { citations: value.citations } : {}
184
- };
185
- return value;
186
- });
187
- var messageRoleSchema = z.enum([
188
- "user",
189
- "assistant",
190
- "system",
191
- "developer",
192
- "tool-call",
193
- "tool-result",
194
- "snapshot"
195
- ]);
196
- var toolCallSchema = z.object({
197
- id: z.string(),
198
- name: z.string(),
199
- arguments: jsonValueSchema
200
- }).strict();
201
- var toolCallInputSchema = z.object({
202
- id: z.string().optional(),
203
- name: z.string(),
204
- arguments: jsonValueSchema.optional()
205
- }).strict();
206
- var toolErrorCategorySchema = z.enum([
207
- "validation",
208
- "permission",
209
- "not_found",
210
- "conflict",
211
- "transient",
212
- "timeout",
213
- "cancelled",
214
- "internal"
215
- ]);
216
- var toolErrorSchema = z.object({
217
- code: z.string(),
218
- category: toolErrorCategorySchema,
219
- retryable: z.boolean(),
220
- message: z.string(),
221
- details: jsonValueSchema.optional()
222
- }).strict();
223
- var toolActionSchema = z.object({
224
- type: z.enum(["approval", "input"]),
225
- message: z.string().optional(),
226
- schema: jsonValueSchema.optional()
227
- }).strict();
228
- var toolResultSchema = z.object({
229
- callId: z.string(),
230
- outcome: z.enum([
231
- "success",
232
- "error",
233
- "action_required"
234
- ]),
235
- content: jsonValueSchema,
236
- error: toolErrorSchema.optional(),
237
- action: toolActionSchema.optional(),
238
- inputDigest: z.string().optional(),
239
- outputDigest: z.string().optional()
240
- }).strict();
241
- var tokenUsageSchema = z.object({
242
- prompt: z.number().int().min(0),
243
- completion: z.number().int().min(0),
244
- total: z.number().int().min(0)
245
- });
246
- var messageInputSchema = z.object({
247
- role: messageRoleSchema,
248
- content: z.union([z.string(), z.array(multiModalContentSchema)]),
249
- metadata: z.record(z.string(), jsonValueSchema).optional(),
250
- hidden: z.boolean().optional(),
251
- toolCall: toolCallSchema.optional(),
252
- toolResult: toolResultSchema.optional(),
253
- tokenUsage: tokenUsageSchema.optional(),
254
- goalCompleted: z.boolean().optional()
255
- }).strict();
256
- var messageSchema = z.object({
257
- id: z.string(),
258
- role: messageRoleSchema,
259
- content: z.union([z.string(), z.array(multiModalContentSchema)]),
260
- position: z.number().int().min(0),
261
- createdAt: z.string(),
262
- metadata: z.record(z.string(), jsonValueSchema),
263
- hidden: z.boolean(),
264
- toolCall: toolCallSchema.optional(),
265
- toolResult: toolResultSchema.optional(),
266
- tokenUsage: tokenUsageSchema.optional(),
267
- goalCompleted: z.boolean().optional()
268
- }).strict();
269
- var conversationStatusSchema = z.enum([
270
- "active",
271
- "archived",
272
- "deleted"
273
- ]);
274
- var conversationShape = {
275
- schemaVersion: z.number().int().min(1),
276
- id: z.string(),
277
- title: z.string().optional(),
278
- status: conversationStatusSchema,
279
- metadata: z.record(z.string(), jsonValueSchema),
280
- ids: z.array(z.string()),
281
- messages: z.record(z.string(), messageSchema),
282
- createdAt: z.string(),
283
- updatedAt: z.string()
284
- };
285
- var conversationSchema = z.object(conversationShape).strict();
286
-
287
- // ../../node_modules/conversationalist/dist/transient-Bk0RaCFf.js
288
- function getOrderedMessages(conversation) {
289
- const ordered = [];
290
- for (const id of conversation.ids) {
291
- const message = conversation.messages[id];
292
- if (message)
293
- ordered.push(message);
294
- }
295
- return ordered;
296
- }
297
- function toIdRecord(items) {
298
- const record = {};
299
- for (const item of items)
300
- record[item.id] = item;
301
- return record;
302
- }
303
- var ConversationalistError = class ConversationalistError2 extends Error {
304
- code;
305
- context;
306
- cause;
307
- constructor(code, message, options) {
308
- super(message);
309
- this.name = "ConversationalistError";
310
- this.code = code;
311
- this.context = options?.context;
312
- this.cause = options?.cause;
313
- if (Error.captureStackTrace)
314
- Error.captureStackTrace(this, ConversationalistError2);
315
- }
316
- toDetailedString() {
317
- const parts = [`[${this.code}] ${this.message}`];
318
- if (this.context && Object.keys(this.context).length > 0)
319
- parts.push(`Context: ${JSON.stringify(this.context, null, 2)}`);
320
- if (this.cause)
321
- parts.push(`Caused by: ${this.cause.message}`);
322
- return parts.join(`
323
- `);
324
- }
325
- };
326
- function createInvalidPositionError(expected, actual) {
327
- return new ConversationalistError("error:invalid-position", `invalid position: expected ${expected}, got ${actual}`, { context: {
328
- expected,
329
- actual
330
- } });
331
- }
332
- function createInvalidToolReferenceError(callId) {
333
- return new ConversationalistError("error:invalid-tool-reference", `tool result references non-existent tool-call: ${callId}`, { context: { callId } });
334
- }
335
- function createSerializationError(message, cause) {
336
- return new ConversationalistError("error:serialization", message, { cause });
337
- }
338
- function createValidationError(message, context, cause) {
339
- return new ConversationalistError("error:validation", message, {
340
- context,
341
- cause
342
- });
343
- }
344
- function createIntegrityError(message, context) {
345
- return new ConversationalistError("error:integrity", message, { context });
346
- }
347
- function validateConversationHistoryIntegrity(conversation) {
348
- const issues = [];
349
- const seenIds = /* @__PURE__ */ new Set;
350
- conversation.ids.forEach((id, index) => {
351
- if (seenIds.has(id))
352
- issues.push({
353
- code: "integrity:duplicate-message-id",
354
- message: `duplicate message id in ids: ${id}`,
355
- data: {
356
- id,
357
- position: index
358
- }
359
- });
360
- else
361
- seenIds.add(id);
362
- if (!conversation.messages[id])
363
- issues.push({
364
- code: "integrity:missing-message",
365
- message: `missing message for id ${id}`,
366
- data: {
367
- id,
368
- position: index
369
- }
370
- });
371
- });
372
- for (const id of Object.keys(conversation.messages))
373
- if (!seenIds.has(id))
374
- issues.push({
375
- code: "integrity:unlisted-message",
376
- message: `message ${id} is not listed in ids`,
377
- data: { id }
378
- });
379
- const toolCalls = /* @__PURE__ */ new Map;
380
- conversation.ids.forEach((id, index) => {
381
- const message = conversation.messages[id];
382
- if (!message)
383
- return;
384
- if (message.role === "tool-call" && message.toolCall)
385
- if (toolCalls.has(message.toolCall.id))
386
- issues.push({
387
- code: "integrity:duplicate-tool-call",
388
- message: `duplicate toolCall.id ${message.toolCall.id}`,
389
- data: {
390
- toolCallId: message.toolCall.id,
391
- messageId: message.id
392
- }
393
- });
394
- else
395
- toolCalls.set(message.toolCall.id, {
396
- position: index,
397
- messageId: message.id
398
- });
399
- });
400
- conversation.ids.forEach((id, index) => {
401
- const message = conversation.messages[id];
402
- if (!message)
403
- return;
404
- if (message.role === "tool-result" && message.toolResult) {
405
- const toolCall = toolCalls.get(message.toolResult.callId);
406
- if (!toolCall)
407
- issues.push({
408
- code: "integrity:orphan-tool-result",
409
- message: `tool-result references missing tool-call ${message.toolResult.callId}`,
410
- data: {
411
- callId: message.toolResult.callId,
412
- messageId: message.id
413
- }
414
- });
415
- else if (toolCall.position >= index)
416
- issues.push({
417
- code: "integrity:tool-result-before-call",
418
- message: `tool-result ${message.toolResult.callId} occurs before tool-call`,
419
- data: {
420
- callId: message.toolResult.callId,
421
- messageId: message.id,
422
- toolCallMessageId: toolCall.messageId
423
- }
424
- });
425
- }
426
- });
427
- return issues;
428
- }
429
- function assertConversationHistoryIntegrity(conversation) {
430
- const issues = validateConversationHistoryIntegrity(conversation);
431
- if (issues.length === 0)
432
- return;
433
- throw createIntegrityError("conversation integrity check failed", { issues });
434
- }
435
- function assertConversationSafe(conversation) {
436
- const parsed = conversationSchema.safeParse(conversation);
437
- if (!parsed.success)
438
- throw createValidationError("conversation failed schema validation", { issues: parsed.error.issues });
439
- assertConversationHistoryIntegrity(conversation);
440
- }
441
- function ensureConversationSafe(conversation) {
442
- assertConversationSafe(conversation);
443
- return conversation;
444
- }
445
-
446
- // ../../node_modules/conversationalist/dist/append-l_g0hmrj.js
447
- function normalizeContent(content) {
448
- if (content === undefined)
449
- return;
450
- if (typeof content === "string")
451
- return content;
452
- return Array.isArray(content) ? content : [content];
453
- }
454
- function materializeToolCall(toolCall, options = {}) {
455
- return {
456
- id: toolCall.id ?? options.generateId?.() ?? crypto.randomUUID(),
457
- name: toolCall.name,
458
- arguments: normalizeJSONValue(toolCall.arguments ?? {})
459
- };
460
- }
461
- function materializeToolCalls(toolCalls, options = {}) {
462
- return toolCalls.map((toolCall) => materializeToolCall(toolCall, options));
463
- }
464
- function materializeToolResult(toolResult) {
465
- if (hasStreamingPayload(toolResult))
466
- throw new Error("materializeToolResult does not support streaming tool results. Use materializeToolResultAsync or materializeToolResultsAsync.");
467
- return stripRuntimeToolResultFields(toolResult, normalizeJSONValue(toolResult.content));
468
- }
469
- function materializeToolResults(toolResults) {
470
- return toolResults.map((toolResult) => materializeToolResult(toolResult));
471
- }
472
- async function materializeToolResultAsync(toolResult) {
473
- const streamingPayload = getStreamingPayload(toolResult);
474
- if (!streamingPayload)
475
- return stripRuntimeToolResultFields(toolResult, normalizeJSONValue(toolResult.content));
476
- return stripRuntimeToolResultFields(toolResult, normalizeJSONValue(await collectAsyncIterable(streamingPayload)));
477
- }
478
- async function materializeToolResultsAsync(toolResults) {
479
- return Promise.all(toolResults.map((toolResult) => materializeToolResultAsync(toolResult)));
480
- }
481
- function stripRuntimeToolResultFields(toolResult, content) {
482
- return {
483
- callId: toolResult.callId,
484
- outcome: toolResult.outcome,
485
- content,
486
- ...toolResult.error ? { error: {
487
- code: toolResult.error.code,
488
- category: toolResult.error.category,
489
- retryable: toolResult.error.retryable,
490
- message: toolResult.error.message,
491
- ...toolResult.error.details !== undefined ? { details: normalizeJSONValue(toolResult.error.details) } : {}
492
- } } : {},
493
- ...toolResult.action ? { action: normalizeToolAction(toolResult.action) } : {},
494
- ...toolResult.inputDigest ? { inputDigest: toolResult.inputDigest } : {},
495
- ...toolResult.outputDigest ? { outputDigest: toolResult.outputDigest } : {}
496
- };
497
- }
498
- function normalizeToolAction(action) {
499
- return {
500
- type: action.type,
501
- ...action.message ? { message: action.message } : {},
502
- ...action.schema !== undefined ? { schema: normalizeJSONValue(action.schema) } : {}
503
- };
504
- }
505
- function hasStreamingPayload(toolResult) {
506
- return getStreamingPayload(toolResult) !== undefined;
507
- }
508
- function getStreamingPayload(toolResult) {
509
- if (toolResult.stream)
510
- return toolResult.stream;
511
- if (isAsyncIterable(toolResult.result))
512
- return toolResult.result;
513
- }
514
- function isAsyncIterable(value) {
515
- if (!value || typeof value !== "object" && typeof value !== "function")
516
- return false;
517
- return Symbol.asyncIterator in value;
518
- }
519
- function normalizeJSONValue(value) {
520
- if (value === undefined)
521
- return null;
522
- try {
523
- assertJSONValue(value, "tool materialization");
524
- return value;
525
- } catch {
526
- try {
527
- const serialized = JSON.stringify(value);
528
- return serialized === undefined ? stringifyNonJSON(value) : JSON.parse(serialized);
529
- } catch {
530
- return stringifyNonJSON(value);
531
- }
532
- }
533
- }
534
- function stringifyNonJSON(value) {
535
- return String(value);
536
- }
537
- function assertJSONValue(value, path) {
538
- const stack = /* @__PURE__ */ new WeakSet;
539
- const walk = (current, currentPath) => {
540
- if (current === null)
541
- return;
542
- const type = typeof current;
543
- if (type === "string" || type === "boolean")
544
- return;
545
- if (type === "number") {
546
- if (Number.isFinite(current))
547
- return;
548
- throw new TypeError(`Non-finite number at ${currentPath}`);
549
- }
550
- if (type === "undefined" || type === "bigint" || type === "function" || type === "symbol")
551
- throw new TypeError(`Invalid JSON value at ${currentPath}`);
552
- if (Array.isArray(current)) {
553
- if (stack.has(current))
554
- throw new TypeError(`Circular reference detected at ${currentPath}`);
555
- stack.add(current);
556
- for (let index = 0;index < current.length; index += 1)
557
- walk(current[index], `${currentPath}[${index}]`);
558
- stack.delete(current);
559
- return;
560
- }
561
- if (type === "object") {
562
- if (!isPlainObject2(current))
563
- throw new TypeError(`Non-plain object is not valid JSON at ${currentPath}`);
564
- const record = current;
565
- if (stack.has(record))
566
- throw new TypeError(`Circular reference detected at ${currentPath}`);
567
- stack.add(record);
568
- for (const key of Object.keys(record))
569
- walk(record[key], `${currentPath}.${key}`);
570
- stack.delete(record);
571
- }
572
- };
573
- walk(value, path);
574
- }
575
- function isPlainObject2(value) {
576
- if (!value || typeof value !== "object")
577
- return false;
578
- const prototype = Reflect.getPrototypeOf(value);
579
- return prototype === Object.prototype || prototype === null;
580
- }
581
- async function collectAsyncIterable(stream) {
582
- const chunks = [];
583
- for await (const chunk of stream)
584
- chunks.push(chunk);
585
- return chunks;
586
- }
587
- function pairToolCallsWithResults(messages) {
588
- const isMessageArray = (value) => Array.isArray(value);
589
- const ordered = isMessageArray(messages) ? messages : Object.values(messages).sort((a, b) => a.position - b.position);
590
- const pairs = [];
591
- const resultsMap = /* @__PURE__ */ new Map;
592
- for (const msg of ordered)
593
- if (msg.toolResult)
594
- resultsMap.set(msg.toolResult.callId, msg.toolResult);
595
- for (const msg of ordered)
596
- if (msg.toolCall)
597
- pairs.push({
598
- call: msg.toolCall,
599
- result: resultsMap.get(msg.toolCall.id)
600
- });
601
- return pairs;
602
- }
603
- function appendToolCall(conversation, toolCall, options, environment) {
604
- const resolvedEnvironment = resolveConversationEnvironment(isConversationEnvironmentParameter(options) ? options : environment);
605
- const resolvedOptions = isConversationEnvironmentParameter(options) ? undefined : options;
606
- return appendMessages(conversation, createToolCallMessageInput(materializeToolCall(toolCall, { generateId: resolvedEnvironment.randomId }), resolvedOptions), resolvedEnvironment);
607
- }
608
- function appendToolCalls(conversation, toolCalls, environment) {
609
- if (toolCalls.length === 0)
610
- return conversation;
611
- const resolvedEnvironment = resolveConversationEnvironment(environment);
612
- return appendMessages(conversation, ...materializeToolCalls(toolCalls, { generateId: resolvedEnvironment.randomId }).map((toolCall) => createToolCallMessageInput(toolCall, undefined)), resolvedEnvironment);
613
- }
614
- function appendToolResult(conversation, toolResult, options, environment) {
615
- const resolvedOptions = isConversationEnvironmentParameter(options) ? undefined : options;
616
- return appendMessages(conversation, createToolResultMessageInput(materializeToolResult(toolResult), resolvedOptions), isConversationEnvironmentParameter(options) ? options : environment);
617
- }
618
- function appendToolResults(conversation, toolResults, environment) {
619
- if (toolResults.length === 0)
620
- return conversation;
621
- return appendMessages(conversation, ...materializeToolResults(toolResults).map((toolResult) => createToolResultMessageInput(toolResult, undefined)), environment);
622
- }
623
- async function appendToolResultAsync(conversation, toolResult, options, environment) {
624
- const resolvedOptions = isConversationEnvironmentParameter(options) ? undefined : options;
625
- return appendMessages(conversation, createToolResultMessageInput(await materializeToolResultAsync(toolResult), resolvedOptions), isConversationEnvironmentParameter(options) ? options : environment);
626
- }
627
- async function appendToolResultsAsync(conversation, toolResults, environment) {
628
- if (toolResults.length === 0)
629
- return conversation;
630
- return appendMessages(conversation, ...(await materializeToolResultsAsync(toolResults)).map((toolResult) => createToolResultMessageInput(toolResult, undefined)), environment);
631
- }
632
- function getPendingToolCalls(conversation) {
633
- const orderedMessages = getOrderedMessages(conversation);
634
- const completedCallIdentifiers = /* @__PURE__ */ new Set;
635
- for (const message of orderedMessages)
636
- if (message.role === "tool-result" && message.toolResult)
637
- completedCallIdentifiers.add(message.toolResult.callId);
638
- const pendingToolCalls = [];
639
- for (const message of orderedMessages)
640
- if (message.role === "tool-call" && message.toolCall) {
641
- if (!completedCallIdentifiers.has(message.toolCall.id))
642
- pendingToolCalls.push(message.toolCall);
643
- }
644
- return pendingToolCalls;
645
- }
646
- function getToolInteractions(conversation) {
647
- return pairToolCallsWithResults(getOrderedMessages(conversation));
648
- }
649
- function createToolCallMessageInput(toolCall, options) {
650
- return {
651
- role: "tool-call",
652
- content: options?.content ?? "",
653
- metadata: options?.metadata,
654
- hidden: options?.hidden,
655
- toolCall,
656
- tokenUsage: options?.tokenUsage
657
- };
658
- }
659
- function createToolResultMessageInput(toolResult, options) {
660
- return {
661
- role: "tool-result",
662
- content: options?.content ?? "",
663
- metadata: options?.metadata,
664
- hidden: options?.hidden,
665
- toolResult,
666
- tokenUsage: options?.tokenUsage
667
- };
668
- }
669
- function toSessionInfo(conversation) {
670
- return {
671
- id: conversation.id,
672
- ...conversation.title !== undefined ? { title: conversation.title } : {},
673
- tags: conversation.metadata["_tags"] ?? [],
674
- createdAt: conversation.createdAt,
675
- updatedAt: conversation.updatedAt,
676
- messageCount: conversation.ids.length
677
- };
678
- }
679
- function partCharLength(part) {
680
- switch (part.type) {
681
- case "text":
682
- return part.text.length + (part.citations !== undefined ? JSON.stringify(part.citations).length : 0);
683
- case "image":
684
- return (part.text ?? "").length + (part.url?.length ?? 0);
685
- case "thinking":
686
- return part.thinking.length + part.signature.length;
687
- case "redacted_thinking":
688
- return part.data.length;
689
- case "server_tool_use":
690
- return part.name.length + JSON.stringify(part.input).length;
691
- case "web_search_tool_result":
692
- return JSON.stringify(part.content).length;
693
- case "code_execution_tool_result":
694
- case "bash_code_execution_tool_result":
695
- case "text_editor_code_execution_tool_result":
696
- case "web_fetch_tool_result":
697
- return JSON.stringify(part.content).length;
698
- case "container_upload":
699
- return part.file_id.length;
700
- }
701
- }
702
- function simpleTokenEstimator(message) {
703
- if (typeof message.content === "string")
704
- return Math.ceil(message.content.length / 4);
705
- const total = messageParts(message).reduce((sum, part) => sum + partCharLength(part), 0);
706
- return Math.ceil(total / 4);
707
- }
708
- var defaultConversationEnvironment = {
709
- now: () => (/* @__PURE__ */ new Date()).toISOString(),
710
- randomId: () => crypto.randomUUID(),
711
- estimateTokens: simpleTokenEstimator,
712
- plugins: []
713
- };
714
- function resolveConversationEnvironment(environment) {
715
- return {
716
- now: environment?.now ?? defaultConversationEnvironment.now,
717
- randomId: environment?.randomId ?? defaultConversationEnvironment.randomId,
718
- estimateTokens: environment?.estimateTokens ?? defaultConversationEnvironment.estimateTokens,
719
- plugins: [...environment?.plugins ?? defaultConversationEnvironment.plugins],
720
- ...environment?.persistence ? { persistence: environment.persistence } : {},
721
- ...environment?.persistenceDebounceMilliseconds !== undefined ? { persistenceDebounceMilliseconds: environment.persistenceDebounceMilliseconds } : {},
722
- ...environment?.setTimeoutFunction ? { setTimeoutFunction: environment.setTimeoutFunction } : {},
723
- ...environment?.clearTimeoutFunction ? { clearTimeoutFunction: environment.clearTimeoutFunction } : {},
724
- ...environment?.maxHistoryDepth !== undefined ? { maxHistoryDepth: environment.maxHistoryDepth } : {}
725
- };
726
- }
727
- function isConversationEnvironmentParameter(value) {
728
- if (!value || typeof value !== "object" || value === null)
729
- return false;
730
- if ("role" in value)
731
- return false;
732
- const candidate = value;
733
- return typeof candidate["now"] === "function" || typeof candidate["randomId"] === "function" || typeof candidate["estimateTokens"] === "function" || Array.isArray(candidate["plugins"]) && candidate["plugins"].length > 0 || typeof candidate["persistence"] === "object" && candidate["persistence"] !== null;
734
- }
735
- var buildToolUseIndex = (messages) => messages.reduce((index, message) => {
736
- if (message.role === "tool-call" && message.toolCall)
737
- index.set(message.toolCall.id, { name: message.toolCall.name });
738
- return index;
739
- }, /* @__PURE__ */ new Map);
740
- var registerToolUse = (index, toolCall) => {
741
- const next = new Map(index);
742
- next.set(toolCall.id, { name: toolCall.name });
743
- return next;
744
- };
745
- var assertToolReference = (index, callId) => {
746
- if (!index.has(callId))
747
- throw createInvalidToolReferenceError(callId);
748
- };
749
- function partitionAppendArgs(args) {
750
- const filtered = args.filter((arg) => arg !== undefined);
751
- if (filtered.length === 0)
752
- return { inputs: [] };
753
- const last = filtered[filtered.length - 1];
754
- if (isConversationEnvironmentParameter(last))
755
- return {
756
- inputs: filtered.slice(0, -1),
757
- environment: last
758
- };
759
- return { inputs: filtered };
760
- }
761
- function appendMessages(conversation, ...args) {
762
- return appendMessagesInternal(conversation, args, true);
763
- }
764
- var appendMessagesInternal = (conversation, args, validate) => {
765
- const { inputs, environment } = partitionAppendArgs(args);
766
- const resolvedEnvironment = resolveConversationEnvironment(environment);
767
- const now = resolvedEnvironment.now();
768
- const startPosition = conversation.ids.length;
769
- const initialToolUses = validate ? buildToolUseIndex(getOrderedMessages(conversation)) : /* @__PURE__ */ new Map;
770
- const { messages } = inputs.reduce((state, input, index) => {
771
- const processedInput = resolvedEnvironment.plugins.reduce((acc, plugin) => plugin(acc), input);
772
- if (validate && processedInput.role === "tool-result" && processedInput.toolResult)
773
- assertToolReference(state.toolUses, processedInput.toolResult.callId);
774
- const normalizedContent = normalizeContent(processedInput.content);
775
- const baseMessage = {
776
- id: resolvedEnvironment.randomId(),
777
- role: processedInput.role,
778
- content: normalizedContent,
779
- position: startPosition + index,
780
- createdAt: now,
781
- metadata: { ...processedInput.metadata ?? {} },
782
- hidden: processedInput.hidden ?? false,
783
- toolCall: processedInput.toolCall,
784
- toolResult: processedInput.toolResult,
785
- tokenUsage: processedInput.tokenUsage
786
- };
787
- let message;
788
- if (processedInput.role === "assistant")
789
- message = createMessage({
790
- ...baseMessage,
791
- role: "assistant",
792
- goalCompleted: processedInput.goalCompleted
793
- });
794
- else
795
- message = createMessage(baseMessage);
796
- let toolUses = state.toolUses;
797
- if (processedInput.role === "tool-call" && processedInput.toolCall) {
798
- if (validate && state.toolUses.has(processedInput.toolCall.id))
799
- throw createIntegrityError("duplicate toolCall.id in conversation", {
800
- toolCallId: processedInput.toolCall.id,
801
- messageId: baseMessage.id
802
- });
803
- toolUses = validate ? registerToolUse(state.toolUses, processedInput.toolCall) : state.toolUses;
804
- }
805
- return {
806
- toolUses,
807
- messages: [...state.messages, message]
808
- };
809
- }, {
810
- toolUses: initialToolUses,
811
- messages: []
812
- });
813
- const messageIds = messages.map((message) => message.id);
814
- const readonly = toReadonly({
815
- ...conversation,
816
- ids: [...conversation.ids, ...messageIds],
817
- messages: {
818
- ...conversation.messages,
819
- ...toIdRecord(messages)
820
- },
821
- updatedAt: now
822
- });
823
- return validate ? ensureConversationSafe(readonly) : readonly;
824
- };
825
- function appendUserMessage(conversation, content, metadata, environment) {
826
- const resolvedEnvironment = isConversationEnvironmentParameter(metadata) ? metadata : environment;
827
- return appendMessages(conversation, {
828
- role: "user",
829
- content,
830
- metadata: isConversationEnvironmentParameter(metadata) ? undefined : metadata
831
- }, resolvedEnvironment);
832
- }
833
- function appendAssistantMessage(conversation, content, metadata, environment) {
834
- const resolvedEnvironment = isConversationEnvironmentParameter(metadata) ? metadata : environment;
835
- return appendMessages(conversation, {
836
- role: "assistant",
837
- content,
838
- metadata: isConversationEnvironmentParameter(metadata) ? undefined : metadata
839
- }, resolvedEnvironment);
840
- }
841
- function appendSystemMessage(conversation, content, metadata, environment) {
842
- const resolvedEnvironment = isConversationEnvironmentParameter(metadata) ? metadata : environment;
843
- return appendMessages(conversation, {
844
- role: "system",
845
- content,
846
- metadata: isConversationEnvironmentParameter(metadata) ? undefined : metadata
847
- }, resolvedEnvironment);
848
- }
849
-
850
- // ../../node_modules/conversationalist/dist/tool-results-DKQs9ZGX.js
851
- function redactToolResult(toolResult, placeholder) {
852
- return {
853
- ...toolResult,
854
- content: placeholder
855
- };
856
- }
857
-
858
- // ../../node_modules/conversationalist/dist/conversation-7sbYchzO.js
859
- function createConversationHistory(options, environment) {
860
- const resolvedEnvironment = resolveConversationEnvironment(environment);
861
- const now = resolvedEnvironment.now();
862
- return ensureConversationSafe(toReadonly({
863
- schemaVersion: 4,
864
- id: options?.id ?? resolvedEnvironment.randomId(),
865
- title: options?.title,
866
- status: options?.status ?? "active",
867
- metadata: { ...options?.metadata ?? {} },
868
- ids: [],
869
- messages: {},
870
- createdAt: now,
871
- updatedAt: now
872
- }));
873
- }
874
- function getMessages(conversation, options) {
875
- const includeHidden = options?.includeHidden ?? false;
876
- const ordered = getOrderedMessages(conversation);
877
- return includeHidden ? ordered : ordered.filter((m) => !m.hidden);
878
- }
879
- function getMessageAtPosition(conversation, position) {
880
- const id = conversation.ids[position];
881
- return id ? conversation.messages[id] : undefined;
882
- }
883
- function getMessageIds(conversation) {
884
- return [...conversation.ids];
885
- }
886
- function getMessageById(conversation, id) {
887
- return conversation.messages[id];
888
- }
889
- function searchConversationMessages(conversation, predicate) {
890
- return getOrderedMessages(conversation).filter(predicate);
891
- }
892
- function getStatistics(conversation) {
893
- const ordered = getOrderedMessages(conversation);
894
- const stats = ordered.reduce((acc, message) => {
895
- return {
896
- byRole: {
897
- ...acc.byRole,
898
- [message.role]: (acc.byRole[message.role] ?? 0) + 1
899
- },
900
- hidden: acc.hidden + (message.hidden ? 1 : 0),
901
- withImages: acc.withImages + (messageHasImages(message) ? 1 : 0)
902
- };
903
- }, {
904
- byRole: {},
905
- hidden: 0,
906
- withImages: 0
907
- });
908
- return {
909
- total: ordered.length,
910
- ...stats
911
- };
912
- }
913
- function hasSystemMessage(conversation) {
914
- return getOrderedMessages(conversation).some((m) => m.role === "system");
915
- }
916
- function getFirstSystemMessage(conversation) {
917
- return getOrderedMessages(conversation).find((m) => m.role === "system");
918
- }
919
- function getSystemMessages(conversation) {
920
- return getOrderedMessages(conversation).filter((m) => m.role === "system");
921
- }
922
- function prependSystemMessage(conversation, content, metadata, environment) {
923
- const resolvedEnvironment = resolveConversationEnvironment(isConversationEnvironmentParameter(metadata) ? metadata : environment);
924
- const resolvedMetadata = isConversationEnvironmentParameter(metadata) ? undefined : metadata;
925
- const now = resolvedEnvironment.now();
926
- const newMessage = createMessage({
927
- id: resolvedEnvironment.randomId(),
928
- role: "system",
929
- content,
930
- position: 0,
931
- createdAt: now,
932
- metadata: { ...resolvedMetadata ?? {} },
933
- hidden: false,
934
- toolCall: undefined,
935
- toolResult: undefined,
936
- tokenUsage: undefined
937
- });
938
- const ordered = getOrderedMessages(conversation);
939
- const renumberedMessages = ordered.map((message) => createMessage({
940
- id: message.id,
941
- role: message.role,
942
- content: copyContent(message.content),
943
- position: message.position + 1,
944
- createdAt: message.createdAt,
945
- metadata: { ...message.metadata },
946
- hidden: message.hidden,
947
- toolCall: message.toolCall,
948
- toolResult: message.toolResult,
949
- tokenUsage: message.tokenUsage
950
- }));
951
- return ensureConversationSafe(toReadonly({
952
- ...conversation,
953
- ids: [newMessage.id, ...ordered.map((message) => message.id)],
954
- messages: toIdRecord([newMessage, ...renumberedMessages]),
955
- updatedAt: now
956
- }));
957
- }
958
- function replaceSystemMessage(conversation, content, metadata, environment) {
959
- const resolvedEnvironment = resolveConversationEnvironment(isConversationEnvironmentParameter(metadata) ? metadata : environment);
960
- const resolvedMetadata = isConversationEnvironmentParameter(metadata) ? undefined : metadata;
961
- const now = resolvedEnvironment.now();
962
- const ordered = getOrderedMessages(conversation);
963
- const firstSystemIndex = ordered.findIndex((m) => m.role === "system");
964
- if (firstSystemIndex === -1)
965
- return prependSystemMessage(conversation, content, resolvedMetadata, resolvedEnvironment);
966
- const original = ordered[firstSystemIndex];
967
- const replaced = createMessage({
968
- id: original.id,
969
- role: "system",
970
- content,
971
- position: original.position,
972
- createdAt: original.createdAt,
973
- metadata: { ...resolvedMetadata ?? original.metadata },
974
- hidden: original.hidden,
975
- toolCall: undefined,
976
- toolResult: undefined,
977
- tokenUsage: undefined
978
- });
979
- return ensureConversationSafe(toReadonly({
980
- ...conversation,
981
- ids: [...conversation.ids],
982
- messages: {
983
- ...conversation.messages,
984
- [replaced.id]: replaced
985
- },
986
- updatedAt: now
987
- }));
988
- }
989
- function collapseSystemMessages(conversation, environment) {
990
- const ordered = getOrderedMessages(conversation);
991
- const systemMessages = ordered.filter((m) => m.role === "system");
992
- if (systemMessages.length <= 1)
993
- return ensureConversationSafe(conversation);
994
- const now = resolveConversationEnvironment(environment).now();
995
- const { parts } = systemMessages.reduce((state, message) => {
996
- const contentStr = typeof message.content === "string" ? message.content : message.content.map((part) => part.type === "text" ? part.text : "").join("");
997
- if (!contentStr || state.seen.has(contentStr))
998
- return state;
999
- const seen = new Set(state.seen);
1000
- seen.add(contentStr);
1001
- return {
1002
- seen,
1003
- parts: [...state.parts, contentStr]
1004
- };
1005
- }, {
1006
- seen: /* @__PURE__ */ new Set,
1007
- parts: []
1008
- });
1009
- const collapsedContent = parts.join(`
1010
- `);
1011
- const firstSystemMsg = systemMessages[0];
1012
- const collapsed = createMessage({
1013
- id: firstSystemMsg.id,
1014
- role: "system",
1015
- content: collapsedContent,
1016
- position: firstSystemMsg.position,
1017
- createdAt: firstSystemMsg.createdAt,
1018
- metadata: { ...firstSystemMsg.metadata },
1019
- hidden: firstSystemMsg.hidden,
1020
- toolCall: undefined,
1021
- toolResult: undefined,
1022
- tokenUsage: undefined
1023
- });
1024
- const systemIdsToRemove = systemMessages.slice(1).reduce((ids, message) => {
1025
- const nextIds = new Set(ids);
1026
- nextIds.add(message.id);
1027
- return nextIds;
1028
- }, /* @__PURE__ */ new Set);
1029
- const renumbered = ordered.filter((m) => !systemIdsToRemove.has(m.id)).map((m) => m.id === firstSystemMsg.id ? collapsed : m).map((message, index) => {
1030
- if (message.position === index)
1031
- return message;
1032
- return createMessage({
1033
- id: message.id,
1034
- role: message.role,
1035
- content: copyContent(message.content),
1036
- position: index,
1037
- createdAt: message.createdAt,
1038
- metadata: { ...message.metadata },
1039
- hidden: message.hidden,
1040
- toolCall: message.toolCall,
1041
- toolResult: message.toolResult,
1042
- tokenUsage: message.tokenUsage
1043
- });
1044
- });
1045
- return ensureConversationSafe(toReadonly({
1046
- ...conversation,
1047
- ids: renumbered.map((message) => message.id),
1048
- messages: toIdRecord(renumbered),
1049
- updatedAt: now
1050
- }));
1051
- }
1052
- var isRedactMessageOptions = (value) => {
1053
- if (!value || typeof value !== "object")
1054
- return false;
1055
- const candidate = value;
1056
- return "placeholder" in candidate || "redactToolArguments" in candidate || "redactToolResults" in candidate || "clearToolMetadata" in candidate;
1057
- };
1058
- function redactMessageAtPosition(conversation, position, placeholderOrOptions, environment) {
1059
- let placeholder = "[REDACTED]";
1060
- let options = {};
1061
- let env = environment;
1062
- if (typeof placeholderOrOptions === "string")
1063
- placeholder = placeholderOrOptions;
1064
- else if (placeholderOrOptions) {
1065
- if (!environment && isConversationEnvironmentParameter(placeholderOrOptions))
1066
- env = placeholderOrOptions;
1067
- else if (isRedactMessageOptions(placeholderOrOptions)) {
1068
- options = placeholderOrOptions;
1069
- if (options.placeholder)
1070
- placeholder = options.placeholder;
1071
- }
1072
- }
1073
- const redactToolArguments = options.redactToolArguments ?? true;
1074
- const redactToolResults = options.redactToolResults ?? true;
1075
- const clearToolMetadata = options.clearToolMetadata ?? false;
1076
- if (position < 0 || position >= conversation.ids.length)
1077
- throw createInvalidPositionError(conversation.ids.length - 1, position);
1078
- const id = conversation.ids[position];
1079
- const original = id ? conversation.messages[id] : undefined;
1080
- if (!original)
1081
- throw createInvalidPositionError(conversation.ids.length - 1, position);
1082
- let toolCall = original.toolCall ? { ...original.toolCall } : undefined;
1083
- let toolResult = original.toolResult ? { ...original.toolResult } : undefined;
1084
- if (clearToolMetadata) {
1085
- toolCall = undefined;
1086
- toolResult = undefined;
1087
- } else {
1088
- if (original.role === "tool-call" && toolCall)
1089
- toolCall = {
1090
- ...toolCall,
1091
- arguments: redactToolArguments ? placeholder : toolCall.arguments
1092
- };
1093
- if (original.role === "tool-result" && toolResult)
1094
- toolResult = redactToolResults ? redactToolResult(toolResult, placeholder) : { ...toolResult };
1095
- }
1096
- const redacted = createMessage({
1097
- id: original.id,
1098
- role: original.role,
1099
- content: placeholder,
1100
- position: original.position,
1101
- createdAt: original.createdAt,
1102
- metadata: { ...original.metadata },
1103
- hidden: original.hidden,
1104
- toolCall,
1105
- toolResult,
1106
- tokenUsage: original.tokenUsage ? { ...original.tokenUsage } : undefined
1107
- });
1108
- const now = resolveConversationEnvironment(env).now();
1109
- return ensureConversationSafe(toReadonly({
1110
- ...conversation,
1111
- ids: [...conversation.ids],
1112
- messages: {
1113
- ...conversation.messages,
1114
- [redacted.id]: redacted
1115
- },
1116
- updatedAt: now
1117
- }));
1118
- }
1119
- function normalizeLegacyToolCall(toolCall) {
1120
- if (!toolCall || typeof toolCall !== "object")
1121
- return toolCall;
1122
- const record = { ...toolCall };
1123
- if (!("arguments" in record) && "args" in record)
1124
- record["arguments"] = record["args"];
1125
- delete record["args"];
1126
- return record;
1127
- }
1128
- function normalizeLegacyToolResult(toolResult) {
1129
- if (!toolResult || typeof toolResult !== "object")
1130
- return toolResult;
1131
- const record = { ...toolResult };
1132
- if (!("content" in record) && "result" in record)
1133
- record["content"] = record["result"];
1134
- delete record["result"];
1135
- return record;
1136
- }
1137
- function normalizeLegacyConversationData(json) {
1138
- if (!json || typeof json !== "object")
1139
- return json;
1140
- const conversation = { ...json };
1141
- const messagesValue = conversation["messages"];
1142
- if (!messagesValue || typeof messagesValue !== "object")
1143
- return conversation;
1144
- const normalizedMessages = {};
1145
- for (const [messageId, messageValue] of Object.entries(messagesValue)) {
1146
- if (!messageValue || typeof messageValue !== "object") {
1147
- normalizedMessages[messageId] = messageValue;
1148
- continue;
1149
- }
1150
- const message = { ...messageValue };
1151
- if (message["role"] === "tool-use")
1152
- message["role"] = "tool-call";
1153
- if ("toolCall" in message)
1154
- message["toolCall"] = normalizeLegacyToolCall(message["toolCall"]);
1155
- if ("toolResult" in message)
1156
- message["toolResult"] = normalizeLegacyToolResult(message["toolResult"]);
1157
- normalizedMessages[messageId] = message;
1158
- }
1159
- conversation["messages"] = normalizedMessages;
1160
- return conversation;
1161
- }
1162
- function normalizeToolResult(toolResult) {
1163
- if (!toolResult)
1164
- return;
1165
- return {
1166
- callId: toolResult.callId,
1167
- outcome: toolResult.outcome,
1168
- content: toolResult.content,
1169
- ...toolResult.error ? { error: { ...toolResult.error } } : {},
1170
- ...toolResult.action ? { action: { ...toolResult.action } } : {},
1171
- ...toolResult.inputDigest ? { inputDigest: toolResult.inputDigest } : {},
1172
- ...toolResult.outputDigest ? { outputDigest: toolResult.outputDigest } : {}
1173
- };
1174
- }
1175
- function normalizeMessage(message) {
1176
- const base = {
1177
- id: message.id,
1178
- role: message.role,
1179
- content: message.content,
1180
- position: message.position,
1181
- createdAt: message.createdAt,
1182
- metadata: message.metadata,
1183
- hidden: message.hidden,
1184
- toolCall: message.toolCall ? { ...message.toolCall } : undefined,
1185
- toolResult: normalizeToolResult(message.toolResult),
1186
- tokenUsage: message.tokenUsage ? { ...message.tokenUsage } : undefined
1187
- };
1188
- if (isAssistantMessage(message))
1189
- return {
1190
- ...base,
1191
- role: "assistant",
1192
- goalCompleted: message.goalCompleted
1193
- };
1194
- return base;
1195
- }
1196
- function deserializeConversationHistory(json) {
1197
- const parsed = conversationSchema.safeParse(normalizeLegacyConversationData(json));
1198
- if (!parsed.success)
1199
- throw createSerializationError("failed to deserialize conversation: invalid data");
1200
- const data = parsed.data;
1201
- try {
1202
- const messageIds = new Set(Object.keys(data.messages));
1203
- const orderedMessages = data.ids.map((id, index) => {
1204
- const message = data.messages[id];
1205
- if (!message)
1206
- throw createSerializationError(`missing message for id ${id}`);
1207
- if (message.position !== index)
1208
- throw createInvalidPositionError(index, message.position);
1209
- messageIds.delete(id);
1210
- return normalizeMessage(message);
1211
- });
1212
- if (messageIds.size > 0)
1213
- throw createSerializationError(`messages not listed in ids: ${[...messageIds].join(", ")}`);
1214
- orderedMessages.reduce((state, message) => {
1215
- if (message.role === "tool-call" && message.toolCall)
1216
- return { toolUses: registerToolUse(state.toolUses, message.toolCall) };
1217
- if (message.role === "tool-result" && message.toolResult)
1218
- assertToolReference(state.toolUses, message.toolResult.callId);
1219
- return state;
1220
- }, { toolUses: /* @__PURE__ */ new Map });
1221
- const messageInstances = orderedMessages.map((message) => createMessage(message));
1222
- const readonly = toReadonly({
1223
- schemaVersion: data.schemaVersion,
1224
- id: data.id,
1225
- title: data.title,
1226
- status: data.status,
1227
- metadata: { ...data.metadata },
1228
- ids: orderedMessages.map((message) => message.id),
1229
- messages: toIdRecord(messageInstances),
1230
- createdAt: data.createdAt,
1231
- updatedAt: data.updatedAt
1232
- });
1233
- assertConversationHistoryIntegrity(readonly);
1234
- return readonly;
1235
- } catch (error) {
1236
- throw createSerializationError(`failed to deserialize conversation: ${error instanceof Error ? error.message : String(error)}`, error);
1237
- }
1238
- }
1239
- function toChatMessages(conversation) {
1240
- assertConversationSafe(conversation);
1241
- const roleMap = {
1242
- user: "user",
1243
- assistant: "assistant",
1244
- system: "system",
1245
- developer: "system",
1246
- "tool-call": "assistant",
1247
- "tool-result": "user",
1248
- snapshot: "system"
1249
- };
1250
- const result = [];
1251
- for (const message of getOrderedMessages(conversation)) {
1252
- if (message.hidden)
1253
- continue;
1254
- const externalRole = roleMap[message.role];
1255
- result.push({
1256
- role: externalRole,
1257
- content: message.content
1258
- });
1259
- }
1260
- return result;
1261
- }
1262
-
1263
- // ../../node_modules/conversationalist/dist/streaming.js
1264
- var STREAMING_KEY = "__streaming";
1265
- var cloneMessage = (original, overrides = {}) => {
1266
- const baseMessage = {
1267
- id: original.id,
1268
- role: original.role,
1269
- content: overrides.content ?? (typeof original.content === "string" ? original.content : [...original.content]),
1270
- position: overrides.position ?? original.position,
1271
- createdAt: original.createdAt,
1272
- metadata: overrides.metadata ?? { ...original.metadata },
1273
- hidden: original.hidden,
1274
- toolCall: original.toolCall ? { ...original.toolCall } : undefined,
1275
- toolResult: original.toolResult ? { ...original.toolResult } : undefined,
1276
- tokenUsage: overrides.tokenUsage
1277
- };
1278
- if (isAssistantMessage(original))
1279
- return createMessage({
1280
- ...baseMessage,
1281
- role: "assistant",
1282
- goalCompleted: original.goalCompleted
1283
- });
1284
- return createMessage(baseMessage);
1285
- };
1286
- function isStreamingMessage(message) {
1287
- return message.metadata[STREAMING_KEY] === true;
1288
- }
1289
- function getStreamingMessage(conversation) {
1290
- return getOrderedMessages(conversation).find(isStreamingMessage);
1291
- }
1292
- function appendStreamingMessage(conversation, role, metadata, environment) {
1293
- const resolvedEnvironment = resolveConversationEnvironment(isConversationEnvironmentParameter(metadata) ? metadata : environment);
1294
- const resolvedMetadata = isConversationEnvironmentParameter(metadata) ? undefined : metadata;
1295
- const now = resolvedEnvironment.now();
1296
- const messageId = resolvedEnvironment.randomId();
1297
- const newMessage = createMessage({
1298
- id: messageId,
1299
- role,
1300
- content: "",
1301
- position: conversation.ids.length,
1302
- createdAt: now,
1303
- metadata: {
1304
- ...resolvedMetadata ?? {},
1305
- [STREAMING_KEY]: true
1306
- },
1307
- hidden: false,
1308
- toolCall: undefined,
1309
- toolResult: undefined,
1310
- tokenUsage: undefined
1311
- });
1312
- return {
1313
- conversation: ensureConversationSafe(toReadonly({
1314
- ...conversation,
1315
- ids: [...conversation.ids, messageId],
1316
- messages: {
1317
- ...conversation.messages,
1318
- [messageId]: newMessage
1319
- },
1320
- updatedAt: now
1321
- })),
1322
- messageId
1323
- };
1324
- }
1325
- function updateStreamingMessage(conversation, messageId, content, environment) {
1326
- const now = resolveConversationEnvironment(environment).now();
1327
- const original = conversation.messages[messageId];
1328
- if (!original)
1329
- return ensureConversationSafe(conversation);
1330
- const overrides = { content: typeof content === "string" ? content : [...content] };
1331
- if (original.tokenUsage)
1332
- overrides.tokenUsage = { ...original.tokenUsage };
1333
- const updated = cloneMessage(original, overrides);
1334
- return ensureConversationSafe(toReadonly({
1335
- ...conversation,
1336
- ids: [...conversation.ids],
1337
- messages: {
1338
- ...conversation.messages,
1339
- [updated.id]: updated
1340
- },
1341
- updatedAt: now
1342
- }));
1343
- }
1344
- function finalizeStreamingMessage(conversation, messageId, options, environment) {
1345
- const resolvedEnvironment = resolveConversationEnvironment(isConversationEnvironmentParameter(options) ? options : environment);
1346
- const resolvedOptions = isConversationEnvironmentParameter(options) ? undefined : options;
1347
- const now = resolvedEnvironment.now();
1348
- const original = conversation.messages[messageId];
1349
- if (!original)
1350
- return ensureConversationSafe(conversation);
1351
- const { [STREAMING_KEY]: _, ...restMetadata } = original.metadata;
1352
- const finalizeOverrides = { metadata: {
1353
- ...restMetadata,
1354
- ...resolvedOptions?.metadata ?? {}
1355
- } };
1356
- if (resolvedOptions?.tokenUsage)
1357
- finalizeOverrides.tokenUsage = { ...resolvedOptions.tokenUsage };
1358
- const updated = cloneMessage(original, finalizeOverrides);
1359
- return ensureConversationSafe(toReadonly({
1360
- ...conversation,
1361
- ids: [...conversation.ids],
1362
- messages: {
1363
- ...conversation.messages,
1364
- [updated.id]: updated
1365
- },
1366
- updatedAt: now
1367
- }));
1368
- }
1369
- function cancelStreamingMessage(conversation, messageId, environment) {
1370
- const now = resolveConversationEnvironment(environment).now();
1371
- if (!conversation.messages[messageId])
1372
- return ensureConversationSafe(conversation);
1373
- const messages = getOrderedMessages(conversation).filter((m) => m.id !== messageId).map((message, index) => message.position === index ? message : (() => {
1374
- const overrides = { position: index };
1375
- if (message.tokenUsage)
1376
- overrides.tokenUsage = { ...message.tokenUsage };
1377
- return cloneMessage(message, overrides);
1378
- })());
1379
- return ensureConversationSafe(toReadonly({
1380
- ...conversation,
1381
- ids: messages.map((message) => message.id),
1382
- messages: toIdRecord(messages),
1383
- updatedAt: now
1384
- }));
1385
- }
1386
-
1387
- export { copyContent, toReadonly, createMessage, isAssistantMessage, getOrderedMessages, toIdRecord, ConversationalistError, createIntegrityError, assertConversationSafe, ensureConversationSafe, pairToolCallsWithResults, appendToolCall, appendToolCalls, appendToolResult, appendToolResults, appendToolResultAsync, appendToolResultsAsync, getPendingToolCalls, getToolInteractions, toSessionInfo, simpleTokenEstimator, resolveConversationEnvironment, isConversationEnvironmentParameter, appendMessages, appendUserMessage, appendAssistantMessage, appendSystemMessage, createConversationHistory, getMessages, getMessageAtPosition, getMessageIds, getMessageById, searchConversationMessages, getStatistics, hasSystemMessage, getFirstSystemMessage, getSystemMessages, prependSystemMessage, replaceSystemMessage, collapseSystemMessages, redactMessageAtPosition, deserializeConversationHistory, toChatMessages, isStreamingMessage, getStreamingMessage, appendStreamingMessage, updateStreamingMessage, finalizeStreamingMessage, cancelStreamingMessage };
1388
-
1389
- //# debugId=559319DDE09F498564756E2164756E21