@athenaintel/react 0.57.2 → 0.60.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 (852) hide show
  1. package/README.md +795 -12
  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 +0 -16
  46. package/dist/agent-runtime/src/composer-markdown.cjs.map +1 -1
  47. package/dist/agent-runtime/src/composer-markdown.d.ts +1 -1
  48. package/dist/agent-runtime/src/composer-markdown.js +1 -17
  49. package/dist/agent-runtime/src/composer-markdown.js.map +1 -1
  50. package/dist/agent-runtime/src/deep-agent-transport-recipe.cjs +3 -1
  51. package/dist/agent-runtime/src/deep-agent-transport-recipe.cjs.map +1 -1
  52. package/dist/agent-runtime/src/deep-agent-transport-recipe.d.ts +8 -1
  53. package/dist/agent-runtime/src/deep-agent-transport-recipe.js +3 -1
  54. package/dist/agent-runtime/src/deep-agent-transport-recipe.js.map +1 -1
  55. package/dist/agent-runtime/src/dictation-preferences.d.ts +356 -0
  56. package/dist/agent-runtime/src/dictation-record.d.ts +279 -0
  57. package/dist/agent-runtime/src/dictation-session.d.ts +106 -7
  58. package/dist/agent-runtime/src/dictation-snippets.d.ts +9 -0
  59. package/dist/agent-runtime/src/dictation-transfer.d.ts +142 -0
  60. package/dist/agent-runtime/src/edit-command.cjs.map +1 -1
  61. package/dist/agent-runtime/src/edit-command.d.ts +1 -1
  62. package/dist/agent-runtime/src/edit-command.js.map +1 -1
  63. package/dist/agent-runtime/src/errors.cjs +1 -0
  64. package/dist/agent-runtime/src/errors.cjs.map +1 -1
  65. package/dist/agent-runtime/src/errors.js +1 -0
  66. package/dist/agent-runtime/src/errors.js.map +1 -1
  67. package/dist/agent-runtime/src/generated/runconfig-contract.cjs +24 -0
  68. package/dist/agent-runtime/src/generated/runconfig-contract.cjs.map +1 -1
  69. package/dist/agent-runtime/src/generated/runconfig-contract.d.ts +3 -3
  70. package/dist/agent-runtime/src/generated/runconfig-contract.js +24 -0
  71. package/dist/agent-runtime/src/generated/runconfig-contract.js.map +1 -1
  72. package/dist/agent-runtime/src/index.d.ts +14 -8
  73. package/dist/agent-runtime/src/lane-follow.cjs +289 -0
  74. package/dist/agent-runtime/src/lane-follow.cjs.map +1 -0
  75. package/dist/agent-runtime/src/lane-follow.js +289 -0
  76. package/dist/agent-runtime/src/lane-follow.js.map +1 -0
  77. package/dist/agent-runtime/src/lane-images.cjs +387 -0
  78. package/dist/agent-runtime/src/lane-images.cjs.map +1 -0
  79. package/dist/agent-runtime/src/lane-images.js +387 -0
  80. package/dist/agent-runtime/src/lane-images.js.map +1 -0
  81. package/dist/agent-runtime/src/message-window.js +1 -1
  82. package/dist/agent-runtime/src/messages.cjs +19 -1
  83. package/dist/agent-runtime/src/messages.cjs.map +1 -1
  84. package/dist/agent-runtime/src/messages.d.ts +8 -0
  85. package/dist/agent-runtime/src/messages.js +21 -3
  86. package/dist/agent-runtime/src/messages.js.map +1 -1
  87. package/dist/agent-runtime/src/named-agents.cjs +301 -0
  88. package/dist/agent-runtime/src/named-agents.cjs.map +1 -0
  89. package/dist/agent-runtime/src/named-agents.d.ts +246 -0
  90. package/dist/agent-runtime/src/named-agents.js +301 -0
  91. package/dist/agent-runtime/src/named-agents.js.map +1 -0
  92. package/dist/agent-runtime/src/offline-status.cjs.map +1 -1
  93. package/dist/agent-runtime/src/offline-status.d.ts +93 -2
  94. package/dist/agent-runtime/src/offline-status.js.map +1 -1
  95. package/dist/agent-runtime/src/ptc-subcalls.cjs +41 -0
  96. package/dist/agent-runtime/src/ptc-subcalls.cjs.map +1 -0
  97. package/dist/agent-runtime/src/ptc-subcalls.js +41 -0
  98. package/dist/agent-runtime/src/ptc-subcalls.js.map +1 -0
  99. package/dist/agent-runtime/src/queue.cjs +2 -2
  100. package/dist/agent-runtime/src/queue.cjs.map +1 -1
  101. package/dist/agent-runtime/src/queue.d.ts +20 -25
  102. package/dist/agent-runtime/src/queue.js +2 -2
  103. package/dist/agent-runtime/src/queue.js.map +1 -1
  104. package/dist/agent-runtime/src/quota-safe-local-storage-session.cjs +314 -84
  105. package/dist/agent-runtime/src/quota-safe-local-storage-session.cjs.map +1 -1
  106. package/dist/agent-runtime/src/quota-safe-local-storage-session.d.ts +137 -40
  107. package/dist/agent-runtime/src/quota-safe-local-storage-session.js +318 -88
  108. package/dist/agent-runtime/src/quota-safe-local-storage-session.js.map +1 -1
  109. package/dist/agent-runtime/src/run-send.cjs +54 -0
  110. package/dist/agent-runtime/src/run-send.cjs.map +1 -0
  111. package/dist/agent-runtime/src/run-send.d.ts +51 -0
  112. package/dist/agent-runtime/src/run-send.js +54 -0
  113. package/dist/agent-runtime/src/run-send.js.map +1 -0
  114. package/dist/agent-runtime/src/running-tool-placeholder.cjs +6 -0
  115. package/dist/agent-runtime/src/running-tool-placeholder.cjs.map +1 -1
  116. package/dist/agent-runtime/src/running-tool-placeholder.js +6 -0
  117. package/dist/agent-runtime/src/running-tool-placeholder.js.map +1 -1
  118. package/dist/agent-runtime/src/runtime.d.ts +9 -5
  119. package/dist/agent-runtime/src/sealed-idb.cjs +64 -0
  120. package/dist/agent-runtime/src/sealed-idb.cjs.map +1 -1
  121. package/dist/agent-runtime/src/sealed-idb.d.ts +16 -0
  122. package/dist/agent-runtime/src/sealed-idb.js +64 -0
  123. package/dist/agent-runtime/src/sealed-idb.js.map +1 -1
  124. package/dist/agent-runtime/src/send-recovery.cjs +90 -118
  125. package/dist/agent-runtime/src/send-recovery.cjs.map +1 -1
  126. package/dist/agent-runtime/src/send-recovery.d.ts +25 -29
  127. package/dist/agent-runtime/src/send-recovery.js +90 -118
  128. package/dist/agent-runtime/src/send-recovery.js.map +1 -1
  129. package/dist/agent-runtime/src/statewire-diagnostics.d.ts +4 -1
  130. package/dist/agent-runtime/src/statewire-held-sends.cjs +191 -0
  131. package/dist/agent-runtime/src/statewire-held-sends.cjs.map +1 -0
  132. package/dist/agent-runtime/src/statewire-held-sends.d.ts +119 -0
  133. package/dist/agent-runtime/src/statewire-held-sends.js +191 -0
  134. package/dist/agent-runtime/src/statewire-held-sends.js.map +1 -0
  135. package/dist/agent-runtime/src/statewire-state.cjs +4 -0
  136. package/dist/agent-runtime/src/statewire-state.cjs.map +1 -1
  137. package/dist/agent-runtime/src/statewire-state.js +4 -0
  138. package/dist/agent-runtime/src/statewire-state.js.map +1 -1
  139. package/dist/agent-runtime/src/statewire-transport.cjs +8 -2
  140. package/dist/agent-runtime/src/statewire-transport.cjs.map +1 -1
  141. package/dist/agent-runtime/src/statewire-transport.d.ts +14 -5
  142. package/dist/agent-runtime/src/statewire-transport.js +8 -2
  143. package/dist/agent-runtime/src/statewire-transport.js.map +1 -1
  144. package/dist/agent-runtime/src/subagent-transcripts.cjs +1 -23
  145. package/dist/agent-runtime/src/subagent-transcripts.cjs.map +1 -1
  146. package/dist/agent-runtime/src/subagent-transcripts.js +3 -25
  147. package/dist/agent-runtime/src/subagent-transcripts.js.map +1 -1
  148. package/dist/agent-runtime/src/subagents.cjs +22 -29
  149. package/dist/agent-runtime/src/subagents.cjs.map +1 -1
  150. package/dist/agent-runtime/src/subagents.js +23 -30
  151. package/dist/agent-runtime/src/subagents.js.map +1 -1
  152. package/dist/agent-runtime/src/thread-extras.cjs +27 -19
  153. package/dist/agent-runtime/src/thread-extras.cjs.map +1 -1
  154. package/dist/agent-runtime/src/thread-extras.d.ts +19 -6
  155. package/dist/agent-runtime/src/thread-extras.js +27 -19
  156. package/dist/agent-runtime/src/thread-extras.js.map +1 -1
  157. package/dist/agent-runtime/src/thread-handoff-flow-machine.d.ts +8 -8
  158. package/dist/agent-runtime/src/tool-metadata.cjs +19 -0
  159. package/dist/agent-runtime/src/tool-metadata.cjs.map +1 -1
  160. package/dist/agent-runtime/src/tool-metadata.js +19 -0
  161. package/dist/agent-runtime/src/tool-metadata.js.map +1 -1
  162. package/dist/agent-runtime/src/tool-names.cjs +21 -0
  163. package/dist/agent-runtime/src/tool-names.cjs.map +1 -1
  164. package/dist/agent-runtime/src/tool-names.d.ts +8 -0
  165. package/dist/agent-runtime/src/tool-names.js +21 -0
  166. package/dist/agent-runtime/src/tool-names.js.map +1 -1
  167. package/dist/agent-runtime/src/typed-interrupt-kinds.cjs +247 -0
  168. package/dist/agent-runtime/src/typed-interrupt-kinds.cjs.map +1 -0
  169. package/dist/agent-runtime/src/typed-interrupt-kinds.d.ts +173 -0
  170. package/dist/agent-runtime/src/typed-interrupt-kinds.js +247 -0
  171. package/dist/agent-runtime/src/typed-interrupt-kinds.js.map +1 -0
  172. package/dist/agent-runtime/src/typed-interrupts.cjs +48 -0
  173. package/dist/agent-runtime/src/typed-interrupts.cjs.map +1 -0
  174. package/dist/agent-runtime/src/typed-interrupts.d.ts +75 -0
  175. package/dist/agent-runtime/src/typed-interrupts.js +48 -0
  176. package/dist/agent-runtime/src/typed-interrupts.js.map +1 -0
  177. package/dist/agent-runtime/src/types.d.ts +1 -1
  178. package/dist/agent-runtime/src/use-conversation-list.cjs +1 -0
  179. package/dist/agent-runtime/src/use-conversation-list.cjs.map +1 -1
  180. package/dist/agent-runtime/src/use-conversation-list.d.ts +7 -0
  181. package/dist/agent-runtime/src/use-conversation-list.js +1 -0
  182. package/dist/agent-runtime/src/use-conversation-list.js.map +1 -1
  183. package/dist/agent-runtime/src/use-deep-agent-chat-outbox.cjs +46 -29
  184. package/dist/agent-runtime/src/use-deep-agent-chat-outbox.cjs.map +1 -1
  185. package/dist/agent-runtime/src/use-deep-agent-chat-outbox.d.ts +14 -22
  186. package/dist/agent-runtime/src/use-deep-agent-chat-outbox.js +46 -29
  187. package/dist/agent-runtime/src/use-deep-agent-chat-outbox.js.map +1 -1
  188. package/dist/agent-runtime/src/use-deep-agent-runtime.cjs +78 -14
  189. package/dist/agent-runtime/src/use-deep-agent-runtime.cjs.map +1 -1
  190. package/dist/agent-runtime/src/use-deep-agent-runtime.d.ts +34 -7
  191. package/dist/agent-runtime/src/use-deep-agent-runtime.js +79 -15
  192. package/dist/agent-runtime/src/use-deep-agent-runtime.js.map +1 -1
  193. package/dist/agent-runtime/src/use-deep-agent-thread.cjs +16 -1
  194. package/dist/agent-runtime/src/use-deep-agent-thread.cjs.map +1 -1
  195. package/dist/agent-runtime/src/use-deep-agent-thread.d.ts +7 -2
  196. package/dist/agent-runtime/src/use-deep-agent-thread.js +16 -1
  197. package/dist/agent-runtime/src/use-deep-agent-thread.js.map +1 -1
  198. package/dist/agent-runtime/src/use-deep-agent-voice.cjs +30 -4
  199. package/dist/agent-runtime/src/use-deep-agent-voice.cjs.map +1 -1
  200. package/dist/agent-runtime/src/use-deep-agent-voice.d.ts +22 -4
  201. package/dist/agent-runtime/src/use-deep-agent-voice.js +30 -4
  202. package/dist/agent-runtime/src/use-deep-agent-voice.js.map +1 -1
  203. package/dist/agent-runtime/src/withdrawn-turns.d.ts +5 -4
  204. package/dist/agent-runtime/src/word-device-fit.d.ts +174 -0
  205. package/dist/agent-runtime/src/work-in.d.ts +127 -0
  206. package/dist/assets/AthenaAssetEmbed.cjs.map +1 -1
  207. package/dist/assets/AthenaAssetEmbed.d.ts +6 -1
  208. package/dist/assets/AthenaAssetEmbed.js.map +1 -1
  209. package/dist/assets/asset-panel-store.cjs +13 -5
  210. package/dist/assets/asset-panel-store.cjs.map +1 -1
  211. package/dist/assets/asset-panel-store.d.ts +33 -2
  212. package/dist/assets/asset-panel-store.js +13 -5
  213. package/dist/assets/asset-panel-store.js.map +1 -1
  214. package/dist/auth/AthenaCredentialSourceContext.cjs +11 -0
  215. package/dist/auth/AthenaCredentialSourceContext.cjs.map +1 -1
  216. package/dist/auth/AthenaCredentialSourceContext.d.ts +6 -0
  217. package/dist/auth/AthenaCredentialSourceContext.js +11 -0
  218. package/dist/auth/AthenaCredentialSourceContext.js.map +1 -1
  219. package/dist/auth/account-identity.cjs +13 -2
  220. package/dist/auth/account-identity.cjs.map +1 -1
  221. package/dist/auth/account-identity.d.ts +9 -0
  222. package/dist/auth/account-identity.js +13 -2
  223. package/dist/auth/account-identity.js.map +1 -1
  224. package/dist/auth/credential-source.cjs +20 -4
  225. package/dist/auth/credential-source.cjs.map +1 -1
  226. package/dist/auth/credential-source.d.ts +9 -0
  227. package/dist/auth/credential-source.js +20 -4
  228. package/dist/auth/credential-source.js.map +1 -1
  229. package/dist/catalog/chat-pickers.cjs +31 -0
  230. package/dist/catalog/chat-pickers.cjs.map +1 -1
  231. package/dist/catalog/chat-pickers.d.ts +17 -0
  232. package/dist/catalog/chat-pickers.js +33 -2
  233. package/dist/catalog/chat-pickers.js.map +1 -1
  234. package/dist/catalog/runtime-catalog.cjs +63 -3
  235. package/dist/catalog/runtime-catalog.cjs.map +1 -1
  236. package/dist/catalog/runtime-catalog.d.ts +63 -3
  237. package/dist/catalog/runtime-catalog.js +64 -4
  238. package/dist/catalog/runtime-catalog.js.map +1 -1
  239. package/dist/chat/AthenaChat.cjs +301 -98
  240. package/dist/chat/AthenaChat.cjs.map +1 -1
  241. package/dist/chat/AthenaChat.d.ts +80 -4
  242. package/dist/chat/AthenaChat.js +302 -99
  243. package/dist/chat/AthenaChat.js.map +1 -1
  244. package/dist/chat/StatewireApprovalCard.cjs +35 -5
  245. package/dist/chat/StatewireApprovalCard.cjs.map +1 -1
  246. package/dist/chat/StatewireApprovalCard.d.ts +55 -2
  247. package/dist/chat/StatewireApprovalCard.js +37 -7
  248. package/dist/chat/StatewireApprovalCard.js.map +1 -1
  249. package/dist/chat/StatewireQueuedMessages.cjs +17 -2
  250. package/dist/chat/StatewireQueuedMessages.cjs.map +1 -1
  251. package/dist/chat/StatewireQueuedMessages.d.ts +8 -45
  252. package/dist/chat/StatewireQueuedMessages.js +18 -3
  253. package/dist/chat/StatewireQueuedMessages.js.map +1 -1
  254. package/dist/chat/chat-agent-mentions.cjs +70 -0
  255. package/dist/chat/chat-agent-mentions.cjs.map +1 -0
  256. package/dist/chat/chat-agent-mentions.d.ts +13 -0
  257. package/dist/chat/chat-agent-mentions.js +70 -0
  258. package/dist/chat/chat-agent-mentions.js.map +1 -0
  259. package/dist/chat/composer-actions.cjs +12 -0
  260. package/dist/chat/composer-actions.cjs.map +1 -0
  261. package/dist/chat/composer-actions.d.ts +22 -0
  262. package/dist/chat/composer-actions.js +12 -0
  263. package/dist/chat/composer-actions.js.map +1 -0
  264. package/dist/chat/follow-up-suggestions.cjs +185 -0
  265. package/dist/chat/follow-up-suggestions.cjs.map +1 -0
  266. package/dist/chat/follow-up-suggestions.d.ts +64 -0
  267. package/dist/chat/follow-up-suggestions.js +185 -0
  268. package/dist/chat/follow-up-suggestions.js.map +1 -0
  269. package/dist/chat/super-grouping/ToolTimeline.cjs +4 -3
  270. package/dist/chat/super-grouping/ToolTimeline.cjs.map +1 -1
  271. package/dist/chat/super-grouping/ToolTimeline.d.ts +7 -3
  272. package/dist/chat/super-grouping/ToolTimeline.js +4 -3
  273. package/dist/chat/super-grouping/ToolTimeline.js.map +1 -1
  274. package/dist/chat/turn-changes.cjs +284 -0
  275. package/dist/chat/turn-changes.cjs.map +1 -0
  276. package/dist/chat/turn-changes.d.ts +130 -0
  277. package/dist/chat/turn-changes.js +284 -0
  278. package/dist/chat/turn-changes.js.map +1 -0
  279. package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.cjs +31 -0
  280. package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.cjs.map +1 -0
  281. package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.d.ts +31 -0
  282. package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.js +31 -0
  283. package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.js.map +1 -0
  284. package/dist/chat/typed-interrupts/approval-cards.cjs +250 -0
  285. package/dist/chat/typed-interrupts/approval-cards.cjs.map +1 -0
  286. package/dist/chat/typed-interrupts/approval-cards.d.ts +22 -0
  287. package/dist/chat/typed-interrupts/approval-cards.js +250 -0
  288. package/dist/chat/typed-interrupts/approval-cards.js.map +1 -0
  289. package/dist/chat/typed-interrupts/form-cards.cjs +289 -0
  290. package/dist/chat/typed-interrupts/form-cards.cjs.map +1 -0
  291. package/dist/chat/typed-interrupts/form-cards.d.ts +6 -0
  292. package/dist/chat/typed-interrupts/form-cards.js +289 -0
  293. package/dist/chat/typed-interrupts/form-cards.js.map +1 -0
  294. package/dist/chat/typed-interrupts/interrupt-card-shell.cjs +182 -0
  295. package/dist/chat/typed-interrupts/interrupt-card-shell.cjs.map +1 -0
  296. package/dist/chat/typed-interrupts/interrupt-card-shell.d.ts +47 -0
  297. package/dist/chat/typed-interrupts/interrupt-card-shell.js +182 -0
  298. package/dist/chat/typed-interrupts/interrupt-card-shell.js.map +1 -0
  299. package/dist/chat/typed-interrupts/json-schema-form.cjs +388 -0
  300. package/dist/chat/typed-interrupts/json-schema-form.cjs.map +1 -0
  301. package/dist/chat/typed-interrupts/json-schema-form.d.ts +33 -0
  302. package/dist/chat/typed-interrupts/json-schema-form.js +388 -0
  303. package/dist/chat/typed-interrupts/json-schema-form.js.map +1 -0
  304. package/dist/chat/typed-interrupts/questionnaire-card.cjs +449 -0
  305. package/dist/chat/typed-interrupts/questionnaire-card.cjs.map +1 -0
  306. package/dist/chat/typed-interrupts/questionnaire-card.d.ts +20 -0
  307. package/dist/chat/typed-interrupts/questionnaire-card.js +449 -0
  308. package/dist/chat/typed-interrupts/questionnaire-card.js.map +1 -0
  309. package/dist/chat/typed-interrupts/request-file-card.cjs +159 -0
  310. package/dist/chat/typed-interrupts/request-file-card.cjs.map +1 -0
  311. package/dist/chat/typed-interrupts/request-file-card.d.ts +2 -0
  312. package/dist/chat/typed-interrupts/request-file-card.js +159 -0
  313. package/dist/chat/typed-interrupts/request-file-card.js.map +1 -0
  314. package/dist/chat/typed-interrupts/toolkit-selection-card.cjs +189 -0
  315. package/dist/chat/typed-interrupts/toolkit-selection-card.cjs.map +1 -0
  316. package/dist/chat/typed-interrupts/toolkit-selection-card.d.ts +23 -0
  317. package/dist/chat/typed-interrupts/toolkit-selection-card.js +189 -0
  318. package/dist/chat/typed-interrupts/toolkit-selection-card.js.map +1 -0
  319. package/dist/chat/typed-interrupts/typed-interrupt-body.cjs +26 -0
  320. package/dist/chat/typed-interrupts/typed-interrupt-body.cjs.map +1 -0
  321. package/dist/chat/typed-interrupts/typed-interrupt-body.d.ts +3 -0
  322. package/dist/chat/typed-interrupts/typed-interrupt-body.js +26 -0
  323. package/dist/chat/typed-interrupts/typed-interrupt-body.js.map +1 -0
  324. package/dist/chat/typed-interrupts/typed-interrupt-graphql.cjs +105 -0
  325. package/dist/chat/typed-interrupts/typed-interrupt-graphql.cjs.map +1 -0
  326. package/dist/chat/typed-interrupts/typed-interrupt-graphql.d.ts +29 -0
  327. package/dist/chat/typed-interrupts/typed-interrupt-graphql.js +105 -0
  328. package/dist/chat/typed-interrupts/typed-interrupt-graphql.js.map +1 -0
  329. package/dist/chat/typed-interrupts/typed-interrupt-notice.cjs +70 -0
  330. package/dist/chat/typed-interrupts/typed-interrupt-notice.cjs.map +1 -0
  331. package/dist/chat/typed-interrupts/typed-interrupt-notice.d.ts +45 -0
  332. package/dist/chat/typed-interrupts/typed-interrupt-notice.js +70 -0
  333. package/dist/chat/typed-interrupts/typed-interrupt-notice.js.map +1 -0
  334. package/dist/chat/typed-interrupts/typed-interrupt-panel.cjs +76 -0
  335. package/dist/chat/typed-interrupts/typed-interrupt-panel.cjs.map +1 -0
  336. package/dist/chat/typed-interrupts/typed-interrupt-panel.d.ts +11 -0
  337. package/dist/chat/typed-interrupts/typed-interrupt-panel.js +76 -0
  338. package/dist/chat/typed-interrupts/typed-interrupt-panel.js.map +1 -0
  339. package/dist/chat/typed-interrupts/typed-interrupt-types.d.ts +46 -0
  340. package/dist/chat/typed-interrupts/use-interrupt-draft.cjs +106 -0
  341. package/dist/chat/typed-interrupts/use-interrupt-draft.cjs.map +1 -0
  342. package/dist/chat/typed-interrupts/use-interrupt-draft.d.ts +29 -0
  343. package/dist/chat/typed-interrupts/use-interrupt-draft.js +106 -0
  344. package/dist/chat/typed-interrupts/use-interrupt-draft.js.map +1 -0
  345. package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.cjs +231 -0
  346. package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.cjs.map +1 -0
  347. package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.d.ts +66 -0
  348. package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.js +231 -0
  349. package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.js.map +1 -0
  350. package/dist/chat-ui/composer/composer-named-agents.cjs +13 -0
  351. package/dist/chat-ui/composer/composer-named-agents.cjs.map +1 -0
  352. package/dist/chat-ui/composer/composer-named-agents.d.ts +20 -0
  353. package/dist/chat-ui/composer/composer-named-agents.js +13 -0
  354. package/dist/chat-ui/composer/composer-named-agents.js.map +1 -0
  355. package/dist/chat-ui/composer/slash-command-menu.cjs +143 -0
  356. package/dist/chat-ui/composer/slash-command-menu.cjs.map +1 -0
  357. package/dist/chat-ui/composer/slash-command-menu.d.ts +19 -0
  358. package/dist/chat-ui/composer/slash-command-menu.js +143 -0
  359. package/dist/chat-ui/composer/slash-command-menu.js.map +1 -0
  360. package/dist/chat-ui/composer/slash-commands-extension.cjs +51 -0
  361. package/dist/chat-ui/composer/slash-commands-extension.cjs.map +1 -0
  362. package/dist/chat-ui/composer/slash-commands-extension.d.ts +39 -0
  363. package/dist/chat-ui/composer/slash-commands-extension.js +51 -0
  364. package/dist/chat-ui/composer/slash-commands-extension.js.map +1 -0
  365. package/dist/chat-ui/composer/slash-commands.cjs +74 -0
  366. package/dist/chat-ui/composer/slash-commands.cjs.map +1 -0
  367. package/dist/chat-ui/composer/slash-commands.d.ts +82 -0
  368. package/dist/chat-ui/composer/slash-commands.js +74 -0
  369. package/dist/chat-ui/composer/slash-commands.js.map +1 -0
  370. package/dist/chat-ui/composer/tiptap-composer.cjs +135 -9
  371. package/dist/chat-ui/composer/tiptap-composer.cjs.map +1 -1
  372. package/dist/chat-ui/composer/tiptap-composer.d.ts +61 -2
  373. package/dist/chat-ui/composer/tiptap-composer.js +135 -9
  374. package/dist/chat-ui/composer/tiptap-composer.js.map +1 -1
  375. package/dist/chat-ui/index.cjs +5 -0
  376. package/dist/chat-ui/index.cjs.map +1 -1
  377. package/dist/chat-ui/index.d.ts +4 -2
  378. package/dist/chat-ui/index.js +5 -0
  379. package/dist/chat-ui/index.js.map +1 -1
  380. package/dist/chat-ui/mentions/mention-chip.cjs +10 -4
  381. package/dist/chat-ui/mentions/mention-chip.cjs.map +1 -1
  382. package/dist/chat-ui/mentions/mention-chip.js +11 -5
  383. package/dist/chat-ui/mentions/mention-chip.js.map +1 -1
  384. package/dist/chat-ui/mentions/mention-extension.cjs +8 -1
  385. package/dist/chat-ui/mentions/mention-extension.cjs.map +1 -1
  386. package/dist/chat-ui/mentions/mention-extension.js +8 -1
  387. package/dist/chat-ui/mentions/mention-extension.js.map +1 -1
  388. package/dist/chat-ui/mentions/suggestions/components/get-scope-name.cjs +1 -0
  389. package/dist/chat-ui/mentions/suggestions/components/get-scope-name.cjs.map +1 -1
  390. package/dist/chat-ui/mentions/suggestions/components/get-scope-name.js +1 -0
  391. package/dist/chat-ui/mentions/suggestions/components/get-scope-name.js.map +1 -1
  392. package/dist/chat-ui/mentions/suggestions/components/mention-icon.cjs +20 -2
  393. package/dist/chat-ui/mentions/suggestions/components/mention-icon.cjs.map +1 -1
  394. package/dist/chat-ui/mentions/suggestions/components/mention-icon.d.ts +10 -1
  395. package/dist/chat-ui/mentions/suggestions/components/mention-icon.js +22 -4
  396. package/dist/chat-ui/mentions/suggestions/components/mention-icon.js.map +1 -1
  397. package/dist/chat-ui/mentions/suggestions/components/menu-item.cjs +1 -1
  398. package/dist/chat-ui/mentions/suggestions/components/menu-item.cjs.map +1 -1
  399. package/dist/chat-ui/mentions/suggestions/components/menu-item.js +1 -1
  400. package/dist/chat-ui/mentions/suggestions/components/menu-item.js.map +1 -1
  401. package/dist/chat-ui/mentions/suggestions/data/api-client.cjs +45 -0
  402. package/dist/chat-ui/mentions/suggestions/data/api-client.cjs.map +1 -1
  403. package/dist/chat-ui/mentions/suggestions/data/api-client.d.ts +48 -0
  404. package/dist/chat-ui/mentions/suggestions/data/api-client.js +45 -0
  405. package/dist/chat-ui/mentions/suggestions/data/api-client.js.map +1 -1
  406. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icon-names.generated.cjs +89 -0
  407. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icon-names.generated.cjs.map +1 -0
  408. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icon-names.generated.d.ts +8 -0
  409. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icon-names.generated.js +89 -0
  410. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icon-names.generated.js.map +1 -0
  411. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.cjs +140 -116
  412. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.cjs.map +1 -1
  413. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.d.ts +46 -12
  414. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.js +141 -117
  415. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.js.map +1 -1
  416. package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs +272 -25
  417. package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs.map +1 -1
  418. package/dist/chat-ui/mentions/suggestions/data/sources/index.d.ts +88 -10
  419. package/dist/chat-ui/mentions/suggestions/data/sources/index.js +274 -27
  420. package/dist/chat-ui/mentions/suggestions/data/sources/index.js.map +1 -1
  421. package/dist/chat-ui/mentions/suggestions/data/types.cjs.map +1 -1
  422. package/dist/chat-ui/mentions/suggestions/data/types.d.ts +27 -1
  423. package/dist/chat-ui/mentions/suggestions/data/types.js.map +1 -1
  424. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs +56 -5
  425. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs.map +1 -1
  426. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.d.ts +26 -6
  427. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js +57 -6
  428. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js.map +1 -1
  429. package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.cjs +34 -17
  430. package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.cjs.map +1 -1
  431. package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.d.ts +19 -1
  432. package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.js +35 -18
  433. package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.js.map +1 -1
  434. package/dist/chat-ui/mentions/use-asset-icon-app-url.cjs +12 -0
  435. package/dist/chat-ui/mentions/use-asset-icon-app-url.cjs.map +1 -0
  436. package/dist/chat-ui/mentions/use-asset-icon-app-url.d.ts +8 -0
  437. package/dist/chat-ui/mentions/use-asset-icon-app-url.js +12 -0
  438. package/dist/chat-ui/mentions/use-asset-icon-app-url.js.map +1 -0
  439. package/dist/chat-ui/statewire.d.ts +1 -1
  440. package/dist/chat-ui/thread/statewire-history-edge.cjs +15 -0
  441. package/dist/chat-ui/thread/statewire-history-edge.cjs.map +1 -1
  442. package/dist/chat-ui/thread/statewire-history-edge.d.ts +4 -1
  443. package/dist/chat-ui/thread/statewire-history-edge.js +15 -0
  444. package/dist/chat-ui/thread/statewire-history-edge.js.map +1 -1
  445. package/dist/collab/client.cjs +41 -6
  446. package/dist/collab/client.cjs.map +1 -1
  447. package/dist/collab/client.d.ts +38 -7
  448. package/dist/collab/client.js +41 -6
  449. package/dist/collab/client.js.map +1 -1
  450. package/dist/composer/ComposerAttachedReferences.cjs +119 -0
  451. package/dist/composer/ComposerAttachedReferences.cjs.map +1 -0
  452. package/dist/composer/ComposerAttachedReferences.d.ts +26 -0
  453. package/dist/composer/ComposerAttachedReferences.js +119 -0
  454. package/dist/composer/ComposerAttachedReferences.js.map +1 -0
  455. package/dist/composer/ComposerNamedAgents.cjs +63 -0
  456. package/dist/composer/ComposerNamedAgents.cjs.map +1 -0
  457. package/dist/composer/ComposerNamedAgents.d.ts +16 -0
  458. package/dist/composer/ComposerNamedAgents.js +63 -0
  459. package/dist/composer/ComposerNamedAgents.js.map +1 -0
  460. package/dist/composer/attached-references.cjs +159 -0
  461. package/dist/composer/attached-references.cjs.map +1 -0
  462. package/dist/composer/attached-references.d.ts +86 -0
  463. package/dist/composer/attached-references.js +159 -0
  464. package/dist/composer/attached-references.js.map +1 -0
  465. package/dist/composer/build-composed-message.cjs +14 -7
  466. package/dist/composer/build-composed-message.cjs.map +1 -1
  467. package/dist/composer/build-composed-message.d.ts +6 -1
  468. package/dist/composer/build-composed-message.js +14 -7
  469. package/dist/composer/build-composed-message.js.map +1 -1
  470. package/dist/composer/composer-handoff.cjs +6 -2
  471. package/dist/composer/composer-handoff.cjs.map +1 -1
  472. package/dist/composer/composer-handoff.d.ts +7 -1
  473. package/dist/composer/composer-handoff.js +6 -2
  474. package/dist/composer/composer-handoff.js.map +1 -1
  475. package/dist/composer/folder-upload.cjs +149 -0
  476. package/dist/composer/folder-upload.cjs.map +1 -0
  477. package/dist/composer/folder-upload.d.ts +79 -0
  478. package/dist/composer/folder-upload.js +149 -0
  479. package/dist/composer/folder-upload.js.map +1 -0
  480. package/dist/composer/index.d.ts +1 -1
  481. package/dist/composer/staged-message-metadata.cjs +12 -0
  482. package/dist/composer/staged-message-metadata.cjs.map +1 -0
  483. package/dist/composer/staged-message-metadata.d.ts +15 -0
  484. package/dist/composer/staged-message-metadata.js +12 -0
  485. package/dist/composer/staged-message-metadata.js.map +1 -0
  486. package/dist/composer/useAttachToChat.cjs +35 -0
  487. package/dist/composer/useAttachToChat.cjs.map +1 -0
  488. package/dist/composer/useAttachToChat.d.ts +54 -0
  489. package/dist/composer/useAttachToChat.js +35 -0
  490. package/dist/composer/useAttachToChat.js.map +1 -0
  491. package/dist/composer/useAttachedReferencesComposerProps.cjs +19 -0
  492. package/dist/composer/useAttachedReferencesComposerProps.cjs.map +1 -0
  493. package/dist/composer/useAttachedReferencesComposerProps.d.ts +12 -0
  494. package/dist/composer/useAttachedReferencesComposerProps.js +19 -0
  495. package/dist/composer/useAttachedReferencesComposerProps.js.map +1 -0
  496. package/dist/composer/useFileUpload.cjs +95 -7
  497. package/dist/composer/useFileUpload.cjs.map +1 -1
  498. package/dist/composer/useFileUpload.d.ts +21 -2
  499. package/dist/composer/useFileUpload.js +95 -7
  500. package/dist/composer/useFileUpload.js.map +1 -1
  501. package/dist/data/athena-api-error.cjs +125 -0
  502. package/dist/data/athena-api-error.cjs.map +1 -0
  503. package/dist/data/athena-api-error.d.ts +96 -0
  504. package/dist/data/athena-api-error.js +125 -0
  505. package/dist/data/athena-api-error.js.map +1 -0
  506. package/dist/data/athena-data-client.cjs +106 -0
  507. package/dist/data/athena-data-client.cjs.map +1 -0
  508. package/dist/data/athena-data-client.d.ts +74 -0
  509. package/dist/data/athena-data-client.js +106 -0
  510. package/dist/data/athena-data-client.js.map +1 -0
  511. package/dist/data/athena-member.cjs +93 -0
  512. package/dist/data/athena-member.cjs.map +1 -0
  513. package/dist/data/athena-member.d.ts +125 -0
  514. package/dist/data/athena-member.js +93 -0
  515. package/dist/data/athena-member.js.map +1 -0
  516. package/dist/data/athena-request.cjs +460 -0
  517. package/dist/data/athena-request.cjs.map +1 -0
  518. package/dist/data/athena-request.d.ts +120 -0
  519. package/dist/data/athena-request.js +460 -0
  520. package/dist/data/athena-request.js.map +1 -0
  521. package/dist/data/use-athena-fetch.cjs +14 -0
  522. package/dist/data/use-athena-fetch.cjs.map +1 -0
  523. package/dist/data/use-athena-fetch.d.ts +19 -0
  524. package/dist/data/use-athena-fetch.js +14 -0
  525. package/dist/data/use-athena-fetch.js.map +1 -0
  526. package/dist/data/use-athena-graphql.cjs +66 -0
  527. package/dist/data/use-athena-graphql.cjs.map +1 -0
  528. package/dist/data/use-athena-graphql.d.ts +56 -0
  529. package/dist/data/use-athena-graphql.js +66 -0
  530. package/dist/data/use-athena-graphql.js.map +1 -0
  531. package/dist/data/use-athena-rest.cjs +33 -0
  532. package/dist/data/use-athena-rest.cjs.map +1 -0
  533. package/dist/data/use-athena-rest.d.ts +21 -0
  534. package/dist/data/use-athena-rest.js +33 -0
  535. package/dist/data/use-athena-rest.js.map +1 -0
  536. package/dist/data/use-semantic-query.cjs +44 -0
  537. package/dist/data/use-semantic-query.cjs.map +1 -0
  538. package/dist/data/use-semantic-query.d.ts +92 -0
  539. package/dist/data/use-semantic-query.js +44 -0
  540. package/dist/data/use-semantic-query.js.map +1 -0
  541. package/dist/diagnostics/athena-diagnostics.cjs.map +1 -1
  542. package/dist/diagnostics/athena-diagnostics.d.ts +5 -1
  543. package/dist/diagnostics/athena-diagnostics.js.map +1 -1
  544. package/dist/diagnostics/errors.cjs +7 -0
  545. package/dist/diagnostics/errors.cjs.map +1 -1
  546. package/dist/diagnostics/errors.d.ts +7 -0
  547. package/dist/diagnostics/errors.js +7 -0
  548. package/dist/diagnostics/errors.js.map +1 -1
  549. package/dist/index.cjs +155 -11
  550. package/dist/index.cjs.map +1 -1
  551. package/dist/index.d.ts +72 -13
  552. package/dist/index.js +148 -4
  553. package/dist/index.js.map +1 -1
  554. package/dist/keryx-http/src/initial-sync.cjs +64 -16
  555. package/dist/keryx-http/src/initial-sync.cjs.map +1 -1
  556. package/dist/keryx-http/src/initial-sync.d.ts +31 -1
  557. package/dist/keryx-http/src/initial-sync.js +64 -16
  558. package/dist/keryx-http/src/initial-sync.js.map +1 -1
  559. package/dist/keryx-http/src/own-awareness.cjs +20 -0
  560. package/dist/keryx-http/src/own-awareness.cjs.map +1 -0
  561. package/dist/keryx-http/src/own-awareness.d.ts +50 -0
  562. package/dist/keryx-http/src/own-awareness.js +20 -0
  563. package/dist/keryx-http/src/own-awareness.js.map +1 -0
  564. package/dist/keryx-http/src/update-attributions.cjs +26 -1
  565. package/dist/keryx-http/src/update-attributions.cjs.map +1 -1
  566. package/dist/keryx-http/src/update-attributions.d.ts +10 -1
  567. package/dist/keryx-http/src/update-attributions.js +26 -1
  568. package/dist/keryx-http/src/update-attributions.js.map +1 -1
  569. package/dist/offline/chat-outbox.cjs +262 -26
  570. package/dist/offline/chat-outbox.cjs.map +1 -1
  571. package/dist/offline/chat-outbox.d.ts +90 -12
  572. package/dist/offline/chat-outbox.js +263 -27
  573. package/dist/offline/chat-outbox.js.map +1 -1
  574. package/dist/provider/AthenaProvider.cjs +60 -22
  575. package/dist/provider/AthenaProvider.cjs.map +1 -1
  576. package/dist/provider/AthenaProvider.d.ts +24 -8
  577. package/dist/provider/AthenaProvider.js +61 -23
  578. package/dist/provider/AthenaProvider.js.map +1 -1
  579. package/dist/react/package.json.cjs +1 -1
  580. package/dist/react/package.json.js +1 -1
  581. package/dist/references/src/anchors/parse.cjs +11 -1
  582. package/dist/references/src/anchors/parse.cjs.map +1 -1
  583. package/dist/references/src/anchors/parse.js +11 -1
  584. package/dist/references/src/anchors/parse.js.map +1 -1
  585. package/dist/references/src/anchors/schemas.d.ts +1 -0
  586. package/dist/references/src/anchors/serialize.cjs +1 -0
  587. package/dist/references/src/anchors/serialize.cjs.map +1 -1
  588. package/dist/references/src/anchors/serialize.js +1 -0
  589. package/dist/references/src/anchors/serialize.js.map +1 -1
  590. package/dist/references/src/anchors/types.cjs +5 -0
  591. package/dist/references/src/anchors/types.cjs.map +1 -1
  592. package/dist/references/src/anchors/types.d.ts +9 -0
  593. package/dist/references/src/anchors/types.js +5 -0
  594. package/dist/references/src/anchors/types.js.map +1 -1
  595. package/dist/references/src/attachable.cjs +149 -0
  596. package/dist/references/src/attachable.cjs.map +1 -0
  597. package/dist/references/src/attachable.d.ts +87 -0
  598. package/dist/references/src/attachable.js +149 -0
  599. package/dist/references/src/attachable.js.map +1 -0
  600. package/dist/references/src/schemas.d.ts +2 -0
  601. package/dist/runtime/StatewirePlanModeLaneSync.cjs +93 -0
  602. package/dist/runtime/StatewirePlanModeLaneSync.cjs.map +1 -0
  603. package/dist/runtime/StatewirePlanModeLaneSync.d.ts +34 -0
  604. package/dist/runtime/StatewirePlanModeLaneSync.js +93 -0
  605. package/dist/runtime/StatewirePlanModeLaneSync.js.map +1 -0
  606. package/dist/runtime/StatewireThreadConfigLaneSync.cjs +2 -0
  607. package/dist/runtime/StatewireThreadConfigLaneSync.cjs.map +1 -1
  608. package/dist/runtime/StatewireThreadConfigLaneSync.d.ts +4 -0
  609. package/dist/runtime/StatewireThreadConfigLaneSync.js +2 -0
  610. package/dist/runtime/StatewireThreadConfigLaneSync.js.map +1 -1
  611. package/dist/runtime/statewire-plan-mode.cjs +71 -0
  612. package/dist/runtime/statewire-plan-mode.cjs.map +1 -0
  613. package/dist/runtime/statewire-plan-mode.d.ts +88 -0
  614. package/dist/runtime/statewire-plan-mode.js +71 -0
  615. package/dist/runtime/statewire-plan-mode.js.map +1 -0
  616. package/dist/runtime/statewire-run-config.cjs +3 -1
  617. package/dist/runtime/statewire-run-config.cjs.map +1 -1
  618. package/dist/runtime/statewire-run-config.d.ts +7 -0
  619. package/dist/runtime/statewire-run-config.js +3 -1
  620. package/dist/runtime/statewire-run-config.js.map +1 -1
  621. package/dist/runtime/statewire-session-key.cjs +11 -5
  622. package/dist/runtime/statewire-session-key.cjs.map +1 -1
  623. package/dist/runtime/statewire-session-key.d.ts +22 -10
  624. package/dist/runtime/statewire-session-key.js +11 -5
  625. package/dist/runtime/statewire-session-key.js.map +1 -1
  626. package/dist/runtime/useAthenaStatewireRuntime.cjs +64 -9
  627. package/dist/runtime/useAthenaStatewireRuntime.cjs.map +1 -1
  628. package/dist/runtime/useAthenaStatewireRuntime.d.ts +26 -10
  629. package/dist/runtime/useAthenaStatewireRuntime.js +66 -11
  630. package/dist/runtime/useAthenaStatewireRuntime.js.map +1 -1
  631. package/dist/search/useAthenaAssets.cjs +394 -0
  632. package/dist/search/useAthenaAssets.cjs.map +1 -0
  633. package/dist/search/useAthenaAssets.d.ts +186 -0
  634. package/dist/search/useAthenaAssets.js +394 -0
  635. package/dist/search/useAthenaAssets.js.map +1 -0
  636. package/dist/sheet-range/index.cjs +4 -0
  637. package/dist/sheet-range/index.cjs.map +1 -1
  638. package/dist/sheet-range/index.d.ts +4 -2
  639. package/dist/sheet-range/index.js +4 -0
  640. package/dist/sheet-range/index.js.map +1 -1
  641. package/dist/sheet-range/query-range.cjs +102 -0
  642. package/dist/sheet-range/query-range.cjs.map +1 -0
  643. package/dist/sheet-range/query-range.d.ts +46 -0
  644. package/dist/sheet-range/query-range.js +102 -0
  645. package/dist/sheet-range/query-range.js.map +1 -0
  646. package/dist/styles.css +1 -1
  647. package/dist/subagents/index.cjs +49 -0
  648. package/dist/subagents/index.cjs.map +1 -0
  649. package/dist/subagents/index.d.ts +16 -0
  650. package/dist/subagents/index.js +49 -0
  651. package/dist/subagents/index.js.map +1 -0
  652. package/dist/subagents/lane-follow.cjs +19 -0
  653. package/dist/subagents/lane-follow.cjs.map +1 -0
  654. package/dist/subagents/lane-follow.d.ts +9 -0
  655. package/dist/subagents/lane-follow.js +19 -0
  656. package/dist/subagents/lane-follow.js.map +1 -0
  657. package/dist/subagents/lane-model.cjs +178 -0
  658. package/dist/subagents/lane-model.cjs.map +1 -0
  659. package/dist/subagents/lane-model.d.ts +140 -0
  660. package/dist/subagents/lane-model.js +178 -0
  661. package/dist/subagents/lane-model.js.map +1 -0
  662. package/dist/subagents/lane-parts.cjs +517 -0
  663. package/dist/subagents/lane-parts.cjs.map +1 -0
  664. package/dist/subagents/lane-parts.d.ts +130 -0
  665. package/dist/subagents/lane-parts.js +517 -0
  666. package/dist/subagents/lane-parts.js.map +1 -0
  667. package/dist/subagents/subagent-lane-group.cjs +215 -0
  668. package/dist/subagents/subagent-lane-group.cjs.map +1 -0
  669. package/dist/subagents/subagent-lane-group.d.ts +67 -0
  670. package/dist/subagents/subagent-lane-group.js +215 -0
  671. package/dist/subagents/subagent-lane-group.js.map +1 -0
  672. package/dist/subagents/subagent-transcript-drawer.cjs +431 -0
  673. package/dist/subagents/subagent-transcript-drawer.cjs.map +1 -0
  674. package/dist/subagents/subagent-transcript-drawer.d.ts +78 -0
  675. package/dist/subagents/subagent-transcript-drawer.js +431 -0
  676. package/dist/subagents/subagent-transcript-drawer.js.map +1 -0
  677. package/dist/subagents/task-subagent-group.cjs +115 -0
  678. package/dist/subagents/task-subagent-group.cjs.map +1 -0
  679. package/dist/subagents/task-subagent-group.d.ts +36 -0
  680. package/dist/subagents/task-subagent-group.js +115 -0
  681. package/dist/subagents/task-subagent-group.js.map +1 -0
  682. package/dist/subagents/use-omitted-images-in-view.cjs +68 -0
  683. package/dist/subagents/use-omitted-images-in-view.cjs.map +1 -0
  684. package/dist/subagents/use-omitted-images-in-view.d.ts +21 -0
  685. package/dist/subagents/use-omitted-images-in-view.js +68 -0
  686. package/dist/subagents/use-omitted-images-in-view.js.map +1 -0
  687. package/dist/threads/Inbox.cjs +2 -2
  688. package/dist/threads/Inbox.cjs.map +1 -1
  689. package/dist/threads/SessionList.cjs +6 -6
  690. package/dist/threads/SessionList.cjs.map +1 -1
  691. package/dist/threads/SessionsPage.cjs +13 -7
  692. package/dist/threads/SessionsPage.cjs.map +1 -1
  693. package/dist/threads/SessionsPage.d.ts +10 -1
  694. package/dist/threads/SessionsPage.js +9 -3
  695. package/dist/threads/SessionsPage.js.map +1 -1
  696. package/dist/threads/session-list-model.cjs.map +1 -1
  697. package/dist/threads/session-list-model.d.ts +2 -1
  698. package/dist/threads/session-list-model.js.map +1 -1
  699. package/dist/threads/session-row-parts.cjs +3 -3
  700. package/dist/threads/session-row-parts.cjs.map +1 -1
  701. package/dist/threads/sessions-page-model.cjs +13 -5
  702. package/dist/threads/sessions-page-model.cjs.map +1 -1
  703. package/dist/threads/sessions-page-model.d.ts +7 -0
  704. package/dist/threads/sessions-page-model.js +11 -3
  705. package/dist/threads/sessions-page-model.js.map +1 -1
  706. package/dist/threads/sessions-page-storage.cjs +8 -8
  707. package/dist/threads/sessions-page-storage.cjs.map +1 -1
  708. package/dist/threads/sessions-page-storage.d.ts +5 -1
  709. package/dist/threads/sessions-page-storage.js +8 -8
  710. package/dist/threads/sessions-page-storage.js.map +1 -1
  711. package/dist/threads/statewire-thread-list.cjs +14 -2
  712. package/dist/threads/statewire-thread-list.cjs.map +1 -1
  713. package/dist/threads/statewire-thread-list.d.ts +11 -2
  714. package/dist/threads/statewire-thread-list.js +14 -2
  715. package/dist/threads/statewire-thread-list.js.map +1 -1
  716. package/dist/threads/use-athena-sessions.cjs +1 -0
  717. package/dist/threads/use-athena-sessions.cjs.map +1 -1
  718. package/dist/threads/use-athena-sessions.d.ts +7 -0
  719. package/dist/threads/use-athena-sessions.js +1 -0
  720. package/dist/threads/use-athena-sessions.js.map +1 -1
  721. package/dist/threads/use-athena-thread-agent.cjs +31 -0
  722. package/dist/threads/use-athena-thread-agent.cjs.map +1 -0
  723. package/dist/threads/use-athena-thread-agent.d.ts +38 -0
  724. package/dist/threads/use-athena-thread-agent.js +31 -0
  725. package/dist/threads/use-athena-thread-agent.js.map +1 -0
  726. package/dist/threads/use-athena-thread-plan-mode.cjs +18 -0
  727. package/dist/threads/use-athena-thread-plan-mode.cjs.map +1 -0
  728. package/dist/threads/use-athena-thread-plan-mode.d.ts +18 -0
  729. package/dist/threads/use-athena-thread-plan-mode.js +18 -0
  730. package/dist/threads/use-athena-thread-plan-mode.js.map +1 -0
  731. package/dist/threads/use-rest-conversation-history.d.ts +1 -0
  732. package/dist/tools/agent-creations.cjs +97 -0
  733. package/dist/tools/agent-creations.cjs.map +1 -0
  734. package/dist/tools/agent-creations.d.ts +38 -0
  735. package/dist/tools/agent-creations.js +97 -0
  736. package/dist/tools/agent-creations.js.map +1 -0
  737. package/dist/tools/agent-highlights.cjs +100 -0
  738. package/dist/tools/agent-highlights.cjs.map +1 -0
  739. package/dist/tools/agent-highlights.d.ts +57 -0
  740. package/dist/tools/agent-highlights.js +100 -0
  741. package/dist/tools/agent-highlights.js.map +1 -0
  742. package/dist/tools/append-document-tool-ui.cjs +1 -0
  743. package/dist/tools/append-document-tool-ui.cjs.map +1 -1
  744. package/dist/tools/append-document-tool-ui.d.ts +7 -0
  745. package/dist/tools/append-document-tool-ui.js +2 -1
  746. package/dist/tools/append-document-tool-ui.js.map +1 -1
  747. package/dist/tools/auto-open-tools.cjs +144 -71
  748. package/dist/tools/auto-open-tools.cjs.map +1 -1
  749. package/dist/tools/auto-open-tools.d.ts +131 -1
  750. package/dist/tools/auto-open-tools.js +145 -72
  751. package/dist/tools/auto-open-tools.js.map +1 -1
  752. package/dist/tools/browser-tool-uis.cjs +594 -0
  753. package/dist/tools/browser-tool-uis.cjs.map +1 -0
  754. package/dist/tools/browser-tool-uis.d.ts +8 -0
  755. package/dist/tools/browser-tool-uis.js +594 -0
  756. package/dist/tools/browser-tool-uis.js.map +1 -0
  757. package/dist/tools/computer-asset-tool-uis.cjs +313 -0
  758. package/dist/tools/computer-asset-tool-uis.cjs.map +1 -0
  759. package/dist/tools/computer-asset-tool-uis.d.ts +5 -0
  760. package/dist/tools/computer-asset-tool-uis.js +313 -0
  761. package/dist/tools/computer-asset-tool-uis.js.map +1 -0
  762. package/dist/tools/document-edit-tool-uis.cjs +218 -0
  763. package/dist/tools/document-edit-tool-uis.cjs.map +1 -0
  764. package/dist/tools/document-edit-tool-uis.d.ts +40 -0
  765. package/dist/tools/document-edit-tool-uis.js +218 -0
  766. package/dist/tools/document-edit-tool-uis.js.map +1 -0
  767. package/dist/tools/drive-tool-uis.cjs +429 -0
  768. package/dist/tools/drive-tool-uis.cjs.map +1 -0
  769. package/dist/tools/drive-tool-uis.d.ts +121 -0
  770. package/dist/tools/drive-tool-uis.js +429 -0
  771. package/dist/tools/drive-tool-uis.js.map +1 -0
  772. package/dist/tools/email-calendar-tool-uis.cjs +789 -0
  773. package/dist/tools/email-calendar-tool-uis.cjs.map +1 -0
  774. package/dist/tools/email-calendar-tool-uis.d.ts +129 -0
  775. package/dist/tools/email-calendar-tool-uis.js +789 -0
  776. package/dist/tools/email-calendar-tool-uis.js.map +1 -0
  777. package/dist/tools/ontology-tool-uis.cjs +83 -0
  778. package/dist/tools/ontology-tool-uis.cjs.map +1 -0
  779. package/dist/tools/ontology-tool-uis.d.ts +9 -0
  780. package/dist/tools/ontology-tool-uis.js +83 -0
  781. package/dist/tools/ontology-tool-uis.js.map +1 -0
  782. package/dist/tools/orchestration-tool-uis.cjs +586 -0
  783. package/dist/tools/orchestration-tool-uis.cjs.map +1 -0
  784. package/dist/tools/orchestration-tool-uis.d.ts +141 -0
  785. package/dist/tools/orchestration-tool-uis.js +586 -0
  786. package/dist/tools/orchestration-tool-uis.js.map +1 -0
  787. package/dist/tools/presentation-edit-tool-uis.cjs +516 -0
  788. package/dist/tools/presentation-edit-tool-uis.cjs.map +1 -0
  789. package/dist/tools/presentation-edit-tool-uis.d.ts +73 -0
  790. package/dist/tools/presentation-edit-tool-uis.js +516 -0
  791. package/dist/tools/presentation-edit-tool-uis.js.map +1 -0
  792. package/dist/tools/project-tool-uis.cjs +213 -0
  793. package/dist/tools/project-tool-uis.cjs.map +1 -0
  794. package/dist/tools/project-tool-uis.d.ts +14 -0
  795. package/dist/tools/project-tool-uis.js +213 -0
  796. package/dist/tools/project-tool-uis.js.map +1 -0
  797. package/dist/tools/sandbox-tool-uis.cjs +491 -0
  798. package/dist/tools/sandbox-tool-uis.cjs.map +1 -0
  799. package/dist/tools/sandbox-tool-uis.d.ts +116 -0
  800. package/dist/tools/sandbox-tool-uis.js +491 -0
  801. package/dist/tools/sandbox-tool-uis.js.map +1 -0
  802. package/dist/tools/sheet-query-tool-ui.cjs +138 -0
  803. package/dist/tools/sheet-query-tool-ui.cjs.map +1 -0
  804. package/dist/tools/sheet-query-tool-ui.d.ts +15 -0
  805. package/dist/tools/sheet-query-tool-ui.js +138 -0
  806. package/dist/tools/sheet-query-tool-ui.js.map +1 -0
  807. package/dist/tools/studio-screenshot-tool-uis.cjs +262 -0
  808. package/dist/tools/studio-screenshot-tool-uis.cjs.map +1 -0
  809. package/dist/tools/studio-screenshot-tool-uis.d.ts +52 -0
  810. package/dist/tools/studio-screenshot-tool-uis.js +262 -0
  811. package/dist/tools/studio-screenshot-tool-uis.js.map +1 -0
  812. package/dist/tools/subagent-task-tool-ui.cjs +24 -475
  813. package/dist/tools/subagent-task-tool-ui.cjs.map +1 -1
  814. package/dist/tools/subagent-task-tool-ui.d.ts +19 -103
  815. package/dist/tools/subagent-task-tool-ui.js +28 -479
  816. package/dist/tools/subagent-task-tool-ui.js.map +1 -1
  817. package/dist/tools/tool-summary.cjs +36 -0
  818. package/dist/tools/tool-summary.cjs.map +1 -1
  819. package/dist/tools/tool-summary.js +36 -0
  820. package/dist/tools/tool-summary.js.map +1 -1
  821. package/dist/tools/tool-uis.cjs +181 -53
  822. package/dist/tools/tool-uis.cjs.map +1 -1
  823. package/dist/tools/tool-uis.d.ts +40 -0
  824. package/dist/tools/tool-uis.js +183 -55
  825. package/dist/tools/tool-uis.js.map +1 -1
  826. package/dist/typed-interrupts/index.cjs +15 -0
  827. package/dist/typed-interrupts/index.cjs.map +1 -0
  828. package/dist/typed-interrupts/index.d.ts +20 -0
  829. package/dist/typed-interrupts/index.js +15 -0
  830. package/dist/typed-interrupts/index.js.map +1 -0
  831. package/dist/version.cjs +4 -0
  832. package/dist/version.cjs.map +1 -1
  833. package/dist/version.d.ts +9 -0
  834. package/dist/version.js +4 -0
  835. package/dist/version.js.map +1 -1
  836. package/dist/workbench/live-desktop-api.cjs +2 -1
  837. package/dist/workbench/live-desktop-api.cjs.map +1 -1
  838. package/dist/workbench/live-desktop-api.js +2 -1
  839. package/dist/workbench/live-desktop-api.js.map +1 -1
  840. package/dist/workbench/session-workbench-panes.cjs +6 -6
  841. package/dist/workbench/session-workbench-panes.cjs.map +1 -1
  842. package/dist/workbench/session-workspace-api.cjs +7 -2
  843. package/dist/workbench/session-workspace-api.cjs.map +1 -1
  844. package/dist/workbench/session-workspace-api.d.ts +10 -0
  845. package/dist/workbench/session-workspace-api.js +7 -2
  846. package/dist/workbench/session-workspace-api.js.map +1 -1
  847. package/package.json +28 -6
  848. package/dist/agent-runtime/src/chat-outbox-store.cjs +0 -510
  849. package/dist/agent-runtime/src/chat-outbox-store.cjs.map +0 -1
  850. package/dist/agent-runtime/src/chat-outbox-store.d.ts +0 -210
  851. package/dist/agent-runtime/src/chat-outbox-store.js +0 -510
  852. package/dist/agent-runtime/src/chat-outbox-store.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"email-calendar-tool-uis.js","sources":["../../src/tools/email-calendar-tool-uis.tsx"],"sourcesContent":["\"use client\";\n\n/**\n * Compact cards for an Athena email send (`send_email_from_athena`), a mail\n * read (`unified_email_get_thread`, and the retired `unified_email_get_message`\n * old transcripts hold) and a calendar search (`unified_search_calendar_events`),\n * beside the SDK's email search and draft cards and in their look.\n *\n * Olympus draws these in Gmail's and Google Calendar's own skins, with\n * replies, RSVPs and day/week grids that need its mail and calendar routes;\n * these keep what a reader needs from each — the email that went out, each\n * message of a conversation, each event — in Olympus's wording. Everything\n * shown comes from the call's own arguments and result.\n */\nimport { memo, useMemo, type ReactNode } from \"react\";\nimport type {\n ToolCallMessagePartComponent,\n ToolCallMessagePartProps,\n} from \"@assistant-ui/react\";\nimport { CalendarIcon, MailIcon } from \"lucide-react\";\nimport { classifyToolResult, isRecord, stringField } from \"@athenaintel/agent-runtime\";\nimport { useAssetPanelStore } from \"../assets/asset-panel-store\";\nimport { cn } from \"../lib/utils\";\nimport { rendersAsGenericCard, waitingTitle } from \"./document-edit-tool-uis\";\nimport {\n ExpandableSection,\n normalizeResult,\n ToolCard,\n type ToolStatus,\n truncate,\n} from \"./primitives\";\nimport { ToolFallback } from \"./tool-fallback\";\n\n// ─── Shared reading ──────────────────────────────────────────────────\n\nfunction recordOf(value: unknown): Record<string, unknown> {\n return isRecord(value) ? value : {};\n}\n\nfunction text(value: unknown): string {\n return typeof value === \"string\" ? value : \"\";\n}\n\nfunction nonEmpty(value: unknown): string | null {\n return typeof value === \"string\" && value.trim() ? value : null;\n}\n\nfunction list(value: unknown): readonly unknown[] {\n return Array.isArray(value) ? value : [];\n}\n\nfunction plural(count: number, unit: string): string {\n return `${count} ${unit}${count === 1 ? \"\" : \"s\"}`;\n}\n\n/** A Manage-panel link agora puts in some refusals; it is an Olympus route, so the text drops it. */\nconst WRAPPED_MANAGE_URL = /\\s*\\(\\s*\\/dashboard\\/email\\/?\\?[^\\s)]*view=manage[^\\s)]*\\s*\\)/i;\nconst MANAGE_URL = /\\/dashboard\\/email\\/?\\?[^\\s)]*view=manage[^\\s)]*/i;\n\nfunction withoutManageLink(message: string): string {\n return message.replace(WRAPPED_MANAGE_URL, \"\").replace(MANAGE_URL, \"\").trim();\n}\n\n/** A failure as a card says it: the heading, agora's words, and its guidance when it gave some. */\ninterface CardFailure {\n title: string;\n detail: string;\n guidance: string | null;\n}\n\nfunction FailureGuidance({ guidance }: { guidance: string | null }) {\n if (!guidance) return null;\n return (\n <div className=\"border-t border-border/40 px-4 py-2\">\n <p className=\"text-[11px] leading-relaxed text-muted-foreground\">{guidance}</p>\n </div>\n );\n}\n\nconst EMAIL_NOT_CONNECTED_STATUS = \"not_connected\";\nconst EMAIL_NOT_CONNECTED_ERROR = \"No email accounts connected\";\n\n// ─── Send email from Athena ──────────────────────────────────────────\n\nexport type AthenaEmailSendOutcome =\n | { kind: \"sent\" }\n | { kind: \"already-sent\"; message: string }\n | { kind: \"not-sent\"; message: string }\n | { kind: \"failed\"; detail: string };\n\n/** Developer guidance agora appends for the model, which a reader should not see. */\nfunction sanitizeErrorMessage(raw: string): string {\n return raw\n .replace(/Please fix your mistakes\\.?/gi, \"\")\n .replace(/\\s{2,}/g, \" \")\n .trim();\n}\n\nconst FAILED_TO_SEND = /^Failed to send:?\\s*/;\n\n/**\n * What a `send_email_from_athena` call did. Agora answers \"Successfully sent\",\n * \"Failed to send: …\" when Resend refused it, or JSON: `{ error }`, a send the\n * skip list stopped (`status: \"skipped\"`), or a repeat of a send this session\n * already made (`status: \"duplicate_suppressed\"`).\n */\nexport function readAthenaEmailSendOutcome({\n status,\n result,\n isError,\n}: Pick<ToolCallMessagePartProps, \"status\" | \"result\" | \"isError\">): AthenaEmailSendOutcome {\n const classification = classifyToolResult({ status, result, isError });\n if (classification.state === \"error\") {\n return { kind: \"failed\", detail: sanitizeErrorMessage(classification.failure.message) };\n }\n if (typeof result === \"string\" && FAILED_TO_SEND.test(result.trim())) {\n const detail = sanitizeErrorMessage(result.trim().replace(FAILED_TO_SEND, \"\"));\n return { kind: \"failed\", detail: detail || \"Something went wrong while sending the email.\" };\n }\n const data = normalizeResult(result);\n const message = nonEmpty(data?.message);\n if (data?.status === \"skipped\" && message) return { kind: \"not-sent\", message };\n if (data?.status === \"duplicate_suppressed\" && message) {\n return { kind: \"already-sent\", message };\n }\n return { kind: \"sent\" };\n}\n\n/** `to` / `cc` / `bcc` as written: one address, a comma-separated list, or a list. */\nfunction recipientsText(value: unknown): string {\n if (Array.isArray(value)) {\n return value.filter((item): item is string => typeof item === \"string\").join(\", \");\n }\n return text(value).trim();\n}\n\n/** `asset_ids` arrive as a list, a JSON-encoded list, or one id. */\nfunction attachmentIds(value: unknown): string[] {\n if (Array.isArray(value)) {\n return value.filter((id): id is string => typeof id === \"string\" && id.trim() !== \"\");\n }\n const raw = text(value).trim();\n if (!raw) return [];\n try {\n const parsed: unknown = JSON.parse(raw);\n if (Array.isArray(parsed)) {\n return parsed.filter((id): id is string => typeof id === \"string\" && id.trim() !== \"\");\n }\n } catch {\n // Not JSON: the string is one id.\n }\n return [raw];\n}\n\nconst BODY_EXCERPT_CHARS = 280;\n\n/** The start of the body as plain text: an HTML body loses its tags, any body its runs of whitespace. */\nexport function emailBodyExcerpt({\n body,\n contentType,\n}: {\n body: string;\n contentType: string;\n}): string {\n const plain =\n contentType === \"text/html\"\n ? body\n .replace(/<(style|script)[^>]*>[\\s\\S]*?<\\/\\1>/gi, \" \")\n .replace(/<[^>]+>/g, \" \")\n .replace(/&nbsp;/g, \" \")\n .replace(/&amp;/g, \"&\")\n .replace(/&lt;/g, \"<\")\n .replace(/&gt;/g, \">\")\n : body;\n return truncate(plain.replace(/\\s+/g, \" \").trim(), BODY_EXCERPT_CHARS);\n}\n\nfunction DetailRow({ label, children }: { label: string; children: ReactNode }) {\n return (\n <>\n <dt className=\"font-medium text-muted-foreground\">{label}</dt>\n <dd className=\"min-w-0 break-all text-foreground\">{children}</dd>\n </>\n );\n}\n\n/** The email being sent, as Olympus's card lists it: recipients, subject, files, then the body. */\nfunction AthenaEmailDetails({ args }: { args: Record<string, unknown> }) {\n const openAsset = useAssetPanelStore((s) => s.openAsset);\n const to = recipientsText(args.to);\n const cc = recipientsText(args.cc);\n const bcc = recipientsText(args.bcc);\n const subject = text(args.subject).trim();\n const files = attachmentIds(args.asset_ids);\n const excerpt = emailBodyExcerpt({\n body: text(args.body),\n contentType: text(args.content_type),\n });\n if (!to && !cc && !bcc && !subject && files.length === 0 && !excerpt) return null;\n\n return (\n <div className=\"border-t border-border/40 px-4 py-2.5\">\n <dl className=\"grid grid-cols-[3.5rem_minmax(0,1fr)] gap-x-2 gap-y-1 text-[12px]\">\n {to ? <DetailRow label=\"To\">{to}</DetailRow> : null}\n {cc ? <DetailRow label=\"CC\">{cc}</DetailRow> : null}\n {bcc ? <DetailRow label=\"BCC\">{bcc}</DetailRow> : null}\n {subject ? <DetailRow label=\"Subject\">{subject}</DetailRow> : null}\n {files.length > 0 ? (\n <DetailRow label=\"Files\">\n <span className=\"flex flex-wrap gap-1.5\">\n {files.map((id) => (\n <button\n key={id}\n type=\"button\"\n title={id}\n onClick={() => openAsset(id)}\n className=\"max-w-[200px] truncate rounded-md border border-border/60 bg-muted/40 px-2 py-0.5 text-[11px] text-muted-foreground transition-colors hover:bg-muted hover:text-foreground\"\n >\n {`${id.slice(0, 8)}...`}\n </button>\n ))}\n </span>\n </DetailRow>\n ) : null}\n </dl>\n {excerpt ? (\n <p className=\"mt-2 border-t border-border/40 pt-2 text-[11px] leading-relaxed text-muted-foreground\">\n {excerpt}\n </p>\n ) : null}\n </div>\n );\n}\n\nconst SendAthenaEmailToolUIImpl: ToolCallMessagePartComponent = (props) => {\n const { toolName, args, result, status, isError } = props;\n if (rendersAsGenericCard(props)) return <ToolFallback {...props} icon={MailIcon} />;\n\n const typedArgs = recordOf(args);\n const subject = text(typedArgs.subject).trim();\n const to = recipientsText(typedArgs.to);\n const isRunning = status?.type === \"running\";\n const isWaiting = status?.type === \"requires-action\";\n const outcome =\n isRunning || isWaiting ? null : readAthenaEmailSendOutcome({ status, result, isError });\n\n const cardStatus: ToolStatus = isRunning\n ? \"running\"\n : isWaiting\n ? \"requires-action\"\n : outcome?.kind === \"failed\" || outcome?.kind === \"not-sent\"\n ? \"incomplete\"\n : \"complete\";\n const title = isRunning\n ? \"Sending email...\"\n : isWaiting\n ? waitingTitle(toolName)\n : outcome?.kind === \"failed\"\n ? \"Failed to send email\"\n : outcome?.kind === \"not-sent\"\n ? \"Email not sent\"\n : outcome?.kind === \"already-sent\"\n ? \"Email already sent\"\n : \"Email sent\";\n const error =\n outcome?.kind === \"failed\"\n ? outcome.detail\n : outcome?.kind === \"not-sent\"\n ? outcome.message\n : null;\n\n return (\n <ToolCard\n icon={MailIcon}\n status={cardStatus}\n title={title}\n subtitle={subject ? truncate(subject, 60) : to ? `To: ${truncate(to, 40)}` : undefined}\n toolName={toolName}\n error={error}\n args={typedArgs}\n result={result}\n >\n {outcome?.kind === \"already-sent\" ? (\n <div className=\"border-t border-border/40 bg-amber-500/10 px-4 py-2.5\">\n <p className=\"text-[12px] leading-relaxed text-amber-600\">{outcome.message}</p>\n </div>\n ) : null}\n {outcome?.kind !== \"failed\" ? <AthenaEmailDetails args={typedArgs} /> : null}\n </ToolCard>\n );\n};\n\n/** `send_email_from_athena`: who it went to, the subject and the start of the body; sent, or why not. */\nexport const SendAthenaEmailToolUI = memo(\n SendAthenaEmailToolUIImpl,\n) as unknown as ToolCallMessagePartComponent;\nSendAthenaEmailToolUI.displayName = \"SendAthenaEmailToolUI\";\n\n// ─── Email reads ─────────────────────────────────────────────────────\n\n/** Why an email read did not do what it was asked, in Olympus's words, or `null`. */\nexport function readEmailToolFailure(result: unknown): CardFailure | null {\n const record = normalizeResult(result);\n if (!record) return null;\n const error = text(record.error).trim();\n if (record.status === EMAIL_NOT_CONNECTED_STATUS || error === EMAIL_NOT_CONNECTED_ERROR) {\n return {\n title: \"Email Not Connected\",\n detail: \"Connect your email account to use this feature.\",\n guidance: null,\n };\n }\n if (record.reconnect_required === true) {\n return {\n title: \"Email Connection Expired\",\n detail:\n \"Your email account's authorization has expired or been revoked. Reconnect it to continue.\",\n guidance: null,\n };\n }\n if (!error) return null;\n return { title: \"Error\", detail: withoutManageLink(error), guidance: nonEmpty(record.guidance) };\n}\n\nexport interface EmailThreadMessage {\n sender: string;\n senderAddress: string;\n date: Date | null;\n /** The Date header as written, for a read whose date did not parse. */\n dateText: string;\n snippet: string;\n isDraft: boolean;\n labels: readonly string[];\n}\n\nexport interface EmailThreadView {\n subject: string;\n provider: string;\n /** Oldest first, as Gmail lists a conversation. */\n messages: EmailThreadMessage[];\n /** One message read (`message_id`) rather than a conversation. */\n isSingleMessage: boolean;\n}\n\n/** `Name <address>`, a quoted name, or a bare address. */\nconst NAMED_ADDRESS = /^\\s*\"?([^\"<>]*?)\"?\\s*<\\s*([^<>\\s]+)\\s*>\\s*$/;\n\n/** The sender Gmail's list shows: the display name, else the address's local part, else the header as written. */\nfunction senderOf(value: unknown): { label: string; address: string } {\n if (isRecord(value)) {\n const name = text(value.name).trim();\n const address = text(value.email).trim();\n return { label: name || localPart(address), address };\n }\n const raw = text(value).trim();\n const named = NAMED_ADDRESS.exec(raw);\n if (named) {\n const name = (named[1] ?? \"\").trim();\n const address = named[2] ?? \"\";\n return { label: name || localPart(address), address };\n }\n return raw.includes(\"@\") ? { label: localPart(raw), address: raw } : { label: raw, address: \"\" };\n}\n\nfunction localPart(address: string): string {\n const at = address.indexOf(\"@\");\n return at > 0 ? address.slice(0, at) : address;\n}\n\nfunction parseEmailDate(value: string): Date | null {\n const raw = value.trim();\n if (!raw) return null;\n const parsed = new Date(raw);\n return Number.isNaN(parsed.getTime()) ? null : parsed;\n}\n\nconst MESSAGE_SEPARATOR = /^--- Message \\d+ of \\d+ ---$/m;\nconst TEXT_HEADER_LINE = /^(Subject|From|To|Cc|Date):/;\nconst DRAFT_BANNER_LINE = /^\\[UNSENT DRAFT\\b/;\n\n/** One message's body in a legacy text transcript: the banner and header lines left out. */\nfunction legacyBody(block: string): string {\n const lines = block.replace(/^\\n+/, \"\").split(\"\\n\");\n let index = 0;\n if (DRAFT_BANNER_LINE.test(lines[index] ?? \"\")) index += 1;\n const headerStart = index;\n while (index < lines.length && TEXT_HEADER_LINE.test(lines[index] ?? \"\")) index += 1;\n if (index > headerStart && (lines[index] ?? \"\").trim() === \"\") index += 1;\n return lines.slice(index).join(\"\\n\").trim();\n}\n\n/** The bodies of a legacy read's text transcript, one per `--- Message i of n ---` block. */\nfunction legacyBodies(content: string, count: number): string[] {\n const parts = content.split(MESSAGE_SEPARATOR);\n const blocks = parts.length > 1 ? parts.slice(1) : parts;\n const bodies = blocks.map(legacyBody);\n if (bodies.length === count) return bodies;\n if (count === 1) return [bodies.join(\"\\n\\n\").trim()];\n return Array.from({ length: count }, (_, index) => bodies[index] ?? \"\");\n}\n\nconst SNIPPET_CHARS = 240;\n\nfunction threadMessageOf(value: unknown, body: string): EmailThreadMessage | null {\n if (!isRecord(value)) return null;\n const labels = list(value.labels).filter(\n (label): label is string => typeof label === \"string\" && label !== \"\",\n );\n const sender = senderOf(value.from);\n const dateText = text(value.date);\n return {\n sender: sender.label,\n senderAddress: sender.address,\n date: parseEmailDate(dateText),\n dateText,\n snippet: (text(value.text) || body).replace(/\\s+/g, \" \").trim().slice(0, SNIPPET_CHARS),\n isDraft: value.is_draft === true || labels.includes(\"DRAFT\"),\n labels,\n };\n}\n\n/**\n * A read (`unified_email_get_thread` by thread or message id, or the retired\n * `unified_email_get_message`), or `null`: Gmail's per-message `messages`, or\n * the `messages_metadata` + text `content` every Outlook read and older\n * transcript carries.\n */\nexport function parseEmailThreadResult(result: unknown): EmailThreadView | null {\n const record = normalizeResult(result);\n if (!record || record.success === false) return null;\n let messages = list(record.messages).flatMap((item) => {\n const message = threadMessageOf(item, \"\");\n return message ? [message] : [];\n });\n if (messages.length === 0) {\n const metadata = list(record.messages_metadata);\n const content = text(record.content);\n if (metadata.length === 0 && !content.trim()) return null;\n const count = Math.max(metadata.length, 1);\n const bodies = legacyBodies(content, count);\n messages = Array.from({ length: count }, (_, index) =>\n threadMessageOf(recordOf(metadata[index]), bodies[index] ?? \"\"),\n ).filter((message): message is EmailThreadMessage => message !== null);\n }\n if (messages.length === 0) return null;\n const subjectSource = [...list(record.messages), ...list(record.messages_metadata)].find(\n (item) => nonEmpty(recordOf(item).subject) !== null,\n );\n return {\n subject: text(recordOf(subjectSource).subject).trim(),\n provider: text(record.provider),\n messages,\n isSingleMessage: nonEmpty(record.message_id) !== null && record.message_count === undefined,\n };\n}\n\nconst MONTHS = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"];\n/** U+202F before AM/PM, as Gmail prints a time. */\nconst NARROW_SPACE = \" \";\n\nfunction gmailTime(date: Date): string {\n const hours = date.getHours();\n const hour12 = hours % 12 === 0 ? 12 : hours % 12;\n const minutes = String(date.getMinutes()).padStart(2, \"0\");\n return `${hour12}:${minutes}${NARROW_SPACE}${hours < 12 ? \"AM\" : \"PM\"}`;\n}\n\n/** Gmail's list date: today's time (\"5:46 PM\"), this year's \"Oct 28\", else \"10/28/25\". */\nexport function gmailListDate({ date, now }: { date: Date; now: Date }): string {\n if (date.toDateString() === now.toDateString()) return gmailTime(date);\n if (date.getFullYear() === now.getFullYear()) {\n return `${MONTHS[date.getMonth()]} ${date.getDate()}`;\n }\n const year = String(date.getFullYear() % 100).padStart(2, \"0\");\n return `${date.getMonth() + 1}/${date.getDate()}/${year}`;\n}\n\n/** The full date Gmail shows on hover: \"Oct 29, 2026, 5:46 PM\". */\nexport function gmailFullDate(date: Date): string {\n return `${MONTHS[date.getMonth()]} ${date.getDate()}, ${date.getFullYear()}, ${gmailTime(date)}`;\n}\n\n/** The label chips Gmail shows beside a subject; a user label is an opaque id, so it gets none. */\nconst LABEL_CHIP_NAMES: Readonly<Record<string, string>> = {\n INBOX: \"Inbox\",\n SPAM: \"Spam\",\n TRASH: \"Trash\",\n};\n\nfunction ThreadMessageRow({ message, now }: { message: EmailThreadMessage; now: Date }) {\n return (\n <div className=\"flex flex-col gap-0.5 py-2 first:pt-0 last:pb-0\">\n <div className=\"flex items-baseline justify-between gap-2\">\n <span className=\"flex min-w-0 items-baseline gap-1 text-[12px] font-medium text-foreground\">\n <span className=\"truncate\" title={message.senderAddress || undefined}>\n {message.sender || message.senderAddress || \"Unknown sender\"}\n </span>\n {message.isDraft ? (\n <span className=\"shrink-0 font-normal text-destructive\">Draft</span>\n ) : null}\n </span>\n {message.date ? (\n <span\n className=\"shrink-0 text-[10px] text-muted-foreground\"\n title={gmailFullDate(message.date)}\n >\n {gmailListDate({ date: message.date, now })}\n </span>\n ) : message.dateText ? (\n <span className=\"shrink-0 text-[10px] text-muted-foreground\">{message.dateText}</span>\n ) : null}\n </div>\n {message.snippet ? (\n <p className=\"text-[11px] leading-relaxed text-muted-foreground/80\">\n {truncate(message.snippet, 150)}\n </p>\n ) : null}\n </div>\n );\n}\n\n/**\n * Gmail's conversation order: the first message, the run between it and the\n * last two folded into \"N older messages\" once there are more than three, then\n * the last two.\n */\nfunction ThreadMessages({ messages }: { messages: readonly EmailThreadMessage[] }) {\n const now = new Date();\n const folded = messages.length > 3 ? messages.slice(1, -2) : [];\n const head = folded.length > 0 ? messages.slice(0, 1) : messages;\n const tail = folded.length > 0 ? messages.slice(-2) : [];\n const chips = (messages[messages.length - 1]?.labels ?? []).flatMap((label) => {\n const name = LABEL_CHIP_NAMES[label];\n return name ? [name] : [];\n });\n\n return (\n <div className=\"border-t border-border/40 px-4 py-2.5\">\n {chips.length > 0 ? (\n <div className=\"mb-2 flex flex-wrap gap-1\">\n {chips.map((chip) => (\n <span\n key={chip}\n className=\"rounded bg-muted px-1 py-px text-[10px] text-muted-foreground\"\n >\n {chip}\n </span>\n ))}\n </div>\n ) : null}\n <div className=\"flex flex-col divide-y divide-border/30\">\n {head.map((message, index) => (\n <ThreadMessageRow key={index} message={message} now={now} />\n ))}\n </div>\n {folded.length > 0 ? (\n <>\n <ExpandableSection label={plural(folded.length, \"older message\")}>\n <div className=\"flex flex-col divide-y divide-border/30\">\n {folded.map((message, index) => (\n <ThreadMessageRow key={index} message={message} now={now} />\n ))}\n </div>\n </ExpandableSection>\n <div className=\"flex flex-col divide-y divide-border/30 border-t border-border/30 pt-2\">\n {tail.map((message, index) => (\n <ThreadMessageRow key={index} message={message} now={now} />\n ))}\n </div>\n </>\n ) : null}\n </div>\n );\n}\n\nconst EmailThreadToolUIImpl: ToolCallMessagePartComponent = (props) => {\n const { toolName, args, result, status, isError } = props;\n const view = useMemo(() => parseEmailThreadResult(result), [result]);\n if (rendersAsGenericCard(props)) return <ToolFallback {...props} icon={MailIcon} />;\n\n const typedArgs = recordOf(args);\n const isMessage =\n toolName === \"unified_email_get_message\" ||\n (nonEmpty(typedArgs.message_id) !== null && nonEmpty(typedArgs.thread_id) === null);\n const classification = classifyToolResult({ status, result, isError });\n const isRunning = classification.state === \"running\";\n const isWaiting = classification.state === \"requires-action\";\n const failure: CardFailure | null =\n isRunning || isWaiting\n ? null\n : (readEmailToolFailure(result) ??\n (classification.state === \"error\"\n ? { title: \"Error\", detail: classification.failure.message, guidance: null }\n : null));\n const shown = failure ? null : view;\n\n const cardStatus: ToolStatus = isRunning\n ? \"running\"\n : isWaiting\n ? \"requires-action\"\n : failure\n ? \"incomplete\"\n : \"complete\";\n const title = isRunning\n ? isMessage\n ? \"Reading email...\"\n : \"Reading conversation...\"\n : isWaiting\n ? waitingTitle(toolName)\n : failure\n ? failure.title\n : isMessage\n ? \"Email read\"\n : \"Conversation read\";\n const count = shown?.messages.length ?? 0;\n\n return (\n <ToolCard\n icon={MailIcon}\n status={cardStatus}\n title={title}\n subtitle={shown ? truncate(shown.subject || \"(no subject)\", 90) : undefined}\n toolName={toolName}\n badge={\n shown && count > 0\n ? `${plural(count, \"message\")}${shown.provider ? ` · ${shown.provider}` : \"\"}`\n : undefined\n }\n error={failure?.detail ?? null}\n args={typedArgs}\n result={result}\n >\n {failure ? <FailureGuidance guidance={failure.guidance} /> : null}\n {shown && count > 0 ? <ThreadMessages messages={shown.messages} /> : null}\n </ToolCard>\n );\n};\n\n/** `unified_email_get_thread` and `unified_email_get_message`: the subject, and each message's sender, date and snippet. */\nexport const EmailThreadToolUI = memo(\n EmailThreadToolUIImpl,\n) as unknown as ToolCallMessagePartComponent;\nEmailThreadToolUI.displayName = \"EmailThreadToolUI\";\n\n// ─── Calendar search ─────────────────────────────────────────────────\n\n/** Why a calendar call did not do what it was asked, in Olympus's words, or `null`. */\nexport function readCalendarToolFailure(result: unknown): CardFailure | null {\n const record = normalizeResult(result);\n if (!record) return null;\n const error = nonEmpty(record.error);\n const notConnected =\n record.status === EMAIL_NOT_CONNECTED_STATUS || error === EMAIL_NOT_CONNECTED_ERROR;\n const reconnect = record.reconnect_required === true;\n if (!error && !notConnected && !reconnect) return null;\n const raw = error ?? nonEmpty(record.message) ?? \"Something went wrong.\";\n return {\n title: notConnected\n ? \"Connect a calendar to continue\"\n : reconnect\n ? \"Reconnect your calendar account\"\n : \"The calendar request didn’t go through\",\n detail: notConnected ? \"Athena has no calendar account to use yet.\" : withoutManageLink(raw),\n guidance: notConnected ? null : nonEmpty(record.guidance),\n };\n}\n\n/** One boundary of an event: a calendar date for an all-day event, else an instant with its zone. */\ninterface EventTime {\n date?: string;\n dateTime?: string;\n timeZone?: string;\n}\n\nexport interface CalendarEventView {\n id: string;\n title: string;\n start: EventTime;\n end: EventTime;\n allDay: boolean;\n /** An all-day event's last day (agora's `end_date_inclusive`). */\n endDateInclusive: string | null;\n location: string;\n guestCount: number;\n /** The account's own answer is \"no\": the row is struck through. */\n declined: boolean;\n /** The account is invited and has not answered: the dot is outlined. */\n awaiting: boolean;\n}\n\nconst DATE_ONLY = /^(\\d{4})-(\\d{2})-(\\d{2})$/;\nconst HAS_OFFSET = /(?:Z|[+-]\\d{2}:?\\d{2})$/i;\n\nfunction isDateOnly(value: string | undefined): value is string {\n return typeof value === \"string\" && DATE_ONLY.test(value);\n}\n\nfunction readTime(detail: unknown, flat: unknown): EventTime {\n if (isRecord(detail)) {\n const time: EventTime = {};\n const date = nonEmpty(detail.date);\n const dateTime = nonEmpty(detail.dateTime);\n const timeZone = nonEmpty(detail.timeZone);\n if (date) time.date = date;\n if (dateTime) time.dateTime = dateTime;\n if (timeZone) time.timeZone = timeZone;\n if (time.date || time.dateTime) return time;\n }\n const raw = text(flat).trim();\n if (!raw) return {};\n return isDateOnly(raw) ? { date: raw } : { dateTime: raw };\n}\n\n/** A `YYYY-MM-DD` date as UTC midnight: format it with `timeZone: \"UTC\"` only. */\nfunction dateOnlyAsUtc(date: string): Date {\n const match = DATE_ONLY.exec(date);\n if (!match) return new Date(Number.NaN);\n return new Date(Date.UTC(Number(match[1]), Number(match[2]) - 1, Number(match[3])));\n}\n\nfunction addDaysToDateOnly({ date, days }: { date: string; days: number }): string {\n const base = dateOnlyAsUtc(date);\n if (Number.isNaN(base.getTime())) return date;\n return new Date(base.getTime() + days * 86_400_000).toISOString().slice(0, 10);\n}\n\ntype AttendeeResponse = \"accepted\" | \"declined\" | \"tentative\" | \"needsAction\";\n\n/** Google's answer words, from any provider's (Outlook's `organizer` is going, `none` awaiting). */\nfunction normalizeResponse(value: unknown): AttendeeResponse {\n switch (text(value)) {\n case \"accepted\":\n case \"organizer\":\n return \"accepted\";\n case \"declined\":\n return \"declined\";\n case \"tentative\":\n case \"tentativelyAccepted\":\n return \"tentative\";\n default:\n return \"needsAction\";\n }\n}\n\nfunction wholeNumber(value: unknown): number | null {\n return typeof value === \"number\" && Number.isFinite(value) ? Math.trunc(value) : null;\n}\n\n/** The account's own answer, or `null` when it is not a guest (Outlook's organizer has none to give). */\nfunction myResponseOf(raw: Record<string, unknown>): AttendeeResponse | null {\n const stated = nonEmpty(raw.my_response_status);\n if (stated) return stated === \"organizer\" ? null : normalizeResponse(stated);\n const self = list(raw.attendees).find((attendee) => recordOf(attendee).self === true);\n if (self) return normalizeResponse(recordOf(self).response_status);\n return recordOf(raw.organizer).self === true ? \"accepted\" : null;\n}\n\n/** One event from agora's shared calendar shape (a search hit, or the `event` of an `event_id` read), or `null`. */\nexport function parseCalendarEvent(raw: unknown): CalendarEventView | null {\n if (!isRecord(raw)) return null;\n const start = readTime(raw.start_detail, raw.start ?? raw.start_time);\n if (!start.date && !start.dateTime) return null;\n let end = readTime(raw.end_detail, raw.end ?? raw.end_time);\n const allDay = typeof raw.all_day === \"boolean\" ? raw.all_day : Boolean(start.date && !start.dateTime);\n let endDateInclusive = nonEmpty(raw.end_date_inclusive);\n if (allDay) {\n const startDay = start.date ?? (start.dateTime ?? \"\").slice(0, 10);\n if (!start.date && isDateOnly(startDay)) start.date = startDay;\n if (!endDateInclusive) {\n const exclusive = end.date ?? (end.dateTime ? end.dateTime.slice(0, 10) : \"\");\n endDateInclusive =\n isDateOnly(exclusive) && exclusive > startDay\n ? addDaysToDateOnly({ date: exclusive, days: -1 })\n : startDay;\n }\n if (!end.date && endDateInclusive) {\n end = { date: addDaysToDateOnly({ date: endDateInclusive, days: 1 }) };\n }\n }\n const guests = list(raw.attendees).filter(\n (attendee) => isRecord(attendee) && nonEmpty(attendee.email) !== null && attendee.resource !== true,\n );\n const counted = wholeNumber(recordOf(raw.attendee_counts).total);\n const response = myResponseOf(raw);\n return {\n id: text(raw.id) || text(raw.event_id),\n title: text(raw.title) || text(raw.summary) || \"(No title)\",\n start,\n end,\n allDay,\n endDateInclusive: allDay ? endDateInclusive : null,\n location: text(raw.location).trim(),\n guestCount: counted ?? Math.max(wholeNumber(raw.attendee_count) ?? 0, guests.length),\n declined: response === \"declined\",\n awaiting: response === \"needsAction\",\n };\n}\n\nexport interface CalendarSearchView {\n events: CalendarEventView[];\n /** An `event_id` read: one event, in full. */\n isSingleEvent: boolean;\n /** More events match beyond this page. */\n hasMore: boolean;\n accountEmail: string | null;\n}\n\n/** A calendar search result, or `null` when it carries neither `results` nor an `event`. */\nexport function parseCalendarSearchResult(result: unknown): CalendarSearchView | null {\n const record = normalizeResult(result);\n if (!record) return null;\n if (isRecord(record.event)) {\n const event = parseCalendarEvent(record.event);\n return event\n ? { events: [event], isSingleEvent: true, hasMore: false, accountEmail: nonEmpty(record.account_email) }\n : null;\n }\n if (!Array.isArray(record.results)) return null;\n return {\n events: record.results.flatMap((raw) => {\n const event = parseCalendarEvent(raw);\n return event ? [event] : [];\n }),\n isSingleEvent: false,\n hasMore: nonEmpty(record.next_page_token) !== null,\n accountEmail: nonEmpty(record.account_email),\n };\n}\n\n/** The viewer's zone, which a timed event's times are shown in. */\nexport function viewerTimeZone(): string {\n try {\n return Intl.DateTimeFormat().resolvedOptions().timeZone || \"UTC\";\n } catch {\n return \"UTC\";\n }\n}\n\nfunction dateOnlyInZone({ instant, timeZone }: { instant: Date; timeZone: string }): string {\n const parts = new Intl.DateTimeFormat(\"en-CA\", {\n timeZone,\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n }).formatToParts(instant);\n const get = (type: string) => parts.find((part) => part.type === type)?.value ?? \"\";\n return `${get(\"year\")}-${get(\"month\")}-${get(\"day\")}`;\n}\n\n/** How far `timeZone`'s wall clock is ahead of UTC at `instant`, in minutes. */\nfunction zoneOffsetMinutes({ instant, timeZone }: { instant: Date; timeZone: string }): number {\n const parts = new Intl.DateTimeFormat(\"en-US\", {\n timeZone,\n hourCycle: \"h23\",\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n }).formatToParts(instant);\n const get = (type: string) => Number(parts.find((part) => part.type === type)?.value ?? 0);\n const wall = Date.UTC(get(\"year\"), get(\"month\") - 1, get(\"day\"), get(\"hour\") % 24, get(\"minute\"), get(\"second\"));\n return Math.round((wall - instant.getTime()) / 60_000);\n}\n\n/**\n * The instant a timed boundary stands for: its own offset when it has one,\n * else its stated zone, else UTC (Microsoft Graph's default). `null` for an\n * all-day boundary or an unreadable one.\n */\nfunction instantOf(time: EventTime): Date | null {\n // Graph writes seven fractional digits; a Date reads at most three.\n const raw = time.dateTime?.trim().replace(/(\\.\\d{3})\\d+/, \"$1\");\n if (!raw) return null;\n if (HAS_OFFSET.test(raw)) {\n const parsed = new Date(raw);\n return Number.isNaN(parsed.getTime()) ? null : parsed;\n }\n const asUtc = new Date(`${raw}Z`);\n if (Number.isNaN(asUtc.getTime())) return null;\n const zone = time.timeZone;\n if (!zone || zone.toUpperCase() === \"UTC\") return asUtc;\n try {\n const offset = zoneOffsetMinutes({ instant: asUtc, timeZone: zone });\n const guess = new Date(asUtc.getTime() - offset * 60_000);\n const settled = zoneOffsetMinutes({ instant: guess, timeZone: zone });\n return settled === offset ? guess : new Date(asUtc.getTime() - settled * 60_000);\n } catch {\n // A zone Intl does not know (Graph's Windows names): read it as UTC.\n return asUtc;\n }\n}\n\ninterface ClockParts {\n hour: string;\n minute: string;\n period: \"am\" | \"pm\";\n}\n\nfunction clockParts({ instant, timeZone }: { instant: Date; timeZone: string }): ClockParts {\n const parts = new Intl.DateTimeFormat(\"en-US\", {\n timeZone,\n hour: \"numeric\",\n minute: \"2-digit\",\n hour12: true,\n }).formatToParts(instant);\n const get = (type: string) => parts.find((part) => part.type === type)?.value ?? \"\";\n return {\n hour: get(\"hour\"),\n minute: get(\"minute\"),\n period: get(\"dayPeriod\").toLowerCase().startsWith(\"p\") ? \"pm\" : \"am\",\n };\n}\n\n/** A clock time as Google's schedule writes it: minutes only when not on the hour (\"3pm\", \"3:30pm\"). */\nfunction clockText({ parts, withPeriod }: { parts: ClockParts; withPeriod: boolean }): string {\n const time = parts.minute !== \"00\" ? `${parts.hour}:${parts.minute}` : parts.hour;\n return withPeriod ? `${time}${parts.period}` : time;\n}\n\nconst RANGE_SEPARATOR = \" – \";\n\n/** \"10:30 – 11am\", the period written once when both ends share it. */\nfunction formatTimeRange({ start, end, timeZone }: { start: Date; end: Date; timeZone: string }): string {\n const from = clockParts({ instant: start, timeZone });\n if (start.getTime() === end.getTime()) return clockText({ parts: from, withPeriod: true });\n const to = clockParts({ instant: end, timeZone });\n return `${clockText({ parts: from, withPeriod: from.period !== to.period })}${RANGE_SEPARATOR}${clockText({ parts: to, withPeriod: true })}`;\n}\n\n/** The days (`YYYY-MM-DD` in `timeZone`) an event covers, first to last (at most 366). */\nfunction eventDays({ event, timeZone }: { event: CalendarEventView; timeZone: string }): string[] {\n let first: string;\n let last: string;\n if (event.allDay) {\n first = event.start.date ?? \"\";\n last = event.endDateInclusive ?? first;\n } else {\n const start = instantOf(event.start);\n if (!start) return [];\n const end = instantOf(event.end) ?? start;\n first = dateOnlyInZone({ instant: start, timeZone });\n // An end exactly at midnight belongs to the day before.\n const lastInstant = end.getTime() > start.getTime() ? new Date(end.getTime() - 1) : end;\n last = dateOnlyInZone({ instant: lastInstant, timeZone });\n }\n if (!isDateOnly(first)) return [];\n if (!isDateOnly(last) || last < first) return [first];\n const days: string[] = [];\n for (let day = first; day <= last && days.length < 366; day = addDaysToDateOnly({ date: day, days: 1 })) {\n days.push(day);\n }\n return days;\n}\n\n/**\n * The time a schedule row shows for `event` on `day`: \"All day\", a range\n * (\"10:30 – 11am\"), or a piece of an event across days (\"4:50pm – 12am\",\n * \"Until 2pm\").\n */\nexport function formatAgendaTime({\n event,\n day,\n timeZone,\n}: {\n event: CalendarEventView;\n day: string;\n timeZone: string;\n}): string {\n if (event.allDay) return \"All day\";\n const start = instantOf(event.start);\n if (!start) return \"\";\n const end = instantOf(event.end) ?? start;\n const days = eventDays({ event, timeZone });\n const startDay = dateOnlyInZone({ instant: start, timeZone });\n if (days.length <= 1) return formatTimeRange({ start, end, timeZone });\n if (day === startDay) {\n return `${clockText({ parts: clockParts({ instant: start, timeZone }), withPeriod: true })}${RANGE_SEPARATOR}12am`;\n }\n if (day === days[days.length - 1]) {\n return `Until ${clockText({ parts: clockParts({ instant: end, timeZone }), withPeriod: true })}`;\n }\n return \"All day\";\n}\n\n/** One row of the schedule: an event on one of the days it covers. */\ninterface AgendaRow {\n day: string;\n event: CalendarEventView;\n}\n\n/** Events by the days they cover, earliest first; within a day all-day first, then by start. */\nexport function agendaRows({\n events,\n timeZone,\n}: {\n events: readonly CalendarEventView[];\n timeZone: string;\n}): AgendaRow[] {\n const byDay = new Map<string, CalendarEventView[]>();\n for (const event of events) {\n for (const day of eventDays({ event, timeZone })) {\n byDay.set(day, [...(byDay.get(day) ?? []), event]);\n }\n }\n const startOf = (event: CalendarEventView): number =>\n event.allDay ? Number.NEGATIVE_INFINITY : (instantOf(event.start)?.getTime() ?? 0);\n return [...byDay.entries()]\n .sort(([left], [right]) => left.localeCompare(right))\n .flatMap(([day, dayEvents]) =>\n [...dayEvents].sort((left, right) => startOf(left) - startOf(right)).map((event) => ({ day, event })),\n );\n}\n\n/** \"Thu, Nov 5\": a schedule day's heading. */\nfunction dayLabel(day: string): string {\n const date = dateOnlyAsUtc(day);\n if (Number.isNaN(date.getTime())) return day;\n return new Intl.DateTimeFormat(\"en-US\", {\n weekday: \"short\",\n month: \"short\",\n day: \"numeric\",\n timeZone: \"UTC\",\n }).format(date);\n}\n\n/** Rows shown before \"Show N more\", as Olympus's schedule keeps a long search scannable. */\nconst COLLAPSED_ROW_COUNT = 8;\n\nfunction AgendaRows({\n rows,\n timeZone,\n today,\n}: {\n rows: readonly AgendaRow[];\n timeZone: string;\n today: string;\n}) {\n return (\n <ul className=\"flex flex-col\">\n {rows.map(({ day, event }, index) => {\n const meta = [event.location, event.guestCount > 0 ? plural(event.guestCount, \"guest\") : \"\"]\n .filter((part) => part !== \"\")\n .join(\" · \");\n return (\n <li key={`${day}:${event.id || event.title}:${index}`} className=\"flex flex-col\">\n {index === 0 || rows[index - 1]?.day !== day ? (\n <p\n className={cn(\n \"pt-1.5 pb-0.5 text-[10px] font-semibold uppercase tracking-wide first:pt-0\",\n day === today ? \"text-primary\" : \"text-muted-foreground\",\n )}\n >\n {dayLabel(day)}\n </p>\n ) : null}\n <div className=\"flex items-start gap-2 py-1\">\n <span\n aria-hidden=\"true\"\n className={cn(\n \"mt-1 size-2 shrink-0 rounded-full\",\n event.awaiting || event.declined ? \"border border-primary\" : \"bg-primary\",\n )}\n />\n <span className=\"w-24 shrink-0 text-[11px] text-muted-foreground tabular-nums\">\n {formatAgendaTime({ event, day, timeZone })}\n </span>\n <span className=\"flex min-w-0 flex-1 flex-col\">\n <span\n className={cn(\n \"truncate text-[12px] font-medium text-foreground\",\n event.declined && \"text-muted-foreground line-through\",\n )}\n >\n {event.title}\n </span>\n {meta ? (\n <span className=\"truncate text-[11px] text-muted-foreground\">{meta}</span>\n ) : null}\n </span>\n </div>\n </li>\n );\n })}\n </ul>\n );\n}\n\nfunction CalendarAgenda({ view }: { view: CalendarSearchView }) {\n const timeZone = viewerTimeZone();\n const rows = agendaRows({ events: view.events, timeZone });\n const today = dateOnlyInZone({ instant: new Date(), timeZone });\n const inline = rows.slice(0, COLLAPSED_ROW_COUNT);\n const overflow = rows.slice(COLLAPSED_ROW_COUNT);\n\n return (\n <>\n <div className=\"border-t border-border/40 px-4 py-2.5\">\n {rows.length === 0 ? (\n <p className=\"text-[12px] text-muted-foreground\">No events found</p>\n ) : (\n <AgendaRows rows={inline} timeZone={timeZone} today={today} />\n )}\n {overflow.length > 0 ? (\n <ExpandableSection label={`Show ${overflow.length} more`}>\n <AgendaRows rows={overflow} timeZone={timeZone} today={today} />\n </ExpandableSection>\n ) : null}\n </div>\n {view.hasMore || view.accountEmail ? (\n <div className=\"flex items-center gap-2 border-t border-border/40 px-4 py-1.5 text-[11px] text-muted-foreground\">\n {view.hasMore ? <span>More events match; ask Athena for the next page</span> : null}\n {view.accountEmail ? <span className=\"ml-auto truncate\">{view.accountEmail}</span> : null}\n </div>\n ) : null}\n </>\n );\n}\n\nconst CalendarEventsToolUIImpl: ToolCallMessagePartComponent = (props) => {\n const { toolName, args, result, status, isError } = props;\n const view = useMemo(() => parseCalendarSearchResult(result), [result]);\n if (rendersAsGenericCard(props)) return <ToolFallback {...props} icon={CalendarIcon} />;\n\n const typedArgs = recordOf(args);\n const readsOneEvent = nonEmpty(typedArgs.event_id) !== null;\n const titleFilter = stringField(typedArgs, [\"title\"]);\n const classification = classifyToolResult({ status, result, isError });\n const isRunning = classification.state === \"running\";\n const isWaiting = classification.state === \"requires-action\";\n const failure: CardFailure | null =\n isRunning || isWaiting\n ? null\n : (readCalendarToolFailure(result) ??\n (classification.state === \"error\"\n ? {\n title: \"The calendar request didn’t go through\",\n detail: classification.failure.message,\n guidance: null,\n }\n : null));\n const shown = failure ? null : view;\n const single = shown?.isSingleEvent ? shown.events[0] : undefined;\n const count = shown?.events.length ?? 0;\n\n const cardStatus: ToolStatus = isRunning\n ? \"running\"\n : isWaiting\n ? \"requires-action\"\n : failure\n ? \"incomplete\"\n : \"complete\";\n const title = isRunning\n ? readsOneEvent\n ? \"Reading the event...\"\n : \"Searching your calendar...\"\n : isWaiting\n ? waitingTitle(toolName)\n : failure\n ? failure.title\n : single\n ? \"Calendar event\"\n : \"Calendar events\";\n const subtitle = single\n ? truncate(single.title, 90)\n : titleFilter && !readsOneEvent\n ? `“${truncate(titleFilter, 80)}”`\n : undefined;\n\n return (\n <ToolCard\n icon={CalendarIcon}\n status={cardStatus}\n title={title}\n subtitle={subtitle}\n toolName={toolName}\n badge={shown && !single ? (count > 0 ? plural(count, \"event\") : \"No events\") : undefined}\n error={failure?.detail ?? null}\n args={typedArgs}\n result={result}\n >\n {failure ? <FailureGuidance guidance={failure.guidance} /> : null}\n {shown ? <CalendarAgenda view={shown} /> : null}\n </ToolCard>\n );\n};\n\n/** `unified_search_calendar_events`: each event's time, title, location and guest count, by day; with `event_id`, the one event. */\nexport const CalendarEventsToolUI = memo(\n CalendarEventsToolUIImpl,\n) as unknown as ToolCallMessagePartComponent;\nCalendarEventsToolUI.displayName = \"CalendarEventsToolUI\";\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const lucideReact = require("lucide-react");
