@athenaintel/react 0.19.0 → 0.20.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 (857) hide show
  1. package/README.md +97 -11
  2. package/dist/assets/AssetPanel.cjs +277 -0
  3. package/dist/assets/AssetPanel.cjs.map +1 -0
  4. package/dist/assets/AssetPanel.js +277 -0
  5. package/dist/assets/AssetPanel.js.map +1 -0
  6. package/dist/assets/AthenaAssetEmbed.cjs +151 -0
  7. package/dist/assets/AthenaAssetEmbed.cjs.map +1 -0
  8. package/dist/assets/AthenaAssetEmbed.js +151 -0
  9. package/dist/assets/AthenaAssetEmbed.js.map +1 -0
  10. package/dist/assets/AthenaLayout.cjs +69 -0
  11. package/dist/assets/AthenaLayout.cjs.map +1 -0
  12. package/dist/assets/AthenaLayout.js +69 -0
  13. package/dist/assets/AthenaLayout.js.map +1 -0
  14. package/dist/assets/asset-embed-messages.cjs +39 -0
  15. package/dist/assets/asset-embed-messages.cjs.map +1 -0
  16. package/dist/assets/asset-embed-messages.js +39 -0
  17. package/dist/assets/asset-embed-messages.js.map +1 -0
  18. package/dist/assets/asset-panel-store.cjs +124 -0
  19. package/dist/assets/asset-panel-store.cjs.map +1 -0
  20. package/dist/assets/asset-panel-store.js +124 -0
  21. package/dist/assets/asset-panel-store.js.map +1 -0
  22. package/dist/assets/asset-panel-url.cjs +40 -0
  23. package/dist/assets/asset-panel-url.cjs.map +1 -0
  24. package/dist/assets/asset-panel-url.js +40 -0
  25. package/dist/assets/asset-panel-url.js.map +1 -0
  26. package/dist/assets/use-asset-embed.cjs +362 -0
  27. package/dist/assets/use-asset-embed.cjs.map +1 -0
  28. package/dist/assets/use-asset-embed.js +362 -0
  29. package/dist/assets/use-asset-embed.js.map +1 -0
  30. package/dist/{AthenaAuthContext-B3AwLA5Z.cjs → auth/AthenaAuthContext.cjs} +5 -4
  31. package/dist/auth/AthenaAuthContext.cjs.map +1 -0
  32. package/dist/{AthenaAuthContext-DQsdayH2.js → auth/AthenaAuthContext.js} +3 -3
  33. package/dist/auth/AthenaAuthContext.js.map +1 -0
  34. package/dist/auth/AthenaAuthProvider.cjs +141 -0
  35. package/dist/auth/AthenaAuthProvider.cjs.map +1 -0
  36. package/dist/auth/AthenaAuthProvider.js +141 -0
  37. package/dist/auth/AthenaAuthProvider.js.map +1 -0
  38. package/dist/{auth.cjs → auth/AthenaSSOProvider.cjs} +14 -151
  39. package/dist/auth/AthenaSSOProvider.cjs.map +1 -0
  40. package/dist/{auth.js → auth/AthenaSSOProvider.js} +4 -142
  41. package/dist/auth/AthenaSSOProvider.js.map +1 -0
  42. package/dist/auth/index.cjs +10 -0
  43. package/dist/auth/index.cjs.map +1 -0
  44. package/dist/auth/index.js +10 -0
  45. package/dist/auth/index.js.map +1 -0
  46. package/dist/chat/AthenaChat.cjs +753 -0
  47. package/dist/chat/AthenaChat.cjs.map +1 -0
  48. package/dist/chat/AthenaChat.d.ts +3 -2
  49. package/dist/chat/AthenaChat.js +753 -0
  50. package/dist/chat/AthenaChat.js.map +1 -0
  51. package/dist/chat/AthenaChatErrorBoundary.cjs +53 -0
  52. package/dist/chat/AthenaChatErrorBoundary.cjs.map +1 -0
  53. package/dist/chat/AthenaChatErrorBoundary.js +53 -0
  54. package/dist/chat/AthenaChatErrorBoundary.js.map +1 -0
  55. package/dist/chat/StatewireApprovalCard.cjs +171 -0
  56. package/dist/chat/StatewireApprovalCard.cjs.map +1 -0
  57. package/dist/chat/StatewireApprovalCard.js +171 -0
  58. package/dist/chat/StatewireApprovalCard.js.map +1 -0
  59. package/dist/chat/StatewireClientToolBridge.cjs +50 -0
  60. package/dist/chat/StatewireClientToolBridge.cjs.map +1 -0
  61. package/dist/chat/StatewireClientToolBridge.js +50 -0
  62. package/dist/chat/StatewireClientToolBridge.js.map +1 -0
  63. package/dist/chat/StatewireQueuedMessages.cjs +432 -0
  64. package/dist/chat/StatewireQueuedMessages.cjs.map +1 -0
  65. package/dist/chat/StatewireQueuedMessages.d.ts +3 -4
  66. package/dist/chat/StatewireQueuedMessages.js +432 -0
  67. package/dist/chat/StatewireQueuedMessages.js.map +1 -0
  68. package/dist/chat/athena-citation-links.cjs +326 -0
  69. package/dist/chat/athena-citation-links.cjs.map +1 -0
  70. package/dist/chat/athena-citation-links.js +326 -0
  71. package/dist/chat/athena-citation-links.js.map +1 -0
  72. package/dist/chat/run-activity.cjs +28 -0
  73. package/dist/chat/run-activity.cjs.map +1 -0
  74. package/dist/chat/run-activity.js +28 -0
  75. package/dist/chat/run-activity.js.map +1 -0
  76. package/dist/chat/statewire-banners.cjs +83 -0
  77. package/dist/chat/statewire-banners.cjs.map +1 -0
  78. package/dist/chat/statewire-banners.js +83 -0
  79. package/dist/chat/statewire-banners.js.map +1 -0
  80. package/dist/chat/statewire-client-tools.cjs +73 -0
  81. package/dist/chat/statewire-client-tools.cjs.map +1 -0
  82. package/dist/chat/statewire-client-tools.js +73 -0
  83. package/dist/chat/statewire-client-tools.js.map +1 -0
  84. package/dist/chat/super-grouping/CollapsibleGroup.cjs +158 -0
  85. package/dist/chat/super-grouping/CollapsibleGroup.cjs.map +1 -0
  86. package/dist/chat/super-grouping/CollapsibleGroup.js +158 -0
  87. package/dist/chat/super-grouping/CollapsibleGroup.js.map +1 -0
  88. package/dist/chat/super-grouping/SuperGroupingCard.cjs +361 -0
  89. package/dist/chat/super-grouping/SuperGroupingCard.cjs.map +1 -0
  90. package/dist/chat/super-grouping/SuperGroupingCard.d.ts +4 -1
  91. package/dist/chat/super-grouping/SuperGroupingCard.js +361 -0
  92. package/dist/chat/super-grouping/SuperGroupingCard.js.map +1 -0
  93. package/dist/chat/super-grouping/activity-timeline.cjs +151 -0
  94. package/dist/chat/super-grouping/activity-timeline.cjs.map +1 -0
  95. package/dist/chat/super-grouping/activity-timeline.d.ts +3 -3
  96. package/dist/chat/super-grouping/activity-timeline.js +151 -0
  97. package/dist/chat/super-grouping/activity-timeline.js.map +1 -0
  98. package/dist/chat/super-grouping/grouping-function.cjs +55 -0
  99. package/dist/chat/super-grouping/grouping-function.cjs.map +1 -0
  100. package/dist/chat/super-grouping/grouping-function.js +55 -0
  101. package/dist/chat/super-grouping/grouping-function.js.map +1 -0
  102. package/dist/chat/super-grouping/index.cjs +26 -0
  103. package/dist/chat/super-grouping/index.cjs.map +1 -0
  104. package/dist/chat/super-grouping/index.js +26 -0
  105. package/dist/chat/super-grouping/index.js.map +1 -0
  106. package/dist/chat/super-grouping/toolkit-map.cjs +96 -0
  107. package/dist/chat/super-grouping/toolkit-map.cjs.map +1 -0
  108. package/dist/chat/super-grouping/toolkit-map.js +96 -0
  109. package/dist/chat/super-grouping/toolkit-map.js.map +1 -0
  110. package/dist/chat/tiptap-text.cjs +101 -0
  111. package/dist/chat/tiptap-text.cjs.map +1 -0
  112. package/dist/chat/tiptap-text.js +101 -0
  113. package/dist/chat/tiptap-text.js.map +1 -0
  114. package/dist/chat/tooltip-icon-button.cjs +32 -0
  115. package/dist/chat/tooltip-icon-button.cjs.map +1 -0
  116. package/dist/chat/tooltip-icon-button.js +32 -0
  117. package/dist/chat/tooltip-icon-button.js.map +1 -0
  118. package/dist/chat/use-athena-run-live.cjs +23 -0
  119. package/dist/chat/use-athena-run-live.cjs.map +1 -0
  120. package/dist/chat/use-athena-run-live.d.ts +10 -0
  121. package/dist/chat/use-athena-run-live.js +23 -0
  122. package/dist/chat/use-athena-run-live.js.map +1 -0
  123. package/dist/chat/use-statewire-approval-request.cjs +46 -0
  124. package/dist/chat/use-statewire-approval-request.cjs.map +1 -0
  125. package/dist/chat/use-statewire-approval-request.js +46 -0
  126. package/dist/chat/use-statewire-approval-request.js.map +1 -0
  127. package/dist/chat-ui/auth/sign-in-card.cjs +128 -0
  128. package/dist/chat-ui/auth/sign-in-card.cjs.map +1 -0
  129. package/dist/chat-ui/auth/sign-in-card.js +128 -0
  130. package/dist/chat-ui/auth/sign-in-card.js.map +1 -0
  131. package/dist/chat-ui/composer/composer-action.cjs +11 -0
  132. package/dist/chat-ui/composer/composer-action.cjs.map +1 -0
  133. package/dist/chat-ui/composer/composer-action.d.ts +5 -8
  134. package/dist/chat-ui/composer/composer-action.js +11 -0
  135. package/dist/chat-ui/composer/composer-action.js.map +1 -0
  136. package/dist/chat-ui/composer/pending-attachment-uploads.cjs +25 -0
  137. package/dist/chat-ui/composer/pending-attachment-uploads.cjs.map +1 -0
  138. package/dist/chat-ui/composer/pending-attachment-uploads.js +25 -0
  139. package/dist/chat-ui/composer/pending-attachment-uploads.js.map +1 -0
  140. package/dist/chat-ui/composer/tiptap-composer.cjs +590 -0
  141. package/dist/chat-ui/composer/tiptap-composer.cjs.map +1 -0
  142. package/dist/chat-ui/composer/tiptap-composer.d.ts +44 -7
  143. package/dist/chat-ui/composer/tiptap-composer.js +590 -0
  144. package/dist/chat-ui/composer/tiptap-composer.js.map +1 -0
  145. package/dist/chat-ui/header/chat-header.cjs +33 -0
  146. package/dist/chat-ui/header/chat-header.cjs.map +1 -0
  147. package/dist/chat-ui/header/chat-header.js +33 -0
  148. package/dist/chat-ui/header/chat-header.js.map +1 -0
  149. package/dist/chat-ui/header/conversation-history-panel.cjs +369 -0
  150. package/dist/chat-ui/header/conversation-history-panel.cjs.map +1 -0
  151. package/dist/chat-ui/header/conversation-history-panel.js +369 -0
  152. package/dist/chat-ui/header/conversation-history-panel.js.map +1 -0
  153. package/dist/chat-ui/index.cjs +139 -0
  154. package/dist/chat-ui/index.cjs.map +1 -0
  155. package/dist/chat-ui/index.d.ts +4 -3
  156. package/dist/chat-ui/index.js +139 -0
  157. package/dist/chat-ui/index.js.map +1 -0
  158. package/dist/chat-ui/lib/asset-urls.cjs +18 -0
  159. package/dist/chat-ui/lib/asset-urls.cjs.map +1 -0
  160. package/dist/chat-ui/lib/asset-urls.js +18 -0
  161. package/dist/chat-ui/lib/asset-urls.js.map +1 -0
  162. package/dist/chat-ui/mentions/mention-chip.cjs +208 -0
  163. package/dist/chat-ui/mentions/mention-chip.cjs.map +1 -0
  164. package/dist/chat-ui/mentions/mention-chip.js +208 -0
  165. package/dist/chat-ui/mentions/mention-chip.js.map +1 -0
  166. package/dist/chat-ui/mentions/mention-extension.cjs +184 -0
  167. package/dist/chat-ui/mentions/mention-extension.cjs.map +1 -0
  168. package/dist/chat-ui/mentions/mention-extension.d.ts +24 -2
  169. package/dist/chat-ui/mentions/mention-extension.js +184 -0
  170. package/dist/chat-ui/mentions/mention-extension.js.map +1 -0
  171. package/dist/chat-ui/mentions/suggestions/components/get-scope-name.cjs +35 -0
  172. package/dist/chat-ui/mentions/suggestions/components/get-scope-name.cjs.map +1 -0
  173. package/dist/chat-ui/mentions/suggestions/components/get-scope-name.js +35 -0
  174. package/dist/chat-ui/mentions/suggestions/components/get-scope-name.js.map +1 -0
  175. package/dist/chat-ui/mentions/suggestions/components/mention-icon.cjs +95 -0
  176. package/dist/chat-ui/mentions/suggestions/components/mention-icon.cjs.map +1 -0
  177. package/dist/chat-ui/mentions/suggestions/components/mention-icon.d.ts +5 -0
  178. package/dist/chat-ui/mentions/suggestions/components/mention-icon.js +95 -0
  179. package/dist/chat-ui/mentions/suggestions/components/mention-icon.js.map +1 -0
  180. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-list.cjs +116 -0
  181. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-list.cjs.map +1 -0
  182. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-list.js +116 -0
  183. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-list.js.map +1 -0
  184. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.cjs +31 -0
  185. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.cjs.map +1 -0
  186. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.js +31 -0
  187. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.js.map +1 -0
  188. package/dist/chat-ui/mentions/suggestions/components/menu-breadcrumbs.cjs +27 -0
  189. package/dist/chat-ui/mentions/suggestions/components/menu-breadcrumbs.cjs.map +1 -0
  190. package/dist/chat-ui/mentions/suggestions/components/menu-breadcrumbs.js +27 -0
  191. package/dist/chat-ui/mentions/suggestions/components/menu-breadcrumbs.js.map +1 -0
  192. package/dist/chat-ui/mentions/suggestions/components/menu-item.cjs +62 -0
  193. package/dist/chat-ui/mentions/suggestions/components/menu-item.cjs.map +1 -0
  194. package/dist/chat-ui/mentions/suggestions/components/menu-item.js +62 -0
  195. package/dist/chat-ui/mentions/suggestions/components/menu-item.js.map +1 -0
  196. package/dist/chat-ui/mentions/suggestions/components/menu-list.cjs +63 -0
  197. package/dist/chat-ui/mentions/suggestions/components/menu-list.cjs.map +1 -0
  198. package/dist/chat-ui/mentions/suggestions/components/menu-list.js +63 -0
  199. package/dist/chat-ui/mentions/suggestions/components/menu-list.js.map +1 -0
  200. package/dist/chat-ui/mentions/suggestions/components/menu-skeleton.cjs +11 -0
  201. package/dist/chat-ui/mentions/suggestions/components/menu-skeleton.cjs.map +1 -0
  202. package/dist/chat-ui/mentions/suggestions/components/menu-skeleton.js +11 -0
  203. package/dist/chat-ui/mentions/suggestions/components/menu-skeleton.js.map +1 -0
  204. package/dist/chat-ui/mentions/suggestions/components/menu-summary.cjs +33 -0
  205. package/dist/chat-ui/mentions/suggestions/components/menu-summary.cjs.map +1 -0
  206. package/dist/chat-ui/mentions/suggestions/components/menu-summary.js +33 -0
  207. package/dist/chat-ui/mentions/suggestions/components/menu-summary.js.map +1 -0
  208. package/dist/chat-ui/mentions/suggestions/components/use-keyboard-navigation.cjs +58 -0
  209. package/dist/chat-ui/mentions/suggestions/components/use-keyboard-navigation.cjs.map +1 -0
  210. package/dist/chat-ui/mentions/suggestions/components/use-keyboard-navigation.js +58 -0
  211. package/dist/chat-ui/mentions/suggestions/components/use-keyboard-navigation.js.map +1 -0
  212. package/dist/chat-ui/mentions/suggestions/components/use-menu-navigation.cjs +81 -0
  213. package/dist/chat-ui/mentions/suggestions/components/use-menu-navigation.cjs.map +1 -0
  214. package/dist/chat-ui/mentions/suggestions/components/use-menu-navigation.js +81 -0
  215. package/dist/chat-ui/mentions/suggestions/components/use-menu-navigation.js.map +1 -0
  216. package/dist/chat-ui/mentions/suggestions/components/utils.cjs +18 -0
  217. package/dist/chat-ui/mentions/suggestions/components/utils.cjs.map +1 -0
  218. package/dist/chat-ui/mentions/suggestions/components/utils.js +18 -0
  219. package/dist/chat-ui/mentions/suggestions/components/utils.js.map +1 -0
  220. package/dist/chat-ui/mentions/suggestions/data/api-client.cjs +123 -0
  221. package/dist/chat-ui/mentions/suggestions/data/api-client.cjs.map +1 -0
  222. package/dist/chat-ui/mentions/suggestions/data/api-client.d.ts +10 -0
  223. package/dist/chat-ui/mentions/suggestions/data/api-client.js +123 -0
  224. package/dist/chat-ui/mentions/suggestions/data/api-client.js.map +1 -0
  225. package/dist/chat-ui/mentions/suggestions/data/item-cache.cjs +37 -0
  226. package/dist/chat-ui/mentions/suggestions/data/item-cache.cjs.map +1 -0
  227. package/dist/chat-ui/mentions/suggestions/data/item-cache.js +37 -0
  228. package/dist/chat-ui/mentions/suggestions/data/item-cache.js.map +1 -0
  229. package/dist/chat-ui/mentions/suggestions/data/orchestrator.cjs +134 -0
  230. package/dist/chat-ui/mentions/suggestions/data/orchestrator.cjs.map +1 -0
  231. package/dist/chat-ui/mentions/suggestions/data/orchestrator.js +134 -0
  232. package/dist/chat-ui/mentions/suggestions/data/orchestrator.js.map +1 -0
  233. package/dist/chat-ui/mentions/suggestions/data/scope-registry.cjs +91 -0
  234. package/dist/chat-ui/mentions/suggestions/data/scope-registry.cjs.map +1 -0
  235. package/dist/chat-ui/mentions/suggestions/data/scope-registry.js +91 -0
  236. package/dist/chat-ui/mentions/suggestions/data/scope-registry.js.map +1 -0
  237. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.cjs +137 -0
  238. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.cjs.map +1 -0
  239. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.js +137 -0
  240. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.js.map +1 -0
  241. package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs +375 -0
  242. package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs.map +1 -0
  243. package/dist/chat-ui/mentions/suggestions/data/sources/index.d.ts +16 -1
  244. package/dist/chat-ui/mentions/suggestions/data/sources/index.js +375 -0
  245. package/dist/chat-ui/mentions/suggestions/data/sources/index.js.map +1 -0
  246. package/dist/chat-ui/mentions/suggestions/data/types.cjs +9 -0
  247. package/dist/chat-ui/mentions/suggestions/data/types.cjs.map +1 -0
  248. package/dist/chat-ui/mentions/suggestions/data/types.d.ts +14 -0
  249. package/dist/chat-ui/mentions/suggestions/data/types.js +9 -0
  250. package/dist/chat-ui/mentions/suggestions/data/types.js.map +1 -0
  251. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs +173 -0
  252. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs.map +1 -0
  253. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.d.ts +14 -4
  254. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js +173 -0
  255. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js.map +1 -0
  256. package/dist/chat-ui/mentions/suggestions/data/use-menu-items.cjs +45 -0
  257. package/dist/chat-ui/mentions/suggestions/data/use-menu-items.cjs.map +1 -0
  258. package/dist/chat-ui/mentions/suggestions/data/use-menu-items.js +45 -0
  259. package/dist/chat-ui/mentions/suggestions/data/use-menu-items.js.map +1 -0
  260. package/dist/chat-ui/mentions/suggestions/data/utils/filter-items.cjs +43 -0
  261. package/dist/chat-ui/mentions/suggestions/data/utils/filter-items.cjs.map +1 -0
  262. package/dist/chat-ui/mentions/suggestions/data/utils/filter-items.js +43 -0
  263. package/dist/chat-ui/mentions/suggestions/data/utils/filter-items.js.map +1 -0
  264. package/dist/chat-ui/mentions/suggestions/data/utils/match-query.cjs +14 -0
  265. package/dist/chat-ui/mentions/suggestions/data/utils/match-query.cjs.map +1 -0
  266. package/dist/chat-ui/mentions/suggestions/data/utils/match-query.js +14 -0
  267. package/dist/chat-ui/mentions/suggestions/data/utils/match-query.js.map +1 -0
  268. package/dist/chat-ui/mentions/suggestions/data/utils/score-match.cjs +48 -0
  269. package/dist/chat-ui/mentions/suggestions/data/utils/score-match.cjs.map +1 -0
  270. package/dist/chat-ui/mentions/suggestions/data/utils/score-match.js +48 -0
  271. package/dist/chat-ui/mentions/suggestions/data/utils/score-match.js.map +1 -0
  272. package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.cjs +71 -0
  273. package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.cjs.map +1 -0
  274. package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.js +71 -0
  275. package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.js.map +1 -0
  276. package/dist/chat-ui/messages/continue-pill.cjs +54 -0
  277. package/dist/chat-ui/messages/continue-pill.cjs.map +1 -0
  278. package/dist/chat-ui/messages/continue-pill.js +54 -0
  279. package/dist/chat-ui/messages/continue-pill.js.map +1 -0
  280. package/dist/chat-ui/messages/message-actions-config.cjs +12 -0
  281. package/dist/chat-ui/messages/message-actions-config.cjs.map +1 -0
  282. package/dist/chat-ui/messages/message-actions-config.js +12 -0
  283. package/dist/chat-ui/messages/message-actions-config.js.map +1 -0
  284. package/dist/chat-ui/messages/message-components.cjs +343 -0
  285. package/dist/chat-ui/messages/message-components.cjs.map +1 -0
  286. package/dist/chat-ui/messages/message-components.d.ts +13 -1
  287. package/dist/chat-ui/messages/message-components.js +343 -0
  288. package/dist/chat-ui/messages/message-components.js.map +1 -0
  289. package/dist/chat-ui/messages/running-indicator.cjs +49 -0
  290. package/dist/chat-ui/messages/running-indicator.cjs.map +1 -0
  291. package/dist/chat-ui/messages/running-indicator.js +49 -0
  292. package/dist/chat-ui/messages/running-indicator.js.map +1 -0
  293. package/dist/chat-ui/messages/runtime-message.cjs +65 -0
  294. package/dist/chat-ui/messages/runtime-message.cjs.map +1 -0
  295. package/dist/chat-ui/messages/runtime-message.js +65 -0
  296. package/dist/chat-ui/messages/runtime-message.js.map +1 -0
  297. package/dist/{statewire-continue-run-nE9VCKUh.cjs → chat-ui/messages/statewire-continue-run.cjs} +39 -16
  298. package/dist/chat-ui/messages/statewire-continue-run.cjs.map +1 -0
  299. package/dist/chat-ui/messages/statewire-continue-run.d.ts +5 -1
  300. package/dist/{statewire-continue-run-D34gS7_1.js → chat-ui/messages/statewire-continue-run.js} +29 -7
  301. package/dist/chat-ui/messages/statewire-continue-run.js.map +1 -0
  302. package/dist/chat-ui/messages/user-edit-composer.cjs +61 -0
  303. package/dist/chat-ui/messages/user-edit-composer.cjs.map +1 -0
  304. package/dist/chat-ui/messages/user-edit-composer.js +61 -0
  305. package/dist/chat-ui/messages/user-edit-composer.js.map +1 -0
  306. package/dist/chat-ui/messages/voice-delegation-card.cjs +51 -0
  307. package/dist/chat-ui/messages/voice-delegation-card.cjs.map +1 -0
  308. package/dist/chat-ui/messages/voice-delegation-card.d.ts +26 -0
  309. package/dist/chat-ui/messages/voice-delegation-card.js +51 -0
  310. package/dist/chat-ui/messages/voice-delegation-card.js.map +1 -0
  311. package/dist/chat-ui/statewire.cjs +39 -0
  312. package/dist/chat-ui/statewire.cjs.map +1 -0
  313. package/dist/chat-ui/statewire.js +39 -0
  314. package/dist/chat-ui/statewire.js.map +1 -0
  315. package/dist/chat-ui/thread/chat-composer-dock.cjs +37 -0
  316. package/dist/chat-ui/thread/chat-composer-dock.cjs.map +1 -0
  317. package/dist/chat-ui/thread/chat-composer-dock.js +37 -0
  318. package/dist/chat-ui/thread/chat-composer-dock.js.map +1 -0
  319. package/dist/chat-ui/thread/chat-thread-shell.cjs +102 -0
  320. package/dist/chat-ui/thread/chat-thread-shell.cjs.map +1 -0
  321. package/dist/chat-ui/thread/chat-thread-shell.js +102 -0
  322. package/dist/chat-ui/thread/chat-thread-shell.js.map +1 -0
  323. package/dist/chat-ui/thread/composer-send-or-stop.cjs +75 -0
  324. package/dist/chat-ui/thread/composer-send-or-stop.cjs.map +1 -0
  325. package/dist/chat-ui/thread/composer-send-or-stop.d.ts +0 -6
  326. package/dist/chat-ui/thread/composer-send-or-stop.js +75 -0
  327. package/dist/chat-ui/thread/composer-send-or-stop.js.map +1 -0
  328. package/dist/chat-ui/thread/statewire-history-edge.cjs +134 -0
  329. package/dist/chat-ui/thread/statewire-history-edge.cjs.map +1 -0
  330. package/dist/chat-ui/thread/statewire-history-edge.js +134 -0
  331. package/dist/chat-ui/thread/statewire-history-edge.js.map +1 -0
  332. package/dist/{collab.cjs → collab/client.cjs} +6 -166
  333. package/dist/collab/client.cjs.map +1 -0
  334. package/dist/{collab.js → collab/client.js} +5 -164
  335. package/dist/collab/client.js.map +1 -0
  336. package/dist/collab/close-policy.cjs +14 -0
  337. package/dist/collab/close-policy.cjs.map +1 -0
  338. package/dist/collab/close-policy.js +14 -0
  339. package/dist/collab/close-policy.js.map +1 -0
  340. package/dist/collab/index.cjs +17 -0
  341. package/dist/collab/index.cjs.map +1 -0
  342. package/dist/collab/index.js +17 -0
  343. package/dist/collab/index.js.map +1 -0
  344. package/dist/collab/mint.cjs +59 -0
  345. package/dist/collab/mint.cjs.map +1 -0
  346. package/dist/collab/mint.js +59 -0
  347. package/dist/collab/mint.js.map +1 -0
  348. package/dist/collab/react.cjs +58 -0
  349. package/dist/collab/react.cjs.map +1 -0
  350. package/dist/collab/react.js +58 -0
  351. package/dist/collab/react.js.map +1 -0
  352. package/dist/collab/shape.cjs +45 -0
  353. package/dist/collab/shape.cjs.map +1 -0
  354. package/dist/collab/shape.js +45 -0
  355. package/dist/collab/shape.js.map +1 -0
  356. package/dist/composer/AttachmentContext.cjs +40 -0
  357. package/dist/composer/AttachmentContext.cjs.map +1 -0
  358. package/dist/composer/AttachmentContext.js +40 -0
  359. package/dist/composer/AttachmentContext.js.map +1 -0
  360. package/dist/composer/ComposerAttachmentPreview.cjs +39 -0
  361. package/dist/composer/ComposerAttachmentPreview.cjs.map +1 -0
  362. package/dist/composer/ComposerAttachmentPreview.js +39 -0
  363. package/dist/composer/ComposerAttachmentPreview.js.map +1 -0
  364. package/dist/composer/ComposerDropZone.cjs +61 -0
  365. package/dist/composer/ComposerDropZone.cjs.map +1 -0
  366. package/dist/composer/ComposerDropZone.d.ts +1 -1
  367. package/dist/composer/ComposerDropZone.js +61 -0
  368. package/dist/composer/ComposerDropZone.js.map +1 -0
  369. package/dist/composer/ComposerQuotePreview.cjs +42 -0
  370. package/dist/composer/ComposerQuotePreview.cjs.map +1 -0
  371. package/dist/composer/ComposerQuotePreview.js +42 -0
  372. package/dist/composer/ComposerQuotePreview.js.map +1 -0
  373. package/dist/composer/FileUploadButton.cjs +65 -0
  374. package/dist/composer/FileUploadButton.cjs.map +1 -0
  375. package/dist/composer/FileUploadButton.d.ts +1 -1
  376. package/dist/composer/FileUploadButton.js +65 -0
  377. package/dist/composer/FileUploadButton.js.map +1 -0
  378. package/dist/composer/QuoteContext.cjs +68 -0
  379. package/dist/composer/QuoteContext.cjs.map +1 -0
  380. package/dist/composer/QuoteContext.js +68 -0
  381. package/dist/composer/QuoteContext.js.map +1 -0
  382. package/dist/composer/build-composed-message.cjs +25 -0
  383. package/dist/composer/build-composed-message.cjs.map +1 -0
  384. package/dist/composer/build-composed-message.js +25 -0
  385. package/dist/composer/build-composed-message.js.map +1 -0
  386. package/dist/composer/clipboard.cjs +62 -0
  387. package/dist/composer/clipboard.cjs.map +1 -0
  388. package/dist/composer/clipboard.d.ts +27 -3
  389. package/dist/composer/clipboard.js +62 -0
  390. package/dist/composer/clipboard.js.map +1 -0
  391. package/dist/composer/useAppendToComposer.cjs +21 -0
  392. package/dist/composer/useAppendToComposer.cjs.map +1 -0
  393. package/dist/composer/useAppendToComposer.js +21 -0
  394. package/dist/composer/useAppendToComposer.js.map +1 -0
  395. package/dist/composer/useAttachFiles.cjs +40 -0
  396. package/dist/composer/useAttachFiles.cjs.map +1 -0
  397. package/dist/composer/useAttachFiles.d.ts +24 -0
  398. package/dist/composer/useAttachFiles.js +40 -0
  399. package/dist/composer/useAttachFiles.js.map +1 -0
  400. package/dist/composer/useComposerAttachment.cjs +25 -0
  401. package/dist/composer/useComposerAttachment.cjs.map +1 -0
  402. package/dist/composer/useComposerAttachment.js +25 -0
  403. package/dist/composer/useComposerAttachment.js.map +1 -0
  404. package/dist/composer/useFileUpload.cjs +123 -0
  405. package/dist/composer/useFileUpload.cjs.map +1 -0
  406. package/dist/composer/useFileUpload.js +123 -0
  407. package/dist/composer/useFileUpload.js.map +1 -0
  408. package/dist/composer/useSendMessage.cjs +22 -0
  409. package/dist/composer/useSendMessage.cjs.map +1 -0
  410. package/dist/composer/useSendMessage.js +22 -0
  411. package/dist/composer/useSendMessage.js.map +1 -0
  412. package/dist/diagnostics/athena-diagnostics.cjs +329 -0
  413. package/dist/diagnostics/athena-diagnostics.cjs.map +1 -0
  414. package/dist/diagnostics/athena-diagnostics.js +329 -0
  415. package/dist/diagnostics/athena-diagnostics.js.map +1 -0
  416. package/dist/diagnostics/errors.cjs +89 -0
  417. package/dist/diagnostics/errors.cjs.map +1 -0
  418. package/dist/diagnostics/errors.js +89 -0
  419. package/dist/diagnostics/errors.js.map +1 -0
  420. package/dist/diagnostics/useAthenaDiagnostics.cjs +16 -0
  421. package/dist/diagnostics/useAthenaDiagnostics.cjs.map +1 -0
  422. package/dist/diagnostics/useAthenaDiagnostics.js +16 -0
  423. package/dist/diagnostics/useAthenaDiagnostics.js.map +1 -0
  424. package/dist/index.cjs +274 -27882
  425. package/dist/index.cjs.map +1 -1
  426. package/dist/index.d.ts +6 -4
  427. package/dist/index.js +161 -27759
  428. package/dist/index.js.map +1 -1
  429. package/dist/lib/athena-urls.cjs +194 -0
  430. package/dist/lib/athena-urls.cjs.map +1 -0
  431. package/dist/lib/athena-urls.d.ts +20 -5
  432. package/dist/lib/athena-urls.js +194 -0
  433. package/dist/lib/athena-urls.js.map +1 -0
  434. package/dist/lib/posthog/before-send.cjs +58 -0
  435. package/dist/lib/posthog/before-send.cjs.map +1 -0
  436. package/dist/lib/posthog/before-send.js +58 -0
  437. package/dist/lib/posthog/before-send.js.map +1 -0
  438. package/dist/lib/posthog/capture-gate.cjs +322 -0
  439. package/dist/lib/posthog/capture-gate.cjs.map +1 -0
  440. package/dist/lib/posthog/capture-gate.js +322 -0
  441. package/dist/lib/posthog/capture-gate.js.map +1 -0
  442. package/dist/lib/posthog/wrap-posthog-client.cjs +163 -0
  443. package/dist/lib/posthog/wrap-posthog-client.cjs.map +1 -0
  444. package/dist/lib/posthog/wrap-posthog-client.js +163 -0
  445. package/dist/lib/posthog/wrap-posthog-client.js.map +1 -0
  446. package/dist/lib/utils.cjs +12 -0
  447. package/dist/lib/utils.cjs.map +1 -0
  448. package/dist/lib/utils.js +9 -0
  449. package/dist/lib/utils.js.map +1 -0
  450. package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.cjs +77 -0
  451. package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.cjs.map +1 -0
  452. package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.js +77 -0
  453. package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.js.map +1 -0
  454. package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.cjs +181 -0
  455. package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.cjs.map +1 -0
  456. package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.js +181 -0
  457. package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.js.map +1 -0
  458. package/dist/packages/agent-runtime/src/asset-attachment.cjs +19 -0
  459. package/dist/packages/agent-runtime/src/asset-attachment.cjs.map +1 -0
  460. package/dist/packages/agent-runtime/src/asset-attachment.js +19 -0
  461. package/dist/packages/agent-runtime/src/asset-attachment.js.map +1 -0
  462. package/dist/packages/agent-runtime/src/auth-denial.cjs +28 -0
  463. package/dist/packages/agent-runtime/src/auth-denial.cjs.map +1 -0
  464. package/dist/packages/agent-runtime/src/auth-denial.js +28 -0
  465. package/dist/packages/agent-runtime/src/auth-denial.js.map +1 -0
  466. package/dist/packages/agent-runtime/src/client-tool-bridge.cjs +270 -0
  467. package/dist/packages/agent-runtime/src/client-tool-bridge.cjs.map +1 -0
  468. package/dist/packages/agent-runtime/src/client-tool-bridge.js +270 -0
  469. package/dist/packages/agent-runtime/src/client-tool-bridge.js.map +1 -0
  470. package/dist/packages/agent-runtime/src/client-tools.cjs +137 -0
  471. package/dist/packages/agent-runtime/src/client-tools.cjs.map +1 -0
  472. package/dist/packages/agent-runtime/src/client-tools.js +137 -0
  473. package/dist/packages/agent-runtime/src/client-tools.js.map +1 -0
  474. package/dist/packages/agent-runtime/src/conversation-index.cjs +80 -0
  475. package/dist/packages/agent-runtime/src/conversation-index.cjs.map +1 -0
  476. package/dist/packages/agent-runtime/src/conversation-index.js +80 -0
  477. package/dist/packages/agent-runtime/src/conversation-index.js.map +1 -0
  478. package/dist/packages/agent-runtime/src/conversation-list.cjs +86 -0
  479. package/dist/packages/agent-runtime/src/conversation-list.cjs.map +1 -0
  480. package/dist/packages/agent-runtime/src/conversation-list.js +86 -0
  481. package/dist/packages/agent-runtime/src/conversation-list.js.map +1 -0
  482. package/dist/packages/agent-runtime/src/deep-agent-transport-recipe.cjs +55 -0
  483. package/dist/packages/agent-runtime/src/deep-agent-transport-recipe.cjs.map +1 -0
  484. package/dist/packages/agent-runtime/src/deep-agent-transport-recipe.js +55 -0
  485. package/dist/packages/agent-runtime/src/deep-agent-transport-recipe.js.map +1 -0
  486. package/dist/packages/agent-runtime/src/edit-command.cjs +89 -0
  487. package/dist/packages/agent-runtime/src/edit-command.cjs.map +1 -0
  488. package/dist/packages/agent-runtime/src/edit-command.js +89 -0
  489. package/dist/packages/agent-runtime/src/edit-command.js.map +1 -0
  490. package/dist/packages/agent-runtime/src/errors.cjs +95 -0
  491. package/dist/packages/agent-runtime/src/errors.cjs.map +1 -0
  492. package/dist/packages/agent-runtime/src/errors.js +95 -0
  493. package/dist/packages/agent-runtime/src/errors.js.map +1 -0
  494. package/dist/packages/agent-runtime/src/generated/runconfig-contract.cjs +236 -0
  495. package/dist/packages/agent-runtime/src/generated/runconfig-contract.cjs.map +1 -0
  496. package/dist/packages/agent-runtime/src/generated/runconfig-contract.js +236 -0
  497. package/dist/packages/agent-runtime/src/generated/runconfig-contract.js.map +1 -0
  498. package/dist/packages/agent-runtime/src/interrupts.cjs +117 -0
  499. package/dist/packages/agent-runtime/src/interrupts.cjs.map +1 -0
  500. package/dist/packages/agent-runtime/src/interrupts.js +117 -0
  501. package/dist/packages/agent-runtime/src/interrupts.js.map +1 -0
  502. package/dist/packages/agent-runtime/src/message-author.cjs +31 -0
  503. package/dist/packages/agent-runtime/src/message-author.cjs.map +1 -0
  504. package/dist/packages/agent-runtime/src/message-author.js +31 -0
  505. package/dist/packages/agent-runtime/src/message-author.js.map +1 -0
  506. package/dist/packages/agent-runtime/src/message-window.cjs +85 -0
  507. package/dist/packages/agent-runtime/src/message-window.cjs.map +1 -0
  508. package/dist/packages/agent-runtime/src/message-window.js +85 -0
  509. package/dist/packages/agent-runtime/src/message-window.js.map +1 -0
  510. package/dist/packages/agent-runtime/src/messages.cjs +433 -0
  511. package/dist/packages/agent-runtime/src/messages.cjs.map +1 -0
  512. package/dist/packages/agent-runtime/src/messages.js +433 -0
  513. package/dist/packages/agent-runtime/src/messages.js.map +1 -0
  514. package/dist/packages/agent-runtime/src/model-context.cjs +13 -0
  515. package/dist/packages/agent-runtime/src/model-context.cjs.map +1 -0
  516. package/dist/packages/agent-runtime/src/model-context.js +13 -0
  517. package/dist/packages/agent-runtime/src/model-context.js.map +1 -0
  518. package/dist/packages/agent-runtime/src/optimistic-content.cjs +17 -0
  519. package/dist/packages/agent-runtime/src/optimistic-content.cjs.map +1 -0
  520. package/dist/packages/agent-runtime/src/optimistic-content.js +17 -0
  521. package/dist/packages/agent-runtime/src/optimistic-content.js.map +1 -0
  522. package/dist/packages/agent-runtime/src/protocol.cjs +33 -0
  523. package/dist/packages/agent-runtime/src/protocol.cjs.map +1 -0
  524. package/dist/packages/agent-runtime/src/protocol.js +33 -0
  525. package/dist/packages/agent-runtime/src/protocol.js.map +1 -0
  526. package/dist/packages/agent-runtime/src/queue.cjs +67 -0
  527. package/dist/packages/agent-runtime/src/queue.cjs.map +1 -0
  528. package/dist/packages/agent-runtime/src/queue.js +67 -0
  529. package/dist/packages/agent-runtime/src/queue.js.map +1 -0
  530. package/dist/packages/agent-runtime/src/quota-safe-local-storage-session.cjs +47 -0
  531. package/dist/packages/agent-runtime/src/quota-safe-local-storage-session.cjs.map +1 -0
  532. package/dist/packages/agent-runtime/src/quota-safe-local-storage-session.js +47 -0
  533. package/dist/packages/agent-runtime/src/quota-safe-local-storage-session.js.map +1 -0
  534. package/dist/packages/agent-runtime/src/runtime-messages.cjs +187 -0
  535. package/dist/packages/agent-runtime/src/runtime-messages.cjs.map +1 -0
  536. package/dist/packages/agent-runtime/src/runtime-messages.js +187 -0
  537. package/dist/packages/agent-runtime/src/runtime-messages.js.map +1 -0
  538. package/dist/packages/agent-runtime/src/send-recovery.cjs +128 -0
  539. package/dist/packages/agent-runtime/src/send-recovery.cjs.map +1 -0
  540. package/dist/packages/agent-runtime/src/send-recovery.js +128 -0
  541. package/dist/packages/agent-runtime/src/send-recovery.js.map +1 -0
  542. package/dist/packages/agent-runtime/src/statewire-attach-observer.cjs +249 -0
  543. package/dist/packages/agent-runtime/src/statewire-attach-observer.cjs.map +1 -0
  544. package/dist/packages/agent-runtime/src/statewire-attach-observer.js +249 -0
  545. package/dist/packages/agent-runtime/src/statewire-attach-observer.js.map +1 -0
  546. package/dist/packages/agent-runtime/src/statewire-state.cjs +16 -0
  547. package/dist/packages/agent-runtime/src/statewire-state.cjs.map +1 -0
  548. package/dist/packages/agent-runtime/src/statewire-state.js +16 -0
  549. package/dist/packages/agent-runtime/src/statewire-state.js.map +1 -0
  550. package/dist/packages/agent-runtime/src/statewire-suspended.cjs +41 -0
  551. package/dist/packages/agent-runtime/src/statewire-suspended.cjs.map +1 -0
  552. package/dist/packages/agent-runtime/src/statewire-suspended.js +41 -0
  553. package/dist/packages/agent-runtime/src/statewire-suspended.js.map +1 -0
  554. package/dist/packages/agent-runtime/src/statewire-transport.cjs +6 -0
  555. package/dist/packages/agent-runtime/src/statewire-transport.cjs.map +1 -0
  556. package/dist/packages/agent-runtime/src/statewire-transport.js +6 -0
  557. package/dist/packages/agent-runtime/src/statewire-transport.js.map +1 -0
  558. package/dist/packages/agent-runtime/src/streaming-markdown.cjs +214 -0
  559. package/dist/packages/agent-runtime/src/streaming-markdown.cjs.map +1 -0
  560. package/dist/packages/agent-runtime/src/streaming-markdown.js +214 -0
  561. package/dist/packages/agent-runtime/src/streaming-markdown.js.map +1 -0
  562. package/dist/packages/agent-runtime/src/thread-extras.cjs +38 -0
  563. package/dist/packages/agent-runtime/src/thread-extras.cjs.map +1 -0
  564. package/dist/packages/agent-runtime/src/thread-extras.js +38 -0
  565. package/dist/packages/agent-runtime/src/thread-extras.js.map +1 -0
  566. package/dist/packages/agent-runtime/src/thread-snapshot-cache.cjs +90 -0
  567. package/dist/packages/agent-runtime/src/thread-snapshot-cache.cjs.map +1 -0
  568. package/dist/packages/agent-runtime/src/thread-snapshot-cache.js +90 -0
  569. package/dist/packages/agent-runtime/src/thread-snapshot-cache.js.map +1 -0
  570. package/dist/packages/agent-runtime/src/thread-status.cjs +49 -0
  571. package/dist/packages/agent-runtime/src/thread-status.cjs.map +1 -0
  572. package/dist/packages/agent-runtime/src/thread-status.js +49 -0
  573. package/dist/packages/agent-runtime/src/thread-status.js.map +1 -0
  574. package/dist/packages/agent-runtime/src/tool-metadata.cjs +1802 -0
  575. package/dist/packages/agent-runtime/src/tool-metadata.cjs.map +1 -0
  576. package/dist/packages/agent-runtime/src/tool-metadata.js +1802 -0
  577. package/dist/packages/agent-runtime/src/tool-metadata.js.map +1 -0
  578. package/dist/packages/agent-runtime/src/tool-outputs.cjs +46 -0
  579. package/dist/packages/agent-runtime/src/tool-outputs.cjs.map +1 -0
  580. package/dist/packages/agent-runtime/src/tool-outputs.js +46 -0
  581. package/dist/packages/agent-runtime/src/tool-outputs.js.map +1 -0
  582. package/dist/packages/agent-runtime/src/tool-result.cjs +151 -0
  583. package/dist/packages/agent-runtime/src/tool-result.cjs.map +1 -0
  584. package/dist/packages/agent-runtime/src/tool-result.js +151 -0
  585. package/dist/packages/agent-runtime/src/tool-result.js.map +1 -0
  586. package/dist/packages/agent-runtime/src/use-conversation-list.cjs +139 -0
  587. package/dist/packages/agent-runtime/src/use-conversation-list.cjs.map +1 -0
  588. package/dist/packages/agent-runtime/src/use-conversation-list.js +139 -0
  589. package/dist/packages/agent-runtime/src/use-conversation-list.js.map +1 -0
  590. package/dist/packages/agent-runtime/src/use-deep-agent-edit-submit.cjs +28 -0
  591. package/dist/packages/agent-runtime/src/use-deep-agent-edit-submit.cjs.map +1 -0
  592. package/dist/packages/agent-runtime/src/use-deep-agent-edit-submit.js +28 -0
  593. package/dist/packages/agent-runtime/src/use-deep-agent-edit-submit.js.map +1 -0
  594. package/dist/packages/agent-runtime/src/use-deep-agent-runtime.cjs +138 -0
  595. package/dist/packages/agent-runtime/src/use-deep-agent-runtime.cjs.map +1 -0
  596. package/dist/packages/agent-runtime/src/use-deep-agent-runtime.js +138 -0
  597. package/dist/packages/agent-runtime/src/use-deep-agent-runtime.js.map +1 -0
  598. package/dist/packages/agent-runtime/src/use-deep-agent-thread.cjs +387 -0
  599. package/dist/packages/agent-runtime/src/use-deep-agent-thread.cjs.map +1 -0
  600. package/dist/packages/agent-runtime/src/use-deep-agent-thread.js +387 -0
  601. package/dist/packages/agent-runtime/src/use-deep-agent-thread.js.map +1 -0
  602. package/dist/packages/agent-runtime/src/use-deep-agent-window-sync.cjs +133 -0
  603. package/dist/packages/agent-runtime/src/use-deep-agent-window-sync.cjs.map +1 -0
  604. package/dist/packages/agent-runtime/src/use-deep-agent-window-sync.js +133 -0
  605. package/dist/packages/agent-runtime/src/use-deep-agent-window-sync.js.map +1 -0
  606. package/dist/packages/agent-runtime/src/voice-presentation.cjs +37 -0
  607. package/dist/packages/agent-runtime/src/voice-presentation.cjs.map +1 -0
  608. package/dist/packages/agent-runtime/src/voice-presentation.js +37 -0
  609. package/dist/packages/agent-runtime/src/voice-presentation.js.map +1 -0
  610. package/dist/packages/react/package.json.cjs +9 -0
  611. package/dist/packages/react/package.json.cjs.map +1 -0
  612. package/dist/packages/react/package.json.js +9 -0
  613. package/dist/packages/react/package.json.js.map +1 -0
  614. package/dist/{AthenaContext-B1QMhIP-.cjs → provider/AthenaContext.cjs} +5 -4
  615. package/dist/provider/AthenaContext.cjs.map +1 -0
  616. package/dist/{AthenaContext-MOslgOmE.js → provider/AthenaContext.js} +3 -3
  617. package/dist/provider/AthenaContext.js.map +1 -0
  618. package/dist/provider/AthenaProvider.cjs +403 -0
  619. package/dist/provider/AthenaProvider.cjs.map +1 -0
  620. package/dist/provider/AthenaProvider.js +403 -0
  621. package/dist/provider/AthenaProvider.js.map +1 -0
  622. package/dist/provider/PostHogProvider.cjs +81 -0
  623. package/dist/provider/PostHogProvider.cjs.map +1 -0
  624. package/dist/provider/PostHogProvider.js +59 -0
  625. package/dist/provider/PostHogProvider.js.map +1 -0
  626. package/dist/provider/config.d.ts +8 -7
  627. package/dist/provider/statewire-lifecycle-context.cjs +10 -0
  628. package/dist/provider/statewire-lifecycle-context.cjs.map +1 -0
  629. package/dist/provider/statewire-lifecycle-context.js +10 -0
  630. package/dist/provider/statewire-lifecycle-context.js.map +1 -0
  631. package/dist/provider/statewire-window-context.cjs +10 -0
  632. package/dist/provider/statewire-window-context.cjs.map +1 -0
  633. package/dist/provider/statewire-window-context.js +10 -0
  634. package/dist/provider/statewire-window-context.js.map +1 -0
  635. package/dist/runtime/auth.cjs +309 -0
  636. package/dist/runtime/auth.cjs.map +1 -0
  637. package/dist/runtime/auth.d.ts +19 -18
  638. package/dist/runtime/auth.js +309 -0
  639. package/dist/runtime/auth.js.map +1 -0
  640. package/dist/runtime/statewire-auth-headers.cjs +18 -0
  641. package/dist/runtime/statewire-auth-headers.cjs.map +1 -0
  642. package/dist/runtime/statewire-auth-headers.js +18 -0
  643. package/dist/runtime/statewire-auth-headers.js.map +1 -0
  644. package/dist/runtime/statewire-lifecycle.cjs +67 -0
  645. package/dist/runtime/statewire-lifecycle.cjs.map +1 -0
  646. package/dist/runtime/statewire-lifecycle.js +67 -0
  647. package/dist/runtime/statewire-lifecycle.js.map +1 -0
  648. package/dist/runtime/statewire-run-config.cjs +68 -0
  649. package/dist/runtime/statewire-run-config.cjs.map +1 -0
  650. package/dist/runtime/statewire-run-config.js +68 -0
  651. package/dist/runtime/statewire-run-config.js.map +1 -0
  652. package/dist/runtime/statewire-session-key.cjs +11 -0
  653. package/dist/runtime/statewire-session-key.cjs.map +1 -0
  654. package/dist/runtime/statewire-session-key.js +11 -0
  655. package/dist/runtime/statewire-session-key.js.map +1 -0
  656. package/dist/runtime/useAthenaStatewireRuntime.cjs +179 -0
  657. package/dist/runtime/useAthenaStatewireRuntime.cjs.map +1 -0
  658. package/dist/runtime/useAthenaStatewireRuntime.js +180 -0
  659. package/dist/runtime/useAthenaStatewireRuntime.js.map +1 -0
  660. package/dist/styles.css +1 -1
  661. package/dist/theme/index.cjs +182 -0
  662. package/dist/theme/index.cjs.map +1 -0
  663. package/dist/theme/index.js +182 -0
  664. package/dist/theme/index.js.map +1 -0
  665. package/dist/threads/ThreadList.cjs +55 -0
  666. package/dist/threads/ThreadList.cjs.map +1 -0
  667. package/dist/threads/ThreadList.js +55 -0
  668. package/dist/threads/ThreadList.js.map +1 -0
  669. package/dist/threads/api.cjs +208 -0
  670. package/dist/threads/api.cjs.map +1 -0
  671. package/dist/threads/api.js +208 -0
  672. package/dist/threads/api.js.map +1 -0
  673. package/dist/threads/conversation-list-fetcher.cjs +70 -0
  674. package/dist/threads/conversation-list-fetcher.cjs.map +1 -0
  675. package/dist/threads/conversation-list-fetcher.js +70 -0
  676. package/dist/threads/conversation-list-fetcher.js.map +1 -0
  677. package/dist/threads/mint-thread-id.cjs +7 -0
  678. package/dist/threads/mint-thread-id.cjs.map +1 -0
  679. package/dist/threads/mint-thread-id.js +7 -0
  680. package/dist/threads/mint-thread-id.js.map +1 -0
  681. package/dist/threads/statewire-thread-list.cjs +231 -0
  682. package/dist/threads/statewire-thread-list.cjs.map +1 -0
  683. package/dist/threads/statewire-thread-list.js +231 -0
  684. package/dist/threads/statewire-thread-list.js.map +1 -0
  685. package/dist/threads/thread-id-context.cjs +22 -0
  686. package/dist/threads/thread-id-context.cjs.map +1 -0
  687. package/dist/threads/thread-id-context.d.ts +9 -0
  688. package/dist/threads/thread-id-context.js +22 -0
  689. package/dist/threads/thread-id-context.js.map +1 -0
  690. package/dist/threads/title.cjs +95 -0
  691. package/dist/threads/title.cjs.map +1 -0
  692. package/dist/threads/title.js +95 -0
  693. package/dist/threads/title.js.map +1 -0
  694. package/dist/threads/use-rest-conversation-history.cjs +79 -0
  695. package/dist/threads/use-rest-conversation-history.cjs.map +1 -0
  696. package/dist/threads/use-rest-conversation-history.js +79 -0
  697. package/dist/threads/use-rest-conversation-history.js.map +1 -0
  698. package/dist/threads/use-statewire-conversation-history.cjs +243 -0
  699. package/dist/threads/use-statewire-conversation-history.cjs.map +1 -0
  700. package/dist/threads/use-statewire-conversation-history.js +243 -0
  701. package/dist/threads/use-statewire-conversation-history.js.map +1 -0
  702. package/dist/threads/useAthenaThreadManager.cjs +24 -0
  703. package/dist/threads/useAthenaThreadManager.cjs.map +1 -0
  704. package/dist/threads/useAthenaThreadManager.js +24 -0
  705. package/dist/threads/useAthenaThreadManager.js.map +1 -0
  706. package/dist/toolkits/index.cjs +279 -0
  707. package/dist/toolkits/index.cjs.map +1 -0
  708. package/dist/toolkits/index.js +279 -0
  709. package/dist/toolkits/index.js.map +1 -0
  710. package/dist/tools/NestedPtcMessages.cjs +46 -0
  711. package/dist/tools/NestedPtcMessages.cjs.map +1 -0
  712. package/dist/tools/NestedPtcMessages.js +46 -0
  713. package/dist/tools/NestedPtcMessages.js.map +1 -0
  714. package/dist/tools/append-document-tool-ui.cjs +145 -0
  715. package/dist/tools/append-document-tool-ui.cjs.map +1 -0
  716. package/dist/tools/append-document-tool-ui.js +145 -0
  717. package/dist/tools/append-document-tool-ui.js.map +1 -0
  718. package/dist/tools/asset-utils.cjs +16 -0
  719. package/dist/tools/asset-utils.cjs.map +1 -0
  720. package/dist/tools/asset-utils.js +16 -0
  721. package/dist/tools/asset-utils.js.map +1 -0
  722. package/dist/tools/auto-open-tools.cjs +121 -0
  723. package/dist/tools/auto-open-tools.cjs.map +1 -0
  724. package/dist/tools/auto-open-tools.js +121 -0
  725. package/dist/tools/auto-open-tools.js.map +1 -0
  726. package/dist/tools/file-tool-uis.cjs +108 -0
  727. package/dist/tools/file-tool-uis.cjs.map +1 -0
  728. package/dist/tools/file-tool-uis.js +108 -0
  729. package/dist/tools/file-tool-uis.js.map +1 -0
  730. package/dist/tools/index.cjs +56 -0
  731. package/dist/tools/index.cjs.map +1 -0
  732. package/dist/tools/index.d.ts +1 -0
  733. package/dist/tools/index.js +56 -0
  734. package/dist/tools/index.js.map +1 -0
  735. package/dist/tools/misc-tool-uis.cjs +54 -0
  736. package/dist/tools/misc-tool-uis.cjs.map +1 -0
  737. package/dist/{misc-tool-uis-gAiQw0Yl.js → tools/misc-tool-uis.js} +17 -7
  738. package/dist/tools/misc-tool-uis.js.map +1 -0
  739. package/dist/tools/primitives.cjs +166 -0
  740. package/dist/tools/primitives.cjs.map +1 -0
  741. package/dist/tools/primitives.js +166 -0
  742. package/dist/tools/primitives.js.map +1 -0
  743. package/dist/tools/read-asset-tool-ui.cjs +284 -0
  744. package/dist/tools/read-asset-tool-ui.cjs.map +1 -0
  745. package/dist/tools/read-asset-tool-ui.js +284 -0
  746. package/dist/tools/read-asset-tool-ui.js.map +1 -0
  747. package/dist/tools/todo-plan-store.cjs +88 -0
  748. package/dist/tools/todo-plan-store.cjs.map +1 -0
  749. package/dist/tools/todo-plan-store.js +88 -0
  750. package/dist/tools/todo-plan-store.js.map +1 -0
  751. package/dist/tools/tool-fallback.cjs +667 -0
  752. package/dist/tools/tool-fallback.cjs.map +1 -0
  753. package/dist/tools/tool-fallback.js +667 -0
  754. package/dist/tools/tool-fallback.js.map +1 -0
  755. package/dist/tools/tool-icons.cjs +61 -0
  756. package/dist/tools/tool-icons.cjs.map +1 -0
  757. package/dist/tools/tool-icons.js +61 -0
  758. package/dist/tools/tool-icons.js.map +1 -0
  759. package/dist/tools/tool-uis.cjs +3049 -0
  760. package/dist/tools/tool-uis.cjs.map +1 -0
  761. package/dist/tools/tool-uis.js +3049 -0
  762. package/dist/tools/tool-uis.js.map +1 -0
  763. package/dist/tools/voice-update-tool-ui.cjs +89 -0
  764. package/dist/tools/voice-update-tool-ui.cjs.map +1 -0
  765. package/dist/tools/voice-update-tool-ui.d.ts +27 -0
  766. package/dist/tools/voice-update-tool-ui.js +89 -0
  767. package/dist/tools/voice-update-tool-ui.js.map +1 -0
  768. package/dist/tools/write-todos-tool-ui.cjs +270 -0
  769. package/dist/tools/write-todos-tool-ui.cjs.map +1 -0
  770. package/dist/tools/write-todos-tool-ui.js +270 -0
  771. package/dist/tools/write-todos-tool-ui.js.map +1 -0
  772. package/dist/ui/button.cjs +57 -0
  773. package/dist/ui/button.cjs.map +1 -0
  774. package/dist/ui/button.js +57 -0
  775. package/dist/ui/button.js.map +1 -0
  776. package/dist/ui/collapsible.cjs +17 -0
  777. package/dist/ui/collapsible.cjs.map +1 -0
  778. package/dist/ui/collapsible.js +17 -0
  779. package/dist/ui/collapsible.js.map +1 -0
  780. package/dist/ui/tooltip.cjs +48 -0
  781. package/dist/ui/tooltip.cjs.map +1 -0
  782. package/dist/ui/tooltip.js +48 -0
  783. package/dist/ui/tooltip.js.map +1 -0
  784. package/dist/version.cjs +6 -0
  785. package/dist/version.cjs.map +1 -0
  786. package/dist/version.js +6 -0
  787. package/dist/version.js.map +1 -0
  788. package/package.json +18 -20
  789. package/dist/AthenaAuthContext-B3AwLA5Z.cjs.map +0 -1
  790. package/dist/AthenaAuthContext-DQsdayH2.js.map +0 -1
  791. package/dist/AthenaContext-B1QMhIP-.cjs.map +0 -1
  792. package/dist/AthenaContext-MOslgOmE.js.map +0 -1
  793. package/dist/SuperGroupingCard-BsWbHyV_.js +0 -795
  794. package/dist/SuperGroupingCard-BsWbHyV_.js.map +0 -1
  795. package/dist/SuperGroupingCard-CRRFUgjN.cjs +0 -794
  796. package/dist/SuperGroupingCard-CRRFUgjN.cjs.map +0 -1
  797. package/dist/auth.cjs.map +0 -1
  798. package/dist/auth.js.map +0 -1
  799. package/dist/chat/ComposerEditorContext.d.ts +0 -36
  800. package/dist/chat/tiptap-composer.d.ts +0 -7
  801. package/dist/chat-ui-statewire.cjs +0 -25
  802. package/dist/chat-ui-statewire.cjs.map +0 -1
  803. package/dist/chat-ui-statewire.js +0 -25
  804. package/dist/chat-ui-statewire.js.map +0 -1
  805. package/dist/chat-ui.cjs +0 -2484
  806. package/dist/chat-ui.cjs.map +0 -1
  807. package/dist/chat-ui.js +0 -2486
  808. package/dist/chat-ui.js.map +0 -1
  809. package/dist/collab.cjs.map +0 -1
  810. package/dist/collab.js.map +0 -1
  811. package/dist/mentions/composer-keybinds.d.ts +0 -5
  812. package/dist/mentions/mention-extension.d.ts +0 -6
  813. package/dist/mentions/mention-icons.d.ts +0 -4
  814. package/dist/mentions/mention-node-view.d.ts +0 -2
  815. package/dist/mentions/mention-suggestion-list.d.ts +0 -14
  816. package/dist/mentions/mention-suggestion-popup.d.ts +0 -15
  817. package/dist/mentions/mention-suggestions-extension.d.ts +0 -11
  818. package/dist/mentions/mention-types.d.ts +0 -21
  819. package/dist/mentions/mention-utils.d.ts +0 -23
  820. package/dist/mentions/use-mention-suggestions.d.ts +0 -29
  821. package/dist/misc-tool-uis-B2e0Okkn.cjs +0 -43
  822. package/dist/misc-tool-uis-B2e0Okkn.cjs.map +0 -1
  823. package/dist/misc-tool-uis-gAiQw0Yl.js.map +0 -1
  824. package/dist/statewire-continue-run-D34gS7_1.js.map +0 -1
  825. package/dist/statewire-continue-run-nE9VCKUh.cjs.map +0 -1
  826. package/dist/statewire-history-edge-C8uyTEjX.cjs +0 -1711
  827. package/dist/statewire-history-edge-C8uyTEjX.cjs.map +0 -1
  828. package/dist/statewire-history-edge-CPohUKMt.js +0 -1712
  829. package/dist/statewire-history-edge-CPohUKMt.js.map +0 -1
  830. package/dist/super-grouping.cjs +0 -22
  831. package/dist/super-grouping.cjs.map +0 -1
  832. package/dist/super-grouping.js +0 -22
  833. package/dist/super-grouping.js.map +0 -1
  834. package/dist/tool-fallback-DkQ3DLkn.js +0 -4281
  835. package/dist/tool-fallback-DkQ3DLkn.js.map +0 -1
  836. package/dist/tool-fallback-kfhpJQZa.cjs +0 -4297
  837. package/dist/tool-fallback-kfhpJQZa.cjs.map +0 -1
  838. package/dist/tools.cjs +0 -41
  839. package/dist/tools.cjs.map +0 -1
  840. package/dist/tools.js +0 -41
  841. package/dist/tools.js.map +0 -1
  842. package/dist/trash-2-B5OaNAL7.cjs +0 -5096
  843. package/dist/trash-2-B5OaNAL7.cjs.map +0 -1
  844. package/dist/trash-2-CCwSURL-.js +0 -5081
  845. package/dist/trash-2-CCwSURL-.js.map +0 -1
  846. package/dist/use-rest-conversation-history-Cm8qMRxp.cjs +0 -32397
  847. package/dist/use-rest-conversation-history-Cm8qMRxp.cjs.map +0 -1
  848. package/dist/use-rest-conversation-history-veDZS-oL.js +0 -32361
  849. package/dist/use-rest-conversation-history-veDZS-oL.js.map +0 -1
  850. package/dist/wrench-BEf72cyP.cjs +0 -417
  851. package/dist/wrench-BEf72cyP.cjs.map +0 -1
  852. package/dist/wrench-CbrOlVYm.js +0 -418
  853. package/dist/wrench-CbrOlVYm.js.map +0 -1
  854. package/dist/x-Dfd2NzK0.cjs +0 -42
  855. package/dist/x-Dfd2NzK0.cjs.map +0 -1
  856. package/dist/x-_DntAa_a.js +0 -43
  857. package/dist/x-_DntAa_a.js.map +0 -1
