@athenaintel/react 0.28.0 → 0.30.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 (761) hide show
  1. package/README.md +418 -10
  2. package/dist/agent-runtime/src/asset-attachment.cjs.map +1 -0
  3. package/dist/agent-runtime/src/asset-attachment.js.map +1 -0
  4. package/dist/agent-runtime/src/auth-denial.cjs.map +1 -0
  5. package/dist/agent-runtime/src/auth-denial.js.map +1 -0
  6. package/dist/agent-runtime/src/client-tool-bridge.cjs.map +1 -0
  7. package/dist/agent-runtime/src/client-tool-bridge.js.map +1 -0
  8. package/dist/agent-runtime/src/client-tools.cjs.map +1 -0
  9. package/dist/agent-runtime/src/client-tools.js.map +1 -0
  10. package/dist/agent-runtime/src/composer-markdown.cjs +124 -0
  11. package/dist/agent-runtime/src/composer-markdown.cjs.map +1 -0
  12. package/dist/agent-runtime/src/composer-markdown.js +124 -0
  13. package/dist/agent-runtime/src/composer-markdown.js.map +1 -0
  14. package/dist/agent-runtime/src/conversation-index.cjs.map +1 -0
  15. package/dist/agent-runtime/src/conversation-index.js.map +1 -0
  16. package/dist/{packages/agent-runtime → agent-runtime}/src/conversation-list.cjs +36 -0
  17. package/dist/agent-runtime/src/conversation-list.cjs.map +1 -0
  18. package/dist/{packages/agent-runtime → agent-runtime}/src/conversation-list.js +36 -0
  19. package/dist/agent-runtime/src/conversation-list.js.map +1 -0
  20. package/dist/{packages/agent-runtime → agent-runtime}/src/deep-agent-transport-recipe.cjs +5 -3
  21. package/dist/agent-runtime/src/deep-agent-transport-recipe.cjs.map +1 -0
  22. package/dist/{packages/agent-runtime → agent-runtime}/src/deep-agent-transport-recipe.js +6 -4
  23. package/dist/agent-runtime/src/deep-agent-transport-recipe.js.map +1 -0
  24. package/dist/agent-runtime/src/edit-command.cjs.map +1 -0
  25. package/dist/agent-runtime/src/edit-command.js.map +1 -0
  26. package/dist/{packages/agent-runtime → agent-runtime}/src/errors.cjs +23 -0
  27. package/dist/agent-runtime/src/errors.cjs.map +1 -0
  28. package/dist/{packages/agent-runtime → agent-runtime}/src/errors.js +23 -0
  29. package/dist/agent-runtime/src/errors.js.map +1 -0
  30. package/dist/agent-runtime/src/execute-output.cjs +41 -0
  31. package/dist/agent-runtime/src/execute-output.cjs.map +1 -0
  32. package/dist/agent-runtime/src/execute-output.js +41 -0
  33. package/dist/agent-runtime/src/execute-output.js.map +1 -0
  34. package/dist/{packages/agent-runtime → agent-runtime}/src/generated/runconfig-contract.cjs +12 -2
  35. package/dist/agent-runtime/src/generated/runconfig-contract.cjs.map +1 -0
  36. package/dist/{packages/agent-runtime → agent-runtime}/src/generated/runconfig-contract.js +12 -2
  37. package/dist/agent-runtime/src/generated/runconfig-contract.js.map +1 -0
  38. package/dist/agent-runtime/src/github-wake-event.cjs.map +1 -0
  39. package/dist/agent-runtime/src/github-wake-event.js.map +1 -0
  40. package/dist/{packages/agent-runtime → agent-runtime}/src/interrupts.cjs +24 -1
  41. package/dist/agent-runtime/src/interrupts.cjs.map +1 -0
  42. package/dist/{packages/agent-runtime → agent-runtime}/src/interrupts.js +24 -1
  43. package/dist/agent-runtime/src/interrupts.js.map +1 -0
  44. package/dist/agent-runtime/src/message-author.cjs.map +1 -0
  45. package/dist/agent-runtime/src/message-author.js.map +1 -0
  46. package/dist/agent-runtime/src/message-window.cjs.map +1 -0
  47. package/dist/agent-runtime/src/message-window.js.map +1 -0
  48. package/dist/{packages/agent-runtime → agent-runtime}/src/messages.cjs +8 -4
  49. package/dist/agent-runtime/src/messages.cjs.map +1 -0
  50. package/dist/{packages/agent-runtime → agent-runtime}/src/messages.js +6 -2
  51. package/dist/agent-runtime/src/messages.js.map +1 -0
  52. package/dist/agent-runtime/src/model-context.cjs.map +1 -0
  53. package/dist/agent-runtime/src/model-context.js.map +1 -0
  54. package/dist/agent-runtime/src/optimistic-content.cjs.map +1 -0
  55. package/dist/agent-runtime/src/optimistic-content.js.map +1 -0
  56. package/dist/agent-runtime/src/protocol.cjs.map +1 -0
  57. package/dist/agent-runtime/src/protocol.js.map +1 -0
  58. package/dist/{packages/agent-runtime → agent-runtime}/src/queue.cjs +23 -2
  59. package/dist/agent-runtime/src/queue.cjs.map +1 -0
  60. package/dist/{packages/agent-runtime → agent-runtime}/src/queue.js +23 -2
  61. package/dist/agent-runtime/src/queue.js.map +1 -0
  62. package/dist/{packages/agent-runtime → agent-runtime}/src/quota-safe-local-storage-session.cjs +23 -13
  63. package/dist/agent-runtime/src/quota-safe-local-storage-session.cjs.map +1 -0
  64. package/dist/{packages/agent-runtime → agent-runtime}/src/quota-safe-local-storage-session.js +24 -14
  65. package/dist/agent-runtime/src/quota-safe-local-storage-session.js.map +1 -0
  66. package/dist/agent-runtime/src/runtime-messages.cjs.map +1 -0
  67. package/dist/agent-runtime/src/runtime-messages.js.map +1 -0
  68. package/dist/agent-runtime/src/screen-point.cjs.map +1 -0
  69. package/dist/agent-runtime/src/screen-point.js.map +1 -0
  70. package/dist/agent-runtime/src/send-recovery.cjs.map +1 -0
  71. package/dist/agent-runtime/src/send-recovery.js.map +1 -0
  72. package/dist/agent-runtime/src/statewire-attach-observer.cjs.map +1 -0
  73. package/dist/agent-runtime/src/statewire-attach-observer.js.map +1 -0
  74. package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-state.cjs +8 -0
  75. package/dist/agent-runtime/src/statewire-state.cjs.map +1 -0
  76. package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-state.js +8 -0
  77. package/dist/agent-runtime/src/statewire-state.js.map +1 -0
  78. package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-suspended.cjs +4 -0
  79. package/dist/agent-runtime/src/statewire-suspended.cjs.map +1 -0
  80. package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-suspended.js +4 -0
  81. package/dist/agent-runtime/src/statewire-suspended.js.map +1 -0
  82. package/dist/agent-runtime/src/statewire-transport.cjs +43 -0
  83. package/dist/agent-runtime/src/statewire-transport.cjs.map +1 -0
  84. package/dist/agent-runtime/src/statewire-transport.js +43 -0
  85. package/dist/agent-runtime/src/statewire-transport.js.map +1 -0
  86. package/dist/agent-runtime/src/streaming-markdown.cjs.map +1 -0
  87. package/dist/agent-runtime/src/streaming-markdown.js.map +1 -0
  88. package/dist/agent-runtime/src/subscription-wake-event.cjs +252 -0
  89. package/dist/agent-runtime/src/subscription-wake-event.cjs.map +1 -0
  90. package/dist/agent-runtime/src/subscription-wake-event.js +252 -0
  91. package/dist/agent-runtime/src/subscription-wake-event.js.map +1 -0
  92. package/dist/agent-runtime/src/thread-extras.cjs.map +1 -0
  93. package/dist/agent-runtime/src/thread-extras.js.map +1 -0
  94. package/dist/agent-runtime/src/thread-snapshot-cache.cjs.map +1 -0
  95. package/dist/agent-runtime/src/thread-snapshot-cache.js.map +1 -0
  96. package/dist/agent-runtime/src/thread-status.cjs.map +1 -0
  97. package/dist/agent-runtime/src/thread-status.js.map +1 -0
  98. package/dist/{packages/agent-runtime → agent-runtime}/src/tool-metadata.cjs +365 -3
  99. package/dist/agent-runtime/src/tool-metadata.cjs.map +1 -0
  100. package/dist/{packages/agent-runtime → agent-runtime}/src/tool-metadata.js +365 -3
  101. package/dist/agent-runtime/src/tool-metadata.js.map +1 -0
  102. package/dist/agent-runtime/src/tool-names.cjs +5 -0
  103. package/dist/agent-runtime/src/tool-names.cjs.map +1 -0
  104. package/dist/agent-runtime/src/tool-names.js +5 -0
  105. package/dist/agent-runtime/src/tool-names.js.map +1 -0
  106. package/dist/agent-runtime/src/tool-outputs.cjs.map +1 -0
  107. package/dist/agent-runtime/src/tool-outputs.js.map +1 -0
  108. package/dist/agent-runtime/src/tool-result.cjs.map +1 -0
  109. package/dist/agent-runtime/src/tool-result.js.map +1 -0
  110. package/dist/{packages/agent-runtime → agent-runtime}/src/use-conversation-list.cjs +33 -22
  111. package/dist/agent-runtime/src/use-conversation-list.cjs.map +1 -0
  112. package/dist/{packages/agent-runtime → agent-runtime}/src/use-conversation-list.js +34 -23
  113. package/dist/agent-runtime/src/use-conversation-list.js.map +1 -0
  114. package/dist/agent-runtime/src/use-deep-agent-config.cjs.map +1 -0
  115. package/dist/agent-runtime/src/use-deep-agent-config.js.map +1 -0
  116. package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-edit-submit.cjs +2 -0
  117. package/dist/agent-runtime/src/use-deep-agent-edit-submit.cjs.map +1 -0
  118. package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-edit-submit.js +2 -0
  119. package/dist/agent-runtime/src/use-deep-agent-edit-submit.js.map +1 -0
  120. package/dist/agent-runtime/src/use-deep-agent-runtime.cjs.map +1 -0
  121. package/dist/agent-runtime/src/use-deep-agent-runtime.js.map +1 -0
  122. package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-thread.cjs +1 -0
  123. package/dist/agent-runtime/src/use-deep-agent-thread.cjs.map +1 -0
  124. package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-thread.js +2 -1
  125. package/dist/agent-runtime/src/use-deep-agent-thread.js.map +1 -0
  126. package/dist/agent-runtime/src/use-deep-agent-window-sync.cjs.map +1 -0
  127. package/dist/agent-runtime/src/use-deep-agent-window-sync.js.map +1 -0
  128. package/dist/agent-runtime/src/use-historical-edit-attachments.cjs +52 -0
  129. package/dist/agent-runtime/src/use-historical-edit-attachments.cjs.map +1 -0
  130. package/dist/agent-runtime/src/use-historical-edit-attachments.js +52 -0
  131. package/dist/agent-runtime/src/use-historical-edit-attachments.js.map +1 -0
  132. package/dist/{packages/agent-runtime → agent-runtime}/src/voice-presentation.cjs +14 -0
  133. package/dist/agent-runtime/src/voice-presentation.cjs.map +1 -0
  134. package/dist/{packages/agent-runtime → agent-runtime}/src/voice-presentation.js +14 -0
  135. package/dist/agent-runtime/src/voice-presentation.js.map +1 -0
  136. package/dist/agent-runtime/src/voice-turn-grouping.cjs.map +1 -0
  137. package/dist/agent-runtime/src/voice-turn-grouping.js.map +1 -0
  138. package/dist/assets/AthenaAssetEmbed.cjs +8 -2
  139. package/dist/assets/AthenaAssetEmbed.cjs.map +1 -1
  140. package/dist/assets/AthenaAssetEmbed.d.ts +8 -0
  141. package/dist/assets/AthenaAssetEmbed.js +8 -2
  142. package/dist/assets/AthenaAssetEmbed.js.map +1 -1
  143. package/dist/assets/AthenaLayout.cjs +97 -31
  144. package/dist/assets/AthenaLayout.cjs.map +1 -1
  145. package/dist/assets/AthenaLayout.d.ts +13 -0
  146. package/dist/assets/AthenaLayout.js +98 -32
  147. package/dist/assets/AthenaLayout.js.map +1 -1
  148. package/dist/assets/asset-embed-messages.cjs.map +1 -1
  149. package/dist/assets/asset-embed-messages.d.ts +6 -0
  150. package/dist/assets/asset-embed-messages.js.map +1 -1
  151. package/dist/assets/asset-panel-store.cjs +68 -32
  152. package/dist/assets/asset-panel-store.cjs.map +1 -1
  153. package/dist/assets/asset-panel-store.d.ts +47 -1
  154. package/dist/assets/asset-panel-store.js +68 -32
  155. package/dist/assets/asset-panel-store.js.map +1 -1
  156. package/dist/assets/use-asset-embed.cjs +29 -8
  157. package/dist/assets/use-asset-embed.cjs.map +1 -1
  158. package/dist/assets/use-asset-embed.d.ts +7 -0
  159. package/dist/assets/use-asset-embed.js +29 -8
  160. package/dist/assets/use-asset-embed.js.map +1 -1
  161. package/dist/catalog/chat-pickers.cjs +152 -0
  162. package/dist/catalog/chat-pickers.cjs.map +1 -0
  163. package/dist/catalog/chat-pickers.d.ts +22 -0
  164. package/dist/catalog/chat-pickers.js +152 -0
  165. package/dist/catalog/chat-pickers.js.map +1 -0
  166. package/dist/catalog/runtime-catalog.cjs +181 -0
  167. package/dist/catalog/runtime-catalog.cjs.map +1 -0
  168. package/dist/catalog/runtime-catalog.d.ts +100 -0
  169. package/dist/catalog/runtime-catalog.js +181 -0
  170. package/dist/catalog/runtime-catalog.js.map +1 -0
  171. package/dist/chat/AthenaChat.cjs +86 -46
  172. package/dist/chat/AthenaChat.cjs.map +1 -1
  173. package/dist/chat/AthenaChat.d.ts +21 -4
  174. package/dist/chat/AthenaChat.js +88 -48
  175. package/dist/chat/AthenaChat.js.map +1 -1
  176. package/dist/chat/StatewireApprovalCard.cjs +38 -37
  177. package/dist/chat/StatewireApprovalCard.cjs.map +1 -1
  178. package/dist/chat/StatewireApprovalCard.d.ts +2 -0
  179. package/dist/chat/StatewireApprovalCard.js +39 -38
  180. package/dist/chat/StatewireApprovalCard.js.map +1 -1
  181. package/dist/chat/StatewireClientToolBridge.cjs +2 -2
  182. package/dist/chat/StatewireClientToolBridge.js +2 -2
  183. package/dist/chat/StatewireQueuedMessages.cjs +15 -12
  184. package/dist/chat/StatewireQueuedMessages.cjs.map +1 -1
  185. package/dist/chat/StatewireQueuedMessages.d.ts +22 -2
  186. package/dist/chat/StatewireQueuedMessages.js +15 -12
  187. package/dist/chat/StatewireQueuedMessages.js.map +1 -1
  188. package/dist/chat/StatewireRunRefusalNotice.cjs +48 -0
  189. package/dist/chat/StatewireRunRefusalNotice.cjs.map +1 -0
  190. package/dist/chat/StatewireRunRefusalNotice.d.ts +25 -0
  191. package/dist/chat/StatewireRunRefusalNotice.js +48 -0
  192. package/dist/chat/StatewireRunRefusalNotice.js.map +1 -0
  193. package/dist/chat/WaitingOnYouBanner.cjs +2 -2
  194. package/dist/chat/WaitingOnYouBanner.js +2 -2
  195. package/dist/chat/athena-citation-links.cjs +19 -15
  196. package/dist/chat/athena-citation-links.cjs.map +1 -1
  197. package/dist/chat/athena-citation-links.js +19 -15
  198. package/dist/chat/athena-citation-links.js.map +1 -1
  199. package/dist/chat/run-activity.cjs +9 -1
  200. package/dist/chat/run-activity.cjs.map +1 -1
  201. package/dist/chat/run-activity.d.ts +6 -0
  202. package/dist/chat/run-activity.js +10 -2
  203. package/dist/chat/run-activity.js.map +1 -1
  204. package/dist/chat/statewire-banners.cjs +30 -1
  205. package/dist/chat/statewire-banners.cjs.map +1 -1
  206. package/dist/chat/statewire-banners.d.ts +20 -1
  207. package/dist/chat/statewire-banners.js +32 -3
  208. package/dist/chat/statewire-banners.js.map +1 -1
  209. package/dist/chat/statewire-client-tools.cjs +1 -1
  210. package/dist/chat/statewire-client-tools.js +1 -1
  211. package/dist/chat/super-grouping/CollapsibleGroup.cjs +1 -1
  212. package/dist/chat/super-grouping/CollapsibleGroup.cjs.map +1 -1
  213. package/dist/chat/super-grouping/CollapsibleGroup.js +1 -1
  214. package/dist/chat/super-grouping/CollapsibleGroup.js.map +1 -1
  215. package/dist/chat/super-grouping/SuperGroupingCard.cjs +7 -5
  216. package/dist/chat/super-grouping/SuperGroupingCard.cjs.map +1 -1
  217. package/dist/chat/super-grouping/SuperGroupingCard.d.ts +8 -2
  218. package/dist/chat/super-grouping/SuperGroupingCard.js +7 -5
  219. package/dist/chat/super-grouping/SuperGroupingCard.js.map +1 -1
  220. package/dist/chat/super-grouping/SuperGroupingTranscript.cjs +350 -0
  221. package/dist/chat/super-grouping/SuperGroupingTranscript.cjs.map +1 -0
  222. package/dist/chat/super-grouping/SuperGroupingTranscript.d.ts +31 -0
  223. package/dist/chat/super-grouping/SuperGroupingTranscript.js +350 -0
  224. package/dist/chat/super-grouping/SuperGroupingTranscript.js.map +1 -0
  225. package/dist/chat/super-grouping/ToolTimeline.cjs +13 -2
  226. package/dist/chat/super-grouping/ToolTimeline.cjs.map +1 -1
  227. package/dist/chat/super-grouping/ToolTimeline.d.ts +10 -3
  228. package/dist/chat/super-grouping/ToolTimeline.js +13 -2
  229. package/dist/chat/super-grouping/ToolTimeline.js.map +1 -1
  230. package/dist/chat/super-grouping/activity-timeline.cjs +51 -26
  231. package/dist/chat/super-grouping/activity-timeline.cjs.map +1 -1
  232. package/dist/chat/super-grouping/activity-timeline.d.ts +40 -8
  233. package/dist/chat/super-grouping/activity-timeline.js +52 -27
  234. package/dist/chat/super-grouping/activity-timeline.js.map +1 -1
  235. package/dist/chat/super-grouping/index.cjs +12 -0
  236. package/dist/chat/super-grouping/index.cjs.map +1 -1
  237. package/dist/chat/super-grouping/index.d.ts +7 -2
  238. package/dist/chat/super-grouping/index.js +14 -2
  239. package/dist/chat/super-grouping/index.js.map +1 -1
  240. package/dist/chat/super-grouping/timeline-step.cjs +14 -5
  241. package/dist/chat/super-grouping/timeline-step.cjs.map +1 -1
  242. package/dist/chat/super-grouping/timeline-step.d.ts +10 -1
  243. package/dist/chat/super-grouping/timeline-step.js +15 -6
  244. package/dist/chat/super-grouping/timeline-step.js.map +1 -1
  245. package/dist/chat/super-grouping/turn-segments.cjs +82 -0
  246. package/dist/chat/super-grouping/turn-segments.cjs.map +1 -0
  247. package/dist/chat/super-grouping/turn-segments.d.ts +69 -0
  248. package/dist/chat/super-grouping/turn-segments.js +82 -0
  249. package/dist/chat/super-grouping/turn-segments.js.map +1 -0
  250. package/dist/chat/super-grouping/turn-timing.cjs +110 -0
  251. package/dist/chat/super-grouping/turn-timing.cjs.map +1 -0
  252. package/dist/chat/super-grouping/turn-timing.d.ts +52 -0
  253. package/dist/chat/super-grouping/turn-timing.js +110 -0
  254. package/dist/chat/super-grouping/turn-timing.js.map +1 -0
  255. package/dist/chat/tiptap-text.cjs +1 -1
  256. package/dist/chat/tiptap-text.js +1 -1
  257. package/dist/chat/use-athena-run-live.cjs +1 -1
  258. package/dist/chat/use-athena-run-live.js +1 -1
  259. package/dist/chat/use-statewire-approval-request.cjs +73 -4
  260. package/dist/chat/use-statewire-approval-request.cjs.map +1 -1
  261. package/dist/chat/use-statewire-approval-request.js +74 -5
  262. package/dist/chat/use-statewire-approval-request.js.map +1 -1
  263. package/dist/chat-ui/composer/composer-message.cjs +284 -0
  264. package/dist/chat-ui/composer/composer-message.cjs.map +1 -0
  265. package/dist/chat-ui/composer/composer-message.d.ts +152 -0
  266. package/dist/chat-ui/composer/composer-message.js +284 -0
  267. package/dist/chat-ui/composer/composer-message.js.map +1 -0
  268. package/dist/chat-ui/composer/tiptap-composer.cjs +57 -11
  269. package/dist/chat-ui/composer/tiptap-composer.cjs.map +1 -1
  270. package/dist/chat-ui/composer/tiptap-composer.d.ts +34 -6
  271. package/dist/chat-ui/composer/tiptap-composer.js +57 -11
  272. package/dist/chat-ui/composer/tiptap-composer.js.map +1 -1
  273. package/dist/chat-ui/index.cjs +4 -1
  274. package/dist/chat-ui/index.cjs.map +1 -1
  275. package/dist/chat-ui/index.d.ts +3 -2
  276. package/dist/chat-ui/index.js +5 -2
  277. package/dist/chat-ui/index.js.map +1 -1
  278. package/dist/chat-ui/mentions/mention-chip.cjs +3 -2
  279. package/dist/chat-ui/mentions/mention-chip.cjs.map +1 -1
  280. package/dist/chat-ui/mentions/mention-chip.js +4 -3
  281. package/dist/chat-ui/mentions/mention-chip.js.map +1 -1
  282. package/dist/chat-ui/mentions/mention-extension.cjs +8 -2
  283. package/dist/chat-ui/mentions/mention-extension.cjs.map +1 -1
  284. package/dist/chat-ui/mentions/mention-extension.js +8 -2
  285. package/dist/chat-ui/mentions/mention-extension.js.map +1 -1
  286. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.cjs +3 -1
  287. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.cjs.map +1 -1
  288. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.js +3 -1
  289. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.js.map +1 -1
  290. package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs +65 -19
  291. package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs.map +1 -1
  292. package/dist/chat-ui/mentions/suggestions/data/sources/index.d.ts +15 -0
  293. package/dist/chat-ui/mentions/suggestions/data/sources/index.js +67 -21
  294. package/dist/chat-ui/mentions/suggestions/data/sources/index.js.map +1 -1
  295. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs +4 -2
  296. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs.map +1 -1
  297. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.d.ts +2 -1
  298. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js +5 -3
  299. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js.map +1 -1
  300. package/dist/chat-ui/messages/message-components.cjs +30 -10
  301. package/dist/chat-ui/messages/message-components.cjs.map +1 -1
  302. package/dist/chat-ui/messages/message-components.d.ts +21 -1
  303. package/dist/chat-ui/messages/message-components.js +30 -10
  304. package/dist/chat-ui/messages/message-components.js.map +1 -1
  305. package/dist/chat-ui/messages/runtime-message.cjs +1 -1
  306. package/dist/chat-ui/messages/runtime-message.js +1 -1
  307. package/dist/chat-ui/messages/statewire-continue-run.cjs +5 -5
  308. package/dist/chat-ui/messages/statewire-continue-run.js +5 -5
  309. package/dist/chat-ui/messages/user-edit-composer.cjs +1 -1
  310. package/dist/chat-ui/messages/user-edit-composer.js +1 -1
  311. package/dist/chat-ui/messages/wake-marker.cjs +39 -4
  312. package/dist/chat-ui/messages/wake-marker.cjs.map +1 -1
  313. package/dist/chat-ui/messages/wake-marker.d.ts +16 -5
  314. package/dist/chat-ui/messages/wake-marker.js +40 -5
  315. package/dist/chat-ui/messages/wake-marker.js.map +1 -1
  316. package/dist/chat-ui/rich-text/chat-message-body.cjs +12 -8
  317. package/dist/chat-ui/rich-text/chat-message-body.cjs.map +1 -1
  318. package/dist/chat-ui/rich-text/chat-message-body.d.ts +6 -1
  319. package/dist/chat-ui/rich-text/chat-message-body.js +13 -9
  320. package/dist/chat-ui/rich-text/chat-message-body.js.map +1 -1
  321. package/dist/chat-ui/rich-text/chat-text-schema.cjs +64 -6
  322. package/dist/chat-ui/rich-text/chat-text-schema.cjs.map +1 -1
  323. package/dist/chat-ui/rich-text/chat-text-schema.d.ts +5 -0
  324. package/dist/chat-ui/rich-text/chat-text-schema.js +66 -8
  325. package/dist/chat-ui/rich-text/chat-text-schema.js.map +1 -1
  326. package/dist/chat-ui/statewire.cjs +1 -1
  327. package/dist/chat-ui/statewire.d.ts +1 -1
  328. package/dist/chat-ui/statewire.js +1 -1
  329. package/dist/chat-ui/thread/statewire-history-edge.cjs +2 -2
  330. package/dist/chat-ui/thread/statewire-history-edge.js +2 -2
  331. package/dist/collab/client.cjs +218 -13
  332. package/dist/collab/client.cjs.map +1 -1
  333. package/dist/collab/client.d.ts +105 -2
  334. package/dist/collab/client.js +221 -17
  335. package/dist/collab/client.js.map +1 -1
  336. package/dist/collab/index.cjs +2 -0
  337. package/dist/collab/index.cjs.map +1 -1
  338. package/dist/collab/index.d.ts +1 -1
  339. package/dist/collab/index.js +3 -1
  340. package/dist/composer/AttachmentContext.cjs +38 -12
  341. package/dist/composer/AttachmentContext.cjs.map +1 -1
  342. package/dist/composer/AttachmentContext.d.ts +22 -1
  343. package/dist/composer/AttachmentContext.js +40 -14
  344. package/dist/composer/AttachmentContext.js.map +1 -1
  345. package/dist/composer/QuoteContext.cjs +80 -28
  346. package/dist/composer/QuoteContext.cjs.map +1 -1
  347. package/dist/composer/QuoteContext.d.ts +35 -6
  348. package/dist/composer/QuoteContext.js +82 -30
  349. package/dist/composer/QuoteContext.js.map +1 -1
  350. package/dist/composer/build-composed-message.cjs +27 -0
  351. package/dist/composer/build-composed-message.cjs.map +1 -1
  352. package/dist/composer/build-composed-message.d.ts +21 -0
  353. package/dist/composer/build-composed-message.js +28 -1
  354. package/dist/composer/build-composed-message.js.map +1 -1
  355. package/dist/composer/composer-handoff.cjs +13 -1
  356. package/dist/composer/composer-handoff.cjs.map +1 -1
  357. package/dist/composer/composer-handoff.d.ts +12 -0
  358. package/dist/composer/composer-handoff.js +15 -3
  359. package/dist/composer/composer-handoff.js.map +1 -1
  360. package/dist/composer/index.d.ts +6 -3
  361. package/dist/composer/useReadComposerDraft.cjs +16 -0
  362. package/dist/composer/useReadComposerDraft.cjs.map +1 -0
  363. package/dist/composer/useReadComposerDraft.d.ts +6 -0
  364. package/dist/composer/useReadComposerDraft.js +16 -0
  365. package/dist/composer/useReadComposerDraft.js.map +1 -0
  366. package/dist/diagnostics/errors.cjs +6 -0
  367. package/dist/diagnostics/errors.cjs.map +1 -1
  368. package/dist/diagnostics/errors.d.ts +6 -0
  369. package/dist/diagnostics/errors.js +6 -0
  370. package/dist/diagnostics/errors.js.map +1 -1
  371. package/dist/index.cjs +159 -7
  372. package/dist/index.cjs.map +1 -1
  373. package/dist/index.d.ts +53 -12
  374. package/dist/index.js +166 -14
  375. package/dist/index.js.map +1 -1
  376. package/dist/lib/owner-document.cjs +32 -0
  377. package/dist/lib/owner-document.cjs.map +1 -0
  378. package/dist/lib/owner-document.d.ts +17 -0
  379. package/dist/lib/owner-document.js +32 -0
  380. package/dist/lib/owner-document.js.map +1 -0
  381. package/dist/lib/portal-surface.cjs +55 -0
  382. package/dist/lib/portal-surface.cjs.map +1 -0
  383. package/dist/lib/portal-surface.d.ts +37 -0
  384. package/dist/lib/portal-surface.js +55 -0
  385. package/dist/lib/portal-surface.js.map +1 -0
  386. package/dist/lib/use-athena-rest-query.cjs +34 -0
  387. package/dist/lib/use-athena-rest-query.cjs.map +1 -0
  388. package/dist/lib/use-athena-rest-query.d.ts +31 -0
  389. package/dist/lib/use-athena-rest-query.js +34 -0
  390. package/dist/lib/use-athena-rest-query.js.map +1 -0
  391. package/dist/provider/AthenaProvider.cjs +36 -6
  392. package/dist/provider/AthenaProvider.cjs.map +1 -1
  393. package/dist/provider/AthenaProvider.d.ts +20 -1
  394. package/dist/provider/AthenaProvider.js +38 -8
  395. package/dist/provider/AthenaProvider.js.map +1 -1
  396. package/dist/provider/citation-links.d.ts +10 -2
  397. package/dist/{packages/react → react}/package.json.cjs +1 -1
  398. package/dist/{packages/react → react}/package.json.js +1 -1
  399. package/dist/runtime/statewire-lifecycle.cjs +15 -3
  400. package/dist/runtime/statewire-lifecycle.cjs.map +1 -1
  401. package/dist/runtime/statewire-lifecycle.d.ts +6 -0
  402. package/dist/runtime/statewire-lifecycle.js +15 -3
  403. package/dist/runtime/statewire-lifecycle.js.map +1 -1
  404. package/dist/runtime/useAthenaStatewireRuntime.cjs +11 -7
  405. package/dist/runtime/useAthenaStatewireRuntime.cjs.map +1 -1
  406. package/dist/runtime/useAthenaStatewireRuntime.js +11 -7
  407. package/dist/runtime/useAthenaStatewireRuntime.js.map +1 -1
  408. package/dist/search/useAthenaRepoSearch.cjs +5 -13
  409. package/dist/search/useAthenaRepoSearch.cjs.map +1 -1
  410. package/dist/search/useAthenaRepoSearch.d.ts +3 -3
  411. package/dist/search/useAthenaRepoSearch.js +6 -14
  412. package/dist/search/useAthenaRepoSearch.js.map +1 -1
  413. package/dist/sheet-range/a1.cjs +162 -0
  414. package/dist/sheet-range/a1.cjs.map +1 -0
  415. package/dist/sheet-range/a1.d.ts +91 -0
  416. package/dist/sheet-range/a1.js +162 -0
  417. package/dist/sheet-range/a1.js.map +1 -0
  418. package/dist/sheet-range/index.cjs +22 -0
  419. package/dist/sheet-range/index.cjs.map +1 -0
  420. package/dist/sheet-range/index.d.ts +12 -0
  421. package/dist/sheet-range/index.js +22 -0
  422. package/dist/sheet-range/index.js.map +1 -0
  423. package/dist/sheet-range/range-preview-table.cjs +75 -0
  424. package/dist/sheet-range/range-preview-table.cjs.map +1 -0
  425. package/dist/sheet-range/range-preview-table.d.ts +20 -0
  426. package/dist/sheet-range/range-preview-table.js +75 -0
  427. package/dist/sheet-range/range-preview-table.js.map +1 -0
  428. package/dist/sheet-range/range-preview.cjs +116 -0
  429. package/dist/sheet-range/range-preview.cjs.map +1 -0
  430. package/dist/sheet-range/range-preview.d.ts +67 -0
  431. package/dist/sheet-range/range-preview.js +116 -0
  432. package/dist/sheet-range/range-preview.js.map +1 -0
  433. package/dist/styles.css +1 -1
  434. package/dist/threads/Inbox.cjs +289 -0
  435. package/dist/threads/Inbox.cjs.map +1 -0
  436. package/dist/threads/Inbox.d.ts +46 -0
  437. package/dist/threads/Inbox.js +289 -0
  438. package/dist/threads/Inbox.js.map +1 -0
  439. package/dist/threads/SessionList.cjs +51 -126
  440. package/dist/threads/SessionList.cjs.map +1 -1
  441. package/dist/threads/SessionList.d.ts +26 -1
  442. package/dist/threads/SessionList.js +45 -120
  443. package/dist/threads/SessionList.js.map +1 -1
  444. package/dist/threads/SessionsPage.cjs +753 -0
  445. package/dist/threads/SessionsPage.cjs.map +1 -0
  446. package/dist/threads/SessionsPage.d.ts +35 -0
  447. package/dist/threads/SessionsPage.js +753 -0
  448. package/dist/threads/SessionsPage.js.map +1 -0
  449. package/dist/threads/api.cjs +21 -1
  450. package/dist/threads/api.cjs.map +1 -1
  451. package/dist/threads/api.d.ts +59 -0
  452. package/dist/threads/api.js +21 -1
  453. package/dist/threads/api.js.map +1 -1
  454. package/dist/threads/conversation-list-fetcher.cjs +9 -2
  455. package/dist/threads/conversation-list-fetcher.cjs.map +1 -1
  456. package/dist/threads/conversation-list-fetcher.d.ts +14 -1
  457. package/dist/threads/conversation-list-fetcher.js +9 -2
  458. package/dist/threads/conversation-list-fetcher.js.map +1 -1
  459. package/dist/threads/index.d.ts +2 -1
  460. package/dist/threads/pull-request-display.cjs +25 -0
  461. package/dist/threads/pull-request-display.cjs.map +1 -0
  462. package/dist/threads/pull-request-display.d.ts +15 -0
  463. package/dist/threads/pull-request-display.js +25 -0
  464. package/dist/threads/pull-request-display.js.map +1 -0
  465. package/dist/threads/session-list-model.cjs +16 -2
  466. package/dist/threads/session-list-model.cjs.map +1 -1
  467. package/dist/threads/session-list-model.d.ts +10 -0
  468. package/dist/threads/session-list-model.js +16 -2
  469. package/dist/threads/session-list-model.js.map +1 -1
  470. package/dist/threads/session-row-parts.cjs +152 -0
  471. package/dist/threads/session-row-parts.cjs.map +1 -0
  472. package/dist/threads/session-row-parts.d.ts +50 -0
  473. package/dist/threads/session-row-parts.js +152 -0
  474. package/dist/threads/session-row-parts.js.map +1 -0
  475. package/dist/threads/sessions-page-model.cjs +305 -0
  476. package/dist/threads/sessions-page-model.cjs.map +1 -0
  477. package/dist/threads/sessions-page-model.d.ts +86 -0
  478. package/dist/threads/sessions-page-model.js +305 -0
  479. package/dist/threads/sessions-page-model.js.map +1 -0
  480. package/dist/threads/sessions-page-storage.cjs +93 -0
  481. package/dist/threads/sessions-page-storage.cjs.map +1 -0
  482. package/dist/threads/sessions-page-storage.d.ts +23 -0
  483. package/dist/threads/sessions-page-storage.js +93 -0
  484. package/dist/threads/sessions-page-storage.js.map +1 -0
  485. package/dist/threads/sessions-query.cjs +235 -0
  486. package/dist/threads/sessions-query.cjs.map +1 -0
  487. package/dist/threads/sessions-query.d.ts +119 -0
  488. package/dist/threads/sessions-query.js +235 -0
  489. package/dist/threads/sessions-query.js.map +1 -0
  490. package/dist/threads/statewire-thread-list.cjs +133 -40
  491. package/dist/threads/statewire-thread-list.cjs.map +1 -1
  492. package/dist/threads/statewire-thread-list.d.ts +83 -2
  493. package/dist/threads/statewire-thread-list.js +134 -41
  494. package/dist/threads/statewire-thread-list.js.map +1 -1
  495. package/dist/threads/use-athena-sessions.cjs +198 -0
  496. package/dist/threads/use-athena-sessions.cjs.map +1 -0
  497. package/dist/threads/use-athena-sessions.d.ts +81 -0
  498. package/dist/threads/use-athena-sessions.js +198 -0
  499. package/dist/threads/use-athena-sessions.js.map +1 -0
  500. package/dist/threads/use-rest-conversation-history.cjs +1 -1
  501. package/dist/threads/use-rest-conversation-history.js +1 -1
  502. package/dist/threads/use-statewire-conversation-history.cjs +1 -1
  503. package/dist/threads/use-statewire-conversation-history.d.ts +3 -0
  504. package/dist/threads/use-statewire-conversation-history.js +1 -1
  505. package/dist/threads/use-thread-read-state.cjs +73 -0
  506. package/dist/threads/use-thread-read-state.cjs.map +1 -0
  507. package/dist/threads/use-thread-read-state.d.ts +51 -0
  508. package/dist/threads/use-thread-read-state.js +73 -0
  509. package/dist/threads/use-thread-read-state.js.map +1 -0
  510. package/dist/tiptap-markdown-table/src/markdown-table-serializer.cjs.map +1 -0
  511. package/dist/tiptap-markdown-table/src/markdown-table-serializer.js.map +1 -0
  512. package/dist/tools/auto-open-tools.cjs +2 -0
  513. package/dist/tools/auto-open-tools.cjs.map +1 -1
  514. package/dist/tools/auto-open-tools.js +2 -0
  515. package/dist/tools/auto-open-tools.js.map +1 -1
  516. package/dist/tools/file-tool-uis.cjs +18 -43
  517. package/dist/tools/file-tool-uis.cjs.map +1 -1
  518. package/dist/tools/file-tool-uis.d.ts +1 -2
  519. package/dist/tools/file-tool-uis.js +18 -42
  520. package/dist/tools/file-tool-uis.js.map +1 -1
  521. package/dist/tools/index.cjs +6 -2
  522. package/dist/tools/index.cjs.map +1 -1
  523. package/dist/tools/index.d.ts +1 -0
  524. package/dist/tools/index.js +6 -2
  525. package/dist/tools/index.js.map +1 -1
  526. package/dist/tools/misc-tool-uis.cjs +2 -2
  527. package/dist/tools/misc-tool-uis.js +2 -2
  528. package/dist/tools/primitives.cjs +1 -1
  529. package/dist/tools/primitives.js +1 -1
  530. package/dist/tools/read-asset-tool-ui.cjs +21 -70
  531. package/dist/tools/read-asset-tool-ui.cjs.map +1 -1
  532. package/dist/tools/read-asset-tool-ui.js +21 -70
  533. package/dist/tools/read-asset-tool-ui.js.map +1 -1
  534. package/dist/tools/step-text.cjs +21 -0
  535. package/dist/tools/step-text.cjs.map +1 -0
  536. package/dist/tools/step-text.d.ts +10 -0
  537. package/dist/tools/step-text.js +21 -0
  538. package/dist/tools/step-text.js.map +1 -0
  539. package/dist/tools/tool-fallback.cjs +24 -5
  540. package/dist/tools/tool-fallback.cjs.map +1 -1
  541. package/dist/tools/tool-fallback.d.ts +3 -1
  542. package/dist/tools/tool-fallback.js +24 -5
  543. package/dist/tools/tool-fallback.js.map +1 -1
  544. package/dist/tools/tool-summary.cjs +661 -0
  545. package/dist/tools/tool-summary.cjs.map +1 -0
  546. package/dist/tools/tool-summary.d.ts +99 -0
  547. package/dist/tools/tool-summary.js +661 -0
  548. package/dist/tools/tool-summary.js.map +1 -0
  549. package/dist/tools/tool-uis.cjs +39 -97
  550. package/dist/tools/tool-uis.cjs.map +1 -1
  551. package/dist/tools/tool-uis.js +39 -97
  552. package/dist/tools/tool-uis.js.map +1 -1
  553. package/dist/tools/voice-update-tool-ui.cjs +1 -1
  554. package/dist/tools/voice-update-tool-ui.js +1 -1
  555. package/dist/tools/write-todos-tool-ui.cjs +3 -2
  556. package/dist/tools/write-todos-tool-ui.cjs.map +1 -1
  557. package/dist/tools/write-todos-tool-ui.d.ts +5 -0
  558. package/dist/tools/write-todos-tool-ui.js +5 -4
  559. package/dist/tools/write-todos-tool-ui.js.map +1 -1
  560. package/dist/ui/popover.cjs +6 -6
  561. package/dist/ui/popover.cjs.map +1 -1
  562. package/dist/ui/popover.js +6 -6
  563. package/dist/ui/popover.js.map +1 -1
  564. package/dist/ui/tooltip.cjs +16 -2
  565. package/dist/ui/tooltip.cjs.map +1 -1
  566. package/dist/ui/tooltip.d.ts +1 -1
  567. package/dist/ui/tooltip.js +16 -2
  568. package/dist/ui/tooltip.js.map +1 -1
  569. package/dist/version.cjs +1 -1
  570. package/dist/version.js +1 -1
  571. package/dist/voice/use-athena-voice-session.cjs.map +1 -1
  572. package/dist/voice/use-athena-voice-session.d.ts +3 -3
  573. package/dist/voice/use-athena-voice-session.js.map +1 -1
  574. package/dist/workbench/SessionWorkbench.cjs +378 -0
  575. package/dist/workbench/SessionWorkbench.cjs.map +1 -0
  576. package/dist/workbench/SessionWorkbench.d.ts +30 -0
  577. package/dist/workbench/SessionWorkbench.js +378 -0
  578. package/dist/workbench/SessionWorkbench.js.map +1 -0
  579. package/dist/workbench/session-workbench-context.cjs +26 -0
  580. package/dist/workbench/session-workbench-context.cjs.map +1 -0
  581. package/dist/workbench/session-workbench-context.d.ts +55 -0
  582. package/dist/workbench/session-workbench-context.js +26 -0
  583. package/dist/workbench/session-workbench-context.js.map +1 -0
  584. package/dist/workbench/session-workbench-model.cjs +288 -0
  585. package/dist/workbench/session-workbench-model.cjs.map +1 -0
  586. package/dist/workbench/session-workbench-model.d.ts +168 -0
  587. package/dist/workbench/session-workbench-model.js +288 -0
  588. package/dist/workbench/session-workbench-model.js.map +1 -0
  589. package/dist/workbench/session-workbench-panes.cjs +580 -0
  590. package/dist/workbench/session-workbench-panes.cjs.map +1 -0
  591. package/dist/workbench/session-workbench-panes.d.ts +16 -0
  592. package/dist/workbench/session-workbench-panes.js +580 -0
  593. package/dist/workbench/session-workbench-panes.js.map +1 -0
  594. package/dist/workbench/session-workspace-api.cjs +157 -0
  595. package/dist/workbench/session-workspace-api.cjs.map +1 -0
  596. package/dist/workbench/session-workspace-api.d.ts +70 -0
  597. package/dist/workbench/session-workspace-api.js +157 -0
  598. package/dist/workbench/session-workspace-api.js.map +1 -0
  599. package/dist/workbench/use-session-workspace.cjs +100 -0
  600. package/dist/workbench/use-session-workspace.cjs.map +1 -0
  601. package/dist/workbench/use-session-workspace.d.ts +45 -0
  602. package/dist/workbench/use-session-workspace.js +100 -0
  603. package/dist/workbench/use-session-workspace.js.map +1 -0
  604. package/dist/workbench/workbench-layout-context.cjs +10 -0
  605. package/dist/workbench/workbench-layout-context.cjs.map +1 -0
  606. package/dist/workbench/workbench-layout-context.d.ts +17 -0
  607. package/dist/workbench/workbench-layout-context.js +10 -0
  608. package/dist/workbench/workbench-layout-context.js.map +1 -0
  609. package/package.json +20 -9
  610. package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.cjs +0 -77
  611. package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.cjs.map +0 -1
  612. package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.js +0 -77
  613. package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.js.map +0 -1
  614. package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.cjs +0 -181
  615. package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.cjs.map +0 -1
  616. package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.js +0 -181
  617. package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.js.map +0 -1
  618. package/dist/packages/agent-runtime/src/asset-attachment.cjs.map +0 -1
  619. package/dist/packages/agent-runtime/src/asset-attachment.js.map +0 -1
  620. package/dist/packages/agent-runtime/src/auth-denial.cjs.map +0 -1
  621. package/dist/packages/agent-runtime/src/auth-denial.js.map +0 -1
  622. package/dist/packages/agent-runtime/src/client-tool-bridge.cjs.map +0 -1
  623. package/dist/packages/agent-runtime/src/client-tool-bridge.js.map +0 -1
  624. package/dist/packages/agent-runtime/src/client-tools.cjs.map +0 -1
  625. package/dist/packages/agent-runtime/src/client-tools.js.map +0 -1
  626. package/dist/packages/agent-runtime/src/conversation-index.cjs.map +0 -1
  627. package/dist/packages/agent-runtime/src/conversation-index.js.map +0 -1
  628. package/dist/packages/agent-runtime/src/conversation-list.cjs.map +0 -1
  629. package/dist/packages/agent-runtime/src/conversation-list.js.map +0 -1
  630. package/dist/packages/agent-runtime/src/deep-agent-transport-recipe.cjs.map +0 -1
  631. package/dist/packages/agent-runtime/src/deep-agent-transport-recipe.js.map +0 -1
  632. package/dist/packages/agent-runtime/src/edit-command.cjs.map +0 -1
  633. package/dist/packages/agent-runtime/src/edit-command.js.map +0 -1
  634. package/dist/packages/agent-runtime/src/errors.cjs.map +0 -1
  635. package/dist/packages/agent-runtime/src/errors.js.map +0 -1
  636. package/dist/packages/agent-runtime/src/generated/runconfig-contract.cjs.map +0 -1
  637. package/dist/packages/agent-runtime/src/generated/runconfig-contract.js.map +0 -1
  638. package/dist/packages/agent-runtime/src/github-wake-event.cjs.map +0 -1
  639. package/dist/packages/agent-runtime/src/github-wake-event.js.map +0 -1
  640. package/dist/packages/agent-runtime/src/interrupts.cjs.map +0 -1
  641. package/dist/packages/agent-runtime/src/interrupts.js.map +0 -1
  642. package/dist/packages/agent-runtime/src/message-author.cjs.map +0 -1
  643. package/dist/packages/agent-runtime/src/message-author.js.map +0 -1
  644. package/dist/packages/agent-runtime/src/message-window.cjs.map +0 -1
  645. package/dist/packages/agent-runtime/src/message-window.js.map +0 -1
  646. package/dist/packages/agent-runtime/src/messages.cjs.map +0 -1
  647. package/dist/packages/agent-runtime/src/messages.js.map +0 -1
  648. package/dist/packages/agent-runtime/src/model-context.cjs.map +0 -1
  649. package/dist/packages/agent-runtime/src/model-context.js.map +0 -1
  650. package/dist/packages/agent-runtime/src/optimistic-content.cjs.map +0 -1
  651. package/dist/packages/agent-runtime/src/optimistic-content.js.map +0 -1
  652. package/dist/packages/agent-runtime/src/protocol.cjs.map +0 -1
  653. package/dist/packages/agent-runtime/src/protocol.js.map +0 -1
  654. package/dist/packages/agent-runtime/src/queue.cjs.map +0 -1
  655. package/dist/packages/agent-runtime/src/queue.js.map +0 -1
  656. package/dist/packages/agent-runtime/src/quota-safe-local-storage-session.cjs.map +0 -1
  657. package/dist/packages/agent-runtime/src/quota-safe-local-storage-session.js.map +0 -1
  658. package/dist/packages/agent-runtime/src/runtime-messages.cjs.map +0 -1
  659. package/dist/packages/agent-runtime/src/runtime-messages.js.map +0 -1
  660. package/dist/packages/agent-runtime/src/screen-point.cjs.map +0 -1
  661. package/dist/packages/agent-runtime/src/screen-point.js.map +0 -1
  662. package/dist/packages/agent-runtime/src/send-recovery.cjs.map +0 -1
  663. package/dist/packages/agent-runtime/src/send-recovery.js.map +0 -1
  664. package/dist/packages/agent-runtime/src/statewire-attach-observer.cjs.map +0 -1
  665. package/dist/packages/agent-runtime/src/statewire-attach-observer.js.map +0 -1
  666. package/dist/packages/agent-runtime/src/statewire-state.cjs.map +0 -1
  667. package/dist/packages/agent-runtime/src/statewire-state.js.map +0 -1
  668. package/dist/packages/agent-runtime/src/statewire-suspended.cjs.map +0 -1
  669. package/dist/packages/agent-runtime/src/statewire-suspended.js.map +0 -1
  670. package/dist/packages/agent-runtime/src/statewire-transport.cjs +0 -11
  671. package/dist/packages/agent-runtime/src/statewire-transport.cjs.map +0 -1
  672. package/dist/packages/agent-runtime/src/statewire-transport.js +0 -11
  673. package/dist/packages/agent-runtime/src/statewire-transport.js.map +0 -1
  674. package/dist/packages/agent-runtime/src/streaming-markdown.cjs.map +0 -1
  675. package/dist/packages/agent-runtime/src/streaming-markdown.js.map +0 -1
  676. package/dist/packages/agent-runtime/src/thread-extras.cjs.map +0 -1
  677. package/dist/packages/agent-runtime/src/thread-extras.js.map +0 -1
  678. package/dist/packages/agent-runtime/src/thread-snapshot-cache.cjs.map +0 -1
  679. package/dist/packages/agent-runtime/src/thread-snapshot-cache.js.map +0 -1
  680. package/dist/packages/agent-runtime/src/thread-status.cjs.map +0 -1
  681. package/dist/packages/agent-runtime/src/thread-status.js.map +0 -1
  682. package/dist/packages/agent-runtime/src/tool-metadata.cjs.map +0 -1
  683. package/dist/packages/agent-runtime/src/tool-metadata.js.map +0 -1
  684. package/dist/packages/agent-runtime/src/tool-outputs.cjs.map +0 -1
  685. package/dist/packages/agent-runtime/src/tool-outputs.js.map +0 -1
  686. package/dist/packages/agent-runtime/src/tool-result.cjs.map +0 -1
  687. package/dist/packages/agent-runtime/src/tool-result.js.map +0 -1
  688. package/dist/packages/agent-runtime/src/use-conversation-list.cjs.map +0 -1
  689. package/dist/packages/agent-runtime/src/use-conversation-list.js.map +0 -1
  690. package/dist/packages/agent-runtime/src/use-deep-agent-config.cjs.map +0 -1
  691. package/dist/packages/agent-runtime/src/use-deep-agent-config.js.map +0 -1
  692. package/dist/packages/agent-runtime/src/use-deep-agent-edit-submit.cjs.map +0 -1
  693. package/dist/packages/agent-runtime/src/use-deep-agent-edit-submit.js.map +0 -1
  694. package/dist/packages/agent-runtime/src/use-deep-agent-runtime.cjs.map +0 -1
  695. package/dist/packages/agent-runtime/src/use-deep-agent-runtime.js.map +0 -1
  696. package/dist/packages/agent-runtime/src/use-deep-agent-thread.cjs.map +0 -1
  697. package/dist/packages/agent-runtime/src/use-deep-agent-thread.js.map +0 -1
  698. package/dist/packages/agent-runtime/src/use-deep-agent-window-sync.cjs.map +0 -1
  699. package/dist/packages/agent-runtime/src/use-deep-agent-window-sync.js.map +0 -1
  700. package/dist/packages/agent-runtime/src/voice-presentation.cjs.map +0 -1
  701. package/dist/packages/agent-runtime/src/voice-presentation.js.map +0 -1
  702. package/dist/packages/agent-runtime/src/voice-turn-grouping.cjs.map +0 -1
  703. package/dist/packages/agent-runtime/src/voice-turn-grouping.js.map +0 -1
  704. package/dist/packages/tiptap-markdown-table/src/markdown-table-serializer.cjs.map +0 -1
  705. package/dist/packages/tiptap-markdown-table/src/markdown-table-serializer.js.map +0 -1
  706. /package/dist/{packages/agent-runtime → agent-runtime}/src/asset-attachment.cjs +0 -0
  707. /package/dist/{packages/agent-runtime → agent-runtime}/src/asset-attachment.js +0 -0
  708. /package/dist/{packages/agent-runtime → agent-runtime}/src/auth-denial.cjs +0 -0
  709. /package/dist/{packages/agent-runtime → agent-runtime}/src/auth-denial.js +0 -0
  710. /package/dist/{packages/agent-runtime → agent-runtime}/src/client-tool-bridge.cjs +0 -0
  711. /package/dist/{packages/agent-runtime → agent-runtime}/src/client-tool-bridge.js +0 -0
  712. /package/dist/{packages/agent-runtime → agent-runtime}/src/client-tools.cjs +0 -0
  713. /package/dist/{packages/agent-runtime → agent-runtime}/src/client-tools.js +0 -0
  714. /package/dist/{packages/agent-runtime → agent-runtime}/src/conversation-index.cjs +0 -0
  715. /package/dist/{packages/agent-runtime → agent-runtime}/src/conversation-index.js +0 -0
  716. /package/dist/{packages/agent-runtime → agent-runtime}/src/edit-command.cjs +0 -0
  717. /package/dist/{packages/agent-runtime → agent-runtime}/src/edit-command.js +0 -0
  718. /package/dist/{packages/agent-runtime → agent-runtime}/src/github-wake-event.cjs +0 -0
  719. /package/dist/{packages/agent-runtime → agent-runtime}/src/github-wake-event.js +0 -0
  720. /package/dist/{packages/agent-runtime → agent-runtime}/src/message-author.cjs +0 -0
  721. /package/dist/{packages/agent-runtime → agent-runtime}/src/message-author.js +0 -0
  722. /package/dist/{packages/agent-runtime → agent-runtime}/src/message-window.cjs +0 -0
  723. /package/dist/{packages/agent-runtime → agent-runtime}/src/message-window.js +0 -0
  724. /package/dist/{packages/agent-runtime → agent-runtime}/src/model-context.cjs +0 -0
  725. /package/dist/{packages/agent-runtime → agent-runtime}/src/model-context.js +0 -0
  726. /package/dist/{packages/agent-runtime → agent-runtime}/src/optimistic-content.cjs +0 -0
  727. /package/dist/{packages/agent-runtime → agent-runtime}/src/optimistic-content.js +0 -0
  728. /package/dist/{packages/agent-runtime → agent-runtime}/src/protocol.cjs +0 -0
  729. /package/dist/{packages/agent-runtime → agent-runtime}/src/protocol.js +0 -0
  730. /package/dist/{packages/agent-runtime → agent-runtime}/src/runtime-messages.cjs +0 -0
  731. /package/dist/{packages/agent-runtime → agent-runtime}/src/runtime-messages.js +0 -0
  732. /package/dist/{packages/agent-runtime → agent-runtime}/src/screen-point.cjs +0 -0
  733. /package/dist/{packages/agent-runtime → agent-runtime}/src/screen-point.js +0 -0
  734. /package/dist/{packages/agent-runtime → agent-runtime}/src/send-recovery.cjs +0 -0
  735. /package/dist/{packages/agent-runtime → agent-runtime}/src/send-recovery.js +0 -0
  736. /package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-attach-observer.cjs +0 -0
  737. /package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-attach-observer.js +0 -0
  738. /package/dist/{packages/agent-runtime → agent-runtime}/src/streaming-markdown.cjs +0 -0
  739. /package/dist/{packages/agent-runtime → agent-runtime}/src/streaming-markdown.js +0 -0
  740. /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-extras.cjs +0 -0
  741. /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-extras.js +0 -0
  742. /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-snapshot-cache.cjs +0 -0
  743. /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-snapshot-cache.js +0 -0
  744. /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-status.cjs +0 -0
  745. /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-status.js +0 -0
  746. /package/dist/{packages/agent-runtime → agent-runtime}/src/tool-outputs.cjs +0 -0
  747. /package/dist/{packages/agent-runtime → agent-runtime}/src/tool-outputs.js +0 -0
  748. /package/dist/{packages/agent-runtime → agent-runtime}/src/tool-result.cjs +0 -0
  749. /package/dist/{packages/agent-runtime → agent-runtime}/src/tool-result.js +0 -0
  750. /package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-config.cjs +0 -0
  751. /package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-config.js +0 -0
  752. /package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-runtime.cjs +0 -0
  753. /package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-runtime.js +0 -0
  754. /package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-window-sync.cjs +0 -0
  755. /package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-window-sync.js +0 -0
  756. /package/dist/{packages/agent-runtime → agent-runtime}/src/voice-turn-grouping.cjs +0 -0
  757. /package/dist/{packages/agent-runtime → agent-runtime}/src/voice-turn-grouping.js +0 -0
  758. /package/dist/{packages/react → react}/package.json.cjs.map +0 -0
  759. /package/dist/{packages/react → react}/package.json.js.map +0 -0
  760. /package/dist/{packages/tiptap-markdown-table → tiptap-markdown-table}/src/markdown-table-serializer.cjs +0 -0
  761. /package/dist/{packages/tiptap-markdown-table → tiptap-markdown-table}/src/markdown-table-serializer.js +0 -0
