@athenaintel/react 0.57.1 → 0.59.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 (811) hide show
  1. package/README.md +778 -9
  2. package/dist/agent-runtime/src/addressed-agents.cjs +16 -0
  3. package/dist/agent-runtime/src/addressed-agents.cjs.map +1 -0
  4. package/dist/agent-runtime/src/addressed-agents.d.ts +30 -0
  5. package/dist/agent-runtime/src/addressed-agents.js +16 -0
  6. package/dist/agent-runtime/src/addressed-agents.js.map +1 -0
  7. package/dist/agent-runtime/src/answer-label.cjs +4 -3
  8. package/dist/agent-runtime/src/answer-label.cjs.map +1 -1
  9. package/dist/agent-runtime/src/answer-label.d.ts +13 -6
  10. package/dist/agent-runtime/src/answer-label.js +4 -3
  11. package/dist/agent-runtime/src/answer-label.js.map +1 -1
  12. package/dist/agent-runtime/src/chat-outbox-attachments.cjs.map +1 -1
  13. package/dist/agent-runtime/src/chat-outbox-attachments.d.ts +1 -1
  14. package/dist/agent-runtime/src/chat-outbox-attachments.js.map +1 -1
  15. package/dist/agent-runtime/src/chat-outbox-entry.cjs +101 -0
  16. package/dist/agent-runtime/src/chat-outbox-entry.cjs.map +1 -0
  17. package/dist/agent-runtime/src/chat-outbox-entry.d.ts +99 -0
  18. package/dist/agent-runtime/src/chat-outbox-entry.js +101 -0
  19. package/dist/agent-runtime/src/chat-outbox-entry.js.map +1 -0
  20. package/dist/agent-runtime/src/chat-outbox-legacy.cjs +252 -0
  21. package/dist/agent-runtime/src/chat-outbox-legacy.cjs.map +1 -0
  22. package/dist/agent-runtime/src/chat-outbox-legacy.d.ts +96 -0
  23. package/dist/agent-runtime/src/chat-outbox-legacy.js +252 -0
  24. package/dist/agent-runtime/src/chat-outbox-legacy.js.map +1 -0
  25. package/dist/agent-runtime/src/chat-outbox-policy.cjs +30 -0
  26. package/dist/agent-runtime/src/chat-outbox-policy.cjs.map +1 -0
  27. package/dist/agent-runtime/src/chat-outbox-policy.d.ts +42 -0
  28. package/dist/agent-runtime/src/chat-outbox-policy.js +30 -0
  29. package/dist/agent-runtime/src/chat-outbox-policy.js.map +1 -0
  30. package/dist/agent-runtime/src/chat-outbox-storage.cjs +306 -0
  31. package/dist/agent-runtime/src/chat-outbox-storage.cjs.map +1 -0
  32. package/dist/agent-runtime/src/chat-outbox-storage.d.ts +194 -0
  33. package/dist/agent-runtime/src/chat-outbox-storage.js +306 -0
  34. package/dist/agent-runtime/src/chat-outbox-storage.js.map +1 -0
  35. package/dist/agent-runtime/src/chat-outbox-thread.cjs +21 -94
  36. package/dist/agent-runtime/src/chat-outbox-thread.cjs.map +1 -1
  37. package/dist/agent-runtime/src/chat-outbox-thread.d.ts +22 -18
  38. package/dist/agent-runtime/src/chat-outbox-thread.js +21 -94
  39. package/dist/agent-runtime/src/chat-outbox-thread.js.map +1 -1
  40. package/dist/agent-runtime/src/chat-outbox.cjs +492 -547
  41. package/dist/agent-runtime/src/chat-outbox.cjs.map +1 -1
  42. package/dist/agent-runtime/src/chat-outbox.d.ts +110 -142
  43. package/dist/agent-runtime/src/chat-outbox.js +492 -547
  44. package/dist/agent-runtime/src/chat-outbox.js.map +1 -1
  45. package/dist/agent-runtime/src/composer-markdown.cjs.map +1 -1
  46. package/dist/agent-runtime/src/composer-markdown.d.ts +1 -1
  47. package/dist/agent-runtime/src/composer-markdown.js.map +1 -1
  48. package/dist/agent-runtime/src/deep-agent-transport-recipe.cjs +3 -1
  49. package/dist/agent-runtime/src/deep-agent-transport-recipe.cjs.map +1 -1
  50. package/dist/agent-runtime/src/deep-agent-transport-recipe.d.ts +8 -1
  51. package/dist/agent-runtime/src/deep-agent-transport-recipe.js +3 -1
  52. package/dist/agent-runtime/src/deep-agent-transport-recipe.js.map +1 -1
  53. package/dist/agent-runtime/src/dictation-preferences.d.ts +356 -0
  54. package/dist/agent-runtime/src/dictation-record.d.ts +279 -0
  55. package/dist/agent-runtime/src/dictation-session.d.ts +106 -7
  56. package/dist/agent-runtime/src/dictation-snippets.d.ts +9 -0
  57. package/dist/agent-runtime/src/dictation-transfer.d.ts +142 -0
  58. package/dist/agent-runtime/src/edit-command.cjs.map +1 -1
  59. package/dist/agent-runtime/src/edit-command.d.ts +1 -1
  60. package/dist/agent-runtime/src/edit-command.js.map +1 -1
  61. package/dist/agent-runtime/src/errors.cjs +1 -0
  62. package/dist/agent-runtime/src/errors.cjs.map +1 -1
  63. package/dist/agent-runtime/src/errors.js +1 -0
  64. package/dist/agent-runtime/src/errors.js.map +1 -1
  65. package/dist/agent-runtime/src/generated/runconfig-contract.cjs +24 -0
  66. package/dist/agent-runtime/src/generated/runconfig-contract.cjs.map +1 -1
  67. package/dist/agent-runtime/src/generated/runconfig-contract.d.ts +3 -3
  68. package/dist/agent-runtime/src/generated/runconfig-contract.js +24 -0
  69. package/dist/agent-runtime/src/generated/runconfig-contract.js.map +1 -1
  70. package/dist/agent-runtime/src/index.d.ts +14 -8
  71. package/dist/agent-runtime/src/lane-follow.cjs +289 -0
  72. package/dist/agent-runtime/src/lane-follow.cjs.map +1 -0
  73. package/dist/agent-runtime/src/lane-follow.js +289 -0
  74. package/dist/agent-runtime/src/lane-follow.js.map +1 -0
  75. package/dist/agent-runtime/src/lane-images.cjs +387 -0
  76. package/dist/agent-runtime/src/lane-images.cjs.map +1 -0
  77. package/dist/agent-runtime/src/lane-images.js +387 -0
  78. package/dist/agent-runtime/src/lane-images.js.map +1 -0
  79. package/dist/agent-runtime/src/message-window.js +1 -1
  80. package/dist/agent-runtime/src/messages.cjs +19 -1
  81. package/dist/agent-runtime/src/messages.cjs.map +1 -1
  82. package/dist/agent-runtime/src/messages.d.ts +8 -0
  83. package/dist/agent-runtime/src/messages.js +21 -3
  84. package/dist/agent-runtime/src/messages.js.map +1 -1
  85. package/dist/agent-runtime/src/named-agents.cjs +301 -0
  86. package/dist/agent-runtime/src/named-agents.cjs.map +1 -0
  87. package/dist/agent-runtime/src/named-agents.d.ts +246 -0
  88. package/dist/agent-runtime/src/named-agents.js +301 -0
  89. package/dist/agent-runtime/src/named-agents.js.map +1 -0
  90. package/dist/agent-runtime/src/offline-status.cjs.map +1 -1
  91. package/dist/agent-runtime/src/offline-status.d.ts +66 -2
  92. package/dist/agent-runtime/src/offline-status.js.map +1 -1
  93. package/dist/agent-runtime/src/ptc-subcalls.cjs +41 -0
  94. package/dist/agent-runtime/src/ptc-subcalls.cjs.map +1 -0
  95. package/dist/agent-runtime/src/ptc-subcalls.js +41 -0
  96. package/dist/agent-runtime/src/ptc-subcalls.js.map +1 -0
  97. package/dist/agent-runtime/src/queue.cjs +2 -2
  98. package/dist/agent-runtime/src/queue.cjs.map +1 -1
  99. package/dist/agent-runtime/src/queue.d.ts +20 -25
  100. package/dist/agent-runtime/src/queue.js +2 -2
  101. package/dist/agent-runtime/src/queue.js.map +1 -1
  102. package/dist/agent-runtime/src/quota-safe-local-storage-session.cjs +314 -84
  103. package/dist/agent-runtime/src/quota-safe-local-storage-session.cjs.map +1 -1
  104. package/dist/agent-runtime/src/quota-safe-local-storage-session.d.ts +137 -40
  105. package/dist/agent-runtime/src/quota-safe-local-storage-session.js +318 -88
  106. package/dist/agent-runtime/src/quota-safe-local-storage-session.js.map +1 -1
  107. package/dist/agent-runtime/src/run-send.cjs +54 -0
  108. package/dist/agent-runtime/src/run-send.cjs.map +1 -0
  109. package/dist/agent-runtime/src/run-send.d.ts +51 -0
  110. package/dist/agent-runtime/src/run-send.js +54 -0
  111. package/dist/agent-runtime/src/run-send.js.map +1 -0
  112. package/dist/agent-runtime/src/running-tool-placeholder.cjs +6 -0
  113. package/dist/agent-runtime/src/running-tool-placeholder.cjs.map +1 -1
  114. package/dist/agent-runtime/src/running-tool-placeholder.js +6 -0
  115. package/dist/agent-runtime/src/running-tool-placeholder.js.map +1 -1
  116. package/dist/agent-runtime/src/runtime.d.ts +9 -5
  117. package/dist/agent-runtime/src/sealed-idb.cjs +64 -0
  118. package/dist/agent-runtime/src/sealed-idb.cjs.map +1 -1
  119. package/dist/agent-runtime/src/sealed-idb.d.ts +16 -0
  120. package/dist/agent-runtime/src/sealed-idb.js +64 -0
  121. package/dist/agent-runtime/src/sealed-idb.js.map +1 -1
  122. package/dist/agent-runtime/src/send-recovery.cjs +90 -118
  123. package/dist/agent-runtime/src/send-recovery.cjs.map +1 -1
  124. package/dist/agent-runtime/src/send-recovery.d.ts +25 -29
  125. package/dist/agent-runtime/src/send-recovery.js +90 -118
  126. package/dist/agent-runtime/src/send-recovery.js.map +1 -1
  127. package/dist/agent-runtime/src/statewire-diagnostics.d.ts +4 -1
  128. package/dist/agent-runtime/src/statewire-held-sends.cjs +191 -0
  129. package/dist/agent-runtime/src/statewire-held-sends.cjs.map +1 -0
  130. package/dist/agent-runtime/src/statewire-held-sends.d.ts +119 -0
  131. package/dist/agent-runtime/src/statewire-held-sends.js +191 -0
  132. package/dist/agent-runtime/src/statewire-held-sends.js.map +1 -0
  133. package/dist/agent-runtime/src/statewire-state.cjs +4 -0
  134. package/dist/agent-runtime/src/statewire-state.cjs.map +1 -1
  135. package/dist/agent-runtime/src/statewire-state.js +4 -0
  136. package/dist/agent-runtime/src/statewire-state.js.map +1 -1
  137. package/dist/agent-runtime/src/statewire-transport.cjs +8 -2
  138. package/dist/agent-runtime/src/statewire-transport.cjs.map +1 -1
  139. package/dist/agent-runtime/src/statewire-transport.d.ts +14 -5
  140. package/dist/agent-runtime/src/statewire-transport.js +8 -2
  141. package/dist/agent-runtime/src/statewire-transport.js.map +1 -1
  142. package/dist/agent-runtime/src/subagent-transcripts.cjs +1 -23
  143. package/dist/agent-runtime/src/subagent-transcripts.cjs.map +1 -1
  144. package/dist/agent-runtime/src/subagent-transcripts.js +3 -25
  145. package/dist/agent-runtime/src/subagent-transcripts.js.map +1 -1
  146. package/dist/agent-runtime/src/subagents.cjs +22 -29
  147. package/dist/agent-runtime/src/subagents.cjs.map +1 -1
  148. package/dist/agent-runtime/src/subagents.js +23 -30
  149. package/dist/agent-runtime/src/subagents.js.map +1 -1
  150. package/dist/agent-runtime/src/thread-extras.cjs +27 -19
  151. package/dist/agent-runtime/src/thread-extras.cjs.map +1 -1
  152. package/dist/agent-runtime/src/thread-extras.d.ts +19 -6
  153. package/dist/agent-runtime/src/thread-extras.js +27 -19
  154. package/dist/agent-runtime/src/thread-extras.js.map +1 -1
  155. package/dist/agent-runtime/src/thread-handoff-flow-machine.d.ts +8 -8
  156. package/dist/agent-runtime/src/tool-metadata.cjs +12 -0
  157. package/dist/agent-runtime/src/tool-metadata.cjs.map +1 -1
  158. package/dist/agent-runtime/src/tool-metadata.js +12 -0
  159. package/dist/agent-runtime/src/tool-metadata.js.map +1 -1
  160. package/dist/agent-runtime/src/tool-names.cjs +21 -0
  161. package/dist/agent-runtime/src/tool-names.cjs.map +1 -1
  162. package/dist/agent-runtime/src/tool-names.d.ts +8 -0
  163. package/dist/agent-runtime/src/tool-names.js +21 -0
  164. package/dist/agent-runtime/src/tool-names.js.map +1 -1
  165. package/dist/agent-runtime/src/typed-interrupt-kinds.cjs +247 -0
  166. package/dist/agent-runtime/src/typed-interrupt-kinds.cjs.map +1 -0
  167. package/dist/agent-runtime/src/typed-interrupt-kinds.d.ts +173 -0
  168. package/dist/agent-runtime/src/typed-interrupt-kinds.js +247 -0
  169. package/dist/agent-runtime/src/typed-interrupt-kinds.js.map +1 -0
  170. package/dist/agent-runtime/src/typed-interrupts.cjs +48 -0
  171. package/dist/agent-runtime/src/typed-interrupts.cjs.map +1 -0
  172. package/dist/agent-runtime/src/typed-interrupts.d.ts +75 -0
  173. package/dist/agent-runtime/src/typed-interrupts.js +48 -0
  174. package/dist/agent-runtime/src/typed-interrupts.js.map +1 -0
  175. package/dist/agent-runtime/src/types.d.ts +1 -1
  176. package/dist/agent-runtime/src/use-conversation-list.cjs +1 -0
  177. package/dist/agent-runtime/src/use-conversation-list.cjs.map +1 -1
  178. package/dist/agent-runtime/src/use-conversation-list.d.ts +7 -0
  179. package/dist/agent-runtime/src/use-conversation-list.js +1 -0
  180. package/dist/agent-runtime/src/use-conversation-list.js.map +1 -1
  181. package/dist/agent-runtime/src/use-deep-agent-chat-outbox.cjs +46 -29
  182. package/dist/agent-runtime/src/use-deep-agent-chat-outbox.cjs.map +1 -1
  183. package/dist/agent-runtime/src/use-deep-agent-chat-outbox.d.ts +14 -22
  184. package/dist/agent-runtime/src/use-deep-agent-chat-outbox.js +46 -29
  185. package/dist/agent-runtime/src/use-deep-agent-chat-outbox.js.map +1 -1
  186. package/dist/agent-runtime/src/use-deep-agent-runtime.cjs +78 -14
  187. package/dist/agent-runtime/src/use-deep-agent-runtime.cjs.map +1 -1
  188. package/dist/agent-runtime/src/use-deep-agent-runtime.d.ts +34 -7
  189. package/dist/agent-runtime/src/use-deep-agent-runtime.js +79 -15
  190. package/dist/agent-runtime/src/use-deep-agent-runtime.js.map +1 -1
  191. package/dist/agent-runtime/src/use-deep-agent-thread.cjs +16 -1
  192. package/dist/agent-runtime/src/use-deep-agent-thread.cjs.map +1 -1
  193. package/dist/agent-runtime/src/use-deep-agent-thread.d.ts +7 -2
  194. package/dist/agent-runtime/src/use-deep-agent-thread.js +16 -1
  195. package/dist/agent-runtime/src/use-deep-agent-thread.js.map +1 -1
  196. package/dist/agent-runtime/src/use-deep-agent-voice.cjs +30 -4
  197. package/dist/agent-runtime/src/use-deep-agent-voice.cjs.map +1 -1
  198. package/dist/agent-runtime/src/use-deep-agent-voice.d.ts +22 -4
  199. package/dist/agent-runtime/src/use-deep-agent-voice.js +30 -4
  200. package/dist/agent-runtime/src/use-deep-agent-voice.js.map +1 -1
  201. package/dist/agent-runtime/src/withdrawn-turns.d.ts +5 -4
  202. package/dist/agent-runtime/src/word-device-fit.d.ts +174 -0
  203. package/dist/agent-runtime/src/work-in.d.ts +127 -0
  204. package/dist/assets/AthenaAssetEmbed.cjs.map +1 -1
  205. package/dist/assets/AthenaAssetEmbed.d.ts +6 -1
  206. package/dist/assets/AthenaAssetEmbed.js.map +1 -1
  207. package/dist/assets/asset-panel-store.cjs +13 -5
  208. package/dist/assets/asset-panel-store.cjs.map +1 -1
  209. package/dist/assets/asset-panel-store.d.ts +33 -2
  210. package/dist/assets/asset-panel-store.js +13 -5
  211. package/dist/assets/asset-panel-store.js.map +1 -1
  212. package/dist/auth/AthenaCredentialSourceContext.cjs +11 -0
  213. package/dist/auth/AthenaCredentialSourceContext.cjs.map +1 -1
  214. package/dist/auth/AthenaCredentialSourceContext.d.ts +6 -0
  215. package/dist/auth/AthenaCredentialSourceContext.js +11 -0
  216. package/dist/auth/AthenaCredentialSourceContext.js.map +1 -1
  217. package/dist/auth/account-identity.cjs +13 -2
  218. package/dist/auth/account-identity.cjs.map +1 -1
  219. package/dist/auth/account-identity.d.ts +9 -0
  220. package/dist/auth/account-identity.js +13 -2
  221. package/dist/auth/account-identity.js.map +1 -1
  222. package/dist/auth/credential-source.cjs +20 -4
  223. package/dist/auth/credential-source.cjs.map +1 -1
  224. package/dist/auth/credential-source.d.ts +9 -0
  225. package/dist/auth/credential-source.js +20 -4
  226. package/dist/auth/credential-source.js.map +1 -1
  227. package/dist/catalog/chat-pickers.cjs +31 -0
  228. package/dist/catalog/chat-pickers.cjs.map +1 -1
  229. package/dist/catalog/chat-pickers.d.ts +17 -0
  230. package/dist/catalog/chat-pickers.js +33 -2
  231. package/dist/catalog/chat-pickers.js.map +1 -1
  232. package/dist/catalog/runtime-catalog.cjs +63 -3
  233. package/dist/catalog/runtime-catalog.cjs.map +1 -1
  234. package/dist/catalog/runtime-catalog.d.ts +63 -3
  235. package/dist/catalog/runtime-catalog.js +64 -4
  236. package/dist/catalog/runtime-catalog.js.map +1 -1
  237. package/dist/chat/AthenaChat.cjs +337 -99
  238. package/dist/chat/AthenaChat.cjs.map +1 -1
  239. package/dist/chat/AthenaChat.d.ts +80 -4
  240. package/dist/chat/AthenaChat.js +337 -99
  241. package/dist/chat/AthenaChat.js.map +1 -1
  242. package/dist/chat/StatewireApprovalCard.cjs +35 -5
  243. package/dist/chat/StatewireApprovalCard.cjs.map +1 -1
  244. package/dist/chat/StatewireApprovalCard.d.ts +55 -2
  245. package/dist/chat/StatewireApprovalCard.js +37 -7
  246. package/dist/chat/StatewireApprovalCard.js.map +1 -1
  247. package/dist/chat/StatewireQueuedMessages.cjs +17 -2
  248. package/dist/chat/StatewireQueuedMessages.cjs.map +1 -1
  249. package/dist/chat/StatewireQueuedMessages.d.ts +8 -45
  250. package/dist/chat/StatewireQueuedMessages.js +18 -3
  251. package/dist/chat/StatewireQueuedMessages.js.map +1 -1
  252. package/dist/chat/chat-agent-mentions.cjs +70 -0
  253. package/dist/chat/chat-agent-mentions.cjs.map +1 -0
  254. package/dist/chat/chat-agent-mentions.d.ts +13 -0
  255. package/dist/chat/chat-agent-mentions.js +70 -0
  256. package/dist/chat/chat-agent-mentions.js.map +1 -0
  257. package/dist/chat/composer-actions.cjs +12 -0
  258. package/dist/chat/composer-actions.cjs.map +1 -0
  259. package/dist/chat/composer-actions.d.ts +22 -0
  260. package/dist/chat/composer-actions.js +12 -0
  261. package/dist/chat/composer-actions.js.map +1 -0
  262. package/dist/chat/follow-up-suggestions.cjs +185 -0
  263. package/dist/chat/follow-up-suggestions.cjs.map +1 -0
  264. package/dist/chat/follow-up-suggestions.d.ts +64 -0
  265. package/dist/chat/follow-up-suggestions.js +185 -0
  266. package/dist/chat/follow-up-suggestions.js.map +1 -0
  267. package/dist/chat/super-grouping/ToolTimeline.cjs +4 -3
  268. package/dist/chat/super-grouping/ToolTimeline.cjs.map +1 -1
  269. package/dist/chat/super-grouping/ToolTimeline.d.ts +7 -3
  270. package/dist/chat/super-grouping/ToolTimeline.js +4 -3
  271. package/dist/chat/super-grouping/ToolTimeline.js.map +1 -1
  272. package/dist/chat/turn-changes.cjs +284 -0
  273. package/dist/chat/turn-changes.cjs.map +1 -0
  274. package/dist/chat/turn-changes.d.ts +130 -0
  275. package/dist/chat/turn-changes.js +284 -0
  276. package/dist/chat/turn-changes.js.map +1 -0
  277. package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.cjs +31 -0
  278. package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.cjs.map +1 -0
  279. package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.d.ts +31 -0
  280. package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.js +31 -0
  281. package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.js.map +1 -0
  282. package/dist/chat/typed-interrupts/approval-cards.cjs +250 -0
  283. package/dist/chat/typed-interrupts/approval-cards.cjs.map +1 -0
  284. package/dist/chat/typed-interrupts/approval-cards.d.ts +22 -0
  285. package/dist/chat/typed-interrupts/approval-cards.js +250 -0
  286. package/dist/chat/typed-interrupts/approval-cards.js.map +1 -0
  287. package/dist/chat/typed-interrupts/form-cards.cjs +289 -0
  288. package/dist/chat/typed-interrupts/form-cards.cjs.map +1 -0
  289. package/dist/chat/typed-interrupts/form-cards.d.ts +6 -0
  290. package/dist/chat/typed-interrupts/form-cards.js +289 -0
  291. package/dist/chat/typed-interrupts/form-cards.js.map +1 -0
  292. package/dist/chat/typed-interrupts/interrupt-card-shell.cjs +182 -0
  293. package/dist/chat/typed-interrupts/interrupt-card-shell.cjs.map +1 -0
  294. package/dist/chat/typed-interrupts/interrupt-card-shell.d.ts +47 -0
  295. package/dist/chat/typed-interrupts/interrupt-card-shell.js +182 -0
  296. package/dist/chat/typed-interrupts/interrupt-card-shell.js.map +1 -0
  297. package/dist/chat/typed-interrupts/json-schema-form.cjs +388 -0
  298. package/dist/chat/typed-interrupts/json-schema-form.cjs.map +1 -0
  299. package/dist/chat/typed-interrupts/json-schema-form.d.ts +33 -0
  300. package/dist/chat/typed-interrupts/json-schema-form.js +388 -0
  301. package/dist/chat/typed-interrupts/json-schema-form.js.map +1 -0
  302. package/dist/chat/typed-interrupts/questionnaire-card.cjs +449 -0
  303. package/dist/chat/typed-interrupts/questionnaire-card.cjs.map +1 -0
  304. package/dist/chat/typed-interrupts/questionnaire-card.d.ts +20 -0
  305. package/dist/chat/typed-interrupts/questionnaire-card.js +449 -0
  306. package/dist/chat/typed-interrupts/questionnaire-card.js.map +1 -0
  307. package/dist/chat/typed-interrupts/request-file-card.cjs +159 -0
  308. package/dist/chat/typed-interrupts/request-file-card.cjs.map +1 -0
  309. package/dist/chat/typed-interrupts/request-file-card.d.ts +2 -0
  310. package/dist/chat/typed-interrupts/request-file-card.js +159 -0
  311. package/dist/chat/typed-interrupts/request-file-card.js.map +1 -0
  312. package/dist/chat/typed-interrupts/toolkit-selection-card.cjs +189 -0
  313. package/dist/chat/typed-interrupts/toolkit-selection-card.cjs.map +1 -0
  314. package/dist/chat/typed-interrupts/toolkit-selection-card.d.ts +23 -0
  315. package/dist/chat/typed-interrupts/toolkit-selection-card.js +189 -0
  316. package/dist/chat/typed-interrupts/toolkit-selection-card.js.map +1 -0
  317. package/dist/chat/typed-interrupts/typed-interrupt-body.cjs +26 -0
  318. package/dist/chat/typed-interrupts/typed-interrupt-body.cjs.map +1 -0
  319. package/dist/chat/typed-interrupts/typed-interrupt-body.d.ts +3 -0
  320. package/dist/chat/typed-interrupts/typed-interrupt-body.js +26 -0
  321. package/dist/chat/typed-interrupts/typed-interrupt-body.js.map +1 -0
  322. package/dist/chat/typed-interrupts/typed-interrupt-graphql.cjs +105 -0
  323. package/dist/chat/typed-interrupts/typed-interrupt-graphql.cjs.map +1 -0
  324. package/dist/chat/typed-interrupts/typed-interrupt-graphql.d.ts +29 -0
  325. package/dist/chat/typed-interrupts/typed-interrupt-graphql.js +105 -0
  326. package/dist/chat/typed-interrupts/typed-interrupt-graphql.js.map +1 -0
  327. package/dist/chat/typed-interrupts/typed-interrupt-notice.cjs +70 -0
  328. package/dist/chat/typed-interrupts/typed-interrupt-notice.cjs.map +1 -0
  329. package/dist/chat/typed-interrupts/typed-interrupt-notice.d.ts +45 -0
  330. package/dist/chat/typed-interrupts/typed-interrupt-notice.js +70 -0
  331. package/dist/chat/typed-interrupts/typed-interrupt-notice.js.map +1 -0
  332. package/dist/chat/typed-interrupts/typed-interrupt-panel.cjs +76 -0
  333. package/dist/chat/typed-interrupts/typed-interrupt-panel.cjs.map +1 -0
  334. package/dist/chat/typed-interrupts/typed-interrupt-panel.d.ts +11 -0
  335. package/dist/chat/typed-interrupts/typed-interrupt-panel.js +76 -0
  336. package/dist/chat/typed-interrupts/typed-interrupt-panel.js.map +1 -0
  337. package/dist/chat/typed-interrupts/typed-interrupt-types.d.ts +46 -0
  338. package/dist/chat/typed-interrupts/use-interrupt-draft.cjs +106 -0
  339. package/dist/chat/typed-interrupts/use-interrupt-draft.cjs.map +1 -0
  340. package/dist/chat/typed-interrupts/use-interrupt-draft.d.ts +29 -0
  341. package/dist/chat/typed-interrupts/use-interrupt-draft.js +106 -0
  342. package/dist/chat/typed-interrupts/use-interrupt-draft.js.map +1 -0
  343. package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.cjs +231 -0
  344. package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.cjs.map +1 -0
  345. package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.d.ts +66 -0
  346. package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.js +231 -0
  347. package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.js.map +1 -0
  348. package/dist/chat-ui/composer/composer-named-agents.cjs +13 -0
  349. package/dist/chat-ui/composer/composer-named-agents.cjs.map +1 -0
  350. package/dist/chat-ui/composer/composer-named-agents.d.ts +20 -0
  351. package/dist/chat-ui/composer/composer-named-agents.js +13 -0
  352. package/dist/chat-ui/composer/composer-named-agents.js.map +1 -0
  353. package/dist/chat-ui/composer/slash-command-menu.cjs +143 -0
  354. package/dist/chat-ui/composer/slash-command-menu.cjs.map +1 -0
  355. package/dist/chat-ui/composer/slash-command-menu.d.ts +19 -0
  356. package/dist/chat-ui/composer/slash-command-menu.js +143 -0
  357. package/dist/chat-ui/composer/slash-command-menu.js.map +1 -0
  358. package/dist/chat-ui/composer/slash-commands-extension.cjs +51 -0
  359. package/dist/chat-ui/composer/slash-commands-extension.cjs.map +1 -0
  360. package/dist/chat-ui/composer/slash-commands-extension.d.ts +39 -0
  361. package/dist/chat-ui/composer/slash-commands-extension.js +51 -0
  362. package/dist/chat-ui/composer/slash-commands-extension.js.map +1 -0
  363. package/dist/chat-ui/composer/slash-commands.cjs +74 -0
  364. package/dist/chat-ui/composer/slash-commands.cjs.map +1 -0
  365. package/dist/chat-ui/composer/slash-commands.d.ts +82 -0
  366. package/dist/chat-ui/composer/slash-commands.js +74 -0
  367. package/dist/chat-ui/composer/slash-commands.js.map +1 -0
  368. package/dist/chat-ui/composer/tiptap-composer.cjs +135 -9
  369. package/dist/chat-ui/composer/tiptap-composer.cjs.map +1 -1
  370. package/dist/chat-ui/composer/tiptap-composer.d.ts +61 -2
  371. package/dist/chat-ui/composer/tiptap-composer.js +135 -9
  372. package/dist/chat-ui/composer/tiptap-composer.js.map +1 -1
  373. package/dist/chat-ui/index.cjs +3 -0
  374. package/dist/chat-ui/index.cjs.map +1 -1
  375. package/dist/chat-ui/index.d.ts +3 -2
  376. package/dist/chat-ui/index.js +3 -0
  377. package/dist/chat-ui/index.js.map +1 -1
  378. package/dist/chat-ui/mentions/mention-chip.cjs +1 -1
  379. package/dist/chat-ui/mentions/mention-chip.cjs.map +1 -1
  380. package/dist/chat-ui/mentions/mention-chip.js +2 -2
  381. package/dist/chat-ui/mentions/mention-chip.js.map +1 -1
  382. package/dist/chat-ui/mentions/mention-extension.cjs +8 -1
  383. package/dist/chat-ui/mentions/mention-extension.cjs.map +1 -1
  384. package/dist/chat-ui/mentions/mention-extension.js +8 -1
  385. package/dist/chat-ui/mentions/mention-extension.js.map +1 -1
  386. package/dist/chat-ui/mentions/suggestions/components/get-scope-name.cjs +1 -0
  387. package/dist/chat-ui/mentions/suggestions/components/get-scope-name.cjs.map +1 -1
  388. package/dist/chat-ui/mentions/suggestions/components/get-scope-name.js +1 -0
  389. package/dist/chat-ui/mentions/suggestions/components/get-scope-name.js.map +1 -1
  390. package/dist/chat-ui/mentions/suggestions/components/mention-icon.cjs +2 -0
  391. package/dist/chat-ui/mentions/suggestions/components/mention-icon.cjs.map +1 -1
  392. package/dist/chat-ui/mentions/suggestions/components/mention-icon.js +3 -1
  393. package/dist/chat-ui/mentions/suggestions/components/mention-icon.js.map +1 -1
  394. package/dist/chat-ui/mentions/suggestions/components/menu-item.cjs +1 -1
  395. package/dist/chat-ui/mentions/suggestions/components/menu-item.cjs.map +1 -1
  396. package/dist/chat-ui/mentions/suggestions/components/menu-item.js +1 -1
  397. package/dist/chat-ui/mentions/suggestions/components/menu-item.js.map +1 -1
  398. package/dist/chat-ui/mentions/suggestions/data/api-client.cjs +36 -0
  399. package/dist/chat-ui/mentions/suggestions/data/api-client.cjs.map +1 -1
  400. package/dist/chat-ui/mentions/suggestions/data/api-client.d.ts +42 -0
  401. package/dist/chat-ui/mentions/suggestions/data/api-client.js +36 -0
  402. package/dist/chat-ui/mentions/suggestions/data/api-client.js.map +1 -1
  403. package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs +235 -19
  404. package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs.map +1 -1
  405. package/dist/chat-ui/mentions/suggestions/data/sources/index.d.ts +88 -10
  406. package/dist/chat-ui/mentions/suggestions/data/sources/index.js +236 -20
  407. package/dist/chat-ui/mentions/suggestions/data/sources/index.js.map +1 -1
  408. package/dist/chat-ui/mentions/suggestions/data/types.cjs.map +1 -1
  409. package/dist/chat-ui/mentions/suggestions/data/types.d.ts +27 -1
  410. package/dist/chat-ui/mentions/suggestions/data/types.js.map +1 -1
  411. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs +56 -5
  412. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs.map +1 -1
  413. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.d.ts +26 -6
  414. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js +57 -6
  415. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js.map +1 -1
  416. package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.cjs +34 -17
  417. package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.cjs.map +1 -1
  418. package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.d.ts +19 -1
  419. package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.js +35 -18
  420. package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.js.map +1 -1
  421. package/dist/chat-ui/statewire.d.ts +1 -1
  422. package/dist/chat-ui/thread/statewire-history-edge.cjs +15 -0
  423. package/dist/chat-ui/thread/statewire-history-edge.cjs.map +1 -1
  424. package/dist/chat-ui/thread/statewire-history-edge.d.ts +4 -1
  425. package/dist/chat-ui/thread/statewire-history-edge.js +15 -0
  426. package/dist/chat-ui/thread/statewire-history-edge.js.map +1 -1
  427. package/dist/collab/client.cjs +17 -5
  428. package/dist/collab/client.cjs.map +1 -1
  429. package/dist/collab/client.d.ts +22 -7
  430. package/dist/collab/client.js +17 -5
  431. package/dist/collab/client.js.map +1 -1
  432. package/dist/composer/ComposerAttachedReferences.cjs +119 -0
  433. package/dist/composer/ComposerAttachedReferences.cjs.map +1 -0
  434. package/dist/composer/ComposerAttachedReferences.d.ts +26 -0
  435. package/dist/composer/ComposerAttachedReferences.js +119 -0
  436. package/dist/composer/ComposerAttachedReferences.js.map +1 -0
  437. package/dist/composer/ComposerNamedAgents.cjs +63 -0
  438. package/dist/composer/ComposerNamedAgents.cjs.map +1 -0
  439. package/dist/composer/ComposerNamedAgents.d.ts +16 -0
  440. package/dist/composer/ComposerNamedAgents.js +63 -0
  441. package/dist/composer/ComposerNamedAgents.js.map +1 -0
  442. package/dist/composer/attached-references.cjs +159 -0
  443. package/dist/composer/attached-references.cjs.map +1 -0
  444. package/dist/composer/attached-references.d.ts +86 -0
  445. package/dist/composer/attached-references.js +159 -0
  446. package/dist/composer/attached-references.js.map +1 -0
  447. package/dist/composer/build-composed-message.cjs +14 -7
  448. package/dist/composer/build-composed-message.cjs.map +1 -1
  449. package/dist/composer/build-composed-message.d.ts +6 -1
  450. package/dist/composer/build-composed-message.js +14 -7
  451. package/dist/composer/build-composed-message.js.map +1 -1
  452. package/dist/composer/composer-handoff.cjs +6 -2
  453. package/dist/composer/composer-handoff.cjs.map +1 -1
  454. package/dist/composer/composer-handoff.d.ts +7 -1
  455. package/dist/composer/composer-handoff.js +6 -2
  456. package/dist/composer/composer-handoff.js.map +1 -1
  457. package/dist/composer/folder-upload.cjs +149 -0
  458. package/dist/composer/folder-upload.cjs.map +1 -0
  459. package/dist/composer/folder-upload.d.ts +79 -0
  460. package/dist/composer/folder-upload.js +149 -0
  461. package/dist/composer/folder-upload.js.map +1 -0
  462. package/dist/composer/index.d.ts +1 -1
  463. package/dist/composer/useAttachToChat.cjs +35 -0
  464. package/dist/composer/useAttachToChat.cjs.map +1 -0
  465. package/dist/composer/useAttachToChat.d.ts +54 -0
  466. package/dist/composer/useAttachToChat.js +35 -0
  467. package/dist/composer/useAttachToChat.js.map +1 -0
  468. package/dist/composer/useAttachedReferencesComposerProps.cjs +19 -0
  469. package/dist/composer/useAttachedReferencesComposerProps.cjs.map +1 -0
  470. package/dist/composer/useAttachedReferencesComposerProps.d.ts +12 -0
  471. package/dist/composer/useAttachedReferencesComposerProps.js +19 -0
  472. package/dist/composer/useAttachedReferencesComposerProps.js.map +1 -0
  473. package/dist/composer/useFileUpload.cjs +95 -7
  474. package/dist/composer/useFileUpload.cjs.map +1 -1
  475. package/dist/composer/useFileUpload.d.ts +21 -2
  476. package/dist/composer/useFileUpload.js +95 -7
  477. package/dist/composer/useFileUpload.js.map +1 -1
  478. package/dist/data/athena-api-error.cjs +125 -0
  479. package/dist/data/athena-api-error.cjs.map +1 -0
  480. package/dist/data/athena-api-error.d.ts +96 -0
  481. package/dist/data/athena-api-error.js +125 -0
  482. package/dist/data/athena-api-error.js.map +1 -0
  483. package/dist/data/athena-data-client.cjs +106 -0
  484. package/dist/data/athena-data-client.cjs.map +1 -0
  485. package/dist/data/athena-data-client.d.ts +74 -0
  486. package/dist/data/athena-data-client.js +106 -0
  487. package/dist/data/athena-data-client.js.map +1 -0
  488. package/dist/data/athena-member.cjs +93 -0
  489. package/dist/data/athena-member.cjs.map +1 -0
  490. package/dist/data/athena-member.d.ts +125 -0
  491. package/dist/data/athena-member.js +93 -0
  492. package/dist/data/athena-member.js.map +1 -0
  493. package/dist/data/athena-request.cjs +458 -0
  494. package/dist/data/athena-request.cjs.map +1 -0
  495. package/dist/data/athena-request.d.ts +120 -0
  496. package/dist/data/athena-request.js +458 -0
  497. package/dist/data/athena-request.js.map +1 -0
  498. package/dist/data/use-athena-fetch.cjs +14 -0
  499. package/dist/data/use-athena-fetch.cjs.map +1 -0
  500. package/dist/data/use-athena-fetch.d.ts +19 -0
  501. package/dist/data/use-athena-fetch.js +14 -0
  502. package/dist/data/use-athena-fetch.js.map +1 -0
  503. package/dist/data/use-athena-graphql.cjs +66 -0
  504. package/dist/data/use-athena-graphql.cjs.map +1 -0
  505. package/dist/data/use-athena-graphql.d.ts +56 -0
  506. package/dist/data/use-athena-graphql.js +66 -0
  507. package/dist/data/use-athena-graphql.js.map +1 -0
  508. package/dist/data/use-athena-rest.cjs +33 -0
  509. package/dist/data/use-athena-rest.cjs.map +1 -0
  510. package/dist/data/use-athena-rest.d.ts +21 -0
  511. package/dist/data/use-athena-rest.js +33 -0
  512. package/dist/data/use-athena-rest.js.map +1 -0
  513. package/dist/data/use-semantic-query.cjs +44 -0
  514. package/dist/data/use-semantic-query.cjs.map +1 -0
  515. package/dist/data/use-semantic-query.d.ts +92 -0
  516. package/dist/data/use-semantic-query.js +44 -0
  517. package/dist/data/use-semantic-query.js.map +1 -0
  518. package/dist/diagnostics/athena-diagnostics.cjs.map +1 -1
  519. package/dist/diagnostics/athena-diagnostics.d.ts +5 -1
  520. package/dist/diagnostics/athena-diagnostics.js.map +1 -1
  521. package/dist/diagnostics/errors.cjs +7 -0
  522. package/dist/diagnostics/errors.cjs.map +1 -1
  523. package/dist/diagnostics/errors.d.ts +7 -0
  524. package/dist/diagnostics/errors.js +7 -0
  525. package/dist/diagnostics/errors.js.map +1 -1
  526. package/dist/index.cjs +155 -11
  527. package/dist/index.cjs.map +1 -1
  528. package/dist/index.d.ts +72 -13
  529. package/dist/index.js +148 -4
  530. package/dist/index.js.map +1 -1
  531. package/dist/keryx-http/src/initial-sync.cjs +64 -16
  532. package/dist/keryx-http/src/initial-sync.cjs.map +1 -1
  533. package/dist/keryx-http/src/initial-sync.d.ts +31 -1
  534. package/dist/keryx-http/src/initial-sync.js +64 -16
  535. package/dist/keryx-http/src/initial-sync.js.map +1 -1
  536. package/dist/keryx-http/src/own-awareness.cjs +20 -0
  537. package/dist/keryx-http/src/own-awareness.cjs.map +1 -0
  538. package/dist/keryx-http/src/own-awareness.d.ts +50 -0
  539. package/dist/keryx-http/src/own-awareness.js +20 -0
  540. package/dist/keryx-http/src/own-awareness.js.map +1 -0
  541. package/dist/keryx-http/src/update-attributions.cjs +26 -1
  542. package/dist/keryx-http/src/update-attributions.cjs.map +1 -1
  543. package/dist/keryx-http/src/update-attributions.d.ts +10 -1
  544. package/dist/keryx-http/src/update-attributions.js +26 -1
  545. package/dist/keryx-http/src/update-attributions.js.map +1 -1
  546. package/dist/offline/chat-outbox.cjs +262 -26
  547. package/dist/offline/chat-outbox.cjs.map +1 -1
  548. package/dist/offline/chat-outbox.d.ts +90 -12
  549. package/dist/offline/chat-outbox.js +263 -27
  550. package/dist/offline/chat-outbox.js.map +1 -1
  551. package/dist/provider/AthenaProvider.cjs +63 -19
  552. package/dist/provider/AthenaProvider.cjs.map +1 -1
  553. package/dist/provider/AthenaProvider.d.ts +24 -8
  554. package/dist/provider/AthenaProvider.js +66 -22
  555. package/dist/provider/AthenaProvider.js.map +1 -1
  556. package/dist/react/package.json.cjs +1 -1
  557. package/dist/react/package.json.js +1 -1
  558. package/dist/references/src/anchors/types.cjs +5 -0
  559. package/dist/references/src/anchors/types.cjs.map +1 -1
  560. package/dist/references/src/anchors/types.js +5 -0
  561. package/dist/references/src/anchors/types.js.map +1 -1
  562. package/dist/references/src/attachable.cjs +149 -0
  563. package/dist/references/src/attachable.cjs.map +1 -0
  564. package/dist/references/src/attachable.d.ts +87 -0
  565. package/dist/references/src/attachable.js +149 -0
  566. package/dist/references/src/attachable.js.map +1 -0
  567. package/dist/runtime/StatewirePlanModeLaneSync.cjs +93 -0
  568. package/dist/runtime/StatewirePlanModeLaneSync.cjs.map +1 -0
  569. package/dist/runtime/StatewirePlanModeLaneSync.d.ts +34 -0
  570. package/dist/runtime/StatewirePlanModeLaneSync.js +93 -0
  571. package/dist/runtime/StatewirePlanModeLaneSync.js.map +1 -0
  572. package/dist/runtime/StatewireThreadConfigLaneSync.cjs +2 -0
  573. package/dist/runtime/StatewireThreadConfigLaneSync.cjs.map +1 -1
  574. package/dist/runtime/StatewireThreadConfigLaneSync.d.ts +4 -0
  575. package/dist/runtime/StatewireThreadConfigLaneSync.js +2 -0
  576. package/dist/runtime/StatewireThreadConfigLaneSync.js.map +1 -1
  577. package/dist/runtime/statewire-plan-mode.cjs +71 -0
  578. package/dist/runtime/statewire-plan-mode.cjs.map +1 -0
  579. package/dist/runtime/statewire-plan-mode.d.ts +88 -0
  580. package/dist/runtime/statewire-plan-mode.js +71 -0
  581. package/dist/runtime/statewire-plan-mode.js.map +1 -0
  582. package/dist/runtime/statewire-run-config.cjs +18 -1
  583. package/dist/runtime/statewire-run-config.cjs.map +1 -1
  584. package/dist/runtime/statewire-run-config.d.ts +20 -0
  585. package/dist/runtime/statewire-run-config.js +18 -1
  586. package/dist/runtime/statewire-run-config.js.map +1 -1
  587. package/dist/runtime/statewire-session-key.cjs +11 -5
  588. package/dist/runtime/statewire-session-key.cjs.map +1 -1
  589. package/dist/runtime/statewire-session-key.d.ts +22 -10
  590. package/dist/runtime/statewire-session-key.js +11 -5
  591. package/dist/runtime/statewire-session-key.js.map +1 -1
  592. package/dist/runtime/useAthenaStatewireRuntime.cjs +65 -8
  593. package/dist/runtime/useAthenaStatewireRuntime.cjs.map +1 -1
  594. package/dist/runtime/useAthenaStatewireRuntime.d.ts +26 -10
  595. package/dist/runtime/useAthenaStatewireRuntime.js +67 -10
  596. package/dist/runtime/useAthenaStatewireRuntime.js.map +1 -1
  597. package/dist/search/useAthenaAssets.cjs +394 -0
  598. package/dist/search/useAthenaAssets.cjs.map +1 -0
  599. package/dist/search/useAthenaAssets.d.ts +186 -0
  600. package/dist/search/useAthenaAssets.js +394 -0
  601. package/dist/search/useAthenaAssets.js.map +1 -0
  602. package/dist/sheet-range/index.cjs +4 -0
  603. package/dist/sheet-range/index.cjs.map +1 -1
  604. package/dist/sheet-range/index.d.ts +4 -2
  605. package/dist/sheet-range/index.js +4 -0
  606. package/dist/sheet-range/index.js.map +1 -1
  607. package/dist/sheet-range/query-range.cjs +102 -0
  608. package/dist/sheet-range/query-range.cjs.map +1 -0
  609. package/dist/sheet-range/query-range.d.ts +46 -0
  610. package/dist/sheet-range/query-range.js +102 -0
  611. package/dist/sheet-range/query-range.js.map +1 -0
  612. package/dist/styles.css +1 -1
  613. package/dist/subagents/index.cjs +49 -0
  614. package/dist/subagents/index.cjs.map +1 -0
  615. package/dist/subagents/index.d.ts +16 -0
  616. package/dist/subagents/index.js +49 -0
  617. package/dist/subagents/index.js.map +1 -0
  618. package/dist/subagents/lane-follow.cjs +19 -0
  619. package/dist/subagents/lane-follow.cjs.map +1 -0
  620. package/dist/subagents/lane-follow.d.ts +9 -0
  621. package/dist/subagents/lane-follow.js +19 -0
  622. package/dist/subagents/lane-follow.js.map +1 -0
  623. package/dist/subagents/lane-model.cjs +178 -0
  624. package/dist/subagents/lane-model.cjs.map +1 -0
  625. package/dist/subagents/lane-model.d.ts +140 -0
  626. package/dist/subagents/lane-model.js +178 -0
  627. package/dist/subagents/lane-model.js.map +1 -0
  628. package/dist/subagents/lane-parts.cjs +517 -0
  629. package/dist/subagents/lane-parts.cjs.map +1 -0
  630. package/dist/subagents/lane-parts.d.ts +130 -0
  631. package/dist/subagents/lane-parts.js +517 -0
  632. package/dist/subagents/lane-parts.js.map +1 -0
  633. package/dist/subagents/subagent-lane-group.cjs +215 -0
  634. package/dist/subagents/subagent-lane-group.cjs.map +1 -0
  635. package/dist/subagents/subagent-lane-group.d.ts +67 -0
  636. package/dist/subagents/subagent-lane-group.js +215 -0
  637. package/dist/subagents/subagent-lane-group.js.map +1 -0
  638. package/dist/subagents/subagent-transcript-drawer.cjs +431 -0
  639. package/dist/subagents/subagent-transcript-drawer.cjs.map +1 -0
  640. package/dist/subagents/subagent-transcript-drawer.d.ts +78 -0
  641. package/dist/subagents/subagent-transcript-drawer.js +431 -0
  642. package/dist/subagents/subagent-transcript-drawer.js.map +1 -0
  643. package/dist/subagents/task-subagent-group.cjs +115 -0
  644. package/dist/subagents/task-subagent-group.cjs.map +1 -0
  645. package/dist/subagents/task-subagent-group.d.ts +36 -0
  646. package/dist/subagents/task-subagent-group.js +115 -0
  647. package/dist/subagents/task-subagent-group.js.map +1 -0
  648. package/dist/subagents/use-omitted-images-in-view.cjs +68 -0
  649. package/dist/subagents/use-omitted-images-in-view.cjs.map +1 -0
  650. package/dist/subagents/use-omitted-images-in-view.d.ts +21 -0
  651. package/dist/subagents/use-omitted-images-in-view.js +68 -0
  652. package/dist/subagents/use-omitted-images-in-view.js.map +1 -0
  653. package/dist/threads/Inbox.cjs +2 -2
  654. package/dist/threads/Inbox.cjs.map +1 -1
  655. package/dist/threads/SessionList.cjs +27 -24
  656. package/dist/threads/SessionList.cjs.map +1 -1
  657. package/dist/threads/SessionList.js +22 -19
  658. package/dist/threads/SessionList.js.map +1 -1
  659. package/dist/threads/SessionsPage.cjs +13 -7
  660. package/dist/threads/SessionsPage.cjs.map +1 -1
  661. package/dist/threads/SessionsPage.d.ts +10 -1
  662. package/dist/threads/SessionsPage.js +9 -3
  663. package/dist/threads/SessionsPage.js.map +1 -1
  664. package/dist/threads/live-session-rows.cjs +207 -0
  665. package/dist/threads/live-session-rows.cjs.map +1 -0
  666. package/dist/threads/live-session-rows.d.ts +175 -0
  667. package/dist/threads/live-session-rows.js +207 -0
  668. package/dist/threads/live-session-rows.js.map +1 -0
  669. package/dist/threads/session-list-model.cjs.map +1 -1
  670. package/dist/threads/session-list-model.d.ts +2 -1
  671. package/dist/threads/session-list-model.js.map +1 -1
  672. package/dist/threads/session-row-parts.cjs +3 -3
  673. package/dist/threads/session-row-parts.cjs.map +1 -1
  674. package/dist/threads/sessions-page-model.cjs +13 -5
  675. package/dist/threads/sessions-page-model.cjs.map +1 -1
  676. package/dist/threads/sessions-page-model.d.ts +7 -0
  677. package/dist/threads/sessions-page-model.js +11 -3
  678. package/dist/threads/sessions-page-model.js.map +1 -1
  679. package/dist/threads/sessions-page-storage.cjs +8 -8
  680. package/dist/threads/sessions-page-storage.cjs.map +1 -1
  681. package/dist/threads/sessions-page-storage.d.ts +5 -1
  682. package/dist/threads/sessions-page-storage.js +8 -8
  683. package/dist/threads/sessions-page-storage.js.map +1 -1
  684. package/dist/threads/statewire-thread-list.cjs +173 -20
  685. package/dist/threads/statewire-thread-list.cjs.map +1 -1
  686. package/dist/threads/statewire-thread-list.d.ts +44 -1
  687. package/dist/threads/statewire-thread-list.js +174 -21
  688. package/dist/threads/statewire-thread-list.js.map +1 -1
  689. package/dist/threads/use-athena-sessions.cjs +1 -0
  690. package/dist/threads/use-athena-sessions.cjs.map +1 -1
  691. package/dist/threads/use-athena-sessions.d.ts +7 -0
  692. package/dist/threads/use-athena-sessions.js +1 -0
  693. package/dist/threads/use-athena-sessions.js.map +1 -1
  694. package/dist/threads/use-athena-thread-agent.cjs +31 -0
  695. package/dist/threads/use-athena-thread-agent.cjs.map +1 -0
  696. package/dist/threads/use-athena-thread-agent.d.ts +38 -0
  697. package/dist/threads/use-athena-thread-agent.js +31 -0
  698. package/dist/threads/use-athena-thread-agent.js.map +1 -0
  699. package/dist/threads/use-athena-thread-plan-mode.cjs +18 -0
  700. package/dist/threads/use-athena-thread-plan-mode.cjs.map +1 -0
  701. package/dist/threads/use-athena-thread-plan-mode.d.ts +18 -0
  702. package/dist/threads/use-athena-thread-plan-mode.js +18 -0
  703. package/dist/threads/use-athena-thread-plan-mode.js.map +1 -0
  704. package/dist/threads/use-rest-conversation-history.d.ts +1 -0
  705. package/dist/tools/agent-creations.cjs +97 -0
  706. package/dist/tools/agent-creations.cjs.map +1 -0
  707. package/dist/tools/agent-creations.d.ts +38 -0
  708. package/dist/tools/agent-creations.js +97 -0
  709. package/dist/tools/agent-creations.js.map +1 -0
  710. package/dist/tools/agent-highlights.cjs +100 -0
  711. package/dist/tools/agent-highlights.cjs.map +1 -0
  712. package/dist/tools/agent-highlights.d.ts +57 -0
  713. package/dist/tools/agent-highlights.js +100 -0
  714. package/dist/tools/agent-highlights.js.map +1 -0
  715. package/dist/tools/append-document-tool-ui.cjs +1 -0
  716. package/dist/tools/append-document-tool-ui.cjs.map +1 -1
  717. package/dist/tools/append-document-tool-ui.d.ts +7 -0
  718. package/dist/tools/append-document-tool-ui.js +2 -1
  719. package/dist/tools/append-document-tool-ui.js.map +1 -1
  720. package/dist/tools/auto-open-tools.cjs +144 -71
  721. package/dist/tools/auto-open-tools.cjs.map +1 -1
  722. package/dist/tools/auto-open-tools.d.ts +131 -1
  723. package/dist/tools/auto-open-tools.js +145 -72
  724. package/dist/tools/auto-open-tools.js.map +1 -1
  725. package/dist/tools/browser-tool-uis.cjs +594 -0
  726. package/dist/tools/browser-tool-uis.cjs.map +1 -0
  727. package/dist/tools/browser-tool-uis.d.ts +8 -0
  728. package/dist/tools/browser-tool-uis.js +594 -0
  729. package/dist/tools/browser-tool-uis.js.map +1 -0
  730. package/dist/tools/computer-asset-tool-uis.cjs +313 -0
  731. package/dist/tools/computer-asset-tool-uis.cjs.map +1 -0
  732. package/dist/tools/computer-asset-tool-uis.d.ts +5 -0
  733. package/dist/tools/computer-asset-tool-uis.js +313 -0
  734. package/dist/tools/computer-asset-tool-uis.js.map +1 -0
  735. package/dist/tools/document-edit-tool-uis.cjs +218 -0
  736. package/dist/tools/document-edit-tool-uis.cjs.map +1 -0
  737. package/dist/tools/document-edit-tool-uis.d.ts +40 -0
  738. package/dist/tools/document-edit-tool-uis.js +218 -0
  739. package/dist/tools/document-edit-tool-uis.js.map +1 -0
  740. package/dist/tools/drive-tool-uis.cjs +425 -0
  741. package/dist/tools/drive-tool-uis.cjs.map +1 -0
  742. package/dist/tools/drive-tool-uis.d.ts +120 -0
  743. package/dist/tools/drive-tool-uis.js +425 -0
  744. package/dist/tools/drive-tool-uis.js.map +1 -0
  745. package/dist/tools/email-calendar-tool-uis.cjs +789 -0
  746. package/dist/tools/email-calendar-tool-uis.cjs.map +1 -0
  747. package/dist/tools/email-calendar-tool-uis.d.ts +129 -0
  748. package/dist/tools/email-calendar-tool-uis.js +789 -0
  749. package/dist/tools/email-calendar-tool-uis.js.map +1 -0
  750. package/dist/tools/ontology-tool-uis.cjs +83 -0
  751. package/dist/tools/ontology-tool-uis.cjs.map +1 -0
  752. package/dist/tools/ontology-tool-uis.d.ts +9 -0
  753. package/dist/tools/ontology-tool-uis.js +83 -0
  754. package/dist/tools/ontology-tool-uis.js.map +1 -0
  755. package/dist/tools/orchestration-tool-uis.cjs +586 -0
  756. package/dist/tools/orchestration-tool-uis.cjs.map +1 -0
  757. package/dist/tools/orchestration-tool-uis.d.ts +141 -0
  758. package/dist/tools/orchestration-tool-uis.js +586 -0
  759. package/dist/tools/orchestration-tool-uis.js.map +1 -0
  760. package/dist/tools/presentation-edit-tool-uis.cjs +516 -0
  761. package/dist/tools/presentation-edit-tool-uis.cjs.map +1 -0
  762. package/dist/tools/presentation-edit-tool-uis.d.ts +73 -0
  763. package/dist/tools/presentation-edit-tool-uis.js +516 -0
  764. package/dist/tools/presentation-edit-tool-uis.js.map +1 -0
  765. package/dist/tools/project-tool-uis.cjs +213 -0
  766. package/dist/tools/project-tool-uis.cjs.map +1 -0
  767. package/dist/tools/project-tool-uis.d.ts +14 -0
  768. package/dist/tools/project-tool-uis.js +213 -0
  769. package/dist/tools/project-tool-uis.js.map +1 -0
  770. package/dist/tools/sandbox-tool-uis.cjs +491 -0
  771. package/dist/tools/sandbox-tool-uis.cjs.map +1 -0
  772. package/dist/tools/sandbox-tool-uis.d.ts +116 -0
  773. package/dist/tools/sandbox-tool-uis.js +491 -0
  774. package/dist/tools/sandbox-tool-uis.js.map +1 -0
  775. package/dist/tools/sheet-query-tool-ui.cjs +138 -0
  776. package/dist/tools/sheet-query-tool-ui.cjs.map +1 -0
  777. package/dist/tools/sheet-query-tool-ui.d.ts +15 -0
  778. package/dist/tools/sheet-query-tool-ui.js +138 -0
  779. package/dist/tools/sheet-query-tool-ui.js.map +1 -0
  780. package/dist/tools/studio-screenshot-tool-uis.cjs +262 -0
  781. package/dist/tools/studio-screenshot-tool-uis.cjs.map +1 -0
  782. package/dist/tools/studio-screenshot-tool-uis.d.ts +52 -0
  783. package/dist/tools/studio-screenshot-tool-uis.js +262 -0
  784. package/dist/tools/studio-screenshot-tool-uis.js.map +1 -0
  785. package/dist/tools/subagent-task-tool-ui.cjs +24 -475
  786. package/dist/tools/subagent-task-tool-ui.cjs.map +1 -1
  787. package/dist/tools/subagent-task-tool-ui.d.ts +19 -103
  788. package/dist/tools/subagent-task-tool-ui.js +28 -479
  789. package/dist/tools/subagent-task-tool-ui.js.map +1 -1
  790. package/dist/tools/tool-summary.cjs +36 -0
  791. package/dist/tools/tool-summary.cjs.map +1 -1
  792. package/dist/tools/tool-summary.js +36 -0
  793. package/dist/tools/tool-summary.js.map +1 -1
  794. package/dist/tools/tool-uis.cjs +181 -53
  795. package/dist/tools/tool-uis.cjs.map +1 -1
  796. package/dist/tools/tool-uis.d.ts +40 -0
  797. package/dist/tools/tool-uis.js +183 -55
  798. package/dist/tools/tool-uis.js.map +1 -1
  799. package/dist/typed-interrupts/index.cjs +15 -0
  800. package/dist/typed-interrupts/index.cjs.map +1 -0
  801. package/dist/typed-interrupts/index.d.ts +20 -0
  802. package/dist/typed-interrupts/index.js +15 -0
  803. package/dist/typed-interrupts/index.js.map +1 -0
  804. package/dist/workbench/session-workbench-panes.cjs +6 -6
  805. package/dist/workbench/session-workbench-panes.cjs.map +1 -1
  806. package/package.json +28 -6
  807. package/dist/agent-runtime/src/chat-outbox-store.cjs +0 -510
  808. package/dist/agent-runtime/src/chat-outbox-store.cjs.map +0 -1
  809. package/dist/agent-runtime/src/chat-outbox-store.d.ts +0 -210
  810. package/dist/agent-runtime/src/chat-outbox-store.js +0 -510
  811. package/dist/agent-runtime/src/chat-outbox-store.js.map +0 -1
