@athenaintel/react 0.41.3 → 0.42.1

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 (439) hide show
  1. package/README.md +102 -9
  2. package/dist/agent-runtime/src/asset-attachment.d.ts +98 -0
  3. package/dist/agent-runtime/src/athena-asset-drag.d.ts +32 -0
  4. package/dist/agent-runtime/src/auth-denial.d.ts +29 -0
  5. package/dist/agent-runtime/src/chat-outbox-attachments.cjs +41 -0
  6. package/dist/agent-runtime/src/chat-outbox-attachments.cjs.map +1 -0
  7. package/dist/agent-runtime/src/chat-outbox-attachments.d.ts +38 -0
  8. package/dist/agent-runtime/src/chat-outbox-attachments.js +41 -0
  9. package/dist/agent-runtime/src/chat-outbox-attachments.js.map +1 -0
  10. package/dist/agent-runtime/src/chat-outbox-signals.cjs +63 -0
  11. package/dist/agent-runtime/src/chat-outbox-signals.cjs.map +1 -0
  12. package/dist/agent-runtime/src/chat-outbox-signals.d.ts +12 -0
  13. package/dist/agent-runtime/src/chat-outbox-signals.js +63 -0
  14. package/dist/agent-runtime/src/chat-outbox-signals.js.map +1 -0
  15. package/dist/agent-runtime/src/chat-outbox-store.cjs +509 -0
  16. package/dist/agent-runtime/src/chat-outbox-store.cjs.map +1 -0
  17. package/dist/agent-runtime/src/chat-outbox-store.d.ts +203 -0
  18. package/dist/agent-runtime/src/chat-outbox-store.js +509 -0
  19. package/dist/agent-runtime/src/chat-outbox-store.js.map +1 -0
  20. package/dist/agent-runtime/src/chat-outbox-thread.cjs +136 -0
  21. package/dist/agent-runtime/src/chat-outbox-thread.cjs.map +1 -0
  22. package/dist/agent-runtime/src/chat-outbox-thread.d.ts +118 -0
  23. package/dist/agent-runtime/src/chat-outbox-thread.js +136 -0
  24. package/dist/agent-runtime/src/chat-outbox-thread.js.map +1 -0
  25. package/dist/agent-runtime/src/chat-outbox.cjs +696 -0
  26. package/dist/agent-runtime/src/chat-outbox.cjs.map +1 -0
  27. package/dist/agent-runtime/src/chat-outbox.d.ts +285 -0
  28. package/dist/agent-runtime/src/chat-outbox.js +696 -0
  29. package/dist/agent-runtime/src/chat-outbox.js.map +1 -0
  30. package/dist/agent-runtime/src/chat-socket-reachability.d.ts +45 -0
  31. package/dist/agent-runtime/src/client-tool-bridge.d.ts +152 -0
  32. package/dist/agent-runtime/src/client-tools.d.ts +133 -0
  33. package/dist/agent-runtime/src/composer-markdown.cjs +10 -0
  34. package/dist/agent-runtime/src/composer-markdown.cjs.map +1 -1
  35. package/dist/agent-runtime/src/composer-markdown.d.ts +108 -0
  36. package/dist/agent-runtime/src/composer-markdown.js +10 -0
  37. package/dist/agent-runtime/src/composer-markdown.js.map +1 -1
  38. package/dist/agent-runtime/src/config-mutations.d.ts +51 -0
  39. package/dist/agent-runtime/src/conversation-index.d.ts +110 -0
  40. package/dist/agent-runtime/src/conversation-list.d.ts +343 -0
  41. package/dist/agent-runtime/src/deep-agent-transport-recipe.cjs +3 -2
  42. package/dist/agent-runtime/src/deep-agent-transport-recipe.cjs.map +1 -1
  43. package/dist/agent-runtime/src/deep-agent-transport-recipe.d.ts +166 -0
  44. package/dist/agent-runtime/src/deep-agent-transport-recipe.js +3 -2
  45. package/dist/agent-runtime/src/deep-agent-transport-recipe.js.map +1 -1
  46. package/dist/agent-runtime/src/desktop-handoff.d.ts +139 -0
  47. package/dist/agent-runtime/src/durable-thread-snapshot-cache.d.ts +60 -0
  48. package/dist/agent-runtime/src/edit-command.d.ts +156 -0
  49. package/dist/agent-runtime/src/errors.d.ts +174 -0
  50. package/dist/agent-runtime/src/execute-output.d.ts +31 -0
  51. package/dist/agent-runtime/src/generated/runconfig-contract.cjs +16 -2
  52. package/dist/agent-runtime/src/generated/runconfig-contract.cjs.map +1 -1
  53. package/dist/agent-runtime/src/generated/runconfig-contract.d.ts +202 -0
  54. package/dist/agent-runtime/src/generated/runconfig-contract.js +16 -2
  55. package/dist/agent-runtime/src/generated/runconfig-contract.js.map +1 -1
  56. package/dist/agent-runtime/src/github-wake-event.d.ts +77 -0
  57. package/dist/agent-runtime/src/index.d.ts +74 -0
  58. package/dist/agent-runtime/src/interrupts.cjs +17 -0
  59. package/dist/agent-runtime/src/interrupts.cjs.map +1 -1
  60. package/dist/agent-runtime/src/interrupts.d.ts +348 -0
  61. package/dist/agent-runtime/src/interrupts.js +17 -0
  62. package/dist/agent-runtime/src/interrupts.js.map +1 -1
  63. package/dist/agent-runtime/src/lane-follow.d.ts +121 -0
  64. package/dist/agent-runtime/src/lane-history.cjs +209 -0
  65. package/dist/agent-runtime/src/lane-history.cjs.map +1 -0
  66. package/dist/agent-runtime/src/lane-history.d.ts +175 -0
  67. package/dist/agent-runtime/src/lane-history.js +209 -0
  68. package/dist/agent-runtime/src/lane-history.js.map +1 -0
  69. package/dist/agent-runtime/src/lane-images.d.ts +184 -0
  70. package/dist/agent-runtime/src/message-author.d.ts +43 -0
  71. package/dist/agent-runtime/src/message-text.cjs +15 -0
  72. package/dist/agent-runtime/src/message-text.cjs.map +1 -0
  73. package/dist/agent-runtime/src/message-text.d.ts +47 -0
  74. package/dist/agent-runtime/src/message-text.js +15 -0
  75. package/dist/agent-runtime/src/message-text.js.map +1 -0
  76. package/dist/agent-runtime/src/message-window.cjs +15 -1
  77. package/dist/agent-runtime/src/message-window.cjs.map +1 -1
  78. package/dist/agent-runtime/src/message-window.d.ts +159 -0
  79. package/dist/agent-runtime/src/message-window.js +16 -2
  80. package/dist/agent-runtime/src/message-window.js.map +1 -1
  81. package/dist/agent-runtime/src/messages.cjs +88 -4
  82. package/dist/agent-runtime/src/messages.cjs.map +1 -1
  83. package/dist/agent-runtime/src/messages.d.ts +603 -0
  84. package/dist/agent-runtime/src/messages.js +88 -4
  85. package/dist/agent-runtime/src/messages.js.map +1 -1
  86. package/dist/agent-runtime/src/model-context.d.ts +22 -0
  87. package/dist/agent-runtime/src/offline-status.d.ts +157 -0
  88. package/dist/agent-runtime/src/optimistic-content.d.ts +21 -0
  89. package/dist/agent-runtime/src/protocol.cjs +12 -4
  90. package/dist/agent-runtime/src/protocol.cjs.map +1 -1
  91. package/dist/agent-runtime/src/protocol.d.ts +119 -0
  92. package/dist/agent-runtime/src/protocol.js +13 -5
  93. package/dist/agent-runtime/src/protocol.js.map +1 -1
  94. package/dist/agent-runtime/src/ptc-subcalls.d.ts +51 -0
  95. package/dist/agent-runtime/src/queue.d.ts +138 -0
  96. package/dist/agent-runtime/src/quota-safe-local-storage-session.d.ts +154 -0
  97. package/dist/agent-runtime/src/running-tool-placeholder.cjs +11 -0
  98. package/dist/agent-runtime/src/running-tool-placeholder.cjs.map +1 -0
  99. package/dist/agent-runtime/src/running-tool-placeholder.d.ts +25 -0
  100. package/dist/agent-runtime/src/running-tool-placeholder.js +11 -0
  101. package/dist/agent-runtime/src/running-tool-placeholder.js.map +1 -0
  102. package/dist/agent-runtime/src/runtime-messages.d.ts +104 -0
  103. package/dist/agent-runtime/src/screen-point.d.ts +151 -0
  104. package/dist/agent-runtime/src/sealed-idb.cjs +112 -0
  105. package/dist/agent-runtime/src/sealed-idb.cjs.map +1 -0
  106. package/dist/agent-runtime/src/sealed-idb.d.ts +106 -0
  107. package/dist/agent-runtime/src/sealed-idb.js +112 -0
  108. package/dist/agent-runtime/src/sealed-idb.js.map +1 -0
  109. package/dist/agent-runtime/src/send-recovery.d.ts +40 -0
  110. package/dist/agent-runtime/src/statewire-attach-observer.d.ts +194 -0
  111. package/dist/agent-runtime/src/statewire-diagnostics.d.ts +74 -0
  112. package/dist/agent-runtime/src/statewire-state.d.ts +29 -0
  113. package/dist/agent-runtime/src/statewire-suspended.cjs.map +1 -1
  114. package/dist/agent-runtime/src/statewire-suspended.d.ts +27 -0
  115. package/dist/agent-runtime/src/statewire-suspended.js.map +1 -1
  116. package/dist/agent-runtime/src/statewire-transport.d.ts +40 -0
  117. package/dist/agent-runtime/src/streaming-markdown.d.ts +46 -0
  118. package/dist/agent-runtime/src/subagent-transcripts.cjs +209 -0
  119. package/dist/agent-runtime/src/subagent-transcripts.cjs.map +1 -0
  120. package/dist/agent-runtime/src/subagent-transcripts.d.ts +71 -0
  121. package/dist/agent-runtime/src/subagent-transcripts.js +209 -0
  122. package/dist/agent-runtime/src/subagent-transcripts.js.map +1 -0
  123. package/dist/agent-runtime/src/subagents.cjs +253 -0
  124. package/dist/agent-runtime/src/subagents.cjs.map +1 -0
  125. package/dist/agent-runtime/src/subagents.d.ts +311 -0
  126. package/dist/agent-runtime/src/subagents.js +253 -0
  127. package/dist/agent-runtime/src/subagents.js.map +1 -0
  128. package/dist/agent-runtime/src/subscription-wake-event.d.ts +111 -0
  129. package/dist/agent-runtime/src/thread-extras.d.ts +43 -0
  130. package/dist/agent-runtime/src/thread-handoff.d.ts +364 -0
  131. package/dist/agent-runtime/src/thread-prewarm-controller.d.ts +76 -0
  132. package/dist/agent-runtime/src/thread-prewarm.d.ts +118 -0
  133. package/dist/agent-runtime/src/thread-snapshot-cache.d.ts +99 -0
  134. package/dist/agent-runtime/src/thread-snapshot-mirror.cjs +46 -117
  135. package/dist/agent-runtime/src/thread-snapshot-mirror.cjs.map +1 -1
  136. package/dist/agent-runtime/src/thread-snapshot-mirror.d.ts +101 -0
  137. package/dist/agent-runtime/src/thread-snapshot-mirror.js +17 -88
  138. package/dist/agent-runtime/src/thread-snapshot-mirror.js.map +1 -1
  139. package/dist/agent-runtime/src/thread-status.d.ts +53 -0
  140. package/dist/agent-runtime/src/tool-metadata.d.ts +146 -0
  141. package/dist/agent-runtime/src/tool-names.cjs +67 -0
  142. package/dist/agent-runtime/src/tool-names.cjs.map +1 -1
  143. package/dist/agent-runtime/src/tool-names.d.ts +60 -0
  144. package/dist/agent-runtime/src/tool-names.js +68 -1
  145. package/dist/agent-runtime/src/tool-names.js.map +1 -1
  146. package/dist/agent-runtime/src/tool-outputs.d.ts +35 -0
  147. package/dist/agent-runtime/src/tool-result.cjs +1 -0
  148. package/dist/agent-runtime/src/tool-result.cjs.map +1 -1
  149. package/dist/agent-runtime/src/tool-result.d.ts +126 -0
  150. package/dist/agent-runtime/src/tool-result.js +1 -0
  151. package/dist/agent-runtime/src/tool-result.js.map +1 -1
  152. package/dist/agent-runtime/src/types.d.ts +159 -0
  153. package/dist/agent-runtime/src/use-conversation-list.d.ts +76 -0
  154. package/dist/agent-runtime/src/use-deep-agent-chat-outbox.cjs +136 -0
  155. package/dist/agent-runtime/src/use-deep-agent-chat-outbox.cjs.map +1 -0
  156. package/dist/agent-runtime/src/use-deep-agent-chat-outbox.d.ts +64 -0
  157. package/dist/agent-runtime/src/use-deep-agent-chat-outbox.js +136 -0
  158. package/dist/agent-runtime/src/use-deep-agent-chat-outbox.js.map +1 -0
  159. package/dist/agent-runtime/src/use-deep-agent-config.d.ts +169 -0
  160. package/dist/agent-runtime/src/use-deep-agent-edit-submit.cjs +13 -0
  161. package/dist/agent-runtime/src/use-deep-agent-edit-submit.cjs.map +1 -1
  162. package/dist/agent-runtime/src/use-deep-agent-edit-submit.d.ts +22 -0
  163. package/dist/agent-runtime/src/use-deep-agent-edit-submit.js +13 -0
  164. package/dist/agent-runtime/src/use-deep-agent-edit-submit.js.map +1 -1
  165. package/dist/agent-runtime/src/use-deep-agent-runtime.cjs +20 -2
  166. package/dist/agent-runtime/src/use-deep-agent-runtime.cjs.map +1 -1
  167. package/dist/agent-runtime/src/use-deep-agent-runtime.d.ts +168 -0
  168. package/dist/agent-runtime/src/use-deep-agent-runtime.js +20 -2
  169. package/dist/agent-runtime/src/use-deep-agent-runtime.js.map +1 -1
  170. package/dist/agent-runtime/src/use-deep-agent-thread.cjs +12 -4
  171. package/dist/agent-runtime/src/use-deep-agent-thread.cjs.map +1 -1
  172. package/dist/agent-runtime/src/use-deep-agent-thread.d.ts +320 -0
  173. package/dist/agent-runtime/src/use-deep-agent-thread.js +12 -4
  174. package/dist/agent-runtime/src/use-deep-agent-thread.js.map +1 -1
  175. package/dist/agent-runtime/src/use-deep-agent-voice.cjs +999 -0
  176. package/dist/agent-runtime/src/use-deep-agent-voice.cjs.map +1 -0
  177. package/dist/agent-runtime/src/use-deep-agent-voice.d.ts +409 -0
  178. package/dist/agent-runtime/src/use-deep-agent-voice.js +999 -0
  179. package/dist/agent-runtime/src/use-deep-agent-voice.js.map +1 -0
  180. package/dist/agent-runtime/src/use-deep-agent-window-sync.d.ts +102 -0
  181. package/dist/agent-runtime/src/use-historical-edit-attachments.d.ts +2 -0
  182. package/dist/agent-runtime/src/use-thread-handoff-flow.d.ts +84 -0
  183. package/dist/agent-runtime/src/voice-presentation.d.ts +80 -0
  184. package/dist/agent-runtime/src/voice-turn-grouping.d.ts +28 -0
  185. package/dist/agent-runtime/src/voice-wire-types.d.ts +15 -0
  186. package/dist/agent-runtime/src/withdrawn-turns.d.ts +97 -0
  187. package/dist/chat/AthenaChat.cjs +72 -5
  188. package/dist/chat/AthenaChat.cjs.map +1 -1
  189. package/dist/chat/AthenaChat.js +73 -6
  190. package/dist/chat/AthenaChat.js.map +1 -1
  191. package/dist/chat/StatewireApprovalCard.d.ts +1 -1
  192. package/dist/chat/StatewireClientToolBridge.d.ts +1 -1
  193. package/dist/chat/StatewireQueuedMessages.cjs +11 -4
  194. package/dist/chat/StatewireQueuedMessages.cjs.map +1 -1
  195. package/dist/chat/StatewireQueuedMessages.d.ts +1 -1
  196. package/dist/chat/StatewireQueuedMessages.js +11 -4
  197. package/dist/chat/StatewireQueuedMessages.js.map +1 -1
  198. package/dist/chat/chat-outbox-rows.cjs +223 -0
  199. package/dist/chat/chat-outbox-rows.cjs.map +1 -0
  200. package/dist/chat/chat-outbox-rows.d.ts +29 -0
  201. package/dist/chat/chat-outbox-rows.js +223 -0
  202. package/dist/chat/chat-outbox-rows.js.map +1 -0
  203. package/dist/chat/statewire-approval.d.ts +1 -1
  204. package/dist/chat/statewire-client-tools.d.ts +1 -1
  205. package/dist/chat/super-grouping/SuperGroupingCard.cjs +3 -1
  206. package/dist/chat/super-grouping/SuperGroupingCard.cjs.map +1 -1
  207. package/dist/chat/super-grouping/SuperGroupingCard.d.ts +7 -1
  208. package/dist/chat/super-grouping/SuperGroupingCard.js +3 -1
  209. package/dist/chat/super-grouping/SuperGroupingCard.js.map +1 -1
  210. package/dist/chat/super-grouping/SuperGroupingTranscript.cjs +7 -2
  211. package/dist/chat/super-grouping/SuperGroupingTranscript.cjs.map +1 -1
  212. package/dist/chat/super-grouping/SuperGroupingTranscript.d.ts +2 -2
  213. package/dist/chat/super-grouping/SuperGroupingTranscript.js +7 -2
  214. package/dist/chat/super-grouping/SuperGroupingTranscript.js.map +1 -1
  215. package/dist/chat/super-grouping/activity-timeline.cjs +15 -8
  216. package/dist/chat/super-grouping/activity-timeline.cjs.map +1 -1
  217. package/dist/chat/super-grouping/activity-timeline.d.ts +18 -8
  218. package/dist/chat/super-grouping/activity-timeline.js +15 -8
  219. package/dist/chat/super-grouping/activity-timeline.js.map +1 -1
  220. package/dist/chat/use-statewire-approval-request.cjs +36 -0
  221. package/dist/chat/use-statewire-approval-request.cjs.map +1 -1
  222. package/dist/chat/use-statewire-approval-request.d.ts +49 -1
  223. package/dist/chat/use-statewire-approval-request.js +39 -3
  224. package/dist/chat/use-statewire-approval-request.js.map +1 -1
  225. package/dist/chat-ui/composer/tiptap-composer.cjs +102 -3
  226. package/dist/chat-ui/composer/tiptap-composer.cjs.map +1 -1
  227. package/dist/chat-ui/composer/tiptap-composer.d.ts +32 -1
  228. package/dist/chat-ui/composer/tiptap-composer.js +103 -4
  229. package/dist/chat-ui/composer/tiptap-composer.js.map +1 -1
  230. package/dist/chat-ui/header/conversation-history-panel.d.ts +1 -1
  231. package/dist/chat-ui/index.d.ts +1 -1
  232. package/dist/chat-ui/messages/message-components.cjs +15 -0
  233. package/dist/chat-ui/messages/message-components.cjs.map +1 -1
  234. package/dist/chat-ui/messages/message-components.js +15 -0
  235. package/dist/chat-ui/messages/message-components.js.map +1 -1
  236. package/dist/chat-ui/messages/runtime-message.d.ts +1 -1
  237. package/dist/chat-ui/messages/statewire-continue-run.d.ts +1 -1
  238. package/dist/chat-ui/messages/user-edit-composer.cjs +15 -2
  239. package/dist/chat-ui/messages/user-edit-composer.cjs.map +1 -1
  240. package/dist/chat-ui/messages/user-edit-composer.d.ts +4 -2
  241. package/dist/chat-ui/messages/user-edit-composer.js +15 -2
  242. package/dist/chat-ui/messages/user-edit-composer.js.map +1 -1
  243. package/dist/chat-ui/messages/wake-marker.d.ts +1 -1
  244. package/dist/chat-ui/rich-text/chat-text-schema.cjs +1 -0
  245. package/dist/chat-ui/rich-text/chat-text-schema.cjs.map +1 -1
  246. package/dist/chat-ui/rich-text/chat-text-schema.d.ts +3 -0
  247. package/dist/chat-ui/rich-text/chat-text-schema.js +1 -0
  248. package/dist/chat-ui/rich-text/chat-text-schema.js.map +1 -1
  249. package/dist/chat-ui/statewire.cjs +1 -0
  250. package/dist/chat-ui/statewire.cjs.map +1 -1
  251. package/dist/chat-ui/statewire.d.ts +2 -2
  252. package/dist/chat-ui/statewire.js +2 -1
  253. package/dist/chat-ui/thread/statewire-history-edge.d.ts +1 -1
  254. package/dist/composer/AttachmentContext.cjs +8 -4
  255. package/dist/composer/AttachmentContext.cjs.map +1 -1
  256. package/dist/composer/AttachmentContext.d.ts +7 -0
  257. package/dist/composer/AttachmentContext.js +8 -4
  258. package/dist/composer/AttachmentContext.js.map +1 -1
  259. package/dist/composer/build-composed-message.cjs +34 -0
  260. package/dist/composer/build-composed-message.cjs.map +1 -1
  261. package/dist/composer/build-composed-message.d.ts +20 -0
  262. package/dist/composer/build-composed-message.js +35 -1
  263. package/dist/composer/build-composed-message.js.map +1 -1
  264. package/dist/composer/composer-handoff.cjs +39 -2
  265. package/dist/composer/composer-handoff.cjs.map +1 -1
  266. package/dist/composer/composer-handoff.d.ts +28 -3
  267. package/dist/composer/composer-handoff.js +39 -2
  268. package/dist/composer/composer-handoff.js.map +1 -1
  269. package/dist/composer/useAttachFiles.cjs +15 -2
  270. package/dist/composer/useAttachFiles.cjs.map +1 -1
  271. package/dist/composer/useAttachFiles.d.ts +11 -0
  272. package/dist/composer/useAttachFiles.js +15 -2
  273. package/dist/composer/useAttachFiles.js.map +1 -1
  274. package/dist/composer/useSendMessage.cjs.map +1 -1
  275. package/dist/composer/useSendMessage.d.ts +4 -3
  276. package/dist/composer/useSendMessage.js.map +1 -1
  277. package/dist/diagnostics/athena-diagnostics.cjs.map +1 -1
  278. package/dist/diagnostics/athena-diagnostics.d.ts +3 -1
  279. package/dist/diagnostics/athena-diagnostics.js.map +1 -1
  280. package/dist/index.cjs +13 -0
  281. package/dist/index.cjs.map +1 -1
  282. package/dist/index.d.ts +13 -6
  283. package/dist/index.js +14 -1
  284. package/dist/index.js.map +1 -1
  285. package/dist/offline/chat-outbox.cjs +57 -0
  286. package/dist/offline/chat-outbox.cjs.map +1 -0
  287. package/dist/offline/chat-outbox.d.ts +80 -0
  288. package/dist/offline/chat-outbox.js +57 -0
  289. package/dist/offline/chat-outbox.js.map +1 -0
  290. package/dist/offline/offline-history.d.ts +1 -1
  291. package/dist/provider/AthenaProvider.cjs +162 -8
  292. package/dist/provider/AthenaProvider.cjs.map +1 -1
  293. package/dist/provider/AthenaProvider.d.ts +15 -1
  294. package/dist/provider/AthenaProvider.js +163 -9
  295. package/dist/provider/AthenaProvider.js.map +1 -1
  296. package/dist/provider/statewire-window-context.d.ts +1 -1
  297. package/dist/react/package.json.cjs +1 -1
  298. package/dist/react/package.json.js +1 -1
  299. package/dist/references/src/anchors/file-line-range.d.ts +58 -0
  300. package/dist/references/src/anchors/format.d.ts +21 -0
  301. package/dist/references/src/anchors/message-anchors.d.ts +71 -0
  302. package/dist/references/src/anchors/parse.d.ts +8 -0
  303. package/dist/references/src/anchors/registry-contract.d.ts +24 -0
  304. package/dist/references/src/anchors/registry.d.ts +19 -0
  305. package/dist/references/src/anchors/schemas.d.ts +194 -0
  306. package/dist/references/src/anchors/serialize.d.ts +8 -0
  307. package/dist/references/src/anchors/time.d.ts +78 -0
  308. package/dist/references/src/anchors/types.d.ts +474 -0
  309. package/dist/references/src/asset-bounds.d.ts +27 -0
  310. package/dist/references/src/asset-links.d.ts +23 -0
  311. package/dist/references/src/asset-reference.d.ts +16 -0
  312. package/dist/references/src/formats/format-catalog.d.ts +79 -0
  313. package/dist/references/src/formats/markdown/parse-reference-markdown.d.ts +28 -0
  314. package/dist/references/src/formats/markdown/reference-display-name.d.ts +6 -0
  315. package/dist/references/src/formats/object/asset-object.d.ts +9 -0
  316. package/dist/references/src/formats/object/callable-object.d.ts +6 -0
  317. package/dist/references/src/formats/object/decode-reference-object-payload.d.ts +3 -0
  318. package/dist/references/src/formats/object/external-url-object.d.ts +9 -0
  319. package/dist/references/src/formats/object/group-object.d.ts +9 -0
  320. package/dist/references/src/formats/object/navigation-object.d.ts +9 -0
  321. package/dist/references/src/formats/object/parse-reference-object.d.ts +11 -0
  322. package/dist/references/src/formats/object/person-object.d.ts +9 -0
  323. package/dist/references/src/formats/uri/asset-mention-uri.d.ts +9 -0
  324. package/dist/references/src/formats/uri/asset-spaces-url.d.ts +9 -0
  325. package/dist/references/src/formats/uri/callable-mention-uris.d.ts +9 -0
  326. package/dist/references/src/formats/uri/detect-uri-wire.d.ts +9 -0
  327. package/dist/references/src/formats/uri/group-mention-uri.d.ts +12 -0
  328. package/dist/references/src/formats/uri/navigation-spaces-url.d.ts +14 -0
  329. package/dist/references/src/formats/uri/parse-reference-uri.d.ts +20 -0
  330. package/dist/references/src/formats/uri/person-mention-uri.d.ts +9 -0
  331. package/dist/references/src/formats/uri/template-placeholder.d.ts +12 -0
  332. package/dist/references/src/index.d.ts +47 -0
  333. package/dist/references/src/legacy/index.d.ts +14 -0
  334. package/dist/references/src/legacy/pre-reference-asset-url.d.ts +57 -0
  335. package/dist/references/src/legacy/pre-reference-citation-bridge.d.ts +22 -0
  336. package/dist/references/src/legacy/pre-reference-citation.d.ts +138 -0
  337. package/dist/references/src/legacy/pre-reference-external-url.d.ts +31 -0
  338. package/dist/references/src/legacy/pre-reference-format.d.ts +8 -0
  339. package/dist/references/src/legacy/pre-reference-mention.d.ts +27 -0
  340. package/dist/references/src/legacy/pre-reference-object.d.ts +8 -0
  341. package/dist/references/src/legacy/pre-reference-uri.d.ts +12 -0
  342. package/dist/references/src/legacy.d.ts +2 -0
  343. package/dist/references/src/mention-href-patterns.d.ts +19 -0
  344. package/dist/references/src/mention-node/index.d.ts +5 -0
  345. package/dist/references/src/mention-node/mention-node.d.ts +31 -0
  346. package/dist/references/src/mention-node/resolve-node-attrs.d.ts +27 -0
  347. package/dist/references/src/parse-reference.d.ts +23 -0
  348. package/dist/references/src/schemas.d.ts +463 -0
  349. package/dist/references/src/serialize-reference.d.ts +50 -0
  350. package/dist/references/src/sheet-name.d.ts +10 -0
  351. package/dist/references/src/tool-option-schemas.d.ts +597 -0
  352. package/dist/references/src/types.d.ts +125 -0
  353. package/dist/references/src/version-ref.d.ts +30 -0
  354. package/dist/runtime/statewire-lifecycle.d.ts +1 -1
  355. package/dist/runtime/statewire-model-lane.d.ts +1 -1
  356. package/dist/runtime/statewire-server-lane-context.d.ts +1 -1
  357. package/dist/runtime/statewire-session-key.cjs +7 -0
  358. package/dist/runtime/statewire-session-key.cjs.map +1 -1
  359. package/dist/runtime/statewire-session-key.d.ts +16 -0
  360. package/dist/runtime/statewire-session-key.js +8 -1
  361. package/dist/runtime/statewire-session-key.js.map +1 -1
  362. package/dist/runtime/statewire-session-lane.cjs +48 -0
  363. package/dist/runtime/statewire-session-lane.cjs.map +1 -0
  364. package/dist/runtime/statewire-session-lane.d.ts +29 -0
  365. package/dist/runtime/statewire-session-lane.js +48 -0
  366. package/dist/runtime/statewire-session-lane.js.map +1 -0
  367. package/dist/runtime/statewire-thread-config-lane.d.ts +1 -1
  368. package/dist/runtime/useAthenaStatewireRuntime.cjs +16 -5
  369. package/dist/runtime/useAthenaStatewireRuntime.cjs.map +1 -1
  370. package/dist/runtime/useAthenaStatewireRuntime.d.ts +15 -1
  371. package/dist/runtime/useAthenaStatewireRuntime.js +17 -6
  372. package/dist/runtime/useAthenaStatewireRuntime.js.map +1 -1
  373. package/dist/styles.css +1 -1
  374. package/dist/threads/api.d.ts +1 -1
  375. package/dist/threads/conversation-list-fetcher.d.ts +1 -1
  376. package/dist/threads/index-triggered-refresh.cjs +164 -0
  377. package/dist/threads/index-triggered-refresh.cjs.map +1 -0
  378. package/dist/threads/index-triggered-refresh.d.ts +70 -0
  379. package/dist/threads/index-triggered-refresh.js +164 -0
  380. package/dist/threads/index-triggered-refresh.js.map +1 -0
  381. package/dist/threads/offline-session-list.d.ts +1 -1
  382. package/dist/threads/pull-request-display.d.ts +1 -1
  383. package/dist/threads/session-list-model.d.ts +1 -1
  384. package/dist/threads/session-list-tab-share.cjs +150 -0
  385. package/dist/threads/session-list-tab-share.cjs.map +1 -0
  386. package/dist/threads/session-list-tab-share.d.ts +73 -0
  387. package/dist/threads/session-list-tab-share.js +150 -0
  388. package/dist/threads/session-list-tab-share.js.map +1 -0
  389. package/dist/threads/session-row-parts.d.ts +1 -1
  390. package/dist/threads/sessions-query.d.ts +1 -1
  391. package/dist/threads/statewire-thread-list.cjs +42 -16
  392. package/dist/threads/statewire-thread-list.cjs.map +1 -1
  393. package/dist/threads/statewire-thread-list.d.ts +11 -2
  394. package/dist/threads/statewire-thread-list.js +43 -17
  395. package/dist/threads/statewire-thread-list.js.map +1 -1
  396. package/dist/threads/thread-prefetcher.d.ts +1 -1
  397. package/dist/threads/use-athena-session-attention.d.ts +1 -1
  398. package/dist/threads/use-athena-sessions.cjs +32 -22
  399. package/dist/threads/use-athena-sessions.cjs.map +1 -1
  400. package/dist/threads/use-athena-sessions.js +33 -23
  401. package/dist/threads/use-athena-sessions.js.map +1 -1
  402. package/dist/threads/use-rest-conversation-history.d.ts +1 -1
  403. package/dist/threads/use-statewire-conversation-history.d.ts +5 -5
  404. package/dist/tiptap-markdown-table/src/markdown-table-serializer.d.ts +56 -0
  405. package/dist/tools/NestedPtcMessages.cjs +14 -9
  406. package/dist/tools/NestedPtcMessages.cjs.map +1 -1
  407. package/dist/tools/NestedPtcMessages.d.ts +9 -0
  408. package/dist/tools/NestedPtcMessages.js +6 -1
  409. package/dist/tools/NestedPtcMessages.js.map +1 -1
  410. package/dist/tools/index.d.ts +1 -1
  411. package/dist/tools/primitives.d.ts +1 -1
  412. package/dist/tools/subagent-task-tool-ui.cjs +494 -0
  413. package/dist/tools/subagent-task-tool-ui.cjs.map +1 -0
  414. package/dist/tools/subagent-task-tool-ui.d.ts +109 -0
  415. package/dist/tools/subagent-task-tool-ui.js +494 -0
  416. package/dist/tools/subagent-task-tool-ui.js.map +1 -0
  417. package/dist/tools/tool-fallback.d.ts +1 -1
  418. package/dist/tools/tool-icons.d.ts +1 -1
  419. package/dist/tools/tool-summary.d.ts +1 -1
  420. package/dist/tools/tool-uis.cjs +4 -0
  421. package/dist/tools/tool-uis.cjs.map +1 -1
  422. package/dist/tools/tool-uis.js +4 -0
  423. package/dist/tools/tool-uis.js.map +1 -1
  424. package/dist/voice/chat.cjs +6 -0
  425. package/dist/voice/chat.cjs.map +1 -0
  426. package/dist/voice/chat.d.ts +2 -0
  427. package/dist/voice/chat.js +6 -0
  428. package/dist/voice/chat.js.map +1 -0
  429. package/dist/voice/livekit-join.cjs +119 -0
  430. package/dist/voice/livekit-join.cjs.map +1 -0
  431. package/dist/voice/livekit-join.d.ts +8 -0
  432. package/dist/voice/livekit-join.js +119 -0
  433. package/dist/voice/livekit-join.js.map +1 -0
  434. package/dist/voice/livekit.cjs +32 -0
  435. package/dist/voice/livekit.cjs.map +1 -0
  436. package/dist/voice/livekit.d.ts +80 -0
  437. package/dist/voice/livekit.js +32 -0
  438. package/dist/voice/livekit.js.map +1 -0
  439. package/package.json +20 -10
