eve 0.71.3 → 0.72.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 (440) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/README.md +22 -6
  3. package/dist/src/acp/adapter.js +1 -1
  4. package/dist/src/ai/decide.d.ts +7 -0
  5. package/dist/src/ai/decide.js +1 -0
  6. package/dist/src/chunks/{use-eve-agent-CFCaYnrI.js → use-eve-agent-C1GYGCtb.js} +698 -388
  7. package/dist/src/chunks/{use-eve-agent-DcDhXNv1.js → use-eve-agent-hZJ7CB8t.js} +698 -388
  8. package/dist/src/cli/commands/integration-setup.js +1 -1
  9. package/dist/src/cli/commands/registry.js +1 -1
  10. package/dist/src/cli/commands/trace-detail.d.ts +1 -1
  11. package/dist/src/cli/commands/trace-detail.js +1 -1
  12. package/dist/src/cli/dev/tui/runner.js +1 -1
  13. package/dist/src/cli/dev/tui/setup-flow.d.ts +1 -0
  14. package/dist/src/cli/dev/tui/setup-panel.d.ts +1 -0
  15. package/dist/src/cli/dev/tui/setup-panel.js +2 -1
  16. package/dist/src/cli/dev/tui/traces/trace-conversation.d.ts +2 -2
  17. package/dist/src/cli/dev/tui/traces/trace-conversation.js +2 -2
  18. package/dist/src/cli/dev/tui/transcript-parts.d.ts +2 -1
  19. package/dist/src/cli/dev/tui/transcript-parts.js +1 -1
  20. package/dist/src/cli/dev/tui/transcript.js +1 -1
  21. package/dist/src/cli/dev/tui/tui-prompter.js +1 -1
  22. package/dist/src/client/conversation-projection.d.ts +4 -0
  23. package/dist/src/client/conversation-projection.js +1 -0
  24. package/dist/src/client/conversation-reducer.js +1 -1
  25. package/dist/src/client/conversation-state.d.ts +5 -26
  26. package/dist/src/client/conversation-state.js +1 -1
  27. package/dist/src/client/index.d.ts +1 -0
  28. package/dist/src/client/index.js +1 -1
  29. package/dist/src/client/message-action-parts.d.ts +1 -11
  30. package/dist/src/client/message-action-parts.js +1 -1
  31. package/dist/src/client/message-reducer.d.ts +3 -1
  32. package/dist/src/client/message-reducer.js +1 -1
  33. package/dist/src/client/session-utils.js +1 -1
  34. package/dist/src/client/session.js +1 -1
  35. package/dist/src/client/tool-call-state.d.ts +23 -0
  36. package/dist/src/client/tool-call-state.js +1 -0
  37. package/dist/src/client/tool-part-state.d.ts +7 -0
  38. package/dist/src/client/tool-part-state.js +1 -0
  39. package/dist/src/compiled/.vendor-stamp.json +10 -10
  40. package/dist/src/compiled/@ai-sdk/anthropic/index.d.ts +1453 -1358
  41. package/dist/src/compiled/@ai-sdk/anthropic/index.js +1 -2
  42. package/dist/src/compiled/@ai-sdk/code-mode/index.d.ts +172 -163
  43. package/dist/src/compiled/@ai-sdk/code-mode/index.js +15 -20
  44. package/dist/src/compiled/@ai-sdk/google/index.d.ts +772 -733
  45. package/dist/src/compiled/@ai-sdk/google/index.js +6 -8
  46. package/dist/src/compiled/@ai-sdk/mcp/index.d.ts +887 -790
  47. package/dist/src/compiled/@ai-sdk/mcp/index.js +1 -1
  48. package/dist/src/compiled/@ai-sdk/openai/index.d.ts +1722 -1691
  49. package/dist/src/compiled/@ai-sdk/openai/index.js +3 -14
  50. package/dist/src/compiled/@ai-sdk/otel/index.d.ts +216 -159
  51. package/dist/src/compiled/@ai-sdk/otel/index.js +3 -3
  52. package/dist/src/compiled/@ai-sdk/provider/index.d.ts +7542 -7271
  53. package/dist/src/compiled/@ai-sdk/provider/index.js +1 -3
  54. package/dist/src/compiled/@ai-sdk/provider-utils/index.d.ts +1799 -1600
  55. package/dist/src/compiled/@eve/catalog/index.js +1 -1
  56. package/dist/src/compiled/_chunks/workflow/dist-DXLdlucM.js +15 -0
  57. package/dist/src/compiled/_chunks/workflow/experimental-decision-BrfWf6-n.js +3 -0
  58. package/dist/src/compiler/extension-compatibility.d.ts +36 -20
  59. package/dist/src/compiler/extension-compatibility.js +1 -1
  60. package/dist/src/compiler/manifest.js +1 -1
  61. package/dist/src/context/build-dynamic-tools.js +1 -1
  62. package/dist/src/context/dynamic-tool-lifecycle.js +1 -1
  63. package/dist/src/context/dynamic-tool-metadata.d.ts +1 -0
  64. package/dist/src/context/providers/session.js +1 -1
  65. package/dist/src/evals/define-eval.d.ts +1 -1
  66. package/dist/src/evals/judge.d.ts +1 -1
  67. package/dist/src/evals/judge.js +2 -2
  68. package/dist/src/evals/mock-model.js +1 -1
  69. package/dist/src/evals/types.d.ts +8 -8
  70. package/dist/src/execution/cancel-descendant-turns-step.d.ts +1 -0
  71. package/dist/src/execution/cancel-descendant-turns-step.js +1 -1
  72. package/dist/src/execution/cancelled-model-call-batch.js +1 -1
  73. package/dist/src/execution/coordination-dispatch-shared.js +1 -1
  74. package/dist/src/execution/coordination-dispatch-step.js +1 -1
  75. package/dist/src/execution/durable-session-read.d.ts +5 -0
  76. package/dist/src/execution/durable-session-read.js +1 -0
  77. package/dist/src/execution/durable-session-store.d.ts +4 -10
  78. package/dist/src/execution/durable-session-store.js +1 -1
  79. package/dist/src/execution/dynamic-connections.d.ts +3 -3
  80. package/dist/src/execution/dynamic-connections.js +1 -1
  81. package/dist/src/execution/dynamic-workflow/tool.js +1 -1
  82. package/dist/src/execution/legacy-session/interrupt-step.js +1 -1
  83. package/dist/src/execution/legacy-session/snapshot.d.ts +3 -0
  84. package/dist/src/execution/legacy-session/snapshot.js +1 -1
  85. package/dist/src/execution/model-call-batching.js +1 -1
  86. package/dist/src/execution/node-step.d.ts +2 -0
  87. package/dist/src/execution/node-step.js +1 -1
  88. package/dist/src/execution/proxied-deliver-step.js +1 -1
  89. package/dist/src/execution/publish-session-events.d.ts +7 -2
  90. package/dist/src/execution/publish-session-events.js +1 -1
  91. package/dist/src/execution/session/active-turn.js +1 -1
  92. package/dist/src/execution/session/answer-caller.js +1 -1
  93. package/dist/src/execution/session/checkpoint-migrations.js +1 -1
  94. package/dist/src/execution/session/finalization.js +1 -1
  95. package/dist/src/execution/session/handoff-steps.d.ts +3 -1
  96. package/dist/src/execution/session/handoff-steps.js +1 -1
  97. package/dist/src/execution/session/handoff.d.ts +1 -1
  98. package/dist/src/execution/session/handoff.js +1 -1
  99. package/dist/src/execution/session/pending-turn-state.d.ts +8 -3
  100. package/dist/src/execution/session/pending-turn-state.js +1 -1
  101. package/dist/src/execution/session/task-tool-tracing-step.d.ts +5 -0
  102. package/dist/src/execution/session/task-tool-tracing-step.js +1 -0
  103. package/dist/src/execution/session/turn-step-result.js +1 -1
  104. package/dist/src/execution/session/turn-step.js +1 -1
  105. package/dist/src/execution/session/turn-waiting-step.js +1 -1
  106. package/dist/src/execution/session/turn.d.ts +1 -0
  107. package/dist/src/execution/session/turn.js +1 -1
  108. package/dist/src/execution/settle-cancelled-turn-step.d.ts +4 -6
  109. package/dist/src/execution/settle-cancelled-turn-step.js +1 -1
  110. package/dist/src/execution/tasks/start.d.ts +3 -3
  111. package/dist/src/execution/tasks/start.js +1 -1
  112. package/dist/src/execution/tasks/steps.d.ts +1 -1
  113. package/dist/src/execution/tasks/steps.js +1 -1
  114. package/dist/src/execution/terminal-session-completion-step.d.ts +5 -1
  115. package/dist/src/execution/terminal-session-completion-step.js +1 -1
  116. package/dist/src/execution/terminal-session-failure-step.js +1 -1
  117. package/dist/src/execution/tools/agent-router-workflow.js +1 -1
  118. package/dist/src/execution/tools/connection-tools.js +2 -2
  119. package/dist/src/execution/tools/workflow/harness-definition.js +1 -1
  120. package/dist/src/execution/tools/workflow/step.js +1 -1
  121. package/dist/src/execution/tools/workflow/withdraw-step.d.ts +7 -9
  122. package/dist/src/execution/tools/workflow/withdraw-step.js +1 -1
  123. package/dist/src/execution/workflow-trace-context.d.ts +2 -2
  124. package/dist/src/harness/authorization.d.ts +4 -2
  125. package/dist/src/harness/authorization.js +1 -1
  126. package/dist/src/harness/{compaction.js → compaction/engine.js} +1 -1
  127. package/dist/src/harness/compaction/step.d.ts +46 -0
  128. package/dist/src/harness/compaction/step.js +1 -0
  129. package/dist/src/harness/coordination.d.ts +32 -68
  130. package/dist/src/harness/coordination.js +1 -1
  131. package/dist/src/harness/current-messages.d.ts +1 -3
  132. package/dist/src/harness/current-messages.js +1 -1
  133. package/dist/src/harness/emission.d.ts +4 -52
  134. package/dist/src/harness/emission.js +1 -1
  135. package/dist/src/harness/execute-tool.d.ts +1 -0
  136. package/dist/src/harness/final-output.d.ts +5 -0
  137. package/dist/src/harness/final-output.js +1 -1
  138. package/dist/src/harness/hitl/approvals.d.ts +115 -0
  139. package/dist/src/harness/hitl/approvals.js +1 -0
  140. package/dist/src/harness/hitl/approved-call-callers.d.ts +14 -0
  141. package/dist/src/harness/hitl/approved-call-callers.js +1 -0
  142. package/dist/src/harness/hitl/approved-calls.d.ts +37 -0
  143. package/dist/src/harness/hitl/approved-calls.js +1 -0
  144. package/dist/src/harness/hitl/budget.d.ts +21 -0
  145. package/dist/src/harness/hitl/budget.js +1 -0
  146. package/dist/src/harness/{approval-candidates.d.ts → hitl/candidates.d.ts} +9 -18
  147. package/dist/src/harness/hitl/candidates.js +1 -0
  148. package/dist/src/harness/hitl/coordinator.js +1 -0
  149. package/dist/src/harness/hitl/delivery.d.ts +37 -0
  150. package/dist/src/harness/hitl/delivery.js +1 -0
  151. package/dist/src/harness/hitl/index.d.ts +49 -0
  152. package/dist/src/harness/hitl/index.js +1 -0
  153. package/dist/src/harness/hitl/intake.d.ts +67 -0
  154. package/dist/src/harness/hitl/intake.js +1 -0
  155. package/dist/src/harness/{stale-input-responses.d.ts → hitl/stale-responses.d.ts} +5 -3
  156. package/dist/src/harness/hitl/stale-responses.js +3 -0
  157. package/dist/src/harness/inline-tool-authorization.d.ts +4 -0
  158. package/dist/src/harness/inline-tool-authorization.js +1 -1
  159. package/dist/src/harness/input-extraction.d.ts +1 -10
  160. package/dist/src/harness/input-extraction.js +1 -1
  161. package/dist/src/harness/input-request-resolution.d.ts +1 -5
  162. package/dist/src/harness/input-request-resolution.js +1 -1
  163. package/dist/src/harness/model-call/call.d.ts +78 -0
  164. package/dist/src/harness/model-call/call.js +1 -0
  165. package/dist/src/harness/{model-call-error.d.ts → model-call/errors.d.ts} +1 -1
  166. package/dist/src/harness/model-call/failure.d.ts +52 -0
  167. package/dist/src/harness/model-call/failure.js +1 -0
  168. package/dist/src/harness/model-call/model.d.ts +18 -0
  169. package/dist/src/harness/model-call/model.js +1 -0
  170. package/dist/src/harness/model-call/recovery.d.ts +52 -0
  171. package/dist/src/harness/model-call/recovery.js +1 -0
  172. package/dist/src/harness/model-call/request.d.ts +30 -0
  173. package/dist/src/harness/model-call/request.js +3 -0
  174. package/dist/src/harness/model-call/response.d.ts +39 -0
  175. package/dist/src/harness/model-call/response.js +1 -0
  176. package/dist/src/harness/model-call/retry.d.ts +11 -0
  177. package/dist/src/harness/model-call/retry.js +1 -0
  178. package/dist/src/harness/model-call/run.d.ts +38 -0
  179. package/dist/src/harness/model-call/run.js +1 -0
  180. package/dist/src/harness/model-call/tools.d.ts +48 -0
  181. package/dist/src/harness/model-call/tools.js +1 -0
  182. package/dist/src/harness/model-call/usage.d.ts +23 -0
  183. package/dist/src/harness/model-call/usage.js +1 -0
  184. package/dist/src/harness/nested-actions.d.ts +2 -2
  185. package/dist/src/harness/provider-tools.d.ts +2 -2
  186. package/dist/src/harness/provider-tools.js +1 -1
  187. package/dist/src/harness/proxy-input-requests.d.ts +4 -12
  188. package/dist/src/harness/proxy-input-requests.js +1 -1
  189. package/dist/src/harness/session-machine/commit.d.ts +28 -0
  190. package/dist/src/harness/session-machine/commit.js +1 -0
  191. package/dist/src/harness/session-machine/current.d.ts +29 -0
  192. package/dist/src/harness/session-machine/current.js +1 -0
  193. package/dist/src/harness/session-machine/events.d.ts +6 -0
  194. package/dist/src/harness/session-machine/events.js +1 -0
  195. package/dist/src/harness/session-machine/resolver-events.d.ts +12 -0
  196. package/dist/src/harness/session-machine/resolver-events.js +1 -0
  197. package/dist/src/harness/session-machine/state.d.ts +47 -0
  198. package/dist/src/harness/session-machine/state.js +1 -0
  199. package/dist/src/harness/session-machine/transitions.d.ts +188 -0
  200. package/dist/src/harness/session-machine/transitions.js +1 -0
  201. package/dist/src/harness/session-machine/view.d.ts +58 -0
  202. package/dist/src/harness/session-machine/view.js +1 -0
  203. package/dist/src/harness/step/after-model.d.ts +7 -0
  204. package/dist/src/harness/step/after-model.js +1 -0
  205. package/dist/src/harness/step/context.d.ts +59 -0
  206. package/dist/src/harness/step/context.js +1 -0
  207. package/dist/src/harness/step/intake.d.ts +34 -0
  208. package/dist/src/harness/step/intake.js +1 -0
  209. package/dist/src/harness/step/prompt.d.ts +37 -0
  210. package/dist/src/harness/step/prompt.js +1 -0
  211. package/dist/src/harness/step-hooks.d.ts +8 -13
  212. package/dist/src/harness/step-hooks.js +1 -1
  213. package/dist/src/harness/tool-loop.d.ts +7 -22
  214. package/dist/src/harness/tool-loop.js +1 -3
  215. package/dist/src/harness/tools.d.ts +13 -0
  216. package/dist/src/harness/tools.js +1 -1
  217. package/dist/src/harness/turn-tag-state.d.ts +1 -1
  218. package/dist/src/harness/types.d.ts +6 -0
  219. package/dist/src/instrumentation/ai-sdk-hook-bridge.d.ts +1 -1
  220. package/dist/src/instrumentation/ai-sdk-hook-bridge.js +1 -1
  221. package/dist/src/instrumentation/content.js +1 -1
  222. package/dist/src/instrumentation/dispatch.js +1 -1
  223. package/dist/src/instrumentation/lifecycle.d.ts +28 -56
  224. package/dist/src/instrumentation/native-events.d.ts +2 -1
  225. package/dist/src/instrumentation/native-events.js +1 -1
  226. package/dist/src/instrumentation/provider.d.ts +1 -1
  227. package/dist/src/instrumentation/runtime-context.d.ts +2 -3
  228. package/dist/src/instrumentation/runtime-context.js +1 -1
  229. package/dist/src/instrumentation/runtime.d.ts +11 -1
  230. package/dist/src/instrumentation/runtime.js +1 -1
  231. package/dist/src/instrumentation/state.d.ts +6 -1
  232. package/dist/src/instrumentation/state.js +1 -1
  233. package/dist/src/internal/application/package.js +1 -1
  234. package/dist/src/internal/attachments/limited-read.d.ts +16 -0
  235. package/dist/src/internal/attachments/limited-read.js +1 -0
  236. package/dist/src/internal/authored-definition/schema-backed.d.ts +2 -1
  237. package/dist/src/internal/authored-definition/schema-backed.js +1 -1
  238. package/dist/src/internal/mcp/published-tools.d.ts +13 -0
  239. package/dist/src/internal/mcp/published-tools.js +1 -0
  240. package/dist/src/internal/mcp/request-trace-context.d.ts +12 -0
  241. package/dist/src/internal/mcp/request-trace-context.js +1 -0
  242. package/dist/src/internal/mcp/streamable-http-server.d.ts +7 -3
  243. package/dist/src/internal/mcp/streamable-http-server.js +1 -1
  244. package/dist/src/internal/model-auth/transport.d.ts +3 -3
  245. package/dist/src/internal/model-auth/transport.js +1 -1
  246. package/dist/src/models/auto.d.ts +5 -5
  247. package/dist/src/models/auto.js +2 -2
  248. package/dist/src/protocol/message.d.ts +7 -0
  249. package/dist/src/protocol/message.js +1 -1
  250. package/dist/src/protocol/session-projection.d.ts +159 -0
  251. package/dist/src/protocol/session-projection.js +1 -0
  252. package/dist/src/public/ai/index.d.ts +1 -1
  253. package/dist/src/public/ai/index.js +1 -1
  254. package/dist/src/public/channels/chat-sdk/attachment-refs.d.ts +15 -0
  255. package/dist/src/public/channels/chat-sdk/attachment-refs.js +1 -0
  256. package/dist/src/public/channels/chat-sdk/chatSdkChannel.js +2 -2
  257. package/dist/src/public/channels/chat-sdk/messageToUserContent.d.ts +11 -5
  258. package/dist/src/public/channels/chat-sdk/messageToUserContent.js +1 -1
  259. package/dist/src/public/channels/discord/attachments.d.ts +15 -0
  260. package/dist/src/public/channels/discord/attachments.js +1 -0
  261. package/dist/src/public/channels/discord/discordChannel.js +1 -1
  262. package/dist/src/public/channels/discord/inbound.d.ts +13 -0
  263. package/dist/src/public/channels/discord/inbound.js +1 -1
  264. package/dist/src/public/channels/linear/inbound-uploads.d.ts +21 -0
  265. package/dist/src/public/channels/linear/inbound-uploads.js +1 -0
  266. package/dist/src/public/channels/linear/linearChannel.js +1 -1
  267. package/dist/src/public/channels/linq/inboundContent.d.ts +7 -1
  268. package/dist/src/public/channels/linq/inboundContent.js +1 -1
  269. package/dist/src/public/channels/linq/linqChannel.js +1 -1
  270. package/dist/src/public/channels/mcp.d.ts +17 -2
  271. package/dist/src/public/channels/mcp.js +1 -1
  272. package/dist/src/public/channels/photon/attachments.d.ts +21 -0
  273. package/dist/src/public/channels/photon/attachments.js +1 -0
  274. package/dist/src/public/channels/photon/photonIMessageChannel.js +1 -1
  275. package/dist/src/public/channels/slack/attachments.d.ts +3 -1
  276. package/dist/src/public/channels/slack/attachments.js +1 -1
  277. package/dist/src/public/channels/slack/slackChannel.js +1 -1
  278. package/dist/src/public/channels/teams/attachments.d.ts +4 -4
  279. package/dist/src/public/channels/teams/attachments.js +1 -1
  280. package/dist/src/public/channels/telegram/attachments.js +1 -1
  281. package/dist/src/public/channels/twilio/api.d.ts +7 -0
  282. package/dist/src/public/channels/twilio/api.js +1 -1
  283. package/dist/src/public/channels/twilio/inbound.d.ts +7 -0
  284. package/dist/src/public/channels/twilio/inbound.js +2 -2
  285. package/dist/src/public/channels/twilio/twilioChannel.js +1 -1
  286. package/dist/src/public/definitions/connections/mcp.d.ts +1 -1
  287. package/dist/src/public/definitions/connections/openapi.d.ts +1 -1
  288. package/dist/src/react/index.d.ts +1 -0
  289. package/dist/src/react/index.js +1 -1
  290. package/dist/src/runtime/agent/mock-model-adapter.js +2 -2
  291. package/dist/src/runtime/connections/mcp-client.d.ts +18 -1
  292. package/dist/src/runtime/connections/mcp-client.js +1 -1
  293. package/dist/src/runtime/resolve-tool.js +1 -1
  294. package/dist/src/setup/boxes/resolve-provisioning.d.ts +2 -0
  295. package/dist/src/setup/boxes/resolve-provisioning.js +1 -1
  296. package/dist/src/setup/cli/prompt-ui.d.ts +3 -0
  297. package/dist/src/setup/cli/prompt-ui.js +3 -1
  298. package/dist/src/setup/cli/select-component.d.ts +1 -0
  299. package/dist/src/setup/cli/select-component.js +1 -1
  300. package/dist/src/setup/flows/ensure-vercel-project.d.ts +2 -0
  301. package/dist/src/setup/flows/ensure-vercel-project.js +1 -1
  302. package/dist/src/setup/integrations/discord/api.js +1 -1
  303. package/dist/src/setup/integrations/web/auth-options.d.ts +4 -0
  304. package/dist/src/setup/integrations/web/auth-options.js +1 -0
  305. package/dist/src/setup/integrations/web/auth-scaffold.d.ts +7 -0
  306. package/dist/src/setup/integrations/web/auth-scaffold.js +1 -0
  307. package/dist/src/setup/integrations/web/provision-auth.d.ts +3 -0
  308. package/dist/src/setup/integrations/web/provision-auth.js +1 -0
  309. package/dist/src/setup/integrations/web/setup.d.ts +11 -6
  310. package/dist/src/setup/integrations/web/setup.js +3 -3
  311. package/dist/src/setup/prompter.d.ts +2 -0
  312. package/dist/src/setup/prompter.js +1 -1
  313. package/dist/src/setup/scaffold/create/add-to-project.js +1 -1
  314. package/dist/src/setup/scaffold/create/project.js +2 -2
  315. package/dist/src/setup/scaffold/create/web-template.d.ts +1 -1
  316. package/dist/src/setup/scaffold/create/web-template.js +1 -0
  317. package/dist/src/setup/scaffold/update/web-options.js +1 -1
  318. package/dist/src/setup/vercel-project-api.d.ts +9 -0
  319. package/dist/src/setup/vercel-project-api.js +1 -1
  320. package/dist/src/setup/vercel-project.d.ts +4 -2
  321. package/dist/src/setup/vercel-project.js +0 -0
  322. package/dist/src/shared/web-search.d.ts +1 -1
  323. package/dist/src/subagents/adapter.js +1 -1
  324. package/dist/src/subagents/event-proxy-step.js +1 -1
  325. package/dist/src/subagents/hitl-proxy.d.ts +4 -28
  326. package/dist/src/subagents/hitl-proxy.js +1 -1
  327. package/dist/src/svelte/index.d.ts +2 -0
  328. package/dist/src/svelte/index.js +39 -2
  329. package/dist/src/svelte/use-eve-agent.js +1 -1
  330. package/dist/src/tools/approval/policies.d.ts +5 -5
  331. package/dist/src/tools/approval/policies.js +1 -1
  332. package/dist/src/tools/framework/agent.js +1 -1
  333. package/dist/src/tools/provided/agent-router.js +1 -1
  334. package/dist/src/tools/provided/ask-question-workflow.js +1 -1
  335. package/dist/src/tools/provided/ask-question.js +2 -2
  336. package/dist/src/tools/provided/bash.js +1 -1
  337. package/dist/src/tools/provided/framework-tool.d.ts +3 -0
  338. package/dist/src/tools/provided/framework-tool.js +1 -0
  339. package/dist/src/tools/provided/glob.js +2 -2
  340. package/dist/src/tools/provided/grep.js +2 -2
  341. package/dist/src/tools/provided/load-skill.js +1 -1
  342. package/dist/src/tools/provided/no-reply.js +1 -1
  343. package/dist/src/tools/provided/read-file.js +2 -2
  344. package/dist/src/tools/provided/sleep-workflow.js +1 -1
  345. package/dist/src/tools/provided/sleep.js +1 -1
  346. package/dist/src/tools/provided/task-cancel.js +1 -1
  347. package/dist/src/tools/provided/task-wait.js +1 -1
  348. package/dist/src/tools/provided/web-fetch.js +2 -2
  349. package/dist/src/tools/provided/web-search.js +1 -1
  350. package/dist/src/tools/provided/workflow.js +1 -1
  351. package/dist/src/tools/provided/write-file.js +2 -2
  352. package/dist/src/tracing/agent-approval-instrumentation.d.ts +2 -2
  353. package/dist/src/tracing/agent-approval-instrumentation.js +1 -1
  354. package/dist/src/tracing/agent-otel-provider.js +2 -2
  355. package/dist/src/tracing/agent-otel-usage.d.ts +1 -1
  356. package/dist/src/tracing/agent-otel-usage.js +1 -1
  357. package/dist/src/tracing/agent-span-contract.d.ts +0 -1
  358. package/dist/src/tracing/agent-span-contract.js +1 -1
  359. package/dist/src/tracing/agent-tool-instrumentation.d.ts +16 -6
  360. package/dist/src/tracing/agent-tool-instrumentation.js +1 -1
  361. package/dist/src/tracing/agent-trace-context-codec.js +1 -1
  362. package/dist/src/tracing/agent-trace-state.d.ts +7 -3
  363. package/dist/src/tracing/invoke-tool-span.js +1 -1
  364. package/dist/src/tracing/local-trace-analysis.js +1 -1
  365. package/dist/src/vue/index.d.ts +2 -0
  366. package/dist/src/vue/index.js +39 -2
  367. package/dist/src/vue/use-eve-agent.js +1 -1
  368. package/docs/agent-config.md +2 -2
  369. package/docs/channels/chat-sdk.mdx +3 -1
  370. package/docs/channels/custom.mdx +2 -0
  371. package/docs/channels/discord.mdx +5 -4
  372. package/docs/channels/eve.mdx +65 -0
  373. package/docs/channels/linear.mdx +1 -1
  374. package/docs/channels/linq.mdx +2 -0
  375. package/docs/channels/mcp.mdx +39 -1
  376. package/docs/channels/photon.mdx +5 -0
  377. package/docs/channels/teams.mdx +4 -7
  378. package/docs/channels/twilio.mdx +1 -1
  379. package/docs/concepts/built-in-tools.md +14 -2
  380. package/docs/concepts/sessions-runs-and-streaming.md +3 -3
  381. package/docs/connections/mcp.mdx +11 -0
  382. package/docs/connections/overview.mdx +2 -2
  383. package/docs/dynamic-configuration/meta.json +1 -1
  384. package/docs/evals/judge.mdx +16 -16
  385. package/docs/evals/overview.mdx +1 -1
  386. package/docs/guides/{evaluate.md → decide.md} +35 -35
  387. package/docs/guides/dynamic-capabilities.md +1 -1
  388. package/docs/guides/frontend/overview.mdx +3 -1
  389. package/docs/guides/hooks.md +1 -1
  390. package/docs/guides/instrumentation/instrumentation.mdx +23 -22
  391. package/docs/guides/instrumentation/otel.mdx +13 -2
  392. package/docs/reference/cli.md +3 -3
  393. package/docs/reference/typescript-api.md +4 -2
  394. package/docs/tools/human-in-the-loop.md +6 -4
  395. package/docs/tools/workflows.mdx +4 -4
  396. package/package.json +11 -11
  397. package/dist/src/ai/evaluate.d.ts +0 -7
  398. package/dist/src/ai/evaluate.js +0 -1
  399. package/dist/src/client/message-task-parts.d.ts +0 -8
  400. package/dist/src/client/message-task-parts.js +0 -1
  401. package/dist/src/compiled/_chunks/workflow/dist-C3ZE62yI.js +0 -25
  402. package/dist/src/compiled/_chunks/workflow/experimental-evaluation-Dm32egEG.js +0 -5
  403. package/dist/src/harness/active-turn-id.d.ts +0 -11
  404. package/dist/src/harness/active-turn-id.js +0 -1
  405. package/dist/src/harness/approval-candidates.js +0 -1
  406. package/dist/src/harness/approval-delivery-coordinator.js +0 -1
  407. package/dist/src/harness/approved-call-callers.d.ts +0 -11
  408. package/dist/src/harness/approved-call-callers.js +0 -1
  409. package/dist/src/harness/cancelled-turn-emission.d.ts +0 -12
  410. package/dist/src/harness/cancelled-turn-emission.js +0 -1
  411. package/dist/src/harness/emission-state.d.ts +0 -36
  412. package/dist/src/harness/emission-state.js +0 -1
  413. package/dist/src/harness/held-requests.d.ts +0 -18
  414. package/dist/src/harness/held-requests.js +0 -1
  415. package/dist/src/harness/hitl/approval-input-requests.d.ts +0 -27
  416. package/dist/src/harness/hitl/approval-input-requests.js +0 -1
  417. package/dist/src/harness/hitl/pending-input-resolution.d.ts +0 -54
  418. package/dist/src/harness/hitl/pending-input-resolution.js +0 -1
  419. package/dist/src/harness/hitl/session-limit-input-requests.d.ts +0 -12
  420. package/dist/src/harness/hitl/session-limit-input-requests.js +0 -1
  421. package/dist/src/harness/input-requests.d.ts +0 -37
  422. package/dist/src/harness/input-requests.js +0 -1
  423. package/dist/src/harness/pending-input-batches.d.ts +0 -81
  424. package/dist/src/harness/pending-input-batches.js +0 -1
  425. package/dist/src/harness/session-limit-enforcement.d.ts +0 -45
  426. package/dist/src/harness/session-limit-enforcement.js +0 -1
  427. package/dist/src/harness/stale-input-responses.js +0 -3
  428. package/dist/src/harness/workflow-dispatch.d.ts +0 -30
  429. package/dist/src/harness/workflow-dispatch.js +0 -1
  430. package/dist/src/public/channels/linear/inbound-images.d.ts +0 -19
  431. package/dist/src/public/channels/linear/inbound-images.js +0 -1
  432. package/dist/src/tracing/agent-action-instrumentation.d.ts +0 -26
  433. package/dist/src/tracing/agent-action-instrumentation.js +0 -1
  434. /package/dist/src/harness/{compaction.d.ts → compaction/engine.d.ts} +0 -0
  435. /package/dist/src/harness/{compaction-prompt.d.ts → compaction/prompt.d.ts} +0 -0
  436. /package/dist/src/harness/{compaction-prompt.js → compaction/prompt.js} +0 -0
  437. /package/dist/src/harness/{session-limit-continuation.d.ts → hitl/budget-request.d.ts} +0 -0
  438. /package/dist/src/harness/{session-limit-continuation.js → hitl/budget-request.js} +0 -0
  439. /package/dist/src/harness/{approval-delivery-coordinator.d.ts → hitl/coordinator.d.ts} +0 -0
  440. /package/dist/src/harness/{model-call-error.js → model-call/errors.js} +0 -0
