@athenaintel/react 0.57.1 → 0.59.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (811) hide show
  1. package/README.md +778 -9
  2. package/dist/agent-runtime/src/addressed-agents.cjs +16 -0
  3. package/dist/agent-runtime/src/addressed-agents.cjs.map +1 -0
  4. package/dist/agent-runtime/src/addressed-agents.d.ts +30 -0
  5. package/dist/agent-runtime/src/addressed-agents.js +16 -0
  6. package/dist/agent-runtime/src/addressed-agents.js.map +1 -0
  7. package/dist/agent-runtime/src/answer-label.cjs +4 -3
  8. package/dist/agent-runtime/src/answer-label.cjs.map +1 -1
  9. package/dist/agent-runtime/src/answer-label.d.ts +13 -6
  10. package/dist/agent-runtime/src/answer-label.js +4 -3
  11. package/dist/agent-runtime/src/answer-label.js.map +1 -1
  12. package/dist/agent-runtime/src/chat-outbox-attachments.cjs.map +1 -1
  13. package/dist/agent-runtime/src/chat-outbox-attachments.d.ts +1 -1
  14. package/dist/agent-runtime/src/chat-outbox-attachments.js.map +1 -1
  15. package/dist/agent-runtime/src/chat-outbox-entry.cjs +101 -0
  16. package/dist/agent-runtime/src/chat-outbox-entry.cjs.map +1 -0
  17. package/dist/agent-runtime/src/chat-outbox-entry.d.ts +99 -0
  18. package/dist/agent-runtime/src/chat-outbox-entry.js +101 -0
  19. package/dist/agent-runtime/src/chat-outbox-entry.js.map +1 -0
  20. package/dist/agent-runtime/src/chat-outbox-legacy.cjs +252 -0
  21. package/dist/agent-runtime/src/chat-outbox-legacy.cjs.map +1 -0
  22. package/dist/agent-runtime/src/chat-outbox-legacy.d.ts +96 -0
  23. package/dist/agent-runtime/src/chat-outbox-legacy.js +252 -0
  24. package/dist/agent-runtime/src/chat-outbox-legacy.js.map +1 -0
  25. package/dist/agent-runtime/src/chat-outbox-policy.cjs +30 -0
  26. package/dist/agent-runtime/src/chat-outbox-policy.cjs.map +1 -0
  27. package/dist/agent-runtime/src/chat-outbox-policy.d.ts +42 -0
  28. package/dist/agent-runtime/src/chat-outbox-policy.js +30 -0
  29. package/dist/agent-runtime/src/chat-outbox-policy.js.map +1 -0
  30. package/dist/agent-runtime/src/chat-outbox-storage.cjs +306 -0
  31. package/dist/agent-runtime/src/chat-outbox-storage.cjs.map +1 -0
  32. package/dist/agent-runtime/src/chat-outbox-storage.d.ts +194 -0
  33. package/dist/agent-runtime/src/chat-outbox-storage.js +306 -0
  34. package/dist/agent-runtime/src/chat-outbox-storage.js.map +1 -0
  35. package/dist/agent-runtime/src/chat-outbox-thread.cjs +21 -94
  36. package/dist/agent-runtime/src/chat-outbox-thread.cjs.map +1 -1
  37. package/dist/agent-runtime/src/chat-outbox-thread.d.ts +22 -18
  38. package/dist/agent-runtime/src/chat-outbox-thread.js +21 -94
  39. package/dist/agent-runtime/src/chat-outbox-thread.js.map +1 -1
  40. package/dist/agent-runtime/src/chat-outbox.cjs +492 -547
  41. package/dist/agent-runtime/src/chat-outbox.cjs.map +1 -1
  42. package/dist/agent-runtime/src/chat-outbox.d.ts +110 -142
  43. package/dist/agent-runtime/src/chat-outbox.js +492 -547
  44. package/dist/agent-runtime/src/chat-outbox.js.map +1 -1
  45. package/dist/agent-runtime/src/composer-markdown.cjs.map +1 -1
  46. package/dist/agent-runtime/src/composer-markdown.d.ts +1 -1
  47. package/dist/agent-runtime/src/composer-markdown.js.map +1 -1
  48. package/dist/agent-runtime/src/deep-agent-transport-recipe.cjs +3 -1
  49. package/dist/agent-runtime/src/deep-agent-transport-recipe.cjs.map +1 -1
  50. package/dist/agent-runtime/src/deep-agent-transport-recipe.d.ts +8 -1
  51. package/dist/agent-runtime/src/deep-agent-transport-recipe.js +3 -1
  52. package/dist/agent-runtime/src/deep-agent-transport-recipe.js.map +1 -1
  53. package/dist/agent-runtime/src/dictation-preferences.d.ts +356 -0
  54. package/dist/agent-runtime/src/dictation-record.d.ts +279 -0
  55. package/dist/agent-runtime/src/dictation-session.d.ts +106 -7
  56. package/dist/agent-runtime/src/dictation-snippets.d.ts +9 -0
  57. package/dist/agent-runtime/src/dictation-transfer.d.ts +142 -0
  58. package/dist/agent-runtime/src/edit-command.cjs.map +1 -1
  59. package/dist/agent-runtime/src/edit-command.d.ts +1 -1
  60. package/dist/agent-runtime/src/edit-command.js.map +1 -1
  61. package/dist/agent-runtime/src/errors.cjs +1 -0
  62. package/dist/agent-runtime/src/errors.cjs.map +1 -1
  63. package/dist/agent-runtime/src/errors.js +1 -0
  64. package/dist/agent-runtime/src/errors.js.map +1 -1
  65. package/dist/agent-runtime/src/generated/runconfig-contract.cjs +24 -0
  66. package/dist/agent-runtime/src/generated/runconfig-contract.cjs.map +1 -1
  67. package/dist/agent-runtime/src/generated/runconfig-contract.d.ts +3 -3
  68. package/dist/agent-runtime/src/generated/runconfig-contract.js +24 -0
  69. package/dist/agent-runtime/src/generated/runconfig-contract.js.map +1 -1
  70. package/dist/agent-runtime/src/index.d.ts +14 -8
  71. package/dist/agent-runtime/src/lane-follow.cjs +289 -0
  72. package/dist/agent-runtime/src/lane-follow.cjs.map +1 -0
  73. package/dist/agent-runtime/src/lane-follow.js +289 -0
  74. package/dist/agent-runtime/src/lane-follow.js.map +1 -0
  75. package/dist/agent-runtime/src/lane-images.cjs +387 -0
  76. package/dist/agent-runtime/src/lane-images.cjs.map +1 -0
  77. package/dist/agent-runtime/src/lane-images.js +387 -0
  78. package/dist/agent-runtime/src/lane-images.js.map +1 -0
  79. package/dist/agent-runtime/src/message-window.js +1 -1
  80. package/dist/agent-runtime/src/messages.cjs +19 -1
  81. package/dist/agent-runtime/src/messages.cjs.map +1 -1
  82. package/dist/agent-runtime/src/messages.d.ts +8 -0
  83. package/dist/agent-runtime/src/messages.js +21 -3
  84. package/dist/agent-runtime/src/messages.js.map +1 -1
  85. package/dist/agent-runtime/src/named-agents.cjs +301 -0
  86. package/dist/agent-runtime/src/named-agents.cjs.map +1 -0
  87. package/dist/agent-runtime/src/named-agents.d.ts +246 -0
  88. package/dist/agent-runtime/src/named-agents.js +301 -0
  89. package/dist/agent-runtime/src/named-agents.js.map +1 -0
  90. package/dist/agent-runtime/src/offline-status.cjs.map +1 -1
  91. package/dist/agent-runtime/src/offline-status.d.ts +66 -2
  92. package/dist/agent-runtime/src/offline-status.js.map +1 -1
  93. package/dist/agent-runtime/src/ptc-subcalls.cjs +41 -0
  94. package/dist/agent-runtime/src/ptc-subcalls.cjs.map +1 -0
  95. package/dist/agent-runtime/src/ptc-subcalls.js +41 -0
  96. package/dist/agent-runtime/src/ptc-subcalls.js.map +1 -0
  97. package/dist/agent-runtime/src/queue.cjs +2 -2
  98. package/dist/agent-runtime/src/queue.cjs.map +1 -1
  99. package/dist/agent-runtime/src/queue.d.ts +20 -25
  100. package/dist/agent-runtime/src/queue.js +2 -2
  101. package/dist/agent-runtime/src/queue.js.map +1 -1
  102. package/dist/agent-runtime/src/quota-safe-local-storage-session.cjs +314 -84
  103. package/dist/agent-runtime/src/quota-safe-local-storage-session.cjs.map +1 -1
  104. package/dist/agent-runtime/src/quota-safe-local-storage-session.d.ts +137 -40
  105. package/dist/agent-runtime/src/quota-safe-local-storage-session.js +318 -88
  106. package/dist/agent-runtime/src/quota-safe-local-storage-session.js.map +1 -1
  107. package/dist/agent-runtime/src/run-send.cjs +54 -0
  108. package/dist/agent-runtime/src/run-send.cjs.map +1 -0
  109. package/dist/agent-runtime/src/run-send.d.ts +51 -0
  110. package/dist/agent-runtime/src/run-send.js +54 -0
  111. package/dist/agent-runtime/src/run-send.js.map +1 -0
  112. package/dist/agent-runtime/src/running-tool-placeholder.cjs +6 -0
  113. package/dist/agent-runtime/src/running-tool-placeholder.cjs.map +1 -1
  114. package/dist/agent-runtime/src/running-tool-placeholder.js +6 -0
  115. package/dist/agent-runtime/src/running-tool-placeholder.js.map +1 -1
  116. package/dist/agent-runtime/src/runtime.d.ts +9 -5
  117. package/dist/agent-runtime/src/sealed-idb.cjs +64 -0
  118. package/dist/agent-runtime/src/sealed-idb.cjs.map +1 -1
  119. package/dist/agent-runtime/src/sealed-idb.d.ts +16 -0
  120. package/dist/agent-runtime/src/sealed-idb.js +64 -0
  121. package/dist/agent-runtime/src/sealed-idb.js.map +1 -1
  122. package/dist/agent-runtime/src/send-recovery.cjs +90 -118
  123. package/dist/agent-runtime/src/send-recovery.cjs.map +1 -1
  124. package/dist/agent-runtime/src/send-recovery.d.ts +25 -29
  125. package/dist/agent-runtime/src/send-recovery.js +90 -118
  126. package/dist/agent-runtime/src/send-recovery.js.map +1 -1
  127. package/dist/agent-runtime/src/statewire-diagnostics.d.ts +4 -1
  128. package/dist/agent-runtime/src/statewire-held-sends.cjs +191 -0
  129. package/dist/agent-runtime/src/statewire-held-sends.cjs.map +1 -0
  130. package/dist/agent-runtime/src/statewire-held-sends.d.ts +119 -0
  131. package/dist/agent-runtime/src/statewire-held-sends.js +191 -0
  132. package/dist/agent-runtime/src/statewire-held-sends.js.map +1 -0
  133. package/dist/agent-runtime/src/statewire-state.cjs +4 -0
  134. package/dist/agent-runtime/src/statewire-state.cjs.map +1 -1
  135. package/dist/agent-runtime/src/statewire-state.js +4 -0
  136. package/dist/agent-runtime/src/statewire-state.js.map +1 -1
  137. package/dist/agent-runtime/src/statewire-transport.cjs +8 -2
  138. package/dist/agent-runtime/src/statewire-transport.cjs.map +1 -1
  139. package/dist/agent-runtime/src/statewire-transport.d.ts +14 -5
  140. package/dist/agent-runtime/src/statewire-transport.js +8 -2
  141. package/dist/agent-runtime/src/statewire-transport.js.map +1 -1
  142. package/dist/agent-runtime/src/subagent-transcripts.cjs +1 -23
  143. package/dist/agent-runtime/src/subagent-transcripts.cjs.map +1 -1
  144. package/dist/agent-runtime/src/subagent-transcripts.js +3 -25
  145. package/dist/agent-runtime/src/subagent-transcripts.js.map +1 -1
  146. package/dist/agent-runtime/src/subagents.cjs +22 -29
  147. package/dist/agent-runtime/src/subagents.cjs.map +1 -1
  148. package/dist/agent-runtime/src/subagents.js +23 -30
  149. package/dist/agent-runtime/src/subagents.js.map +1 -1
  150. package/dist/agent-runtime/src/thread-extras.cjs +27 -19
  151. package/dist/agent-runtime/src/thread-extras.cjs.map +1 -1
  152. package/dist/agent-runtime/src/thread-extras.d.ts +19 -6
  153. package/dist/agent-runtime/src/thread-extras.js +27 -19
  154. package/dist/agent-runtime/src/thread-extras.js.map +1 -1
  155. package/dist/agent-runtime/src/thread-handoff-flow-machine.d.ts +8 -8
  156. package/dist/agent-runtime/src/tool-metadata.cjs +12 -0
  157. package/dist/agent-runtime/src/tool-metadata.cjs.map +1 -1
  158. package/dist/agent-runtime/src/tool-metadata.js +12 -0
  159. package/dist/agent-runtime/src/tool-metadata.js.map +1 -1
  160. package/dist/agent-runtime/src/tool-names.cjs +21 -0
  161. package/dist/agent-runtime/src/tool-names.cjs.map +1 -1
  162. package/dist/agent-runtime/src/tool-names.d.ts +8 -0
  163. package/dist/agent-runtime/src/tool-names.js +21 -0
  164. package/dist/agent-runtime/src/tool-names.js.map +1 -1
  165. package/dist/agent-runtime/src/typed-interrupt-kinds.cjs +247 -0
  166. package/dist/agent-runtime/src/typed-interrupt-kinds.cjs.map +1 -0
  167. package/dist/agent-runtime/src/typed-interrupt-kinds.d.ts +173 -0
  168. package/dist/agent-runtime/src/typed-interrupt-kinds.js +247 -0
  169. package/dist/agent-runtime/src/typed-interrupt-kinds.js.map +1 -0
  170. package/dist/agent-runtime/src/typed-interrupts.cjs +48 -0
  171. package/dist/agent-runtime/src/typed-interrupts.cjs.map +1 -0
  172. package/dist/agent-runtime/src/typed-interrupts.d.ts +75 -0
  173. package/dist/agent-runtime/src/typed-interrupts.js +48 -0
  174. package/dist/agent-runtime/src/typed-interrupts.js.map +1 -0
  175. package/dist/agent-runtime/src/types.d.ts +1 -1
  176. package/dist/agent-runtime/src/use-conversation-list.cjs +1 -0
  177. package/dist/agent-runtime/src/use-conversation-list.cjs.map +1 -1
  178. package/dist/agent-runtime/src/use-conversation-list.d.ts +7 -0
  179. package/dist/agent-runtime/src/use-conversation-list.js +1 -0
  180. package/dist/agent-runtime/src/use-conversation-list.js.map +1 -1
  181. package/dist/agent-runtime/src/use-deep-agent-chat-outbox.cjs +46 -29
  182. package/dist/agent-runtime/src/use-deep-agent-chat-outbox.cjs.map +1 -1
  183. package/dist/agent-runtime/src/use-deep-agent-chat-outbox.d.ts +14 -22
  184. package/dist/agent-runtime/src/use-deep-agent-chat-outbox.js +46 -29
  185. package/dist/agent-runtime/src/use-deep-agent-chat-outbox.js.map +1 -1
  186. package/dist/agent-runtime/src/use-deep-agent-runtime.cjs +78 -14
  187. package/dist/agent-runtime/src/use-deep-agent-runtime.cjs.map +1 -1
  188. package/dist/agent-runtime/src/use-deep-agent-runtime.d.ts +34 -7
  189. package/dist/agent-runtime/src/use-deep-agent-runtime.js +79 -15
  190. package/dist/agent-runtime/src/use-deep-agent-runtime.js.map +1 -1
  191. package/dist/agent-runtime/src/use-deep-agent-thread.cjs +16 -1
  192. package/dist/agent-runtime/src/use-deep-agent-thread.cjs.map +1 -1
  193. package/dist/agent-runtime/src/use-deep-agent-thread.d.ts +7 -2
  194. package/dist/agent-runtime/src/use-deep-agent-thread.js +16 -1
  195. package/dist/agent-runtime/src/use-deep-agent-thread.js.map +1 -1
  196. package/dist/agent-runtime/src/use-deep-agent-voice.cjs +30 -4
  197. package/dist/agent-runtime/src/use-deep-agent-voice.cjs.map +1 -1
  198. package/dist/agent-runtime/src/use-deep-agent-voice.d.ts +22 -4
  199. package/dist/agent-runtime/src/use-deep-agent-voice.js +30 -4
  200. package/dist/agent-runtime/src/use-deep-agent-voice.js.map +1 -1
  201. package/dist/agent-runtime/src/withdrawn-turns.d.ts +5 -4
  202. package/dist/agent-runtime/src/word-device-fit.d.ts +174 -0
  203. package/dist/agent-runtime/src/work-in.d.ts +127 -0
  204. package/dist/assets/AthenaAssetEmbed.cjs.map +1 -1
  205. package/dist/assets/AthenaAssetEmbed.d.ts +6 -1
  206. package/dist/assets/AthenaAssetEmbed.js.map +1 -1
  207. package/dist/assets/asset-panel-store.cjs +13 -5
  208. package/dist/assets/asset-panel-store.cjs.map +1 -1
  209. package/dist/assets/asset-panel-store.d.ts +33 -2
  210. package/dist/assets/asset-panel-store.js +13 -5
  211. package/dist/assets/asset-panel-store.js.map +1 -1
  212. package/dist/auth/AthenaCredentialSourceContext.cjs +11 -0
  213. package/dist/auth/AthenaCredentialSourceContext.cjs.map +1 -1
  214. package/dist/auth/AthenaCredentialSourceContext.d.ts +6 -0
  215. package/dist/auth/AthenaCredentialSourceContext.js +11 -0
  216. package/dist/auth/AthenaCredentialSourceContext.js.map +1 -1
  217. package/dist/auth/account-identity.cjs +13 -2
  218. package/dist/auth/account-identity.cjs.map +1 -1
  219. package/dist/auth/account-identity.d.ts +9 -0
  220. package/dist/auth/account-identity.js +13 -2
  221. package/dist/auth/account-identity.js.map +1 -1
  222. package/dist/auth/credential-source.cjs +20 -4
  223. package/dist/auth/credential-source.cjs.map +1 -1
  224. package/dist/auth/credential-source.d.ts +9 -0
  225. package/dist/auth/credential-source.js +20 -4
  226. package/dist/auth/credential-source.js.map +1 -1
  227. package/dist/catalog/chat-pickers.cjs +31 -0
  228. package/dist/catalog/chat-pickers.cjs.map +1 -1
  229. package/dist/catalog/chat-pickers.d.ts +17 -0
  230. package/dist/catalog/chat-pickers.js +33 -2
  231. package/dist/catalog/chat-pickers.js.map +1 -1
  232. package/dist/catalog/runtime-catalog.cjs +63 -3
  233. package/dist/catalog/runtime-catalog.cjs.map +1 -1
  234. package/dist/catalog/runtime-catalog.d.ts +63 -3
  235. package/dist/catalog/runtime-catalog.js +64 -4
  236. package/dist/catalog/runtime-catalog.js.map +1 -1
  237. package/dist/chat/AthenaChat.cjs +337 -99
  238. package/dist/chat/AthenaChat.cjs.map +1 -1
  239. package/dist/chat/AthenaChat.d.ts +80 -4
  240. package/dist/chat/AthenaChat.js +337 -99
  241. package/dist/chat/AthenaChat.js.map +1 -1
  242. package/dist/chat/StatewireApprovalCard.cjs +35 -5
  243. package/dist/chat/StatewireApprovalCard.cjs.map +1 -1
  244. package/dist/chat/StatewireApprovalCard.d.ts +55 -2
  245. package/dist/chat/StatewireApprovalCard.js +37 -7
  246. package/dist/chat/StatewireApprovalCard.js.map +1 -1
  247. package/dist/chat/StatewireQueuedMessages.cjs +17 -2
  248. package/dist/chat/StatewireQueuedMessages.cjs.map +1 -1
  249. package/dist/chat/StatewireQueuedMessages.d.ts +8 -45
  250. package/dist/chat/StatewireQueuedMessages.js +18 -3
  251. package/dist/chat/StatewireQueuedMessages.js.map +1 -1
  252. package/dist/chat/chat-agent-mentions.cjs +70 -0
  253. package/dist/chat/chat-agent-mentions.cjs.map +1 -0
  254. package/dist/chat/chat-agent-mentions.d.ts +13 -0
  255. package/dist/chat/chat-agent-mentions.js +70 -0
  256. package/dist/chat/chat-agent-mentions.js.map +1 -0
  257. package/dist/chat/composer-actions.cjs +12 -0
  258. package/dist/chat/composer-actions.cjs.map +1 -0
  259. package/dist/chat/composer-actions.d.ts +22 -0
  260. package/dist/chat/composer-actions.js +12 -0
  261. package/dist/chat/composer-actions.js.map +1 -0
  262. package/dist/chat/follow-up-suggestions.cjs +185 -0
  263. package/dist/chat/follow-up-suggestions.cjs.map +1 -0
  264. package/dist/chat/follow-up-suggestions.d.ts +64 -0
  265. package/dist/chat/follow-up-suggestions.js +185 -0
  266. package/dist/chat/follow-up-suggestions.js.map +1 -0
  267. package/dist/chat/super-grouping/ToolTimeline.cjs +4 -3
  268. package/dist/chat/super-grouping/ToolTimeline.cjs.map +1 -1
  269. package/dist/chat/super-grouping/ToolTimeline.d.ts +7 -3
  270. package/dist/chat/super-grouping/ToolTimeline.js +4 -3
  271. package/dist/chat/super-grouping/ToolTimeline.js.map +1 -1
  272. package/dist/chat/turn-changes.cjs +284 -0
  273. package/dist/chat/turn-changes.cjs.map +1 -0
  274. package/dist/chat/turn-changes.d.ts +130 -0
  275. package/dist/chat/turn-changes.js +284 -0
  276. package/dist/chat/turn-changes.js.map +1 -0
  277. package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.cjs +31 -0
  278. package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.cjs.map +1 -0
  279. package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.d.ts +31 -0
  280. package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.js +31 -0
  281. package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.js.map +1 -0
  282. package/dist/chat/typed-interrupts/approval-cards.cjs +250 -0
  283. package/dist/chat/typed-interrupts/approval-cards.cjs.map +1 -0
  284. package/dist/chat/typed-interrupts/approval-cards.d.ts +22 -0
  285. package/dist/chat/typed-interrupts/approval-cards.js +250 -0
  286. package/dist/chat/typed-interrupts/approval-cards.js.map +1 -0
  287. package/dist/chat/typed-interrupts/form-cards.cjs +289 -0
  288. package/dist/chat/typed-interrupts/form-cards.cjs.map +1 -0
  289. package/dist/chat/typed-interrupts/form-cards.d.ts +6 -0
  290. package/dist/chat/typed-interrupts/form-cards.js +289 -0
  291. package/dist/chat/typed-interrupts/form-cards.js.map +1 -0
  292. package/dist/chat/typed-interrupts/interrupt-card-shell.cjs +182 -0
  293. package/dist/chat/typed-interrupts/interrupt-card-shell.cjs.map +1 -0
  294. package/dist/chat/typed-interrupts/interrupt-card-shell.d.ts +47 -0
  295. package/dist/chat/typed-interrupts/interrupt-card-shell.js +182 -0
  296. package/dist/chat/typed-interrupts/interrupt-card-shell.js.map +1 -0
  297. package/dist/chat/typed-interrupts/json-schema-form.cjs +388 -0
  298. package/dist/chat/typed-interrupts/json-schema-form.cjs.map +1 -0
  299. package/dist/chat/typed-interrupts/json-schema-form.d.ts +33 -0
  300. package/dist/chat/typed-interrupts/json-schema-form.js +388 -0
  301. package/dist/chat/typed-interrupts/json-schema-form.js.map +1 -0
  302. package/dist/chat/typed-interrupts/questionnaire-card.cjs +449 -0
  303. package/dist/chat/typed-interrupts/questionnaire-card.cjs.map +1 -0
  304. package/dist/chat/typed-interrupts/questionnaire-card.d.ts +20 -0
  305. package/dist/chat/typed-interrupts/questionnaire-card.js +449 -0
  306. package/dist/chat/typed-interrupts/questionnaire-card.js.map +1 -0
  307. package/dist/chat/typed-interrupts/request-file-card.cjs +159 -0
  308. package/dist/chat/typed-interrupts/request-file-card.cjs.map +1 -0
  309. package/dist/chat/typed-interrupts/request-file-card.d.ts +2 -0
  310. package/dist/chat/typed-interrupts/request-file-card.js +159 -0
  311. package/dist/chat/typed-interrupts/request-file-card.js.map +1 -0
  312. package/dist/chat/typed-interrupts/toolkit-selection-card.cjs +189 -0
  313. package/dist/chat/typed-interrupts/toolkit-selection-card.cjs.map +1 -0
  314. package/dist/chat/typed-interrupts/toolkit-selection-card.d.ts +23 -0
  315. package/dist/chat/typed-interrupts/toolkit-selection-card.js +189 -0
  316. package/dist/chat/typed-interrupts/toolkit-selection-card.js.map +1 -0
  317. package/dist/chat/typed-interrupts/typed-interrupt-body.cjs +26 -0
  318. package/dist/chat/typed-interrupts/typed-interrupt-body.cjs.map +1 -0
  319. package/dist/chat/typed-interrupts/typed-interrupt-body.d.ts +3 -0
  320. package/dist/chat/typed-interrupts/typed-interrupt-body.js +26 -0
  321. package/dist/chat/typed-interrupts/typed-interrupt-body.js.map +1 -0
  322. package/dist/chat/typed-interrupts/typed-interrupt-graphql.cjs +105 -0
  323. package/dist/chat/typed-interrupts/typed-interrupt-graphql.cjs.map +1 -0
  324. package/dist/chat/typed-interrupts/typed-interrupt-graphql.d.ts +29 -0
  325. package/dist/chat/typed-interrupts/typed-interrupt-graphql.js +105 -0
  326. package/dist/chat/typed-interrupts/typed-interrupt-graphql.js.map +1 -0
  327. package/dist/chat/typed-interrupts/typed-interrupt-notice.cjs +70 -0
  328. package/dist/chat/typed-interrupts/typed-interrupt-notice.cjs.map +1 -0
  329. package/dist/chat/typed-interrupts/typed-interrupt-notice.d.ts +45 -0
  330. package/dist/chat/typed-interrupts/typed-interrupt-notice.js +70 -0
  331. package/dist/chat/typed-interrupts/typed-interrupt-notice.js.map +1 -0
  332. package/dist/chat/typed-interrupts/typed-interrupt-panel.cjs +76 -0
  333. package/dist/chat/typed-interrupts/typed-interrupt-panel.cjs.map +1 -0
  334. package/dist/chat/typed-interrupts/typed-interrupt-panel.d.ts +11 -0
  335. package/dist/chat/typed-interrupts/typed-interrupt-panel.js +76 -0
  336. package/dist/chat/typed-interrupts/typed-interrupt-panel.js.map +1 -0
  337. package/dist/chat/typed-interrupts/typed-interrupt-types.d.ts +46 -0
  338. package/dist/chat/typed-interrupts/use-interrupt-draft.cjs +106 -0
  339. package/dist/chat/typed-interrupts/use-interrupt-draft.cjs.map +1 -0
  340. package/dist/chat/typed-interrupts/use-interrupt-draft.d.ts +29 -0
  341. package/dist/chat/typed-interrupts/use-interrupt-draft.js +106 -0
  342. package/dist/chat/typed-interrupts/use-interrupt-draft.js.map +1 -0
  343. package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.cjs +231 -0
  344. package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.cjs.map +1 -0
  345. package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.d.ts +66 -0
  346. package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.js +231 -0
  347. package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.js.map +1 -0
  348. package/dist/chat-ui/composer/composer-named-agents.cjs +13 -0
  349. package/dist/chat-ui/composer/composer-named-agents.cjs.map +1 -0
  350. package/dist/chat-ui/composer/composer-named-agents.d.ts +20 -0
  351. package/dist/chat-ui/composer/composer-named-agents.js +13 -0
  352. package/dist/chat-ui/composer/composer-named-agents.js.map +1 -0
  353. package/dist/chat-ui/composer/slash-command-menu.cjs +143 -0
  354. package/dist/chat-ui/composer/slash-command-menu.cjs.map +1 -0
  355. package/dist/chat-ui/composer/slash-command-menu.d.ts +19 -0
  356. package/dist/chat-ui/composer/slash-command-menu.js +143 -0
  357. package/dist/chat-ui/composer/slash-command-menu.js.map +1 -0
  358. package/dist/chat-ui/composer/slash-commands-extension.cjs +51 -0
  359. package/dist/chat-ui/composer/slash-commands-extension.cjs.map +1 -0
  360. package/dist/chat-ui/composer/slash-commands-extension.d.ts +39 -0
  361. package/dist/chat-ui/composer/slash-commands-extension.js +51 -0
  362. package/dist/chat-ui/composer/slash-commands-extension.js.map +1 -0
  363. package/dist/chat-ui/composer/slash-commands.cjs +74 -0
  364. package/dist/chat-ui/composer/slash-commands.cjs.map +1 -0
  365. package/dist/chat-ui/composer/slash-commands.d.ts +82 -0
  366. package/dist/chat-ui/composer/slash-commands.js +74 -0
  367. package/dist/chat-ui/composer/slash-commands.js.map +1 -0
  368. package/dist/chat-ui/composer/tiptap-composer.cjs +135 -9
  369. package/dist/chat-ui/composer/tiptap-composer.cjs.map +1 -1
  370. package/dist/chat-ui/composer/tiptap-composer.d.ts +61 -2
  371. package/dist/chat-ui/composer/tiptap-composer.js +135 -9
  372. package/dist/chat-ui/composer/tiptap-composer.js.map +1 -1
  373. package/dist/chat-ui/index.cjs +3 -0
  374. package/dist/chat-ui/index.cjs.map +1 -1
  375. package/dist/chat-ui/index.d.ts +3 -2
  376. package/dist/chat-ui/index.js +3 -0
  377. package/dist/chat-ui/index.js.map +1 -1
  378. package/dist/chat-ui/mentions/mention-chip.cjs +1 -1
  379. package/dist/chat-ui/mentions/mention-chip.cjs.map +1 -1
  380. package/dist/chat-ui/mentions/mention-chip.js +2 -2
  381. package/dist/chat-ui/mentions/mention-chip.js.map +1 -1
  382. package/dist/chat-ui/mentions/mention-extension.cjs +8 -1
  383. package/dist/chat-ui/mentions/mention-extension.cjs.map +1 -1
  384. package/dist/chat-ui/mentions/mention-extension.js +8 -1
  385. package/dist/chat-ui/mentions/mention-extension.js.map +1 -1
  386. package/dist/chat-ui/mentions/suggestions/components/get-scope-name.cjs +1 -0
  387. package/dist/chat-ui/mentions/suggestions/components/get-scope-name.cjs.map +1 -1
  388. package/dist/chat-ui/mentions/suggestions/components/get-scope-name.js +1 -0
  389. package/dist/chat-ui/mentions/suggestions/components/get-scope-name.js.map +1 -1
  390. package/dist/chat-ui/mentions/suggestions/components/mention-icon.cjs +2 -0
  391. package/dist/chat-ui/mentions/suggestions/components/mention-icon.cjs.map +1 -1
  392. package/dist/chat-ui/mentions/suggestions/components/mention-icon.js +3 -1
  393. package/dist/chat-ui/mentions/suggestions/components/mention-icon.js.map +1 -1
  394. package/dist/chat-ui/mentions/suggestions/components/menu-item.cjs +1 -1
  395. package/dist/chat-ui/mentions/suggestions/components/menu-item.cjs.map +1 -1
  396. package/dist/chat-ui/mentions/suggestions/components/menu-item.js +1 -1
  397. package/dist/chat-ui/mentions/suggestions/components/menu-item.js.map +1 -1
  398. package/dist/chat-ui/mentions/suggestions/data/api-client.cjs +36 -0
  399. package/dist/chat-ui/mentions/suggestions/data/api-client.cjs.map +1 -1
  400. package/dist/chat-ui/mentions/suggestions/data/api-client.d.ts +42 -0
  401. package/dist/chat-ui/mentions/suggestions/data/api-client.js +36 -0
  402. package/dist/chat-ui/mentions/suggestions/data/api-client.js.map +1 -1
  403. package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs +235 -19
  404. package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs.map +1 -1
  405. package/dist/chat-ui/mentions/suggestions/data/sources/index.d.ts +88 -10
  406. package/dist/chat-ui/mentions/suggestions/data/sources/index.js +236 -20
  407. package/dist/chat-ui/mentions/suggestions/data/sources/index.js.map +1 -1
  408. package/dist/chat-ui/mentions/suggestions/data/types.cjs.map +1 -1
  409. package/dist/chat-ui/mentions/suggestions/data/types.d.ts +27 -1
  410. package/dist/chat-ui/mentions/suggestions/data/types.js.map +1 -1
  411. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs +56 -5
  412. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs.map +1 -1
  413. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.d.ts +26 -6
  414. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js +57 -6
  415. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js.map +1 -1
  416. package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.cjs +34 -17
  417. package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.cjs.map +1 -1
  418. package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.d.ts +19 -1
  419. package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.js +35 -18
  420. package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.js.map +1 -1
  421. package/dist/chat-ui/statewire.d.ts +1 -1
  422. package/dist/chat-ui/thread/statewire-history-edge.cjs +15 -0
  423. package/dist/chat-ui/thread/statewire-history-edge.cjs.map +1 -1
  424. package/dist/chat-ui/thread/statewire-history-edge.d.ts +4 -1
  425. package/dist/chat-ui/thread/statewire-history-edge.js +15 -0
  426. package/dist/chat-ui/thread/statewire-history-edge.js.map +1 -1
  427. package/dist/collab/client.cjs +17 -5
  428. package/dist/collab/client.cjs.map +1 -1
  429. package/dist/collab/client.d.ts +22 -7
  430. package/dist/collab/client.js +17 -5
  431. package/dist/collab/client.js.map +1 -1
  432. package/dist/composer/ComposerAttachedReferences.cjs +119 -0
  433. package/dist/composer/ComposerAttachedReferences.cjs.map +1 -0
  434. package/dist/composer/ComposerAttachedReferences.d.ts +26 -0
  435. package/dist/composer/ComposerAttachedReferences.js +119 -0
  436. package/dist/composer/ComposerAttachedReferences.js.map +1 -0
  437. package/dist/composer/ComposerNamedAgents.cjs +63 -0
  438. package/dist/composer/ComposerNamedAgents.cjs.map +1 -0
  439. package/dist/composer/ComposerNamedAgents.d.ts +16 -0
  440. package/dist/composer/ComposerNamedAgents.js +63 -0
  441. package/dist/composer/ComposerNamedAgents.js.map +1 -0
  442. package/dist/composer/attached-references.cjs +159 -0
  443. package/dist/composer/attached-references.cjs.map +1 -0
  444. package/dist/composer/attached-references.d.ts +86 -0
  445. package/dist/composer/attached-references.js +159 -0
  446. package/dist/composer/attached-references.js.map +1 -0
  447. package/dist/composer/build-composed-message.cjs +14 -7
  448. package/dist/composer/build-composed-message.cjs.map +1 -1
  449. package/dist/composer/build-composed-message.d.ts +6 -1
  450. package/dist/composer/build-composed-message.js +14 -7
  451. package/dist/composer/build-composed-message.js.map +1 -1
  452. package/dist/composer/composer-handoff.cjs +6 -2
  453. package/dist/composer/composer-handoff.cjs.map +1 -1
  454. package/dist/composer/composer-handoff.d.ts +7 -1
  455. package/dist/composer/composer-handoff.js +6 -2
  456. package/dist/composer/composer-handoff.js.map +1 -1
  457. package/dist/composer/folder-upload.cjs +149 -0
  458. package/dist/composer/folder-upload.cjs.map +1 -0
  459. package/dist/composer/folder-upload.d.ts +79 -0
  460. package/dist/composer/folder-upload.js +149 -0
  461. package/dist/composer/folder-upload.js.map +1 -0
  462. package/dist/composer/index.d.ts +1 -1
  463. package/dist/composer/useAttachToChat.cjs +35 -0
  464. package/dist/composer/useAttachToChat.cjs.map +1 -0
  465. package/dist/composer/useAttachToChat.d.ts +54 -0
  466. package/dist/composer/useAttachToChat.js +35 -0
  467. package/dist/composer/useAttachToChat.js.map +1 -0
  468. package/dist/composer/useAttachedReferencesComposerProps.cjs +19 -0
  469. package/dist/composer/useAttachedReferencesComposerProps.cjs.map +1 -0
  470. package/dist/composer/useAttachedReferencesComposerProps.d.ts +12 -0
  471. package/dist/composer/useAttachedReferencesComposerProps.js +19 -0
  472. package/dist/composer/useAttachedReferencesComposerProps.js.map +1 -0
  473. package/dist/composer/useFileUpload.cjs +95 -7
  474. package/dist/composer/useFileUpload.cjs.map +1 -1
  475. package/dist/composer/useFileUpload.d.ts +21 -2
  476. package/dist/composer/useFileUpload.js +95 -7
  477. package/dist/composer/useFileUpload.js.map +1 -1
  478. package/dist/data/athena-api-error.cjs +125 -0
  479. package/dist/data/athena-api-error.cjs.map +1 -0
  480. package/dist/data/athena-api-error.d.ts +96 -0
  481. package/dist/data/athena-api-error.js +125 -0
  482. package/dist/data/athena-api-error.js.map +1 -0
  483. package/dist/data/athena-data-client.cjs +106 -0
  484. package/dist/data/athena-data-client.cjs.map +1 -0
  485. package/dist/data/athena-data-client.d.ts +74 -0
  486. package/dist/data/athena-data-client.js +106 -0
  487. package/dist/data/athena-data-client.js.map +1 -0
  488. package/dist/data/athena-member.cjs +93 -0
  489. package/dist/data/athena-member.cjs.map +1 -0
  490. package/dist/data/athena-member.d.ts +125 -0
  491. package/dist/data/athena-member.js +93 -0
  492. package/dist/data/athena-member.js.map +1 -0
  493. package/dist/data/athena-request.cjs +458 -0
  494. package/dist/data/athena-request.cjs.map +1 -0
  495. package/dist/data/athena-request.d.ts +120 -0
  496. package/dist/data/athena-request.js +458 -0
  497. package/dist/data/athena-request.js.map +1 -0
  498. package/dist/data/use-athena-fetch.cjs +14 -0
  499. package/dist/data/use-athena-fetch.cjs.map +1 -0
  500. package/dist/data/use-athena-fetch.d.ts +19 -0
  501. package/dist/data/use-athena-fetch.js +14 -0
  502. package/dist/data/use-athena-fetch.js.map +1 -0
  503. package/dist/data/use-athena-graphql.cjs +66 -0
  504. package/dist/data/use-athena-graphql.cjs.map +1 -0
  505. package/dist/data/use-athena-graphql.d.ts +56 -0
  506. package/dist/data/use-athena-graphql.js +66 -0
  507. package/dist/data/use-athena-graphql.js.map +1 -0
  508. package/dist/data/use-athena-rest.cjs +33 -0
  509. package/dist/data/use-athena-rest.cjs.map +1 -0
  510. package/dist/data/use-athena-rest.d.ts +21 -0
  511. package/dist/data/use-athena-rest.js +33 -0
  512. package/dist/data/use-athena-rest.js.map +1 -0
  513. package/dist/data/use-semantic-query.cjs +44 -0
  514. package/dist/data/use-semantic-query.cjs.map +1 -0
  515. package/dist/data/use-semantic-query.d.ts +92 -0
  516. package/dist/data/use-semantic-query.js +44 -0
  517. package/dist/data/use-semantic-query.js.map +1 -0
  518. package/dist/diagnostics/athena-diagnostics.cjs.map +1 -1
  519. package/dist/diagnostics/athena-diagnostics.d.ts +5 -1
  520. package/dist/diagnostics/athena-diagnostics.js.map +1 -1
  521. package/dist/diagnostics/errors.cjs +7 -0
  522. package/dist/diagnostics/errors.cjs.map +1 -1
  523. package/dist/diagnostics/errors.d.ts +7 -0
  524. package/dist/diagnostics/errors.js +7 -0
  525. package/dist/diagnostics/errors.js.map +1 -1
  526. package/dist/index.cjs +155 -11
  527. package/dist/index.cjs.map +1 -1
  528. package/dist/index.d.ts +72 -13
  529. package/dist/index.js +148 -4
  530. package/dist/index.js.map +1 -1
  531. package/dist/keryx-http/src/initial-sync.cjs +64 -16
  532. package/dist/keryx-http/src/initial-sync.cjs.map +1 -1
  533. package/dist/keryx-http/src/initial-sync.d.ts +31 -1
  534. package/dist/keryx-http/src/initial-sync.js +64 -16
  535. package/dist/keryx-http/src/initial-sync.js.map +1 -1
  536. package/dist/keryx-http/src/own-awareness.cjs +20 -0
  537. package/dist/keryx-http/src/own-awareness.cjs.map +1 -0
  538. package/dist/keryx-http/src/own-awareness.d.ts +50 -0
  539. package/dist/keryx-http/src/own-awareness.js +20 -0
  540. package/dist/keryx-http/src/own-awareness.js.map +1 -0
  541. package/dist/keryx-http/src/update-attributions.cjs +26 -1
  542. package/dist/keryx-http/src/update-attributions.cjs.map +1 -1
  543. package/dist/keryx-http/src/update-attributions.d.ts +10 -1
  544. package/dist/keryx-http/src/update-attributions.js +26 -1
  545. package/dist/keryx-http/src/update-attributions.js.map +1 -1
  546. package/dist/offline/chat-outbox.cjs +262 -26
  547. package/dist/offline/chat-outbox.cjs.map +1 -1
  548. package/dist/offline/chat-outbox.d.ts +90 -12
  549. package/dist/offline/chat-outbox.js +263 -27
  550. package/dist/offline/chat-outbox.js.map +1 -1
  551. package/dist/provider/AthenaProvider.cjs +63 -19
  552. package/dist/provider/AthenaProvider.cjs.map +1 -1
  553. package/dist/provider/AthenaProvider.d.ts +24 -8
  554. package/dist/provider/AthenaProvider.js +66 -22
  555. package/dist/provider/AthenaProvider.js.map +1 -1
  556. package/dist/react/package.json.cjs +1 -1
  557. package/dist/react/package.json.js +1 -1
  558. package/dist/references/src/anchors/types.cjs +5 -0
  559. package/dist/references/src/anchors/types.cjs.map +1 -1
  560. package/dist/references/src/anchors/types.js +5 -0
  561. package/dist/references/src/anchors/types.js.map +1 -1
  562. package/dist/references/src/attachable.cjs +149 -0
  563. package/dist/references/src/attachable.cjs.map +1 -0
  564. package/dist/references/src/attachable.d.ts +87 -0
  565. package/dist/references/src/attachable.js +149 -0
  566. package/dist/references/src/attachable.js.map +1 -0
  567. package/dist/runtime/StatewirePlanModeLaneSync.cjs +93 -0
  568. package/dist/runtime/StatewirePlanModeLaneSync.cjs.map +1 -0
  569. package/dist/runtime/StatewirePlanModeLaneSync.d.ts +34 -0
  570. package/dist/runtime/StatewirePlanModeLaneSync.js +93 -0
  571. package/dist/runtime/StatewirePlanModeLaneSync.js.map +1 -0
  572. package/dist/runtime/StatewireThreadConfigLaneSync.cjs +2 -0
  573. package/dist/runtime/StatewireThreadConfigLaneSync.cjs.map +1 -1
  574. package/dist/runtime/StatewireThreadConfigLaneSync.d.ts +4 -0
  575. package/dist/runtime/StatewireThreadConfigLaneSync.js +2 -0
  576. package/dist/runtime/StatewireThreadConfigLaneSync.js.map +1 -1
  577. package/dist/runtime/statewire-plan-mode.cjs +71 -0
  578. package/dist/runtime/statewire-plan-mode.cjs.map +1 -0
  579. package/dist/runtime/statewire-plan-mode.d.ts +88 -0
  580. package/dist/runtime/statewire-plan-mode.js +71 -0
  581. package/dist/runtime/statewire-plan-mode.js.map +1 -0
  582. package/dist/runtime/statewire-run-config.cjs +18 -1
  583. package/dist/runtime/statewire-run-config.cjs.map +1 -1
  584. package/dist/runtime/statewire-run-config.d.ts +20 -0
  585. package/dist/runtime/statewire-run-config.js +18 -1
  586. package/dist/runtime/statewire-run-config.js.map +1 -1
  587. package/dist/runtime/statewire-session-key.cjs +11 -5
  588. package/dist/runtime/statewire-session-key.cjs.map +1 -1
  589. package/dist/runtime/statewire-session-key.d.ts +22 -10
  590. package/dist/runtime/statewire-session-key.js +11 -5
  591. package/dist/runtime/statewire-session-key.js.map +1 -1
  592. package/dist/runtime/useAthenaStatewireRuntime.cjs +65 -8
  593. package/dist/runtime/useAthenaStatewireRuntime.cjs.map +1 -1
  594. package/dist/runtime/useAthenaStatewireRuntime.d.ts +26 -10
  595. package/dist/runtime/useAthenaStatewireRuntime.js +67 -10
  596. package/dist/runtime/useAthenaStatewireRuntime.js.map +1 -1
  597. package/dist/search/useAthenaAssets.cjs +394 -0
  598. package/dist/search/useAthenaAssets.cjs.map +1 -0
  599. package/dist/search/useAthenaAssets.d.ts +186 -0
  600. package/dist/search/useAthenaAssets.js +394 -0
  601. package/dist/search/useAthenaAssets.js.map +1 -0
  602. package/dist/sheet-range/index.cjs +4 -0
  603. package/dist/sheet-range/index.cjs.map +1 -1
  604. package/dist/sheet-range/index.d.ts +4 -2
  605. package/dist/sheet-range/index.js +4 -0
  606. package/dist/sheet-range/index.js.map +1 -1
  607. package/dist/sheet-range/query-range.cjs +102 -0
  608. package/dist/sheet-range/query-range.cjs.map +1 -0
  609. package/dist/sheet-range/query-range.d.ts +46 -0
  610. package/dist/sheet-range/query-range.js +102 -0
  611. package/dist/sheet-range/query-range.js.map +1 -0
  612. package/dist/styles.css +1 -1
  613. package/dist/subagents/index.cjs +49 -0
  614. package/dist/subagents/index.cjs.map +1 -0
  615. package/dist/subagents/index.d.ts +16 -0
  616. package/dist/subagents/index.js +49 -0
  617. package/dist/subagents/index.js.map +1 -0
  618. package/dist/subagents/lane-follow.cjs +19 -0
  619. package/dist/subagents/lane-follow.cjs.map +1 -0
  620. package/dist/subagents/lane-follow.d.ts +9 -0
  621. package/dist/subagents/lane-follow.js +19 -0
  622. package/dist/subagents/lane-follow.js.map +1 -0
  623. package/dist/subagents/lane-model.cjs +178 -0
  624. package/dist/subagents/lane-model.cjs.map +1 -0
  625. package/dist/subagents/lane-model.d.ts +140 -0
  626. package/dist/subagents/lane-model.js +178 -0
  627. package/dist/subagents/lane-model.js.map +1 -0
  628. package/dist/subagents/lane-parts.cjs +517 -0
  629. package/dist/subagents/lane-parts.cjs.map +1 -0
  630. package/dist/subagents/lane-parts.d.ts +130 -0
  631. package/dist/subagents/lane-parts.js +517 -0
  632. package/dist/subagents/lane-parts.js.map +1 -0
  633. package/dist/subagents/subagent-lane-group.cjs +215 -0
  634. package/dist/subagents/subagent-lane-group.cjs.map +1 -0
  635. package/dist/subagents/subagent-lane-group.d.ts +67 -0
  636. package/dist/subagents/subagent-lane-group.js +215 -0
  637. package/dist/subagents/subagent-lane-group.js.map +1 -0
  638. package/dist/subagents/subagent-transcript-drawer.cjs +431 -0
  639. package/dist/subagents/subagent-transcript-drawer.cjs.map +1 -0
  640. package/dist/subagents/subagent-transcript-drawer.d.ts +78 -0
  641. package/dist/subagents/subagent-transcript-drawer.js +431 -0
  642. package/dist/subagents/subagent-transcript-drawer.js.map +1 -0
  643. package/dist/subagents/task-subagent-group.cjs +115 -0
  644. package/dist/subagents/task-subagent-group.cjs.map +1 -0
  645. package/dist/subagents/task-subagent-group.d.ts +36 -0
  646. package/dist/subagents/task-subagent-group.js +115 -0
  647. package/dist/subagents/task-subagent-group.js.map +1 -0
  648. package/dist/subagents/use-omitted-images-in-view.cjs +68 -0
  649. package/dist/subagents/use-omitted-images-in-view.cjs.map +1 -0
  650. package/dist/subagents/use-omitted-images-in-view.d.ts +21 -0
  651. package/dist/subagents/use-omitted-images-in-view.js +68 -0
  652. package/dist/subagents/use-omitted-images-in-view.js.map +1 -0
  653. package/dist/threads/Inbox.cjs +2 -2
  654. package/dist/threads/Inbox.cjs.map +1 -1
  655. package/dist/threads/SessionList.cjs +27 -24
  656. package/dist/threads/SessionList.cjs.map +1 -1
  657. package/dist/threads/SessionList.js +22 -19
  658. package/dist/threads/SessionList.js.map +1 -1
  659. package/dist/threads/SessionsPage.cjs +13 -7
  660. package/dist/threads/SessionsPage.cjs.map +1 -1
  661. package/dist/threads/SessionsPage.d.ts +10 -1
  662. package/dist/threads/SessionsPage.js +9 -3
  663. package/dist/threads/SessionsPage.js.map +1 -1
  664. package/dist/threads/live-session-rows.cjs +207 -0
  665. package/dist/threads/live-session-rows.cjs.map +1 -0
  666. package/dist/threads/live-session-rows.d.ts +175 -0
  667. package/dist/threads/live-session-rows.js +207 -0
  668. package/dist/threads/live-session-rows.js.map +1 -0
  669. package/dist/threads/session-list-model.cjs.map +1 -1
  670. package/dist/threads/session-list-model.d.ts +2 -1
  671. package/dist/threads/session-list-model.js.map +1 -1
  672. package/dist/threads/session-row-parts.cjs +3 -3
  673. package/dist/threads/session-row-parts.cjs.map +1 -1
  674. package/dist/threads/sessions-page-model.cjs +13 -5
  675. package/dist/threads/sessions-page-model.cjs.map +1 -1
  676. package/dist/threads/sessions-page-model.d.ts +7 -0
  677. package/dist/threads/sessions-page-model.js +11 -3
  678. package/dist/threads/sessions-page-model.js.map +1 -1
  679. package/dist/threads/sessions-page-storage.cjs +8 -8
  680. package/dist/threads/sessions-page-storage.cjs.map +1 -1
  681. package/dist/threads/sessions-page-storage.d.ts +5 -1
  682. package/dist/threads/sessions-page-storage.js +8 -8
  683. package/dist/threads/sessions-page-storage.js.map +1 -1
  684. package/dist/threads/statewire-thread-list.cjs +173 -20
  685. package/dist/threads/statewire-thread-list.cjs.map +1 -1
  686. package/dist/threads/statewire-thread-list.d.ts +44 -1
  687. package/dist/threads/statewire-thread-list.js +174 -21
  688. package/dist/threads/statewire-thread-list.js.map +1 -1
  689. package/dist/threads/use-athena-sessions.cjs +1 -0
  690. package/dist/threads/use-athena-sessions.cjs.map +1 -1
  691. package/dist/threads/use-athena-sessions.d.ts +7 -0
  692. package/dist/threads/use-athena-sessions.js +1 -0
  693. package/dist/threads/use-athena-sessions.js.map +1 -1
  694. package/dist/threads/use-athena-thread-agent.cjs +31 -0
  695. package/dist/threads/use-athena-thread-agent.cjs.map +1 -0
  696. package/dist/threads/use-athena-thread-agent.d.ts +38 -0
  697. package/dist/threads/use-athena-thread-agent.js +31 -0
  698. package/dist/threads/use-athena-thread-agent.js.map +1 -0
  699. package/dist/threads/use-athena-thread-plan-mode.cjs +18 -0
  700. package/dist/threads/use-athena-thread-plan-mode.cjs.map +1 -0
  701. package/dist/threads/use-athena-thread-plan-mode.d.ts +18 -0
  702. package/dist/threads/use-athena-thread-plan-mode.js +18 -0
  703. package/dist/threads/use-athena-thread-plan-mode.js.map +1 -0
  704. package/dist/threads/use-rest-conversation-history.d.ts +1 -0
  705. package/dist/tools/agent-creations.cjs +97 -0
  706. package/dist/tools/agent-creations.cjs.map +1 -0
  707. package/dist/tools/agent-creations.d.ts +38 -0
  708. package/dist/tools/agent-creations.js +97 -0
  709. package/dist/tools/agent-creations.js.map +1 -0
  710. package/dist/tools/agent-highlights.cjs +100 -0
  711. package/dist/tools/agent-highlights.cjs.map +1 -0
  712. package/dist/tools/agent-highlights.d.ts +57 -0
  713. package/dist/tools/agent-highlights.js +100 -0
  714. package/dist/tools/agent-highlights.js.map +1 -0
  715. package/dist/tools/append-document-tool-ui.cjs +1 -0
  716. package/dist/tools/append-document-tool-ui.cjs.map +1 -1
  717. package/dist/tools/append-document-tool-ui.d.ts +7 -0
  718. package/dist/tools/append-document-tool-ui.js +2 -1
  719. package/dist/tools/append-document-tool-ui.js.map +1 -1
  720. package/dist/tools/auto-open-tools.cjs +144 -71
  721. package/dist/tools/auto-open-tools.cjs.map +1 -1
  722. package/dist/tools/auto-open-tools.d.ts +131 -1
  723. package/dist/tools/auto-open-tools.js +145 -72
  724. package/dist/tools/auto-open-tools.js.map +1 -1
  725. package/dist/tools/browser-tool-uis.cjs +594 -0
  726. package/dist/tools/browser-tool-uis.cjs.map +1 -0
  727. package/dist/tools/browser-tool-uis.d.ts +8 -0
  728. package/dist/tools/browser-tool-uis.js +594 -0
  729. package/dist/tools/browser-tool-uis.js.map +1 -0
  730. package/dist/tools/computer-asset-tool-uis.cjs +313 -0
  731. package/dist/tools/computer-asset-tool-uis.cjs.map +1 -0
  732. package/dist/tools/computer-asset-tool-uis.d.ts +5 -0
  733. package/dist/tools/computer-asset-tool-uis.js +313 -0
  734. package/dist/tools/computer-asset-tool-uis.js.map +1 -0
  735. package/dist/tools/document-edit-tool-uis.cjs +218 -0
  736. package/dist/tools/document-edit-tool-uis.cjs.map +1 -0
  737. package/dist/tools/document-edit-tool-uis.d.ts +40 -0
  738. package/dist/tools/document-edit-tool-uis.js +218 -0
  739. package/dist/tools/document-edit-tool-uis.js.map +1 -0
  740. package/dist/tools/drive-tool-uis.cjs +425 -0
  741. package/dist/tools/drive-tool-uis.cjs.map +1 -0
  742. package/dist/tools/drive-tool-uis.d.ts +120 -0
  743. package/dist/tools/drive-tool-uis.js +425 -0
  744. package/dist/tools/drive-tool-uis.js.map +1 -0
  745. package/dist/tools/email-calendar-tool-uis.cjs +789 -0
  746. package/dist/tools/email-calendar-tool-uis.cjs.map +1 -0
  747. package/dist/tools/email-calendar-tool-uis.d.ts +129 -0
  748. package/dist/tools/email-calendar-tool-uis.js +789 -0
  749. package/dist/tools/email-calendar-tool-uis.js.map +1 -0
  750. package/dist/tools/ontology-tool-uis.cjs +83 -0
  751. package/dist/tools/ontology-tool-uis.cjs.map +1 -0
  752. package/dist/tools/ontology-tool-uis.d.ts +9 -0
  753. package/dist/tools/ontology-tool-uis.js +83 -0
  754. package/dist/tools/ontology-tool-uis.js.map +1 -0
  755. package/dist/tools/orchestration-tool-uis.cjs +586 -0
  756. package/dist/tools/orchestration-tool-uis.cjs.map +1 -0
  757. package/dist/tools/orchestration-tool-uis.d.ts +141 -0
  758. package/dist/tools/orchestration-tool-uis.js +586 -0
  759. package/dist/tools/orchestration-tool-uis.js.map +1 -0
  760. package/dist/tools/presentation-edit-tool-uis.cjs +516 -0
  761. package/dist/tools/presentation-edit-tool-uis.cjs.map +1 -0
  762. package/dist/tools/presentation-edit-tool-uis.d.ts +73 -0
  763. package/dist/tools/presentation-edit-tool-uis.js +516 -0
  764. package/dist/tools/presentation-edit-tool-uis.js.map +1 -0
  765. package/dist/tools/project-tool-uis.cjs +213 -0
  766. package/dist/tools/project-tool-uis.cjs.map +1 -0
  767. package/dist/tools/project-tool-uis.d.ts +14 -0
  768. package/dist/tools/project-tool-uis.js +213 -0
  769. package/dist/tools/project-tool-uis.js.map +1 -0
  770. package/dist/tools/sandbox-tool-uis.cjs +491 -0
  771. package/dist/tools/sandbox-tool-uis.cjs.map +1 -0
  772. package/dist/tools/sandbox-tool-uis.d.ts +116 -0
  773. package/dist/tools/sandbox-tool-uis.js +491 -0
  774. package/dist/tools/sandbox-tool-uis.js.map +1 -0
  775. package/dist/tools/sheet-query-tool-ui.cjs +138 -0
  776. package/dist/tools/sheet-query-tool-ui.cjs.map +1 -0
  777. package/dist/tools/sheet-query-tool-ui.d.ts +15 -0
  778. package/dist/tools/sheet-query-tool-ui.js +138 -0
  779. package/dist/tools/sheet-query-tool-ui.js.map +1 -0
  780. package/dist/tools/studio-screenshot-tool-uis.cjs +262 -0
  781. package/dist/tools/studio-screenshot-tool-uis.cjs.map +1 -0
  782. package/dist/tools/studio-screenshot-tool-uis.d.ts +52 -0
  783. package/dist/tools/studio-screenshot-tool-uis.js +262 -0
  784. package/dist/tools/studio-screenshot-tool-uis.js.map +1 -0
  785. package/dist/tools/subagent-task-tool-ui.cjs +24 -475
  786. package/dist/tools/subagent-task-tool-ui.cjs.map +1 -1
  787. package/dist/tools/subagent-task-tool-ui.d.ts +19 -103
  788. package/dist/tools/subagent-task-tool-ui.js +28 -479
  789. package/dist/tools/subagent-task-tool-ui.js.map +1 -1
  790. package/dist/tools/tool-summary.cjs +36 -0
  791. package/dist/tools/tool-summary.cjs.map +1 -1
  792. package/dist/tools/tool-summary.js +36 -0
  793. package/dist/tools/tool-summary.js.map +1 -1
  794. package/dist/tools/tool-uis.cjs +181 -53
  795. package/dist/tools/tool-uis.cjs.map +1 -1
  796. package/dist/tools/tool-uis.d.ts +40 -0
  797. package/dist/tools/tool-uis.js +183 -55
  798. package/dist/tools/tool-uis.js.map +1 -1
  799. package/dist/typed-interrupts/index.cjs +15 -0
  800. package/dist/typed-interrupts/index.cjs.map +1 -0
  801. package/dist/typed-interrupts/index.d.ts +20 -0
  802. package/dist/typed-interrupts/index.js +15 -0
  803. package/dist/typed-interrupts/index.js.map +1 -0
  804. package/dist/workbench/session-workbench-panes.cjs +6 -6
  805. package/dist/workbench/session-workbench-panes.cjs.map +1 -1
  806. package/package.json +28 -6
  807. package/dist/agent-runtime/src/chat-outbox-store.cjs +0 -510
  808. package/dist/agent-runtime/src/chat-outbox-store.cjs.map +0 -1
  809. package/dist/agent-runtime/src/chat-outbox-store.d.ts +0 -210
  810. package/dist/agent-runtime/src/chat-outbox-store.js +0 -510
  811. package/dist/agent-runtime/src/chat-outbox-store.js.map +0 -1
