@athenaintel/react 0.57.2 → 0.60.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (852) hide show
  1. package/README.md +795 -12
  2. package/dist/agent-runtime/src/addressed-agents.cjs +16 -0
  3. package/dist/agent-runtime/src/addressed-agents.cjs.map +1 -0
  4. package/dist/agent-runtime/src/addressed-agents.d.ts +30 -0
  5. package/dist/agent-runtime/src/addressed-agents.js +16 -0
  6. package/dist/agent-runtime/src/addressed-agents.js.map +1 -0
  7. package/dist/agent-runtime/src/answer-label.cjs +4 -3
  8. package/dist/agent-runtime/src/answer-label.cjs.map +1 -1
  9. package/dist/agent-runtime/src/answer-label.d.ts +13 -6
  10. package/dist/agent-runtime/src/answer-label.js +4 -3
  11. package/dist/agent-runtime/src/answer-label.js.map +1 -1
  12. package/dist/agent-runtime/src/chat-outbox-attachments.cjs.map +1 -1
  13. package/dist/agent-runtime/src/chat-outbox-attachments.d.ts +1 -1
  14. package/dist/agent-runtime/src/chat-outbox-attachments.js.map +1 -1
  15. package/dist/agent-runtime/src/chat-outbox-entry.cjs +101 -0
  16. package/dist/agent-runtime/src/chat-outbox-entry.cjs.map +1 -0
  17. package/dist/agent-runtime/src/chat-outbox-entry.d.ts +99 -0
  18. package/dist/agent-runtime/src/chat-outbox-entry.js +101 -0
  19. package/dist/agent-runtime/src/chat-outbox-entry.js.map +1 -0
  20. package/dist/agent-runtime/src/chat-outbox-legacy.cjs +252 -0
  21. package/dist/agent-runtime/src/chat-outbox-legacy.cjs.map +1 -0
  22. package/dist/agent-runtime/src/chat-outbox-legacy.d.ts +96 -0
  23. package/dist/agent-runtime/src/chat-outbox-legacy.js +252 -0
  24. package/dist/agent-runtime/src/chat-outbox-legacy.js.map +1 -0
  25. package/dist/agent-runtime/src/chat-outbox-policy.cjs +30 -0
  26. package/dist/agent-runtime/src/chat-outbox-policy.cjs.map +1 -0
  27. package/dist/agent-runtime/src/chat-outbox-policy.d.ts +42 -0
  28. package/dist/agent-runtime/src/chat-outbox-policy.js +30 -0
  29. package/dist/agent-runtime/src/chat-outbox-policy.js.map +1 -0
  30. package/dist/agent-runtime/src/chat-outbox-storage.cjs +306 -0
  31. package/dist/agent-runtime/src/chat-outbox-storage.cjs.map +1 -0
  32. package/dist/agent-runtime/src/chat-outbox-storage.d.ts +194 -0
  33. package/dist/agent-runtime/src/chat-outbox-storage.js +306 -0
  34. package/dist/agent-runtime/src/chat-outbox-storage.js.map +1 -0
  35. package/dist/agent-runtime/src/chat-outbox-thread.cjs +21 -94
  36. package/dist/agent-runtime/src/chat-outbox-thread.cjs.map +1 -1
  37. package/dist/agent-runtime/src/chat-outbox-thread.d.ts +22 -18
  38. package/dist/agent-runtime/src/chat-outbox-thread.js +21 -94
  39. package/dist/agent-runtime/src/chat-outbox-thread.js.map +1 -1
  40. package/dist/agent-runtime/src/chat-outbox.cjs +492 -547
  41. package/dist/agent-runtime/src/chat-outbox.cjs.map +1 -1
  42. package/dist/agent-runtime/src/chat-outbox.d.ts +110 -142
  43. package/dist/agent-runtime/src/chat-outbox.js +492 -547
  44. package/dist/agent-runtime/src/chat-outbox.js.map +1 -1
  45. package/dist/agent-runtime/src/composer-markdown.cjs +0 -16
  46. package/dist/agent-runtime/src/composer-markdown.cjs.map +1 -1
  47. package/dist/agent-runtime/src/composer-markdown.d.ts +1 -1
  48. package/dist/agent-runtime/src/composer-markdown.js +1 -17
  49. package/dist/agent-runtime/src/composer-markdown.js.map +1 -1
  50. package/dist/agent-runtime/src/deep-agent-transport-recipe.cjs +3 -1
  51. package/dist/agent-runtime/src/deep-agent-transport-recipe.cjs.map +1 -1
  52. package/dist/agent-runtime/src/deep-agent-transport-recipe.d.ts +8 -1
  53. package/dist/agent-runtime/src/deep-agent-transport-recipe.js +3 -1
  54. package/dist/agent-runtime/src/deep-agent-transport-recipe.js.map +1 -1
  55. package/dist/agent-runtime/src/dictation-preferences.d.ts +356 -0
  56. package/dist/agent-runtime/src/dictation-record.d.ts +279 -0
  57. package/dist/agent-runtime/src/dictation-session.d.ts +106 -7
  58. package/dist/agent-runtime/src/dictation-snippets.d.ts +9 -0
  59. package/dist/agent-runtime/src/dictation-transfer.d.ts +142 -0
  60. package/dist/agent-runtime/src/edit-command.cjs.map +1 -1
  61. package/dist/agent-runtime/src/edit-command.d.ts +1 -1
  62. package/dist/agent-runtime/src/edit-command.js.map +1 -1
  63. package/dist/agent-runtime/src/errors.cjs +1 -0
  64. package/dist/agent-runtime/src/errors.cjs.map +1 -1
  65. package/dist/agent-runtime/src/errors.js +1 -0
  66. package/dist/agent-runtime/src/errors.js.map +1 -1
  67. package/dist/agent-runtime/src/generated/runconfig-contract.cjs +24 -0
  68. package/dist/agent-runtime/src/generated/runconfig-contract.cjs.map +1 -1
  69. package/dist/agent-runtime/src/generated/runconfig-contract.d.ts +3 -3
  70. package/dist/agent-runtime/src/generated/runconfig-contract.js +24 -0
  71. package/dist/agent-runtime/src/generated/runconfig-contract.js.map +1 -1
  72. package/dist/agent-runtime/src/index.d.ts +14 -8
  73. package/dist/agent-runtime/src/lane-follow.cjs +289 -0
  74. package/dist/agent-runtime/src/lane-follow.cjs.map +1 -0
  75. package/dist/agent-runtime/src/lane-follow.js +289 -0
  76. package/dist/agent-runtime/src/lane-follow.js.map +1 -0
  77. package/dist/agent-runtime/src/lane-images.cjs +387 -0
  78. package/dist/agent-runtime/src/lane-images.cjs.map +1 -0
  79. package/dist/agent-runtime/src/lane-images.js +387 -0
  80. package/dist/agent-runtime/src/lane-images.js.map +1 -0
  81. package/dist/agent-runtime/src/message-window.js +1 -1
  82. package/dist/agent-runtime/src/messages.cjs +19 -1
  83. package/dist/agent-runtime/src/messages.cjs.map +1 -1
  84. package/dist/agent-runtime/src/messages.d.ts +8 -0
  85. package/dist/agent-runtime/src/messages.js +21 -3
  86. package/dist/agent-runtime/src/messages.js.map +1 -1
  87. package/dist/agent-runtime/src/named-agents.cjs +301 -0
  88. package/dist/agent-runtime/src/named-agents.cjs.map +1 -0
  89. package/dist/agent-runtime/src/named-agents.d.ts +246 -0
  90. package/dist/agent-runtime/src/named-agents.js +301 -0
  91. package/dist/agent-runtime/src/named-agents.js.map +1 -0
  92. package/dist/agent-runtime/src/offline-status.cjs.map +1 -1
  93. package/dist/agent-runtime/src/offline-status.d.ts +93 -2
  94. package/dist/agent-runtime/src/offline-status.js.map +1 -1
  95. package/dist/agent-runtime/src/ptc-subcalls.cjs +41 -0
  96. package/dist/agent-runtime/src/ptc-subcalls.cjs.map +1 -0
  97. package/dist/agent-runtime/src/ptc-subcalls.js +41 -0
  98. package/dist/agent-runtime/src/ptc-subcalls.js.map +1 -0
  99. package/dist/agent-runtime/src/queue.cjs +2 -2
  100. package/dist/agent-runtime/src/queue.cjs.map +1 -1
  101. package/dist/agent-runtime/src/queue.d.ts +20 -25
  102. package/dist/agent-runtime/src/queue.js +2 -2
  103. package/dist/agent-runtime/src/queue.js.map +1 -1
  104. package/dist/agent-runtime/src/quota-safe-local-storage-session.cjs +314 -84
  105. package/dist/agent-runtime/src/quota-safe-local-storage-session.cjs.map +1 -1
  106. package/dist/agent-runtime/src/quota-safe-local-storage-session.d.ts +137 -40
  107. package/dist/agent-runtime/src/quota-safe-local-storage-session.js +318 -88
  108. package/dist/agent-runtime/src/quota-safe-local-storage-session.js.map +1 -1
  109. package/dist/agent-runtime/src/run-send.cjs +54 -0
  110. package/dist/agent-runtime/src/run-send.cjs.map +1 -0
  111. package/dist/agent-runtime/src/run-send.d.ts +51 -0
  112. package/dist/agent-runtime/src/run-send.js +54 -0
  113. package/dist/agent-runtime/src/run-send.js.map +1 -0
  114. package/dist/agent-runtime/src/running-tool-placeholder.cjs +6 -0
  115. package/dist/agent-runtime/src/running-tool-placeholder.cjs.map +1 -1
  116. package/dist/agent-runtime/src/running-tool-placeholder.js +6 -0
  117. package/dist/agent-runtime/src/running-tool-placeholder.js.map +1 -1
  118. package/dist/agent-runtime/src/runtime.d.ts +9 -5
  119. package/dist/agent-runtime/src/sealed-idb.cjs +64 -0
  120. package/dist/agent-runtime/src/sealed-idb.cjs.map +1 -1
  121. package/dist/agent-runtime/src/sealed-idb.d.ts +16 -0
  122. package/dist/agent-runtime/src/sealed-idb.js +64 -0
  123. package/dist/agent-runtime/src/sealed-idb.js.map +1 -1
  124. package/dist/agent-runtime/src/send-recovery.cjs +90 -118
  125. package/dist/agent-runtime/src/send-recovery.cjs.map +1 -1
  126. package/dist/agent-runtime/src/send-recovery.d.ts +25 -29
  127. package/dist/agent-runtime/src/send-recovery.js +90 -118
  128. package/dist/agent-runtime/src/send-recovery.js.map +1 -1
  129. package/dist/agent-runtime/src/statewire-diagnostics.d.ts +4 -1
  130. package/dist/agent-runtime/src/statewire-held-sends.cjs +191 -0
  131. package/dist/agent-runtime/src/statewire-held-sends.cjs.map +1 -0
  132. package/dist/agent-runtime/src/statewire-held-sends.d.ts +119 -0
  133. package/dist/agent-runtime/src/statewire-held-sends.js +191 -0
  134. package/dist/agent-runtime/src/statewire-held-sends.js.map +1 -0
  135. package/dist/agent-runtime/src/statewire-state.cjs +4 -0
  136. package/dist/agent-runtime/src/statewire-state.cjs.map +1 -1
  137. package/dist/agent-runtime/src/statewire-state.js +4 -0
  138. package/dist/agent-runtime/src/statewire-state.js.map +1 -1
  139. package/dist/agent-runtime/src/statewire-transport.cjs +8 -2
  140. package/dist/agent-runtime/src/statewire-transport.cjs.map +1 -1
  141. package/dist/agent-runtime/src/statewire-transport.d.ts +14 -5
  142. package/dist/agent-runtime/src/statewire-transport.js +8 -2
  143. package/dist/agent-runtime/src/statewire-transport.js.map +1 -1
  144. package/dist/agent-runtime/src/subagent-transcripts.cjs +1 -23
  145. package/dist/agent-runtime/src/subagent-transcripts.cjs.map +1 -1
  146. package/dist/agent-runtime/src/subagent-transcripts.js +3 -25
  147. package/dist/agent-runtime/src/subagent-transcripts.js.map +1 -1
  148. package/dist/agent-runtime/src/subagents.cjs +22 -29
  149. package/dist/agent-runtime/src/subagents.cjs.map +1 -1
  150. package/dist/agent-runtime/src/subagents.js +23 -30
  151. package/dist/agent-runtime/src/subagents.js.map +1 -1
  152. package/dist/agent-runtime/src/thread-extras.cjs +27 -19
  153. package/dist/agent-runtime/src/thread-extras.cjs.map +1 -1
  154. package/dist/agent-runtime/src/thread-extras.d.ts +19 -6
  155. package/dist/agent-runtime/src/thread-extras.js +27 -19
  156. package/dist/agent-runtime/src/thread-extras.js.map +1 -1
  157. package/dist/agent-runtime/src/thread-handoff-flow-machine.d.ts +8 -8
  158. package/dist/agent-runtime/src/tool-metadata.cjs +19 -0
  159. package/dist/agent-runtime/src/tool-metadata.cjs.map +1 -1
  160. package/dist/agent-runtime/src/tool-metadata.js +19 -0
  161. package/dist/agent-runtime/src/tool-metadata.js.map +1 -1
  162. package/dist/agent-runtime/src/tool-names.cjs +21 -0
  163. package/dist/agent-runtime/src/tool-names.cjs.map +1 -1
  164. package/dist/agent-runtime/src/tool-names.d.ts +8 -0
  165. package/dist/agent-runtime/src/tool-names.js +21 -0
  166. package/dist/agent-runtime/src/tool-names.js.map +1 -1
  167. package/dist/agent-runtime/src/typed-interrupt-kinds.cjs +247 -0
  168. package/dist/agent-runtime/src/typed-interrupt-kinds.cjs.map +1 -0
  169. package/dist/agent-runtime/src/typed-interrupt-kinds.d.ts +173 -0
  170. package/dist/agent-runtime/src/typed-interrupt-kinds.js +247 -0
  171. package/dist/agent-runtime/src/typed-interrupt-kinds.js.map +1 -0
  172. package/dist/agent-runtime/src/typed-interrupts.cjs +48 -0
  173. package/dist/agent-runtime/src/typed-interrupts.cjs.map +1 -0
  174. package/dist/agent-runtime/src/typed-interrupts.d.ts +75 -0
  175. package/dist/agent-runtime/src/typed-interrupts.js +48 -0
  176. package/dist/agent-runtime/src/typed-interrupts.js.map +1 -0
  177. package/dist/agent-runtime/src/types.d.ts +1 -1
  178. package/dist/agent-runtime/src/use-conversation-list.cjs +1 -0
  179. package/dist/agent-runtime/src/use-conversation-list.cjs.map +1 -1
  180. package/dist/agent-runtime/src/use-conversation-list.d.ts +7 -0
  181. package/dist/agent-runtime/src/use-conversation-list.js +1 -0
  182. package/dist/agent-runtime/src/use-conversation-list.js.map +1 -1
  183. package/dist/agent-runtime/src/use-deep-agent-chat-outbox.cjs +46 -29
  184. package/dist/agent-runtime/src/use-deep-agent-chat-outbox.cjs.map +1 -1
  185. package/dist/agent-runtime/src/use-deep-agent-chat-outbox.d.ts +14 -22
  186. package/dist/agent-runtime/src/use-deep-agent-chat-outbox.js +46 -29
  187. package/dist/agent-runtime/src/use-deep-agent-chat-outbox.js.map +1 -1
  188. package/dist/agent-runtime/src/use-deep-agent-runtime.cjs +78 -14
  189. package/dist/agent-runtime/src/use-deep-agent-runtime.cjs.map +1 -1
  190. package/dist/agent-runtime/src/use-deep-agent-runtime.d.ts +34 -7
  191. package/dist/agent-runtime/src/use-deep-agent-runtime.js +79 -15
  192. package/dist/agent-runtime/src/use-deep-agent-runtime.js.map +1 -1
  193. package/dist/agent-runtime/src/use-deep-agent-thread.cjs +16 -1
  194. package/dist/agent-runtime/src/use-deep-agent-thread.cjs.map +1 -1
  195. package/dist/agent-runtime/src/use-deep-agent-thread.d.ts +7 -2
  196. package/dist/agent-runtime/src/use-deep-agent-thread.js +16 -1
  197. package/dist/agent-runtime/src/use-deep-agent-thread.js.map +1 -1
  198. package/dist/agent-runtime/src/use-deep-agent-voice.cjs +30 -4
  199. package/dist/agent-runtime/src/use-deep-agent-voice.cjs.map +1 -1
  200. package/dist/agent-runtime/src/use-deep-agent-voice.d.ts +22 -4
  201. package/dist/agent-runtime/src/use-deep-agent-voice.js +30 -4
  202. package/dist/agent-runtime/src/use-deep-agent-voice.js.map +1 -1
  203. package/dist/agent-runtime/src/withdrawn-turns.d.ts +5 -4
  204. package/dist/agent-runtime/src/word-device-fit.d.ts +174 -0
  205. package/dist/agent-runtime/src/work-in.d.ts +127 -0
  206. package/dist/assets/AthenaAssetEmbed.cjs.map +1 -1
  207. package/dist/assets/AthenaAssetEmbed.d.ts +6 -1
  208. package/dist/assets/AthenaAssetEmbed.js.map +1 -1
  209. package/dist/assets/asset-panel-store.cjs +13 -5
  210. package/dist/assets/asset-panel-store.cjs.map +1 -1
  211. package/dist/assets/asset-panel-store.d.ts +33 -2
  212. package/dist/assets/asset-panel-store.js +13 -5
  213. package/dist/assets/asset-panel-store.js.map +1 -1
  214. package/dist/auth/AthenaCredentialSourceContext.cjs +11 -0
  215. package/dist/auth/AthenaCredentialSourceContext.cjs.map +1 -1
  216. package/dist/auth/AthenaCredentialSourceContext.d.ts +6 -0
  217. package/dist/auth/AthenaCredentialSourceContext.js +11 -0
  218. package/dist/auth/AthenaCredentialSourceContext.js.map +1 -1
  219. package/dist/auth/account-identity.cjs +13 -2
  220. package/dist/auth/account-identity.cjs.map +1 -1
  221. package/dist/auth/account-identity.d.ts +9 -0
  222. package/dist/auth/account-identity.js +13 -2
  223. package/dist/auth/account-identity.js.map +1 -1
  224. package/dist/auth/credential-source.cjs +20 -4
  225. package/dist/auth/credential-source.cjs.map +1 -1
  226. package/dist/auth/credential-source.d.ts +9 -0
  227. package/dist/auth/credential-source.js +20 -4
  228. package/dist/auth/credential-source.js.map +1 -1
  229. package/dist/catalog/chat-pickers.cjs +31 -0
  230. package/dist/catalog/chat-pickers.cjs.map +1 -1
  231. package/dist/catalog/chat-pickers.d.ts +17 -0
  232. package/dist/catalog/chat-pickers.js +33 -2
  233. package/dist/catalog/chat-pickers.js.map +1 -1
  234. package/dist/catalog/runtime-catalog.cjs +63 -3
  235. package/dist/catalog/runtime-catalog.cjs.map +1 -1
  236. package/dist/catalog/runtime-catalog.d.ts +63 -3
  237. package/dist/catalog/runtime-catalog.js +64 -4
  238. package/dist/catalog/runtime-catalog.js.map +1 -1
  239. package/dist/chat/AthenaChat.cjs +301 -98
  240. package/dist/chat/AthenaChat.cjs.map +1 -1
  241. package/dist/chat/AthenaChat.d.ts +80 -4
  242. package/dist/chat/AthenaChat.js +302 -99
  243. package/dist/chat/AthenaChat.js.map +1 -1
  244. package/dist/chat/StatewireApprovalCard.cjs +35 -5
  245. package/dist/chat/StatewireApprovalCard.cjs.map +1 -1
  246. package/dist/chat/StatewireApprovalCard.d.ts +55 -2
  247. package/dist/chat/StatewireApprovalCard.js +37 -7
  248. package/dist/chat/StatewireApprovalCard.js.map +1 -1
  249. package/dist/chat/StatewireQueuedMessages.cjs +17 -2
  250. package/dist/chat/StatewireQueuedMessages.cjs.map +1 -1
  251. package/dist/chat/StatewireQueuedMessages.d.ts +8 -45
  252. package/dist/chat/StatewireQueuedMessages.js +18 -3
  253. package/dist/chat/StatewireQueuedMessages.js.map +1 -1
  254. package/dist/chat/chat-agent-mentions.cjs +70 -0
  255. package/dist/chat/chat-agent-mentions.cjs.map +1 -0
  256. package/dist/chat/chat-agent-mentions.d.ts +13 -0
  257. package/dist/chat/chat-agent-mentions.js +70 -0
  258. package/dist/chat/chat-agent-mentions.js.map +1 -0
  259. package/dist/chat/composer-actions.cjs +12 -0
  260. package/dist/chat/composer-actions.cjs.map +1 -0
  261. package/dist/chat/composer-actions.d.ts +22 -0
  262. package/dist/chat/composer-actions.js +12 -0
  263. package/dist/chat/composer-actions.js.map +1 -0
  264. package/dist/chat/follow-up-suggestions.cjs +185 -0
  265. package/dist/chat/follow-up-suggestions.cjs.map +1 -0
  266. package/dist/chat/follow-up-suggestions.d.ts +64 -0
  267. package/dist/chat/follow-up-suggestions.js +185 -0
  268. package/dist/chat/follow-up-suggestions.js.map +1 -0
  269. package/dist/chat/super-grouping/ToolTimeline.cjs +4 -3
  270. package/dist/chat/super-grouping/ToolTimeline.cjs.map +1 -1
  271. package/dist/chat/super-grouping/ToolTimeline.d.ts +7 -3
  272. package/dist/chat/super-grouping/ToolTimeline.js +4 -3
  273. package/dist/chat/super-grouping/ToolTimeline.js.map +1 -1
  274. package/dist/chat/turn-changes.cjs +284 -0
  275. package/dist/chat/turn-changes.cjs.map +1 -0
  276. package/dist/chat/turn-changes.d.ts +130 -0
  277. package/dist/chat/turn-changes.js +284 -0
  278. package/dist/chat/turn-changes.js.map +1 -0
  279. package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.cjs +31 -0
  280. package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.cjs.map +1 -0
  281. package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.d.ts +31 -0
  282. package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.js +31 -0
  283. package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.js.map +1 -0
  284. package/dist/chat/typed-interrupts/approval-cards.cjs +250 -0
  285. package/dist/chat/typed-interrupts/approval-cards.cjs.map +1 -0
  286. package/dist/chat/typed-interrupts/approval-cards.d.ts +22 -0
  287. package/dist/chat/typed-interrupts/approval-cards.js +250 -0
  288. package/dist/chat/typed-interrupts/approval-cards.js.map +1 -0
  289. package/dist/chat/typed-interrupts/form-cards.cjs +289 -0
  290. package/dist/chat/typed-interrupts/form-cards.cjs.map +1 -0
  291. package/dist/chat/typed-interrupts/form-cards.d.ts +6 -0
  292. package/dist/chat/typed-interrupts/form-cards.js +289 -0
  293. package/dist/chat/typed-interrupts/form-cards.js.map +1 -0
  294. package/dist/chat/typed-interrupts/interrupt-card-shell.cjs +182 -0
  295. package/dist/chat/typed-interrupts/interrupt-card-shell.cjs.map +1 -0
  296. package/dist/chat/typed-interrupts/interrupt-card-shell.d.ts +47 -0
  297. package/dist/chat/typed-interrupts/interrupt-card-shell.js +182 -0
  298. package/dist/chat/typed-interrupts/interrupt-card-shell.js.map +1 -0
  299. package/dist/chat/typed-interrupts/json-schema-form.cjs +388 -0
  300. package/dist/chat/typed-interrupts/json-schema-form.cjs.map +1 -0
  301. package/dist/chat/typed-interrupts/json-schema-form.d.ts +33 -0
  302. package/dist/chat/typed-interrupts/json-schema-form.js +388 -0
  303. package/dist/chat/typed-interrupts/json-schema-form.js.map +1 -0
  304. package/dist/chat/typed-interrupts/questionnaire-card.cjs +449 -0
  305. package/dist/chat/typed-interrupts/questionnaire-card.cjs.map +1 -0
  306. package/dist/chat/typed-interrupts/questionnaire-card.d.ts +20 -0
  307. package/dist/chat/typed-interrupts/questionnaire-card.js +449 -0
  308. package/dist/chat/typed-interrupts/questionnaire-card.js.map +1 -0
  309. package/dist/chat/typed-interrupts/request-file-card.cjs +159 -0
  310. package/dist/chat/typed-interrupts/request-file-card.cjs.map +1 -0
  311. package/dist/chat/typed-interrupts/request-file-card.d.ts +2 -0
  312. package/dist/chat/typed-interrupts/request-file-card.js +159 -0
  313. package/dist/chat/typed-interrupts/request-file-card.js.map +1 -0
  314. package/dist/chat/typed-interrupts/toolkit-selection-card.cjs +189 -0
  315. package/dist/chat/typed-interrupts/toolkit-selection-card.cjs.map +1 -0
  316. package/dist/chat/typed-interrupts/toolkit-selection-card.d.ts +23 -0
  317. package/dist/chat/typed-interrupts/toolkit-selection-card.js +189 -0
  318. package/dist/chat/typed-interrupts/toolkit-selection-card.js.map +1 -0
  319. package/dist/chat/typed-interrupts/typed-interrupt-body.cjs +26 -0
  320. package/dist/chat/typed-interrupts/typed-interrupt-body.cjs.map +1 -0
  321. package/dist/chat/typed-interrupts/typed-interrupt-body.d.ts +3 -0
  322. package/dist/chat/typed-interrupts/typed-interrupt-body.js +26 -0
  323. package/dist/chat/typed-interrupts/typed-interrupt-body.js.map +1 -0
  324. package/dist/chat/typed-interrupts/typed-interrupt-graphql.cjs +105 -0
  325. package/dist/chat/typed-interrupts/typed-interrupt-graphql.cjs.map +1 -0
  326. package/dist/chat/typed-interrupts/typed-interrupt-graphql.d.ts +29 -0
  327. package/dist/chat/typed-interrupts/typed-interrupt-graphql.js +105 -0
  328. package/dist/chat/typed-interrupts/typed-interrupt-graphql.js.map +1 -0
  329. package/dist/chat/typed-interrupts/typed-interrupt-notice.cjs +70 -0
  330. package/dist/chat/typed-interrupts/typed-interrupt-notice.cjs.map +1 -0
  331. package/dist/chat/typed-interrupts/typed-interrupt-notice.d.ts +45 -0
  332. package/dist/chat/typed-interrupts/typed-interrupt-notice.js +70 -0
  333. package/dist/chat/typed-interrupts/typed-interrupt-notice.js.map +1 -0
  334. package/dist/chat/typed-interrupts/typed-interrupt-panel.cjs +76 -0
  335. package/dist/chat/typed-interrupts/typed-interrupt-panel.cjs.map +1 -0
  336. package/dist/chat/typed-interrupts/typed-interrupt-panel.d.ts +11 -0
  337. package/dist/chat/typed-interrupts/typed-interrupt-panel.js +76 -0
  338. package/dist/chat/typed-interrupts/typed-interrupt-panel.js.map +1 -0
  339. package/dist/chat/typed-interrupts/typed-interrupt-types.d.ts +46 -0
  340. package/dist/chat/typed-interrupts/use-interrupt-draft.cjs +106 -0
  341. package/dist/chat/typed-interrupts/use-interrupt-draft.cjs.map +1 -0
  342. package/dist/chat/typed-interrupts/use-interrupt-draft.d.ts +29 -0
  343. package/dist/chat/typed-interrupts/use-interrupt-draft.js +106 -0
  344. package/dist/chat/typed-interrupts/use-interrupt-draft.js.map +1 -0
  345. package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.cjs +231 -0
  346. package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.cjs.map +1 -0
  347. package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.d.ts +66 -0
  348. package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.js +231 -0
  349. package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.js.map +1 -0
  350. package/dist/chat-ui/composer/composer-named-agents.cjs +13 -0
  351. package/dist/chat-ui/composer/composer-named-agents.cjs.map +1 -0
  352. package/dist/chat-ui/composer/composer-named-agents.d.ts +20 -0
  353. package/dist/chat-ui/composer/composer-named-agents.js +13 -0
  354. package/dist/chat-ui/composer/composer-named-agents.js.map +1 -0
  355. package/dist/chat-ui/composer/slash-command-menu.cjs +143 -0
  356. package/dist/chat-ui/composer/slash-command-menu.cjs.map +1 -0
  357. package/dist/chat-ui/composer/slash-command-menu.d.ts +19 -0
  358. package/dist/chat-ui/composer/slash-command-menu.js +143 -0
  359. package/dist/chat-ui/composer/slash-command-menu.js.map +1 -0
  360. package/dist/chat-ui/composer/slash-commands-extension.cjs +51 -0
  361. package/dist/chat-ui/composer/slash-commands-extension.cjs.map +1 -0
  362. package/dist/chat-ui/composer/slash-commands-extension.d.ts +39 -0
  363. package/dist/chat-ui/composer/slash-commands-extension.js +51 -0
  364. package/dist/chat-ui/composer/slash-commands-extension.js.map +1 -0
  365. package/dist/chat-ui/composer/slash-commands.cjs +74 -0
  366. package/dist/chat-ui/composer/slash-commands.cjs.map +1 -0
  367. package/dist/chat-ui/composer/slash-commands.d.ts +82 -0
  368. package/dist/chat-ui/composer/slash-commands.js +74 -0
  369. package/dist/chat-ui/composer/slash-commands.js.map +1 -0
  370. package/dist/chat-ui/composer/tiptap-composer.cjs +135 -9
  371. package/dist/chat-ui/composer/tiptap-composer.cjs.map +1 -1
  372. package/dist/chat-ui/composer/tiptap-composer.d.ts +61 -2
  373. package/dist/chat-ui/composer/tiptap-composer.js +135 -9
  374. package/dist/chat-ui/composer/tiptap-composer.js.map +1 -1
  375. package/dist/chat-ui/index.cjs +5 -0
  376. package/dist/chat-ui/index.cjs.map +1 -1
  377. package/dist/chat-ui/index.d.ts +4 -2
  378. package/dist/chat-ui/index.js +5 -0
  379. package/dist/chat-ui/index.js.map +1 -1
  380. package/dist/chat-ui/mentions/mention-chip.cjs +10 -4
  381. package/dist/chat-ui/mentions/mention-chip.cjs.map +1 -1
  382. package/dist/chat-ui/mentions/mention-chip.js +11 -5
  383. package/dist/chat-ui/mentions/mention-chip.js.map +1 -1
  384. package/dist/chat-ui/mentions/mention-extension.cjs +8 -1
  385. package/dist/chat-ui/mentions/mention-extension.cjs.map +1 -1
  386. package/dist/chat-ui/mentions/mention-extension.js +8 -1
  387. package/dist/chat-ui/mentions/mention-extension.js.map +1 -1
  388. package/dist/chat-ui/mentions/suggestions/components/get-scope-name.cjs +1 -0
  389. package/dist/chat-ui/mentions/suggestions/components/get-scope-name.cjs.map +1 -1
  390. package/dist/chat-ui/mentions/suggestions/components/get-scope-name.js +1 -0
  391. package/dist/chat-ui/mentions/suggestions/components/get-scope-name.js.map +1 -1
  392. package/dist/chat-ui/mentions/suggestions/components/mention-icon.cjs +20 -2
  393. package/dist/chat-ui/mentions/suggestions/components/mention-icon.cjs.map +1 -1
  394. package/dist/chat-ui/mentions/suggestions/components/mention-icon.d.ts +10 -1
  395. package/dist/chat-ui/mentions/suggestions/components/mention-icon.js +22 -4
  396. package/dist/chat-ui/mentions/suggestions/components/mention-icon.js.map +1 -1
  397. package/dist/chat-ui/mentions/suggestions/components/menu-item.cjs +1 -1
  398. package/dist/chat-ui/mentions/suggestions/components/menu-item.cjs.map +1 -1
  399. package/dist/chat-ui/mentions/suggestions/components/menu-item.js +1 -1
  400. package/dist/chat-ui/mentions/suggestions/components/menu-item.js.map +1 -1
  401. package/dist/chat-ui/mentions/suggestions/data/api-client.cjs +45 -0
  402. package/dist/chat-ui/mentions/suggestions/data/api-client.cjs.map +1 -1
  403. package/dist/chat-ui/mentions/suggestions/data/api-client.d.ts +48 -0
  404. package/dist/chat-ui/mentions/suggestions/data/api-client.js +45 -0
  405. package/dist/chat-ui/mentions/suggestions/data/api-client.js.map +1 -1
  406. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icon-names.generated.cjs +89 -0
  407. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icon-names.generated.cjs.map +1 -0
  408. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icon-names.generated.d.ts +8 -0
  409. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icon-names.generated.js +89 -0
  410. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icon-names.generated.js.map +1 -0
  411. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.cjs +140 -116
  412. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.cjs.map +1 -1
  413. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.d.ts +46 -12
  414. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.js +141 -117
  415. package/dist/chat-ui/mentions/suggestions/data/sources/asset-type-icons.js.map +1 -1
  416. package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs +272 -25
  417. package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs.map +1 -1
  418. package/dist/chat-ui/mentions/suggestions/data/sources/index.d.ts +88 -10
  419. package/dist/chat-ui/mentions/suggestions/data/sources/index.js +274 -27
  420. package/dist/chat-ui/mentions/suggestions/data/sources/index.js.map +1 -1
  421. package/dist/chat-ui/mentions/suggestions/data/types.cjs.map +1 -1
  422. package/dist/chat-ui/mentions/suggestions/data/types.d.ts +27 -1
  423. package/dist/chat-ui/mentions/suggestions/data/types.js.map +1 -1
  424. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs +56 -5
  425. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs.map +1 -1
  426. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.d.ts +26 -6
  427. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js +57 -6
  428. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js.map +1 -1
  429. package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.cjs +34 -17
  430. package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.cjs.map +1 -1
  431. package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.d.ts +19 -1
  432. package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.js +35 -18
  433. package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.js.map +1 -1
  434. package/dist/chat-ui/mentions/use-asset-icon-app-url.cjs +12 -0
  435. package/dist/chat-ui/mentions/use-asset-icon-app-url.cjs.map +1 -0
  436. package/dist/chat-ui/mentions/use-asset-icon-app-url.d.ts +8 -0
  437. package/dist/chat-ui/mentions/use-asset-icon-app-url.js +12 -0
  438. package/dist/chat-ui/mentions/use-asset-icon-app-url.js.map +1 -0
  439. package/dist/chat-ui/statewire.d.ts +1 -1
  440. package/dist/chat-ui/thread/statewire-history-edge.cjs +15 -0
  441. package/dist/chat-ui/thread/statewire-history-edge.cjs.map +1 -1
  442. package/dist/chat-ui/thread/statewire-history-edge.d.ts +4 -1
  443. package/dist/chat-ui/thread/statewire-history-edge.js +15 -0
  444. package/dist/chat-ui/thread/statewire-history-edge.js.map +1 -1
  445. package/dist/collab/client.cjs +41 -6
  446. package/dist/collab/client.cjs.map +1 -1
  447. package/dist/collab/client.d.ts +38 -7
  448. package/dist/collab/client.js +41 -6
  449. package/dist/collab/client.js.map +1 -1
  450. package/dist/composer/ComposerAttachedReferences.cjs +119 -0
  451. package/dist/composer/ComposerAttachedReferences.cjs.map +1 -0
  452. package/dist/composer/ComposerAttachedReferences.d.ts +26 -0
  453. package/dist/composer/ComposerAttachedReferences.js +119 -0
  454. package/dist/composer/ComposerAttachedReferences.js.map +1 -0
  455. package/dist/composer/ComposerNamedAgents.cjs +63 -0
  456. package/dist/composer/ComposerNamedAgents.cjs.map +1 -0
  457. package/dist/composer/ComposerNamedAgents.d.ts +16 -0
  458. package/dist/composer/ComposerNamedAgents.js +63 -0
  459. package/dist/composer/ComposerNamedAgents.js.map +1 -0
  460. package/dist/composer/attached-references.cjs +159 -0
  461. package/dist/composer/attached-references.cjs.map +1 -0
  462. package/dist/composer/attached-references.d.ts +86 -0
  463. package/dist/composer/attached-references.js +159 -0
  464. package/dist/composer/attached-references.js.map +1 -0
  465. package/dist/composer/build-composed-message.cjs +14 -7
  466. package/dist/composer/build-composed-message.cjs.map +1 -1
  467. package/dist/composer/build-composed-message.d.ts +6 -1
  468. package/dist/composer/build-composed-message.js +14 -7
  469. package/dist/composer/build-composed-message.js.map +1 -1
  470. package/dist/composer/composer-handoff.cjs +6 -2
  471. package/dist/composer/composer-handoff.cjs.map +1 -1
  472. package/dist/composer/composer-handoff.d.ts +7 -1
  473. package/dist/composer/composer-handoff.js +6 -2
  474. package/dist/composer/composer-handoff.js.map +1 -1
  475. package/dist/composer/folder-upload.cjs +149 -0
  476. package/dist/composer/folder-upload.cjs.map +1 -0
  477. package/dist/composer/folder-upload.d.ts +79 -0
  478. package/dist/composer/folder-upload.js +149 -0
  479. package/dist/composer/folder-upload.js.map +1 -0
  480. package/dist/composer/index.d.ts +1 -1
  481. package/dist/composer/staged-message-metadata.cjs +12 -0
  482. package/dist/composer/staged-message-metadata.cjs.map +1 -0
  483. package/dist/composer/staged-message-metadata.d.ts +15 -0
  484. package/dist/composer/staged-message-metadata.js +12 -0
  485. package/dist/composer/staged-message-metadata.js.map +1 -0
  486. package/dist/composer/useAttachToChat.cjs +35 -0
  487. package/dist/composer/useAttachToChat.cjs.map +1 -0
  488. package/dist/composer/useAttachToChat.d.ts +54 -0
  489. package/dist/composer/useAttachToChat.js +35 -0
  490. package/dist/composer/useAttachToChat.js.map +1 -0
  491. package/dist/composer/useAttachedReferencesComposerProps.cjs +19 -0
  492. package/dist/composer/useAttachedReferencesComposerProps.cjs.map +1 -0
  493. package/dist/composer/useAttachedReferencesComposerProps.d.ts +12 -0
  494. package/dist/composer/useAttachedReferencesComposerProps.js +19 -0
  495. package/dist/composer/useAttachedReferencesComposerProps.js.map +1 -0
  496. package/dist/composer/useFileUpload.cjs +95 -7
  497. package/dist/composer/useFileUpload.cjs.map +1 -1
  498. package/dist/composer/useFileUpload.d.ts +21 -2
  499. package/dist/composer/useFileUpload.js +95 -7
  500. package/dist/composer/useFileUpload.js.map +1 -1
  501. package/dist/data/athena-api-error.cjs +125 -0
  502. package/dist/data/athena-api-error.cjs.map +1 -0
  503. package/dist/data/athena-api-error.d.ts +96 -0
  504. package/dist/data/athena-api-error.js +125 -0
  505. package/dist/data/athena-api-error.js.map +1 -0
  506. package/dist/data/athena-data-client.cjs +106 -0
  507. package/dist/data/athena-data-client.cjs.map +1 -0
  508. package/dist/data/athena-data-client.d.ts +74 -0
  509. package/dist/data/athena-data-client.js +106 -0
  510. package/dist/data/athena-data-client.js.map +1 -0
  511. package/dist/data/athena-member.cjs +93 -0
  512. package/dist/data/athena-member.cjs.map +1 -0
  513. package/dist/data/athena-member.d.ts +125 -0
  514. package/dist/data/athena-member.js +93 -0
  515. package/dist/data/athena-member.js.map +1 -0
  516. package/dist/data/athena-request.cjs +460 -0
  517. package/dist/data/athena-request.cjs.map +1 -0
  518. package/dist/data/athena-request.d.ts +120 -0
  519. package/dist/data/athena-request.js +460 -0
  520. package/dist/data/athena-request.js.map +1 -0
  521. package/dist/data/use-athena-fetch.cjs +14 -0
  522. package/dist/data/use-athena-fetch.cjs.map +1 -0
  523. package/dist/data/use-athena-fetch.d.ts +19 -0
  524. package/dist/data/use-athena-fetch.js +14 -0
  525. package/dist/data/use-athena-fetch.js.map +1 -0
  526. package/dist/data/use-athena-graphql.cjs +66 -0
  527. package/dist/data/use-athena-graphql.cjs.map +1 -0
  528. package/dist/data/use-athena-graphql.d.ts +56 -0
  529. package/dist/data/use-athena-graphql.js +66 -0
  530. package/dist/data/use-athena-graphql.js.map +1 -0
  531. package/dist/data/use-athena-rest.cjs +33 -0
  532. package/dist/data/use-athena-rest.cjs.map +1 -0
  533. package/dist/data/use-athena-rest.d.ts +21 -0
  534. package/dist/data/use-athena-rest.js +33 -0
  535. package/dist/data/use-athena-rest.js.map +1 -0
  536. package/dist/data/use-semantic-query.cjs +44 -0
  537. package/dist/data/use-semantic-query.cjs.map +1 -0
  538. package/dist/data/use-semantic-query.d.ts +92 -0
  539. package/dist/data/use-semantic-query.js +44 -0
  540. package/dist/data/use-semantic-query.js.map +1 -0
  541. package/dist/diagnostics/athena-diagnostics.cjs.map +1 -1
  542. package/dist/diagnostics/athena-diagnostics.d.ts +5 -1
  543. package/dist/diagnostics/athena-diagnostics.js.map +1 -1
  544. package/dist/diagnostics/errors.cjs +7 -0
  545. package/dist/diagnostics/errors.cjs.map +1 -1
  546. package/dist/diagnostics/errors.d.ts +7 -0
  547. package/dist/diagnostics/errors.js +7 -0
  548. package/dist/diagnostics/errors.js.map +1 -1
  549. package/dist/index.cjs +155 -11
  550. package/dist/index.cjs.map +1 -1
  551. package/dist/index.d.ts +72 -13
  552. package/dist/index.js +148 -4
  553. package/dist/index.js.map +1 -1
  554. package/dist/keryx-http/src/initial-sync.cjs +64 -16
  555. package/dist/keryx-http/src/initial-sync.cjs.map +1 -1
  556. package/dist/keryx-http/src/initial-sync.d.ts +31 -1
  557. package/dist/keryx-http/src/initial-sync.js +64 -16
  558. package/dist/keryx-http/src/initial-sync.js.map +1 -1
  559. package/dist/keryx-http/src/own-awareness.cjs +20 -0
  560. package/dist/keryx-http/src/own-awareness.cjs.map +1 -0
  561. package/dist/keryx-http/src/own-awareness.d.ts +50 -0
  562. package/dist/keryx-http/src/own-awareness.js +20 -0
  563. package/dist/keryx-http/src/own-awareness.js.map +1 -0
  564. package/dist/keryx-http/src/update-attributions.cjs +26 -1
  565. package/dist/keryx-http/src/update-attributions.cjs.map +1 -1
  566. package/dist/keryx-http/src/update-attributions.d.ts +10 -1
  567. package/dist/keryx-http/src/update-attributions.js +26 -1
  568. package/dist/keryx-http/src/update-attributions.js.map +1 -1
  569. package/dist/offline/chat-outbox.cjs +262 -26
  570. package/dist/offline/chat-outbox.cjs.map +1 -1
  571. package/dist/offline/chat-outbox.d.ts +90 -12
  572. package/dist/offline/chat-outbox.js +263 -27
  573. package/dist/offline/chat-outbox.js.map +1 -1
  574. package/dist/provider/AthenaProvider.cjs +60 -22
  575. package/dist/provider/AthenaProvider.cjs.map +1 -1
  576. package/dist/provider/AthenaProvider.d.ts +24 -8
  577. package/dist/provider/AthenaProvider.js +61 -23
  578. package/dist/provider/AthenaProvider.js.map +1 -1
  579. package/dist/react/package.json.cjs +1 -1
  580. package/dist/react/package.json.js +1 -1
  581. package/dist/references/src/anchors/parse.cjs +11 -1
  582. package/dist/references/src/anchors/parse.cjs.map +1 -1
  583. package/dist/references/src/anchors/parse.js +11 -1
  584. package/dist/references/src/anchors/parse.js.map +1 -1
  585. package/dist/references/src/anchors/schemas.d.ts +1 -0
  586. package/dist/references/src/anchors/serialize.cjs +1 -0
  587. package/dist/references/src/anchors/serialize.cjs.map +1 -1
  588. package/dist/references/src/anchors/serialize.js +1 -0
  589. package/dist/references/src/anchors/serialize.js.map +1 -1
  590. package/dist/references/src/anchors/types.cjs +5 -0
  591. package/dist/references/src/anchors/types.cjs.map +1 -1
  592. package/dist/references/src/anchors/types.d.ts +9 -0
  593. package/dist/references/src/anchors/types.js +5 -0
  594. package/dist/references/src/anchors/types.js.map +1 -1
  595. package/dist/references/src/attachable.cjs +149 -0
  596. package/dist/references/src/attachable.cjs.map +1 -0
  597. package/dist/references/src/attachable.d.ts +87 -0
  598. package/dist/references/src/attachable.js +149 -0
  599. package/dist/references/src/attachable.js.map +1 -0
  600. package/dist/references/src/schemas.d.ts +2 -0
  601. package/dist/runtime/StatewirePlanModeLaneSync.cjs +93 -0
  602. package/dist/runtime/StatewirePlanModeLaneSync.cjs.map +1 -0
  603. package/dist/runtime/StatewirePlanModeLaneSync.d.ts +34 -0
  604. package/dist/runtime/StatewirePlanModeLaneSync.js +93 -0
  605. package/dist/runtime/StatewirePlanModeLaneSync.js.map +1 -0
  606. package/dist/runtime/StatewireThreadConfigLaneSync.cjs +2 -0
  607. package/dist/runtime/StatewireThreadConfigLaneSync.cjs.map +1 -1
  608. package/dist/runtime/StatewireThreadConfigLaneSync.d.ts +4 -0
  609. package/dist/runtime/StatewireThreadConfigLaneSync.js +2 -0
  610. package/dist/runtime/StatewireThreadConfigLaneSync.js.map +1 -1
  611. package/dist/runtime/statewire-plan-mode.cjs +71 -0
  612. package/dist/runtime/statewire-plan-mode.cjs.map +1 -0
  613. package/dist/runtime/statewire-plan-mode.d.ts +88 -0
  614. package/dist/runtime/statewire-plan-mode.js +71 -0
  615. package/dist/runtime/statewire-plan-mode.js.map +1 -0
  616. package/dist/runtime/statewire-run-config.cjs +3 -1
  617. package/dist/runtime/statewire-run-config.cjs.map +1 -1
  618. package/dist/runtime/statewire-run-config.d.ts +7 -0
  619. package/dist/runtime/statewire-run-config.js +3 -1
  620. package/dist/runtime/statewire-run-config.js.map +1 -1
  621. package/dist/runtime/statewire-session-key.cjs +11 -5
  622. package/dist/runtime/statewire-session-key.cjs.map +1 -1
  623. package/dist/runtime/statewire-session-key.d.ts +22 -10
  624. package/dist/runtime/statewire-session-key.js +11 -5
  625. package/dist/runtime/statewire-session-key.js.map +1 -1
  626. package/dist/runtime/useAthenaStatewireRuntime.cjs +64 -9
  627. package/dist/runtime/useAthenaStatewireRuntime.cjs.map +1 -1
  628. package/dist/runtime/useAthenaStatewireRuntime.d.ts +26 -10
  629. package/dist/runtime/useAthenaStatewireRuntime.js +66 -11
  630. package/dist/runtime/useAthenaStatewireRuntime.js.map +1 -1
  631. package/dist/search/useAthenaAssets.cjs +394 -0
  632. package/dist/search/useAthenaAssets.cjs.map +1 -0
  633. package/dist/search/useAthenaAssets.d.ts +186 -0
  634. package/dist/search/useAthenaAssets.js +394 -0
  635. package/dist/search/useAthenaAssets.js.map +1 -0
  636. package/dist/sheet-range/index.cjs +4 -0
  637. package/dist/sheet-range/index.cjs.map +1 -1
  638. package/dist/sheet-range/index.d.ts +4 -2
  639. package/dist/sheet-range/index.js +4 -0
  640. package/dist/sheet-range/index.js.map +1 -1
  641. package/dist/sheet-range/query-range.cjs +102 -0
  642. package/dist/sheet-range/query-range.cjs.map +1 -0
  643. package/dist/sheet-range/query-range.d.ts +46 -0
  644. package/dist/sheet-range/query-range.js +102 -0
  645. package/dist/sheet-range/query-range.js.map +1 -0
  646. package/dist/styles.css +1 -1
  647. package/dist/subagents/index.cjs +49 -0
  648. package/dist/subagents/index.cjs.map +1 -0
  649. package/dist/subagents/index.d.ts +16 -0
  650. package/dist/subagents/index.js +49 -0
  651. package/dist/subagents/index.js.map +1 -0
  652. package/dist/subagents/lane-follow.cjs +19 -0
  653. package/dist/subagents/lane-follow.cjs.map +1 -0
  654. package/dist/subagents/lane-follow.d.ts +9 -0
  655. package/dist/subagents/lane-follow.js +19 -0
  656. package/dist/subagents/lane-follow.js.map +1 -0
  657. package/dist/subagents/lane-model.cjs +178 -0
  658. package/dist/subagents/lane-model.cjs.map +1 -0
  659. package/dist/subagents/lane-model.d.ts +140 -0
  660. package/dist/subagents/lane-model.js +178 -0
  661. package/dist/subagents/lane-model.js.map +1 -0
  662. package/dist/subagents/lane-parts.cjs +517 -0
  663. package/dist/subagents/lane-parts.cjs.map +1 -0
  664. package/dist/subagents/lane-parts.d.ts +130 -0
  665. package/dist/subagents/lane-parts.js +517 -0
  666. package/dist/subagents/lane-parts.js.map +1 -0
  667. package/dist/subagents/subagent-lane-group.cjs +215 -0
  668. package/dist/subagents/subagent-lane-group.cjs.map +1 -0
  669. package/dist/subagents/subagent-lane-group.d.ts +67 -0
  670. package/dist/subagents/subagent-lane-group.js +215 -0
  671. package/dist/subagents/subagent-lane-group.js.map +1 -0
  672. package/dist/subagents/subagent-transcript-drawer.cjs +431 -0
  673. package/dist/subagents/subagent-transcript-drawer.cjs.map +1 -0
  674. package/dist/subagents/subagent-transcript-drawer.d.ts +78 -0
  675. package/dist/subagents/subagent-transcript-drawer.js +431 -0
  676. package/dist/subagents/subagent-transcript-drawer.js.map +1 -0
  677. package/dist/subagents/task-subagent-group.cjs +115 -0
  678. package/dist/subagents/task-subagent-group.cjs.map +1 -0
  679. package/dist/subagents/task-subagent-group.d.ts +36 -0
  680. package/dist/subagents/task-subagent-group.js +115 -0
  681. package/dist/subagents/task-subagent-group.js.map +1 -0
  682. package/dist/subagents/use-omitted-images-in-view.cjs +68 -0
  683. package/dist/subagents/use-omitted-images-in-view.cjs.map +1 -0
  684. package/dist/subagents/use-omitted-images-in-view.d.ts +21 -0
  685. package/dist/subagents/use-omitted-images-in-view.js +68 -0
  686. package/dist/subagents/use-omitted-images-in-view.js.map +1 -0
  687. package/dist/threads/Inbox.cjs +2 -2
  688. package/dist/threads/Inbox.cjs.map +1 -1
  689. package/dist/threads/SessionList.cjs +6 -6
  690. package/dist/threads/SessionList.cjs.map +1 -1
  691. package/dist/threads/SessionsPage.cjs +13 -7
  692. package/dist/threads/SessionsPage.cjs.map +1 -1
  693. package/dist/threads/SessionsPage.d.ts +10 -1
  694. package/dist/threads/SessionsPage.js +9 -3
  695. package/dist/threads/SessionsPage.js.map +1 -1
  696. package/dist/threads/session-list-model.cjs.map +1 -1
  697. package/dist/threads/session-list-model.d.ts +2 -1
  698. package/dist/threads/session-list-model.js.map +1 -1
  699. package/dist/threads/session-row-parts.cjs +3 -3
  700. package/dist/threads/session-row-parts.cjs.map +1 -1
  701. package/dist/threads/sessions-page-model.cjs +13 -5
  702. package/dist/threads/sessions-page-model.cjs.map +1 -1
  703. package/dist/threads/sessions-page-model.d.ts +7 -0
  704. package/dist/threads/sessions-page-model.js +11 -3
  705. package/dist/threads/sessions-page-model.js.map +1 -1
  706. package/dist/threads/sessions-page-storage.cjs +8 -8
  707. package/dist/threads/sessions-page-storage.cjs.map +1 -1
  708. package/dist/threads/sessions-page-storage.d.ts +5 -1
  709. package/dist/threads/sessions-page-storage.js +8 -8
  710. package/dist/threads/sessions-page-storage.js.map +1 -1
  711. package/dist/threads/statewire-thread-list.cjs +14 -2
  712. package/dist/threads/statewire-thread-list.cjs.map +1 -1
  713. package/dist/threads/statewire-thread-list.d.ts +11 -2
  714. package/dist/threads/statewire-thread-list.js +14 -2
  715. package/dist/threads/statewire-thread-list.js.map +1 -1
  716. package/dist/threads/use-athena-sessions.cjs +1 -0
  717. package/dist/threads/use-athena-sessions.cjs.map +1 -1
  718. package/dist/threads/use-athena-sessions.d.ts +7 -0
  719. package/dist/threads/use-athena-sessions.js +1 -0
  720. package/dist/threads/use-athena-sessions.js.map +1 -1
  721. package/dist/threads/use-athena-thread-agent.cjs +31 -0
  722. package/dist/threads/use-athena-thread-agent.cjs.map +1 -0
  723. package/dist/threads/use-athena-thread-agent.d.ts +38 -0
  724. package/dist/threads/use-athena-thread-agent.js +31 -0
  725. package/dist/threads/use-athena-thread-agent.js.map +1 -0
  726. package/dist/threads/use-athena-thread-plan-mode.cjs +18 -0
  727. package/dist/threads/use-athena-thread-plan-mode.cjs.map +1 -0
  728. package/dist/threads/use-athena-thread-plan-mode.d.ts +18 -0
  729. package/dist/threads/use-athena-thread-plan-mode.js +18 -0
  730. package/dist/threads/use-athena-thread-plan-mode.js.map +1 -0
  731. package/dist/threads/use-rest-conversation-history.d.ts +1 -0
  732. package/dist/tools/agent-creations.cjs +97 -0
  733. package/dist/tools/agent-creations.cjs.map +1 -0
  734. package/dist/tools/agent-creations.d.ts +38 -0
  735. package/dist/tools/agent-creations.js +97 -0
  736. package/dist/tools/agent-creations.js.map +1 -0
  737. package/dist/tools/agent-highlights.cjs +100 -0
  738. package/dist/tools/agent-highlights.cjs.map +1 -0
  739. package/dist/tools/agent-highlights.d.ts +57 -0
  740. package/dist/tools/agent-highlights.js +100 -0
  741. package/dist/tools/agent-highlights.js.map +1 -0
  742. package/dist/tools/append-document-tool-ui.cjs +1 -0
  743. package/dist/tools/append-document-tool-ui.cjs.map +1 -1
  744. package/dist/tools/append-document-tool-ui.d.ts +7 -0
  745. package/dist/tools/append-document-tool-ui.js +2 -1
  746. package/dist/tools/append-document-tool-ui.js.map +1 -1
  747. package/dist/tools/auto-open-tools.cjs +144 -71
  748. package/dist/tools/auto-open-tools.cjs.map +1 -1
  749. package/dist/tools/auto-open-tools.d.ts +131 -1
  750. package/dist/tools/auto-open-tools.js +145 -72
  751. package/dist/tools/auto-open-tools.js.map +1 -1
  752. package/dist/tools/browser-tool-uis.cjs +594 -0
  753. package/dist/tools/browser-tool-uis.cjs.map +1 -0
  754. package/dist/tools/browser-tool-uis.d.ts +8 -0
  755. package/dist/tools/browser-tool-uis.js +594 -0
  756. package/dist/tools/browser-tool-uis.js.map +1 -0
  757. package/dist/tools/computer-asset-tool-uis.cjs +313 -0
  758. package/dist/tools/computer-asset-tool-uis.cjs.map +1 -0
  759. package/dist/tools/computer-asset-tool-uis.d.ts +5 -0
  760. package/dist/tools/computer-asset-tool-uis.js +313 -0
  761. package/dist/tools/computer-asset-tool-uis.js.map +1 -0
  762. package/dist/tools/document-edit-tool-uis.cjs +218 -0
  763. package/dist/tools/document-edit-tool-uis.cjs.map +1 -0
  764. package/dist/tools/document-edit-tool-uis.d.ts +40 -0
  765. package/dist/tools/document-edit-tool-uis.js +218 -0
  766. package/dist/tools/document-edit-tool-uis.js.map +1 -0
  767. package/dist/tools/drive-tool-uis.cjs +429 -0
  768. package/dist/tools/drive-tool-uis.cjs.map +1 -0
  769. package/dist/tools/drive-tool-uis.d.ts +121 -0
  770. package/dist/tools/drive-tool-uis.js +429 -0
  771. package/dist/tools/drive-tool-uis.js.map +1 -0
  772. package/dist/tools/email-calendar-tool-uis.cjs +789 -0
  773. package/dist/tools/email-calendar-tool-uis.cjs.map +1 -0
  774. package/dist/tools/email-calendar-tool-uis.d.ts +129 -0
  775. package/dist/tools/email-calendar-tool-uis.js +789 -0
  776. package/dist/tools/email-calendar-tool-uis.js.map +1 -0
  777. package/dist/tools/ontology-tool-uis.cjs +83 -0
  778. package/dist/tools/ontology-tool-uis.cjs.map +1 -0
  779. package/dist/tools/ontology-tool-uis.d.ts +9 -0
  780. package/dist/tools/ontology-tool-uis.js +83 -0
  781. package/dist/tools/ontology-tool-uis.js.map +1 -0
  782. package/dist/tools/orchestration-tool-uis.cjs +586 -0
  783. package/dist/tools/orchestration-tool-uis.cjs.map +1 -0
  784. package/dist/tools/orchestration-tool-uis.d.ts +141 -0
  785. package/dist/tools/orchestration-tool-uis.js +586 -0
  786. package/dist/tools/orchestration-tool-uis.js.map +1 -0
  787. package/dist/tools/presentation-edit-tool-uis.cjs +516 -0
  788. package/dist/tools/presentation-edit-tool-uis.cjs.map +1 -0
  789. package/dist/tools/presentation-edit-tool-uis.d.ts +73 -0
  790. package/dist/tools/presentation-edit-tool-uis.js +516 -0
  791. package/dist/tools/presentation-edit-tool-uis.js.map +1 -0
  792. package/dist/tools/project-tool-uis.cjs +213 -0
  793. package/dist/tools/project-tool-uis.cjs.map +1 -0
  794. package/dist/tools/project-tool-uis.d.ts +14 -0
  795. package/dist/tools/project-tool-uis.js +213 -0
  796. package/dist/tools/project-tool-uis.js.map +1 -0
  797. package/dist/tools/sandbox-tool-uis.cjs +491 -0
  798. package/dist/tools/sandbox-tool-uis.cjs.map +1 -0
  799. package/dist/tools/sandbox-tool-uis.d.ts +116 -0
  800. package/dist/tools/sandbox-tool-uis.js +491 -0
  801. package/dist/tools/sandbox-tool-uis.js.map +1 -0
  802. package/dist/tools/sheet-query-tool-ui.cjs +138 -0
  803. package/dist/tools/sheet-query-tool-ui.cjs.map +1 -0
  804. package/dist/tools/sheet-query-tool-ui.d.ts +15 -0
  805. package/dist/tools/sheet-query-tool-ui.js +138 -0
  806. package/dist/tools/sheet-query-tool-ui.js.map +1 -0
  807. package/dist/tools/studio-screenshot-tool-uis.cjs +262 -0
  808. package/dist/tools/studio-screenshot-tool-uis.cjs.map +1 -0
  809. package/dist/tools/studio-screenshot-tool-uis.d.ts +52 -0
  810. package/dist/tools/studio-screenshot-tool-uis.js +262 -0
  811. package/dist/tools/studio-screenshot-tool-uis.js.map +1 -0
  812. package/dist/tools/subagent-task-tool-ui.cjs +24 -475
  813. package/dist/tools/subagent-task-tool-ui.cjs.map +1 -1
  814. package/dist/tools/subagent-task-tool-ui.d.ts +19 -103
  815. package/dist/tools/subagent-task-tool-ui.js +28 -479
  816. package/dist/tools/subagent-task-tool-ui.js.map +1 -1
  817. package/dist/tools/tool-summary.cjs +36 -0
  818. package/dist/tools/tool-summary.cjs.map +1 -1
  819. package/dist/tools/tool-summary.js +36 -0
  820. package/dist/tools/tool-summary.js.map +1 -1
  821. package/dist/tools/tool-uis.cjs +181 -53
  822. package/dist/tools/tool-uis.cjs.map +1 -1
  823. package/dist/tools/tool-uis.d.ts +40 -0
  824. package/dist/tools/tool-uis.js +183 -55
  825. package/dist/tools/tool-uis.js.map +1 -1
  826. package/dist/typed-interrupts/index.cjs +15 -0
  827. package/dist/typed-interrupts/index.cjs.map +1 -0
  828. package/dist/typed-interrupts/index.d.ts +20 -0
  829. package/dist/typed-interrupts/index.js +15 -0
  830. package/dist/typed-interrupts/index.js.map +1 -0
  831. package/dist/version.cjs +4 -0
  832. package/dist/version.cjs.map +1 -1
  833. package/dist/version.d.ts +9 -0
  834. package/dist/version.js +4 -0
  835. package/dist/version.js.map +1 -1
  836. package/dist/workbench/live-desktop-api.cjs +2 -1
  837. package/dist/workbench/live-desktop-api.cjs.map +1 -1
  838. package/dist/workbench/live-desktop-api.js +2 -1
  839. package/dist/workbench/live-desktop-api.js.map +1 -1
  840. package/dist/workbench/session-workbench-panes.cjs +6 -6
  841. package/dist/workbench/session-workbench-panes.cjs.map +1 -1
  842. package/dist/workbench/session-workspace-api.cjs +7 -2
  843. package/dist/workbench/session-workspace-api.cjs.map +1 -1
  844. package/dist/workbench/session-workspace-api.d.ts +10 -0
  845. package/dist/workbench/session-workspace-api.js +7 -2
  846. package/dist/workbench/session-workspace-api.js.map +1 -1
  847. package/package.json +28 -6
  848. package/dist/agent-runtime/src/chat-outbox-store.cjs +0 -510
  849. package/dist/agent-runtime/src/chat-outbox-store.cjs.map +0 -1
  850. package/dist/agent-runtime/src/chat-outbox-store.d.ts +0 -210
  851. package/dist/agent-runtime/src/chat-outbox-store.js +0 -510
  852. package/dist/agent-runtime/src/chat-outbox-store.js.map +0 -1