@@ -26,6 +26,15 @@ export declare function parseVercelJson(stdout: string, description: string): un
26
26
  export declare function requireVercelTeamAccess(failure: VercelCaptureFailure): never;
27
27
  /** Lists up to the maximum 100 Vercel scopes supported by the CLI. */
28
28
  export declare function listTeams(projectRoot: string, options?: VercelProjectOperationOptions): Promise<VercelTeamListEntry[]>;
29
+ /** Capabilities required by a setup flow, using Vercel's permission resource names. */
30
+ export interface VercelTeamRequirement {
31
+ permissions: Readonly<Record<string, readonly string[]>>;
32
+ disabledReason: string;
33
+ }
34
+ /** Checks the listed teams in one request, retaining unknown scopes as unavailable. */
35
+ export declare function checkTeamRequirements(projectRoot: string, teams: readonly VercelTeamListEntry[], requirement: VercelTeamRequirement, options?: VercelProjectOperationOptions): Promise<Map<string, string | undefined>>;
36
+ /** Returns an actionable reason when a specific team cannot satisfy a setup flow. */
37
+ export declare function checkTeamRequirement(projectRoot: string, team: string, requirement: VercelTeamRequirement, options?: VercelProjectOperationOptions): Promise<string | undefined>;
29
38
  /** Lists the 20 most recent Vercel projects in one account scope. */
30
39
  export declare function listRecentProjects(projectRoot: string, team: string, options?: VercelProjectOperationOptions): Promise<VercelProjectListEntry[]>;
31
40
  /** Ranks exact and prefix project-name matches ahead of substring matches. */
@@ -1 +1 @@
1
- import{isForbiddenApiFailure}from"./vercel-api-failure.js";import{z}from"#compiled/zod/index.js";import{captureVercel}from"#setup/primitives/index.js";import{HumanActionRequiredError}from"#setup/human-action.js";const VERCEL_PROJECT_REQUEST_TIMEOUT_MS=15e3,VercelTeamListEntrySchema=z.object({name:z.string(),slug:z.string(),current:z.boolean()}),VercelProjectListEntrySchema=z.object({name:z.string(),id:z.string()}),VercelPaginationSchema=z.object({next:z.number().int().nonnegative().nullable().optional()}),VercelTeamPageSchema=z.object({teams:z.array(VercelTeamListEntrySchema),pagination:VercelPaginationSchema.optional()}).transform(e=>e.teams),VercelProjectPageSchema=z.object({projects:z.array(VercelProjectListEntrySchema),pagination:VercelPaginationSchema.optional()}).transform(e=>({items:e.projects,next:e.pagination?.next??void 0}));function parseVercelJson(e,t){try{return JSON.parse(e)}catch{throw Error(`Could not parse ${t} JSON from Vercel CLI output.`)}}function requireVercelTeamAccess(e){let t=e.stderr.trim(),n=t?` ${t}`:``;throw new HumanActionRequiredError({kind:`vercel-forbidden`,command:`vercel login`,reason:`Vercel denied access to this scope.${n} Re-authenticate (for example to complete a team's SSO) or switch to a team you can access.`})}function isUnsupportedTeamListFailure(e){let t=`${e.stderr}\n${e.stdout}`;return/(?:unknown|unexpected|invalid).*(?:--format|--limit)/iu.test(t)}function requireVercelCliUpgrade(e){throw new HumanActionRequiredError({kind:`vercel-cli-upgrade`,command:`vercel upgrade`,reason:`The installed Vercel CLI does not support the team-list options eve needs. ${e.message} Upgrade it and retry.`})}async function captureTeamPage(e,t,n){let r=await captureVercel(n,{cwd:e,signal:t.signal});if(t.signal?.throwIfAborted(),!r.ok)throw isForbiddenApiFailure(r.failure)&&requireVercelTeamAccess(r.failure),isUnsupportedTeamListFailure(r.failure)&&requireVercelCliUpgrade(r.failure),Error(`Could not list Vercel teams. ${r.failure.message}`);return r.stdout}async function listTeams(e,t={}){let n=await captureTeamPage(e,t,[`teams`,`ls`,`--format`,`json`,`--limit`,`100`]),r=VercelTeamPageSchema.safeParse(parseVercelJson(n,`teams`));if(!r.success)throw Error(`Could not read teams from Vercel CLI JSON output.`);return r.data}async function fetchProjectPage(e,t,n){let r=[`project`,`ls`,`--format`,`json`,`--scope`,t];n.search!==void 0&&r.push(`--filter`,n.search),n.next!==void 0&&r.push(`--next`,String(n.next));let i=await captureVercel(r,{cwd:e,signal:n.signal,timeoutMs:VERCEL_PROJECT_REQUEST_TIMEOUT_MS});if(n.signal?.throwIfAborted(),!i.ok)throw isForbiddenApiFailure(i.failure)&&requireVercelTeamAccess(i.failure),Error(`Could not list Vercel projects in ${t}. ${i.failure.message}`);let a=VercelProjectPageSchema.safeParse(parseVercelJson(i.stdout,`projects`));if(!a.success)throw Error(`Could not read projects from Vercel CLI JSON output.`);return a.data}async function listRecentProjects(e,t,n={}){return(await fetchProjectPage(e,t,n)).items}function projectSearchRank(e,t){let n=e.name.toLowerCase(),r=t.toLowerCase();return n===r?0:n.startsWith(r)?1:2}function rankProjectSearchResults(e,t){let n=t.trim();return[...e].sort((e,t)=>projectSearchRank(e,n)-projectSearchRank(t,n))}async function searchProjects(e,t,n,r={}){let i=n.trim();if(i.length===0)throw Error(`Project search query cannot be empty.`);let a=await fetchProjectPage(e,t,{...r,search:i}),o=rankProjectSearchResults(a.items,i);return a.next===void 0?{projects:o}:{projects:o,next:a.next}}export{VERCEL_PROJECT_REQUEST_TIMEOUT_MS,listRecentProjects,listTeams,parseVercelJson,rankProjectSearchResults,requireVercelTeamAccess,searchProjects};
1
+ import{isForbiddenApiFailure}from"./vercel-api-failure.js";import{z}from"#compiled/zod/index.js";import{captureVercel}from"#setup/primitives/index.js";import{HumanActionRequiredError}from"#setup/human-action.js";const VERCEL_PROJECT_REQUEST_TIMEOUT_MS=15e3,VercelTeamListEntrySchema=z.object({name:z.string(),slug:z.string(),current:z.boolean()}),VercelProjectListEntrySchema=z.object({name:z.string(),id:z.string()}),VercelPaginationSchema=z.object({next:z.number().int().nonnegative().nullable().optional()}),VercelTeamPageSchema=z.object({teams:z.array(VercelTeamListEntrySchema),pagination:VercelPaginationSchema.optional()}).transform(e=>e.teams),VercelProjectPageSchema=z.object({projects:z.array(VercelProjectListEntrySchema),pagination:VercelPaginationSchema.optional()}).transform(e=>({items:e.projects,next:e.pagination?.next??void 0}));function parseVercelJson(e,t){try{return JSON.parse(e)}catch{throw Error(`Could not parse ${t} JSON from Vercel CLI output.`)}}function requireVercelTeamAccess(e){let t=e.stderr.trim(),n=t?` ${t}`:``;throw new HumanActionRequiredError({kind:`vercel-forbidden`,command:`vercel login`,reason:`Vercel denied access to this scope.${n} Re-authenticate (for example to complete a team's SSO) or switch to a team you can access.`})}function isUnsupportedTeamListFailure(e){let t=`${e.stderr}\n${e.stdout}`;return/(?:unknown|unexpected|invalid).*(?:--format|--limit)/iu.test(t)}function requireVercelCliUpgrade(e){throw new HumanActionRequiredError({kind:`vercel-cli-upgrade`,command:`vercel upgrade`,reason:`The installed Vercel CLI does not support the team-list options eve needs. ${e.message} Upgrade it and retry.`})}async function captureTeamPage(e,t,n){let r=await captureVercel(n,{cwd:e,signal:t.signal});if(t.signal?.throwIfAborted(),!r.ok)throw isForbiddenApiFailure(r.failure)&&requireVercelTeamAccess(r.failure),isUnsupportedTeamListFailure(r.failure)&&requireVercelCliUpgrade(r.failure),Error(`Could not list Vercel teams. ${r.failure.message}`);return r.stdout}async function listTeams(e,t={}){let n=await captureTeamPage(e,t,[`teams`,`ls`,`--format`,`json`,`--limit`,`100`]),r=VercelTeamPageSchema.safeParse(parseVercelJson(n,`teams`));if(!r.success)throw Error(`Could not read teams from Vercel CLI JSON output.`);return r.data}const TeamPermissionsSchema=z.record(z.string(),z.array(z.string())),UNVERIFIED_TEAM_PERMISSIONS="Could not verify permissions; run `vercel login` or retry.";function teamPermissionIssue(e,t){let n=TeamPermissionsSchema.safeParse(e);return n.success?Object.entries(t.permissions).every(([e,t])=>t.every(t=>n.data[e]?.includes(t)))?void 0:t.disabledReason:UNVERIFIED_TEAM_PERMISSIONS}async function checkTeamRequirements(e,t,n,r={}){let i=new Map(t.map(e=>[e.slug,UNVERIFIED_TEAM_PERMISSIONS])),a=await captureVercel([`api`,`/v2/teams?permissions=true&limit=100`,`--method`,`GET`],{cwd:e,signal:r.signal,timeoutMs:VERCEL_PROJECT_REQUEST_TIMEOUT_MS});if(r.signal?.throwIfAborted(),!a.ok)return i;let o;try{o=JSON.parse(a.stdout)}catch{return i}let s=z.object({teams:z.array(z.object({slug:z.string(),permissions:z.unknown().optional(),limited:z.boolean().optional()})).max(100)}).safeParse(o);if(!s.success)return i;for(let e of s.data.teams)i.has(e.slug)&&i.set(e.slug,e.limited?UNVERIFIED_TEAM_PERMISSIONS:teamPermissionIssue(e.permissions,n));return i}async function checkTeamRequirement(e,t,n,r={}){let i=await captureVercel([`api`,`/v1/user/permissions`,`--method`,`GET`,`--scope`,t],{cwd:e,signal:r.signal,timeoutMs:VERCEL_PROJECT_REQUEST_TIMEOUT_MS});if(r.signal?.throwIfAborted(),!i.ok)return UNVERIFIED_TEAM_PERMISSIONS;let a;try{a=JSON.parse(i.stdout)}catch{return UNVERIFIED_TEAM_PERMISSIONS}let o=z.object({permissions:z.unknown()}).safeParse(a);return o.success?teamPermissionIssue(o.data.permissions,n):UNVERIFIED_TEAM_PERMISSIONS}async function fetchProjectPage(e,t,n){let r=[`project`,`ls`,`--format`,`json`,`--scope`,t];n.search!==void 0&&r.push(`--filter`,n.search),n.next!==void 0&&r.push(`--next`,String(n.next));let i=await captureVercel(r,{cwd:e,signal:n.signal,timeoutMs:VERCEL_PROJECT_REQUEST_TIMEOUT_MS});if(n.signal?.throwIfAborted(),!i.ok)throw isForbiddenApiFailure(i.failure)&&requireVercelTeamAccess(i.failure),Error(`Could not list Vercel projects in ${t}. ${i.failure.message}`);let a=VercelProjectPageSchema.safeParse(parseVercelJson(i.stdout,`projects`));if(!a.success)throw Error(`Could not read projects from Vercel CLI JSON output.`);return a.data}async function listRecentProjects(e,t,n={}){return(await fetchProjectPage(e,t,n)).items}function projectSearchRank(e,t){let n=e.name.toLowerCase(),r=t.toLowerCase();return n===r?0:n.startsWith(r)?1:2}function rankProjectSearchResults(e,t){let n=t.trim();return[...e].sort((e,t)=>projectSearchRank(e,n)-projectSearchRank(t,n))}async function searchProjects(e,t,n,r={}){let i=n.trim();if(i.length===0)throw Error(`Project search query cannot be empty.`);let a=await fetchProjectPage(e,t,{...r,search:i}),o=rankProjectSearchResults(a.items,i);return a.next===void 0?{projects:o}:{projects:o,next:a.next}}export{VERCEL_PROJECT_REQUEST_TIMEOUT_MS,checkTeamRequirement,checkTeamRequirements,listRecentProjects,listTeams,parseVercelJson,rankProjectSearchResults,requireVercelTeamAccess,searchProjects};
@@ -2,7 +2,7 @@ import { createPromptCommandOutput } from "#setup/cli/index.js";
2
2
  import { type ProjectResolution } from "./project-resolution.js";