@@ -0,0 +1,250 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const typedInterruptKinds = require("../../agent-runtime/src/typed-interrupt-kinds.cjs");
5
+ const lucideReact = require("lucide-react");
6
+ const require$$0 = require("react");
7
+ const apiClient = require("../../chat-ui/mentions/suggestions/data/api-client.cjs");
8
+ const useMentionAsset = require("../../chat-ui/mentions/use-mention-asset.cjs");
9
+ const athenaUrls = require("../../lib/athena-urls.cjs");
10
+ const button = require("../../ui/button.cjs");
11
+ const athenaCitationLinks = require("../athena-citation-links.cjs");
12
+ const interruptCardShell = require("./interrupt-card-shell.cjs");
13
+ const cnfast = require("cnfast");
14
+ const SCOPE_COPY = {
15
+ session: "for this browser session",
16
+ attempt: "for this one action"
17
+ };
18
+ const PROFILE_TITLE_FALLBACK = "Browse profile";
19
+ function AssetLink({ assetId, children }) {
20
+ const auth = require$$0.useContext(apiClient.MentionAuthCtx);
21
+ const handleLinkClick = athenaCitationLinks.useAthenaLinkClickHandler();
22
+ const href = athenaUrls.createAthenaSpacesUrl({ ...(auth == null ? void 0 : auth.appUrl) ? { appUrl: auth.appUrl } : {}, assetIds: assetId });
23
+ const onClick = (event) => {
24
+ if (event.button !== 0 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) return;
25
+ const handled = handleLinkClick({
26
+ href,
27
+ linkText: children,
28
+ target: event.currentTarget.target,
29
+ nativeEvent: event.nativeEvent
30
+ });
31
+ if (handled) event.preventDefault();
32
+ };
33
+ return /* @__PURE__ */ jsxRuntime.jsxs(
34
+ "a",
35
+ {
36
+ href,
37
+ target: "_blank",
38
+ rel: "noopener noreferrer",
39
+ onClick,
40
+ className: "inline-flex w-fit items-center gap-1 text-muted-foreground text-xs hover:text-foreground hover:underline",
41
+ children: [
42
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ExternalLinkIcon, { className: "size-3" }),
43
+ children
44
+ ]
45
+ }
46
+ );
47
+ }
48
+ function BrowseProfileRow({ assetId, scope }) {
49
+ const asset = useMentionAsset.useMentionAsset(assetId);
50
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3 px-3 py-2", children: [
51
+ /* @__PURE__ */ jsxRuntime.jsx(
52
+ "div",
53
+ {
54
+ "aria-hidden": true,
55
+ className: "flex size-8 shrink-0 items-center justify-center rounded-md border border-border bg-muted text-muted-foreground",
56
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.KeyRoundIcon, { className: "size-4" })
57
+ }
58
+ ),
59
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 flex-1 flex-col", children: [
60
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate font-medium text-foreground text-sm", children: (asset == null ? void 0 : asset.title) || PROFILE_TITLE_FALLBACK }),
61
+ /* @__PURE__ */ jsxRuntime.jsx(AssetLink, { assetId, children: "Open in Spaces" })
62
+ ] }),
63
+ scope ? /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "shrink-0 rounded-full bg-muted px-2 py-0.5 text-foreground text-xs", children: [
64
+ "Allow ",
65
+ SCOPE_COPY[scope] ?? scope
66
+ ] }) : null
67
+ ] });
68
+ }
69
+ function BrowseProfileApprovalCard({ interrupt, resume, engine }) {
70
+ const { isLoading, hasTimeout, cancelTimeout, isConversationStreaming } = engine;
71
+ const actionsDisabled = isLoading || isConversationStreaming;
72
+ const { profiles, sessionApprovalAllowed } = typedInterruptKinds.readBrowseProfileApprovalContext(interrupt);
73
+ return /* @__PURE__ */ jsxRuntime.jsx(
74
+ interruptCardShell.InterruptCardShell,
75
+ {
76
+ title: "Browse Profile Approval",
77
+ description: "The agent wants to use a saved login that requires your approval",
78
+ icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ShieldCheckIcon, {}),
79
+ hasTimeout,
80
+ onInteraction: cancelTimeout,
81
+ content: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-3", "data-testid": "typed-interrupt-browse-profile", children: [
82
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "font-medium text-foreground text-sm", children: profiles.length > 1 ? "Browse profiles requested:" : "Browse profile requested:" }),
83
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "divide-y divide-border rounded-md border border-border bg-background", children: profiles.map((profile) => /* @__PURE__ */ jsxRuntime.jsx(
84
+ BrowseProfileRow,
85
+ {
86
+ assetId: profile.profile_asset_id,
87
+ scope: profile.approval_scope
88
+ },
89
+ profile.profile_asset_id
90
+ )) }),
91
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-muted-foreground text-xs", children: "Only the profile owner or an admin can approve. Approving lets the agent use this login's saved cookies; you won't be re-prompted for the granted scope." })
92
+ ] }),
93
+ actions: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
94
+ /* @__PURE__ */ jsxRuntime.jsx(interruptCardShell.WaitForStreamingHint, { active: isConversationStreaming, children: /* @__PURE__ */ jsxRuntime.jsx(button.Button, { onClick: () => resume(typedInterruptKinds.browseProfileApprovalResume({ action: "approve" })), disabled: actionsDisabled, children: isLoading ? "Processing..." : "Approve" }) }),
95
+ sessionApprovalAllowed ? /* @__PURE__ */ jsxRuntime.jsx(interruptCardShell.WaitForStreamingHint, { active: isConversationStreaming, children: /* @__PURE__ */ jsxRuntime.jsxs(
96
+ button.Button,
97
+ {
98
+ variant: "outline",
99
+ onClick: () => resume(typedInterruptKinds.browseProfileApprovalResume({ action: "approve", forSession: true })),
100
+ disabled: actionsDisabled,
101
+ "data-testid": "browse-profile-approve-session",
102
+ children: [
103
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.CheckCheckIcon, {}),
104
+ "Approve all for this session"
105
+ ]
106
+ }
107
+ ) }) : null,
108
+ /* @__PURE__ */ jsxRuntime.jsx(interruptCardShell.WaitForStreamingHint, { active: isConversationStreaming, children: /* @__PURE__ */ jsxRuntime.jsx(
109
+ button.Button,
110
+ {
111
+ variant: "outline",
112
+ onClick: () => resume(typedInterruptKinds.browseProfileApprovalResume({ action: "reject" })),
113
+ disabled: actionsDisabled,
114
+ children: "Reject"
115
+ }
116
+ ) })
117
+ ] })
118
+ }
119
+ );
120
+ }
121
+ const TEXTAREA_CLASS = "mt-1 w-full resize-y rounded-md border border-input bg-background px-3 py-2 text-foreground text-sm shadow-xs outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50";
122
+ function RejectReasonField({
123
+ label,
124
+ value,
125
+ onChange,
126
+ disabled,
127
+ placeholder = "Explain why you're rejecting this action..."
128
+ }) {
129
+ const id = require$$0.useId();
130
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
131
+ /* @__PURE__ */ jsxRuntime.jsx("label", { htmlFor: id, className: "font-medium text-foreground text-sm", children: label }),
132
+ /* @__PURE__ */ jsxRuntime.jsx(
133
+ "textarea",
134
+ {
135
+ id,
136
+ value,
137
+ onChange: (event) => onChange(event.target.value),
138
+ placeholder,
139
+ rows: 2,
140
+ disabled,
141
+ className: TEXTAREA_CLASS
142
+ }
143
+ )
144
+ ] });
145
+ }
146
+ function AddFeedbackButton({ onClick, className }) {
147
+ return /* @__PURE__ */ jsxRuntime.jsxs(
148
+ button.Button,
149
+ {
150
+ variant: "ghost",
151
+ size: "sm",
152
+ onClick,
153
+ className: cnfast.cn("h-auto px-0 py-0 text-muted-foreground text-xs hover:text-foreground", className),
154
+ children: [
155
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.MessageSquareIcon, { className: "size-3" }),
156
+ "Add feedback"
157
+ ]
158
+ }
159
+ );
160
+ }
161
+ const APPROVE_BUTTON_CLASS = "bg-green-600 text-white transition-colors hover:bg-green-700";
162
+ function PmScheduleApprovalCard({ interrupt, resume, engine }) {
163
+ const [reason, setReason] = require$$0.useState("");
164
+ const [showFeedback, setShowFeedback] = require$$0.useState(false);
165
+ const { isLoading, hasTimeout, cancelTimeout, isConversationStreaming } = engine;
166
+ const actionsDisabled = isLoading || isConversationStreaming;
167
+ const { action, fields } = typedInterruptKinds.readPmScheduleApprovalContext(interrupt);
168
+ return /* @__PURE__ */ jsxRuntime.jsx(
169
+ interruptCardShell.InterruptCardShell,
170
+ {
171
+ title: `Approve Schedule ${action === "delete" ? "Deletion" : "Creation"}?`,
172
+ description: interrupt.message,
173
+ icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.CalendarIcon, {}),
174
+ hasTimeout,
175
+ onInteraction: cancelTimeout,
176
+ content: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-3", "data-testid": "typed-interrupt-pm-schedule", children: [
177
+ fields.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col gap-1.5 rounded-md border border-border bg-muted/60 p-3", children: fields.map(([key, value]) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex gap-2 text-sm", children: [
178
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "w-24 shrink-0 font-medium text-muted-foreground", children: interruptCardShell.formatKeyAsName(key) }),
179
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "min-w-0 break-words text-foreground", children: value })
180
+ ] }, key)) }) : null,
181
+ showFeedback ? /* @__PURE__ */ jsxRuntime.jsx(RejectReasonField, { label: "Reason (optional)", value: reason, onChange: setReason, disabled: isLoading }) : /* @__PURE__ */ jsxRuntime.jsx(AddFeedbackButton, { onClick: () => setShowFeedback(true), className: "w-fit" })
182
+ ] }),
183
+ actions: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
184
+ /* @__PURE__ */ jsxRuntime.jsx(interruptCardShell.WaitForStreamingHint, { active: isConversationStreaming, children: /* @__PURE__ */ jsxRuntime.jsx(
185
+ button.Button,
186
+ {
187
+ onClick: () => resume(typedInterruptKinds.typedApprovalResume({ action: "approve" })),
188
+ disabled: actionsDisabled || reason.trim() !== "",
189
+ className: APPROVE_BUTTON_CLASS,
190
+ children: isLoading ? "Processing..." : "Approve"
191
+ }
192
+ ) }),
193
+ /* @__PURE__ */ jsxRuntime.jsx(interruptCardShell.WaitForStreamingHint, { active: isConversationStreaming, children: /* @__PURE__ */ jsxRuntime.jsx(
194
+ button.Button,
195
+ {
196
+ variant: "outline",
197
+ onClick: () => resume(typedInterruptKinds.typedApprovalResume({ action: "reject", reason: reason || void 0 })),
198
+ disabled: actionsDisabled,
199
+ children: isLoading ? "Processing..." : "Reject"
200
+ }
201
+ ) })
202
+ ] })
203
+ }
204
+ );
205
+ }
206
+ function WaitForMinutesCard({ interrupt, cancel, engine }) {
207
+ const { minutes, reason, timeoutSeconds } = typedInterruptKinds.readWaitForMinutesContext(interrupt);
208
+ const total = interrupt.timeout_seconds ?? timeoutSeconds ?? minutes * 60;
209
+ const remaining = Math.ceil(engine.timeoutRemaining ?? typedInterruptKinds.interruptTimeoutRemaining(interrupt) ?? total);
210
+ const progress = total > 0 ? Math.min(100, Math.max(0, (total - remaining) / total * 100)) : 0;
211
+ const cancelDisabled = engine.isLoading || engine.isConversationStreaming;
212
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-3 rounded-lg border border-border bg-card p-4", "data-testid": "typed-interrupt-wait", children: [
213
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [
214
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
215
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ClockIcon, { className: "size-4 text-blue-500" }),
216
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-medium text-foreground text-sm", children: reason ?? `Waiting for ${minutes} minute${minutes !== 1 ? "s" : ""}` })
217
+ ] }),
218
+ /* @__PURE__ */ jsxRuntime.jsxs(
219
+ "button",
220
+ {
221
+ type: "button",
222
+ onClick: cancel,
223
+ disabled: cancelDisabled,
224
+ className: "flex items-center gap-1 rounded-md px-2 py-1 font-medium text-muted-foreground text-xs transition-colors hover:bg-muted hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50",
225
+ children: [
226
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.XIcon, { className: "size-3" }),
227
+ "Cancel"
228
+ ]
229
+ }
230
+ )
231
+ ] }),
232
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
233
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-1.5 flex-1 overflow-hidden rounded-full bg-muted", children: /* @__PURE__ */ jsxRuntime.jsx(
234
+ "div",
235
+ {
236
+ className: "h-full rounded-full bg-blue-500 transition-all duration-1000 ease-linear",
237
+ style: { width: `${progress}%` }
238
+ }
239
+ ) }),
240
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-mono text-muted-foreground text-xs tabular-nums", children: interruptCardShell.formatSecondsForDisplay(remaining) })
241
+ ] })
242
+ ] });
243
+ }
244
+ exports.APPROVE_BUTTON_CLASS = APPROVE_BUTTON_CLASS;
245
+ exports.AddFeedbackButton = AddFeedbackButton;
246
+ exports.BrowseProfileApprovalCard = BrowseProfileApprovalCard;
247
+ exports.PmScheduleApprovalCard = PmScheduleApprovalCard;
248
+ exports.RejectReasonField = RejectReasonField;
249
+ exports.WaitForMinutesCard = WaitForMinutesCard;
250
+ //# sourceMappingURL=approval-cards.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approval-cards.cjs","sources":["../../../src/chat/typed-interrupts/approval-cards.tsx"],"sourcesContent":["/**\n * The approval-shaped `custom` parks, each a decision only a person makes\n * (`isTypedApprovalInterrupt`): a saved login the agent asks to use (Olympus's\n * `BrowseProfileApprovalInterruptUi`) and a project manager's schedule\n * (`PMScheduleApprovalInterruptUi`). The engine confirms an approve with the\n * host's passkey check and agora holds it to a signed-in person; a refusal's\n * reason shows on the card. Also the wait a tool announced\n * (`WaitForMinutesInterruptUi`), whose only answer is Cancel.\n */\nimport {\n browseProfileApprovalResume,\n interruptTimeoutRemaining,\n readBrowseProfileApprovalContext,\n readPmScheduleApprovalContext,\n readWaitForMinutesContext,\n typedApprovalResume,\n} from '@athenaintel/agent-runtime/typed-interrupt-kinds';\nimport {\n CalendarIcon,\n CheckCheckIcon,\n ClockIcon,\n ExternalLinkIcon,\n KeyRoundIcon,\n MessageSquareIcon,\n ShieldCheckIcon,\n XIcon,\n} from 'lucide-react';\nimport { type MouseEvent, useContext, useId, useState } from 'react';\nimport { MentionAuthCtx } from '../../chat-ui/mentions/suggestions/data/api-client';\nimport { useMentionAsset } from '../../chat-ui/mentions/use-mention-asset';\nimport { createAthenaSpacesUrl } from '../../lib/athena-urls';\nimport { cn } from '../../lib/utils';\nimport { Button } from '../../ui/button';\nimport { useAthenaLinkClickHandler } from '../athena-citation-links';\nimport {\n formatKeyAsName,\n formatSecondsForDisplay,\n InterruptCardShell,\n WaitForStreamingHint,\n} from './interrupt-card-shell';\nimport type { TypedInterruptCardProps } from './typed-interrupt-types';\n\nconst SCOPE_COPY: Record<string, string> = {\n session: 'for this browser session',\n attempt: 'for this one action',\n};\n\nconst PROFILE_TITLE_FALLBACK = 'Browse profile';\n\n/** A link to an asset in Athena on the web, opened through the host's link handling (an asset tab, a panel). */\nfunction AssetLink({ assetId, children }: { assetId: string; children: string }) {\n const auth = useContext(MentionAuthCtx);\n const handleLinkClick = useAthenaLinkClickHandler();\n const href = createAthenaSpacesUrl({ ...(auth?.appUrl ? { appUrl: auth.appUrl } : {}), assetIds: assetId });\n const onClick = (event: MouseEvent<HTMLAnchorElement>) => {\n if (event.button !== 0 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) return;\n const handled = handleLinkClick({\n href,\n linkText: children,\n target: event.currentTarget.target,\n nativeEvent: event.nativeEvent,\n });\n if (handled) event.preventDefault();\n };\n return (\n <a\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onClick={onClick}\n className=\"inline-flex w-fit items-center gap-1 text-muted-foreground text-xs hover:text-foreground hover:underline\"\n >\n <ExternalLinkIcon className=\"size-3\" />\n {children}\n </a>\n );\n}\n\nfunction BrowseProfileRow({ assetId, scope }: { assetId: string; scope: string | null }) {\n // The title as agora has it, only for a profile the viewer may read.\n const asset = useMentionAsset(assetId);\n return (\n <div className=\"flex items-center gap-3 px-3 py-2\">\n <div\n aria-hidden\n className=\"flex size-8 shrink-0 items-center justify-center rounded-md border border-border bg-muted text-muted-foreground\"\n >\n <KeyRoundIcon className=\"size-4\" />\n </div>\n <div className=\"flex min-w-0 flex-1 flex-col\">\n <span className=\"truncate font-medium text-foreground text-sm\">{asset?.title || PROFILE_TITLE_FALLBACK}</span>\n <AssetLink assetId={assetId}>Open in Spaces</AssetLink>\n </div>\n {scope ? (\n <span className=\"shrink-0 rounded-full bg-muted px-2 py-0.5 text-foreground text-xs\">\n Allow {SCOPE_COPY[scope] ?? scope}\n </span>\n ) : null}\n </div>\n );\n}\n\nexport function BrowseProfileApprovalCard({ interrupt, resume, engine }: TypedInterruptCardProps) {\n const { isLoading, hasTimeout, cancelTimeout, isConversationStreaming } = engine;\n const actionsDisabled = isLoading || isConversationStreaming;\n const { profiles, sessionApprovalAllowed } = readBrowseProfileApprovalContext(interrupt);\n return (\n <InterruptCardShell\n title=\"Browse Profile Approval\"\n description=\"The agent wants to use a saved login that requires your approval\"\n icon={<ShieldCheckIcon />}\n hasTimeout={hasTimeout}\n onInteraction={cancelTimeout}\n content={\n <div className=\"flex flex-col gap-3\" data-testid=\"typed-interrupt-browse-profile\">\n <p className=\"font-medium text-foreground text-sm\">\n {profiles.length > 1 ? 'Browse profiles requested:' : 'Browse profile requested:'}\n </p>\n <div className=\"divide-y divide-border rounded-md border border-border bg-background\">\n {profiles.map((profile) => (\n <BrowseProfileRow\n key={profile.profile_asset_id}\n assetId={profile.profile_asset_id}\n scope={profile.approval_scope}\n />\n ))}\n </div>\n <p className=\"text-muted-foreground text-xs\">\n Only the profile owner or an admin can approve. Approving lets the agent use this login&apos;s saved\n cookies; you won&apos;t be re-prompted for the granted scope.\n </p>\n </div>\n }\n actions={\n <>\n <WaitForStreamingHint active={isConversationStreaming}>\n <Button onClick={() => resume(browseProfileApprovalResume({ action: 'approve' }))} disabled={actionsDisabled}>\n {isLoading ? 'Processing...' : 'Approve'}\n </Button>\n </WaitForStreamingHint>\n {sessionApprovalAllowed ? (\n <WaitForStreamingHint active={isConversationStreaming}>\n <Button\n variant=\"outline\"\n onClick={() => resume(browseProfileApprovalResume({ action: 'approve', forSession: true }))}\n disabled={actionsDisabled}\n data-testid=\"browse-profile-approve-session\"\n >\n <CheckCheckIcon />\n Approve all for this session\n </Button>\n </WaitForStreamingHint>\n ) : null}\n <WaitForStreamingHint active={isConversationStreaming}>\n <Button\n variant=\"outline\"\n onClick={() => resume(browseProfileApprovalResume({ action: 'reject' }))}\n disabled={actionsDisabled}\n >\n Reject\n </Button>\n </WaitForStreamingHint>\n </>\n }\n />\n );\n}\n\nconst TEXTAREA_CLASS =\n 'mt-1 w-full resize-y rounded-md border border-input bg-background px-3 py-2 text-foreground text-sm shadow-xs outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50';\n\n/** The optional reason a reject carries, behind \"Add feedback\". */\nexport function RejectReasonField({\n label,\n value,\n onChange,\n disabled,\n placeholder = \"Explain why you're rejecting this action...\",\n}: {\n label: string;\n value: string;\n onChange: (value: string) => void;\n disabled: boolean;\n placeholder?: string;\n}) {\n const id = useId();\n return (\n <div>\n <label htmlFor={id} className=\"font-medium text-foreground text-sm\">\n {label}\n </label>\n <textarea\n id={id}\n value={value}\n onChange={(event) => onChange(event.target.value)}\n placeholder={placeholder}\n rows={2}\n disabled={disabled}\n className={TEXTAREA_CLASS}\n />\n </div>\n );\n}\n\nexport function AddFeedbackButton({ onClick, className }: { onClick: () => void; className?: string }) {\n return (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={onClick}\n className={cn('h-auto px-0 py-0 text-muted-foreground text-xs hover:text-foreground', className)}\n >\n <MessageSquareIcon className=\"size-3\" />\n Add feedback\n </Button>\n );\n}\n\n/** Approve's green, as Olympus's approval cards draw it. */\nexport const APPROVE_BUTTON_CLASS = 'bg-green-600 text-white transition-colors hover:bg-green-700';\n\nexport function PmScheduleApprovalCard({ interrupt, resume, engine }: TypedInterruptCardProps) {\n const [reason, setReason] = useState('');\n const [showFeedback, setShowFeedback] = useState(false);\n const { isLoading, hasTimeout, cancelTimeout, isConversationStreaming } = engine;\n const actionsDisabled = isLoading || isConversationStreaming;\n const { action, fields } = readPmScheduleApprovalContext(interrupt);\n return (\n <InterruptCardShell\n title={`Approve Schedule ${action === 'delete' ? 'Deletion' : 'Creation'}?`}\n description={interrupt.message}\n icon={<CalendarIcon />}\n hasTimeout={hasTimeout}\n onInteraction={cancelTimeout}\n content={\n <div className=\"flex flex-col gap-3\" data-testid=\"typed-interrupt-pm-schedule\">\n {fields.length > 0 ? (\n <div className=\"flex flex-col gap-1.5 rounded-md border border-border bg-muted/60 p-3\">\n {fields.map(([key, value]) => (\n <div key={key} className=\"flex gap-2 text-sm\">\n <span className=\"w-24 shrink-0 font-medium text-muted-foreground\">{formatKeyAsName(key)}</span>\n <span className=\"min-w-0 break-words text-foreground\">{value}</span>\n </div>\n ))}\n </div>\n ) : null}\n {showFeedback ? (\n <RejectReasonField label=\"Reason (optional)\" value={reason} onChange={setReason} disabled={isLoading} />\n ) : (\n <AddFeedbackButton onClick={() => setShowFeedback(true)} className=\"w-fit\" />\n )}\n </div>\n }\n actions={\n <>\n <WaitForStreamingHint active={isConversationStreaming}>\n <Button\n onClick={() => resume(typedApprovalResume({ action: 'approve' }))}\n disabled={actionsDisabled || reason.trim() !== ''}\n className={APPROVE_BUTTON_CLASS}\n >\n {isLoading ? 'Processing...' : 'Approve'}\n </Button>\n </WaitForStreamingHint>\n <WaitForStreamingHint active={isConversationStreaming}>\n <Button\n variant=\"outline\"\n onClick={() => resume(typedApprovalResume({ action: 'reject', reason: reason || undefined }))}\n disabled={actionsDisabled}\n >\n {isLoading ? 'Processing...' : 'Reject'}\n </Button>\n </WaitForStreamingHint>\n </>\n }\n />\n );\n}\n\n/**\n * The wait `wait_for_minutes` announced: a countdown the backend's timer\n * resumes on its own, so the only answer is Cancel, which ends the wait early.\n */\nexport function WaitForMinutesCard({ interrupt, cancel, engine }: TypedInterruptCardProps) {\n const { minutes, reason, timeoutSeconds } = readWaitForMinutesContext(interrupt);\n const total = interrupt.timeout_seconds ?? timeoutSeconds ?? minutes * 60;\n // The engine ticks every second; the first frame reads the deadline itself.\n const remaining = Math.ceil(engine.timeoutRemaining ?? interruptTimeoutRemaining(interrupt) ?? total);\n const progress = total > 0 ? Math.min(100, Math.max(0, ((total - remaining) / total) * 100)) : 0;\n const cancelDisabled = engine.isLoading || engine.isConversationStreaming;\n return (\n <div className=\"flex flex-col gap-3 rounded-lg border border-border bg-card p-4\" data-testid=\"typed-interrupt-wait\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <ClockIcon className=\"size-4 text-blue-500\" />\n <span className=\"font-medium text-foreground text-sm\">\n {reason ?? `Waiting for ${minutes} minute${minutes !== 1 ? 's' : ''}`}\n </span>\n </div>\n <button\n type=\"button\"\n onClick={cancel}\n disabled={cancelDisabled}\n className=\"flex items-center gap-1 rounded-md px-2 py-1 font-medium text-muted-foreground text-xs transition-colors hover:bg-muted hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50\"\n >\n <XIcon className=\"size-3\" />\n Cancel\n </button>\n </div>\n <div className=\"flex items-center gap-3\">\n <div className=\"h-1.5 flex-1 overflow-hidden rounded-full bg-muted\">\n <div\n className=\"h-full rounded-full bg-blue-500 transition-all duration-1000 ease-linear\"\n style={{ width: `${progress}%` }}\n />\n </div>\n <span className=\"font-mono text-muted-foreground text-xs tabular-nums\">\n {formatSecondsForDisplay(remaining)}\n </span>\n </div>\n </div>\n );\n}\n"],"names":["useContext","MentionAuthCtx","useAthenaLinkClickHandler","createAthenaSpacesUrl","jsxs","jsx","ExternalLinkIcon","useMentionAsset","KeyRoundIcon","readBrowseProfileApprovalContext","InterruptCardShell","ShieldCheckIcon","Fragment","WaitForStreamingHint","Button","browseProfileApprovalResume","CheckCheckIcon","useId","cn","MessageSquareIcon","useState","readPmScheduleApprovalContext","CalendarIcon","formatKeyAsName","typedApprovalResume","readWaitForMinutesContext","interruptTimeoutRemaining","ClockIcon","XIcon","formatSecondsForDisplay"],"mappings":";;;;;;;;;;;;;AA0CA,MAAM,aAAqC;AAAA,EACzC,SAAS;AAAA,EACT,SAAS;AACX;AAEA,MAAM,yBAAyB;AAG/B,SAAS,UAAU,EAAE,SAAS,YAAmD;AAC/E,QAAM,OAAOA,WAAAA,WAAWC,wBAAc;AACtC,QAAM,kBAAkBC,oBAAAA,0BAAA;AACxB,QAAM,OAAOC,WAAAA,sBAAsB,EAAE,IAAI,6BAAM,UAAS,EAAE,QAAQ,KAAK,WAAW,CAAA,GAAK,UAAU,SAAS;AAC1G,QAAM,UAAU,CAAC,UAAyC;AACxD,QAAI,MAAM,WAAW,KAAK,MAAM,WAAW,MAAM,WAAW,MAAM,YAAY,MAAM,OAAQ;AAC5F,UAAM,UAAU,gBAAgB;AAAA,MAC9B;AAAA,MACA,UAAU;AAAA,MACV,QAAQ,MAAM,cAAc;AAAA,MAC5B,aAAa,MAAM;AAAA,IAAA,CACpB;AACD,QAAI,eAAe,eAAA;AAAA,EACrB;AACA,SACEC,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC;AAAA,MACA,QAAO;AAAA,MACP,KAAI;AAAA,MACJ;AAAA,MACA,WAAU;AAAA,MAEV,UAAA;AAAA,QAAAC,2BAAAA,IAACC,YAAAA,kBAAA,EAAiB,WAAU,SAAA,CAAS;AAAA,QACpC;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGP;AAEA,SAAS,iBAAiB,EAAE,SAAS,SAAoD;AAEvF,QAAM,QAAQC,gBAAAA,gBAAgB,OAAO;AACrC,SACEH,2BAAAA,KAAC,OAAA,EAAI,WAAU,qCACb,UAAA;AAAA,IAAAC,2BAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACC,eAAW;AAAA,QACX,WAAU;AAAA,QAEV,UAAAA,2BAAAA,IAACG,YAAAA,cAAA,EAAa,WAAU,SAAA,CAAS;AAAA,MAAA;AAAA,IAAA;AAAA,IAEnCJ,2BAAAA,KAAC,OAAA,EAAI,WAAU,gCACb,UAAA;AAAA,MAAAC,+BAAC,QAAA,EAAK,WAAU,gDAAgD,WAAA,+BAAO,UAAS,wBAAuB;AAAA,MACvGA,2BAAAA,IAAC,WAAA,EAAU,SAAkB,UAAA,iBAAA,CAAc;AAAA,IAAA,GAC7C;AAAA,IACC,QACCD,2BAAAA,KAAC,QAAA,EAAK,WAAU,sEAAqE,UAAA;AAAA,MAAA;AAAA,MAC5E,WAAW,KAAK,KAAK;AAAA,IAAA,EAAA,CAC9B,IACE;AAAA,EAAA,GACN;AAEJ;AAEO,SAAS,0BAA0B,EAAE,WAAW,QAAQ,UAAmC;AAChG,QAAM,EAAE,WAAW,YAAY,eAAe,4BAA4B;AAC1E,QAAM,kBAAkB,aAAa;AACrC,QAAM,EAAE,UAAU,2BAA2BK,oBAAAA,iCAAiC,SAAS;AACvF,SACEJ,2BAAAA;AAAAA,IAACK,mBAAAA;AAAAA,IAAA;AAAA,MACC,OAAM;AAAA,MACN,aAAY;AAAA,MACZ,qCAAOC,YAAAA,iBAAA,EAAgB;AAAA,MACvB;AAAA,MACA,eAAe;AAAA,MACf,SACEP,2BAAAA,KAAC,OAAA,EAAI,WAAU,uBAAsB,eAAY,kCAC/C,UAAA;AAAA,QAAAC,2BAAAA,IAAC,OAAE,WAAU,uCACV,mBAAS,SAAS,IAAI,+BAA+B,4BAAA,CACxD;AAAA,uCACC,OAAA,EAAI,WAAU,wEACZ,UAAA,SAAS,IAAI,CAAC,YACbA,2BAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YAEC,SAAS,QAAQ;AAAA,YACjB,OAAO,QAAQ;AAAA,UAAA;AAAA,UAFV,QAAQ;AAAA,QAAA,CAIhB,GACH;AAAA,QACAA,2BAAAA,IAAC,KAAA,EAAE,WAAU,iCAAgC,UAAA,2JAAA,CAG7C;AAAA,MAAA,GACF;AAAA,MAEF,SACED,2BAAAA,KAAAQ,qBAAA,EACE,UAAA;AAAA,QAAAP,2BAAAA,IAACQ,mBAAAA,sBAAA,EAAqB,QAAQ,yBAC5B,UAAAR,2BAAAA,IAACS,iBAAO,SAAS,MAAM,OAAOC,oBAAAA,4BAA4B,EAAE,QAAQ,UAAA,CAAW,CAAC,GAAG,UAAU,iBAC1F,UAAA,YAAY,kBAAkB,WACjC,EAAA,CACF;AAAA,QACC,yBACCV,2BAAAA,IAACQ,mBAAAA,sBAAA,EAAqB,QAAQ,yBAC5B,UAAAT,2BAAAA;AAAAA,UAACU,OAAAA;AAAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YACR,SAAS,MAAM,OAAOC,gDAA4B,EAAE,QAAQ,WAAW,YAAY,KAAA,CAAM,CAAC;AAAA,YAC1F,UAAU;AAAA,YACV,eAAY;AAAA,YAEZ,UAAA;AAAA,cAAAV,2BAAAA,IAACW,YAAAA,gBAAA,EAAe;AAAA,cAAE;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA,GAGtB,IACE;AAAA,QACJX,2BAAAA,IAACQ,mBAAAA,sBAAA,EAAqB,QAAQ,yBAC5B,UAAAR,2BAAAA;AAAAA,UAACS,OAAAA;AAAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YACR,SAAS,MAAM,OAAOC,oBAAAA,4BAA4B,EAAE,QAAQ,SAAA,CAAU,CAAC;AAAA,YACvE,UAAU;AAAA,YACX,UAAA;AAAA,UAAA;AAAA,QAAA,EAED,CACF;AAAA,MAAA,EAAA,CACF;AAAA,IAAA;AAAA,EAAA;AAIR;AAEA,MAAM,iBACJ;AAGK,SAAS,kBAAkB;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AAChB,GAMG;AACD,QAAM,KAAKE,WAAAA,MAAA;AACX,yCACG,OAAA,EACC,UAAA;AAAA,IAAAZ,+BAAC,SAAA,EAAM,SAAS,IAAI,WAAU,uCAC3B,UAAA,OACH;AAAA,IACAA,2BAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA,UAAU,CAAC,UAAU,SAAS,MAAM,OAAO,KAAK;AAAA,QAChD;AAAA,QACA,MAAM;AAAA,QACN;AAAA,QACA,WAAW;AAAA,MAAA;AAAA,IAAA;AAAA,EACb,GACF;AAEJ;AAEO,SAAS,kBAAkB,EAAE,SAAS,aAA0D;AACrG,SACED,2BAAAA;AAAAA,IAACU,OAAAA;AAAAA,IAAA;AAAA,MACC,SAAQ;AAAA,MACR,MAAK;AAAA,MACL;AAAA,MACA,WAAWI,OAAAA,GAAG,wEAAwE,SAAS;AAAA,MAE/F,UAAA;AAAA,QAAAb,2BAAAA,IAACc,YAAAA,mBAAA,EAAkB,WAAU,SAAA,CAAS;AAAA,QAAE;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAI9C;AAGO,MAAM,uBAAuB;AAE7B,SAAS,uBAAuB,EAAE,WAAW,QAAQ,UAAmC;AAC7F,QAAM,CAAC,QAAQ,SAAS,IAAIC,WAAAA,SAAS,EAAE;AACvC,QAAM,CAAC,cAAc,eAAe,IAAIA,WAAAA,SAAS,KAAK;AACtD,QAAM,EAAE,WAAW,YAAY,eAAe,4BAA4B;AAC1E,QAAM,kBAAkB,aAAa;AACrC,QAAM,EAAE,QAAQ,WAAWC,oBAAAA,8BAA8B,SAAS;AAClE,SACEhB,2BAAAA;AAAAA,IAACK,mBAAAA;AAAAA,IAAA;AAAA,MACC,OAAO,oBAAoB,WAAW,WAAW,aAAa,UAAU;AAAA,MACxE,aAAa,UAAU;AAAA,MACvB,qCAAOY,YAAAA,cAAA,EAAa;AAAA,MACpB;AAAA,MACA,eAAe;AAAA,MACf,SACElB,2BAAAA,KAAC,OAAA,EAAI,WAAU,uBAAsB,eAAY,+BAC9C,UAAA;AAAA,QAAA,OAAO,SAAS,IACfC,2BAAAA,IAAC,OAAA,EAAI,WAAU,yEACZ,UAAA,OAAO,IAAI,CAAC,CAAC,KAAK,KAAK,MACtBD,2BAAAA,KAAC,OAAA,EAAc,WAAU,sBACvB,UAAA;AAAA,UAAAC,+BAAC,QAAA,EAAK,WAAU,mDAAmD,UAAAkB,mBAAAA,gBAAgB,GAAG,GAAE;AAAA,UACxFlB,2BAAAA,IAAC,QAAA,EAAK,WAAU,uCAAuC,UAAA,MAAA,CAAM;AAAA,QAAA,EAAA,GAFrD,GAGV,CACD,EAAA,CACH,IACE;AAAA,QACH,8CACE,mBAAA,EAAkB,OAAM,qBAAoB,OAAO,QAAQ,UAAU,WAAW,UAAU,WAAW,IAEtGA,+BAAC,qBAAkB,SAAS,MAAM,gBAAgB,IAAI,GAAG,WAAU,QAAA,CAAQ;AAAA,MAAA,GAE/E;AAAA,MAEF,SACED,2BAAAA,KAAAQ,qBAAA,EACE,UAAA;AAAA,QAAAP,2BAAAA,IAACQ,mBAAAA,sBAAA,EAAqB,QAAQ,yBAC5B,UAAAR,2BAAAA;AAAAA,UAACS,OAAAA;AAAAA,UAAA;AAAA,YACC,SAAS,MAAM,OAAOU,oBAAAA,oBAAoB,EAAE,QAAQ,UAAA,CAAW,CAAC;AAAA,YAChE,UAAU,mBAAmB,OAAO,KAAA,MAAW;AAAA,YAC/C,WAAW;AAAA,YAEV,sBAAY,kBAAkB;AAAA,UAAA;AAAA,QAAA,GAEnC;AAAA,QACAnB,2BAAAA,IAACQ,mBAAAA,sBAAA,EAAqB,QAAQ,yBAC5B,UAAAR,2BAAAA;AAAAA,UAACS,OAAAA;AAAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YACR,SAAS,MAAM,OAAOU,oBAAAA,oBAAoB,EAAE,QAAQ,UAAU,QAAQ,UAAU,OAAA,CAAW,CAAC;AAAA,YAC5F,UAAU;AAAA,YAET,sBAAY,kBAAkB;AAAA,UAAA;AAAA,QAAA,EACjC,CACF;AAAA,MAAA,EAAA,CACF;AAAA,IAAA;AAAA,EAAA;AAIR;AAMO,SAAS,mBAAmB,EAAE,WAAW,QAAQ,UAAmC;AACzF,QAAM,EAAE,SAAS,QAAQ,eAAA,IAAmBC,oBAAAA,0BAA0B,SAAS;AAC/E,QAAM,QAAQ,UAAU,mBAAmB,kBAAkB,UAAU;AAEvE,QAAM,YAAY,KAAK,KAAK,OAAO,oBAAoBC,oBAAAA,0BAA0B,SAAS,KAAK,KAAK;AACpG,QAAM,WAAW,QAAQ,IAAI,KAAK,IAAI,KAAK,KAAK,IAAI,IAAK,QAAQ,aAAa,QAAS,GAAG,CAAC,IAAI;AAC/F,QAAM,iBAAiB,OAAO,aAAa,OAAO;AAClD,SACEtB,2BAAAA,KAAC,OAAA,EAAI,WAAU,mEAAkE,eAAY,wBAC3F,UAAA;AAAA,IAAAA,2BAAAA,KAAC,OAAA,EAAI,WAAU,qCACb,UAAA;AAAA,MAAAA,2BAAAA,KAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,QAAAC,2BAAAA,IAACsB,YAAAA,WAAA,EAAU,WAAU,uBAAA,CAAuB;AAAA,QAC5CtB,2BAAAA,IAAC,QAAA,EAAK,WAAU,uCACb,UAAA,UAAU,eAAe,OAAO,UAAU,YAAY,IAAI,MAAM,EAAE,GAAA,CACrE;AAAA,MAAA,GACF;AAAA,MACAD,2BAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,SAAS;AAAA,UACT,UAAU;AAAA,UACV,WAAU;AAAA,UAEV,UAAA;AAAA,YAAAC,2BAAAA,IAACuB,YAAAA,OAAA,EAAM,WAAU,SAAA,CAAS;AAAA,YAAE;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAE9B,GACF;AAAA,IACAxB,2BAAAA,KAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,MAAAC,2BAAAA,IAAC,OAAA,EAAI,WAAU,sDACb,UAAAA,2BAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAU;AAAA,UACV,OAAO,EAAE,OAAO,GAAG,QAAQ,IAAA;AAAA,QAAI;AAAA,MAAA,GAEnC;AAAA,qCACC,QAAA,EAAK,WAAU,wDACb,UAAAwB,mBAAAA,wBAAwB,SAAS,EAAA,CACpC;AAAA,IAAA,EAAA,CACF;AAAA,EAAA,GACF;AAEJ;;;;;;;"}
@@ -0,0 +1,22 @@
1
+ import type { TypedInterruptCardProps } from './typed-interrupt-types';
2
+ export declare function BrowseProfileApprovalCard({ interrupt, resume, engine }: TypedInterruptCardProps): import("react").JSX.Element;
3
+ /** The optional reason a reject carries, behind "Add feedback". */
4
+ export declare function RejectReasonField({ label, value, onChange, disabled, placeholder, }: {
5
+ label: string;
6
+ value: string;
7
+ onChange: (value: string) => void;
8
+ disabled: boolean;
9
+ placeholder?: string;
10
+ }): import("react").JSX.Element;
11
+ export declare function AddFeedbackButton({ onClick, className }: {
12
+ onClick: () => void;
13
+ className?: string;
14
+ }): import("react").JSX.Element;
15
+ /** Approve's green, as Olympus's approval cards draw it. */
16
+ export declare const APPROVE_BUTTON_CLASS = "bg-green-600 text-white transition-colors hover:bg-green-700";
17
+ export declare function PmScheduleApprovalCard({ interrupt, resume, engine }: TypedInterruptCardProps): import("react").JSX.Element;
18
+ /**
19
+ * The wait `wait_for_minutes` announced: a countdown the backend's timer
20
+ * resumes on its own, so the only answer is Cancel, which ends the wait early.
21
+ */
22
+ export declare function WaitForMinutesCard({ interrupt, cancel, engine }: TypedInterruptCardProps): import("react").JSX.Element;
@@ -0,0 +1,250 @@
1
+ import { jsx, jsxs, Fragment } from "react/jsx-runtime";
2
+ import { readBrowseProfileApprovalContext, browseProfileApprovalResume, readWaitForMinutesContext, interruptTimeoutRemaining, readPmScheduleApprovalContext, typedApprovalResume } from "../../agent-runtime/src/typed-interrupt-kinds.js";
3
+ import { CheckCheckIcon, ShieldCheckIcon, ClockIcon, XIcon, CalendarIcon, KeyRoundIcon, MessageSquareIcon, ExternalLinkIcon } from "lucide-react";
4
+ import { useState, useId, useContext } from "react";
5
+ import { MentionAuthCtx } from "../../chat-ui/mentions/suggestions/data/api-client.js";
6
+ import { useMentionAsset } from "../../chat-ui/mentions/use-mention-asset.js";
7
+ import { createAthenaSpacesUrl } from "../../lib/athena-urls.js";
8
+ import { Button } from "../../ui/button.js";
9
+ import { useAthenaLinkClickHandler } from "../athena-citation-links.js";
10
+ import { InterruptCardShell, WaitForStreamingHint, formatSecondsForDisplay, formatKeyAsName } from "./interrupt-card-shell.js";
11
+ import { cn } from "cnfast";
12
+ const SCOPE_COPY = {
13
+ session: "for this browser session",
14
+ attempt: "for this one action"
15
+ };
16
+ const PROFILE_TITLE_FALLBACK = "Browse profile";
17
+ function AssetLink({ assetId, children }) {
18
+ const auth = useContext(MentionAuthCtx);
19
+ const handleLinkClick = useAthenaLinkClickHandler();
20
+ const href = createAthenaSpacesUrl({ ...(auth == null ? void 0 : auth.appUrl) ? { appUrl: auth.appUrl } : {}, assetIds: assetId });
21
+ const onClick = (event) => {
22
+ if (event.button !== 0 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) return;
23
+ const handled = handleLinkClick({
24
+ href,
25
+ linkText: children,
26
+ target: event.currentTarget.target,
27
+ nativeEvent: event.nativeEvent
28
+ });
29
+ if (handled) event.preventDefault();
30
+ };
31
+ return /* @__PURE__ */ jsxs(
32
+ "a",
33
+ {
34
+ href,
35
+ target: "_blank",
36
+ rel: "noopener noreferrer",
37
+ onClick,
38
+ className: "inline-flex w-fit items-center gap-1 text-muted-foreground text-xs hover:text-foreground hover:underline",
39
+ children: [
40
+ /* @__PURE__ */ jsx(ExternalLinkIcon, { className: "size-3" }),
41
+ children
42
+ ]
43
+ }
44
+ );
45
+ }
46
+ function BrowseProfileRow({ assetId, scope }) {
47
+ const asset = useMentionAsset(assetId);
48
+ return /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3 px-3 py-2", children: [
49
+ /* @__PURE__ */ jsx(
50
+ "div",
51
+ {
52
+ "aria-hidden": true,
53
+ className: "flex size-8 shrink-0 items-center justify-center rounded-md border border-border bg-muted text-muted-foreground",
54
+ children: /* @__PURE__ */ jsx(KeyRoundIcon, { className: "size-4" })
55
+ }
56
+ ),
57
+ /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-1 flex-col", children: [
58
+ /* @__PURE__ */ jsx("span", { className: "truncate font-medium text-foreground text-sm", children: (asset == null ? void 0 : asset.title) || PROFILE_TITLE_FALLBACK }),
59
+ /* @__PURE__ */ jsx(AssetLink, { assetId, children: "Open in Spaces" })
60
+ ] }),
61
+ scope ? /* @__PURE__ */ jsxs("span", { className: "shrink-0 rounded-full bg-muted px-2 py-0.5 text-foreground text-xs", children: [
62
+ "Allow ",
63
+ SCOPE_COPY[scope] ?? scope
64
+ ] }) : null
65
+ ] });
66
+ }
67
+ function BrowseProfileApprovalCard({ interrupt, resume, engine }) {
68
+ const { isLoading, hasTimeout, cancelTimeout, isConversationStreaming } = engine;
69
+ const actionsDisabled = isLoading || isConversationStreaming;
70
+ const { profiles, sessionApprovalAllowed } = readBrowseProfileApprovalContext(interrupt);
71
+ return /* @__PURE__ */ jsx(
72
+ InterruptCardShell,
73
+ {
74
+ title: "Browse Profile Approval",
75
+ description: "The agent wants to use a saved login that requires your approval",
76
+ icon: /* @__PURE__ */ jsx(ShieldCheckIcon, {}),
77
+ hasTimeout,
78
+ onInteraction: cancelTimeout,
79
+ content: /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-3", "data-testid": "typed-interrupt-browse-profile", children: [
80
+ /* @__PURE__ */ jsx("p", { className: "font-medium text-foreground text-sm", children: profiles.length > 1 ? "Browse profiles requested:" : "Browse profile requested:" }),
81
+ /* @__PURE__ */ jsx("div", { className: "divide-y divide-border rounded-md border border-border bg-background", children: profiles.map((profile) => /* @__PURE__ */ jsx(
82
+ BrowseProfileRow,
83
+ {
84
+ assetId: profile.profile_asset_id,
85
+ scope: profile.approval_scope
86
+ },
87
+ profile.profile_asset_id
88
+ )) }),
89
+ /* @__PURE__ */ jsx("p", { className: "text-muted-foreground text-xs", children: "Only the profile owner or an admin can approve. Approving lets the agent use this login's saved cookies; you won't be re-prompted for the granted scope." })
90
+ ] }),
91
+ actions: /* @__PURE__ */ jsxs(Fragment, { children: [
92
+ /* @__PURE__ */ jsx(WaitForStreamingHint, { active: isConversationStreaming, children: /* @__PURE__ */ jsx(Button, { onClick: () => resume(browseProfileApprovalResume({ action: "approve" })), disabled: actionsDisabled, children: isLoading ? "Processing..." : "Approve" }) }),
93
+ sessionApprovalAllowed ? /* @__PURE__ */ jsx(WaitForStreamingHint, { active: isConversationStreaming, children: /* @__PURE__ */ jsxs(
94
+ Button,
95
+ {
96
+ variant: "outline",
97
+ onClick: () => resume(browseProfileApprovalResume({ action: "approve", forSession: true })),
98
+ disabled: actionsDisabled,
99
+ "data-testid": "browse-profile-approve-session",
100
+ children: [
101
+ /* @__PURE__ */ jsx(CheckCheckIcon, {}),
102
+ "Approve all for this session"
103
+ ]
104
+ }
105
+ ) }) : null,
106
+ /* @__PURE__ */ jsx(WaitForStreamingHint, { active: isConversationStreaming, children: /* @__PURE__ */ jsx(
107
+ Button,
108
+ {
109
+ variant: "outline",
110
+ onClick: () => resume(browseProfileApprovalResume({ action: "reject" })),
111
+ disabled: actionsDisabled,
112
+ children: "Reject"
113
+ }
114
+ ) })
115
+ ] })
116
+ }
117
+ );
118
+ }
119
+ const TEXTAREA_CLASS = "mt-1 w-full resize-y rounded-md border border-input bg-background px-3 py-2 text-foreground text-sm shadow-xs outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50";
120
+ function RejectReasonField({
121
+ label,
122
+ value,
123
+ onChange,
124
+ disabled,
125
+ placeholder = "Explain why you're rejecting this action..."
126
+ }) {
127
+ const id = useId();
128
+ return /* @__PURE__ */ jsxs("div", { children: [
129
+ /* @__PURE__ */ jsx("label", { htmlFor: id, className: "font-medium text-foreground text-sm", children: label }),
130
+ /* @__PURE__ */ jsx(
131
+ "textarea",
132
+ {
133
+ id,
134
+ value,
135
+ onChange: (event) => onChange(event.target.value),
136
+ placeholder,
137
+ rows: 2,
138
+ disabled,
139
+ className: TEXTAREA_CLASS
140
+ }
141
+ )
142
+ ] });
143
+ }
144
+ function AddFeedbackButton({ onClick, className }) {
145
+ return /* @__PURE__ */ jsxs(
146
+ Button,
147
+ {
148
+ variant: "ghost",
149
+ size: "sm",
150
+ onClick,
151
+ className: cn("h-auto px-0 py-0 text-muted-foreground text-xs hover:text-foreground", className),
152
+ children: [
153
+ /* @__PURE__ */ jsx(MessageSquareIcon, { className: "size-3" }),
154
+ "Add feedback"
155
+ ]
156
+ }
157
+ );
158
+ }
159
+ const APPROVE_BUTTON_CLASS = "bg-green-600 text-white transition-colors hover:bg-green-700";
160
+ function PmScheduleApprovalCard({ interrupt, resume, engine }) {
161
+ const [reason, setReason] = useState("");
162
+ const [showFeedback, setShowFeedback] = useState(false);
163
+ const { isLoading, hasTimeout, cancelTimeout, isConversationStreaming } = engine;
164
+ const actionsDisabled = isLoading || isConversationStreaming;
165
+ const { action, fields } = readPmScheduleApprovalContext(interrupt);
166
+ return /* @__PURE__ */ jsx(
167
+ InterruptCardShell,
168
+ {
169
+ title: `Approve Schedule ${action === "delete" ? "Deletion" : "Creation"}?`,
170
+ description: interrupt.message,
171
+ icon: /* @__PURE__ */ jsx(CalendarIcon, {}),
172
+ hasTimeout,
173
+ onInteraction: cancelTimeout,
174
+ content: /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-3", "data-testid": "typed-interrupt-pm-schedule", children: [
175
+ fields.length > 0 ? /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-1.5 rounded-md border border-border bg-muted/60 p-3", children: fields.map(([key, value]) => /* @__PURE__ */ jsxs("div", { className: "flex gap-2 text-sm", children: [
176
+ /* @__PURE__ */ jsx("span", { className: "w-24 shrink-0 font-medium text-muted-foreground", children: formatKeyAsName(key) }),
177
+ /* @__PURE__ */ jsx("span", { className: "min-w-0 break-words text-foreground", children: value })
178
+ ] }, key)) }) : null,
179
+ showFeedback ? /* @__PURE__ */ jsx(RejectReasonField, { label: "Reason (optional)", value: reason, onChange: setReason, disabled: isLoading }) : /* @__PURE__ */ jsx(AddFeedbackButton, { onClick: () => setShowFeedback(true), className: "w-fit" })
180
+ ] }),
181
+ actions: /* @__PURE__ */ jsxs(Fragment, { children: [
182
+ /* @__PURE__ */ jsx(WaitForStreamingHint, { active: isConversationStreaming, children: /* @__PURE__ */ jsx(
183
+ Button,
184
+ {
185
+ onClick: () => resume(typedApprovalResume({ action: "approve" })),
186
+ disabled: actionsDisabled || reason.trim() !== "",
187
+ className: APPROVE_BUTTON_CLASS,
188
+ children: isLoading ? "Processing..." : "Approve"
189
+ }
190
+ ) }),
191
+ /* @__PURE__ */ jsx(WaitForStreamingHint, { active: isConversationStreaming, children: /* @__PURE__ */ jsx(
192
+ Button,
193
+ {
194
+ variant: "outline",
195
+ onClick: () => resume(typedApprovalResume({ action: "reject", reason: reason || void 0 })),
196
+ disabled: actionsDisabled,
197
+ children: isLoading ? "Processing..." : "Reject"
198
+ }
199
+ ) })
200
+ ] })
201
+ }
202
+ );
203
+ }
204
+ function WaitForMinutesCard({ interrupt, cancel, engine }) {
205
+ const { minutes, reason, timeoutSeconds } = readWaitForMinutesContext(interrupt);
206
+ const total = interrupt.timeout_seconds ?? timeoutSeconds ?? minutes * 60;
207
+ const remaining = Math.ceil(engine.timeoutRemaining ?? interruptTimeoutRemaining(interrupt) ?? total);
208
+ const progress = total > 0 ? Math.min(100, Math.max(0, (total - remaining) / total * 100)) : 0;
209
+ const cancelDisabled = engine.isLoading || engine.isConversationStreaming;
210
+ return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-3 rounded-lg border border-border bg-card p-4", "data-testid": "typed-interrupt-wait", children: [
211
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
212
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
213
+ /* @__PURE__ */ jsx(ClockIcon, { className: "size-4 text-blue-500" }),
214
+ /* @__PURE__ */ jsx("span", { className: "font-medium text-foreground text-sm", children: reason ?? `Waiting for ${minutes} minute${minutes !== 1 ? "s" : ""}` })
215
+ ] }),
216
+ /* @__PURE__ */ jsxs(
217
+ "button",
218
+ {
219
+ type: "button",
220
+ onClick: cancel,
221
+ disabled: cancelDisabled,
222
+ className: "flex items-center gap-1 rounded-md px-2 py-1 font-medium text-muted-foreground text-xs transition-colors hover:bg-muted hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50",
223
+ children: [
224
+ /* @__PURE__ */ jsx(XIcon, { className: "size-3" }),
225
+ "Cancel"
226
+ ]
227
+ }
228
+ )
229
+ ] }),
230
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
231
+ /* @__PURE__ */ jsx("div", { className: "h-1.5 flex-1 overflow-hidden rounded-full bg-muted", children: /* @__PURE__ */ jsx(
232
+ "div",
233
+ {
234
+ className: "h-full rounded-full bg-blue-500 transition-all duration-1000 ease-linear",
235
+ style: { width: `${progress}%` }
236
+ }
237
+ ) }),
238
+ /* @__PURE__ */ jsx("span", { className: "font-mono text-muted-foreground text-xs tabular-nums", children: formatSecondsForDisplay(remaining) })
239
+ ] })
240
+ ] });
241
+ }
242
+ export {
243
+ APPROVE_BUTTON_CLASS,
244
+ AddFeedbackButton,
245
+ BrowseProfileApprovalCard,
246
+ PmScheduleApprovalCard,
247
+ RejectReasonField,
248
+ WaitForMinutesCard
249
+ };
250
+ //# sourceMappingURL=approval-cards.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approval-cards.js","sources":["../../../src/chat/typed-interrupts/approval-cards.tsx"],"sourcesContent":["/**\n * The approval-shaped `custom` parks, each a decision only a person makes\n * (`isTypedApprovalInterrupt`): a saved login the agent asks to use (Olympus's\n * `BrowseProfileApprovalInterruptUi`) and a project manager's schedule\n * (`PMScheduleApprovalInterruptUi`). The engine confirms an approve with the\n * host's passkey check and agora holds it to a signed-in person; a refusal's\n * reason shows on the card. Also the wait a tool announced\n * (`WaitForMinutesInterruptUi`), whose only answer is Cancel.\n */\nimport {\n browseProfileApprovalResume,\n interruptTimeoutRemaining,\n readBrowseProfileApprovalContext,\n readPmScheduleApprovalContext,\n readWaitForMinutesContext,\n typedApprovalResume,\n} from '@athenaintel/agent-runtime/typed-interrupt-kinds';\nimport {\n CalendarIcon,\n CheckCheckIcon,\n ClockIcon,\n ExternalLinkIcon,\n KeyRoundIcon,\n MessageSquareIcon,\n ShieldCheckIcon,\n XIcon,\n} from 'lucide-react';\nimport { type MouseEvent, useContext, useId, useState } from 'react';\nimport { MentionAuthCtx } from '../../chat-ui/mentions/suggestions/data/api-client';\nimport { useMentionAsset } from '../../chat-ui/mentions/use-mention-asset';\nimport { createAthenaSpacesUrl } from '../../lib/athena-urls';\nimport { cn } from '../../lib/utils';\nimport { Button } from '../../ui/button';\nimport { useAthenaLinkClickHandler } from '../athena-citation-links';\nimport {\n formatKeyAsName,\n formatSecondsForDisplay,\n InterruptCardShell,\n WaitForStreamingHint,\n} from './interrupt-card-shell';\nimport type { TypedInterruptCardProps } from './typed-interrupt-types';\n\nconst SCOPE_COPY: Record<string, string> = {\n session: 'for this browser session',\n attempt: 'for this one action',\n};\n\nconst PROFILE_TITLE_FALLBACK = 'Browse profile';\n\n/** A link to an asset in Athena on the web, opened through the host's link handling (an asset tab, a panel). */\nfunction AssetLink({ assetId, children }: { assetId: string; children: string }) {\n const auth = useContext(MentionAuthCtx);\n const handleLinkClick = useAthenaLinkClickHandler();\n const href = createAthenaSpacesUrl({ ...(auth?.appUrl ? { appUrl: auth.appUrl } : {}), assetIds: assetId });\n const onClick = (event: MouseEvent<HTMLAnchorElement>) => {\n if (event.button !== 0 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) return;\n const handled = handleLinkClick({\n href,\n linkText: children,\n target: event.currentTarget.target,\n nativeEvent: event.nativeEvent,\n });\n if (handled) event.preventDefault();\n };\n return (\n <a\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onClick={onClick}\n className=\"inline-flex w-fit items-center gap-1 text-muted-foreground text-xs hover:text-foreground hover:underline\"\n >\n <ExternalLinkIcon className=\"size-3\" />\n {children}\n </a>\n );\n}\n\nfunction BrowseProfileRow({ assetId, scope }: { assetId: string; scope: string | null }) {\n // The title as agora has it, only for a profile the viewer may read.\n const asset = useMentionAsset(assetId);\n return (\n <div className=\"flex items-center gap-3 px-3 py-2\">\n <div\n aria-hidden\n className=\"flex size-8 shrink-0 items-center justify-center rounded-md border border-border bg-muted text-muted-foreground\"\n >\n <KeyRoundIcon className=\"size-4\" />\n </div>\n <div className=\"flex min-w-0 flex-1 flex-col\">\n <span className=\"truncate font-medium text-foreground text-sm\">{asset?.title || PROFILE_TITLE_FALLBACK}</span>\n <AssetLink assetId={assetId}>Open in Spaces</AssetLink>\n </div>\n {scope ? (\n <span className=\"shrink-0 rounded-full bg-muted px-2 py-0.5 text-foreground text-xs\">\n Allow {SCOPE_COPY[scope] ?? scope}\n </span>\n ) : null}\n </div>\n );\n}\n\nexport function BrowseProfileApprovalCard({ interrupt, resume, engine }: TypedInterruptCardProps) {\n const { isLoading, hasTimeout, cancelTimeout, isConversationStreaming } = engine;\n const actionsDisabled = isLoading || isConversationStreaming;\n const { profiles, sessionApprovalAllowed } = readBrowseProfileApprovalContext(interrupt);\n return (\n <InterruptCardShell\n title=\"Browse Profile Approval\"\n description=\"The agent wants to use a saved login that requires your approval\"\n icon={<ShieldCheckIcon />}\n hasTimeout={hasTimeout}\n onInteraction={cancelTimeout}\n content={\n <div className=\"flex flex-col gap-3\" data-testid=\"typed-interrupt-browse-profile\">\n <p className=\"font-medium text-foreground text-sm\">\n {profiles.length > 1 ? 'Browse profiles requested:' : 'Browse profile requested:'}\n </p>\n <div className=\"divide-y divide-border rounded-md border border-border bg-background\">\n {profiles.map((profile) => (\n <BrowseProfileRow\n key={profile.profile_asset_id}\n assetId={profile.profile_asset_id}\n scope={profile.approval_scope}\n />\n ))}\n </div>\n <p className=\"text-muted-foreground text-xs\">\n Only the profile owner or an admin can approve. Approving lets the agent use this login&apos;s saved\n cookies; you won&apos;t be re-prompted for the granted scope.\n </p>\n </div>\n }\n actions={\n <>\n <WaitForStreamingHint active={isConversationStreaming}>\n <Button onClick={() => resume(browseProfileApprovalResume({ action: 'approve' }))} disabled={actionsDisabled}>\n {isLoading ? 'Processing...' : 'Approve'}\n </Button>\n </WaitForStreamingHint>\n {sessionApprovalAllowed ? (\n <WaitForStreamingHint active={isConversationStreaming}>\n <Button\n variant=\"outline\"\n onClick={() => resume(browseProfileApprovalResume({ action: 'approve', forSession: true }))}\n disabled={actionsDisabled}\n data-testid=\"browse-profile-approve-session\"\n >\n <CheckCheckIcon />\n Approve all for this session\n </Button>\n </WaitForStreamingHint>\n ) : null}\n <WaitForStreamingHint active={isConversationStreaming}>\n <Button\n variant=\"outline\"\n onClick={() => resume(browseProfileApprovalResume({ action: 'reject' }))}\n disabled={actionsDisabled}\n >\n Reject\n </Button>\n </WaitForStreamingHint>\n </>\n }\n />\n );\n}\n\nconst TEXTAREA_CLASS =\n 'mt-1 w-full resize-y rounded-md border border-input bg-background px-3 py-2 text-foreground text-sm shadow-xs outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50';\n\n/** The optional reason a reject carries, behind \"Add feedback\". */\nexport function RejectReasonField({\n label,\n value,\n onChange,\n disabled,\n placeholder = \"Explain why you're rejecting this action...\",\n}: {\n label: string;\n value: string;\n onChange: (value: string) => void;\n disabled: boolean;\n placeholder?: string;\n}) {\n const id = useId();\n return (\n <div>\n <label htmlFor={id} className=\"font-medium text-foreground text-sm\">\n {label}\n </label>\n <textarea\n id={id}\n value={value}\n onChange={(event) => onChange(event.target.value)}\n placeholder={placeholder}\n rows={2}\n disabled={disabled}\n className={TEXTAREA_CLASS}\n />\n </div>\n );\n}\n\nexport function AddFeedbackButton({ onClick, className }: { onClick: () => void; className?: string }) {\n return (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={onClick}\n className={cn('h-auto px-0 py-0 text-muted-foreground text-xs hover:text-foreground', className)}\n >\n <MessageSquareIcon className=\"size-3\" />\n Add feedback\n </Button>\n );\n}\n\n/** Approve's green, as Olympus's approval cards draw it. */\nexport const APPROVE_BUTTON_CLASS = 'bg-green-600 text-white transition-colors hover:bg-green-700';\n\nexport function PmScheduleApprovalCard({ interrupt, resume, engine }: TypedInterruptCardProps) {\n const [reason, setReason] = useState('');\n const [showFeedback, setShowFeedback] = useState(false);\n const { isLoading, hasTimeout, cancelTimeout, isConversationStreaming } = engine;\n const actionsDisabled = isLoading || isConversationStreaming;\n const { action, fields } = readPmScheduleApprovalContext(interrupt);\n return (\n <InterruptCardShell\n title={`Approve Schedule ${action === 'delete' ? 'Deletion' : 'Creation'}?`}\n description={interrupt.message}\n icon={<CalendarIcon />}\n hasTimeout={hasTimeout}\n onInteraction={cancelTimeout}\n content={\n <div className=\"flex flex-col gap-3\" data-testid=\"typed-interrupt-pm-schedule\">\n {fields.length > 0 ? (\n <div className=\"flex flex-col gap-1.5 rounded-md border border-border bg-muted/60 p-3\">\n {fields.map(([key, value]) => (\n <div key={key} className=\"flex gap-2 text-sm\">\n <span className=\"w-24 shrink-0 font-medium text-muted-foreground\">{formatKeyAsName(key)}</span>\n <span className=\"min-w-0 break-words text-foreground\">{value}</span>\n </div>\n ))}\n </div>\n ) : null}\n {showFeedback ? (\n <RejectReasonField label=\"Reason (optional)\" value={reason} onChange={setReason} disabled={isLoading} />\n ) : (\n <AddFeedbackButton onClick={() => setShowFeedback(true)} className=\"w-fit\" />\n )}\n </div>\n }\n actions={\n <>\n <WaitForStreamingHint active={isConversationStreaming}>\n <Button\n onClick={() => resume(typedApprovalResume({ action: 'approve' }))}\n disabled={actionsDisabled || reason.trim() !== ''}\n className={APPROVE_BUTTON_CLASS}\n >\n {isLoading ? 'Processing...' : 'Approve'}\n </Button>\n </WaitForStreamingHint>\n <WaitForStreamingHint active={isConversationStreaming}>\n <Button\n variant=\"outline\"\n onClick={() => resume(typedApprovalResume({ action: 'reject', reason: reason || undefined }))}\n disabled={actionsDisabled}\n >\n {isLoading ? 'Processing...' : 'Reject'}\n </Button>\n </WaitForStreamingHint>\n </>\n }\n />\n );\n}\n\n/**\n * The wait `wait_for_minutes` announced: a countdown the backend's timer\n * resumes on its own, so the only answer is Cancel, which ends the wait early.\n */\nexport function WaitForMinutesCard({ interrupt, cancel, engine }: TypedInterruptCardProps) {\n const { minutes, reason, timeoutSeconds } = readWaitForMinutesContext(interrupt);\n const total = interrupt.timeout_seconds ?? timeoutSeconds ?? minutes * 60;\n // The engine ticks every second; the first frame reads the deadline itself.\n const remaining = Math.ceil(engine.timeoutRemaining ?? interruptTimeoutRemaining(interrupt) ?? total);\n const progress = total > 0 ? Math.min(100, Math.max(0, ((total - remaining) / total) * 100)) : 0;\n const cancelDisabled = engine.isLoading || engine.isConversationStreaming;\n return (\n <div className=\"flex flex-col gap-3 rounded-lg border border-border bg-card p-4\" data-testid=\"typed-interrupt-wait\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <ClockIcon className=\"size-4 text-blue-500\" />\n <span className=\"font-medium text-foreground text-sm\">\n {reason ?? `Waiting for ${minutes} minute${minutes !== 1 ? 's' : ''}`}\n </span>\n </div>\n <button\n type=\"button\"\n onClick={cancel}\n disabled={cancelDisabled}\n className=\"flex items-center gap-1 rounded-md px-2 py-1 font-medium text-muted-foreground text-xs transition-colors hover:bg-muted hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50\"\n >\n <XIcon className=\"size-3\" />\n Cancel\n </button>\n </div>\n <div className=\"flex items-center gap-3\">\n <div className=\"h-1.5 flex-1 overflow-hidden rounded-full bg-muted\">\n <div\n className=\"h-full rounded-full bg-blue-500 transition-all duration-1000 ease-linear\"\n style={{ width: `${progress}%` }}\n />\n </div>\n <span className=\"font-mono text-muted-foreground text-xs tabular-nums\">\n {formatSecondsForDisplay(remaining)}\n </span>\n </div>\n </div>\n );\n}\n"],"names":[],"mappings":"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"}