@@ -0,0 +1,57 @@
1
+ import type { LangChainMessage } from '@assistant-ui/react-langgraph';
2
+ /** The `highlight_in_asset` tool's name. */
3
+ export declare const HIGHLIGHT_IN_ASSET_TOOL = "highlight_in_asset";
4
+ /** The longest a highlight stays, as agora clamps it. */
5
+ export declare const AGENT_HIGHLIGHT_MAX_MS = 30000;
6
+ /** How long a highlight stays when the answer names no duration, as agora's default. */
7
+ export declare const AGENT_HIGHLIGHT_DEFAULT_MS = 5000;
8
+ /** A place the agent showed the person in an asset, once its call answered. */
9
+ export interface AgentHighlight {
10
+ /** The call's id: a highlight is reported once. */
11
+ key: string;
12
+ /** The asset, by its bare id. */
13
+ assetId: string;
14
+ /**
15
+ * Where in it, as the agent named it: the id and the references grammar's anchor query
16
+ * (`asset_x?anchor=pm_node&node_id=…`), or the bare id for the asset itself.
17
+ */
18
+ assetRef: string;
19
+ /** The tooltip to show over the place, if any. */
20
+ content: string | null;
21
+ /** How long the mark and the tooltip stay, clamped to `AGENT_HIGHLIGHT_MAX_MS`. */
22
+ durationMs: number;
23
+ }
24
+ /** The highlight one finished `highlight_in_asset` call showed, or null for a refusal or a failure. */
25
+ export declare function highlightOfCall({ toolCallId, result, isError, }: {
26
+ toolCallId: string;
27
+ result: unknown;
28
+ isError?: boolean;
29
+ }): AgentHighlight | null;
30
+ /**
31
+ * What the finished `highlight_in_asset` calls in `messages` showed the person, a `task` subagent's
32
+ * own calls included. A call still running has shown nothing yet.
33
+ */
34
+ export declare function agentHighlightsIn(messages: readonly LangChainMessage[]): AgentHighlight[];
35
+ /** Tells a host the places the agent shows, once each, from the states its conversation goes through. */
36
+ export interface AgentHighlightsReporter {
37
+ /**
38
+ * A state of the conversation: the highlights its latest turn showed since the last one. A
39
+ * thread's first state is history (nothing of it is shown again); a state of another thread
40
+ * starts again.
41
+ */
42
+ see(params: {
43
+ thread: string | null;
44
+ messages: readonly LangChainMessage[];
45
+ }): AgentHighlight[];
46
+ }
47
+ export declare function createAgentHighlightsReporter(): AgentHighlightsReporter;
48
+ /**
49
+ * Calls `onHighlight` once for each place the agent shows the person in this conversation
50
+ * (`highlight_in_asset`), as its call answers: never for history, or a call that failed or was
51
+ * refused. Render it inside `AthenaChat`, where the conversation's state is read. Nothing is read
52
+ * while `enabled` is false.
53
+ */
54
+ export declare function useAthenaAgentHighlights({ onHighlight, enabled, }: {
55
+ onHighlight: (highlight: AgentHighlight) => void;
56
+ enabled?: boolean;
57
+ }): void;
@@ -0,0 +1,100 @@
1
+ import { useStatewireState } from "@assistant-ui/react-statewire";
2
+ import { useRef, useEffect } from "react";
3
+ import { latestTurn } from "./agent-creations.js";
4
+ import { tryParseJson } from "./asset-utils.js";
5
+ import { isDeepAgentStateHydrated, readDeepAgentStreamValues, readDeepAgentStateThreadId } from "../agent-runtime/src/statewire-state.js";
6
+ import { TASK_TOOL_NAME } from "../agent-runtime/src/tool-names.js";
7
+ import { nestedMessagesFromArtifact } from "../agent-runtime/src/subagents.js";
8
+ import { isRunningToolPlaceholder } from "../agent-runtime/src/running-tool-placeholder.js";
9
+ import { getMessageText } from "../agent-runtime/src/message-text.js";
10
+ const HIGHLIGHT_IN_ASSET_TOOL = "highlight_in_asset";
11
+ const AGENT_HIGHLIGHT_MAX_MS = 3e4;
12
+ const AGENT_HIGHLIGHT_DEFAULT_MS = 5e3;
13
+ const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
14
+ function highlightOfCall({
15
+ toolCallId,
16
+ result,
17
+ isError
18
+ }) {
19
+ if (isError) return null;
20
+ const data = typeof result === "string" ? tryParseJson(result) : result;
21
+ if (!isRecord(data) || data.status !== "success") return null;
22
+ const assetRef = typeof data.assetRef === "string" ? data.assetRef.trim() : "";
23
+ const assetId = assetRef.split("?")[0] ?? "";
24
+ if (!assetId.startsWith("asset_")) return null;
25
+ const content = typeof data.content === "string" && data.content.trim() ? data.content.trim() : null;
26
+ const asked = typeof data.durationMs === "number" && Number.isFinite(data.durationMs) ? data.durationMs : null;
27
+ const durationMs = Math.max(
28
+ 0,
29
+ Math.min(asked ?? AGENT_HIGHLIGHT_DEFAULT_MS, AGENT_HIGHLIGHT_MAX_MS)
30
+ );
31
+ return { key: toolCallId, assetId, assetRef, content, durationMs };
32
+ }
33
+ function agentHighlightsIn(messages) {
34
+ const shown = [];
35
+ for (const message of messages) {
36
+ if (message.type !== "tool" || !message.tool_call_id || !message.name) continue;
37
+ if (message.name === TASK_TOOL_NAME) {
38
+ shown.push(...agentHighlightsIn(nestedMessagesFromArtifact(message.artifact)));
39
+ continue;
40
+ }
41
+ if (message.name !== HIGHLIGHT_IN_ASSET_TOOL || isRunningToolPlaceholder(message)) continue;
42
+ const highlight = highlightOfCall({
43
+ toolCallId: message.tool_call_id,
44
+ result: typeof message.content === "string" ? message.content : getMessageText(message),
45
+ isError: message.status === "error"
46
+ });
47
+ if (highlight) shown.push(highlight);
48
+ }
49
+ return shown;
50
+ }
51
+ function createAgentHighlightsReporter() {
52
+ let seen = null;
53
+ return {
54
+ see: ({ thread, messages }) => {
55
+ if (seen === null || seen.thread !== thread) {
56
+ seen = { thread, reported: new Set(agentHighlightsIn(messages).map(({ key }) => key)) };
57
+ return [];
58
+ }
59
+ const reported = seen.reported;
60
+ const fresh = agentHighlightsIn(latestTurn(messages)).filter(({ key }) => !reported.has(key));
61
+ for (const { key } of fresh) reported.add(key);
62
+ return fresh;
63
+ }
64
+ };
65
+ }
66
+ const selectState = (state) => state;
67
+ function useAthenaAgentHighlights({
68
+ onHighlight,
69
+ enabled = true
70
+ }) {
71
+ const state = useStatewireState(selectState);
72
+ const reporter = useRef(null);
73
+ const latest = useRef(onHighlight);
74
+ useEffect(() => {
75
+ latest.current = onHighlight;
76
+ }, [onHighlight]);
77
+ useEffect(() => {
78
+ if (!enabled) {
79
+ reporter.current = null;
80
+ return;
81
+ }
82
+ if (!isDeepAgentStateHydrated(state)) return;
83
+ reporter.current ?? (reporter.current = createAgentHighlightsReporter());
84
+ const shown = reporter.current.see({
85
+ thread: readDeepAgentStateThreadId(state),
86
+ messages: readDeepAgentStreamValues(state).messages ?? []
87
+ });
88
+ for (const highlight of shown) latest.current(highlight);
89
+ }, [state, enabled]);
90
+ }
91
+ export {
92
+ AGENT_HIGHLIGHT_DEFAULT_MS,
93
+ AGENT_HIGHLIGHT_MAX_MS,
94
+ HIGHLIGHT_IN_ASSET_TOOL,
95
+ agentHighlightsIn,
96
+ createAgentHighlightsReporter,
97
+ highlightOfCall,
98
+ useAthenaAgentHighlights
99
+ };
100
+ //# sourceMappingURL=agent-highlights.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-highlights.js","sources":["../../src/tools/agent-highlights.ts"],"sourcesContent":["'use client';\n\nimport type { LangChainMessage } from '@assistant-ui/react-langgraph';\nimport { useStatewireState } from '@assistant-ui/react-statewire';\nimport {\n getMessageText,\n isDeepAgentStateHydrated,\n isRunningToolPlaceholder,\n nestedMessagesFromArtifact,\n readDeepAgentStateThreadId,\n readDeepAgentStreamValues,\n TASK_TOOL_NAME,\n} from '@athenaintel/agent-runtime';\nimport { useEffect, useRef } from 'react';\nimport { latestTurn } from './agent-creations';\nimport { tryParseJson } from './asset-utils';\n\n/*\n * The places the agent shows the person (`highlight_in_asset`: \"flash and scroll the user to a\n * location inside an asset\", with a tooltip), read off the conversation's own state as the agent's\n * creations are (`agent-creations.ts`): the deep agent's runtime runs no tool's `streamCall`, so a\n * host that shows them (Athena's desktop app) reads them here. agora answers a highlight only for an\n * asset the person may view (its read gate); a refusal carries no `assetRef`, and shows nothing.\n */\n\n/** The `highlight_in_asset` tool's name. */\nexport const HIGHLIGHT_IN_ASSET_TOOL = 'highlight_in_asset';\n\n/** The longest a highlight stays, as agora clamps it. */\nexport const AGENT_HIGHLIGHT_MAX_MS = 30_000;\n/** How long a highlight stays when the answer names no duration, as agora's default. */\nexport const AGENT_HIGHLIGHT_DEFAULT_MS = 5_000;\n\n/** A place the agent showed the person in an asset, once its call answered. */\nexport interface AgentHighlight {\n /** The call's id: a highlight is reported once. */\n key: string;\n /** The asset, by its bare id. */\n assetId: string;\n /**\n * Where in it, as the agent named it: the id and the references grammar's anchor query\n * (`asset_x?anchor=pm_node&node_id=…`), or the bare id for the asset itself.\n */\n assetRef: string;\n /** The tooltip to show over the place, if any. */\n content: string | null;\n /** How long the mark and the tooltip stay, clamped to `AGENT_HIGHLIGHT_MAX_MS`. */\n durationMs: number;\n}\n\ntype AnyRecord = Record<string, unknown>;\n\nconst isRecord = (value: unknown): value is AnyRecord =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\n/** The highlight one finished `highlight_in_asset` call showed, or null for a refusal or a failure. */\nexport function highlightOfCall({\n toolCallId,\n result,\n isError,\n}: {\n toolCallId: string;\n result: unknown;\n isError?: boolean;\n}): AgentHighlight | null {\n if (isError) return null;\n const data = typeof result === 'string' ? tryParseJson(result) : result;\n if (!isRecord(data) || data.status !== 'success') return null;\n const assetRef = typeof data.assetRef === 'string' ? data.assetRef.trim() : '';\n const assetId = assetRef.split('?')[0] ?? '';\n if (!assetId.startsWith('asset_')) return null;\n const content =\n typeof data.content === 'string' && data.content.trim() ? data.content.trim() : null;\n const asked =\n typeof data.durationMs === 'number' && Number.isFinite(data.durationMs) ? data.durationMs : null;\n const durationMs = Math.max(\n 0,\n Math.min(asked ?? AGENT_HIGHLIGHT_DEFAULT_MS, AGENT_HIGHLIGHT_MAX_MS),\n );\n return { key: toolCallId, assetId, assetRef, content, durationMs };\n}\n\n/**\n * What the finished `highlight_in_asset` calls in `messages` showed the person, a `task` subagent's\n * own calls included. A call still running has shown nothing yet.\n */\nexport function agentHighlightsIn(messages: readonly LangChainMessage[]): AgentHighlight[] {\n const shown: AgentHighlight[] = [];\n for (const message of messages) {\n if (message.type !== 'tool' || !message.tool_call_id || !message.name) continue;\n if (message.name === TASK_TOOL_NAME) {\n shown.push(...agentHighlightsIn(nestedMessagesFromArtifact(message.artifact)));\n continue;\n }\n if (message.name !== HIGHLIGHT_IN_ASSET_TOOL || isRunningToolPlaceholder(message)) continue;\n const highlight = highlightOfCall({\n toolCallId: message.tool_call_id,\n result: typeof message.content === 'string' ? message.content : getMessageText(message),\n isError: message.status === 'error',\n });\n if (highlight) shown.push(highlight);\n }\n return shown;\n}\n\n/** Tells a host the places the agent shows, once each, from the states its conversation goes through. */\nexport interface AgentHighlightsReporter {\n /**\n * A state of the conversation: the highlights its latest turn showed since the last one. A\n * thread's first state is history (nothing of it is shown again); a state of another thread\n * starts again.\n */\n see(params: { thread: string | null; messages: readonly LangChainMessage[] }): AgentHighlight[];\n}\n\nexport function createAgentHighlightsReporter(): AgentHighlightsReporter {\n let seen: { thread: string | null; reported: Set<string> } | null = null;\n return {\n see: ({ thread, messages }) => {\n if (seen === null || seen.thread !== thread) {\n seen = { thread, reported: new Set(agentHighlightsIn(messages).map(({ key }) => key)) };\n return [];\n }\n const reported = seen.reported;\n const fresh = agentHighlightsIn(latestTurn(messages)).filter(({ key }) => !reported.has(key));\n for (const { key } of fresh) reported.add(key);\n return fresh;\n },\n };\n}\n\nconst selectState = (state: unknown): unknown => state;\n\n/**\n * Calls `onHighlight` once for each place the agent shows the person in this conversation\n * (`highlight_in_asset`), as its call answers: never for history, or a call that failed or was\n * refused. Render it inside `AthenaChat`, where the conversation's state is read. Nothing is read\n * while `enabled` is false.\n */\nexport function useAthenaAgentHighlights({\n onHighlight,\n enabled = true,\n}: {\n onHighlight: (highlight: AgentHighlight) => void;\n enabled?: boolean;\n}): void {\n const state = useStatewireState(selectState);\n const reporter = useRef<AgentHighlightsReporter | null>(null);\n const latest = useRef(onHighlight);\n useEffect(() => {\n latest.current = onHighlight;\n }, [onHighlight]);\n useEffect(() => {\n if (!enabled) {\n reporter.current = null;\n return;\n }\n if (!isDeepAgentStateHydrated(state)) return;\n reporter.current ??= createAgentHighlightsReporter();\n const shown = reporter.current.see({\n thread: readDeepAgentStateThreadId(state),\n messages: readDeepAgentStreamValues(state).messages ?? [],\n });\n for (const highlight of shown) latest.current(highlight);\n }, [state, enabled]);\n}\n"],"names":[],"mappings":"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"}
@@ -147,4 +147,5 @@ const AppendDocumentToolUI = require$$0.memo(
147
147
  );
