@athenaintel/react 0.28.1 → 0.30.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 (761) hide show
  1. package/README.md +418 -10
  2. package/dist/agent-runtime/src/asset-attachment.cjs.map +1 -0
  3. package/dist/agent-runtime/src/asset-attachment.js.map +1 -0
  4. package/dist/agent-runtime/src/auth-denial.cjs.map +1 -0
  5. package/dist/agent-runtime/src/auth-denial.js.map +1 -0
  6. package/dist/agent-runtime/src/client-tool-bridge.cjs.map +1 -0
  7. package/dist/agent-runtime/src/client-tool-bridge.js.map +1 -0
  8. package/dist/agent-runtime/src/client-tools.cjs.map +1 -0
  9. package/dist/agent-runtime/src/client-tools.js.map +1 -0
  10. package/dist/agent-runtime/src/composer-markdown.cjs +124 -0
  11. package/dist/agent-runtime/src/composer-markdown.cjs.map +1 -0
  12. package/dist/agent-runtime/src/composer-markdown.js +124 -0
  13. package/dist/agent-runtime/src/composer-markdown.js.map +1 -0
  14. package/dist/agent-runtime/src/conversation-index.cjs.map +1 -0
  15. package/dist/agent-runtime/src/conversation-index.js.map +1 -0
  16. package/dist/{packages/agent-runtime → agent-runtime}/src/conversation-list.cjs +36 -0
  17. package/dist/agent-runtime/src/conversation-list.cjs.map +1 -0
  18. package/dist/{packages/agent-runtime → agent-runtime}/src/conversation-list.js +36 -0
  19. package/dist/agent-runtime/src/conversation-list.js.map +1 -0
  20. package/dist/{packages/agent-runtime → agent-runtime}/src/deep-agent-transport-recipe.cjs +5 -3
  21. package/dist/agent-runtime/src/deep-agent-transport-recipe.cjs.map +1 -0
  22. package/dist/{packages/agent-runtime → agent-runtime}/src/deep-agent-transport-recipe.js +6 -4
  23. package/dist/agent-runtime/src/deep-agent-transport-recipe.js.map +1 -0
  24. package/dist/agent-runtime/src/edit-command.cjs.map +1 -0
  25. package/dist/agent-runtime/src/edit-command.js.map +1 -0
  26. package/dist/{packages/agent-runtime → agent-runtime}/src/errors.cjs +23 -0
  27. package/dist/agent-runtime/src/errors.cjs.map +1 -0
  28. package/dist/{packages/agent-runtime → agent-runtime}/src/errors.js +23 -0
  29. package/dist/agent-runtime/src/errors.js.map +1 -0
  30. package/dist/agent-runtime/src/execute-output.cjs +41 -0
  31. package/dist/agent-runtime/src/execute-output.cjs.map +1 -0
  32. package/dist/agent-runtime/src/execute-output.js +41 -0
  33. package/dist/agent-runtime/src/execute-output.js.map +1 -0
  34. package/dist/{packages/agent-runtime → agent-runtime}/src/generated/runconfig-contract.cjs +10 -2
  35. package/dist/agent-runtime/src/generated/runconfig-contract.cjs.map +1 -0
  36. package/dist/{packages/agent-runtime → agent-runtime}/src/generated/runconfig-contract.js +10 -2
  37. package/dist/agent-runtime/src/generated/runconfig-contract.js.map +1 -0
  38. package/dist/agent-runtime/src/github-wake-event.cjs.map +1 -0
  39. package/dist/agent-runtime/src/github-wake-event.js.map +1 -0
  40. package/dist/{packages/agent-runtime → agent-runtime}/src/interrupts.cjs +24 -1
  41. package/dist/agent-runtime/src/interrupts.cjs.map +1 -0
  42. package/dist/{packages/agent-runtime → agent-runtime}/src/interrupts.js +24 -1
  43. package/dist/agent-runtime/src/interrupts.js.map +1 -0
  44. package/dist/agent-runtime/src/message-author.cjs.map +1 -0
  45. package/dist/agent-runtime/src/message-author.js.map +1 -0
  46. package/dist/agent-runtime/src/message-window.cjs.map +1 -0
  47. package/dist/agent-runtime/src/message-window.js.map +1 -0
  48. package/dist/{packages/agent-runtime → agent-runtime}/src/messages.cjs +8 -4
  49. package/dist/agent-runtime/src/messages.cjs.map +1 -0
  50. package/dist/{packages/agent-runtime → agent-runtime}/src/messages.js +6 -2
  51. package/dist/agent-runtime/src/messages.js.map +1 -0
  52. package/dist/agent-runtime/src/model-context.cjs.map +1 -0
  53. package/dist/agent-runtime/src/model-context.js.map +1 -0
  54. package/dist/agent-runtime/src/optimistic-content.cjs.map +1 -0
  55. package/dist/agent-runtime/src/optimistic-content.js.map +1 -0
  56. package/dist/agent-runtime/src/protocol.cjs.map +1 -0
  57. package/dist/agent-runtime/src/protocol.js.map +1 -0
  58. package/dist/{packages/agent-runtime → agent-runtime}/src/queue.cjs +23 -2
  59. package/dist/agent-runtime/src/queue.cjs.map +1 -0
  60. package/dist/{packages/agent-runtime → agent-runtime}/src/queue.js +23 -2
  61. package/dist/agent-runtime/src/queue.js.map +1 -0
  62. package/dist/{packages/agent-runtime → agent-runtime}/src/quota-safe-local-storage-session.cjs +23 -13
  63. package/dist/agent-runtime/src/quota-safe-local-storage-session.cjs.map +1 -0
  64. package/dist/{packages/agent-runtime → agent-runtime}/src/quota-safe-local-storage-session.js +24 -14
  65. package/dist/agent-runtime/src/quota-safe-local-storage-session.js.map +1 -0
  66. package/dist/agent-runtime/src/runtime-messages.cjs.map +1 -0
  67. package/dist/agent-runtime/src/runtime-messages.js.map +1 -0
  68. package/dist/agent-runtime/src/screen-point.cjs.map +1 -0
  69. package/dist/agent-runtime/src/screen-point.js.map +1 -0
  70. package/dist/agent-runtime/src/send-recovery.cjs.map +1 -0
  71. package/dist/agent-runtime/src/send-recovery.js.map +1 -0
  72. package/dist/agent-runtime/src/statewire-attach-observer.cjs.map +1 -0
  73. package/dist/agent-runtime/src/statewire-attach-observer.js.map +1 -0
  74. package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-state.cjs +8 -0
  75. package/dist/agent-runtime/src/statewire-state.cjs.map +1 -0
  76. package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-state.js +8 -0
  77. package/dist/agent-runtime/src/statewire-state.js.map +1 -0
  78. package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-suspended.cjs +4 -0
  79. package/dist/agent-runtime/src/statewire-suspended.cjs.map +1 -0
  80. package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-suspended.js +4 -0
  81. package/dist/agent-runtime/src/statewire-suspended.js.map +1 -0
  82. package/dist/agent-runtime/src/statewire-transport.cjs +43 -0
  83. package/dist/agent-runtime/src/statewire-transport.cjs.map +1 -0
  84. package/dist/agent-runtime/src/statewire-transport.js +43 -0
  85. package/dist/agent-runtime/src/statewire-transport.js.map +1 -0
  86. package/dist/agent-runtime/src/streaming-markdown.cjs.map +1 -0
  87. package/dist/agent-runtime/src/streaming-markdown.js.map +1 -0
  88. package/dist/agent-runtime/src/subscription-wake-event.cjs +252 -0
  89. package/dist/agent-runtime/src/subscription-wake-event.cjs.map +1 -0
  90. package/dist/agent-runtime/src/subscription-wake-event.js +252 -0
  91. package/dist/agent-runtime/src/subscription-wake-event.js.map +1 -0
  92. package/dist/agent-runtime/src/thread-extras.cjs.map +1 -0
  93. package/dist/agent-runtime/src/thread-extras.js.map +1 -0
  94. package/dist/agent-runtime/src/thread-snapshot-cache.cjs.map +1 -0
  95. package/dist/agent-runtime/src/thread-snapshot-cache.js.map +1 -0
  96. package/dist/agent-runtime/src/thread-status.cjs.map +1 -0
  97. package/dist/agent-runtime/src/thread-status.js.map +1 -0
  98. package/dist/{packages/agent-runtime → agent-runtime}/src/tool-metadata.cjs +279 -3
  99. package/dist/agent-runtime/src/tool-metadata.cjs.map +1 -0
  100. package/dist/{packages/agent-runtime → agent-runtime}/src/tool-metadata.js +279 -3
  101. package/dist/agent-runtime/src/tool-metadata.js.map +1 -0
  102. package/dist/agent-runtime/src/tool-names.cjs +5 -0
  103. package/dist/agent-runtime/src/tool-names.cjs.map +1 -0
  104. package/dist/agent-runtime/src/tool-names.js +5 -0
  105. package/dist/agent-runtime/src/tool-names.js.map +1 -0
  106. package/dist/agent-runtime/src/tool-outputs.cjs.map +1 -0
  107. package/dist/agent-runtime/src/tool-outputs.js.map +1 -0
  108. package/dist/agent-runtime/src/tool-result.cjs.map +1 -0
  109. package/dist/agent-runtime/src/tool-result.js.map +1 -0
  110. package/dist/{packages/agent-runtime → agent-runtime}/src/use-conversation-list.cjs +33 -22
  111. package/dist/agent-runtime/src/use-conversation-list.cjs.map +1 -0
  112. package/dist/{packages/agent-runtime → agent-runtime}/src/use-conversation-list.js +34 -23
  113. package/dist/agent-runtime/src/use-conversation-list.js.map +1 -0
  114. package/dist/agent-runtime/src/use-deep-agent-config.cjs.map +1 -0
  115. package/dist/agent-runtime/src/use-deep-agent-config.js.map +1 -0
  116. package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-edit-submit.cjs +2 -0
  117. package/dist/agent-runtime/src/use-deep-agent-edit-submit.cjs.map +1 -0
  118. package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-edit-submit.js +2 -0
  119. package/dist/agent-runtime/src/use-deep-agent-edit-submit.js.map +1 -0
  120. package/dist/agent-runtime/src/use-deep-agent-runtime.cjs.map +1 -0
  121. package/dist/agent-runtime/src/use-deep-agent-runtime.js.map +1 -0
  122. package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-thread.cjs +1 -0
  123. package/dist/agent-runtime/src/use-deep-agent-thread.cjs.map +1 -0
  124. package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-thread.js +2 -1
  125. package/dist/agent-runtime/src/use-deep-agent-thread.js.map +1 -0
  126. package/dist/agent-runtime/src/use-deep-agent-window-sync.cjs.map +1 -0
  127. package/dist/agent-runtime/src/use-deep-agent-window-sync.js.map +1 -0
  128. package/dist/agent-runtime/src/use-historical-edit-attachments.cjs +52 -0
  129. package/dist/agent-runtime/src/use-historical-edit-attachments.cjs.map +1 -0
  130. package/dist/agent-runtime/src/use-historical-edit-attachments.js +52 -0
  131. package/dist/agent-runtime/src/use-historical-edit-attachments.js.map +1 -0
  132. package/dist/{packages/agent-runtime → agent-runtime}/src/voice-presentation.cjs +14 -0
  133. package/dist/agent-runtime/src/voice-presentation.cjs.map +1 -0
  134. package/dist/{packages/agent-runtime → agent-runtime}/src/voice-presentation.js +14 -0
  135. package/dist/agent-runtime/src/voice-presentation.js.map +1 -0
  136. package/dist/agent-runtime/src/voice-turn-grouping.cjs.map +1 -0
  137. package/dist/agent-runtime/src/voice-turn-grouping.js.map +1 -0
  138. package/dist/assets/AthenaAssetEmbed.cjs +8 -2
  139. package/dist/assets/AthenaAssetEmbed.cjs.map +1 -1
  140. package/dist/assets/AthenaAssetEmbed.d.ts +8 -0
  141. package/dist/assets/AthenaAssetEmbed.js +8 -2
  142. package/dist/assets/AthenaAssetEmbed.js.map +1 -1
  143. package/dist/assets/AthenaLayout.cjs +97 -31
  144. package/dist/assets/AthenaLayout.cjs.map +1 -1
  145. package/dist/assets/AthenaLayout.d.ts +13 -0
  146. package/dist/assets/AthenaLayout.js +98 -32
  147. package/dist/assets/AthenaLayout.js.map +1 -1
  148. package/dist/assets/asset-embed-messages.cjs.map +1 -1
  149. package/dist/assets/asset-embed-messages.d.ts +6 -0
  150. package/dist/assets/asset-embed-messages.js.map +1 -1
  151. package/dist/assets/asset-panel-store.cjs +68 -32
  152. package/dist/assets/asset-panel-store.cjs.map +1 -1
  153. package/dist/assets/asset-panel-store.d.ts +47 -1
  154. package/dist/assets/asset-panel-store.js +68 -32
  155. package/dist/assets/asset-panel-store.js.map +1 -1
  156. package/dist/assets/use-asset-embed.cjs +29 -8
  157. package/dist/assets/use-asset-embed.cjs.map +1 -1
  158. package/dist/assets/use-asset-embed.d.ts +7 -0
  159. package/dist/assets/use-asset-embed.js +29 -8
  160. package/dist/assets/use-asset-embed.js.map +1 -1
  161. package/dist/catalog/chat-pickers.cjs +152 -0
  162. package/dist/catalog/chat-pickers.cjs.map +1 -0
  163. package/dist/catalog/chat-pickers.d.ts +22 -0
  164. package/dist/catalog/chat-pickers.js +152 -0
  165. package/dist/catalog/chat-pickers.js.map +1 -0
  166. package/dist/catalog/runtime-catalog.cjs +181 -0
  167. package/dist/catalog/runtime-catalog.cjs.map +1 -0
  168. package/dist/catalog/runtime-catalog.d.ts +100 -0
  169. package/dist/catalog/runtime-catalog.js +181 -0
  170. package/dist/catalog/runtime-catalog.js.map +1 -0
  171. package/dist/chat/AthenaChat.cjs +86 -46
  172. package/dist/chat/AthenaChat.cjs.map +1 -1
  173. package/dist/chat/AthenaChat.d.ts +21 -4
  174. package/dist/chat/AthenaChat.js +88 -48
  175. package/dist/chat/AthenaChat.js.map +1 -1
  176. package/dist/chat/StatewireApprovalCard.cjs +38 -37
  177. package/dist/chat/StatewireApprovalCard.cjs.map +1 -1
  178. package/dist/chat/StatewireApprovalCard.d.ts +2 -0
  179. package/dist/chat/StatewireApprovalCard.js +39 -38
  180. package/dist/chat/StatewireApprovalCard.js.map +1 -1
  181. package/dist/chat/StatewireClientToolBridge.cjs +2 -2
  182. package/dist/chat/StatewireClientToolBridge.js +2 -2
  183. package/dist/chat/StatewireQueuedMessages.cjs +15 -12
  184. package/dist/chat/StatewireQueuedMessages.cjs.map +1 -1
  185. package/dist/chat/StatewireQueuedMessages.d.ts +22 -2
  186. package/dist/chat/StatewireQueuedMessages.js +15 -12
  187. package/dist/chat/StatewireQueuedMessages.js.map +1 -1
  188. package/dist/chat/StatewireRunRefusalNotice.cjs +48 -0
  189. package/dist/chat/StatewireRunRefusalNotice.cjs.map +1 -0
  190. package/dist/chat/StatewireRunRefusalNotice.d.ts +25 -0
  191. package/dist/chat/StatewireRunRefusalNotice.js +48 -0
  192. package/dist/chat/StatewireRunRefusalNotice.js.map +1 -0
  193. package/dist/chat/WaitingOnYouBanner.cjs +2 -2
  194. package/dist/chat/WaitingOnYouBanner.js +2 -2
  195. package/dist/chat/athena-citation-links.cjs +19 -15
  196. package/dist/chat/athena-citation-links.cjs.map +1 -1
  197. package/dist/chat/athena-citation-links.js +19 -15
  198. package/dist/chat/athena-citation-links.js.map +1 -1
  199. package/dist/chat/run-activity.cjs +9 -1
  200. package/dist/chat/run-activity.cjs.map +1 -1
  201. package/dist/chat/run-activity.d.ts +6 -0
  202. package/dist/chat/run-activity.js +10 -2
  203. package/dist/chat/run-activity.js.map +1 -1
  204. package/dist/chat/statewire-banners.cjs +30 -1
  205. package/dist/chat/statewire-banners.cjs.map +1 -1
  206. package/dist/chat/statewire-banners.d.ts +20 -1
  207. package/dist/chat/statewire-banners.js +32 -3
  208. package/dist/chat/statewire-banners.js.map +1 -1
  209. package/dist/chat/statewire-client-tools.cjs +1 -1
  210. package/dist/chat/statewire-client-tools.js +1 -1
  211. package/dist/chat/super-grouping/CollapsibleGroup.cjs +1 -1
  212. package/dist/chat/super-grouping/CollapsibleGroup.cjs.map +1 -1
  213. package/dist/chat/super-grouping/CollapsibleGroup.js +1 -1
  214. package/dist/chat/super-grouping/CollapsibleGroup.js.map +1 -1
  215. package/dist/chat/super-grouping/SuperGroupingCard.cjs +7 -5
  216. package/dist/chat/super-grouping/SuperGroupingCard.cjs.map +1 -1
  217. package/dist/chat/super-grouping/SuperGroupingCard.d.ts +8 -2
  218. package/dist/chat/super-grouping/SuperGroupingCard.js +7 -5
  219. package/dist/chat/super-grouping/SuperGroupingCard.js.map +1 -1
  220. package/dist/chat/super-grouping/SuperGroupingTranscript.cjs +350 -0
  221. package/dist/chat/super-grouping/SuperGroupingTranscript.cjs.map +1 -0
  222. package/dist/chat/super-grouping/SuperGroupingTranscript.d.ts +31 -0
  223. package/dist/chat/super-grouping/SuperGroupingTranscript.js +350 -0
  224. package/dist/chat/super-grouping/SuperGroupingTranscript.js.map +1 -0
  225. package/dist/chat/super-grouping/ToolTimeline.cjs +13 -2
  226. package/dist/chat/super-grouping/ToolTimeline.cjs.map +1 -1
  227. package/dist/chat/super-grouping/ToolTimeline.d.ts +10 -3
  228. package/dist/chat/super-grouping/ToolTimeline.js +13 -2
  229. package/dist/chat/super-grouping/ToolTimeline.js.map +1 -1
  230. package/dist/chat/super-grouping/activity-timeline.cjs +51 -26
  231. package/dist/chat/super-grouping/activity-timeline.cjs.map +1 -1
  232. package/dist/chat/super-grouping/activity-timeline.d.ts +40 -8
  233. package/dist/chat/super-grouping/activity-timeline.js +52 -27
  234. package/dist/chat/super-grouping/activity-timeline.js.map +1 -1
  235. package/dist/chat/super-grouping/index.cjs +12 -0
  236. package/dist/chat/super-grouping/index.cjs.map +1 -1
  237. package/dist/chat/super-grouping/index.d.ts +7 -2
  238. package/dist/chat/super-grouping/index.js +14 -2
  239. package/dist/chat/super-grouping/index.js.map +1 -1
  240. package/dist/chat/super-grouping/timeline-step.cjs +14 -5
  241. package/dist/chat/super-grouping/timeline-step.cjs.map +1 -1
  242. package/dist/chat/super-grouping/timeline-step.d.ts +10 -1
  243. package/dist/chat/super-grouping/timeline-step.js +15 -6
  244. package/dist/chat/super-grouping/timeline-step.js.map +1 -1
  245. package/dist/chat/super-grouping/turn-segments.cjs +82 -0
  246. package/dist/chat/super-grouping/turn-segments.cjs.map +1 -0
  247. package/dist/chat/super-grouping/turn-segments.d.ts +69 -0
  248. package/dist/chat/super-grouping/turn-segments.js +82 -0
  249. package/dist/chat/super-grouping/turn-segments.js.map +1 -0
  250. package/dist/chat/super-grouping/turn-timing.cjs +110 -0
  251. package/dist/chat/super-grouping/turn-timing.cjs.map +1 -0
  252. package/dist/chat/super-grouping/turn-timing.d.ts +52 -0
  253. package/dist/chat/super-grouping/turn-timing.js +110 -0
  254. package/dist/chat/super-grouping/turn-timing.js.map +1 -0
  255. package/dist/chat/tiptap-text.cjs +1 -1
  256. package/dist/chat/tiptap-text.js +1 -1
  257. package/dist/chat/use-athena-run-live.cjs +1 -1
  258. package/dist/chat/use-athena-run-live.js +1 -1
  259. package/dist/chat/use-statewire-approval-request.cjs +73 -4
  260. package/dist/chat/use-statewire-approval-request.cjs.map +1 -1
  261. package/dist/chat/use-statewire-approval-request.js +74 -5
  262. package/dist/chat/use-statewire-approval-request.js.map +1 -1
  263. package/dist/chat-ui/composer/composer-message.cjs +284 -0
  264. package/dist/chat-ui/composer/composer-message.cjs.map +1 -0
  265. package/dist/chat-ui/composer/composer-message.d.ts +152 -0
  266. package/dist/chat-ui/composer/composer-message.js +284 -0
  267. package/dist/chat-ui/composer/composer-message.js.map +1 -0
  268. package/dist/chat-ui/composer/tiptap-composer.cjs +57 -11
  269. package/dist/chat-ui/composer/tiptap-composer.cjs.map +1 -1
  270. package/dist/chat-ui/composer/tiptap-composer.d.ts +34 -6
  271. package/dist/chat-ui/composer/tiptap-composer.js +57 -11
  272. package/dist/chat-ui/composer/tiptap-composer.js.map +1 -1
  273. package/dist/chat-ui/index.cjs +4 -1
  274. package/dist/chat-ui/index.cjs.map +1 -1
  275. package/dist/chat-ui/index.d.ts +3 -2
  276. package/dist/chat-ui/index.js +5 -2
  277. package/dist/chat-ui/index.js.map +1 -1
  278. package/dist/chat-ui/mentions/mention-chip.cjs +3 -2
  279. package/dist/chat-ui/mentions/mention-chip.cjs.map +1 -1
  280. package/dist/chat-ui/mentions/mention-chip.js +4 -3
  281. package/dist/chat-ui/mentions/mention-chip.js.map +1 -1
  282. package/dist/chat-ui/mentions/mention-extension.cjs +8 -2
  283. package/dist/chat-ui/mentions/mention-extension.cjs.map +1 -1
  284. package/dist/chat-ui/mentions/mention-extension.js +8 -2
  285. package/dist/chat-ui/mentions/mention-extension.js.map +1 -1
  286. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.cjs +3 -1
  287. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.cjs.map +1 -1
  288. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.js +3 -1
  289. package/dist/chat-ui/mentions/suggestions/components/mention-suggestion-popup.js.map +1 -1
  290. package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs +65 -19
  291. package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs.map +1 -1
  292. package/dist/chat-ui/mentions/suggestions/data/sources/index.d.ts +15 -0
  293. package/dist/chat-ui/mentions/suggestions/data/sources/index.js +67 -21
  294. package/dist/chat-ui/mentions/suggestions/data/sources/index.js.map +1 -1
  295. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs +4 -2
  296. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs.map +1 -1
  297. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.d.ts +2 -1
  298. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js +5 -3
  299. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js.map +1 -1
  300. package/dist/chat-ui/messages/message-components.cjs +30 -10
  301. package/dist/chat-ui/messages/message-components.cjs.map +1 -1
  302. package/dist/chat-ui/messages/message-components.d.ts +21 -1
  303. package/dist/chat-ui/messages/message-components.js +30 -10
  304. package/dist/chat-ui/messages/message-components.js.map +1 -1
  305. package/dist/chat-ui/messages/runtime-message.cjs +1 -1
  306. package/dist/chat-ui/messages/runtime-message.js +1 -1
  307. package/dist/chat-ui/messages/statewire-continue-run.cjs +5 -5
  308. package/dist/chat-ui/messages/statewire-continue-run.js +5 -5
  309. package/dist/chat-ui/messages/user-edit-composer.cjs +1 -1
  310. package/dist/chat-ui/messages/user-edit-composer.js +1 -1
  311. package/dist/chat-ui/messages/wake-marker.cjs +39 -4
  312. package/dist/chat-ui/messages/wake-marker.cjs.map +1 -1
  313. package/dist/chat-ui/messages/wake-marker.d.ts +16 -5
  314. package/dist/chat-ui/messages/wake-marker.js +40 -5
  315. package/dist/chat-ui/messages/wake-marker.js.map +1 -1
  316. package/dist/chat-ui/rich-text/chat-message-body.cjs +12 -8
  317. package/dist/chat-ui/rich-text/chat-message-body.cjs.map +1 -1
  318. package/dist/chat-ui/rich-text/chat-message-body.d.ts +6 -1
  319. package/dist/chat-ui/rich-text/chat-message-body.js +13 -9
  320. package/dist/chat-ui/rich-text/chat-message-body.js.map +1 -1
  321. package/dist/chat-ui/rich-text/chat-text-schema.cjs +64 -6
  322. package/dist/chat-ui/rich-text/chat-text-schema.cjs.map +1 -1
  323. package/dist/chat-ui/rich-text/chat-text-schema.d.ts +5 -0
  324. package/dist/chat-ui/rich-text/chat-text-schema.js +66 -8
  325. package/dist/chat-ui/rich-text/chat-text-schema.js.map +1 -1
  326. package/dist/chat-ui/statewire.cjs +1 -1
  327. package/dist/chat-ui/statewire.d.ts +1 -1
  328. package/dist/chat-ui/statewire.js +1 -1
  329. package/dist/chat-ui/thread/statewire-history-edge.cjs +2 -2
  330. package/dist/chat-ui/thread/statewire-history-edge.js +2 -2
  331. package/dist/collab/client.cjs +218 -13
  332. package/dist/collab/client.cjs.map +1 -1
  333. package/dist/collab/client.d.ts +105 -2
  334. package/dist/collab/client.js +221 -17
  335. package/dist/collab/client.js.map +1 -1
  336. package/dist/collab/index.cjs +2 -0
  337. package/dist/collab/index.cjs.map +1 -1
  338. package/dist/collab/index.d.ts +1 -1
  339. package/dist/collab/index.js +3 -1
  340. package/dist/composer/AttachmentContext.cjs +38 -12
  341. package/dist/composer/AttachmentContext.cjs.map +1 -1
  342. package/dist/composer/AttachmentContext.d.ts +22 -1
  343. package/dist/composer/AttachmentContext.js +40 -14
  344. package/dist/composer/AttachmentContext.js.map +1 -1
  345. package/dist/composer/QuoteContext.cjs +80 -28
  346. package/dist/composer/QuoteContext.cjs.map +1 -1
  347. package/dist/composer/QuoteContext.d.ts +35 -6
  348. package/dist/composer/QuoteContext.js +82 -30
  349. package/dist/composer/QuoteContext.js.map +1 -1
  350. package/dist/composer/build-composed-message.cjs +27 -0
  351. package/dist/composer/build-composed-message.cjs.map +1 -1
  352. package/dist/composer/build-composed-message.d.ts +21 -0
  353. package/dist/composer/build-composed-message.js +28 -1
  354. package/dist/composer/build-composed-message.js.map +1 -1
  355. package/dist/composer/composer-handoff.cjs +13 -1
  356. package/dist/composer/composer-handoff.cjs.map +1 -1
  357. package/dist/composer/composer-handoff.d.ts +12 -0
  358. package/dist/composer/composer-handoff.js +15 -3
  359. package/dist/composer/composer-handoff.js.map +1 -1
  360. package/dist/composer/index.d.ts +6 -3
  361. package/dist/composer/useReadComposerDraft.cjs +16 -0
  362. package/dist/composer/useReadComposerDraft.cjs.map +1 -0
  363. package/dist/composer/useReadComposerDraft.d.ts +6 -0
  364. package/dist/composer/useReadComposerDraft.js +16 -0
  365. package/dist/composer/useReadComposerDraft.js.map +1 -0
  366. package/dist/diagnostics/errors.cjs +6 -0
  367. package/dist/diagnostics/errors.cjs.map +1 -1
  368. package/dist/diagnostics/errors.d.ts +6 -0
  369. package/dist/diagnostics/errors.js +6 -0
  370. package/dist/diagnostics/errors.js.map +1 -1
  371. package/dist/index.cjs +159 -7
  372. package/dist/index.cjs.map +1 -1
  373. package/dist/index.d.ts +53 -12
  374. package/dist/index.js +166 -14
  375. package/dist/index.js.map +1 -1
  376. package/dist/lib/owner-document.cjs +32 -0
  377. package/dist/lib/owner-document.cjs.map +1 -0
  378. package/dist/lib/owner-document.d.ts +17 -0
  379. package/dist/lib/owner-document.js +32 -0
  380. package/dist/lib/owner-document.js.map +1 -0
  381. package/dist/lib/portal-surface.cjs +55 -0
  382. package/dist/lib/portal-surface.cjs.map +1 -0
  383. package/dist/lib/portal-surface.d.ts +37 -0
  384. package/dist/lib/portal-surface.js +55 -0
  385. package/dist/lib/portal-surface.js.map +1 -0
  386. package/dist/lib/use-athena-rest-query.cjs +34 -0
  387. package/dist/lib/use-athena-rest-query.cjs.map +1 -0
  388. package/dist/lib/use-athena-rest-query.d.ts +31 -0
  389. package/dist/lib/use-athena-rest-query.js +34 -0
  390. package/dist/lib/use-athena-rest-query.js.map +1 -0
  391. package/dist/provider/AthenaProvider.cjs +36 -6
  392. package/dist/provider/AthenaProvider.cjs.map +1 -1
  393. package/dist/provider/AthenaProvider.d.ts +20 -1
  394. package/dist/provider/AthenaProvider.js +38 -8
  395. package/dist/provider/AthenaProvider.js.map +1 -1
  396. package/dist/provider/citation-links.d.ts +10 -2
  397. package/dist/{packages/react → react}/package.json.cjs +1 -1
  398. package/dist/{packages/react → react}/package.json.js +1 -1
  399. package/dist/runtime/statewire-lifecycle.cjs +15 -3
  400. package/dist/runtime/statewire-lifecycle.cjs.map +1 -1
  401. package/dist/runtime/statewire-lifecycle.d.ts +6 -0
  402. package/dist/runtime/statewire-lifecycle.js +15 -3
  403. package/dist/runtime/statewire-lifecycle.js.map +1 -1
  404. package/dist/runtime/useAthenaStatewireRuntime.cjs +11 -7
  405. package/dist/runtime/useAthenaStatewireRuntime.cjs.map +1 -1
  406. package/dist/runtime/useAthenaStatewireRuntime.js +11 -7
  407. package/dist/runtime/useAthenaStatewireRuntime.js.map +1 -1
  408. package/dist/search/useAthenaRepoSearch.cjs +5 -13
  409. package/dist/search/useAthenaRepoSearch.cjs.map +1 -1
  410. package/dist/search/useAthenaRepoSearch.d.ts +3 -3
  411. package/dist/search/useAthenaRepoSearch.js +6 -14
  412. package/dist/search/useAthenaRepoSearch.js.map +1 -1
  413. package/dist/sheet-range/a1.cjs +162 -0
  414. package/dist/sheet-range/a1.cjs.map +1 -0
  415. package/dist/sheet-range/a1.d.ts +91 -0
  416. package/dist/sheet-range/a1.js +162 -0
  417. package/dist/sheet-range/a1.js.map +1 -0
  418. package/dist/sheet-range/index.cjs +22 -0
  419. package/dist/sheet-range/index.cjs.map +1 -0
  420. package/dist/sheet-range/index.d.ts +12 -0
  421. package/dist/sheet-range/index.js +22 -0
  422. package/dist/sheet-range/index.js.map +1 -0
  423. package/dist/sheet-range/range-preview-table.cjs +75 -0
  424. package/dist/sheet-range/range-preview-table.cjs.map +1 -0
  425. package/dist/sheet-range/range-preview-table.d.ts +20 -0
  426. package/dist/sheet-range/range-preview-table.js +75 -0
  427. package/dist/sheet-range/range-preview-table.js.map +1 -0
  428. package/dist/sheet-range/range-preview.cjs +116 -0
  429. package/dist/sheet-range/range-preview.cjs.map +1 -0
  430. package/dist/sheet-range/range-preview.d.ts +67 -0
  431. package/dist/sheet-range/range-preview.js +116 -0
  432. package/dist/sheet-range/range-preview.js.map +1 -0
  433. package/dist/styles.css +1 -1
  434. package/dist/threads/Inbox.cjs +289 -0
  435. package/dist/threads/Inbox.cjs.map +1 -0
  436. package/dist/threads/Inbox.d.ts +46 -0
  437. package/dist/threads/Inbox.js +289 -0
  438. package/dist/threads/Inbox.js.map +1 -0
  439. package/dist/threads/SessionList.cjs +51 -126
  440. package/dist/threads/SessionList.cjs.map +1 -1
  441. package/dist/threads/SessionList.d.ts +26 -1
  442. package/dist/threads/SessionList.js +45 -120
  443. package/dist/threads/SessionList.js.map +1 -1
  444. package/dist/threads/SessionsPage.cjs +753 -0
  445. package/dist/threads/SessionsPage.cjs.map +1 -0
  446. package/dist/threads/SessionsPage.d.ts +35 -0
  447. package/dist/threads/SessionsPage.js +753 -0
  448. package/dist/threads/SessionsPage.js.map +1 -0
  449. package/dist/threads/api.cjs +21 -1
  450. package/dist/threads/api.cjs.map +1 -1
  451. package/dist/threads/api.d.ts +59 -0
  452. package/dist/threads/api.js +21 -1
  453. package/dist/threads/api.js.map +1 -1
  454. package/dist/threads/conversation-list-fetcher.cjs +9 -2
  455. package/dist/threads/conversation-list-fetcher.cjs.map +1 -1
  456. package/dist/threads/conversation-list-fetcher.d.ts +14 -1
  457. package/dist/threads/conversation-list-fetcher.js +9 -2
  458. package/dist/threads/conversation-list-fetcher.js.map +1 -1
  459. package/dist/threads/index.d.ts +2 -1
  460. package/dist/threads/pull-request-display.cjs +25 -0
  461. package/dist/threads/pull-request-display.cjs.map +1 -0
  462. package/dist/threads/pull-request-display.d.ts +15 -0
  463. package/dist/threads/pull-request-display.js +25 -0
  464. package/dist/threads/pull-request-display.js.map +1 -0
  465. package/dist/threads/session-list-model.cjs +16 -2
  466. package/dist/threads/session-list-model.cjs.map +1 -1
  467. package/dist/threads/session-list-model.d.ts +10 -0
  468. package/dist/threads/session-list-model.js +16 -2
  469. package/dist/threads/session-list-model.js.map +1 -1
  470. package/dist/threads/session-row-parts.cjs +152 -0
  471. package/dist/threads/session-row-parts.cjs.map +1 -0
  472. package/dist/threads/session-row-parts.d.ts +50 -0
  473. package/dist/threads/session-row-parts.js +152 -0
  474. package/dist/threads/session-row-parts.js.map +1 -0
  475. package/dist/threads/sessions-page-model.cjs +305 -0
  476. package/dist/threads/sessions-page-model.cjs.map +1 -0
  477. package/dist/threads/sessions-page-model.d.ts +86 -0
  478. package/dist/threads/sessions-page-model.js +305 -0
  479. package/dist/threads/sessions-page-model.js.map +1 -0
  480. package/dist/threads/sessions-page-storage.cjs +93 -0
  481. package/dist/threads/sessions-page-storage.cjs.map +1 -0
  482. package/dist/threads/sessions-page-storage.d.ts +23 -0
  483. package/dist/threads/sessions-page-storage.js +93 -0
  484. package/dist/threads/sessions-page-storage.js.map +1 -0
  485. package/dist/threads/sessions-query.cjs +235 -0
  486. package/dist/threads/sessions-query.cjs.map +1 -0
  487. package/dist/threads/sessions-query.d.ts +119 -0
  488. package/dist/threads/sessions-query.js +235 -0
  489. package/dist/threads/sessions-query.js.map +1 -0
  490. package/dist/threads/statewire-thread-list.cjs +133 -40
  491. package/dist/threads/statewire-thread-list.cjs.map +1 -1
  492. package/dist/threads/statewire-thread-list.d.ts +83 -2
  493. package/dist/threads/statewire-thread-list.js +134 -41
  494. package/dist/threads/statewire-thread-list.js.map +1 -1
  495. package/dist/threads/use-athena-sessions.cjs +198 -0
  496. package/dist/threads/use-athena-sessions.cjs.map +1 -0
  497. package/dist/threads/use-athena-sessions.d.ts +81 -0
  498. package/dist/threads/use-athena-sessions.js +198 -0
  499. package/dist/threads/use-athena-sessions.js.map +1 -0
  500. package/dist/threads/use-rest-conversation-history.cjs +1 -1
  501. package/dist/threads/use-rest-conversation-history.js +1 -1
  502. package/dist/threads/use-statewire-conversation-history.cjs +1 -1
  503. package/dist/threads/use-statewire-conversation-history.d.ts +3 -0
  504. package/dist/threads/use-statewire-conversation-history.js +1 -1
  505. package/dist/threads/use-thread-read-state.cjs +73 -0
  506. package/dist/threads/use-thread-read-state.cjs.map +1 -0
  507. package/dist/threads/use-thread-read-state.d.ts +51 -0
  508. package/dist/threads/use-thread-read-state.js +73 -0
  509. package/dist/threads/use-thread-read-state.js.map +1 -0
  510. package/dist/tiptap-markdown-table/src/markdown-table-serializer.cjs.map +1 -0
  511. package/dist/tiptap-markdown-table/src/markdown-table-serializer.js.map +1 -0
  512. package/dist/tools/auto-open-tools.cjs +2 -0
  513. package/dist/tools/auto-open-tools.cjs.map +1 -1
  514. package/dist/tools/auto-open-tools.js +2 -0
  515. package/dist/tools/auto-open-tools.js.map +1 -1
  516. package/dist/tools/file-tool-uis.cjs +18 -43
  517. package/dist/tools/file-tool-uis.cjs.map +1 -1
  518. package/dist/tools/file-tool-uis.d.ts +1 -2
  519. package/dist/tools/file-tool-uis.js +18 -42
  520. package/dist/tools/file-tool-uis.js.map +1 -1
  521. package/dist/tools/index.cjs +6 -2
  522. package/dist/tools/index.cjs.map +1 -1
  523. package/dist/tools/index.d.ts +1 -0
  524. package/dist/tools/index.js +6 -2
  525. package/dist/tools/index.js.map +1 -1
  526. package/dist/tools/misc-tool-uis.cjs +2 -2
  527. package/dist/tools/misc-tool-uis.js +2 -2
  528. package/dist/tools/primitives.cjs +1 -1
  529. package/dist/tools/primitives.js +1 -1
  530. package/dist/tools/read-asset-tool-ui.cjs +21 -70
  531. package/dist/tools/read-asset-tool-ui.cjs.map +1 -1
  532. package/dist/tools/read-asset-tool-ui.js +21 -70
  533. package/dist/tools/read-asset-tool-ui.js.map +1 -1
  534. package/dist/tools/step-text.cjs +21 -0
  535. package/dist/tools/step-text.cjs.map +1 -0
  536. package/dist/tools/step-text.d.ts +10 -0
  537. package/dist/tools/step-text.js +21 -0
  538. package/dist/tools/step-text.js.map +1 -0
  539. package/dist/tools/tool-fallback.cjs +24 -5
  540. package/dist/tools/tool-fallback.cjs.map +1 -1
  541. package/dist/tools/tool-fallback.d.ts +3 -1
  542. package/dist/tools/tool-fallback.js +24 -5
  543. package/dist/tools/tool-fallback.js.map +1 -1
  544. package/dist/tools/tool-summary.cjs +661 -0
  545. package/dist/tools/tool-summary.cjs.map +1 -0
  546. package/dist/tools/tool-summary.d.ts +99 -0
  547. package/dist/tools/tool-summary.js +661 -0
  548. package/dist/tools/tool-summary.js.map +1 -0
  549. package/dist/tools/tool-uis.cjs +37 -95
  550. package/dist/tools/tool-uis.cjs.map +1 -1
  551. package/dist/tools/tool-uis.js +37 -95
  552. package/dist/tools/tool-uis.js.map +1 -1
  553. package/dist/tools/voice-update-tool-ui.cjs +1 -1
  554. package/dist/tools/voice-update-tool-ui.js +1 -1
  555. package/dist/tools/write-todos-tool-ui.cjs +3 -2
  556. package/dist/tools/write-todos-tool-ui.cjs.map +1 -1
  557. package/dist/tools/write-todos-tool-ui.d.ts +5 -0
  558. package/dist/tools/write-todos-tool-ui.js +5 -4
  559. package/dist/tools/write-todos-tool-ui.js.map +1 -1
  560. package/dist/ui/popover.cjs +6 -6
  561. package/dist/ui/popover.cjs.map +1 -1
  562. package/dist/ui/popover.js +6 -6
  563. package/dist/ui/popover.js.map +1 -1
  564. package/dist/ui/tooltip.cjs +16 -2
  565. package/dist/ui/tooltip.cjs.map +1 -1
  566. package/dist/ui/tooltip.d.ts +1 -1
  567. package/dist/ui/tooltip.js +16 -2
  568. package/dist/ui/tooltip.js.map +1 -1
  569. package/dist/version.cjs +1 -1
  570. package/dist/version.js +1 -1
  571. package/dist/voice/use-athena-voice-session.cjs.map +1 -1
  572. package/dist/voice/use-athena-voice-session.d.ts +3 -3
  573. package/dist/voice/use-athena-voice-session.js.map +1 -1
  574. package/dist/workbench/SessionWorkbench.cjs +378 -0
  575. package/dist/workbench/SessionWorkbench.cjs.map +1 -0
  576. package/dist/workbench/SessionWorkbench.d.ts +30 -0
  577. package/dist/workbench/SessionWorkbench.js +378 -0
  578. package/dist/workbench/SessionWorkbench.js.map +1 -0
  579. package/dist/workbench/session-workbench-context.cjs +26 -0
  580. package/dist/workbench/session-workbench-context.cjs.map +1 -0
  581. package/dist/workbench/session-workbench-context.d.ts +55 -0
  582. package/dist/workbench/session-workbench-context.js +26 -0
  583. package/dist/workbench/session-workbench-context.js.map +1 -0
  584. package/dist/workbench/session-workbench-model.cjs +288 -0
  585. package/dist/workbench/session-workbench-model.cjs.map +1 -0
  586. package/dist/workbench/session-workbench-model.d.ts +168 -0
  587. package/dist/workbench/session-workbench-model.js +288 -0
  588. package/dist/workbench/session-workbench-model.js.map +1 -0
  589. package/dist/workbench/session-workbench-panes.cjs +580 -0
  590. package/dist/workbench/session-workbench-panes.cjs.map +1 -0
  591. package/dist/workbench/session-workbench-panes.d.ts +16 -0
  592. package/dist/workbench/session-workbench-panes.js +580 -0
  593. package/dist/workbench/session-workbench-panes.js.map +1 -0
  594. package/dist/workbench/session-workspace-api.cjs +157 -0
  595. package/dist/workbench/session-workspace-api.cjs.map +1 -0
  596. package/dist/workbench/session-workspace-api.d.ts +70 -0
  597. package/dist/workbench/session-workspace-api.js +157 -0
  598. package/dist/workbench/session-workspace-api.js.map +1 -0
  599. package/dist/workbench/use-session-workspace.cjs +100 -0
  600. package/dist/workbench/use-session-workspace.cjs.map +1 -0
  601. package/dist/workbench/use-session-workspace.d.ts +45 -0
  602. package/dist/workbench/use-session-workspace.js +100 -0
  603. package/dist/workbench/use-session-workspace.js.map +1 -0
  604. package/dist/workbench/workbench-layout-context.cjs +10 -0
  605. package/dist/workbench/workbench-layout-context.cjs.map +1 -0
  606. package/dist/workbench/workbench-layout-context.d.ts +17 -0
  607. package/dist/workbench/workbench-layout-context.js +10 -0
  608. package/dist/workbench/workbench-layout-context.js.map +1 -0
  609. package/package.json +20 -9
  610. package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.cjs +0 -77
  611. package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.cjs.map +0 -1
  612. package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.js +0 -77
  613. package/dist/node_modules/@assistant-ui/react-langchain/dist/converter.js.map +0 -1
  614. package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.cjs +0 -181
  615. package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.cjs.map +0 -1
  616. package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.js +0 -181
  617. package/dist/node_modules/@assistant-ui/react-langgraph/dist/convertLangChainMessages.js.map +0 -1
  618. package/dist/packages/agent-runtime/src/asset-attachment.cjs.map +0 -1
  619. package/dist/packages/agent-runtime/src/asset-attachment.js.map +0 -1
  620. package/dist/packages/agent-runtime/src/auth-denial.cjs.map +0 -1
  621. package/dist/packages/agent-runtime/src/auth-denial.js.map +0 -1
  622. package/dist/packages/agent-runtime/src/client-tool-bridge.cjs.map +0 -1
  623. package/dist/packages/agent-runtime/src/client-tool-bridge.js.map +0 -1
  624. package/dist/packages/agent-runtime/src/client-tools.cjs.map +0 -1
  625. package/dist/packages/agent-runtime/src/client-tools.js.map +0 -1
  626. package/dist/packages/agent-runtime/src/conversation-index.cjs.map +0 -1
  627. package/dist/packages/agent-runtime/src/conversation-index.js.map +0 -1
  628. package/dist/packages/agent-runtime/src/conversation-list.cjs.map +0 -1
  629. package/dist/packages/agent-runtime/src/conversation-list.js.map +0 -1
  630. package/dist/packages/agent-runtime/src/deep-agent-transport-recipe.cjs.map +0 -1
  631. package/dist/packages/agent-runtime/src/deep-agent-transport-recipe.js.map +0 -1
  632. package/dist/packages/agent-runtime/src/edit-command.cjs.map +0 -1
  633. package/dist/packages/agent-runtime/src/edit-command.js.map +0 -1
  634. package/dist/packages/agent-runtime/src/errors.cjs.map +0 -1
  635. package/dist/packages/agent-runtime/src/errors.js.map +0 -1
  636. package/dist/packages/agent-runtime/src/generated/runconfig-contract.cjs.map +0 -1
  637. package/dist/packages/agent-runtime/src/generated/runconfig-contract.js.map +0 -1
  638. package/dist/packages/agent-runtime/src/github-wake-event.cjs.map +0 -1
  639. package/dist/packages/agent-runtime/src/github-wake-event.js.map +0 -1
  640. package/dist/packages/agent-runtime/src/interrupts.cjs.map +0 -1
  641. package/dist/packages/agent-runtime/src/interrupts.js.map +0 -1
  642. package/dist/packages/agent-runtime/src/message-author.cjs.map +0 -1
  643. package/dist/packages/agent-runtime/src/message-author.js.map +0 -1
  644. package/dist/packages/agent-runtime/src/message-window.cjs.map +0 -1
  645. package/dist/packages/agent-runtime/src/message-window.js.map +0 -1
  646. package/dist/packages/agent-runtime/src/messages.cjs.map +0 -1
  647. package/dist/packages/agent-runtime/src/messages.js.map +0 -1
  648. package/dist/packages/agent-runtime/src/model-context.cjs.map +0 -1
  649. package/dist/packages/agent-runtime/src/model-context.js.map +0 -1
  650. package/dist/packages/agent-runtime/src/optimistic-content.cjs.map +0 -1
  651. package/dist/packages/agent-runtime/src/optimistic-content.js.map +0 -1
  652. package/dist/packages/agent-runtime/src/protocol.cjs.map +0 -1
  653. package/dist/packages/agent-runtime/src/protocol.js.map +0 -1
  654. package/dist/packages/agent-runtime/src/queue.cjs.map +0 -1
  655. package/dist/packages/agent-runtime/src/queue.js.map +0 -1
  656. package/dist/packages/agent-runtime/src/quota-safe-local-storage-session.cjs.map +0 -1
  657. package/dist/packages/agent-runtime/src/quota-safe-local-storage-session.js.map +0 -1
  658. package/dist/packages/agent-runtime/src/runtime-messages.cjs.map +0 -1
  659. package/dist/packages/agent-runtime/src/runtime-messages.js.map +0 -1
  660. package/dist/packages/agent-runtime/src/screen-point.cjs.map +0 -1
  661. package/dist/packages/agent-runtime/src/screen-point.js.map +0 -1
  662. package/dist/packages/agent-runtime/src/send-recovery.cjs.map +0 -1
  663. package/dist/packages/agent-runtime/src/send-recovery.js.map +0 -1
  664. package/dist/packages/agent-runtime/src/statewire-attach-observer.cjs.map +0 -1
  665. package/dist/packages/agent-runtime/src/statewire-attach-observer.js.map +0 -1
  666. package/dist/packages/agent-runtime/src/statewire-state.cjs.map +0 -1
  667. package/dist/packages/agent-runtime/src/statewire-state.js.map +0 -1
  668. package/dist/packages/agent-runtime/src/statewire-suspended.cjs.map +0 -1
  669. package/dist/packages/agent-runtime/src/statewire-suspended.js.map +0 -1
  670. package/dist/packages/agent-runtime/src/statewire-transport.cjs +0 -11
  671. package/dist/packages/agent-runtime/src/statewire-transport.cjs.map +0 -1
  672. package/dist/packages/agent-runtime/src/statewire-transport.js +0 -11
  673. package/dist/packages/agent-runtime/src/statewire-transport.js.map +0 -1
  674. package/dist/packages/agent-runtime/src/streaming-markdown.cjs.map +0 -1
  675. package/dist/packages/agent-runtime/src/streaming-markdown.js.map +0 -1
  676. package/dist/packages/agent-runtime/src/thread-extras.cjs.map +0 -1
  677. package/dist/packages/agent-runtime/src/thread-extras.js.map +0 -1
  678. package/dist/packages/agent-runtime/src/thread-snapshot-cache.cjs.map +0 -1
  679. package/dist/packages/agent-runtime/src/thread-snapshot-cache.js.map +0 -1
  680. package/dist/packages/agent-runtime/src/thread-status.cjs.map +0 -1
  681. package/dist/packages/agent-runtime/src/thread-status.js.map +0 -1
  682. package/dist/packages/agent-runtime/src/tool-metadata.cjs.map +0 -1
  683. package/dist/packages/agent-runtime/src/tool-metadata.js.map +0 -1
  684. package/dist/packages/agent-runtime/src/tool-outputs.cjs.map +0 -1
  685. package/dist/packages/agent-runtime/src/tool-outputs.js.map +0 -1
  686. package/dist/packages/agent-runtime/src/tool-result.cjs.map +0 -1
  687. package/dist/packages/agent-runtime/src/tool-result.js.map +0 -1
  688. package/dist/packages/agent-runtime/src/use-conversation-list.cjs.map +0 -1
  689. package/dist/packages/agent-runtime/src/use-conversation-list.js.map +0 -1
  690. package/dist/packages/agent-runtime/src/use-deep-agent-config.cjs.map +0 -1
  691. package/dist/packages/agent-runtime/src/use-deep-agent-config.js.map +0 -1
  692. package/dist/packages/agent-runtime/src/use-deep-agent-edit-submit.cjs.map +0 -1
  693. package/dist/packages/agent-runtime/src/use-deep-agent-edit-submit.js.map +0 -1
  694. package/dist/packages/agent-runtime/src/use-deep-agent-runtime.cjs.map +0 -1
  695. package/dist/packages/agent-runtime/src/use-deep-agent-runtime.js.map +0 -1
  696. package/dist/packages/agent-runtime/src/use-deep-agent-thread.cjs.map +0 -1
  697. package/dist/packages/agent-runtime/src/use-deep-agent-thread.js.map +0 -1
  698. package/dist/packages/agent-runtime/src/use-deep-agent-window-sync.cjs.map +0 -1
  699. package/dist/packages/agent-runtime/src/use-deep-agent-window-sync.js.map +0 -1
  700. package/dist/packages/agent-runtime/src/voice-presentation.cjs.map +0 -1
  701. package/dist/packages/agent-runtime/src/voice-presentation.js.map +0 -1
  702. package/dist/packages/agent-runtime/src/voice-turn-grouping.cjs.map +0 -1
  703. package/dist/packages/agent-runtime/src/voice-turn-grouping.js.map +0 -1
  704. package/dist/packages/tiptap-markdown-table/src/markdown-table-serializer.cjs.map +0 -1
  705. package/dist/packages/tiptap-markdown-table/src/markdown-table-serializer.js.map +0 -1
  706. /package/dist/{packages/agent-runtime → agent-runtime}/src/asset-attachment.cjs +0 -0
  707. /package/dist/{packages/agent-runtime → agent-runtime}/src/asset-attachment.js +0 -0
  708. /package/dist/{packages/agent-runtime → agent-runtime}/src/auth-denial.cjs +0 -0
  709. /package/dist/{packages/agent-runtime → agent-runtime}/src/auth-denial.js +0 -0
  710. /package/dist/{packages/agent-runtime → agent-runtime}/src/client-tool-bridge.cjs +0 -0
  711. /package/dist/{packages/agent-runtime → agent-runtime}/src/client-tool-bridge.js +0 -0
  712. /package/dist/{packages/agent-runtime → agent-runtime}/src/client-tools.cjs +0 -0
  713. /package/dist/{packages/agent-runtime → agent-runtime}/src/client-tools.js +0 -0
  714. /package/dist/{packages/agent-runtime → agent-runtime}/src/conversation-index.cjs +0 -0
  715. /package/dist/{packages/agent-runtime → agent-runtime}/src/conversation-index.js +0 -0
  716. /package/dist/{packages/agent-runtime → agent-runtime}/src/edit-command.cjs +0 -0
  717. /package/dist/{packages/agent-runtime → agent-runtime}/src/edit-command.js +0 -0
  718. /package/dist/{packages/agent-runtime → agent-runtime}/src/github-wake-event.cjs +0 -0
  719. /package/dist/{packages/agent-runtime → agent-runtime}/src/github-wake-event.js +0 -0
  720. /package/dist/{packages/agent-runtime → agent-runtime}/src/message-author.cjs +0 -0
  721. /package/dist/{packages/agent-runtime → agent-runtime}/src/message-author.js +0 -0
  722. /package/dist/{packages/agent-runtime → agent-runtime}/src/message-window.cjs +0 -0
  723. /package/dist/{packages/agent-runtime → agent-runtime}/src/message-window.js +0 -0
  724. /package/dist/{packages/agent-runtime → agent-runtime}/src/model-context.cjs +0 -0
  725. /package/dist/{packages/agent-runtime → agent-runtime}/src/model-context.js +0 -0
  726. /package/dist/{packages/agent-runtime → agent-runtime}/src/optimistic-content.cjs +0 -0
  727. /package/dist/{packages/agent-runtime → agent-runtime}/src/optimistic-content.js +0 -0
  728. /package/dist/{packages/agent-runtime → agent-runtime}/src/protocol.cjs +0 -0
  729. /package/dist/{packages/agent-runtime → agent-runtime}/src/protocol.js +0 -0
  730. /package/dist/{packages/agent-runtime → agent-runtime}/src/runtime-messages.cjs +0 -0
  731. /package/dist/{packages/agent-runtime → agent-runtime}/src/runtime-messages.js +0 -0
  732. /package/dist/{packages/agent-runtime → agent-runtime}/src/screen-point.cjs +0 -0
  733. /package/dist/{packages/agent-runtime → agent-runtime}/src/screen-point.js +0 -0
  734. /package/dist/{packages/agent-runtime → agent-runtime}/src/send-recovery.cjs +0 -0
  735. /package/dist/{packages/agent-runtime → agent-runtime}/src/send-recovery.js +0 -0
  736. /package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-attach-observer.cjs +0 -0
  737. /package/dist/{packages/agent-runtime → agent-runtime}/src/statewire-attach-observer.js +0 -0
  738. /package/dist/{packages/agent-runtime → agent-runtime}/src/streaming-markdown.cjs +0 -0
  739. /package/dist/{packages/agent-runtime → agent-runtime}/src/streaming-markdown.js +0 -0
  740. /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-extras.cjs +0 -0
  741. /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-extras.js +0 -0
  742. /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-snapshot-cache.cjs +0 -0
  743. /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-snapshot-cache.js +0 -0
  744. /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-status.cjs +0 -0
  745. /package/dist/{packages/agent-runtime → agent-runtime}/src/thread-status.js +0 -0
  746. /package/dist/{packages/agent-runtime → agent-runtime}/src/tool-outputs.cjs +0 -0
  747. /package/dist/{packages/agent-runtime → agent-runtime}/src/tool-outputs.js +0 -0
  748. /package/dist/{packages/agent-runtime → agent-runtime}/src/tool-result.cjs +0 -0
  749. /package/dist/{packages/agent-runtime → agent-runtime}/src/tool-result.js +0 -0
  750. /package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-config.cjs +0 -0
  751. /package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-config.js +0 -0
  752. /package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-runtime.cjs +0 -0
  753. /package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-runtime.js +0 -0
  754. /package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-window-sync.cjs +0 -0
  755. /package/dist/{packages/agent-runtime → agent-runtime}/src/use-deep-agent-window-sync.js +0 -0
  756. /package/dist/{packages/agent-runtime → agent-runtime}/src/voice-turn-grouping.cjs +0 -0
  757. /package/dist/{packages/agent-runtime → agent-runtime}/src/voice-turn-grouping.js +0 -0
  758. /package/dist/{packages/react → react}/package.json.cjs.map +0 -0
  759. /package/dist/{packages/react → react}/package.json.js.map +0 -0
  760. /package/dist/{packages/tiptap-markdown-table → tiptap-markdown-table}/src/markdown-table-serializer.cjs +0 -0
  761. /package/dist/{packages/tiptap-markdown-table → tiptap-markdown-table}/src/markdown-table-serializer.js +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-workbench-panes.js","sources":["../../src/workbench/session-workbench-panes.tsx"],"sourcesContent":["\"use client\";\n\n/**\n * The built-in panes of `SessionWorkbench` — Tasks, Shell, Computer, Pull\n * requests and Attachments. Each reads one source:\n *\n * - Tasks: the thread state's `todos` channel (the deepagents plan), else the\n * newest `write_todos` call in the loaded transcript.\n * - Shell: every `execute` call in the loaded transcript.\n * - Computer / Attachments: the session's workspace\n * (`GET /api/conversations/threads/{id}/workspace`), plus the computer's\n * status and SSH target.\n * - Pull requests: the thread list's live pull-request state for the session.\n */\nimport { useAuiState } from '@assistant-ui/react';\nimport { useStatewireState } from '@assistant-ui/react-statewire';\nimport {\n type ConversationPullRequest,\n hasStatewireThreadExtras,\n readDeepAgentStreamValues,\n} from '@athenaintel/agent-runtime';\nimport {\n AlertCircleIcon,\n BookOpenIcon,\n CheckIcon,\n CircleDashedIcon,\n CopyIcon,\n ExternalLinkIcon,\n FileIcon,\n FileSpreadsheetIcon,\n FileTextIcon,\n FolderIcon,\n GitPullRequestIcon,\n ImageIcon,\n ListChecksIcon,\n LoaderIcon,\n MonitorIcon,\n PaperclipIcon,\n PresentationIcon,\n SearchIcon,\n TerminalIcon,\n XIcon,\n} from 'lucide-react';\nimport { type FC, type ReactNode, useMemo, useState } from 'react';\nimport { type AssetType as AssetPanelType, useAssetPanelStore } from '../assets/asset-panel-store';\nimport { createAthenaSpacesUrl } from '../lib/athena-urls';\nimport { cn } from '../lib/utils';\nimport { useAthenaConfig } from '../provider/AthenaContext';\nimport { PR_CHECKS_LABEL, PR_STATE_CLASS, PR_STATE_ICON } from '../threads/pull-request-display';\nimport {\n orderedPullRequests,\n pullRequestChipState,\n relativeTime,\n} from '../threads/session-list-model';\nimport { useAthenaStatewireThreadList } from '../threads/statewire-thread-list';\nimport { useAthenaSessionAttention } from '../threads/use-athena-session-attention';\nimport { PlanStepMarker, type PlanStepStatus } from '../tools/write-todos-tool-ui';\nimport {\n type SessionWorkbenchPane,\n useSessionWorkbench,\n useSessionWorkbenchWorkspace,\n} from './session-workbench-context';\nimport {\n assetPanelTypeOf,\n assetTypeLabel,\n athenaLinkAppUrl,\n computerStateBadge,\n deriveShellRows,\n deriveTaskSteps,\n filterShellRows,\n reviewDecisionLabel,\n type ShellRow,\n type ShellRowStatus,\n taskProgress,\n workspaceComputers,\n} from './session-workbench-model';\nimport type { SessionWorkspaceAsset } from './session-workspace-api';\nimport { useAthenaComputerSshAccess, useAthenaComputerStatus } from './use-session-workspace';\n\n// ─── Shared pieces ───────────────────────────────────────────────────\n\nconst FOCUS_RING_CLASS =\n 'outline-none focus-visible:ring-2 focus-visible:ring-ring/60 focus-visible:ring-offset-0';\n\nconst PaneEmpty: FC<{\n icon: FC<{ className?: string }>;\n title: string;\n children?: ReactNode;\n}> = ({ icon: Icon, title, children }) => (\n <div className=\"flex h-full min-h-40 flex-col items-center justify-center gap-2 px-6 py-10 text-center\">\n <Icon className=\"size-5 text-muted-foreground/70\" />\n <p className=\"font-medium text-foreground text-sm\">{title}</p>\n {children ? <p className=\"max-w-64 text-muted-foreground text-xs leading-snug\">{children}</p> : null}\n </div>\n);\n\nconst PaneError: FC<{ error: Error }> = ({ error }) => (\n <div role=\"alert\" className=\"m-3 flex items-start gap-2 rounded-lg border border-red-200 bg-red-50 px-3 py-2 text-red-900 text-xs\">\n <AlertCircleIcon className=\"mt-0.5 size-3.5 shrink-0\" aria-hidden />\n <span className=\"min-w-0 flex-1 break-words\">{error.message}</span>\n </div>\n);\n\nconst PaneSkeleton: FC = () => (\n <div className=\"flex flex-col gap-2 p-3\" aria-busy=\"true\" aria-label=\"Loading\">\n {[0, 1, 2].map((row) => (\n <div key={row} className=\"h-10 animate-pulse rounded-lg bg-muted\" />\n ))}\n </div>\n);\n\nconst SectionHeading: FC<{ children: ReactNode; trailing?: ReactNode }> = ({ children, trailing }) => (\n <div className=\"flex items-center justify-between gap-2 px-3 pt-3 pb-1.5\">\n <h3 className=\"font-medium text-[11px] text-muted-foreground uppercase tracking-wide\">{children}</h3>\n {trailing}\n </div>\n);\n\n/** The `title` tooltip for an ISO time: the full local date and time. */\nfunction fullTime(iso: string | null): string | undefined {\n if (!iso) return undefined;\n const time = Date.parse(iso);\n return Number.isNaN(time) ? undefined : new Date(time).toLocaleString();\n}\n\n/** Statewire-only panes read the transcript and thread state; elsewhere they say so. */\nconst RequiresStatewireThread: FC<{ children: ReactNode; icon: FC<{ className?: string }> }> = ({\n children,\n icon,\n}) => {\n const extras = useAuiState((state) => state.thread.extras);\n if (!hasStatewireThreadExtras(extras)) {\n return <PaneEmpty icon={icon} title=\"No live session\">Open a session to see this pane.</PaneEmpty>;\n }\n return <>{children}</>;\n};\n\n// ─── Tasks ───────────────────────────────────────────────────────────\n\nconst TASK_STATUS_LABEL: Record<PlanStepStatus, string> = {\n pending: 'To do',\n in_progress: 'In progress',\n completed: 'Done',\n failed: 'Failed',\n cancelled: 'Cancelled',\n};\n\nconst TasksPaneContent: FC = () => {\n const stateTodos = useStatewireState((state) => readDeepAgentStreamValues(state).todos);\n const messages = useAuiState((state) => state.thread.messages);\n const progress = useMemo(\n () => taskProgress(deriveTaskSteps({ stateTodos, messages })),\n [stateTodos, messages],\n );\n if (progress.total === 0) {\n return (\n <PaneEmpty icon={ListChecksIcon} title=\"No plan yet\">\n When the agent writes a plan, its steps show here as it works through them.\n </PaneEmpty>\n );\n }\n const percent = Math.round((progress.done / progress.total) * 100);\n return (\n <div className=\"flex flex-col\">\n <SectionHeading\n trailing={\n <span className=\"font-medium text-foreground text-xs tabular-nums\">\n {progress.done}/{progress.total} done\n </span>\n }\n >\n Plan\n </SectionHeading>\n <div className=\"mx-3 mb-2 h-1 overflow-hidden rounded-full bg-muted\">\n {/* A runtime percentage is the one width a static utility cannot express. */}\n <div className=\"h-full rounded-full bg-primary transition-all\" style={{ width: `${percent}%` }} />\n </div>\n <ol className=\"flex flex-col pb-3\" aria-label=\"Plan steps\">\n {progress.steps.map((step, index) => (\n <li\n key={step.id ?? `${index}:${step.content}`}\n data-status={step.status}\n className=\"flex items-start gap-2.5 px-3 py-1.5\"\n >\n {step.status === 'pending' ? (\n // The row already carries its number; a pending marker repeating it reads \"11 11.\".\n <span aria-hidden className=\"size-[18px] shrink-0 rounded-full border border-border border-dashed\" />\n ) : (\n <PlanStepMarker status={step.status} index={index} />\n )}\n <span className=\"sr-only\">{TASK_STATUS_LABEL[step.status]}: </span>\n <span\n className={cn(\n 'min-w-0 flex-1 text-sm leading-[18px]',\n step.status === 'completed' && 'text-muted-foreground line-through',\n step.status === 'in_progress' && 'font-medium text-foreground',\n step.status === 'failed' && 'text-destructive',\n step.status === 'cancelled' && 'text-muted-foreground line-through',\n )}\n >\n <span className=\"mr-1.5 text-muted-foreground tabular-nums\">{index + 1}.</span>\n {step.content}\n </span>\n </li>\n ))}\n </ol>\n </div>\n );\n};\n\nexport const SessionTasksPane: FC = () => (\n <RequiresStatewireThread icon={ListChecksIcon}>\n <TasksPaneContent />\n </RequiresStatewireThread>\n);\n\n// ─── Shell ───────────────────────────────────────────────────────────\n\nconst SHELL_STATUS_LABEL: Record<ShellRowStatus, string> = {\n running: 'Running',\n succeeded: 'Succeeded',\n failed: 'Failed',\n unknown: 'Finished',\n};\n\nconst ShellStatusIcon: FC<{ status: ShellRowStatus }> = ({ status }) => {\n const label = SHELL_STATUS_LABEL[status];\n if (status === 'running') {\n return <LoaderIcon className=\"mt-0.5 size-3.5 shrink-0 animate-spin text-primary\" aria-label={label} />;\n }\n if (status === 'succeeded') {\n return <CheckIcon className=\"mt-0.5 size-3.5 shrink-0 text-emerald-600\" aria-label={label} />;\n }\n if (status === 'failed') {\n return <XIcon className=\"mt-0.5 size-3.5 shrink-0 text-red-600\" aria-label={label} />;\n }\n return <CircleDashedIcon className=\"mt-0.5 size-3.5 shrink-0 text-muted-foreground\" aria-label={label} />;\n};\n\nfunction shellMeta(row: ShellRow): string {\n const parts = [row.machine.label];\n if (row.exitCode !== null) parts.push(`exit ${row.exitCode}`);\n if (row.createdAt) parts.push(relativeTime(row.createdAt));\n return parts.join(' · ');\n}\n\nconst ShellRowItem: FC<{ row: ShellRow; expanded: boolean; onToggle: () => void }> = ({\n row,\n expanded,\n onToggle,\n}) => {\n const panelId = `athena-shell-${row.id}`;\n return (\n <li data-status={row.status} className=\"border-border/60 border-b last:border-b-0\">\n <button\n type=\"button\"\n aria-expanded={expanded}\n aria-controls={panelId}\n onClick={onToggle}\n className={cn(\n 'flex w-full items-start gap-2 px-3 py-2 text-left transition-colors hover:bg-muted/60',\n FOCUS_RING_CLASS,\n )}\n >\n <ShellStatusIcon status={row.status} />\n <span className=\"min-w-0 flex-1\">\n <span className=\"block truncate font-mono text-foreground text-xs\">\n <span className=\"text-muted-foreground\">$ </span>\n {row.firstLine || '(empty command)'}\n {row.extraLines > 0 ? (\n <span className=\"text-muted-foreground\"> (+{row.extraLines} lines)</span>\n ) : null}\n </span>\n <span className=\"block truncate text-[11px] text-muted-foreground\" title={fullTime(row.createdAt)}>\n {shellMeta(row)}\n </span>\n </span>\n </button>\n {expanded ? (\n <div id={panelId} className=\"px-3 pb-2.5\">\n <pre\n aria-label=\"Command\"\n className=\"mb-1.5 max-h-40 overflow-auto whitespace-pre-wrap break-all rounded-md border border-border/60 px-2 py-1.5 font-mono text-[11px] text-foreground\"\n >\n {row.command}\n </pre>\n <pre className=\"max-h-72 overflow-auto whitespace-pre-wrap break-all rounded-md bg-muted px-2 py-1.5 font-mono text-[11px] text-foreground\">\n {row.status === 'running' ? 'Running…' : row.output || '(no output)'}\n </pre>\n {row.outputPartial ? (\n <p className=\"pt-1 text-[11px] text-muted-foreground\">\n Output shortened — the full output is on the command's card in the chat.\n </p>\n ) : null}\n </div>\n ) : null}\n </li>\n );\n};\n\nconst ShellPaneContent: FC = () => {\n const messages = useAuiState((state) => state.thread.messages);\n const workspace = useSessionWorkbenchWorkspace().data ?? null;\n const rows = useMemo(() => deriveShellRows({ messages, workspace }), [messages, workspace]);\n const [query, setQuery] = useState('');\n const [expanded, setExpanded] = useState<ReadonlySet<string>>(() => new Set());\n const visible = useMemo(() => filterShellRows(rows, query), [rows, query]);\n const toggle = (id: string) =>\n setExpanded((current) => {\n const next = new Set(current);\n if (next.has(id)) next.delete(id);\n else next.add(id);\n return next;\n });\n\n if (rows.length === 0) {\n return (\n <PaneEmpty icon={TerminalIcon} title=\"No commands yet\">\n Every shell command the agent runs shows here with where it ran and how it ended.\n </PaneEmpty>\n );\n }\n return (\n <div className=\"flex flex-col\">\n <div className=\"sticky top-0 z-10 border-border/60 border-b bg-background px-3 py-2\">\n <label className=\"flex items-center gap-2 rounded-md border border-border bg-background px-2 py-1 focus-within:ring-2 focus-within:ring-ring/40\">\n <SearchIcon className=\"size-3.5 shrink-0 text-muted-foreground\" aria-hidden />\n <input\n type=\"search\"\n value={query}\n onChange={(event) => setQuery(event.target.value)}\n placeholder=\"Search commands\"\n aria-label=\"Search commands\"\n className=\"min-w-0 flex-1 bg-transparent text-xs outline-none placeholder:text-muted-foreground\"\n />\n </label>\n <p className=\"pt-1.5 text-[11px] text-muted-foreground\" aria-live=\"polite\">\n {query.trim()\n ? `${visible.length} of ${rows.length} commands`\n : `${rows.length} command${rows.length === 1 ? '' : 's'}`}\n </p>\n </div>\n {visible.length === 0 ? (\n <p className=\"px-3 py-6 text-center text-muted-foreground text-xs\">No command matches.</p>\n ) : (\n <ul aria-label=\"Shell commands\">\n {visible.map((row) => (\n <ShellRowItem\n key={row.id}\n row={row}\n expanded={expanded.has(row.id)}\n onToggle={() => toggle(row.id)}\n />\n ))}\n </ul>\n )}\n </div>\n );\n};\n\nexport const SessionShellPane: FC = () => (\n <RequiresStatewireThread icon={TerminalIcon}>\n <ShellPaneContent />\n </RequiresStatewireThread>\n);\n\n// ─── Computer ────────────────────────────────────────────────────────\n\nconst ComputerStateBadge: FC<{ assetId: string }> = ({ assetId }) => {\n const status = useAthenaComputerStatus({ assetId });\n const badge = status.data ? computerStateBadge(status.data) : null;\n if (!badge) return null;\n return (\n <span\n data-state={status.data?.state}\n className=\"inline-flex items-center gap-1.5 rounded-full border border-border px-2 py-0.5 text-[11px] text-muted-foreground\"\n >\n <span\n aria-hidden\n className={cn(\n 'size-1.5 rounded-full',\n badge.tone === 'running' && 'bg-emerald-500',\n badge.tone === 'transition' && 'animate-pulse bg-amber-500',\n badge.tone === 'stopped' && 'bg-muted-foreground/50',\n badge.tone === 'error' && 'bg-red-500',\n )}\n />\n {badge.label}\n </span>\n );\n};\n\nconst CopySshCommand: FC<{ assetId: string }> = ({ assetId }) => {\n const ssh = useAthenaComputerSshAccess({ assetId });\n const [copied, setCopied] = useState(false);\n const command = ssh.data?.command;\n if (!command) return null;\n const copy = () => {\n void navigator.clipboard?.writeText(command).then(() => {\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n });\n };\n return (\n <div className=\"flex flex-col gap-1\">\n <div className=\"flex items-center gap-1.5\">\n <code className=\"min-w-0 flex-1 truncate rounded-md bg-muted px-2 py-1 font-mono text-[11px] text-foreground\" title={command}>\n {command}\n </code>\n <button\n type=\"button\"\n onClick={copy}\n className={cn(\n 'inline-flex shrink-0 items-center gap-1 rounded-md border border-border px-2 py-1 font-medium text-xs transition-colors hover:bg-muted',\n FOCUS_RING_CLASS,\n )}\n >\n {copied ? <CheckIcon className=\"size-3.5\" aria-hidden /> : <CopyIcon className=\"size-3.5\" aria-hidden />}\n {copied ? 'Copied' : 'Copy SSH command'}\n </button>\n </div>\n {ssh.data?.keyAuthEnabled === false ? (\n <p className=\"text-[11px] text-muted-foreground\">\n This environment's SSH gateway takes temporary tokens only; create one from the computer in Athena.\n </p>\n ) : null}\n </div>\n );\n};\n\nfunction useAssetHref(assetId: string): string | null {\n const { appUrl, backendUrl } = useAthenaConfig();\n return useMemo(() => {\n const pageOrigin = typeof window === 'undefined' ? null : window.location.origin;\n try {\n return createAthenaSpacesUrl({\n appUrl: athenaLinkAppUrl({ appUrl, backendUrl, pageOrigin }),\n assetIds: assetId,\n });\n } catch {\n return null;\n }\n }, [appUrl, backendUrl, assetId]);\n}\n\nconst OpenInAthenaLink: FC<{ assetId: string; label?: string; compact?: boolean }> = ({\n assetId,\n label = 'Open in Athena',\n compact = false,\n}) => {\n const href = useAssetHref(assetId);\n if (!href) return null;\n return (\n <a\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n aria-label={compact ? label : undefined}\n title={compact ? label : undefined}\n className={cn(\n 'inline-flex shrink-0 items-center gap-1 rounded-md font-medium text-xs transition-colors hover:bg-muted',\n compact ? 'p-1 text-muted-foreground hover:text-foreground' : 'border border-border px-2 py-1',\n FOCUS_RING_CLASS,\n )}\n >\n <ExternalLinkIcon className=\"size-3.5\" aria-hidden />\n {compact ? null : label}\n </a>\n );\n};\n\nconst ComputerCard: FC<{ computer: SessionWorkspaceAsset }> = ({ computer }) => (\n <article\n aria-label={computer.title ?? computer.assetId}\n className=\"mx-3 mt-3 flex flex-col gap-3 rounded-xl border border-border p-3\"\n >\n <div className=\"flex items-start gap-2.5\">\n <span className=\"flex size-8 shrink-0 items-center justify-center rounded-lg bg-muted text-foreground\">\n <MonitorIcon className=\"size-4\" aria-hidden />\n </span>\n <div className=\"min-w-0 flex-1\">\n <p className=\"truncate font-medium text-foreground text-sm\">{computer.title ?? computer.assetId}</p>\n <p className=\"truncate text-[11px] text-muted-foreground\">\n {computer.role === 'session_computer' ? 'Session computer' : 'Used by this session'}\n {computer.updatedAt ? ` · updated ${relativeTime(computer.updatedAt)}` : ''}\n </p>\n </div>\n <ComputerStateBadge assetId={computer.assetId} />\n </div>\n <div className=\"flex flex-wrap items-center gap-2\">\n <OpenInAthenaLink assetId={computer.assetId} />\n </div>\n <CopySshCommand assetId={computer.assetId} />\n </article>\n);\n\nexport const SessionComputerPane: FC = () => {\n const { isPersisted } = useSessionWorkbench();\n const workspace = useSessionWorkbenchWorkspace();\n if (!isPersisted) {\n return (\n <PaneEmpty icon={MonitorIcon} title=\"No computer yet\">\n The computer this session works on shows here once it starts.\n </PaneEmpty>\n );\n }\n if (workspace.isError) return <PaneError error={workspace.error} />;\n if (!workspace.data) return <PaneSkeleton />;\n const { primary, others } = workspaceComputers(workspace.data);\n if (!primary) {\n return (\n <PaneEmpty icon={MonitorIcon} title=\"No computer used yet\">\n When the agent runs commands on a computer, it shows here with a link and its SSH command.\n </PaneEmpty>\n );\n }\n return (\n <div className=\"flex flex-col pb-3\">\n <ComputerCard computer={primary} />\n {others.length > 0 ? (\n <>\n <SectionHeading>Also used</SectionHeading>\n <ul aria-label=\"Other computers\">\n {others.map((computer) => (\n <li key={computer.assetId} className=\"flex items-center gap-2 px-3 py-1.5\">\n <MonitorIcon className=\"size-3.5 shrink-0 text-muted-foreground\" aria-hidden />\n <span className=\"min-w-0 flex-1 truncate text-foreground text-sm\">\n {computer.title ?? computer.assetId}\n </span>\n <OpenInAthenaLink assetId={computer.assetId} compact label={`Open ${computer.title ?? 'computer'} in Athena`} />\n </li>\n ))}\n </ul>\n </>\n ) : null}\n </div>\n );\n};\n\n// ─── Pull requests ───────────────────────────────────────────────────\n\nconst PullRequestRow: FC<{ pullRequest: ConversationPullRequest }> = ({ pullRequest }) => {\n const state = pullRequestChipState(pullRequest);\n const Icon = PR_STATE_ICON[state];\n const meta = [\n `${pullRequest.repoFullName}#${pullRequest.number}`,\n state,\n PR_CHECKS_LABEL[pullRequest.checksState],\n reviewDecisionLabel(pullRequest.reviewDecision),\n ]\n .filter(Boolean)\n .join(' · ');\n return (\n <li>\n <a\n href={pullRequest.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n data-pr-state={state}\n className={cn('flex items-start gap-2.5 px-3 py-2 transition-colors hover:bg-muted/60', FOCUS_RING_CLASS)}\n >\n <Icon className={cn('mt-0.5 size-4 shrink-0', PR_STATE_CLASS[state])} aria-hidden />\n <span className=\"min-w-0 flex-1\">\n <span className=\"block text-foreground text-sm leading-snug\">\n {pullRequest.title || `#${pullRequest.number}`}\n </span>\n <span className=\"block truncate text-[11px] text-muted-foreground\">{meta}</span>\n </span>\n <ExternalLinkIcon className=\"mt-0.5 size-3.5 shrink-0 text-muted-foreground\" aria-hidden />\n </a>\n </li>\n );\n};\n\nexport const SessionPullRequestsPane: FC = () => {\n const { threadId, isPersisted } = useSessionWorkbench();\n const list = useAthenaStatewireThreadList();\n const attention = useAthenaSessionAttention(threadId ?? undefined);\n if (!list) {\n return (\n <PaneEmpty icon={GitPullRequestIcon} title=\"Pull requests need the session list\">\n Mount the provider with enableThreadList to see the pull requests a session opened.\n </PaneEmpty>\n );\n }\n const pullRequests = isPersisted ? (attention?.pullRequests ?? []) : [];\n if (attention?.pullRequests === null && isPersisted) {\n return (\n <PaneEmpty icon={GitPullRequestIcon} title=\"Pull requests unavailable\">\n GitHub could not be read for this session right now.\n </PaneEmpty>\n );\n }\n if (pullRequests.length === 0) {\n return (\n <PaneEmpty icon={GitPullRequestIcon} title=\"No pull requests\">\n Pull requests the agent opens show here with their checks and review state.\n </PaneEmpty>\n );\n }\n const ordered = orderedPullRequests(pullRequests);\n return (\n <div className=\"flex flex-col pb-2\">\n <SectionHeading\n trailing={<span className=\"text-muted-foreground text-xs tabular-nums\">{ordered.length}</span>}\n >\n Pull requests\n </SectionHeading>\n <ul aria-label=\"Pull requests\">\n {ordered.map((pullRequest) => (\n <PullRequestRow key={pullRequest.url} pullRequest={pullRequest} />\n ))}\n </ul>\n </div>\n );\n};\n\n// ─── Attachments ─────────────────────────────────────────────────────\n\nconst ASSET_ICON: Record<string, FC<{ className?: string }>> = {\n spreadsheet: FileSpreadsheetIcon,\n document: FileTextIcon,\n presentation: PresentationIcon,\n presentation_pptx_studio: PresentationIcon,\n pptx: PresentationIcon,\n notebook: BookOpenIcon,\n image: ImageIcon,\n folder: FolderIcon,\n markdown: FileTextIcon,\n pdf: FileTextIcon,\n txt: FileTextIcon,\n};\n\nconst AttachmentRow: FC<{ asset: SessionWorkspaceAsset; canOpenHere: boolean }> = ({\n asset,\n canOpenHere,\n}) => {\n const openAsset = useAssetPanelStore((state) => state.openAsset);\n const Icon = ASSET_ICON[asset.assetType] ?? FileIcon;\n const panelType: AssetPanelType | null = assetPanelTypeOf(asset.assetType);\n const title = asset.title ?? asset.assetId;\n const meta = [\n assetTypeLabel(asset.assetType),\n asset.updatedAt ? `updated ${relativeTime(asset.updatedAt)}` : null,\n ]\n .filter(Boolean)\n .join(' · ');\n const body = (\n <>\n <Icon className=\"mt-0.5 size-4 shrink-0 text-muted-foreground\" />\n <span className=\"min-w-0 flex-1\">\n <span className=\"block truncate text-foreground text-sm\">{title}</span>\n <span className=\"block truncate text-[11px] text-muted-foreground\" title={fullTime(asset.updatedAt)}>\n {meta}\n </span>\n </span>\n </>\n );\n return (\n <li className=\"flex items-start gap-1 pr-2\">\n {canOpenHere && panelType ? (\n <button\n type=\"button\"\n onClick={() => openAsset(asset.assetId, { name: title, type: panelType })}\n className={cn(\n 'flex min-w-0 flex-1 items-start gap-2.5 px-3 py-2 text-left transition-colors hover:bg-muted/60',\n FOCUS_RING_CLASS,\n )}\n >\n {body}\n </button>\n ) : (\n <div className=\"flex min-w-0 flex-1 items-start gap-2.5 px-3 py-2\">{body}</div>\n )}\n <span className=\"pt-1.5\">\n <OpenInAthenaLink assetId={asset.assetId} compact label={`Open ${title} in Athena`} />\n </span>\n </li>\n );\n};\n\nexport const SessionAttachmentsPane: FC = () => {\n const { isPersisted } = useSessionWorkbench();\n const workspace = useSessionWorkbenchWorkspace();\n const canOpenHere = useAssetPanelStore((state) => state.assetPanelHostCount > 0);\n if (!isPersisted) {\n return (\n <PaneEmpty icon={PaperclipIcon} title=\"No files yet\">\n Documents, sheets and decks the agent creates or edits show here.\n </PaneEmpty>\n );\n }\n if (workspace.isError) return <PaneError error={workspace.error} />;\n if (!workspace.data) return <PaneSkeleton />;\n const { assets } = workspace.data;\n if (assets.length === 0) {\n return (\n <PaneEmpty icon={PaperclipIcon} title=\"No files yet\">\n Documents, sheets and decks the agent creates or edits show here.\n </PaneEmpty>\n );\n }\n return (\n <div className=\"flex flex-col pb-2\">\n <SectionHeading\n trailing={<span className=\"text-muted-foreground text-xs tabular-nums\">{assets.length}</span>}\n >\n Created or edited\n </SectionHeading>\n <ul aria-label=\"Session files\">\n {assets.map((asset) => (\n <AttachmentRow key={asset.assetId} asset={asset} canOpenHere={canOpenHere} />\n ))}\n </ul>\n </div>\n );\n};\n\n// ─── Registry ────────────────────────────────────────────────────────\n\nexport const SESSION_WORKBENCH_TASKS_PANE: SessionWorkbenchPane = {\n id: 'tasks',\n title: 'Tasks',\n description: \"Follow the agent's plan step by step\",\n icon: ListChecksIcon,\n render: () => <SessionTasksPane />,\n};\n\nexport const SESSION_WORKBENCH_SHELL_PANE: SessionWorkbenchPane = {\n id: 'shell',\n title: 'Shell',\n description: 'Commands the agent ran and their output',\n icon: TerminalIcon,\n render: () => <SessionShellPane />,\n};\n\nexport const SESSION_WORKBENCH_COMPUTER_PANE: SessionWorkbenchPane = {\n id: 'computer',\n title: 'Computer',\n description: 'The machine this session works on, and how to reach it',\n icon: MonitorIcon,\n render: () => <SessionComputerPane />,\n};\n\nexport const SESSION_WORKBENCH_PULL_REQUESTS_PANE: SessionWorkbenchPane = {\n id: 'pull-requests',\n title: 'Pull requests',\n description: 'Pull requests this session opened, with checks and reviews',\n icon: GitPullRequestIcon,\n render: () => <SessionPullRequestsPane />,\n};\n\nexport const SESSION_WORKBENCH_ATTACHMENTS_PANE: SessionWorkbenchPane = {\n id: 'attachments',\n title: 'Attachments',\n description: 'Files and assets this session created or edited',\n icon: PaperclipIcon,\n render: () => <SessionAttachmentsPane />,\n};\n\n/** The built-in panes, in \"+\" menu order. Spread it to add your own. */\nexport const DEFAULT_SESSION_WORKBENCH_PANES: readonly SessionWorkbenchPane[] = [\n SESSION_WORKBENCH_TASKS_PANE,\n SESSION_WORKBENCH_SHELL_PANE,\n SESSION_WORKBENCH_COMPUTER_PANE,\n SESSION_WORKBENCH_PULL_REQUESTS_PANE,\n SESSION_WORKBENCH_ATTACHMENTS_PANE,\n];\n\n/** The panes a thread opens with until the person changes its tabs. */\nexport const DEFAULT_SESSION_WORKBENCH_OPEN_PANE_IDS: readonly string[] = [\n SESSION_WORKBENCH_TASKS_PANE.id,\n SESSION_WORKBENCH_SHELL_PANE.id,\n SESSION_WORKBENCH_COMPUTER_PANE.id,\n];\n"],"names":["_a"],"mappings":"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"}