@@ -13,6 +13,9 @@ function computerStatusPath(assetId) {
13
13
  function computerSshAccessPath(assetId) {
14
14
  return `/api/v0/computer/${encodeURIComponent(assetId)}/ssh-access`;
15
15
  }
16
+ function isAssetMissingResponse({ status, body }) {
17
+ return status === 404 && utils.isRecord(body) && typeof body.detail === "string" && /^Asset (\S+ )?not found$/.test(body.detail);
18
+ }
16
19
  const WORKSPACE_ROLES = /* @__PURE__ */ new Set(["session_computer", "computer", "asset"]);
17
20
  function readWorkspaceAsset(value) {
18
21
  if (!utils.isRecord(value)) return null;
@@ -90,12 +93,13 @@ async function getAgoraJson({
90
93
  const response = await credentialRenewal.sendWithCredentialRenewal(auth, get);
91
94
  if (!response.ok) {
92
95
  const refused = response.status === 401 || response.status === 403;
96
+ const detail = await response.json().catch(() => void 0);
93
97
  throw new errors.AthenaSdkError({
94
98
  code: refused ? "auth_rejected" : "session_workspace_failed",
95
99
  message: `Reading ${what} failed: ${response.status}`,
96
100
  status: response.status,
97
- detail: await response.json().catch(() => void 0),
98
- hint: refused ? "The signed-in user cannot read this session or asset." : "Check that backendUrl points at an Agora that serves this route."
101
+ detail,
102
+ hint: refused ? "The signed-in user cannot read this session or asset." : isAssetMissingResponse({ status: response.status, body: detail }) ? "The asset does not exist, or the signed-in user may not read it." : "Check that backendUrl points at an Agora that serves this route."
99
103
  });
100
104
  }
101
105
  return response.json();
@@ -150,6 +154,7 @@ exports.computerStatusPath = computerStatusPath;
150
154
  exports.fetchComputerRuntimeStatus = fetchComputerRuntimeStatus;
151
155
  exports.fetchComputerSshAccess = fetchComputerSshAccess;
152
156
  exports.fetchSessionWorkspace = fetchSessionWorkspace;
157
+ exports.isAssetMissingResponse = isAssetMissingResponse;
153
158
  exports.readComputerRuntimeStatus = readComputerRuntimeStatus;
154
159
  exports.readComputerSshAccess = readComputerSshAccess;
155
160
  exports.readSessionWorkspace = readSessionWorkspace;
@@ -1 +1 @@
1
- {"version":3,"file":"session-workspace-api.cjs","sources":["../../src/workbench/session-workspace-api.ts"],"sourcesContent":["/**\n * The Agora reads behind the session workbench, each one an existing,\n * permission-gated route:\n *\n * - `GET /api/conversations/threads/{thread_id}/workspace` — the computers and\n * assets a session works with (agora `web/api/session/workspace.py`; thread\n * access, then a narrow per-asset permission check, so it names only assets\n * the caller may open).\n * - `GET /api/sandbox/computer/{asset_id}/status` — a computer's runtime state\n * (asset VIEW; reads the runtime, never wakes it).\n * - `GET /api/v0/computer/{asset_id}/ssh-access` — the ready-made `ssh`\n * command (asset EDIT; mints nothing, wakes nothing).\n *\n * The credential rides like every SDK REST call: `Authorization: Bearer`\n * (resolved live through `getToken`, with one forced re-mint after a 401) or\n * `X-API-KEY`, else a same-origin host's cookie. Every failure is an\n * `AthenaSdkError` (`session_workspace_failed`, or `auth_rejected` for a\n * 401/403); an abort keeps its own identity.\n */\nimport { getAthenaApiBaseUrl } from '../collab/mint';\nimport { AthenaSdkError } from '../diagnostics/errors';\nimport { isRecord } from '../lib/utils';\nimport { sendWithCredentialRenewal } from '../runtime/credential-renewal';\nimport type { StatewireAuthSource } from '../runtime/statewire-auth-headers';\n\n/** Why an asset is in a session's workspace. */\nexport type SessionWorkspaceRole = 'session_computer' | 'computer' | 'asset';\n\n/** One computer or asset a session works with. */\nexport interface SessionWorkspaceAsset {\n assetId: string;\n title: string | null;\n /** The asset's type (`computer`, `spreadsheet`, `document`, …). */\n assetType: string;\n /** ISO 8601 time of the asset's last update. */\n updatedAt: string;\n role: SessionWorkspaceRole;\n}\n\n/** What a session works with, as the caller may see it. */\nexport interface SessionWorkspace {\n threadId: string;\n /** The computer bound to the session, when it has one the caller may open. */\n sessionComputerAssetId: string | null;\n /** Session computer first, then the computers the session touched, most recent first. */\n computers: SessionWorkspaceAsset[];\n /** The assets the session created or edited, most recently touched first. */\n assets: SessionWorkspaceAsset[];\n}\n\n/** A computer's runtime state as `/status` reports it. */\nexport interface ComputerRuntimeStatus {\n /** `started`, `stopped`, `restoring`, `unknown`, … — the provider's word. */\n state: string;\n /** `stopping` / `stopped` while someone asked it to stop. */\n explicitStop: string | null;\n provider: string | null;\n}\n\n/** The SSH target of a computer (identity mode: a registered key logs in). */\nexport interface ComputerSshAccess {\n /** Ready to run: `ssh [-p <port>] <asset_id>@<host>`. */\n command: string;\n host: string;\n port: number;\n username: string;\n /** False where the gateway accepts temporary tokens only (the command is refused there). */\n keyAuthEnabled: boolean;\n}\n\nexport function sessionWorkspacePath(threadId: string): string {\n return `/api/conversations/threads/${encodeURIComponent(threadId)}/workspace`;\n}\n\nexport function computerStatusPath(assetId: string): string {\n return `/api/sandbox/computer/${encodeURIComponent(assetId)}/status`;\n}\n\nexport function computerSshAccessPath(assetId: string): string {\n return `/api/v0/computer/${encodeURIComponent(assetId)}/ssh-access`;\n}\n\nconst WORKSPACE_ROLES: ReadonlySet<string> = new Set(['session_computer', 'computer', 'asset']);\n\nfunction readWorkspaceAsset(value: unknown): SessionWorkspaceAsset | null {\n if (!isRecord(value)) return null;\n const { asset_id, title, asset_type, updated_at, role } = value;\n if (typeof asset_id !== 'string' || asset_id.length === 0) return null;\n return {\n assetId: asset_id,\n title: typeof title === 'string' && title.trim().length > 0 ? title : null,\n assetType: typeof asset_type === 'string' ? asset_type : '',\n updatedAt: typeof updated_at === 'string' ? updated_at : '',\n role:\n typeof role === 'string' && WORKSPACE_ROLES.has(role)\n ? (role as SessionWorkspaceRole)\n : 'asset',\n };\n}\n\nfunction readWorkspaceAssets(value: unknown): SessionWorkspaceAsset[] {\n if (!Array.isArray(value)) return [];\n return value.flatMap((entry) => {\n const asset = readWorkspaceAsset(entry);\n return asset ? [asset] : [];\n });\n}\n\n/**\n * The route's snake_case body as the SDK's camelCase shape. Tolerant: a\n * malformed entry is dropped rather than failing the whole pane, and a body\n * that is not an object reads as an empty workspace for `threadId`.\n */\nexport function readSessionWorkspace(body: unknown, threadId: string): SessionWorkspace {\n if (!isRecord(body)) {\n return { threadId, sessionComputerAssetId: null, computers: [], assets: [] };\n }\n const sessionComputer = body.session_computer_asset_id;\n return {\n threadId: typeof body.thread_id === 'string' && body.thread_id ? body.thread_id : threadId,\n sessionComputerAssetId:\n typeof sessionComputer === 'string' && sessionComputer ? sessionComputer : null,\n computers: readWorkspaceAssets(body.computers),\n assets: readWorkspaceAssets(body.assets),\n };\n}\n\nexport function readComputerRuntimeStatus(body: unknown): ComputerRuntimeStatus | null {\n if (!isRecord(body) || typeof body.state !== 'string' || !body.state) return null;\n return {\n state: body.state,\n explicitStop: typeof body.explicit_stop === 'string' ? body.explicit_stop : null,\n provider: typeof body.provider === 'string' ? body.provider : null,\n };\n}\n\nexport function readComputerSshAccess(body: unknown): ComputerSshAccess | null {\n if (!isRecord(body) || typeof body.command !== 'string' || !body.command) return null;\n return {\n command: body.command,\n host: typeof body.host === 'string' ? body.host : '',\n port: typeof body.port === 'number' ? body.port : 22,\n username: typeof body.username === 'string' ? body.username : '',\n keyAuthEnabled: body.key_auth_enabled === true,\n };\n}\n\n/** A `fetch` the caller cancelled (unmount, a newer query): lifecycle, not failure. */\nfunction isAbortError(error: unknown): boolean {\n return (error instanceof DOMException || error instanceof Error) && error.name === 'AbortError';\n}\n\nasync function getAgoraJson({\n backendUrl,\n auth,\n path,\n what,\n signal,\n}: {\n backendUrl: string;\n auth: StatewireAuthSource;\n path: string;\n /** Names the read in the error message (`the session workspace`). */\n what: string;\n signal?: AbortSignal;\n}): Promise<unknown> {\n const url = `${getAthenaApiBaseUrl(backendUrl)}${path}`;\n const get = async (headers: Record<string, string>): Promise<Response> => {\n try {\n return await fetch(url, { method: 'GET', headers, signal: signal ?? null });\n } catch (error) {\n if (isAbortError(error)) throw error;\n throw new AthenaSdkError({\n code: 'session_workspace_failed',\n message: `Reading ${what} could not reach the Agora API.`,\n cause: error,\n hint: 'Check the network and that backendUrl points at the Agora API base.',\n });\n }\n };\n const response = await sendWithCredentialRenewal(auth, get);\n if (!response.ok) {\n const refused = response.status === 401 || response.status === 403;\n throw new AthenaSdkError({\n code: refused ? 'auth_rejected' : 'session_workspace_failed',\n message: `Reading ${what} failed: ${response.status}`,\n status: response.status,\n detail: await response.json().catch(() => undefined),\n hint: refused\n ? 'The signed-in user cannot read this session or asset.'\n : 'Check that backendUrl points at an Agora that serves this route.',\n });\n }\n return response.json();\n}\n\nexport async function fetchSessionWorkspace({\n backendUrl,\n auth,\n threadId,\n signal,\n}: {\n backendUrl: string;\n auth: StatewireAuthSource;\n threadId: string;\n signal?: AbortSignal;\n}): Promise<SessionWorkspace> {\n const body = await getAgoraJson({\n backendUrl,\n auth,\n path: sessionWorkspacePath(threadId),\n what: 'the session workspace',\n signal,\n });\n return readSessionWorkspace(body, threadId);\n}\n\nexport async function fetchComputerRuntimeStatus({\n backendUrl,\n auth,\n assetId,\n signal,\n}: {\n backendUrl: string;\n auth: StatewireAuthSource;\n assetId: string;\n signal?: AbortSignal;\n}): Promise<ComputerRuntimeStatus | null> {\n const body = await getAgoraJson({\n backendUrl,\n auth,\n path: computerStatusPath(assetId),\n what: 'the computer status',\n signal,\n });\n return readComputerRuntimeStatus(body);\n}\n\nexport async function fetchComputerSshAccess({\n backendUrl,\n auth,\n assetId,\n signal,\n}: {\n backendUrl: string;\n auth: StatewireAuthSource;\n assetId: string;\n signal?: AbortSignal;\n}): Promise<ComputerSshAccess | null> {\n const body = await getAgoraJson({\n backendUrl,\n auth,\n path: computerSshAccessPath(assetId),\n what: 'the computer SSH target',\n signal,\n });\n return readComputerSshAccess(body);\n}\n"],"names":["isRecord","getAthenaApiBaseUrl","AthenaSdkError","sendWithCredentialRenewal"],"mappings":"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"}
1
+ {"version":3,"file":"session-workspace-api.cjs","sources":["../../src/workbench/session-workspace-api.ts"],"sourcesContent":["/**\n * The Agora reads behind the session workbench, each one an existing,\n * permission-gated route:\n *\n * - `GET /api/conversations/threads/{thread_id}/workspace` — the computers and\n * assets a session works with (agora `web/api/session/workspace.py`; thread\n * access, then a narrow per-asset permission check, so it names only assets\n * the caller may open).\n * - `GET /api/sandbox/computer/{asset_id}/status` — a computer's runtime state\n * (asset VIEW; reads the runtime, never wakes it).\n * - `GET /api/v0/computer/{asset_id}/ssh-access` — the ready-made `ssh`\n * command (asset EDIT; mints nothing, wakes nothing).\n *\n * The credential rides like every SDK REST call: `Authorization: Bearer`\n * (resolved live through `getToken`, with one forced re-mint after a 401) or\n * `X-API-KEY`, else a same-origin host's cookie. Every failure is an\n * `AthenaSdkError` (`session_workspace_failed`, or `auth_rejected` for a\n * 401/403); an abort keeps its own identity. A computer or asset the caller may\n * not learn of answers like one that does not exist (404 \"Asset <id> not\n * found\", gate finding F19): `session_workspace_failed`, with a hint that says so.\n */\nimport { getAthenaApiBaseUrl } from '../collab/mint';\nimport { AthenaSdkError } from '../diagnostics/errors';\nimport { isRecord } from '../lib/utils';\nimport { sendWithCredentialRenewal } from '../runtime/credential-renewal';\nimport type { StatewireAuthSource } from '../runtime/statewire-auth-headers';\n\n/** Why an asset is in a session's workspace. */\nexport type SessionWorkspaceRole = 'session_computer' | 'computer' | 'asset';\n\n/** One computer or asset a session works with. */\nexport interface SessionWorkspaceAsset {\n assetId: string;\n title: string | null;\n /** The asset's type (`computer`, `spreadsheet`, `document`, …). */\n assetType: string;\n /** ISO 8601 time of the asset's last update. */\n updatedAt: string;\n role: SessionWorkspaceRole;\n}\n\n/** What a session works with, as the caller may see it. */\nexport interface SessionWorkspace {\n threadId: string;\n /** The computer bound to the session, when it has one the caller may open. */\n sessionComputerAssetId: string | null;\n /** Session computer first, then the computers the session touched, most recent first. */\n computers: SessionWorkspaceAsset[];\n /** The assets the session created or edited, most recently touched first. */\n assets: SessionWorkspaceAsset[];\n}\n\n/** A computer's runtime state as `/status` reports it. */\nexport interface ComputerRuntimeStatus {\n /** `started`, `stopped`, `restoring`, `unknown`, … — the provider's word. */\n state: string;\n /** `stopping` / `stopped` while someone asked it to stop. */\n explicitStop: string | null;\n provider: string | null;\n}\n\n/** The SSH target of a computer (identity mode: a registered key logs in). */\nexport interface ComputerSshAccess {\n /** Ready to run: `ssh [-p <port>] <asset_id>@<host>`. */\n command: string;\n host: string;\n port: number;\n username: string;\n /** False where the gateway accepts temporary tokens only (the command is refused there). */\n keyAuthEnabled: boolean;\n}\n\nexport function sessionWorkspacePath(threadId: string): string {\n return `/api/conversations/threads/${encodeURIComponent(threadId)}/workspace`;\n}\n\nexport function computerStatusPath(assetId: string): string {\n return `/api/sandbox/computer/${encodeURIComponent(assetId)}/status`;\n}\n\nexport function computerSshAccessPath(assetId: string): string {\n return `/api/v0/computer/${encodeURIComponent(assetId)}/ssh-access`;\n}\n\n/**\n * agora's 404 for an asset that does not exist or that the caller may not learn\n * of: `detail` \"Asset <id> not found\". Since gate finding F19 every refusal of a\n * caller outside the asset's workspace reads exactly like this; a refused member\n * of that workspace gets 403.\n */\nexport function isAssetMissingResponse({ status, body }: { status: number; body: unknown }): boolean {\n return (\n status === 404 &&\n isRecord(body) &&\n typeof body.detail === 'string' &&\n /^Asset (\\S+ )?not found$/.test(body.detail)\n );\n}\n\nconst WORKSPACE_ROLES: ReadonlySet<string> = new Set(['session_computer', 'computer', 'asset']);\n\nfunction readWorkspaceAsset(value: unknown): SessionWorkspaceAsset | null {\n if (!isRecord(value)) return null;\n const { asset_id, title, asset_type, updated_at, role } = value;\n if (typeof asset_id !== 'string' || asset_id.length === 0) return null;\n return {\n assetId: asset_id,\n title: typeof title === 'string' && title.trim().length > 0 ? title : null,\n assetType: typeof asset_type === 'string' ? asset_type : '',\n updatedAt: typeof updated_at === 'string' ? updated_at : '',\n role:\n typeof role === 'string' && WORKSPACE_ROLES.has(role)\n ? (role as SessionWorkspaceRole)\n : 'asset',\n };\n}\n\nfunction readWorkspaceAssets(value: unknown): SessionWorkspaceAsset[] {\n if (!Array.isArray(value)) return [];\n return value.flatMap((entry) => {\n const asset = readWorkspaceAsset(entry);\n return asset ? [asset] : [];\n });\n}\n\n/**\n * The route's snake_case body as the SDK's camelCase shape. Tolerant: a\n * malformed entry is dropped rather than failing the whole pane, and a body\n * that is not an object reads as an empty workspace for `threadId`.\n */\nexport function readSessionWorkspace(body: unknown, threadId: string): SessionWorkspace {\n if (!isRecord(body)) {\n return { threadId, sessionComputerAssetId: null, computers: [], assets: [] };\n }\n const sessionComputer = body.session_computer_asset_id;\n return {\n threadId: typeof body.thread_id === 'string' && body.thread_id ? body.thread_id : threadId,\n sessionComputerAssetId:\n typeof sessionComputer === 'string' && sessionComputer ? sessionComputer : null,\n computers: readWorkspaceAssets(body.computers),\n assets: readWorkspaceAssets(body.assets),\n };\n}\n\nexport function readComputerRuntimeStatus(body: unknown): ComputerRuntimeStatus | null {\n if (!isRecord(body) || typeof body.state !== 'string' || !body.state) return null;\n return {\n state: body.state,\n explicitStop: typeof body.explicit_stop === 'string' ? body.explicit_stop : null,\n provider: typeof body.provider === 'string' ? body.provider : null,\n };\n}\n\nexport function readComputerSshAccess(body: unknown): ComputerSshAccess | null {\n if (!isRecord(body) || typeof body.command !== 'string' || !body.command) return null;\n return {\n command: body.command,\n host: typeof body.host === 'string' ? body.host : '',\n port: typeof body.port === 'number' ? body.port : 22,\n username: typeof body.username === 'string' ? body.username : '',\n keyAuthEnabled: body.key_auth_enabled === true,\n };\n}\n\n/** A `fetch` the caller cancelled (unmount, a newer query): lifecycle, not failure. */\nfunction isAbortError(error: unknown): boolean {\n return (error instanceof DOMException || error instanceof Error) && error.name === 'AbortError';\n}\n\nasync function getAgoraJson({\n backendUrl,\n auth,\n path,\n what,\n signal,\n}: {\n backendUrl: string;\n auth: StatewireAuthSource;\n path: string;\n /** Names the read in the error message (`the session workspace`). */\n what: string;\n signal?: AbortSignal;\n}): Promise<unknown> {\n const url = `${getAthenaApiBaseUrl(backendUrl)}${path}`;\n const get = async (headers: Record<string, string>): Promise<Response> => {\n try {\n return await fetch(url, { method: 'GET', headers, signal: signal ?? null });\n } catch (error) {\n if (isAbortError(error)) throw error;\n throw new AthenaSdkError({\n code: 'session_workspace_failed',\n message: `Reading ${what} could not reach the Agora API.`,\n cause: error,\n hint: 'Check the network and that backendUrl points at the Agora API base.',\n });\n }\n };\n const response = await sendWithCredentialRenewal(auth, get);\n if (!response.ok) {\n const refused = response.status === 401 || response.status === 403;\n const detail: unknown = await response.json().catch(() => undefined);\n throw new AthenaSdkError({\n code: refused ? 'auth_rejected' : 'session_workspace_failed',\n message: `Reading ${what} failed: ${response.status}`,\n status: response.status,\n detail,\n hint: refused\n ? 'The signed-in user cannot read this session or asset.'\n : isAssetMissingResponse({ status: response.status, body: detail })\n ? 'The asset does not exist, or the signed-in user may not read it.'\n : 'Check that backendUrl points at an Agora that serves this route.',\n });\n }\n return response.json();\n}\n\nexport async function fetchSessionWorkspace({\n backendUrl,\n auth,\n threadId,\n signal,\n}: {\n backendUrl: string;\n auth: StatewireAuthSource;\n threadId: string;\n signal?: AbortSignal;\n}): Promise<SessionWorkspace> {\n const body = await getAgoraJson({\n backendUrl,\n auth,\n path: sessionWorkspacePath(threadId),\n what: 'the session workspace',\n signal,\n });\n return readSessionWorkspace(body, threadId);\n}\n\nexport async function fetchComputerRuntimeStatus({\n backendUrl,\n auth,\n assetId,\n signal,\n}: {\n backendUrl: string;\n auth: StatewireAuthSource;\n assetId: string;\n signal?: AbortSignal;\n}): Promise<ComputerRuntimeStatus | null> {\n const body = await getAgoraJson({\n backendUrl,\n auth,\n path: computerStatusPath(assetId),\n what: 'the computer status',\n signal,\n });\n return readComputerRuntimeStatus(body);\n}\n\nexport async function fetchComputerSshAccess({\n backendUrl,\n auth,\n assetId,\n signal,\n}: {\n backendUrl: string;\n auth: StatewireAuthSource;\n assetId: string;\n signal?: AbortSignal;\n}): Promise<ComputerSshAccess | null> {\n const body = await getAgoraJson({\n backendUrl,\n auth,\n path: computerSshAccessPath(assetId),\n what: 'the computer SSH target',\n signal,\n });\n return readComputerSshAccess(body);\n}\n"],"names":["isRecord","getAthenaApiBaseUrl","AthenaSdkError","sendWithCredentialRenewal"],"mappings":"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"}
@@ -42,6 +42,16 @@ export interface ComputerSshAccess {
42
42
  export declare function sessionWorkspacePath(threadId: string): string;
43
43
  export declare function computerStatusPath(assetId: string): string;
44
44
  export declare function computerSshAccessPath(assetId: string): string;
45
+ /**
46
+ * agora's 404 for an asset that does not exist or that the caller may not learn
47
+ * of: `detail` "Asset <id> not found". Since gate finding F19 every refusal of a
48
+ * caller outside the asset's workspace reads exactly like this; a refused member
49
+ * of that workspace gets 403.
50
+ */
51
+ export declare function isAssetMissingResponse({ status, body }: {
52
+ status: number;
53
+ body: unknown;
54
+ }): boolean;
45
55
  /**
46
56
  * The route's snake_case body as the SDK's camelCase shape. Tolerant: a
47
57
  * malformed entry is dropped rather than failing the whole pane, and a body
@@ -11,6 +11,9 @@ function computerStatusPath(assetId) {
11
11
  function computerSshAccessPath(assetId) {
12
12
  return `/api/v0/computer/${encodeURIComponent(assetId)}/ssh-access`;
13
13
  }
14
+ function isAssetMissingResponse({ status, body }) {
15
+ return status === 404 && isRecord(body) && typeof body.detail === "string" && /^Asset (\S+ )?not found$/.test(body.detail);
16
+ }
14
17
  const WORKSPACE_ROLES = /* @__PURE__ */ new Set(["session_computer", "computer", "asset"]);
15
18
  function readWorkspaceAsset(value) {
16
19
  if (!isRecord(value)) return null;
@@ -88,12 +91,13 @@ async function getAgoraJson({
88
91
  const response = await sendWithCredentialRenewal(auth, get);
89
92
  if (!response.ok) {
90
93
  const refused = response.status === 401 || response.status === 403;
94
+ const detail = await response.json().catch(() => void 0);
91
95
  throw new AthenaSdkError({
92
96
  code: refused ? "auth_rejected" : "session_workspace_failed",
93
97
  message: `Reading ${what} failed: ${response.status}`,
94
98
  status: response.status,
95
- detail: await response.json().catch(() => void 0),
96
- hint: refused ? "The signed-in user cannot read this session or asset." : "Check that backendUrl points at an Agora that serves this route."
99
+ detail,
100
+ hint: refused ? "The signed-in user cannot read this session or asset." : isAssetMissingResponse({ status: response.status, body: detail }) ? "The asset does not exist, or the signed-in user may not read it." : "Check that backendUrl points at an Agora that serves this route."
97
101
  });
98
102
  }
99
103
  return response.json();
@@ -149,6 +153,7 @@ export {
149
153
  fetchComputerRuntimeStatus,
150
154
  fetchComputerSshAccess,
151
155
  fetchSessionWorkspace,
156
+ isAssetMissingResponse,
152
157
  readComputerRuntimeStatus,
153
158
  readComputerSshAccess,
154
159
  readSessionWorkspace,
@@ -1 +1 @@
1
- {"version":3,"file":"session-workspace-api.js","sources":["../../src/workbench/session-workspace-api.ts"],"sourcesContent":["/**\n * The Agora reads behind the session workbench, each one an existing,\n * permission-gated route:\n *\n * - `GET /api/conversations/threads/{thread_id}/workspace` — the computers and\n * assets a session works with (agora `web/api/session/workspace.py`; thread\n * access, then a narrow per-asset permission check, so it names only assets\n * the caller may open).\n * - `GET /api/sandbox/computer/{asset_id}/status` — a computer's runtime state\n * (asset VIEW; reads the runtime, never wakes it).\n * - `GET /api/v0/computer/{asset_id}/ssh-access` — the ready-made `ssh`\n * command (asset EDIT; mints nothing, wakes nothing).\n *\n * The credential rides like every SDK REST call: `Authorization: Bearer`\n * (resolved live through `getToken`, with one forced re-mint after a 401) or\n * `X-API-KEY`, else a same-origin host's cookie. Every failure is an\n * `AthenaSdkError` (`session_workspace_failed`, or `auth_rejected` for a\n * 401/403); an abort keeps its own identity.\n */\nimport { getAthenaApiBaseUrl } from '../collab/mint';\nimport { AthenaSdkError } from '../diagnostics/errors';\nimport { isRecord } from '../lib/utils';\nimport { sendWithCredentialRenewal } from '../runtime/credential-renewal';\nimport type { StatewireAuthSource } from '../runtime/statewire-auth-headers';\n\n/** Why an asset is in a session's workspace. */\nexport type SessionWorkspaceRole = 'session_computer' | 'computer' | 'asset';\n\n/** One computer or asset a session works with. */\nexport interface SessionWorkspaceAsset {\n assetId: string;\n title: string | null;\n /** The asset's type (`computer`, `spreadsheet`, `document`, …). */\n assetType: string;\n /** ISO 8601 time of the asset's last update. */\n updatedAt: string;\n role: SessionWorkspaceRole;\n}\n\n/** What a session works with, as the caller may see it. */\nexport interface SessionWorkspace {\n threadId: string;\n /** The computer bound to the session, when it has one the caller may open. */\n sessionComputerAssetId: string | null;\n /** Session computer first, then the computers the session touched, most recent first. */\n computers: SessionWorkspaceAsset[];\n /** The assets the session created or edited, most recently touched first. */\n assets: SessionWorkspaceAsset[];\n}\n\n/** A computer's runtime state as `/status` reports it. */\nexport interface ComputerRuntimeStatus {\n /** `started`, `stopped`, `restoring`, `unknown`, … — the provider's word. */\n state: string;\n /** `stopping` / `stopped` while someone asked it to stop. */\n explicitStop: string | null;\n provider: string | null;\n}\n\n/** The SSH target of a computer (identity mode: a registered key logs in). */\nexport interface ComputerSshAccess {\n /** Ready to run: `ssh [-p <port>] <asset_id>@<host>`. */\n command: string;\n host: string;\n port: number;\n username: string;\n /** False where the gateway accepts temporary tokens only (the command is refused there). */\n keyAuthEnabled: boolean;\n}\n\nexport function sessionWorkspacePath(threadId: string): string {\n return `/api/conversations/threads/${encodeURIComponent(threadId)}/workspace`;\n}\n\nexport function computerStatusPath(assetId: string): string {\n return `/api/sandbox/computer/${encodeURIComponent(assetId)}/status`;\n}\n\nexport function computerSshAccessPath(assetId: string): string {\n return `/api/v0/computer/${encodeURIComponent(assetId)}/ssh-access`;\n}\n\nconst WORKSPACE_ROLES: ReadonlySet<string> = new Set(['session_computer', 'computer', 'asset']);\n\nfunction readWorkspaceAsset(value: unknown): SessionWorkspaceAsset | null {\n if (!isRecord(value)) return null;\n const { asset_id, title, asset_type, updated_at, role } = value;\n if (typeof asset_id !== 'string' || asset_id.length === 0) return null;\n return {\n assetId: asset_id,\n title: typeof title === 'string' && title.trim().length > 0 ? title : null,\n assetType: typeof asset_type === 'string' ? asset_type : '',\n updatedAt: typeof updated_at === 'string' ? updated_at : '',\n role:\n typeof role === 'string' && WORKSPACE_ROLES.has(role)\n ? (role as SessionWorkspaceRole)\n : 'asset',\n };\n}\n\nfunction readWorkspaceAssets(value: unknown): SessionWorkspaceAsset[] {\n if (!Array.isArray(value)) return [];\n return value.flatMap((entry) => {\n const asset = readWorkspaceAsset(entry);\n return asset ? [asset] : [];\n });\n}\n\n/**\n * The route's snake_case body as the SDK's camelCase shape. Tolerant: a\n * malformed entry is dropped rather than failing the whole pane, and a body\n * that is not an object reads as an empty workspace for `threadId`.\n */\nexport function readSessionWorkspace(body: unknown, threadId: string): SessionWorkspace {\n if (!isRecord(body)) {\n return { threadId, sessionComputerAssetId: null, computers: [], assets: [] };\n }\n const sessionComputer = body.session_computer_asset_id;\n return {\n threadId: typeof body.thread_id === 'string' && body.thread_id ? body.thread_id : threadId,\n sessionComputerAssetId:\n typeof sessionComputer === 'string' && sessionComputer ? sessionComputer : null,\n computers: readWorkspaceAssets(body.computers),\n assets: readWorkspaceAssets(body.assets),\n };\n}\n\nexport function readComputerRuntimeStatus(body: unknown): ComputerRuntimeStatus | null {\n if (!isRecord(body) || typeof body.state !== 'string' || !body.state) return null;\n return {\n state: body.state,\n explicitStop: typeof body.explicit_stop === 'string' ? body.explicit_stop : null,\n provider: typeof body.provider === 'string' ? body.provider : null,\n };\n}\n\nexport function readComputerSshAccess(body: unknown): ComputerSshAccess | null {\n if (!isRecord(body) || typeof body.command !== 'string' || !body.command) return null;\n return {\n command: body.command,\n host: typeof body.host === 'string' ? body.host : '',\n port: typeof body.port === 'number' ? body.port : 22,\n username: typeof body.username === 'string' ? body.username : '',\n keyAuthEnabled: body.key_auth_enabled === true,\n };\n}\n\n/** A `fetch` the caller cancelled (unmount, a newer query): lifecycle, not failure. */\nfunction isAbortError(error: unknown): boolean {\n return (error instanceof DOMException || error instanceof Error) && error.name === 'AbortError';\n}\n\nasync function getAgoraJson({\n backendUrl,\n auth,\n path,\n what,\n signal,\n}: {\n backendUrl: string;\n auth: StatewireAuthSource;\n path: string;\n /** Names the read in the error message (`the session workspace`). */\n what: string;\n signal?: AbortSignal;\n}): Promise<unknown> {\n const url = `${getAthenaApiBaseUrl(backendUrl)}${path}`;\n const get = async (headers: Record<string, string>): Promise<Response> => {\n try {\n return await fetch(url, { method: 'GET', headers, signal: signal ?? null });\n } catch (error) {\n if (isAbortError(error)) throw error;\n throw new AthenaSdkError({\n code: 'session_workspace_failed',\n message: `Reading ${what} could not reach the Agora API.`,\n cause: error,\n hint: 'Check the network and that backendUrl points at the Agora API base.',\n });\n }\n };\n const response = await sendWithCredentialRenewal(auth, get);\n if (!response.ok) {\n const refused = response.status === 401 || response.status === 403;\n throw new AthenaSdkError({\n code: refused ? 'auth_rejected' : 'session_workspace_failed',\n message: `Reading ${what} failed: ${response.status}`,\n status: response.status,\n detail: await response.json().catch(() => undefined),\n hint: refused\n ? 'The signed-in user cannot read this session or asset.'\n : 'Check that backendUrl points at an Agora that serves this route.',\n });\n }\n return response.json();\n}\n\nexport async function fetchSessionWorkspace({\n backendUrl,\n auth,\n threadId,\n signal,\n}: {\n backendUrl: string;\n auth: StatewireAuthSource;\n threadId: string;\n signal?: AbortSignal;\n}): Promise<SessionWorkspace> {\n const body = await getAgoraJson({\n backendUrl,\n auth,\n path: sessionWorkspacePath(threadId),\n what: 'the session workspace',\n signal,\n });\n return readSessionWorkspace(body, threadId);\n}\n\nexport async function fetchComputerRuntimeStatus({\n backendUrl,\n auth,\n assetId,\n signal,\n}: {\n backendUrl: string;\n auth: StatewireAuthSource;\n assetId: string;\n signal?: AbortSignal;\n}): Promise<ComputerRuntimeStatus | null> {\n const body = await getAgoraJson({\n backendUrl,\n auth,\n path: computerStatusPath(assetId),\n what: 'the computer status',\n signal,\n });\n return readComputerRuntimeStatus(body);\n}\n\nexport async function fetchComputerSshAccess({\n backendUrl,\n auth,\n assetId,\n signal,\n}: {\n backendUrl: string;\n auth: StatewireAuthSource;\n assetId: string;\n signal?: AbortSignal;\n}): Promise<ComputerSshAccess | null> {\n const body = await getAgoraJson({\n backendUrl,\n auth,\n path: computerSshAccessPath(assetId),\n what: 'the computer SSH target',\n signal,\n });\n return readComputerSshAccess(body);\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-workspace-api.js","sources":["../../src/workbench/session-workspace-api.ts"],"sourcesContent":["/**\n * The Agora reads behind the session workbench, each one an existing,\n * permission-gated route:\n *\n * - `GET /api/conversations/threads/{thread_id}/workspace` — the computers and\n * assets a session works with (agora `web/api/session/workspace.py`; thread\n * access, then a narrow per-asset permission check, so it names only assets\n * the caller may open).\n * - `GET /api/sandbox/computer/{asset_id}/status` — a computer's runtime state\n * (asset VIEW; reads the runtime, never wakes it).\n * - `GET /api/v0/computer/{asset_id}/ssh-access` — the ready-made `ssh`\n * command (asset EDIT; mints nothing, wakes nothing).\n *\n * The credential rides like every SDK REST call: `Authorization: Bearer`\n * (resolved live through `getToken`, with one forced re-mint after a 401) or\n * `X-API-KEY`, else a same-origin host's cookie. Every failure is an\n * `AthenaSdkError` (`session_workspace_failed`, or `auth_rejected` for a\n * 401/403); an abort keeps its own identity. A computer or asset the caller may\n * not learn of answers like one that does not exist (404 \"Asset <id> not\n * found\", gate finding F19): `session_workspace_failed`, with a hint that says so.\n */\nimport { getAthenaApiBaseUrl } from '../collab/mint';\nimport { AthenaSdkError } from '../diagnostics/errors';\nimport { isRecord } from '../lib/utils';\nimport { sendWithCredentialRenewal } from '../runtime/credential-renewal';\nimport type { StatewireAuthSource } from '../runtime/statewire-auth-headers';\n\n/** Why an asset is in a session's workspace. */\nexport type SessionWorkspaceRole = 'session_computer' | 'computer' | 'asset';\n\n/** One computer or asset a session works with. */\nexport interface SessionWorkspaceAsset {\n assetId: string;\n title: string | null;\n /** The asset's type (`computer`, `spreadsheet`, `document`, …). */\n assetType: string;\n /** ISO 8601 time of the asset's last update. */\n updatedAt: string;\n role: SessionWorkspaceRole;\n}\n\n/** What a session works with, as the caller may see it. */\nexport interface SessionWorkspace {\n threadId: string;\n /** The computer bound to the session, when it has one the caller may open. */\n sessionComputerAssetId: string | null;\n /** Session computer first, then the computers the session touched, most recent first. */\n computers: SessionWorkspaceAsset[];\n /** The assets the session created or edited, most recently touched first. */\n assets: SessionWorkspaceAsset[];\n}\n\n/** A computer's runtime state as `/status` reports it. */\nexport interface ComputerRuntimeStatus {\n /** `started`, `stopped`, `restoring`, `unknown`, … — the provider's word. */\n state: string;\n /** `stopping` / `stopped` while someone asked it to stop. */\n explicitStop: string | null;\n provider: string | null;\n}\n\n/** The SSH target of a computer (identity mode: a registered key logs in). */\nexport interface ComputerSshAccess {\n /** Ready to run: `ssh [-p <port>] <asset_id>@<host>`. */\n command: string;\n host: string;\n port: number;\n username: string;\n /** False where the gateway accepts temporary tokens only (the command is refused there). */\n keyAuthEnabled: boolean;\n}\n\nexport function sessionWorkspacePath(threadId: string): string {\n return `/api/conversations/threads/${encodeURIComponent(threadId)}/workspace`;\n}\n\nexport function computerStatusPath(assetId: string): string {\n return `/api/sandbox/computer/${encodeURIComponent(assetId)}/status`;\n}\n\nexport function computerSshAccessPath(assetId: string): string {\n return `/api/v0/computer/${encodeURIComponent(assetId)}/ssh-access`;\n}\n\n/**\n * agora's 404 for an asset that does not exist or that the caller may not learn\n * of: `detail` \"Asset <id> not found\". Since gate finding F19 every refusal of a\n * caller outside the asset's workspace reads exactly like this; a refused member\n * of that workspace gets 403.\n */\nexport function isAssetMissingResponse({ status, body }: { status: number; body: unknown }): boolean {\n return (\n status === 404 &&\n isRecord(body) &&\n typeof body.detail === 'string' &&\n /^Asset (\\S+ )?not found$/.test(body.detail)\n );\n}\n\nconst WORKSPACE_ROLES: ReadonlySet<string> = new Set(['session_computer', 'computer', 'asset']);\n\nfunction readWorkspaceAsset(value: unknown): SessionWorkspaceAsset | null {\n if (!isRecord(value)) return null;\n const { asset_id, title, asset_type, updated_at, role } = value;\n if (typeof asset_id !== 'string' || asset_id.length === 0) return null;\n return {\n assetId: asset_id,\n title: typeof title === 'string' && title.trim().length > 0 ? title : null,\n assetType: typeof asset_type === 'string' ? asset_type : '',\n updatedAt: typeof updated_at === 'string' ? updated_at : '',\n role:\n typeof role === 'string' && WORKSPACE_ROLES.has(role)\n ? (role as SessionWorkspaceRole)\n : 'asset',\n };\n}\n\nfunction readWorkspaceAssets(value: unknown): SessionWorkspaceAsset[] {\n if (!Array.isArray(value)) return [];\n return value.flatMap((entry) => {\n const asset = readWorkspaceAsset(entry);\n return asset ? [asset] : [];\n });\n}\n\n/**\n * The route's snake_case body as the SDK's camelCase shape. Tolerant: a\n * malformed entry is dropped rather than failing the whole pane, and a body\n * that is not an object reads as an empty workspace for `threadId`.\n */\nexport function readSessionWorkspace(body: unknown, threadId: string): SessionWorkspace {\n if (!isRecord(body)) {\n return { threadId, sessionComputerAssetId: null, computers: [], assets: [] };\n }\n const sessionComputer = body.session_computer_asset_id;\n return {\n threadId: typeof body.thread_id === 'string' && body.thread_id ? body.thread_id : threadId,\n sessionComputerAssetId:\n typeof sessionComputer === 'string' && sessionComputer ? sessionComputer : null,\n computers: readWorkspaceAssets(body.computers),\n assets: readWorkspaceAssets(body.assets),\n };\n}\n\nexport function readComputerRuntimeStatus(body: unknown): ComputerRuntimeStatus | null {\n if (!isRecord(body) || typeof body.state !== 'string' || !body.state) return null;\n return {\n state: body.state,\n explicitStop: typeof body.explicit_stop === 'string' ? body.explicit_stop : null,\n provider: typeof body.provider === 'string' ? body.provider : null,\n };\n}\n\nexport function readComputerSshAccess(body: unknown): ComputerSshAccess | null {\n if (!isRecord(body) || typeof body.command !== 'string' || !body.command) return null;\n return {\n command: body.command,\n host: typeof body.host === 'string' ? body.host : '',\n port: typeof body.port === 'number' ? body.port : 22,\n username: typeof body.username === 'string' ? body.username : '',\n keyAuthEnabled: body.key_auth_enabled === true,\n };\n}\n\n/** A `fetch` the caller cancelled (unmount, a newer query): lifecycle, not failure. */\nfunction isAbortError(error: unknown): boolean {\n return (error instanceof DOMException || error instanceof Error) && error.name === 'AbortError';\n}\n\nasync function getAgoraJson({\n backendUrl,\n auth,\n path,\n what,\n signal,\n}: {\n backendUrl: string;\n auth: StatewireAuthSource;\n path: string;\n /** Names the read in the error message (`the session workspace`). */\n what: string;\n signal?: AbortSignal;\n}): Promise<unknown> {\n const url = `${getAthenaApiBaseUrl(backendUrl)}${path}`;\n const get = async (headers: Record<string, string>): Promise<Response> => {\n try {\n return await fetch(url, { method: 'GET', headers, signal: signal ?? null });\n } catch (error) {\n if (isAbortError(error)) throw error;\n throw new AthenaSdkError({\n code: 'session_workspace_failed',\n message: `Reading ${what} could not reach the Agora API.`,\n cause: error,\n hint: 'Check the network and that backendUrl points at the Agora API base.',\n });\n }\n };\n const response = await sendWithCredentialRenewal(auth, get);\n if (!response.ok) {\n const refused = response.status === 401 || response.status === 403;\n const detail: unknown = await response.json().catch(() => undefined);\n throw new AthenaSdkError({\n code: refused ? 'auth_rejected' : 'session_workspace_failed',\n message: `Reading ${what} failed: ${response.status}`,\n status: response.status,\n detail,\n hint: refused\n ? 'The signed-in user cannot read this session or asset.'\n : isAssetMissingResponse({ status: response.status, body: detail })\n ? 'The asset does not exist, or the signed-in user may not read it.'\n : 'Check that backendUrl points at an Agora that serves this route.',\n });\n }\n return response.json();\n}\n\nexport async function fetchSessionWorkspace({\n backendUrl,\n auth,\n threadId,\n signal,\n}: {\n backendUrl: string;\n auth: StatewireAuthSource;\n threadId: string;\n signal?: AbortSignal;\n}): Promise<SessionWorkspace> {\n const body = await getAgoraJson({\n backendUrl,\n auth,\n path: sessionWorkspacePath(threadId),\n what: 'the session workspace',\n signal,\n });\n return readSessionWorkspace(body, threadId);\n}\n\nexport async function fetchComputerRuntimeStatus({\n backendUrl,\n auth,\n assetId,\n signal,\n}: {\n backendUrl: string;\n auth: StatewireAuthSource;\n assetId: string;\n signal?: AbortSignal;\n}): Promise<ComputerRuntimeStatus | null> {\n const body = await getAgoraJson({\n backendUrl,\n auth,\n path: computerStatusPath(assetId),\n what: 'the computer status',\n signal,\n });\n return readComputerRuntimeStatus(body);\n}\n\nexport async function fetchComputerSshAccess({\n backendUrl,\n auth,\n assetId,\n signal,\n}: {\n backendUrl: string;\n auth: StatewireAuthSource;\n assetId: string;\n signal?: AbortSignal;\n}): Promise<ComputerSshAccess | null> {\n const body = await getAgoraJson({\n backendUrl,\n auth,\n path: computerSshAccessPath(assetId),\n what: 'the computer SSH target',\n signal,\n });\n return readComputerSshAccess(body);\n}\n"],"names":[],"mappings":";;;;AAwEO,SAAS,qBAAqB,UAA0B;AAC7D,SAAO,8BAA8B,mBAAmB,QAAQ,CAAC;AACnE;AAEO,SAAS,mBAAmB,SAAyB;AAC1D,SAAO,yBAAyB,mBAAmB,OAAO,CAAC;AAC7D;AAEO,SAAS,sBAAsB,SAAyB;AAC7D,SAAO,oBAAoB,mBAAmB,OAAO,CAAC;AACxD;AAQO,SAAS,uBAAuB,EAAE,QAAQ,QAAoD;AACnG,SACE,WAAW,OACX,SAAS,IAAI,KACb,OAAO,KAAK,WAAW,YACvB,2BAA2B,KAAK,KAAK,MAAM;AAE/C;AAEA,MAAM,kBAAuC,oBAAI,IAAI,CAAC,oBAAoB,YAAY,OAAO,CAAC;AAE9F,SAAS,mBAAmB,OAA8C;AACxE,MAAI,CAAC,SAAS,KAAK,EAAG,QAAO;AAC7B,QAAM,EAAE,UAAU,OAAO,YAAY,YAAY,SAAS;AAC1D,MAAI,OAAO,aAAa,YAAY,SAAS,WAAW,EAAG,QAAO;AAClE,SAAO;AAAA,IACL,SAAS;AAAA,IACT,OAAO,OAAO,UAAU,YAAY,MAAM,KAAA,EAAO,SAAS,IAAI,QAAQ;AAAA,IACtE,WAAW,OAAO,eAAe,WAAW,aAAa;AAAA,IACzD,WAAW,OAAO,eAAe,WAAW,aAAa;AAAA,IACzD,MACE,OAAO,SAAS,YAAY,gBAAgB,IAAI,IAAI,IAC/C,OACD;AAAA,EAAA;AAEV;AAEA,SAAS,oBAAoB,OAAyC;AACpE,MAAI,CAAC,MAAM,QAAQ,KAAK,UAAU,CAAA;AAClC,SAAO,MAAM,QAAQ,CAAC,UAAU;AAC9B,UAAM,QAAQ,mBAAmB,KAAK;AACtC,WAAO,QAAQ,CAAC,KAAK,IAAI,CAAA;AAAA,EAC3B,CAAC;AACH;AAOO,SAAS,qBAAqB,MAAe,UAAoC;AACtF,MAAI,CAAC,SAAS,IAAI,GAAG;AACnB,WAAO,EAAE,UAAU,wBAAwB,MAAM,WAAW,CAAA,GAAI,QAAQ,GAAC;AAAA,EAC3E;AACA,QAAM,kBAAkB,KAAK;AAC7B,SAAO;AAAA,IACL,UAAU,OAAO,KAAK,cAAc,YAAY,KAAK,YAAY,KAAK,YAAY;AAAA,IAClF,wBACE,OAAO,oBAAoB,YAAY,kBAAkB,kBAAkB;AAAA,IAC7E,WAAW,oBAAoB,KAAK,SAAS;AAAA,IAC7C,QAAQ,oBAAoB,KAAK,MAAM;AAAA,EAAA;AAE3C;AAEO,SAAS,0BAA0B,MAA6C;AACrF,MAAI,CAAC,SAAS,IAAI,KAAK,OAAO,KAAK,UAAU,YAAY,CAAC,KAAK,MAAO,QAAO;AAC7E,SAAO;AAAA,IACL,OAAO,KAAK;AAAA,IACZ,cAAc,OAAO,KAAK,kBAAkB,WAAW,KAAK,gBAAgB;AAAA,IAC5E,UAAU,OAAO,KAAK,aAAa,WAAW,KAAK,WAAW;AAAA,EAAA;AAElE;AAEO,SAAS,sBAAsB,MAAyC;AAC7E,MAAI,CAAC,SAAS,IAAI,KAAK,OAAO,KAAK,YAAY,YAAY,CAAC,KAAK,QAAS,QAAO;AACjF,SAAO;AAAA,IACL,SAAS,KAAK;AAAA,IACd,MAAM,OAAO,KAAK,SAAS,WAAW,KAAK,OAAO;AAAA,IAClD,MAAM,OAAO,KAAK,SAAS,WAAW,KAAK,OAAO;AAAA,IAClD,UAAU,OAAO,KAAK,aAAa,WAAW,KAAK,WAAW;AAAA,IAC9D,gBAAgB,KAAK,qBAAqB;AAAA,EAAA;AAE9C;AAGA,SAAS,aAAa,OAAyB;AAC7C,UAAQ,iBAAiB,gBAAgB,iBAAiB,UAAU,MAAM,SAAS;AACrF;AAEA,eAAe,aAAa;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAOqB;AACnB,QAAM,MAAM,GAAG,oBAAoB,UAAU,CAAC,GAAG,IAAI;AACrD,QAAM,MAAM,OAAO,YAAuD;AACxE,QAAI;AACF,aAAO,MAAM,MAAM,KAAK,EAAE,QAAQ,OAAO,SAAS,QAAQ,UAAU,MAAM;AAAA,IAC5E,SAAS,OAAO;AACd,UAAI,aAAa,KAAK,EAAG,OAAM;AAC/B,YAAM,IAAI,eAAe;AAAA,QACvB,MAAM;AAAA,QACN,SAAS,WAAW,IAAI;AAAA,QACxB,OAAO;AAAA,QACP,MAAM;AAAA,MAAA,CACP;AAAA,IACH;AAAA,EACF;AACA,QAAM,WAAW,MAAM,0BAA0B,MAAM,GAAG;AAC1D,MAAI,CAAC,SAAS,IAAI;AAChB,UAAM,UAAU,SAAS,WAAW,OAAO,SAAS,WAAW;AAC/D,UAAM,SAAkB,MAAM,SAAS,OAAO,MAAM,MAAM,MAAS;AACnE,UAAM,IAAI,eAAe;AAAA,MACvB,MAAM,UAAU,kBAAkB;AAAA,MAClC,SAAS,WAAW,IAAI,YAAY,SAAS,MAAM;AAAA,MACnD,QAAQ,SAAS;AAAA,MACjB;AAAA,MACA,MAAM,UACF,0DACA,uBAAuB,EAAE,QAAQ,SAAS,QAAQ,MAAM,OAAA,CAAQ,IAC9D,qEACA;AAAA,IAAA,CACP;AAAA,EACH;AACA,SAAO,SAAS,KAAA;AAClB;AAEA,eAAsB,sBAAsB;AAAA,EAC1C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAK8B;AAC5B,QAAM,OAAO,MAAM,aAAa;AAAA,IAC9B;AAAA,IACA;AAAA,IACA,MAAM,qBAAqB,QAAQ;AAAA,IACnC,MAAM;AAAA,IACN;AAAA,EAAA,CACD;AACD,SAAO,qBAAqB,MAAM,QAAQ;AAC5C;AAEA,eAAsB,2BAA2B;AAAA,EAC/C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAK0C;AACxC,QAAM,OAAO,MAAM,aAAa;AAAA,IAC9B;AAAA,IACA;AAAA,IACA,MAAM,mBAAmB,OAAO;AAAA,IAChC,MAAM;AAAA,IACN;AAAA,EAAA,CACD;AACD,SAAO,0BAA0B,IAAI;AACvC;AAEA,eAAsB,uBAAuB;AAAA,EAC3C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKsC;AACpC,QAAM,OAAO,MAAM,aAAa;AAAA,IAC9B;AAAA,IACA;AAAA,IACA,MAAM,sBAAsB,OAAO;AAAA,IACnC,MAAM;AAAA,IACN;AAAA,EAAA,CACD;AACD,SAAO,sBAAsB,IAAI;AACnC;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@athenaintel/react",
3
- "version": "0.57.2",
3
+ "version": "0.60.0",
4
4
  "description": "Athena React SDK — Build AI-powered chat applications with the Athena platform",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -68,6 +68,26 @@
68
68
  "import": "./dist/sheet-range/index.js",
69
69
  "require": "./dist/sheet-range/index.cjs"
70
70
  },
71
+ "./subagents": {
72
+ "types": "./dist/subagents/index.d.ts",
73
+ "import": "./dist/subagents/index.js",
74
+ "require": "./dist/subagents/index.cjs"
75
+ },
76
+ "./lane-follow": {
77
+ "types": "./dist/subagents/lane-follow.d.ts",
78
+ "import": "./dist/subagents/lane-follow.js",
79
+ "require": "./dist/subagents/lane-follow.cjs"
80
+ },
81
+ "./typed-interrupts": {
82
+ "types": "./dist/typed-interrupts/index.d.ts",
83
+ "import": "./dist/typed-interrupts/index.js",
84
+ "require": "./dist/typed-interrupts/index.cjs"
85
+ },
86
+ "./session-list-model": {
87
+ "types": "./dist/threads/session-list-model.d.ts",
88
+ "import": "./dist/threads/session-list-model.js",
89
+ "require": "./dist/threads/session-list-model.cjs"
90
+ },
71
91
  "./src/chat-ui/styles/theme.css": "./src/chat-ui/styles/theme.css",
72
92
  "./chat-ui/tailwind-preset": "./src/chat-ui/tailwind-preset.js"
73
93
  },
@@ -81,7 +101,9 @@
81
101
  "build": "vite build && bun run scripts/check-dist-self-contained.ts && bun run scripts/build-declarations.ts && bun run build:css",
82
102
  "prepare": "test ! -f src/index.ts || bun run build",
83
103
  "build:css": "tailwindcss -i src/styles.entry.css -o dist/styles.css --minify",
84
- "test": "bun test --conditions=@athenaintel/source --isolate mount-tests && bun test --conditions=@athenaintel/source src",
104
+ "test": "bun run test:mount && bun run test:src",
105
+ "test:mount": "bun test --conditions=@athenaintel/source --isolate mount-tests",
106
+ "test:src": "bun test --conditions=@athenaintel/source src",
85
107
  "typecheck": "tsc --noEmit",
86
108
  "prepublishOnly": "bun run build",
87
109
  "preinstall": "node -e \"if(process.cwd().split(require('path').sep).includes('node_modules'))process.exit(0);if(!(process.env.npm_config_user_agent||'').startsWith('bun/')){console.error('\\n✗ This monorepo requires bun. Run \\`bun install\\` at the repo root.\\n https://bun.com/docs/installation\\n');process.exit(1)}\""
@@ -105,7 +127,7 @@
105
127
  "@assistant-ui/react": "0.15.31",
106
128
  "@assistant-ui/react-langgraph": "0.14.37",
107
129
  "@assistant-ui/react-markdown": "0.14.24",
108
- "@assistant-ui/react-statewire": "0.31.0",
130
+ "@assistant-ui/react-statewire": "0.35.1",
109
131
  "@assistant-ui/store": "0.3.22",
110
132
  "@assistant-ui/tap": "0.9.24",
111
133
  "@floating-ui/react": "^0.27.7",
@@ -132,9 +154,9 @@
132
154
  "cnfast": "0.0.8",
133
155
  "livekit-client": "2.23.0",
134
156
  "lucide-react": "^0.575.0",
135
- "radix-ui": "^1.4.3",
157
+ "radix-ui": "^1.8.1",
136
158
  "remark-gfm": "^4.0.0",
137
- "statewire": "0.21.0",
159
+ "statewire": "0.27.1",
138
160
  "tiptap-markdown": "^0.9.0",
139
161
  "zustand": "^5.0.11"
140
162
  },
@@ -143,7 +165,7 @@
143
165
  "@athenaintel/keryx-http": "workspace:*",
144
166
  "@athenaintel/references": "workspace:*",
145
167
  "@athenaintel/tiptap-markdown-table": "workspace:*",
146
- "@happy-dom/global-registrator": "^20.10.6",
168
+ "@happy-dom/global-registrator": "^20.11.15",
147
169
  "@propelauth/react": "^2.1.1",
148
170
  "@tailwindcss/cli": "^4.2.1",
149
171
  "@types/react": "^19.0.0",