148
148
  AppendDocumentToolUI.displayName = "AppendDocumentToolUI";
149
149
  exports.AppendDocumentToolUI = AppendDocumentToolUI;
150
+ exports.MarkdownPreview = MarkdownPreview;
150
151
  //# sourceMappingURL=append-document-tool-ui.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"append-document-tool-ui.cjs","sources":["../../src/tools/append-document-tool-ui.tsx"],"sourcesContent":["import { memo, useMemo, useState } from \"react\";\nimport type { ToolCallMessagePartComponent } from \"@assistant-ui/react\";\nimport { useEditor, EditorContent } from \"@tiptap/react\";\nimport StarterKit from \"@tiptap/starter-kit\";\nimport Link from \"@tiptap/extension-link\";\nimport { Markdown } from \"tiptap-markdown\";\nimport {\n CheckCircle2Icon,\n ChevronDownIcon,\n FileTextIcon,\n LoaderIcon,\n AlertCircleIcon,\n NotebookPenIcon,\n} from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\nimport { getAssetInfo, tryParseJson } from \"./asset-utils\";\n\nconst markdownPreviewExtensions = [\n StarterKit.configure({\n // Tiptap 3 StarterKit also bundles these; the preview registers its own link.\n link: false,\n underline: false,\n listKeymap: false,\n trailingNode: false,\n codeBlock: {\n HTMLAttributes: {\n class: \"rounded bg-muted p-2 font-mono text-[11px]\",\n },\n },\n }),\n Link.configure({\n openOnClick: true,\n HTMLAttributes: {\n class: \"text-blue-600 underline decoration-blue-300 hover:text-blue-700\",\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n },\n }),\n Markdown.configure({\n html: false,\n tightLists: true,\n linkify: true,\n breaks: true,\n transformPastedText: false,\n transformCopiedText: false,\n }),\n];\n\nfunction MarkdownPreview({ content }: { content: string }) {\n const editor = useEditor({\n immediatelyRender: true,\n extensions: markdownPreviewExtensions,\n content,\n editable: false,\n editorProps: {\n attributes: {\n class: \"prose prose-sm max-w-none focus:outline-none\",\n },\n },\n });\n\n return <EditorContent editor={editor} />;\n}\n\nconst AppendDocumentToolUIImpl: ToolCallMessagePartComponent = ({\n args,\n result,\n status,\n}) => {\n const [expanded, setExpanded] = useState(false);\n\n const typedArgs = args as Record<string, unknown> | undefined;\n const resultData = useMemo(() => {\n if (!result) return null;\n if (typeof result === \"string\") return tryParseJson(result);\n if (typeof result === \"object\") {\n const obj = result as Record<string, unknown>;\n if (typeof obj.result === \"string\") return tryParseJson(obj.result) ?? obj;\n return obj;\n }\n return null;\n }, [result]);\n\n const assetId = (typedArgs?.asset_id as string) ?? \"\";\n const markdownText = ((typedArgs?.markdown_text ?? typedArgs?.markdownText) as string) ?? \"\";\n const asset = getAssetInfo(assetId);\n\n const isRunning = status?.type === \"running\";\n const isComplete = status?.type === \"complete\";\n const isError = status?.type === \"incomplete\";\n\n const wordCount = resultData?.word_count as number | undefined;\n const lineCount = resultData?.non_empty_line_count as number | undefined;\n const msg = resultData?.msg as string | undefined;\n const isSuccess = isComplete && (msg?.toLowerCase().includes(\"success\") ?? true);\n\n return (\n <div className=\"my-1.5 w-full overflow-hidden rounded-xl border bg-background shadow-sm\">\n {/* Header */}\n <div className=\"flex items-center gap-3 px-4 py-3\">\n <div\n className={cn(\n \"flex size-9 shrink-0 items-center justify-center rounded-lg\",\n isRunning && \"bg-blue-50 text-blue-600\",\n isComplete && isSuccess && \"bg-emerald-50 text-emerald-600\",\n isComplete && !isSuccess && \"bg-amber-50 text-amber-600\",\n isError && \"bg-red-50 text-red-500\",\n !isRunning && !isComplete && !isError && \"bg-muted text-muted-foreground\",\n )}\n >\n {isRunning ? (\n <LoaderIcon className=\"size-4 animate-spin\" />\n ) : isError ? (\n <AlertCircleIcon className=\"size-4\" />\n ) : (\n <NotebookPenIcon className=\"size-4\" />\n )}\n </div>\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-[13px] font-semibold\">\n {isRunning ? \"Writing to document...\" : \"Appended content to document\"}\n </span>\n {isComplete && isSuccess && (\n <CheckCircle2Icon className=\"size-3.5 text-emerald-500\" />\n )}\n </div>\n <div className=\"flex items-center gap-1.5\">\n <FileTextIcon className=\"size-4\" />\n <span className=\"text-[12px] text-muted-foreground\">{asset.name}</span>\n </div>\n </div>\n\n {/* Stats badges */}\n {isComplete && (wordCount || lineCount) && (\n <div className=\"flex items-center gap-2\">\n {lineCount ? (\n <span className=\"rounded-full bg-muted px-2 py-0.5 text-[10px] font-medium text-muted-foreground\">\n {lineCount} lines\n </span>\n ) : null}\n {wordCount ? (\n <span className=\"rounded-full bg-muted px-2 py-0.5 text-[10px] font-medium text-muted-foreground\">\n {wordCount.toLocaleString()} words\n </span>\n ) : null}\n </div>\n )}\n </div>\n\n {/* Content preview */}\n {markdownText && (\n <div className=\"border-t\">\n <button\n type=\"button\"\n onClick={() => setExpanded(!expanded)}\n className=\"flex w-full items-center gap-2 px-4 py-2 text-left text-[11px] font-medium text-muted-foreground transition-colors hover:bg-muted/50\"\n >\n <ChevronDownIcon\n className={cn(\n \"size-3.5 shrink-0 transition-transform duration-200\",\n !expanded && \"-rotate-90\",\n )}\n />\n <span>{expanded ? \"Hide content\" : \"Show content preview\"}</span>\n </button>\n\n {expanded && (\n <div className=\"max-h-72 overflow-y-auto border-t bg-muted/30 px-4 py-3\">\n <MarkdownPreview content={markdownText} />\n </div>\n )}\n </div>\n )}\n </div>\n );\n};\n\nexport const AppendDocumentToolUI = memo(\n AppendDocumentToolUIImpl,\n) as unknown as ToolCallMessagePartComponent;\n\nAppendDocumentToolUI.displayName = \"AppendDocumentToolUI\";\n"],"names":["Markdown","useEditor","jsx","EditorContent","useState","useMemo","tryParseJson","getAssetInfo","jsxs","cn","LoaderIcon","AlertCircleIcon","NotebookPenIcon","CheckCircle2Icon","FileTextIcon","ChevronDownIcon","memo"],"mappings":"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"}
