@athenaintel/react 0.57.1 → 0.59.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (811) hide show
  1. package/README.md +778 -9
  2. package/dist/agent-runtime/src/addressed-agents.cjs +16 -0
  3. package/dist/agent-runtime/src/addressed-agents.cjs.map +1 -0
  4. package/dist/agent-runtime/src/addressed-agents.d.ts +30 -0
  5. package/dist/agent-runtime/src/addressed-agents.js +16 -0
  6. package/dist/agent-runtime/src/addressed-agents.js.map +1 -0
  7. package/dist/agent-runtime/src/answer-label.cjs +4 -3
  8. package/dist/agent-runtime/src/answer-label.cjs.map +1 -1
  9. package/dist/agent-runtime/src/answer-label.d.ts +13 -6
  10. package/dist/agent-runtime/src/answer-label.js +4 -3
  11. package/dist/agent-runtime/src/answer-label.js.map +1 -1
  12. package/dist/agent-runtime/src/chat-outbox-attachments.cjs.map +1 -1
  13. package/dist/agent-runtime/src/chat-outbox-attachments.d.ts +1 -1
  14. package/dist/agent-runtime/src/chat-outbox-attachments.js.map +1 -1
  15. package/dist/agent-runtime/src/chat-outbox-entry.cjs +101 -0
  16. package/dist/agent-runtime/src/chat-outbox-entry.cjs.map +1 -0
  17. package/dist/agent-runtime/src/chat-outbox-entry.d.ts +99 -0
  18. package/dist/agent-runtime/src/chat-outbox-entry.js +101 -0
  19. package/dist/agent-runtime/src/chat-outbox-entry.js.map +1 -0
  20. package/dist/agent-runtime/src/chat-outbox-legacy.cjs +252 -0
  21. package/dist/agent-runtime/src/chat-outbox-legacy.cjs.map +1 -0
  22. package/dist/agent-runtime/src/chat-outbox-legacy.d.ts +96 -0
  23. package/dist/agent-runtime/src/chat-outbox-legacy.js +252 -0
  24. package/dist/agent-runtime/src/chat-outbox-legacy.js.map +1 -0
  25. package/dist/agent-runtime/src/chat-outbox-policy.cjs +30 -0
  26. package/dist/agent-runtime/src/chat-outbox-policy.cjs.map +1 -0
  27. package/dist/agent-runtime/src/chat-outbox-policy.d.ts +42 -0
  28. package/dist/agent-runtime/src/chat-outbox-policy.js +30 -0
  29. package/dist/agent-runtime/src/chat-outbox-policy.js.map +1 -0
  30. package/dist/agent-runtime/src/chat-outbox-storage.cjs +306 -0
  31. package/dist/agent-runtime/src/chat-outbox-storage.cjs.map +1 -0
  32. package/dist/agent-runtime/src/chat-outbox-storage.d.ts +194 -0
  33. package/dist/agent-runtime/src/chat-outbox-storage.js +306 -0
  34. package/dist/agent-runtime/src/chat-outbox-storage.js.map +1 -0
  35. package/dist/agent-runtime/src/chat-outbox-thread.cjs +21 -94
  36. package/dist/agent-runtime/src/chat-outbox-thread.cjs.map +1 -1
  37. package/dist/agent-runtime/src/chat-outbox-thread.d.ts +22 -18
  38. package/dist/agent-runtime/src/chat-outbox-thread.js +21 -94
  39. package/dist/agent-runtime/src/chat-outbox-thread.js.map +1 -1
  40. package/dist/agent-runtime/src/chat-outbox.cjs +492 -547
  41. package/dist/agent-runtime/src/chat-outbox.cjs.map +1 -1
  42. package/dist/agent-runtime/src/chat-outbox.d.ts +110 -142
  43. package/dist/agent-runtime/src/chat-outbox.js +492 -547
  44. package/dist/agent-runtime/src/chat-outbox.js.map +1 -1
  45. package/dist/agent-runtime/src/composer-markdown.cjs.map +1 -1
  46. package/dist/agent-runtime/src/composer-markdown.d.ts +1 -1
  47. package/dist/agent-runtime/src/composer-markdown.js.map +1 -1
  48. package/dist/agent-runtime/src/deep-agent-transport-recipe.cjs +3 -1
  49. package/dist/agent-runtime/src/deep-agent-transport-recipe.cjs.map +1 -1
  50. package/dist/agent-runtime/src/deep-agent-transport-recipe.d.ts +8 -1
  51. package/dist/agent-runtime/src/deep-agent-transport-recipe.js +3 -1
  52. package/dist/agent-runtime/src/deep-agent-transport-recipe.js.map +1 -1
  53. package/dist/agent-runtime/src/dictation-preferences.d.ts +356 -0
  54. package/dist/agent-runtime/src/dictation-record.d.ts +279 -0
  55. package/dist/agent-runtime/src/dictation-session.d.ts +106 -7
  56. package/dist/agent-runtime/src/dictation-snippets.d.ts +9 -0
  57. package/dist/agent-runtime/src/dictation-transfer.d.ts +142 -0
  58. package/dist/agent-runtime/src/edit-command.cjs.map +1 -1
  59. package/dist/agent-runtime/src/edit-command.d.ts +1 -1
  60. package/dist/agent-runtime/src/edit-command.js.map +1 -1
  61. package/dist/agent-runtime/src/errors.cjs +1 -0
  62. package/dist/agent-runtime/src/errors.cjs.map +1 -1
  63. package/dist/agent-runtime/src/errors.js +1 -0
  64. package/dist/agent-runtime/src/errors.js.map +1 -1
  65. package/dist/agent-runtime/src/generated/runconfig-contract.cjs +24 -0
  66. package/dist/agent-runtime/src/generated/runconfig-contract.cjs.map +1 -1
  67. package/dist/agent-runtime/src/generated/runconfig-contract.d.ts +3 -3
  68. package/dist/agent-runtime/src/generated/runconfig-contract.js +24 -0
  69. package/dist/agent-runtime/src/generated/runconfig-contract.js.map +1 -1
  70. package/dist/agent-runtime/src/index.d.ts +14 -8
  71. package/dist/agent-runtime/src/lane-follow.cjs +289 -0
  72. package/dist/agent-runtime/src/lane-follow.cjs.map +1 -0
  73. package/dist/agent-runtime/src/lane-follow.js +289 -0
  74. package/dist/agent-runtime/src/lane-follow.js.map +1 -0
  75. package/dist/agent-runtime/src/lane-images.cjs +387 -0
  76. package/dist/agent-runtime/src/lane-images.cjs.map +1 -0
  77. package/dist/agent-runtime/src/lane-images.js +387 -0
  78. package/dist/agent-runtime/src/lane-images.js.map +1 -0
  79. package/dist/agent-runtime/src/message-window.js +1 -1
  80. package/dist/agent-runtime/src/messages.cjs +19 -1
  81. package/dist/agent-runtime/src/messages.cjs.map +1 -1
  82. package/dist/agent-runtime/src/messages.d.ts +8 -0
  83. package/dist/agent-runtime/src/messages.js +21 -3
  84. package/dist/agent-runtime/src/messages.js.map +1 -1
  85. package/dist/agent-runtime/src/named-agents.cjs +301 -0
  86. package/dist/agent-runtime/src/named-agents.cjs.map +1 -0
  87. package/dist/agent-runtime/src/named-agents.d.ts +246 -0
  88. package/dist/agent-runtime/src/named-agents.js +301 -0
  89. package/dist/agent-runtime/src/named-agents.js.map +1 -0
  90. package/dist/agent-runtime/src/offline-status.cjs.map +1 -1
  91. package/dist/agent-runtime/src/offline-status.d.ts +66 -2
  92. package/dist/agent-runtime/src/offline-status.js.map +1 -1
  93. package/dist/agent-runtime/src/ptc-subcalls.cjs +41 -0
  94. package/dist/agent-runtime/src/ptc-subcalls.cjs.map +1 -0
  95. package/dist/agent-runtime/src/ptc-subcalls.js +41 -0
  96. package/dist/agent-runtime/src/ptc-subcalls.js.map +1 -0
  97. package/dist/agent-runtime/src/queue.cjs +2 -2
  98. package/dist/agent-runtime/src/queue.cjs.map +1 -1
  99. package/dist/agent-runtime/src/queue.d.ts +20 -25
  100. package/dist/agent-runtime/src/queue.js +2 -2
  101. package/dist/agent-runtime/src/queue.js.map +1 -1
  102. package/dist/agent-runtime/src/quota-safe-local-storage-session.cjs +314 -84
  103. package/dist/agent-runtime/src/quota-safe-local-storage-session.cjs.map +1 -1
  104. package/dist/agent-runtime/src/quota-safe-local-storage-session.d.ts +137 -40
  105. package/dist/agent-runtime/src/quota-safe-local-storage-session.js +318 -88
  106. package/dist/agent-runtime/src/quota-safe-local-storage-session.js.map +1 -1
  107. package/dist/agent-runtime/src/run-send.cjs +54 -0
  108. package/dist/agent-runtime/src/run-send.cjs.map +1 -0
  109. package/dist/agent-runtime/src/run-send.d.ts +51 -0
  110. package/dist/agent-runtime/src/run-send.js +54 -0
  111. package/dist/agent-runtime/src/run-send.js.map +1 -0
  112. package/dist/agent-runtime/src/running-tool-placeholder.cjs +6 -0
  113. package/dist/agent-runtime/src/running-tool-placeholder.cjs.map +1 -1
  114. package/dist/agent-runtime/src/running-tool-placeholder.js +6 -0
  115. package/dist/agent-runtime/src/running-tool-placeholder.js.map +1 -1
  116. package/dist/agent-runtime/src/runtime.d.ts +9 -5
  117. package/dist/agent-runtime/src/sealed-idb.cjs +64 -0
  118. package/dist/agent-runtime/src/sealed-idb.cjs.map +1 -1
  119. package/dist/agent-runtime/src/sealed-idb.d.ts +16 -0
  120. package/dist/agent-runtime/src/sealed-idb.js +64 -0
  121. package/dist/agent-runtime/src/sealed-idb.js.map +1 -1
  122. package/dist/agent-runtime/src/send-recovery.cjs +90 -118
  123. package/dist/agent-runtime/src/send-recovery.cjs.map +1 -1
  124. package/dist/agent-runtime/src/send-recovery.d.ts +25 -29
  125. package/dist/agent-runtime/src/send-recovery.js +90 -118
  126. package/dist/agent-runtime/src/send-recovery.js.map +1 -1
  127. package/dist/agent-runtime/src/statewire-diagnostics.d.ts +4 -1
  128. package/dist/agent-runtime/src/statewire-held-sends.cjs +191 -0
  129. package/dist/agent-runtime/src/statewire-held-sends.cjs.map +1 -0
  130. package/dist/agent-runtime/src/statewire-held-sends.d.ts +119 -0
  131. package/dist/agent-runtime/src/statewire-held-sends.js +191 -0
  132. package/dist/agent-runtime/src/statewire-held-sends.js.map +1 -0
  133. package/dist/agent-runtime/src/statewire-state.cjs +4 -0
  134. package/dist/agent-runtime/src/statewire-state.cjs.map +1 -1
  135. package/dist/agent-runtime/src/statewire-state.js +4 -0
  136. package/dist/agent-runtime/src/statewire-state.js.map +1 -1
  137. package/dist/agent-runtime/src/statewire-transport.cjs +8 -2
  138. package/dist/agent-runtime/src/statewire-transport.cjs.map +1 -1
  139. package/dist/agent-runtime/src/statewire-transport.d.ts +14 -5
  140. package/dist/agent-runtime/src/statewire-transport.js +8 -2
  141. package/dist/agent-runtime/src/statewire-transport.js.map +1 -1
  142. package/dist/agent-runtime/src/subagent-transcripts.cjs +1 -23
  143. package/dist/agent-runtime/src/subagent-transcripts.cjs.map +1 -1
  144. package/dist/agent-runtime/src/subagent-transcripts.js +3 -25
  145. package/dist/agent-runtime/src/subagent-transcripts.js.map +1 -1
  146. package/dist/agent-runtime/src/subagents.cjs +22 -29
  147. package/dist/agent-runtime/src/subagents.cjs.map +1 -1
  148. package/dist/agent-runtime/src/subagents.js +23 -30
  149. package/dist/agent-runtime/src/subagents.js.map +1 -1
  150. package/dist/agent-runtime/src/thread-extras.cjs +27 -19
  151. package/dist/agent-runtime/src/thread-extras.cjs.map +1 -1
  152. package/dist/agent-runtime/src/thread-extras.d.ts +19 -6
  153. package/dist/agent-runtime/src/thread-extras.js +27 -19
  154. package/dist/agent-runtime/src/thread-extras.js.map +1 -1
  155. package/dist/agent-runtime/src/thread-handoff-flow-machine.d.ts +8 -8
  156. package/dist/agent-runtime/src/tool-metadata.cjs +12 -0
  157. package/dist/agent-runtime/src/tool-metadata.cjs.map +1 -1
  158. package/dist/agent-runtime/src/tool-metadata.js +12 -0
  159. package/dist/agent-runtime/src/tool-metadata.js.map +1 -1
  160. package/dist/agent-runtime/src/tool-names.cjs +21 -0
  161. package/dist/agent-runtime/src/tool-names.cjs.map +1 -1
  162. package/dist/agent-runtime/src/tool-names.d.ts +8 -0
  163. package/dist/agent-runtime/src/tool-names.js +21 -0
  164. package/dist/agent-runtime/src/tool-names.js.map +1 -1
  165. package/dist/agent-runtime/src/typed-interrupt-kinds.cjs +247 -0
  166. package/dist/agent-runtime/src/typed-interrupt-kinds.cjs.map +1 -0
  167. package/dist/agent-runtime/src/typed-interrupt-kinds.d.ts +173 -0
  168. package/dist/agent-runtime/src/typed-interrupt-kinds.js +247 -0
  169. package/dist/agent-runtime/src/typed-interrupt-kinds.js.map +1 -0
  170. package/dist/agent-runtime/src/typed-interrupts.cjs +48 -0
  171. package/dist/agent-runtime/src/typed-interrupts.cjs.map +1 -0
  172. package/dist/agent-runtime/src/typed-interrupts.d.ts +75 -0
  173. package/dist/agent-runtime/src/typed-interrupts.js +48 -0
  174. package/dist/agent-runtime/src/typed-interrupts.js.map +1 -0
  175. package/dist/agent-runtime/src/types.d.ts +1 -1
  176. package/dist/agent-runtime/src/use-conversation-list.cjs +1 -0
  177. package/dist/agent-runtime/src/use-conversation-list.cjs.map +1 -1
  178. package/dist/agent-runtime/src/use-conversation-list.d.ts +7 -0
  179. package/dist/agent-runtime/src/use-conversation-list.js +1 -0
  180. package/dist/agent-runtime/src/use-conversation-list.js.map +1 -1
  181. package/dist/agent-runtime/src/use-deep-agent-chat-outbox.cjs +46 -29
  182. package/dist/agent-runtime/src/use-deep-agent-chat-outbox.cjs.map +1 -1
  183. package/dist/agent-runtime/src/use-deep-agent-chat-outbox.d.ts +14 -22
  184. package/dist/agent-runtime/src/use-deep-agent-chat-outbox.js +46 -29
  185. package/dist/agent-runtime/src/use-deep-agent-chat-outbox.js.map +1 -1
  186. package/dist/agent-runtime/src/use-deep-agent-runtime.cjs +78 -14
  187. package/dist/agent-runtime/src/use-deep-agent-runtime.cjs.map +1 -1
  188. package/dist/agent-runtime/src/use-deep-agent-runtime.d.ts +34 -7
  189. package/dist/agent-runtime/src/use-deep-agent-runtime.js +79 -15
  190. package/dist/agent-runtime/src/use-deep-agent-runtime.js.map +1 -1
  191. package/dist/agent-runtime/src/use-deep-agent-thread.cjs +16 -1
  192. package/dist/agent-runtime/src/use-deep-agent-thread.cjs.map +1 -1
  193. package/dist/agent-runtime/src/use-deep-agent-thread.d.ts +7 -2
  194. package/dist/agent-runtime/src/use-deep-agent-thread.js +16 -1
  195. package/dist/agent-runtime/src/use-deep-agent-thread.js.map +1 -1
  196. package/dist/agent-runtime/src/use-deep-agent-voice.cjs +30 -4
  197. package/dist/agent-runtime/src/use-deep-agent-voice.cjs.map +1 -1
  198. package/dist/agent-runtime/src/use-deep-agent-voice.d.ts +22 -4
  199. package/dist/agent-runtime/src/use-deep-agent-voice.js +30 -4
  200. package/dist/agent-runtime/src/use-deep-agent-voice.js.map +1 -1
  201. package/dist/agent-runtime/src/withdrawn-turns.d.ts +5 -4
  202. package/dist/agent-runtime/src/word-device-fit.d.ts +174 -0
  203. package/dist/agent-runtime/src/work-in.d.ts +127 -0
  204. package/dist/assets/AthenaAssetEmbed.cjs.map +1 -1
  205. package/dist/assets/AthenaAssetEmbed.d.ts +6 -1
  206. package/dist/assets/AthenaAssetEmbed.js.map +1 -1
  207. package/dist/assets/asset-panel-store.cjs +13 -5
  208. package/dist/assets/asset-panel-store.cjs.map +1 -1
  209. package/dist/assets/asset-panel-store.d.ts +33 -2
  210. package/dist/assets/asset-panel-store.js +13 -5
  211. package/dist/assets/asset-panel-store.js.map +1 -1
  212. package/dist/auth/AthenaCredentialSourceContext.cjs +11 -0
  213. package/dist/auth/AthenaCredentialSourceContext.cjs.map +1 -1
  214. package/dist/auth/AthenaCredentialSourceContext.d.ts +6 -0
  215. package/dist/auth/AthenaCredentialSourceContext.js +11 -0
  216. package/dist/auth/AthenaCredentialSourceContext.js.map +1 -1
  217. package/dist/auth/account-identity.cjs +13 -2
  218. package/dist/auth/account-identity.cjs.map +1 -1
  219. package/dist/auth/account-identity.d.ts +9 -0
  220. package/dist/auth/account-identity.js +13 -2
  221. package/dist/auth/account-identity.js.map +1 -1
  222. package/dist/auth/credential-source.cjs +20 -4
  223. package/dist/auth/credential-source.cjs.map +1 -1
  224. package/dist/auth/credential-source.d.ts +9 -0
  225. package/dist/auth/credential-source.js +20 -4
  226. package/dist/auth/credential-source.js.map +1 -1
  227. package/dist/catalog/chat-pickers.cjs +31 -0
  228. package/dist/catalog/chat-pickers.cjs.map +1 -1
  229. package/dist/catalog/chat-pickers.d.ts +17 -0
  230. package/dist/catalog/chat-pickers.js +33 -2
  231. package/dist/catalog/chat-pickers.js.map +1 -1
  232. package/dist/catalog/runtime-catalog.cjs +63 -3
  233. package/dist/catalog/runtime-catalog.cjs.map +1 -1
  234. package/dist/catalog/runtime-catalog.d.ts +63 -3
  235. package/dist/catalog/runtime-catalog.js +64 -4
  236. package/dist/catalog/runtime-catalog.js.map +1 -1
  237. package/dist/chat/AthenaChat.cjs +337 -99
  238. package/dist/chat/AthenaChat.cjs.map +1 -1
  239. package/dist/chat/AthenaChat.d.ts +80 -4
  240. package/dist/chat/AthenaChat.js +337 -99
  241. package/dist/chat/AthenaChat.js.map +1 -1
  242. package/dist/chat/StatewireApprovalCard.cjs +35 -5
  243. package/dist/chat/StatewireApprovalCard.cjs.map +1 -1
  244. package/dist/chat/StatewireApprovalCard.d.ts +55 -2
  245. package/dist/chat/StatewireApprovalCard.js +37 -7
  246. package/dist/chat/StatewireApprovalCard.js.map +1 -1
  247. package/dist/chat/StatewireQueuedMessages.cjs +17 -2
  248. package/dist/chat/StatewireQueuedMessages.cjs.map +1 -1
  249. package/dist/chat/StatewireQueuedMessages.d.ts +8 -45
  250. package/dist/chat/StatewireQueuedMessages.js +18 -3
  251. package/dist/chat/StatewireQueuedMessages.js.map +1 -1
  252. package/dist/chat/chat-agent-mentions.cjs +70 -0
  253. package/dist/chat/chat-agent-mentions.cjs.map +1 -0
  254. package/dist/chat/chat-agent-mentions.d.ts +13 -0
  255. package/dist/chat/chat-agent-mentions.js +70 -0
  256. package/dist/chat/chat-agent-mentions.js.map +1 -0
  257. package/dist/chat/composer-actions.cjs +12 -0
  258. package/dist/chat/composer-actions.cjs.map +1 -0
  259. package/dist/chat/composer-actions.d.ts +22 -0
  260. package/dist/chat/composer-actions.js +12 -0
  261. package/dist/chat/composer-actions.js.map +1 -0
  262. package/dist/chat/follow-up-suggestions.cjs +185 -0
  263. package/dist/chat/follow-up-suggestions.cjs.map +1 -0
  264. package/dist/chat/follow-up-suggestions.d.ts +64 -0
  265. package/dist/chat/follow-up-suggestions.js +185 -0
  266. package/dist/chat/follow-up-suggestions.js.map +1 -0
  267. package/dist/chat/super-grouping/ToolTimeline.cjs +4 -3
  268. package/dist/chat/super-grouping/ToolTimeline.cjs.map +1 -1
  269. package/dist/chat/super-grouping/ToolTimeline.d.ts +7 -3
  270. package/dist/chat/super-grouping/ToolTimeline.js +4 -3
  271. package/dist/chat/super-grouping/ToolTimeline.js.map +1 -1
  272. package/dist/chat/turn-changes.cjs +284 -0
  273. package/dist/chat/turn-changes.cjs.map +1 -0
  274. package/dist/chat/turn-changes.d.ts +130 -0
  275. package/dist/chat/turn-changes.js +284 -0
  276. package/dist/chat/turn-changes.js.map +1 -0
  277. package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.cjs +31 -0
  278. package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.cjs.map +1 -0
  279. package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.d.ts +31 -0
  280. package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.js +31 -0
  281. package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.js.map +1 -0
  282. package/dist/chat/typed-interrupts/approval-cards.cjs +250 -0
  283. package/dist/chat/typed-interrupts/approval-cards.cjs.map +1 -0
  284. package/dist/chat/typed-interrupts/approval-cards.d.ts +22 -0
  285. package/dist/chat/typed-interrupts/approval-cards.js +250 -0
  286. package/dist/chat/typed-interrupts/approval-cards.js.map +1 -0
  287. package/dist/chat/typed-interrupts/form-cards.cjs +289 -0
  288. package/dist/chat/typed-interrupts/form-cards.cjs.map +1 -0
  289. package/dist/chat/typed-interrupts/form-cards.d.ts +6 -0
  290. package/dist/chat/typed-interrupts/form-cards.js +289 -0
  291. package/dist/chat/typed-interrupts/form-cards.js.map +1 -0
  292. package/dist/chat/typed-interrupts/interrupt-card-shell.cjs +182 -0
  293. package/dist/chat/typed-interrupts/interrupt-card-shell.cjs.map +1 -0
  294. package/dist/chat/typed-interrupts/interrupt-card-shell.d.ts +47 -0
  295. package/dist/chat/typed-interrupts/interrupt-card-shell.js +182 -0
  296. package/dist/chat/typed-interrupts/interrupt-card-shell.js.map +1 -0
  297. package/dist/chat/typed-interrupts/json-schema-form.cjs +388 -0
  298. package/dist/chat/typed-interrupts/json-schema-form.cjs.map +1 -0
  299. package/dist/chat/typed-interrupts/json-schema-form.d.ts +33 -0
  300. package/dist/chat/typed-interrupts/json-schema-form.js +388 -0
  301. package/dist/chat/typed-interrupts/json-schema-form.js.map +1 -0
  302. package/dist/chat/typed-interrupts/questionnaire-card.cjs +449 -0
  303. package/dist/chat/typed-interrupts/questionnaire-card.cjs.map +1 -0
  304. package/dist/chat/typed-interrupts/questionnaire-card.d.ts +20 -0
  305. package/dist/chat/typed-interrupts/questionnaire-card.js +449 -0
  306. package/dist/chat/typed-interrupts/questionnaire-card.js.map +1 -0
  307. package/dist/chat/typed-interrupts/request-file-card.cjs +159 -0
  308. package/dist/chat/typed-interrupts/request-file-card.cjs.map +1 -0
  309. package/dist/chat/typed-interrupts/request-file-card.d.ts +2 -0
  310. package/dist/chat/typed-interrupts/request-file-card.js +159 -0
  311. package/dist/chat/typed-interrupts/request-file-card.js.map +1 -0
  312. package/dist/chat/typed-interrupts/toolkit-selection-card.cjs +189 -0
  313. package/dist/chat/typed-interrupts/toolkit-selection-card.cjs.map +1 -0
  314. package/dist/chat/typed-interrupts/toolkit-selection-card.d.ts +23 -0
  315. package/dist/chat/typed-interrupts/toolkit-selection-card.js +189 -0
  316. package/dist/chat/typed-interrupts/toolkit-selection-card.js.map +1 -0
  317. package/dist/chat/typed-interrupts/typed-interrupt-body.cjs +26 -0
  318. package/dist/chat/typed-interrupts/typed-interrupt-body.cjs.map +1 -0
  319. package/dist/chat/typed-interrupts/typed-interrupt-body.d.ts +3 -0
  320. package/dist/chat/typed-interrupts/typed-interrupt-body.js +26 -0
  321. package/dist/chat/typed-interrupts/typed-interrupt-body.js.map +1 -0
  322. package/dist/chat/typed-interrupts/typed-interrupt-graphql.cjs +105 -0
  323. package/dist/chat/typed-interrupts/typed-interrupt-graphql.cjs.map +1 -0
  324. package/dist/chat/typed-interrupts/typed-interrupt-graphql.d.ts +29 -0
  325. package/dist/chat/typed-interrupts/typed-interrupt-graphql.js +105 -0
  326. package/dist/chat/typed-interrupts/typed-interrupt-graphql.js.map +1 -0
  327. package/dist/chat/typed-interrupts/typed-interrupt-notice.cjs +70 -0
  328. package/dist/chat/typed-interrupts/typed-interrupt-notice.cjs.map +1 -0
  329. package/dist/chat/typed-interrupts/typed-interrupt-notice.d.ts +45 -0
  330. package/dist/chat/typed-interrupts/typed-interrupt-notice.js +70 -0
  331. package/dist/chat/typed-interrupts/typed-interrupt-notice.js.map +1 -0
  332. package/dist/chat/typed-interrupts/typed-interrupt-panel.cjs +76 -0
  333. package/dist/chat/typed-interrupts/typed-interrupt-panel.cjs.map +1 -0
  334. package/dist/chat/typed-interrupts/typed-interrupt-panel.d.ts +11 -0
  335. package/dist/chat/typed-interrupts/typed-interrupt-panel.js +76 -0
  336. package/dist/chat/typed-interrupts/typed-interrupt-panel.js.map +1 -0
  337. package/dist/chat/typed-interrupts/typed-interrupt-types.d.ts +46 -0
  338. package/dist/chat/typed-interrupts/use-interrupt-draft.cjs +106 -0
  339. package/dist/chat/typed-interrupts/use-interrupt-draft.cjs.map +1 -0
  340. package/dist/chat/typed-interrupts/use-interrupt-draft.d.ts +29 -0
  341. package/dist/chat/typed-interrupts/use-interrupt-draft.js +106 -0
  342. package/dist/chat/typed-interrupts/use-interrupt-draft.js.map +1 -0
  343. package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.cjs +231 -0
  344. package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.cjs.map +1 -0
  345. package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.d.ts +66 -0
  346. package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.js +231 -0
  347. package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.js.map +1 -0
  348. package/dist/chat-ui/composer/composer-named-agents.cjs +13 -0
  349. package/dist/chat-ui/composer/composer-named-agents.cjs.map +1 -0
  350. package/dist/chat-ui/composer/composer-named-agents.d.ts +20 -0
  351. package/dist/chat-ui/composer/composer-named-agents.js +13 -0
  352. package/dist/chat-ui/composer/composer-named-agents.js.map +1 -0
  353. package/dist/chat-ui/composer/slash-command-menu.cjs +143 -0
  354. package/dist/chat-ui/composer/slash-command-menu.cjs.map +1 -0
  355. package/dist/chat-ui/composer/slash-command-menu.d.ts +19 -0
  356. package/dist/chat-ui/composer/slash-command-menu.js +143 -0
  357. package/dist/chat-ui/composer/slash-command-menu.js.map +1 -0
  358. package/dist/chat-ui/composer/slash-commands-extension.cjs +51 -0
  359. package/dist/chat-ui/composer/slash-commands-extension.cjs.map +1 -0
  360. package/dist/chat-ui/composer/slash-commands-extension.d.ts +39 -0
  361. package/dist/chat-ui/composer/slash-commands-extension.js +51 -0
  362. package/dist/chat-ui/composer/slash-commands-extension.js.map +1 -0
  363. package/dist/chat-ui/composer/slash-commands.cjs +74 -0
  364. package/dist/chat-ui/composer/slash-commands.cjs.map +1 -0
  365. package/dist/chat-ui/composer/slash-commands.d.ts +82 -0
  366. package/dist/chat-ui/composer/slash-commands.js +74 -0
  367. package/dist/chat-ui/composer/slash-commands.js.map +1 -0
  368. package/dist/chat-ui/composer/tiptap-composer.cjs +135 -9
  369. package/dist/chat-ui/composer/tiptap-composer.cjs.map +1 -1
  370. package/dist/chat-ui/composer/tiptap-composer.d.ts +61 -2
  371. package/dist/chat-ui/composer/tiptap-composer.js +135 -9
  372. package/dist/chat-ui/composer/tiptap-composer.js.map +1 -1
  373. package/dist/chat-ui/index.cjs +3 -0
  374. package/dist/chat-ui/index.cjs.map +1 -1
  375. package/dist/chat-ui/index.d.ts +3 -2
  376. package/dist/chat-ui/index.js +3 -0
  377. package/dist/chat-ui/index.js.map +1 -1
  378. package/dist/chat-ui/mentions/mention-chip.cjs +1 -1
  379. package/dist/chat-ui/mentions/mention-chip.cjs.map +1 -1
  380. package/dist/chat-ui/mentions/mention-chip.js +2 -2
  381. package/dist/chat-ui/mentions/mention-chip.js.map +1 -1
  382. package/dist/chat-ui/mentions/mention-extension.cjs +8 -1
  383. package/dist/chat-ui/mentions/mention-extension.cjs.map +1 -1
  384. package/dist/chat-ui/mentions/mention-extension.js +8 -1
  385. package/dist/chat-ui/mentions/mention-extension.js.map +1 -1
  386. package/dist/chat-ui/mentions/suggestions/components/get-scope-name.cjs +1 -0
  387. package/dist/chat-ui/mentions/suggestions/components/get-scope-name.cjs.map +1 -1
  388. package/dist/chat-ui/mentions/suggestions/components/get-scope-name.js +1 -0
  389. package/dist/chat-ui/mentions/suggestions/components/get-scope-name.js.map +1 -1
  390. package/dist/chat-ui/mentions/suggestions/components/mention-icon.cjs +2 -0
  391. package/dist/chat-ui/mentions/suggestions/components/mention-icon.cjs.map +1 -1
  392. package/dist/chat-ui/mentions/suggestions/components/mention-icon.js +3 -1
  393. package/dist/chat-ui/mentions/suggestions/components/mention-icon.js.map +1 -1
  394. package/dist/chat-ui/mentions/suggestions/components/menu-item.cjs +1 -1
  395. package/dist/chat-ui/mentions/suggestions/components/menu-item.cjs.map +1 -1
  396. package/dist/chat-ui/mentions/suggestions/components/menu-item.js +1 -1
  397. package/dist/chat-ui/mentions/suggestions/components/menu-item.js.map +1 -1
  398. package/dist/chat-ui/mentions/suggestions/data/api-client.cjs +36 -0
  399. package/dist/chat-ui/mentions/suggestions/data/api-client.cjs.map +1 -1
  400. package/dist/chat-ui/mentions/suggestions/data/api-client.d.ts +42 -0
  401. package/dist/chat-ui/mentions/suggestions/data/api-client.js +36 -0
  402. package/dist/chat-ui/mentions/suggestions/data/api-client.js.map +1 -1
  403. package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs +235 -19
  404. package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs.map +1 -1
  405. package/dist/chat-ui/mentions/suggestions/data/sources/index.d.ts +88 -10
  406. package/dist/chat-ui/mentions/suggestions/data/sources/index.js +236 -20
  407. package/dist/chat-ui/mentions/suggestions/data/sources/index.js.map +1 -1
  408. package/dist/chat-ui/mentions/suggestions/data/types.cjs.map +1 -1
  409. package/dist/chat-ui/mentions/suggestions/data/types.d.ts +27 -1
  410. package/dist/chat-ui/mentions/suggestions/data/types.js.map +1 -1
  411. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs +56 -5
  412. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs.map +1 -1
  413. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.d.ts +26 -6
  414. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js +57 -6
  415. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js.map +1 -1
  416. package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.cjs +34 -17
  417. package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.cjs.map +1 -1
  418. package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.d.ts +19 -1
  419. package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.js +35 -18
  420. package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.js.map +1 -1
  421. package/dist/chat-ui/statewire.d.ts +1 -1
  422. package/dist/chat-ui/thread/statewire-history-edge.cjs +15 -0
  423. package/dist/chat-ui/thread/statewire-history-edge.cjs.map +1 -1
  424. package/dist/chat-ui/thread/statewire-history-edge.d.ts +4 -1
  425. package/dist/chat-ui/thread/statewire-history-edge.js +15 -0
  426. package/dist/chat-ui/thread/statewire-history-edge.js.map +1 -1
  427. package/dist/collab/client.cjs +17 -5
  428. package/dist/collab/client.cjs.map +1 -1
  429. package/dist/collab/client.d.ts +22 -7
  430. package/dist/collab/client.js +17 -5
  431. package/dist/collab/client.js.map +1 -1
  432. package/dist/composer/ComposerAttachedReferences.cjs +119 -0
  433. package/dist/composer/ComposerAttachedReferences.cjs.map +1 -0
  434. package/dist/composer/ComposerAttachedReferences.d.ts +26 -0
  435. package/dist/composer/ComposerAttachedReferences.js +119 -0
  436. package/dist/composer/ComposerAttachedReferences.js.map +1 -0
  437. package/dist/composer/ComposerNamedAgents.cjs +63 -0
  438. package/dist/composer/ComposerNamedAgents.cjs.map +1 -0
  439. package/dist/composer/ComposerNamedAgents.d.ts +16 -0
  440. package/dist/composer/ComposerNamedAgents.js +63 -0
  441. package/dist/composer/ComposerNamedAgents.js.map +1 -0
  442. package/dist/composer/attached-references.cjs +159 -0
  443. package/dist/composer/attached-references.cjs.map +1 -0
  444. package/dist/composer/attached-references.d.ts +86 -0
  445. package/dist/composer/attached-references.js +159 -0
  446. package/dist/composer/attached-references.js.map +1 -0
  447. package/dist/composer/build-composed-message.cjs +14 -7
  448. package/dist/composer/build-composed-message.cjs.map +1 -1
  449. package/dist/composer/build-composed-message.d.ts +6 -1
  450. package/dist/composer/build-composed-message.js +14 -7
  451. package/dist/composer/build-composed-message.js.map +1 -1
  452. package/dist/composer/composer-handoff.cjs +6 -2
  453. package/dist/composer/composer-handoff.cjs.map +1 -1
  454. package/dist/composer/composer-handoff.d.ts +7 -1
  455. package/dist/composer/composer-handoff.js +6 -2
  456. package/dist/composer/composer-handoff.js.map +1 -1
  457. package/dist/composer/folder-upload.cjs +149 -0
  458. package/dist/composer/folder-upload.cjs.map +1 -0
  459. package/dist/composer/folder-upload.d.ts +79 -0
  460. package/dist/composer/folder-upload.js +149 -0
  461. package/dist/composer/folder-upload.js.map +1 -0
  462. package/dist/composer/index.d.ts +1 -1
  463. package/dist/composer/useAttachToChat.cjs +35 -0
  464. package/dist/composer/useAttachToChat.cjs.map +1 -0
  465. package/dist/composer/useAttachToChat.d.ts +54 -0
  466. package/dist/composer/useAttachToChat.js +35 -0
  467. package/dist/composer/useAttachToChat.js.map +1 -0
  468. package/dist/composer/useAttachedReferencesComposerProps.cjs +19 -0
  469. package/dist/composer/useAttachedReferencesComposerProps.cjs.map +1 -0
  470. package/dist/composer/useAttachedReferencesComposerProps.d.ts +12 -0
  471. package/dist/composer/useAttachedReferencesComposerProps.js +19 -0
  472. package/dist/composer/useAttachedReferencesComposerProps.js.map +1 -0
  473. package/dist/composer/useFileUpload.cjs +95 -7
  474. package/dist/composer/useFileUpload.cjs.map +1 -1
  475. package/dist/composer/useFileUpload.d.ts +21 -2
  476. package/dist/composer/useFileUpload.js +95 -7
  477. package/dist/composer/useFileUpload.js.map +1 -1
  478. package/dist/data/athena-api-error.cjs +125 -0
  479. package/dist/data/athena-api-error.cjs.map +1 -0
  480. package/dist/data/athena-api-error.d.ts +96 -0
  481. package/dist/data/athena-api-error.js +125 -0
  482. package/dist/data/athena-api-error.js.map +1 -0
  483. package/dist/data/athena-data-client.cjs +106 -0
  484. package/dist/data/athena-data-client.cjs.map +1 -0
  485. package/dist/data/athena-data-client.d.ts +74 -0
  486. package/dist/data/athena-data-client.js +106 -0
  487. package/dist/data/athena-data-client.js.map +1 -0
  488. package/dist/data/athena-member.cjs +93 -0
  489. package/dist/data/athena-member.cjs.map +1 -0
  490. package/dist/data/athena-member.d.ts +125 -0
  491. package/dist/data/athena-member.js +93 -0
  492. package/dist/data/athena-member.js.map +1 -0
  493. package/dist/data/athena-request.cjs +458 -0
  494. package/dist/data/athena-request.cjs.map +1 -0
  495. package/dist/data/athena-request.d.ts +120 -0
  496. package/dist/data/athena-request.js +458 -0
  497. package/dist/data/athena-request.js.map +1 -0
  498. package/dist/data/use-athena-fetch.cjs +14 -0
  499. package/dist/data/use-athena-fetch.cjs.map +1 -0
  500. package/dist/data/use-athena-fetch.d.ts +19 -0
  501. package/dist/data/use-athena-fetch.js +14 -0
  502. package/dist/data/use-athena-fetch.js.map +1 -0
  503. package/dist/data/use-athena-graphql.cjs +66 -0
  504. package/dist/data/use-athena-graphql.cjs.map +1 -0
  505. package/dist/data/use-athena-graphql.d.ts +56 -0
  506. package/dist/data/use-athena-graphql.js +66 -0
  507. package/dist/data/use-athena-graphql.js.map +1 -0
  508. package/dist/data/use-athena-rest.cjs +33 -0
  509. package/dist/data/use-athena-rest.cjs.map +1 -0
  510. package/dist/data/use-athena-rest.d.ts +21 -0
  511. package/dist/data/use-athena-rest.js +33 -0
  512. package/dist/data/use-athena-rest.js.map +1 -0
  513. package/dist/data/use-semantic-query.cjs +44 -0
  514. package/dist/data/use-semantic-query.cjs.map +1 -0
  515. package/dist/data/use-semantic-query.d.ts +92 -0
  516. package/dist/data/use-semantic-query.js +44 -0
  517. package/dist/data/use-semantic-query.js.map +1 -0
  518. package/dist/diagnostics/athena-diagnostics.cjs.map +1 -1
  519. package/dist/diagnostics/athena-diagnostics.d.ts +5 -1
  520. package/dist/diagnostics/athena-diagnostics.js.map +1 -1
  521. package/dist/diagnostics/errors.cjs +7 -0
  522. package/dist/diagnostics/errors.cjs.map +1 -1
  523. package/dist/diagnostics/errors.d.ts +7 -0
  524. package/dist/diagnostics/errors.js +7 -0
  525. package/dist/diagnostics/errors.js.map +1 -1
  526. package/dist/index.cjs +155 -11
  527. package/dist/index.cjs.map +1 -1
  528. package/dist/index.d.ts +72 -13
  529. package/dist/index.js +148 -4
  530. package/dist/index.js.map +1 -1
  531. package/dist/keryx-http/src/initial-sync.cjs +64 -16
  532. package/dist/keryx-http/src/initial-sync.cjs.map +1 -1
  533. package/dist/keryx-http/src/initial-sync.d.ts +31 -1
  534. package/dist/keryx-http/src/initial-sync.js +64 -16
  535. package/dist/keryx-http/src/initial-sync.js.map +1 -1
  536. package/dist/keryx-http/src/own-awareness.cjs +20 -0
  537. package/dist/keryx-http/src/own-awareness.cjs.map +1 -0
  538. package/dist/keryx-http/src/own-awareness.d.ts +50 -0
  539. package/dist/keryx-http/src/own-awareness.js +20 -0
  540. package/dist/keryx-http/src/own-awareness.js.map +1 -0
  541. package/dist/keryx-http/src/update-attributions.cjs +26 -1
  542. package/dist/keryx-http/src/update-attributions.cjs.map +1 -1
  543. package/dist/keryx-http/src/update-attributions.d.ts +10 -1
  544. package/dist/keryx-http/src/update-attributions.js +26 -1
  545. package/dist/keryx-http/src/update-attributions.js.map +1 -1
  546. package/dist/offline/chat-outbox.cjs +262 -26
  547. package/dist/offline/chat-outbox.cjs.map +1 -1
  548. package/dist/offline/chat-outbox.d.ts +90 -12
  549. package/dist/offline/chat-outbox.js +263 -27
  550. package/dist/offline/chat-outbox.js.map +1 -1
  551. package/dist/provider/AthenaProvider.cjs +63 -19
  552. package/dist/provider/AthenaProvider.cjs.map +1 -1
  553. package/dist/provider/AthenaProvider.d.ts +24 -8
  554. package/dist/provider/AthenaProvider.js +66 -22
  555. package/dist/provider/AthenaProvider.js.map +1 -1
  556. package/dist/react/package.json.cjs +1 -1
  557. package/dist/react/package.json.js +1 -1
  558. package/dist/references/src/anchors/types.cjs +5 -0
  559. package/dist/references/src/anchors/types.cjs.map +1 -1
  560. package/dist/references/src/anchors/types.js +5 -0
  561. package/dist/references/src/anchors/types.js.map +1 -1
  562. package/dist/references/src/attachable.cjs +149 -0
  563. package/dist/references/src/attachable.cjs.map +1 -0
  564. package/dist/references/src/attachable.d.ts +87 -0
  565. package/dist/references/src/attachable.js +149 -0
  566. package/dist/references/src/attachable.js.map +1 -0
  567. package/dist/runtime/StatewirePlanModeLaneSync.cjs +93 -0
  568. package/dist/runtime/StatewirePlanModeLaneSync.cjs.map +1 -0
  569. package/dist/runtime/StatewirePlanModeLaneSync.d.ts +34 -0
  570. package/dist/runtime/StatewirePlanModeLaneSync.js +93 -0
  571. package/dist/runtime/StatewirePlanModeLaneSync.js.map +1 -0
  572. package/dist/runtime/StatewireThreadConfigLaneSync.cjs +2 -0
  573. package/dist/runtime/StatewireThreadConfigLaneSync.cjs.map +1 -1
  574. package/dist/runtime/StatewireThreadConfigLaneSync.d.ts +4 -0
  575. package/dist/runtime/StatewireThreadConfigLaneSync.js +2 -0
  576. package/dist/runtime/StatewireThreadConfigLaneSync.js.map +1 -1
  577. package/dist/runtime/statewire-plan-mode.cjs +71 -0
  578. package/dist/runtime/statewire-plan-mode.cjs.map +1 -0
  579. package/dist/runtime/statewire-plan-mode.d.ts +88 -0
  580. package/dist/runtime/statewire-plan-mode.js +71 -0
  581. package/dist/runtime/statewire-plan-mode.js.map +1 -0
  582. package/dist/runtime/statewire-run-config.cjs +18 -1
  583. package/dist/runtime/statewire-run-config.cjs.map +1 -1
  584. package/dist/runtime/statewire-run-config.d.ts +20 -0
  585. package/dist/runtime/statewire-run-config.js +18 -1
  586. package/dist/runtime/statewire-run-config.js.map +1 -1
  587. package/dist/runtime/statewire-session-key.cjs +11 -5
  588. package/dist/runtime/statewire-session-key.cjs.map +1 -1
  589. package/dist/runtime/statewire-session-key.d.ts +22 -10
  590. package/dist/runtime/statewire-session-key.js +11 -5
  591. package/dist/runtime/statewire-session-key.js.map +1 -1
  592. package/dist/runtime/useAthenaStatewireRuntime.cjs +65 -8
  593. package/dist/runtime/useAthenaStatewireRuntime.cjs.map +1 -1
  594. package/dist/runtime/useAthenaStatewireRuntime.d.ts +26 -10
  595. package/dist/runtime/useAthenaStatewireRuntime.js +67 -10
  596. package/dist/runtime/useAthenaStatewireRuntime.js.map +1 -1
  597. package/dist/search/useAthenaAssets.cjs +394 -0
  598. package/dist/search/useAthenaAssets.cjs.map +1 -0
  599. package/dist/search/useAthenaAssets.d.ts +186 -0
  600. package/dist/search/useAthenaAssets.js +394 -0
  601. package/dist/search/useAthenaAssets.js.map +1 -0
  602. package/dist/sheet-range/index.cjs +4 -0
  603. package/dist/sheet-range/index.cjs.map +1 -1
  604. package/dist/sheet-range/index.d.ts +4 -2
  605. package/dist/sheet-range/index.js +4 -0
  606. package/dist/sheet-range/index.js.map +1 -1
  607. package/dist/sheet-range/query-range.cjs +102 -0
  608. package/dist/sheet-range/query-range.cjs.map +1 -0
  609. package/dist/sheet-range/query-range.d.ts +46 -0
  610. package/dist/sheet-range/query-range.js +102 -0
  611. package/dist/sheet-range/query-range.js.map +1 -0
  612. package/dist/styles.css +1 -1
  613. package/dist/subagents/index.cjs +49 -0
  614. package/dist/subagents/index.cjs.map +1 -0
  615. package/dist/subagents/index.d.ts +16 -0
  616. package/dist/subagents/index.js +49 -0
  617. package/dist/subagents/index.js.map +1 -0
  618. package/dist/subagents/lane-follow.cjs +19 -0
  619. package/dist/subagents/lane-follow.cjs.map +1 -0
  620. package/dist/subagents/lane-follow.d.ts +9 -0
  621. package/dist/subagents/lane-follow.js +19 -0
  622. package/dist/subagents/lane-follow.js.map +1 -0
  623. package/dist/subagents/lane-model.cjs +178 -0
  624. package/dist/subagents/lane-model.cjs.map +1 -0
  625. package/dist/subagents/lane-model.d.ts +140 -0
  626. package/dist/subagents/lane-model.js +178 -0
  627. package/dist/subagents/lane-model.js.map +1 -0
  628. package/dist/subagents/lane-parts.cjs +517 -0
  629. package/dist/subagents/lane-parts.cjs.map +1 -0
  630. package/dist/subagents/lane-parts.d.ts +130 -0
  631. package/dist/subagents/lane-parts.js +517 -0
  632. package/dist/subagents/lane-parts.js.map +1 -0
  633. package/dist/subagents/subagent-lane-group.cjs +215 -0
  634. package/dist/subagents/subagent-lane-group.cjs.map +1 -0
  635. package/dist/subagents/subagent-lane-group.d.ts +67 -0
  636. package/dist/subagents/subagent-lane-group.js +215 -0
  637. package/dist/subagents/subagent-lane-group.js.map +1 -0
  638. package/dist/subagents/subagent-transcript-drawer.cjs +431 -0
  639. package/dist/subagents/subagent-transcript-drawer.cjs.map +1 -0
  640. package/dist/subagents/subagent-transcript-drawer.d.ts +78 -0
  641. package/dist/subagents/subagent-transcript-drawer.js +431 -0
  642. package/dist/subagents/subagent-transcript-drawer.js.map +1 -0
  643. package/dist/subagents/task-subagent-group.cjs +115 -0
  644. package/dist/subagents/task-subagent-group.cjs.map +1 -0
  645. package/dist/subagents/task-subagent-group.d.ts +36 -0
  646. package/dist/subagents/task-subagent-group.js +115 -0
  647. package/dist/subagents/task-subagent-group.js.map +1 -0
  648. package/dist/subagents/use-omitted-images-in-view.cjs +68 -0
  649. package/dist/subagents/use-omitted-images-in-view.cjs.map +1 -0
  650. package/dist/subagents/use-omitted-images-in-view.d.ts +21 -0
  651. package/dist/subagents/use-omitted-images-in-view.js +68 -0
  652. package/dist/subagents/use-omitted-images-in-view.js.map +1 -0
  653. package/dist/threads/Inbox.cjs +2 -2
  654. package/dist/threads/Inbox.cjs.map +1 -1
  655. package/dist/threads/SessionList.cjs +27 -24
  656. package/dist/threads/SessionList.cjs.map +1 -1
  657. package/dist/threads/SessionList.js +22 -19
  658. package/dist/threads/SessionList.js.map +1 -1
  659. package/dist/threads/SessionsPage.cjs +13 -7
  660. package/dist/threads/SessionsPage.cjs.map +1 -1
  661. package/dist/threads/SessionsPage.d.ts +10 -1
  662. package/dist/threads/SessionsPage.js +9 -3
  663. package/dist/threads/SessionsPage.js.map +1 -1
  664. package/dist/threads/live-session-rows.cjs +207 -0
  665. package/dist/threads/live-session-rows.cjs.map +1 -0
  666. package/dist/threads/live-session-rows.d.ts +175 -0
  667. package/dist/threads/live-session-rows.js +207 -0
  668. package/dist/threads/live-session-rows.js.map +1 -0
  669. package/dist/threads/session-list-model.cjs.map +1 -1
  670. package/dist/threads/session-list-model.d.ts +2 -1
  671. package/dist/threads/session-list-model.js.map +1 -1
  672. package/dist/threads/session-row-parts.cjs +3 -3
  673. package/dist/threads/session-row-parts.cjs.map +1 -1
  674. package/dist/threads/sessions-page-model.cjs +13 -5
  675. package/dist/threads/sessions-page-model.cjs.map +1 -1
  676. package/dist/threads/sessions-page-model.d.ts +7 -0
  677. package/dist/threads/sessions-page-model.js +11 -3
  678. package/dist/threads/sessions-page-model.js.map +1 -1
  679. package/dist/threads/sessions-page-storage.cjs +8 -8
  680. package/dist/threads/sessions-page-storage.cjs.map +1 -1
  681. package/dist/threads/sessions-page-storage.d.ts +5 -1
  682. package/dist/threads/sessions-page-storage.js +8 -8
  683. package/dist/threads/sessions-page-storage.js.map +1 -1
  684. package/dist/threads/statewire-thread-list.cjs +173 -20
  685. package/dist/threads/statewire-thread-list.cjs.map +1 -1
  686. package/dist/threads/statewire-thread-list.d.ts +44 -1
  687. package/dist/threads/statewire-thread-list.js +174 -21
  688. package/dist/threads/statewire-thread-list.js.map +1 -1
  689. package/dist/threads/use-athena-sessions.cjs +1 -0
  690. package/dist/threads/use-athena-sessions.cjs.map +1 -1
  691. package/dist/threads/use-athena-sessions.d.ts +7 -0
  692. package/dist/threads/use-athena-sessions.js +1 -0
  693. package/dist/threads/use-athena-sessions.js.map +1 -1
  694. package/dist/threads/use-athena-thread-agent.cjs +31 -0
  695. package/dist/threads/use-athena-thread-agent.cjs.map +1 -0
  696. package/dist/threads/use-athena-thread-agent.d.ts +38 -0
  697. package/dist/threads/use-athena-thread-agent.js +31 -0
  698. package/dist/threads/use-athena-thread-agent.js.map +1 -0
  699. package/dist/threads/use-athena-thread-plan-mode.cjs +18 -0
  700. package/dist/threads/use-athena-thread-plan-mode.cjs.map +1 -0
  701. package/dist/threads/use-athena-thread-plan-mode.d.ts +18 -0
  702. package/dist/threads/use-athena-thread-plan-mode.js +18 -0
  703. package/dist/threads/use-athena-thread-plan-mode.js.map +1 -0
  704. package/dist/threads/use-rest-conversation-history.d.ts +1 -0
  705. package/dist/tools/agent-creations.cjs +97 -0
  706. package/dist/tools/agent-creations.cjs.map +1 -0
  707. package/dist/tools/agent-creations.d.ts +38 -0
  708. package/dist/tools/agent-creations.js +97 -0
  709. package/dist/tools/agent-creations.js.map +1 -0
  710. package/dist/tools/agent-highlights.cjs +100 -0
  711. package/dist/tools/agent-highlights.cjs.map +1 -0
  712. package/dist/tools/agent-highlights.d.ts +57 -0
  713. package/dist/tools/agent-highlights.js +100 -0
  714. package/dist/tools/agent-highlights.js.map +1 -0
  715. package/dist/tools/append-document-tool-ui.cjs +1 -0
  716. package/dist/tools/append-document-tool-ui.cjs.map +1 -1
  717. package/dist/tools/append-document-tool-ui.d.ts +7 -0
  718. package/dist/tools/append-document-tool-ui.js +2 -1
  719. package/dist/tools/append-document-tool-ui.js.map +1 -1
  720. package/dist/tools/auto-open-tools.cjs +144 -71
  721. package/dist/tools/auto-open-tools.cjs.map +1 -1
  722. package/dist/tools/auto-open-tools.d.ts +131 -1
  723. package/dist/tools/auto-open-tools.js +145 -72
  724. package/dist/tools/auto-open-tools.js.map +1 -1
  725. package/dist/tools/browser-tool-uis.cjs +594 -0
  726. package/dist/tools/browser-tool-uis.cjs.map +1 -0
  727. package/dist/tools/browser-tool-uis.d.ts +8 -0
  728. package/dist/tools/browser-tool-uis.js +594 -0
  729. package/dist/tools/browser-tool-uis.js.map +1 -0
  730. package/dist/tools/computer-asset-tool-uis.cjs +313 -0
  731. package/dist/tools/computer-asset-tool-uis.cjs.map +1 -0
  732. package/dist/tools/computer-asset-tool-uis.d.ts +5 -0
  733. package/dist/tools/computer-asset-tool-uis.js +313 -0
  734. package/dist/tools/computer-asset-tool-uis.js.map +1 -0
  735. package/dist/tools/document-edit-tool-uis.cjs +218 -0
  736. package/dist/tools/document-edit-tool-uis.cjs.map +1 -0
  737. package/dist/tools/document-edit-tool-uis.d.ts +40 -0
  738. package/dist/tools/document-edit-tool-uis.js +218 -0
  739. package/dist/tools/document-edit-tool-uis.js.map +1 -0
  740. package/dist/tools/drive-tool-uis.cjs +425 -0
  741. package/dist/tools/drive-tool-uis.cjs.map +1 -0
  742. package/dist/tools/drive-tool-uis.d.ts +120 -0
  743. package/dist/tools/drive-tool-uis.js +425 -0
  744. package/dist/tools/drive-tool-uis.js.map +1 -0
  745. package/dist/tools/email-calendar-tool-uis.cjs +789 -0
  746. package/dist/tools/email-calendar-tool-uis.cjs.map +1 -0
  747. package/dist/tools/email-calendar-tool-uis.d.ts +129 -0
  748. package/dist/tools/email-calendar-tool-uis.js +789 -0
  749. package/dist/tools/email-calendar-tool-uis.js.map +1 -0
  750. package/dist/tools/ontology-tool-uis.cjs +83 -0
  751. package/dist/tools/ontology-tool-uis.cjs.map +1 -0
  752. package/dist/tools/ontology-tool-uis.d.ts +9 -0
  753. package/dist/tools/ontology-tool-uis.js +83 -0
  754. package/dist/tools/ontology-tool-uis.js.map +1 -0
  755. package/dist/tools/orchestration-tool-uis.cjs +586 -0
  756. package/dist/tools/orchestration-tool-uis.cjs.map +1 -0
  757. package/dist/tools/orchestration-tool-uis.d.ts +141 -0
  758. package/dist/tools/orchestration-tool-uis.js +586 -0
  759. package/dist/tools/orchestration-tool-uis.js.map +1 -0
  760. package/dist/tools/presentation-edit-tool-uis.cjs +516 -0
  761. package/dist/tools/presentation-edit-tool-uis.cjs.map +1 -0
  762. package/dist/tools/presentation-edit-tool-uis.d.ts +73 -0
  763. package/dist/tools/presentation-edit-tool-uis.js +516 -0
  764. package/dist/tools/presentation-edit-tool-uis.js.map +1 -0
  765. package/dist/tools/project-tool-uis.cjs +213 -0
  766. package/dist/tools/project-tool-uis.cjs.map +1 -0
  767. package/dist/tools/project-tool-uis.d.ts +14 -0
  768. package/dist/tools/project-tool-uis.js +213 -0
  769. package/dist/tools/project-tool-uis.js.map +1 -0
  770. package/dist/tools/sandbox-tool-uis.cjs +491 -0
  771. package/dist/tools/sandbox-tool-uis.cjs.map +1 -0
  772. package/dist/tools/sandbox-tool-uis.d.ts +116 -0
  773. package/dist/tools/sandbox-tool-uis.js +491 -0
  774. package/dist/tools/sandbox-tool-uis.js.map +1 -0
  775. package/dist/tools/sheet-query-tool-ui.cjs +138 -0
  776. package/dist/tools/sheet-query-tool-ui.cjs.map +1 -0
  777. package/dist/tools/sheet-query-tool-ui.d.ts +15 -0
  778. package/dist/tools/sheet-query-tool-ui.js +138 -0
  779. package/dist/tools/sheet-query-tool-ui.js.map +1 -0
  780. package/dist/tools/studio-screenshot-tool-uis.cjs +262 -0
  781. package/dist/tools/studio-screenshot-tool-uis.cjs.map +1 -0
  782. package/dist/tools/studio-screenshot-tool-uis.d.ts +52 -0
  783. package/dist/tools/studio-screenshot-tool-uis.js +262 -0
  784. package/dist/tools/studio-screenshot-tool-uis.js.map +1 -0
  785. package/dist/tools/subagent-task-tool-ui.cjs +24 -475
  786. package/dist/tools/subagent-task-tool-ui.cjs.map +1 -1
  787. package/dist/tools/subagent-task-tool-ui.d.ts +19 -103
  788. package/dist/tools/subagent-task-tool-ui.js +28 -479
  789. package/dist/tools/subagent-task-tool-ui.js.map +1 -1
  790. package/dist/tools/tool-summary.cjs +36 -0
  791. package/dist/tools/tool-summary.cjs.map +1 -1
  792. package/dist/tools/tool-summary.js +36 -0
  793. package/dist/tools/tool-summary.js.map +1 -1
  794. package/dist/tools/tool-uis.cjs +181 -53
  795. package/dist/tools/tool-uis.cjs.map +1 -1
  796. package/dist/tools/tool-uis.d.ts +40 -0
  797. package/dist/tools/tool-uis.js +183 -55
  798. package/dist/tools/tool-uis.js.map +1 -1
  799. package/dist/typed-interrupts/index.cjs +15 -0
  800. package/dist/typed-interrupts/index.cjs.map +1 -0
  801. package/dist/typed-interrupts/index.d.ts +20 -0
  802. package/dist/typed-interrupts/index.js +15 -0
  803. package/dist/typed-interrupts/index.js.map +1 -0
  804. package/dist/workbench/session-workbench-panes.cjs +6 -6
  805. package/dist/workbench/session-workbench-panes.cjs.map +1 -1
  806. package/package.json +28 -6
  807. package/dist/agent-runtime/src/chat-outbox-store.cjs +0 -510
  808. package/dist/agent-runtime/src/chat-outbox-store.cjs.map +0 -1
  809. package/dist/agent-runtime/src/chat-outbox-store.d.ts +0 -210
  810. package/dist/agent-runtime/src/chat-outbox-store.js +0 -510
  811. package/dist/agent-runtime/src/chat-outbox-store.js.map +0 -1