@@ -1,181 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const utils = require("assistant-stream/utils");
4
- const internal = require("@assistant-ui/core/internal");
5
- const converter = require("../../react-langchain/dist/converter.cjs");
6
- const getToolArgsCacheKey = (messageId, kind, toolCallId) => `${messageId ?? "unknown"}:${kind}:${toolCallId}`;
7
- const resolveToolCallArgs = ({ chunk, matchingToolCallChunk, messageId, toolArgsKeyOrderCache, toolCallId }) => {
8
- const cacheKey = getToolArgsCacheKey(messageId, "tool", toolCallId);
9
- const streamedArgsText = (matchingToolCallChunk == null ? void 0 : matchingToolCallChunk.args) ?? (matchingToolCallChunk == null ? void 0 : matchingToolCallChunk.args_json);
10
- const isStreamingArglessChunk = matchingToolCallChunk !== void 0 && streamedArgsText === void 0 && Object.keys(chunk.args).length === 0;
11
- const providedArgsText = chunk.partial_json ?? streamedArgsText ?? (isStreamingArglessChunk ? "" : void 0);
12
- const argsText = providedArgsText ?? internal.stableStringifyToolArgs(toolArgsKeyOrderCache, cacheKey, chunk.args);
13
- const parsedPartialArgs = argsText ? utils.parsePartialJsonObject(argsText) : null;
14
- const args = argsText ? parsedPartialArgs ?? {} : chunk.args;
15
- internal.trackToolArgsKeyOrder(toolArgsKeyOrderCache, cacheKey, parsedPartialArgs ?? chunk.args);
16
- if (providedArgsText == null) toolArgsKeyOrderCache == null ? void 0 : toolArgsKeyOrderCache.delete(cacheKey);
17
- return {
18
- args,
19
- argsText
20
- };
21
- };
22
- const warnedMessagePartTypes = /* @__PURE__ */ new Set();
23
- const warnForUnknownMessagePartType = (type) => {
24
- var _a;
25
- if (typeof process === "undefined" || ((_a = process == null ? void 0 : process.env) == null ? void 0 : _a.NODE_ENV) !== "development") return;
26
- if (warnedMessagePartTypes.has(type)) return;
27
- warnedMessagePartTypes.add(type);
28
- console.warn(`Unknown message part type: ${type}`);
29
- };
30
- const warnedMessageTypes = /* @__PURE__ */ new Set();
31
- const warnForUnknownMessageType = (type) => {
32
- var _a;
33
- if (typeof process === "undefined" || ((_a = process == null ? void 0 : process.env) == null ? void 0 : _a.NODE_ENV) !== "development") return;
34
- if (warnedMessageTypes.has(type)) return;
35
- warnedMessageTypes.add(type);
36
- console.warn(`Unknown message type: ${type}`);
37
- };
38
- const contentToParts = (content, metadata, messageId) => {
39
- if (content == null) return [];
40
- if (typeof content === "string") return [{
41
- type: "text",
42
- text: content
43
- }];
44
- return content.map((part) => {
45
- if (part.type === "computer_call") {
46
- const args = part.action;
47
- return {
48
- type: "tool-call",
49
- toolCallId: part.call_id,
50
- toolName: "computer_call",
51
- args,
52
- argsText: internal.stableStringifyToolArgs(metadata.toolArgsKeyOrderCache, getToolArgsCacheKey(messageId, "computer", part.call_id), args)
53
- };
54
- }
55
- const converted = converter.convertLangChainContentBlock(part);
56
- if (converted === void 0) {
57
- warnForUnknownMessagePartType(part.type);
58
- return null;
59
- }
60
- return converted;
61
- }).filter((a) => a !== null);
62
- };
63
- const normalizePayload = (value) => {
64
- var _a;
65
- return ((_a = internal.parseDataUrl(value)) == null ? void 0 : _a.data) ?? value;
66
- };
67
- const attachmentPartKey = (part) => {
68
- if (part.type === "image" && typeof part.image === "string") return `image:${normalizePayload(part.image)}`;
69
- if (part.type === "file" && typeof part.data === "string") return `file:${normalizePayload(part.data)}`;
70
- if (part.type === "audio" && part.audio) return `file:${normalizePayload(part.audio.data)}`;
71
- return null;
72
- };
73
- const dropAttachmentDuplicates = (parts, attachments) => {
74
- const counts = /* @__PURE__ */ new Map();
75
- for (const part of attachments.flatMap((a) => a.content)) {
76
- const key = attachmentPartKey(part);
77
- if (key) counts.set(key, (counts.get(key) ?? 0) + 1);
78
- }
79
- if (counts.size === 0) return parts;
80
- const dropped = /* @__PURE__ */ new Set();
81
- for (let i = parts.length - 1; i >= 0; i--) {
82
- const key = attachmentPartKey(parts[i]);
83
- if (!key) continue;
84
- const remaining = counts.get(key);
85
- if (!remaining) continue;
86
- counts.set(key, remaining - 1);
87
- dropped.add(i);
88
- }
89
- if (dropped.size === 0) return parts;
90
- return parts.filter((_, i) => !dropped.has(i));
91
- };
92
- const convertLangChainMessages = (message, metadata = {}) => {
93
- var _a, _b, _c, _d, _e, _f, _g;
94
- const type = message.type;
95
- switch (type) {
96
- case "system":
97
- return {
98
- role: "system",
99
- id: message.id,
100
- content: [{
101
- type: "text",
102
- text: message.content
103
- }],
104
- metadata: { custom: converter.getCustomMetadata(message.additional_kwargs) }
105
- };
106
- case "human": {
107
- const attachments = message.id ? (_a = metadata.attachmentsByMessageId) == null ? void 0 : _a.get(message.id) : void 0;
108
- const parts = contentToParts(message.content, metadata, message.id);
109
- return {
110
- role: "user",
111
- id: message.id,
112
- content: (attachments == null ? void 0 : attachments.length) ? dropAttachmentDuplicates(parts, attachments) : parts,
113
- metadata: { custom: converter.getCustomMetadata(message.additional_kwargs) },
114
- ...(attachments == null ? void 0 : attachments.length) ? { attachments } : {}
115
- };
116
- }
117
- case "ai": {
118
- const toolCallParts = ((_b = message.tool_calls) == null ? void 0 : _b.map((chunk, idx) => {
119
- var _a2;
120
- const fallbackIndex = chunk.index ?? idx;
121
- const toolCallId = chunk.id ? chunk.id : `lc-toolcall-${message.id ?? "unknown"}-${fallbackIndex}`;
122
- const matchingToolCallChunk = (_a2 = message.tool_call_chunks) == null ? void 0 : _a2.find((c) => chunk.id ? c.id === chunk.id : c.index === fallbackIndex);
123
- const { args, argsText } = resolveToolCallArgs({
124
- chunk,
125
- matchingToolCallChunk,
126
- messageId: message.id,
127
- toolArgsKeyOrderCache: metadata.toolArgsKeyOrderCache,
128
- toolCallId
129
- });
130
- return {
131
- type: "tool-call",
132
- toolCallId,
133
- toolName: chunk.name,
134
- args,
135
- argsText
136
- };
137
- })) ?? [];
138
- const normalizedContent = typeof message.content === "string" ? [{
139
- type: "text",
140
- text: message.content
141
- }] : message.content ?? [];
142
- const allContent = [
143
- (_c = message.additional_kwargs) == null ? void 0 : _c.reasoning,
144
- ...normalizedContent,
145
- ...((_d = message.additional_kwargs) == null ? void 0 : _d.tool_outputs) ?? []
146
- ].filter((c) => c !== void 0);
147
- const uiDataParts = (message.id ? (_f = (_e = metadata.uiMessagesByParent) == null ? void 0 : _e.get(message.id)) == null ? void 0 : _f.map(converter.uiMessageToDataPart) : void 0) ?? [];
148
- const timing = message.id ? (_g = metadata.messageTiming) == null ? void 0 : _g[message.id] : void 0;
149
- return {
150
- role: "assistant",
151
- id: message.id,
152
- content: [
153
- ...converter.withAudioTranscript(contentToParts(allContent, metadata, message.id), message.additional_kwargs),
154
- ...toolCallParts,
155
- ...uiDataParts
156
- ],
157
- metadata: {
158
- custom: converter.getCustomMetadata(message.additional_kwargs),
159
- ...timing && { timing }
160
- },
161
- ...message.status && { status: message.status }
162
- };
163
- }
164
- case "remove":
165
- return [];
166
- case "tool":
167
- return {
168
- role: "tool",
169
- toolName: message.name,
170
- toolCallId: message.tool_call_id,
171
- result: message.content,
172
- artifact: message.artifact,
173
- isError: message.status === "error"
174
- };
175
- default:
176
- warnForUnknownMessageType(type);
177
- return [];
178
- }
179
- };
180
- exports.convertLangChainMessages = convertLangChainMessages;
181
- //# sourceMappingURL=convertLangChainMessages.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"convertLangChainMessages.cjs","sources":["../../../../../../../node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.js"],"sourcesContent":["\"use client\";\nimport { parsePartialJsonObject } from \"assistant-stream/utils\";\nimport { parseDataUrl, stableStringifyToolArgs, trackToolArgsKeyOrder } from \"@assistant-ui/core/internal\";\nimport { convertLangChainContentBlock, getCustomMetadata, getMessageContent, uiMessageToDataPart, withAudioTranscript } from \"@assistant-ui/react-langchain/converter\";\n//#region src/convertLangChainMessages.ts\nconst getToolArgsCacheKey = (messageId, kind, toolCallId) => `${messageId ?? \"unknown\"}:${kind}:${toolCallId}`;\nconst resolveToolCallArgs = ({ chunk, matchingToolCallChunk, messageId, toolArgsKeyOrderCache, toolCallId }) => {\n\tconst cacheKey = getToolArgsCacheKey(messageId, \"tool\", toolCallId);\n\tconst streamedArgsText = matchingToolCallChunk?.args ?? matchingToolCallChunk?.args_json;\n\tconst isStreamingArglessChunk = matchingToolCallChunk !== void 0 && streamedArgsText === void 0 && Object.keys(chunk.args).length === 0;\n\tconst providedArgsText = chunk.partial_json ?? streamedArgsText ?? (isStreamingArglessChunk ? \"\" : void 0);\n\tconst argsText = providedArgsText ?? stableStringifyToolArgs(toolArgsKeyOrderCache, cacheKey, chunk.args);\n\tconst parsedPartialArgs = argsText ? parsePartialJsonObject(argsText) : null;\n\tconst args = argsText ? parsedPartialArgs ?? {} : chunk.args;\n\ttrackToolArgsKeyOrder(toolArgsKeyOrderCache, cacheKey, parsedPartialArgs ?? chunk.args);\n\tif (providedArgsText == null) toolArgsKeyOrderCache?.delete(cacheKey);\n\treturn {\n\t\targs,\n\t\targsText\n\t};\n};\nconst warnedMessagePartTypes = /* @__PURE__ */ new Set();\nconst warnForUnknownMessagePartType = (type) => {\n\tif (typeof process === \"undefined\" || process?.env?.NODE_ENV !== \"development\") return;\n\tif (warnedMessagePartTypes.has(type)) return;\n\twarnedMessagePartTypes.add(type);\n\tconsole.warn(`Unknown message part type: ${type}`);\n};\nconst warnedMessageTypes = /* @__PURE__ */ new Set();\nconst warnForUnknownMessageType = (type) => {\n\tif (typeof process === \"undefined\" || process?.env?.NODE_ENV !== \"development\") return;\n\tif (warnedMessageTypes.has(type)) return;\n\twarnedMessageTypes.add(type);\n\tconsole.warn(`Unknown message type: ${type}`);\n};\nconst contentToParts = (content, metadata, messageId) => {\n\tif (content == null) return [];\n\tif (typeof content === \"string\") return [{\n\t\ttype: \"text\",\n\t\ttext: content\n\t}];\n\treturn content.map((part) => {\n\t\tif (part.type === \"computer_call\") {\n\t\t\tconst args = part.action;\n\t\t\treturn {\n\t\t\t\ttype: \"tool-call\",\n\t\t\t\ttoolCallId: part.call_id,\n\t\t\t\ttoolName: \"computer_call\",\n\t\t\t\targs,\n\t\t\t\targsText: stableStringifyToolArgs(metadata.toolArgsKeyOrderCache, getToolArgsCacheKey(messageId, \"computer\", part.call_id), args)\n\t\t\t};\n\t\t}\n\t\tconst converted = convertLangChainContentBlock(part);\n\t\tif (converted === void 0) {\n\t\t\twarnForUnknownMessagePartType(part.type);\n\t\t\treturn null;\n\t\t}\n\t\treturn converted;\n\t}).filter((a) => a !== null);\n};\nconst normalizePayload = (value) => parseDataUrl(value)?.data ?? value;\nconst attachmentPartKey = (part) => {\n\tif (part.type === \"image\" && typeof part.image === \"string\") return `image:${normalizePayload(part.image)}`;\n\tif (part.type === \"file\" && typeof part.data === \"string\") return `file:${normalizePayload(part.data)}`;\n\tif (part.type === \"audio\" && part.audio) return `file:${normalizePayload(part.audio.data)}`;\n\treturn null;\n};\n/**\n* getMessageContent flattens attachment content into the wire message while\n* the runtime reattaches the original attachments for chip rendering, so in\n* the sender's session each attachment payload arrives back twice. Drops the\n* flattened copies, at most one content part per attachment part, consuming\n* from the trailing end because getMessageContent appends the flattened\n* copies after the user's direct content; on reload the staging map is empty\n* and content parts pass through untouched.\n*/\nconst dropAttachmentDuplicates = (parts, attachments) => {\n\tconst counts = /* @__PURE__ */ new Map();\n\tfor (const part of attachments.flatMap((a) => a.content)) {\n\t\tconst key = attachmentPartKey(part);\n\t\tif (key) counts.set(key, (counts.get(key) ?? 0) + 1);\n\t}\n\tif (counts.size === 0) return parts;\n\tconst dropped = /* @__PURE__ */ new Set();\n\tfor (let i = parts.length - 1; i >= 0; i--) {\n\t\tconst key = attachmentPartKey(parts[i]);\n\t\tif (!key) continue;\n\t\tconst remaining = counts.get(key);\n\t\tif (!remaining) continue;\n\t\tcounts.set(key, remaining - 1);\n\t\tdropped.add(i);\n\t}\n\tif (dropped.size === 0) return parts;\n\treturn parts.filter((_, i) => !dropped.has(i));\n};\nconst convertLangChainMessages = (message, metadata = {}) => {\n\tconst type = message.type;\n\tswitch (type) {\n\t\tcase \"system\": return {\n\t\t\trole: \"system\",\n\t\t\tid: message.id,\n\t\t\tcontent: [{\n\t\t\t\ttype: \"text\",\n\t\t\t\ttext: message.content\n\t\t\t}],\n\t\t\tmetadata: { custom: getCustomMetadata(message.additional_kwargs) }\n\t\t};\n\t\tcase \"human\": {\n\t\t\tconst attachments = message.id ? metadata.attachmentsByMessageId?.get(message.id) : void 0;\n\t\t\tconst parts = contentToParts(message.content, metadata, message.id);\n\t\t\treturn {\n\t\t\t\trole: \"user\",\n\t\t\t\tid: message.id,\n\t\t\t\tcontent: attachments?.length ? dropAttachmentDuplicates(parts, attachments) : parts,\n\t\t\t\tmetadata: { custom: getCustomMetadata(message.additional_kwargs) },\n\t\t\t\t...attachments?.length ? { attachments } : {}\n\t\t\t};\n\t\t}\n\t\tcase \"ai\": {\n\t\t\tconst toolCallParts = message.tool_calls?.map((chunk, idx) => {\n\t\t\t\tconst fallbackIndex = chunk.index ?? idx;\n\t\t\t\tconst toolCallId = chunk.id ? chunk.id : `lc-toolcall-${message.id ?? \"unknown\"}-${fallbackIndex}`;\n\t\t\t\tconst matchingToolCallChunk = message.tool_call_chunks?.find((c) => chunk.id ? c.id === chunk.id : c.index === fallbackIndex);\n\t\t\t\tconst { args, argsText } = resolveToolCallArgs({\n\t\t\t\t\tchunk,\n\t\t\t\t\tmatchingToolCallChunk,\n\t\t\t\t\tmessageId: message.id,\n\t\t\t\t\ttoolArgsKeyOrderCache: metadata.toolArgsKeyOrderCache,\n\t\t\t\t\ttoolCallId\n\t\t\t\t});\n\t\t\t\treturn {\n\t\t\t\t\ttype: \"tool-call\",\n\t\t\t\t\ttoolCallId,\n\t\t\t\t\ttoolName: chunk.name,\n\t\t\t\t\targs,\n\t\t\t\t\targsText\n\t\t\t\t};\n\t\t\t}) ?? [];\n\t\t\tconst normalizedContent = typeof message.content === \"string\" ? [{\n\t\t\t\ttype: \"text\",\n\t\t\t\ttext: message.content\n\t\t\t}] : message.content ?? [];\n\t\t\tconst allContent = [\n\t\t\t\tmessage.additional_kwargs?.reasoning,\n\t\t\t\t...normalizedContent,\n\t\t\t\t...message.additional_kwargs?.tool_outputs ?? []\n\t\t\t].filter((c) => c !== void 0);\n\t\t\tconst uiDataParts = (message.id ? metadata.uiMessagesByParent?.get(message.id)?.map(uiMessageToDataPart) : void 0) ?? [];\n\t\t\tconst timing = message.id ? metadata.messageTiming?.[message.id] : void 0;\n\t\t\treturn {\n\t\t\t\trole: \"assistant\",\n\t\t\t\tid: message.id,\n\t\t\t\tcontent: [\n\t\t\t\t\t...withAudioTranscript(contentToParts(allContent, metadata, message.id), message.additional_kwargs),\n\t\t\t\t\t...toolCallParts,\n\t\t\t\t\t...uiDataParts\n\t\t\t\t],\n\t\t\t\tmetadata: {\n\t\t\t\t\tcustom: getCustomMetadata(message.additional_kwargs),\n\t\t\t\t\t...timing && { timing }\n\t\t\t\t},\n\t\t\t\t...message.status && { status: message.status }\n\t\t\t};\n\t\t}\n\t\tcase \"remove\": return [];\n\t\tcase \"tool\": return {\n\t\t\trole: \"tool\",\n\t\t\ttoolName: message.name,\n\t\t\ttoolCallId: message.tool_call_id,\n\t\t\tresult: message.content,\n\t\t\tartifact: message.artifact,\n\t\t\tisError: message.status === \"error\"\n\t\t};\n\t\tdefault:\n\t\t\twarnForUnknownMessageType(type);\n\t\t\treturn [];\n\t}\n};\n//#endregion\nexport { convertLangChainMessages, getMessageContent };\n\n//# sourceMappingURL=convertLangChainMessages.js.map"],"names":["stableStringifyToolArgs","parsePartialJsonObject","trackToolArgsKeyOrder","convertLangChainContentBlock","parseDataUrl","getCustomMetadata","_a","uiMessageToDataPart","withAudioTranscript"],"mappings":"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","x_google_ignoreList":[0]}
@@ -1,181 +0,0 @@
1
- import { parsePartialJsonObject } from "assistant-stream/utils";
2
- import { stableStringifyToolArgs, trackToolArgsKeyOrder, parseDataUrl } from "@assistant-ui/core/internal";
3
- import { uiMessageToDataPart, getCustomMetadata, withAudioTranscript, convertLangChainContentBlock } from "../../react-langchain/dist/converter.js";
4
- const getToolArgsCacheKey = (messageId, kind, toolCallId) => `${messageId ?? "unknown"}:${kind}:${toolCallId}`;
5
- const resolveToolCallArgs = ({ chunk, matchingToolCallChunk, messageId, toolArgsKeyOrderCache, toolCallId }) => {
6
- const cacheKey = getToolArgsCacheKey(messageId, "tool", toolCallId);
7
- const streamedArgsText = (matchingToolCallChunk == null ? void 0 : matchingToolCallChunk.args) ?? (matchingToolCallChunk == null ? void 0 : matchingToolCallChunk.args_json);
8
- const isStreamingArglessChunk = matchingToolCallChunk !== void 0 && streamedArgsText === void 0 && Object.keys(chunk.args).length === 0;
9
- const providedArgsText = chunk.partial_json ?? streamedArgsText ?? (isStreamingArglessChunk ? "" : void 0);
10
- const argsText = providedArgsText ?? stableStringifyToolArgs(toolArgsKeyOrderCache, cacheKey, chunk.args);
11
- const parsedPartialArgs = argsText ? parsePartialJsonObject(argsText) : null;
12
- const args = argsText ? parsedPartialArgs ?? {} : chunk.args;
13
- trackToolArgsKeyOrder(toolArgsKeyOrderCache, cacheKey, parsedPartialArgs ?? chunk.args);
14
- if (providedArgsText == null) toolArgsKeyOrderCache == null ? void 0 : toolArgsKeyOrderCache.delete(cacheKey);
15
- return {
16
- args,
17
- argsText
18
- };
19
- };
20
- const warnedMessagePartTypes = /* @__PURE__ */ new Set();
21
- const warnForUnknownMessagePartType = (type) => {
22
- var _a;
23
- if (typeof process === "undefined" || ((_a = process == null ? void 0 : process.env) == null ? void 0 : _a.NODE_ENV) !== "development") return;
24
- if (warnedMessagePartTypes.has(type)) return;
25
- warnedMessagePartTypes.add(type);
26
- console.warn(`Unknown message part type: ${type}`);
27
- };
28
- const warnedMessageTypes = /* @__PURE__ */ new Set();
29
- const warnForUnknownMessageType = (type) => {
30
- var _a;
31
- if (typeof process === "undefined" || ((_a = process == null ? void 0 : process.env) == null ? void 0 : _a.NODE_ENV) !== "development") return;
32
- if (warnedMessageTypes.has(type)) return;
33
- warnedMessageTypes.add(type);
34
- console.warn(`Unknown message type: ${type}`);
35
- };
36
- const contentToParts = (content, metadata, messageId) => {
37
- if (content == null) return [];
38
- if (typeof content === "string") return [{
39
- type: "text",
40
- text: content
41
- }];
42
- return content.map((part) => {
43
- if (part.type === "computer_call") {
44
- const args = part.action;
45
- return {
46
- type: "tool-call",
47
- toolCallId: part.call_id,
48
- toolName: "computer_call",
49
- args,
50
- argsText: stableStringifyToolArgs(metadata.toolArgsKeyOrderCache, getToolArgsCacheKey(messageId, "computer", part.call_id), args)
51
- };
52
- }
53
- const converted = convertLangChainContentBlock(part);
54
- if (converted === void 0) {
55
- warnForUnknownMessagePartType(part.type);
56
- return null;
57
- }
58
- return converted;
59
- }).filter((a) => a !== null);
60
- };
61
- const normalizePayload = (value) => {
62
- var _a;
63
- return ((_a = parseDataUrl(value)) == null ? void 0 : _a.data) ?? value;
64
- };
65
- const attachmentPartKey = (part) => {
66
- if (part.type === "image" && typeof part.image === "string") return `image:${normalizePayload(part.image)}`;
67
- if (part.type === "file" && typeof part.data === "string") return `file:${normalizePayload(part.data)}`;
68
- if (part.type === "audio" && part.audio) return `file:${normalizePayload(part.audio.data)}`;
69
- return null;
70
- };
71
- const dropAttachmentDuplicates = (parts, attachments) => {
72
- const counts = /* @__PURE__ */ new Map();
73
- for (const part of attachments.flatMap((a) => a.content)) {
74
- const key = attachmentPartKey(part);
75
- if (key) counts.set(key, (counts.get(key) ?? 0) + 1);
76
- }
77
- if (counts.size === 0) return parts;
78
- const dropped = /* @__PURE__ */ new Set();
79
- for (let i = parts.length - 1; i >= 0; i--) {
80
- const key = attachmentPartKey(parts[i]);
81
- if (!key) continue;
82
- const remaining = counts.get(key);
83
- if (!remaining) continue;
84
- counts.set(key, remaining - 1);
85
- dropped.add(i);
86
- }
87
- if (dropped.size === 0) return parts;
88
- return parts.filter((_, i) => !dropped.has(i));
89
- };
90
- const convertLangChainMessages = (message, metadata = {}) => {
91
- var _a, _b, _c, _d, _e, _f, _g;
92
- const type = message.type;
93
- switch (type) {
94
- case "system":
95
- return {
96
- role: "system",
97
- id: message.id,
98
- content: [{
99
- type: "text",
100
- text: message.content
101
- }],
102
- metadata: { custom: getCustomMetadata(message.additional_kwargs) }
103
- };
104
- case "human": {
105
- const attachments = message.id ? (_a = metadata.attachmentsByMessageId) == null ? void 0 : _a.get(message.id) : void 0;
106
- const parts = contentToParts(message.content, metadata, message.id);
107
- return {
108
- role: "user",
109
- id: message.id,
110
- content: (attachments == null ? void 0 : attachments.length) ? dropAttachmentDuplicates(parts, attachments) : parts,
111
- metadata: { custom: getCustomMetadata(message.additional_kwargs) },
112
- ...(attachments == null ? void 0 : attachments.length) ? { attachments } : {}
113
- };
114
- }
115
- case "ai": {
116
- const toolCallParts = ((_b = message.tool_calls) == null ? void 0 : _b.map((chunk, idx) => {
117
- var _a2;
118
- const fallbackIndex = chunk.index ?? idx;
119
- const toolCallId = chunk.id ? chunk.id : `lc-toolcall-${message.id ?? "unknown"}-${fallbackIndex}`;
120
- const matchingToolCallChunk = (_a2 = message.tool_call_chunks) == null ? void 0 : _a2.find((c) => chunk.id ? c.id === chunk.id : c.index === fallbackIndex);
121
- const { args, argsText } = resolveToolCallArgs({
122
- chunk,
123
- matchingToolCallChunk,
124
- messageId: message.id,
125
- toolArgsKeyOrderCache: metadata.toolArgsKeyOrderCache,
126
- toolCallId
127
- });
128
- return {
129
- type: "tool-call",
130
- toolCallId,
131
- toolName: chunk.name,
132
- args,
133
- argsText
134
- };
135
- })) ?? [];
136
- const normalizedContent = typeof message.content === "string" ? [{
137
- type: "text",
138
- text: message.content
139
- }] : message.content ?? [];
140
- const allContent = [
141
- (_c = message.additional_kwargs) == null ? void 0 : _c.reasoning,
142
- ...normalizedContent,
143
- ...((_d = message.additional_kwargs) == null ? void 0 : _d.tool_outputs) ?? []
144
- ].filter((c) => c !== void 0);
145
- const uiDataParts = (message.id ? (_f = (_e = metadata.uiMessagesByParent) == null ? void 0 : _e.get(message.id)) == null ? void 0 : _f.map(uiMessageToDataPart) : void 0) ?? [];
146
- const timing = message.id ? (_g = metadata.messageTiming) == null ? void 0 : _g[message.id] : void 0;
147
- return {
148
- role: "assistant",
149
- id: message.id,
150
- content: [
151
- ...withAudioTranscript(contentToParts(allContent, metadata, message.id), message.additional_kwargs),
152
- ...toolCallParts,
153
- ...uiDataParts
154
- ],
155
- metadata: {
156
- custom: getCustomMetadata(message.additional_kwargs),
157
- ...timing && { timing }
158
- },
159
- ...message.status && { status: message.status }
160
- };
161
- }
162
- case "remove":
163
- return [];
164
- case "tool":
165
- return {
166
- role: "tool",
167
- toolName: message.name,
168
- toolCallId: message.tool_call_id,
169
- result: message.content,
170
- artifact: message.artifact,
171
- isError: message.status === "error"
172
- };
173
- default:
174
- warnForUnknownMessageType(type);
175
- return [];
176
- }
177
- };
178
- export {
179
- convertLangChainMessages
180
- };
181
- //# sourceMappingURL=convertLangChainMessages.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"convertLangChainMessages.js","sources":["../../../../../../../node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.js"],"sourcesContent":["\"use client\";\nimport { parsePartialJsonObject } from \"assistant-stream/utils\";\nimport { parseDataUrl, stableStringifyToolArgs, trackToolArgsKeyOrder } from \"@assistant-ui/core/internal\";\nimport { convertLangChainContentBlock, getCustomMetadata, getMessageContent, uiMessageToDataPart, withAudioTranscript } from \"@assistant-ui/react-langchain/converter\";\n//#region src/convertLangChainMessages.ts\nconst getToolArgsCacheKey = (messageId, kind, toolCallId) => `${messageId ?? \"unknown\"}:${kind}:${toolCallId}`;\nconst resolveToolCallArgs = ({ chunk, matchingToolCallChunk, messageId, toolArgsKeyOrderCache, toolCallId }) => {\n\tconst cacheKey = getToolArgsCacheKey(messageId, \"tool\", toolCallId);\n\tconst streamedArgsText = matchingToolCallChunk?.args ?? matchingToolCallChunk?.args_json;\n\tconst isStreamingArglessChunk = matchingToolCallChunk !== void 0 && streamedArgsText === void 0 && Object.keys(chunk.args).length === 0;\n\tconst providedArgsText = chunk.partial_json ?? streamedArgsText ?? (isStreamingArglessChunk ? \"\" : void 0);\n\tconst argsText = providedArgsText ?? stableStringifyToolArgs(toolArgsKeyOrderCache, cacheKey, chunk.args);\n\tconst parsedPartialArgs = argsText ? parsePartialJsonObject(argsText) : null;\n\tconst args = argsText ? parsedPartialArgs ?? {} : chunk.args;\n\ttrackToolArgsKeyOrder(toolArgsKeyOrderCache, cacheKey, parsedPartialArgs ?? chunk.args);\n\tif (providedArgsText == null) toolArgsKeyOrderCache?.delete(cacheKey);\n\treturn {\n\t\targs,\n\t\targsText\n\t};\n};\nconst warnedMessagePartTypes = /* @__PURE__ */ new Set();\nconst warnForUnknownMessagePartType = (type) => {\n\tif (typeof process === \"undefined\" || process?.env?.NODE_ENV !== \"development\") return;\n\tif (warnedMessagePartTypes.has(type)) return;\n\twarnedMessagePartTypes.add(type);\n\tconsole.warn(`Unknown message part type: ${type}`);\n};\nconst warnedMessageTypes = /* @__PURE__ */ new Set();\nconst warnForUnknownMessageType = (type) => {\n\tif (typeof process === \"undefined\" || process?.env?.NODE_ENV !== \"development\") return;\n\tif (warnedMessageTypes.has(type)) return;\n\twarnedMessageTypes.add(type);\n\tconsole.warn(`Unknown message type: ${type}`);\n};\nconst contentToParts = (content, metadata, messageId) => {\n\tif (content == null) return [];\n\tif (typeof content === \"string\") return [{\n\t\ttype: \"text\",\n\t\ttext: content\n\t}];\n\treturn content.map((part) => {\n\t\tif (part.type === \"computer_call\") {\n\t\t\tconst args = part.action;\n\t\t\treturn {\n\t\t\t\ttype: \"tool-call\",\n\t\t\t\ttoolCallId: part.call_id,\n\t\t\t\ttoolName: \"computer_call\",\n\t\t\t\targs,\n\t\t\t\targsText: stableStringifyToolArgs(metadata.toolArgsKeyOrderCache, getToolArgsCacheKey(messageId, \"computer\", part.call_id), args)\n\t\t\t};\n\t\t}\n\t\tconst converted = convertLangChainContentBlock(part);\n\t\tif (converted === void 0) {\n\t\t\twarnForUnknownMessagePartType(part.type);\n\t\t\treturn null;\n\t\t}\n\t\treturn converted;\n\t}).filter((a) => a !== null);\n};\nconst normalizePayload = (value) => parseDataUrl(value)?.data ?? value;\nconst attachmentPartKey = (part) => {\n\tif (part.type === \"image\" && typeof part.image === \"string\") return `image:${normalizePayload(part.image)}`;\n\tif (part.type === \"file\" && typeof part.data === \"string\") return `file:${normalizePayload(part.data)}`;\n\tif (part.type === \"audio\" && part.audio) return `file:${normalizePayload(part.audio.data)}`;\n\treturn null;\n};\n/**\n* getMessageContent flattens attachment content into the wire message while\n* the runtime reattaches the original attachments for chip rendering, so in\n* the sender's session each attachment payload arrives back twice. Drops the\n* flattened copies, at most one content part per attachment part, consuming\n* from the trailing end because getMessageContent appends the flattened\n* copies after the user's direct content; on reload the staging map is empty\n* and content parts pass through untouched.\n*/\nconst dropAttachmentDuplicates = (parts, attachments) => {\n\tconst counts = /* @__PURE__ */ new Map();\n\tfor (const part of attachments.flatMap((a) => a.content)) {\n\t\tconst key = attachmentPartKey(part);\n\t\tif (key) counts.set(key, (counts.get(key) ?? 0) + 1);\n\t}\n\tif (counts.size === 0) return parts;\n\tconst dropped = /* @__PURE__ */ new Set();\n\tfor (let i = parts.length - 1; i >= 0; i--) {\n\t\tconst key = attachmentPartKey(parts[i]);\n\t\tif (!key) continue;\n\t\tconst remaining = counts.get(key);\n\t\tif (!remaining) continue;\n\t\tcounts.set(key, remaining - 1);\n\t\tdropped.add(i);\n\t}\n\tif (dropped.size === 0) return parts;\n\treturn parts.filter((_, i) => !dropped.has(i));\n};\nconst convertLangChainMessages = (message, metadata = {}) => {\n\tconst type = message.type;\n\tswitch (type) {\n\t\tcase \"system\": return {\n\t\t\trole: \"system\",\n\t\t\tid: message.id,\n\t\t\tcontent: [{\n\t\t\t\ttype: \"text\",\n\t\t\t\ttext: message.content\n\t\t\t}],\n\t\t\tmetadata: { custom: getCustomMetadata(message.additional_kwargs) }\n\t\t};\n\t\tcase \"human\": {\n\t\t\tconst attachments = message.id ? metadata.attachmentsByMessageId?.get(message.id) : void 0;\n\t\t\tconst parts = contentToParts(message.content, metadata, message.id);\n\t\t\treturn {\n\t\t\t\trole: \"user\",\n\t\t\t\tid: message.id,\n\t\t\t\tcontent: attachments?.length ? dropAttachmentDuplicates(parts, attachments) : parts,\n\t\t\t\tmetadata: { custom: getCustomMetadata(message.additional_kwargs) },\n\t\t\t\t...attachments?.length ? { attachments } : {}\n\t\t\t};\n\t\t}\n\t\tcase \"ai\": {\n\t\t\tconst toolCallParts = message.tool_calls?.map((chunk, idx) => {\n\t\t\t\tconst fallbackIndex = chunk.index ?? idx;\n\t\t\t\tconst toolCallId = chunk.id ? chunk.id : `lc-toolcall-${message.id ?? \"unknown\"}-${fallbackIndex}`;\n\t\t\t\tconst matchingToolCallChunk = message.tool_call_chunks?.find((c) => chunk.id ? c.id === chunk.id : c.index === fallbackIndex);\n\t\t\t\tconst { args, argsText } = resolveToolCallArgs({\n\t\t\t\t\tchunk,\n\t\t\t\t\tmatchingToolCallChunk,\n\t\t\t\t\tmessageId: message.id,\n\t\t\t\t\ttoolArgsKeyOrderCache: metadata.toolArgsKeyOrderCache,\n\t\t\t\t\ttoolCallId\n\t\t\t\t});\n\t\t\t\treturn {\n\t\t\t\t\ttype: \"tool-call\",\n\t\t\t\t\ttoolCallId,\n\t\t\t\t\ttoolName: chunk.name,\n\t\t\t\t\targs,\n\t\t\t\t\targsText\n\t\t\t\t};\n\t\t\t}) ?? [];\n\t\t\tconst normalizedContent = typeof message.content === \"string\" ? [{\n\t\t\t\ttype: \"text\",\n\t\t\t\ttext: message.content\n\t\t\t}] : message.content ?? [];\n\t\t\tconst allContent = [\n\t\t\t\tmessage.additional_kwargs?.reasoning,\n\t\t\t\t...normalizedContent,\n\t\t\t\t...message.additional_kwargs?.tool_outputs ?? []\n\t\t\t].filter((c) => c !== void 0);\n\t\t\tconst uiDataParts = (message.id ? metadata.uiMessagesByParent?.get(message.id)?.map(uiMessageToDataPart) : void 0) ?? [];\n\t\t\tconst timing = message.id ? metadata.messageTiming?.[message.id] : void 0;\n\t\t\treturn {\n\t\t\t\trole: \"assistant\",\n\t\t\t\tid: message.id,\n\t\t\t\tcontent: [\n\t\t\t\t\t...withAudioTranscript(contentToParts(allContent, metadata, message.id), message.additional_kwargs),\n\t\t\t\t\t...toolCallParts,\n\t\t\t\t\t...uiDataParts\n\t\t\t\t],\n\t\t\t\tmetadata: {\n\t\t\t\t\tcustom: getCustomMetadata(message.additional_kwargs),\n\t\t\t\t\t...timing && { timing }\n\t\t\t\t},\n\t\t\t\t...message.status && { status: message.status }\n\t\t\t};\n\t\t}\n\t\tcase \"remove\": return [];\n\t\tcase \"tool\": return {\n\t\t\trole: \"tool\",\n\t\t\ttoolName: message.name,\n\t\t\ttoolCallId: message.tool_call_id,\n\t\t\tresult: message.content,\n\t\t\tartifact: message.artifact,\n\t\t\tisError: message.status === \"error\"\n\t\t};\n\t\tdefault:\n\t\t\twarnForUnknownMessageType(type);\n\t\t\treturn [];\n\t}\n};\n//#endregion\nexport { convertLangChainMessages, getMessageContent };\n\n//# sourceMappingURL=convertLangChainMessages.js.map"],"names":["_a"],"mappings":"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","x_google_ignoreList":[0]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"asset-attachment.cjs","sources":["../../../../../agent-runtime/src/asset-attachment.ts"],"sourcesContent":["import type {\n Attachment,\n AttachmentAdapter,\n CompleteAttachment,\n PendingAttachment,\n} from '@assistant-ui/core';\n\n/**\n * Shared Athena asset-attachment choreography (issue #29088): upload the file\n * as a normal Athena asset, insert its final mention into the host composer,\n * and yield no assistant-ui attachment tile — the deep-agent backend resolves\n * the mention (documents via read_asset, images inlined server-side), so no\n * duplicate base64 part ever enters statewire. No preparation state rides the\n * wire: readiness is local to the composer doing the attaching.\n */\n\nexport interface UploadedChatAsset {\n id: string;\n title: string;\n assetType: string;\n}\n\n/** Composer mention-insertion hook. The source file stays local to the client\n * and lets rich composers show a preview without putting image bytes on the\n * statewire. The return value is awaited when it is a promise and otherwise\n * ignored, so ordinary event-handler arrows fit. */\nexport type ChatAssetMentionHandler = (\n asset: UploadedChatAsset,\n sourceFile?: File,\n) => unknown;\n\n/**\n * The registry lives on `globalThis`, not in module scope, because two copies\n * of this module can run in one page: the SDK bundles agent-runtime into its\n * dist (the package is private, so the published SDK must inline it) while a\n * host such as the Chrome extension imports agent-runtime directly. The SDK\n * composer registers through the SDK's copy and the host's attachment adapter\n * looks the handler up through its own, so a module-local map would never see\n * the registration.\n */\nconst MENTION_HANDLER_REGISTRY = Symbol.for(\n '@athenaintel/agent-runtime/chat-asset-mention-handlers'\n);\n\ntype MentionHandlerRegistryHost = typeof globalThis & {\n [MENTION_HANDLER_REGISTRY]?: Map<string, ChatAssetMentionHandler>;\n};\n\nfunction mentionHandlersByThread(): Map<string, ChatAssetMentionHandler> {\n const host = globalThis as MentionHandlerRegistryHost;\n return (host[MENTION_HANDLER_REGISTRY] ??= new Map());\n}\n\n/**\n * Register the composer's mention-insertion hook for one thread. The hook is\n * the per-client seam — TipTap on web, the native editor bridge on mobile —\n * and the identity-checked unregister keeps a stale composer from clobbering\n * a newer registration.\n */\nexport function registerChatAssetMentionHandler(\n threadId: string,\n handler: ChatAssetMentionHandler\n): () => void {\n mentionHandlersByThread().set(threadId, handler);\n return () => {\n if (mentionHandlersByThread().get(threadId) === handler) {\n mentionHandlersByThread().delete(threadId);\n }\n };\n}\n\nexport function getChatAssetMentionHandler(\n threadId: string\n): ChatAssetMentionHandler | undefined {\n return mentionHandlersByThread().get(threadId);\n}\n\nexport interface ChatAssetUploadResponse {\n success?: Array<{\n id?: unknown;\n title?: unknown;\n file_name?: unknown;\n athena_original_type?: unknown;\n }>;\n}\n\n/**\n * Map agora's `/api/upload/` response to the mention payload. Title falls\n * back `title → file_name → local file name`; the asset type falls back to\n * the caller's sniffed default when the row carries none.\n */\nexport function uploadedChatAsset(args: {\n body: ChatAssetUploadResponse;\n fallbackTitle: string;\n fallbackAssetType: string;\n}): UploadedChatAsset {\n const row = args.body.success?.[0];\n if (!row || typeof row.id !== 'string') {\n throw new Error('The upload finished without creating an asset.');\n }\n const title =\n typeof row.title === 'string' && row.title.trim()\n ? row.title\n : typeof row.file_name === 'string' && row.file_name.trim()\n ? row.file_name\n : args.fallbackTitle;\n return {\n id: row.id,\n title,\n assetType:\n typeof row.athena_original_type === 'string' && row.athena_original_type.length > 0\n ? row.athena_original_type\n : args.fallbackAssetType,\n };\n}\n\n/** The local default when the upload response carries no asset type. */\nexport function sniffAssetTypeForFile(file: { type: string }): string {\n if (file.type.startsWith('image/')) return 'image';\n if (file.type === 'application/pdf') return 'pdf';\n return 'file';\n}\n\nexport interface UploadChatAssetOptions {\n /** Agora base URL (trailing slashes tolerated). */\n baseUrl: string;\n file: File;\n /** Auth headers for the upload request. */\n headers: () => Promise<Record<string, string>> | Record<string, string>;\n /**\n * Fresh headers for exactly one retry after a 401 (e.g. a force-renewed\n * token). Omitted, a 401 fails like any other error status.\n */\n retryHeadersOn401?: () => Promise<Record<string, string>> | Record<string, string>;\n /** Upload timeout; the request aborts (and the add() rejects) past it. */\n timeoutMs?: number;\n}\n\nconst DEFAULT_UPLOAD_TIMEOUT_MS = 60_000;\n\nasync function uploadOnce(\n options: UploadChatAssetOptions,\n headers: Record<string, string>\n): Promise<Response> {\n const form = new FormData();\n form.append('files', options.file, options.file.name);\n return fetch(`${options.baseUrl.replace(/\\/+$/, '')}/api/upload/`, {\n method: 'POST',\n headers,\n body: form,\n signal: AbortSignal.timeout(options.timeoutMs ?? DEFAULT_UPLOAD_TIMEOUT_MS),\n });\n}\n\n/**\n * Upload one file as an Athena asset through agora's `/api/upload/`.\n * Cancellation and the timeout live inside the adapter path by construction:\n * the abort signal rejects the `add()` generator, so the composer's send\n * (which awaits adapter completion) can never race a hung upload.\n */\nexport async function uploadChatAsset(\n options: UploadChatAssetOptions\n): Promise<UploadedChatAsset> {\n let response = await uploadOnce(options, await options.headers());\n if (response.status === 401 && options.retryHeadersOn401) {\n response = await uploadOnce(options, await options.retryHeadersOn401());\n }\n if (!response.ok) {\n const detail = await response.text().catch(() => '');\n throw new Error(\n `Attachment upload failed (${response.status})${\n detail ? `: ${detail.slice(0, 200)}` : ''\n }`\n );\n }\n return uploadedChatAsset({\n body: (await response.json()) as ChatAssetUploadResponse,\n fallbackTitle: options.file.name,\n fallbackAssetType: sniffAssetTypeForFile(options.file),\n });\n}\n\nexport interface AthenaAssetAttachmentAdapterOptions {\n threadId: string;\n /** File-picker filter; defaults to images (the deep-agent mention path). */\n accept?: string;\n /** Platform upload transport; most hosts wrap {@link uploadChatAsset}. */\n upload: (file: File) => Promise<UploadedChatAsset>;\n}\n\n/**\n * The shared mention-backed attachment adapter: `add()` requires the thread's\n * registered composer hook up front (no upload cost when the composer is\n * gone), uploads, then inserts the mention into the thread's CURRENT hook —\n * a same-thread composer remount mid-upload still receives the mention, and\n * the thread-keyed registry makes cross-thread insertion impossible by\n * construction. A thread whose hook is gone after the upload rejects with a\n * visible error (the conversation closed; the user must re-attach).\n * `send()` throws by contract: mention-backed attachments are never message\n * parts.\n */\nexport class AthenaAssetAttachmentAdapter implements AttachmentAdapter {\n readonly accept: string;\n\n constructor(private readonly options: AthenaAssetAttachmentAdapterOptions) {\n this.accept = options.accept ?? 'image/*';\n }\n\n // eslint-disable-next-line require-yield -- mention-backed uploads deliberately create no attachment tile\n async *add(args: { file: File }): AsyncGenerator<PendingAttachment, void> {\n const handler = getChatAssetMentionHandler(this.options.threadId);\n if (handler === undefined) {\n throw new Error('The original conversation is no longer open.');\n }\n const uploaded = await this.options.upload(args.file);\n const current = getChatAssetMentionHandler(this.options.threadId);\n if (current === undefined) {\n throw new Error('The original conversation is no longer open.');\n }\n await current(uploaded, args.file);\n }\n\n async remove(_attachment: Attachment): Promise<void> {}\n\n async send(_attachment: PendingAttachment): Promise<CompleteAttachment> {\n throw new Error('Mention-backed attachments are not sent as message parts.');\n }\n}\n"],"names":[],"mappings":";;AAwCA,MAAM,2BAA2B,OAAO;AAAA,EACtC;AACF;AAMA,SAAS,0BAAgE;AACvE,QAAM,OAAO;AACb,SAAQ,oEAAmC,oBAAI,IAAA;AACjD;AAQO,SAAS,gCACd,UACA,SACY;AACZ,4BAA0B,IAAI,UAAU,OAAO;AAC/C,SAAO,MAAM;AACX,QAAI,wBAAA,EAA0B,IAAI,QAAQ,MAAM,SAAS;AACvD,8BAAA,EAA0B,OAAO,QAAQ;AAAA,IAC3C;AAAA,EACF;AACF;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"asset-attachment.js","sources":["../../../../../agent-runtime/src/asset-attachment.ts"],"sourcesContent":["import type {\n Attachment,\n AttachmentAdapter,\n CompleteAttachment,\n PendingAttachment,\n} from '@assistant-ui/core';\n\n/**\n * Shared Athena asset-attachment choreography (issue #29088): upload the file\n * as a normal Athena asset, insert its final mention into the host composer,\n * and yield no assistant-ui attachment tile — the deep-agent backend resolves\n * the mention (documents via read_asset, images inlined server-side), so no\n * duplicate base64 part ever enters statewire. No preparation state rides the\n * wire: readiness is local to the composer doing the attaching.\n */\n\nexport interface UploadedChatAsset {\n id: string;\n title: string;\n assetType: string;\n}\n\n/** Composer mention-insertion hook. The source file stays local to the client\n * and lets rich composers show a preview without putting image bytes on the\n * statewire. The return value is awaited when it is a promise and otherwise\n * ignored, so ordinary event-handler arrows fit. */\nexport type ChatAssetMentionHandler = (\n asset: UploadedChatAsset,\n sourceFile?: File,\n) => unknown;\n\n/**\n * The registry lives on `globalThis`, not in module scope, because two copies\n * of this module can run in one page: the SDK bundles agent-runtime into its\n * dist (the package is private, so the published SDK must inline it) while a\n * host such as the Chrome extension imports agent-runtime directly. The SDK\n * composer registers through the SDK's copy and the host's attachment adapter\n * looks the handler up through its own, so a module-local map would never see\n * the registration.\n */\nconst MENTION_HANDLER_REGISTRY = Symbol.for(\n '@athenaintel/agent-runtime/chat-asset-mention-handlers'\n);\n\ntype MentionHandlerRegistryHost = typeof globalThis & {\n [MENTION_HANDLER_REGISTRY]?: Map<string, ChatAssetMentionHandler>;\n};\n\nfunction mentionHandlersByThread(): Map<string, ChatAssetMentionHandler> {\n const host = globalThis as MentionHandlerRegistryHost;\n return (host[MENTION_HANDLER_REGISTRY] ??= new Map());\n}\n\n/**\n * Register the composer's mention-insertion hook for one thread. The hook is\n * the per-client seam — TipTap on web, the native editor bridge on mobile —\n * and the identity-checked unregister keeps a stale composer from clobbering\n * a newer registration.\n */\nexport function registerChatAssetMentionHandler(\n threadId: string,\n handler: ChatAssetMentionHandler\n): () => void {\n mentionHandlersByThread().set(threadId, handler);\n return () => {\n if (mentionHandlersByThread().get(threadId) === handler) {\n mentionHandlersByThread().delete(threadId);\n }\n };\n}\n\nexport function getChatAssetMentionHandler(\n threadId: string\n): ChatAssetMentionHandler | undefined {\n return mentionHandlersByThread().get(threadId);\n}\n\nexport interface ChatAssetUploadResponse {\n success?: Array<{\n id?: unknown;\n title?: unknown;\n file_name?: unknown;\n athena_original_type?: unknown;\n }>;\n}\n\n/**\n * Map agora's `/api/upload/` response to the mention payload. Title falls\n * back `title → file_name → local file name`; the asset type falls back to\n * the caller's sniffed default when the row carries none.\n */\nexport function uploadedChatAsset(args: {\n body: ChatAssetUploadResponse;\n fallbackTitle: string;\n fallbackAssetType: string;\n}): UploadedChatAsset {\n const row = args.body.success?.[0];\n if (!row || typeof row.id !== 'string') {\n throw new Error('The upload finished without creating an asset.');\n }\n const title =\n typeof row.title === 'string' && row.title.trim()\n ? row.title\n : typeof row.file_name === 'string' && row.file_name.trim()\n ? row.file_name\n : args.fallbackTitle;\n return {\n id: row.id,\n title,\n assetType:\n typeof row.athena_original_type === 'string' && row.athena_original_type.length > 0\n ? row.athena_original_type\n : args.fallbackAssetType,\n };\n}\n\n/** The local default when the upload response carries no asset type. */\nexport function sniffAssetTypeForFile(file: { type: string }): string {\n if (file.type.startsWith('image/')) return 'image';\n if (file.type === 'application/pdf') return 'pdf';\n return 'file';\n}\n\nexport interface UploadChatAssetOptions {\n /** Agora base URL (trailing slashes tolerated). */\n baseUrl: string;\n file: File;\n /** Auth headers for the upload request. */\n headers: () => Promise<Record<string, string>> | Record<string, string>;\n /**\n * Fresh headers for exactly one retry after a 401 (e.g. a force-renewed\n * token). Omitted, a 401 fails like any other error status.\n */\n retryHeadersOn401?: () => Promise<Record<string, string>> | Record<string, string>;\n /** Upload timeout; the request aborts (and the add() rejects) past it. */\n timeoutMs?: number;\n}\n\nconst DEFAULT_UPLOAD_TIMEOUT_MS = 60_000;\n\nasync function uploadOnce(\n options: UploadChatAssetOptions,\n headers: Record<string, string>\n): Promise<Response> {\n const form = new FormData();\n form.append('files', options.file, options.file.name);\n return fetch(`${options.baseUrl.replace(/\\/+$/, '')}/api/upload/`, {\n method: 'POST',\n headers,\n body: form,\n signal: AbortSignal.timeout(options.timeoutMs ?? DEFAULT_UPLOAD_TIMEOUT_MS),\n });\n}\n\n/**\n * Upload one file as an Athena asset through agora's `/api/upload/`.\n * Cancellation and the timeout live inside the adapter path by construction:\n * the abort signal rejects the `add()` generator, so the composer's send\n * (which awaits adapter completion) can never race a hung upload.\n */\nexport async function uploadChatAsset(\n options: UploadChatAssetOptions\n): Promise<UploadedChatAsset> {\n let response = await uploadOnce(options, await options.headers());\n if (response.status === 401 && options.retryHeadersOn401) {\n response = await uploadOnce(options, await options.retryHeadersOn401());\n }\n if (!response.ok) {\n const detail = await response.text().catch(() => '');\n throw new Error(\n `Attachment upload failed (${response.status})${\n detail ? `: ${detail.slice(0, 200)}` : ''\n }`\n );\n }\n return uploadedChatAsset({\n body: (await response.json()) as ChatAssetUploadResponse,\n fallbackTitle: options.file.name,\n fallbackAssetType: sniffAssetTypeForFile(options.file),\n });\n}\n\nexport interface AthenaAssetAttachmentAdapterOptions {\n threadId: string;\n /** File-picker filter; defaults to images (the deep-agent mention path). */\n accept?: string;\n /** Platform upload transport; most hosts wrap {@link uploadChatAsset}. */\n upload: (file: File) => Promise<UploadedChatAsset>;\n}\n\n/**\n * The shared mention-backed attachment adapter: `add()` requires the thread's\n * registered composer hook up front (no upload cost when the composer is\n * gone), uploads, then inserts the mention into the thread's CURRENT hook —\n * a same-thread composer remount mid-upload still receives the mention, and\n * the thread-keyed registry makes cross-thread insertion impossible by\n * construction. A thread whose hook is gone after the upload rejects with a\n * visible error (the conversation closed; the user must re-attach).\n * `send()` throws by contract: mention-backed attachments are never message\n * parts.\n */\nexport class AthenaAssetAttachmentAdapter implements AttachmentAdapter {\n readonly accept: string;\n\n constructor(private readonly options: AthenaAssetAttachmentAdapterOptions) {\n this.accept = options.accept ?? 'image/*';\n }\n\n // eslint-disable-next-line require-yield -- mention-backed uploads deliberately create no attachment tile\n async *add(args: { file: File }): AsyncGenerator<PendingAttachment, void> {\n const handler = getChatAssetMentionHandler(this.options.threadId);\n if (handler === undefined) {\n throw new Error('The original conversation is no longer open.');\n }\n const uploaded = await this.options.upload(args.file);\n const current = getChatAssetMentionHandler(this.options.threadId);\n if (current === undefined) {\n throw new Error('The original conversation is no longer open.');\n }\n await current(uploaded, args.file);\n }\n\n async remove(_attachment: Attachment): Promise<void> {}\n\n async send(_attachment: PendingAttachment): Promise<CompleteAttachment> {\n throw new Error('Mention-backed attachments are not sent as message parts.');\n }\n}\n"],"names":[],"mappings":"AAwCA,MAAM,2BAA2B,OAAO;AAAA,EACtC;AACF;AAMA,SAAS,0BAAgE;AACvE,QAAM,OAAO;AACb,SAAQ,oEAAmC,oBAAI,IAAA;AACjD;AAQO,SAAS,gCACd,UACA,SACY;AACZ,4BAA0B,IAAI,UAAU,OAAO;AAC/C,SAAO,MAAM;AACX,QAAI,wBAAA,EAA0B,IAAI,QAAQ,MAAM,SAAS;AACvD,8BAAA,EAA0B,OAAO,QAAQ;AAAA,IAC3C;AAAA,EACF;AACF;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth-denial.cjs","sources":["../../../../../agent-runtime/src/auth-denial.ts"],"sourcesContent":["import type { DeepAgentConnectionState } from './types';\n\n/**\n * How many consecutive `unauthorized` attach denials park the transport.\n *\n * The client's reconnect backoff reaches its 30s ceiling around the eighth\n * attempt, so eight denials ≈ one minute of the server actively refusing the\n * credential. Transient auth blips (a tab waking with a stale token that\n * refreshes on the next attempt) recover in one or two attempts and never\n * park; a credential the server keeps refusing (revoked access, no workspace)\n * would otherwise retry every 30s indefinitely — the prod \"attach denied\"\n * loops ran for hours per tab.\n */\nexport const AUTH_DENIAL_PARK_THRESHOLD = 8;\n\nexport interface AuthDenialTrackerState {\n /** Reconnect attempt number of the last counted denial (dedupes converter re-runs). */\n lastAttempt: number | null;\n /** Consecutive `unauthorized` denials observed on this attach. */\n consecutive: number;\n /** The denial's host-supplied message, kept for the parked connection state. */\n message: string | undefined;\n}\n\nexport const initialAuthDenialTrackerState = (): AuthDenialTrackerState => ({\n lastAttempt: null,\n consecutive: 0,\n message: undefined,\n});\n\n/** Count distinct unauthorized retries, preserving the streak during each dial. */\nexport function observeAuthDenial(\n state: AuthDenialTrackerState,\n connection: DeepAgentConnectionState,\n { threshold = AUTH_DENIAL_PARK_THRESHOLD }: { threshold?: number } = {}\n): { state: AuthDenialTrackerState; park: boolean } {\n if (connection.status !== 'retrying' || connection.cause !== 'unauthorized') {\n if (\n connection.status === 'connecting' ||\n (connection.status === 'retrying' && connection.cause === undefined)\n ) {\n return { state, park: false };\n }\n return { state: initialAuthDenialTrackerState(), park: false };\n }\n const attempt = connection.attempt;\n if (attempt === state.lastAttempt) return { state, park: false };\n const next: AuthDenialTrackerState = {\n lastAttempt: attempt,\n consecutive: state.consecutive + 1,\n message: connection.message ?? state.message,\n };\n return { state: next, park: next.consecutive >= threshold };\n}\n"],"names":[],"mappings":";;AAaO,MAAM,6BAA6B;AAWnC,MAAM,gCAAgC,OAA+B;AAAA,EAC1E,aAAa;AAAA,EACb,aAAa;AAAA,EACb,SAAS;AACX;AAGO,SAAS,kBACd,OACA,YACA,EAAE,YAAY,2BAAA,IAAuD,IACnB;AAClD,MAAI,WAAW,WAAW,cAAc,WAAW,UAAU,gBAAgB;AAC3E,QACE,WAAW,WAAW,gBACrB,WAAW,WAAW,cAAc,WAAW,UAAU,QAC1D;AACA,aAAO,EAAE,OAAO,MAAM,MAAA;AAAA,IACxB;AACA,WAAO,EAAE,OAAO,iCAAiC,MAAM,MAAA;AAAA,EACzD;AACA,QAAM,UAAU,WAAW;AAC3B,MAAI,YAAY,MAAM,oBAAoB,EAAE,OAAO,MAAM,MAAA;AACzD,QAAM,OAA+B;AAAA,IACnC,aAAa;AAAA,IACb,aAAa,MAAM,cAAc;AAAA,IACjC,SAAS,WAAW,WAAW,MAAM;AAAA,EAAA;AAEvC,SAAO,EAAE,OAAO,MAAM,MAAM,KAAK,eAAe,UAAA;AAClD;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth-denial.js","sources":["../../../../../agent-runtime/src/auth-denial.ts"],"sourcesContent":["import type { DeepAgentConnectionState } from './types';\n\n/**\n * How many consecutive `unauthorized` attach denials park the transport.\n *\n * The client's reconnect backoff reaches its 30s ceiling around the eighth\n * attempt, so eight denials ≈ one minute of the server actively refusing the\n * credential. Transient auth blips (a tab waking with a stale token that\n * refreshes on the next attempt) recover in one or two attempts and never\n * park; a credential the server keeps refusing (revoked access, no workspace)\n * would otherwise retry every 30s indefinitely — the prod \"attach denied\"\n * loops ran for hours per tab.\n */\nexport const AUTH_DENIAL_PARK_THRESHOLD = 8;\n\nexport interface AuthDenialTrackerState {\n /** Reconnect attempt number of the last counted denial (dedupes converter re-runs). */\n lastAttempt: number | null;\n /** Consecutive `unauthorized` denials observed on this attach. */\n consecutive: number;\n /** The denial's host-supplied message, kept for the parked connection state. */\n message: string | undefined;\n}\n\nexport const initialAuthDenialTrackerState = (): AuthDenialTrackerState => ({\n lastAttempt: null,\n consecutive: 0,\n message: undefined,\n});\n\n/** Count distinct unauthorized retries, preserving the streak during each dial. */\nexport function observeAuthDenial(\n state: AuthDenialTrackerState,\n connection: DeepAgentConnectionState,\n { threshold = AUTH_DENIAL_PARK_THRESHOLD }: { threshold?: number } = {}\n): { state: AuthDenialTrackerState; park: boolean } {\n if (connection.status !== 'retrying' || connection.cause !== 'unauthorized') {\n if (\n connection.status === 'connecting' ||\n (connection.status === 'retrying' && connection.cause === undefined)\n ) {\n return { state, park: false };\n }\n return { state: initialAuthDenialTrackerState(), park: false };\n }\n const attempt = connection.attempt;\n if (attempt === state.lastAttempt) return { state, park: false };\n const next: AuthDenialTrackerState = {\n lastAttempt: attempt,\n consecutive: state.consecutive + 1,\n message: connection.message ?? state.message,\n };\n return { state: next, park: next.consecutive >= threshold };\n}\n"],"names":[],"mappings":"AAaO,MAAM,6BAA6B;AAWnC,MAAM,gCAAgC,OAA+B;AAAA,EAC1E,aAAa;AAAA,EACb,aAAa;AAAA,EACb,SAAS;AACX;AAGO,SAAS,kBACd,OACA,YACA,EAAE,YAAY,2BAAA,IAAuD,IACnB;AAClD,MAAI,WAAW,WAAW,cAAc,WAAW,UAAU,gBAAgB;AAC3E,QACE,WAAW,WAAW,gBACrB,WAAW,WAAW,cAAc,WAAW,UAAU,QAC1D;AACA,aAAO,EAAE,OAAO,MAAM,MAAA;AAAA,IACxB;AACA,WAAO,EAAE,OAAO,iCAAiC,MAAM,MAAA;AAAA,EACzD;AACA,QAAM,UAAU,WAAW;AAC3B,MAAI,YAAY,MAAM,oBAAoB,EAAE,OAAO,MAAM,MAAA;AACzD,QAAM,OAA+B;AAAA,IACnC,aAAa;AAAA,IACb,aAAa,MAAM,cAAc;AAAA,IACjC,SAAS,WAAW,WAAW,MAAM;AAAA,EAAA;AAEvC,SAAO,EAAE,OAAO,MAAM,MAAM,KAAK,eAAe,UAAA;AAClD;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"client-tool-bridge.cjs","sources":["../../../../../agent-runtime/src/client-tool-bridge.ts"],"sourcesContent":["/**\n * The statewire client-tool bridge loop, shared by every surface that executes\n * frontend tool calls (Olympus, the React SDK, the Office add-in, mobile).\n *\n * Tools declared through `runConfig.custom.client_tools` have no backend\n * implementation: a call parks the run on an interrupt that arrives as a\n * statewire input request. A bridge with handlers for the whole batch claims\n * it (exactly-once per ownership domain), runs those handlers, and resumes\n * with per-call result envelopes. Other attached tabs leave it for the\n * executing surface; a thrown handler still returns an actionable error.\n *\n * Wire-adjacent correctness invariants this module owns, so they can never\n * drift apart per surface again:\n * - exactly-once claim per request, with un-claim on every path that did NOT\n * run any handler (abandoned before execution, consent dismissed, unmount\n * before the first handler) so a re-emitted request is executable instead\n * of stranding the run;\n * - once a batch has STARTED executing handlers, its claim is never released\n * by unmount: handlers cannot be cancelled, so releasing would let another\n * mount re-claim the re-emitted request and re-execute side effects that\n * already ran (double-executing a mutating tool). The completed wire-safe\n * result is cached and may be replayed across reconnects/remounts instead;\n * - liveness checks between awaits (the run can be stopped or answered\n * elsewhere while a handler runs) so a stale request is never resumed;\n * - per-call JSON wire-safety, so one unrepresentable handler result answers\n * that one call with an error instead of failing the whole batch.\n *\n * Like `interrupts.ts`, this is parameterized rather than self-wiring: the\n * host component reads `useStatewireRuns().inputRequests` and\n * `useStatewireSendCommand()` itself (both mockable per surface) and passes\n * them in, together with its ownership tracker and write-consent policy.\n */\n\nimport type { StatewireThread } from '@assistant-ui/react-statewire';\nimport { useCallback, useEffect, useRef } from 'react';\nimport {\n type ClientToolCallRequest,\n type ClientToolRequestTracker,\n type ClientToolResultEnvelope,\n clientToolCallArgs,\n clientToolErrorEnvelope,\n clientToolResultsResumeValue,\n clientToolSuccessEnvelope,\n isClientToolInterrupt,\n} from './client-tools';\n\n/** A locally executable tool, normalized across the per-surface tool shapes. */\nexport interface ClientToolBridgeTool {\n /** Snake_case tool id the model calls (e.g. `update_sheet_range`). */\n name: string;\n /** Mutating tools gate on the surface's write-consent flow (`confirmWrites`). */\n requiresWrite?: boolean;\n run: (\n args: Record<string, unknown>,\n context: { toolCallId: string },\n ) => Promise<unknown>;\n}\n\n/**\n * Batch write-consent outcome. `proceed` runs the write calls, `declined`\n * answers them with the declined message while reads still run, `abandoned`\n * releases the claim without resuming (the request died, or the consent UI was\n * dismissed by the run moving on). Grant persistence (a thread set, a stored\n * preference) is the surface's own policy, applied inside its callback.\n */\nexport type ClientToolWriteConsentDecision = 'proceed' | 'declined' | 'abandoned';\n\nexport interface ClientToolCallSettledEvent {\n toolName: string;\n status: 'success' | 'error' | 'declined';\n errorType?: string;\n}\n\n/** Default resume error for a write call the user declined. */\nexport const CLIENT_TOOL_WRITE_DECLINED_MESSAGE =\n 'The user declined this edit. Do not retry it; ask the user how to proceed.';\n\n/** Default resume error for a call naming a tool this surface does not have. */\nexport function defaultMissingClientToolMessage(toolName: string): string {\n return `This surface has no tool named '${toolName}'.`;\n}\n\n/** Statewire request ids are unique per run, but a thread scope keeps a\n * process-wide claim unambiguous when two conversations are open at once. */\nexport function clientToolClaimKey(threadId: string, requestId: string): string {\n return `${threadId}:${requestId}`;\n}\n\nconst CLIENT_TOOL_RESUME_RETRY_DELAYS_MS = [2_000, 5_000, 10_000, 15_000, 30_000];\nconst MAX_CLIENT_TOOL_RESUME_ATTEMPTS = 25;\n\nfunction clientToolResumeRetryDelayMs(attemptNumber: number): number {\n const index = Math.min(\n Math.max(attemptNumber - 1, 0),\n CLIENT_TOOL_RESUME_RETRY_DELAYS_MS.length - 1,\n );\n return CLIENT_TOOL_RESUME_RETRY_DELAYS_MS[index] ?? 30_000;\n}\n\n/**\n * A wire-safe copy of a handler's return value: handlers can return values\n * JSON cannot represent (DOM nodes, host objects, bigints), which must never\n * reach the transport. Throws for an unrepresentable value so the caller can\n * answer that one call with an error instead of stranding the whole batch.\n */\nexport function jsonSafeClientToolResult(value: unknown): unknown {\n const serialized = JSON.stringify(value);\n return serialized === undefined ? null : JSON.parse(serialized);\n}\n\n/** A parked, unanswered client-tool input request. */\nexport function isPendingClientToolRequest(\n request: StatewireThread.InputRequestState,\n): request is StatewireThread.CustomInputRequest {\n if (request.type !== 'interrupt' || 'response' in request) return false;\n return isClientToolInterrupt((request as { payload?: unknown }).payload);\n}\n\nexport interface ExecuteClientToolBatchOptions {\n calls: readonly ClientToolCallRequest[];\n tools: readonly ClientToolBridgeTool[];\n /** Whether the parked request still exists and this surface may answer it.\n * Checked before consent resolution, before every call, and before the\n * results are handed back for resume. */\n isLive: () => boolean;\n /** Batch write gate; absent means writes run without consent (surfaces that\n * only register read tools). Called once per batch, before any handler. */\n confirmWrites?: (batch: {\n writeToolNames: readonly string[];\n }) => Promise<ClientToolWriteConsentDecision>;\n writeDeclinedMessage?: string;\n missingToolMessage?: (toolName: string) => string;\n /** Per-call telemetry (the Office add-in's tool events). */\n onCallSettled?: (event: ClientToolCallSettledEvent) => void;\n /**\n * Called once, after the write-consent gate resolves and immediately before\n * the first handler runs — the point where side effects begin. There is no\n * await between this callback and the first handler invocation, so a caller\n * marking \"execution started\" here can never miss a handler that ran.\n */\n onExecutionStart?: () => void;\n}\n\n/**\n * Execute one batched client-tool park: consent, per-call execution with\n * wire-safe envelopes, liveness aborts. Returns the per-interrupt result map\n * to resume with, or `null` when the batch was abandoned (the request died,\n * consent was abandoned, or the surface went away) — the caller must release\n * its claim and must NOT resume.\n */\nexport async function executeClientToolBatch(\n options: ExecuteClientToolBatchOptions,\n): Promise<Record<string, ClientToolResultEnvelope> | null> {\n const {\n calls,\n tools,\n isLive,\n confirmWrites,\n writeDeclinedMessage = CLIENT_TOOL_WRITE_DECLINED_MESSAGE,\n missingToolMessage = defaultMissingClientToolMessage,\n onCallSettled,\n onExecutionStart,\n } = options;\n const registry = new Map(tools.map((tool) => [tool.name, tool]));\n\n // One consent covers the whole batch (and whatever scope the surface's\n // callback persists): writes are declined together while reads still run.\n let writesDeclined = false;\n const writeToolNames = calls\n .filter((call) => registry.get(call.tool_name)?.requiresWrite === true)\n .map((call) => call.tool_name);\n if (writeToolNames.length > 0 && confirmWrites) {\n const decision = await confirmWrites({ writeToolNames });\n if (decision === 'abandoned' || !isLive()) {\n // The run was stopped (or answered elsewhere) while consent was\n // pending: abort before any handler mutates the user's asset.\n return null;\n }\n writesDeclined = decision === 'declined';\n }\n\n onExecutionStart?.();\n\n const results: Record<string, ClientToolResultEnvelope> = {};\n for (const call of calls) {\n if (!isLive()) return null;\n const tool = registry.get(call.tool_name);\n let envelope: ClientToolResultEnvelope;\n let status: ClientToolCallSettledEvent['status'] = 'success';\n let errorType: string | undefined;\n if (!tool) {\n envelope = clientToolErrorEnvelope(missingToolMessage(call.tool_name));\n status = 'error';\n errorType = 'UnknownClientTool';\n } else if (tool.requiresWrite === true && writesDeclined) {\n envelope = clientToolErrorEnvelope(writeDeclinedMessage);\n status = 'declined';\n } else {\n try {\n envelope = clientToolSuccessEnvelope(\n jsonSafeClientToolResult(\n await tool.run(clientToolCallArgs(call), {\n toolCallId: call.interrupt_id,\n }),\n ),\n );\n } catch (error) {\n envelope = clientToolErrorEnvelope(error);\n status = 'error';\n errorType = error instanceof Error ? error.name : typeof error;\n }\n }\n results[call.interrupt_id] = envelope;\n onCallSettled?.({\n toolName: call.tool_name,\n status,\n ...(errorType !== undefined ? { errorType } : {}),\n });\n }\n\n // Abandoned mid-flight: resuming a dead request would error, and a\n // re-emitted one must be executable again.\n return isLive() ? results : null;\n}\n\nexport interface UseStatewireClientToolBridgeOptions {\n threadId: string;\n tools: readonly ClientToolBridgeTool[];\n /**\n * Ownership domain for parked-request claims. Pass a module-scoped tracker\n * to make ownership process-wide across every mount of the surface (two\n * mounted surfaces of one conversation execute each request exactly once),\n * or a per-mount tracker to scope ownership to one mounted bridge.\n */\n tracker: ClientToolRequestTracker;\n /** The surface's `useStatewireRuns().inputRequests` read. */\n inputRequests: readonly StatewireThread.InputRequestState[] | undefined;\n /** Dispatch the `run/input` resume on the surface's transport. The value is\n * already wire-safe (per-call JSON round-trip inside the batch engine). */\n /** Dispatch the answer and settle only once the Statewire host accepts or\n * rejects the command. The bridge deliberately keeps replaying while this\n * promise is pending: `run/input` removes the request optimistically before\n * the server has accepted the answer. */\n sendResume: (\n requestId: string,\n value: Record<string, unknown>,\n ) => PromiseLike<unknown>;\n /** Batch write gate, with the parked request's id so the surface can close\n * its consent UI the instant that request disappears. */\n confirmWrites?: (batch: {\n requestId: string;\n writeToolNames: readonly string[];\n }) => Promise<ClientToolWriteConsentDecision>;\n writeDeclinedMessage?: string;\n missingToolMessage?: (toolName: string) => string;\n onCallSettled?: (event: ClientToolCallSettledEvent) => void;\n /** Log prefix for resume-dispatch failures. */\n logLabel?: string;\n}\n\n/**\n * The claim lifecycle around {@link executeClientToolBatch}: claim the pending\n * request once per ownership domain, execute, resume — releasing the claim on\n * every path that ran no handler, so re-emitted requests recover.\n *\n * Unmount splits by whether side effects began:\n * - a claim whose batch has NOT started executing (claimed this tick, or\n * parked on write consent) is released, so another mount — or a remount —\n * can execute the re-emitted request instead of stranding the parked run;\n * - a claim whose batch HAS started stays held: handlers cannot be cancelled,\n * so releasing would let a sibling mount re-claim and re-execute a mutation\n * whose side effects already ran. The detached execution caches its result\n * and attempts one resume through its captured transport; a later mount can\n * replay the same result without repeating the side effect.\n */\nexport function useStatewireClientToolBridge(\n options: UseStatewireClientToolBridgeOptions,\n): void {\n const { threadId, tracker, inputRequests, logLabel = '[AthenaSDK]' } = options;\n const optionsRef = useRef(options);\n optionsRef.current = options;\n\n const toolNames = new Set(options.tools.map((tool) => tool.name));\n const pendingRequest = inputRequests?.find((request) => {\n if (!isPendingClientToolRequest(request)) return false;\n const payload = (request as StatewireThread.CustomInputRequest).payload;\n if (!isClientToolInterrupt(payload)) return false;\n // Every attached tab sees the same park. An observer without these tools\n // must not claim it and race the executing surface with an unknown-tool\n // error (for example, Olympus watching an Excel conversation).\n // A cached result already belongs to this tracker and can be replayed\n // without loading its handlers again.\n return (\n tracker.getCachedResume(clientToolClaimKey(threadId, request.id)) !== undefined ||\n payload.context.requests.every((call) => toolNames.has(call.tool_name))\n );\n });\n\n // Claims this bridge holds but has not resumed, split by whether their\n // batch has begun running handlers. The ref Set instances are stable (only\n // their contents mutate), so the unmount cleanup sees every claim.\n const ownedClaimsRef = useRef<Set<string>>(new Set());\n const startedClaimsRef = useRef<Set<string>>(new Set());\n const resumeOwnerRef = useRef(Symbol('client-tool-resume-owner'));\n const resumeClaimsRef = useRef<Set<string>>(new Set());\n const resumeTimersRef = useRef<\n Map<string, { requestId: string; timer: ReturnType<typeof setTimeout> }>\n >(new Map());\n const activeRef = useRef(true);\n const releaseClaim = useCallback(\n (claim: string) => {\n // Release the shared tracker entry only while THIS mount still owns it.\n // A detached batch can settle after the unmount cleanup already released\n // (and disowned) its claim; by then the tracker entry may belong to\n // another mount that claimed, executed, and resumed — releasing it here\n // would let a stale re-emission of the same request execute again.\n const owned = ownedClaimsRef.current.delete(claim);\n startedClaimsRef.current.delete(claim);\n if (owned) tracker.release(claim);\n },\n [tracker],\n );\n const stopResumeReplay = useCallback(\n (claim: string) => {\n const timerEntry = resumeTimersRef.current.get(claim);\n if (timerEntry) clearTimeout(timerEntry.timer);\n resumeTimersRef.current.delete(claim);\n if (resumeClaimsRef.current.delete(claim)) {\n tracker.releaseResumeReplay(claim, resumeOwnerRef.current);\n }\n },\n [tracker],\n );\n useEffect(() => {\n activeRef.current = true;\n const ownedClaims = ownedClaimsRef.current;\n const startedClaims = startedClaimsRef.current;\n return () => {\n activeRef.current = false;\n for (const claim of Array.from(resumeClaimsRef.current)) {\n stopResumeReplay(claim);\n }\n for (const claim of ownedClaims) {\n // Started batches keep their claim — their detached execution settles\n // it (resume, or release on a failed dispatch). Releasing here would\n // double-execute the side effects that already ran.\n if (startedClaims.has(claim)) continue;\n ownedClaims.delete(claim);\n tracker.release(claim);\n }\n };\n }, [stopResumeReplay, tracker]);\n\n // Handlers (and consent) are async, so the run can be stopped or the request\n // answered elsewhere while we await. The live ids let us abandon an\n // unfinished local execution when its request is no longer present. Once a\n // result is cached, only command settlement may stop its replay: Statewire\n // removes submitted requests optimistically before the host accepts them.\n const liveRequestIdsRef = useRef<ReadonlySet<string>>(new Set());\n liveRequestIdsRef.current = new Set((inputRequests ?? []).map((request) => request.id));\n\n const startResumeReplay = useCallback(\n (claim: string, requestId: string) => {\n if (!activeRef.current || resumeClaimsRef.current.has(claim)) return;\n if (!tracker.claimResumeReplay(claim, resumeOwnerRef.current)) return;\n resumeClaimsRef.current.add(claim);\n\n const dispatch = (): void => {\n resumeTimersRef.current.delete(claim);\n if (!activeRef.current) {\n stopResumeReplay(claim);\n return;\n }\n const attempt = tracker.takeResumeAttempt(claim, {\n owner: resumeOwnerRef.current,\n maxAttempts: MAX_CLIENT_TOOL_RESUME_ATTEMPTS,\n });\n if (!attempt) {\n stopResumeReplay(claim);\n return;\n }\n\n try {\n const settled = optionsRef.current.sendResume(requestId, attempt.value);\n // A fulfilled command result is the authoritative acknowledgement:\n // the host accepted and applied the answer. The local input request\n // disappearing is NOT an acknowledgement because the Statewire\n // reducer does that optimistically as soon as the command is\n // submitted.\n void Promise.resolve(settled).then(\n () => {\n // Keep the execution claim, but discard the cached result once\n // the host accepts it. A stale pending-request render can no\n // longer replay the command or re-execute the local mutation.\n tracker.settleResume(claim);\n stopResumeReplay(claim);\n },\n (error) => {\n // A rejected attempt may have raced another still-pending\n // replay. Keep the bounded loop alive; any accepted sibling\n // stops it, while the global attempt cap prevents storms.\n console.error(`${logLabel} failed to resume client tool results:`, error);\n },\n );\n } catch (error) {\n // Keep the cached result and retry it. Re-executing a mutating local\n // handler would be unsafe; replaying its id-stamped result is safe.\n console.error(`${logLabel} failed to resume client tool results:`, error);\n }\n\n if (\n attempt.attemptNumber >= MAX_CLIENT_TOOL_RESUME_ATTEMPTS ||\n !activeRef.current ||\n !resumeClaimsRef.current.has(claim)\n ) {\n stopResumeReplay(claim);\n return;\n }\n const timer = setTimeout(dispatch, clientToolResumeRetryDelayMs(attempt.attemptNumber));\n resumeTimersRef.current.set(claim, { requestId, timer });\n };\n\n dispatch();\n },\n [logLabel, stopResumeReplay, tracker],\n );\n\n const executeRequest = useCallback(\n async (request: StatewireThread.CustomInputRequest) => {\n const payload = request.payload;\n if (!isClientToolInterrupt(payload)) return;\n const claim = clientToolClaimKey(threadId, request.id);\n const {\n tools,\n confirmWrites,\n writeDeclinedMessage,\n missingToolMessage,\n onCallSettled,\n sendResume,\n } = optionsRef.current;\n\n const results = await executeClientToolBatch({\n calls: payload.context.requests,\n tools,\n // Live while the request still exists AND this surface may answer it:\n // mounted, or already past the point of no return (handlers started —\n // the detached execution must finish and settle, never re-execute).\n // After unmount the request-id snapshot freezes at its last observed\n // state, which keeps a started batch's own request visible to it.\n isLive: () =>\n liveRequestIdsRef.current.has(request.id) &&\n (activeRef.current || startedClaimsRef.current.has(claim)),\n onExecutionStart: () => {\n startedClaimsRef.current.add(claim);\n },\n ...(confirmWrites\n ? {\n confirmWrites: ({ writeToolNames }: { writeToolNames: readonly string[] }) =>\n confirmWrites({ requestId: request.id, writeToolNames }),\n }\n : {}),\n ...(writeDeclinedMessage !== undefined ? { writeDeclinedMessage } : {}),\n ...(missingToolMessage ? { missingToolMessage } : {}),\n ...(onCallSettled ? { onCallSettled } : {}),\n });\n if (results === null) {\n releaseClaim(claim);\n return;\n }\n\n const resumeValue = clientToolResultsResumeValue(results);\n tracker.cacheResume(claim, resumeValue);\n // Execution is complete, but the exactly-once claim remains. A pending\n // re-emission must replay this cached value, never run the handlers again.\n ownedClaimsRef.current.delete(claim);\n startedClaimsRef.current.delete(claim);\n\n if (!activeRef.current) {\n // The handler crossed an unmount. Preserve the pre-existing best-effort\n // settle through its captured transport, but leave the cached result\n // available for a later mount if this dispatch is lost.\n if (tracker.claimResumeReplay(claim, resumeOwnerRef.current)) {\n const attempt = tracker.takeResumeAttempt(claim, {\n owner: resumeOwnerRef.current,\n maxAttempts: MAX_CLIENT_TOOL_RESUME_ATTEMPTS,\n });\n if (attempt) {\n try {\n void Promise.resolve(sendResume(request.id, attempt.value)).then(\n () => tracker.settleResume(claim),\n (error) => {\n console.error(`${logLabel} failed to resume client tool results:`, error);\n },\n );\n } catch (error) {\n console.error(`${logLabel} failed to resume client tool results:`, error);\n }\n }\n // Ownership only fences this best-effort dispatch; a future mount\n // may claim and replay the cached value if it did not settle.\n tracker.releaseResumeReplay(claim, resumeOwnerRef.current);\n }\n return;\n }\n\n startResumeReplay(claim, request.id);\n },\n [logLabel, releaseClaim, startResumeReplay, threadId, tracker],\n );\n\n useEffect(() => {\n if (!pendingRequest) return;\n const claim = clientToolClaimKey(threadId, pendingRequest.id);\n if (!tracker.claim(claim)) {\n // The local handler already ran. This is the reconnect/remount path:\n // replay its cached answer instead of double-executing the side effect.\n if (tracker.getCachedResume(claim)) {\n startResumeReplay(claim, pendingRequest.id);\n }\n return;\n }\n ownedClaimsRef.current.add(claim);\n void executeRequest(pendingRequest);\n }, [executeRequest, pendingRequest, startResumeReplay, threadId, tracker]);\n}\n"],"names":["isClientToolInterrupt","clientToolErrorEnvelope","clientToolSuccessEnvelope","clientToolCallArgs","useRef","useCallback","useEffect","clientToolResultsResumeValue"],"mappings":"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"}