1
+ {"version":3,"file":"append-document-tool-ui.cjs","sources":["../../src/tools/append-document-tool-ui.tsx"],"sourcesContent":["import { memo, useMemo, useState } from \"react\";\nimport type { ToolCallMessagePartComponent } from \"@assistant-ui/react\";\nimport { useEditor, EditorContent } from \"@tiptap/react\";\nimport StarterKit from \"@tiptap/starter-kit\";\nimport Link from \"@tiptap/extension-link\";\nimport { Markdown } from \"tiptap-markdown\";\nimport {\n CheckCircle2Icon,\n ChevronDownIcon,\n FileTextIcon,\n LoaderIcon,\n AlertCircleIcon,\n NotebookPenIcon,\n} from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\nimport { getAssetInfo, tryParseJson } from \"./asset-utils\";\n\nconst markdownPreviewExtensions = [\n StarterKit.configure({\n // Tiptap 3 StarterKit also bundles these; the preview registers its own link.\n link: false,\n underline: false,\n listKeymap: false,\n trailingNode: false,\n codeBlock: {\n HTMLAttributes: {\n class: \"rounded bg-muted p-2 font-mono text-[11px]\",\n },\n },\n }),\n Link.configure({\n openOnClick: true,\n HTMLAttributes: {\n class: \"text-blue-600 underline decoration-blue-300 hover:text-blue-700\",\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n },\n }),\n Markdown.configure({\n html: false,\n tightLists: true,\n linkify: true,\n breaks: true,\n transformPastedText: false,\n transformCopiedText: false,\n }),\n];\n\n/**\n * Markdown a call wrote, read-only, as the document editor renders it. Raw\n * HTML in the markdown stays text (`html: false`).\n */\nexport function MarkdownPreview({ content }: { content: string }) {\n const editor = useEditor({\n immediatelyRender: true,\n extensions: markdownPreviewExtensions,\n content,\n editable: false,\n editorProps: {\n attributes: {\n class: \"prose prose-sm max-w-none focus:outline-none\",\n },\n },\n });\n\n return <EditorContent editor={editor} />;\n}\n\nconst AppendDocumentToolUIImpl: ToolCallMessagePartComponent = ({\n args,\n result,\n status,\n}) => {\n const [expanded, setExpanded] = useState(false);\n\n const typedArgs = args as Record<string, unknown> | undefined;\n const resultData = useMemo(() => {\n if (!result) return null;\n if (typeof result === \"string\") return tryParseJson(result);\n if (typeof result === \"object\") {\n const obj = result as Record<string, unknown>;\n if (typeof obj.result === \"string\") return tryParseJson(obj.result) ?? obj;\n return obj;\n }\n return null;\n }, [result]);\n\n const assetId = (typedArgs?.asset_id as string) ?? \"\";\n const markdownText = ((typedArgs?.markdown_text ?? typedArgs?.markdownText) as string) ?? \"\";\n const asset = getAssetInfo(assetId);\n\n const isRunning = status?.type === \"running\";\n const isComplete = status?.type === \"complete\";\n const isError = status?.type === \"incomplete\";\n\n const wordCount = resultData?.word_count as number | undefined;\n const lineCount = resultData?.non_empty_line_count as number | undefined;\n const msg = resultData?.msg as string | undefined;\n const isSuccess = isComplete && (msg?.toLowerCase().includes(\"success\") ?? true);\n\n return (\n <div className=\"my-1.5 w-full overflow-hidden rounded-xl border bg-background shadow-sm\">\n {/* Header */}\n <div className=\"flex items-center gap-3 px-4 py-3\">\n <div\n className={cn(\n \"flex size-9 shrink-0 items-center justify-center rounded-lg\",\n isRunning && \"bg-blue-50 text-blue-600\",\n isComplete && isSuccess && \"bg-emerald-50 text-emerald-600\",\n isComplete && !isSuccess && \"bg-amber-50 text-amber-600\",\n isError && \"bg-red-50 text-red-500\",\n !isRunning && !isComplete && !isError && \"bg-muted text-muted-foreground\",\n )}\n >\n {isRunning ? (\n <LoaderIcon className=\"size-4 animate-spin\" />\n ) : isError ? (\n <AlertCircleIcon className=\"size-4\" />\n ) : (\n <NotebookPenIcon className=\"size-4\" />\n )}\n </div>\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-[13px] font-semibold\">\n {isRunning ? \"Writing to document...\" : \"Appended content to document\"}\n </span>\n {isComplete && isSuccess && (\n <CheckCircle2Icon className=\"size-3.5 text-emerald-500\" />\n )}\n </div>\n <div className=\"flex items-center gap-1.5\">\n <FileTextIcon className=\"size-4\" />\n <span className=\"text-[12px] text-muted-foreground\">{asset.name}</span>\n </div>\n </div>\n\n {/* Stats badges */}\n {isComplete && (wordCount || lineCount) && (\n <div className=\"flex items-center gap-2\">\n {lineCount ? (\n <span className=\"rounded-full bg-muted px-2 py-0.5 text-[10px] font-medium text-muted-foreground\">\n {lineCount} lines\n </span>\n ) : null}\n {wordCount ? (\n <span className=\"rounded-full bg-muted px-2 py-0.5 text-[10px] font-medium text-muted-foreground\">\n {wordCount.toLocaleString()} words\n </span>\n ) : null}\n </div>\n )}\n </div>\n\n {/* Content preview */}\n {markdownText && (\n <div className=\"border-t\">\n <button\n type=\"button\"\n onClick={() => setExpanded(!expanded)}\n className=\"flex w-full items-center gap-2 px-4 py-2 text-left text-[11px] font-medium text-muted-foreground transition-colors hover:bg-muted/50\"\n >\n <ChevronDownIcon\n className={cn(\n \"size-3.5 shrink-0 transition-transform duration-200\",\n !expanded && \"-rotate-90\",\n )}\n />\n <span>{expanded ? \"Hide content\" : \"Show content preview\"}</span>\n </button>\n\n {expanded && (\n <div className=\"max-h-72 overflow-y-auto border-t bg-muted/30 px-4 py-3\">\n <MarkdownPreview content={markdownText} />\n </div>\n )}\n </div>\n )}\n </div>\n );\n};\n\nexport const AppendDocumentToolUI = memo(\n AppendDocumentToolUIImpl,\n) as unknown as ToolCallMessagePartComponent;\n\nAppendDocumentToolUI.displayName = \"AppendDocumentToolUI\";\n"],"names":["Markdown","useEditor","jsx","EditorContent","useState","useMemo","tryParseJson","getAssetInfo","jsxs","cn","LoaderIcon","AlertCircleIcon","NotebookPenIcon","CheckCircle2Icon","FileTextIcon","ChevronDownIcon","memo"],"mappings":"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"}
@@ -1,2 +1,9 @@
1
1
  import type { ToolCallMessagePartComponent } from "@assistant-ui/react";