@@ -0,0 +1,433 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const core = require("@assistant-ui/core");
4
+ const react = require("@assistant-ui/core/react");
5
+ const convertLangChainMessages = require("../../../node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.cjs");
6
+ const reactStatewire = require("@assistant-ui/react-statewire");
7
+ const messageAuthor = require("./message-author.cjs");
8
+ const runconfigContract = require("./generated/runconfig-contract.cjs");
9
+ const messageWindow = require("./message-window.cjs");
10
+ const optimisticContent = require("./optimistic-content.cjs");
11
+ const statewireState = require("./statewire-state.cjs");
12
+ const messageConverter = react.createMessageConverter(convertLangChainMessages.convertLangChainMessages);
13
+ const wirePartsToOptimisticParts = (parts) => parts.flatMap((part) => {
14
+ if (part.type === "text") return [part];
15
+ if (part.mediaType.startsWith("image/")) return [{ type: "image", image: part.url }];
16
+ return [];
17
+ });
18
+ const ATHENA_QUEUED_LANE_KEY = "athena_queued_lane";
19
+ const laneEntryMessage = ({
20
+ entry,
21
+ queued,
22
+ selfAuthor
23
+ }) => {
24
+ const author = messageAuthor.laneEntryAuthor(entry, selfAuthor);
25
+ const metadata = {
26
+ ...queued ? { [ATHENA_QUEUED_LANE_KEY]: true } : {},
27
+ ...author ? { [messageAuthor.ATHENA_MESSAGE_AUTHOR_KEY]: author } : {}
28
+ };
29
+ return {
30
+ id: entry.id,
31
+ type: "human",
32
+ content: optimisticContent.buildOptimisticHumanContent(wirePartsToOptimisticParts(entry.parts)),
33
+ ...Object.keys(metadata).length > 0 ? { additional_kwargs: { metadata } } : {}
34
+ };
35
+ };
36
+ const createDeepAgentMaterialize = ({ selfAuthor = null } = {}) => (draft) => {
37
+ reactStatewire.runsMaterialize(draft, {
38
+ append: (message) => {
39
+ (draft.messages ?? (draft.messages = [])).push(
40
+ laneEntryMessage({ entry: message, queued: false, selfAuthor })
41
+ );
42
+ },
43
+ rollback: (to) => {
44
+ if (to === null) {
45
+ draft.messages = [];
46
+ return;
47
+ }
48
+ const messages = draft.messages ?? [];
49
+ const keepIndex = messages.findIndex((message) => message.id === to);
50
+ if (keepIndex !== -1) messages.splice(keepIndex + 1);
51
+ }
52
+ });
53
+ };
54
+ createDeepAgentMaterialize();
55
+ const laneTailMessages = (state, laneProjection = "both", selfAuthor = null) => {
56
+ var _a;
57
+ const run = (_a = state == null ? void 0 : state.runs) == null ? void 0 : _a[0];
58
+ if (!run) return [];
59
+ const entries = laneProjection === "steer-only" ? run.steerQueue : [...run.queue, ...run.steerQueue];
60
+ return entries.map((entry) => laneEntryMessage({ entry, queued: true, selfAuthor }));
61
+ };
62
+ const PENDING_ASSISTANT_MESSAGE_ID = "__athena_deep_agent_pending_assistant__";
63
+ function withPendingAssistantMessage(messages, isRunning) {
64
+ var _a;
65
+ if (!isRunning) return messages;
66
+ const lastType = (_a = messages.at(-1)) == null ? void 0 : _a.type;
67
+ if (lastType === "ai" || lastType === "tool") return messages;
68
+ return [
69
+ ...messages,
70
+ {
71
+ type: "ai",
72
+ content: [],
73
+ id: PENDING_ASSISTANT_MESSAGE_ID,
74
+ status: { type: "running" }
75
+ }
76
+ ];
77
+ }
78
+ const ATHENA_RUN_MARKER_KEY = "athena_run_marker";
79
+ const ATHENA_RUN_MARKER_CANCELLED = "cancelled";
80
+ const ATHENA_RUN_MARKER_SOURCE_KEY = "athena_run_marker_source";
81
+ const ATHENA_STOP_SOURCE_SEND_NOW = "send_now";
82
+ const ATHENA_STOP_SOURCE_POD_DRAIN = "pod_drain";
83
+ const ATHENA_STOP_SOURCE_INSTANCE_CLOSED = "instance_closed";
84
+ function isServerUpdateStopSource(source) {
85
+ return source === ATHENA_STOP_SOURCE_POD_DRAIN || source === ATHENA_STOP_SOURCE_INSTANCE_CLOSED;
86
+ }
87
+ const ATHENA_RUN_MARKER_FAILED = "failed";
88
+ const ATHENA_TERMINATION_REASON_KEY = "athena_termination_reason";
89
+ const ATHENA_HANDOFF_KEY = "athena_handoff";
90
+ function readRunMarkerFromSourceMessages(message) {
91
+ var _a, _b, _c, _d;
92
+ const sources = core.getExternalStoreMessages(message);
93
+ for (const source of sources) {
94
+ if ((source == null ? void 0 : source.type) !== "ai") continue;
95
+ const kwargs = source.additional_kwargs;
96
+ const marker = kwargs == null ? void 0 : kwargs[ATHENA_RUN_MARKER_KEY];
97
+ if (typeof marker !== "string") continue;
98
+ const markerSource = kwargs == null ? void 0 : kwargs[ATHENA_RUN_MARKER_SOURCE_KEY];
99
+ return {
100
+ marker,
101
+ source: typeof markerSource === "string" ? markerSource : void 0,
102
+ text: typeof source.content === "string" ? source.content : void 0,
103
+ isSoleSourceMessage: sources.length === 1
104
+ };
105
+ }
106
+ const joined = (_b = (_a = message.metadata) == null ? void 0 : _a.custom) == null ? void 0 : _b[ATHENA_RUN_MARKER_KEY];
107
+ if (typeof joined !== "string") return void 0;
108
+ const joinedSource = (_d = (_c = message.metadata) == null ? void 0 : _c.custom) == null ? void 0 : _d[ATHENA_RUN_MARKER_SOURCE_KEY];
109
+ const parts = message.content;
110
+ return {
111
+ marker: joined,
112
+ source: typeof joinedSource === "string" ? joinedSource : void 0,
113
+ text: void 0,
114
+ isSoleSourceMessage: Array.isArray(parts) ? parts.length <= 1 : true
115
+ };
116
+ }
117
+ function liftRunMarkerIntoMetadata(message) {
118
+ if (message.type !== "ai") return message;
119
+ const kwargs = message.additional_kwargs;
120
+ const marker = kwargs == null ? void 0 : kwargs[ATHENA_RUN_MARKER_KEY];
121
+ if (typeof marker !== "string") return message;
122
+ const existingMetadata = kwargs == null ? void 0 : kwargs.metadata;
123
+ const metadata = typeof existingMetadata === "object" && existingMetadata !== null ? existingMetadata : {};
124
+ if (metadata[ATHENA_RUN_MARKER_KEY] === marker) return message;
125
+ return {
126
+ ...message,
127
+ additional_kwargs: {
128
+ ...kwargs,
129
+ metadata: { ...metadata, [ATHENA_RUN_MARKER_KEY]: marker }
130
+ }
131
+ };
132
+ }
133
+ function liftTerminationIntoMetadata(message) {
134
+ if (message.type !== "ai") return message;
135
+ const kwargs = message.additional_kwargs;
136
+ const reason = kwargs == null ? void 0 : kwargs[ATHENA_TERMINATION_REASON_KEY];
137
+ const handoff = kwargs == null ? void 0 : kwargs[ATHENA_HANDOFF_KEY];
138
+ const hasReason = typeof reason === "string";
139
+ const hasHandoff = handoff === true;
140
+ if (!hasReason && !hasHandoff) return message;
141
+ const existingMetadata = kwargs == null ? void 0 : kwargs.metadata;
142
+ const metadata = typeof existingMetadata === "object" && existingMetadata !== null ? existingMetadata : {};
143
+ const reasonMirrored = !hasReason || metadata[ATHENA_TERMINATION_REASON_KEY] === reason;
144
+ const handoffMirrored = !hasHandoff || metadata[ATHENA_HANDOFF_KEY] === true;
145
+ if (reasonMirrored && handoffMirrored) return message;
146
+ return {
147
+ ...message,
148
+ additional_kwargs: {
149
+ ...kwargs,
150
+ metadata: {
151
+ ...metadata,
152
+ ...hasReason ? { [ATHENA_TERMINATION_REASON_KEY]: reason } : {},
153
+ ...hasHandoff ? { [ATHENA_HANDOFF_KEY]: true } : {}
154
+ }
155
+ }
156
+ };
157
+ }
158
+ function liftModelIntoMetadata(message) {
159
+ if (message.type !== "ai") return message;
160
+ const responseMetadata = message.response_metadata;
161
+ let model;
162
+ if (typeof (responseMetadata == null ? void 0 : responseMetadata.model_name) === "string" && responseMetadata.model_name) {
163
+ model = responseMetadata.model_name;
164
+ } else if (typeof (responseMetadata == null ? void 0 : responseMetadata.model) === "string" && responseMetadata.model) {
165
+ model = responseMetadata.model;
166
+ }
167
+ if (!model) return message;
168
+ const kwargs = message.additional_kwargs;
169
+ const existingMetadata = kwargs == null ? void 0 : kwargs.metadata;
170
+ const metadata = typeof existingMetadata === "object" && existingMetadata !== null ? existingMetadata : {};
171
+ if (typeof metadata.model === "string" && metadata.model) return message;
172
+ return {
173
+ ...message,
174
+ additional_kwargs: {
175
+ ...kwargs,
176
+ metadata: { ...metadata, model }
177
+ }
178
+ };
179
+ }
180
+ function liftConversationStatsIntoMetadata(message) {
181
+ if (message.type !== "ai") return message;
182
+ const kwargs = message.additional_kwargs;
183
+ const stats = kwargs == null ? void 0 : kwargs.conversation_stats;
184
+ if (typeof stats !== "object" || stats === null) return message;
185
+ const existingMetadata = kwargs == null ? void 0 : kwargs.metadata;
186
+ const metadata = typeof existingMetadata === "object" && existingMetadata !== null ? existingMetadata : {};
187
+ if (typeof metadata.conversation_stats === "object" && metadata.conversation_stats !== null) {
188
+ return message;
189
+ }
190
+ return {
191
+ ...message,
192
+ additional_kwargs: {
193
+ ...kwargs,
194
+ metadata: { ...metadata, conversation_stats: stats }
195
+ }
196
+ };
197
+ }
198
+ function liftCompactionBoundaryIntoMetadata(message) {
199
+ if (message.type !== "human") return message;
200
+ const kwargs = message.additional_kwargs;
201
+ if ((kwargs == null ? void 0 : kwargs.compaction_start) !== true) return message;
202
+ const existingMetadata = kwargs == null ? void 0 : kwargs.metadata;
203
+ const metadata = typeof existingMetadata === "object" && existingMetadata !== null ? existingMetadata : {};
204
+ if (metadata.compaction_start === true) return message;
205
+ const createdAt = kwargs == null ? void 0 : kwargs._created_at;
206
+ return {
207
+ ...message,
208
+ additional_kwargs: {
209
+ ...kwargs,
210
+ metadata: {
211
+ ...metadata,
212
+ compaction_start: true,
213
+ ...typeof createdAt === "string" ? { _created_at: createdAt } : {}
214
+ }
215
+ }
216
+ };
217
+ }
218
+ function liftHandoffSummaryIntoMetadata(message) {
219
+ if (message.type !== "human") return message;
220
+ const kwargs = message.additional_kwargs;
221
+ if ((kwargs == null ? void 0 : kwargs.handoff_summary) !== true) return message;
222
+ const existingMetadata = kwargs == null ? void 0 : kwargs.metadata;
223
+ const metadata = typeof existingMetadata === "object" && existingMetadata !== null ? existingMetadata : {};
224
+ if (metadata.handoff_summary === true) return message;
225
+ const createdAt = kwargs == null ? void 0 : kwargs._created_at;
226
+ return {
227
+ ...message,
228
+ additional_kwargs: {
229
+ ...kwargs,
230
+ metadata: {
231
+ ...metadata,
232
+ handoff_summary: true,
233
+ ...typeof createdAt === "string" ? { _created_at: createdAt } : {}
234
+ }
235
+ }
236
+ };
237
+ }
238
+ function liftAopSourceIntoMetadata(message) {
239
+ if (message.type !== "human") return message;
240
+ const kwargs = message.additional_kwargs;
241
+ const aopSource = kwargs == null ? void 0 : kwargs.aop_source;
242
+ if (typeof aopSource !== "object" || aopSource === null || Array.isArray(aopSource)) {
243
+ return message;
244
+ }
245
+ const existingMetadata = kwargs == null ? void 0 : kwargs.metadata;
246
+ const metadata = typeof existingMetadata === "object" && existingMetadata !== null ? existingMetadata : {};
247
+ if (typeof metadata.aop_source === "object" && metadata.aop_source !== null) return message;
248
+ return {
249
+ ...message,
250
+ additional_kwargs: {
251
+ ...kwargs,
252
+ metadata: { ...metadata, aop_source: aopSource }
253
+ }
254
+ };
255
+ }
256
+ function liftBranchIntoMetadata(message) {
257
+ if (message.type !== "human" && message.type !== "ai") return message;
258
+ const branch = message.branch;
259
+ if (typeof branch !== "object" || branch === null || Array.isArray(branch)) return message;
260
+ const kwargs = message.additional_kwargs;
261
+ const existingMetadata = kwargs == null ? void 0 : kwargs.metadata;
262
+ const metadata = typeof existingMetadata === "object" && existingMetadata !== null ? existingMetadata : {};
263
+ if (typeof metadata.branch === "object" && metadata.branch !== null) return message;
264
+ return {
265
+ ...message,
266
+ additional_kwargs: {
267
+ ...kwargs,
268
+ metadata: { ...metadata, branch }
269
+ }
270
+ };
271
+ }
272
+ const TOOL_MESSAGE_INTERNAL_KWARGS = /* @__PURE__ */ new Set([
273
+ "reasoning",
274
+ "tool_outputs",
275
+ "hide_from_frontend"
276
+ ]);
277
+ function liftToolMessageMetadataIntoArtifact(message) {
278
+ if (message.type !== "tool") return message;
279
+ const kwargs = message.additional_kwargs;
280
+ if (!kwargs) return message;
281
+ const lifted = {};
282
+ for (const [key, value] of Object.entries(kwargs)) {
283
+ if (key.startsWith("_") || TOOL_MESSAGE_INTERNAL_KWARGS.has(key)) continue;
284
+ lifted[key] = value;
285
+ }
286
+ if (Object.keys(lifted).length === 0) return message;
287
+ const artifact = message.artifact;
288
+ const artifactRecord = typeof artifact === "object" && artifact !== null && !Array.isArray(artifact) ? artifact : {};
289
+ const existing = artifactRecord._tool_message_metadata;
290
+ const existingRecord = typeof existing === "object" && existing !== null && !Array.isArray(existing) ? existing : {};
291
+ return {
292
+ ...message,
293
+ artifact: {
294
+ ...artifactRecord,
295
+ _tool_message_metadata: { ...existingRecord, ...lifted }
296
+ }
297
+ };
298
+ }
299
+ function liftTruncatedToolOutputIntoArtifact(message) {
300
+ if (message.type !== "tool") return message;
301
+ const marker = messageWindow.readTruncatedToolContent(message);
302
+ if (marker === null || typeof message.id !== "string") return message;
303
+ const artifact = message.artifact;
304
+ const artifactRecord = typeof artifact === "object" && artifact !== null && !Array.isArray(artifact) ? artifact : {};
305
+ return {
306
+ ...message,
307
+ artifact: {
308
+ ...artifactRecord,
309
+ [messageWindow.ATHENA_TRUNCATED_TOOL_OUTPUT_ARTIFACT_KEY]: { chars: marker.chars, messageId: message.id }
310
+ }
311
+ };
312
+ }
313
+ const substitutedToolOutputCache = /* @__PURE__ */ new WeakMap();
314
+ function substituteToolOutput(message, toolOutputs) {
315
+ if (message.type !== "tool" || typeof message.id !== "string") return message;
316
+ const marker = messageWindow.readTruncatedToolContent(message);
317
+ if (marker === null) return message;
318
+ const entry = toolOutputs.entry(message.id);
319
+ if (entry === void 0 || entry.chars !== marker.chars) return message;
320
+ const { content } = entry;
321
+ const cached = substitutedToolOutputCache.get(message);
322
+ if (cached !== void 0 && cached.content === content) return cached.substituted;
323
+ const { [runconfigContract.DEEP_AGENT_TRUNCATED_CONTENT_KEY]: _marker, ...rest } = message;
324
+ const substituted = { ...rest, content };
325
+ substitutedToolOutputCache.set(message, { content, substituted });
326
+ return substituted;
327
+ }
328
+ const hasHiddenFrontendFlag = (value) => {
329
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
330
+ return false;
331
+ }
332
+ const record = value;
333
+ if (record.hide_from_frontend === true) return true;
334
+ return hasHiddenFrontendFlag(record.custom);
335
+ };
336
+ function isMessageHiddenFromFrontend(message) {
337
+ if (typeof message !== "object" || message === null || Array.isArray(message)) {
338
+ return false;
339
+ }
340
+ const record = message;
341
+ return hasHiddenFrontendFlag(record.additional_kwargs) || hasHiddenFrontendFlag(record.metadata);
342
+ }
343
+ const CONVERTIBLE_MESSAGE_TYPES = /* @__PURE__ */ new Set(["system", "human", "ai", "tool"]);
344
+ function isConvertibleChatMessage(message) {
345
+ if (typeof message !== "object" || message === null || Array.isArray(message)) {
346
+ return false;
347
+ }
348
+ const type = message.type;
349
+ return typeof type === "string" && CONVERTIBLE_MESSAGE_TYPES.has(type);
350
+ }
351
+ const liftedMessageCache = /* @__PURE__ */ new WeakMap();
352
+ function liftMessageIntoMetadataChannels(message) {
353
+ const cached = liftedMessageCache.get(message);
354
+ if (cached !== void 0) return cached;
355
+ const lifted = liftBranchIntoMetadata(
356
+ liftTruncatedToolOutputIntoArtifact(
357
+ liftToolMessageMetadataIntoArtifact(
358
+ liftAopSourceIntoMetadata(
359
+ liftHandoffSummaryIntoMetadata(
360
+ liftCompactionBoundaryIntoMetadata(
361
+ liftConversationStatsIntoMetadata(
362
+ liftModelIntoMetadata(
363
+ liftTerminationIntoMetadata(liftRunMarkerIntoMetadata(message))
364
+ )
365
+ )
366
+ )
367
+ )
368
+ )
369
+ )
370
+ )
371
+ );
372
+ liftedMessageCache.set(message, lifted);
373
+ return lifted;
374
+ }
375
+ function sanitizeLangChainMessages(messages, { toolOutputs } = {}) {
376
+ return messages.filter((message) => isConvertibleChatMessage(message) && !isMessageHiddenFromFrontend(message)).map(
377
+ (message) => liftMessageIntoMetadataChannels(
378
+ toolOutputs ? substituteToolOutput(message, toolOutputs) : message
379
+ )
380
+ );
381
+ }
382
+ function isLangGraphState(value) {
383
+ return typeof value === "object" && value !== null && "messages" in value && Array.isArray(value.messages);
384
+ }
385
+ function convertDeepAgentState(state, { laneProjection = "both", selfAuthor = null, toolOutputs } = {}) {
386
+ var _a, _b;
387
+ const values = statewireState.readDeepAgentStreamValues(state);
388
+ const status = (_b = (_a = values.runs) == null ? void 0 : _a[0]) == null ? void 0 : _b.status;
389
+ const isRunning = status === "running";
390
+ const laneTail = status === "stopped" || status === "error" ? [] : laneTailMessages(values, laneProjection, selfAuthor);
391
+ const stateMessages = isLangGraphState(values) ? sanitizeLangChainMessages(values.messages, { toolOutputs }) : [];
392
+ return {
393
+ messages: messageConverter.toThreadMessages(
394
+ [...withPendingAssistantMessage(stateMessages, isRunning), ...laneTail],
395
+ isRunning
396
+ ),
397
+ isRunning
398
+ };
399
+ }
400
+ exports.ATHENA_HANDOFF_KEY = ATHENA_HANDOFF_KEY;
401
+ exports.ATHENA_QUEUED_LANE_KEY = ATHENA_QUEUED_LANE_KEY;
402
+ exports.ATHENA_RUN_MARKER_CANCELLED = ATHENA_RUN_MARKER_CANCELLED;
403
+ exports.ATHENA_RUN_MARKER_FAILED = ATHENA_RUN_MARKER_FAILED;
404
+ exports.ATHENA_RUN_MARKER_KEY = ATHENA_RUN_MARKER_KEY;
405
+ exports.ATHENA_RUN_MARKER_SOURCE_KEY = ATHENA_RUN_MARKER_SOURCE_KEY;
406
+ exports.ATHENA_STOP_SOURCE_INSTANCE_CLOSED = ATHENA_STOP_SOURCE_INSTANCE_CLOSED;
407
+ exports.ATHENA_STOP_SOURCE_POD_DRAIN = ATHENA_STOP_SOURCE_POD_DRAIN;
408
+ exports.ATHENA_STOP_SOURCE_SEND_NOW = ATHENA_STOP_SOURCE_SEND_NOW;
409
+ exports.ATHENA_TERMINATION_REASON_KEY = ATHENA_TERMINATION_REASON_KEY;
410
+ exports.PENDING_ASSISTANT_MESSAGE_ID = PENDING_ASSISTANT_MESSAGE_ID;
411
+ exports.convertDeepAgentState = convertDeepAgentState;
412
+ exports.createDeepAgentMaterialize = createDeepAgentMaterialize;
413
+ exports.isConvertibleChatMessage = isConvertibleChatMessage;
414
+ exports.isLangGraphState = isLangGraphState;
415
+ exports.isMessageHiddenFromFrontend = isMessageHiddenFromFrontend;
416
+ exports.isServerUpdateStopSource = isServerUpdateStopSource;
417
+ exports.laneTailMessages = laneTailMessages;
418
+ exports.liftAopSourceIntoMetadata = liftAopSourceIntoMetadata;
419
+ exports.liftBranchIntoMetadata = liftBranchIntoMetadata;
420
+ exports.liftCompactionBoundaryIntoMetadata = liftCompactionBoundaryIntoMetadata;
421
+ exports.liftConversationStatsIntoMetadata = liftConversationStatsIntoMetadata;
422
+ exports.liftHandoffSummaryIntoMetadata = liftHandoffSummaryIntoMetadata;
423
+ exports.liftModelIntoMetadata = liftModelIntoMetadata;
424
+ exports.liftRunMarkerIntoMetadata = liftRunMarkerIntoMetadata;
425
+ exports.liftTerminationIntoMetadata = liftTerminationIntoMetadata;
426
+ exports.liftToolMessageMetadataIntoArtifact = liftToolMessageMetadataIntoArtifact;
427
+ exports.liftTruncatedToolOutputIntoArtifact = liftTruncatedToolOutputIntoArtifact;
428
+ exports.messageConverter = messageConverter;
429
+ exports.readRunMarkerFromSourceMessages = readRunMarkerFromSourceMessages;
430
+ exports.sanitizeLangChainMessages = sanitizeLangChainMessages;
431
+ exports.substituteToolOutput = substituteToolOutput;
432
+ exports.withPendingAssistantMessage = withPendingAssistantMessage;
433
+ //# sourceMappingURL=messages.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.cjs","sources":["../../../../../agent-runtime/src/messages.ts"],"sourcesContent":["import { getExternalStoreMessages } from '@assistant-ui/core';\nimport { createMessageConverter } from '@assistant-ui/core/react';\nimport { convertLangChainMessages, type LangChainMessage } from '@assistant-ui/react-langgraph';\nimport { runsMaterialize, type StatewireThread } from '@assistant-ui/react-statewire';\nimport {\n ATHENA_MESSAGE_AUTHOR_KEY,\n type DeepAgentMessageAuthor,\n laneEntryAuthor,\n} from './message-author';\nimport { DEEP_AGENT_TRUNCATED_CONTENT_KEY } from './generated/runconfig-contract';\nimport {\n ATHENA_TRUNCATED_TOOL_OUTPUT_ARTIFACT_KEY,\n readTruncatedToolContent,\n} from './message-window';\nimport { buildOptimisticHumanContent, type OptimisticContentPart } from './optimistic-content';\nimport { readDeepAgentStreamValues } from './statewire-state';\nimport type { DeepAgentToolOutputStore } from './tool-outputs';\nimport type {\n DeepAgentLaneProjection,\n DeepAgentStreamValues,\n LangGraphState,\n} from './types';\n\n/**\n * Native message converter for the deep-agent runtime.\n *\n * This is the entire \"conversion\" layer: assistant-ui's shipped\n * `convertLangChainMessages` (from `@assistant-ui/react-langgraph`) wired\n * through `createMessageConverter`. No bespoke per-message mapping — the agora\n * `athena_deep_agent` graph streams standard LangChain messages via\n * `append_langgraph_event`, and the shipped converter renders them.\n */\nexport const messageConverter = createMessageConverter(convertLangChainMessages);\n\nconst wirePartsToOptimisticParts = (\n parts: StatewireThread.UserMessage['parts']\n): OptimisticContentPart[] =>\n parts.flatMap((part): OptimisticContentPart[] => {\n if (part.type === 'text') return [part];\n // Image attachments travel as `file` parts on the run/* commands; map\n // them back to `image` parts so the optimistic bubble renders them.\n if (part.mediaType.startsWith('image/')) return [{ type: 'image', image: part.url }];\n return [];\n });\n\n/**\n * `metadata.custom` flag marking a bubble that is a projection of a run-lane\n * entry — a message the server holds and has NOT dispatched yet.\n *\n * The lane is server-owned and replicated to every client on the thread, so\n * an item queued on one surface projects onto all of them. Surfaces without a\n * queue panel must therefore be able to tell a queued projection apart from a\n * submitted turn, or a message another device queued renders as if this device\n * had already sent it.\n *\n * `convertLangChainMessages` exposes `additional_kwargs.metadata` (and nothing\n * else) as the thread message's `metadata.custom`.\n */\nexport const ATHENA_QUEUED_LANE_KEY = 'athena_queued_lane';\n\n/**\n * Whether a thread message's `metadata.custom` marks it as an undispatched\n * lane projection. Returns a primitive, so it is safe to use directly as a\n * `useAuiState` selector.\n */\nexport function isQueuedLaneMessage(custom: Record<string, unknown> | undefined): boolean {\n return custom?.[ATHENA_QUEUED_LANE_KEY] === true;\n}\n\n/**\n * Project one run-lane entry into the optimistic human message shape.\n *\n * `queued` marks entries still waiting in a lane; a dispatched entry becomes an\n * ordinary submitted turn and carries no marker. Either way the bubble carries\n * its author (see {@link laneEntryAuthor}) under the same `metadata.custom`\n * key the backend stamps on the persisted turn, so the optimistic and\n * authoritative copies of one send render identically — and a second poster's\n * avatar shows on their own send without waiting for the acknowledgment.\n */\nconst laneEntryMessage = ({\n entry,\n queued,\n selfAuthor,\n}: {\n entry: StatewireThread.RunsQueueEntry;\n queued: boolean;\n selfAuthor: DeepAgentMessageAuthor | null;\n}): LangChainMessage => {\n const author = laneEntryAuthor(entry, selfAuthor);\n const metadata: Record<string, unknown> = {\n ...(queued ? { [ATHENA_QUEUED_LANE_KEY]: true } : {}),\n ...(author ? { [ATHENA_MESSAGE_AUTHOR_KEY]: author } : {}),\n };\n return {\n id: entry.id,\n type: 'human',\n content: buildOptimisticHumanContent(wirePartsToOptimisticParts(entry.parts)),\n ...(Object.keys(metadata).length > 0 ? { additional_kwargs: { metadata } } : {}),\n };\n};\n\nexport interface DeepAgentMaterializeOptions {\n /** The viewer, stamped onto this client's own not-yet-acknowledged sends. */\n selfAuthor?: DeepAgentMessageAuthor | null;\n}\n\n/**\n * Materialize fold for the statewire path: makes the server's dispatch record\n * concrete in the LangGraph state itself, so direct state reads see dispatched\n * messages and the lib's post-converter dispatch merge stays off.\n */\nexport const createDeepAgentMaterialize =\n ({ selfAuthor = null }: DeepAgentMaterializeOptions = {}) =>\n (draft: DeepAgentStreamValues): void => {\n runsMaterialize(draft, {\n append: (message) => {\n (draft.messages ??= []).push(\n laneEntryMessage({ entry: message, queued: false, selfAuthor })\n );\n },\n rollback: (to) => {\n if (to === null) {\n draft.messages = [];\n return;\n }\n const messages = draft.messages ?? [];\n const keepIndex = messages.findIndex((message) => message.id === to);\n // Unresolved rollback anchor: fail OPEN with the full history (mirrors the edit fold).\n if (keepIndex !== -1) messages.splice(keepIndex + 1);\n },\n });\n };\n\n/** The materialize fold without a viewer identity (surfaces that pass none). */\nexport const deepAgentMaterialize = createDeepAgentMaterialize();\n\n/**\n * Project run lanes into human messages for the converter tail, so a queued or\n * steered item stays visible below the pending-assistant placeholder until its\n * dispatch. Surfaces with a queue panel project only the steer lane\n * (`'steer-only'`); surfaces without one project both lanes (`'both'`).\n *\n * Every projected entry carries {@link ATHENA_QUEUED_LANE_KEY} so a surface\n * without a queue panel can render it as queued rather than as a submitted\n * turn.\n */\nexport const laneTailMessages = (\n state: unknown,\n laneProjection: DeepAgentLaneProjection = 'both',\n selfAuthor: DeepAgentMessageAuthor | null = null\n): LangChainMessage[] => {\n const run = (state as DeepAgentStreamValues | null)?.runs?.[0];\n if (!run) return [];\n const entries =\n laneProjection === 'steer-only' ? run.steerQueue : [...run.queue, ...run.steerQueue];\n return entries.map((entry) => laneEntryMessage({ entry, queued: true, selfAuthor }));\n};\n\n/** Stable id for the derived running-assistant placeholder. */\nexport const PENDING_ASSISTANT_MESSAGE_ID = '__athena_deep_agent_pending_assistant__';\n\n/**\n * Append an empty assistant turn while a run is in flight and the visible\n * history does not already end in one, so the thread shows its \"Thinking…\"\n * status line from the moment a message is submitted.\n *\n * Mirrors `hasUpcomingMessage` in assistant-ui's legacy external-store runtime,\n * which synthesized this placeholder itself. `StatewireThread` renders the\n * converter's message list verbatim, so the placeholder has to come from here —\n * derived from the replicated run status on every render (never written into\n * transport state) so it cannot outlive the run, and carrying a stable id so\n * the streaming bubble's identity does not churn when the real assistant\n * message arrives.\n *\n * `tool` messages convert into assistant turns too, so a mid-run tool result\n * must not produce a second placeholder row.\n */\nexport function withPendingAssistantMessage(\n messages: LangChainMessage[],\n isRunning: boolean\n): LangChainMessage[] {\n if (!isRunning) return messages;\n const lastType = messages.at(-1)?.type;\n if (lastType === 'ai' || lastType === 'tool') return messages;\n // Empty-array content plus an explicit running status — the thinking shimmer\n // keys on `status running && zero content parts`, and the explicit status\n // keeps it pulsing when lane entries render below (the last-message auto\n // status would demote a mid-list placeholder to an empty complete bubble).\n // Never persisted, so it cannot outlive the run.\n return [\n ...messages,\n {\n type: 'ai',\n content: [],\n id: PENDING_ASSISTANT_MESSAGE_ID,\n status: { type: 'running' },\n } satisfies LangChainMessage,\n ];\n}\n\n/** Stable id for the synthetic assistant turn that carries a failure when the run produced none. */\nconst RUN_ERROR_SYNTHETIC_AI_ID = '__athena_deep_agent_run_error__';\n\n/**\n * Surface a run failure the base-correct way: stamp `status: { type:'incomplete',\n * reason:'error', error }` onto the assistant turn so `<Thread/>` renders it via\n * `ErrorPrimitive`. This is the core runtime's model (see `useLanggraphRuntime`\n * `onError`) — NOT a fabricated `⚠️ The run failed` assistant text message, and\n * NOT a magic-string contract shared with the agora backend.\n *\n * Stamps a trailing assistant message; if the visible history does not already\n * end with an assistant turn, appends a synthetic empty assistant turn with a\n * STABLE id so it never churns across renders. A `null` error is a no-op. The\n * shipped `convertLangChainMessages` converter passes `message.status` through.\n */\nexport function applyRunErrorStatus(\n messages: LangChainMessage[],\n errorMessage: string | null\n): LangChainMessage[] {\n if (errorMessage === null) return messages;\n const status = { type: 'incomplete', reason: 'error', error: errorMessage } as const;\n const lastMessage = messages.at(-1);\n if (lastMessage?.type !== 'ai') {\n return [\n ...messages,\n { type: 'ai', content: '', id: RUN_ERROR_SYNTHETIC_AI_ID, status } satisfies LangChainMessage,\n ];\n }\n return [...messages.slice(0, -1), { ...lastMessage, status }];\n}\n\n/**\n * `additional_kwargs` flag the backend stamps on run-lifecycle marker messages\n * (agora `athena_deep_agent/run_markers.py`) — e.g. the \"⏹️ Run stopped by\n * user.\" message persisted when a run is cancelled.\n */\nexport const ATHENA_RUN_MARKER_KEY = 'athena_run_marker';\n\n/** The {@link ATHENA_RUN_MARKER_KEY} value for a user-cancelled run. */\nexport const ATHENA_RUN_MARKER_CANCELLED = 'cancelled';\n\n/**\n * `additional_kwargs` key carrying the stop source behind a cancellation\n * marker (agora `stop_signals.py`: `user_stop`, `send_now`, `transport_cancel`,\n * `unattributed`).\n */\nexport const ATHENA_RUN_MARKER_SOURCE_KEY = 'athena_run_marker_source';\n\n/** The stop source for a \"Send now\" promotion pre-empting the live run. */\nexport const ATHENA_STOP_SOURCE_SEND_NOW = 'send_now';\n\n/**\n * The stop source for a spoken follow-up that redirected a voice-delegated\n * run through the steer lane: the user spoke, they never pressed Stop, so it\n * renders as a redirect rather than as \"Conversation stopped\".\n */\nexport const ATHENA_STOP_SOURCE_VOICE_STEER = 'voice_steer';\n\n/** The stop source for a pod-drain pause (server update), not a user stop. */\nexport const ATHENA_STOP_SOURCE_POD_DRAIN = 'pod_drain';\n\n/**\n * The {@link ATHENA_RUN_MARKER_SOURCE_KEY} value for a run whose hosting\n * instance closed under it (a server update that reached its eviction\n * deadline mid-step, or a placement lost to a lease lapse). Same family as a\n * pod drain: nobody stopped the run, the backend resumes it automatically.\n */\nexport const ATHENA_STOP_SOURCE_INSTANCE_CLOSED = 'instance_closed';\n\n/**\n * Whether a cancellation marker's source names the infrastructure — a pod\n * drain or a closed instance — rather than a person or a client action. These\n * endings read as a pause while the server resumes the run.\n */\nexport function isServerUpdateStopSource(source: string | undefined): boolean {\n return source === ATHENA_STOP_SOURCE_POD_DRAIN || source === ATHENA_STOP_SOURCE_INSTANCE_CLOSED;\n}\n\n/**\n * The {@link ATHENA_RUN_MARKER_KEY} value for a failed run (graph error,\n * including the `GraphRecursionError` \"tool call limit was reached\" case).\n * The marker message's text content carries the user-facing failure copy.\n */\nexport const ATHENA_RUN_MARKER_FAILED = 'failed';\n\n/**\n * `additional_kwargs` key carrying the canonical reason a run ended (agora\n * `athena_deep_agent/termination.py`): `user_stop`, `recursion_limit`,\n * `duplicate_call_guard`, `step_budget`, `ended_after_tools`, `model_refusal`,\n * `completed`, …\n * Stamped on run-lifecycle markers and on handoff messages.\n */\nexport const ATHENA_TERMINATION_REASON_KEY = 'athena_termination_reason';\n\n/**\n * `additional_kwargs` flag on the closing message the runtime's **handoff\n * turn** wrote (one tools-disabled model call made when a guard or the step\n * budget ends the run). The message text is the agent's closing summary; the\n * flag lets clients frame it as a runtime ending rather than a normal reply.\n */\nexport const ATHENA_HANDOFF_KEY = 'athena_handoff';\n\n/**\n * Read a run-lifecycle marker out of a thread message's **bound source\n * messages**, bypassing the converter's metadata join entirely.\n *\n * Why this exists: assistant-ui chunks consecutive assistant/tool messages\n * into ONE `ThreadMessage`, and the upstream join copies `metadata.custom`\n * only from the FIRST assistant message of the chunk\n * (`external-message-converter.ts`: the merge sits inside\n * `if (assistantMessage.content.length === 0)`). A failure marker appended\n * after the assistant's own turn is therefore never the first message in its\n * chunk, so `message.metadata.custom.athena_run_marker` is silently dropped\n * and the whole-message gate can't fire.\n *\n * `getExternalStoreMessages` returns the raw LangChain messages bound to the\n * joined thread message, so the marker is found wherever it sits in the chunk.\n * Returns the marker value plus its text content (the user-facing copy).\n */\nexport interface RunMarkerInfo {\n marker: string;\n /** The stop source stamped by the backend, when the marker carries one. */\n source: string | undefined;\n /** The marker message's text — the user-facing copy. */\n text: string | undefined;\n /**\n * True when the marker is the ONLY source message behind this thread message,\n * i.e. it owns the whole row (a cancelled run drops its partial turn, so its\n * marker stands alone).\n *\n * False when the chunk also holds the assistant's own work. Replacing the row\n * in that case would hide completed prose and tool cards — the marker must be\n * styled in place instead.\n */\n isSoleSourceMessage: boolean;\n}\n\nexport function readRunMarkerFromSourceMessages(\n message: Parameters<typeof getExternalStoreMessages>[0] & {\n metadata?: { custom?: Record<string, unknown> | undefined } | undefined;\n content?: unknown;\n }\n): RunMarkerInfo | undefined {\n const sources = getExternalStoreMessages<LangChainMessage>(message);\n for (const source of sources) {\n if (source?.type !== 'ai') continue;\n const kwargs = source.additional_kwargs as Record<string, unknown> | undefined;\n const marker = kwargs?.[ATHENA_RUN_MARKER_KEY];\n if (typeof marker !== 'string') continue;\n const markerSource = kwargs?.[ATHENA_RUN_MARKER_SOURCE_KEY];\n return {\n marker,\n source: typeof markerSource === 'string' ? markerSource : undefined,\n text: typeof source.content === 'string' ? source.content : undefined,\n isSoleSourceMessage: sources.length === 1,\n };\n }\n // Fallback for surfaces whose messages carry no bound source messages (or a\n // converter that already merged the flag): read the joined metadata. Without\n // sources to count, a single text part is the best available \"marker owns the\n // row\" signal.\n const joined = message.metadata?.custom?.[ATHENA_RUN_MARKER_KEY];\n if (typeof joined !== 'string') return undefined;\n const joinedSource = message.metadata?.custom?.[ATHENA_RUN_MARKER_SOURCE_KEY];\n const parts = message.content;\n return {\n marker: joined,\n source: typeof joinedSource === 'string' ? joinedSource : undefined,\n text: undefined,\n isSoleSourceMessage: Array.isArray(parts) ? parts.length <= 1 : true,\n };\n}\n\n/**\n * The marker value when the marker is the SOLE source message behind a thread\n * message (it owns the whole row), else `undefined`.\n *\n * Returns a primitive so it is safe to use directly as a `useAuiState`\n * selector: `readRunMarkerFromSourceMessages` builds a fresh object on every\n * call, and selector snapshots are compared with `Object.is` — returning that\n * object from a selector makes `getSnapshot` unstable and loops the render.\n */\nexport function readSoleRunMarker(\n message: Parameters<typeof readRunMarkerFromSourceMessages>[0]\n): string | undefined {\n const found = readRunMarkerFromSourceMessages(message);\n return found?.isSoleSourceMessage ? found.marker : undefined;\n}\n\n/**\n * Whether a run marker renders nothing: a `send_now` promotion cancels the\n * live run as plumbing, not as a user-visible stop, so its cancellation\n * marker stays in the data for provenance but paints no divider.\n */\nexport function isSilentRunMarker(found: RunMarkerInfo): boolean {\n return (\n found.marker === ATHENA_RUN_MARKER_CANCELLED && found.source === ATHENA_STOP_SOURCE_SEND_NOW\n );\n}\n\n/**\n * Whether a cancellation marker records a server-update pause — a cooperative\n * pod drain, or the hosting instance closing under the run — rather than a\n * stop the user asked for. Rendered with distinct \"paused by a server update\"\n * copy instead of the \"Conversation stopped\" pill; the backend resumes the run.\n */\nexport function isDrainRunMarker(found: RunMarkerInfo): boolean {\n return found.marker === ATHENA_RUN_MARKER_CANCELLED && isServerUpdateStopSource(found.source);\n}\n\n/**\n * Surface the backend's top-level `additional_kwargs.athena_run_marker` flag\n * where the shipped converter can see it.\n *\n * `convertLangChainMessages` exposes ONLY `additional_kwargs.metadata` as the\n * thread message's `metadata.custom`; every other `additional_kwargs` key is\n * dropped. Marker messages persisted before the backend mirrored the flag into\n * `metadata` carry it top-level only, so this lift keeps those threads styling\n * correctly. Non-marker messages pass through with their identity unchanged,\n * and already-mirrored markers are left as-is (idempotent).\n */\nexport function liftRunMarkerIntoMetadata(message: LangChainMessage): LangChainMessage {\n if (message.type !== 'ai') return message;\n const kwargs = message.additional_kwargs as Record<string, unknown> | undefined;\n const marker = kwargs?.[ATHENA_RUN_MARKER_KEY];\n if (typeof marker !== 'string') return message;\n const existingMetadata = kwargs?.metadata;\n const metadata =\n typeof existingMetadata === 'object' && existingMetadata !== null\n ? (existingMetadata as Record<string, unknown>)\n : {};\n if (metadata[ATHENA_RUN_MARKER_KEY] === marker) return message;\n return {\n ...message,\n additional_kwargs: {\n ...kwargs,\n metadata: { ...metadata, [ATHENA_RUN_MARKER_KEY]: marker },\n } as (typeof message)['additional_kwargs'],\n };\n}\n\n/**\n * Mirror the termination reason and handoff flag into the converter's metadata\n * channel. The backend dual-writes both (top-level + `metadata`), so this lift\n * is the back-compat path for messages persisted before the mirror existed and\n * for any emitter that only stamps the top-level key. Idempotent; identity for\n * messages without the keys.\n */\nexport function liftTerminationIntoMetadata(message: LangChainMessage): LangChainMessage {\n if (message.type !== 'ai') return message;\n const kwargs = message.additional_kwargs as Record<string, unknown> | undefined;\n const reason = kwargs?.[ATHENA_TERMINATION_REASON_KEY];\n const handoff = kwargs?.[ATHENA_HANDOFF_KEY];\n const hasReason = typeof reason === 'string';\n const hasHandoff = handoff === true;\n if (!hasReason && !hasHandoff) return message;\n const existingMetadata = kwargs?.metadata;\n const metadata =\n typeof existingMetadata === 'object' && existingMetadata !== null\n ? (existingMetadata as Record<string, unknown>)\n : {};\n const reasonMirrored = !hasReason || metadata[ATHENA_TERMINATION_REASON_KEY] === reason;\n const handoffMirrored = !hasHandoff || metadata[ATHENA_HANDOFF_KEY] === true;\n if (reasonMirrored && handoffMirrored) return message;\n return {\n ...message,\n additional_kwargs: {\n ...kwargs,\n metadata: {\n ...metadata,\n ...(hasReason ? { [ATHENA_TERMINATION_REASON_KEY]: reason } : {}),\n ...(hasHandoff ? { [ATHENA_HANDOFF_KEY]: true } : {}),\n },\n } as (typeof message)['additional_kwargs'],\n };\n}\n\n/**\n * Mirror the producing model into the converter's metadata channel. Wire AI\n * messages are full LangChain dumps whose `response_metadata` reports the model\n * that generated them (`model_name` / `model`), but the shipped converter maps\n * only `additional_kwargs.metadata` into `metadata.custom` — so without this\n * lift a surface can only show the CURRENT run config's model, mislabeling\n * earlier messages after a mid-thread model switch. A model already present in\n * the metadata channel (backend-stamped provenance) wins; no-ops are identity.\n */\nexport function liftModelIntoMetadata(message: LangChainMessage): LangChainMessage {\n if (message.type !== 'ai') return message;\n const responseMetadata = (\n message as { response_metadata?: { model_name?: unknown; model?: unknown } }\n ).response_metadata;\n let model: string | undefined;\n if (typeof responseMetadata?.model_name === 'string' && responseMetadata.model_name) {\n model = responseMetadata.model_name;\n } else if (typeof responseMetadata?.model === 'string' && responseMetadata.model) {\n model = responseMetadata.model;\n }\n if (!model) return message;\n const kwargs = message.additional_kwargs as Record<string, unknown> | undefined;\n const existingMetadata = kwargs?.metadata;\n const metadata =\n typeof existingMetadata === 'object' && existingMetadata !== null\n ? (existingMetadata as Record<string, unknown>)\n : {};\n if (typeof metadata.model === 'string' && metadata.model) return message;\n return {\n ...message,\n additional_kwargs: {\n ...kwargs,\n metadata: { ...metadata, model },\n } as (typeof message)['additional_kwargs'],\n };\n}\n\n/**\n * Mirror a per-message conversation-stats snapshot into the converter's\n * metadata channel. Backends stamp the snapshot at the legacy location —\n * top-level `additional_kwargs.conversation_stats` (the deep-agent stats\n * middleware and the legacy agent node both write it there) — but the shipped\n * converter maps only `additional_kwargs.metadata` into `metadata.custom`, so\n * without this lift the model badge can never show a message's OWN context and\n * falls back to thread-level live numbers. A snapshot already present in the\n * metadata channel wins; no-ops are identity.\n */\nexport function liftConversationStatsIntoMetadata(message: LangChainMessage): LangChainMessage {\n if (message.type !== 'ai') return message;\n const kwargs = message.additional_kwargs as Record<string, unknown> | undefined;\n const stats = kwargs?.conversation_stats;\n if (typeof stats !== 'object' || stats === null) return message;\n const existingMetadata = kwargs?.metadata;\n const metadata =\n typeof existingMetadata === 'object' && existingMetadata !== null\n ? (existingMetadata as Record<string, unknown>)\n : {};\n if (typeof metadata.conversation_stats === 'object' && metadata.conversation_stats !== null) {\n return message;\n }\n return {\n ...message,\n additional_kwargs: {\n ...kwargs,\n metadata: { ...metadata, conversation_stats: stats },\n } as (typeof message)['additional_kwargs'],\n };\n}\n\n/**\n * Mirror the compaction boundary flag into the converter's metadata channel.\n * A manual `/compact` persists its summary as a human message tagged with\n * top-level `additional_kwargs.compaction_start` (plus `_created_at` for the\n * divider timestamp) — the same location the legacy runtime used — but the\n * shipped converter maps only `additional_kwargs.metadata` into\n * `metadata.custom`, so without this lift the transcript's\n * \"Previous conversation summarized\" divider can never render. A flag already\n * present in the metadata channel wins; no-ops are identity.\n */\nexport function liftCompactionBoundaryIntoMetadata(message: LangChainMessage): LangChainMessage {\n if (message.type !== 'human') return message;\n const kwargs = message.additional_kwargs as Record<string, unknown> | undefined;\n if (kwargs?.compaction_start !== true) return message;\n const existingMetadata = kwargs?.metadata;\n const metadata =\n typeof existingMetadata === 'object' && existingMetadata !== null\n ? (existingMetadata as Record<string, unknown>)\n : {};\n if (metadata.compaction_start === true) return message;\n const createdAt = kwargs?._created_at;\n return {\n ...message,\n additional_kwargs: {\n ...kwargs,\n metadata: {\n ...metadata,\n compaction_start: true,\n ...(typeof createdAt === 'string' ? { _created_at: createdAt } : {}),\n },\n } as (typeof message)['additional_kwargs'],\n };\n}\n\n/**\n * Mirror the handoff summary flag into the converter's metadata channel.\n * Handoff summaries are persisted as human messages tagged with top-level\n * `additional_kwargs.handoff_summary` (plus `_created_at`) — the same location\n * the backend uses for message metadata — but the shipped converter maps only\n * `additional_kwargs.metadata` into `metadata.custom`, so without this lift\n * the summary would render as a normal user bubble. A flag already present in\n * the metadata channel wins; no-ops are identity.\n */\nexport function liftHandoffSummaryIntoMetadata(message: LangChainMessage): LangChainMessage {\n if (message.type !== 'human') return message;\n const kwargs = message.additional_kwargs as Record<string, unknown> | undefined;\n if (kwargs?.handoff_summary !== true) return message;\n const existingMetadata = kwargs?.metadata;\n const metadata =\n typeof existingMetadata === 'object' && existingMetadata !== null\n ? (existingMetadata as Record<string, unknown>)\n : {};\n if (metadata.handoff_summary === true) return message;\n const createdAt = kwargs?._created_at;\n return {\n ...message,\n additional_kwargs: {\n ...kwargs,\n metadata: {\n ...metadata,\n handoff_summary: true,\n ...(typeof createdAt === 'string' ? { _created_at: createdAt } : {}),\n },\n } as (typeof message)['additional_kwargs'],\n };\n}\n\n/**\n * Mirror an AOP run's provenance into the converter's metadata channel. The\n * backend stamps the kicking-off user message with top-level\n * `additional_kwargs.aop_source` (agora `events/helpers.py`\n * `_build_aop_source_metadata`), which the legacy converter surfaced as\n * `metadata.custom.aop_source` — where the \"AOP · <title>\" badge reads it. The\n * shipped `convertLangChainMessages` maps only `additional_kwargs.metadata`\n * into `metadata.custom`, so without this lift an AOP run's conversation never\n * shows which AOP asset kicked it off. Provenance already present in the\n * metadata channel wins; no-ops are identity.\n */\nexport function liftAopSourceIntoMetadata(message: LangChainMessage): LangChainMessage {\n if (message.type !== 'human') return message;\n const kwargs = message.additional_kwargs as Record<string, unknown> | undefined;\n const aopSource = kwargs?.aop_source;\n if (typeof aopSource !== 'object' || aopSource === null || Array.isArray(aopSource)) {\n return message;\n }\n const existingMetadata = kwargs?.metadata;\n const metadata =\n typeof existingMetadata === 'object' && existingMetadata !== null\n ? (existingMetadata as Record<string, unknown>)\n : {};\n if (typeof metadata.aop_source === 'object' && metadata.aop_source !== null) return message;\n return {\n ...message,\n additional_kwargs: {\n ...kwargs,\n metadata: { ...metadata, aop_source: aopSource },\n } as (typeof message)['additional_kwargs'],\n };\n}\n\nexport function liftBranchIntoMetadata(message: LangChainMessage): LangChainMessage {\n if (message.type !== 'human' && message.type !== 'ai') return message;\n const branch = (message as { branch?: unknown }).branch;\n if (typeof branch !== 'object' || branch === null || Array.isArray(branch)) return message;\n const kwargs = message.additional_kwargs as Record<string, unknown> | undefined;\n const existingMetadata = kwargs?.metadata;\n const metadata =\n typeof existingMetadata === 'object' && existingMetadata !== null\n ? (existingMetadata as Record<string, unknown>)\n : {};\n if (typeof metadata.branch === 'object' && metadata.branch !== null) return message;\n return {\n ...message,\n additional_kwargs: {\n ...kwargs,\n metadata: { ...metadata, branch },\n } as (typeof message)['additional_kwargs'],\n };\n}\n\n/**\n * `additional_kwargs` keys on a ToolMessage that are infrastructure rather than\n * user-set metadata. The filter below additionally skips every `_`-prefixed key.\n */\nconst TOOL_MESSAGE_INTERNAL_KWARGS: ReadonlySet<string> = new Set([\n 'reasoning',\n 'tool_outputs',\n 'hide_from_frontend',\n]);\n\n/**\n * Mirror a ToolMessage's user-set `additional_kwargs` into\n * `artifact._tool_message_metadata` — the location `useToolCallMetadata` reads\n * persisted per-tool-call metadata from (`email_sent_at`, draft edits,\n * `calendar_event_created_at`, …).\n *\n * The `setMessageMetadata` mutation persists those keys onto the ToolMessage's\n * `additional_kwargs` in the checkpoint, and the legacy converter lifted them\n * into the artifact. The shipped `convertLangChainMessages` forwards only\n * `artifact` and drops `additional_kwargs` for tool messages, so without this\n * lift the metadata survives in the checkpoint but never reaches a tool card\n * after a reload. Kwargs values win over same-key artifact entries (the kwargs\n * are the durable write target); messages with no user-set kwargs pass through\n * by identity.\n */\nexport function liftToolMessageMetadataIntoArtifact(message: LangChainMessage): LangChainMessage {\n if (message.type !== 'tool') return message;\n const kwargs = (message as { additional_kwargs?: Record<string, unknown> }).additional_kwargs;\n if (!kwargs) return message;\n const lifted: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(kwargs)) {\n if (key.startsWith('_') || TOOL_MESSAGE_INTERNAL_KWARGS.has(key)) continue;\n lifted[key] = value;\n }\n if (Object.keys(lifted).length === 0) return message;\n const artifact: unknown = message.artifact;\n const artifactRecord =\n typeof artifact === 'object' && artifact !== null && !Array.isArray(artifact)\n ? (artifact as Record<string, unknown>)\n : {};\n const existing = artifactRecord._tool_message_metadata;\n const existingRecord =\n typeof existing === 'object' && existing !== null && !Array.isArray(existing)\n ? (existing as Record<string, unknown>)\n : {};\n return {\n ...message,\n artifact: {\n ...artifactRecord,\n _tool_message_metadata: { ...existingRecord, ...lifted },\n },\n };\n}\n\n/**\n * Lift a windowed wire's tool-output truncation marker into the tool-call\n * part's `artifact` (`_athena_content_truncated: { chars, messageId }`).\n *\n * The host cuts long plain-text tool outputs on a windowed wire and stamps\n * `athena_content_truncated` on the wire message; the shipped converter joins\n * a ToolMessage into its assistant turn's tool-call part and keeps only\n * `artifact` and the result, so without this lift no tool card could tell the\n * output is cut nor which message to ask `history/tool_output` for. Messages\n * without the marker pass through by identity.\n */\nexport function liftTruncatedToolOutputIntoArtifact(message: LangChainMessage): LangChainMessage {\n if (message.type !== 'tool') return message;\n const marker = readTruncatedToolContent(message);\n if (marker === null || typeof message.id !== 'string') return message;\n const artifact: unknown = message.artifact;\n const artifactRecord =\n typeof artifact === 'object' && artifact !== null && !Array.isArray(artifact)\n ? (artifact as Record<string, unknown>)\n : {};\n return {\n ...message,\n artifact: {\n ...artifactRecord,\n [ATHENA_TRUNCATED_TOOL_OUTPUT_ARTIFACT_KEY]: { chars: marker.chars, messageId: message.id },\n },\n };\n}\n\n/**\n * Per-source cache for {@link substituteToolOutput}: a substituted copy is\n * reused while the wire message and the fetched output are both unchanged, so\n * the lift cache downstream keeps its identity contract.\n */\nconst substitutedToolOutputCache = new WeakMap<\n LangChainMessage,\n { content: unknown; substituted: LangChainMessage }\n>();\n\n/**\n * A cut tool message with its full output put back, when the store holds one\n * fetched for this very output (`history/tool_output` answered for the same\n * `chars` the wire's marker reports); the marker leaves with the cut.\n * Messages that are whole, whose output has not been fetched, or whose fetched\n * output belongs to a length the host has since replaced, pass through by\n * identity — the loader sees the mismatch and fetches again.\n */\nexport function substituteToolOutput(\n message: LangChainMessage,\n toolOutputs: DeepAgentToolOutputStore\n): LangChainMessage {\n if (message.type !== 'tool' || typeof message.id !== 'string') return message;\n const marker = readTruncatedToolContent(message);\n if (marker === null) return message;\n const entry = toolOutputs.entry(message.id);\n if (entry === undefined || entry.chars !== marker.chars) return message;\n const { content } = entry;\n const cached = substitutedToolOutputCache.get(message);\n if (cached !== undefined && cached.content === content) return cached.substituted;\n const { [DEEP_AGENT_TRUNCATED_CONTENT_KEY]: _marker, ...rest } = message as Record<\n string,\n unknown\n >;\n const substituted = { ...rest, content } as unknown as LangChainMessage;\n substitutedToolOutputCache.set(message, { content, substituted });\n return substituted;\n}\n\nconst hasHiddenFrontendFlag = (value: unknown): boolean => {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) {\n return false;\n }\n const record = value as Record<string, unknown>;\n if (record.hide_from_frontend === true) return true;\n return hasHiddenFrontendFlag(record.custom);\n};\n\n/**\n * Internal orchestration messages are useful in a trace export but must never\n * become conversation bubbles. Agora stores the flag in `additional_kwargs`;\n * live converter state can expose the same value under `metadata.custom`.\n */\nexport function isMessageHiddenFromFrontend(message: unknown): boolean {\n if (typeof message !== 'object' || message === null || Array.isArray(message)) {\n return false;\n }\n const record = message as Record<string, unknown>;\n return (\n hasHiddenFrontendFlag(record.additional_kwargs) || hasHiddenFrontendFlag(record.metadata)\n );\n}\n\n/**\n * The message `type`s `convertLangChainMessages` actually maps: its\n * `switch (message.type)` covers exactly these four and has no `default`, so it\n * returns `undefined` for anything else (a `RemoveMessage` `type: \"remove\"`\n * from summarization/compaction, a partial chunk, a future type).\n */\nconst CONVERTIBLE_MESSAGE_TYPES: ReadonlySet<string> = new Set(['system', 'human', 'ai', 'tool']);\n\n/**\n * Whether `convertLangChainMessages` can map this message at all.\n *\n * An unmappable entry converts to `undefined`, which assistant-ui's\n * `convertExternalMessages` wraps as `outputs: [undefined]` and then reads\n * `output.role` off — throwing `Cannot read property 'role' of undefined` and\n * taking the entire thread down instead of dropping one message.\n */\nexport function isConvertibleChatMessage(message: unknown): boolean {\n if (typeof message !== 'object' || message === null || Array.isArray(message)) {\n return false;\n }\n const type: unknown = (message as Record<string, unknown>).type;\n return typeof type === 'string' && CONVERTIBLE_MESSAGE_TYPES.has(type);\n}\n\n/**\n * Per-source cache for the lift pipeline in {@link sanitizeLangChainMessages}.\n *\n * The pipeline runs on EVERY state pass (once per streamed token), and the two\n * lifts that fire for essentially every message — {@link liftBranchIntoMetadata}\n * (the backend stamps `branch` on all indexed messages) and\n * {@link liftModelIntoMetadata} — allocate a fresh object each time they lift.\n * Without a cache, every message's identity churns on every token, defeating\n * all downstream per-source memoization (`getExternalStoreMessages`-keyed\n * reads, converter callback caches) and re-deriving the whole thread per token.\n *\n * Object identity is a sound cache key here: every statewire fold (op apply,\n * optimistic, materialize) runs through `statewire`'s copy-on-write\n * `recordMutations`, whose `finalize` returns the ORIGINAL object for\n * untouched nodes and a fresh copy for touched ones. A message is therefore\n * REPLACED — never mutated in place — whenever any of its fields change\n * (including the streaming tail's string-insert content growth), and an\n * unchanged message keeps its exact identity across passes. The corpus test\n * (`statewire-corpus.test.ts`) pins this identity contract against the real\n * client, so a statewire upgrade that switched to in-place mutation would fail\n * there rather than silently serving stale lifts from this cache.\n *\n * Module-level on purpose: keys are the wire message objects themselves, so\n * entries die with their state trees and threads cannot collide.\n */\nconst liftedMessageCache = new WeakMap<LangChainMessage, LangChainMessage>();\n\n/** The full lift chain for one message, memoized per source object. */\nfunction liftMessageIntoMetadataChannels(message: LangChainMessage): LangChainMessage {\n const cached = liftedMessageCache.get(message);\n if (cached !== undefined) return cached;\n const lifted = liftBranchIntoMetadata(\n liftTruncatedToolOutputIntoArtifact(\n liftToolMessageMetadataIntoArtifact(\n liftAopSourceIntoMetadata(\n liftHandoffSummaryIntoMetadata(\n liftCompactionBoundaryIntoMetadata(\n liftConversationStatsIntoMetadata(\n liftModelIntoMetadata(\n liftTerminationIntoMetadata(liftRunMarkerIntoMetadata(message))\n )\n )\n )\n )\n )\n )\n )\n );\n liftedMessageCache.set(message, lifted);\n return lifted;\n}\n\n/**\n * The one message pipeline every deep-agent surface renders through:\n *\n * 1. drop messages the shipped converter cannot map (`RemoveMessage` etc. —\n * an unmappable entry would crash the whole thread) and internal\n * orchestration messages flagged hidden-from-frontend;\n * 2. lift run-lifecycle markers into the converter's `metadata` channel\n * (see {@link liftRunMarkerIntoMetadata}) so the cancellation row styles as\n * a status divider instead of a plain assistant bubble, and the termination\n * reason + handoff flag alongside them (see\n * {@link liftTerminationIntoMetadata}) so every surface can render a\n * runtime ending (see `runtime-messages.ts`);\n * 3. lift each AI message's producing model into the same channel\n * (see {@link liftModelIntoMetadata}) so model badges reflect the model that\n * actually generated the message, not the currently configured one;\n * 4. lift each AI message's per-message conversation-stats snapshot into the\n * same channel (see {@link liftConversationStatsIntoMetadata}) so the model\n * badge's hover card shows that message's own context usage;\n * 5. lift the compaction boundary flag on `/compact` summary messages into the\n * same channel (see {@link liftCompactionBoundaryIntoMetadata}) so the\n * transcript renders its \"Previous conversation summarized\" divider;\n * 6. lift the handoff summary flag on carried-over context messages into the\n * same channel (see {@link liftHandoffSummaryIntoMetadata}) so the\n * transcript keeps the summary behind its context panel;\n * 7. lift an AOP run's provenance on its kicking-off user message into the\n * same channel (see {@link liftAopSourceIntoMetadata}) so the message\n * renders its \"AOP · <title>\" origin badge;\n * 8. lift each ToolMessage's user-set `additional_kwargs` into\n * `artifact._tool_message_metadata` (see\n * {@link liftToolMessageMetadataIntoArtifact}) so persisted per-tool-call\n * metadata reaches tool cards after a reload;\n * 9. lift a windowed wire's tool-output truncation marker into the tool-call\n * part's `artifact` (see {@link liftTruncatedToolOutputIntoArtifact}) so a\n * tool card can fetch the whole output — after first putting back any\n * output already fetched (see {@link substituteToolOutput});\n * 10. lift the host's per-message branch stamp into the same channel\n * (see {@link liftBranchIntoMetadata}) so the branch picker renders each\n * message's edit fan-out.\n *\n * Identity-stable per source: an unchanged source message maps to the\n * IDENTICAL lifted object across passes (see {@link liftedMessageCache}).\n */\nexport function sanitizeLangChainMessages(\n messages: readonly LangChainMessage[],\n { toolOutputs }: { toolOutputs?: DeepAgentToolOutputStore } = {}\n): LangChainMessage[] {\n return messages\n .filter((message) => isConvertibleChatMessage(message) && !isMessageHiddenFromFrontend(message))\n .map((message) =>\n liftMessageIntoMetadataChannels(\n toolOutputs ? substituteToolOutput(message, toolOutputs) : message\n )\n );\n}\n\n/** Type guard for the runtime state — an object carrying a `messages` array. */\nexport function isLangGraphState(value: unknown): value is LangGraphState {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'messages' in value &&\n Array.isArray((value as LangGraphState).messages)\n );\n}\n\nexport interface ConvertDeepAgentStateOptions {\n laneProjection?: DeepAgentLaneProjection;\n /**\n * The viewer, as the backend would stamp them: the author of this client's\n * own not-yet-acknowledged lane entries (see {@link laneEntryAuthor}).\n */\n selfAuthor?: DeepAgentMessageAuthor | null;\n /**\n * Full tool outputs fetched back for a windowed wire's cut tool messages\n * (see {@link substituteToolOutput}); omitted on surfaces that never\n * declare a window.\n */\n toolOutputs?: DeepAgentToolOutputStore;\n}\n\n/**\n * Map server state → assistant-ui thread messages.\n *\n * `state.messages` is the authoritative LangChain history streamed by the\n * backend. The replicated run status (`runs[0].status`) drives the\n * pending-assistant placeholder and the running status. Lane entries render at\n * the tail, after the placeholder, while the run is live (the run is still\n * working the history above them); once the thread rests stopped/errored they\n * are omitted (surfaces with a queue panel list them there instead).\n */\nexport function convertDeepAgentState(\n state: unknown,\n { laneProjection = 'both', selfAuthor = null, toolOutputs }: ConvertDeepAgentStateOptions = {}\n) {\n // A wire without a snapshot yet (pre-attach, replay boundary) converts as the\n // typed pre-stream default: an empty resting thread, never `undefined`.\n const values = readDeepAgentStreamValues(state);\n const status = values.runs?.[0]?.status;\n const isRunning = status === 'running';\n const laneTail =\n status === 'stopped' || status === 'error'\n ? []\n : laneTailMessages(values, laneProjection, selfAuthor);\n const stateMessages = isLangGraphState(values)\n ? sanitizeLangChainMessages(values.messages, { toolOutputs })\n : [];\n return {\n messages: messageConverter.toThreadMessages(\n [...withPendingAssistantMessage(stateMessages, isRunning), ...laneTail],\n isRunning\n ),\n isRunning,\n };\n}\n"],"names":["createMessageConverter","convertLangChainMessages","laneEntryAuthor","ATHENA_MESSAGE_AUTHOR_KEY","buildOptimisticHumanContent","runsMaterialize","getExternalStoreMessages","readTruncatedToolContent","ATHENA_TRUNCATED_TOOL_OUTPUT_ARTIFACT_KEY","DEEP_AGENT_TRUNCATED_CONTENT_KEY","readDeepAgentStreamValues"],"mappings":";;;;;;;;;;;AAgCO,MAAM,mBAAmBA,MAAAA,uBAAuBC,yBAAAA,wBAAwB;AAE/E,MAAM,6BAA6B,CACjC,UAEA,MAAM,QAAQ,CAAC,SAAkC;AAC/C,MAAI,KAAK,SAAS,OAAQ,QAAO,CAAC,IAAI;AAGtC,MAAI,KAAK,UAAU,WAAW,QAAQ,EAAG,QAAO,CAAC,EAAE,MAAM,SAAS,OAAO,KAAK,KAAK;AACnF,SAAO,CAAA;AACT,CAAC;AAeI,MAAM,yBAAyB;AAqBtC,MAAM,mBAAmB,CAAC;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AACF,MAIwB;AACtB,QAAM,SAASC,cAAAA,gBAAgB,OAAO,UAAU;AAChD,QAAM,WAAoC;AAAA,IACxC,GAAI,SAAS,EAAE,CAAC,sBAAsB,GAAG,KAAA,IAAS,CAAA;AAAA,IAClD,GAAI,SAAS,EAAE,CAACC,cAAAA,yBAAyB,GAAG,OAAA,IAAW,CAAA;AAAA,EAAC;AAE1D,SAAO;AAAA,IACL,IAAI,MAAM;AAAA,IACV,MAAM;AAAA,IACN,SAASC,kBAAAA,4BAA4B,2BAA2B,MAAM,KAAK,CAAC;AAAA,IAC5E,GAAI,OAAO,KAAK,QAAQ,EAAE,SAAS,IAAI,EAAE,mBAAmB,EAAE,SAAA,MAAe,CAAA;AAAA,EAAC;AAElF;AAYO,MAAM,6BACX,CAAC,EAAE,aAAa,SAAsC,CAAA,MACtD,CAAC,UAAuC;AACtCC,iBAAAA,gBAAgB,OAAO;AAAA,IACrB,QAAQ,CAAC,YAAY;AACnB,OAAC,MAAM,aAAN,MAAM,WAAa,CAAA,IAAI;AAAA,QACtB,iBAAiB,EAAE,OAAO,SAAS,QAAQ,OAAO,YAAY;AAAA,MAAA;AAAA,IAElE;AAAA,IACA,UAAU,CAAC,OAAO;AAChB,UAAI,OAAO,MAAM;AACf,cAAM,WAAW,CAAA;AACjB;AAAA,MACF;AACA,YAAM,WAAW,MAAM,YAAY,CAAA;AACnC,YAAM,YAAY,SAAS,UAAU,CAAC,YAAY,QAAQ,OAAO,EAAE;AAEnE,UAAI,cAAc,GAAI,UAAS,OAAO,YAAY,CAAC;AAAA,IACrD;AAAA,EAAA,CACD;AACH;AAGkC,2BAAA;AAY7B,MAAM,mBAAmB,CAC9B,OACA,iBAA0C,QAC1C,aAA4C,SACrB;;AACvB,QAAM,OAAO,oCAAwC,SAAxC,mBAA+C;AAC5D,MAAI,CAAC,IAAK,QAAO,CAAA;AACjB,QAAM,UACJ,mBAAmB,eAAe,IAAI,aAAa,CAAC,GAAG,IAAI,OAAO,GAAG,IAAI,UAAU;AACrF,SAAO,QAAQ,IAAI,CAAC,UAAU,iBAAiB,EAAE,OAAO,QAAQ,MAAM,WAAA,CAAY,CAAC;AACrF;AAGO,MAAM,+BAA+B;AAkBrC,SAAS,4BACd,UACA,WACoB;;AACpB,MAAI,CAAC,UAAW,QAAO;AACvB,QAAM,YAAW,cAAS,GAAG,EAAE,MAAd,mBAAiB;AAClC,MAAI,aAAa,QAAQ,aAAa,OAAQ,QAAO;AAMrD,SAAO;AAAA,IACL,GAAG;AAAA,IACH;AAAA,MACE,MAAM;AAAA,MACN,SAAS,CAAA;AAAA,MACT,IAAI;AAAA,MACJ,QAAQ,EAAE,MAAM,UAAA;AAAA,IAAU;AAAA,EAC5B;AAEJ;AAsCO,MAAM,wBAAwB;AAG9B,MAAM,8BAA8B;AAOpC,MAAM,+BAA+B;AAGrC,MAAM,8BAA8B;AAUpC,MAAM,+BAA+B;AAQrC,MAAM,qCAAqC;AAO3C,SAAS,yBAAyB,QAAqC;AAC5E,SAAO,WAAW,gCAAgC,WAAW;AAC/D;AAOO,MAAM,2BAA2B;AASjC,MAAM,gCAAgC;AAQtC,MAAM,qBAAqB;AAqC3B,SAAS,gCACd,SAI2B;;AAC3B,QAAM,UAAUC,KAAAA,yBAA2C,OAAO;AAClE,aAAW,UAAU,SAAS;AAC5B,SAAI,iCAAQ,UAAS,KAAM;AAC3B,UAAM,SAAS,OAAO;AACtB,UAAM,SAAS,iCAAS;AACxB,QAAI,OAAO,WAAW,SAAU;AAChC,UAAM,eAAe,iCAAS;AAC9B,WAAO;AAAA,MACL;AAAA,MACA,QAAQ,OAAO,iBAAiB,WAAW,eAAe;AAAA,MAC1D,MAAM,OAAO,OAAO,YAAY,WAAW,OAAO,UAAU;AAAA,MAC5D,qBAAqB,QAAQ,WAAW;AAAA,IAAA;AAAA,EAE5C;AAKA,QAAM,UAAS,mBAAQ,aAAR,mBAAkB,WAAlB,mBAA2B;AAC1C,MAAI,OAAO,WAAW,SAAU,QAAO;AACvC,QAAM,gBAAe,mBAAQ,aAAR,mBAAkB,WAAlB,mBAA2B;AAChD,QAAM,QAAQ,QAAQ;AACtB,SAAO;AAAA,IACL,QAAQ;AAAA,IACR,QAAQ,OAAO,iBAAiB,WAAW,eAAe;AAAA,IAC1D,MAAM;AAAA,IACN,qBAAqB,MAAM,QAAQ,KAAK,IAAI,MAAM,UAAU,IAAI;AAAA,EAAA;AAEpE;AAkDO,SAAS,0BAA0B,SAA6C;AACrF,MAAI,QAAQ,SAAS,KAAM,QAAO;AAClC,QAAM,SAAS,QAAQ;AACvB,QAAM,SAAS,iCAAS;AACxB,MAAI,OAAO,WAAW,SAAU,QAAO;AACvC,QAAM,mBAAmB,iCAAQ;AACjC,QAAM,WACJ,OAAO,qBAAqB,YAAY,qBAAqB,OACxD,mBACD,CAAA;AACN,MAAI,SAAS,qBAAqB,MAAM,OAAQ,QAAO;AACvD,SAAO;AAAA,IACL,GAAG;AAAA,IACH,mBAAmB;AAAA,MACjB,GAAG;AAAA,MACH,UAAU,EAAE,GAAG,UAAU,CAAC,qBAAqB,GAAG,OAAA;AAAA,IAAO;AAAA,EAC3D;AAEJ;AASO,SAAS,4BAA4B,SAA6C;AACvF,MAAI,QAAQ,SAAS,KAAM,QAAO;AAClC,QAAM,SAAS,QAAQ;AACvB,QAAM,SAAS,iCAAS;AACxB,QAAM,UAAU,iCAAS;AACzB,QAAM,YAAY,OAAO,WAAW;AACpC,QAAM,aAAa,YAAY;AAC/B,MAAI,CAAC,aAAa,CAAC,WAAY,QAAO;AACtC,QAAM,mBAAmB,iCAAQ;AACjC,QAAM,WACJ,OAAO,qBAAqB,YAAY,qBAAqB,OACxD,mBACD,CAAA;AACN,QAAM,iBAAiB,CAAC,aAAa,SAAS,6BAA6B,MAAM;AACjF,QAAM,kBAAkB,CAAC,cAAc,SAAS,kBAAkB,MAAM;AACxE,MAAI,kBAAkB,gBAAiB,QAAO;AAC9C,SAAO;AAAA,IACL,GAAG;AAAA,IACH,mBAAmB;AAAA,MACjB,GAAG;AAAA,MACH,UAAU;AAAA,QACR,GAAG;AAAA,QACH,GAAI,YAAY,EAAE,CAAC,6BAA6B,GAAG,OAAA,IAAW,CAAA;AAAA,QAC9D,GAAI,aAAa,EAAE,CAAC,kBAAkB,GAAG,KAAA,IAAS,CAAA;AAAA,MAAC;AAAA,IACrD;AAAA,EACF;AAEJ;AAWO,SAAS,sBAAsB,SAA6C;AACjF,MAAI,QAAQ,SAAS,KAAM,QAAO;AAClC,QAAM,mBACJ,QACA;AACF,MAAI;AACJ,MAAI,QAAO,qDAAkB,gBAAe,YAAY,iBAAiB,YAAY;AACnF,YAAQ,iBAAiB;AAAA,EAC3B,WAAW,QAAO,qDAAkB,WAAU,YAAY,iBAAiB,OAAO;AAChF,YAAQ,iBAAiB;AAAA,EAC3B;AACA,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,SAAS,QAAQ;AACvB,QAAM,mBAAmB,iCAAQ;AACjC,QAAM,WACJ,OAAO,qBAAqB,YAAY,qBAAqB,OACxD,mBACD,CAAA;AACN,MAAI,OAAO,SAAS,UAAU,YAAY,SAAS,MAAO,QAAO;AACjE,SAAO;AAAA,IACL,GAAG;AAAA,IACH,mBAAmB;AAAA,MACjB,GAAG;AAAA,MACH,UAAU,EAAE,GAAG,UAAU,MAAA;AAAA,IAAM;AAAA,EACjC;AAEJ;AAYO,SAAS,kCAAkC,SAA6C;AAC7F,MAAI,QAAQ,SAAS,KAAM,QAAO;AAClC,QAAM,SAAS,QAAQ;AACvB,QAAM,QAAQ,iCAAQ;AACtB,MAAI,OAAO,UAAU,YAAY,UAAU,KAAM,QAAO;AACxD,QAAM,mBAAmB,iCAAQ;AACjC,QAAM,WACJ,OAAO,qBAAqB,YAAY,qBAAqB,OACxD,mBACD,CAAA;AACN,MAAI,OAAO,SAAS,uBAAuB,YAAY,SAAS,uBAAuB,MAAM;AAC3F,WAAO;AAAA,EACT;AACA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,mBAAmB;AAAA,MACjB,GAAG;AAAA,MACH,UAAU,EAAE,GAAG,UAAU,oBAAoB,MAAA;AAAA,IAAM;AAAA,EACrD;AAEJ;AAYO,SAAS,mCAAmC,SAA6C;AAC9F,MAAI,QAAQ,SAAS,QAAS,QAAO;AACrC,QAAM,SAAS,QAAQ;AACvB,OAAI,iCAAQ,sBAAqB,KAAM,QAAO;AAC9C,QAAM,mBAAmB,iCAAQ;AACjC,QAAM,WACJ,OAAO,qBAAqB,YAAY,qBAAqB,OACxD,mBACD,CAAA;AACN,MAAI,SAAS,qBAAqB,KAAM,QAAO;AAC/C,QAAM,YAAY,iCAAQ;AAC1B,SAAO;AAAA,IACL,GAAG;AAAA,IACH,mBAAmB;AAAA,MACjB,GAAG;AAAA,MACH,UAAU;AAAA,QACR,GAAG;AAAA,QACH,kBAAkB;AAAA,QAClB,GAAI,OAAO,cAAc,WAAW,EAAE,aAAa,UAAA,IAAc,CAAA;AAAA,MAAC;AAAA,IACpE;AAAA,EACF;AAEJ;AAWO,SAAS,+BAA+B,SAA6C;AAC1F,MAAI,QAAQ,SAAS,QAAS,QAAO;AACrC,QAAM,SAAS,QAAQ;AACvB,OAAI,iCAAQ,qBAAoB,KAAM,QAAO;AAC7C,QAAM,mBAAmB,iCAAQ;AACjC,QAAM,WACJ,OAAO,qBAAqB,YAAY,qBAAqB,OACxD,mBACD,CAAA;AACN,MAAI,SAAS,oBAAoB,KAAM,QAAO;AAC9C,QAAM,YAAY,iCAAQ;AAC1B,SAAO;AAAA,IACL,GAAG;AAAA,IACH,mBAAmB;AAAA,MACjB,GAAG;AAAA,MACH,UAAU;AAAA,QACR,GAAG;AAAA,QACH,iBAAiB;AAAA,QACjB,GAAI,OAAO,cAAc,WAAW,EAAE,aAAa,UAAA,IAAc,CAAA;AAAA,MAAC;AAAA,IACpE;AAAA,EACF;AAEJ;AAaO,SAAS,0BAA0B,SAA6C;AACrF,MAAI,QAAQ,SAAS,QAAS,QAAO;AACrC,QAAM,SAAS,QAAQ;AACvB,QAAM,YAAY,iCAAQ;AAC1B,MAAI,OAAO,cAAc,YAAY,cAAc,QAAQ,MAAM,QAAQ,SAAS,GAAG;AACnF,WAAO;AAAA,EACT;AACA,QAAM,mBAAmB,iCAAQ;AACjC,QAAM,WACJ,OAAO,qBAAqB,YAAY,qBAAqB,OACxD,mBACD,CAAA;AACN,MAAI,OAAO,SAAS,eAAe,YAAY,SAAS,eAAe,KAAM,QAAO;AACpF,SAAO;AAAA,IACL,GAAG;AAAA,IACH,mBAAmB;AAAA,MACjB,GAAG;AAAA,MACH,UAAU,EAAE,GAAG,UAAU,YAAY,UAAA;AAAA,IAAU;AAAA,EACjD;AAEJ;AAEO,SAAS,uBAAuB,SAA6C;AAClF,MAAI,QAAQ,SAAS,WAAW,QAAQ,SAAS,KAAM,QAAO;AAC9D,QAAM,SAAU,QAAiC;AACjD,MAAI,OAAO,WAAW,YAAY,WAAW,QAAQ,MAAM,QAAQ,MAAM,EAAG,QAAO;AACnF,QAAM,SAAS,QAAQ;AACvB,QAAM,mBAAmB,iCAAQ;AACjC,QAAM,WACJ,OAAO,qBAAqB,YAAY,qBAAqB,OACxD,mBACD,CAAA;AACN,MAAI,OAAO,SAAS,WAAW,YAAY,SAAS,WAAW,KAAM,QAAO;AAC5E,SAAO;AAAA,IACL,GAAG;AAAA,IACH,mBAAmB;AAAA,MACjB,GAAG;AAAA,MACH,UAAU,EAAE,GAAG,UAAU,OAAA;AAAA,IAAO;AAAA,EAClC;AAEJ;AAMA,MAAM,mDAAwD,IAAI;AAAA,EAChE;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAiBM,SAAS,oCAAoC,SAA6C;AAC/F,MAAI,QAAQ,SAAS,OAAQ,QAAO;AACpC,QAAM,SAAU,QAA4D;AAC5E,MAAI,CAAC,OAAQ,QAAO;AACpB,QAAM,SAAkC,CAAA;AACxC,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,MAAM,GAAG;AACjD,QAAI,IAAI,WAAW,GAAG,KAAK,6BAA6B,IAAI,GAAG,EAAG;AAClE,WAAO,GAAG,IAAI;AAAA,EAChB;AACA,MAAI,OAAO,KAAK,MAAM,EAAE,WAAW,EAAG,QAAO;AAC7C,QAAM,WAAoB,QAAQ;AAClC,QAAM,iBACJ,OAAO,aAAa,YAAY,aAAa,QAAQ,CAAC,MAAM,QAAQ,QAAQ,IACvE,WACD,CAAA;AACN,QAAM,WAAW,eAAe;AAChC,QAAM,iBACJ,OAAO,aAAa,YAAY,aAAa,QAAQ,CAAC,MAAM,QAAQ,QAAQ,IACvE,WACD,CAAA;AACN,SAAO;AAAA,IACL,GAAG;AAAA,IACH,UAAU;AAAA,MACR,GAAG;AAAA,MACH,wBAAwB,EAAE,GAAG,gBAAgB,GAAG,OAAA;AAAA,IAAO;AAAA,EACzD;AAEJ;AAaO,SAAS,oCAAoC,SAA6C;AAC/F,MAAI,QAAQ,SAAS,OAAQ,QAAO;AACpC,QAAM,SAASC,cAAAA,yBAAyB,OAAO;AAC/C,MAAI,WAAW,QAAQ,OAAO,QAAQ,OAAO,SAAU,QAAO;AAC9D,QAAM,WAAoB,QAAQ;AAClC,QAAM,iBACJ,OAAO,aAAa,YAAY,aAAa,QAAQ,CAAC,MAAM,QAAQ,QAAQ,IACvE,WACD,CAAA;AACN,SAAO;AAAA,IACL,GAAG;AAAA,IACH,UAAU;AAAA,MACR,GAAG;AAAA,MACH,CAACC,cAAAA,yCAAyC,GAAG,EAAE,OAAO,OAAO,OAAO,WAAW,QAAQ,GAAA;AAAA,IAAG;AAAA,EAC5F;AAEJ;AAOA,MAAM,iDAAiC,QAAA;AAahC,SAAS,qBACd,SACA,aACkB;AAClB,MAAI,QAAQ,SAAS,UAAU,OAAO,QAAQ,OAAO,SAAU,QAAO;AACtE,QAAM,SAASD,cAAAA,yBAAyB,OAAO;AAC/C,MAAI,WAAW,KAAM,QAAO;AAC5B,QAAM,QAAQ,YAAY,MAAM,QAAQ,EAAE;AAC1C,MAAI,UAAU,UAAa,MAAM,UAAU,OAAO,MAAO,QAAO;AAChE,QAAM,EAAE,YAAY;AACpB,QAAM,SAAS,2BAA2B,IAAI,OAAO;AACrD,MAAI,WAAW,UAAa,OAAO,YAAY,gBAAgB,OAAO;AACtE,QAAM,EAAE,CAACE,kBAAAA,gCAAgC,GAAG,SAAS,GAAG,SAAS;AAIjE,QAAM,cAAc,EAAE,GAAG,MAAM,QAAA;AAC/B,6BAA2B,IAAI,SAAS,EAAE,SAAS,aAAa;AAChE,SAAO;AACT;AAEA,MAAM,wBAAwB,CAAC,UAA4B;AACzD,MAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,MAAM,QAAQ,KAAK,GAAG;AACvE,WAAO;AAAA,EACT;AACA,QAAM,SAAS;AACf,MAAI,OAAO,uBAAuB,KAAM,QAAO;AAC/C,SAAO,sBAAsB,OAAO,MAAM;AAC5C;AAOO,SAAS,4BAA4B,SAA2B;AACrE,MAAI,OAAO,YAAY,YAAY,YAAY,QAAQ,MAAM,QAAQ,OAAO,GAAG;AAC7E,WAAO;AAAA,EACT;AACA,QAAM,SAAS;AACf,SACE,sBAAsB,OAAO,iBAAiB,KAAK,sBAAsB,OAAO,QAAQ;AAE5F;AAQA,MAAM,gDAAqD,IAAI,CAAC,UAAU,SAAS,MAAM,MAAM,CAAC;AAUzF,SAAS,yBAAyB,SAA2B;AAClE,MAAI,OAAO,YAAY,YAAY,YAAY,QAAQ,MAAM,QAAQ,OAAO,GAAG;AAC7E,WAAO;AAAA,EACT;AACA,QAAM,OAAiB,QAAoC;AAC3D,SAAO,OAAO,SAAS,YAAY,0BAA0B,IAAI,IAAI;AACvE;AA2BA,MAAM,yCAAyB,QAAA;AAG/B,SAAS,gCAAgC,SAA6C;AACpF,QAAM,SAAS,mBAAmB,IAAI,OAAO;AAC7C,MAAI,WAAW,OAAW,QAAO;AACjC,QAAM,SAAS;AAAA,IACb;AAAA,MACE;AAAA,QACE;AAAA,UACE;AAAA,YACE;AAAA,cACE;AAAA,gBACE;AAAA,kBACE,4BAA4B,0BAA0B,OAAO,CAAC;AAAA,gBAAA;AAAA,cAChE;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEF,qBAAmB,IAAI,SAAS,MAAM;AACtC,SAAO;AACT;AA4CO,SAAS,0BACd,UACA,EAAE,YAAA,IAA4D,CAAA,GAC1C;AACpB,SAAO,SACJ,OAAO,CAAC,YAAY,yBAAyB,OAAO,KAAK,CAAC,4BAA4B,OAAO,CAAC,EAC9F;AAAA,IAAI,CAAC,YACJ;AAAA,MACE,cAAc,qBAAqB,SAAS,WAAW,IAAI;AAAA,IAAA;AAAA,EAC7D;AAEN;AAGO,SAAS,iBAAiB,OAAyC;AACxE,SACE,OAAO,UAAU,YACjB,UAAU,QACV,cAAc,SACd,MAAM,QAAS,MAAyB,QAAQ;AAEpD;AA2BO,SAAS,sBACd,OACA,EAAE,iBAAiB,QAAQ,aAAa,MAAM,YAAA,IAA8C,IAC5F;;AAGA,QAAM,SAASC,eAAAA,0BAA0B,KAAK;AAC9C,QAAM,UAAS,kBAAO,SAAP,mBAAc,OAAd,mBAAkB;AACjC,QAAM,YAAY,WAAW;AAC7B,QAAM,WACJ,WAAW,aAAa,WAAW,UAC/B,CAAA,IACA,iBAAiB,QAAQ,gBAAgB,UAAU;AACzD,QAAM,gBAAgB,iBAAiB,MAAM,IACzC,0BAA0B,OAAO,UAAU,EAAE,YAAA,CAAa,IAC1D,CAAA;AACJ,SAAO;AAAA,IACL,UAAU,iBAAiB;AAAA,MACzB,CAAC,GAAG,4BAA4B,eAAe,SAAS,GAAG,GAAG,QAAQ;AAAA,MACtE;AAAA,IAAA;AAAA,IAEF;AAAA,EAAA;AAEJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}