@athenaintel/react 0.28.1 → 0.32.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 (817) hide show
  1. package/README.md +479 -10
  2. package/dist/agent-runtime/src/asset-attachment.cjs.map +1 -0
  3. package/dist/agent-runtime/src/asset-attachment.js.map +1 -0
  4. package/dist/agent-runtime/src/athena-asset-drag.cjs +44 -0
  5. package/dist/agent-runtime/src/athena-asset-drag.cjs.map +1 -0
  6. package/dist/agent-runtime/src/athena-asset-drag.js +44 -0
  7. package/dist/agent-runtime/src/athena-asset-drag.js.map +1 -0
  8. package/dist/agent-runtime/src/auth-denial.cjs.map +1 -0
  9. package/dist/agent-runtime/src/auth-denial.js.map +1 -0
  10. package/dist/agent-runtime/src/client-tool-bridge.cjs.map +1 -0
  11. package/dist/agent-runtime/src/client-tool-bridge.js.map +1 -0
  12. package/dist/agent-runtime/src/client-tools.cjs.map +1 -0
  13. package/dist/agent-runtime/src/client-tools.js.map +1 -0
  14. package/dist/agent-runtime/src/composer-markdown.cjs +124 -0
  15. package/dist/agent-runtime/src/composer-markdown.cjs.map +1 -0
  16. package/dist/agent-runtime/src/composer-markdown.js +124 -0
  17. package/dist/agent-runtime/src/composer-markdown.js.map +1 -0
  18. package/dist/agent-runtime/src/config-mutations.cjs +59 -0
  19. package/dist/agent-runtime/src/config-mutations.cjs.map +1 -0
  20. package/dist/agent-runtime/src/config-mutations.js +59 -0
  21. package/dist/agent-runtime/src/config-mutations.js.map +1 -0
  22. package/dist/agent-runtime/src/conversation-index.cjs.map +1 -0
  23. package/dist/agent-runtime/src/conversation-index.js.map +1 -0
  24. package/dist/{packages/agent-runtime → agent-runtime}/src/conversation-list.cjs +36 -0
  25. package/dist/agent-runtime/src/conversation-list.cjs.map +1 -0
  26. package/dist/{packages/agent-runtime → agent-runtime}/src/conversation-list.js +36 -0
  27. package/dist/agent-runtime/src/conversation-list.js.map +1 -0
  28. package/dist/{packages/agent-runtime → agent-runtime}/src/deep-agent-transport-recipe.cjs +5 -3
  29. package/dist/agent-runtime/src/deep-agent-transport-recipe.cjs.map +1 -0
  30. package/dist/{packages/agent-runtime → agent-runtime}/src/deep-agent-transport-recipe.js +6 -4
  31. package/dist/agent-runtime/src/deep-agent-transport-recipe.js.map +1 -0
  32. package/dist/agent-runtime/src/edit-command.cjs.map +1 -0
  33. package/dist/agent-runtime/src/edit-command.js.map +1 -0
  34. package/dist/{packages/agent-runtime → agent-runtime}/src/errors.cjs +23 -0
  35. package/dist/agent-runtime/src/errors.cjs.map +1 -0
  36. package/dist/{packages/agent-runtime → agent-runtime}/src/errors.js +23 -0
  37. package/dist/agent-runtime/src/errors.js.map +1 -0
  38. package/dist/agent-runtime/src/execute-output.cjs +41 -0
  39. package/dist/agent-runtime/src/execute-output.cjs.map +1 -0
  40. package/dist/agent-runtime/src/execute-output.js +41 -0
  41. package/dist/agent-runtime/src/execute-output.js.map +1 -0
  42. package/dist/{packages/agent-runtime → agent-runtime}/src/generated/runconfig-contract.cjs +16 -2
  43. package/dist/agent-runtime/src/generated/runconfig-contract.cjs.map +1 -0
  44. package/dist/{packages/agent-runtime → agent-runtime}/src/generated/runconfig-contract.js +16 -2
  45. package/dist/agent-runtime/src/generated/runconfig-contract.js.map +1 -0
  46. package/dist/agent-runtime/src/github-wake-event.cjs.map +1 -0
  47. package/dist/agent-runtime/src/github-wake-event.js.map +1 -0
  48. package/dist/{packages/agent-runtime → agent-runtime}/src/interrupts.cjs +24 -1
  49. package/dist/agent-runtime/src/interrupts.cjs.map +1 -0
  50. package/dist/{packages/agent-runtime → agent-runtime}/src/interrupts.js +24 -1
  51. package/dist/agent-runtime/src/interrupts.js.map +1 -0
  52. package/dist/agent-runtime/src/message-author.cjs.map +1 -0
  53. package/dist/agent-runtime/src/message-author.js.map +1 -0
  54. package/dist/agent-runtime/src/message-window.cjs.map +1 -0
  55. package/dist/agent-runtime/src/message-window.js.map +1 -0
  56. package/dist/{packages/agent-runtime → agent-runtime}/src/messages.cjs +8 -4
  57. package/dist/agent-runtime/src/messages.cjs.map +1 -0
  58. package/dist/{packages/agent-runtime → agent-runtime}/src/messages.js +6 -2
  59. package/dist/agent-runtime/src/messages.js.map +1 -0
  60. package/dist/agent-runtime/src/model-context.cjs.map +1 -0
  61. package/dist/agent-runtime/src/model-context.js.map +1 -0
  62. package/dist/agent-runtime/src/optimistic-content.cjs.map +1 -0
  63. package/dist/agent-runtime/src/optimistic-content.js.map +1 -0
  64. package/dist/agent-runtime/src/protocol.cjs.map +1 -0
  65. package/dist/agent-runtime/src/protocol.js.map +1 -0
  66. package/dist/{packages/agent-runtime → agent-runtime}/src/queue.cjs +23 -2
  67. package/dist/agent-runtime/src/queue.cjs.map +1 -0
  68. package/dist/{packages/agent-runtime → agent-runtime}/src/queue.js +23 -2
  69. package/dist/agent-runtime/src/queue.js.map +1 -0
  70. package/dist/{packages/agent-runtime → agent-runtime}/src/quota-safe-local-storage-session.cjs +71 -13
  71. package/dist/agent-runtime/src/quota-safe-local-storage-session.cjs.map +1 -0
  72. package/dist/{packages/agent-runtime → agent-runtime}/src/quota-safe-local-storage-session.js +73 -15
  73. package/dist/agent-runtime/src/quota-safe-local-storage-session.js.map +1 -0
  74. package/dist/agent-runtime/src/runtime-messages.cjs.map +1 -0
  75. package/dist/agent-runtime/src/runtime-messages.js.map +1 -0
  76. package/dist/agent-runtime/src/screen-point.cjs.map +1 -0
  77. package/dist/agent-runtime/src/screen-point.js.map +1 -0
  78. package/dist/agent-runtime/src/send-recovery.cjs.map +1 -0
  79. package/dist/agent-runtime/src/send-recovery.js.map +1 -0
  80. package/dist/agent-runtime/src/statewire-attach-observer.cjs.map +1 -0
  81. package/dist/agent-runtime/src/statewire-attach-observer.js.map +1 -0
  82. package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-state.cjs +8 -0
  83. package/dist/agent-runtime/src/statewire-state.cjs.map +1 -0
  84. package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-state.js +8 -0
  85. package/dist/agent-runtime/src/statewire-state.js.map +1 -0
  86. package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-suspended.cjs +4 -0
  87. package/dist/agent-runtime/src/statewire-suspended.cjs.map +1 -0
  88. package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-suspended.js +4 -0
  89. package/dist/agent-runtime/src/statewire-suspended.js.map +1 -0
  90. package/dist/agent-runtime/src/statewire-transport.cjs +43 -0
  91. package/dist/agent-runtime/src/statewire-transport.cjs.map +1 -0
  92. package/dist/agent-runtime/src/statewire-transport.js +43 -0
  93. package/dist/agent-runtime/src/statewire-transport.js.map +1 -0
  94. package/dist/agent-runtime/src/streaming-markdown.cjs.map +1 -0
  95. package/dist/agent-runtime/src/streaming-markdown.js.map +1 -0
  96. package/dist/agent-runtime/src/subscription-wake-event.cjs +252 -0
  97. package/dist/agent-runtime/src/subscription-wake-event.cjs.map +1 -0
  98. package/dist/agent-runtime/src/subscription-wake-event.js +252 -0
  99. package/dist/agent-runtime/src/subscription-wake-event.js.map +1 -0
  100. package/dist/agent-runtime/src/thread-extras.cjs.map +1 -0
  101. package/dist/agent-runtime/src/thread-extras.js.map +1 -0
  102. package/dist/agent-runtime/src/thread-snapshot-cache.cjs.map +1 -0
  103. package/dist/agent-runtime/src/thread-snapshot-cache.js.map +1 -0
  104. package/dist/agent-runtime/src/thread-status.cjs.map +1 -0
  105. package/dist/agent-runtime/src/thread-status.js.map +1 -0
  106. package/dist/{packages/agent-runtime → agent-runtime}/src/tool-metadata.cjs +304 -9
  107. package/dist/agent-runtime/src/tool-metadata.cjs.map +1 -0
  108. package/dist/{packages/agent-runtime → agent-runtime}/src/tool-metadata.js +304 -9
  109. package/dist/agent-runtime/src/tool-metadata.js.map +1 -0
  110. package/dist/agent-runtime/src/tool-names.cjs +5 -0
  111. package/dist/agent-runtime/src/tool-names.cjs.map +1 -0
  112. package/dist/agent-runtime/src/tool-names.js +5 -0
  113. package/dist/agent-runtime/src/tool-names.js.map +1 -0
  114. package/dist/agent-runtime/src/tool-outputs.cjs.map +1 -0
  115. package/dist/agent-runtime/src/tool-outputs.js.map +1 -0
  116. package/dist/agent-runtime/src/tool-result.cjs.map +1 -0
  117. package/dist/agent-runtime/src/tool-result.js.map +1 -0
  118. package/dist/{packages/agent-runtime → agent-runtime}/src/use-conversation-list.cjs +33 -22
  119. package/dist/agent-runtime/src/use-conversation-list.cjs.map +1 -0
  120. package/dist/{packages/agent-runtime → agent-runtime}/src/use-conversation-list.js +34 -23
  121. package/dist/agent-runtime/src/use-conversation-list.js.map +1 -0
  122. package/dist/agent-runtime/src/use-deep-agent-config.cjs +129 -0
  123. package/dist/agent-runtime/src/use-deep-agent-config.cjs.map +1 -0
  124. package/dist/agent-runtime/src/use-deep-agent-config.js +129 -0
  125. package/dist/agent-runtime/src/use-deep-agent-config.js.map +1 -0
  126. package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-edit-submit.cjs +2 -0
  127. package/dist/agent-runtime/src/use-deep-agent-edit-submit.cjs.map +1 -0
  128. package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-edit-submit.js +2 -0
  129. package/dist/agent-runtime/src/use-deep-agent-edit-submit.js.map +1 -0
  130. package/dist/agent-runtime/src/use-deep-agent-runtime.cjs.map +1 -0
  131. package/dist/agent-runtime/src/use-deep-agent-runtime.js.map +1 -0
  132. package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-thread.cjs +1 -0
  133. package/dist/agent-runtime/src/use-deep-agent-thread.cjs.map +1 -0
  134. package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-thread.js +2 -1
  135. package/dist/agent-runtime/src/use-deep-agent-thread.js.map +1 -0
  136. package/dist/agent-runtime/src/use-deep-agent-window-sync.cjs.map +1 -0
  137. package/dist/agent-runtime/src/use-deep-agent-window-sync.js.map +1 -0
  138. package/dist/agent-runtime/src/use-historical-edit-attachments.cjs +52 -0
  139. package/dist/agent-runtime/src/use-historical-edit-attachments.cjs.map +1 -0
  140. package/dist/agent-runtime/src/use-historical-edit-attachments.js +52 -0
  141. package/dist/agent-runtime/src/use-historical-edit-attachments.js.map +1 -0
  142. package/dist/{packages/agent-runtime → agent-runtime}/src/voice-presentation.cjs +14 -0
  143. package/dist/agent-runtime/src/voice-presentation.cjs.map +1 -0
  144. package/dist/{packages/agent-runtime → agent-runtime}/src/voice-presentation.js +14 -0
  145. package/dist/agent-runtime/src/voice-presentation.js.map +1 -0
  146. package/dist/agent-runtime/src/voice-turn-grouping.cjs.map +1 -0
  147. package/dist/agent-runtime/src/voice-turn-grouping.js.map +1 -0
  148. package/dist/assets/AthenaAssetEmbed.cjs +13 -2
  149. package/dist/assets/AthenaAssetEmbed.cjs.map +1 -1
  150. package/dist/assets/AthenaAssetEmbed.d.ts +10 -0
  151. package/dist/assets/AthenaAssetEmbed.js +14 -3
  152. package/dist/assets/AthenaAssetEmbed.js.map +1 -1
  153. package/dist/assets/AthenaLayout.cjs +97 -31
  154. package/dist/assets/AthenaLayout.cjs.map +1 -1
  155. package/dist/assets/AthenaLayout.d.ts +13 -0
  156. package/dist/assets/AthenaLayout.js +98 -32
  157. package/dist/assets/AthenaLayout.js.map +1 -1
  158. package/dist/assets/asset-embed-messages.cjs +6 -0
  159. package/dist/assets/asset-embed-messages.cjs.map +1 -1
  160. package/dist/assets/asset-embed-messages.d.ts +13 -0
  161. package/dist/assets/asset-embed-messages.js +6 -0
  162. package/dist/assets/asset-embed-messages.js.map +1 -1
  163. package/dist/assets/asset-panel-store.cjs +68 -32
  164. package/dist/assets/asset-panel-store.cjs.map +1 -1
  165. package/dist/assets/asset-panel-store.d.ts +47 -1
  166. package/dist/assets/asset-panel-store.js +68 -32
  167. package/dist/assets/asset-panel-store.js.map +1 -1
  168. package/dist/assets/use-asset-embed.cjs +29 -8
  169. package/dist/assets/use-asset-embed.cjs.map +1 -1
  170. package/dist/assets/use-asset-embed.d.ts +7 -0
  171. package/dist/assets/use-asset-embed.js +29 -8
  172. package/dist/assets/use-asset-embed.js.map +1 -1
  173. package/dist/catalog/chat-pickers.cjs +152 -0
  174. package/dist/catalog/chat-pickers.cjs.map +1 -0
  175. package/dist/catalog/chat-pickers.d.ts +22 -0
  176. package/dist/catalog/chat-pickers.js +152 -0
  177. package/dist/catalog/chat-pickers.js.map +1 -0
  178. package/dist/catalog/runtime-catalog.cjs +181 -0
  179. package/dist/catalog/runtime-catalog.cjs.map +1 -0
  180. package/dist/catalog/runtime-catalog.d.ts +100 -0
  181. package/dist/catalog/runtime-catalog.js +181 -0
  182. package/dist/catalog/runtime-catalog.js.map +1 -0
  183. package/dist/chat/AthenaChat.cjs +122 -67
  184. package/dist/chat/AthenaChat.cjs.map +1 -1
  185. package/dist/chat/AthenaChat.d.ts +21 -4
  186. package/dist/chat/AthenaChat.js +124 -69
  187. package/dist/chat/AthenaChat.js.map +1 -1
  188. package/dist/chat/StatewireApprovalCard.cjs +38 -37
  189. package/dist/chat/StatewireApprovalCard.cjs.map +1 -1
  190. package/dist/chat/StatewireApprovalCard.d.ts +2 -0
  191. package/dist/chat/StatewireApprovalCard.js +39 -38
  192. package/dist/chat/StatewireApprovalCard.js.map +1 -1
  193. package/dist/chat/StatewireClientToolBridge.cjs +2 -2
  194. package/dist/chat/StatewireClientToolBridge.js +2 -2
  195. package/dist/chat/StatewireQueuedMessages.cjs +15 -12
  196. package/dist/chat/StatewireQueuedMessages.cjs.map +1 -1
  197. package/dist/chat/StatewireQueuedMessages.d.ts +22 -2
  198. package/dist/chat/StatewireQueuedMessages.js +15 -12
  199. package/dist/chat/StatewireQueuedMessages.js.map +1 -1
  200. package/dist/chat/StatewireRunRefusalNotice.cjs +48 -0
  201. package/dist/chat/StatewireRunRefusalNotice.cjs.map +1 -0
  202. package/dist/chat/StatewireRunRefusalNotice.d.ts +25 -0
  203. package/dist/chat/StatewireRunRefusalNotice.js +48 -0
  204. package/dist/chat/StatewireRunRefusalNotice.js.map +1 -0
  205. package/dist/chat/WaitingOnYouBanner.cjs +2 -2
  206. package/dist/chat/WaitingOnYouBanner.js +2 -2
  207. package/dist/chat/athena-citation-links.cjs +19 -15
  208. package/dist/chat/athena-citation-links.cjs.map +1 -1
  209. package/dist/chat/athena-citation-links.js +19 -15
  210. package/dist/chat/athena-citation-links.js.map +1 -1
  211. package/dist/chat/run-activity.cjs +9 -1
  212. package/dist/chat/run-activity.cjs.map +1 -1
  213. package/dist/chat/run-activity.d.ts +6 -0
  214. package/dist/chat/run-activity.js +10 -2
  215. package/dist/chat/run-activity.js.map +1 -1
  216. package/dist/chat/statewire-banners.cjs +30 -1
  217. package/dist/chat/statewire-banners.cjs.map +1 -1
  218. package/dist/chat/statewire-banners.d.ts +20 -1
  219. package/dist/chat/statewire-banners.js +32 -3
  220. package/dist/chat/statewire-banners.js.map +1 -1
  221. package/dist/chat/statewire-client-tools.cjs +1 -1
  222. package/dist/chat/statewire-client-tools.js +1 -1
  223. package/dist/chat/super-grouping/CollapsibleGroup.cjs +1 -1
  224. package/dist/chat/super-grouping/CollapsibleGroup.cjs.map +1 -1
  225. package/dist/chat/super-grouping/CollapsibleGroup.js +1 -1
  226. package/dist/chat/super-grouping/CollapsibleGroup.js.map +1 -1
  227. package/dist/chat/super-grouping/SuperGroupingCard.cjs +38 -16
  228. package/dist/chat/super-grouping/SuperGroupingCard.cjs.map +1 -1
  229. package/dist/chat/super-grouping/SuperGroupingCard.d.ts +21 -4
  230. package/dist/chat/super-grouping/SuperGroupingCard.js +39 -17
  231. package/dist/chat/super-grouping/SuperGroupingCard.js.map +1 -1
  232. package/dist/chat/super-grouping/SuperGroupingTranscript.cjs +377 -0
  233. package/dist/chat/super-grouping/SuperGroupingTranscript.cjs.map +1 -0
  234. package/dist/chat/super-grouping/SuperGroupingTranscript.d.ts +31 -0
  235. package/dist/chat/super-grouping/SuperGroupingTranscript.js +377 -0
  236. package/dist/chat/super-grouping/SuperGroupingTranscript.js.map +1 -0
  237. package/dist/chat/super-grouping/ToolTimeline.cjs +13 -2
  238. package/dist/chat/super-grouping/ToolTimeline.cjs.map +1 -1
  239. package/dist/chat/super-grouping/ToolTimeline.d.ts +10 -3
  240. package/dist/chat/super-grouping/ToolTimeline.js +13 -2
  241. package/dist/chat/super-grouping/ToolTimeline.js.map +1 -1
  242. package/dist/chat/super-grouping/activity-timeline.cjs +69 -29
  243. package/dist/chat/super-grouping/activity-timeline.cjs.map +1 -1
  244. package/dist/chat/super-grouping/activity-timeline.d.ts +60 -9
  245. package/dist/chat/super-grouping/activity-timeline.js +70 -30
  246. package/dist/chat/super-grouping/activity-timeline.js.map +1 -1
  247. package/dist/chat/super-grouping/index.cjs +14 -0
  248. package/dist/chat/super-grouping/index.cjs.map +1 -1
  249. package/dist/chat/super-grouping/index.d.ts +7 -2
  250. package/dist/chat/super-grouping/index.js +16 -2
  251. package/dist/chat/super-grouping/index.js.map +1 -1
  252. package/dist/chat/super-grouping/timeline-step.cjs +14 -5
  253. package/dist/chat/super-grouping/timeline-step.cjs.map +1 -1
  254. package/dist/chat/super-grouping/timeline-step.d.ts +10 -1
  255. package/dist/chat/super-grouping/timeline-step.js +15 -6
  256. package/dist/chat/super-grouping/timeline-step.js.map +1 -1
  257. package/dist/chat/super-grouping/toolkit-map.cjs +1 -0
  258. package/dist/chat/super-grouping/toolkit-map.cjs.map +1 -1
  259. package/dist/chat/super-grouping/toolkit-map.js +1 -0
  260. package/dist/chat/super-grouping/toolkit-map.js.map +1 -1
  261. package/dist/chat/super-grouping/turn-segments.cjs +82 -0
  262. package/dist/chat/super-grouping/turn-segments.cjs.map +1 -0
  263. package/dist/chat/super-grouping/turn-segments.d.ts +69 -0
  264. package/dist/chat/super-grouping/turn-segments.js +82 -0
  265. package/dist/chat/super-grouping/turn-segments.js.map +1 -0
  266. package/dist/chat/super-grouping/turn-timing.cjs +110 -0
  267. package/dist/chat/super-grouping/turn-timing.cjs.map +1 -0
  268. package/dist/chat/super-grouping/turn-timing.d.ts +52 -0
  269. package/dist/chat/super-grouping/turn-timing.js +110 -0
  270. package/dist/chat/super-grouping/turn-timing.js.map +1 -0
  271. package/dist/chat/tiptap-text.cjs +1 -1
  272. package/dist/chat/tiptap-text.js +1 -1
  273. package/dist/chat/use-athena-run-live.cjs +1 -1
  274. package/dist/chat/use-athena-run-live.js +1 -1
  275. package/dist/chat/use-statewire-approval-request.cjs +73 -4
  276. package/dist/chat/use-statewire-approval-request.cjs.map +1 -1
  277. package/dist/chat/use-statewire-approval-request.js +74 -5
  278. package/dist/chat/use-statewire-approval-request.js.map +1 -1
  279. package/dist/chat-ui/composer/composer-message.cjs +284 -0
  280. package/dist/chat-ui/composer/composer-message.cjs.map +1 -0
  281. package/dist/chat-ui/composer/composer-message.d.ts +152 -0
  282. package/dist/chat-ui/composer/composer-message.js +284 -0
  283. package/dist/chat-ui/composer/composer-message.js.map +1 -0
  284. package/dist/chat-ui/composer/tiptap-composer.cjs +97 -15
  285. package/dist/chat-ui/composer/tiptap-composer.cjs.map +1 -1
  286. package/dist/chat-ui/composer/tiptap-composer.d.ts +34 -6
  287. package/dist/chat-ui/composer/tiptap-composer.js +97 -15
  288. package/dist/chat-ui/composer/tiptap-composer.js.map +1 -1
  289. package/dist/chat-ui/index.cjs +4 -1
  290. package/dist/chat-ui/index.cjs.map +1 -1
  291. package/dist/chat-ui/index.d.ts +3 -2
  292. package/dist/chat-ui/index.js +5 -2
  293. package/dist/chat-ui/index.js.map +1 -1
  294. package/dist/chat-ui/mentions/mention-chip.cjs +31 -3
  295. package/dist/chat-ui/mentions/mention-chip.cjs.map +1 -1
  296. package/dist/chat-ui/mentions/mention-chip.d.ts +2 -5
  297. package/dist/chat-ui/mentions/mention-chip.js +33 -5
  298. package/dist/chat-ui/mentions/mention-chip.js.map +1 -1
  299. package/dist/chat-ui/mentions/mention-extension.cjs +9 -3
  300. package/dist/chat-ui/mentions/mention-extension.cjs.map +1 -1
  301. package/dist/chat-ui/mentions/mention-extension.js +9 -3
  302. package/dist/chat-ui/mentions/mention-extension.js.map +1 -1
  303. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.cjs +3 -1
  304. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.cjs.map +1 -1
  305. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.js +3 -1
  306. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.js.map +1 -1
  307. package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs +65 -19
  308. package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs.map +1 -1
  309. package/dist/chat-ui/mentions/suggestions/data/sources/index.d.ts +15 -0
  310. package/dist/chat-ui/mentions/suggestions/data/sources/index.js +67 -21
  311. package/dist/chat-ui/mentions/suggestions/data/sources/index.js.map +1 -1
  312. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs +4 -2
  313. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs.map +1 -1
  314. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.d.ts +2 -1
  315. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js +5 -3
  316. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js.map +1 -1
  317. package/dist/chat-ui/mentions/use-account-workspace-id.cjs +61 -0
  318. package/dist/chat-ui/mentions/use-account-workspace-id.cjs.map +1 -0
  319. package/dist/chat-ui/mentions/use-account-workspace-id.d.ts +3 -0
  320. package/dist/chat-ui/mentions/use-account-workspace-id.js +61 -0
  321. package/dist/chat-ui/mentions/use-account-workspace-id.js.map +1 -0
  322. package/dist/chat-ui/mentions/use-member-avatar.cjs +75 -0
  323. package/dist/chat-ui/mentions/use-member-avatar.cjs.map +1 -0
  324. package/dist/chat-ui/mentions/use-member-avatar.d.ts +2 -0
  325. package/dist/chat-ui/mentions/use-member-avatar.js +75 -0
  326. package/dist/chat-ui/mentions/use-member-avatar.js.map +1 -0
  327. package/dist/chat-ui/messages/message-components.cjs +30 -10
  328. package/dist/chat-ui/messages/message-components.cjs.map +1 -1
  329. package/dist/chat-ui/messages/message-components.d.ts +21 -1
  330. package/dist/chat-ui/messages/message-components.js +30 -10
  331. package/dist/chat-ui/messages/message-components.js.map +1 -1
  332. package/dist/chat-ui/messages/runtime-message.cjs +1 -1
  333. package/dist/chat-ui/messages/runtime-message.js +1 -1
  334. package/dist/chat-ui/messages/statewire-continue-run.cjs +5 -5
  335. package/dist/chat-ui/messages/statewire-continue-run.js +5 -5
  336. package/dist/chat-ui/messages/user-edit-composer.cjs +1 -1
  337. package/dist/chat-ui/messages/user-edit-composer.js +1 -1
  338. package/dist/chat-ui/messages/wake-marker.cjs +39 -4
  339. package/dist/chat-ui/messages/wake-marker.cjs.map +1 -1
  340. package/dist/chat-ui/messages/wake-marker.d.ts +16 -5
  341. package/dist/chat-ui/messages/wake-marker.js +40 -5
  342. package/dist/chat-ui/messages/wake-marker.js.map +1 -1
  343. package/dist/chat-ui/rich-text/chat-message-body.cjs +12 -8
  344. package/dist/chat-ui/rich-text/chat-message-body.cjs.map +1 -1
  345. package/dist/chat-ui/rich-text/chat-message-body.d.ts +6 -1
  346. package/dist/chat-ui/rich-text/chat-message-body.js +13 -9
  347. package/dist/chat-ui/rich-text/chat-message-body.js.map +1 -1
  348. package/dist/chat-ui/rich-text/chat-text-schema.cjs +64 -6
  349. package/dist/chat-ui/rich-text/chat-text-schema.cjs.map +1 -1
  350. package/dist/chat-ui/rich-text/chat-text-schema.d.ts +5 -0
  351. package/dist/chat-ui/rich-text/chat-text-schema.js +66 -8
  352. package/dist/chat-ui/rich-text/chat-text-schema.js.map +1 -1
  353. package/dist/chat-ui/statewire.cjs +1 -1
  354. package/dist/chat-ui/statewire.d.ts +1 -1
  355. package/dist/chat-ui/statewire.js +1 -1
  356. package/dist/chat-ui/thread/statewire-history-edge.cjs +2 -2
  357. package/dist/chat-ui/thread/statewire-history-edge.js +2 -2
  358. package/dist/collab/client.cjs +282 -16
  359. package/dist/collab/client.cjs.map +1 -1
  360. package/dist/collab/client.d.ts +127 -2
  361. package/dist/collab/client.js +285 -20
  362. package/dist/collab/client.js.map +1 -1
  363. package/dist/collab/index.cjs +2 -0
  364. package/dist/collab/index.cjs.map +1 -1
  365. package/dist/collab/index.d.ts +1 -1
  366. package/dist/collab/index.js +3 -1
  367. package/dist/composer/AttachmentContext.cjs +38 -12
  368. package/dist/composer/AttachmentContext.cjs.map +1 -1
  369. package/dist/composer/AttachmentContext.d.ts +22 -1
  370. package/dist/composer/AttachmentContext.js +40 -14
  371. package/dist/composer/AttachmentContext.js.map +1 -1
  372. package/dist/composer/QuoteContext.cjs +80 -28
  373. package/dist/composer/QuoteContext.cjs.map +1 -1
  374. package/dist/composer/QuoteContext.d.ts +35 -6
  375. package/dist/composer/QuoteContext.js +82 -30
  376. package/dist/composer/QuoteContext.js.map +1 -1
  377. package/dist/composer/build-composed-message.cjs +27 -0
  378. package/dist/composer/build-composed-message.cjs.map +1 -1
  379. package/dist/composer/build-composed-message.d.ts +21 -0
  380. package/dist/composer/build-composed-message.js +28 -1
  381. package/dist/composer/build-composed-message.js.map +1 -1
  382. package/dist/composer/composer-handoff.cjs +13 -1
  383. package/dist/composer/composer-handoff.cjs.map +1 -1
  384. package/dist/composer/composer-handoff.d.ts +12 -0
  385. package/dist/composer/composer-handoff.js +15 -3
  386. package/dist/composer/composer-handoff.js.map +1 -1
  387. package/dist/composer/index.d.ts +6 -3
  388. package/dist/composer/useReadComposerDraft.cjs +16 -0
  389. package/dist/composer/useReadComposerDraft.cjs.map +1 -0
  390. package/dist/composer/useReadComposerDraft.d.ts +6 -0
  391. package/dist/composer/useReadComposerDraft.js +16 -0
  392. package/dist/composer/useReadComposerDraft.js.map +1 -0
  393. package/dist/diagnostics/athena-diagnostics.cjs.map +1 -1
  394. package/dist/diagnostics/athena-diagnostics.d.ts +3 -1
  395. package/dist/diagnostics/athena-diagnostics.js.map +1 -1
  396. package/dist/diagnostics/errors.cjs +6 -0
  397. package/dist/diagnostics/errors.cjs.map +1 -1
  398. package/dist/diagnostics/errors.d.ts +6 -0
  399. package/dist/diagnostics/errors.js +6 -0
  400. package/dist/diagnostics/errors.js.map +1 -1
  401. package/dist/index.cjs +163 -7
  402. package/dist/index.cjs.map +1 -1
  403. package/dist/index.d.ts +55 -12
  404. package/dist/index.js +170 -14
  405. package/dist/index.js.map +1 -1
  406. package/dist/lib/owner-document.cjs +32 -0
  407. package/dist/lib/owner-document.cjs.map +1 -0
  408. package/dist/lib/owner-document.d.ts +17 -0
  409. package/dist/lib/owner-document.js +32 -0
  410. package/dist/lib/owner-document.js.map +1 -0
  411. package/dist/lib/portal-surface.cjs +55 -0
  412. package/dist/lib/portal-surface.cjs.map +1 -0
  413. package/dist/lib/portal-surface.d.ts +37 -0
  414. package/dist/lib/portal-surface.js +55 -0
  415. package/dist/lib/portal-surface.js.map +1 -0
  416. package/dist/lib/use-athena-rest-query.cjs +34 -0
  417. package/dist/lib/use-athena-rest-query.cjs.map +1 -0
  418. package/dist/lib/use-athena-rest-query.d.ts +31 -0
  419. package/dist/lib/use-athena-rest-query.js +34 -0
  420. package/dist/lib/use-athena-rest-query.js.map +1 -0
  421. package/dist/provider/AthenaProvider.cjs +70 -10
  422. package/dist/provider/AthenaProvider.cjs.map +1 -1
  423. package/dist/provider/AthenaProvider.d.ts +27 -2
  424. package/dist/provider/AthenaProvider.js +74 -14
  425. package/dist/provider/AthenaProvider.js.map +1 -1
  426. package/dist/provider/citation-links.d.ts +10 -2
  427. package/dist/{packages/react → react}/package.json.cjs +1 -1
  428. package/dist/{packages/react → react}/package.json.js +1 -1
  429. package/dist/runtime/StatewireModelLaneSync.cjs +96 -0
  430. package/dist/runtime/StatewireModelLaneSync.cjs.map +1 -0
  431. package/dist/runtime/StatewireModelLaneSync.d.ts +45 -0
  432. package/dist/runtime/StatewireModelLaneSync.js +96 -0
  433. package/dist/runtime/StatewireModelLaneSync.js.map +1 -0
  434. package/dist/runtime/statewire-lifecycle.cjs +20 -5
  435. package/dist/runtime/statewire-lifecycle.cjs.map +1 -1
  436. package/dist/runtime/statewire-lifecycle.d.ts +11 -0
  437. package/dist/runtime/statewire-lifecycle.js +20 -5
  438. package/dist/runtime/statewire-lifecycle.js.map +1 -1
  439. package/dist/runtime/statewire-model-lane.cjs +28 -0
  440. package/dist/runtime/statewire-model-lane.cjs.map +1 -0
  441. package/dist/runtime/statewire-model-lane.d.ts +64 -0
  442. package/dist/runtime/statewire-model-lane.js +28 -0
  443. package/dist/runtime/statewire-model-lane.js.map +1 -0
  444. package/dist/runtime/statewire-run-config.cjs +16 -2
  445. package/dist/runtime/statewire-run-config.cjs.map +1 -1
  446. package/dist/runtime/statewire-run-config.d.ts +10 -0
  447. package/dist/runtime/statewire-run-config.js +16 -2
  448. package/dist/runtime/statewire-run-config.js.map +1 -1
  449. package/dist/runtime/statewire-server-lane-context.cjs +24 -0
  450. package/dist/runtime/statewire-server-lane-context.cjs.map +1 -0
  451. package/dist/runtime/statewire-server-lane-context.d.ts +30 -0
  452. package/dist/runtime/statewire-server-lane-context.js +24 -0
  453. package/dist/runtime/statewire-server-lane-context.js.map +1 -0
  454. package/dist/runtime/useAthenaStatewireRuntime.cjs +47 -23
  455. package/dist/runtime/useAthenaStatewireRuntime.cjs.map +1 -1
  456. package/dist/runtime/useAthenaStatewireRuntime.d.ts +8 -1
  457. package/dist/runtime/useAthenaStatewireRuntime.js +48 -24
  458. package/dist/runtime/useAthenaStatewireRuntime.js.map +1 -1
  459. package/dist/search/useAthenaRepoSearch.cjs +5 -13
  460. package/dist/search/useAthenaRepoSearch.cjs.map +1 -1
  461. package/dist/search/useAthenaRepoSearch.d.ts +3 -3
  462. package/dist/search/useAthenaRepoSearch.js +6 -14
  463. package/dist/search/useAthenaRepoSearch.js.map +1 -1
  464. package/dist/sheet-range/a1.cjs +162 -0
  465. package/dist/sheet-range/a1.cjs.map +1 -0
  466. package/dist/sheet-range/a1.d.ts +91 -0
  467. package/dist/sheet-range/a1.js +162 -0
  468. package/dist/sheet-range/a1.js.map +1 -0
  469. package/dist/sheet-range/index.cjs +22 -0
  470. package/dist/sheet-range/index.cjs.map +1 -0
  471. package/dist/sheet-range/index.d.ts +12 -0
  472. package/dist/sheet-range/index.js +22 -0
  473. package/dist/sheet-range/index.js.map +1 -0
  474. package/dist/sheet-range/range-preview-table.cjs +75 -0
  475. package/dist/sheet-range/range-preview-table.cjs.map +1 -0
  476. package/dist/sheet-range/range-preview-table.d.ts +20 -0
  477. package/dist/sheet-range/range-preview-table.js +75 -0
  478. package/dist/sheet-range/range-preview-table.js.map +1 -0
  479. package/dist/sheet-range/range-preview.cjs +116 -0
  480. package/dist/sheet-range/range-preview.cjs.map +1 -0
  481. package/dist/sheet-range/range-preview.d.ts +67 -0
  482. package/dist/sheet-range/range-preview.js +116 -0
  483. package/dist/sheet-range/range-preview.js.map +1 -0
  484. package/dist/styles.css +1 -1
  485. package/dist/threads/Inbox.cjs +289 -0
  486. package/dist/threads/Inbox.cjs.map +1 -0
  487. package/dist/threads/Inbox.d.ts +46 -0
  488. package/dist/threads/Inbox.js +289 -0
  489. package/dist/threads/Inbox.js.map +1 -0
  490. package/dist/threads/SessionList.cjs +51 -126
  491. package/dist/threads/SessionList.cjs.map +1 -1
  492. package/dist/threads/SessionList.d.ts +26 -1
  493. package/dist/threads/SessionList.js +45 -120
  494. package/dist/threads/SessionList.js.map +1 -1
  495. package/dist/threads/SessionsPage.cjs +753 -0
  496. package/dist/threads/SessionsPage.cjs.map +1 -0
  497. package/dist/threads/SessionsPage.d.ts +35 -0
  498. package/dist/threads/SessionsPage.js +753 -0
  499. package/dist/threads/SessionsPage.js.map +1 -0
  500. package/dist/threads/api.cjs +23 -2
  501. package/dist/threads/api.cjs.map +1 -1
  502. package/dist/threads/api.d.ts +60 -0
  503. package/dist/threads/api.js +23 -2
  504. package/dist/threads/api.js.map +1 -1
  505. package/dist/threads/conversation-list-fetcher.cjs +9 -2
  506. package/dist/threads/conversation-list-fetcher.cjs.map +1 -1
  507. package/dist/threads/conversation-list-fetcher.d.ts +14 -1
  508. package/dist/threads/conversation-list-fetcher.js +9 -2
  509. package/dist/threads/conversation-list-fetcher.js.map +1 -1
  510. package/dist/threads/index.d.ts +2 -1
  511. package/dist/threads/pull-request-display.cjs +25 -0
  512. package/dist/threads/pull-request-display.cjs.map +1 -0
  513. package/dist/threads/pull-request-display.d.ts +15 -0
  514. package/dist/threads/pull-request-display.js +25 -0
  515. package/dist/threads/pull-request-display.js.map +1 -0
  516. package/dist/threads/session-list-model.cjs +16 -2
  517. package/dist/threads/session-list-model.cjs.map +1 -1
  518. package/dist/threads/session-list-model.d.ts +10 -0
  519. package/dist/threads/session-list-model.js +16 -2
  520. package/dist/threads/session-list-model.js.map +1 -1
  521. package/dist/threads/session-row-parts.cjs +152 -0
  522. package/dist/threads/session-row-parts.cjs.map +1 -0
  523. package/dist/threads/session-row-parts.d.ts +50 -0
  524. package/dist/threads/session-row-parts.js +152 -0
  525. package/dist/threads/session-row-parts.js.map +1 -0
  526. package/dist/threads/sessions-page-model.cjs +305 -0
  527. package/dist/threads/sessions-page-model.cjs.map +1 -0
  528. package/dist/threads/sessions-page-model.d.ts +86 -0
  529. package/dist/threads/sessions-page-model.js +305 -0
  530. package/dist/threads/sessions-page-model.js.map +1 -0
  531. package/dist/threads/sessions-page-storage.cjs +93 -0
  532. package/dist/threads/sessions-page-storage.cjs.map +1 -0
  533. package/dist/threads/sessions-page-storage.d.ts +23 -0
  534. package/dist/threads/sessions-page-storage.js +93 -0
  535. package/dist/threads/sessions-page-storage.js.map +1 -0
  536. package/dist/threads/sessions-query.cjs +235 -0
  537. package/dist/threads/sessions-query.cjs.map +1 -0
  538. package/dist/threads/sessions-query.d.ts +119 -0
  539. package/dist/threads/sessions-query.js +235 -0
  540. package/dist/threads/sessions-query.js.map +1 -0
  541. package/dist/threads/statewire-thread-list.cjs +133 -40
  542. package/dist/threads/statewire-thread-list.cjs.map +1 -1
  543. package/dist/threads/statewire-thread-list.d.ts +83 -2
  544. package/dist/threads/statewire-thread-list.js +134 -41
  545. package/dist/threads/statewire-thread-list.js.map +1 -1
  546. package/dist/threads/use-athena-sessions.cjs +198 -0
  547. package/dist/threads/use-athena-sessions.cjs.map +1 -0
  548. package/dist/threads/use-athena-sessions.d.ts +81 -0
  549. package/dist/threads/use-athena-sessions.js +198 -0
  550. package/dist/threads/use-athena-sessions.js.map +1 -0
  551. package/dist/threads/use-athena-thread-model.cjs +14 -0
  552. package/dist/threads/use-athena-thread-model.cjs.map +1 -0
  553. package/dist/threads/use-athena-thread-model.d.ts +22 -0
  554. package/dist/threads/use-athena-thread-model.js +14 -0
  555. package/dist/threads/use-athena-thread-model.js.map +1 -0
  556. package/dist/threads/use-rest-conversation-history.cjs +1 -1
  557. package/dist/threads/use-rest-conversation-history.js +1 -1
  558. package/dist/threads/use-statewire-conversation-history.cjs +1 -1
  559. package/dist/threads/use-statewire-conversation-history.d.ts +3 -0
  560. package/dist/threads/use-statewire-conversation-history.js +1 -1
  561. package/dist/threads/use-thread-read-state.cjs +73 -0
  562. package/dist/threads/use-thread-read-state.cjs.map +1 -0
  563. package/dist/threads/use-thread-read-state.d.ts +51 -0
  564. package/dist/threads/use-thread-read-state.js +73 -0
  565. package/dist/threads/use-thread-read-state.js.map +1 -0
  566. package/dist/tiptap-markdown-table/src/markdown-table-serializer.cjs.map +1 -0
  567. package/dist/tiptap-markdown-table/src/markdown-table-serializer.js.map +1 -0
  568. package/dist/tools/auto-open-tools.cjs +2 -0
  569. package/dist/tools/auto-open-tools.cjs.map +1 -1
  570. package/dist/tools/auto-open-tools.js +2 -0
  571. package/dist/tools/auto-open-tools.js.map +1 -1
  572. package/dist/tools/file-tool-uis.cjs +18 -43
  573. package/dist/tools/file-tool-uis.cjs.map +1 -1
  574. package/dist/tools/file-tool-uis.d.ts +1 -2
  575. package/dist/tools/file-tool-uis.js +18 -42
  576. package/dist/tools/file-tool-uis.js.map +1 -1
  577. package/dist/tools/index.cjs +6 -2
  578. package/dist/tools/index.cjs.map +1 -1
  579. package/dist/tools/index.d.ts +1 -0
  580. package/dist/tools/index.js +6 -2
  581. package/dist/tools/index.js.map +1 -1
  582. package/dist/tools/misc-tool-uis.cjs +2 -2
  583. package/dist/tools/misc-tool-uis.js +2 -2
  584. package/dist/tools/primitives.cjs +1 -1
  585. package/dist/tools/primitives.js +1 -1
  586. package/dist/tools/read-asset-tool-ui.cjs +21 -70
  587. package/dist/tools/read-asset-tool-ui.cjs.map +1 -1
  588. package/dist/tools/read-asset-tool-ui.js +21 -70
  589. package/dist/tools/read-asset-tool-ui.js.map +1 -1
  590. package/dist/tools/step-text.cjs +21 -0
  591. package/dist/tools/step-text.cjs.map +1 -0
  592. package/dist/tools/step-text.d.ts +10 -0
  593. package/dist/tools/step-text.js +21 -0
  594. package/dist/tools/step-text.js.map +1 -0
  595. package/dist/tools/tool-fallback.cjs +24 -5
  596. package/dist/tools/tool-fallback.cjs.map +1 -1
  597. package/dist/tools/tool-fallback.d.ts +3 -1
  598. package/dist/tools/tool-fallback.js +24 -5
  599. package/dist/tools/tool-fallback.js.map +1 -1
  600. package/dist/tools/tool-summary.cjs +661 -0
  601. package/dist/tools/tool-summary.cjs.map +1 -0
  602. package/dist/tools/tool-summary.d.ts +99 -0
  603. package/dist/tools/tool-summary.js +661 -0
  604. package/dist/tools/tool-summary.js.map +1 -0
  605. package/dist/tools/tool-uis.cjs +37 -95
  606. package/dist/tools/tool-uis.cjs.map +1 -1
  607. package/dist/tools/tool-uis.js +37 -95
  608. package/dist/tools/tool-uis.js.map +1 -1
  609. package/dist/tools/voice-update-tool-ui.cjs +1 -1
  610. package/dist/tools/voice-update-tool-ui.js +1 -1
  611. package/dist/tools/write-todos-tool-ui.cjs +3 -2
  612. package/dist/tools/write-todos-tool-ui.cjs.map +1 -1
  613. package/dist/tools/write-todos-tool-ui.d.ts +5 -0
  614. package/dist/tools/write-todos-tool-ui.js +5 -4
  615. package/dist/tools/write-todos-tool-ui.js.map +1 -1
  616. package/dist/ui/popover.cjs +6 -6
  617. package/dist/ui/popover.cjs.map +1 -1
  618. package/dist/ui/popover.js +6 -6
  619. package/dist/ui/popover.js.map +1 -1
  620. package/dist/ui/tooltip.cjs +16 -2
  621. package/dist/ui/tooltip.cjs.map +1 -1
  622. package/dist/ui/tooltip.d.ts +1 -1
  623. package/dist/ui/tooltip.js +16 -2
  624. package/dist/ui/tooltip.js.map +1 -1
  625. package/dist/version.cjs +1 -1
  626. package/dist/version.js +1 -1
  627. package/dist/voice/use-athena-voice-session.cjs.map +1 -1
  628. package/dist/voice/use-athena-voice-session.d.ts +3 -3
  629. package/dist/voice/use-athena-voice-session.js.map +1 -1
  630. package/dist/workbench/SessionWorkbench.cjs +378 -0
  631. package/dist/workbench/SessionWorkbench.cjs.map +1 -0
  632. package/dist/workbench/SessionWorkbench.d.ts +30 -0
  633. package/dist/workbench/SessionWorkbench.js +378 -0
  634. package/dist/workbench/SessionWorkbench.js.map +1 -0
  635. package/dist/workbench/session-workbench-context.cjs +26 -0
  636. package/dist/workbench/session-workbench-context.cjs.map +1 -0
  637. package/dist/workbench/session-workbench-context.d.ts +55 -0
  638. package/dist/workbench/session-workbench-context.js +26 -0
  639. package/dist/workbench/session-workbench-context.js.map +1 -0
  640. package/dist/workbench/session-workbench-model.cjs +288 -0
  641. package/dist/workbench/session-workbench-model.cjs.map +1 -0
  642. package/dist/workbench/session-workbench-model.d.ts +168 -0
  643. package/dist/workbench/session-workbench-model.js +288 -0
  644. package/dist/workbench/session-workbench-model.js.map +1 -0
  645. package/dist/workbench/session-workbench-panes.cjs +580 -0
  646. package/dist/workbench/session-workbench-panes.cjs.map +1 -0
  647. package/dist/workbench/session-workbench-panes.d.ts +16 -0
  648. package/dist/workbench/session-workbench-panes.js +580 -0
  649. package/dist/workbench/session-workbench-panes.js.map +1 -0
  650. package/dist/workbench/session-workspace-api.cjs +157 -0
  651. package/dist/workbench/session-workspace-api.cjs.map +1 -0
  652. package/dist/workbench/session-workspace-api.d.ts +70 -0
  653. package/dist/workbench/session-workspace-api.js +157 -0
  654. package/dist/workbench/session-workspace-api.js.map +1 -0
  655. package/dist/workbench/use-session-workspace.cjs +100 -0
  656. package/dist/workbench/use-session-workspace.cjs.map +1 -0
  657. package/dist/workbench/use-session-workspace.d.ts +45 -0
  658. package/dist/workbench/use-session-workspace.js +100 -0
  659. package/dist/workbench/use-session-workspace.js.map +1 -0
  660. package/dist/workbench/workbench-layout-context.cjs +10 -0
  661. package/dist/workbench/workbench-layout-context.cjs.map +1 -0
  662. package/dist/workbench/workbench-layout-context.d.ts +17 -0
  663. package/dist/workbench/workbench-layout-context.js +10 -0
  664. package/dist/workbench/workbench-layout-context.js.map +1 -0
  665. package/package.json +21 -10
  666. package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.cjs +0 -77
  667. package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.cjs.map +0 -1
  668. package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.js +0 -77
  669. package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.js.map +0 -1
  670. package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.cjs +0 -181
  671. package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.cjs.map +0 -1
  672. package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.js +0 -181
  673. package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.js.map +0 -1
  674. package/dist/packages/agent-runtime/src/asset-attachment.cjs.map +0 -1
  675. package/dist/packages/agent-runtime/src/asset-attachment.js.map +0 -1
  676. package/dist/packages/agent-runtime/src/auth-denial.cjs.map +0 -1
  677. package/dist/packages/agent-runtime/src/auth-denial.js.map +0 -1
  678. package/dist/packages/agent-runtime/src/client-tool-bridge.cjs.map +0 -1
  679. package/dist/packages/agent-runtime/src/client-tool-bridge.js.map +0 -1
  680. package/dist/packages/agent-runtime/src/client-tools.cjs.map +0 -1
  681. package/dist/packages/agent-runtime/src/client-tools.js.map +0 -1
  682. package/dist/packages/agent-runtime/src/conversation-index.cjs.map +0 -1
  683. package/dist/packages/agent-runtime/src/conversation-index.js.map +0 -1
  684. package/dist/packages/agent-runtime/src/conversation-list.cjs.map +0 -1
  685. package/dist/packages/agent-runtime/src/conversation-list.js.map +0 -1
  686. package/dist/packages/agent-runtime/src/deep-agent-transport-recipe.cjs.map +0 -1
  687. package/dist/packages/agent-runtime/src/deep-agent-transport-recipe.js.map +0 -1
  688. package/dist/packages/agent-runtime/src/edit-command.cjs.map +0 -1
  689. package/dist/packages/agent-runtime/src/edit-command.js.map +0 -1
  690. package/dist/packages/agent-runtime/src/errors.cjs.map +0 -1
  691. package/dist/packages/agent-runtime/src/errors.js.map +0 -1
  692. package/dist/packages/agent-runtime/src/generated/runconfig-contract.cjs.map +0 -1
  693. package/dist/packages/agent-runtime/src/generated/runconfig-contract.js.map +0 -1
  694. package/dist/packages/agent-runtime/src/github-wake-event.cjs.map +0 -1
  695. package/dist/packages/agent-runtime/src/github-wake-event.js.map +0 -1
  696. package/dist/packages/agent-runtime/src/interrupts.cjs.map +0 -1
  697. package/dist/packages/agent-runtime/src/interrupts.js.map +0 -1
  698. package/dist/packages/agent-runtime/src/message-author.cjs.map +0 -1
  699. package/dist/packages/agent-runtime/src/message-author.js.map +0 -1
  700. package/dist/packages/agent-runtime/src/message-window.cjs.map +0 -1
  701. package/dist/packages/agent-runtime/src/message-window.js.map +0 -1
  702. package/dist/packages/agent-runtime/src/messages.cjs.map +0 -1
  703. package/dist/packages/agent-runtime/src/messages.js.map +0 -1
  704. package/dist/packages/agent-runtime/src/model-context.cjs.map +0 -1
  705. package/dist/packages/agent-runtime/src/model-context.js.map +0 -1
  706. package/dist/packages/agent-runtime/src/optimistic-content.cjs.map +0 -1
  707. package/dist/packages/agent-runtime/src/optimistic-content.js.map +0 -1
  708. package/dist/packages/agent-runtime/src/protocol.cjs.map +0 -1
  709. package/dist/packages/agent-runtime/src/protocol.js.map +0 -1
  710. package/dist/packages/agent-runtime/src/queue.cjs.map +0 -1
  711. package/dist/packages/agent-runtime/src/queue.js.map +0 -1
  712. package/dist/packages/agent-runtime/src/quota-safe-local-storage-session.cjs.map +0 -1
  713. package/dist/packages/agent-runtime/src/quota-safe-local-storage-session.js.map +0 -1
  714. package/dist/packages/agent-runtime/src/runtime-messages.cjs.map +0 -1
  715. package/dist/packages/agent-runtime/src/runtime-messages.js.map +0 -1
  716. package/dist/packages/agent-runtime/src/screen-point.cjs.map +0 -1
  717. package/dist/packages/agent-runtime/src/screen-point.js.map +0 -1
  718. package/dist/packages/agent-runtime/src/send-recovery.cjs.map +0 -1
  719. package/dist/packages/agent-runtime/src/send-recovery.js.map +0 -1
  720. package/dist/packages/agent-runtime/src/statewire-attach-observer.cjs.map +0 -1
  721. package/dist/packages/agent-runtime/src/statewire-attach-observer.js.map +0 -1
  722. package/dist/packages/agent-runtime/src/statewire-state.cjs.map +0 -1
  723. package/dist/packages/agent-runtime/src/statewire-state.js.map +0 -1
  724. package/dist/packages/agent-runtime/src/statewire-suspended.cjs.map +0 -1
  725. package/dist/packages/agent-runtime/src/statewire-suspended.js.map +0 -1
  726. package/dist/packages/agent-runtime/src/statewire-transport.cjs +0 -11
  727. package/dist/packages/agent-runtime/src/statewire-transport.cjs.map +0 -1
  728. package/dist/packages/agent-runtime/src/statewire-transport.js +0 -11
  729. package/dist/packages/agent-runtime/src/statewire-transport.js.map +0 -1
  730. package/dist/packages/agent-runtime/src/streaming-markdown.cjs.map +0 -1
  731. package/dist/packages/agent-runtime/src/streaming-markdown.js.map +0 -1
  732. package/dist/packages/agent-runtime/src/thread-extras.cjs.map +0 -1
  733. package/dist/packages/agent-runtime/src/thread-extras.js.map +0 -1
  734. package/dist/packages/agent-runtime/src/thread-snapshot-cache.cjs.map +0 -1
  735. package/dist/packages/agent-runtime/src/thread-snapshot-cache.js.map +0 -1
  736. package/dist/packages/agent-runtime/src/thread-status.cjs.map +0 -1
  737. package/dist/packages/agent-runtime/src/thread-status.js.map +0 -1
  738. package/dist/packages/agent-runtime/src/tool-metadata.cjs.map +0 -1
  739. package/dist/packages/agent-runtime/src/tool-metadata.js.map +0 -1
  740. package/dist/packages/agent-runtime/src/tool-outputs.cjs.map +0 -1
  741. package/dist/packages/agent-runtime/src/tool-outputs.js.map +0 -1
  742. package/dist/packages/agent-runtime/src/tool-result.cjs.map +0 -1
  743. package/dist/packages/agent-runtime/src/tool-result.js.map +0 -1
  744. package/dist/packages/agent-runtime/src/use-conversation-list.cjs.map +0 -1
  745. package/dist/packages/agent-runtime/src/use-conversation-list.js.map +0 -1
  746. package/dist/packages/agent-runtime/src/use-deep-agent-config.cjs +0 -13
  747. package/dist/packages/agent-runtime/src/use-deep-agent-config.cjs.map +0 -1
  748. package/dist/packages/agent-runtime/src/use-deep-agent-config.js +0 -13
  749. package/dist/packages/agent-runtime/src/use-deep-agent-config.js.map +0 -1
  750. package/dist/packages/agent-runtime/src/use-deep-agent-edit-submit.cjs.map +0 -1
  751. package/dist/packages/agent-runtime/src/use-deep-agent-edit-submit.js.map +0 -1
  752. package/dist/packages/agent-runtime/src/use-deep-agent-runtime.cjs.map +0 -1
  753. package/dist/packages/agent-runtime/src/use-deep-agent-runtime.js.map +0 -1
  754. package/dist/packages/agent-runtime/src/use-deep-agent-thread.cjs.map +0 -1
  755. package/dist/packages/agent-runtime/src/use-deep-agent-thread.js.map +0 -1
  756. package/dist/packages/agent-runtime/src/use-deep-agent-window-sync.cjs.map +0 -1
  757. package/dist/packages/agent-runtime/src/use-deep-agent-window-sync.js.map +0 -1
  758. package/dist/packages/agent-runtime/src/voice-presentation.cjs.map +0 -1
  759. package/dist/packages/agent-runtime/src/voice-presentation.js.map +0 -1
  760. package/dist/packages/agent-runtime/src/voice-turn-grouping.cjs.map +0 -1
  761. package/dist/packages/agent-runtime/src/voice-turn-grouping.js.map +0 -1
  762. package/dist/packages/tiptap-markdown-table/src/markdown-table-serializer.cjs.map +0 -1
  763. package/dist/packages/tiptap-markdown-table/src/markdown-table-serializer.js.map +0 -1
  764. /package/dist/{packages/agent-runtime → agent-runtime}/src/asset-attachment.cjs +0 -0
  765. /package/dist/{packages/agent-runtime → agent-runtime}/src/asset-attachment.js +0 -0
  766. /package/dist/{packages/agent-runtime → agent-runtime}/src/auth-denial.cjs +0 -0
  767. /package/dist/{packages/agent-runtime → agent-runtime}/src/auth-denial.js +0 -0
  768. /package/dist/{packages/agent-runtime → agent-runtime}/src/client-tool-bridge.cjs +0 -0
  769. /package/dist/{packages/agent-runtime → agent-runtime}/src/client-tool-bridge.js +0 -0
  770. /package/dist/{packages/agent-runtime → agent-runtime}/src/client-tools.cjs +0 -0
  771. /package/dist/{packages/agent-runtime → agent-runtime}/src/client-tools.js +0 -0
  772. /package/dist/{packages/agent-runtime → agent-runtime}/src/conversation-index.cjs +0 -0
  773. /package/dist/{packages/agent-runtime → agent-runtime}/src/conversation-index.js +0 -0
  774. /package/dist/{packages/agent-runtime → agent-runtime}/src/edit-command.cjs +0 -0
  775. /package/dist/{packages/agent-runtime → agent-runtime}/src/edit-command.js +0 -0
  776. /package/dist/{packages/agent-runtime → agent-runtime}/src/github-wake-event.cjs +0 -0
  777. /package/dist/{packages/agent-runtime → agent-runtime}/src/github-wake-event.js +0 -0
  778. /package/dist/{packages/agent-runtime → agent-runtime}/src/message-author.cjs +0 -0
  779. /package/dist/{packages/agent-runtime → agent-runtime}/src/message-author.js +0 -0
  780. /package/dist/{packages/agent-runtime → agent-runtime}/src/message-window.cjs +0 -0
  781. /package/dist/{packages/agent-runtime → agent-runtime}/src/message-window.js +0 -0
  782. /package/dist/{packages/agent-runtime → agent-runtime}/src/model-context.cjs +0 -0
  783. /package/dist/{packages/agent-runtime → agent-runtime}/src/model-context.js +0 -0
  784. /package/dist/{packages/agent-runtime → agent-runtime}/src/optimistic-content.cjs +0 -0
  785. /package/dist/{packages/agent-runtime → agent-runtime}/src/optimistic-content.js +0 -0
  786. /package/dist/{packages/agent-runtime → agent-runtime}/src/protocol.cjs +0 -0
  787. /package/dist/{packages/agent-runtime → agent-runtime}/src/protocol.js +0 -0
  788. /package/dist/{packages/agent-runtime → agent-runtime}/src/runtime-messages.cjs +0 -0
  789. /package/dist/{packages/agent-runtime → agent-runtime}/src/runtime-messages.js +0 -0
  790. /package/dist/{packages/agent-runtime → agent-runtime}/src/screen-point.cjs +0 -0
  791. /package/dist/{packages/agent-runtime → agent-runtime}/src/screen-point.js +0 -0
  792. /package/dist/{packages/agent-runtime → agent-runtime}/src/send-recovery.cjs +0 -0
  793. /package/dist/{packages/agent-runtime → agent-runtime}/src/send-recovery.js +0 -0
  794. /package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-attach-observer.cjs +0 -0
  795. /package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-attach-observer.js +0 -0
  796. /package/dist/{packages/agent-runtime → agent-runtime}/src/streaming-markdown.cjs +0 -0
  797. /package/dist/{packages/agent-runtime → agent-runtime}/src/streaming-markdown.js +0 -0
  798. /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-extras.cjs +0 -0
  799. /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-extras.js +0 -0
  800. /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-snapshot-cache.cjs +0 -0
  801. /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-snapshot-cache.js +0 -0
  802. /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-status.cjs +0 -0
  803. /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-status.js +0 -0
  804. /package/dist/{packages/agent-runtime → agent-runtime}/src/tool-outputs.cjs +0 -0
  805. /package/dist/{packages/agent-runtime → agent-runtime}/src/tool-outputs.js +0 -0
  806. /package/dist/{packages/agent-runtime → agent-runtime}/src/tool-result.cjs +0 -0
  807. /package/dist/{packages/agent-runtime → agent-runtime}/src/tool-result.js +0 -0
  808. /package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-runtime.cjs +0 -0
  809. /package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-runtime.js +0 -0
  810. /package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-window-sync.cjs +0 -0
  811. /package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-window-sync.js +0 -0
  812. /package/dist/{packages/agent-runtime → agent-runtime}/src/voice-turn-grouping.cjs +0 -0
  813. /package/dist/{packages/agent-runtime → agent-runtime}/src/voice-turn-grouping.js +0 -0
  814. /package/dist/{packages/react → react}/package.json.cjs.map +0 -0
  815. /package/dist/{packages/react → react}/package.json.js.map +0 -0
  816. /package/dist/{packages/tiptap-markdown-table → tiptap-markdown-table}/src/markdown-table-serializer.cjs +0 -0
  817. /package/dist/{packages/tiptap-markdown-table → tiptap-markdown-table}/src/markdown-table-serializer.js +0 -0