2
+ /**
3
+ * Markdown a call wrote, read-only, as the document editor renders it. Raw
4
+ * HTML in the markdown stays text (`html: false`).
5
+ */
6
+ export declare function MarkdownPreview({ content }: {
7
+ content: string;
8
+ }): import("react").JSX.Element;
2
9
  export declare const AppendDocumentToolUI: ToolCallMessagePartComponent;
@@ -145,6 +145,7 @@ const AppendDocumentToolUI = memo(
145
145
  );
146
146
  AppendDocumentToolUI.displayName = "AppendDocumentToolUI";
147
147
  export {
148
- AppendDocumentToolUI
148
+ AppendDocumentToolUI,
149
+ MarkdownPreview
149
150
  };
150
151
  //# sourceMappingURL=append-document-tool-ui.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"append-document-tool-ui.js","sources":["../../src/tools/append-document-tool-ui.tsx"],"sourcesContent":["import { memo, useMemo, useState } from \"react\";\nimport type { ToolCallMessagePartComponent } from \"@assistant-ui/react\";\nimport { useEditor, EditorContent } from \"@tiptap/react\";\nimport StarterKit from \"@tiptap/starter-kit\";\nimport Link from \"@tiptap/extension-link\";\nimport { Markdown } from \"tiptap-markdown\";\nimport {\n CheckCircle2Icon,\n ChevronDownIcon,\n FileTextIcon,\n LoaderIcon,\n AlertCircleIcon,\n NotebookPenIcon,\n} from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\nimport { getAssetInfo, tryParseJson } from \"./asset-utils\";\n\nconst markdownPreviewExtensions = [\n StarterKit.configure({\n // Tiptap 3 StarterKit also bundles these; the preview registers its own link.\n link: false,\n underline: false,\n listKeymap: false,\n trailingNode: false,\n codeBlock: {\n HTMLAttributes: {\n class: \"rounded bg-muted p-2 font-mono text-[11px]\",\n },\n },\n }),\n Link.configure({\n openOnClick: true,\n HTMLAttributes: {\n class: \"text-blue-600 underline decoration-blue-300 hover:text-blue-700\",\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n },\n }),\n Markdown.configure({\n html: false,\n tightLists: true,\n linkify: true,\n breaks: true,\n transformPastedText: false,\n transformCopiedText: false,\n }),\n];\n\nfunction MarkdownPreview({ content }: { content: string }) {\n const editor = useEditor({\n immediatelyRender: true,\n extensions: markdownPreviewExtensions,\n content,\n editable: false,\n editorProps: {\n attributes: {\n class: \"prose prose-sm max-w-none focus:outline-none\",\n },\n },\n });\n\n return <EditorContent editor={editor} />;\n}\n\nconst AppendDocumentToolUIImpl: ToolCallMessagePartComponent = ({\n args,\n result,\n status,\n}) => {\n const [expanded, setExpanded] = useState(false);\n\n const typedArgs = args as Record<string, unknown> | undefined;\n const resultData = useMemo(() => {\n if (!result) return null;\n if (typeof result === \"string\") return tryParseJson(result);\n if (typeof result === \"object\") {\n const obj = result as Record<string, unknown>;\n if (typeof obj.result === \"string\") return tryParseJson(obj.result) ?? obj;\n return obj;\n }\n return null;\n }, [result]);\n\n const assetId = (typedArgs?.asset_id as string) ?? \"\";\n const markdownText = ((typedArgs?.markdown_text ?? typedArgs?.markdownText) as string) ?? \"\";\n const asset = getAssetInfo(assetId);\n\n const isRunning = status?.type === \"running\";\n const isComplete = status?.type === \"complete\";\n const isError = status?.type === \"incomplete\";\n\n const wordCount = resultData?.word_count as number | undefined;\n const lineCount = resultData?.non_empty_line_count as number | undefined;\n const msg = resultData?.msg as string | undefined;\n const isSuccess = isComplete && (msg?.toLowerCase().includes(\"success\") ?? true);\n\n return (\n <div className=\"my-1.5 w-full overflow-hidden rounded-xl border bg-background shadow-sm\">\n {/* Header */}\n <div className=\"flex items-center gap-3 px-4 py-3\">\n <div\n className={cn(\n \"flex size-9 shrink-0 items-center justify-center rounded-lg\",\n isRunning && \"bg-blue-50 text-blue-600\",\n isComplete && isSuccess && \"bg-emerald-50 text-emerald-600\",\n isComplete && !isSuccess && \"bg-amber-50 text-amber-600\",\n isError && \"bg-red-50 text-red-500\",\n !isRunning && !isComplete && !isError && \"bg-muted text-muted-foreground\",\n )}\n >\n {isRunning ? (\n <LoaderIcon className=\"size-4 animate-spin\" />\n ) : isError ? (\n <AlertCircleIcon className=\"size-4\" />\n ) : (\n <NotebookPenIcon className=\"size-4\" />\n )}\n </div>\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-[13px] font-semibold\">\n {isRunning ? \"Writing to document...\" : \"Appended content to document\"}\n </span>\n {isComplete && isSuccess && (\n <CheckCircle2Icon className=\"size-3.5 text-emerald-500\" />\n )}\n </div>\n <div className=\"flex items-center gap-1.5\">\n <FileTextIcon className=\"size-4\" />\n <span className=\"text-[12px] text-muted-foreground\">{asset.name}</span>\n </div>\n </div>\n\n {/* Stats badges */}\n {isComplete && (wordCount || lineCount) && (\n <div className=\"flex items-center gap-2\">\n {lineCount ? (\n <span className=\"rounded-full bg-muted px-2 py-0.5 text-[10px] font-medium text-muted-foreground\">\n {lineCount} lines\n </span>\n ) : null}\n {wordCount ? (\n <span className=\"rounded-full bg-muted px-2 py-0.5 text-[10px] font-medium text-muted-foreground\">\n {wordCount.toLocaleString()} words\n </span>\n ) : null}\n </div>\n )}\n </div>\n\n {/* Content preview */}\n {markdownText && (\n <div className=\"border-t\">\n <button\n type=\"button\"\n onClick={() => setExpanded(!expanded)}\n className=\"flex w-full items-center gap-2 px-4 py-2 text-left text-[11px] font-medium text-muted-foreground transition-colors hover:bg-muted/50\"\n >\n <ChevronDownIcon\n className={cn(\n \"size-3.5 shrink-0 transition-transform duration-200\",\n !expanded && \"-rotate-90\",\n )}\n />\n <span>{expanded ? \"Hide content\" : \"Show content preview\"}</span>\n </button>\n\n {expanded && (\n <div className=\"max-h-72 overflow-y-auto border-t bg-muted/30 px-4 py-3\">\n <MarkdownPreview content={markdownText} />\n </div>\n )}\n </div>\n )}\n </div>\n );\n};\n\nexport const AppendDocumentToolUI = memo(\n AppendDocumentToolUIImpl,\n) as unknown as ToolCallMessagePartComponent;\n\nAppendDocumentToolUI.displayName = \"AppendDocumentToolUI\";\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"append-document-tool-ui.js","sources":["../../src/tools/append-document-tool-ui.tsx"],"sourcesContent":["import { memo, useMemo, useState } from \"react\";\nimport type { ToolCallMessagePartComponent } from \"@assistant-ui/react\";\nimport { useEditor, EditorContent } from \"@tiptap/react\";\nimport StarterKit from \"@tiptap/starter-kit\";\nimport Link from \"@tiptap/extension-link\";\nimport { Markdown } from \"tiptap-markdown\";\nimport {\n CheckCircle2Icon,\n ChevronDownIcon,\n FileTextIcon,\n LoaderIcon,\n AlertCircleIcon,\n NotebookPenIcon,\n} from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\nimport { getAssetInfo, tryParseJson } from \"./asset-utils\";\n\nconst markdownPreviewExtensions = [\n StarterKit.configure({\n // Tiptap 3 StarterKit also bundles these; the preview registers its own link.\n link: false,\n underline: false,\n listKeymap: false,\n trailingNode: false,\n codeBlock: {\n HTMLAttributes: {\n class: \"rounded bg-muted p-2 font-mono text-[11px]\",\n },\n },\n }),\n Link.configure({\n openOnClick: true,\n HTMLAttributes: {\n class: \"text-blue-600 underline decoration-blue-300 hover:text-blue-700\",\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n },\n }),\n Markdown.configure({\n html: false,\n tightLists: true,\n linkify: true,\n breaks: true,\n transformPastedText: false,\n transformCopiedText: false,\n }),\n];\n\n/**\n * Markdown a call wrote, read-only, as the document editor renders it. Raw\n * HTML in the markdown stays text (`html: false`).\n */\nexport function MarkdownPreview({ content }: { content: string }) {\n const editor = useEditor({\n immediatelyRender: true,\n extensions: markdownPreviewExtensions,\n content,\n editable: false,\n editorProps: {\n attributes: {\n class: \"prose prose-sm max-w-none focus:outline-none\",\n },\n },\n });\n\n return <EditorContent editor={editor} />;\n}\n\nconst AppendDocumentToolUIImpl: ToolCallMessagePartComponent = ({\n args,\n result,\n status,\n}) => {\n const [expanded, setExpanded] = useState(false);\n\n const typedArgs = args as Record<string, unknown> | undefined;\n const resultData = useMemo(() => {\n if (!result) return null;\n if (typeof result === \"string\") return tryParseJson(result);\n if (typeof result === \"object\") {\n const obj = result as Record<string, unknown>;\n if (typeof obj.result === \"string\") return tryParseJson(obj.result) ?? obj;\n return obj;\n }\n return null;\n }, [result]);\n\n const assetId = (typedArgs?.asset_id as string) ?? \"\";\n const markdownText = ((typedArgs?.markdown_text ?? typedArgs?.markdownText) as string) ?? \"\";\n const asset = getAssetInfo(assetId);\n\n const isRunning = status?.type === \"running\";\n const isComplete = status?.type === \"complete\";\n const isError = status?.type === \"incomplete\";\n\n const wordCount = resultData?.word_count as number | undefined;\n const lineCount = resultData?.non_empty_line_count as number | undefined;\n const msg = resultData?.msg as string | undefined;\n const isSuccess = isComplete && (msg?.toLowerCase().includes(\"success\") ?? true);\n\n return (\n <div className=\"my-1.5 w-full overflow-hidden rounded-xl border bg-background shadow-sm\">\n {/* Header */}\n <div className=\"flex items-center gap-3 px-4 py-3\">\n <div\n className={cn(\n \"flex size-9 shrink-0 items-center justify-center rounded-lg\",\n isRunning && \"bg-blue-50 text-blue-600\",\n isComplete && isSuccess && \"bg-emerald-50 text-emerald-600\",\n isComplete && !isSuccess && \"bg-amber-50 text-amber-600\",\n isError && \"bg-red-50 text-red-500\",\n !isRunning && !isComplete && !isError && \"bg-muted text-muted-foreground\",\n )}\n >\n {isRunning ? (\n <LoaderIcon className=\"size-4 animate-spin\" />\n ) : isError ? (\n <AlertCircleIcon className=\"size-4\" />\n ) : (\n <NotebookPenIcon className=\"size-4\" />\n )}\n </div>\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-[13px] font-semibold\">\n {isRunning ? \"Writing to document...\" : \"Appended content to document\"}\n </span>\n {isComplete && isSuccess && (\n <CheckCircle2Icon className=\"size-3.5 text-emerald-500\" />\n )}\n </div>\n <div className=\"flex items-center gap-1.5\">\n <FileTextIcon className=\"size-4\" />\n <span className=\"text-[12px] text-muted-foreground\">{asset.name}</span>\n </div>\n </div>\n\n {/* Stats badges */}\n {isComplete && (wordCount || lineCount) && (\n <div className=\"flex items-center gap-2\">\n {lineCount ? (\n <span className=\"rounded-full bg-muted px-2 py-0.5 text-[10px] font-medium text-muted-foreground\">\n {lineCount} lines\n </span>\n ) : null}\n {wordCount ? (\n <span className=\"rounded-full bg-muted px-2 py-0.5 text-[10px] font-medium text-muted-foreground\">\n {wordCount.toLocaleString()} words\n </span>\n ) : null}\n </div>\n )}\n </div>\n\n {/* Content preview */}\n {markdownText && (\n <div className=\"border-t\">\n <button\n type=\"button\"\n onClick={() => setExpanded(!expanded)}\n className=\"flex w-full items-center gap-2 px-4 py-2 text-left text-[11px] font-medium text-muted-foreground transition-colors hover:bg-muted/50\"\n >\n <ChevronDownIcon\n className={cn(\n \"size-3.5 shrink-0 transition-transform duration-200\",\n !expanded && \"-rotate-90\",\n )}\n />\n <span>{expanded ? \"Hide content\" : \"Show content preview\"}</span>\n </button>\n\n {expanded && (\n <div className=\"max-h-72 overflow-y-auto border-t bg-muted/30 px-4 py-3\">\n <MarkdownPreview content={markdownText} />\n </div>\n )}\n </div>\n )}\n </div>\n );\n};\n\nexport const AppendDocumentToolUI = memo(\n AppendDocumentToolUIImpl,\n) as unknown as ToolCallMessagePartComponent;\n\nAppendDocumentToolUI.displayName = \"AppendDocumentToolUI\";\n"],"names":[],"mappings":"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"}