@@ -0,0 +1,146 @@
1
+ /**
2
+ * Tool display metadata — the one registry of how a backend tool is presented
3
+ * to a person: its noun label, its present-tense activity, its category, its
4
+ * icon (as a key the UI layer maps to an icon component), its emoji for
5
+ * text-only surfaces, and how to summarize a call from its arguments.
6
+ *
7
+ * Every tool card, activity timeline, and approval summary on every surface
8
+ * (the React SDK, Olympus, the Chrome extension, the Office add-in, mobile)
9
+ * reads from here, so a tool cannot be "Web Search" on one screen and
10
+ * "Searching the web" plus a different icon on another. React-free on purpose:
11
+ * mobile shares it, and icon *components* are the UI layer's business.
12
+ *
13
+ * Unknown names never fail: {@link getToolDisplayMeta} derives a readable
14
+ * default from the name, so a new backend tool renders acceptably before it
15
+ * has an entry here. Add the entry when the default copy is not good enough.
16
+ */
17
+ export type ToolCategory = 'Web' | 'Email' | 'Document' | 'Spreadsheet' | 'SQL' | 'Database' | 'Python' | 'Spaces' | 'Visualization' | 'Canvas' | 'Presentation' | 'UI' | 'Notebook' | 'AOP' | 'Browser' | 'Computer' | 'Drive' | 'Comments' | 'Meetings' | 'Analysis' | 'Memory' | 'Brand' | 'Playbook' | 'GitHub' | 'Ontology' | 'Project Manager' | 'Agent' | 'Files' | 'Media' | 'Integrations' | 'Tool';
18
+ /** Icon identifiers the UI layer maps to icon components (lucide on web). */
19
+ export type ToolIconKey = 'search' | 'globe' | 'mail' | 'calendar' | 'file-text' | 'pen-line' | 'bar-chart' | 'table' | 'presentation' | 'monitor' | 'code' | 'terminal' | 'database' | 'book-open' | 'brain' | 'folder-open' | 'folder' | 'save' | 'wrench' | 'image' | 'camera' | 'trending-up' | 'palette' | 'microscope' | 'message-square' | 'hard-drive' | 'git-pull-request' | 'boxes' | 'scroll-text' | 'clipboard-list' | 'cpu' | 'bot' | 'link' | 'package' | 'play' | 'trash' | 'star' | 'sparkles' | 'list-checks' | 'mouse-pointer' | 'scan-search' | 'settings' | 'phone' | 'video' | 'users' | 'layout-dashboard' | 'workflow' | 'circle-help' | 'flag' | 'hash';
20
+ /** Summarize a call from its arguments in one line, or nothing when there is nothing salient. */
21
+ export type ToolArgsDescriber = (args: Record<string, unknown>) => string | undefined;
22
+ export interface ToolDisplayMeta {
23
+ /** Noun label for headers, lists, and completed rows ("Web Search"). */
24
+ displayName: string;
25
+ /** Present-tense activity for a running call, without trailing punctuation ("Searching the web"). */
26
+ activeLabel: string;
27
+ /**
28
+ * Completed-row copy when the product wording is not the past tense of
29
+ * `activeLabel` ("Web search complete"); {@link toolStatusLabel} derives
30
+ * the past tense when this is absent.
31
+ */
32
+ completedLabel?: string;
33
+ /** Copy for a call the user declined at an approval gate ("Email not sent (rejected)"). */
34
+ rejectedLabel?: string;
35
+ category: ToolCategory;
36
+ icon: ToolIconKey;
37
+ /** Emoji for text-only surfaces (mobile rows, notifications). */
38
+ emoji: string;
39
+ /** One-line detail from the call's arguments, for a subtitle or the running label. */
40
+ describe?: ToolArgsDescriber;
41
+ /**
42
+ * The tool is not something a person picks — a runtime internal (deepagents
43
+ * built-ins) or a nested SDK sub-call surfaced by programmatic tool calling.
44
+ * Hosts leave these out of tool menus and mention pickers; they still render.
45
+ */
46
+ internal?: boolean;
47
+ /**
48
+ * The call's card stays in the conversation instead of behind a grouped
49
+ * turn's collapsed details: an editable draft the person reviews and sends
50
+ * themselves, without the run parking on an approval, or a produced artifact
51
+ * the person reads in place (a draw.io diagram).
52
+ */
53
+ inline?: boolean;
54
+ }
55
+ /** A registry entry; `emoji` defaults to the category's. */
56
+ export type ToolDisplayMetaEntry = Omit<ToolDisplayMeta, 'emoji'> & {
57
+ emoji?: string;
58
+ };
59
+ export declare const CATEGORY_EMOJI: Record<ToolCategory, string>;
60
+ /** Collapse whitespace to a single-line summary capped at `max` chars. */
61
+ export declare function truncateLine(text: string, max?: number): string;
62
+ /** The search term a call carries (`query` / `search_query` / `term`), quoted. */
63
+ export declare const describeQuery: ToolArgsDescriber;
64
+ /** The URL a call targets. */
65
+ export declare const describeUrl: ToolArgsDescriber;
66
+ /** The name a call creates or targets (`field`, falling back to `title`), quoted. */
67
+ export declare function describeNamed(field?: string): ToolArgsDescriber;
68
+ /** The SQL a call runs (`sql_query` / `query` / `sql`), on one line, quoted. */
69
+ export declare const describeSql: ToolArgsDescriber;
70
+ /** A spreadsheet range plus the call's own explanation of the edit. */
71
+ export declare const describeRange: ToolArgsDescriber;
72
+ export declare const describeTable: ToolArgsDescriber;
73
+ export declare const describePackage: ToolArgsDescriber;
74
+ /** A workspace file path (`file_path` / `path`). */
75
+ export declare const describePath: ToolArgsDescriber;
76
+ /** Where a Slack send goes (`to`, one entry or several people), on one line. */
77
+ export declare const describeSlackDestination: ToolArgsDescriber;
78
+ /** The Zephyr Enterprise folder, cycle phase or release a call reads. */
79
+ export declare const describeZephyrScope: ToolArgsDescriber;
80
+ /** The subagent a delegation targets and what it was asked, on one line. */
81
+ export declare const describeDelegation: ToolArgsDescriber;
82
+ /**
83
+ * Keyed by the tool name as it appears on the wire. Grouped by category;
84
+ * within a group, aliases of one capability share copy so history renders the
85
+ * same whatever name the backend used that day.
86
+ */
87
+ export declare const TOOL_DISPLAY_META: Record<string, ToolDisplayMetaEntry>;
88
+ /**
89
+ * Humanize a `snake_case` / `camelCase` tool name into a Title Case label
90
+ * (`create_new_sheet` → "Create New Sheet", `CreateWorkbook` → "Create Workbook").
91
+ */
92
+ export declare function formatToolName(toolName: string): string;
93
+ /** The generic presentation for a tool with no registry entry. */
94
+ export declare function defaultToolDisplayMeta(toolName: string): ToolDisplayMeta;
95
+ /** True when the registry has an entry for `toolName`. */
96
+ export declare function hasToolDisplayMeta(toolName: string): boolean;
97
+ /** Display metadata for `toolName` — the registry entry, else a readable default. Never throws. */
98
+ export declare function getToolDisplayMeta(toolName: string): ToolDisplayMeta;
99
+ /** True when the tool's card renders in the conversation rather than behind collapsed details. */
100
+ export declare function isInlineTool(toolName: string): boolean;
101
+ /** Every tool name with a registry entry. */
102
+ export declare function knownToolNames(): string[];
103
+ /** The emoji for a category (the wrench for anything unknown). */
104
+ export declare function getCategoryEmoji(category: string): string;
105
+ /**
106
+ * The one-line summary of a call's arguments, when the tool knows how to
107
+ * summarize them (`args` may be undefined or unparsed while streaming).
108
+ */
109
+ export declare function describeToolArgs({ toolName, args, }: {
110
+ toolName: string;
111
+ args: Record<string, unknown> | undefined;
112
+ }): string | undefined;
113
+ /**
114
+ * The running-row label: the activity plus the call's own summary
115
+ * ("Searching the web: \"quarterly revenue\""), without trailing punctuation.
116
+ */
117
+ export declare function toolActiveLabel({ toolName, args, }: {
118
+ toolName: string;
119
+ args: Record<string, unknown> | undefined;
120
+ }): string;
121
+ /**
122
+ * Turn a present-tense activity label into its completed form
123
+ * ("Taking screenshot" → "Took screenshot", "Navigating to x" → "Navigated to x").
124
+ * Labels that do not open with an "-ing" verb come back unchanged.
125
+ */
126
+ export declare function toolCompletedLabel(activeLabel: string): string;
127
+ /** The step states an activity row can be in; the tool card's own states plus the approval outcomes. */
128
+ export type ToolStatusLabelState = 'running' | 'complete' | 'rejected' | 'cancelled' | 'paused' | 'error' | 'waiting';
129
+ /**
130
+ * The status-row copy for a tool call in a given state — the one wording the
131
+ * SDK's activity card, Olympus's, and the Chrome extension's all render:
132
+ *
133
+ * - `running` is the registry activity ("Searching the web");
134
+ * - `complete` is the curated `completedLabel` ("Web search complete"), else
135
+ * the activity's past tense ("Created computer asset"), else the tool's
136
+ * name;
137
+ * - `rejected` is the curated `rejectedLabel` ("Email not sent (rejected)"),
138
+ * else "<name> — rejected", so a call the user declined never borrows the
139
+ * success wording;
140
+ * - `cancelled` / `paused` / `error` / `waiting` read the same on every
141
+ * surface.
142
+ *
143
+ * `displayName` lets a host with a richer tool catalog (Olympus's registry
144
+ * names) label tools this registry has no entry for; entries always win.
145
+ */
146
+ export declare function toolStatusLabel(toolName: string, state: ToolStatusLabelState, displayName?: string): string;
@@ -1,5 +1,72 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const TASK_TOOL_NAME = "task";
3
4
  const EXECUTE_TOOL_NAME = "execute";