package/README.md CHANGED
@@ -16,6 +16,18 @@ npm install @propelauth/react
16
16
 
17
17
  ## Upgrading
18
18
 
19
+ SDK0.29.0 uses native Statewire wire2026-09-30 with Athena application2026-09-13
20
+ when installed with public, unpatched dependencies, over HTTP/SSE: published
21
+ statewire0.20.0 pings a WebSocket with empty frames that Athena's hosts reject,
22
+ so the SDK opens a socket only over the patched client the monorepo's own apps
23
+ install. It requires a compatible backend. Publication is temporarily withheld until production HTTP+WebSocket
24
+ and authorization tests pass and a compatible backend rollback release is
25
+ retained. The publish workflow requires a manual
26
+ `PRODUCTION_NATIVE_CONTEXT_AND_ROLLBACK_QUALIFIED` acknowledgement; dry runs
27
+ remain available. Computer templates keep SDK0.28.0 until the qualified
28
+ release is published. The qualification steps and gate removal condition are
29
+ in the [coordinated release runbook](../../docs/runbooks/coordinated-client-releases.md#public-native-context-publication-gate).
30
+
19
31
  The SDK pins its assistant-ui runtime (`@assistant-ui/tap`, `store`, `core`,
20
32
  `react`, `react-statewire`, `statewire`) at exact versions, and those packages
21
33
  carry React contexts and module singletons: an app must resolve exactly **one**
@@ -104,6 +116,78 @@ function App() {
104
116
 
105
117
  `config` accepts `apiKey`, `token`, `getToken`, `apiUrl`, `backendUrl`, `appUrl`, `statewireSyncUrl`, `trustedParentOrigins`, `environment`, `extraRunConfig`, and `posthog`. Top-level `apiKey`, `token`, `apiUrl`, `backendUrl`, `appUrl`, and `environment` props remain supported as compatibility aliases, but `config` is now the preferred API.
106
118
 
119
+ ### Several chats side by side
120
+
121
+ A host can show several chats at once: one `AthenaProvider` with `enableThreadList` drives the
122
+ session list and its chat, and each further chat is an `AthenaProvider` of its own, bound to one
123
+ thread with `threadId`, mounted anywhere in the tree (under the first one too):
124
+
125
+ ```tsx
126
+ const [thread] = useState(() => ({ threadId: mintThreadId(), isNew: true }));
127
+
128
+ <AthenaProvider config={config} threadId={thread.threadId} threadIsNew={thread.isNew}>
129
+ <AttachmentProvider store={attachments}>
130
+ <QuoteProvider store={quote}>
131
+ <AthenaChat />
132
+ </QuoteProvider>
133
+ </AttachmentProvider>
134
+ </AthenaProvider>
135
+ ```
136
+
137
+ - `threadIsNew` says the host minted `threadId` (`mintThreadId`) for a chat that has not started:
138
+ it attaches as new until the host turns it false, once the session list has the thread.
139
+ - Each provider's assistant client is its own root, and one without a thread list hides any list
140
+ above it, so a chat never defines another's tools or follows its thread.
141
+ - `createAttachmentStore()` / `createQuoteStore()` give each chat's composer its own staged
142
+ attachments and quote (`<AttachmentProvider store>`, `<QuoteProvider store>`), kept outside React
143
+ so they survive the chat remounting in another window.
144
+ - ⌘L quotes a selection into the chat it was made in, and one made outside every chat (or an
145
+ embedded frame's text) into the chat the person last focused.
146
+ - `SessionList`'s `onOpenInNewTab` hands the host a session to open in such a chat.
147
+
148
+ ### A model picker, and a session's own model
149
+
150
+ Pass the picked model as `model`. Changing it while a session is open applies
151
+ to that session's next turn:
152
+
153
+ - On a session that has not run yet, the next send carries it, and the server
154
+ keeps it as the session's model.
155
+ - On a session that has run, the server runs every turn with the model the
156
+ session's server config holds (another client, such as Athena itself, can
157
+ change it too), so the SDK writes the new model there
158
+ (`config/patch {model}`). Setting `model` back to `undefined` clears it, so
159
+ the collab agent's own model, or the default, applies again.
160
+ - The model a session is opened with is never written: opening a session never
161
+ overrides the model someone chose for it.
162
+
163
+ Show the session's real model when it opens with `useAthenaThreadModel()`
164
+ (inside `<AthenaProvider>`):
165
+
166
+ ```tsx
167
+ import { useAthenaThreadModel, useAthenaStatewireThreadId } from '@athenaintel/react';
168
+ import { useEffect, useRef } from 'react';
169
+
170
+ function SessionModelSeed({ onSessionModel }: { onSessionModel: (model: string | null) => void }) {
171
+ const threadId = useAthenaStatewireThreadId();
172
+ const { model, configured, ready } = useAthenaThreadModel();
173
+ const seededFor = useRef<string | null>(null);
174
+ useEffect(() => {
175
+ // Once per session, after its snapshot lands; a session without server
176
+ // config keeps the picker's current value.
177
+ if (!ready || seededFor.current === threadId) return;
178
+ seededFor.current = threadId;
179
+ if (configured) onSessionModel(model); // null: the agent's / default model ("Auto")
180
+ }, [threadId, model, configured, ready, onSessionModel]);
181
+ return null;
182
+ }
183
+ ```
184
+
185
+ `model` is `null` when the session pins no model; `configured` is `false` for
186
+ a session without server config yet; wait for `ready` before reading either. A
187
+ refused write (a view-only collaborator, or a workspace whose sessions cannot
188
+ hold server config) is reported as a `statewire.config` diagnostics event, and
189
+ the session keeps running with its own model.
190
+
107
191
  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.
108
192
 
109
193
  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").
@@ -174,8 +258,9 @@ What the statewire transport wires up in `AthenaChat`:
174
258
  `icon`, `extraAction`, `notice`, `renderResult`, `onOpenAsset`,
175
259
  `hideInternalIdArgs`) instead of being copied. `@athenaintel/react/super-grouping`
176
260
  exports the grouped ("conversational") view of an assistant turn —
177
- `SuperGroupingCard`, `SuperGroupingFinalText`, `CollapsibleGroup`, the
178
- activity-timeline derivation, and the tool-based grouping function — with
261
+ `SuperGroupingTranscript` (what `AthenaChat` renders), `SuperGroupingCard`,
262
+ `SuperGroupingFinalText`, `CollapsibleGroup`, the activity-timeline
263
+ derivation, and the tool-based grouping function — with
179
264
  slots for the host's text/tool renderers and controls (`renderHeaderActions`,
180
265
  `renderRunningMeta`, `summaryDetails`, `waitingTools`, `expansionKey`), so