3
3
  import type { Prompter } from "./prompter.js";
4
4
  import type { ResolvedVercelProjectSpec, VercelProjectIdentity } from "./state.js";
5
- import { type VercelProjectOperationOptions } from "./vercel-project-api.js";
5
+ import { type VercelTeamRequirement, type VercelProjectOperationOptions } from "./vercel-project-api.js";
6
6
  import { type CreatedProjectFrameworkOptions } from "./vercel-project-framework.js";
7
7
  interface PickProjectOptions extends VercelProjectOperationOptions {
8
8
  /** Whether an empty project list may fall back to entering a name to create. */
@@ -15,6 +15,7 @@ interface PickProjectOptions extends VercelProjectOperationOptions {
15
15
  suggestedName?: string;
16
16
  }
17
17
  interface PickTeamOptions extends VercelProjectOperationOptions {
18
+ teamRequirement?: VercelTeamRequirement;
18
19
  /** Builds the team selector heading from the current team's display name. */
19
20
  selectMessage?: (currentTeam: string) => string;
20
21
  }
@@ -67,7 +68,8 @@ export declare function validateTeam(prompter: Prompter, projectRoot: string, te
67
68
  /**
68
69
  * Picks the Vercel team (scope). A passed slug is validated and resolved; with
69
70
  * zero or one team the current scope is used without prompting; otherwise the
70
- * user filters and chooses from the list with a single-selection picker.
71
+ * user filters and chooses from the list with a single-selection picker. Flows
72
+ * with a team requirement always show the picker and disable ineligible teams.
71
73
  */
72
74
  export declare function pickTeam(prompter: Prompter, projectRoot: string, presetTeam: string | undefined, options?: PickTeamOptions): Promise<string>;
73
75
  /** Picks an existing project under a team, or a name to create when none exist. */
Binary file
@@ -1,2 +1,2 @@
1
1
  /** Web search providers available through Vercel AI Gateway. */
2
- export type WebSearchProvider = "exa" | "parallel";
2
+ export type WebSearchProvider = "exa" | "parallel" | "browserbase";
@@ -1 +1 @@
1
- import{createErrorId,createLogger}from"#internal/logging.js";import{ContinuationTokenKey,SessionIdKey,SessionInboxKey}from"#context/keys.js";import{resumeHook}from"#internal/workflow/runtime.js";import{SUBAGENT_ADAPTER_KIND,isSubagentAdapterState}from"#subagents/adapter-state.js";const log=createLogger(`execution.subagent-adapter`),SUBAGENT_ADAPTER={kind:SUBAGENT_ADAPTER_KIND,async"approval.candidate"(e,t){await forwardSubagentAuthorizationEvent({data:e,type:`approval.candidate`},t)},async"approval.settled"(e,t){await forwardSubagentAuthorizationEvent({data:e,type:`approval.settled`},t)},async"authorization.required"(e,t){await forwardSubagentAuthorizationEvent({data:e,type:`authorization.required`},t)},async"authorization.completed"(e,t){await forwardSubagentAuthorizationEvent({data:e,type:`authorization.completed`},t)},async"input.requested"(e,t){let n=t.state;isSubagentAdapterState(n)&&await forwardSubagentInputRequestStep({hookPayload:{callId:n.callId,childContinuationToken:t.ctx.require(ContinuationTokenKey),childSessionId:t.ctx.require(SessionIdKey),childSessionInbox:t.ctx.get(SessionInboxKey),inputSource:t.inputSource,event:{requests:e.requests,sequence:e.sequence,stepIndex:e.stepIndex,turnId:e.turnId},kind:`subagent-input-request`,subagentName:n.subagentName},parentContinuationToken:n.parentContinuationToken})}};async function forwardSubagentAuthorizationEvent(e,t){let n=t.state;isSubagentAdapterState(n)&&await forwardSubagentAuthorizationEventStep({hookPayload:{callId:n.callId,childSessionId:t.ctx.require(SessionIdKey),event:e,kind:`subagent-authorization-event`,subagentName:n.subagentName},parentContinuationToken:n.parentContinuationToken})}async function forwardSubagentAuthorizationEventStep(e){"use step";try{await resumeHook(e.parentContinuationToken,e.hookPayload)}catch(t){let n=createErrorId();throw log.warn(`failed to forward subagent authorization event to parent`,{callId:e.hookPayload.callId,childSessionId:e.hookPayload.childSessionId,errorId:n,eventType:e.hookPayload.event.type,parentContinuationToken:e.parentContinuationToken,subagentName:e.hookPayload.subagentName,error:t}),t}}async function forwardSubagentInputRequestStep(e){"use step";try{await resumeHook(e.parentContinuationToken,e.hookPayload)}catch(t){let n=createErrorId();throw log.warn(`failed to forward proxied HITL batch to parent`,{callId:e.hookPayload.callId,childContinuationToken:e.hookPayload.childContinuationToken,childSessionId:e.hookPayload.childSessionId,errorId:n,parentContinuationToken:e.parentContinuationToken,subagentName:e.hookPayload.subagentName,error:t}),t}}export{SUBAGENT_ADAPTER};
1
+ import{createErrorId,createLogger}from"#internal/logging.js";import{ContinuationTokenKey,SessionIdKey,SessionInboxKey}from"#context/keys.js";import{SUBAGENT_ADAPTER_KIND,isSubagentAdapterState}from"#subagents/adapter-state.js";const log=createLogger(`execution.subagent-adapter`),SUBAGENT_ADAPTER={kind:SUBAGENT_ADAPTER_KIND,async"approval.candidate"(e,t){await forwardSubagentAuthorizationEvent({data:e,type:`approval.candidate`},t)},async"approval.settled"(e,t){await forwardSubagentAuthorizationEvent({data:e,type:`approval.settled`},t)},async"authorization.required"(e,t){await forwardSubagentAuthorizationEvent({data:e,type:`authorization.required`},t)},async"authorization.completed"(e,t){await forwardSubagentAuthorizationEvent({data:e,type:`authorization.completed`},t)},async"input.requested"(e,t){let n=t.state;isSubagentAdapterState(n)&&await forwardSubagentInputRequestStep({hookPayload:{callId:n.callId,childContinuationToken:t.ctx.require(ContinuationTokenKey),childSessionId:t.ctx.require(SessionIdKey),childSessionInbox:t.ctx.get(SessionInboxKey),inputSource:t.inputSource,event:{requests:e.requests,sequence:e.sequence,stepIndex:e.stepIndex,turnId:e.turnId},kind:`subagent-input-request`,subagentName:n.subagentName},parentContinuationToken:n.parentContinuationToken})}};async function forwardSubagentAuthorizationEvent(e,t){let n=t.state;isSubagentAdapterState(n)&&await forwardSubagentAuthorizationEventStep({hookPayload:{callId:n.callId,childSessionId:t.ctx.require(SessionIdKey),event:e,kind:`subagent-authorization-event`,subagentName:n.subagentName},parentContinuationToken:n.parentContinuationToken})}async function forwardSubagentAuthorizationEventStep(e){"use step";try{await resumeParentHook(e.parentContinuationToken,e.hookPayload)}catch(t){let n=createErrorId();throw log.warn(`failed to forward subagent authorization event to parent`,{callId:e.hookPayload.callId,childSessionId:e.hookPayload.childSessionId,errorId:n,eventType:e.hookPayload.event.type,parentContinuationToken:e.parentContinuationToken,subagentName:e.hookPayload.subagentName,error:t}),t}}async function forwardSubagentInputRequestStep(e){"use step";try{await resumeParentHook(e.parentContinuationToken,e.hookPayload)}catch(t){let n=createErrorId();throw log.warn(`failed to forward proxied HITL batch to parent`,{callId:e.hookPayload.callId,childContinuationToken:e.hookPayload.childContinuationToken,childSessionId:e.hookPayload.childSessionId,errorId:n,parentContinuationToken:e.parentContinuationToken,subagentName:e.hookPayload.subagentName,error:t}),t}}async function resumeParentHook(e,t){let{resumeHook:n}=await import(`#internal/workflow/runtime.js`);await n(e,t)}export{SUBAGENT_ADAPTER};
@@ -1 +1 @@
1
- import{publishFromSessionStep,restoreSessionStep}from"#execution/publish-session-events.js";import{withSessionStateDelta}from"#execution/session/state-delta.js";import{upsertProxyInputRequests}from"#harness/proxy-input-requests.js";import{emitProxiedAuthorizationEvent,emitProxiedInputRequest}from"#subagents/hitl-proxy.js";async function runProxySubagentEventStep(e){"use step";return await withSessionStateDelta(e,async e=>emitProxiedSubagentEvent({...await restoreSessionStep(e),workflowAsk:e.workflowAsk,runId:e.runId,hookPayload:e.hookPayload}))}async function emitProxiedSubagentEvent(e){let{hookPayload:t,runId:n,workflowAsk:r}=e,{published:i}=await publishFromSessionStep(e,{origin:`relayed`,inputSource:t.kind===`subagent-input-request`?JSON.stringify([t.childContinuationToken,t.inputSource??null]):void 0,async publish(e,n){if(t.kind===`subagent-authorization-event`){await emitProxiedAuthorizationEvent({emit:e,hookPayload:t,session:n});return}return await emitProxiedInputRequest({emit:e,hookPayload:t,session:n})},updateSession(e,i){return i===void 0||t.kind!==`subagent-input-request`?{session:e}:{session:upsertProxyInputRequests({entries:i.map(([e,t])=>[e,{...t,...r!==void 0&&{workflowAsk:r},...n!==void 0&&{runId:n}}]),forChildContinuationToken:t.childContinuationToken,inputSource:t.inputSource,session:e})}}});return i}export{emitProxiedSubagentEvent,runProxySubagentEventStep};
1
+ import{currentProjection}from"#harness/session-machine/current.js";import{publishFromSessionStep,restoreSessionStep}from"#execution/publish-session-events.js";import{withSessionStateDelta}from"#execution/session/state-delta.js";import{applyTransition,sessionView}from"#harness/session-machine/commit.js";import{relay}from"#harness/session-machine/transitions.js";import{getProxyInputRequests,toProxyInputRequestEntries,upsertProxyInputRequests}from"#harness/proxy-input-requests.js";async function runProxySubagentEventStep(e){"use step";return await withSessionStateDelta(e,async e=>emitProxiedSubagentEvent({...await restoreSessionStep(e),workflowAsk:e.workflowAsk,runId:e.runId,hookPayload:e.hookPayload}))}async function emitProxiedSubagentEvent(e){let{ctx:t,hookPayload:n,runId:r,workflowAsk:i}=e,{published:a}=await publishFromSessionStep(e,{origin:`relayed`,inputSource:n.kind===`subagent-input-request`?JSON.stringify([n.childContinuationToken,n.inputSource??null]):void 0,async publish(e,r){let i=sessionView(currentProjection(t),r.state),a=n.kind===`subagent-input-request`?toProxyInputRequestEntries(n):void 0,o=new Set(a?.map(([e])=>e)),s=n.kind===`subagent-input-request`?[...getProxyInputRequests(r.state)].filter(([e,t])=>t.childContinuationToken===n.childContinuationToken&&t.inputSource===n.inputSource&&!o.has(e)).map(([e])=>e):[];return await applyTransition(r,relay(i,{payload:n,replacedRequestIds:s}),e),a},updateSession(e,t){return t===void 0||n.kind!==`subagent-input-request`?{session:e}:{session:upsertProxyInputRequests({entries:t.map(([e,t])=>[e,{...t,...i!==void 0&&{workflowAsk:i},...r!==void 0&&{runId:r}}]),forChildContinuationToken:n.childContinuationToken,inputSource:n.inputSource,session:e})}}});return a}export{emitProxiedSubagentEvent,runProxySubagentEventStep};
@@ -1,34 +1,10 @@
1
1
  import type { SessionInboxAddress } from "#execution/session-inbox/address.js";
2
- import type { DeliverPayload, SubagentAuthorizationEventHookPayload, SubagentInputRequestHookPayload } from "#channel/types.js";
3
- import type { PendingInputBatchEvent } from "#harness/pending-input-batches.js";
2
+ import type { DeliverPayload } from "#channel/types.js";
3
+ import type { StepCoordinates as PendingInputBatchEvent } from "#harness/session-machine/view.js";
4
4
  import type { WorkflowAskRoute, ProxyInputRequest } from "#harness/proxy-input-requests.js";
5
- import type { HarnessEmitFn, HarnessSessionBase, SessionStateMap } from "#harness/types.js";
6
- import { type InputResolution } from "#protocol/message.js";
5
+ import type { SessionStateMap } from "#harness/types.js";
6
+ import type { InputResolution } from "#protocol/message.js";
7
7
  import type { InputResponse } from "#shared/input.js";
8
- /**
9
- * Runs the parent-side work for a `subagent-input-request`: emits the request,
10
- * then `turn.waiting` for the parent's open turn. The call that asked is still
11
- * running, so the turn stays open until the answer lets that call settle. The
12
- * returned proxy entries route the eventual response back down to the asker.
13
- */
14
- export declare function emitProxiedInputRequest(input: {
15
- readonly emit: HarnessEmitFn;
16
- readonly hookPayload: SubagentInputRequestHookPayload;
17
- readonly session: HarnessSessionBase;
18
- }): Promise<readonly (readonly [requestId: string, route: ProxyInputRequest])[]>;
19
- /**
20
- * Runs the parent-side work for a `subagent-authorization-event`: re-emits the
21
- * event, and after `authorization.required` parks the parent's open turn with
22
- * `turn.waiting`. The sign-in completes on the asker's own callback while the
23
- * call keeps running, so the parent's turn neither ends nor resets.
24
- */
25
- export declare function emitProxiedAuthorizationEvent(input: {
26
- readonly emit: HarnessEmitFn;
27
- readonly hookPayload: SubagentAuthorizationEventHookPayload;
28
- readonly session: HarnessSessionBase;
29
- }): Promise<void>;
30
- /** The `turn.waiting` that parks the session's open turn while a person must act. */
31
- export declare function createTurnWaitingOnInputEvent(session: Pick<HarnessSessionBase, "state">): import("#protocol/message.js").TurnWaitingStreamEvent;
32
8
  /** One proxied-child bucket of a routed deliver payload. */
33
9
  export interface RoutedChildDelivery {
34
10
  readonly workflowAsk?: WorkflowAskRoute;
@@ -1 +1 @@
1
- import{inputTextKey,readAnswerText}from"#internal/input-text.js";import{createInputRequestedEvent,createTurnWaitingEvent}from"#protocol/message.js";import{resolveTextToResponse}from"#channel/resolve-text.js";import{getHarnessEmissionState}from"#harness/emission.js";import{getSessionUsage}from"#harness/turn-tag-state.js";import{getProxyInputRequests,toProxyInputRequestEntries}from"#harness/proxy-input-requests.js";import{resolveInputOutcome}from"#harness/input-request-resolution.js";import{SESSION_LIMIT_STOP_OPTION_ID}from"#harness/session-limit-continuation.js";async function emitProxiedInputRequest(e){return await e.emit(createInputRequestedEvent({requests:e.hookPayload.event.requests,sequence:e.hookPayload.event.sequence,stepIndex:e.hookPayload.event.stepIndex,taskId:e.hookPayload.event.taskId,turnId:e.hookPayload.event.turnId})),await e.emit(createTurnWaitingOnInputEvent(e.session)),toProxyInputRequestEntries(e.hookPayload)}async function emitProxiedAuthorizationEvent(e){await e.emit(e.hookPayload.event),e.hookPayload.event.type===`authorization.required`&&await e.emit(createTurnWaitingOnInputEvent(e.session))}function createTurnWaitingOnInputEvent(e){let t=getHarnessEmissionState(e.state);return createTurnWaitingEvent({on:`input`,sequence:t.sequence,turnId:t.turnId,usage:getSessionUsage(e)})}const CONSUMED_MESSAGE_KEYS=new Set([`context`,`message`,inputTextKey]);function routeDeliverPayload(e){let t=getProxyInputRequests(e.state),routable=(t,n)=>n!==void 0&&e.allowRoute?.(t,n)!==!1,n=resolveMessageAgainstQuestions({enabled:e.resolveMessage===!0,entries:t,payload:e.payload,routable}),[r]=n.responses,i=[...e.payload.inputResponses??[],...n.responses],a=new Map,o=[],s,bucketFor=e=>{let t=JSON.stringify([e.childContinuationToken,e.childSessionInbox?.sessionId??``,e.remote?.sessionId??``,e.event.sequence,e.event.stepIndex,e.event.turnId,e.inputSource??null]),n=a.get(t);if(n!==void 0)return n;let r={childContinuationToken:e.childContinuationToken,remote:e.remote,event:e.event,parentRequestIds:[],responses:[],routes:[],...e.childSessionInbox!==void 0&&{childSessionInbox:e.childSessionInbox},...e.workflowAsk!==void 0&&{workflowAsk:e.workflowAsk}};return a.set(t,r),r},c=new Set;for(let e of i){let n=t.get(e.requestId);if(n===void 0||!routable(e.requestId,n)){o.push(e);continue}if(c.has(e.requestId))continue;c.add(e.requestId),n.kind===`session-limit`&&e.optionId===SESSION_LIMIT_STOP_OPTION_ID&&(s={kind:`cancel-turn`});let r=bucketFor(n);r.parentRequestIds.push(e.requestId),r.responses.push(e),r.routes.push(n)}let l=[...a.values()].map(({workflowAsk:n,remote:i,childContinuationToken:a,childSessionInbox:o,event:s,parentRequestIds:c,responses:l,routes:u})=>{let d=new Set(c),f=new Set(d);for(let e of u)if(e.batch!==void 0&&batchResolves({batch:e.batch,childContinuationToken:a,entries:t,responseIds:d}))for(let t of e.batch.requestIds)f.add(t);return{childContinuationToken:a,payload:{inputResponses:l},resolved:{event:s,resolutions:resolveRetiredRequests({entries:t,responses:l,retireRequestIds:f})},...o!==void 0&&{childSessionInbox:o},...r!==void 0&&l.includes(r)&&{message:e.payload.message},...n!==void 0&&{workflowAsk:n},...i!==void 0&&{remote:i},...u[0]?.inputSource!==void 0&&{inputSource:u[0].inputSource}}}),u={};for(let[t,r]of Object.entries(e.payload))t!==`inputResponses`&&r!==void 0&&(n.consumed&&CONSUMED_MESSAGE_KEYS.has(t)||(u[t]=r));return o.length>0&&(u.inputResponses=o),{forChildren:l,forSelf:Object.keys(u).length>0?u:void 0,parentAction:s}}function resolveRetiredRequests(e){let t=new Map(e.responses.map(e=>[e.requestId,e])),n=[];for(let r of e.retireRequestIds){let i=e.entries.get(r);i!==void 0&&n.push(toInputResolution(r,i,t.get(r)))}return n}function toInputResolution(e,t,n){let r=resolveInputOutcome(t.kind,n),i={kind:t.kind,outcome:r,requestId:e};return n===void 0?i:{...i,response:n}}function resolveMessageAgainstQuestions(e){let t={consumed:!1,responses:[]};if(!e.enabled||(e.payload.inputResponses?.length??0)>0||e.payload.message===void 0)return t;let n=[...e.entries].filter(([t,n])=>n.kind===`question`&&e.routable(t,n)),r=n.flatMap(([e,t])=>{let n=t.workflowAsk?.question??t.question;return n===void 0?[]:[{requestId:e,...n}]});if(r.length===0)return t;let[i]=r,a=readAnswerText(e.payload),o=n.length===1&&i!==void 0&&a!==void 0?resolveTextToResponse(a,i):void 0;return o===void 0?t:{consumed:!0,responses:[o]}}function batchResolves(e){return e.batch.approvalRequestIds.length===0||e.batch.approvalRequestIds.every(t=>{let n=e.entries.get(t);return n===void 0||!sameBatch(n,e)||e.responseIds.has(t)})}function sameBatch(e,t){return e.childContinuationToken===t.childContinuationToken&&e.batch?.requestIds.length===t.batch.requestIds.length&&e.batch.requestIds.every((e,n)=>e===t.batch.requestIds[n])}export{createTurnWaitingOnInputEvent,emitProxiedAuthorizationEvent,emitProxiedInputRequest,routeDeliverPayload};
1
+ import{inputTextKey,readAnswerText}from"#internal/input-text.js";import{resolveTextToResponse}from"#channel/resolve-text.js";import{getProxyInputRequests}from"#harness/proxy-input-requests.js";import{resolveInputOutcome}from"#harness/input-request-resolution.js";import{SESSION_LIMIT_STOP_OPTION_ID}from"#harness/hitl/budget-request.js";const CONSUMED_MESSAGE_KEYS=new Set([`context`,`message`,inputTextKey]);function routeDeliverPayload(e){let t=getProxyInputRequests(e.state),routable=(t,n)=>n!==void 0&&e.allowRoute?.(t,n)!==!1,n=resolveMessageAgainstQuestions({enabled:e.resolveMessage===!0,entries:t,payload:e.payload,routable}),[r]=n.responses,i=[...e.payload.inputResponses??[],...n.responses],a=new Map,o=[],s,bucketFor=e=>{let t=JSON.stringify([e.childContinuationToken,e.childSessionInbox?.sessionId??``,e.remote?.sessionId??``,e.event.sequence,e.event.stepIndex,e.event.turnId,e.inputSource??null]),n=a.get(t);if(n!==void 0)return n;let r={childContinuationToken:e.childContinuationToken,remote:e.remote,event:e.event,parentRequestIds:[],responses:[],routes:[],...e.childSessionInbox!==void 0&&{childSessionInbox:e.childSessionInbox},...e.workflowAsk!==void 0&&{workflowAsk:e.workflowAsk}};return a.set(t,r),r},c=new Set;for(let e of i){let n=t.get(e.requestId);if(n===void 0||!routable(e.requestId,n)){o.push(e);continue}if(c.has(e.requestId))continue;c.add(e.requestId),n.kind===`session-limit`&&e.optionId===SESSION_LIMIT_STOP_OPTION_ID&&(s={kind:`cancel-turn`});let r=bucketFor(n);r.parentRequestIds.push(e.requestId),r.responses.push(e),r.routes.push(n)}let l=[...a.values()].map(({workflowAsk:n,remote:i,childContinuationToken:a,childSessionInbox:o,event:s,parentRequestIds:c,responses:l,routes:u})=>{let d=new Set(c),f=new Set(d);for(let e of u)if(e.batch!==void 0&&batchResolves({batch:e.batch,childContinuationToken:a,entries:t,responseIds:d}))for(let t of e.batch.requestIds)f.add(t);return{childContinuationToken:a,payload:{inputResponses:l},resolved:{event:s,resolutions:resolveRetiredRequests({entries:t,responses:l,retireRequestIds:f})},...o!==void 0&&{childSessionInbox:o},...r!==void 0&&l.includes(r)&&{message:e.payload.message},...n!==void 0&&{workflowAsk:n},...i!==void 0&&{remote:i},...u[0]?.inputSource!==void 0&&{inputSource:u[0].inputSource}}}),u={};for(let[t,r]of Object.entries(e.payload))t!==`inputResponses`&&r!==void 0&&(n.consumed&&CONSUMED_MESSAGE_KEYS.has(t)||(u[t]=r));return o.length>0&&(u.inputResponses=o),{forChildren:l,forSelf:Object.keys(u).length>0?u:void 0,parentAction:s}}function resolveRetiredRequests(e){let t=new Map(e.responses.map(e=>[e.requestId,e])),n=[];for(let r of e.retireRequestIds){let i=e.entries.get(r);i!==void 0&&n.push(toInputResolution(r,i,t.get(r)))}return n}function toInputResolution(e,t,n){let r=resolveInputOutcome(t.kind,n),i={kind:t.kind,outcome:r,requestId:e};return n===void 0?i:{...i,response:n}}function resolveMessageAgainstQuestions(e){let t={consumed:!1,responses:[]};if(!e.enabled||(e.payload.inputResponses?.length??0)>0||e.payload.message===void 0)return t;let n=[...e.entries].filter(([t,n])=>n.kind===`question`&&e.routable(t,n)),r=n.flatMap(([e,t])=>{let n=t.workflowAsk?.question??t.question;return n===void 0?[]:[{requestId:e,...n}]});if(r.length===0)return t;let[i]=r,a=readAnswerText(e.payload),o=n.length===1&&i!==void 0&&a!==void 0?resolveTextToResponse(a,i):void 0;return o===void 0?t:{consumed:!0,responses:[o]}}function batchResolves(e){return e.batch.approvalRequestIds.length===0||e.batch.approvalRequestIds.every(t=>{let n=e.entries.get(t);return n===void 0||!sameBatch(n,e)||e.responseIds.has(t)})}function sameBatch(e,t){return e.childContinuationToken===t.childContinuationToken&&e.batch?.requestIds.length===t.batch.requestIds.length&&e.batch.requestIds.every((e,n)=>e===t.batch.requestIds[n])}export{routeDeliverPayload};
@@ -2,5 +2,7 @@ export { useEveAgent, type PrepareSend, type UseEveAgentOptions, type UseEveAgen
2
2
  export { type EveAgentReducer, type EveAgentReducerEvent, type ClientInputRespondedEvent, type ClientMessageFailedEvent, type ClientMessageSubmittedEvent, } from "#client/reducer.js";
3
3
  export { conversationReducer } from "#client/conversation-reducer.js";
4
4
  export { openConversationInputs } from "#client/conversation-state.js";
5
+ export { toolCallState, type ToolCallState, type ToolCallStatus } from "#client/tool-call-state.js";
6
+ export type { SessionAuthorization, SessionCall, SessionCallStatus, SessionProjection, } from "#protocol/session-projection.js";
5
7
  export type { AgentObservation, ConversationAgentSession, ConversationInput, ConversationState, ConversationTask, ConversationTaskCall, ConversationTurn, } from "#client/conversation-state.js";
6
8
  export { defaultMessageReducer, type EveAuthorizationChallenge, type EveAuthorizationOutcome, type EveAuthorizationPart, type EveMessageData, type EveDynamicToolPart, type EveMessageInputRequest, type EveMessage, type EveMessageMetadata, type EveMessagePart, type EveMessageToolMetadata, } from "#client/message-reducer.js";
@@ -1,3 +1,40 @@
1
- import { i as openConversationInputs, n as conversationReducer, r as defaultMessageReducer, t as useEveAgent } from "../chunks/use-eve-agent-DcDhXNv1.js";
1
+ import { a as conversationProjection, i as openConversationInputs, n as conversationReducer, o as callStatus, r as defaultMessageReducer, t as useEveAgent } from "../chunks/use-eve-agent-hZJ7CB8t.js";
2
2
 
3
- export { conversationReducer, defaultMessageReducer, openConversationInputs, useEveAgent };
3
+ //#region src/client/tool-call-state.ts
4
+ function toolCallState(conversation, callId, options = {}) {
5
+ const part = findToolPart(conversation, callId);
6
+ const projection = conversationProjection(conversation);
7
+ const call = projection.calls[callId];
8
+ const status = callStatus(projection, callId, options) ?? partStatus(part, options);
9
+ if (status === void 0) return void 0;
10
+ const taskCall = (call?.taskId === void 0 ? void 0 : conversation.tasks[call.taskId])?.calls[callId];
11
+ const output = taskCall?.output ?? part?.output;
12
+ const errorText = taskCall?.error?.message ?? part?.errorText ?? call?.error?.message ?? (part?.state === "output-denied" ? part.approval.reason : void 0);
13
+ const state = { status: respondedStatus(conversation, part, status) };
14
+ if (output !== void 0) state.output = output;
15
+ if (errorText !== void 0) state.errorText = errorText;
16
+ if (call?.error?.code !== void 0) state.errorCode = call.error.code;
17
+ return state;
18
+ }
19
+ function respondedStatus(conversation, part, status) {
20
+ if (status !== "awaiting-input" || part?.state !== "approval-requested") return status;
21
+ const input = conversation.inputs[part.approval.id];
22
+ if (input?.status !== "responded") return status;
23
+ return input.response?.optionId === "approve" ? "running" : "rejected";
24
+ }
25
+ function partStatus(part, options) {
26
+ if (part === void 0) return void 0;
27
+ switch (part.state) {
28
+ case "output-available": return part.partial === true ? "running" : "completed";
29
+ case "output-error": return "failed";
30
+ case "output-denied": return "rejected";
31
+ case "approval-requested": return "awaiting-input";
32
+ default: return options.streaming === false ? "interrupted" : "running";
33
+ }
34
+ }
35
+ function findToolPart(conversation, callId) {
36
+ for (let index = conversation.messages.length - 1; index >= 0; index -= 1) for (const part of conversation.messages[index].parts) if (part.type === "dynamic-tool" && part.toolCallId === callId) return part;
37
+ }
38
+
39
+ //#endregion
40
+ export { conversationReducer, defaultMessageReducer, openConversationInputs, toolCallState, useEveAgent };
@@ -1,3 +1,3 @@
1
- import { t as useEveAgent } from "../chunks/use-eve-agent-DcDhXNv1.js";
1
+ import { t as useEveAgent } from "../chunks/use-eve-agent-hZJ7CB8t.js";
2
2
 
3
3
  export { useEveAgent };
@@ -1,8 +1,8 @@
1
- import type { Experimental_EvaluationModel as EvaluationModel } from "ai";
1
+ import type { Experimental_DecisionModel as DecisionModel } from "ai";
2
2
  import type { ApprovalPolicy } from "#approval/definition.js";
3
3
  export interface AutoApprovalOptions {
4
- /** Evaluation model instance or ID. Defaults to TypeSafe Jev. */
5
- readonly model?: EvaluationModel;
4
+ /** Decision model instance or ID. Defaults to TypeSafe Jev. */
5
+ readonly model?: DecisionModel;
6
6
  /** Instructions used to classify the exact tool call. */
7
7
  readonly instructions?: string;
8
8
  /** Descriptions of the fixed approval outcomes. */
@@ -12,9 +12,9 @@ export interface AutoApprovalOptions {
12
12
  };
13
13
  }
14
14
  /**
15
- * Returns an `approval` callback that asks an AI SDK evaluation model whether
15
+ * Returns an `approval` callback that asks an AI SDK decision model whether
16
16
  * the exact tool call presents concrete security danger. Defaults to TypeSafe Jev.
17
- * Unavailable or invalid evaluations require user approval.
17
+ * Unavailable or invalid decisions require user approval.
18
18
  */
19
19
  export declare function auto<TInput = unknown>(options?: AutoApprovalOptions): ApprovalPolicy<TInput>;
20
20
  /**
@@ -1 +1 @@
1
- import{parseJsonValue}from"#shared/json.js";import{stampDurableDynamicCallback}from"#tools/durable-callbacks.js";import{evaluate}from"#ai/evaluate.js";async function autoApproval(e,t,n){try{let r=parseJsonValue(n.toolInput??null),i=JSON.stringify(r);if(new TextEncoder().encode(i).byteLength>65536)return`user-approval`;let a=AbortSignal.any([n.abortSignal,AbortSignal.timeout(3e4)]);return(await evaluate({model:e,state:{action:{input:r,tool:n.toolName}},questions:{permission:{type:`choice`,instructions:t.instructions??`Review the exact tool action for dangerous effects. Return caution when it could cause meaningful harm, including destructive data loss, credential exposure, financial transactions, deployments or public changes, external communication, privilege or system changes, or concealed execution. Return clear for routine, low-impact actions. Judge the action's actual effects from its name and input. If important effects are unclear, return caution.`,criteria:{clear:t.criteria?.clear??`The action is routine and low impact.`,caution:t.criteria?.caution??`The action is dangerous or its important effects are unclear.`}}},abortSignal:a,maxRetries:0})).answers.permission.choice===`clear`?`approved`:`user-approval`}catch{return n.abortSignal.throwIfAborted(),`user-approval`}}function alwaysApproval(e){return`user-approval`}function neverApproval(e){return`not-applicable`}function onceApproval(e,t){return t.approvedTools.has(t.toolName)?`not-applicable`:`user-approval`}function auto(e={}){let t=e.model??`typesafe-ai/jev`;return stampDurableDynamicCallback(n=>autoApproval(t,e,n),{callback:(n,r)=>autoApproval(t,e,r),closure:{}})}function always(){return stampDurableDynamicCallback(()=>`user-approval`,{callback:alwaysApproval,closure:{}})}function never(){return stampDurableDynamicCallback(()=>`not-applicable`,{callback:neverApproval,closure:{}})}function once(){return stampDurableDynamicCallback(({approvedTools:e,toolName:t})=>e.has(t)?`not-applicable`:`user-approval`,{callback:onceApproval,closure:{}})}export{always,auto,never,once};
1
+ import{parseJsonValue}from"#shared/json.js";import{stampDurableDynamicCallback}from"#tools/durable-callbacks.js";import{decide}from"#ai/decide.js";async function autoApproval(e,t,n){try{let r=parseJsonValue(n.toolInput??null),i=JSON.stringify(r);if(new TextEncoder().encode(i).byteLength>65536)return`user-approval`;let a=AbortSignal.any([n.abortSignal,AbortSignal.timeout(3e4)]);return(await decide({model:e,state:{action:{input:r,tool:n.toolName}},questions:{permission:{type:`choice`,instructions:t.instructions??`Review the exact tool action for dangerous effects. Return caution when it could cause meaningful harm, including destructive data loss, credential exposure, financial transactions, deployments or public changes, external communication, privilege or system changes, or concealed execution. Return clear for routine, low-impact actions. Judge the action's actual effects from its name and input. If important effects are unclear, return caution.`,criteria:{clear:t.criteria?.clear??`The action is routine and low impact.`,caution:t.criteria?.caution??`The action is dangerous or its important effects are unclear.`}}},abortSignal:a,maxRetries:0})).answers.permission.choice===`clear`?`approved`:`user-approval`}catch{return n.abortSignal.throwIfAborted(),`user-approval`}}function alwaysApproval(e){return`user-approval`}function neverApproval(e){return`not-applicable`}function onceApproval(e,t){return t.approvedTools.has(t.toolName)?`not-applicable`:`user-approval`}function auto(e={}){let t=e.model??`typesafe-ai/jev`;return stampDurableDynamicCallback(n=>autoApproval(t,e,n),{callback:(n,r)=>autoApproval(t,e,r),closure:{}})}function always(){return stampDurableDynamicCallback(()=>`user-approval`,{callback:alwaysApproval,closure:{}})}function never(){return stampDurableDynamicCallback(()=>`not-applicable`,{callback:neverApproval,closure:{}})}function once(){return stampDurableDynamicCallback(({approvedTools:e,toolName:t})=>e.has(t)?`not-applicable`:`user-approval`,{callback:onceApproval,closure:{}})}export{always,auto,never,once};
@@ -1 +1 @@
1
- import{AGENT_TOOL_DESCRIPTION,SUBAGENT_TOOL_INPUT_SCHEMA}from"#tools/framework/agent-contract.js";import{stampToolDefinition}from"#tools/definition.js";import{attachToolBehavior}from"#tools/behavior.js";const agent=attachToolBehavior(stampToolDefinition({description:AGENT_TOOL_DESCRIPTION,inputSchema:SUBAGENT_TOOL_INPUT_SCHEMA,execute(){throw Error(`The framework "agent" tool was executed directly. It must be resolved through the runtime tool registry, which dispatches it to the shared subagent workflow.`)}},`defineTool`),{availability:[`root-session`],handling:{action:`self-agent`,kind:`dispatch`}});export{agent,agent as default};
1
+ import{frameworkTool}from"#tools/provided/framework-tool.js";import{AGENT_TOOL_DESCRIPTION,SUBAGENT_TOOL_INPUT_SCHEMA}from"#tools/framework/agent-contract.js";import{stampToolDefinition}from"#tools/definition.js";import{attachToolBehavior}from"#tools/behavior.js";const agent=attachToolBehavior(frameworkTool(stampToolDefinition({description:AGENT_TOOL_DESCRIPTION,inputSchema:SUBAGENT_TOOL_INPUT_SCHEMA,execute(){throw Error(`The framework "agent" tool was executed directly. It must be resolved through the runtime tool registry, which dispatches it to the shared subagent workflow.`)}},`defineTool`)),{availability:[`root-session`],handling:{action:`self-agent`,kind:`dispatch`}});export{agent,agent as default};
@@ -1 +1 @@
1
- import{defineWorkflowTool}from"#tools/workflow-definition.js";import{AGENT_ROUTER_INPUT_SCHEMA,AGENT_ROUTER_TOOL_DESCRIPTION,runAgentRouterTask}from"#execution/tools/agent-router.js";function agentRouter(){return defineWorkflowTool({availableInSubagents:!1,description:AGENT_ROUTER_TOOL_DESCRIPTION,inputSchema:AGENT_ROUTER_INPUT_SCHEMA,task:runAgentRouterTask})}export{agentRouter};
1
+ import{frameworkTool}from"./framework-tool.js";import{defineWorkflowTool}from"#tools/workflow-definition.js";import{AGENT_ROUTER_INPUT_SCHEMA,AGENT_ROUTER_TOOL_DESCRIPTION,runAgentRouterTask}from"#execution/tools/agent-router.js";function agentRouter(){return frameworkTool(defineWorkflowTool({availableInSubagents:!1,description:AGENT_ROUTER_TOOL_DESCRIPTION,inputSchema:AGENT_ROUTER_INPUT_SCHEMA,task:runAgentRouterTask}))}export{agentRouter};
@@ -1 +1 @@
1
- async function executeAskQuestionTool(e,t){"use workflow";return toAskQuestionOutput(await t.ask(toAskQuestionRequest(e)))}function toAskQuestionRequest(e){let t=e.options?.map(e=>({description:e.description,id:e.label,label:e.label}));return{allowFreeform:!0,display:t===void 0?`text`:`select`,prompt:e.question,...t!==void 0&&{options:t}}}function toAskQuestionOutput(e){switch(e.status){case`answered`:return{answer:e.optionId??e.text??``,status:`answered`};case`cancelled`:return{interrupted:!0};case`unavailable`:return{status:`unavailable`}}}executeAskQuestionTool.workflowId=`workflow//eve@0.71.3//executeAskQuestionTool`;export{executeAskQuestionTool,toAskQuestionOutput,toAskQuestionRequest};
1
+ async function executeAskQuestionTool(e,t){"use workflow";return toAskQuestionOutput(await t.ask(toAskQuestionRequest(e)))}function toAskQuestionRequest(e){let t=e.options?.map(e=>({description:e.description,id:e.label,label:e.label}));return{allowFreeform:!0,display:t===void 0?`text`:`select`,prompt:e.question,...t!==void 0&&{options:t}}}function toAskQuestionOutput(e){switch(e.status){case`answered`:return{answer:e.optionId??e.text??``,status:`answered`};case`cancelled`:return{interrupted:!0};case`unavailable`:return{status:`unavailable`}}}executeAskQuestionTool.workflowId=`workflow//eve@0.72.1//executeAskQuestionTool`;export{executeAskQuestionTool,toAskQuestionOutput,toAskQuestionRequest};
@@ -1,2 +1,2 @@
1
- import{defineJsonSchema}from"#tools/schema.js";import{defineWorkflowTool}from"#public/tools/index.js";import{executeAskQuestionTool}from"#tools/provided/ask-question-workflow.js";import{INTERRUPTED_OUTPUT_SCHEMA,toInterruptibleModelOutput}from"#tools/provided/interrupted.js";const ASK_QUESTION_TOOL_DESCRIPTION=[`Ask the user a question and wait for the answer. Use this only when you cannot make good progress without the user's input: to choose between materially different approaches, fill in a missing requirement, or confirm something risky or irreversible. Do not ask for information you can find with your other tools, and do not ask the user to confirm routine steps.`,``,`Usage:`,`- Ask one focused question that includes the context needed to answer it.`,`- For a decision, offer 2-3 mutually exclusive options. Put the option you recommend first and end its label with "(Recommended)".`,`- Do not add an "Other" option; the user can always type their own answer.`,"- The result's `answer` is the chosen option's label or the user's own words.",`- If the question stopped early because a new message arrived, respond to that message instead.`,`- If the status is "unavailable", no one can answer in this session; continue with your best judgment and state the assumption you made.`].join(`
2
- `),ASK_QUESTION_INPUT_SCHEMA=defineJsonSchema({type:`object`,properties:{options:{type:`array`,minItems:2,maxItems:3,items:{type:`object`,properties:{description:{type:`string`,minLength:1,maxLength:200,description:`One short sentence on the impact or tradeoff of choosing this option.`},label:{type:`string`,minLength:1,maxLength:80,description:`User-facing label, 1-5 words.`}},required:[`description`,`label`],additionalProperties:!1},description:`Two or three mutually exclusive choices, recommended option first. Omit for an open-ended question. Never include an "Other" option.`},question:{type:`string`,minLength:1,maxLength:2e3,description:`The question to show the user, with the context needed to answer it.`}},required:[`question`],additionalProperties:!1},e=>e.options!==void 0&&new Set(e.options.map(e=>e.label)).size!==e.options.length?`Option labels must be unique.`:void 0),ASK_QUESTION_OUTPUT_SCHEMA=defineJsonSchema({oneOf:[{type:`object`,properties:{answer:{type:`string`,description:`The chosen option's label, or the user's own words.`},status:{type:`string`,const:`answered`}},required:[`answer`,`status`],additionalProperties:!1},INTERRUPTED_OUTPUT_SCHEMA,{type:`object`,properties:{status:{type:`string`,const:`unavailable`}},required:[`status`],additionalProperties:!1}]});function askQuestion(){return defineWorkflowTool({description:ASK_QUESTION_TOOL_DESCRIPTION,execute:executeAskQuestionTool,inputSchema:ASK_QUESTION_INPUT_SCHEMA,outputSchema:ASK_QUESTION_OUTPUT_SCHEMA,toModelOutput:toInterruptibleModelOutput})}export{ASK_QUESTION_INPUT_SCHEMA,ASK_QUESTION_TOOL_DESCRIPTION,askQuestion};
1
+ import{frameworkTool}from"./framework-tool.js";import{defineJsonSchema}from"#tools/schema.js";import{defineWorkflowTool}from"#public/tools/index.js";import{executeAskQuestionTool}from"#tools/provided/ask-question-workflow.js";import{INTERRUPTED_OUTPUT_SCHEMA,toInterruptibleModelOutput}from"#tools/provided/interrupted.js";const ASK_QUESTION_TOOL_DESCRIPTION=[`Ask the user a question and wait for the answer. Use this only when you cannot make good progress without the user's input: to choose between materially different approaches, fill in a missing requirement, or confirm something risky or irreversible. Do not ask for information you can find with your other tools, and do not ask the user to confirm routine steps.`,``,`Usage:`,`- Ask one focused question that includes the context needed to answer it.`,`- For a decision, offer 2-3 mutually exclusive options. Put the option you recommend first and end its label with "(Recommended)".`,`- Do not add an "Other" option; the user can always type their own answer.`,"- The result's `answer` is the chosen option's label or the user's own words.",`- If the question stopped early because a new message arrived, respond to that message instead.`,`- If the status is "unavailable", no one can answer in this session; continue with your best judgment and state the assumption you made.`].join(`
2
+ `),ASK_QUESTION_INPUT_SCHEMA=defineJsonSchema({type:`object`,properties:{options:{type:`array`,minItems:2,maxItems:3,items:{type:`object`,properties:{description:{type:`string`,minLength:1,maxLength:200,description:`One short sentence on the impact or tradeoff of choosing this option.`},label:{type:`string`,minLength:1,maxLength:80,description:`User-facing label, 1-5 words.`}},required:[`description`,`label`],additionalProperties:!1},description:`Two or three mutually exclusive choices, recommended option first. Omit for an open-ended question. Never include an "Other" option.`},question:{type:`string`,minLength:1,maxLength:2e3,description:`The question to show the user, with the context needed to answer it.`}},required:[`question`],additionalProperties:!1},e=>e.options!==void 0&&new Set(e.options.map(e=>e.label)).size!==e.options.length?`Option labels must be unique.`:void 0),ASK_QUESTION_OUTPUT_SCHEMA=defineJsonSchema({oneOf:[{type:`object`,properties:{answer:{type:`string`,description:`The chosen option's label, or the user's own words.`},status:{type:`string`,const:`answered`}},required:[`answer`,`status`],additionalProperties:!1},INTERRUPTED_OUTPUT_SCHEMA,{type:`object`,properties:{status:{type:`string`,const:`unavailable`}},required:[`status`],additionalProperties:!1}]});function askQuestion(){return frameworkTool(defineWorkflowTool({description:ASK_QUESTION_TOOL_DESCRIPTION,execute:executeAskQuestionTool,inputSchema:ASK_QUESTION_INPUT_SCHEMA,outputSchema:ASK_QUESTION_OUTPUT_SCHEMA,toModelOutput:toInterruptibleModelOutput}))}export{ASK_QUESTION_INPUT_SCHEMA,ASK_QUESTION_TOOL_DESCRIPTION,askQuestion};
@@ -1 +1 @@
1
- import{defineJsonSchema}from"#tools/schema.js";import{defineTool}from"#tools/definition.js";import{toolLabel}from"#tools/tool-label.js";import{BASH_YIELD_SECONDS,executeBashOnSandbox}from"#execution/sandbox/bash.js";const BASH_INPUT_SCHEMA=defineJsonSchema({type:`object`,properties:{command:{type:`string`,description:`The shell command to execute.`}},required:[`command`],additionalProperties:!1}),BASH_OUTPUT_SCHEMA=defineJsonSchema({oneOf:[{type:`object`,properties:{status:{const:`completed`},exitCode:{type:`number`},stderr:{type:`string`},stdout:{type:`string`},truncated:{type:`boolean`}},required:[`status`,`exitCode`,`stderr`,`stdout`,`truncated`],additionalProperties:!1},{type:`object`,properties:{status:{const:`running`},pid:{type:`number`},outputDirectory:{type:`string`},message:{type:`string`},stderr:{type:`string`},stdout:{type:`string`},truncated:{type:`boolean`}},required:[`status`,`pid`,`outputDirectory`,`message`,`stderr`,`stdout`,`truncated`],additionalProperties:!1}]}),bash=defineTool({label:{start:e=>toolLabel(`Run`,e.command)},description:`Execute a shell command in the shared workspace environment. A command still running after ${BASH_YIELD_SECONDS} seconds keeps running in the background and returns status "running" with its output so far and how to check on or stop it.`,async execute(e,t){return await executeBashOnSandbox(await t.getSandbox(),e,{abortSignal:t.abortSignal})},inputSchema:BASH_INPUT_SCHEMA,outputSchema:BASH_OUTPUT_SCHEMA});export{BASH_INPUT_SCHEMA,BASH_OUTPUT_SCHEMA,bash,bash as default};
1
+ import{frameworkTool}from"./framework-tool.js";import{defineJsonSchema}from"#tools/schema.js";import{defineTool}from"#tools/definition.js";import{toolLabel}from"#tools/tool-label.js";import{BASH_YIELD_SECONDS,executeBashOnSandbox}from"#execution/sandbox/bash.js";const BASH_INPUT_SCHEMA=defineJsonSchema({type:`object`,properties:{command:{type:`string`,description:`The shell command to execute.`}},required:[`command`],additionalProperties:!1}),BASH_OUTPUT_SCHEMA=defineJsonSchema({oneOf:[{type:`object`,properties:{status:{const:`completed`},exitCode:{type:`number`},stderr:{type:`string`},stdout:{type:`string`},truncated:{type:`boolean`}},required:[`status`,`exitCode`,`stderr`,`stdout`,`truncated`],additionalProperties:!1},{type:`object`,properties:{status:{const:`running`},pid:{type:`number`},outputDirectory:{type:`string`},message:{type:`string`},stderr:{type:`string`},stdout:{type:`string`},truncated:{type:`boolean`}},required:[`status`,`pid`,`outputDirectory`,`message`,`stderr`,`stdout`,`truncated`],additionalProperties:!1}]}),bash=frameworkTool(defineTool({label:{start:e=>toolLabel(`Run`,e.command)},description:`Execute a shell command in the shared workspace environment. A command still running after ${BASH_YIELD_SECONDS} seconds keeps running in the background and returns status "running" with its output so far and how to check on or stop it.`,async execute(e,t){return await executeBashOnSandbox(await t.getSandbox(),e,{abortSignal:t.abortSignal})},inputSchema:BASH_INPUT_SCHEMA,outputSchema:BASH_OUTPUT_SCHEMA}));export{BASH_INPUT_SCHEMA,BASH_OUTPUT_SCHEMA,bash,bash as default};
@@ -0,0 +1,3 @@
1
+ /** Keeps framework identity on definitions even when their runtime names change. */
2
+ export declare function frameworkTool<T extends object>(definition: T): T;
3
+ export declare function isFrameworkTool(definition: object): boolean;
@@ -0,0 +1 @@
1
+ const FRAMEWORK_TOOL=Symbol.for(`eve.framework-tool`);function frameworkTool(e){return Object.defineProperty(e,FRAMEWORK_TOOL,{enumerable:!0,value:!0}),e}function isFrameworkTool(e){return Reflect.get(e,FRAMEWORK_TOOL)===!0}export{frameworkTool,isFrameworkTool};
@@ -1,2 +1,2 @@
1
- import{defineJsonSchema}from"#tools/schema.js";import{defineTool}from"#tools/definition.js";import{toolLabel}from"#tools/tool-label.js";import{executeGlobOnSandbox}from"#execution/sandbox/glob-tool.js";const GLOB_INPUT_SCHEMA=defineJsonSchema({type:`object`,properties:{limit:{type:`integer`,minimum:1,maximum:1e3,description:`Maximum number of results to return. Defaults to 100.`},path:{type:`string`,description:`The directory to search in. Defaults to /workspace. Must be an absolute path or begin with $HOME/. Omit to use the default.`},pattern:{type:`string`,description:`The glob pattern to match files against (e.g. "**/*.ts", "src/**/*.js").`}},required:[`pattern`],additionalProperties:!1}),GLOB_OUTPUT_SCHEMA=defineJsonSchema({type:`object`,properties:{content:{type:`string`},count:{type:`integer`},path:{type:`string`},truncated:{type:`boolean`}},required:[`content`,`count`,`path`,`truncated`],additionalProperties:!1}),glob=defineTool({label:{start:e=>toolLabel(`Find`,e.pattern)},description:[`Fast file pattern matching tool that works with any codebase size.`,``,`Usage:`,`- Supports glob patterns like "**/*.js" or "src/**/*.ts".`,`- Returns matching file paths.`,`- Call this tool in parallel when you know there are multiple patterns to search for.`].join(`
2
- `),async execute(e,t){return await executeGlobOnSandbox(await t.getSandbox(),e)},inputSchema:GLOB_INPUT_SCHEMA,outputSchema:GLOB_OUTPUT_SCHEMA});export{GLOB_INPUT_SCHEMA,GLOB_OUTPUT_SCHEMA,glob as default,glob};
1
+ import{frameworkTool}from"./framework-tool.js";import{defineJsonSchema}from"#tools/schema.js";import{defineTool}from"#tools/definition.js";import{toolLabel}from"#tools/tool-label.js";import{executeGlobOnSandbox}from"#execution/sandbox/glob-tool.js";const GLOB_INPUT_SCHEMA=defineJsonSchema({type:`object`,properties:{limit:{type:`integer`,minimum:1,maximum:1e3,description:`Maximum number of results to return. Defaults to 100.`},path:{type:`string`,description:`The directory to search in. Defaults to /workspace. Must be an absolute path or begin with $HOME/. Omit to use the default.`},pattern:{type:`string`,description:`The glob pattern to match files against (e.g. "**/*.ts", "src/**/*.js").`}},required:[`pattern`],additionalProperties:!1}),GLOB_OUTPUT_SCHEMA=defineJsonSchema({type:`object`,properties:{content:{type:`string`},count:{type:`integer`},path:{type:`string`},truncated:{type:`boolean`}},required:[`content`,`count`,`path`,`truncated`],additionalProperties:!1}),glob=frameworkTool(defineTool({label:{start:e=>toolLabel(`Find`,e.pattern)},description:[`Fast file pattern matching tool that works with any codebase size.`,``,`Usage:`,`- Supports glob patterns like "**/*.js" or "src/**/*.ts".`,`- Returns matching file paths.`,`- Call this tool in parallel when you know there are multiple patterns to search for.`].join(`
2
+ `),async execute(e,t){return await executeGlobOnSandbox(await t.getSandbox(),e)},inputSchema:GLOB_INPUT_SCHEMA,outputSchema:GLOB_OUTPUT_SCHEMA}));export{GLOB_INPUT_SCHEMA,GLOB_OUTPUT_SCHEMA,glob as default,glob};
@@ -1,2 +1,2 @@
1
- import{defineJsonSchema}from"#tools/schema.js";import{defineTool}from"#tools/definition.js";import{toolLabel}from"#tools/tool-label.js";import{executeGrepOnSandbox}from"#execution/sandbox/grep-tool.js";const GREP_INPUT_SCHEMA=defineJsonSchema({type:`object`,properties:{context:{type:`integer`,minimum:0,description:`Number of surrounding context lines to include before and after each match. Defaults to 0.`},glob:{type:`string`,description:`Filter files by glob pattern (e.g. "*.ts", "*.{ts,tsx}").`},ignoreCase:{type:`boolean`,description:`Perform case-insensitive search. Defaults to false.`},limit:{type:`integer`,minimum:1,maximum:1e3,description:`Maximum number of matches to return per file. Defaults to 100.`},literal:{type:`boolean`,description:`Treat the pattern as a literal string instead of a regular expression. Defaults to false.`},path:{type:`string`,description:`The directory or file to search in. Defaults to /workspace. Must be an absolute path or begin with $HOME/. Omit to use the default.`},pattern:{type:`string`,description:`The regex pattern to search for in file contents (e.g. "log.*Error", "function\\s+\\w+").`}},required:[`pattern`],additionalProperties:!1}),GREP_OUTPUT_SCHEMA=defineJsonSchema({type:`object`,properties:{content:{type:`string`},matchCount:{type:`integer`},path:{type:`string`},truncated:{type:`boolean`}},required:[`content`,`matchCount`,`path`,`truncated`],additionalProperties:!1}),grep=defineTool({label:{start:e=>toolLabel(`Search`,e.pattern)},description:[`Fast content search tool that works with any codebase size.`,``,`Usage:`,`- Searches file contents using regular expressions.`,`- Supports full regex syntax (e.g. "log.*Error", "function\\s+\\w+").`,`- Filter files by pattern with the glob parameter (e.g. "*.js", "*.{ts,tsx}").`,`- Returns matching lines with file paths and line numbers.`,`- Call this tool in parallel when you have multiple independent searches.`,`- Any line longer than 2000 characters is truncated.`].join(`
2
- `),async execute(e,t){return await executeGrepOnSandbox(await t.getSandbox(),e)},inputSchema:GREP_INPUT_SCHEMA,outputSchema:GREP_OUTPUT_SCHEMA});export{GREP_INPUT_SCHEMA,GREP_OUTPUT_SCHEMA,grep as default,grep};
1
+ import{frameworkTool}from"./framework-tool.js";import{defineJsonSchema}from"#tools/schema.js";import{defineTool}from"#tools/definition.js";import{toolLabel}from"#tools/tool-label.js";import{executeGrepOnSandbox}from"#execution/sandbox/grep-tool.js";const GREP_INPUT_SCHEMA=defineJsonSchema({type:`object`,properties:{context:{type:`integer`,minimum:0,description:`Number of surrounding context lines to include before and after each match. Defaults to 0.`},glob:{type:`string`,description:`Filter files by glob pattern (e.g. "*.ts", "*.{ts,tsx}").`},ignoreCase:{type:`boolean`,description:`Perform case-insensitive search. Defaults to false.`},limit:{type:`integer`,minimum:1,maximum:1e3,description:`Maximum number of matches to return per file. Defaults to 100.`},literal:{type:`boolean`,description:`Treat the pattern as a literal string instead of a regular expression. Defaults to false.`},path:{type:`string`,description:`The directory or file to search in. Defaults to /workspace. Must be an absolute path or begin with $HOME/. Omit to use the default.`},pattern:{type:`string`,description:`The regex pattern to search for in file contents (e.g. "log.*Error", "function\\s+\\w+").`}},required:[`pattern`],additionalProperties:!1}),GREP_OUTPUT_SCHEMA=defineJsonSchema({type:`object`,properties:{content:{type:`string`},matchCount:{type:`integer`},path:{type:`string`},truncated:{type:`boolean`}},required:[`content`,`matchCount`,`path`,`truncated`],additionalProperties:!1}),grep=frameworkTool(defineTool({label:{start:e=>toolLabel(`Search`,e.pattern)},description:[`Fast content search tool that works with any codebase size.`,``,`Usage:`,`- Searches file contents using regular expressions.`,`- Supports full regex syntax (e.g. "log.*Error", "function\\s+\\w+").`,`- Filter files by pattern with the glob parameter (e.g. "*.js", "*.{ts,tsx}").`,`- Returns matching lines with file paths and line numbers.`,`- Call this tool in parallel when you have multiple independent searches.`,`- Any line longer than 2000 characters is truncated.`].join(`
2
+ `),async execute(e,t){return await executeGrepOnSandbox(await t.getSandbox(),e)},inputSchema:GREP_INPUT_SCHEMA,outputSchema:GREP_OUTPUT_SCHEMA}));export{GREP_INPUT_SCHEMA,GREP_OUTPUT_SCHEMA,grep as default,grep};
@@ -1 +1 @@
1
- import{displayTitle}from"#shared/display-name.js";import{defineTool}from"#tools/definition.js";import{attachToolBehavior}from"#tools/behavior.js";import{SKILL_INPUT_SCHEMA,SKILL_OUTPUT_SCHEMA,executeLoadSkill}from"#execution/tools/load-skill.js";const loadSkill=attachToolBehavior(defineTool({label:{start:e=>{let t=typeof e==`object`&&e?Reflect.get(e,`skill`):void 0;return typeof t==`string`&&t.trim()!==``?`Load skill: ${displayTitle(t.trim())}`:`Load skill`}},description:[`Load the full instructions for one available skill by name or id.`,`Use this tool when the request clearly matches a listed skill description or when the user explicitly asks for that skill.`,`Loading adds the skill instructions to the current turn.`,`Choose the "skill" value from the Available skills block.`].join(` `),execute:executeLoadSkill,inputSchema:SKILL_INPUT_SCHEMA,outputSchema:SKILL_OUTPUT_SCHEMA}),{availability:[],presentation:`load-skill`});export{loadSkill as default,loadSkill};
1
+ import{frameworkTool}from"./framework-tool.js";import{displayTitle}from"#shared/display-name.js";import{defineTool}from"#tools/definition.js";import{attachToolBehavior}from"#tools/behavior.js";import{SKILL_INPUT_SCHEMA,SKILL_OUTPUT_SCHEMA,executeLoadSkill}from"#execution/tools/load-skill.js";const loadSkill=attachToolBehavior(frameworkTool(defineTool({label:{start:e=>{let t=typeof e==`object`&&e?Reflect.get(e,`skill`):void 0;return typeof t==`string`&&t.trim()!==``?`Load skill: ${displayTitle(t.trim())}`:`Load skill`}},description:[`Load the full instructions for one available skill by name or id.`,`Use this tool when the request clearly matches a listed skill description or when the user explicitly asks for that skill.`,`Loading adds the skill instructions to the current turn.`,`Choose the "skill" value from the Available skills block.`].join(` `),execute:executeLoadSkill,inputSchema:SKILL_INPUT_SCHEMA,outputSchema:SKILL_OUTPUT_SCHEMA})),{availability:[],presentation:`load-skill`});export{loadSkill as default,loadSkill};
@@ -1 +1 @@
1
- import{defineTool}from"#public/tools/index.js";function noReply(){return defineTool({availableInSubagents:!1,description:`End your turn without sending a reply. Use this when nothing needs to be said, such as when a scheduled check finds nothing to report or an action you already took is the whole answer.`,endsTurn:!0,execute:()=>`No reply was sent.`,inputSchema:{type:`object`,properties:{reason:{type:`string`,description:`Why no reply is needed. Kept in the session history and traces; never sent.`}},additionalProperties:!1}})}export{noReply};
1
+ import{frameworkTool}from"./framework-tool.js";import{defineTool}from"#public/tools/index.js";function noReply(){return frameworkTool(defineTool({availableInSubagents:!1,description:`End your turn without sending a reply. Use this when nothing needs to be said, such as when a scheduled check finds nothing to report or an action you already took is the whole answer.`,endsTurn:!0,execute:()=>`No reply was sent.`,inputSchema:{type:`object`,properties:{reason:{type:`string`,description:`Why no reply is needed. Kept in the session history and traces; never sent.`}},additionalProperties:!1}}))}export{noReply};
@@ -1,2 +1,2 @@
1
- import{contextStorage}from"#context/container.js";import{SandboxKey}from"#context/keys.js";import{basename}from"node:path";import{defineJsonSchema}from"#tools/schema.js";import{resolveAbsoluteFilePath}from"#execution/sandbox/require-sandbox.js";import{defineTool}from"#tools/definition.js";import{toolLabel}from"#tools/tool-label.js";import{toolOutput,toolOutputPart}from"#tools/model-output.js";import{executeReadFileOnSandbox}from"#execution/sandbox/read-file.js";const READ_FILE_INPUT_SCHEMA=defineJsonSchema({type:`object`,properties:{filePath:{type:`string`,description:`The absolute path to the file to read. A leading $HOME is supported.`},limit:{type:`integer`,minimum:1,description:`Maximum number of lines to return. Defaults to 2000.`},offset:{type:`integer`,minimum:1,description:`1-based line number to start from. Defaults to 1.`}},required:[`filePath`],additionalProperties:!1}),READ_FILE_OUTPUT_SCHEMA=defineJsonSchema({type:`object`,properties:{content:{type:`string`},image:{type:`object`,properties:{height:{type:`integer`,minimum:1},mediaType:{type:`string`},size:{type:`integer`,minimum:0},width:{type:`integer`,minimum:1}},required:[`mediaType`,`size`],additionalProperties:!1},nextOffset:{type:`integer`,minimum:1},path:{type:`string`},totalLines:{type:`integer`,minimum:0},truncated:{type:`boolean`}},required:[`content`,`path`,`totalLines`,`truncated`],additionalProperties:!1}),readFile=defineTool({label:{start:e=>toolLabel(`Read`,e.filePath)},description:[`Read a file from the local filesystem. If the path does not exist, an error is returned.`,``,`Usage:`,`- The filePath parameter should be an absolute path or begin with $HOME/.`,`- By default, this tool returns up to 2000 lines from the start of the file.`,`- The offset parameter is the line number to start from (1-indexed).`,`- To read later sections, call this tool again with a larger offset.`,'- Contents are returned with each line prefixed by its line number as `<line>: <content>`. For example, if a file has contents "foo\\n", you will receive "1: foo\\n".',`- Any line longer than 2000 characters is truncated.`,"- PNG, JPEG, GIF, and WebP files up to 3 MiB are shown to you as images, including files named in `Attached file <path>` references.",`- Call this tool in parallel when you know there are multiple files you want to read.`,`- Avoid tiny repeated slices (30 line chunks). If you need more context, read a larger window.`].join(`
2
- `),async execute(e,t){return await executeReadFileOnSandbox(await t.getSandbox(),e)},inputSchema:READ_FILE_INPUT_SCHEMA,outputSchema:READ_FILE_OUTPUT_SCHEMA,async toModelOutput(e){if(e.image===void 0)return toolOutput.json(e);let t=await contextStorage.getStore()?.get(SandboxKey)?.get(),n=t==null?null:await t.readBinaryFile({path:await resolveAbsoluteFilePath(t,e.path)});return n===null?toolOutput.text(`${e.content} The image could not be loaded.`):n.byteLength===e.image.size?toolOutput.content([toolOutputPart.text(e.content),toolOutputPart.file(Buffer.from(n).toString(`base64`),{filename:basename(e.path),mediaType:e.image.mediaType})]):toolOutput.text(`${e.content} The image changed after it was read; read it again.`)}});export{READ_FILE_INPUT_SCHEMA,READ_FILE_OUTPUT_SCHEMA,readFile as default,readFile};
1
+ import{frameworkTool}from"./framework-tool.js";import{contextStorage}from"#context/container.js";import{SandboxKey}from"#context/keys.js";import{basename}from"node:path";import{defineJsonSchema}from"#tools/schema.js";import{resolveAbsoluteFilePath}from"#execution/sandbox/require-sandbox.js";import{defineTool}from"#tools/definition.js";import{toolLabel}from"#tools/tool-label.js";import{toolOutput,toolOutputPart}from"#tools/model-output.js";import{executeReadFileOnSandbox}from"#execution/sandbox/read-file.js";const READ_FILE_INPUT_SCHEMA=defineJsonSchema({type:`object`,properties:{filePath:{type:`string`,description:`The absolute path to the file to read. A leading $HOME is supported.`},limit:{type:`integer`,minimum:1,description:`Maximum number of lines to return. Defaults to 2000.`},offset:{type:`integer`,minimum:1,description:`1-based line number to start from. Defaults to 1.`}},required:[`filePath`],additionalProperties:!1}),READ_FILE_OUTPUT_SCHEMA=defineJsonSchema({type:`object`,properties:{content:{type:`string`},image:{type:`object`,properties:{height:{type:`integer`,minimum:1},mediaType:{type:`string`},size:{type:`integer`,minimum:0},width:{type:`integer`,minimum:1}},required:[`mediaType`,`size`],additionalProperties:!1},nextOffset:{type:`integer`,minimum:1},path:{type:`string`},totalLines:{type:`integer`,minimum:0},truncated:{type:`boolean`}},required:[`content`,`path`,`totalLines`,`truncated`],additionalProperties:!1}),readFile=frameworkTool(defineTool({label:{start:e=>toolLabel(`Read`,e.filePath)},description:[`Read a file from the local filesystem. If the path does not exist, an error is returned.`,``,`Usage:`,`- The filePath parameter should be an absolute path or begin with $HOME/.`,`- By default, this tool returns up to 2000 lines from the start of the file.`,`- The offset parameter is the line number to start from (1-indexed).`,`- To read later sections, call this tool again with a larger offset.`,'- Contents are returned with each line prefixed by its line number as `<line>: <content>`. For example, if a file has contents "foo\\n", you will receive "1: foo\\n".',`- Any line longer than 2000 characters is truncated.`,"- PNG, JPEG, GIF, and WebP files up to 3 MiB are shown to you as images, including files named in `Attached file <path>` references.",`- Call this tool in parallel when you know there are multiple files you want to read.`,`- Avoid tiny repeated slices (30 line chunks). If you need more context, read a larger window.`].join(`
2
+ `),async execute(e,t){return await executeReadFileOnSandbox(await t.getSandbox(),e)},inputSchema:READ_FILE_INPUT_SCHEMA,outputSchema:READ_FILE_OUTPUT_SCHEMA,async toModelOutput(e){if(e.image===void 0)return toolOutput.json(e);let t=await contextStorage.getStore()?.get(SandboxKey)?.get(),n=t==null?null:await t.readBinaryFile({path:await resolveAbsoluteFilePath(t,e.path)});return n===null?toolOutput.text(`${e.content} The image could not be loaded.`):n.byteLength===e.image.size?toolOutput.content([toolOutputPart.text(e.content),toolOutputPart.file(Buffer.from(n).toString(`base64`),{filename:basename(e.path),mediaType:e.image.mediaType})]):toolOutput.text(`${e.content} The image changed after it was read; read it again.`)}}));export{READ_FILE_INPUT_SCHEMA,READ_FILE_OUTPUT_SCHEMA,readFile as default,readFile};
@@ -1 +1 @@
1
- import{sleep}from"#compiled/@workflow/core/index.js";async function executeSleepTool(e,t){"use workflow";let n=new Promise(e=>t.abortSignal.addEventListener(`abort`,()=>e(`interrupted`),{once:!0})),r=sleep(Math.ceil(e.seconds*1e3)).then(()=>`elapsed`);return await Promise.race([r,n])===`elapsed`?{waitedSeconds:e.seconds}:{interrupted:!0}}executeSleepTool.workflowId=`workflow//eve@0.71.3//executeSleepTool`;export{executeSleepTool};
1
+ import{sleep}from"#compiled/@workflow/core/index.js";async function executeSleepTool(e,t){"use workflow";let n=new Promise(e=>t.abortSignal.addEventListener(`abort`,()=>e(`interrupted`),{once:!0})),r=sleep(Math.ceil(e.seconds*1e3)).then(()=>`elapsed`);return await Promise.race([r,n])===`elapsed`?{waitedSeconds:e.seconds}:{interrupted:!0}}executeSleepTool.workflowId=`workflow//eve@0.72.1//executeSleepTool`;export{executeSleepTool};
@@ -1 +1 @@
1
- import{defineJsonSchema}from"#tools/schema.js";import{defineWorkflowTool}from"#public/tools/index.js";import{INTERRUPTED_OUTPUT_SCHEMA,toInterruptibleModelOutput}from"#tools/provided/interrupted.js";import{executeSleepTool}from"#tools/provided/sleep-workflow.js";const SLEEP_INPUT_SCHEMA=defineJsonSchema({type:`object`,properties:{seconds:{type:`number`,exclusiveMinimum:0,maximum:Math.floor((2**53-1)/1e3),description:`How long to wait, in seconds.`}},required:[`seconds`],additionalProperties:!1}),SLEEP_OUTPUT_SCHEMA=defineJsonSchema({oneOf:[{type:`object`,properties:{waitedSeconds:{type:`number`,exclusiveMinimum:0}},required:[`waitedSeconds`],additionalProperties:!1},INTERRUPTED_OUTPUT_SCHEMA]});function sleep(){return defineWorkflowTool({description:`Wait for a specified amount of time before continuing. Use this when a process or condition needs time to change before it is useful to check its progress or status again.`,execute:executeSleepTool,inputSchema:SLEEP_INPUT_SCHEMA,outputSchema:SLEEP_OUTPUT_SCHEMA,toModelOutput:toInterruptibleModelOutput})}export{SLEEP_INPUT_SCHEMA,sleep};
1
+ import{frameworkTool}from"./framework-tool.js";import{defineJsonSchema}from"#tools/schema.js";import{defineWorkflowTool}from"#public/tools/index.js";import{INTERRUPTED_OUTPUT_SCHEMA,toInterruptibleModelOutput}from"#tools/provided/interrupted.js";import{executeSleepTool}from"#tools/provided/sleep-workflow.js";const SLEEP_INPUT_SCHEMA=defineJsonSchema({type:`object`,properties:{seconds:{type:`number`,exclusiveMinimum:0,maximum:Math.floor((2**53-1)/1e3),description:`How long to wait, in seconds.`}},required:[`seconds`],additionalProperties:!1}),SLEEP_OUTPUT_SCHEMA=defineJsonSchema({oneOf:[{type:`object`,properties:{waitedSeconds:{type:`number`,exclusiveMinimum:0}},required:[`waitedSeconds`],additionalProperties:!1},INTERRUPTED_OUTPUT_SCHEMA]});function sleep(){return frameworkTool(defineWorkflowTool({description:`Wait for a specified amount of time before continuing. Use this when a process or condition needs time to change before it is useful to check its progress or status again.`,execute:executeSleepTool,inputSchema:SLEEP_INPUT_SCHEMA,outputSchema:SLEEP_OUTPUT_SCHEMA,toModelOutput:toInterruptibleModelOutput}))}export{SLEEP_INPUT_SCHEMA,sleep};
@@ -1 +1 @@
1
- import{TASK_CANCEL_TOOL_NAME}from"#protocol/task-tools.js";import{defineJsonSchema}from"#tools/schema.js";import{TASK_CANCEL_DESCRIPTION,TASK_CANCEL_TASK_ID_DESCRIPTION}from"#execution/tasks/render.js";const taskCancelTool={description:TASK_CANCEL_DESCRIPTION,frameworkAction:`task-cancel`,inputSchema:defineJsonSchema({type:`object`,properties:{taskId:{type:`string`,minLength:1,description:TASK_CANCEL_TASK_ID_DESCRIPTION}},required:[`taskId`],additionalProperties:!1}),name:TASK_CANCEL_TOOL_NAME};export{taskCancelTool};
1
+ import{TASK_CANCEL_TOOL_NAME}from"#protocol/task-tools.js";import{defineJsonSchema}from"#tools/schema.js";import{TASK_CANCEL_DESCRIPTION,TASK_CANCEL_TASK_ID_DESCRIPTION}from"#execution/tasks/render.js";const taskCancelTool={frameworkTool:!0,description:TASK_CANCEL_DESCRIPTION,frameworkAction:`task-cancel`,inputSchema:defineJsonSchema({type:`object`,properties:{taskId:{type:`string`,minLength:1,description:TASK_CANCEL_TASK_ID_DESCRIPTION}},required:[`taskId`],additionalProperties:!1}),name:TASK_CANCEL_TOOL_NAME};export{taskCancelTool};
@@ -1 +1 @@
1
- import{TASK_WAIT_TOOL_NAME}from"#protocol/task-tools.js";import{defineJsonSchema}from"#tools/schema.js";import{TASK_WAIT_DESCRIPTION,TASK_WAIT_TIMEOUT_DESCRIPTION}from"#execution/tasks/render.js";const taskWaitTool={description:TASK_WAIT_DESCRIPTION,frameworkAction:`task-wait`,inputSchema:defineJsonSchema({type:`object`,properties:{timeoutSeconds:{type:`integer`,minimum:1,description:TASK_WAIT_TIMEOUT_DESCRIPTION}},additionalProperties:!1}),name:TASK_WAIT_TOOL_NAME};export{taskWaitTool};
1
+ import{TASK_WAIT_TOOL_NAME}from"#protocol/task-tools.js";import{defineJsonSchema}from"#tools/schema.js";import{TASK_WAIT_DESCRIPTION,TASK_WAIT_TIMEOUT_DESCRIPTION}from"#execution/tasks/render.js";const taskWaitTool={frameworkTool:!0,description:TASK_WAIT_DESCRIPTION,frameworkAction:`task-wait`,inputSchema:defineJsonSchema({type:`object`,properties:{timeoutSeconds:{type:`integer`,minimum:1,description:TASK_WAIT_TIMEOUT_DESCRIPTION}},additionalProperties:!1}),name:TASK_WAIT_TOOL_NAME};export{taskWaitTool};
@@ -1,2 +1,2 @@
1
- import{defineJsonSchema}from"#tools/schema.js";import{defineTool}from"#tools/definition.js";import{toolLabel}from"#tools/tool-label.js";import{executeWebFetchTool}from"#execution/web-fetch/execute.js";const WEB_FETCH_INPUT_SCHEMA=defineJsonSchema({type:`object`,properties:{format:{type:`string`,enum:[`markdown`,`text`,`html`],description:`The format to return the content in (text, markdown, or html). HTML responses are automatically converted to the requested format. Defaults to "markdown".`},timeout:{type:`number`,description:`Optional timeout in seconds. Defaults to 30, max 120.`},url:{type:`string`,description:`The fully-formed URL to fetch content from. Must start with https://.`}},required:[`url`],additionalProperties:!1}),WEB_FETCH_OUTPUT_SCHEMA=defineJsonSchema({type:`object`,properties:{content:{type:`string`},contentType:{type:`string`},truncated:{type:`boolean`},url:{type:`string`}},required:[`content`,`contentType`,`truncated`,`url`],additionalProperties:!1}),webFetch=defineTool({label:{start:e=>toolLabel(`Fetch`,e.url)},description:[`Fetch a webpage and return its content in the requested format. Use this to retrieve and analyze content from URLs.`,``,`Usage notes:`,`- The URL must be a fully-formed valid URL starting with https://`,`- HTML responses are automatically converted to markdown or plain text based on the requested format`,`- Format options: "markdown" (default), "text", or "html"`,`- Default timeout is 30 seconds (max 120 seconds)`,`- Maximum response size is 5 MB; content is further capped at the shared tool-output budget (50 KB / 2000 lines)`,`- This tool is read-only and does not modify any files`].join(`
2
- `),async execute(e,t){return await executeWebFetchTool(e,{abortSignal:t.abortSignal})},inputSchema:WEB_FETCH_INPUT_SCHEMA,outputSchema:WEB_FETCH_OUTPUT_SCHEMA});export{WEB_FETCH_INPUT_SCHEMA,WEB_FETCH_OUTPUT_SCHEMA,webFetch as default,webFetch};
1
+ import{frameworkTool}from"./framework-tool.js";import{defineJsonSchema}from"#tools/schema.js";import{defineTool}from"#tools/definition.js";import{toolLabel}from"#tools/tool-label.js";import{executeWebFetchTool}from"#execution/web-fetch/execute.js";const WEB_FETCH_INPUT_SCHEMA=defineJsonSchema({type:`object`,properties:{format:{type:`string`,enum:[`markdown`,`text`,`html`],description:`The format to return the content in (text, markdown, or html). HTML responses are automatically converted to the requested format. Defaults to "markdown".`},timeout:{type:`number`,description:`Optional timeout in seconds. Defaults to 30, max 120.`},url:{type:`string`,description:`The fully-formed URL to fetch content from. Must start with https://.`}},required:[`url`],additionalProperties:!1}),WEB_FETCH_OUTPUT_SCHEMA=defineJsonSchema({type:`object`,properties:{content:{type:`string`},contentType:{type:`string`},truncated:{type:`boolean`},url:{type:`string`}},required:[`content`,`contentType`,`truncated`,`url`],additionalProperties:!1}),webFetch=frameworkTool(defineTool({label:{start:e=>toolLabel(`Fetch`,e.url)},description:[`Fetch a webpage and return its content in the requested format. Use this to retrieve and analyze content from URLs.`,``,`Usage notes:`,`- The URL must be a fully-formed valid URL starting with https://`,`- HTML responses are automatically converted to markdown or plain text based on the requested format`,`- Format options: "markdown" (default), "text", or "html"`,`- Default timeout is 30 seconds (max 120 seconds)`,`- Maximum response size is 5 MB; content is further capped at the shared tool-output budget (50 KB / 2000 lines)`,`- This tool is read-only and does not modify any files`].join(`
2
+ `),async execute(e,t){return await executeWebFetchTool(e,{abortSignal:t.abortSignal})},inputSchema:WEB_FETCH_INPUT_SCHEMA,outputSchema:WEB_FETCH_OUTPUT_SCHEMA}));export{WEB_FETCH_INPUT_SCHEMA,WEB_FETCH_OUTPUT_SCHEMA,webFetch as default,webFetch};
@@ -1 +1 @@
1
- const WEB_SEARCH_TOOL_KIND=`eve:web-search-tool`;function webSearch(e){return{kind:WEB_SEARCH_TOOL_KIND,provider:e.provider}}const defaultWebSearch=webSearch({provider:`exa`});function isWebSearchToolDefinition(e){return typeof e==`object`&&!!e&&e.kind===WEB_SEARCH_TOOL_KIND}export{defaultWebSearch as default,defaultWebSearch,isWebSearchToolDefinition,webSearch};
1
+ import{frameworkTool}from"./framework-tool.js";const WEB_SEARCH_TOOL_KIND=`eve:web-search-tool`;function webSearch(e){return frameworkTool({kind:WEB_SEARCH_TOOL_KIND,provider:e.provider})}const defaultWebSearch=webSearch({provider:`exa`});function isWebSearchToolDefinition(e){return typeof e==`object`&&!!e&&e.kind===WEB_SEARCH_TOOL_KIND}export{defaultWebSearch as default,defaultWebSearch,isWebSearchToolDefinition,webSearch};
@@ -1 +1 @@
1
- import{defineJsonSchema}from"#tools/schema.js";import{defineWorkflowTool}from"#tools/workflow-definition.js";import{DEFAULT_WORKFLOW_PROGRAM_MAX_SUBAGENTS,parseWorkflowProgramOptions}from"#execution/dynamic-workflow/schema.js";import{attachWorkflowProgramOptions}from"#tools/workflow-program-input.js";import{runWorkflowProgramTask}from"#execution/dynamic-workflow/tool.js";const workflowProgramAgentContract=`Call ctx.agent(name, { message: string, outputSchema?: object }). Each call starts a new agent that does not see this conversation, so put everything it needs in message. It resolves directly to the agent's reply; when outputSchema is provided, the reply matches that schema. It does not return an agent metadata wrapper. The owning agent resolves the target and applies its existing availability and authorization checks.`,workflowInputSchema=defineJsonSchema({type:`object`,properties:{js:{type:`string`,description:`JavaScript statements executed inside an async function. Supply only the body, without a surrounding function declaration or arrow function. ${workflowProgramAgentContract} Return one JSON-serializable value.`}},required:[`js`],additionalProperties:!1});function workflow(e={}){let t=normalizeWorkflowToolOptions(e),n=[`Run an async JavaScript function body that invokes agents and returns one JSON-serializable value.`,workflowProgramAgentContract,`Supply the body directly, for example: return await ctx.agent("researcher", { message: "Describe the task" });`,`The program may invoke at most ${String(t.maxSubagents)} agents.`].join(` `);return attachWorkflowProgramOptions(defineWorkflowTool({description:n,inputSchema:workflowInputSchema,task:runWorkflowProgramTask}),t)}function normalizeWorkflowToolOptions(e){if(typeof e!=`object`||!e)throw TypeError(`workflow options must be an object.`);return parseWorkflowProgramOptions({maxSubagents:e.maxSubagents??DEFAULT_WORKFLOW_PROGRAM_MAX_SUBAGENTS})}export{workflow};
1
+ import{frameworkTool}from"./framework-tool.js";import{defineJsonSchema}from"#tools/schema.js";import{defineWorkflowTool}from"#tools/workflow-definition.js";import{DEFAULT_WORKFLOW_PROGRAM_MAX_SUBAGENTS,parseWorkflowProgramOptions}from"#execution/dynamic-workflow/schema.js";import{attachWorkflowProgramOptions}from"#tools/workflow-program-input.js";import{runWorkflowProgramTask}from"#execution/dynamic-workflow/tool.js";const workflowProgramAgentContract=`Call ctx.agent(name, { message: string, outputSchema?: object }). Each call starts a new agent that does not see this conversation, so put everything it needs in message. It resolves directly to the agent's reply; when outputSchema is provided, the reply matches that schema. It does not return an agent metadata wrapper. The owning agent resolves the target and applies its existing availability and authorization checks.`,workflowInputSchema=defineJsonSchema({type:`object`,properties:{js:{type:`string`,description:`JavaScript statements executed inside an async function. Supply only the body, without a surrounding function declaration or arrow function. ${workflowProgramAgentContract} Return one JSON-serializable value.`}},required:[`js`],additionalProperties:!1});function workflow(e={}){let t=normalizeWorkflowToolOptions(e),n=[`Run an async JavaScript function body that invokes agents and returns one JSON-serializable value.`,workflowProgramAgentContract,`Supply the body directly, for example: return await ctx.agent("researcher", { message: "Describe the task" });`,`The program may invoke at most ${String(t.maxSubagents)} agents.`].join(` `);return attachWorkflowProgramOptions(frameworkTool(defineWorkflowTool({description:n,inputSchema:workflowInputSchema,task:runWorkflowProgramTask})),t)}function normalizeWorkflowToolOptions(e){if(typeof e!=`object`||!e)throw TypeError(`workflow options must be an object.`);return parseWorkflowProgramOptions({maxSubagents:e.maxSubagents??DEFAULT_WORKFLOW_PROGRAM_MAX_SUBAGENTS})}export{workflow};
@@ -1,2 +1,2 @@
1
- import{defineJsonSchema}from"#tools/schema.js";import{defineTool}from"#tools/definition.js";import{toolLabel}from"#tools/tool-label.js";import{executeWriteFileOnSandbox}from"#execution/sandbox/write-file.js";const WRITE_FILE_INPUT_SCHEMA=defineJsonSchema({type:`object`,properties:{content:{type:`string`,description:`Complete replacement file contents.`},filePath:{type:`string`,description:`The absolute path to the file to write. A leading $HOME is supported.`}},required:[`content`,`filePath`],additionalProperties:!1}),WRITE_FILE_OUTPUT_SCHEMA=defineJsonSchema({type:`object`,properties:{existed:{type:`boolean`},path:{type:`string`}},required:[`existed`,`path`],additionalProperties:!1}),writeFile=defineTool({label:{start:e=>toolLabel(`Write`,e.filePath)},description:[`Writes a file to the local filesystem.`,``,`Usage:`,`- This tool will overwrite the existing file if there is one at the provided path.`,`- If this is an existing file, you MUST use the read_file tool first to read the file's contents. This tool will fail if you did not read the file first.`,`- ALWAYS prefer editing existing files in the codebase. NEVER write new files unless explicitly required.`,`- NEVER proactively create documentation files (*.md) or README files. Only create documentation files if explicitly requested by the User.`,`- Only use emojis if the user explicitly requests it. Avoid writing emojis to files unless asked.`].join(`
2
- `),async execute(e,t){return await executeWriteFileOnSandbox(await t.getSandbox(),e)},inputSchema:WRITE_FILE_INPUT_SCHEMA,outputSchema:WRITE_FILE_OUTPUT_SCHEMA});export{WRITE_FILE_INPUT_SCHEMA,WRITE_FILE_OUTPUT_SCHEMA,writeFile as default,writeFile};
1
+ import{frameworkTool}from"./framework-tool.js";import{defineJsonSchema}from"#tools/schema.js";import{defineTool}from"#tools/definition.js";import{toolLabel}from"#tools/tool-label.js";import{executeWriteFileOnSandbox}from"#execution/sandbox/write-file.js";const WRITE_FILE_INPUT_SCHEMA=defineJsonSchema({type:`object`,properties:{content:{type:`string`,description:`Complete replacement file contents.`},filePath:{type:`string`,description:`The absolute path to the file to write. A leading $HOME is supported.`}},required:[`content`,`filePath`],additionalProperties:!1}),WRITE_FILE_OUTPUT_SCHEMA=defineJsonSchema({type:`object`,properties:{existed:{type:`boolean`},path:{type:`string`}},required:[`existed`,`path`],additionalProperties:!1}),writeFile=frameworkTool(defineTool({label:{start:e=>toolLabel(`Write`,e.filePath)},description:[`Writes a file to the local filesystem.`,``,`Usage:`,`- This tool will overwrite the existing file if there is one at the provided path.`,`- If this is an existing file, you MUST use the read_file tool first to read the file's contents. This tool will fail if you did not read the file first.`,`- ALWAYS prefer editing existing files in the codebase. NEVER write new files unless explicitly required.`,`- NEVER proactively create documentation files (*.md) or README files. Only create documentation files if explicitly requested by the User.`,`- Only use emojis if the user explicitly requests it. Avoid writing emojis to files unless asked.`].join(`
2
+ `),async execute(e,t){return await executeWriteFileOnSandbox(await t.getSandbox(),e)},inputSchema:WRITE_FILE_INPUT_SCHEMA,outputSchema:WRITE_FILE_OUTPUT_SCHEMA}));export{WRITE_FILE_INPUT_SCHEMA,WRITE_FILE_OUTPUT_SCHEMA,writeFile as default,writeFile};
@@ -1,10 +1,10 @@
1
1
  import { type Tracer } from "#compiled/@opentelemetry/api/index.js";
2
2
  import type { InstrumentationProviderDefinition } from "#instrumentation/lifecycle.js";
3
- import type { AgentActionContext } from "#tracing/agent-action-instrumentation.js";
3
+ import type { AgentToolContext } from "#tracing/agent-tool-instrumentation.js";
4
4
  import type { AgentSpanIdGenerator } from "#tracing/agent-span-id-generator.js";
5
5
  /** Builds durable approval wait spans under their originating runtime action. */
6
6
  export declare function createAgentApprovalInstrumentation(input: {
7
- readonly actionContextFor: (sessionId: string, turnId: string, callId: string) => Promise<AgentActionContext | undefined>;
7
+ readonly actionContextFor: (sessionId: string, turnId: string, callId: string) => Promise<AgentToolContext | undefined>;
8
8
  readonly frameworkVersion: string;
9
9
  readonly idGenerator: AgentSpanIdGenerator;
10
10
  readonly tracer: Tracer;
@@ -1 +1 @@
1
- import{normalizeChannelAudience}from"#shared/channel-audience.js";import{AGENT_SPAN_NAMES}from"#tracing/agent-span-contract.js";import{ROOT_CONTEXT,trace}from"#compiled/@opentelemetry/api/index.js";import{agentSpanNamingAttributes}from"#tracing/agent-span-naming.js";import{contentAttribute}from"#tracing/agent-otel-content.js";import{recordAgentSpanError}from"#tracing/agent-span-error.js";import{agentTraceIdentityAttributes,traceSessionIdOf}from"#tracing/agent-otel-attributes.js";import{withChannelAudience}from"#tracing/channel-audience-context.js";import{decodeTraceSessionId}from"#tracing/agent-trace-context-codec.js";function createAgentApprovalInstrumentation(e){return{"input.requested":async(t,n)=>{if(t.kind!==`tool-approval`||readState(n.state.get())!==void 0)return;let r=await e.actionContextFor(t.scope.sessionId,t.scope.turnId,t.action.callId);if(r===void 0)return;let i={actionCallId:t.action.callId,actionName:t.action.name,attemptIndex:t.scope.attemptIndex,channelAudience:normalizeChannelAudience(t.scope.channelAudience),parent:{spanId:r.spanContext.spanId,traceFlags:r.spanContext.traceFlags,traceId:r.spanContext.traceId},requestId:t.requestId,rootSessionId:t.scope.rootSessionId??t.scope.sessionId,traceSessionId:traceSessionIdOf(t.scope),sessionId:t.scope.sessionId,startTimeMs:Date.now(),stepIndex:t.scope.stepIndex,turnId:t.scope.turnId},a=contentAttribute(t.request);a!==void 0&&(i.requestAttribute=a),n.state.set(i)},"input.resolved":(t,n)=>{let r=readState(n.state.get());if(r===void 0)return;let i=e.idGenerator.withSpanId(e.idGenerator.deriveSpanId(`approval:${t.idempotencyKey}`),()=>e.tracer.startSpan(AGENT_SPAN_NAMES.approval,{attributes:{"agent.action.call_id":r.actionCallId,"agent.action.name":r.actionName,"agent.approval.kind":`tool-approval`,"agent.approval.outcome":t.outcome,"agent.approval.request_id":r.requestId,"agent.framework.name":`eve`,"agent.framework.version":e.frameworkVersion,"agent.step.attempt":r.attemptIndex,"agent.step.index":r.stepIndex,"agent.turn.id":r.turnId,...agentSpanNamingAttributes(`agent.approval`),...agentTraceIdentityAttributes({rootSessionId:r.rootSessionId,traceSessionId:r.traceSessionId,sessionId:r.sessionId})},startTime:r.startTimeMs},withChannelAudience(trace.setSpan(ROOT_CONTEXT,trace.wrapSpanContext({...r.parent,isRemote:!1})),r.channelAudience)));if(r.requestAttribute!==void 0&&i.setAttribute(`agent.approval.request`,r.requestAttribute),t.response!==void 0){let e=contentAttribute(t.response);e!==void 0&&i.setAttribute(`agent.approval.response`,e)}t.outcome===`failed`&&recordAgentSpanError(i,t.error),i.end()}}}function readState(e){if(typeof e!=`object`||!e||Array.isArray(e))return;let t=e,n=t.parent;if(typeof n!=`object`||!n||Array.isArray(n))return;let r=n;if(typeof t.actionCallId!=`string`||typeof t.actionName!=`string`||typeof t.attemptIndex!=`number`||typeof r.spanId!=`string`||typeof r.traceFlags!=`number`||typeof r.traceId!=`string`||typeof t.requestId!=`string`||typeof t.rootSessionId!=`string`||typeof t.sessionId!=`string`||typeof t.startTimeMs!=`number`||typeof t.stepIndex!=`number`||typeof t.turnId!=`string`)return;let i=t.requestAttribute;if(i===void 0||typeof i==`string`)return{actionCallId:t.actionCallId,actionName:t.actionName,attemptIndex:t.attemptIndex,channelAudience:normalizeChannelAudience(t.channelAudience),parent:{isRemote:!1,spanId:r.spanId,traceFlags:r.traceFlags,traceId:r.traceId},requestAttribute:i,requestId:t.requestId,rootSessionId:t.rootSessionId,traceSessionId:decodeTraceSessionId(t),sessionId:t.sessionId,startTimeMs:t.startTimeMs,stepIndex:t.stepIndex,turnId:t.turnId}}export{createAgentApprovalInstrumentation};
1
+ import{normalizeChannelAudience}from"#shared/channel-audience.js";import{AGENT_SPAN_NAMES}from"#tracing/agent-span-contract.js";import{ROOT_CONTEXT,trace}from"#compiled/@opentelemetry/api/index.js";import{agentSpanNamingAttributes}from"#tracing/agent-span-naming.js";import{contentAttribute}from"#tracing/agent-otel-content.js";import{recordAgentSpanError}from"#tracing/agent-span-error.js";import{agentTraceIdentityAttributes,traceSessionIdOf}from"#tracing/agent-otel-attributes.js";import{decodeTraceSessionId}from"#tracing/agent-trace-context-codec.js";import{withChannelAudience}from"#tracing/channel-audience-context.js";function createAgentApprovalInstrumentation(e){return{"input.requested":async(t,n)=>{if(t.kind!==`tool-approval`||readState(n.state.get())!==void 0)return;let r=await e.actionContextFor(t.scope.sessionId,t.scope.turnId,t.action.callId);if(r===void 0)return;let i={actionCallId:t.action.callId,actionName:t.action.name,attemptIndex:t.scope.attemptIndex,channelAudience:normalizeChannelAudience(t.scope.channelAudience),parent:{spanId:r.spanContext.spanId,traceFlags:r.spanContext.traceFlags,traceId:r.spanContext.traceId},requestId:t.requestId,rootSessionId:t.scope.rootSessionId??t.scope.sessionId,traceSessionId:traceSessionIdOf(t.scope),sessionId:t.scope.sessionId,startTimeMs:Date.now(),stepIndex:t.scope.stepIndex,turnId:t.scope.turnId},a=contentAttribute(t.request);a!==void 0&&(i.requestAttribute=a),n.state.set(i)},"input.resolved":(t,n)=>{let r=readState(n.state.get());if(r===void 0)return;let i=e.idGenerator.withSpanId(e.idGenerator.deriveSpanId(`approval:${t.idempotencyKey}`),()=>e.tracer.startSpan(AGENT_SPAN_NAMES.approval,{attributes:{"gen_ai.tool.call.id":r.actionCallId,"agent.action.name":r.actionName,"agent.approval.kind":`tool-approval`,"agent.approval.outcome":t.outcome,"agent.approval.request_id":r.requestId,"agent.framework.name":`eve`,"agent.framework.version":e.frameworkVersion,"agent.step.attempt":r.attemptIndex,"agent.step.index":r.stepIndex,"agent.turn.id":r.turnId,...agentSpanNamingAttributes(`agent.approval`),...agentTraceIdentityAttributes({rootSessionId:r.rootSessionId,traceSessionId:r.traceSessionId,sessionId:r.sessionId})},startTime:r.startTimeMs},withChannelAudience(trace.setSpan(ROOT_CONTEXT,trace.wrapSpanContext({...r.parent,isRemote:!1})),r.channelAudience)));if(r.requestAttribute!==void 0&&i.setAttribute(`agent.approval.request`,r.requestAttribute),t.response!==void 0){let e=contentAttribute(t.response);e!==void 0&&i.setAttribute(`agent.approval.response`,e)}t.outcome===`failed`&&recordAgentSpanError(i,t.error),i.end()}}}function readState(e){if(typeof e!=`object`||!e||Array.isArray(e))return;let t=e,n=t.parent;if(typeof n!=`object`||!n||Array.isArray(n))return;let r=n;if(typeof t.actionCallId!=`string`||typeof t.actionName!=`string`||typeof t.attemptIndex!=`number`||typeof r.spanId!=`string`||typeof r.traceFlags!=`number`||typeof r.traceId!=`string`||typeof t.requestId!=`string`||typeof t.rootSessionId!=`string`||typeof t.sessionId!=`string`||typeof t.startTimeMs!=`number`||typeof t.stepIndex!=`number`||typeof t.turnId!=`string`)return;let i=t.requestAttribute;if(i===void 0||typeof i==`string`)return{actionCallId:t.actionCallId,actionName:t.actionName,attemptIndex:t.attemptIndex,channelAudience:normalizeChannelAudience(t.channelAudience),parent:{isRemote:!1,spanId:r.spanId,traceFlags:r.traceFlags,traceId:r.traceId},requestAttribute:i,requestId:t.requestId,rootSessionId:t.rootSessionId,traceSessionId:decodeTraceSessionId(t),sessionId:t.sessionId,startTimeMs:t.startTimeMs,stepIndex:t.stepIndex,turnId:t.turnId}}export{createAgentApprovalInstrumentation};
@@ -1,2 +1,2 @@
1
- import{normalizeChannelAudience}from"#shared/channel-audience.js";import{applyLiveDeliveryAudienceCeiling,resolveForwardedTraceSeed}from"#shared/forwarded-trace-policy.js";import{contextStorage}from"#context/container.js";import{SessionTraceSeedKey}from"#context/keys.js";import{AGENT_SPAN_NAMES,agentInvocationSpanName,modelSpanName}from"#tracing/agent-span-contract.js";import{resolveInstrumentationEnvironment}from"#internal/application/dev-environment.js";import{withOperationConversation}from"#tracing/conversation-context.js";import{isSampledTrace,resolveTracePolicyDecision}from"#tracing/sampled-trace.js";import{ROOT_CONTEXT,SpanKind,context,trace}from"#compiled/@opentelemetry/api/index.js";import{markAgentTraceContext}from"#tracing/agent-trace-context.js";import{attemptIdempotencyKey}from"#instrumentation/lifecycle.js";import{withoutInstrumentationContent}from"#instrumentation/content.js";import{withErrorContent}from"#tracing/error-content-context.js";import{readInstrumentationDecision}from"#shared/instrumentation-decision.js";import{agentSpanNamingAttributes}from"#tracing/agent-span-naming.js";import{contentAttribute,genAiInputMessagesAttribute,genAiOutputMessagesAttribute,genAiSystemInstructionsAttribute,textContentAttribute,toolResultsContentAttribute}from"#tracing/agent-otel-content.js";import{recordAgentSpanError}from"#tracing/agent-span-error.js";import{withAgentToolContentPolicy}from"#tracing/agent-tool-span-context.js";import{agentTraceIdentityAttributes,traceSessionIdOf}from"#tracing/agent-otel-attributes.js";import{readGatewayCost,setAgentInvocationUsage,setAgentUsage,setGenAiUsage}from"#tracing/agent-otel-usage.js";import{withChannelAudience}from"#tracing/channel-audience-context.js";import{suppressTracing}from"#tracing/suppress-tracing.js";import{instrumentationEventForTraceDecision}from"#instrumentation/content-policy.js";import{createAgentActionInstrumentation}from"#tracing/agent-action-instrumentation.js";import{createAgentApprovalInstrumentation}from"#tracing/agent-approval-instrumentation.js";import{createAgentChannelDeliveryInstrumentation}from"#tracing/agent-channel-delivery-instrumentation.js";import{createAgentToolInstrumentation}from"#tracing/agent-tool-instrumentation.js";import*as runtimeAttributes from"#tracing/agent-otel-runtime-context.js";import{createAgentMemoryInstrumentation}from"#tracing/agent-memory-instrumentation.js";import{createAgentOtelSessionContext}from"#tracing/agent-otel-session-context.js";function createAgentOtelInstrumentation(e){let t=e.environment??resolveInstrumentationEnvironment(),n=e.recordInputs??!1,r=e.recordOutputs??!1,i=new WeakMap,a=new Map,o=new WeakMap,s=new WeakMap,c=createAgentActionInstrumentation({frameworkVersion:e.frameworkVersion,idGenerator:e.idGenerator,recordInputs:n,recordOutputs:r,resolveTraceContext:async t=>(await e.stateStore.getTurn(t.scope.sessionId,t.scope.turnId))?.context,stateStore:e.stateStore,toolStartTimeForAction:e=>u.startTimeForAction(e),tracer:e.tracer}),l=createAgentApprovalInstrumentation({actionContextFor:c.contextFor,frameworkVersion:e.frameworkVersion,idGenerator:e.idGenerator,tracer:e.tracer}),u=createAgentToolInstrumentation({actionContextFor:c.contextFor,idGenerator:e.idGenerator,recordInputs:n,recordOutputs:r,resolveFallback:e=>{let t=a.get(e.scope.attemptId)??e.scope,n=o.get(t);return n===void 0?void 0:{context:n.context,spanContext:n.span.spanContext()}},tracer:e.tracer}),d=createAgentMemoryInstrumentation({...e,environment:t}),{prepareSessionTrace:f,prepareTurnTrace:p}=createAgentOtelSessionContext({...e,environment:t}),projectEvent=async i=>{let a=await e.stateStore.getSession(sessionIdForEvent(i)),o=audienceForEvent(i,a?.channelAudience),s=`traceSeed`in i?i.traceSeed:void 0,c=contextStorage.getStore()?.get(SessionTraceSeedKey),l=resolveForwardedTraceSeed(c),u=resolveForwardedTraceSeed(s,l?.forwardedTracePolicy),decisionForTrace=e=>e===void 0?void 0:resolveTracePolicyDecision(isSampledTrace(e),{audience:o,environment:t}),d=u?.decision??l?.decision??readInstrumentationDecision(a?.decision)??decisionForTrace(s)??decisionForTrace(c)??decisionForTrace(a?.context);if(d===void 0)return withoutInstrumentationContent(i);let f=u===void 0||!(`traceSeed`in i)||i.traceSeed===void 0?i:{...i,traceSeed:{...i.traceSeed,decision:u.decision,traceFlags:u.traceFlags}};return instrumentationEventForTraceDecision(f,applyLiveDeliveryAudienceCeiling(d.action===`drop`?d:{action:`record`,recordInputs:n&&d.recordInputs,recordOutputs:r&&d.recordOutputs},o,u?.forwardedTracePolicy??l?.forwardedTracePolicy,t),{audience:o,environment:t},{applyAudienceCeiling:!1})},onSessionStarted=async e=>{await f(e)},onTurnStarted=async e=>{await p(e)},onStepStarted=async t=>{let n=await e.stateStore.getTurn(t.scope.sessionId,t.scope.turnId);if(n===void 0||!isSampledTrace(n.context))return;let r=await e.stateStore.getSession(t.scope.sessionId),i=withChannelAudience(contextFromSpanContext(n.context),t.scope.channelAudience),s=trace.getSpan(context.active())?.spanContext(),c=e.idGenerator.withSpanId(e.idGenerator.deriveSpanId(attemptIdempotencyKey(t.scope)),()=>e.tracer.startSpan(AGENT_SPAN_NAMES.step,{attributes:runtimeAttributes.agentStepAttributes({event:t,frameworkVersion:e.frameworkVersion,session:r,turn:n}),links:s===void 0||s.traceId===n.context.traceId?void 0:[{attributes:{"eve.link.type":`workflow.delivery`},context:s}]},i));c.addEvent(`step.started`);let l=trace.setSpan(i,c);o.set(t.scope,{context:l,span:c}),a.set(t.scope.attemptId,t.scope)},onStepTerminal=async e=>{let t=a.get(e.scope.attemptId)??e.scope;i.delete(t),drainOpenSpans({...e,scope:t}),u.drain(e.scope.attemptId,e.type===`step.attempt.failed`?{error:e.error}:void 0),e.type===`step.attempt.failed`&&await c.failForAttempt(t,e.error),a.delete(e.scope.attemptId);let n=o.get(t);n!==void 0&&(n.span.addEvent(e.type===`step.attempt.completed`?`step.completed`:`step.failed`),e.type===`step.attempt.failed`&&recordAgentSpanError(n.span,e.error),n.span.end(),o.delete(t))},onTurnTerminal=async t=>{await e.stateStore.updateTurn(t.sessionId,t.turnId,e=>({...e,terminal:t.type===`turn.failed`?{error:t.error,type:t.type}:{type:t.type}}))},onSessionTransition=async t=>{if(t.type===`session.failed`&&t.turnId!==void 0&&await e.stateStore.updateTurn(t.sessionId,t.turnId,e=>({...e,terminal:e.terminal??{error:t.error,type:`turn.failed`}})),t.turnId!==void 0){let n=await e.stateStore.getTurn(t.sessionId,t.turnId);if(n!==void 0){let r=await e.stateStore.getSession(t.sessionId);if(isSampledTrace(n.context)){let i=r?.agentName??n.subagentName,a=withChannelAudience(n.caller===void 0||n.caller.isRemote===!0?ROOT_CONTEXT:contextFromSpanContext(n.caller),r?.channelAudience),startSpan=()=>e.tracer.startSpan(agentInvocationSpanName(i),{attributes:runtimeAttributes.agentActivationAttributes({agentName:i,frameworkVersion:e.frameworkVersion,session:r,sessionId:t.sessionId,turnId:t.turnId,turn:n}),kind:SpanKind.INTERNAL,links:agentActivationLinks(n),root:n.caller===void 0||n.caller.isRemote===!0,startTime:n.startTimeMs},a),o=e.idGenerator.withSpanId(n.context.spanId,()=>e.idGenerator.withTraceId(n.context.traceId,startSpan));setAgentInvocationUsage(o,n.modelUsage),o.addEvent(`turn.started`,void 0,n.startTimeMs),n.terminal!==void 0&&(o.setAttribute(`agent.turn.outcome`,n.terminal.type===`turn.completed`?`completed`:n.terminal.type===`turn.cancelled`?`cancelled`:`failed`),o.addEvent(n.terminal.type),n.terminal.type===`turn.failed`&&recordAgentSpanError(o,n.terminal.error)),o.end()}await e.stateStore.deleteTurn(t.sessionId,t.turnId)}}(t.type===`session.completed`||t.type===`session.failed`)&&(await c.deleteForSession(t.sessionId),await e.stateStore.deleteSession(t.sessionId))},onModelCallStarted=t=>{let r=o.get(t.scope);if(r===void 0)return;r.span.setAttribute(`agent.model.id`,t.model.modelId),r.span.setAttribute(`agent.model.provider`,t.model.provider);let i=e.tracer.startSpan(modelSpanName(t.model.modelId),{attributes:{"gen_ai.agent.name":t.scope.functionId,"gen_ai.operation.name":`chat`,"gen_ai.provider.name":t.model.provider,"gen_ai.request.model":t.model.modelId,...agentSpanNamingAttributes(modelSpanName(t.model.modelId),`chat`),...agentTraceIdentityAttributes({rootSessionId:t.scope.rootSessionId??t.scope.sessionId,traceSessionId:traceSessionIdOf(t.scope),sessionId:t.scope.sessionId}),...runtimeAttributes.runtimeContextAttributes(t.runtimeContext)},kind:SpanKind.CLIENT},r.context);if(n&&t.input!==void 0){let e=genAiInputMessagesAttribute(t.input.messages);e!==void 0&&i.setAttribute(`gen_ai.input.messages`,e);let n=genAiSystemInstructionsAttribute(t.input.instructions);n!==void 0&&i.setAttribute(`gen_ai.system_instructions`,n)}let a={context:trace.setSpan(r.context,i),span:i};getExecutionContexts(t.scope).set(t.idempotencyKey,a.context),getSpanStates(s,t.scope).set(t.idempotencyKey,a)},onModelCallTerminal=async e=>{i.get(e.scope)?.delete(e.idempotencyKey);let t=takeSpanState(s,e.scope,e.idempotencyKey);if(t!==void 0){if(e.type===`model.call.failed`)recordAgentSpanError(t.span,e.error);else{await recordTurnUsage(e),setGenAiUsage(t.span,e.usage),e.responseId!==void 0&&t.span.setAttribute(`gen_ai.response.id`,e.responseId),e.responseModelId!==void 0&&t.span.setAttribute(`gen_ai.response.model`,e.responseModelId),t.span.setAttribute(`gen_ai.response.finish_reasons`,[e.finishReason]);let n=o.get(e.scope);if(n!==void 0&&setAgentUsage(n.span,e.usage),r){t.span.setAttribute(`ai.response.finish_reason`,e.finishReason);let n=e.content;if(n===void 0){t.span.end();return}let r=genAiOutputMessagesAttribute(n,e.finishReason);r!==void 0&&t.span.setAttribute(`gen_ai.output.messages`,r);let i=textContentAttribute(n.filter(e=>e.type===`reasoning`).map(e=>e.text).filter(e=>e.trim().length>0).join(`
2
- `));i!==void 0&&t.span.setAttribute(`ai.response.reasoning`,i);let a=textContentAttribute(n.filter(e=>e.type===`text`).map(e=>e.text).join(``));a!==void 0&&t.span.setAttribute(`ai.response.text`,a);let o=n.filter(e=>e.type===`tool-call`).map(e=>({callId:e.callId,input:e.input,toolName:e.toolName}));if(o.length>0){let e=contentAttribute(o);e!==void 0&&t.span.setAttribute(`ai.response.tool_calls`,e)}let s=n.filter(e=>e.type===`tool-result`||e.type===`tool-error`).map(e=>e.type===`tool-result`?{callId:e.callId,input:e.input,output:e.output,toolName:e.toolName}:{callId:e.callId,error:errorText(e.error),input:e.input,toolName:e.toolName});if(s.length>0){let e=toolResultsContentAttribute(s);e!==void 0&&t.span.setAttribute(`ai.response.tool_results`,e)}}}t.span.end()}},recordTurnUsage=async t=>{(t.usage.inputTokens!==void 0||t.usage.outputTokens!==void 0)&&await e.stateStore.updateTurn(t.scope.sessionId,t.scope.turnId,e=>({...e,modelUsage:{inputTokens:t.usage.inputTokens===void 0?e.modelUsage?.inputTokens:(e.modelUsage?.inputTokens??0)+t.usage.inputTokens,outputTokens:t.usage.outputTokens===void 0?e.modelUsage?.outputTokens:(e.modelUsage?.outputTokens??0)+t.usage.outputTokens}}))},m=createAgentChannelDeliveryInstrumentation({recordInputs:n,stateStore:e.stateStore}),onStepMetadata=e=>{let t=o.get(e.scope);if(t===void 0)return;let n=readGatewayCost(e.providerMetadata);if(n!==void 0)for(let[e,r]of Object.entries(n))t.span.setAttribute(e,r)};return{hook:{events:{...m,"action.completed":c.events[`action.completed`],"action.failed":c.events[`action.failed`],async"action.started"(e,t){await c.events[`action.started`](e,t),await u.actionStarted(e)},...l,...d.events,"step.attempt.completed":onStepTerminal,"step.attempt.failed":onStepTerminal,"step.attempt.metadata":onStepMetadata,"step.attempt.started":onStepStarted,"model.call.completed":onModelCallTerminal,"model.call.failed":onModelCallTerminal,"model.call.started":onModelCallStarted,"session.completed":onSessionTransition,"session.failed":onSessionTransition,"session.started":onSessionStarted,"session.waiting":onSessionTransition,...u.events,"turn.cancelled":onTurnTerminal,"turn.completed":onTurnTerminal,"turn.failed":onTurnTerminal,"turn.started":onTurnStarted},name:`eve.otel`,projectEvent,tracePolicy:()=>({emit:!0,recordInputs:n,recordOutputs:r})},prepareSessionTrace:f,prepareTurnTrace:p,async runInContext(o,s){if(o.type===`memory.operation`)return d.runInContext(o,s);let c=a.get(o.scope.attemptId)??o.scope,l=i.get(c),f=o.type===`model.call`?l?.get(o.idempotencyKey):u.contextFor(o.scope.attemptId,o.idempotencyKey);if(f===void 0){let t=await e.stateStore.getTurn(o.scope.sessionId,o.scope.turnId);t!==void 0&&(f=withChannelAudience(contextFromSpanContext(t.context),o.scope.channelAudience),isSampledTrace(t.context)||(f=suppressTracing(f)))}let p=await e.stateStore.getSession(o.scope.sessionId),m=resolveForwardedTraceSeed(contextStorage.getStore()?.get(SessionTraceSeedKey)),h=m?.decision??p?.decision,g=h===void 0?void 0:applyLiveDeliveryAudienceCeiling(h,normalizeChannelAudience(o.scope.channelAudience),m?.forwardedTracePolicy,t),_={recordInputs:n&&g?.action===`record`&&g.recordInputs,recordOutputs:r&&g?.action===`record`&&g.recordOutputs};if(f===void 0)return s();let v=withErrorContent(f,_.recordOutputs),y=o.type===`tool.call`?withAgentToolContentPolicy(v,_):v;return context.with(markAgentTraceContext(withOperationConversation(y,o.scope)),s)}};function getExecutionContexts(e){let t=i.get(e);return t===void 0&&(t=new Map,i.set(e,t)),t}function drainOpenSpans(e){for(let t of s.get(e.scope)?.values()??[])e.type===`step.attempt.failed`&&recordAgentSpanError(t.span,e.error),t.span.end();s.delete(e.scope)}}function agentActivationLinks(e){let t=[];return e.caller?.isRemote===!0&&t.push({context:e.caller,attributes:{"eve.link.type":`agent.dispatch`}}),e.channelDelivery?.requestTraceContext!==void 0&&t.push({context:e.channelDelivery.requestTraceContext,attributes:{"eve.link.type":`channel.request`}}),t.length===0?void 0:t}function sessionIdForEvent(e){return`scope`in e?e.scope.sessionId:e.sessionId}function audienceForEvent(e,t){return`delivery`in e?normalizeChannelAudience(e.delivery.channelAudience):`scope`in e&&e.scope.channelAudience!==void 0?normalizeChannelAudience(e.scope.channelAudience):e.type===`session.started`?normalizeChannelAudience(e.channelAudience):normalizeChannelAudience(t)}function getSpanStates(e,t){let n=e.get(t);return n===void 0&&(n=new Map,e.set(t,n)),n}function takeSpanState(e,t,n){let r=e.get(t),i=r?.get(n);if(r!==void 0)return r.delete(n),r.size===0&&e.delete(t),i}function contextFromSpanContext(e){return trace.setSpan(ROOT_CONTEXT,trace.wrapSpanContext(e))}const errorText=e=>e instanceof Error?e.message:e;export{createAgentOtelInstrumentation};
1
+ import{normalizeChannelAudience}from"#shared/channel-audience.js";import{applyLiveDeliveryAudienceCeiling,resolveForwardedTraceSeed}from"#shared/forwarded-trace-policy.js";import{contextStorage}from"#context/container.js";import{SessionTraceSeedKey}from"#context/keys.js";import{AGENT_SPAN_NAMES,agentInvocationSpanName,modelSpanName}from"#tracing/agent-span-contract.js";import{resolveInstrumentationEnvironment}from"#internal/application/dev-environment.js";import{withOperationConversation}from"#tracing/conversation-context.js";import{isSampledTrace,resolveTracePolicyDecision}from"#tracing/sampled-trace.js";import{ROOT_CONTEXT,SpanKind,context,trace}from"#compiled/@opentelemetry/api/index.js";import{markAgentTraceContext}from"#tracing/agent-trace-context.js";import{attemptIdempotencyKey}from"#instrumentation/lifecycle.js";import{withoutInstrumentationContent}from"#instrumentation/content.js";import{withErrorContent}from"#tracing/error-content-context.js";import{readInstrumentationDecision}from"#shared/instrumentation-decision.js";import{agentSpanNamingAttributes}from"#tracing/agent-span-naming.js";import{contentAttribute,genAiInputMessagesAttribute,genAiOutputMessagesAttribute,genAiSystemInstructionsAttribute,textContentAttribute,toolResultsContentAttribute}from"#tracing/agent-otel-content.js";import{recordAgentSpanError}from"#tracing/agent-span-error.js";import{withAgentToolContentPolicy}from"#tracing/agent-tool-span-context.js";import{agentTraceIdentityAttributes,traceSessionIdOf}from"#tracing/agent-otel-attributes.js";import{withChannelAudience}from"#tracing/channel-audience-context.js";import{suppressTracing}from"#tracing/suppress-tracing.js";import{instrumentationEventForTraceDecision}from"#instrumentation/content-policy.js";import{createAgentApprovalInstrumentation}from"#tracing/agent-approval-instrumentation.js";import{createAgentChannelDeliveryInstrumentation}from"#tracing/agent-channel-delivery-instrumentation.js";import{createAgentToolInstrumentation}from"#tracing/agent-tool-instrumentation.js";import*as runtimeAttributes from"#tracing/agent-otel-runtime-context.js";import{createAgentMemoryInstrumentation}from"#tracing/agent-memory-instrumentation.js";import{readGatewayCost,setAgentInvocationUsage,setAgentUsage,setGenAiUsage}from"#tracing/agent-otel-usage.js";import{createAgentOtelSessionContext}from"#tracing/agent-otel-session-context.js";function createAgentOtelInstrumentation(e){let t=e.environment??resolveInstrumentationEnvironment(),n=e.recordInputs??!1,r=e.recordOutputs??!1,i=new WeakMap,a=new Map,o=new WeakMap,s=new WeakMap,c=createAgentToolInstrumentation({frameworkVersion:e.frameworkVersion,idGenerator:e.idGenerator,recordInputs:n,recordOutputs:r,resolveTraceContext:async t=>(await e.stateStore.getTurn(t.scope.sessionId,t.scope.turnId))?.context,stateStore:e.stateStore,resolveFallback:e=>{let t=a.get(e.scope.attemptId)??e.scope,n=o.get(t);return n===void 0?void 0:{context:n.context,spanContext:n.span.spanContext()}},tracer:e.tracer}),l=createAgentApprovalInstrumentation({actionContextFor:c.dispatchContextFor,frameworkVersion:e.frameworkVersion,idGenerator:e.idGenerator,tracer:e.tracer}),u=createAgentMemoryInstrumentation({...e,environment:t}),{prepareSessionTrace:d,prepareTurnTrace:f}=createAgentOtelSessionContext({...e,environment:t}),projectEvent=async i=>{let a=await e.stateStore.getSession(sessionIdForEvent(i)),o=audienceForEvent(i,a?.channelAudience),s=`traceSeed`in i?i.traceSeed:void 0,c=contextStorage.getStore()?.get(SessionTraceSeedKey),l=resolveForwardedTraceSeed(c),u=resolveForwardedTraceSeed(s,l?.forwardedTracePolicy),decisionForTrace=e=>e===void 0?void 0:resolveTracePolicyDecision(isSampledTrace(e),{audience:o,environment:t}),d=u?.decision??l?.decision??readInstrumentationDecision(a?.decision)??decisionForTrace(s)??decisionForTrace(c)??decisionForTrace(a?.context);if(d===void 0)return withoutInstrumentationContent(i);let f=u===void 0||!(`traceSeed`in i)||i.traceSeed===void 0?i:{...i,traceSeed:{...i.traceSeed,decision:u.decision,traceFlags:u.traceFlags}};return instrumentationEventForTraceDecision(f,applyLiveDeliveryAudienceCeiling(d.action===`drop`?d:{action:`record`,recordInputs:n&&d.recordInputs,recordOutputs:r&&d.recordOutputs},o,u?.forwardedTracePolicy??l?.forwardedTracePolicy,t),{audience:o,environment:t},{applyAudienceCeiling:!1})},onSessionStarted=async e=>{await d(e)},onTurnStarted=async e=>{await f(e)},onStepStarted=async t=>{let n=await e.stateStore.getTurn(t.scope.sessionId,t.scope.turnId);if(n===void 0||!isSampledTrace(n.context))return;let r=await e.stateStore.getSession(t.scope.sessionId),i=withChannelAudience(contextFromSpanContext(n.context),t.scope.channelAudience),s=trace.getSpan(context.active())?.spanContext(),c=e.idGenerator.withSpanId(e.idGenerator.deriveSpanId(attemptIdempotencyKey(t.scope)),()=>e.tracer.startSpan(AGENT_SPAN_NAMES.step,{attributes:runtimeAttributes.agentStepAttributes({event:t,frameworkVersion:e.frameworkVersion,session:r,turn:n}),links:s===void 0||s.traceId===n.context.traceId?void 0:[{attributes:{"eve.link.type":`workflow.delivery`},context:s}]},i));c.addEvent(`step.started`);let l=trace.setSpan(i,c);o.set(t.scope,{context:l,span:c}),a.set(t.scope.attemptId,t.scope)},onStepTerminal=async e=>{let t=a.get(e.scope.attemptId)??e.scope;i.delete(t),drainOpenSpans({...e,scope:t}),c.drain(e.scope.attemptId,e.type===`step.attempt.failed`?{error:e.error}:void 0),e.type===`step.attempt.failed`&&await c.failForAttempt(t,e.error),a.delete(e.scope.attemptId);let n=o.get(t);n!==void 0&&(n.span.addEvent(e.type===`step.attempt.completed`?`step.completed`:`step.failed`),e.type===`step.attempt.failed`&&recordAgentSpanError(n.span,e.error),n.span.end(),o.delete(t))},onTurnTerminal=async t=>{await e.stateStore.updateTurn(t.sessionId,t.turnId,e=>({...e,terminal:t.type===`turn.failed`?{error:t.error,type:t.type}:{type:t.type}}))},onSessionTransition=async t=>{if(t.type===`session.failed`&&t.turnId!==void 0&&await e.stateStore.updateTurn(t.sessionId,t.turnId,e=>({...e,terminal:e.terminal??{error:t.error,type:`turn.failed`}})),t.turnId!==void 0){let n=await e.stateStore.getTurn(t.sessionId,t.turnId);if(n!==void 0){let r=await e.stateStore.getSession(t.sessionId);if(isSampledTrace(n.context)){let i=r?.agentName??n.subagentName,a=withChannelAudience(n.caller===void 0||n.caller.isRemote===!0?ROOT_CONTEXT:contextFromSpanContext(n.caller),r?.channelAudience),startSpan=()=>e.tracer.startSpan(agentInvocationSpanName(i),{attributes:runtimeAttributes.agentActivationAttributes({agentName:i,frameworkVersion:e.frameworkVersion,session:r,sessionId:t.sessionId,turnId:t.turnId,turn:n}),kind:SpanKind.INTERNAL,links:agentActivationLinks(n),root:n.caller===void 0||n.caller.isRemote===!0,startTime:n.startTimeMs},a),o=e.idGenerator.withSpanId(n.context.spanId,()=>e.idGenerator.withTraceId(n.context.traceId,startSpan));setAgentInvocationUsage(o,n.modelUsage),o.addEvent(`turn.started`,void 0,n.startTimeMs),n.terminal!==void 0&&(o.setAttribute(`agent.turn.outcome`,n.terminal.type===`turn.completed`?`completed`:n.terminal.type===`turn.cancelled`?`cancelled`:`failed`),o.addEvent(n.terminal.type),n.terminal.type===`turn.failed`&&recordAgentSpanError(o,n.terminal.error)),o.end()}await e.stateStore.deleteTurn(t.sessionId,t.turnId)}}(t.type===`session.completed`||t.type===`session.failed`)&&(await c.deleteForSession(t.sessionId),await e.stateStore.deleteSession(t.sessionId))},onModelCallStarted=t=>{let r=o.get(t.scope);if(r===void 0)return;r.span.setAttribute(`agent.model.id`,t.model.modelId);let i=e.tracer.startSpan(modelSpanName(t.model.modelId),{attributes:{"gen_ai.agent.name":t.scope.functionId,"gen_ai.operation.name":`chat`,"gen_ai.provider.name":t.model.provider,"gen_ai.request.model":t.model.modelId,...agentSpanNamingAttributes(modelSpanName(t.model.modelId),`chat`),...agentTraceIdentityAttributes({rootSessionId:t.scope.rootSessionId??t.scope.sessionId,traceSessionId:traceSessionIdOf(t.scope),sessionId:t.scope.sessionId}),...runtimeAttributes.runtimeContextAttributes(t.runtimeContext)},kind:SpanKind.CLIENT},r.context);if(n&&t.input!==void 0){let e=genAiInputMessagesAttribute(t.input.messages);e!==void 0&&i.setAttribute(`gen_ai.input.messages`,e);let n=genAiSystemInstructionsAttribute(t.input.instructions);n!==void 0&&i.setAttribute(`gen_ai.system_instructions`,n)}let a={context:trace.setSpan(r.context,i),span:i};getExecutionContexts(t.scope).set(t.idempotencyKey,a.context),getSpanStates(s,t.scope).set(t.idempotencyKey,a)},onModelCallTerminal=async e=>{i.get(e.scope)?.delete(e.idempotencyKey);let t=takeSpanState(s,e.scope,e.idempotencyKey);if(t!==void 0){if(e.type===`model.call.failed`)recordAgentSpanError(t.span,e.error);else{await recordTurnUsage(e),setGenAiUsage(t.span,e.usage),e.responseId!==void 0&&t.span.setAttribute(`gen_ai.response.id`,e.responseId),e.responseModelId!==void 0&&t.span.setAttribute(`gen_ai.response.model`,e.responseModelId),t.span.setAttribute(`gen_ai.response.finish_reasons`,[e.finishReason]);let n=o.get(e.scope);if(n!==void 0&&setAgentUsage(n.span,e.usage),r){t.span.setAttribute(`ai.response.finish_reason`,e.finishReason);let n=e.content;if(n===void 0){t.span.end();return}let r=genAiOutputMessagesAttribute(n,e.finishReason);r!==void 0&&t.span.setAttribute(`gen_ai.output.messages`,r);let i=textContentAttribute(n.filter(e=>e.type===`reasoning`).map(e=>e.text).filter(e=>e.trim().length>0).join(`
2
+ `));i!==void 0&&t.span.setAttribute(`ai.response.reasoning`,i);let a=textContentAttribute(n.filter(e=>e.type===`text`).map(e=>e.text).join(``));a!==void 0&&t.span.setAttribute(`ai.response.text`,a);let o=n.filter(e=>e.type===`tool-call`).map(e=>({callId:e.callId,input:e.input,toolName:e.toolName}));if(o.length>0){let e=contentAttribute(o);e!==void 0&&t.span.setAttribute(`ai.response.tool_calls`,e)}let s=n.filter(e=>e.type===`tool-result`||e.type===`tool-error`).map(e=>e.type===`tool-result`?{callId:e.callId,input:e.input,output:e.output,toolName:e.toolName}:{callId:e.callId,error:errorText(e.error),input:e.input,toolName:e.toolName});if(s.length>0){let e=toolResultsContentAttribute(s);e!==void 0&&t.span.setAttribute(`ai.response.tool_results`,e)}}}t.span.end()}},recordTurnUsage=async t=>{(t.usage.inputTokens!==void 0||t.usage.outputTokens!==void 0)&&await e.stateStore.updateTurn(t.scope.sessionId,t.scope.turnId,e=>({...e,modelUsage:{inputTokens:t.usage.inputTokens===void 0?e.modelUsage?.inputTokens:(e.modelUsage?.inputTokens??0)+t.usage.inputTokens,outputTokens:t.usage.outputTokens===void 0?e.modelUsage?.outputTokens:(e.modelUsage?.outputTokens??0)+t.usage.outputTokens}}))},p=createAgentChannelDeliveryInstrumentation({recordInputs:n,stateStore:e.stateStore}),onStepMetadata=e=>{let t=o.get(e.scope);if(t===void 0)return;let n=readGatewayCost(e.providerMetadata);if(n!==void 0)for(let[e,r]of Object.entries(n))t.span.setAttribute(e,r)};return{hook:{events:{...p,...l,...u.events,"step.attempt.completed":onStepTerminal,"step.attempt.failed":onStepTerminal,"step.attempt.metadata":onStepMetadata,"step.attempt.started":onStepStarted,"model.call.completed":onModelCallTerminal,"model.call.failed":onModelCallTerminal,"model.call.started":onModelCallStarted,"session.completed":onSessionTransition,"session.failed":onSessionTransition,"session.started":onSessionStarted,"session.waiting":onSessionTransition,...c.events,"turn.cancelled":onTurnTerminal,"turn.completed":onTurnTerminal,"turn.failed":onTurnTerminal,"turn.started":onTurnStarted},name:`eve.otel`,projectEvent,tracePolicy:()=>({emit:!0,recordInputs:n,recordOutputs:r})},prepareSessionTrace:d,prepareTurnTrace:f,async runInContext(o,s){if(o.type===`memory.operation`)return u.runInContext(o,s);let l=a.get(o.scope.attemptId)??o.scope,d=i.get(l),f=o.type===`model.call`?d?.get(o.idempotencyKey):c.contextFor(o.scope.attemptId,o.idempotencyKey);if(f===void 0){let t=await e.stateStore.getTurn(o.scope.sessionId,o.scope.turnId);t!==void 0&&(f=withChannelAudience(contextFromSpanContext(t.context),o.scope.channelAudience),isSampledTrace(t.context)||(f=suppressTracing(f)))}let p=await e.stateStore.getSession(o.scope.sessionId),m=resolveForwardedTraceSeed(contextStorage.getStore()?.get(SessionTraceSeedKey)),h=m?.decision??p?.decision,g=h===void 0?void 0:applyLiveDeliveryAudienceCeiling(h,normalizeChannelAudience(o.scope.channelAudience),m?.forwardedTracePolicy,t),_={recordInputs:n&&g?.action===`record`&&g.recordInputs,recordOutputs:r&&g?.action===`record`&&g.recordOutputs},run=e=>{let t=e??f;if(t===void 0)return s();let n=withErrorContent(t,_.recordOutputs),r=o.type===`tool.call`?withAgentToolContentPolicy(n,_):n;return context.with(markAgentTraceContext(withOperationConversation(r,o.scope)),s)};return o.type===`tool.call`?c.runInContext({...o,input:_.recordInputs?o.input:void 0},run,_.recordOutputs):run(void 0)}};function getExecutionContexts(e){let t=i.get(e);return t===void 0&&(t=new Map,i.set(e,t)),t}function drainOpenSpans(e){for(let t of s.get(e.scope)?.values()??[])e.type===`step.attempt.failed`&&recordAgentSpanError(t.span,e.error),t.span.end();s.delete(e.scope)}}function agentActivationLinks(e){let t=[];return e.caller?.isRemote===!0&&t.push({context:e.caller,attributes:{"eve.link.type":`agent.dispatch`}}),e.channelDelivery?.requestTraceContext!==void 0&&t.push({context:e.channelDelivery.requestTraceContext,attributes:{"eve.link.type":`channel.request`}}),t.length===0?void 0:t}function sessionIdForEvent(e){return`scope`in e?e.scope.sessionId:e.sessionId}function audienceForEvent(e,t){return`delivery`in e?normalizeChannelAudience(e.delivery.channelAudience):`scope`in e&&e.scope.channelAudience!==void 0?normalizeChannelAudience(e.scope.channelAudience):e.type===`session.started`?normalizeChannelAudience(e.channelAudience):normalizeChannelAudience(t)}function getSpanStates(e,t){let n=e.get(t);return n===void 0&&(n=new Map,e.set(t,n)),n}function takeSpanState(e,t,n){let r=e.get(t),i=r?.get(n);if(r!==void 0)return r.delete(n),r.size===0&&e.delete(t),i}function contextFromSpanContext(e){return trace.setSpan(ROOT_CONTEXT,trace.wrapSpanContext(e))}const errorText=e=>e instanceof Error?e.message:e;export{createAgentOtelInstrumentation};