5
+ const require$$0 = require("react");
6
+ const driveToolUis = require("./drive-tool-uis.cjs");
7
+ const primitives = require("./primitives.cjs");
8
+ const toolFallback = require("./tool-fallback.cjs");
9
+ const toolResult = require("../agent-runtime/src/tool-result.cjs");
10
+ function plural({ count, noun }) {
11
+ return `${count} ${noun}${count === 1 ? "" : "s"}`;
12
+ }
13
+ function makeOntologyTextCard({
14
+ displayName,
15
+ spec
16
+ }) {
17
+ const Impl = (props) => {
18
+ const { toolName, args, result, status, isError } = props;
19
+ const classification = toolResult.classifyToolResult({ status, result, isError });
20
+ if (classification.state === "rejected" || classification.state === "paused") {
21
+ return /* @__PURE__ */ jsxRuntime.jsx(toolFallback.ToolFallback, { ...props, icon: spec.icon });
22
+ }
23
+ const typedArgs = driveToolUis.argsRecord(args);
24
+ const card = driveToolUis.toolCardOutcome({ status, classification });
25
+ const running = spec.running(typedArgs);
26
+ const title = card.status === "running" ? running : card.status === "complete" ? spec.complete(primitives.normalizeResult(result)) : driveToolUis.withoutEllipsis(running);
27
+ return /* @__PURE__ */ jsxRuntime.jsx(
28
+ primitives.ToolCard,
29
+ {
30
+ icon: spec.icon,
31
+ status: card.status,
32
+ title,
33
+ toolName,
34
+ args: typedArgs,
35
+ result,
36
+ error: card.failure
37
+ }
38
+ );
39
+ };
40
+ const Card = require$$0.memo(Impl);
41
+ Card.displayName = displayName;
42
+ return Card;
43
+ }
44
+ const ListObjectTypesToolUI = makeOntologyTextCard({
45
+ displayName: "ListObjectTypesToolUI",
46
+ spec: {
47
+ icon: lucideReact.BoxesIcon,
48
+ running: () => "Reading the ontology vocabulary...",
49
+ complete: (data) => {
50
+ const count = Array.isArray(data == null ? void 0 : data.object_types) ? data.object_types.length : 0;
51
+ return count === 0 ? "No object types defined yet" : plural({ count, noun: "object type" });
52
+ }
53
+ }
54
+ });
55
+ const SearchObjectsToolUI = makeOntologyTextCard({
56
+ displayName: "SearchObjectsToolUI",
57
+ spec: {
58
+ icon: lucideReact.SearchIcon,
59
+ running: (args) => {
60
+ const titleContains = toolResult.stringField(args, ["title_contains"]);
61
+ return titleContains ? `Searching objects for "${titleContains}"` : "Searching objects...";
62
+ },
63
+ complete: (data) => {
64
+ const count = driveToolUis.numberField(data, "count") ?? 0;
65
+ return count === 0 ? "No matching objects" : `${plural({ count, noun: "object" })} found`;
66
+ }
67
+ }
68
+ });
69
+ const GetObjectLinksToolUI = makeOntologyTextCard({
70
+ displayName: "GetObjectLinksToolUI",
71
+ spec: {
72
+ icon: lucideReact.LinkIcon,
73
+ running: () => "Reading object links...",
74
+ complete: (data) => {
75
+ const count = driveToolUis.numberField(data, "count") ?? 0;
76
+ return count === 0 ? "No links" : plural({ count, noun: "link" });
77
+ }
78
+ }
79
+ });
80
+ exports.GetObjectLinksToolUI = GetObjectLinksToolUI;
81
+ exports.ListObjectTypesToolUI = ListObjectTypesToolUI;
82
+ exports.SearchObjectsToolUI = SearchObjectsToolUI;
83
+ //# sourceMappingURL=ontology-tool-uis.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ontology-tool-uis.cjs","sources":["../../src/tools/ontology-tool-uis.tsx"],"sourcesContent":["\"use client\";\n\n/**\n * The ontology toolkit's read cards, as Athena on the web words them:\n * `list_object_types`, `search_objects` and `get_object_links`, each one line\n * that says what the call read and how many it found.\n */\nimport type { ToolCallMessagePartComponent } from \"@assistant-ui/react\";\nimport { classifyToolResult, stringField } from \"@athenaintel/agent-runtime\";\nimport { BoxesIcon, LinkIcon, SearchIcon } from \"lucide-react\";\nimport { type ElementType, memo } from \"react\";\nimport { argsRecord, numberField, toolCardOutcome, withoutEllipsis } from \"./drive-tool-uis\";\nimport { normalizeResult, ToolCard } from \"./primitives\";\nimport { ToolFallback } from \"./tool-fallback\";\n\ninterface OntologyTextCardSpec {\n icon: ElementType;\n /** The title while the call runs. */\n running: (args: Record<string, unknown>) => string;\n /** The title once the call settled, from its result. */\n complete: (data: Record<string, unknown> | null) => string;\n}\n\nfunction plural({ count, noun }: { count: number; noun: string }): string {\n return `${count} ${noun}${count === 1 ? \"\" : \"s\"}`;\n}\n\nfunction makeOntologyTextCard({\n displayName,\n spec,\n}: {\n displayName: string;\n spec: OntologyTextCardSpec;\n}): ToolCallMessagePartComponent {\n const Impl: ToolCallMessagePartComponent = (props) => {\n const { toolName, args, result, status, isError } = props;\n const classification = classifyToolResult({ status, result, isError });\n // A call refused at the approval gate or parked by the runtime is the\n // generic card's to draw: it is neither a result nor a failure.\n if (classification.state === \"rejected\" || classification.state === \"paused\") {\n return <ToolFallback {...props} icon={spec.icon} />;\n }\n const typedArgs = argsRecord(args);\n // The ontology tools answer a refusal as `{ \"error\": … }`, which the\n // shared classifier reads as a failure.\n const card = toolCardOutcome({ status, classification });\n const running = spec.running(typedArgs);\n const title =\n card.status === \"running\"\n ? running\n : card.status === \"complete\"\n ? spec.complete(normalizeResult(result))\n : withoutEllipsis(running);\n\n return (\n <ToolCard\n icon={spec.icon}\n status={card.status}\n title={title}\n toolName={toolName}\n args={typedArgs}\n result={result}\n error={card.failure}\n />\n );\n };\n const Card = memo(Impl) as unknown as ToolCallMessagePartComponent;\n Card.displayName = displayName;\n return Card;\n}\n\nexport const ListObjectTypesToolUI = makeOntologyTextCard({\n displayName: \"ListObjectTypesToolUI\",\n spec: {\n icon: BoxesIcon,\n running: () => \"Reading the ontology vocabulary...\",\n complete: (data) => {\n const count = Array.isArray(data?.object_types) ? data.object_types.length : 0;\n return count === 0 ? \"No object types defined yet\" : plural({ count, noun: \"object type\" });\n },\n },\n});\n\nexport const SearchObjectsToolUI = makeOntologyTextCard({\n displayName: \"SearchObjectsToolUI\",\n spec: {\n icon: SearchIcon,\n running: (args) => {\n const titleContains = stringField(args, [\"title_contains\"]);\n return titleContains ? `Searching objects for \"${titleContains}\"` : \"Searching objects...\";\n },\n complete: (data) => {\n // `count` is this page's matches, which is what Olympus counts; the\n // full match count (`total_count`) is the agent's to report.\n const count = numberField(data, \"count\") ?? 0;\n return count === 0 ? \"No matching objects\" : `${plural({ count, noun: \"object\" })} found`;\n },\n },\n});\n\nexport const GetObjectLinksToolUI = makeOntologyTextCard({\n displayName: \"GetObjectLinksToolUI\",\n spec: {\n icon: LinkIcon,\n running: () => \"Reading object links...\",\n complete: (data) => {\n const count = numberField(data, \"count\") ?? 0;\n return count === 0 ? \"No links\" : plural({ count, noun: \"link\" });\n },\n },\n});\n"],"names":["classifyToolResult","ToolFallback","argsRecord","toolCardOutcome","normalizeResult","withoutEllipsis","jsx","ToolCard","memo","BoxesIcon","SearchIcon","stringField","numberField","LinkIcon"],"mappings":";;;;;;;;;AAuBA,SAAS,OAAO,EAAE,OAAO,QAAiD;AACxE,SAAO,GAAG,KAAK,IAAI,IAAI,GAAG,UAAU,IAAI,KAAK,GAAG;AAClD;AAEA,SAAS,qBAAqB;AAAA,EAC5B;AAAA,EACA;AACF,GAGiC;AAC/B,QAAM,OAAqC,CAAC,UAAU;AACpD,UAAM,EAAE,UAAU,MAAM,QAAQ,QAAQ,YAAY;AACpD,UAAM,iBAAiBA,WAAAA,mBAAmB,EAAE,QAAQ,QAAQ,SAAS;AAGrE,QAAI,eAAe,UAAU,cAAc,eAAe,UAAU,UAAU;AAC5E,4CAAQC,aAAAA,cAAA,EAAc,GAAG,OAAO,MAAM,KAAK,MAAM;AAAA,IACnD;AACA,UAAM,YAAYC,aAAAA,WAAW,IAAI;AAGjC,UAAM,OAAOC,aAAAA,gBAAgB,EAAE,QAAQ,gBAAgB;AACvD,UAAM,UAAU,KAAK,QAAQ,SAAS;AACtC,UAAM,QACJ,KAAK,WAAW,YACZ,UACA,KAAK,WAAW,aACd,KAAK,SAASC,WAAAA,gBAAgB,MAAM,CAAC,IACrCC,aAAAA,gBAAgB,OAAO;AAE/B,WACEC,2BAAAA;AAAAA,MAACC,WAAAA;AAAAA,MAAA;AAAA,QACC,MAAM,KAAK;AAAA,QACX,QAAQ,KAAK;AAAA,QACb;AAAA,QACA;AAAA,QACA,MAAM;AAAA,QACN;AAAA,QACA,OAAO,KAAK;AAAA,MAAA;AAAA,IAAA;AAAA,EAGlB;AACA,QAAM,OAAOC,WAAAA,KAAK,IAAI;AACtB,OAAK,cAAc;AACnB,SAAO;AACT;AAEO,MAAM,wBAAwB,qBAAqB;AAAA,EACxD,aAAa;AAAA,EACb,MAAM;AAAA,IACJ,MAAMC,YAAAA;AAAAA,IACN,SAAS,MAAM;AAAA,IACf,UAAU,CAAC,SAAS;AAClB,YAAM,QAAQ,MAAM,QAAQ,6BAAM,YAAY,IAAI,KAAK,aAAa,SAAS;AAC7E,aAAO,UAAU,IAAI,gCAAgC,OAAO,EAAE,OAAO,MAAM,eAAe;AAAA,IAC5F;AAAA,EAAA;AAEJ,CAAC;AAEM,MAAM,sBAAsB,qBAAqB;AAAA,EACtD,aAAa;AAAA,EACb,MAAM;AAAA,IACJ,MAAMC,YAAAA;AAAAA,IACN,SAAS,CAAC,SAAS;AACjB,YAAM,gBAAgBC,WAAAA,YAAY,MAAM,CAAC,gBAAgB,CAAC;AAC1D,aAAO,gBAAgB,0BAA0B,aAAa,MAAM;AAAA,IACtE;AAAA,IACA,UAAU,CAAC,SAAS;AAGlB,YAAM,QAAQC,aAAAA,YAAY,MAAM,OAAO,KAAK;AAC5C,aAAO,UAAU,IAAI,wBAAwB,GAAG,OAAO,EAAE,OAAO,MAAM,SAAA,CAAU,CAAC;AAAA,IACnF;AAAA,EAAA;AAEJ,CAAC;AAEM,MAAM,uBAAuB,qBAAqB;AAAA,EACvD,aAAa;AAAA,EACb,MAAM;AAAA,IACJ,MAAMC,YAAAA;AAAAA,IACN,SAAS,MAAM;AAAA,IACf,UAAU,CAAC,SAAS;AAClB,YAAM,QAAQD,aAAAA,YAAY,MAAM,OAAO,KAAK;AAC5C,aAAO,UAAU,IAAI,aAAa,OAAO,EAAE,OAAO,MAAM,QAAQ;AAAA,IAClE;AAAA,EAAA;AAEJ,CAAC;;;;"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * The ontology toolkit's read cards, as Athena on the web words them:
3
+ * `list_object_types`, `search_objects` and `get_object_links`, each one line
4
+ * that says what the call read and how many it found.
5
+ */
6
+ import type { ToolCallMessagePartComponent } from "@assistant-ui/react";
7
+ export declare const ListObjectTypesToolUI: ToolCallMessagePartComponent;
8
+ export declare const SearchObjectsToolUI: ToolCallMessagePartComponent;
9
+ export declare const GetObjectLinksToolUI: ToolCallMessagePartComponent;
@@ -0,0 +1,83 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { BoxesIcon, SearchIcon, LinkIcon } from "lucide-react";
3
+ import { memo } from "react";
4
+ import { toolCardOutcome, withoutEllipsis, argsRecord, numberField } from "./drive-tool-uis.js";
5
+ import { normalizeResult, ToolCard } from "./primitives.js";
6
+ import { ToolFallback } from "./tool-fallback.js";
7
+ import { classifyToolResult, stringField } from "../agent-runtime/src/tool-result.js";
8
+ function plural({ count, noun }) {
9
+ return `${count} ${noun}${count === 1 ? "" : "s"}`;
10
+ }
11
+ function makeOntologyTextCard({
12
+ displayName,
13
+ spec
14
+ }) {
15
+ const Impl = (props) => {
16
+ const { toolName, args, result, status, isError } = props;
17
+ const classification = classifyToolResult({ status, result, isError });
18
+ if (classification.state === "rejected" || classification.state === "paused") {
19
+ return /* @__PURE__ */ jsx(ToolFallback, { ...props, icon: spec.icon });
20
+ }
21
+ const typedArgs = argsRecord(args);
22
+ const card = toolCardOutcome({ status, classification });
23
+ const running = spec.running(typedArgs);
24
+ const title = card.status === "running" ? running : card.status === "complete" ? spec.complete(normalizeResult(result)) : withoutEllipsis(running);
25
+ return /* @__PURE__ */ jsx(
26
+ ToolCard,
27
+ {
28
+ icon: spec.icon,
29
+ status: card.status,
30
+ title,
31
+ toolName,
32
+ args: typedArgs,
33
+ result,
34
+ error: card.failure
35
+ }
36
+ );
37
+ };
38
+ const Card = memo(Impl);
39
+ Card.displayName = displayName;
40
+ return Card;
41
+ }
42
+ const ListObjectTypesToolUI = makeOntologyTextCard({
43
+ displayName: "ListObjectTypesToolUI",
44
+ spec: {
45
+ icon: BoxesIcon,
46
+ running: () => "Reading the ontology vocabulary...",
47
+ complete: (data) => {
48
+ const count = Array.isArray(data == null ? void 0 : data.object_types) ? data.object_types.length : 0;
49
+ return count === 0 ? "No object types defined yet" : plural({ count, noun: "object type" });
50
+ }
51
+ }
52
+ });
53
+ const SearchObjectsToolUI = makeOntologyTextCard({
54
+ displayName: "SearchObjectsToolUI",
55
+ spec: {
56
+ icon: SearchIcon,
57
+ running: (args) => {
58
+ const titleContains = stringField(args, ["title_contains"]);
59
+ return titleContains ? `Searching objects for "${titleContains}"` : "Searching objects...";
60
+ },
61
+ complete: (data) => {
62
+ const count = numberField(data, "count") ?? 0;
63
+ return count === 0 ? "No matching objects" : `${plural({ count, noun: "object" })} found`;
64
+ }
65
+ }
66
+ });
67
+ const GetObjectLinksToolUI = makeOntologyTextCard({
68
+ displayName: "GetObjectLinksToolUI",
69
+ spec: {
70
+ icon: LinkIcon,
71
+ running: () => "Reading object links...",
72
+ complete: (data) => {
73
+ const count = numberField(data, "count") ?? 0;
74
+ return count === 0 ? "No links" : plural({ count, noun: "link" });
75
+ }
76
+ }
77
+ });
78
+ export {
79
+ GetObjectLinksToolUI,
80
+ ListObjectTypesToolUI,
81
+ SearchObjectsToolUI
82
+ };
83
+ //# sourceMappingURL=ontology-tool-uis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ontology-tool-uis.js","sources":["../../src/tools/ontology-tool-uis.tsx"],"sourcesContent":["\"use client\";\n\n/**\n * The ontology toolkit's read cards, as Athena on the web words them:\n * `list_object_types`, `search_objects` and `get_object_links`, each one line\n * that says what the call read and how many it found.\n */\nimport type { ToolCallMessagePartComponent } from \"@assistant-ui/react\";\nimport { classifyToolResult, stringField } from \"@athenaintel/agent-runtime\";\nimport { BoxesIcon, LinkIcon, SearchIcon } from \"lucide-react\";\nimport { type ElementType, memo } from \"react\";\nimport { argsRecord, numberField, toolCardOutcome, withoutEllipsis } from \"./drive-tool-uis\";\nimport { normalizeResult, ToolCard } from \"./primitives\";\nimport { ToolFallback } from \"./tool-fallback\";\n\ninterface OntologyTextCardSpec {\n icon: ElementType;\n /** The title while the call runs. */\n running: (args: Record<string, unknown>) => string;\n /** The title once the call settled, from its result. */\n complete: (data: Record<string, unknown> | null) => string;\n}\n\nfunction plural({ count, noun }: { count: number; noun: string }): string {\n return `${count} ${noun}${count === 1 ? \"\" : \"s\"}`;\n}\n\nfunction makeOntologyTextCard({\n displayName,\n spec,\n}: {\n displayName: string;\n spec: OntologyTextCardSpec;\n}): ToolCallMessagePartComponent {\n const Impl: ToolCallMessagePartComponent = (props) => {\n const { toolName, args, result, status, isError } = props;\n const classification = classifyToolResult({ status, result, isError });\n // A call refused at the approval gate or parked by the runtime is the\n // generic card's to draw: it is neither a result nor a failure.\n if (classification.state === \"rejected\" || classification.state === \"paused\") {\n return <ToolFallback {...props} icon={spec.icon} />;\n }\n const typedArgs = argsRecord(args);\n // The ontology tools answer a refusal as `{ \"error\": … }`, which the\n // shared classifier reads as a failure.\n const card = toolCardOutcome({ status, classification });\n const running = spec.running(typedArgs);\n const title =\n card.status === \"running\"\n ? running\n : card.status === \"complete\"\n ? spec.complete(normalizeResult(result))\n : withoutEllipsis(running);\n\n return (\n <ToolCard\n icon={spec.icon}\n status={card.status}\n title={title}\n toolName={toolName}\n args={typedArgs}\n result={result}\n error={card.failure}\n />\n );\n };\n const Card = memo(Impl) as unknown as ToolCallMessagePartComponent;\n Card.displayName = displayName;\n return Card;\n}\n\nexport const ListObjectTypesToolUI = makeOntologyTextCard({\n displayName: \"ListObjectTypesToolUI\",\n spec: {\n icon: BoxesIcon,\n running: () => \"Reading the ontology vocabulary...\",\n complete: (data) => {\n const count = Array.isArray(data?.object_types) ? data.object_types.length : 0;\n return count === 0 ? \"No object types defined yet\" : plural({ count, noun: \"object type\" });\n },\n },\n});\n\nexport const SearchObjectsToolUI = makeOntologyTextCard({\n displayName: \"SearchObjectsToolUI\",\n spec: {\n icon: SearchIcon,\n running: (args) => {\n const titleContains = stringField(args, [\"title_contains\"]);\n return titleContains ? `Searching objects for \"${titleContains}\"` : \"Searching objects...\";\n },\n complete: (data) => {\n // `count` is this page's matches, which is what Olympus counts; the\n // full match count (`total_count`) is the agent's to report.\n const count = numberField(data, \"count\") ?? 0;\n return count === 0 ? \"No matching objects\" : `${plural({ count, noun: \"object\" })} found`;\n },\n },\n});\n\nexport const GetObjectLinksToolUI = makeOntologyTextCard({\n displayName: \"GetObjectLinksToolUI\",\n spec: {\n icon: LinkIcon,\n running: () => \"Reading object links...\",\n complete: (data) => {\n const count = numberField(data, \"count\") ?? 0;\n return count === 0 ? \"No links\" : plural({ count, noun: \"link\" });\n },\n },\n});\n"],"names":[],"mappings":";;;;;;;AAuBA,SAAS,OAAO,EAAE,OAAO,QAAiD;AACxE,SAAO,GAAG,KAAK,IAAI,IAAI,GAAG,UAAU,IAAI,KAAK,GAAG;AAClD;AAEA,SAAS,qBAAqB;AAAA,EAC5B;AAAA,EACA;AACF,GAGiC;AAC/B,QAAM,OAAqC,CAAC,UAAU;AACpD,UAAM,EAAE,UAAU,MAAM,QAAQ,QAAQ,YAAY;AACpD,UAAM,iBAAiB,mBAAmB,EAAE,QAAQ,QAAQ,SAAS;AAGrE,QAAI,eAAe,UAAU,cAAc,eAAe,UAAU,UAAU;AAC5E,iCAAQ,cAAA,EAAc,GAAG,OAAO,MAAM,KAAK,MAAM;AAAA,IACnD;AACA,UAAM,YAAY,WAAW,IAAI;AAGjC,UAAM,OAAO,gBAAgB,EAAE,QAAQ,gBAAgB;AACvD,UAAM,UAAU,KAAK,QAAQ,SAAS;AACtC,UAAM,QACJ,KAAK,WAAW,YACZ,UACA,KAAK,WAAW,aACd,KAAK,SAAS,gBAAgB,MAAM,CAAC,IACrC,gBAAgB,OAAO;AAE/B,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAM,KAAK;AAAA,QACX,QAAQ,KAAK;AAAA,QACb;AAAA,QACA;AAAA,QACA,MAAM;AAAA,QACN;AAAA,QACA,OAAO,KAAK;AAAA,MAAA;AAAA,IAAA;AAAA,EAGlB;AACA,QAAM,OAAO,KAAK,IAAI;AACtB,OAAK,cAAc;AACnB,SAAO;AACT;AAEO,MAAM,wBAAwB,qBAAqB;AAAA,EACxD,aAAa;AAAA,EACb,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,SAAS,MAAM;AAAA,IACf,UAAU,CAAC,SAAS;AAClB,YAAM,QAAQ,MAAM,QAAQ,6BAAM,YAAY,IAAI,KAAK,aAAa,SAAS;AAC7E,aAAO,UAAU,IAAI,gCAAgC,OAAO,EAAE,OAAO,MAAM,eAAe;AAAA,IAC5F;AAAA,EAAA;AAEJ,CAAC;AAEM,MAAM,sBAAsB,qBAAqB;AAAA,EACtD,aAAa;AAAA,EACb,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,SAAS,CAAC,SAAS;AACjB,YAAM,gBAAgB,YAAY,MAAM,CAAC,gBAAgB,CAAC;AAC1D,aAAO,gBAAgB,0BAA0B,aAAa,MAAM;AAAA,IACtE;AAAA,IACA,UAAU,CAAC,SAAS;AAGlB,YAAM,QAAQ,YAAY,MAAM,OAAO,KAAK;AAC5C,aAAO,UAAU,IAAI,wBAAwB,GAAG,OAAO,EAAE,OAAO,MAAM,SAAA,CAAU,CAAC;AAAA,IACnF;AAAA,EAAA;AAEJ,CAAC;AAEM,MAAM,uBAAuB,qBAAqB;AAAA,EACvD,aAAa;AAAA,EACb,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,SAAS,MAAM;AAAA,IACf,UAAU,CAAC,SAAS;AAClB,YAAM,QAAQ,YAAY,MAAM,OAAO,KAAK;AAC5C,aAAO,UAAU,IAAI,aAAa,OAAO,EAAE,OAAO,MAAM,QAAQ;AAAA,IAClE;AAAA,EAAA;AAEJ,CAAC;"}