package/README.md CHANGED
@@ -30,6 +30,15 @@ with `scripts/computer-starter-lockfiles.ts --react <version>`; their
30
30
  release-age gate. The qualification steps and gate removal condition are
31
31
  in the [coordinated release runbook](../../docs/runbooks/coordinated-client-releases.md#public-native-context-publication-gate).
32
32
 
33
+ SDK 0.59.0 moves to statewire 0.27 and Athena's 2026-11-04 command contract:
34
+ every message is one `run/send`, on wire 2026-11-01. Athena's hosts serve it
35
+ from the release that added `run/send` (agora on Python statewire 0.23.1,
36
+ Athena's managed cloud since November 8, 2026), and an older host cannot serve
37
+ a 0.59.0 chat: a customer deployment upgrades its own Athena before moving its
38
+ apps to 0.59.0 (see [What's new in 0.59.0](#whats-new-in-0590)). 0.58.0, which
39
+ first offered wire 2026-11-01, was tagged but never published; 0.59.0 carries
40
+ it.
41
+
33
42
  The SDK pins its assistant-ui runtime (`@assistant-ui/tap`, `store`, `core`,
34
43
  `react`, `react-statewire`, `statewire`) at exact versions, and those packages
35
44
  carry React contexts and module singletons: an app must resolve exactly **one**
@@ -212,10 +221,162 @@ never changes these props after the first send writes nothing. The
212
221
  For a collab agent whose author restricts it to its own models, see
213
222
  [Offering an agent's own models](#offering-an-agents-own-models).
214
223
 
224
+ **A session's own agent.** `agent` seeds a new session's agent on its first
225
+ send; after that the session's server config names its agent for good
226
+ (`collab_agent_id` is a key the config owns), whatever `agent` says. Read it
227
+ with `useAthenaThreadAgent()` (inside `<AthenaProvider>`): `{ agentId,
228
+ configured, ready }`, `agentId` the collab agent's asset id or `null` for the
229
+ person's own Athena assistant; wait for `ready`, as with the model.
230
+
231
+ **Grouping models by family.** Each `AthenaModelOption` of
232
+ `useAthenaModelCatalog()` also carries its place in its family, as agora's
233
+ model registry names it: `variantMode` (`STANDARD`, `THINKING`, `PRO`),
234
+ `variantEffort` (`NONE`, `LOW`, `MEDIUM`, `HIGH`, `XHIGH`, `MAX`) and
235
+ `variantServiceTier` (`STANDARD`, `FAST`), `null` where it names none. A picker
236
+ can show one row per family (`familyId`) and an effort control instead of one
237
+ row per model and effort.
238
+
239
+ **Agents with who made them.** `useAthenaAgentDirectory()` lists the agents
240
+ `useAthenaAgentCatalog()` lists, each with `createdBy` (agora's user id of the
241
+ person who made it) and `updatedAt`, so a picker can put the person's own
242
+ agents first. It is a query of its own (`AthenaAgentDirectory`); the catalog
243
+ is unchanged.
244
+
215
245
  If `config.appUrl` is omitted, the provider resolves it from the parent bridge or from the matching Athena environment defaults. Known Athena staging and production `apiUrl` and `backendUrl` values automatically fall back to the corresponding frontend origin.
216
246
 
217
247
  Use `trustedParentOrigins` when the SDK runs inside an iframe on a private-cloud or custom parent domain and you want to explicitly allow postMessage auth/config from that parent. Only the window that frames the app is heard. By default `athenaintel.com` hosts, localhost and your own origin are trusted, except the hosts that serve customer-written code (`*.app.athenaintel.com`, `*.code-sandpack.athenaintel.com` and friends; see "What's new in 0.28.0").
218
248
 
249
+ ### Plan mode
250
+
251
+ Plan mode is the agent's to-do plan: for multi-step work it writes the steps
252
+ down (`write_todos`) and checks them off as it goes, which `AthenaChat` shows
253
+ above the composer (`AthenaPlanStrip`). A thread plans unless its config
254
+ excludes the `write_todos` tool or its `TodoListMiddleware`, which is what
255
+ Athena on the web's Plan Mode switch does. Pass `planMode` to turn it off or
256
+ back on:
257
+
258
+ ```tsx
259
+ import { AthenaChat, AthenaProvider, ChatPlanModeToggle } from '@athenaintel/react';
260
+
261
+ function Chat() {
262
+ const [planMode, setPlanMode] = useState(true);
263
+ return (
264
+ <AthenaProvider config={config} planMode={planMode}>
265
+ <AthenaChat
266
+ composer={{ toolbarStart: <ChatPlanModeToggle value={planMode} onChange={setPlanMode} /> }}
267
+ />
268
+ </AthenaProvider>
269
+ );
270
+ }
271
+ ```
272
+
273
+ - `planMode={false}` adds `write_todos` to the send's `excluded_tools` and
274
+ `TodoListMiddleware` to its `excluded_middleware`, after anything your
275
+ `extraRunConfig` excludes; `true` takes them out; omitting it sends neither.
276
+ - As with `model`, changing it while a session is open applies to the next
277
+ turn: on a session with server config the SDK writes one `config/patch` of
278
+ the lists that change, computed from the session's own lists, so what
279
+ another client excluded stays excluded. The value a session is opened with
280
+ is never written. `useAthenaThreadPlanMode()` reads a session's own plan
281
+ mode (`{ planMode, configured, ready }`, as `useAthenaThreadModel` reads its
282
+ model); a refused write is a `statewire.config` diagnostics event with
283
+ `plan_mode` and its `config_keys`.
284
+ - A collab agent whose author turned off its built-in tools never plans: a
285
+ run can only narrow what an agent may use.
286
+ - `ChatPlanModeToggle` is the composer chip (a switch reading "Plan"),
287
+ controlled like the pickers.
288
+
289
+ ### Folding attach and `@` into a menu of your own
290
+
291
+ A host that offers attaching and the `@` menu from a control of its own (a +
292
+ menu, as Athena Desktop's composer has) turns the composer's own buttons off
293
+ and runs them from a slot:
294
+
295
+ ```tsx
296
+ import { AthenaChat, useAthenaComposerActions } from '@athenaintel/react';
297
+
298
+ function AddMenu() {
299
+ const composer = useAthenaComposerActions();
300
+ return (
301
+ <MyMenu>
302
+ <MyItem disabled={composer?.needsConnectionReason != null} onSelect={() => composer?.openFilePicker()}>
303
+ Files…
304
+ </MyItem>
305
+ <MyItem onSelect={() => composer?.openMentionMenu()}>An asset or person</MyItem>
306
+ </MyMenu>
307
+ );
308
+ }
309
+
310
+ <AthenaChat composer={{ attachButton: false, mentionButton: false, toolbarStart: <AddMenu /> }} />;
311
+ ```
312
+
313
+ - `attachButton: false` leaves the paperclip out; pasting and dropping files
314
+ still attach them. `openFilePicker()` opens the same picker the paperclip
315
+ does, and does nothing while `needsConnectionReason` is set.
316
+ - `mentionButton: false` leaves the `@` button out; typing `@` still opens the
317
+ menu, and so does `openMentionMenu()`.
318
+ - `useAthenaComposerActions()` is `null` outside a composer slot. Both default
319
+ to `true`: a host that sets neither sees no change.
320
+
321
+ ### Composer slash commands
322
+
323
+ `AthenaChat`'s `composer.slashCommands` (and `TiptapComposer`'s
324
+ `slashCommands`) give the composer a `/` menu of your own commands. Typing `/`
325
+ at the start of the draft or after a space lists them, narrowed by what
326
+ follows (a command's label, `name` or `aliases`). Arrows move through the
327
+ list, and Enter, Tab or a click runs the selected command. Escape closes it.
328
+ Enter sends nothing while the menu lists a command. A command that declares
329
+ `args` (what it takes, as the menu shows it) gets the text typed after its
330
+ name; any other command drops out of the menu once more words follow its name,
331
+ so a message that starts with a command's word is sent as typed:
332
+
333
+ ```tsx
334
+ import { ListChecksIcon, MessageSquarePlusIcon } from 'lucide-react';
335
+ import type { ComposerSlashCommand } from '@athenaintel/react';
336
+
337
+ const commands: ComposerSlashCommand[] = [
338
+ {
339
+ name: 'new',
340
+ label: 'New chat',
341
+ description: 'Start a new conversation',
342
+ aliases: ['clear'],
343
+ icon: MessageSquarePlusIcon,
344
+ group: 'Chat',
345
+ run: () => startNewChat(),
346
+ },
347
+ {
348
+ name: planMode ? 'plan-off' : 'plan-on',
349
+ label: planMode ? 'Turn plan mode off' : 'Turn plan mode on',
350
+ description: 'The to-do plan for multi-step work',
351
+ aliases: ['plan', planMode ? 'plan off' : 'plan on'],
352
+ icon: ListChecksIcon,
353
+ group: 'Chat',
354
+ run: () => setPlanMode(!planMode),
355
+ },
356
+ {
357
+ name: 'open',
358
+ label: 'Open a document',
359
+ description: 'Open the document a link names',
360
+ // `/open https://…` gives `args` "https://…".
361
+ args: 'a link',
362
+ run: ({ args }) => openDocument(args),
363
+ },
364
+ ];
365
+
366
+ <AthenaChat composer={{ slashCommands: commands }} />;
367
+ ```
368
+
369
+ - The typed `/name args` leaves the draft before `run` is called;
370
+ `insertText` puts text in its place, as typed.
371
+ - A command with a `disabledReason` lists greyed with the reason and does not
372
+ run (a command that needs a connection, while there is none).
373
+ - The list is read on every keystroke, so a command's label or
374
+ `disabledReason` can change while the menu is open. Without commands, `/` is
375
+ plain text.
376
+ - A `run` that throws or rejects is reported as a `composer.slash_command`
377
+ diagnostics event (`slash_command_failed`); what the person should see is the
378
+ command's to say.
379
+
219
380
  ## Transport (statewire only, as of 0.18.0)
220
381
 
221
382
  The SDK speaks one chat transport: **statewire**. The provider attaches to the
@@ -258,7 +419,7 @@ What the statewire transport wires up in `AthenaChat`:
258
419
 
259
420
  - **Approvals (HITL):** when the backend parks a run on an approval-gated
260
421
  tool call, an approval card renders above the composer with Approve/Reject
261
- (or Continue for a generic pause) and resumes the run through the statewire
422
+ (or Decline for a park it has no card for) and resumes the run through the statewire
262
423
  `run/input` command. Hosts that build their own thread UI should mount the
263
424
  exported `StatewireApprovalCard` themselves — without it an approval-gated
264
425
  run stays parked with no way to answer it. A lone call whose resolved
@@ -279,6 +440,34 @@ What the statewire transport wires up in `AthenaChat`:
279
440
  confirmed there. Its `onPending` gets the code and link to show while the
280
441
  tab is open; `useBrowserDecisionConfirmer` takes your own request and opener
281
442
  when the provider's don't fit (an extension, an Office add-in).
443
+ - **The agent's typed questions and approvals:** when a run parks on a typed
444
+ Athena interrupt, `AthenaChat` renders that kind's own card, the ones Athena
445
+ on the web shows, and answers with the resume shape its tool validates (a
446
+ host that mounts `StatewireApprovalCard` itself passes
447
+ `typedInterrupts={statewireTypedInterrupts}`, from
448
+ `@athenaintel/react/typed-interrupts`; without it a typed park keeps the
449
+ card's decline): the `ask` tool's questionnaire (one question
450
+ at a time, yes / no, one or several options, text, a comment on each, a
451
+ draft kept on agora), a file request (uploaded into Athena assets), a form
452
+ (from the resume model's JSON Schema), toolkits to turn on or off (with the
453
+ tool cap's headroom), a saved login to use, a project schedule, a wait, and
454
+ a tool-raised approval; any other `custom` park gets its schema's form. A
455
+ timed park counts down and stops its timer the first time the person
456
+ touches the card. Approving a typed approval (toolkits, a saved login, a
457
+ schedule, a tool-raised approval) goes through `confirmDecision` like any
458
+ approval, and agora holds it to a signed-in person: when it refuses an
459
+ answer, the card says why (for an app signed in with a key, where to answer
460
+ instead). Answering a question never asks. `isHandledElsewhere`, `readOnly`
461
+ and `onResumeRejected` apply to these cards too, and a host whose own cards
462
+ answer typed parks (Olympus) passes no `typedInterrupts` and never imports
463
+ that entry, so it bundles neither the SDK's cards nor its selector. The
464
+ cards load on the first typed park. For an approval UI of your own, the same
465
+ entry has `StatewireTypedInterruptCard`, which mounts them alone,
466
+ `useStatewireTypedInterrupt`, the engine behind them, `TypedInterruptCard`,
467
+ which renders one from an engine slice of your own, and the payload
468
+ contract's selector and parser (`isTypedInterruptRequest`,
469
+ `parseTypedInterruptPayload`); each kind's reader and resume are
470
+ `@athenaintel/agent-runtime/typed-interrupt-kinds`'.
282
471
  - **Frontend tools:** tools in `frontendTools` with a local `execute` are
283
472
  declared to the backend as `client_tools` and executed by the mounted
284
473
  client-tool bridge, which resumes the run with each tool's result.
@@ -474,6 +663,14 @@ Same visual language as `ThreadList` (Tailwind via `cn`, lucide icons), plus:
474
663
  frame instead of the loading scrim while the statewire attach lands
475
664
  (`useAthenaStatewireThreadList().prefetchThread(threadId)` for hosts
476
665
  drawing their own rows);
666
+ - live rows, newest first: a session the signed-in user's conversation index
667
+ pushes (started in this tab, another tab, Slack…) shows the moment it is
668
+ pushed, before the list is read again; a session that becomes active moves
669
+ to the top; and a message sent from this chat moves its session to the top
670
+ as working the moment it is sent — a chat the server does not know yet as
671
+ a pending row titled with the message (`isPending: true` on its
672
+ `useAthenaStatewireThreadList().threads` entry, with no pin, rename or
673
+ archive), which the server's own row replaces within moments;
477
674
  - skeleton rows (indicator, title line, meta line) while the first page
478
675
  loads — including while no credential has resolved — and for a refresh
479
676
  that has no rows to keep; "No sessions yet." only after a settled empty
@@ -515,7 +712,8 @@ The provider asks for pull-request state by default in thread-list mode
515
712
  never shows the chips to spare the server the lookup). The pure rules behind
516
713
  the rows — `groupSessions`, `sessionIndicator`, `sessionSecondaryLine`,
517
714
  `pullRequestChip`, `orderedPullRequests`, `sessionOriginLabel` — are exported for hosts drawing their
518
- own rows; `useAthenaStatewireThreadList().setFavorited({ threadId,
715
+ own rows, also alone as `@athenaintel/react/session-list-model`, which loads nothing else of the SDK;
716
+ `useAthenaStatewireThreadList().setFavorited({ threadId,
519
717
  isFavorited })` is the toggle behind them.
520
718
 
521
719
  ### `useAthenaSessionAttention(threadId?)`
@@ -629,7 +827,13 @@ import { AthenaProvider, InboxButton, SessionsPage } from '@athenaintel/react';
629
827
  first; group by what each session needs (Needs you, Working, Ready,
630
828
  Waiting, Error, Done), by run status, or not at all; show or hide the
631
829
  Status, Origin, Mode, Pull requests, Creator, Created and Updated columns
632
- (remembered per browser).
830
+ (remembered per browser). `defaultHiddenColumns` (typed `SessionsColumnId[]`)
831
+ chooses which columns start hidden; every other column shows. The default is
832
+ `DEFAULT_HIDDEN_SESSIONS_COLUMNS` (Mode, Creator, Created). An app whose
833
+ sessions have no pull requests passes
834
+ `defaultHiddenColumns={[...DEFAULT_HIDDEN_SESSIONS_COLUMNS, 'pullRequests']}`.
835
+ The person can still show any column. Once they change the display, their
836
+ choice is remembered and replaces the host's default.
633
837
  - **A status column that says what to do.** `sessionStatusChip`: the server's
634
838
  next action where the person must act ("Approve send email", "Merge #12"),
635
839
  else Working / Sleeping (a follow-up is pending) / Waiting / Error /
@@ -711,6 +915,15 @@ body used to drop it. With `threadListAgentHome`, `home_agent_id` rides beside
711
915
  it, and the answer's `home_agent_applied` says whether the list holds the
712
916
  agent's conversations (absent on an older server: it does not).
713
917
 
918
+ `firstPageUpdatedAt` says when the query's first page was last written (ms
919
+ since the epoch; 0 before it has any). With `offlineHistory` the first page can
920
+ be the copy the device kept, painted at once while agora is asked again: that
921
+ copy carries its old stamp until agora answers, and a refresh that fails leaves
922
+ the stamp as it was. A host that must act only on what agora said since it
923
+ started (Athena Desktop's needs-you notifications) compares it with its own
924
+ start time. `useConversationList` in `@athenaintel/agent-runtime` reports the
925
+ same stamp.
926
+
714
927
  ## Session workbench
715
928
 
716
929
  A Devin-style workspace pane beside the chat for the active session: a tab
@@ -818,6 +1031,117 @@ registry entries (`SESSION_WORKBENCH_TASKS_PANE`, …), the data hooks
818
1031
  (`deriveShellRows`, `filterShellRows`, `deriveTaskSteps`, `taskProgress`,
819
1032
  `workspaceComputers`) are exported for hosts composing their own.
820
1033
 
1034
+ ## Suggested follow-up prompts
1035
+
1036
+ `<AthenaChat followUpSuggestions />` suggests what the person might send next,
1037
+ as Codex's desktop app does after a turn. It is off by default, and while it is
1038
+ off nothing is requested.
1039
+
1040
+ ```tsx
1041
+ <AthenaChat followUpSuggestions={isCodingChat} />
1042
+ ```
1043
+
1044
+ - **When.** Once a run the person watched finishes with a reply, the chat asks
1045
+ Athena once for that turn (`POST /api/chat/follow-up-suggestions`, with the
1046
+ provider's token or API key, as every SDK request) and shows up to three
1047
+ chips just above the composer. A run that was stopped, failed or is waiting
1048
+ on the person gets none, and so does a conversation opened at rest. A
1049
+ `readOnly` chat never shows them.
1050
+ - **A click fills the composer.** A chip puts its words in the composer, with
1051
+ the caret after them. Nothing is sent. The chips go away once the person
1052
+ types or sends, or a new run starts.
1053
+ - **What is sent.** The turn's last user message (its first 4,000 characters)
1054
+ and the reply's text (its last 8,000) go with the conversation's thread id.
1055
+ Athena reads nothing else of the conversation, answers only for one the
1056
+ credential can read (404 otherwise), and charges the model call to that
1057
+ conversation's token usage.
1058
+ - **Failures show nothing.** A refused or failed request (an
1059
+ `AthenaSdkError`, code `follow_up_suggestions_failed`, or `auth_rejected`
1060
+ for a 401 / 403), or an Athena that predates the route (404), leaves the
1061
+ composer as it was. No error appears.
1062
+
1063
+ ## Attach objects to the next message
1064
+
1065
+ `useAttachToChat()` hands the agent an object on screen ("Discuss this with
1066
+ the agent"): an Athena asset (optionally a place inside it), an ontology object
1067
+ or a web page. The composer shows each one as a removable chip, and the next
1068
+ message carries the references as structured data, never as text. Athena
1069
+ resolves each one on the server with the signed-in person's own permission
1070
+ before the agent is told about it.
1071
+
1072
+ ```tsx
1073
+ import { useAttachToChat } from '@athenaintel/react';
1074
+
1075
+ function DiscussButton({ investor }: { investor: { id: string; name: string } }) {
1076
+ const { attach } = useAttachToChat();
1077
+ return (
1078
+ <button
1079
+ onClick={() =>
1080
+ attach(
1081
+ { referenced: 'ontology_object', id: investor.id, meta: { title: investor.name } },
1082
+ { prompt: 'Draft an intro email to ', open: true },
1083
+ )
1084
+ }
1085
+ >
1086
+ Discuss
1087
+ </button>
1088
+ );
1089
+ }
1090
+ ```
1091
+
1092
+ `attach(reference, { prompt?, open? })` takes an `AthenaReference`, one of the
1093
+ reference standard's kinds (`@athenaintel/references`):
1094
+
1095
+ | `referenced` | Shape | Read on the server through |
1096
+ |---|---|---|
1097
+ | `asset` | `{ id: 'asset_…', anchor?, meta?: { title?, assetType? } }`; `anchor` is the standard's (`{ type: 'page', page: 5 }`, `{ type: 'sheet_range', sheetId, range }`, …) | the asset permission check, then `read_asset` |
1098
+ | `ontology_object` | `{ id: 'asset_…', meta?: { title?, objectType? } }`: a v1 object or a Platform 2.0 object | the object gate (Platform 2.0) or the asset check and the ontology rule (v1), then `get_ontology_object` or `read_asset` |
1099
+ | `external_url` | `{ url: 'https://…', meta?: { title? } }` | the web reader's egress guard (`read_web_page`) |
1100
+
1101
+ - **The chips.** `AthenaChat` shows them above the editor
1102
+ (`ComposerAttachedReferences`), with the kind's icon, the label and an
1103
+ anchored asset's place (`Q4 deck · p.5`). Each one has a remove button. A
1104
+ sent message shows what it carried, read-only, above its bubble
1105
+ (`MessageAttachedReferences`). A host that mounts `TiptapComposer` itself
1106
+ can mount both, and spreads `useAttachedReferencesComposerProps(threadId)`
1107
+ on the composer so its sends carry the references. A composer without them
1108
+ never sends attachments.
1109
+ - **The send.** The references ride the message's own metadata
1110
+ (`message.metadata.attachedReferences`), so a message that waits in the chat
1111
+ outbox, is retried, or is posted again after a reload keeps its own. A
1112
+ message needs words: chips with an empty draft send nothing. A message with
1113
+ attachments sent while a run is live waits in the queue for its own turn
1114
+ instead of joining the running one. Sending takes the chips off the composer.
1115
+ They come back if the send does: a send Athena refuses and hands back to the
1116
+ composer, or a held message's Cancel or Edit.
1117
+ - **What the agent sees.** For the turn the message starts, the agent is told
1118
+ each attachment's kind, its id, its label, the title and type Athena read
1119
+ with the person's permission, and the exact call that reads it. The label
1120
+ (`meta.title`) is only what the chip shows. The agent is told it is the
1121
+ app's text, unverified, and never the object's content. The agent reads the
1122
+ object itself through the same gated tools as anything else. A later turn
1123
+ does not repeat the list.
1124
+ - **Refusals.** An object the person can't open, one that doesn't exist, an
1125
+ item in a connected source (SharePoint, Drive, …), a malformed id or URL,
1126
+ and a kind Athena doesn't take yet all reach the agent as refusals with a
1127
+ reason, never as content. A missing object and one the person can't open
1128
+ get the same refusal. In a conversation with several people, an asset not
1129
+ all of them can open is left out, and so is every ontology object.
1130
+ - **Results.** `attach` returns `{ attached: true, reference, duplicate }` or
1131
+ `{ attached: false, reason }`, where `reason` is `invalid_reference` (not an
1132
+ attachable reference), `too_many` (a message carries at most
1133
+ `MAX_ATTACHED_REFERENCES`, 10) or `no_thread`. Attaching the same pointer
1134
+ again (same kind and id, and the same anchor for an asset) keeps one chip
1135
+ and updates its label. `detach(reference)`, `clear()` and `references` (the
1136
+ pending list) complete the hook. The list is per conversation, kept in
1137
+ memory for the page, and forgotten when someone else signs in.
1138
+ - **`prompt` and `open`.** `prompt` puts text in the composer, after the
1139
+ draft, for the person to finish. Nothing is sent. `open` focuses the
1140
+ composer with the caret at the end. A host whose chat can be hidden shows it
1141
+ itself.
1142
+ - **Not yet:** a table row (a lakehouse or Kronos row, by key) waits for a
1143
+ permission-checked row reader on the server (#54759).
1144
+
821
1145
  ## Chat voice in AthenaChat
822
1146
 
823
1147
  `AthenaChat` includes realtime voice alongside dictation where the deployment
@@ -954,7 +1278,35 @@ Sessions in Athena and transcript/grading calls are authorized as them. This
954
1278
  works for workspace members and for external SSO viewers alike: the viewer
955
1279
  credential minted by `/_athena/auth` is authorized for session creation and
956
1280
  grading the same way it is for `/api/v0/sessions`, scoped to the viewer's own
957
- workspace. Anywhere else — standalone hosting, custom auth — pass
1281
+ workspace. Which credential each kind of viewer's app gets, and what each
1282
+ reaches: `marathon/MARATHON_SYSTEM.md` ("The credential each viewer's app is
1283
+ signed in with").
1284
+
1285
+ Inside Olympus (the computer's Preview tab and the sidebar app page) the
1286
+ parent window answers the bridge with what agora mints for the frame; on the
1287
+ app's own URL `/_athena/auth` (and the SSO provider's `/api/sso/userinfo`)
1288
+ mints the same thing. The computer's creator gets a sign-in of their own; a
1289
+ workspace member who did not create the computer gets an asset-bound
1290
+ `member_viewer` credential (`athview_`, 30 minutes, bound to the computer, its
1291
+ workspace and the app port; the bridge renews it 5 minutes before expiry),
1292
+ never their full sign-in, because the app runs the computer owner's code. That
1293
+ credential reaches only what this SDK's identity read and voice client call:
1294
+ `GET /api/v0/me` (listing that workspace alone), voice session creation, the
1295
+ transcript download of a voice session this app started, and
1296
+ `agents/general/invoke` without tools, a knowledge base or an earlier thread
1297
+ (transcript grading). The voice agent gets a credential of its own for each
1298
+ call (it saves the call's turns and runs `ask_agent` without tools), so a
1299
+ member's call cannot enable `read_full_asset`, `search_assets` or
1300
+ `ask_agent` tools (`403`). Asset reads (`/api/v0/assets`, `/api/v0/tools/*`),
1301
+ any other session download, sharing and the chat routes (the thread list and
1302
+ the statewire chat transport) answer `403` for it, in the frame and on the
1303
+ app's own URL alike, so a chat app, or an app that needs those reads, stays
1304
+ signed out for a member who did not create the computer. See
1305
+ `docs/COMPUTER_ASSET_STANDARDS.md` ("App frame sign-in"). Nothing to change
1306
+ in your app: the credential arrives through the same `athena-auth` message and
1307
+ the same `/_athena/auth` body.
1308
+
1309
+ Anywhere else — standalone hosting, custom auth — pass
958
1310
  `createSession` and create the session from your own server (API key stays server-side):
959
1311
 
960
1312
  ```tsx
@@ -970,7 +1322,7 @@ it never falls back to a shared key.
970
1322
 
971
1323
  **After the call.** `voice.sessionId` is a regular Athena session asset:
972
1324
 
973
- - Transcript: `GET /api/v0/sessions/{asset_id}/download?format=messages`
1325
+ - Transcript: `GET /api/v0/sessions/{asset_id}/download?export_format=messages`
974
1326
  - Grading against a rubric: `POST /api/v0/agents/general/invoke` with
975
1327
  `config.structured_output` (a JSON Schema) → typed `structured_output` in
976
1328
  the response.
@@ -980,6 +1332,73 @@ Both use the same bearer / API key as session creation. The full recipe
980
1332
  template skill `voice-session-guide.md`. `createAthenaVoiceSession` is also
981
1333
  exported if you hold the bridge state yourself.
982
1334
 
1335
+ ## What's new in 0.59.0
1336
+
1337
+ **Every message is one `run/send`, and the chat needs an Athena that serves it.** The SDK moves to `statewire` 0.27.1 and `@assistant-ui/react-statewire` 0.35.1 (from 0.25.0 and 0.34.0) and speaks Athena's 2026-11-04 command contract. A new message goes as `run/send` with a behavior: `auto` from the composer (while a run is live, Athena decides whether the message joins the running turn, waits for a turn of its own, or stops the run for it), and `queue`, `steer` or `preempt` (Send now) from the queue tray. 0.58.0 sent `run/enqueue`, `run/steer`, `run/steer-live` and `run/prioritize`. The transport offers the 2026-11-04 contract only, on wire 2026-11-01. Athena's hosts serve it from the release that added `run/send` (agora on Python statewire 0.23.1, Athena's managed cloud since November 8, 2026); an older Athena cannot serve a 0.59.0 chat, so a customer deployment moves its own Athena first, then its apps. Messages an earlier SDK kept on the device are read back as the `run/send` each one meant, and session records stay inside `localStorage`'s quota.
1338
+
1339
+ **Read and write Athena data as the signed-in person.** `useAthenaFetch`, `useAthenaGraphQL`, `useAthenaGraphQLMutation`, `useAthenaRest` and `useSemanticQuery` call agora's own routes with the provider's credential, and `useInvalidateAthenaQueries` reads them again (see [Reading and writing Athena data](#reading-and-writing-athena-data-useathenafetch-useathenagraphql-useathenarest-usesemanticquery)). `useAthenaMember` resolves a bundle member's name to the workspace's own asset; an Athena that predates the members route answers 404 (`member_not_found`).
1340
+
1341
+ **Attach an object to the next message.** `useAttachToChat()` puts an Athena asset (or a place in it), an ontology object or a web page on the composer as a chip. The message carries it as structured data (`metadata.attachedReferences`), and Athena checks each one with the sender's own permission before the agent is told about it (see [Attach objects to the next message](#attach-objects-to-the-next-message)). An Athena that predates it keeps the references on the message and tells the agent nothing.
1342
+
1343
+ **Pickers and the composer.** `useAthenaThreadAgent()` reads a session's own agent. Each `useAthenaModelCatalog()` option carries its place in its model family (`variantMode`, `variantEffort`, `variantServiceTier`), and `useAthenaAgentDirectory()` lists agents with who made them. `composer.attachButton`, `composer.mentionButton` and `useAthenaComposerActions()` fold attaching and the `@` menu into a menu of the host's own.
1344
+
1345
+ Also in this release:
1346
+ - `SessionsPage` takes `defaultHiddenColumns`; `DEFAULT_HIDDEN_SESSIONS_COLUMNS` (Mode, Creator, Created) is the default.
1347
+ - A step's long detail is cut short, so its label stays readable.
1348
+ - Someone other than a conversation's owner receives its tool calls as stubs; `AthenaChat` draws each one as a muted "Used a tool" chip instead of dropping it.
1349
+ - A 1:1 chat with a collab agent shows no answer label: only an agent other than the header's is labelled.
1350
+ - `connectGenericDoc` takes `diffedInitialSync` with `httpFirstOpen`, and an HTTP-first read whose bytes keep coming runs on; one that receives nothing for a minute is given up.
1351
+ - Everything 0.58.0 carries (below).
1352
+
1353
+ ## What's new in 0.58.0
1354
+
1355
+ 0.58.0 was tagged but never published to npm: everything below ships in 0.59.0.
1356
+
1357
+ **The chat runs on statewire 0.25 and needs an Athena that serves wire 2026-11-01.** The SDK moves to `statewire` 0.25.0 and `@assistant-ui/react-statewire` 0.34.0 (from 0.21.0 and 0.31.0). Its transport offers wire 2026-11-01 only: the client always sends the attach's results cursor and stamps a command's sequence number once, as it leaves, which a 2026-09-30 attach refuses. Athena's hosts serve 2026-09-30 through 2026-11-01 from Python statewire 0.21.2 on (Athena's managed cloud since November 6, 2026); an older host cannot serve a 0.58.0 chat. A customer deployment moves its own Athena first, then its apps. The Athena application schema stays 2026-09-13, so messages an earlier SDK queued on the device are sent on the new wire unchanged. Stored sessions move to statewire 0.25's format the first time a conversation opens.
1358
+
1359
+ **Messages typed while Athena can't be reached wait in their conversation's own session.** With `chatOutbox` on `AthenaProvider`, each conversation's statewire session now holds its waiting messages (statewire's outbox), instead of a store of the SDK's own. The session is sealed in IndexedDB with the key your `getKey('write')` returns, or kept in page memory when it returns `null` (the tray then says the device can't keep them). A conversation waits to connect until the provider has asked for that key. A conversation whose session from an earlier SDK still holds unsent messages in `localStorage` stays there until they are sent. Messages 0.53 kept on the device move into their conversation the next time it opens, and until then `countChatOutboxMessages`, `listChatOutboxMessages` and `clearChatOutbox` include them. A message shows "Not synced yet" only once it is stuck or the device is offline, not while an ordinary send is on its way (each listed message carries `queuedAt`).
1360
+
1361
+ **A failed message shows once.** With a chat outbox, a send that failed is one "Couldn't send" row at the top of the queue tray (Retry, Edit, Discard), and `StatewireQueuedMessages` no longer lists it again in its failed lane. A message waiting for the countdown is never shown as failed. Hosts without `chatOutbox` keep the failed lane as before.
1362
+
1363
+ **What changed in the API.** `AthenaChatOutbox.getKey` is typed `ChatSessionKeyProvider` (same shape: `(purpose: 'read' | 'write') => Promise<CryptoKey | null>`). `ChatSessionKeyPurpose` is exported, and `ChatOutboxKeyPurpose` stays as a deprecated alias of it. In `listChatOutboxMessages`, `sending` now means the message has left the outbox for its conversation (there is no claim lease anymore), and a failed message is Retry, Edit or Discard. `subscribeChatOutbox` calls its listener only when what waits changed. Nothing to change in your app unless you named the removed `@athenaintel/agent-runtime` chat outbox store exports yourself.
1364
+
1365
+ **Waiting messages belong to one account.** Statewire 0.25 keeps every stored session under the account it belongs to (`user:<id>`), so on a shared browser one account's waiting messages are never sent or shown as another's. Sessions stored by an earlier SDK move under the signed-in account the first time it opens them; another account's stay where they are until that account signs in.
1366
+
1367
+ **The agent's typed questions and approvals get their own cards.** A run parked on the `ask` tool's questionnaire, a file request, a form, a toolkit choice, a saved login, a project schedule, a wait or a tool-raised approval used to show only a Decline in the SDK chat, so the run stalled. `AthenaChat` now renders each kind's card as Athena on the web does and answers with the shape its tool validates (see **The agent's typed questions and approvals** under Transport). A host that mounts `StatewireApprovalCard` itself passes `typedInterrupts={statewireTypedInterrupts}` from `@athenaintel/react/typed-interrupts`.
1368
+
1369
+ **Slash commands and plan mode in the composer.** `composer.slashCommands` gives the composer a `/` menu of the host's commands, and `planMode` on `AthenaProvider` turns the agent's to-do plan off or on for the next turn, with `ChatPlanModeToggle` as the composer chip and `useAthenaThreadPlanMode()` to read a session's own setting (see **Plan mode** and **Composer slash commands**).
1370
+
1371
+ **The `@` menu offers people and agents.** `mentionCategories` adds `team` (the workspace's members and groups, as Olympus offers them) and `agents`: choosing an agent names it on the composer's To line, and each send names those agents to Athena on the message's own metadata (`addressedAgents`), which agora checks against each agent's VIEW gate (see **What the `@` menu offers: people and agents**).
1372
+
1373
+ **Subagents run side by side.** A delegation's subagents render as lanes under one strip, each card with its status, plan progress and last call, and "View transcript" opens a lane in a drawer, as Spaces shows them. The pieces are on `@athenaintel/react/subagents` (see **Subagent lanes**).
1374
+
1375
+ **Cards for Athena's toolkits.** `AthenaChat` draws the most-used toolkits' tools (the deep agent's sandbox and tasks, Drive, ontology, project manager, the studios, documents, decks, the browser, computers, email and calendar) with Athena on the web's cards, from `TOOL_UI_REGISTRY` (see **Cards for Athena's toolkits**). A coding chat's background commands read as what they did, not their tool ids.
1376
+
1377
+ **Following what the agent makes.** `useAthenaAgentCreations({ onCreation })` reports each asset the agent creates or opens for the person in a conversation, once, as the call finishes, and the tool auto-open's `autoOpen` now says why (`kind`: `'created'`, `'shown'` or `'touched'`).
1378
+
1379
+ **Finding assets, and uploading into a folder.** `useAthenaAssetSearch`, `useAthenaRecentAssets`, `useAthenaFavoriteAssets`, `useAthenaProjects`, `useAthenaFolderAssets` and `useAthenaProjectAssets` read what the signed-in person may open through agora's own gated queries, and `useAthenaAssetsRefresh()` reads them again. `useFileUpload().upload(files, { parentFolderId })` uploads into a folder the person may edit (see **Finding assets: a title search, recent work and favourites**).
1380
+
1381
+ **Suggested follow-up prompts and a turn's changes card, both off by default.** `<AthenaChat followUpSuggestions />` offers up to three chips after a finished turn (`POST /api/chat/follow-up-suggestions`; an Athena that predates the route answers 404 and nothing shows), and `turnChanges` ends a turn that changed files with Codex's "Edited 5 files" card, read and acted on by the host (see **Suggested follow-up prompts** and **What a turn changed**). With neither turned on, nothing is requested.
1382
+
1383
+ Also in this release:
1384
+ - `composer.onBeforeSend` (`AthenaChatBeforeSend`) runs host work before a draft goes, however it is sent; a rejection sends nothing and keeps the draft.
1385
+ - A composer toolbar too narrow for its chips wraps them onto another row, so the mic, voice and Send stay in reach.
1386
+ - A host that takes `onCitationAction` also gets each member a person opens in an embedded folder, project or collection, to open as an asset of its own.
1387
+ - The session-list rules are on `@athenaintel/react/session-list-model`, which loads nothing else of the SDK.
1388
+ - The collaboration client sends Keryx only its own awareness entry, never a collaborator's.
1389
+ - Everything 0.57.2 shipped from the 0.57.1 tree (the session list's pending rows, and how a run ended in `AthenaChat`).
1390
+
1391
+ ## What's new in 0.57.2
1392
+
1393
+ **A message you send shows in the session list the moment you send it.** The list used to wait for the server: a new chat appeared only after the server listed it and the list read its page again (about 5 seconds on staging), and a session you wrote to again stayed where it was. Now, in `SessionList`, `ThreadList` and any list a host draws from `useAthenaStatewireThreadList().threads`:
1394
+ - **A new chat's row is at the top the moment its first message is sent**, titled with the message, until the server's own row (with its title) replaces it. The row carries `isPending: true` while the server does not know the chat yet; `SessionList` offers no pin, rename or archive on it.
1395
+ - **A session you write to again moves to the top**, as working, at once.
1396
+ - **A session started anywhere else** (another tab, Slack, email) shows as soon as the signed-in user's conversation index pushes it, without waiting for the list to be read again, and a session that becomes active moves up. The list stays newest first by `updatedAt`, the server's own order.
1397
+
1398
+ Nothing to change in your app. It sends nothing new: the list reads the same endpoints, and a list without the live index (an API key with no signed-in user) reads its page again a few seconds after a message is sent to an existing session.
1399
+
1400
+ **A follow-up you send before the agent answers no longer reads as a stopped run.** A second message sent before the agent says anything joins the first in one turn: the run ends silently and the agent answers both. `AthenaChat` drew that ending as "⏹️ Run stopped by user." although nobody stopped anything, and Send now did the same. `AthenaChat`'s assistant row now draws how a run ended as the other surfaces do: nothing for Send now and a double text, and the status card (`RuntimeMessageCard`: "Conversation stopped", "Paused by a server update", "Run failed" with the error) for a stop, a server-update pause or a failure, in place of the marker's transcript line.
1401
+
983
1402
  ## What's new in 0.57.1
984
1403
 
985
1404
  **Copy on a message from Slack, email, a text or Teams copies the words that were sent.** It used to copy the message's whole text, with the routing block the channel wrote for the agent ahead of the words. The user bubble's Copy, in `AthenaChat` and in chat-ui's `UserMessage`, now copies what the bubble shows: an email's subject, then the words; any other message copies as before. Hosts with their own user bubble get the same Copy from `useUserMessageCopy()` (`copy`, `disabled`, `isCopied`).
@@ -2118,6 +2537,47 @@ file with the lines highlighted: no embed renders a catalog. Agora's own citatio
2118
2537
  (`<a class="mention" data-type="pdf" data-id="asset_…" data-page-number=…>`) render as the same
2119
2538
  chips.
2120
2539
 
2540
+ ### What the `@` menu offers: people and agents
2541
+
2542
+ `AthenaChat`'s `@` menu offers the asset library by default (Favorites, Assets, Projects and
2543
+ Folders), plus Tools and Toolkits when `mentionTools` (or the provider's toolkits) offers any.
2544
+ `mentionCategories` picks the rest, and the menu lists them in Athena's order:
2545
+
2546
+ ```tsx
2547
+ <AthenaChat mentionCategories={['favorites', 'assets', 'projects', 'folders', 'team', 'agents']} />
2548
+ ```
2549
+
2550
+ - **`team`** — people, as Olympus's chat composer offers them: the workspace's members, then its
2551
+ groups. An Athena admin's people come ranked, the people they talked to most recently first,
2552
+ with the people they saved who are not members. They are read with the chat's own credentials
2553
+ through the queries Olympus uses (`getUsersInWorkspace`, `getWorkspaceGroups`, and for an admin
2554
+ `personMentionCandidates`); agora answers each for the signed-in person's own workspace only. A
2555
+ person is the link Olympus writes, `[@Ada Lovelace](mention://person?id=ada@acme.com&email=ada@acme.com&name=Ada+Lovelace)`,
2556
+ and a group `[@Finance](mention://group?id=group_…&name=Finance)`, a pointer to the group that
2557
+ shares nothing and notifies nobody. Typing a name after `@` finds people beside assets.
2558
+ - **`agents`** — the agents a message can name (one conversation, many participants): the person's
2559
+ own assistant ("Athena"), then the agents the chat's agent picker lists. Choosing one never writes
2560
+ text: it names the agent on the composer's To line (`ComposerNamedAgents`, each chip with a
2561
+ remove button), and the chips stay for every message until the person changes them. Each send
2562
+ names them, in order, to Athena exactly as Olympus does: on the message's own metadata
2563
+ (`addressedAgents`: `collab_agent:<asset id>`, or `assistant`), which agora reads ahead of the
2564
+ run config. Each named agent answers the message in its own turn. A message names at
2565
+ most eight. Agora checks every agent a message names (the agent's VIEW gate; a colleague's own
2566
+ assistant is refused), so the menu only offers. While Olympus offers the section to Athena admins
2567
+ only, so does `AthenaChat` (`CHAT_AGENT_NAMING_ADMIN_ONLY` in
2568
+ `@athenaintel/agent-runtime/named-agents`, the module both run on). A message without chips names
2569
+ what it always did: the provider's `agent`, or none, and Athena then runs the person's last agent
2570
+ in that conversation, else their own assistant.
2571
+ - **`browse_profiles`** and **`drives`** — the asset types of those names.
2572
+
2573
+ A message held in the chat outbox keeps the agents it names and goes out naming them; a failed send
2574
+ retried from the queue tray or by send recovery names the agents it was sent with; a refused send
2575
+ handed back to the composer brings its chips back.
2576
+
2577
+ Hosts composing their own chat from `@athenaintel/react/chat-ui` pass `rootCategories` to
2578
+ `TiptapComposer` and, for Agents, a `chatAgents` binding (`MentionChatAgents`: what is offered,
2579
+ naming what is chosen, a subscription).
2580
+
2121
2581
  ## Citation Links
2122
2582
 
2123
2583
  When you render chat inside `<AthenaLayout>`, Athena citation links (`app.athenaintel.com/dashboard/spaces?...`) now open the referenced asset in the SDK asset pane by default instead of navigating away.
@@ -2167,7 +2627,15 @@ asset panel:
2167
2627
  asset panel mounted (`isAssetPanelAvailable` is true); a modified click (⌘, Ctrl, Shift, Alt)
2168
2628
  stays the browser's;
2169
2629
  - the auto-open after a tool created or touched an asset, marked `origin: 'auto'` (a person's open
2170
- is `origin: 'user'`).
2630
+ is `origin: 'user'`). It says why it came in `autoOpen`: the tool, and what that tool did with
2631
+ the asset (`kind`): `'created'` (a create tool, or a studio script's `Create*` sub-call),
2632
+ `'shown'` (`open_asset_in_workspace`, the agent opening it for the person) or `'touched'` (a call
2633
+ that read or changed an asset that was already there). A host that follows only what the agent
2634
+ makes, as Athena's desktop app does, opens the first two. A call whose answer says it did not
2635
+ happen (it failed, agora refused it, or agora told the agent it left the person's view alone)
2636
+ raises none. These auto-opens ride each tool's `streamCall`, which the deep agent's runtime
2637
+ (statewire) never runs; to follow what the agent makes there, use `useAthenaAgentCreations`
2638
+ (below).
2171
2639
 
2172
2640
  ```tsx
2173
2641
  <AthenaProvider
@@ -2186,6 +2654,33 @@ opens it on the web keeps every parameter it carried. Return `false` to leave th
2186
2654
  asset panel, or, with no panel mounted, to the link's own navigation; anything else (returning
2187
2655
  nothing included) means the host opened it. Hosts that do not pass `onOpenAsset` behave as before.
2188
2656
 
2657
+ To follow what the agent makes in a conversation, render `useAthenaAgentCreations` inside
2658
+ `AthenaChat` (a `composer` slot or a `components` override, where the conversation's state is
2659
+ read). It calls `onCreation` once for each asset the agent makes (a create tool, a studio
2660
+ script's `Create*` sub-call, a subagent's too) or opens for the person (`open_asset_in_workspace`),
2661
+ as the call finishes, with `{ key, assetId, type, autoOpen }`. It never reports the thread's
2662
+ history (what its first state holds, and older pages loaded in later), a call that failed or was
2663
+ refused, or a call that only read or changed an asset. Nothing is read while `enabled` is false.
2664
+
2665
+ ```tsx
2666
+ function FollowTheAgent() {
2667
+ useAthenaAgentCreations({
2668
+ onCreation: ({ assetId, type, autoOpen }) => openBehind({ assetId, type, madeBy: autoOpen.tool }),
2669
+ });
2670
+ return null;
2671
+ }
2672
+
2673
+ <AthenaChat composer={{ aboveEditor: <FollowTheAgent /> }} />;
2674
+ ```
2675
+
2676
+ To show the places the agent points the person at (`highlight_in_asset`: "flash and scroll the
2677
+ user to a location inside an asset", with a tooltip), render `useAthenaAgentHighlights` the same
2678
+ way. It calls `onHighlight` once for each highlight as its call answers, with `{ key, assetId,
2679
+ assetRef, content, durationMs }`: `assetRef` is the asset id and its anchor query
2680
+ (`asset_x?anchor=pm_node&node_id=…`), `content` the tooltip or `null`, `durationMs` at most 30
2681
+ seconds. A highlight agora refused (an asset the person may not view) carries no place and is never
2682
+ reported, nor is the thread's history.
2683
+
2189
2684
  `appendCitationReferenceParams({ params, reference })` writes a reference's place (its anchor and
2190
2685
  excerpt) into any URL's search params, the way `AthenaAssetEmbed` writes it into the embed URL; a
2191
2686
  host that opens a cited place in Athena on the web writes it into the Spaces link the same way.
@@ -2262,7 +2757,7 @@ message), which tells a page that is still loading from one that never arrived (
2262
2757
 
2263
2758
  When `onCitationClick` is provided, citation navigation is delegated to the host by default. Set `citationBehavior="browser"` to observe the event while preserving Athena's default new-tab navigation. Host mode requires `onCitationClick`; without a handler, the SDK safely falls back to browser navigation.
2264
2759
 
2265
- `onCitationAction` handles actions initiated from a citation popover. It currently receives `action: 'open-in-spaces'` when the user clicks the (+) button. Providing the handler delegates that action to the host by default. Set `citationActionBehavior="browser"` to observe the event while preserving Athena's default navigation; requesting host mode without a handler safely falls back to browser behavior.
2760
+ `onCitationAction` handles actions initiated from a citation popover. It currently receives `action: 'open-in-spaces'` when the user clicks the (+) button. Providing the handler delegates that action to the host by default. Set `citationActionBehavior="browser"` to observe the event while preserving Athena's default navigation; requesting host mode without a handler safely falls back to browser behavior. A host that takes the action also gets, as `open-in-spaces` with the member's reference and no place, each member that is not a container which the person opens in an embedded folder, project or collection, and opens it as an asset of its own; any other host sees the member open in place inside the embed.
2266
2761
 
2267
2762
  Pass the callback's complete `reference` to the linked `AthenaAssetEmbed`, rather than storing only
2268
2763
  `reference.id`. The embed uses the reference anchor to navigate PDFs to the cited page and highlight
@@ -2311,6 +2806,225 @@ text anchors, and positioned citations are also preserved by `parseAthenaCitatio
2311
2806
  `page_rect` may include `unit=percent` (the default) or `unit=point`; retain the unit so the region
2312
2807
  maps to the correct PDF coordinates.
2313
2808
 
2809
+ ## Reading and writing Athena data: `useAthenaFetch`, `useAthenaGraphQL`, `useAthenaRest`, `useSemanticQuery`
2810
+
2811
+ Generic hooks for calling agora's GraphQL and REST routes as the signed-in
2812
+ person, so an app does not write its own authenticated client. They add no
2813
+ server route of their own: agora checks every call against the person's
2814
+ access, as it does for Athena on the web. Use them inside `<AthenaProvider>`;
2815
+ no `QueryClientProvider` is needed.
2816
+
2817
+ ```tsx
2818
+ import {
2819
+ useAthenaGraphQL,
2820
+ useAthenaGraphQLMutation,
2821
+ useAthenaRest,
2822
+ useInvalidateAthenaQueries,
2823
+ useSemanticQuery,
2824
+ } from '@athenaintel/react';
2825
+
2826
+ const ASSET = `query Asset($id: String!) { asset(id: $id) { id title } }`;
2827
+ const RENAME = `mutation Rename($id: String!, $title: String!) { renameAsset(id: $id, title: $title) { id } }`;
2828
+
2829
+ function AssetTitle({ id }: { id: string }) {
2830
+ const asset = useAthenaGraphQL<{ asset: { id: string; title: string } }, { id: string }>(ASSET, { id });
2831
+ const invalidate = useInvalidateAthenaQueries();
2832
+ const rename = useAthenaGraphQLMutation<unknown, { id: string; title: string }>(RENAME, {
2833
+ onSuccess: () => invalidate({ operationNames: ['Asset'] }),
2834
+ });
2835
+ if (asset.error) return <p>{asset.error.code === 'UNAUTHORIZED' ? 'No access' : asset.error.message}</p>;
2836
+ return <h1 onDoubleClick={() => rename.mutate({ id, title: 'Renamed' })}>{asset.data?.asset.title}</h1>;
2837
+ }
2838
+
2839
+ function RevenueByRegion({ modelId }: { modelId: string }) {
2840
+ const me = useAthenaRest<{ user_id: string; workspace_id: string }>('/api/v0/me');
2841
+ const revenue = useSemanticQuery({
2842
+ semanticModelId: modelId,
2843
+ query: { measures: ['orders.total_revenue'], dimensions: ['orders.region'], limit: 20 },
2844
+ });
2845
+ if (revenue.error) return <p>{revenue.error.message}</p>;
2846
+ return <Table rows={revenue.data?.data ?? []} caption={`As ${me.data?.user_id ?? '…'}`} />;
2847
+ }
2848
+ ```
2849
+
2850
+ **The hooks:**
2851
+
2852
+ - `useAthenaFetch()` returns an authenticated fetch bound to the provider.
2853
+ `athenaFetch<T>(path, options?)` returns the route's body (JSON, or text).
2854
+ `athenaFetch.graphql<TData, TVariables>(document, variables?, options?)` runs
2855
+ one GraphQL operation and returns its `data`. `athenaFetch.raw(path, options?)`
2856
+ returns the response itself, for a body you read yourself (a file). The
2857
+ options are `method`, `params` (the query string), `json` or `body`,
2858
+ `headers`, `signal`, `timeoutMs` and `rateLimitRetry`. `createAthenaFetch(config)`
2859
+ is the same thing without React.
2860
+ - `useAthenaGraphQL<TData, TVariables, TSelected>(document, variables?, options?)`
2861
+ reads with one GraphQL query: the one `operationName` names, or the
2862
+ document's only operation. It refuses a mutation or subscription, which would
2863
+ run again on every refetch.
2864
+ - `useAthenaGraphQLMutation<TData, TVariables>(document, options?)` writes, with
2865
+ `mutate(variables)` / `mutateAsync(variables)`.
2866
+ - `useAthenaRest<TData, TSelected>(path, options?)` reads a JSON `GET` route.
2867
+ Pass `null` as the path to keep it idle; `params` is part of the cache key.
2868
+ - `useSemanticQuery({ semanticModelId, query, ...options })` runs a metric
2869
+ query on a semantic model through agora's public route,
2870
+ `POST /api/v0/semantic-model/{id}/query`. Agora checks the person's access to
2871
+ the model, and to its lakehouse sources, before the query runs.
2872
+ `AthenaSemanticQuery` and `AthenaSemanticQueryResult` are that route's own
2873
+ request and response types (`measures`, `dimensions`, `filters`,
2874
+ `time_dimensions`, `order`, `limit` → `data`, `row_count`, `truncated`,
2875
+ `data_as_of`…). Pass `null` as the model to keep it idle.
2876
+ - `useAthenaMember(name, { track? })` resolves a bundle member's name,
2877
+ `support-desk/support_agent`, to this workspace's own asset (`asset_id`,
2878
+ `type`, `link`, and with `track` the `revision` that track serves), through
2879
+ agora's `GET /api/v0/bundles/{bundle_key}/members/{member_key}`. Name members
2880
+ this way in code a bundle ships: each workspace or deployment holding a copy
2881
+ answers with its own id, where a raw `asset_…` id names one place's asset only.
2882
+ A name that doesn't resolve for the person (no such member, or one they can't
2883
+ open: agora answers both alike) fails with `status` 404 and `code`
2884
+ `member_not_found`. `resolveAthenaMember({ backendUrl, apiKey | token, name,
2885
+ track? })` is the same read without React, throwing
2886
+ `AthenaMemberNotFoundError`; `parseAthenaMemberName` and
2887
+ `isAthenaMemberName` read the grammar.
2888
+ - `useInvalidateAthenaQueries()` returns a function that reads the current
2889
+ person's data again. Narrow it by `operationNames`, REST `paths` (prefixes)
2890
+ or `semanticModelIds`; with no filter, it reads everything again.
2891
+
2892
+ A document is a string or a typed document string (graphql-codegen's client
2893
+ preset with `documentMode: 'string'`). With a typed document, `TData` and
2894
+ `TVariables` are inferred. The query hooks also take TanStack Query's options
2895
+ (`enabled`, `select`, `staleTime`, `refetchInterval`…), and the mutation hook
2896
+ takes its callbacks (`onSuccess`, `onError`, `onMutate`…).
2897
+
2898
+ **Requests.** Every request goes to the provider's `backendUrl`, and only
2899
+ there: a path must start with `/`, so the person's credential never leaves for
2900
+ another host. It presents the token `getToken` resolves, renewed once after a
2901
+ 401, or else the API key. It presents no other credential: an
2902
+ `Authorization`, `X-API-KEY`, `Cookie`, `Proxy-Authorization` or
2903
+ `X-Athena-View-As` header passed in `headers` is refused, in any letter case.
2904
+
2905
+ - **429.** The SDK waits as agora's `Retry-After` (or `retryAfterSeconds`)
2906
+ asks, up to 30 s, and sends again at most twice. A longer wait fails at once,
2907
+ with `retryAfterMs` set. A write is sent again only when agora's per-user
2908
+ limiter refused it (`RATE_LIMITED`), because that limiter refuses before
2909
+ anything runs.
2910
+ - **Timeout.** Each attempt is abandoned after `timeoutMs`: 30 s by default,
2911
+ 90 s for a semantic query, since agora waits up to 60 s for the engine.
2912
+
2913
+ **Errors.** Every failure is an `AthenaApiError` with these fields:
2914
+
2915
+ - `kind`: `http`, `graphql`, `network`, `timeout`, `credential`, `response` or
2916
+ `request`.
2917
+ - `status`: the HTTP status, or `0` when no answer came.
2918
+ - `code`: agora's code (`UNAUTHORIZED`, `BAD_USER_INPUT`, `RATE_LIMITED`…), from
2919
+ the first GraphQL error's `extensions.code` or a REST error's `detail.code`.
2920
+ - `message`: agora's message.
2921
+ - `errors`, `detail`, `retryAfterMs`, `method` and `path`.
2922
+
2923
+ A request you cancel rejects with the abort's reason, as `fetch` does.
2924
+ `isAthenaApiError` recognises the error across copies of the SDK.
2925
+
2926
+ **Caching and retries.**
2927
+
2928
+ - The query hooks run on the SDK's own `QueryClient`, one per provider, so
2929
+ they never write into your app's cache.
2930
+ - Every key starts with the backend, the signed-in person, a fingerprint of the
2931
+ credential (the API key's, and who the held token acts as and in which
2932
+ workspace; never the secret) and the provider's credential scope epoch. The
2933
+ epoch moves when a `getToken` token acts as another person or is scoped to
2934
+ another workspace or org. A switch of person, key or workspace therefore
2935
+ reads under new keys and never shows the previous identity's answers. A
2936
+ renewal of the same person's token keeps the cache.
2937
+ - If your own `getToken` switches who is signed in, or their workspace, without
2938
+ remounting the provider, the switch is seen when the next request resolves a
2939
+ token. Remount the provider (`key={userId}`) to drop the previous person's
2940
+ answers at once.
2941
+ - A write that switches the person's workspace on agora while the token stays
2942
+ the same can't be seen in the keys. Call `useInvalidateAthenaQueries()()`
2943
+ after it.
2944
+ - An answer stays fresh for 30 s (`staleTime`).
2945
+ - A 4xx, a GraphQL error, a timeout or an unreadable answer is never retried.
2946
+ A failure with no answer, or a 5xx, is asked twice more, after
2947
+ `Retry-After` when agora sends one.
2948
+ - A read is cancelled when the last component reading it unmounts.
2949
+ - A write is not cancelled on unmount, since agora may have applied it.
2950
+ `timeoutMs` still bounds it.
2951
+
2952
+ ## Finding assets: a title search, recent work and favourites
2953
+
2954
+ Three TanStack Query hooks find the assets the signed-in person may open, the way Athena on the
2955
+ web's ⌘K box and sidebar do. Each reads agora's `simpleSearch` (the query the composer's
2956
+ @-mentions send) with the provider's `backendUrl` and credentials, so a host adds no other path
2957
+ for its key or token, and agora answers only with assets the person may open, never a hidden or
2958
+ an archived one. They run on the host's `QueryClient` (the session list's under
2959
+ `enableThreadList`), keyed by the request and a fingerprint of the credential, so they wait while
2960
+ the host's `onlineManager` says Athena can't be reached, as the SDK's other reads do.
2961
+
2962
+ - `useAthenaAssetSearch({ words, limit?, notTypes?, enabled? })`: the assets whose title holds
2963
+ the words, the best match first (agora's `RELEVANCE` order; an agora that predates it answers
2964
+ by the newest change). Blank words hold it idle.
2965
+ - `useAthenaRecentAssets({ limit?, enabled? })`: the person's recent work, as the web sidebar's
2966
+ "Your Recents" lists it: what they created, the newest change first, without folders, emails,
2967
+ conversations, catalogs or a meeting's own files. It waits for `/api/v0/me` (the read the chat
2968
+ shares) to name the person.
2969
+ - `useAthenaFavoriteAssets({ limit?, notTypes?, enabled? })`: the person's favourites from every
2970
+ folder, the newest change first.
2971
+
2972
+ Each answers `AthenaAssetSummary[]` (`id`, `title`, `athenaOriginalType`, `athenaConvertedType`,
2973
+ `parentFolderId`, `updatedAt`, `isFavorited`…). `searchAthenaAssets` is the same read without
2974
+ React.
2975
+
2976
+ ```tsx
2977
+ import { useAthenaAssetSearch } from '@athenaintel/react';
2978
+
2979
+ function OpenBox({ words }: { words: string }) {
2980
+ const found = useAthenaAssetSearch({ words, limit: 8, notTypes: ['session', 'catalog'] });
2981
+ return (
2982
+ <ul>
2983
+ {(found.data ?? []).map((asset) => (
2984
+ <li key={asset.id}>{asset.title ?? 'Untitled'}</li>
2985
+ ))}
2986
+ </ul>
2987
+ );
2988
+ }
2989
+ ```
2990
+
2991
+ For a tree of the person's files, `useAthenaProjects({ limit?, enabled? })` lists the projects they
2992
+ can open, the newest change first, and two reads page with TanStack's `useInfiniteQuery`
2993
+ (`fetchNextPage`, `hasNextPage`), each page `{ assets, next }`:
2994
+
2995
+ - `useAthenaFolderAssets({ folderId, pageSize?, enabled? })`: a folder's children, or the
2996
+ workspace's top level for `folderId: null` (agora's `getPaginatedAssetsForWorkspace`, gated by
2997
+ the caller's access): folders first, then the newest change, without conversations or catalogs,
2998
+ each asset once. agora appends a listed meeting's transcript and video and a listed catalog's
2999
+ children to its page, wherever they are filed; those are left out, and the next page starts
3000
+ after the folder's own rows.
3001
+ - `useAthenaProjectAssets({ projectId, pageSize?, enabled? })`: the assets a project links
3002
+ (`getProjectLinkedAssetsPaginated`, which leaves out every asset the caller may not open).
3003
+
3004
+ `useAthenaAssetsRefresh()` answers a function that has every asset read of the provider read again
3005
+ (the search, recent work, favourites, projects, and each folder's and project's pages), for the
3006
+ backend and credential in use alone: call it after changing the person's assets (an upload into a
3007
+ folder, say). Only the reads on screen are sent again.
3008
+
3009
+ ### Uploading into a folder
3010
+
3011
+ `useFileUpload().upload(files, { parentFolderId })` uploads into that folder through agora's async
3012
+ upload (`POST /api/upload/async` with `parent_folder_id`), which refuses the whole upload, before
3013
+ it takes any file, unless the person may edit the folder, then reads its task (`asyncUploadTask`)
3014
+ until it ends (at most 15 minutes, waiting 250 ms to 2 s between reads). It answers the uploaded
3015
+ assets as the quick upload does; a refusal or a task that took no file throws with agora's reason.
3016
+ Without `parentFolderId` the files go to the workspace's root through `POST /api/upload/`, as
3017
+ before. Either way, `onFilesRefused` hears each file Athena refused (`{ fileName, error }`, in
3018
+ agora's words) when it took others from the same upload, before `upload` resolves:
3019
+
3020
+ ```ts
3021
+ const refused: UploadRefusal[] = [];
3022
+ const assets = await upload(files, {
3023
+ parentFolderId: folderId,
3024
+ onFilesRefused: (rejected) => refused.push(...rejected),
3025
+ });
3026
+ ```
3027
+
2314
3028
  ## Repository Code Search (platform staff only, managed cloud)
2315
3029
 
2316
3030
  `useAthenaRepoSearch` searches the workspace's indexed GitHub repositories
@@ -2548,7 +3262,17 @@ The transcript is `SuperGroupingTranscript` from `@athenaintel/react/super-group
2548
3262
 
2549
3263
  Every step row and every thread tool card reads one summary registry, `summarizeToolCall({ toolName, args, result, status })` → `{ label, detail?, meta?, code? }` (also on `@athenaintel/react/tools`). It has rules for the deep agent's core tools (`execute`, the workspace file tools, `search_assets`, the computer and GitHub tools, web search and browse, `read_asset`, `write_todos`, `task`, and the UI Testing toolkit's `test_recording_start` / `_mark` / `_stop`); other tools read the shared display registry, and a tool neither knows falls back to a host catalog name (`resolveToolDisplayName`), else its sentence-cased name. A call that targets a machine or document by id (`sandbox_asset_id`, `computer_asset_id`) is named by its title when an earlier result in the turn carried one (`collectAssetTitles`); nothing is fetched.
2550
3264
 
2551
- A delegation to a subagent (`task`) stays in the conversation, as an email draft or a UI test report does: the subagent card, with its state, tool calls, clock and newest step, and its steps behind its disclosure (see [What's new in 0.42.0](#whats-new-in-0420)).
3265
+ A delegation to a subagent (`task`) stays in the conversation, as an email draft or a UI test report does: its lanes, drawn as Athena on the web draws them (see [Subagent lanes](#subagent-lanes)).
3266
+
3267
+ ### Subagent lanes
3268
+
3269
+ `SubagentTaskToolUI` (`TOOL_UI_REGISTRY.task`) shows the subagents a turn delegated:
3270
+
3271
+ - **A fan-out side by side.** The `task` calls one assistant message made together render as one group: the strip ("3 subagents in parallel · 1 running · 2 done · 41 tool calls · 1m 12s") with a progress bar, a fork connector to each card, and the cards in a grid as wide as the column allows. Above four lanes the group pages ("Page 1 of 2"). Only the first sibling's tool UI draws the group; the others draw nothing. A lone delegation is one card.
3272
+ - **Each card says where its lane is.** Its brief (which opens whole), its preset's type, its status and duration ("Running · 1m 04s", "Done · 2m 05s", the server's measure once it finished), and while it works, a ring of its own plan's progress, the call it made last, the thought it streams and, after 30 seconds without a change, "No activity for 42s". A finished lane shows the start of its report, a failed one why. Its footer counts its tool calls, plan steps and tokens. A lane parked on an approval reads "Waiting for approval" with the call it waits on, and no clock; a lane its run left before it settled (the run was stopped, or the conversation moved on) reads "Stopped".
3273
+ - **"View transcript" opens the lane in a drawer.** The lane's steps, laid out as the chat lays out a turn and rendered read-only with the chat's own tool UIs, live while it runs (the drawer follows the lane, so its card carries every step); "Showing the latest 8 of 42 steps" and "Load earlier steps" for a lane its card carries cut (`history/lane`, opened at the newest page); its images as they scroll into view; and its run details (status, type, model, dispatch id, duration, volume, tokens) for matching a failure with the backend's logs. Escape or the backdrop closes it; a tool UI that throws inside it stays inside it. Inside a lane, a delegation is a static chip.
3274
+
3275
+ The pieces are on `@athenaintel/react/subagents` for a host that renders its own thread or its own `task` UI (Athena on the web does): `SubagentLaneGroup` (with `renderLaneApproval` for a host's own controls in a queued lane's card, `footer`, and `TranscriptDrawer`), `useTaskSubagentGroup`, `SubagentTranscriptDrawer` (with `renderTranscript`, `renderReport` and `onError`), the card's parts, what a lane says (`subagentLaneTitle`, `laneDurationLabel`, `formatLaneTokens`, …), and `DeepAgentLaneFollowScope`, the lanes a chat follows. `AthenaChat` mounts that scope, and its history edge keeps the attach following the lane an open drawer shows; a host with its own runtime mounts the scope and runs `useDeepAgentLaneFollowSync` itself.
2552
3276
 
2553
3277
  Every tool call it renders — the generic `ToolFallback`, the built-in tool UIs, nested sub-calls — shares one row anatomy: a status glyph (spinner / check / x / alert), the verb and its target on one line, a running call's elapsed seconds after three, a failed call tinted red, and a disclosure for the arguments and result.
2554
3278
 
@@ -2563,6 +3287,51 @@ import { ToolFallback, ToolFallbackAppearanceProvider } from '@athenaintel/react
2563
3287
 
2564
3288
  Dedicated tool UIs built on `ToolCard` follow the provider automatically; `useToolAppearance()` reads the appearance in force for a custom tool UI.
2565
3289
 
3290
+ ## What a turn changed (`turnChanges`)
3291
+
3292
+ A host whose agent edits files (Athena Desktop, in a chat that works in a folder on the person's Mac) can end every finished turn that changed files with Codex's card: **Edited 5 files +164 −6**, **Undo** and **View changes**, then the first three files with their lines added and removed and **Show 2 more files** for the rest. An earlier turn keeps its own card with that turn's numbers. The SDK draws the card (in the SDK's theme, light and dark) and puts it at the end of the turn; the host reads the changes and does what Undo and View changes mean. Off unless the host turns it on: without `turnChanges` (or with `null`), or with `enabled` not `true`, nothing renders and nothing is read.
3293
+
3294
+ ```tsx
3295
+ import { AthenaChat, type AthenaChatTurnChanges } from '@athenaintel/react';
3296
+
3297
+ const turnChanges: AthenaChatTurnChanges = {
3298
+ enabled: true,
3299
+ // 'chat' (the default): View changes opens every change in the chat; 'turn': this turn's alone.
3300
+ reviewScope: 'turn',
3301
+ read: async ({ threadId, turn, signal }) => myChanges({ threadId, runIds: turn.runIds, signal }),
3302
+ onView: ({ threadId, turn, changes, scope }) => openMyReview({ threadId, ref: changes.ref, scope }),
3303
+ onUndo: ({ threadId, changes }) => undoMyChanges({ threadId, ref: changes.ref }),
3304
+ };
3305
+
3306
+ <AthenaChat turnChanges={turnChanges} />;
3307
+ ```
3308
+
3309
+ - **Which turns.** A turn is the assistant messages between two of the person's. It is read once it has finished (one the person wrote after, or the last one once its run is over), and only when its messages name their runs: Athena stamps `metadata.custom.athena_run_id` on every assistant message, the id the run's device calls carry, so a host that keeps something per run (the desktop app's checkpoint before a run's first change) finds the turn's. `turn` is `{ messageId, runIds }`, the runs oldest first (a turn resumed after an approval has more than one).
3310
+ - **What `read` answers.** `AthenaTurnChangesSummary`: `files` (`{ path, additions, deletions }`, `null` lines for a binary file), `more` (files changed past those listed), the total `additions` and `deletions`, and `ref`, the host's own handle on these changes, opaque to the SDK and handed back to `onView` and `onUndo`. `null`, no files or a rejection show nothing. Each turn is read once and kept (TanStack Query, per thread and turn, whether or not Athena can be reached); after `onUndo` settles the card reads its turn again.
3311
+ - **The buttons.** View changes calls `onView` with `scope` (`reviewScope`, `chat` unless the host says `turn`). Undo calls `onUndo` and is off until it settles; the host decides how to undo and whether to ask first (the desktop app's own dialog asks).
3312
+ - **A thread of your own.** The card renders in `AthenaChat`'s assistant turn. A host with its own `AssistantMessage` places `AthenaTurnChangesSlot` where the card goes; it reads `turnChanges` from `AthenaChat`.
3313
+
3314
+ ## Cards for Athena's toolkits
3315
+
3316
+ `AthenaChat` draws the tools agents use most the way Athena on the web does, from `TOOL_UI_REGISTRY`, with nothing to pass in `toolUIs`. Each card reads only its own call (arguments, result, status, artifact); the one request any of them makes is for a fresh URL for a screenshot whose stored one has expired (`POST /api/asset/screenshot-presigned-url`, which signs only what the signed-in person may read).
3317
+
3318
+ | Toolkit | Tools | What the card shows |
3319
+ |---|---|---|
3320
+ | Deep-agent sandbox | `execute`, `delete` | `$ ` and the command's first line with its `exit N` / `truncated` chips and the machine it ran on; opened, the command and its output in a terminal (cut at 400 lines). The deleted path and the sandbox's answer. |
3321
+ | Code interpreter and background tasks | `eval`, `start_async_task`, `check_async_task`, `update_async_task`, `cancel_async_task`, `ask_agent` | The code and its output. A coding task's status, summary, branch, commit, files, tests and blockers; an agent session's answer and a button that opens it. |
3322
+ | Athena Drive | `search_assets`, `list_contents`, `project_links` | The matches (type, title, creator, last update), each opening its asset; a folder's tree and page; the assets linked to a project. |
3323
+ | Ontology | `list_object_types`, `search_objects`, `get_object_links` | How many types, objects or links came back. |
3324
+ | Project manager | `pm_documents`, `get_pm_roadmap` | The project file read or patched (patches as before and after), and the roadmap. |
3325
+ | Spreadsheets | `execute_spreadsheet_code`, `query_sheet_range`, `capture_sheet_screenshot` | The run's phase, then its summary, code and output and an Open workbook button; the range read as a table (a batch lists each range); the captured range. |
3326
+ | Word documents | `execute_word_document_code`, `capture_page_screenshot` | The run's phase and result; the captured page. |
3327
+ | Athena documents | `replace_markdown_in_athena_document`, `insert_markdown_before_block`, `insert_markdown_after_block`, `delete_blocks_from_athena_document`, `clear_athena_document`, `convert_athena_doc_to_pdf` | What changed, with the written markdown as a preview; the PDF, which opens. |
3328
+ | Decks | `capture_slide_screenshots`, `manage_slides`, `set_slide_notes`, `update_slide_shapes` | The contact sheet with a chip per slide that opens it; each edit and the slide it touched. |
3329
+ | Hosted browser | `computer`, `browser_batch`, `go_to_url`, `get_page_text`, `get_current_url`, `create_new_browse_session`, `stop_browser_session` | Each action in words ("Did Left-Click", "Typed …", the zoomed region); a batch's steps; the browse session and its profiles, with Open session. |
3330
+ | Computers | `computer_asset_create`, `computer_asset_ensure_sandbox`, `computer_asset_get_status`, `computer_asset_deploy` | The machine's state, and a deployment's link and ports. |
3331
+ | Email and calendar | `send_email_from_athena`, `unified_email_get_thread`, `unified_email_get_message`, `unified_search_calendar_events` | The sent email's recipients, subject, files and opening lines; the thread as Gmail lists it; the events by day. |
3332
+
3333
+ A card that opens an asset does it through the asset panel (`useAssetPanelStore().openAsset`), only when the person clicks. Each card is also exported by name (`ExecuteToolUI`, `SearchAssetsToolUI`, `QuerySheetRangeToolUI`, …) for a host that composes its own registry; a tool UI a host passes in `toolUIs` replaces the card for that tool.
3334
+
2566
3335
  ## Spreadsheet range previews (`@athenaintel/react/sheet-range`)
2567
3336
 
2568
3337
  The sheet tool cards show a read-only preview of the range a tool read or wrote: column letters across the top, row numbers down the side, each cell on one line (its full text on hover), and the rows and columns left out counted under the table. The same pieces are on the `@athenaintel/react/sheet-range` entry (and the root entry) for a custom tool UI:
@@ -2580,7 +3349,7 @@ const preview = rangePreviewFromCellMap({
2580
3349
  {preview && <RangePreviewTable preview={preview} maxRows={20} caption="Q1 Plan A1:F40" />}
2581
3350
  ```
2582
3351
 
2583
- `rangePreviewFromRows` previews rows of values written from an anchor cell instead. `parseA1Range` reads a cell (`B7`), a rectangle (`A1:C5`), whole columns (`A:C`) or whole rows (`3:5`), with an optional sheet prefix (`Sales!`, `'Q1 Plan'!`, `''` for a quote in a quoted name), `$` markers and any letter case, and returns `null` for anything else (a named range, a column past XFD, row 0). The entry imports nothing else from the SDK, so a shell can use it without loading the chat.
3352
+ `rangePreviewFromRows` previews rows of values written from an anchor cell instead. `queryRangeItemTable({ item, data })` reads one range of a `query_sheet_range` result into the table the query card draws (values, formulas or formats, capped at `QUERY_RANGE_MAX_DISPLAY_ROWS` rows). `parseA1Range` reads a cell (`B7`), a rectangle (`A1:C5`), whole columns (`A:C`) or whole rows (`3:5`), with an optional sheet prefix (`Sales!`, `'Q1 Plan'!`, `''` for a quote in a quoted name), `$` markers and any letter case, and returns `null` for anything else (a named range, a column past XFD, row 0). The entry imports nothing else from the SDK, so a shell can use it without loading the chat.
2584
3353
 
2585
3354
  ## Key Components
2586
3355