@@ -0,0 +1,157 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const mint = require("../collab/mint.cjs");
4
+ const errors = require("../diagnostics/errors.cjs");
5
+ const utils = require("../lib/utils.cjs");
6
+ const credentialRenewal = require("../runtime/credential-renewal.cjs");
7
+ function sessionWorkspacePath(threadId) {
8
+ return `/api/conversations/threads/${encodeURIComponent(threadId)}/workspace`;
9
+ }
10
+ function computerStatusPath(assetId) {
11
+ return `/api/sandbox/computer/${encodeURIComponent(assetId)}/status`;
12
+ }
13
+ function computerSshAccessPath(assetId) {
14
+ return `/api/v0/computer/${encodeURIComponent(assetId)}/ssh-access`;
15
+ }
16
+ const WORKSPACE_ROLES = /* @__PURE__ */ new Set(["session_computer", "computer", "asset"]);
17
+ function readWorkspaceAsset(value) {
18
+ if (!utils.isRecord(value)) return null;
19
+ const { asset_id, title, asset_type, updated_at, role } = value;
20
+ if (typeof asset_id !== "string" || asset_id.length === 0) return null;
21
+ return {
22
+ assetId: asset_id,
23
+ title: typeof title === "string" && title.trim().length > 0 ? title : null,
24
+ assetType: typeof asset_type === "string" ? asset_type : "",
25
+ updatedAt: typeof updated_at === "string" ? updated_at : "",
26
+ role: typeof role === "string" && WORKSPACE_ROLES.has(role) ? role : "asset"
27
+ };
28
+ }
29
+ function readWorkspaceAssets(value) {
30
+ if (!Array.isArray(value)) return [];
31
+ return value.flatMap((entry) => {
32
+ const asset = readWorkspaceAsset(entry);
33
+ return asset ? [asset] : [];
34
+ });
35
+ }
36
+ function readSessionWorkspace(body, threadId) {
37
+ if (!utils.isRecord(body)) {
38
+ return { threadId, sessionComputerAssetId: null, computers: [], assets: [] };
39
+ }
40
+ const sessionComputer = body.session_computer_asset_id;
41
+ return {
42
+ threadId: typeof body.thread_id === "string" && body.thread_id ? body.thread_id : threadId,
43
+ sessionComputerAssetId: typeof sessionComputer === "string" && sessionComputer ? sessionComputer : null,
44
+ computers: readWorkspaceAssets(body.computers),
45
+ assets: readWorkspaceAssets(body.assets)
46
+ };
47
+ }
48
+ function readComputerRuntimeStatus(body) {
49
+ if (!utils.isRecord(body) || typeof body.state !== "string" || !body.state) return null;
50
+ return {
51
+ state: body.state,
52
+ explicitStop: typeof body.explicit_stop === "string" ? body.explicit_stop : null,
53
+ provider: typeof body.provider === "string" ? body.provider : null
54
+ };
55
+ }
56
+ function readComputerSshAccess(body) {
57
+ if (!utils.isRecord(body) || typeof body.command !== "string" || !body.command) return null;
58
+ return {
59
+ command: body.command,
60
+ host: typeof body.host === "string" ? body.host : "",
61
+ port: typeof body.port === "number" ? body.port : 22,
62
+ username: typeof body.username === "string" ? body.username : "",
63
+ keyAuthEnabled: body.key_auth_enabled === true
64
+ };
65
+ }
66
+ function isAbortError(error) {
67
+ return (error instanceof DOMException || error instanceof Error) && error.name === "AbortError";
68
+ }
69
+ async function getAgoraJson({
70
+ backendUrl,
71
+ auth,
72
+ path,
73
+ what,
74
+ signal
75
+ }) {
76
+ const url = `${mint.getAthenaApiBaseUrl(backendUrl)}${path}`;
77
+ const get = async (headers) => {
78
+ try {
79
+ return await fetch(url, { method: "GET", headers, signal: signal ?? null });
80
+ } catch (error) {
81
+ if (isAbortError(error)) throw error;
82
+ throw new errors.AthenaSdkError({
83
+ code: "session_workspace_failed",
84
+ message: `Reading ${what} could not reach the Agora API.`,
85
+ cause: error,
86
+ hint: "Check the network and that backendUrl points at the Agora API base."
87
+ });
88
+ }
89
+ };
90
+ const response = await credentialRenewal.sendWithCredentialRenewal(auth, get);
91
+ if (!response.ok) {
92
+ const refused = response.status === 401 || response.status === 403;
93
+ throw new errors.AthenaSdkError({
94
+ code: refused ? "auth_rejected" : "session_workspace_failed",
95
+ message: `Reading ${what} failed: ${response.status}`,
96
+ 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."
99
+ });
100
+ }
101
+ return response.json();
102
+ }
103
+ async function fetchSessionWorkspace({
104
+ backendUrl,
105
+ auth,
106
+ threadId,
107
+ signal
108
+ }) {
109
+ const body = await getAgoraJson({
110
+ backendUrl,
111
+ auth,
112
+ path: sessionWorkspacePath(threadId),
113
+ what: "the session workspace",
114
+ signal
115
+ });
116
+ return readSessionWorkspace(body, threadId);
117
+ }
118
+ async function fetchComputerRuntimeStatus({
119
+ backendUrl,
120
+ auth,
121
+ assetId,
122
+ signal
123
+ }) {
124
+ const body = await getAgoraJson({
125
+ backendUrl,
126
+ auth,
127
+ path: computerStatusPath(assetId),
128
+ what: "the computer status",
129
+ signal
130
+ });
131
+ return readComputerRuntimeStatus(body);
132
+ }
133
+ async function fetchComputerSshAccess({
134
+ backendUrl,
135
+ auth,
136
+ assetId,
137
+ signal
138
+ }) {
139
+ const body = await getAgoraJson({
140
+ backendUrl,
141
+ auth,
142
+ path: computerSshAccessPath(assetId),
143
+ what: "the computer SSH target",
144
+ signal
145
+ });
146
+ return readComputerSshAccess(body);
147
+ }
148
+ exports.computerSshAccessPath = computerSshAccessPath;
149
+ exports.computerStatusPath = computerStatusPath;
150
+ exports.fetchComputerRuntimeStatus = fetchComputerRuntimeStatus;
151
+ exports.fetchComputerSshAccess = fetchComputerSshAccess;
152
+ exports.fetchSessionWorkspace = fetchSessionWorkspace;
153
+ exports.readComputerRuntimeStatus = readComputerRuntimeStatus;
154
+ exports.readComputerSshAccess = readComputerSshAccess;
155
+ exports.readSessionWorkspace = readSessionWorkspace;
156
+ exports.sessionWorkspacePath = sessionWorkspacePath;
157
+ //# sourceMappingURL=session-workspace-api.cjs.map
@@ -0,0 +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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"}
@@ -0,0 +1,70 @@
1
+ import type { StatewireAuthSource } from '../runtime/statewire-auth-headers';
2
+ /** Why an asset is in a session's workspace. */
3
+ export type SessionWorkspaceRole = 'session_computer' | 'computer' | 'asset';
4
+ /** One computer or asset a session works with. */
5
+ export interface SessionWorkspaceAsset {
6
+ assetId: string;
7
+ title: string | null;
8
+ /** The asset's type (`computer`, `spreadsheet`, `document`, …). */
9
+ assetType: string;
10
+ /** ISO 8601 time of the asset's last update. */
11
+ updatedAt: string;
12
+ role: SessionWorkspaceRole;
13
+ }
14
+ /** What a session works with, as the caller may see it. */
15
+ export interface SessionWorkspace {
16
+ threadId: string;
17
+ /** The computer bound to the session, when it has one the caller may open. */
18
+ sessionComputerAssetId: string | null;
19
+ /** Session computer first, then the computers the session touched, most recent first. */
20
+ computers: SessionWorkspaceAsset[];
21
+ /** The assets the session created or edited, most recently touched first. */
22
+ assets: SessionWorkspaceAsset[];
23
+ }
24
+ /** A computer's runtime state as `/status` reports it. */
25
+ export interface ComputerRuntimeStatus {
26
+ /** `started`, `stopped`, `restoring`, `unknown`, … — the provider's word. */
27
+ state: string;
28
+ /** `stopping` / `stopped` while someone asked it to stop. */
29
+ explicitStop: string | null;
30
+ provider: string | null;
31
+ }
32
+ /** The SSH target of a computer (identity mode: a registered key logs in). */
33
+ export interface ComputerSshAccess {
34
+ /** Ready to run: `ssh [-p <port>] <asset_id>@<host>`. */
35
+ command: string;
36
+ host: string;
37
+ port: number;
38
+ username: string;
39
+ /** False where the gateway accepts temporary tokens only (the command is refused there). */
40
+ keyAuthEnabled: boolean;
41
+ }
42
+ export declare function sessionWorkspacePath(threadId: string): string;
43
+ export declare function computerStatusPath(assetId: string): string;
44
+ export declare function computerSshAccessPath(assetId: string): string;
45
+ /**
46
+ * The route's snake_case body as the SDK's camelCase shape. Tolerant: a
47
+ * malformed entry is dropped rather than failing the whole pane, and a body
48
+ * that is not an object reads as an empty workspace for `threadId`.
49
+ */
50
+ export declare function readSessionWorkspace(body: unknown, threadId: string): SessionWorkspace;
51
+ export declare function readComputerRuntimeStatus(body: unknown): ComputerRuntimeStatus | null;
52
+ export declare function readComputerSshAccess(body: unknown): ComputerSshAccess | null;
53
+ export declare function fetchSessionWorkspace({ backendUrl, auth, threadId, signal, }: {
54
+ backendUrl: string;
55
+ auth: StatewireAuthSource;
56
+ threadId: string;
57
+ signal?: AbortSignal;
58
+ }): Promise<SessionWorkspace>;
59
+ export declare function fetchComputerRuntimeStatus({ backendUrl, auth, assetId, signal, }: {
60
+ backendUrl: string;
61
+ auth: StatewireAuthSource;
62
+ assetId: string;
63
+ signal?: AbortSignal;
64
+ }): Promise<ComputerRuntimeStatus | null>;
65
+ export declare function fetchComputerSshAccess({ backendUrl, auth, assetId, signal, }: {
66
+ backendUrl: string;
67
+ auth: StatewireAuthSource;
68
+ assetId: string;
69
+ signal?: AbortSignal;
70
+ }): Promise<ComputerSshAccess | null>;
@@ -0,0 +1,157 @@
1
+ import { getAthenaApiBaseUrl } from "../collab/mint.js";
2
+ import { AthenaSdkError } from "../diagnostics/errors.js";
3
+ import { isRecord } from "../lib/utils.js";
4
+ import { sendWithCredentialRenewal } from "../runtime/credential-renewal.js";
5
+ function sessionWorkspacePath(threadId) {
6
+ return `/api/conversations/threads/${encodeURIComponent(threadId)}/workspace`;
7
+ }
8
+ function computerStatusPath(assetId) {
9
+ return `/api/sandbox/computer/${encodeURIComponent(assetId)}/status`;
10
+ }
11
+ function computerSshAccessPath(assetId) {
12
+ return `/api/v0/computer/${encodeURIComponent(assetId)}/ssh-access`;
13
+ }
14
+ const WORKSPACE_ROLES = /* @__PURE__ */ new Set(["session_computer", "computer", "asset"]);
15
+ function readWorkspaceAsset(value) {
16
+ if (!isRecord(value)) return null;
17
+ const { asset_id, title, asset_type, updated_at, role } = value;
18
+ if (typeof asset_id !== "string" || asset_id.length === 0) return null;
19
+ return {
20
+ assetId: asset_id,
21
+ title: typeof title === "string" && title.trim().length > 0 ? title : null,
22
+ assetType: typeof asset_type === "string" ? asset_type : "",
23
+ updatedAt: typeof updated_at === "string" ? updated_at : "",
24
+ role: typeof role === "string" && WORKSPACE_ROLES.has(role) ? role : "asset"
25
+ };
26
+ }
27
+ function readWorkspaceAssets(value) {
28
+ if (!Array.isArray(value)) return [];
29
+ return value.flatMap((entry) => {
30
+ const asset = readWorkspaceAsset(entry);
31
+ return asset ? [asset] : [];
32
+ });
33
+ }
34
+ function readSessionWorkspace(body, threadId) {
35
+ if (!isRecord(body)) {
36
+ return { threadId, sessionComputerAssetId: null, computers: [], assets: [] };
37
+ }
38
+ const sessionComputer = body.session_computer_asset_id;
39
+ return {
40
+ threadId: typeof body.thread_id === "string" && body.thread_id ? body.thread_id : threadId,
41
+ sessionComputerAssetId: typeof sessionComputer === "string" && sessionComputer ? sessionComputer : null,
42
+ computers: readWorkspaceAssets(body.computers),
43
+ assets: readWorkspaceAssets(body.assets)
44
+ };
45
+ }
46
+ function readComputerRuntimeStatus(body) {
47
+ if (!isRecord(body) || typeof body.state !== "string" || !body.state) return null;
48
+ return {
49
+ state: body.state,
50
+ explicitStop: typeof body.explicit_stop === "string" ? body.explicit_stop : null,
51
+ provider: typeof body.provider === "string" ? body.provider : null
52
+ };
53
+ }
54
+ function readComputerSshAccess(body) {
55
+ if (!isRecord(body) || typeof body.command !== "string" || !body.command) return null;
56
+ return {
57
+ command: body.command,
58
+ host: typeof body.host === "string" ? body.host : "",
59
+ port: typeof body.port === "number" ? body.port : 22,
60
+ username: typeof body.username === "string" ? body.username : "",
61
+ keyAuthEnabled: body.key_auth_enabled === true
62
+ };
63
+ }
64
+ function isAbortError(error) {
65
+ return (error instanceof DOMException || error instanceof Error) && error.name === "AbortError";
66
+ }
67
+ async function getAgoraJson({
68
+ backendUrl,
69
+ auth,
70
+ path,
71
+ what,
72
+ signal
73
+ }) {
74
+ const url = `${getAthenaApiBaseUrl(backendUrl)}${path}`;
75
+ const get = async (headers) => {
76
+ try {
77
+ return await fetch(url, { method: "GET", headers, signal: signal ?? null });
78
+ } catch (error) {
79
+ if (isAbortError(error)) throw error;
80
+ throw new AthenaSdkError({
81
+ code: "session_workspace_failed",
82
+ message: `Reading ${what} could not reach the Agora API.`,
83
+ cause: error,
84
+ hint: "Check the network and that backendUrl points at the Agora API base."
85
+ });
86
+ }
87
+ };
88
+ const response = await sendWithCredentialRenewal(auth, get);
89
+ if (!response.ok) {
90
+ const refused = response.status === 401 || response.status === 403;
91
+ throw new AthenaSdkError({
92
+ code: refused ? "auth_rejected" : "session_workspace_failed",
93
+ message: `Reading ${what} failed: ${response.status}`,
94
+ 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."
97
+ });
98
+ }
99
+ return response.json();
100
+ }
101
+ async function fetchSessionWorkspace({
102
+ backendUrl,
103
+ auth,
104
+ threadId,
105
+ signal
106
+ }) {
107
+ const body = await getAgoraJson({
108
+ backendUrl,
109
+ auth,
110
+ path: sessionWorkspacePath(threadId),
111
+ what: "the session workspace",
112
+ signal
113
+ });
114
+ return readSessionWorkspace(body, threadId);
115
+ }
116
+ async function fetchComputerRuntimeStatus({
117
+ backendUrl,
118
+ auth,
119
+ assetId,
120
+ signal
121
+ }) {
122
+ const body = await getAgoraJson({
123
+ backendUrl,
124
+ auth,
125
+ path: computerStatusPath(assetId),
126
+ what: "the computer status",
127
+ signal
128
+ });
129
+ return readComputerRuntimeStatus(body);
130
+ }
131
+ async function fetchComputerSshAccess({
132
+ backendUrl,
133
+ auth,
134
+ assetId,
135
+ signal
136
+ }) {
137
+ const body = await getAgoraJson({
138
+ backendUrl,
139
+ auth,
140
+ path: computerSshAccessPath(assetId),
141
+ what: "the computer SSH target",
142
+ signal
143
+ });
144
+ return readComputerSshAccess(body);
145
+ }
146
+ export {
147
+ computerSshAccessPath,
148
+ computerStatusPath,
149
+ fetchComputerRuntimeStatus,
150
+ fetchComputerSshAccess,
151
+ fetchSessionWorkspace,
152
+ readComputerRuntimeStatus,
153
+ readComputerSshAccess,
154
+ readSessionWorkspace,
155
+ sessionWorkspacePath
156
+ };
157
+ //# sourceMappingURL=session-workspace-api.js.map
@@ -0,0 +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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"}