181
266
  Olympus and the Chrome extension mount one card instead of copies.
@@ -196,7 +281,17 @@ What the statewire transport wires up in `AthenaChat`:
196
281
  paywall refusals) render as a dismissible banner; a degraded connection
197
282
  shows a reconnect strip; a send into a thread created by the retired legacy
198
283
  runtime is refused with a dismissible read-only notice (start a new chat).
199
- Custom hosts can read all of it via `useAthenaStatewireLifecycle`.
284
+ A send the server admits but refuses to START — a session keeps the
285
+ collab-agent channel (the app's mode) it began on, so a send in the other
286
+ mode is refused with `collab_agent_channel_session_mismatch` — leaves the
287
+ message queued and the run in `error`; `StatewireRunRefusalNotice` (mounted
288
+ by `AthenaChat` above the queue) shows the server's `detail.message` and, for
289
+ that code, a "Start a new session" action (the thread list's `newThread`).
290
+ The same code on a rejected command reaches `StatewireErrorBanner` with the
291
+ same action (`AthenaStatewireErrorNotice.code`). `readRunStartRefusal` and
292
+ `COLLAB_AGENT_CHANNEL_SESSION_MISMATCH` are exported for hosts with their
293
+ own thread UI. Custom hosts can read all of it via
294
+ `useAthenaStatewireLifecycle`.
200
295
  - **Thread list:** `enableThreadList` provides the persisted Agora session
201
296
  list; switching threads (or starting a new chat) re-attaches the statewire
202
297
  session to the selected thread while the host's own `children` stay
@@ -248,6 +343,7 @@ server omits them and the SDK reads `undefined`):
248
343
  | `attention_source` | `attentionSource` | `interrupt` · `run` · `pull_request` · `termination` · `wake` · `handoff` |
249
344
  | `is_favorited` | `isFavorited` | boolean — toggled through `setFavorited` / `POST /api/conversations/threads/favorite` |
250
345
  | `last_wake` | `lastWake` | `{ source, reason, at }` |
346
+ | `created_by_me` | `createdByMe` | boolean — the viewer started the session (`false`: shared with them) |
251
347
  | `pull_requests` (opt-in: `include_pull_requests`) | `pullRequests` | `[{ repoFullName, number, url, title, state OPEN/CLOSED/MERGED, isDraft, reviewDecision, checksState SUCCESS/FAILURE/PENDING/NONE, updatedAt }]` — `[]` none, `null` unreadable right now |
252
348
 
253
349
  The per-user conversation index pushes `attention`, `next_action`,
@@ -277,6 +373,10 @@ Same visual language as `ThreadList` (Tailwind via `cn`, lucide icons), plus:
277
373
  - a trailing action cluster per row, revealed on hover / focus (a pinned pin
278
374
  and any action whose write is in flight stay visible) — every action a
279
375
  labelled `<button>` that is a sibling of the row control, never nested:
376
+ - **Open in new tab** (prop `onOpenInNewTab`, absent by default): hands the
377
+ host `{ threadId, title }` instead of selecting the row, as does a
378
+ ⌘-click (Ctrl-click) or middle-click on the row (see "Several chats side
379
+ by side");
280
380
  - **Rename** (prop `showRename`, default `true`): the title becomes an
281
381
  input in place; Enter commits, Escape cancels, blur commits; an unchanged
282
382
  or empty title is never sent; the row shows the new title at once and
@@ -315,7 +415,10 @@ Same visual language as `ThreadList` (Tailwind via `cn`, lucide icons), plus:
315
415
  answer (`hasResolvedFirstPage`); a background refresh keeps the rows it has;
316
416
  - a search box wired to the server-side `search` (prop `showSearch`, default
317
417
  `true`), `Load more` over the shared pager, and `New Chat` / refresh as in
318
- `ThreadList`.
418
+ `ThreadList` (prop `showNewChat`, default `true`; `false` for a host with
419
+ its own new-session control);
420
+ - an origin badge per row (prop `originBadges`: `'all'` by default,
421
+ `'external'` to leave sessions started in the web app unbadged, `'none'`).
319
422
 
320
423
  The pin writes `POST /api/conversations/threads/favorite`
321
424
  (`{ thread_id, is_favorited }` → the server's state after the write) with the
@@ -385,6 +488,193 @@ only when it is an `https://github.com/<repo>/…` URL for that repository
385
488
  The full message text always reaches the model; the marker is provenance for
386
489
  rendering only.
387
490
 
491
+ ## Sessions page and inbox
492
+
493
+ A full-page, Devin-style session list and a notifications inbox, both on top
494
+ of `enableThreadList` and live through the same conversation index as
495
+ `SessionList`:
496
+
497
+ ```tsx
498
+ import { AthenaProvider, InboxButton, SessionsPage } from '@athenaintel/react';
499
+
500
+ <AthenaProvider enableThreadList config={{ token }}>
501
+ <header><InboxButton onOpenSession={() => showChat()} /></header>
502
+ <SessionsPage
503
+ onOpenSession={() => showChat()}
504
+ labels={{ agents: { asset_123: 'Athena Engineer' }, channels: { ask: 'Ask' } }}
505
+ />
506
+ </AthenaProvider>
507
+ ```
508
+
509
+ ### `SessionsPage`
510
+
511
+ - **Filters the server applies.** A Filter menu (status, pull requests,
512
+ unread, pinned, creator, who started it, agent, mode, origin, created /
513
+ updated date) and a title search. Each filter travels to
514
+ `POST /api/conversations/threads/list` as a predicate of the server's one
515
+ page statement, ANDed onto the list's unchanged permission gate — a filter
516
+ only narrows what the viewer already sees, and `Load more` continues the
517
+ filtered set. Active filters show as removable chips; **Save as default**
518
+ remembers them in this browser (`storageKey` namespaces it), **Reset to
519
+ default** goes back.
520
+ - **Display options.** Sort by last update or creation, newest or oldest
521
+ first; group by what each session needs (Needs you, Working, Ready,
522
+ Waiting, Error, Done), by run status, or not at all; show or hide the
523
+ Status, Origin, Mode, Pull requests, Creator, Created and Updated columns
524
+ (remembered per browser).
525
+ - **A status column that says what to do.** `sessionStatusChip`: the server's
526
+ next action where the person must act ("Approve send email", "Merge #12"),
527
+ else Working / Sleeping (a follow-up is pending) / Waiting / Error /
528
+ PR merged / Done — an orange, blue, green, violet, red or grey dot by
529
+ attention.
530
+ - **Row actions** (revealed on hover / focus): mark read / unread
531
+ (`setReadState` → `POST /api/conversations/threads/read-state`), pin,
532
+ archive — the provider's writes, so the row flips in every list at once.
533
+ - **Export CSV** of the loaded rows (`sessionsCsv`; cells a spreadsheet would
534
+ run as a formula are prefixed with `'`).
535
+
536
+ ### `Inbox` / `InboxButton`
537
+
538
+ The inbox is the viewer's own sessions, newest activity first, minus the ones
539
+ dismissed from it — read through the same route with `created_by_me` +
540
+ `exclude_dismissed` (`INBOX_QUERY`; the Unread tab adds `unread_only`). No
541
+ endpoint of its own. Each row: an unread dot, the title, the latest message
542
+ (two lines), a state chip (`inboxStateChip`: Needs you, Working, PR ready,
543
+ Sleeping, Waiting, Error, PR merged, PR closed, Answered) and the time.
544
+ Opening a row selects the session and marks it read; **Mark all read** marks
545
+ the loaded unread rows; **Dismiss** uses
546
+ `POST /api/conversations/threads/notifications/dismiss` (EDIT on the
547
+ session — a dismissed session comes back with its next message).
548
+ `InboxButton` is a bell with the unread count (`useAthenaInboxUnreadCount`,
549
+ the Unread tab's first page: `50+` past one page) that opens the inbox in a
550
+ popover.
551
+
552
+ ### Server filters and older servers
553
+
554
+ `useAthenaSessions({ query })` is the data layer both components use, for
555
+ hosts drawing their own rows. `query` is an `AthenaSessionsQuery`:
556
+
557
+ | Field | Server field | Meaning |
558
+ |---|---|---|
559
+ | `search` | `search` | case-insensitive title match |
560
+ | `runStatuses` / `sessionStatuses` | `run_statuses` / `session_statuses` | status_v2 planes (`running` leaves out runs silent for 12 hours, as every list does) |
561
+ | `unreadOnly` | `unread_only` | not read since it last changed (the read receipt) |
562
+ | `favoritesOnly` | `favorites_only` | pinned by the viewer |
563
+ | `hasPullRequests` | `has_pull_requests` | opened a pull request (`true`) or none (`false`) |
564
+ | `createdByMe` | `created_by_me` | the viewer's own (`true`) or shared with them (`false`) |
565
+ | `collabAgentIds` / `collabChannelIds` | `collab_agent_ids` / `collab_channel_ids` | the collab agent and its channel (mode); `'default'` (`DEFAULT_COLLAB_CHANNEL`) is the agent's default channel; channels need an agent |
566
+ | `startChannels` | `start_channels` | where it started (`web`, `github`, `email`, …) |
567
+ | `createdAfter` / `createdBefore` / `updatedAfter` / `updatedBefore` | same, snake_case | ISO bounds, after inclusive, before exclusive |
568
+ | `excludeDismissed` / `excludeTriggered` | `exclude_dismissed` / `exclude_triggered` | not dismissed from the inbox / started by a person |
569
+ | `sort` / `direction` | `sort` / `direction` | `updated` or `created`, `desc` or `asc` |
570
+
571
+ An agora ignores request fields it does not know, so every list response now
572
+ names the filters it applies (`supported_filters`). The hook reads that once
573
+ per identity (a one-row probe) and splits the query (`planSessionsQuery`):
574
+ fields the server applies are sent; fields it cannot are applied to the
575
+ loaded rows instead (`degradedFields` — exact per page, but a page can come
576
+ back short, and `SessionsPage` says so); fields the rows carry nothing to
577
+ test on (creator, dismissed; pull requests when the list does not fetch
578
+ them) are reported in `unsupportedFields` / `unavailableFields` and not
579
+ applied, so `SessionsPage` disables them rather than show wrong rows.
580
+ Server-applied filters are still checked on rows a live push changed, so a
581
+ session you just read leaves "Unread" and a finished one leaves "Running".
582
+ `listThreads` takes the server filters as `filters` (`ThreadListFilterBody`),
583
+ and `app_ids` (`additionalListAppIds`) now reaches the server: the request
584
+ body used to drop it.
585
+
586
+ ## Session workbench
587
+
588
+ A Devin-style workspace pane beside the chat for the active session: a tab
589
+ strip of panes, a "+" menu right after the tabs to open more (with a search
590
+ box; Enter opens the first match), closable tabs, a collapse to a rail, a
591
+ maximize that gives the workspace the chat's width (the chat stays mounted,
592
+ hidden), and a resizable edge. With every tab closed, the column lists each
593
+ pane with its `description`, centred, to open one.
594
+
595
+ ```tsx
596
+ import { AthenaChat, AthenaLayout, AthenaProvider, SessionList, SessionWorkbench } from '@athenaintel/react';
597
+
598
+ <AthenaProvider enableThreadList config={{ token }}>
599
+ <aside><SessionList /></aside>
600
+ <AthenaLayout workbench={<SessionWorkbench />}>
601
+ <AthenaChat />
602
+ </AthenaLayout>
603
+ </AthenaProvider>
604
+ ```
605
+
606
+ `AthenaLayout`'s `workbench` prop puts it in a right-hand column
607
+ (`defaultWorkbenchPercent`, default 40; `defaultWorkbenchCollapsed`). With a
608
+ workbench the layout opens no asset column of its own: assets the agent or the
609
+ person opens show as the workbench's **Open assets** tab (closing the tab
610
+ closes the asset panel). Maximize is offered only inside `AthenaLayout`, which
611
+ owns the column's width; collapsing a maximized workspace brings the chat back
612
+ beside the rail. `SessionWorkbench` also works on its own anywhere under
613
+ `<AthenaProvider>`; it then keeps its collapsed state itself.
614
+
615
+ Built-in panes and what each reads:
616
+
617
+ | Pane | id | Source |
618
+ |---|---|---|
619
+ | Tasks | `tasks` | The thread state's `todos` channel (the deepagents plan), else the newest `write_todos` call in the loaded transcript — "N/M done" and numbered steps with their status |
620
+ | Shell | `shell` | Every `execute` call in the loaded transcript, newest first: first line of the command, the machine it ran on (`sandbox_asset_id` named through the workspace's computers, else "Session sandbox"), the exit status parsed from `[Command succeeded/failed with exit code N]`, the time; searchable; a row expands to its output (first 4,000 characters) |
621
+ | Computer | `computer` | `GET /api/conversations/threads/{id}/workspace`: the session computer, else the most recent computer — its state (`GET /api/sandbox/computer/{id}/status`, a read that never wakes it, re-read every 30 s while shown), "Open in Athena", and "Copy SSH command" (`GET /api/v0/computer/{id}/ssh-access`, offered only when the viewer may edit the computer); the other computers it used below |
622
+ | Pull requests | `pull-requests` | The thread list's live pull-request state for the session (`enableThreadList`): number, title, state, checks and review decision, each a link to GitHub |
623
+ | Attachments | `attachments` | The workspace's assets — what the session created or edited — with type, last update, "Open in Athena", and a click that opens it in the asset panel when an `AthenaLayout` hosts one |
624
+
625
+ "Open in Athena" links go to the deployment's Athena frontend
626
+ (`athenaLinkAppUrl`): in an app a computer serves, Marathon's `/_athena/auth`
627
+ mints the app's own origin as `appUrl`, so a known Athena backend's frontend is
628
+ used instead. Every workspace read is gated server-side (thread access, then
629
+ each asset's own permission), so a pane lists only what the viewer may open. One query
630
+ serves every pane; it is idle for a never-started chat, re-reads every 15 s
631
+ while the run is live and once more as it settles, and is keyed by the
632
+ signed-in principal and a one-way credential fingerprint, so one account's
633
+ cached workspace is never shown to another. Open assets stay mounted (hidden)
634
+ while another pane shows or the workbench is a rail, so their viewers keep
635
+ their state.
636
+
637
+ **Tabs per thread.** Each thread keeps its open tabs and its active tab for as
638
+ long as the workbench stays mounted (in memory only — nothing is written to
639
+ storage); a thread it has not seen opens `defaultOpenPaneIds` (Tasks, Shell,
640
+ Computer).
641
+
642
+ **Custom panes.** `panes` is a registry: spread the built-ins and add your own.
643
+ A pane is `{ id, title, description?, icon?, render(context) }` (`description`
644
+ is the one line the empty column shows under the title), where `context` is
645
+ `{ threadId, isPersisted, isRunning }`; inside a pane,
646
+ `useSessionWorkbench()` reads the same context and
647
+ `useSessionWorkbenchWorkspace()` the shared workspace query.
648
+
649
+ ```tsx
650
+ import {
651
+ DEFAULT_SESSION_WORKBENCH_PANES,
652
+ SessionWorkbench,
653
+ type SessionWorkbenchPane,
654
+ } from '@athenaintel/react';
655
+ import { ScaleIcon } from 'lucide-react';
656
+
657
+ const MATTER_PANE: SessionWorkbenchPane = {
658
+ id: 'matter',
659
+ title: 'Matter',
660
+ icon: ScaleIcon,
661
+ render: ({ threadId, isPersisted }) =>
662
+ isPersisted && threadId ? <MatterSummary threadId={threadId} /> : <p>No matter yet.</p>,
663
+ };
664
+
665
+ <SessionWorkbench
666
+ panes={[...DEFAULT_SESSION_WORKBENCH_PANES, MATTER_PANE]}
667
+ defaultOpenPaneIds={['matter', 'tasks']}
668
+ />
669
+ ```
670
+
671
+ The built-in pane bodies (`SessionTasksPane`, `SessionShellPane`, …), their
672
+ registry entries (`SESSION_WORKBENCH_TASKS_PANE`, …), the data hooks
673
+ (`useAthenaSessionWorkspace`, `useAthenaComputerStatus`,
674
+ `useAthenaComputerSshAccess`) and the pure derivations behind them
675
+ (`deriveShellRows`, `filterShellRows`, `deriveTaskSteps`, `taskProgress`,
676
+ `workspaceComputers`) are exported for hosts composing their own.
677
+
388
678
  ## Voice Sessions (`@athenaintel/react/voice`)
389
679
 
390
680
  `useAthenaVoiceSession` runs a real-time voice conversation with an Athena
@@ -420,10 +710,10 @@ const voice = useAthenaVoiceSession({
420
710
  **Voice tools.** `enabled_tools` takes voice tool names (`AthenaVoiceToolId`),
421
711
  not the chat `Toolkits` ids — `'web_search_browse_toolkit'` is not a voice tool,
422
712
  `'web_search'` is. Available: `web_search` (`search_web` is a legacy alias),
423
- `browse` (read a URL), `search_knowledge_base` and `search_knowledge_base_lr`
424
- (the workspace knowledge base; `_lr` is the thorough long-running retrieval),
425
- `read_full_asset` and `search_assets` (as the viewer), `ask_agent` (hand a
426
- question to the general agent), `save_note`, `get_current_time_est`. Tools that
713
+ `browse` (read a URL), `read_full_asset` and `search_assets` (as the viewer),
714
+ `ask_agent` (hand a question to the general agent), `save_note`,
715
+ `get_current_time_est`. `search_knowledge_base` and `search_knowledge_base_lr`
716
+ are retired: still accepted, and ignored. Tools that
427
717
  call back into the client over room RPC (`write_to_clipboard`, the desktop and
428
718
  mobile tools) are not part of the hook's contract. Omit the field for the
429
719
  server's default set; pass `[]` for pure conversation. The server refuses
@@ -470,6 +760,56 @@ Both use the same bearer / API key as session creation. The full recipe
470
760
  template skill `voice-session-guide.md`. `createAthenaVoiceSession` is also
471
761
  exported if you hold the bridge state yourself.
472
762
 
763
+ ## What's new in 0.32.0
764
+
765
+ **A model picked after mount reaches the server.** The provider registered its run config once per thread attach, so a `model` (or `channel`, `tools`, `systemPrompt`, …) changed after mount never reached the next send unless something else happened to re-sync the context. The registration is now keyed by the built run config's value: a changed value re-syncs before the next send, while fresh array literals per render still change nothing.
766
+
767
+ **A model changed on a session that has run applies.** Once a session has server config, the server runs every turn with the model that config holds and ignores the one a send carries, so a picker change after the first turn used to be dropped. Changing `model` while such a session is open now writes it there (`config/patch {model}`; `undefined` clears it so the collab agent's own model applies). The model a session is opened with is never written. See [A model picker, and a session's own model](#a-model-picker-and-a-sessions-own-model).
768
+
769
+ **`useAthenaThreadModel()`** returns `{ model, configured, ready }`: the model the open session's server config holds, so an app can show a session's real model when it opens. A refused write is reported as the new `statewire.config` diagnostics event.
770
+
771
+ **A collab agent's session no longer records the SDK default as its model.** With `agent` set and no `model`, the run config's `panel_config` (which the server stores on the session's first run and replays to every client) carried `DEFAULT_STATEWIRE_MODEL`, so Athena showed that model for sessions running the agent's own. It now names no model there.
772
+
773
+ ## What's new in 0.31.0
774
+
775
+ **Draft tool cards stay in the conversation.** In the grouped view (`groupToolCalls`), a tool flagged `inline` in the shared display registry (`@athenaintel/agent-runtime` `ToolDisplayMeta.inline`; today the email and calendar-event draft tools) renders its card below the activity header, outside the "Used N tools" and "Show tool details" disclosures, and stays mounted whether the card is collapsed or not, so the person can edit and send the draft without opening anything. The call still appears as a step in the timeline, the run does not pause, and the card is not rendered a second time inside the details. The transcript view `AthenaChat` renders (`SuperGroupingTranscript`) does the same per activity segment: the draft card sits under its segment's step row, and a segment whose only step is a draft offers no empty "Show tool details". `SuperGroupingCard` and `SuperGroupingTranscript` take `isInlineTool` to override the registry per host; `excludePartsFromGroups` is exported for hosts that build their own grouped view.
776
+
777
+ ## What's new in 0.30.1
778
+
779
+ **Spoken words no longer retype from an empty bubble while a voice turn speaks over a run.** In the grouped (conversational) view, the answer below the card is the text after the last tool call plus the words of every spoken voice turn. `SuperGroupingFinalText` used to join those parts into one string, so when a spoken turn kept streaming while the run's own reply streamed after it, the joined text changed in the middle rather than at its end. `MarkdownText`'s streaming reveal restarts whenever its text stops extending what it showed, so the whole answer was wiped and retyped on every spoken word. Each answer part now renders through its own `TextComponent` (keyed by its content index) inside a `data-slot="super-grouping-final-text"` column, and only the last part carries the running status and caret. `getFinalTextParts` (with `FinalTextSegment`) is exported beside `getFinalText`, which still returns the joined string. Nothing to change in your app.
780
+
781
+ ## What's new in 0.30.0
782
+
783
+ **Session workbench, closer to Devin's.** The "+" menu now sits right after the tabs and has a search box (Enter opens the first match). Inside `AthenaLayout`, a maximize button gives the workspace the chat's width; the chat stays mounted, hidden, and collapsing a maximized workspace brings it back. With every tab closed, the column lists each pane centred with a one-line `description`, which is a new optional field on `SessionWorkbenchPane` that the built-in panes now carry. Tabs use 13px labels, and the close control stays quiet until the tab is hovered, focused or selected. Pure helper: `filterWorkbenchPanes`.
784
+
785
+ **`SessionList` options for hosts with their own chrome.** Set `showNewChat={false}` to drop the New Chat and refresh buttons when your sidebar has its own new-session control. `originBadges` picks which rows carry an origin badge: `'all'` (the default, as before), `'external'` (every origin except the web app, so sessions started in a browser tab of the app carry none, while Slack, GitHub, Chrome and the rest still do), or `'none'`. `sessionOriginBadge` and `WEB_APP_ORIGIN_LABEL` are exported.
786
+
787
+ **Composer hints.** `<AthenaChat composer={{ placeholder, runningPlaceholder }}>` sets the empty composer's hint. `runningPlaceholder` shows while a run is live, when a message steers or queues instead of starting a turn. The editor repaints a changed hint in place without being rebuilt.
788
+
789
+ **`@assistant-ui/store` 0.3.21.** Its client accessors answer `call`, `apply` and `bind` themselves, so apps whose bundler lowers optional chaining (Vite's default target) no longer crash on mount (#44102). No `build.target` workaround is needed.
790
+
791
+ ## What's new in 0.29.5
792
+
793
+ **No more "linkifyjs: already initialized" warning.** The chat text schema no longer passes `protocols: ["athena-point"]` to Tiptap's Link extension. Link registers those schemes with linkifyjs in every editor's `onCreate`, and linkifyjs accepts a new scheme only before its first scan, so every composer or message body created after the first one logged `linkifyjs: already initialized - will not register custom scheme "athena-point"`. Chrome shows it on an extension's Errors page. Screen-point chips are unchanged: they arrive as markdown links (`[label](athena-point://…)`), which parse without linkify, and the chat link allow-list still accepts the scheme. Only a bare `athena-point://…` string typed into the composer is no longer turned into a link by itself. Nothing to change in your app.
794
+
795
+ ## What's new in 0.29.4
796
+
797
+ **A streaming reply no longer jumps a line up and down in narrow panels.** The chat-ui message components no longer load `@assistant-ui/react-markdown/styles/dot.css`. That stylesheet put a pulsing "●" after the last block of every running message body, next to the body's own caret. The dot and its margins need about 17px at the end of the line, so in a narrow panel it wrapped onto its own line before the text did: the thread scrolled up one line, then the next word dropped down to join the dot. The caret is now the only streaming indicator. A message that has no text yet still shows the "Thinking..." indicator.
798
+
799
+ ## What's new in 0.29.3
800
+
801
+ **Tooltips, popovers and the composer's agent and model menus draw their own background again, in any host.** They render outside the provider wrapper, under `document.body`, carrying the `.athena-sdk` scope class for their tokens. That class is `display: contents` for the wrapper's sake, and nothing on a tooltip undid it, so every SDK tooltip lost its box: no background, padding or radius, just the text and the arrow. Themed popovers and pickers also carried `.athena-themed`, whose unlayered `display: contents` beat their `block`. A host whose own Tailwind compiles the same utility names against tokens in another format also broke them: shadcn's HSL channels, for example, make `bg-popover` `hsl(var(--popover))`, and that is invalid for the SDK's full colours, so the menu was transparent over the page. The portaled roots now set their box (`display: block`) and colours (`var(--popover)` / `var(--popover-foreground)` / `var(--border)` for panels, `var(--foreground)` on `var(--background)` for tooltips) inline, which no stylesheet rule beats; the theme's variables still apply through the same inline style. What your own `className` on `TooltipContent` sets stays yours: a colour or display class (`bg-red-600`, `hover:text-white`, `flex`) keeps that property out of the inline defaults, as before, and `style` overrides any of them. A tooltip's arrow follows the tooltip's background when that background is inline, whether it is the default or your `style`. Nothing to change in your app.
802
+
803
+ ## What's new in 0.29.2
804
+
805
+ Tool cards inside an expanded collapsible tool group and the super-grouping "Run details" panel are now spaced with flex `gap-2` instead of `space-y-2`, so cards wrapped in a `display: contents` element (e.g. a host's deep-link anchor) keep the 0.5rem gap between them; boxed children look the same as before. `SuperGroupingCard` also accepts `classNames.detailsParts` to tune the gap (or other classes) on the flex column the run's parts render in.
806
+
807
+ ## What's new in 0.29.1
808
+
809
+ **A running grouped turn shows one status line.** The activity card's header already says what the run is doing ("Thinking", "Preparing response", "Searching the web"); the elapsed counter that used to sit beneath it as a second row ("Working… · 11s", with its own pulsing dot) is now just the counter ("11s", "1m 05s"), inline on the header row to the right of the status and before the Stop control. It still appears after three seconds, turns amber once nothing has streamed for thirty, and is not shown while the card reads "Waiting for you". `SuperGroupingCard`'s `renderRunningMeta` slot keeps its signature; whatever a host returns is now placed on the header row (small, right-aligned) rather than on a line of its own, and only while the phase is `running`. Ungrouped threads (`groupToolCalls={false}`) and the per-tool-row counters are unchanged.
810
+
811
+ Two related fixes in the grouped card: a tool whose only result so far is the backend's streaming placeholder (`artifact._tool_message_metadata.streaming === true` — task subagents, studio and Python execution, deep research) now stays a running step, so the header keeps naming the tool instead of flipping to "Preparing response" while it still runs (`isStreamingToolPlaceholder` is exported from `super-grouping`); and the thirty-second stall is announced to screen readers through a polite live region, while the ticking counter itself stays out of it.
812
+
473
813
  ## What's new in 0.28.0
474
814
 
475
815
  **The iframe auth bridge only listens to the page that frames your app, and that page can no longer point the SDK's token at another server.** When the SDK runs inside an iframe, `useParentBridge` takes `athena-auth` (a token) and `athena-config` (URLs) from the parent window. Before this release it took them from any window on any `*.athenaintel.com` origin, including the hosts that serve customer computer and application apps, and an `athena-config` could replace `backendBaseUrl` / `statewireSyncUrl` at any time. A page on one of those hosts could frame or open another app and make its SDK send its token to a server of its choosing. Now:
@@ -1047,6 +1387,40 @@ function App() {
1047
1387
 
1048
1388
  Set `linkClicks={{ interceptAthenaCitations: false }}` to keep Athena citation links opening in the browser while still letting your app observe all link clicks.
1049
1389
 
1390
+ ### Opening assets the host's own way (`onOpenAsset`)
1391
+
1392
+ A host with its own place for assets (a desktop app's tabs, a route of its own) passes `onOpenAsset`
1393
+ to `<AthenaProvider>`. While it is set, every request to open an asset goes to it before the SDK's
1394
+ asset panel:
1395
+
1396
+ - a tool card's Open (and the open-asset link on a tool's card);
1397
+ - an Athena citation or asset link in a message, which the SDK then intercepts as it does with an
1398
+ asset panel mounted (`isAssetPanelAvailable` is true); a modified click (⌘, Ctrl, Shift, Alt)
1399
+ stays the browser's;
1400
+ - the auto-open after a tool created or touched an asset, marked `origin: 'auto'` (a person's open
1401
+ is `origin: 'user'`).
1402
+
1403
+ ```tsx
1404
+ <AthenaProvider
1405
+ config={config}
1406
+ onOpenAsset={({ assetId, origin, reference, href }) => {
1407
+ if (origin === 'auto') return; // handled: open nothing the person did not ask for
1408
+ if (!canShowHere(assetId)) return false; // the asset panel (or the link's own navigation) takes it
1409
+ openTab({ assetId, reference }); // `reference`: the citation's anchor and excerpt
1410
+ }}
1411
+ >
1412
+ ```
1413
+
1414
+ The request carries the asset id, the name and coarse type the card or link knew, the citation
1415
+ target (`reference`, for `AthenaAssetEmbed`), and for a link its own address (`href`), so a host that
1416
+ opens it on the web keeps every parameter it carried. Return `false` to leave the request to the
1417
+ asset panel, or, with no panel mounted, to the link's own navigation; anything else (returning
1418
+ nothing included) means the host opened it. Hosts that do not pass `onOpenAsset` behave as before.
1419
+
1420
+ `appendCitationReferenceParams({ params, reference })` writes a reference's place (its anchor and
1421
+ excerpt) into any URL's search params, the way `AthenaAssetEmbed` writes it into the embed URL; a
1422
+ host that opens a cited place in Athena on the web writes it into the Spaces link the same way.
1423
+
1050
1424
  ## Standalone Asset Embeds
1051
1425
 
1052
1426
  Use `AthenaAssetEmbed` to render a native Athena asset without chat, thread history, tabs, or the SDK split-pane layout. It defaults to the editable, full native asset experience (`readOnly={false}` and `displayMode="full"`). The embed token and the current user must still have edit permission; otherwise Athena renders the asset read-only.
@@ -1093,6 +1467,22 @@ function AssetView() {
1093
1467
  }
1094
1468
  ```
1095
1469
 
1470
+ A host that mints its own embed links (`POST /api/embed/generate-token` from its own backend, so
1471
+ its credentials never reach the page) passes the link as `embedUrl`: the component frames that page
1472
+ and mints none itself. `onReady` says when the framed page has answered (its bridge's first
1473
+ message), which tells a page that is still loading from one that never arrived (a frame its
1474
+ `frame-ancestors` refused, a network failure). Other iframe attributes (`sandbox`,
1475
+ `referrerPolicy`, `allow`) pass through to the frame.
1476
+
1477
+ ```tsx
1478
+ <AthenaAssetEmbed
1479
+ assetId={assetId}
1480
+ embedUrl={embed.embedUrl}
1481
+ sandbox="allow-scripts allow-same-origin allow-forms allow-popups"
1482
+ onReady={() => setReady(true)}
1483
+ />
1484
+ ```
1485
+
1096
1486
  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.
1097
1487
 
1098
1488
  `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.
@@ -1102,6 +1492,13 @@ Pass the callback's complete `reference` to the linked `AthenaAssetEmbed`, rathe
1102
1492
  the cited excerpt or rectangular region. Updating the reference also navigates when the host opens
1103
1493
  another citation in the same asset.
1104
1494
 
1495
+ `reference.anchor` may also be the anchor's raw query string, the form Athena links, citations and
1496
+ search results carry (`anchor=slide&slide_index=3&slide_id=…`, `anchor=time&time=0:42`,
1497
+ `anchor=pm_node&node_id=…`, or an asset ref such as `asset_x?anchor=cell&cell_id=…`). The embed
1498
+ receives its parameters as written, so it lands on any kind of place: a slide, a moment of a
1499
+ recording, an image region. A `meta.excerpt` with no anchor is forwarded too; the embed finds the
1500
+ passage by its words.
1501
+
1105
1502
  If the host starts with an Athena citation URL/string instead of an
1106
1503
  `onCitationAction` event, parse it and pass the returned `reference` directly to the embed:
1107
1504
 
@@ -1201,6 +1598,26 @@ The `collab` entry hosts the Keryx-backed live surfaces: `useGenericDoc` /
1201
1598
  workspace presence feed below. Both mint short-lived room-bound tokens with the
1202
1599
  provider's credentials and re-mint before expiry on their own.
1203
1600
 
1601
+ `connectGenericDoc` also serves hosts that keep a **local copy** of the document
1602
+ (Midas, through `@athenaintel/local-copy`):
1603
+
1604
+ - `localCopy.prepare({ doc, transport })` runs once, before the first mint: it
1605
+ applies the stored copy to the document and returns the local edits an earlier
1606
+ session never had acknowledged, which the handle sends and waits on like its
1607
+ own. `handle.prepared` flips once it has run; mount readers after it.
1608
+ - `localCopy.transportChanged()` is called whenever the handle's unconfirmed
1609
+ edits (`handle.unconfirmedEdits()`) or its sync state change.
1610
+ - `localCopy.beforeConnect({ grant, firstConnection, offlineForMs,
1611
+ hasUnsyncedEdits })` is asked after each mint and before the connection it
1612
+ would open: the first connection, a reconnect after an outage longer than
1613
+ `offlineGateAfterMs` (default 15 s, past which the handle reconnects itself,
1614
+ re-minting each time), and a re-mint after a revocation. `'hold'` keeps the
1615
+ handle disconnected (`handle.held`) until `handle.resume()`.
1616
+ - A mint that fails for want of the network (`retryMintError`, default
1617
+ `isRetryableMintError`: network errors, timeouts, 408, 429, 5xx) leaves the
1618
+ handle `disconnected` and is retried, immediately when the browser comes back
1619
+ online; a refusal (401/403/404) still ends it with `status: 'error'`.
1620
+
1204
1621
  ### Workspace presence (admin only)
1205
1622
 
1206
1623
  `useWorkspacePresence(workspaceId)` is a **read-only** subscriber to the
@@ -1287,9 +1704,33 @@ For CSS-level theming without the `theme` prop, set the design-token custom prop
1287
1704
  }
1288
1705
  ```
1289
1706
 
1707
+ ## Pop-out windows
1708
+
1709
+ A host that shows SDK UI in a second browser window (the React tree stays in the main window while the DOM lives in the pop-out's document, as flexlayout pop-outs do) wraps that subtree in `OwnerDocumentProvider` with the pop-out's document. The SDK's popover, tooltip and composer mention menu then portal into that document's `body` instead of the main window's; with no provider (or the main document) they keep their default container.
1710
+
1711
+ ```tsx
1712
+ import { OwnerDocumentProvider } from '@athenaintel/react/owner-document';
1713
+
1714
+ <OwnerDocumentProvider document={popoutWindow.document}>
1715
+ <AthenaChat />
1716
+ </OwnerDocumentProvider>
1717
+ ```
1718
+
1719
+ Your own portals can read the same context: `usePortalContainer()` returns the pop-out's `body` (or `undefined` in the main window, so a library keeps its default), `useOwnerDocument()` the hosting document, and `useIsInPopoutDocument()` whether it is a pop-out. The same exports are on the root entry; `@athenaintel/react/owner-document` imports nothing else from the SDK, so a shell can provide the context without loading the chat. The pop-out document needs the SDK stylesheet too.
1720
+
1290
1721
  ## Tool cards in the thread
1291
1722
 
1292
- `<AthenaChat>` folds each turn's tool calls into one collapsible activity group with a count, the answer rendered below it (`groupToolCalls`, default `true`; pass `false` to list every tool card inline in call order). 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.
1723
+ `<AthenaChat>` renders each turn as a transcript (`groupToolCalls`, default `true`; pass `false` to list every tool card inline in call order):
1724
+
1725
+ - **The agent's sentences stay visible.** Every text part the agent writes before its last tool call ("I'll find your workstation, then check origin/staging.", "Started. Now I'll compare.") renders in the transcript, in order, as it streams. Only the work between two sentences folds: each run of tool calls and reasoning becomes one collapsed step row. The answer (the text after the last tool call) renders below, as before; no text renders twice.
1726
+ - **Each step says what it did.** A collapsed row names the step in progress, else the last one it took — "Ran `git log -1 origin/staging`", "Read `live_audio.py`", "Edited `upstream.py`" with "+4 −1", "Found 3 assets for "workstation"", "jevin-box is running", "Viewed pull request #43093", "Updated plan (3/7 done)" — with "+2 more" when the row folds several. Opening it lists every step, and "Show tool details" reveals that row's tool UIs.
1727
+ - **The header counts the turn.** "Working for 1m 12s" while it runs, "Worked for 2m 30s · Used 7 tools" once done (from the messages' own server stamps), "Waiting for you" on an approval. After thirty seconds without a streamed change the header adds "Nothing new for 42s" in amber.
1728
+
1729
+ The transcript is `SuperGroupingTranscript` from `@athenaintel/react/super-grouping`; it takes the same renderer and host slots as `SuperGroupingCard` (which keeps the single-card layout for hosts that mount it). `splitTurnSegments`, `readTurnTiming` and `formatWorkDuration` are exported for hosts that lay a turn out themselves.
1730
+
1731
+ 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`); 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.
1732
+
1733
+ 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.
1293
1734
 
1294
1735
  That row is the `thread` appearance of `ToolFallback`. Hosts that render their own thread keep the boxed host card they render today (the default, `card`); to adopt the row, wrap the thread in the provider or set it per card:
1295
1736
 
@@ -1302,12 +1743,33 @@ import { ToolFallback, ToolFallbackAppearanceProvider } from '@athenaintel/react
1302
1743
 
1303
1744
  Dedicated tool UIs built on `ToolCard` follow the provider automatically; `useToolAppearance()` reads the appearance in force for a custom tool UI.
1304
1745
 
1746
+ ## Spreadsheet range previews (`@athenaintel/react/sheet-range`)
1747
+
1748
+ 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:
1749
+
1750
+ ```tsx
1751
+ import { RangePreviewTable, rangePreviewFromCellMap } from '@athenaintel/react/sheet-range';
1752
+
1753
+ const preview = rangePreviewFromCellMap({
1754
+ range: "'Q1 Plan'!A1:F40", // the A1 range the cells were read from
1755
+ cells, // A1-keyed values: { A1: 'Region', B1: 1200, … }
1756
+ formatCell: (value) => (value == null ? '' : String(value)),
1757
+ maxRows: 20,
1758
+ });
1759
+
1760
+ {preview && <RangePreviewTable preview={preview} maxRows={20} caption="Q1 Plan A1:F40" />}
1761
+ ```
1762
+
1763
+ `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.
1764
+
1305
1765
  ## Key Components
1306
1766
 
1307
1767
  - **`<AthenaProvider>`** — Runtime, auth, theming, and configuration
1308
1768
  - **`<AthenaChat>`** — Full chat UI with composer, messages, and tool rendering
1309
- - **`<AthenaLayout>`** — Split-pane layout with asset panel
1769
+ - **`<AthenaLayout>`** — Split-pane layout with asset panel (or a `workbench` column)
1770
+ - **`<SessionWorkbench>`** — Devin-style workspace pane: Tasks, Shell, Computer, Pull requests, Attachments, and your own panes (see [Session workbench](#session-workbench))
1310
1771
  - **`<SessionList>`** — Session sidebar: attention, next action, pull-request chips, pin, search (see [Session list, attention and wake markers](#session-list-attention-and-wake-markers))
1772
+ - **`<SessionsPage>`** / **`<Inbox>`** / **`<InboxButton>`** — Full-page session list with server-side filters, display options and CSV export; the notifications inbox (see [Sessions page and inbox](#sessions-page-and-inbox))
1311
1773
  - **`<ThreadList>`** — Plain conversation history sidebar (title rows only)
1312
1774
  - **`Toolkits`** — Constants for all available backend toolkits
1313
1775
 
@@ -1347,6 +1809,13 @@ thread. `useComposerReady()` exposes the readiness for UI that wants to show a
1347
1809
  "loading" state; `composer.handoff` records each deferred, applied and dropped
1348
1810
  write.
1349
1811
 
1812
+ `useFocusComposer()` puts the caret at the end of the draft and leaves the draft
1813
+ as it is, for a host that shows the chat again and wants typing to land in it (a
1814
+ launcher window brought back by a shortcut). Asked before the editor has mounted,
1815
+ it focuses the editor as it mounts. `useReadComposerDraft()` returns a function
1816
+ that reads the draft's text when called, for a host that hands the chat to
1817
+ another window and carries the unsent text along.
1818
+
1350
1819
  Use `useSendMessage()` for workflow buttons, sidebar shortcuts, and other UI that lives outside `<AthenaChat>` but still needs to submit a prompt. Its promise settles once the send has been dispatched, including a send that waited for the connection.
1351
1820
 
1352
1821
  ```tsx