@@ -2,6 +2,8 @@
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const assetPanelStore = require("../assets/asset-panel-store.cjs");
4
4
  const assetUtils = require("./asset-utils.cjs");
5
+ const toolNames = require("../agent-runtime/src/tool-names.cjs");
6
+ const ptcSubcalls = require("../agent-runtime/src/ptc-subcalls.cjs");
5
7
  const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
6
8
  const normalizeResult = (result) => {
7
9
  if (!result) return null;
@@ -38,86 +40,157 @@ const pickNumber = (...candidates) => {
38
40
  }
39
41
  return void 0;
40
42
  };
41
- const autoOpen = (assetId, options = {}) => {
43
+ const AUTO_OPEN_SPECS = {
44
+ // Top-level asset creators
45
+ create_new_document: { type: "document", kind: "created" },
46
+ create_document_from_markdown: { type: "document", kind: "created" },
47
+ create_new_sheet: { type: "spreadsheet", kind: "created" },
48
+ create_powerpoint_deck: { type: "presentation", kind: "created" },
49
+ create_presentation_pptx_studio: { type: "presentation", kind: "created" },
50
+ create_new_notebook: { type: "notebook", kind: "created" },
51
+ // Open / read existing assets
52
+ open_asset_in_workspace: { type: "unknown", kind: "shown", from: "args" },
53
+ // Code execution that lands on a deck/slide
54
+ execute_presentation_code: { type: "presentation", kind: "touched" },
55
+ // Media capture: a screenshot or clip of a video, a new asset
56
+ capture_moment: { type: "unknown", kind: "created" },
57
+ // Studio PTC sub-calls (nested SDK commands): as nested tool calls where a runtime nests them, else
58
+ // read off the script's call once it answers (`studioCreations`).
59
+ CreateWorkbook: { type: "spreadsheet", kind: "created" },
60
+ AddSheet: { type: "spreadsheet", kind: "touched" },
61
+ OpenWorkbook: { type: "spreadsheet", kind: "touched" },
62
+ CreatePresentation: { type: "presentation", kind: "created" },
63
+ OpenPresentation: { type: "presentation", kind: "touched", preserveExistingSlide: true },
64
+ AddSlide: { type: "presentation", kind: "touched" },
65
+ CreateDocument: { type: "document", kind: "created" },
66
+ CreateParagraph: { type: "document", kind: "touched" },
67
+ OpenDocument: { type: "document", kind: "touched" }
68
+ };
69
+ const isAutoOpenTool = (tool) => Object.hasOwn(AUTO_OPEN_SPECS, tool);
70
+ const answerOpensNothing = ({
71
+ isError,
72
+ data
73
+ }) => isError === true || (data == null ? void 0 : data.status) === "error" || (data == null ? void 0 : data.followModeOff) === true;
74
+ function openAutomatically({
75
+ assetId,
76
+ tool,
77
+ spec,
78
+ slideNumber
79
+ }) {
42
80
  const store = assetPanelStore.useAssetPanelStore.getState();
43
- if (!store.markAutoOpened(assetId)) return;
81
+ if (!store.markAutoOpened(assetId, spec.kind)) return;
44
82
  const existing = store.tabs.find((tab) => tab.id === assetId);
45
- const keepCurrentSlide = options.preserveExistingSlide && existing;
83
+ const keepCurrentSlide = spec.preserveExistingSlide && existing;
46
84
  store.openAsset(assetId, {
47
- type: options.type ?? "unknown",
48
- // A host's own opener tells an open nobody clicked from one the person asked for.
85
+ type: spec.type,
86
+ // A host's own opener tells an open nobody clicked from one the person asked for, and what
87
+ // the tool did with the asset.
49
88
  origin: "auto",
50
- ...keepCurrentSlide || options.slideNumber === void 0 ? {} : { slideNumber: options.slideNumber }
89
+ autoOpen: { tool, kind: spec.kind },
90
+ ...keepCurrentSlide || slideNumber === void 0 ? {} : { slideNumber }
51
91
  });
52
- };
53
- const openOnResult = (type, extra) => ({
54
- streamCall: async (reader) => {
55
- const { result } = await reader.response.get();
56
- const data = normalizeResult(result);
57
- const assetId = pickAssetId(
58
- data == null ? void 0 : data.asset_id,
59
- data == null ? void 0 : data.assetId,
60
- data == null ? void 0 : data.id
61
- );
62
- if (!assetId) return;
63
- let slideNumber;
64
- if ((extra == null ? void 0 : extra.slideNumberFrom) !== "args") {
65
- slideNumber = pickNumber(
66
- data == null ? void 0 : data.slide_number,
67
- data == null ? void 0 : data.slideNumber,
68
- data == null ? void 0 : data.targetSlideNumber,
69
- data == null ? void 0 : data.target_slide_number
70
- );
92
+ }
93
+ function studioCreations({
94
+ artifact
95
+ }) {
96
+ return ptcSubcalls.ptcSubcallsFromArtifact(artifact).flatMap((call) => {
97
+ if (call.status !== "completed" || !isAutoOpenTool(call.name)) return [];
98
+ if (AUTO_OPEN_SPECS[call.name].kind !== "created") return [];
99
+ const data = normalizeResult(call.result);
100
+ const assetId = pickAssetId(data == null ? void 0 : data.assetId, data == null ? void 0 : data.asset_id, data == null ? void 0 : data.id);
101
+ return assetId ? [{ tool: call.name, assetId, subcallId: call.id }] : [];
102
+ });
103
+ }
104
+ function creationsOfCall({
105
+ toolCallId,
106
+ tool,
107
+ result,
108
+ isError,
109
+ artifact,
110
+ args
111
+ }) {
112
+ const made = [];
113
+ if (toolNames.PTC_PARENT_TOOL_NAMES.has(tool)) {
114
+ for (const creation of studioCreations({ artifact })) {
115
+ made.push({
116
+ key: `${toolCallId}:${creation.subcallId}`,
117
+ assetId: creation.assetId,
118
+ type: AUTO_OPEN_SPECS[creation.tool].type,
119
+ autoOpen: { tool: creation.tool, kind: "created" }
120
+ });
71
121
  }
72
- if (slideNumber === void 0 && (extra == null ? void 0 : extra.slideNumberFrom) !== "result") {
73
- const args = await reader.args.get().catch(() => null);
74
- slideNumber = pickNumber(
75
- args == null ? void 0 : args.slide_number,
76
- args == null ? void 0 : args.slideNumber,
77
- args == null ? void 0 : args.targetSlideNumber,
78
- args == null ? void 0 : args.target_slide_number
79
- );
122
+ }
123
+ if (!isAutoOpenTool(tool)) return made;
124
+ const spec = AUTO_OPEN_SPECS[tool];
125
+ if (spec.kind === "touched") return made;
126
+ const data = normalizeResult(result);
127
+ if (answerOpensNothing({ isError, data })) return made;
128
+ const callArgs = isRecord(args) ? args : null;
129
+ const assetId = spec.from === "args" ? pickAssetId(data == null ? void 0 : data.assetId, data == null ? void 0 : data.asset_id, callArgs == null ? void 0 : callArgs.asset_id, callArgs == null ? void 0 : callArgs.assetId) : pickAssetId(data == null ? void 0 : data.asset_id, data == null ? void 0 : data.assetId, data == null ? void 0 : data.id);
130
+ if (assetId) made.push({ key: toolCallId, assetId, type: spec.type, autoOpen: { tool, kind: spec.kind } });
131
+ return made;
132
+ }
133
+ async function autoOpenOnAnswer({
134
+ tool,
135
+ answer,
136
+ args
137
+ }) {
138
+ const script = toolNames.PTC_PARENT_TOOL_NAMES.has(tool);
139
+ if (!script && !isAutoOpenTool(tool)) return;
140
+ const { result, isError, artifact } = await answer();
141
+ if (script) {
142
+ for (const made of studioCreations({ artifact })) {
143
+ openAutomatically({ assetId: made.assetId, tool: made.tool, spec: AUTO_OPEN_SPECS[made.tool] });
80
144
  }
81
- autoOpen(assetId, {
82
- type,
83
- slideNumber,
84
- preserveExistingSlide: extra == null ? void 0 : extra.preserveExistingSlide
85
- });
86
145
  }
87
- });
88
- const openFromArgs = (type) => ({
89
- streamCall: async (reader) => {
90
- await reader.response.get();
91
- const args = await reader.args.get().catch(() => null);
92
- const assetId = pickAssetId(args == null ? void 0 : args.asset_id, args == null ? void 0 : args.assetId);
146
+ if (!isAutoOpenTool(tool)) return;
147
+ const spec = AUTO_OPEN_SPECS[tool];
148
+ const data = normalizeResult(result);
149
+ if (answerOpensNothing({ isError, data })) return;
150
+ let assetId;
151
+ let slideNumber;
152
+ if (spec.from === "args") {
153
+ const read = await args().catch(() => null);
154
+ const callArgs = isRecord(read) ? read : null;
155
+ assetId = pickAssetId(callArgs == null ? void 0 : callArgs.asset_id, callArgs == null ? void 0 : callArgs.assetId);
156
+ } else {
157
+ assetId = pickAssetId(data == null ? void 0 : data.asset_id, data == null ? void 0 : data.assetId, data == null ? void 0 : data.id);
93
158
  if (!assetId) return;
94
- autoOpen(assetId, { type });
159
+ slideNumber = pickNumber(
160
+ data == null ? void 0 : data.slide_number,
161
+ data == null ? void 0 : data.slideNumber,
162
+ data == null ? void 0 : data.targetSlideNumber,
163
+ data == null ? void 0 : data.target_slide_number
164
+ );
165
+ if (slideNumber === void 0) {
166
+ const read = await args().catch(() => null);
167
+ const callArgs = isRecord(read) ? read : null;
168
+ slideNumber = pickNumber(
169
+ callArgs == null ? void 0 : callArgs.slide_number,
170
+ callArgs == null ? void 0 : callArgs.slideNumber,
171
+ callArgs == null ? void 0 : callArgs.targetSlideNumber,
172
+ callArgs == null ? void 0 : callArgs.target_slide_number
173
+ );
174
+ }
95
175
  }
96
- });
97
- const DEFAULT_AUTO_OPEN_TOOLS = {
98
- // Top-level asset creators
99
- create_new_document: openOnResult("document"),
100
- create_document_from_markdown: openOnResult("document"),
101
- create_new_sheet: openOnResult("spreadsheet"),
102
- create_powerpoint_deck: openOnResult("presentation"),
103
- create_presentation_pptx_studio: openOnResult("presentation"),
104
- create_new_notebook: openOnResult("notebook"),
105
- // Open / read existing assets
106
- open_asset_in_workspace: openFromArgs("unknown"),
107
- // Code execution that lands on a deck/slide
108
- execute_presentation_code: openOnResult("presentation"),
109
- // Media capture
110
- capture_moment: openOnResult("unknown"),
111
- // Studio PTC sub-calls (nested SDK commands)
112
- CreateWorkbook: openOnResult("spreadsheet"),
113
- AddSheet: openOnResult("spreadsheet"),
114
- OpenWorkbook: openOnResult("spreadsheet"),
115
- CreatePresentation: openOnResult("presentation"),
116
- OpenPresentation: openOnResult("presentation", { preserveExistingSlide: true }),
117
- AddSlide: openOnResult("presentation"),
118
- CreateDocument: openOnResult("document"),
119
- CreateParagraph: openOnResult("document"),
120
- OpenDocument: openOnResult("document")
121
- };
176
+ if (!assetId) return;
177
+ openAutomatically({ assetId, tool, spec, slideNumber });
178
+ }
179
+ const DEFAULT_AUTO_OPEN_TOOLS = Object.fromEntries(
180
+ [.../* @__PURE__ */ new Set([...Object.keys(AUTO_OPEN_SPECS), ...toolNames.PTC_PARENT_TOOL_NAMES])].map((tool) => [
181
+ tool,
182
+ {
183
+ streamCall: async (reader) => {
184
+ await autoOpenOnAnswer({
185
+ tool,
186
+ answer: () => reader.response.get(),
187
+ args: () => reader.args.get()
188
+ });
189
+ }
190
+ }
191
+ ])
192
+ );
122
193
  exports.DEFAULT_AUTO_OPEN_TOOLS = DEFAULT_AUTO_OPEN_TOOLS;
194
+ exports.autoOpenOnAnswer = autoOpenOnAnswer;
195
+ exports.creationsOfCall = creationsOfCall;
123
196
  //# sourceMappingURL=auto-open-tools.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"auto-open-tools.cjs","sources":["../../src/tools/auto-open-tools.ts"],"sourcesContent":["import type { Toolkit } from '@assistant-ui/react';\nimport { useAssetPanelStore, type AssetType } from '../assets/asset-panel-store';\nimport { tryParseJson } from './asset-utils';\n\ntype AnyRecord = Record<string, unknown>;\n\nconst isRecord = (value: unknown): value is AnyRecord =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nconst normalizeResult = (result: unknown): AnyRecord | null => {\n if (!result) return null;\n if (typeof result === 'string') {\n const parsed = tryParseJson(result);\n if (isRecord(parsed)) return parsed;\n return null;\n }\n if (isRecord(result)) {\n const inner = (result as AnyRecord).result;\n if (typeof inner === 'string') {\n const parsed = tryParseJson(inner);\n if (isRecord(parsed)) return parsed;\n } else if (isRecord(inner)) {\n return inner;\n }\n return result;\n }\n return null;\n};\n\nconst pickAssetId = (...candidates: unknown[]): string | null => {\n for (const candidate of candidates) {\n if (typeof candidate === 'string' && candidate.startsWith('asset_')) {\n return candidate;\n }\n }\n return null;\n};\n\nconst pickNumber = (...candidates: unknown[]): number | undefined => {\n for (const candidate of candidates) {\n if (typeof candidate === 'number' && Number.isFinite(candidate)) {\n return candidate;\n }\n }\n return undefined;\n};\n\nconst autoOpen = (\n assetId: string,\n options: { type?: AssetType; slideNumber?: number; preserveExistingSlide?: boolean } = {},\n) => {\n const store = useAssetPanelStore.getState();\n if (!store.markAutoOpened(assetId)) return;\n const existing = store.tabs.find((tab) => tab.id === assetId);\n const keepCurrentSlide = options.preserveExistingSlide && existing;\n store.openAsset(assetId, {\n type: options.type ?? 'unknown',\n // A host's own opener tells an open nobody clicked from one the person asked for.\n origin: 'auto',\n ...(keepCurrentSlide || options.slideNumber === undefined\n ? {}\n : { slideNumber: options.slideNumber }),\n });\n};\n\nconst openOnResult = (\n type: AssetType,\n extra?: {\n slideNumberFrom?: 'args' | 'result' | 'both';\n preserveExistingSlide?: boolean;\n },\n): Toolkit[string] => ({\n streamCall: async (reader) => {\n const { result } = await reader.response.get();\n const data = normalizeResult(result);\n const assetId = pickAssetId(\n data?.asset_id,\n data?.assetId,\n (data as { id?: unknown })?.id,\n );\n if (!assetId) return;\n\n let slideNumber: number | undefined;\n if (extra?.slideNumberFrom !== 'args') {\n slideNumber = pickNumber(\n data?.slide_number,\n data?.slideNumber,\n data?.targetSlideNumber,\n data?.target_slide_number,\n );\n }\n if (slideNumber === undefined && extra?.slideNumberFrom !== 'result') {\n const args = (await reader.args.get().catch(() => null)) as AnyRecord | null;\n slideNumber = pickNumber(\n args?.slide_number,\n args?.slideNumber,\n args?.targetSlideNumber,\n args?.target_slide_number,\n );\n }\n\n autoOpen(assetId, {\n type,\n slideNumber,\n preserveExistingSlide: extra?.preserveExistingSlide,\n });\n },\n});\n\nconst openFromArgs = (type: AssetType): Toolkit[string] => ({\n streamCall: async (reader) => {\n await reader.response.get();\n const args = (await reader.args.get().catch(() => null)) as AnyRecord | null;\n const assetId = pickAssetId(args?.asset_id, args?.assetId);\n if (!assetId) return;\n autoOpen(assetId, { type });\n },\n});\n\n/**\n * Default frontend tools that auto-open the asset a tool just created or\n * touched. Registered automatically by `AthenaProvider` / `AthenaChat`; pass\n * `disableAutoOpen` to turn off, or override individual entries via\n * `frontendTools`.\n */\nexport const DEFAULT_AUTO_OPEN_TOOLS: Toolkit = {\n // Top-level asset creators\n create_new_document: openOnResult('document'),\n create_document_from_markdown: openOnResult('document'),\n create_new_sheet: openOnResult('spreadsheet'),\n create_powerpoint_deck: openOnResult('presentation'),\n create_presentation_pptx_studio: openOnResult('presentation'),\n create_new_notebook: openOnResult('notebook'),\n\n // Open / read existing assets\n open_asset_in_workspace: openFromArgs('unknown'),\n\n // Code execution that lands on a deck/slide\n execute_presentation_code: openOnResult('presentation'),\n\n // Media capture\n capture_moment: openOnResult('unknown'),\n\n // Studio PTC sub-calls (nested SDK commands)\n CreateWorkbook: openOnResult('spreadsheet'),\n AddSheet: openOnResult('spreadsheet'),\n OpenWorkbook: openOnResult('spreadsheet'),\n CreatePresentation: openOnResult('presentation'),\n OpenPresentation: openOnResult('presentation', { preserveExistingSlide: true }),\n AddSlide: openOnResult('presentation'),\n CreateDocument: openOnResult('document'),\n CreateParagraph: openOnResult('document'),\n OpenDocument: openOnResult('document'),\n};\n"],"names":["tryParseJson","useAssetPanelStore"],"mappings":"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"}
1
+ {"version":3,"file":"auto-open-tools.cjs","sources":["../../src/tools/auto-open-tools.ts"],"sourcesContent":["import type { Toolkit } from '@assistant-ui/react';\nimport { PTC_PARENT_TOOL_NAMES, ptcSubcallsFromArtifact } from '@athenaintel/agent-runtime';\nimport {\n type AssetAutoOpen,\n type AssetAutoOpenKind,\n type AssetType,\n useAssetPanelStore,\n} from '../assets/asset-panel-store';\nimport { tryParseJson } from './asset-utils';\n\ntype AnyRecord = Record<string, unknown>;\n\nconst isRecord = (value: unknown): value is AnyRecord =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nconst normalizeResult = (result: unknown): AnyRecord | null => {\n if (!result) return null;\n if (typeof result === 'string') {\n const parsed = tryParseJson(result);\n if (isRecord(parsed)) return parsed;\n return null;\n }\n if (isRecord(result)) {\n const inner = (result as AnyRecord).result;\n if (typeof inner === 'string') {\n const parsed = tryParseJson(inner);\n if (isRecord(parsed)) return parsed;\n } else if (isRecord(inner)) {\n return inner;\n }\n return result;\n }\n return null;\n};\n\nconst pickAssetId = (...candidates: unknown[]): string | null => {\n for (const candidate of candidates) {\n if (typeof candidate === 'string' && candidate.startsWith('asset_')) {\n return candidate;\n }\n }\n return null;\n};\n\nconst pickNumber = (...candidates: unknown[]): number | undefined => {\n for (const candidate of candidates) {\n if (typeof candidate === 'number' && Number.isFinite(candidate)) {\n return candidate;\n }\n }\n return undefined;\n};\n\n/** How a default tool auto-opens the asset its call names. */\ninterface AutoOpenSpec {\n type: AssetType;\n /** What the tool did with the asset (`AssetAutoOpenKind`), told to a host's opener. */\n kind: AssetAutoOpenKind;\n /** Where the asset id is: the call's result (default), or its arguments once it answered. */\n from?: 'result' | 'args';\n /** Keep the slide an open deck shows instead of moving to the one the call names. */\n preserveExistingSlide?: boolean;\n}\n\n/**\n * The tools whose call opens the asset it names, and what each did with it: made it, opened it for\n * the person to see, or read or changed one that was there.\n */\nconst AUTO_OPEN_SPECS = {\n // Top-level asset creators\n create_new_document: { type: 'document', kind: 'created' },\n create_document_from_markdown: { type: 'document', kind: 'created' },\n create_new_sheet: { type: 'spreadsheet', kind: 'created' },\n create_powerpoint_deck: { type: 'presentation', kind: 'created' },\n create_presentation_pptx_studio: { type: 'presentation', kind: 'created' },\n create_new_notebook: { type: 'notebook', kind: 'created' },\n\n // Open / read existing assets\n open_asset_in_workspace: { type: 'unknown', kind: 'shown', from: 'args' },\n\n // Code execution that lands on a deck/slide\n execute_presentation_code: { type: 'presentation', kind: 'touched' },\n\n // Media capture: a screenshot or clip of a video, a new asset\n capture_moment: { type: 'unknown', kind: 'created' },\n\n // Studio PTC sub-calls (nested SDK commands): as nested tool calls where a runtime nests them, else\n // read off the script's call once it answers (`studioCreations`).\n CreateWorkbook: { type: 'spreadsheet', kind: 'created' },\n AddSheet: { type: 'spreadsheet', kind: 'touched' },\n OpenWorkbook: { type: 'spreadsheet', kind: 'touched' },\n CreatePresentation: { type: 'presentation', kind: 'created' },\n OpenPresentation: { type: 'presentation', kind: 'touched', preserveExistingSlide: true },\n AddSlide: { type: 'presentation', kind: 'touched' },\n CreateDocument: { type: 'document', kind: 'created' },\n CreateParagraph: { type: 'document', kind: 'touched' },\n OpenDocument: { type: 'document', kind: 'touched' },\n} satisfies Record<string, AutoOpenSpec>;\n\n/** The tools the SDK auto-opens after, by name. */\nexport type AutoOpenTool = keyof typeof AUTO_OPEN_SPECS;\n\nconst isAutoOpenTool = (tool: string): tool is AutoOpenTool =>\n Object.hasOwn(AUTO_OPEN_SPECS, tool);\n\n/**\n * Whether a call's answer says the open it would show did not happen: the call failed, agora\n * refused it (`status: 'error'`: `open_asset_in_workspace` for an asset the person may not see, or\n * outside the session's workspace, answers with no asset), or agora left the person's view alone and\n * told the agent so (`followModeOff`, the web app with follow mode off). An open the agent was told\n * did not happen never happens.\n */\nconst answerOpensNothing = ({\n isError,\n data,\n}: {\n isError: boolean | undefined;\n data: AnyRecord | null;\n}): boolean => isError === true || data?.status === 'error' || data?.followModeOff === true;\n\n/** Opens `assetId` as the tool behind `spec` opens it, once per generation (`markAutoOpened`). */\nfunction openAutomatically({\n assetId,\n tool,\n spec,\n slideNumber,\n}: {\n assetId: string;\n tool: string;\n spec: AutoOpenSpec;\n slideNumber?: number;\n}): void {\n const store = useAssetPanelStore.getState();\n if (!store.markAutoOpened(assetId, spec.kind)) return;\n const existing = store.tabs.find((tab) => tab.id === assetId);\n const keepCurrentSlide = spec.preserveExistingSlide && existing;\n store.openAsset(assetId, {\n type: spec.type,\n // A host's own opener tells an open nobody clicked from one the person asked for, and what\n // the tool did with the asset.\n origin: 'auto',\n autoOpen: { tool, kind: spec.kind },\n ...(keepCurrentSlide || slideNumber === undefined ? {} : { slideNumber }),\n });\n}\n\n/**\n * What a studio script made (a sandbox `execute` / `eval` or a studio executor, `PTC_PARENT_TOOL_NAMES`):\n * each `Create*` sub-call the backend promoted onto the call's artifact (`ptcSubcallsFromArtifact`)\n * that answered with its asset, by the sub-call's own answer. The deep agent's runtime keeps a\n * script's sub-calls on that artifact rather than as nested tool calls, so they never reach a tool's\n * own `streamCall`: the script's call opens what they made once it answers, as Athena on the web's\n * studio follow reads them (`extractCompletedPtcParents`).\n */\nfunction studioCreations({\n artifact,\n}: {\n artifact: unknown;\n}): Array<{ tool: AutoOpenTool; assetId: string; subcallId: string }> {\n return ptcSubcallsFromArtifact(artifact).flatMap((call) => {\n if (call.status !== 'completed' || !isAutoOpenTool(call.name)) return [];\n if (AUTO_OPEN_SPECS[call.name].kind !== 'created') return [];\n const data = normalizeResult(call.result);\n const assetId = pickAssetId(data?.assetId, data?.asset_id, data?.id);\n return assetId ? [{ tool: call.name, assetId, subcallId: call.id }] : [];\n });\n}\n\n/** An asset an agent's finished tool call made, or opened for the person to see. */\nexport interface AgentCreation {\n /** The call's own id, and a script's sub-call's after it: one creation, one key. */\n key: string;\n assetId: string;\n type: AssetType;\n /** The tool that made or showed it, and which (`created` or `shown`). */\n autoOpen: AssetAutoOpen;\n}\n\n/**\n * What one finished tool call made or showed the person, by the auto-open rules above: each asset a\n * studio script's `Create*` sub-calls made (`studioCreations`), and the asset a create tool made or\n * `open_asset_in_workspace` showed, unless the call's answer says it did not happen\n * (`answerOpensNothing`). Never what a call only read or changed (`touched`).\n */\nexport function creationsOfCall({\n toolCallId,\n tool,\n result,\n isError,\n artifact,\n args,\n}: {\n toolCallId: string;\n tool: string;\n result: unknown;\n isError?: boolean;\n artifact?: unknown;\n /** The call's arguments, as its AI message asked for it. */\n args?: unknown;\n}): AgentCreation[] {\n const made: AgentCreation[] = [];\n if (PTC_PARENT_TOOL_NAMES.has(tool)) {\n for (const creation of studioCreations({ artifact })) {\n made.push({\n key: `${toolCallId}:${creation.subcallId}`,\n assetId: creation.assetId,\n type: AUTO_OPEN_SPECS[creation.tool].type,\n autoOpen: { tool: creation.tool, kind: 'created' },\n });\n }\n }\n if (!isAutoOpenTool(tool)) return made;\n const spec: AutoOpenSpec = AUTO_OPEN_SPECS[tool];\n if (spec.kind === 'touched') return made;\n const data = normalizeResult(result);\n if (answerOpensNothing({ isError, data })) return made;\n const callArgs = isRecord(args) ? args : null;\n const assetId =\n spec.from === 'args'\n ? pickAssetId(data?.assetId, data?.asset_id, callArgs?.asset_id, callArgs?.assetId)\n : pickAssetId(data?.asset_id, data?.assetId, data?.id);\n if (assetId) made.push({ key: toolCallId, assetId, type: spec.type, autoOpen: { tool, kind: spec.kind } });\n return made;\n}\n\n/**\n * Opens what a default auto-open tool's call names (`DEFAULT_AUTO_OPEN_TOOLS`), once that call\n * answered: for a studio script, each asset its `Create*` sub-calls made (`studioCreations`); then,\n * for a tool with a spec, the id in its result (or, for `open_asset_in_workspace`, its arguments),\n * at the slide either names. Each with what the tool did with it (`autoOpen`) for a host's opener.\n * Nothing for a call that names no asset, one whose answer says it did not happen\n * (`answerOpensNothing`), or an asset already auto-opened (`markAutoOpened`).\n */\nexport async function autoOpenOnAnswer({\n tool,\n answer,\n args,\n}: {\n tool: string;\n /** The call's answer, once it came: its result, whether the call failed, and its artifact. */\n answer: () => Promise<{ result: unknown; isError?: boolean; artifact?: unknown }>;\n /** The call's arguments (null when they could not be read). */\n args: () => Promise<unknown>;\n}): Promise<void> {\n const script = PTC_PARENT_TOOL_NAMES.has(tool);\n if (!script && !isAutoOpenTool(tool)) return;\n const { result, isError, artifact } = await answer();\n // What the script made opens whatever became of the script after: it is there either way.\n if (script) {\n for (const made of studioCreations({ artifact })) {\n openAutomatically({ assetId: made.assetId, tool: made.tool, spec: AUTO_OPEN_SPECS[made.tool] });\n }\n }\n if (!isAutoOpenTool(tool)) return;\n const spec: AutoOpenSpec = AUTO_OPEN_SPECS[tool];\n const data = normalizeResult(result);\n if (answerOpensNothing({ isError, data })) return;\n let assetId: string | null;\n let slideNumber: number | undefined;\n if (spec.from === 'args') {\n const read = await args().catch(() => null);\n const callArgs = isRecord(read) ? read : null;\n assetId = pickAssetId(callArgs?.asset_id, callArgs?.assetId);\n } else {\n assetId = pickAssetId(data?.asset_id, data?.assetId, data?.id);\n if (!assetId) return;\n slideNumber = pickNumber(\n data?.slide_number,\n data?.slideNumber,\n data?.targetSlideNumber,\n data?.target_slide_number,\n );\n if (slideNumber === undefined) {\n const read = await args().catch(() => null);\n const callArgs = isRecord(read) ? read : null;\n slideNumber = pickNumber(\n callArgs?.slide_number,\n callArgs?.slideNumber,\n callArgs?.targetSlideNumber,\n callArgs?.target_slide_number,\n );\n }\n }\n if (!assetId) return;\n openAutomatically({ assetId, tool, spec, slideNumber });\n}\n\n/**\n * Default frontend tools that auto-open the asset a tool just created or\n * touched: each tool with a spec, and every studio script (`PTC_PARENT_TOOL_NAMES`),\n * whose `Create*` sub-calls open what they made. Each only watches the call's\n * answer (`streamCall`, no `execute`): none is declared to the backend.\n * Registered automatically by `AthenaProvider` / `AthenaChat`; pass\n * `disableAutoOpen` to turn off, or override individual entries via\n * `frontendTools`.\n */\nexport const DEFAULT_AUTO_OPEN_TOOLS: Toolkit = Object.fromEntries(\n [...new Set([...Object.keys(AUTO_OPEN_SPECS), ...PTC_PARENT_TOOL_NAMES])].map((tool): [\n string,\n Toolkit[string],\n ] => [\n tool,\n {\n streamCall: async (reader) => {\n await autoOpenOnAnswer({\n tool,\n answer: () => reader.response.get(),\n args: () => reader.args.get(),\n });\n },\n },\n ]),\n);\n"],"names":["tryParseJson","useAssetPanelStore","ptcSubcallsFromArtifact","PTC_PARENT_TOOL_NAMES"],"mappings":"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"}