5
+ const WRITE_FILE_TOOL_NAME = "write_file";
6
+ const EDIT_FILE_TOOL_NAME = "edit_file";
7
+ const START_ASYNC_TASK_TOOL_NAME = "start_async_task";
8
+ const CHECK_ASYNC_TASK_TOOL_NAME = "check_async_task";
9
+ const UPDATE_ASYNC_TASK_TOOL_NAME = "update_async_task";
10
+ const CANCEL_ASYNC_TASK_TOOL_NAME = "cancel_async_task";
11
+ function salientToolCallDetail(toolCall) {
12
+ const args = toolCall.args ?? {};
13
+ const firstString = (...keys) => {
14
+ for (const key of keys) {
15
+ const value = args[key];
16
+ if (typeof value === "string" && value) return value;
17
+ }
18
+ return "";
19
+ };
20
+ let detail;
21
+ switch (toolCall.name) {
22
+ case EXECUTE_TOOL_NAME:
23
+ detail = firstString("command");
24
+ break;
25
+ case WRITE_FILE_TOOL_NAME:
26
+ case EDIT_FILE_TOOL_NAME:
27
+ detail = firstString("file_path", "path");
28
+ break;
29
+ case "read_file":
30
+ case "ls":
31
+ detail = firstString("file_path", "path");
32
+ break;
33
+ case "write_todos": {
34
+ const todos = args.todos;
35
+ detail = Array.isArray(todos) ? `${todos.length} step${todos.length === 1 ? "" : "s"}` : "";
36
+ break;
37
+ }
38
+ case TASK_TOOL_NAME:
39
+ case START_ASYNC_TASK_TOOL_NAME:
40
+ detail = firstString("description", "subagent_type");
41
+ break;
42
+ case UPDATE_ASYNC_TASK_TOOL_NAME:
43
+ detail = firstString("message", "task_id");
44
+ break;
45
+ case CHECK_ASYNC_TASK_TOOL_NAME:
46
+ case CANCEL_ASYNC_TASK_TOOL_NAME:
47
+ detail = firstString("task_id");
48
+ break;
49
+ default:
50
+ detail = firstString(
51
+ "query",
52
+ "pattern",
53
+ "command",
54
+ "path",
55
+ "file_path",
56
+ "url",
57
+ "question"
58
+ );
59
+ }
60
+ const clean = detail.replace(/\s+/g, " ").trim();
61
+ return clean.length > 80 ? `${clean.slice(0, 79)}…` : clean;
62
+ }
63
+ exports.CANCEL_ASYNC_TASK_TOOL_NAME = CANCEL_ASYNC_TASK_TOOL_NAME;
64
+ exports.CHECK_ASYNC_TASK_TOOL_NAME = CHECK_ASYNC_TASK_TOOL_NAME;
65
+ exports.EDIT_FILE_TOOL_NAME = EDIT_FILE_TOOL_NAME;
4
66
  exports.EXECUTE_TOOL_NAME = EXECUTE_TOOL_NAME;
67
+ exports.START_ASYNC_TASK_TOOL_NAME = START_ASYNC_TASK_TOOL_NAME;
68
+ exports.TASK_TOOL_NAME = TASK_TOOL_NAME;
69
+ exports.UPDATE_ASYNC_TASK_TOOL_NAME = UPDATE_ASYNC_TASK_TOOL_NAME;
70
+ exports.WRITE_FILE_TOOL_NAME = WRITE_FILE_TOOL_NAME;
71
+ exports.salientToolCallDetail = salientToolCallDetail;
5
72
  //# sourceMappingURL=tool-names.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"tool-names.cjs","sources":["../../../../agent-runtime/src/tool-names.ts"],"sourcesContent":["/**\n * Names of the deepagents built-in tools as they appear on the wire, plus the\n * shared arg shapes / display derivations keyed on those names. One home so\n * tool cards, activity panels, and transcript renderers on every surface agree\n * on which call is which.\n */\nimport type { LangChainToolCall } from \"@assistant-ui/react-langgraph\";\n\n/** The built-in deepagents delegation tool; a `task` call spawns a subagent. */\nexport const TASK_TOOL_NAME = \"task\";\n/** The QuickJS code-interpreter tool (langchain_quickjs middleware). */\nexport const EVAL_TOOL_NAME = \"eval\";\n/** The built-in deepagents sandbox shell tool. */\nexport const EXECUTE_TOOL_NAME = \"execute\";\n/**\n * The Athena studio code executors: sandboxed Python whose SDK calls the\n * backend records as PTC sub-calls, exactly like `execute` / `eval`.\n */\nexport const RUN_PYTHON_CODE_TOOL_NAME = \"run_python_code\";\nexport const EXECUTE_PRESENTATION_CODE_TOOL_NAME = \"execute_presentation_code\";\nexport const EXECUTE_SPREADSHEET_CODE_TOOL_NAME = \"execute_spreadsheet_code\";\nexport const EXECUTE_WORD_DOCUMENT_CODE_TOOL_NAME = \"execute_word_document_code\";\n/** Every tool whose ToolMessage artifact may carry promoted PTC sub-calls. */\nexport const PTC_PARENT_TOOL_NAMES: ReadonlySet<string> = new Set<string>([\n EXECUTE_TOOL_NAME,\n EVAL_TOOL_NAME,\n RUN_PYTHON_CODE_TOOL_NAME,\n EXECUTE_PRESENTATION_CODE_TOOL_NAME,\n EXECUTE_SPREADSHEET_CODE_TOOL_NAME,\n EXECUTE_WORD_DOCUMENT_CODE_TOOL_NAME,\n]);\n/** The built-in deepagents filesystem write/edit tools. */\nexport const WRITE_FILE_TOOL_NAME = \"write_file\";\nexport const EDIT_FILE_TOOL_NAME = \"edit_file\";\n\n/**\n * The deepagents async-subagent tools (ADR 0006 coding workers ride these):\n * `start_async_task` launches a remote task, `check_async_task` polls it,\n * `update_async_task` sends a follow-up, `cancel_async_task` interrupts it.\n */\nexport const START_ASYNC_TASK_TOOL_NAME = \"start_async_task\";\nexport const CHECK_ASYNC_TASK_TOOL_NAME = \"check_async_task\";\nexport const UPDATE_ASYNC_TASK_TOOL_NAME = \"update_async_task\";\nexport const CANCEL_ASYNC_TASK_TOOL_NAME = \"cancel_async_task\";\nexport const LIST_ASYNC_TASKS_TOOL_NAME = \"list_async_tasks\";\nexport const ASYNC_TASK_TOOL_NAMES = [\n START_ASYNC_TASK_TOOL_NAME,\n CHECK_ASYNC_TASK_TOOL_NAME,\n UPDATE_ASYNC_TASK_TOOL_NAME,\n CANCEL_ASYNC_TASK_TOOL_NAME,\n LIST_ASYNC_TASKS_TOOL_NAME,\n] as const;\n\n/**\n * Args shape shared by `write_file` / `edit_file` (single source of truth for\n * both the tool card and the changed-files panel). `write_file` carries the\n * whole `content`; `edit_file` carries the `old_string` → `new_string`\n * replacement instead (deepagents `WriteFileSchema` / `EditFileSchema`).\n */\nexport type FileToolArgs = {\n file_path?: string;\n path?: string;\n content?: string;\n old_string?: string;\n new_string?: string;\n replace_all?: boolean;\n /** Cross-asset targeting: the sandbox-backed asset the tool acted on. */\n sandbox_asset_id?: string | null;\n};\n\n/**\n * Human-salient one-liner for a nested tool call — the argument a person would\n * glance at (`execute` → the command, file tools → the path, searches → the\n * query). Empty string when nothing salient exists; capped so the ticker line\n * can't blow out the card.\n */\nexport function salientToolCallDetail(toolCall: LangChainToolCall): string {\n const args = (toolCall.args ?? {}) as Record<string, unknown>;\n const firstString = (...keys: string[]): string => {\n for (const key of keys) {\n const value = args[key];\n if (typeof value === \"string\" && value) return value;\n }\n return \"\";\n };\n let detail: string;\n switch (toolCall.name) {\n case EXECUTE_TOOL_NAME:\n detail = firstString(\"command\");\n break;\n case WRITE_FILE_TOOL_NAME:\n case EDIT_FILE_TOOL_NAME:\n detail = firstString(\"file_path\", \"path\");\n break;\n case \"read_file\":\n case \"ls\":\n detail = firstString(\"file_path\", \"path\");\n break;\n case \"write_todos\": {\n const todos = args.todos;\n detail = Array.isArray(todos)\n ? `${todos.length} step${todos.length === 1 ? \"\" : \"s\"}`\n : \"\";\n break;\n }\n case TASK_TOOL_NAME:\n case START_ASYNC_TASK_TOOL_NAME:\n detail = firstString(\"description\", \"subagent_type\");\n break;\n case UPDATE_ASYNC_TASK_TOOL_NAME:\n detail = firstString(\"message\", \"task_id\");\n break;\n case CHECK_ASYNC_TASK_TOOL_NAME:\n case CANCEL_ASYNC_TASK_TOOL_NAME:\n detail = firstString(\"task_id\");\n break;\n default:\n detail = firstString(\n \"query\",\n \"pattern\",\n \"command\",\n \"path\",\n \"file_path\",\n \"url\",\n \"question\",\n );\n }\n const clean = detail.replace(/\\s+/g, \" \").trim();\n return clean.length > 80 ? `${clean.slice(0, 79)}…` : clean;\n}\n"],"names":[],"mappings":";;AAaO,MAAM,oBAAoB;;"}
1
+ {"version":3,"file":"tool-names.cjs","sources":["../../../../agent-runtime/src/tool-names.ts"],"sourcesContent":["/**\n * Names of the deepagents built-in tools as they appear on the wire, plus the\n * shared arg shapes / display derivations keyed on those names. One home so\n * tool cards, activity panels, and transcript renderers on every surface agree\n * on which call is which.\n */\nimport type { LangChainToolCall } from \"@assistant-ui/react-langgraph\";\n\n/** The built-in deepagents delegation tool; a `task` call spawns a subagent. */\nexport const TASK_TOOL_NAME = \"task\";\n/** The QuickJS code-interpreter tool (langchain_quickjs middleware). */\nexport const EVAL_TOOL_NAME = \"eval\";\n/** The built-in deepagents sandbox shell tool. */\nexport const EXECUTE_TOOL_NAME = \"execute\";\n/**\n * The Athena studio code executors: sandboxed Python whose SDK calls the\n * backend records as PTC sub-calls, exactly like `execute` / `eval`.\n */\nexport const RUN_PYTHON_CODE_TOOL_NAME = \"run_python_code\";\nexport const EXECUTE_PRESENTATION_CODE_TOOL_NAME = \"execute_presentation_code\";\nexport const EXECUTE_SPREADSHEET_CODE_TOOL_NAME = \"execute_spreadsheet_code\";\nexport const EXECUTE_WORD_DOCUMENT_CODE_TOOL_NAME = \"execute_word_document_code\";\n/** Every tool whose ToolMessage artifact may carry promoted PTC sub-calls. */\nexport const PTC_PARENT_TOOL_NAMES: ReadonlySet<string> = new Set<string>([\n EXECUTE_TOOL_NAME,\n EVAL_TOOL_NAME,\n RUN_PYTHON_CODE_TOOL_NAME,\n EXECUTE_PRESENTATION_CODE_TOOL_NAME,\n EXECUTE_SPREADSHEET_CODE_TOOL_NAME,\n EXECUTE_WORD_DOCUMENT_CODE_TOOL_NAME,\n]);\n/** The built-in deepagents filesystem write/edit tools. */\nexport const WRITE_FILE_TOOL_NAME = \"write_file\";\nexport const EDIT_FILE_TOOL_NAME = \"edit_file\";\n\n/**\n * The deepagents async-subagent tools (ADR 0006 coding workers ride these):\n * `start_async_task` launches a remote task, `check_async_task` polls it,\n * `update_async_task` sends a follow-up, `cancel_async_task` interrupts it.\n */\nexport const START_ASYNC_TASK_TOOL_NAME = \"start_async_task\";\nexport const CHECK_ASYNC_TASK_TOOL_NAME = \"check_async_task\";\nexport const UPDATE_ASYNC_TASK_TOOL_NAME = \"update_async_task\";\nexport const CANCEL_ASYNC_TASK_TOOL_NAME = \"cancel_async_task\";\nexport const LIST_ASYNC_TASKS_TOOL_NAME = \"list_async_tasks\";\nexport const ASYNC_TASK_TOOL_NAMES = [\n START_ASYNC_TASK_TOOL_NAME,\n CHECK_ASYNC_TASK_TOOL_NAME,\n UPDATE_ASYNC_TASK_TOOL_NAME,\n CANCEL_ASYNC_TASK_TOOL_NAME,\n LIST_ASYNC_TASKS_TOOL_NAME,\n] as const;\n\n/**\n * Args shape shared by `write_file` / `edit_file` (single source of truth for\n * both the tool card and the changed-files panel). `write_file` carries the\n * whole `content`; `edit_file` carries the `old_string` → `new_string`\n * replacement instead (deepagents `WriteFileSchema` / `EditFileSchema`).\n */\nexport type FileToolArgs = {\n file_path?: string;\n path?: string;\n content?: string;\n old_string?: string;\n new_string?: string;\n replace_all?: boolean;\n /** Cross-asset targeting: the sandbox-backed asset the tool acted on. */\n sandbox_asset_id?: string | null;\n};\n\n/**\n * Human-salient one-liner for a nested tool call — the argument a person would\n * glance at (`execute` → the command, file tools → the path, searches → the\n * query). Empty string when nothing salient exists; capped so the ticker line\n * can't blow out the card.\n */\nexport function salientToolCallDetail(toolCall: LangChainToolCall): string {\n const args = (toolCall.args ?? {}) as Record<string, unknown>;\n const firstString = (...keys: string[]): string => {\n for (const key of keys) {\n const value = args[key];\n if (typeof value === \"string\" && value) return value;\n }\n return \"\";\n };\n let detail: string;\n switch (toolCall.name) {\n case EXECUTE_TOOL_NAME:\n detail = firstString(\"command\");\n break;\n case WRITE_FILE_TOOL_NAME:\n case EDIT_FILE_TOOL_NAME:\n detail = firstString(\"file_path\", \"path\");\n break;\n case \"read_file\":\n case \"ls\":\n detail = firstString(\"file_path\", \"path\");\n break;\n case \"write_todos\": {\n const todos = args.todos;\n detail = Array.isArray(todos)\n ? `${todos.length} step${todos.length === 1 ? \"\" : \"s\"}`\n : \"\";\n break;\n }\n case TASK_TOOL_NAME:\n case START_ASYNC_TASK_TOOL_NAME:\n detail = firstString(\"description\", \"subagent_type\");\n break;\n case UPDATE_ASYNC_TASK_TOOL_NAME:\n detail = firstString(\"message\", \"task_id\");\n break;\n case CHECK_ASYNC_TASK_TOOL_NAME:\n case CANCEL_ASYNC_TASK_TOOL_NAME:\n detail = firstString(\"task_id\");\n break;\n default:\n detail = firstString(\n \"query\",\n \"pattern\",\n \"command\",\n \"path\",\n \"file_path\",\n \"url\",\n \"question\",\n );\n }\n const clean = detail.replace(/\\s+/g, \" \").trim();\n return clean.length > 80 ? `${clean.slice(0, 79)}…` : clean;\n}\n"],"names":[],"mappings":";;AASO,MAAM,iBAAiB;AAIvB,MAAM,oBAAoB;AAmB1B,MAAM,uBAAuB;AAC7B,MAAM,sBAAsB;AAO5B,MAAM,6BAA6B;AACnC,MAAM,6BAA6B;AACnC,MAAM,8BAA8B;AACpC,MAAM,8BAA8B;AAiCpC,SAAS,sBAAsB,UAAqC;AACzE,QAAM,OAAQ,SAAS,QAAQ,CAAA;AAC/B,QAAM,cAAc,IAAI,SAA2B;AACjD,eAAW,OAAO,MAAM;AACtB,YAAM,QAAQ,KAAK,GAAG;AACtB,UAAI,OAAO,UAAU,YAAY,MAAO,QAAO;AAAA,IACjD;AACA,WAAO;AAAA,EACT;AACA,MAAI;AACJ,UAAQ,SAAS,MAAA;AAAA,IACf,KAAK;AACH,eAAS,YAAY,SAAS;AAC9B;AAAA,IACF,KAAK;AAAA,IACL,KAAK;AACH,eAAS,YAAY,aAAa,MAAM;AACxC;AAAA,IACF,KAAK;AAAA,IACL,KAAK;AACH,eAAS,YAAY,aAAa,MAAM;AACxC;AAAA,IACF,KAAK,eAAe;AAClB,YAAM,QAAQ,KAAK;AACnB,eAAS,MAAM,QAAQ,KAAK,IACxB,GAAG,MAAM,MAAM,QAAQ,MAAM,WAAW,IAAI,KAAK,GAAG,KACpD;AACJ;AAAA,IACF;AAAA,IACA,KAAK;AAAA,IACL,KAAK;AACH,eAAS,YAAY,eAAe,eAAe;AACnD;AAAA,IACF,KAAK;AACH,eAAS,YAAY,WAAW,SAAS;AACzC;AAAA,IACF,KAAK;AAAA,IACL,KAAK;AACH,eAAS,YAAY,SAAS;AAC9B;AAAA,IACF;AACE,eAAS;AAAA,QACP;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,EACF;AAEJ,QAAM,QAAQ,OAAO,QAAQ,QAAQ,GAAG,EAAE,KAAA;AAC1C,SAAO,MAAM,SAAS,KAAK,GAAG,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM;AACxD;;;;;;;;;;"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Names of the deepagents built-in tools as they appear on the wire, plus the
3
+ * shared arg shapes / display derivations keyed on those names. One home so
4
+ * tool cards, activity panels, and transcript renderers on every surface agree
5
+ * on which call is which.
6
+ */
7
+ import type { LangChainToolCall } from "@assistant-ui/react-langgraph";
8
+ /** The built-in deepagents delegation tool; a `task` call spawns a subagent. */
9
+ export declare const TASK_TOOL_NAME = "task";
10
+ /** The QuickJS code-interpreter tool (langchain_quickjs middleware). */
11
+ export declare const EVAL_TOOL_NAME = "eval";
12
+ /** The built-in deepagents sandbox shell tool. */
13
+ export declare const EXECUTE_TOOL_NAME = "execute";
14
+ /**
15
+ * The Athena studio code executors: sandboxed Python whose SDK calls the
16
+ * backend records as PTC sub-calls, exactly like `execute` / `eval`.
17
+ */
18
+ export declare const RUN_PYTHON_CODE_TOOL_NAME = "run_python_code";
19
+ export declare const EXECUTE_PRESENTATION_CODE_TOOL_NAME = "execute_presentation_code";
20
+ export declare const EXECUTE_SPREADSHEET_CODE_TOOL_NAME = "execute_spreadsheet_code";
21
+ export declare const EXECUTE_WORD_DOCUMENT_CODE_TOOL_NAME = "execute_word_document_code";
22
+ /** Every tool whose ToolMessage artifact may carry promoted PTC sub-calls. */
23
+ export declare const PTC_PARENT_TOOL_NAMES: ReadonlySet<string>;
24
+ /** The built-in deepagents filesystem write/edit tools. */
25
+ export declare const WRITE_FILE_TOOL_NAME = "write_file";
26
+ export declare const EDIT_FILE_TOOL_NAME = "edit_file";
27
+ /**
28
+ * The deepagents async-subagent tools (ADR 0006 coding workers ride these):
29
+ * `start_async_task` launches a remote task, `check_async_task` polls it,
30
+ * `update_async_task` sends a follow-up, `cancel_async_task` interrupts it.
31
+ */
32
+ export declare const START_ASYNC_TASK_TOOL_NAME = "start_async_task";
33
+ export declare const CHECK_ASYNC_TASK_TOOL_NAME = "check_async_task";
34
+ export declare const UPDATE_ASYNC_TASK_TOOL_NAME = "update_async_task";
35
+ export declare const CANCEL_ASYNC_TASK_TOOL_NAME = "cancel_async_task";
36
+ export declare const LIST_ASYNC_TASKS_TOOL_NAME = "list_async_tasks";
37
+ export declare const ASYNC_TASK_TOOL_NAMES: readonly ["start_async_task", "check_async_task", "update_async_task", "cancel_async_task", "list_async_tasks"];
38
+ /**
39
+ * Args shape shared by `write_file` / `edit_file` (single source of truth for
40
+ * both the tool card and the changed-files panel). `write_file` carries the
41
+ * whole `content`; `edit_file` carries the `old_string` → `new_string`
42
+ * replacement instead (deepagents `WriteFileSchema` / `EditFileSchema`).
43
+ */
44
+ export type FileToolArgs = {
45
+ file_path?: string;
46
+ path?: string;
47
+ content?: string;
48
+ old_string?: string;
49
+ new_string?: string;
50
+ replace_all?: boolean;
51
+ /** Cross-asset targeting: the sandbox-backed asset the tool acted on. */
52
+ sandbox_asset_id?: string | null;
53
+ };
54
+ /**
55
+ * Human-salient one-liner for a nested tool call — the argument a person would
56
+ * glance at (`execute` → the command, file tools → the path, searches → the
57
+ * query). Empty string when nothing salient exists; capped so the ticker line
58
+ * can't blow out the card.
59
+ */
60
+ export declare function salientToolCallDetail(toolCall: LangChainToolCall): string;
@@ -1,5 +1,72 @@
1
+ const TASK_TOOL_NAME = "task";
1
2
  const EXECUTE_TOOL_NAME = "execute";
3
+ const WRITE_FILE_TOOL_NAME = "write_file";
4
+ const EDIT_FILE_TOOL_NAME = "edit_file";
5
+ const START_ASYNC_TASK_TOOL_NAME = "start_async_task";
6
+ const CHECK_ASYNC_TASK_TOOL_NAME = "check_async_task";
7
+ const UPDATE_ASYNC_TASK_TOOL_NAME = "update_async_task";
8
+ const CANCEL_ASYNC_TASK_TOOL_NAME = "cancel_async_task";
9
+ function salientToolCallDetail(toolCall) {
10
+ const args = toolCall.args ?? {};
11
+ const firstString = (...keys) => {
12
+ for (const key of keys) {
13
+ const value = args[key];
14
+ if (typeof value === "string" && value) return value;
15
+ }
16
+ return "";
17
+ };
18
+ let detail;
19
+ switch (toolCall.name) {
20
+ case EXECUTE_TOOL_NAME:
21
+ detail = firstString("command");
22
+ break;
23
+ case WRITE_FILE_TOOL_NAME:
24
+ case EDIT_FILE_TOOL_NAME:
25
+ detail = firstString("file_path", "path");
26
+ break;
27
+ case "read_file":
28
+ case "ls":
29
+ detail = firstString("file_path", "path");
30
+ break;
31
+ case "write_todos": {
32
+ const todos = args.todos;
33
+ detail = Array.isArray(todos) ? `${todos.length} step${todos.length === 1 ? "" : "s"}` : "";
34
+ break;
35
+ }
36
+ case TASK_TOOL_NAME:
37
+ case START_ASYNC_TASK_TOOL_NAME:
38
+ detail = firstString("description", "subagent_type");
39
+ break;
40
+ case UPDATE_ASYNC_TASK_TOOL_NAME:
41
+ detail = firstString("message", "task_id");
42
+ break;
43
+ case CHECK_ASYNC_TASK_TOOL_NAME:
44
+ case CANCEL_ASYNC_TASK_TOOL_NAME:
45
+ detail = firstString("task_id");
46
+ break;
47
+ default:
48
+ detail = firstString(
49
+ "query",
50
+ "pattern",
51
+ "command",
52
+ "path",
53
+ "file_path",
54
+ "url",
55
+ "question"
56
+ );
57
+ }
58
+ const clean = detail.replace(/\s+/g, " ").trim();
59
+ return clean.length > 80 ? `${clean.slice(0, 79)}…` : clean;
60
+ }
2
61
  export {
3
- EXECUTE_TOOL_NAME
62
+ CANCEL_ASYNC_TASK_TOOL_NAME,
63
+ CHECK_ASYNC_TASK_TOOL_NAME,
64
+ EDIT_FILE_TOOL_NAME,
65
+ EXECUTE_TOOL_NAME,
66
+ START_ASYNC_TASK_TOOL_NAME,
67
+ TASK_TOOL_NAME,
68
+ UPDATE_ASYNC_TASK_TOOL_NAME,
69
+ WRITE_FILE_TOOL_NAME,
70
+ salientToolCallDetail
4
71
  };
5
72
  //# sourceMappingURL=tool-names.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tool-names.js","sources":["../../../../agent-runtime/src/tool-names.ts"],"sourcesContent":["/**\n * Names of the deepagents built-in tools as they appear on the wire, plus the\n * shared arg shapes / display derivations keyed on those names. One home so\n * tool cards, activity panels, and transcript renderers on every surface agree\n * on which call is which.\n */\nimport type { LangChainToolCall } from \"@assistant-ui/react-langgraph\";\n\n/** The built-in deepagents delegation tool; a `task` call spawns a subagent. */\nexport const TASK_TOOL_NAME = \"task\";\n/** The QuickJS code-interpreter tool (langchain_quickjs middleware). */\nexport const EVAL_TOOL_NAME = \"eval\";\n/** The built-in deepagents sandbox shell tool. */\nexport const EXECUTE_TOOL_NAME = \"execute\";\n/**\n * The Athena studio code executors: sandboxed Python whose SDK calls the\n * backend records as PTC sub-calls, exactly like `execute` / `eval`.\n */\nexport const RUN_PYTHON_CODE_TOOL_NAME = \"run_python_code\";\nexport const EXECUTE_PRESENTATION_CODE_TOOL_NAME = \"execute_presentation_code\";\nexport const EXECUTE_SPREADSHEET_CODE_TOOL_NAME = \"execute_spreadsheet_code\";\nexport const EXECUTE_WORD_DOCUMENT_CODE_TOOL_NAME = \"execute_word_document_code\";\n/** Every tool whose ToolMessage artifact may carry promoted PTC sub-calls. */\nexport const PTC_PARENT_TOOL_NAMES: ReadonlySet<string> = new Set<string>([\n EXECUTE_TOOL_NAME,\n EVAL_TOOL_NAME,\n RUN_PYTHON_CODE_TOOL_NAME,\n EXECUTE_PRESENTATION_CODE_TOOL_NAME,\n EXECUTE_SPREADSHEET_CODE_TOOL_NAME,\n EXECUTE_WORD_DOCUMENT_CODE_TOOL_NAME,\n]);\n/** The built-in deepagents filesystem write/edit tools. */\nexport const WRITE_FILE_TOOL_NAME = \"write_file\";\nexport const EDIT_FILE_TOOL_NAME = \"edit_file\";\n\n/**\n * The deepagents async-subagent tools (ADR 0006 coding workers ride these):\n * `start_async_task` launches a remote task, `check_async_task` polls it,\n * `update_async_task` sends a follow-up, `cancel_async_task` interrupts it.\n */\nexport const START_ASYNC_TASK_TOOL_NAME = \"start_async_task\";\nexport const CHECK_ASYNC_TASK_TOOL_NAME = \"check_async_task\";\nexport const UPDATE_ASYNC_TASK_TOOL_NAME = \"update_async_task\";\nexport const CANCEL_ASYNC_TASK_TOOL_NAME = \"cancel_async_task\";\nexport const LIST_ASYNC_TASKS_TOOL_NAME = \"list_async_tasks\";\nexport const ASYNC_TASK_TOOL_NAMES = [\n START_ASYNC_TASK_TOOL_NAME,\n CHECK_ASYNC_TASK_TOOL_NAME,\n UPDATE_ASYNC_TASK_TOOL_NAME,\n CANCEL_ASYNC_TASK_TOOL_NAME,\n LIST_ASYNC_TASKS_TOOL_NAME,\n] as const;\n\n/**\n * Args shape shared by `write_file` / `edit_file` (single source of truth for\n * both the tool card and the changed-files panel). `write_file` carries the\n * whole `content`; `edit_file` carries the `old_string` → `new_string`\n * replacement instead (deepagents `WriteFileSchema` / `EditFileSchema`).\n */\nexport type FileToolArgs = {\n file_path?: string;\n path?: string;\n content?: string;\n old_string?: string;\n new_string?: string;\n replace_all?: boolean;\n /** Cross-asset targeting: the sandbox-backed asset the tool acted on. */\n sandbox_asset_id?: string | null;\n};\n\n/**\n * Human-salient one-liner for a nested tool call — the argument a person would\n * glance at (`execute` → the command, file tools → the path, searches → the\n * query). Empty string when nothing salient exists; capped so the ticker line\n * can't blow out the card.\n */\nexport function salientToolCallDetail(toolCall: LangChainToolCall): string {\n const args = (toolCall.args ?? {}) as Record<string, unknown>;\n const firstString = (...keys: string[]): string => {\n for (const key of keys) {\n const value = args[key];\n if (typeof value === \"string\" && value) return value;\n }\n return \"\";\n };\n let detail: string;\n switch (toolCall.name) {\n case EXECUTE_TOOL_NAME:\n detail = firstString(\"command\");\n break;\n case WRITE_FILE_TOOL_NAME:\n case EDIT_FILE_TOOL_NAME:\n detail = firstString(\"file_path\", \"path\");\n break;\n case \"read_file\":\n case \"ls\":\n detail = firstString(\"file_path\", \"path\");\n break;\n case \"write_todos\": {\n const todos = args.todos;\n detail = Array.isArray(todos)\n ? `${todos.length} step${todos.length === 1 ? \"\" : \"s\"}`\n : \"\";\n break;\n }\n case TASK_TOOL_NAME:\n case START_ASYNC_TASK_TOOL_NAME:\n detail = firstString(\"description\", \"subagent_type\");\n break;\n case UPDATE_ASYNC_TASK_TOOL_NAME:\n detail = firstString(\"message\", \"task_id\");\n break;\n case CHECK_ASYNC_TASK_TOOL_NAME:\n case CANCEL_ASYNC_TASK_TOOL_NAME:\n detail = firstString(\"task_id\");\n break;\n default:\n detail = firstString(\n \"query\",\n \"pattern\",\n \"command\",\n \"path\",\n \"file_path\",\n \"url\",\n \"question\",\n );\n }\n const clean = detail.replace(/\\s+/g, \" \").trim();\n return clean.length > 80 ? `${clean.slice(0, 79)}…` : clean;\n}\n"],"names":[],"mappings":"AAaO,MAAM,oBAAoB;"}
1
+ {"version":3,"file":"tool-names.js","sources":["../../../../agent-runtime/src/tool-names.ts"],"sourcesContent":["/**\n * Names of the deepagents built-in tools as they appear on the wire, plus the\n * shared arg shapes / display derivations keyed on those names. One home so\n * tool cards, activity panels, and transcript renderers on every surface agree\n * on which call is which.\n */\nimport type { LangChainToolCall } from \"@assistant-ui/react-langgraph\";\n\n/** The built-in deepagents delegation tool; a `task` call spawns a subagent. */\nexport const TASK_TOOL_NAME = \"task\";\n/** The QuickJS code-interpreter tool (langchain_quickjs middleware). */\nexport const EVAL_TOOL_NAME = \"eval\";\n/** The built-in deepagents sandbox shell tool. */\nexport const EXECUTE_TOOL_NAME = \"execute\";\n/**\n * The Athena studio code executors: sandboxed Python whose SDK calls the\n * backend records as PTC sub-calls, exactly like `execute` / `eval`.\n */\nexport const RUN_PYTHON_CODE_TOOL_NAME = \"run_python_code\";\nexport const EXECUTE_PRESENTATION_CODE_TOOL_NAME = \"execute_presentation_code\";\nexport const EXECUTE_SPREADSHEET_CODE_TOOL_NAME = \"execute_spreadsheet_code\";\nexport const EXECUTE_WORD_DOCUMENT_CODE_TOOL_NAME = \"execute_word_document_code\";\n/** Every tool whose ToolMessage artifact may carry promoted PTC sub-calls. */\nexport const PTC_PARENT_TOOL_NAMES: ReadonlySet<string> = new Set<string>([\n EXECUTE_TOOL_NAME,\n EVAL_TOOL_NAME,\n RUN_PYTHON_CODE_TOOL_NAME,\n EXECUTE_PRESENTATION_CODE_TOOL_NAME,\n EXECUTE_SPREADSHEET_CODE_TOOL_NAME,\n EXECUTE_WORD_DOCUMENT_CODE_TOOL_NAME,\n]);\n/** The built-in deepagents filesystem write/edit tools. */\nexport const WRITE_FILE_TOOL_NAME = \"write_file\";\nexport const EDIT_FILE_TOOL_NAME = \"edit_file\";\n\n/**\n * The deepagents async-subagent tools (ADR 0006 coding workers ride these):\n * `start_async_task` launches a remote task, `check_async_task` polls it,\n * `update_async_task` sends a follow-up, `cancel_async_task` interrupts it.\n */\nexport const START_ASYNC_TASK_TOOL_NAME = \"start_async_task\";\nexport const CHECK_ASYNC_TASK_TOOL_NAME = \"check_async_task\";\nexport const UPDATE_ASYNC_TASK_TOOL_NAME = \"update_async_task\";\nexport const CANCEL_ASYNC_TASK_TOOL_NAME = \"cancel_async_task\";\nexport const LIST_ASYNC_TASKS_TOOL_NAME = \"list_async_tasks\";\nexport const ASYNC_TASK_TOOL_NAMES = [\n START_ASYNC_TASK_TOOL_NAME,\n CHECK_ASYNC_TASK_TOOL_NAME,\n UPDATE_ASYNC_TASK_TOOL_NAME,\n CANCEL_ASYNC_TASK_TOOL_NAME,\n LIST_ASYNC_TASKS_TOOL_NAME,\n] as const;\n\n/**\n * Args shape shared by `write_file` / `edit_file` (single source of truth for\n * both the tool card and the changed-files panel). `write_file` carries the\n * whole `content`; `edit_file` carries the `old_string` → `new_string`\n * replacement instead (deepagents `WriteFileSchema` / `EditFileSchema`).\n */\nexport type FileToolArgs = {\n file_path?: string;\n path?: string;\n content?: string;\n old_string?: string;\n new_string?: string;\n replace_all?: boolean;\n /** Cross-asset targeting: the sandbox-backed asset the tool acted on. */\n sandbox_asset_id?: string | null;\n};\n\n/**\n * Human-salient one-liner for a nested tool call — the argument a person would\n * glance at (`execute` → the command, file tools → the path, searches → the\n * query). Empty string when nothing salient exists; capped so the ticker line\n * can't blow out the card.\n */\nexport function salientToolCallDetail(toolCall: LangChainToolCall): string {\n const args = (toolCall.args ?? {}) as Record<string, unknown>;\n const firstString = (...keys: string[]): string => {\n for (const key of keys) {\n const value = args[key];\n if (typeof value === \"string\" && value) return value;\n }\n return \"\";\n };\n let detail: string;\n switch (toolCall.name) {\n case EXECUTE_TOOL_NAME:\n detail = firstString(\"command\");\n break;\n case WRITE_FILE_TOOL_NAME:\n case EDIT_FILE_TOOL_NAME:\n detail = firstString(\"file_path\", \"path\");\n break;\n case \"read_file\":\n case \"ls\":\n detail = firstString(\"file_path\", \"path\");\n break;\n case \"write_todos\": {\n const todos = args.todos;\n detail = Array.isArray(todos)\n ? `${todos.length} step${todos.length === 1 ? \"\" : \"s\"}`\n : \"\";\n break;\n }\n case TASK_TOOL_NAME:\n case START_ASYNC_TASK_TOOL_NAME:\n detail = firstString(\"description\", \"subagent_type\");\n break;\n case UPDATE_ASYNC_TASK_TOOL_NAME:\n detail = firstString(\"message\", \"task_id\");\n break;\n case CHECK_ASYNC_TASK_TOOL_NAME:\n case CANCEL_ASYNC_TASK_TOOL_NAME:\n detail = firstString(\"task_id\");\n break;\n default:\n detail = firstString(\n \"query\",\n \"pattern\",\n \"command\",\n \"path\",\n \"file_path\",\n \"url\",\n \"question\",\n );\n }\n const clean = detail.replace(/\\s+/g, \" \").trim();\n return clean.length > 80 ? `${clean.slice(0, 79)}…` : clean;\n}\n"],"names":[],"mappings":"AASO,MAAM,iBAAiB;AAIvB,MAAM,oBAAoB;AAmB1B,MAAM,uBAAuB;AAC7B,MAAM,sBAAsB;AAO5B,MAAM,6BAA6B;AACnC,MAAM,6BAA6B;AACnC,MAAM,8BAA8B;AACpC,MAAM,8BAA8B;AAiCpC,SAAS,sBAAsB,UAAqC;AACzE,QAAM,OAAQ,SAAS,QAAQ,CAAA;AAC/B,QAAM,cAAc,IAAI,SAA2B;AACjD,eAAW,OAAO,MAAM;AACtB,YAAM,QAAQ,KAAK,GAAG;AACtB,UAAI,OAAO,UAAU,YAAY,MAAO,QAAO;AAAA,IACjD;AACA,WAAO;AAAA,EACT;AACA,MAAI;AACJ,UAAQ,SAAS,MAAA;AAAA,IACf,KAAK;AACH,eAAS,YAAY,SAAS;AAC9B;AAAA,IACF,KAAK;AAAA,IACL,KAAK;AACH,eAAS,YAAY,aAAa,MAAM;AACxC;AAAA,IACF,KAAK;AAAA,IACL,KAAK;AACH,eAAS,YAAY,aAAa,MAAM;AACxC;AAAA,IACF,KAAK,eAAe;AAClB,YAAM,QAAQ,KAAK;AACnB,eAAS,MAAM,QAAQ,KAAK,IACxB,GAAG,MAAM,MAAM,QAAQ,MAAM,WAAW,IAAI,KAAK,GAAG,KACpD;AACJ;AAAA,IACF;AAAA,IACA,KAAK;AAAA,IACL,KAAK;AACH,eAAS,YAAY,eAAe,eAAe;AACnD;AAAA,IACF,KAAK;AACH,eAAS,YAAY,WAAW,SAAS;AACzC;AAAA,IACF,KAAK;AAAA,IACL,KAAK;AACH,eAAS,YAAY,SAAS;AAC9B;AAAA,IACF;AACE,eAAS;AAAA,QACP;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,EACF;AAEJ,QAAM,QAAQ,OAAO,QAAQ,QAAQ,GAAG,EAAE,KAAA;AAC1C,SAAO,MAAM,SAAS,KAAK,GAAG,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM;AACxD;"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Full tool outputs fetched back for messages the windowed wire carried cut
3
+ * (`history/tool_output`), keyed by tool message id.
4
+ *
5
+ * The converter substitutes an entry into the wire message before the shared
6
+ * lift pipeline runs (`convertDeepAgentState({ toolOutputs })`), so every tool
7
+ * card downstream sees the whole output without knowing it was ever cut. An
8
+ * entry records the `chars` of the output it was fetched for: the wire's cut
9
+ * marker carries the output's full length, so an output the host has since
10
+ * replaced under the same message id (a rerun, a rewrite) mismatches and is
11
+ * fetched again instead of showing the stale text. The store is subscribable
12
+ * so the thread re-converts when an output lands; hosts keep one per tab (a
13
+ * message id is unique across threads) and clear it when the acting identity
14
+ * changes, like the snapshot cache.
15
+ */
16
+ export interface DeepAgentToolOutputEntry {
17
+ content: unknown;
18
+ /** The full length the wire's cut marker reported when this was fetched. */
19
+ chars: number;
20
+ }
21
+ export interface DeepAgentToolOutputStore {
22
+ entry(messageId: string): DeepAgentToolOutputEntry | undefined;
23
+ set(messageId: string, entry: DeepAgentToolOutputEntry): void;
24
+ /** Ids requested but not answered yet — the loader's dedupe. */
25
+ isPending(messageId: string): boolean;
26
+ markPending(messageId: string): void;
27
+ clearPending(messageId: string): void;
28
+ subscribe(listener: () => void): () => void;
29
+ clear(): void;
30
+ }
31
+ export interface DeepAgentToolOutputStoreOptions {
32
+ /** Outputs retained; the least-recently set entry evicts beyond this. */
33
+ maxEntries?: number;
34
+ }
35
+ export declare function createDeepAgentToolOutputStore(options?: DeepAgentToolOutputStoreOptions): DeepAgentToolOutputStore;
@@ -99,6 +99,7 @@ function classifyToolResult({
99
99
  isError,
100
100
  passThroughPayload
101
101
  }) {
102
+ if ((status == null ? void 0 : status.type) === "running") return { state: "running" };
102
103
  const notice = pausedNotice(result);
103
104
  if (notice) return { state: "paused", notice };
104
105
  const rejection = passThroughPayload ? null : readRejectedToolResult(result);
@@ -1 +1 @@
1
- {"version":3,"file":"tool-result.cjs","sources":["../../../../agent-runtime/src/tool-result.ts"],"sourcesContent":["/**\n * Tool-result classification shared by every tool card and activity timeline\n * (the React SDK fallback, Olympus, the Chrome extension, the Office add-in,\n * mobile). One rule set for \"did this call succeed?\", so a result that reads\n * as a failure on one surface cannot read as a success on another.\n *\n * The rules, in order:\n *\n * 1. An `incomplete` status is a failure; a `cancelled` reason reads as\n * \"Cancelled\".\n * 2. A string result opening with \"⏸️ Interrupted —\" is a **paused** call (the\n * runtime parked it), not a failure.\n * 2b. A result that records the user's refusal at the approval gate (see\n * {@link readRejectedToolResult}) is a **rejected** call — neither a success\n * nor a failure. It is read before the failure rules because the HITL\n * runtime answers a refused call with an error-status tool message whose\n * content is the refusal, which would otherwise read as a plain failure.\n * Never applied to a pass-through payload: page JavaScript relays whatever\n * the page returned, and a `{ status: \"rejected\" }` from a fetched API is\n * the page's business, not a human decision.\n * 3. A result record whose `success` or `ok` is `false` is a failure, with\n * the best message available (`error`, `message`, `reason`, or a\n * `data.humanIntervention` detail). Athena tools report failures this way\n * — the sheet tools answer `{ success: false, message: \"…\" }` — so a bare\n * flag must read as a failure. The one exception is a **pass-through\n * payload** (`passThroughPayload: true`): page JavaScript relays whatever\n * the page returned, and `{ success: false, message: \"Payment required\" }`\n * from a fetched API is the page's business, not the tool failing, so there\n * the flag counts only alongside an error detail (`error`, `errorCode`,\n * `error_code`, or a `humanIntervention` message / reason / code). The\n * Chrome extension opts its `chrome_javascript` tool in; everything else\n * takes the default.\n * 4. A result record with a non-empty `error` string is a failure regardless\n * of flags — every Athena tool contract uses that field only on failure.\n * 5. A plain-string result opening with an explicit error prefix (`Error:`,\n * `Tool execution failed`, `Failed to route tool call`) is a failure —\n * device-tunnel failures arrive in successful ToolMessages, so the prefix\n * is the authoritative signal there. A bare leading \"Error\" word is not\n * (an \"Error handling guide\" is content). A batch report that stopped at a\n * step reads its header and failing step.\n * 6. assistant-ui's own `isError` flag is a failure with the best message\n * available.\n * 7. `requires-action` and a result-less non-complete status read as such;\n * everything else is a success.\n */\n\n/** The status shape a tool-call message part carries (structurally typed so this module stays UI-library-free). */\nexport interface ToolCallStatusLike {\n type: 'running' | 'complete' | 'incomplete' | 'requires-action';\n reason?: string;\n error?: unknown;\n}\n\nexport interface ToolFailure {\n message: string;\n code?: string;\n}\n\nexport type ToolResultClassification =\n | { state: 'running' }\n | { state: 'complete' }\n | { state: 'requires-action' }\n | { state: 'paused'; notice: string }\n | { state: 'rejected'; rejection: RejectedToolResult }\n | { state: 'error'; failure: ToolFailure };\n\nexport type ToolResultState = ToolResultClassification['state'];\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\n/** Parse a JSON string into a record, or `null` when it is not one. */\nexport function parseJsonRecord(value: string): Record<string, unknown> | null {\n try {\n const parsed: unknown = JSON.parse(value);\n return isRecord(parsed) ? parsed : null;\n } catch {\n return null;\n }\n}\n\n/** The result as a record: parsed when it arrived as a JSON string. */\nexport function resultRecord(result: unknown): Record<string, unknown> | null {\n if (typeof result === 'string') return parseJsonRecord(result);\n return isRecord(result) ? result : null;\n}\n\n/** The first non-blank string among `keys` on `record`, or `null`. */\nexport function stringField(\n record: Record<string, unknown> | null | undefined,\n keys: readonly string[],\n): string | null {\n if (!record) return null;\n for (const key of keys) {\n const value = record[key];\n if (typeof value === 'string' && value.trim()) return value;\n }\n return null;\n}\n\n/** The `message` a result carries, when it does (the row's completion summary). */\nexport function resultMessage(result: unknown): string | null {\n return stringField(resultRecord(result), ['message']);\n}\n\nconst FAILURE_DETAIL_KEYS = ['error', 'errorCode', 'error_code'] as const;\nconst INTERVENTION_DETAIL_KEYS = ['message', 'reason', 'errorCode', 'error_code'] as const;\nconst FAILURE_CODE_KEYS = ['errorCode', 'error_code', 'code'] as const;\nconst FAILURE_MESSAGE_KEYS = ['error', 'message', 'reason'] as const;\n\nfunction batchReportFailure(trimmed: string): string | null {\n const lines = trimmed.split('\\n');\n const header = lines[0]?.trim() ?? '';\n if (!/^[\\w.-]*batch: \\d+\\/\\d+ ok — STOPPED at step \\d+/.test(header)) {\n return null;\n }\n const stepError = lines\n .map((line) => line.trim())\n .find(\n (line) =>\n /^\\d+\\.\\s/.test(line) && (line.includes(' ERROR — ') || line.endsWith(' ERROR')),\n );\n return stepError ? `${header}\\n${stepError}` : header;\n}\n\nconst STRING_ERROR_PREFIX = /^(?:Error:|Tool execution failed\\b|Failed to route tool call\\b)\\s*/;\n\nfunction plainStringError(result: unknown): string | null {\n if (typeof result !== 'string') return null;\n const trimmed = result.trim();\n if (!trimmed || parseJsonRecord(trimmed)) return null;\n if (STRING_ERROR_PREFIX.test(trimmed)) {\n return trimmed.replace(STRING_ERROR_PREFIX, '').trim() || trimmed;\n }\n return batchReportFailure(trimmed);\n}\n\nfunction pausedNotice(result: unknown): string | null {\n if (typeof result !== 'string') return null;\n const trimmed = result.trim();\n return /^⏸️?\\s*Interrupted —/.test(trimmed) ? trimmed : null;\n}\n\nfunction stringifyUnknown(value: unknown): string | null {\n if (value == null) return null;\n if (typeof value === 'string') return value;\n if (value instanceof Error) return value.message;\n try {\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n}\n\n/** The failure a tool call reports, or `null` when it succeeded (rules 1, 3-6). */\nexport function toolFailure({\n status,\n result,\n isError,\n passThroughPayload = false,\n}: {\n status?: ToolCallStatusLike;\n result?: unknown;\n isError?: boolean;\n /** The result is an application payload relayed verbatim (rule 3): a flag needs an error detail to count. */\n passThroughPayload?: boolean;\n}): ToolFailure | null {\n if (status?.type === 'incomplete') {\n const errorText = stringifyUnknown(status.error);\n return {\n message:\n errorText ??\n (status.reason === 'cancelled' ? 'Cancelled' : `Tool stopped: ${status.reason}`),\n };\n }\n\n const record = resultRecord(result);\n const data = isRecord(record?.data) ? record.data : null;\n const humanIntervention = isRecord(data?.humanIntervention) ? data.humanIntervention : null;\n const failureDetail =\n stringField(record, FAILURE_DETAIL_KEYS) ??\n stringField(humanIntervention, INTERVENTION_DETAIL_KEYS);\n const flagged = record?.success === false || record?.ok === false;\n const flaggedFailure = flagged && (!passThroughPayload || failureDetail !== null);\n const errorField = stringField(record, ['error']) !== null;\n const stringError = plainStringError(result);\n\n if (!isError && !flaggedFailure && !errorField && !stringError) return null;\n\n const code =\n stringField(record, FAILURE_CODE_KEYS) ??\n stringField(humanIntervention, FAILURE_CODE_KEYS) ??\n undefined;\n const message =\n stringField(record, FAILURE_MESSAGE_KEYS) ??\n stringField(humanIntervention, FAILURE_MESSAGE_KEYS) ??\n stringError ??\n (typeof result === 'string' && !parseJsonRecord(result) ? result : null) ??\n 'Tool execution failed';\n\n return { message, code };\n}\n\n/** Classify a tool call for rendering (see the module docs for the rules). */\nexport function classifyToolResult({\n status,\n result,\n isError,\n passThroughPayload,\n}: {\n status?: ToolCallStatusLike;\n result?: unknown;\n isError?: boolean;\n /** The result is an application payload relayed verbatim (rule 3): a flag needs an error detail to count. */\n passThroughPayload?: boolean;\n}): ToolResultClassification {\n const notice = pausedNotice(result);\n if (notice) return { state: 'paused', notice };\n\n const rejection = passThroughPayload ? null : readRejectedToolResult(result);\n if (rejection) return { state: 'rejected', rejection };\n\n const failure = toolFailure({ status, result, isError, passThroughPayload });\n if (failure) return { state: 'error', failure };\n if (status?.type === 'requires-action') return { state: 'requires-action' };\n if (result === undefined && status?.type !== 'complete') {\n return { state: 'running' };\n }\n return { state: 'complete' };\n}\n\n/** True when a completed call reads as a success under the shared rules. */\nexport function isToolResultSuccess(result: unknown): boolean {\n return classifyToolResult({ status: { type: 'complete' }, result }).state === 'complete';\n}\n\n/**\n * A gated tool call the user rejected still \"completes\": both HITL runtimes\n * answer the rejected call with a `ToolMessage` whose text is the rejection\n * (\"Tool call rejected by user. Reason: …\"), and device tools may answer with\n * a structured decision (`{ status: 'rejected' }`, `{ action: 'reject' }`,\n * `{ decision: 'rejected' }`). Anything that labels a finished call has to\n * read that, or a rejected email send reports itself as sent. The read is\n * content-based, so it is scoped to where a rejection can appear: the opening\n * of a string result, never deep inside returned content, and never a\n * pass-through page payload (see {@link classifyToolResult}).\n */\nexport interface RejectedToolResult {\n /** The feedback the user typed, when they gave one. */\n reason: string | null;\n}\n\n/**\n * Phrasings the HITL runtimes use for a *human* rejection. Matching on these\n * rather than the word \"reject\" keeps deterministic failures out — argument\n * validation answers a call with \"Tool call rejected — ValidationError: …\",\n * which never involved the user and stays a plain failure.\n */\nconst USER_REJECTION_PATTERNS: readonly RegExp[] = [/rejected by (?:the )?user/i, /user rejected/i];\n\n/**\n * A rejection IS the tool message, so the phrasing opens it: \"The user rejected\n * this action. …\" (`hitl_bridge.py`), \"Tool call rejected by user. Reason: …\",\n * \"Tool 'x' execution rejected by user. …\", \"[INTERRUPT] Custom interrupt\n * '<uuid>' rejected by user. …\". Content a tool merely *returned* — a page read\n * or a document whose text happens to say a user rejected something — carries\n * the phrase deeper in, so only a match starting within this many characters\n * of the first line counts.\n */\nconst USER_REJECTION_LEAD_CHARS = 100;\n\n/** Whether `result` opens with a human-rejection phrasing (see {@link USER_REJECTION_LEAD_CHARS}). */\nfunction opensWithUserRejection(result: string): boolean {\n const firstLine = result.trimStart().split('\\n', 1)[0] ?? '';\n return USER_REJECTION_PATTERNS.some((pattern) => {\n const index = firstLine.search(pattern);\n return index !== -1 && index < USER_REJECTION_LEAD_CHARS;\n });\n}\n\n/** Reject-with-no-feedback placeholder the legacy approval editor sends. */\nconst NO_REASON = 'no reason provided';\n\n/**\n * Model-facing guidance the legacy HITL node appends on the same line after\n * the reason (\"… Reason: <reason> Acknowledge in one short sentence. Do not\n * retry…\"). It is instruction for the model, not the user's feedback.\n */\nconst TRAILING_GUIDANCE = /\\s*Acknowledge in one short sentence\\..*$/i;\n\n/**\n * How LangChain's HITL middleware answers a refused call: \"User rejected the\n * tool call for `x` with reason: <message>\", where <message> is the one the\n * deep-agent bridge (`hitl_bridge.py`) handed it.\n */\nconst MIDDLEWARE_ENVELOPE = /^User rejected the tool call for `[^`]*` with reason:\\s*/i;\n\n/**\n * The bridge's refusal, which opens its message. Inside the middleware envelope\n * it is scaffolding, not feedback; the member's own reason, when they gave one,\n * follows it as \"Reason: …\". Outside the envelope the text after \"Reason:\" is\n * the member's, whatever it says.\n */\nconst BRIDGE_REFUSAL = /^The user rejected this action\\.\\s*/i;\n\n/** Everything after \"Reason:\"; feedback typed in the approval editor can span lines. */\nconst REASON_TAIL = /Reason:\\s*([\\s\\S]+)/i;\n\nfunction readRejectionReason(result: string): string | null {\n const text = result.trim();\n const envelope = MIDDLEWARE_ENVELOPE.exec(text);\n let reason: string | undefined;\n if (envelope) {\n const message = text.slice(envelope[0].length).replace(TRAILING_GUIDANCE, '').trim();\n reason = BRIDGE_REFUSAL.test(message)\n ? message.replace(BRIDGE_REFUSAL, '').match(/^Reason:\\s*([\\s\\S]+)/i)?.[1]\n : message;\n } else {\n reason = text.match(REASON_TAIL)?.[1]?.replace(TRAILING_GUIDANCE, '');\n }\n reason = reason?.trim();\n if (!reason || reason.toLowerCase() === NO_REASON) return null;\n return reason;\n}\n\n/**\n * Read a rejection out of a completed tool call's result, or `null` when the\n * call actually ran (or failed for a non-approval reason).\n */\nexport function readRejectedToolResult(result: unknown): RejectedToolResult | null {\n if (typeof result === 'string') {\n if (!opensWithUserRejection(result)) return null;\n return { reason: readRejectionReason(result) };\n }\n if (!isRecord(result)) return null;\n if (result.status === 'rejected' || result.action === 'reject' || result.decision === 'rejected') {\n return { reason: stringField(result, ['reason']) };\n }\n return null;\n}\n\n/** True when a completed call's result records that the user rejected it. */\nexport function isRejectedToolResult(result: unknown): boolean {\n return readRejectedToolResult(result) !== null;\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tool-result.cjs","sources":["../../../../agent-runtime/src/tool-result.ts"],"sourcesContent":["/**\n * Tool-result classification shared by every tool card and activity timeline\n * (the React SDK fallback, Olympus, the Chrome extension, the Office add-in,\n * mobile). One rule set for \"did this call succeed?\", so a result that reads\n * as a failure on one surface cannot read as a success on another.\n *\n * The rules, in order:\n *\n * 0. A `running` status is a running call, whatever result it carries: a part\n * only has both while its result is interim (`isPreliminary` — the\n * backend's running-tool placeholder, see `running-tool-placeholder.ts`),\n * and assistant-ui gives such a part its message's status. A settled\n * result always comes with `complete`.\n * 1. An `incomplete` status is a failure; a `cancelled` reason reads as\n * \"Cancelled\".\n * 2. A string result opening with \"⏸️ Interrupted —\" is a **paused** call (the\n * runtime parked it), not a failure.\n * 2b. A result that records the user's refusal at the approval gate (see\n * {@link readRejectedToolResult}) is a **rejected** call — neither a success\n * nor a failure. It is read before the failure rules because the HITL\n * runtime answers a refused call with an error-status tool message whose\n * content is the refusal, which would otherwise read as a plain failure.\n * Never applied to a pass-through payload: page JavaScript relays whatever\n * the page returned, and a `{ status: \"rejected\" }` from a fetched API is\n * the page's business, not a human decision.\n * 3. A result record whose `success` or `ok` is `false` is a failure, with\n * the best message available (`error`, `message`, `reason`, or a\n * `data.humanIntervention` detail). Athena tools report failures this way\n * — the sheet tools answer `{ success: false, message: \"…\" }` — so a bare\n * flag must read as a failure. The one exception is a **pass-through\n * payload** (`passThroughPayload: true`): page JavaScript relays whatever\n * the page returned, and `{ success: false, message: \"Payment required\" }`\n * from a fetched API is the page's business, not the tool failing, so there\n * the flag counts only alongside an error detail (`error`, `errorCode`,\n * `error_code`, or a `humanIntervention` message / reason / code). The\n * Chrome extension opts its `chrome_javascript` tool in; everything else\n * takes the default.\n * 4. A result record with a non-empty `error` string is a failure regardless\n * of flags — every Athena tool contract uses that field only on failure.\n * 5. A plain-string result opening with an explicit error prefix (`Error:`,\n * `Tool execution failed`, `Failed to route tool call`) is a failure —\n * device-tunnel failures arrive in successful ToolMessages, so the prefix\n * is the authoritative signal there. A bare leading \"Error\" word is not\n * (an \"Error handling guide\" is content). A batch report that stopped at a\n * step reads its header and failing step.\n * 6. assistant-ui's own `isError` flag is a failure with the best message\n * available.\n * 7. `requires-action` and a result-less non-complete status read as such;\n * everything else is a success.\n */\n\n/** The status shape a tool-call message part carries (structurally typed so this module stays UI-library-free). */\nexport interface ToolCallStatusLike {\n type: 'running' | 'complete' | 'incomplete' | 'requires-action';\n reason?: string;\n error?: unknown;\n}\n\nexport interface ToolFailure {\n message: string;\n code?: string;\n}\n\nexport type ToolResultClassification =\n | { state: 'running' }\n | { state: 'complete' }\n | { state: 'requires-action' }\n | { state: 'paused'; notice: string }\n | { state: 'rejected'; rejection: RejectedToolResult }\n | { state: 'error'; failure: ToolFailure };\n\nexport type ToolResultState = ToolResultClassification['state'];\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\n/** Parse a JSON string into a record, or `null` when it is not one. */\nexport function parseJsonRecord(value: string): Record<string, unknown> | null {\n try {\n const parsed: unknown = JSON.parse(value);\n return isRecord(parsed) ? parsed : null;\n } catch {\n return null;\n }\n}\n\n/** The result as a record: parsed when it arrived as a JSON string. */\nexport function resultRecord(result: unknown): Record<string, unknown> | null {\n if (typeof result === 'string') return parseJsonRecord(result);\n return isRecord(result) ? result : null;\n}\n\n/** The first non-blank string among `keys` on `record`, or `null`. */\nexport function stringField(\n record: Record<string, unknown> | null | undefined,\n keys: readonly string[],\n): string | null {\n if (!record) return null;\n for (const key of keys) {\n const value = record[key];\n if (typeof value === 'string' && value.trim()) return value;\n }\n return null;\n}\n\n/** The `message` a result carries, when it does (the row's completion summary). */\nexport function resultMessage(result: unknown): string | null {\n return stringField(resultRecord(result), ['message']);\n}\n\nconst FAILURE_DETAIL_KEYS = ['error', 'errorCode', 'error_code'] as const;\nconst INTERVENTION_DETAIL_KEYS = ['message', 'reason', 'errorCode', 'error_code'] as const;\nconst FAILURE_CODE_KEYS = ['errorCode', 'error_code', 'code'] as const;\nconst FAILURE_MESSAGE_KEYS = ['error', 'message', 'reason'] as const;\n\nfunction batchReportFailure(trimmed: string): string | null {\n const lines = trimmed.split('\\n');\n const header = lines[0]?.trim() ?? '';\n if (!/^[\\w.-]*batch: \\d+\\/\\d+ ok — STOPPED at step \\d+/.test(header)) {\n return null;\n }\n const stepError = lines\n .map((line) => line.trim())\n .find(\n (line) =>\n /^\\d+\\.\\s/.test(line) && (line.includes(' ERROR — ') || line.endsWith(' ERROR')),\n );\n return stepError ? `${header}\\n${stepError}` : header;\n}\n\nconst STRING_ERROR_PREFIX = /^(?:Error:|Tool execution failed\\b|Failed to route tool call\\b)\\s*/;\n\nfunction plainStringError(result: unknown): string | null {\n if (typeof result !== 'string') return null;\n const trimmed = result.trim();\n if (!trimmed || parseJsonRecord(trimmed)) return null;\n if (STRING_ERROR_PREFIX.test(trimmed)) {\n return trimmed.replace(STRING_ERROR_PREFIX, '').trim() || trimmed;\n }\n return batchReportFailure(trimmed);\n}\n\nfunction pausedNotice(result: unknown): string | null {\n if (typeof result !== 'string') return null;\n const trimmed = result.trim();\n return /^⏸️?\\s*Interrupted —/.test(trimmed) ? trimmed : null;\n}\n\nfunction stringifyUnknown(value: unknown): string | null {\n if (value == null) return null;\n if (typeof value === 'string') return value;\n if (value instanceof Error) return value.message;\n try {\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n}\n\n/** The failure a tool call reports, or `null` when it succeeded (rules 1, 3-6). */\nexport function toolFailure({\n status,\n result,\n isError,\n passThroughPayload = false,\n}: {\n status?: ToolCallStatusLike;\n result?: unknown;\n isError?: boolean;\n /** The result is an application payload relayed verbatim (rule 3): a flag needs an error detail to count. */\n passThroughPayload?: boolean;\n}): ToolFailure | null {\n if (status?.type === 'incomplete') {\n const errorText = stringifyUnknown(status.error);\n return {\n message:\n errorText ??\n (status.reason === 'cancelled' ? 'Cancelled' : `Tool stopped: ${status.reason}`),\n };\n }\n\n const record = resultRecord(result);\n const data = isRecord(record?.data) ? record.data : null;\n const humanIntervention = isRecord(data?.humanIntervention) ? data.humanIntervention : null;\n const failureDetail =\n stringField(record, FAILURE_DETAIL_KEYS) ??\n stringField(humanIntervention, INTERVENTION_DETAIL_KEYS);\n const flagged = record?.success === false || record?.ok === false;\n const flaggedFailure = flagged && (!passThroughPayload || failureDetail !== null);\n const errorField = stringField(record, ['error']) !== null;\n const stringError = plainStringError(result);\n\n if (!isError && !flaggedFailure && !errorField && !stringError) return null;\n\n const code =\n stringField(record, FAILURE_CODE_KEYS) ??\n stringField(humanIntervention, FAILURE_CODE_KEYS) ??\n undefined;\n const message =\n stringField(record, FAILURE_MESSAGE_KEYS) ??\n stringField(humanIntervention, FAILURE_MESSAGE_KEYS) ??\n stringError ??\n (typeof result === 'string' && !parseJsonRecord(result) ? result : null) ??\n 'Tool execution failed';\n\n return { message, code };\n}\n\n/** Classify a tool call for rendering (see the module docs for the rules). */\nexport function classifyToolResult({\n status,\n result,\n isError,\n passThroughPayload,\n}: {\n status?: ToolCallStatusLike;\n result?: unknown;\n isError?: boolean;\n /** The result is an application payload relayed verbatim (rule 3): a flag needs an error detail to count. */\n passThroughPayload?: boolean;\n}): ToolResultClassification {\n if (status?.type === 'running') return { state: 'running' };\n\n const notice = pausedNotice(result);\n if (notice) return { state: 'paused', notice };\n\n const rejection = passThroughPayload ? null : readRejectedToolResult(result);\n if (rejection) return { state: 'rejected', rejection };\n\n const failure = toolFailure({ status, result, isError, passThroughPayload });\n if (failure) return { state: 'error', failure };\n if (status?.type === 'requires-action') return { state: 'requires-action' };\n if (result === undefined && status?.type !== 'complete') {\n return { state: 'running' };\n }\n return { state: 'complete' };\n}\n\n/** True when a completed call reads as a success under the shared rules. */\nexport function isToolResultSuccess(result: unknown): boolean {\n return classifyToolResult({ status: { type: 'complete' }, result }).state === 'complete';\n}\n\n/**\n * A gated tool call the user rejected still \"completes\": both HITL runtimes\n * answer the rejected call with a `ToolMessage` whose text is the rejection\n * (\"Tool call rejected by user. Reason: …\"), and device tools may answer with\n * a structured decision (`{ status: 'rejected' }`, `{ action: 'reject' }`,\n * `{ decision: 'rejected' }`). Anything that labels a finished call has to\n * read that, or a rejected email send reports itself as sent. The read is\n * content-based, so it is scoped to where a rejection can appear: the opening\n * of a string result, never deep inside returned content, and never a\n * pass-through page payload (see {@link classifyToolResult}).\n */\nexport interface RejectedToolResult {\n /** The feedback the user typed, when they gave one. */\n reason: string | null;\n}\n\n/**\n * Phrasings the HITL runtimes use for a *human* rejection. Matching on these\n * rather than the word \"reject\" keeps deterministic failures out — argument\n * validation answers a call with \"Tool call rejected — ValidationError: …\",\n * which never involved the user and stays a plain failure.\n */\nconst USER_REJECTION_PATTERNS: readonly RegExp[] = [/rejected by (?:the )?user/i, /user rejected/i];\n\n/**\n * A rejection IS the tool message, so the phrasing opens it: \"The user rejected\n * this action. …\" (`hitl_bridge.py`), \"Tool call rejected by user. Reason: …\",\n * \"Tool 'x' execution rejected by user. …\", \"[INTERRUPT] Custom interrupt\n * '<uuid>' rejected by user. …\". Content a tool merely *returned* — a page read\n * or a document whose text happens to say a user rejected something — carries\n * the phrase deeper in, so only a match starting within this many characters\n * of the first line counts.\n */\nconst USER_REJECTION_LEAD_CHARS = 100;\n\n/** Whether `result` opens with a human-rejection phrasing (see {@link USER_REJECTION_LEAD_CHARS}). */\nfunction opensWithUserRejection(result: string): boolean {\n const firstLine = result.trimStart().split('\\n', 1)[0] ?? '';\n return USER_REJECTION_PATTERNS.some((pattern) => {\n const index = firstLine.search(pattern);\n return index !== -1 && index < USER_REJECTION_LEAD_CHARS;\n });\n}\n\n/** Reject-with-no-feedback placeholder the legacy approval editor sends. */\nconst NO_REASON = 'no reason provided';\n\n/**\n * Model-facing guidance the legacy HITL node appends on the same line after\n * the reason (\"… Reason: <reason> Acknowledge in one short sentence. Do not\n * retry…\"). It is instruction for the model, not the user's feedback.\n */\nconst TRAILING_GUIDANCE = /\\s*Acknowledge in one short sentence\\..*$/i;\n\n/**\n * How LangChain's HITL middleware answers a refused call: \"User rejected the\n * tool call for `x` with reason: <message>\", where <message> is the one the\n * deep-agent bridge (`hitl_bridge.py`) handed it.\n */\nconst MIDDLEWARE_ENVELOPE = /^User rejected the tool call for `[^`]*` with reason:\\s*/i;\n\n/**\n * The bridge's refusal, which opens its message. Inside the middleware envelope\n * it is scaffolding, not feedback; the member's own reason, when they gave one,\n * follows it as \"Reason: …\". Outside the envelope the text after \"Reason:\" is\n * the member's, whatever it says.\n */\nconst BRIDGE_REFUSAL = /^The user rejected this action\\.\\s*/i;\n\n/** Everything after \"Reason:\"; feedback typed in the approval editor can span lines. */\nconst REASON_TAIL = /Reason:\\s*([\\s\\S]+)/i;\n\nfunction readRejectionReason(result: string): string | null {\n const text = result.trim();\n const envelope = MIDDLEWARE_ENVELOPE.exec(text);\n let reason: string | undefined;\n if (envelope) {\n const message = text.slice(envelope[0].length).replace(TRAILING_GUIDANCE, '').trim();\n reason = BRIDGE_REFUSAL.test(message)\n ? message.replace(BRIDGE_REFUSAL, '').match(/^Reason:\\s*([\\s\\S]+)/i)?.[1]\n : message;\n } else {\n reason = text.match(REASON_TAIL)?.[1]?.replace(TRAILING_GUIDANCE, '');\n }\n reason = reason?.trim();\n if (!reason || reason.toLowerCase() === NO_REASON) return null;\n return reason;\n}\n\n/**\n * Read a rejection out of a completed tool call's result, or `null` when the\n * call actually ran (or failed for a non-approval reason).\n */\nexport function readRejectedToolResult(result: unknown): RejectedToolResult | null {\n if (typeof result === 'string') {\n if (!opensWithUserRejection(result)) return null;\n return { reason: readRejectionReason(result) };\n }\n if (!isRecord(result)) return null;\n if (result.status === 'rejected' || result.action === 'reject' || result.decision === 'rejected') {\n return { reason: stringField(result, ['reason']) };\n }\n return null;\n}\n\n/** True when a completed call's result records that the user rejected it. */\nexport function isRejectedToolResult(result: unknown): boolean {\n return readRejectedToolResult(result) !== null;\n}\n"],"names":[],"mappings":";;AAyEO,SAAS,SAAS,OAAkD;AACzE,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAGO,SAAS,gBAAgB,OAA+C;AAC7E,MAAI;AACF,UAAM,SAAkB,KAAK,MAAM,KAAK;AACxC,WAAO,SAAS,MAAM,IAAI,SAAS;AAAA,EACrC,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAGO,SAAS,aAAa,QAAiD;AAC5E,MAAI,OAAO,WAAW,SAAU,QAAO,gBAAgB,MAAM;AAC7D,SAAO,SAAS,MAAM,IAAI,SAAS;AACrC;AAGO,SAAS,YACd,QACA,MACe;AACf,MAAI,CAAC,OAAQ,QAAO;AACpB,aAAW,OAAO,MAAM;AACtB,UAAM,QAAQ,OAAO,GAAG;AACxB,QAAI,OAAO,UAAU,YAAY,MAAM,KAAA,EAAQ,QAAO;AAAA,EACxD;AACA,SAAO;AACT;AAGO,SAAS,cAAc,QAAgC;AAC5D,SAAO,YAAY,aAAa,MAAM,GAAG,CAAC,SAAS,CAAC;AACtD;AAEA,MAAM,sBAAsB,CAAC,SAAS,aAAa,YAAY;AAC/D,MAAM,2BAA2B,CAAC,WAAW,UAAU,aAAa,YAAY;AAChF,MAAM,oBAAoB,CAAC,aAAa,cAAc,MAAM;AAC5D,MAAM,uBAAuB,CAAC,SAAS,WAAW,QAAQ;AAE1D,SAAS,mBAAmB,SAAgC;;AAC1D,QAAM,QAAQ,QAAQ,MAAM,IAAI;AAChC,QAAM,WAAS,WAAM,CAAC,MAAP,mBAAU,WAAU;AACnC,MAAI,CAAC,mDAAmD,KAAK,MAAM,GAAG;AACpE,WAAO;AAAA,EACT;AACA,QAAM,YAAY,MACf,IAAI,CAAC,SAAS,KAAK,KAAA,CAAM,EACzB;AAAA,IACC,CAAC,SACC,WAAW,KAAK,IAAI,MAAM,KAAK,SAAS,WAAW,KAAK,KAAK,SAAS,QAAQ;AAAA,EAAA;AAEpF,SAAO,YAAY,GAAG,MAAM;AAAA,EAAK,SAAS,KAAK;AACjD;AAEA,MAAM,sBAAsB;AAE5B,SAAS,iBAAiB,QAAgC;AACxD,MAAI,OAAO,WAAW,SAAU,QAAO;AACvC,QAAM,UAAU,OAAO,KAAA;AACvB,MAAI,CAAC,WAAW,gBAAgB,OAAO,EAAG,QAAO;AACjD,MAAI,oBAAoB,KAAK,OAAO,GAAG;AACrC,WAAO,QAAQ,QAAQ,qBAAqB,EAAE,EAAE,UAAU;AAAA,EAC5D;AACA,SAAO,mBAAmB,OAAO;AACnC;AAEA,SAAS,aAAa,QAAgC;AACpD,MAAI,OAAO,WAAW,SAAU,QAAO;AACvC,QAAM,UAAU,OAAO,KAAA;AACvB,SAAO,uBAAuB,KAAK,OAAO,IAAI,UAAU;AAC1D;AAEA,SAAS,iBAAiB,OAA+B;AACvD,MAAI,SAAS,KAAM,QAAO;AAC1B,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,MAAI,iBAAiB,MAAO,QAAO,MAAM;AACzC,MAAI;AACF,WAAO,KAAK,UAAU,KAAK;AAAA,EAC7B,QAAQ;AACN,WAAO,OAAO,KAAK;AAAA,EACrB;AACF;AAGO,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA,qBAAqB;AACvB,GAMuB;AACrB,OAAI,iCAAQ,UAAS,cAAc;AACjC,UAAM,YAAY,iBAAiB,OAAO,KAAK;AAC/C,WAAO;AAAA,MACL,SACE,cACC,OAAO,WAAW,cAAc,cAAc,iBAAiB,OAAO,MAAM;AAAA,IAAA;AAAA,EAEnF;AAEA,QAAM,SAAS,aAAa,MAAM;AAClC,QAAM,OAAO,SAAS,iCAAQ,IAAI,IAAI,OAAO,OAAO;AACpD,QAAM,oBAAoB,SAAS,6BAAM,iBAAiB,IAAI,KAAK,oBAAoB;AACvF,QAAM,gBACJ,YAAY,QAAQ,mBAAmB,KACvC,YAAY,mBAAmB,wBAAwB;AACzD,QAAM,WAAU,iCAAQ,aAAY,UAAS,iCAAQ,QAAO;AAC5D,QAAM,iBAAiB,YAAY,CAAC,sBAAsB,kBAAkB;AAC5E,QAAM,aAAa,YAAY,QAAQ,CAAC,OAAO,CAAC,MAAM;AACtD,QAAM,cAAc,iBAAiB,MAAM;AAE3C,MAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,cAAc,CAAC,YAAa,QAAO;AAEvE,QAAM,OACJ,YAAY,QAAQ,iBAAiB,KACrC,YAAY,mBAAmB,iBAAiB,KAChD;AACF,QAAM,UACJ,YAAY,QAAQ,oBAAoB,KACxC,YAAY,mBAAmB,oBAAoB,KACnD,gBACC,OAAO,WAAW,YAAY,CAAC,gBAAgB,MAAM,IAAI,SAAS,SACnE;AAEF,SAAO,EAAE,SAAS,KAAA;AACpB;AAGO,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAM6B;AAC3B,OAAI,iCAAQ,UAAS,UAAW,QAAO,EAAE,OAAO,UAAA;AAEhD,QAAM,SAAS,aAAa,MAAM;AAClC,MAAI,OAAQ,QAAO,EAAE,OAAO,UAAU,OAAA;AAEtC,QAAM,YAAY,qBAAqB,OAAO,uBAAuB,MAAM;AAC3E,MAAI,UAAW,QAAO,EAAE,OAAO,YAAY,UAAA;AAE3C,QAAM,UAAU,YAAY,EAAE,QAAQ,QAAQ,SAAS,oBAAoB;AAC3E,MAAI,QAAS,QAAO,EAAE,OAAO,SAAS,QAAA;AACtC,OAAI,iCAAQ,UAAS,kBAAmB,QAAO,EAAE,OAAO,kBAAA;AACxD,MAAI,WAAW,WAAa,iCAAQ,UAAS,YAAY;AACvD,WAAO,EAAE,OAAO,UAAA;AAAA,EAClB;AACA,SAAO,EAAE,OAAO,WAAA;AAClB;AAGO,SAAS,oBAAoB,QAA0B;AAC5D,SAAO,mBAAmB,EAAE,QAAQ,EAAE,MAAM,cAAc,OAAA,CAAQ,EAAE,UAAU;AAChF;AAwBA,MAAM,0BAA6C,CAAC,8BAA8B,gBAAgB;AAWlG,MAAM,4BAA4B;AAGlC,SAAS,uBAAuB,QAAyB;AACvD,QAAM,YAAY,OAAO,YAAY,MAAM,MAAM,CAAC,EAAE,CAAC,KAAK;AAC1D,SAAO,wBAAwB,KAAK,CAAC,YAAY;AAC/C,UAAM,QAAQ,UAAU,OAAO,OAAO;AACtC,WAAO,UAAU,MAAM,QAAQ;AAAA,EACjC,CAAC;AACH;AAGA,MAAM,YAAY;AAOlB,MAAM,oBAAoB;AAO1B,MAAM,sBAAsB;AAQ5B,MAAM,iBAAiB;AAGvB,MAAM,cAAc;AAEpB,SAAS,oBAAoB,QAA+B;;AAC1D,QAAM,OAAO,OAAO,KAAA;AACpB,QAAM,WAAW,oBAAoB,KAAK,IAAI;AAC9C,MAAI;AACJ,MAAI,UAAU;AACZ,UAAM,UAAU,KAAK,MAAM,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,mBAAmB,EAAE,EAAE,KAAA;AAC9E,aAAS,eAAe,KAAK,OAAO,KAChC,aAAQ,QAAQ,gBAAgB,EAAE,EAAE,MAAM,uBAAuB,MAAjE,mBAAqE,KACrE;AAAA,EACN,OAAO;AACL,cAAS,gBAAK,MAAM,WAAW,MAAtB,mBAA0B,OAA1B,mBAA8B,QAAQ,mBAAmB;AAAA,EACpE;AACA,WAAS,iCAAQ;AACjB,MAAI,CAAC,UAAU,OAAO,YAAA,MAAkB,UAAW,QAAO;AAC1D,SAAO;AACT;AAMO,SAAS,uBAAuB,QAA4C;AACjF,MAAI,OAAO,WAAW,UAAU;AAC9B,QAAI,CAAC,uBAAuB,MAAM,EAAG,QAAO;AAC5C,WAAO,EAAE,QAAQ,oBAAoB,MAAM,EAAA;AAAA,EAC7C;AACA,MAAI,CAAC,SAAS,MAAM,EAAG,QAAO;AAC9B,MAAI,OAAO,WAAW,cAAc,OAAO,WAAW,YAAY,OAAO,aAAa,YAAY;AAChG,WAAO,EAAE,QAAQ,YAAY,QAAQ,CAAC,QAAQ,CAAC,EAAA;AAAA,EACjD;AACA,SAAO;AACT;;;;;;;;;;"}