eve 0.71.3 → 0.72.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (436) hide show
  1. package/CHANGELOG.md +30 -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/types.d.ts +8 -8
  69. package/dist/src/execution/cancel-descendant-turns-step.d.ts +1 -0
  70. package/dist/src/execution/cancel-descendant-turns-step.js +1 -1
  71. package/dist/src/execution/cancelled-model-call-batch.js +1 -1
  72. package/dist/src/execution/coordination-dispatch-shared.js +1 -1
  73. package/dist/src/execution/coordination-dispatch-step.js +1 -1
  74. package/dist/src/execution/durable-session-read.d.ts +5 -0
  75. package/dist/src/execution/durable-session-read.js +1 -0
  76. package/dist/src/execution/durable-session-store.d.ts +4 -10
  77. package/dist/src/execution/durable-session-store.js +1 -1
  78. package/dist/src/execution/dynamic-connections.d.ts +3 -3
  79. package/dist/src/execution/dynamic-connections.js +1 -1
  80. package/dist/src/execution/dynamic-workflow/tool.js +1 -1
  81. package/dist/src/execution/legacy-session/interrupt-step.js +1 -1
  82. package/dist/src/execution/legacy-session/snapshot.d.ts +3 -0
  83. package/dist/src/execution/legacy-session/snapshot.js +1 -1
  84. package/dist/src/execution/model-call-batching.js +1 -1
  85. package/dist/src/execution/node-step.d.ts +2 -0
  86. package/dist/src/execution/node-step.js +1 -1
  87. package/dist/src/execution/proxied-deliver-step.js +1 -1
  88. package/dist/src/execution/publish-session-events.d.ts +7 -2
  89. package/dist/src/execution/publish-session-events.js +1 -1
  90. package/dist/src/execution/session/active-turn.js +1 -1
  91. package/dist/src/execution/session/answer-caller.js +1 -1
  92. package/dist/src/execution/session/checkpoint-migrations.js +1 -1
  93. package/dist/src/execution/session/finalization.js +1 -1
  94. package/dist/src/execution/session/handoff-steps.d.ts +3 -1
  95. package/dist/src/execution/session/handoff-steps.js +1 -1
  96. package/dist/src/execution/session/handoff.d.ts +1 -1
  97. package/dist/src/execution/session/handoff.js +1 -1
  98. package/dist/src/execution/session/pending-turn-state.d.ts +8 -3
  99. package/dist/src/execution/session/pending-turn-state.js +1 -1
  100. package/dist/src/execution/session/task-tool-tracing-step.d.ts +5 -0
  101. package/dist/src/execution/session/task-tool-tracing-step.js +1 -0
  102. package/dist/src/execution/session/turn-step-result.js +1 -1
  103. package/dist/src/execution/session/turn-step.js +1 -1
  104. package/dist/src/execution/session/turn-waiting-step.js +1 -1
  105. package/dist/src/execution/session/turn.d.ts +1 -0
  106. package/dist/src/execution/session/turn.js +1 -1
  107. package/dist/src/execution/settle-cancelled-turn-step.d.ts +4 -6
  108. package/dist/src/execution/settle-cancelled-turn-step.js +1 -1
  109. package/dist/src/execution/tasks/start.d.ts +3 -3
  110. package/dist/src/execution/tasks/start.js +1 -1
  111. package/dist/src/execution/tasks/steps.d.ts +1 -1
  112. package/dist/src/execution/tasks/steps.js +1 -1
  113. package/dist/src/execution/terminal-session-completion-step.d.ts +5 -1
  114. package/dist/src/execution/terminal-session-completion-step.js +1 -1
  115. package/dist/src/execution/terminal-session-failure-step.js +1 -1
  116. package/dist/src/execution/tools/agent-router-workflow.js +1 -1
  117. package/dist/src/execution/tools/connection-tools.js +1 -1
  118. package/dist/src/execution/tools/workflow/harness-definition.js +1 -1
  119. package/dist/src/execution/tools/workflow/step.js +1 -1
  120. package/dist/src/execution/tools/workflow/withdraw-step.d.ts +7 -9
  121. package/dist/src/execution/tools/workflow/withdraw-step.js +1 -1
  122. package/dist/src/execution/workflow-trace-context.d.ts +2 -2
  123. package/dist/src/harness/authorization.d.ts +4 -2
  124. package/dist/src/harness/authorization.js +1 -1
  125. package/dist/src/harness/{compaction.js → compaction/engine.js} +1 -1
  126. package/dist/src/harness/compaction/step.d.ts +46 -0
  127. package/dist/src/harness/compaction/step.js +1 -0
  128. package/dist/src/harness/coordination.d.ts +32 -68
  129. package/dist/src/harness/coordination.js +1 -1
  130. package/dist/src/harness/current-messages.d.ts +1 -3
  131. package/dist/src/harness/current-messages.js +1 -1
  132. package/dist/src/harness/emission.d.ts +4 -52
  133. package/dist/src/harness/emission.js +1 -1
  134. package/dist/src/harness/execute-tool.d.ts +1 -0
  135. package/dist/src/harness/final-output.d.ts +5 -0
  136. package/dist/src/harness/final-output.js +1 -1
  137. package/dist/src/harness/hitl/approvals.d.ts +115 -0
  138. package/dist/src/harness/hitl/approvals.js +1 -0
  139. package/dist/src/harness/hitl/approved-call-callers.d.ts +14 -0
  140. package/dist/src/harness/hitl/approved-call-callers.js +1 -0
  141. package/dist/src/harness/hitl/approved-calls.d.ts +37 -0
  142. package/dist/src/harness/hitl/approved-calls.js +1 -0
  143. package/dist/src/harness/hitl/budget.d.ts +21 -0
  144. package/dist/src/harness/hitl/budget.js +1 -0
  145. package/dist/src/harness/{approval-candidates.d.ts → hitl/candidates.d.ts} +9 -18
  146. package/dist/src/harness/hitl/candidates.js +1 -0
  147. package/dist/src/harness/hitl/coordinator.js +1 -0
  148. package/dist/src/harness/hitl/delivery.d.ts +37 -0
  149. package/dist/src/harness/hitl/delivery.js +1 -0
  150. package/dist/src/harness/hitl/index.d.ts +49 -0
  151. package/dist/src/harness/hitl/index.js +1 -0
  152. package/dist/src/harness/hitl/intake.d.ts +67 -0
  153. package/dist/src/harness/hitl/intake.js +1 -0
  154. package/dist/src/harness/{stale-input-responses.d.ts → hitl/stale-responses.d.ts} +5 -3
  155. package/dist/src/harness/hitl/stale-responses.js +3 -0
  156. package/dist/src/harness/inline-tool-authorization.d.ts +4 -0
  157. package/dist/src/harness/inline-tool-authorization.js +1 -1
  158. package/dist/src/harness/input-extraction.d.ts +1 -10
  159. package/dist/src/harness/input-extraction.js +1 -1
  160. package/dist/src/harness/input-request-resolution.d.ts +1 -5
  161. package/dist/src/harness/input-request-resolution.js +1 -1
  162. package/dist/src/harness/model-call/call.d.ts +78 -0
  163. package/dist/src/harness/model-call/call.js +1 -0
  164. package/dist/src/harness/{model-call-error.d.ts → model-call/errors.d.ts} +1 -1
  165. package/dist/src/harness/model-call/failure.d.ts +52 -0
  166. package/dist/src/harness/model-call/failure.js +1 -0
  167. package/dist/src/harness/model-call/model.d.ts +18 -0
  168. package/dist/src/harness/model-call/model.js +1 -0
  169. package/dist/src/harness/model-call/recovery.d.ts +52 -0
  170. package/dist/src/harness/model-call/recovery.js +1 -0
  171. package/dist/src/harness/model-call/request.d.ts +30 -0
  172. package/dist/src/harness/model-call/request.js +3 -0
  173. package/dist/src/harness/model-call/response.d.ts +39 -0
  174. package/dist/src/harness/model-call/response.js +1 -0
  175. package/dist/src/harness/model-call/retry.d.ts +11 -0
  176. package/dist/src/harness/model-call/retry.js +1 -0
  177. package/dist/src/harness/model-call/run.d.ts +38 -0
  178. package/dist/src/harness/model-call/run.js +1 -0
  179. package/dist/src/harness/model-call/tools.d.ts +48 -0
  180. package/dist/src/harness/model-call/tools.js +1 -0
  181. package/dist/src/harness/model-call/usage.d.ts +23 -0
  182. package/dist/src/harness/model-call/usage.js +1 -0
  183. package/dist/src/harness/nested-actions.d.ts +2 -2
  184. package/dist/src/harness/provider-tools.d.ts +2 -2
  185. package/dist/src/harness/provider-tools.js +1 -1
  186. package/dist/src/harness/proxy-input-requests.d.ts +4 -12
  187. package/dist/src/harness/proxy-input-requests.js +1 -1
  188. package/dist/src/harness/session-machine/commit.d.ts +28 -0
  189. package/dist/src/harness/session-machine/commit.js +1 -0
  190. package/dist/src/harness/session-machine/current.d.ts +29 -0
  191. package/dist/src/harness/session-machine/current.js +1 -0
  192. package/dist/src/harness/session-machine/events.d.ts +6 -0
  193. package/dist/src/harness/session-machine/events.js +1 -0
  194. package/dist/src/harness/session-machine/resolver-events.d.ts +12 -0
  195. package/dist/src/harness/session-machine/resolver-events.js +1 -0
  196. package/dist/src/harness/session-machine/state.d.ts +47 -0
  197. package/dist/src/harness/session-machine/state.js +1 -0
  198. package/dist/src/harness/session-machine/transitions.d.ts +188 -0
  199. package/dist/src/harness/session-machine/transitions.js +1 -0
  200. package/dist/src/harness/session-machine/view.d.ts +58 -0
  201. package/dist/src/harness/session-machine/view.js +1 -0
  202. package/dist/src/harness/step/after-model.d.ts +7 -0
  203. package/dist/src/harness/step/after-model.js +1 -0
  204. package/dist/src/harness/step/context.d.ts +59 -0
  205. package/dist/src/harness/step/context.js +1 -0
  206. package/dist/src/harness/step/intake.d.ts +34 -0
  207. package/dist/src/harness/step/intake.js +1 -0
  208. package/dist/src/harness/step/prompt.d.ts +37 -0
  209. package/dist/src/harness/step/prompt.js +1 -0
  210. package/dist/src/harness/step-hooks.d.ts +8 -13
  211. package/dist/src/harness/step-hooks.js +1 -1
  212. package/dist/src/harness/tool-loop.d.ts +7 -22
  213. package/dist/src/harness/tool-loop.js +1 -3
  214. package/dist/src/harness/tools.d.ts +13 -0
  215. package/dist/src/harness/tools.js +1 -1
  216. package/dist/src/harness/turn-tag-state.d.ts +1 -1
  217. package/dist/src/harness/types.d.ts +6 -0
  218. package/dist/src/instrumentation/ai-sdk-hook-bridge.d.ts +1 -1
  219. package/dist/src/instrumentation/ai-sdk-hook-bridge.js +1 -1
  220. package/dist/src/instrumentation/content.js +1 -1
  221. package/dist/src/instrumentation/dispatch.js +1 -1
  222. package/dist/src/instrumentation/lifecycle.d.ts +28 -56
  223. package/dist/src/instrumentation/native-events.d.ts +2 -1
  224. package/dist/src/instrumentation/native-events.js +1 -1
  225. package/dist/src/instrumentation/provider.d.ts +1 -1
  226. package/dist/src/instrumentation/runtime-context.d.ts +2 -3
  227. package/dist/src/instrumentation/runtime-context.js +1 -1
  228. package/dist/src/instrumentation/runtime.d.ts +11 -1
  229. package/dist/src/instrumentation/runtime.js +1 -1
  230. package/dist/src/instrumentation/state.d.ts +6 -1
  231. package/dist/src/instrumentation/state.js +1 -1
  232. package/dist/src/internal/application/package.js +1 -1
  233. package/dist/src/internal/attachments/limited-read.d.ts +16 -0
  234. package/dist/src/internal/attachments/limited-read.js +1 -0
  235. package/dist/src/internal/authored-definition/schema-backed.d.ts +2 -1
  236. package/dist/src/internal/authored-definition/schema-backed.js +1 -1
  237. package/dist/src/internal/mcp/published-tools.d.ts +13 -0
  238. package/dist/src/internal/mcp/published-tools.js +1 -0
  239. package/dist/src/internal/mcp/request-trace-context.d.ts +12 -0
  240. package/dist/src/internal/mcp/request-trace-context.js +1 -0
  241. package/dist/src/internal/mcp/streamable-http-server.d.ts +7 -3
  242. package/dist/src/internal/mcp/streamable-http-server.js +1 -1
  243. package/dist/src/internal/model-auth/transport.d.ts +3 -3
  244. package/dist/src/internal/model-auth/transport.js +1 -1
  245. package/dist/src/models/auto.d.ts +5 -5
  246. package/dist/src/models/auto.js +2 -2
  247. package/dist/src/protocol/message.d.ts +7 -0
  248. package/dist/src/protocol/message.js +1 -1
  249. package/dist/src/protocol/session-projection.d.ts +159 -0
  250. package/dist/src/protocol/session-projection.js +1 -0
  251. package/dist/src/public/ai/index.d.ts +1 -1
  252. package/dist/src/public/ai/index.js +1 -1
  253. package/dist/src/public/channels/chat-sdk/attachment-refs.d.ts +15 -0
  254. package/dist/src/public/channels/chat-sdk/attachment-refs.js +1 -0
  255. package/dist/src/public/channels/chat-sdk/chatSdkChannel.js +2 -2
  256. package/dist/src/public/channels/chat-sdk/messageToUserContent.d.ts +11 -5
  257. package/dist/src/public/channels/chat-sdk/messageToUserContent.js +1 -1
  258. package/dist/src/public/channels/discord/attachments.d.ts +15 -0
  259. package/dist/src/public/channels/discord/attachments.js +1 -0
  260. package/dist/src/public/channels/discord/discordChannel.js +1 -1
  261. package/dist/src/public/channels/discord/inbound.d.ts +13 -0
  262. package/dist/src/public/channels/discord/inbound.js +1 -1
  263. package/dist/src/public/channels/linear/inbound-uploads.d.ts +21 -0
  264. package/dist/src/public/channels/linear/inbound-uploads.js +1 -0
  265. package/dist/src/public/channels/linear/linearChannel.js +1 -1
  266. package/dist/src/public/channels/linq/inboundContent.d.ts +7 -1
  267. package/dist/src/public/channels/linq/inboundContent.js +1 -1
  268. package/dist/src/public/channels/linq/linqChannel.js +1 -1
  269. package/dist/src/public/channels/mcp.d.ts +17 -2
  270. package/dist/src/public/channels/mcp.js +1 -1
  271. package/dist/src/public/channels/photon/attachments.d.ts +21 -0
  272. package/dist/src/public/channels/photon/attachments.js +1 -0
  273. package/dist/src/public/channels/photon/photonIMessageChannel.js +1 -1
  274. package/dist/src/public/channels/slack/attachments.d.ts +3 -1
  275. package/dist/src/public/channels/slack/attachments.js +1 -1
  276. package/dist/src/public/channels/slack/slackChannel.js +1 -1
  277. package/dist/src/public/channels/teams/attachments.d.ts +4 -4
  278. package/dist/src/public/channels/teams/attachments.js +1 -1
  279. package/dist/src/public/channels/telegram/attachments.js +1 -1
  280. package/dist/src/public/channels/twilio/api.d.ts +7 -0
  281. package/dist/src/public/channels/twilio/api.js +1 -1
  282. package/dist/src/public/channels/twilio/inbound.d.ts +7 -0
  283. package/dist/src/public/channels/twilio/inbound.js +2 -2
  284. package/dist/src/public/channels/twilio/twilioChannel.js +1 -1
  285. package/dist/src/public/definitions/connections/mcp.d.ts +1 -1
  286. package/dist/src/public/definitions/connections/openapi.d.ts +1 -1
  287. package/dist/src/react/index.d.ts +1 -0
  288. package/dist/src/react/index.js +1 -1
  289. package/dist/src/runtime/agent/mock-model-adapter.js +2 -2
  290. package/dist/src/runtime/resolve-tool.js +1 -1
  291. package/dist/src/setup/boxes/resolve-provisioning.d.ts +2 -0
  292. package/dist/src/setup/boxes/resolve-provisioning.js +1 -1
  293. package/dist/src/setup/cli/prompt-ui.d.ts +3 -0
  294. package/dist/src/setup/cli/prompt-ui.js +3 -1
  295. package/dist/src/setup/cli/select-component.d.ts +1 -0
  296. package/dist/src/setup/cli/select-component.js +1 -1
  297. package/dist/src/setup/flows/ensure-vercel-project.d.ts +2 -0
  298. package/dist/src/setup/flows/ensure-vercel-project.js +1 -1
  299. package/dist/src/setup/integrations/discord/api.js +1 -1
  300. package/dist/src/setup/integrations/web/auth-options.d.ts +4 -0
  301. package/dist/src/setup/integrations/web/auth-options.js +1 -0
  302. package/dist/src/setup/integrations/web/auth-scaffold.d.ts +7 -0
  303. package/dist/src/setup/integrations/web/auth-scaffold.js +1 -0
  304. package/dist/src/setup/integrations/web/provision-auth.d.ts +3 -0
  305. package/dist/src/setup/integrations/web/provision-auth.js +1 -0
  306. package/dist/src/setup/integrations/web/setup.d.ts +11 -6
  307. package/dist/src/setup/integrations/web/setup.js +3 -3
  308. package/dist/src/setup/prompter.d.ts +2 -0
  309. package/dist/src/setup/prompter.js +1 -1
  310. package/dist/src/setup/scaffold/create/add-to-project.js +1 -1
  311. package/dist/src/setup/scaffold/create/project.js +2 -2
  312. package/dist/src/setup/scaffold/create/web-template.d.ts +1 -1
  313. package/dist/src/setup/scaffold/create/web-template.js +1 -0
  314. package/dist/src/setup/scaffold/update/web-options.js +1 -1
  315. package/dist/src/setup/vercel-project-api.d.ts +9 -0
  316. package/dist/src/setup/vercel-project-api.js +1 -1
  317. package/dist/src/setup/vercel-project.d.ts +4 -2
  318. package/dist/src/setup/vercel-project.js +0 -0
  319. package/dist/src/shared/web-search.d.ts +1 -1
  320. package/dist/src/subagents/adapter.js +1 -1
  321. package/dist/src/subagents/event-proxy-step.js +1 -1
  322. package/dist/src/subagents/hitl-proxy.d.ts +4 -28
  323. package/dist/src/subagents/hitl-proxy.js +1 -1
  324. package/dist/src/svelte/index.d.ts +2 -0
  325. package/dist/src/svelte/index.js +39 -2
  326. package/dist/src/svelte/use-eve-agent.js +1 -1
  327. package/dist/src/tools/approval/policies.d.ts +5 -5
  328. package/dist/src/tools/approval/policies.js +1 -1
  329. package/dist/src/tools/framework/agent.js +1 -1
  330. package/dist/src/tools/provided/agent-router.js +1 -1
  331. package/dist/src/tools/provided/ask-question-workflow.js +1 -1
  332. package/dist/src/tools/provided/ask-question.js +2 -2
  333. package/dist/src/tools/provided/bash.js +1 -1
  334. package/dist/src/tools/provided/framework-tool.d.ts +3 -0
  335. package/dist/src/tools/provided/framework-tool.js +1 -0
  336. package/dist/src/tools/provided/glob.js +2 -2
  337. package/dist/src/tools/provided/grep.js +2 -2
  338. package/dist/src/tools/provided/load-skill.js +1 -1
  339. package/dist/src/tools/provided/no-reply.js +1 -1
  340. package/dist/src/tools/provided/read-file.js +2 -2
  341. package/dist/src/tools/provided/sleep-workflow.js +1 -1
  342. package/dist/src/tools/provided/sleep.js +1 -1
  343. package/dist/src/tools/provided/task-cancel.js +1 -1
  344. package/dist/src/tools/provided/task-wait.js +1 -1
  345. package/dist/src/tools/provided/web-fetch.js +2 -2
  346. package/dist/src/tools/provided/web-search.js +1 -1
  347. package/dist/src/tools/provided/workflow.js +1 -1
  348. package/dist/src/tools/provided/write-file.js +2 -2
  349. package/dist/src/tracing/agent-approval-instrumentation.d.ts +2 -2
  350. package/dist/src/tracing/agent-approval-instrumentation.js +1 -1
  351. package/dist/src/tracing/agent-otel-provider.js +2 -2
  352. package/dist/src/tracing/agent-otel-usage.d.ts +1 -1
  353. package/dist/src/tracing/agent-otel-usage.js +1 -1
  354. package/dist/src/tracing/agent-span-contract.d.ts +0 -1
  355. package/dist/src/tracing/agent-span-contract.js +1 -1
  356. package/dist/src/tracing/agent-tool-instrumentation.d.ts +16 -6
  357. package/dist/src/tracing/agent-tool-instrumentation.js +1 -1
  358. package/dist/src/tracing/agent-trace-context-codec.js +1 -1
  359. package/dist/src/tracing/agent-trace-state.d.ts +7 -3
  360. package/dist/src/tracing/invoke-tool-span.js +1 -1
  361. package/dist/src/tracing/local-trace-analysis.js +1 -1
  362. package/dist/src/vue/index.d.ts +2 -0
  363. package/dist/src/vue/index.js +39 -2
  364. package/dist/src/vue/use-eve-agent.js +1 -1
  365. package/docs/agent-config.md +2 -2
  366. package/docs/channels/chat-sdk.mdx +3 -1
  367. package/docs/channels/custom.mdx +2 -0
  368. package/docs/channels/discord.mdx +5 -4
  369. package/docs/channels/eve.mdx +65 -0
  370. package/docs/channels/linear.mdx +1 -1
  371. package/docs/channels/linq.mdx +2 -0
  372. package/docs/channels/mcp.mdx +39 -1
  373. package/docs/channels/photon.mdx +5 -0
  374. package/docs/channels/teams.mdx +4 -7
  375. package/docs/channels/twilio.mdx +1 -1
  376. package/docs/concepts/built-in-tools.md +12 -0
  377. package/docs/concepts/sessions-runs-and-streaming.md +3 -3
  378. package/docs/connections/overview.mdx +1 -1
  379. package/docs/dynamic-configuration/meta.json +1 -1
  380. package/docs/evals/judge.mdx +16 -16
  381. package/docs/evals/overview.mdx +1 -1
  382. package/docs/guides/{evaluate.md → decide.md} +35 -35
  383. package/docs/guides/dynamic-capabilities.md +1 -1
  384. package/docs/guides/frontend/overview.mdx +3 -1
  385. package/docs/guides/hooks.md +1 -1
  386. package/docs/guides/instrumentation/instrumentation.mdx +23 -22
  387. package/docs/guides/instrumentation/otel.mdx +13 -2
  388. package/docs/reference/cli.md +3 -3
  389. package/docs/reference/typescript-api.md +4 -2
  390. package/docs/tools/human-in-the-loop.md +6 -4
  391. package/docs/tools/workflows.mdx +4 -4
  392. package/package.json +11 -11
  393. package/dist/src/ai/evaluate.d.ts +0 -7
  394. package/dist/src/ai/evaluate.js +0 -1
  395. package/dist/src/client/message-task-parts.d.ts +0 -8
  396. package/dist/src/client/message-task-parts.js +0 -1
  397. package/dist/src/compiled/_chunks/workflow/dist-C3ZE62yI.js +0 -25
  398. package/dist/src/compiled/_chunks/workflow/experimental-evaluation-Dm32egEG.js +0 -5
  399. package/dist/src/harness/active-turn-id.d.ts +0 -11
  400. package/dist/src/harness/active-turn-id.js +0 -1
  401. package/dist/src/harness/approval-candidates.js +0 -1
  402. package/dist/src/harness/approval-delivery-coordinator.js +0 -1
  403. package/dist/src/harness/approved-call-callers.d.ts +0 -11
  404. package/dist/src/harness/approved-call-callers.js +0 -1
  405. package/dist/src/harness/cancelled-turn-emission.d.ts +0 -12
  406. package/dist/src/harness/cancelled-turn-emission.js +0 -1
  407. package/dist/src/harness/emission-state.d.ts +0 -36
  408. package/dist/src/harness/emission-state.js +0 -1
  409. package/dist/src/harness/held-requests.d.ts +0 -18
  410. package/dist/src/harness/held-requests.js +0 -1
  411. package/dist/src/harness/hitl/approval-input-requests.d.ts +0 -27
  412. package/dist/src/harness/hitl/approval-input-requests.js +0 -1
  413. package/dist/src/harness/hitl/pending-input-resolution.d.ts +0 -54
  414. package/dist/src/harness/hitl/pending-input-resolution.js +0 -1
  415. package/dist/src/harness/hitl/session-limit-input-requests.d.ts +0 -12
  416. package/dist/src/harness/hitl/session-limit-input-requests.js +0 -1
  417. package/dist/src/harness/input-requests.d.ts +0 -37
  418. package/dist/src/harness/input-requests.js +0 -1
  419. package/dist/src/harness/pending-input-batches.d.ts +0 -81
  420. package/dist/src/harness/pending-input-batches.js +0 -1
  421. package/dist/src/harness/session-limit-enforcement.d.ts +0 -45
  422. package/dist/src/harness/session-limit-enforcement.js +0 -1
  423. package/dist/src/harness/stale-input-responses.js +0 -3
  424. package/dist/src/harness/workflow-dispatch.d.ts +0 -30
  425. package/dist/src/harness/workflow-dispatch.js +0 -1
  426. package/dist/src/public/channels/linear/inbound-images.d.ts +0 -19
  427. package/dist/src/public/channels/linear/inbound-images.js +0 -1
  428. package/dist/src/tracing/agent-action-instrumentation.d.ts +0 -26
  429. package/dist/src/tracing/agent-action-instrumentation.js +0 -1
  430. /package/dist/src/harness/{compaction.d.ts → compaction/engine.d.ts} +0 -0
  431. /package/dist/src/harness/{compaction-prompt.d.ts → compaction/prompt.d.ts} +0 -0
  432. /package/dist/src/harness/{compaction-prompt.js → compaction/prompt.js} +0 -0
  433. /package/dist/src/harness/{session-limit-continuation.d.ts → hitl/budget-request.d.ts} +0 -0
  434. /package/dist/src/harness/{session-limit-continuation.js → hitl/budget-request.js} +0 -0
  435. /package/dist/src/harness/{approval-delivery-coordinator.d.ts → hitl/coordinator.d.ts} +0 -0
  436. /package/dist/src/harness/{model-call-error.js → model-call/errors.js} +0 -0
@@ -76,18 +76,12 @@ export type InstrumentationContentPart = {
76
76
  readonly toolName: string;
77
77
  };
78
78
  /**
79
- * What eve dispatched an action as. The model sees every action as a tool, so
80
- * this is the only thing that separates a subagent or remote-agent call from an
81
- * ordinary tool in a trace.
82
- */
83
- export type InstrumentationActionKind = "load-skill" | "remote-agent-call" | "subagent-call" | "tool-call";
84
- /**
85
- * How one action ended.
79
+ * How one tool call ended.
86
80
  *
87
81
  * `type` survives a provider that declined content, so whether the tool errored
88
82
  * is answerable without seeing what it returned.
89
83
  */
90
- export type InstrumentationActionOutput = {
84
+ export type InstrumentationToolOutput = {
91
85
  readonly type: "result";
92
86
  readonly output?: unknown;
93
87
  } | {
@@ -352,8 +346,15 @@ export interface InstrumentationModelCallFailedEvent {
352
346
  readonly scope: InstrumentationAttemptScope;
353
347
  }
354
348
  export type InstrumentationModelCallTerminalEvent = InstrumentationModelCallCompletedEvent | InstrumentationModelCallFailedEvent;
355
- export type InstrumentationToolOutput = InstrumentationActionOutput;
349
+ /** How eve runs the tool call. */
350
+ export type InstrumentationToolCallKind = "load-skill" | "remote-agent-call" | "subagent-call" | "tool-call";
356
351
  export interface InstrumentationToolCallStartedEvent {
352
+ /** Durable dispatch metadata, when this call is owned by eve's tool loop. */
353
+ readonly kind?: InstrumentationToolCallKind;
354
+ readonly parentCallId?: string;
355
+ readonly isWorkflowTool?: boolean;
356
+ readonly frameworkTool?: boolean;
357
+ readonly startedAtMs?: number;
357
358
  readonly type: "tool.call.started";
358
359
  readonly callId: string;
359
360
  readonly idempotencyKey: string;
@@ -362,6 +363,10 @@ export interface InstrumentationToolCallStartedEvent {
362
363
  readonly toolName: string;
363
364
  }
364
365
  export interface InstrumentationToolCallCompletedEvent {
366
+ readonly outcome?: InstrumentationToolCallOutcome;
367
+ readonly usage?: InstrumentationUsage;
368
+ readonly acceptedAtMs?: number;
369
+ readonly completedAtMs?: number;
365
370
  readonly type: "tool.call.completed";
366
371
  /** How long the tool's `execute` ran, in milliseconds, when the publisher measured it. */
367
372
  readonly durationMs?: number;
@@ -370,56 +375,19 @@ export interface InstrumentationToolCallCompletedEvent {
370
375
  readonly scope: InstrumentationAttemptScope;
371
376
  }
372
377
  export interface InstrumentationToolCallFailedEvent {
373
- readonly type: "tool.call.failed";
374
- /** Content. Absent unless this provider's trace policy records this direction. */
375
- readonly error?: unknown;
376
- readonly idempotencyKey: string;
377
- readonly scope: InstrumentationAttemptScope;
378
- }
379
- export type InstrumentationToolCallTerminalEvent = InstrumentationToolCallCompletedEvent | InstrumentationToolCallFailedEvent;
380
- /**
381
- * One thing the agent did on the model's behalf. `kind` is what separates a
382
- * subagent or remote-agent call from an ordinary tool; `name` is the name the
383
- * model called, which is the tool name for every kind.
384
- */
385
- export interface InstrumentationActionStartedEvent {
386
- readonly type: "action.started";
387
- /** Time the request was observed, before durable event acceptance. */
388
- readonly startedAtMs?: number;
389
- /** The calling action, when this is a nested tool call. */
390
- readonly parentCallId?: string;
391
- readonly callId: string;
392
- readonly idempotencyKey: string;
393
- /** Content. Absent unless this provider's trace policy records this direction. */
394
- readonly input?: unknown;
395
- /** Whether this action owns a durable workflow body. */
396
- readonly isWorkflowTool?: boolean;
397
- readonly kind: InstrumentationActionKind;
398
- readonly name: string;
399
- readonly scope: InstrumentationAttemptScope;
400
- }
401
- export type InstrumentationActionOutcome = "abandoned" | "cancelled" | "completed" | "failed" | "rejected";
402
- export interface InstrumentationActionCompletedEvent {
403
- readonly type: "action.completed";
404
- readonly acceptedAtMs?: number;
405
- readonly idempotencyKey: string;
406
- readonly outcome: "completed";
407
- readonly output: InstrumentationActionOutput;
408
- readonly scope: InstrumentationAttemptScope;
378
+ readonly outcome?: Exclude<InstrumentationToolCallOutcome, "completed">;
409
379
  readonly usage?: InstrumentationUsage;
410
- }
411
- export interface InstrumentationActionFailedEvent {
412
- readonly type: "action.failed";
413
380
  readonly acceptedAtMs?: number;
381
+ readonly errorCode?: string;
382
+ readonly completedAtMs?: number;
383
+ readonly type: "tool.call.failed";
414
384
  /** Content. Absent unless this provider's trace policy records this direction. */
415
385
  readonly error?: unknown;
416
- readonly errorCode?: string;
417
386
  readonly idempotencyKey: string;
418
- readonly outcome: Exclude<InstrumentationActionOutcome, "completed">;
419
387
  readonly scope: InstrumentationAttemptScope;
420
- readonly usage?: InstrumentationUsage;
421
388
  }
422
- export type InstrumentationActionTerminalEvent = InstrumentationActionCompletedEvent | InstrumentationActionFailedEvent;
389
+ export type InstrumentationToolCallTerminalEvent = InstrumentationToolCallCompletedEvent | InstrumentationToolCallFailedEvent;
390
+ export type InstrumentationToolCallOutcome = "abandoned" | "cancelled" | "completed" | "failed" | "rejected";
423
391
  /** The second argument to every handler. */
424
392
  export interface InstrumentationHandlerContext {
425
393
  /** Durable state scoped to this provider and this operation. */
@@ -462,9 +430,6 @@ export interface InstrumentationProviderDefinition {
462
430
  readonly "session.failed"?: InstrumentationEventHandler<InstrumentationSessionFailedEvent>;
463
431
  readonly "session.started"?: InstrumentationEventHandler<InstrumentationSessionStartedEvent>;
464
432
  readonly "session.waiting"?: InstrumentationEventHandler<InstrumentationSessionSettledEvent>;
465
- readonly "action.started"?: InstrumentationEventHandler<InstrumentationActionStartedEvent>;
466
- readonly "action.completed"?: InstrumentationEventHandler<InstrumentationActionCompletedEvent>;
467
- readonly "action.failed"?: InstrumentationEventHandler<InstrumentationActionFailedEvent>;
468
433
  readonly "tool.call.started"?: InstrumentationEventHandler<InstrumentationToolCallStartedEvent>;
469
434
  readonly "tool.call.completed"?: InstrumentationEventHandler<InstrumentationToolCallCompletedEvent>;
470
435
  readonly "tool.call.failed"?: InstrumentationEventHandler<InstrumentationToolCallFailedEvent>;
@@ -488,7 +453,7 @@ export interface InstrumentationDispatchGroups {
488
453
  }
489
454
  export type InstrumentationHooksInput = readonly InstrumentationProviderInput[] | InstrumentationDispatchGroups;
490
455
  /** Events that pair a start with its terminal under one `idempotencyKey`. */
491
- export type InstrumentationCorrelatedEvent = InstrumentationChannelDeliveryStartedEvent | InstrumentationChannelDeliveryTerminalEvent | InstrumentationInputRequestedEvent | InstrumentationInputResolvedEvent | InstrumentationActionStartedEvent | InstrumentationActionTerminalEvent | memory.InstrumentationMemoryOperationStartedEvent | memory.InstrumentationMemoryOperationTerminalEvent | InstrumentationModelCallStartedEvent | InstrumentationModelCallTerminalEvent | InstrumentationToolCallStartedEvent | InstrumentationToolCallTerminalEvent;
456
+ export type InstrumentationCorrelatedEvent = InstrumentationChannelDeliveryStartedEvent | InstrumentationChannelDeliveryTerminalEvent | InstrumentationInputRequestedEvent | InstrumentationInputResolvedEvent | memory.InstrumentationMemoryOperationStartedEvent | memory.InstrumentationMemoryOperationTerminalEvent | InstrumentationModelCallStartedEvent | InstrumentationModelCallTerminalEvent | InstrumentationToolCallStartedEvent | InstrumentationToolCallTerminalEvent;
492
457
  export type InstrumentationPointEvent = InstrumentationStepAttemptStartedEvent | InstrumentationStepAttemptMetadataEvent | InstrumentationStepAttemptTerminalEvent | InstrumentationSessionStartedEvent | InstrumentationSessionTransitionEvent | InstrumentationTurnStartedEvent | InstrumentationTurnTerminalEvent;
493
458
  export type InstrumentationEvent = InstrumentationCorrelatedEvent | InstrumentationPointEvent;
494
459
  /** Trusted framework operation for activating context around AI SDK execution. */
@@ -498,6 +463,13 @@ export type InstrumentationExecutionOperation = {
498
463
  readonly idempotencyKey: string;
499
464
  readonly scope: InstrumentationAttemptScope;
500
465
  readonly type: "tool.call";
466
+ readonly callId?: string;
467
+ readonly toolName?: string;
468
+ readonly input?: unknown;
469
+ readonly frameworkTool?: boolean;
470
+ readonly startedAtMs?: number;
471
+ readonly completedAtMs?: number;
472
+ readonly failed?: boolean;
501
473
  } | {
502
474
  readonly idempotencyKey: string;
503
475
  readonly scope: InstrumentationAttemptScope;
@@ -1,8 +1,9 @@
1
1
  import type { InstrumentationAttemptScope, InstrumentationHooks, InstrumentationParentLineage, InstrumentationTraceContext } from "#instrumentation/lifecycle.js";
2
- import type { ResolvedInputBatch } from "#harness/input-requests.js";
2
+ import type { ResolvedInputBatch } from "#harness/input-request-resolution.js";
3
3
  import type { HandleEventFn } from "#harness/types.js";
4
4
  import type { ChannelAudience } from "#shared/channel-audience.js";
5
5
  export interface CreateInstrumentationHandleEventInput {
6
+ readonly isFrameworkTool?: (name: string) => boolean;
6
7
  readonly traceSessionId?: string;
7
8
  readonly agentName?: string;
8
9
  readonly channelKind?: string;
@@ -1 +1 @@
1
- import{contextStorage}from"#context/container.js";import{rememberInstrumentationActionScope,rememberInstrumentationInputScope,takeInstrumentationActionScopeForCall,takeInstrumentationInputScope}from"#instrumentation/state.js";import{RuntimeActionSettlementTimesKey}from"#harness/runtime-action-settlement-state.js";import{isRuntimeWorkflowToolAction}from"#shared/action-types.js";import{actionIdempotencyKey,inputIdempotencyKey,sessionIdempotencyKey,turnIdempotencyKey}from"#instrumentation/lifecycle.js";import{instrumentChannelDelivery}from"#instrumentation/channel-delivery.js";function createInstrumentationHandleEvent(e){if(e.hooks===void 0)return e.handleEvent;if(e.handleEvent===void 0)return;let t=e.handleEvent,n=e.hooks,r=new Set,i=new Set,a=e.turnId;return async(o,s)=>{let c=Date.now();await t(o,s);let l=toLifecycleEvent(o,e,a);if(o.type===`turn.started`&&(a=o.data.turnId),o.type===`turn.cancelled`||o.type===`turn.completed`||o.type===`turn.failed`||o.type===`session.completed`||o.type===`session.failed`){let e=contextStorage.getStore();e!==void 0&&await instrumentChannelDelivery({ctx:e,error:o.type===`turn.failed`||o.type===`session.failed`?Error(o.data.message):void 0,errorCode:o.type===`turn.failed`||o.type===`session.failed`?o.data.code:void 0,hooks:n,includeTurn:o.type===`turn.cancelled`||o.type===`turn.completed`||o.type===`turn.failed`||o.type===`session.failed`,outcome:o.type===`turn.failed`||o.type===`session.failed`?`failed`:o.type===`turn.cancelled`?`cancelled`:`completed`})}l!==void 0&&await n.publish(l),o.type===`actions.requested`?await publishActionStarts(o,e,n,r,c):o.type===`action.result`?await publishActionTerminal(o,e,n):o.type===`input.requested`&&await publishInputStarts(o,e,n,i)}}async function publishInputStarts(e,t,n,r){let i=t.getAttemptScope?.();if(i===void 0)return;let a=n.capturesOutputs??n.capturesContent;for(let o of e.data.requests){let s=inputIdempotencyKey(t.sessionId,e.data.turnId,o.requestId);r.has(s)||(r.add(s),rememberInstrumentationInputScope(s,i),await n.publish(Object.freeze({action:Object.freeze({callId:o.action.callId,name:o.action.toolName}),idempotencyKey:s,kind:o.kind,request:a?Object.freeze({allowFreeform:o.allowFreeform,display:o.display,options:o.options,prompt:o.prompt}):void 0,requestId:o.requestId,scope:i,type:`input.requested`})))}}async function publishInputResolutions(e){let t=e.hooks.capturesInputs??e.hooks.capturesContent;for(let n of e.batch.inputs){let r=inputIdempotencyKey(e.sessionId,e.batch.event.turnId,n.request.requestId),i=takeInstrumentationInputScope(r);i!==void 0&&await e.hooks.publish(Object.freeze({idempotencyKey:r,kind:n.request.kind,outcome:n.outcome,requestId:n.request.requestId,response:!t||n.response===void 0?void 0:Object.freeze({optionId:n.response.optionId,text:n.response.text}),scope:i,type:`input.resolved`}))}}async function publishActionStarts(e,t,n,r,i){let a=t.getAttemptScope?.();if(a===void 0)return;let o=n.capturesInputs??n.capturesContent;for(let s of e.data.actions){let c=actionIdempotencyKey(t.sessionId,e.data.turnId,s.callId);r.has(c)||(r.add(c),rememberInstrumentationActionScope(c,a),await n.publish(Object.freeze({callId:s.callId,...s.kind===`tool-call`&&s.parentCallId!==void 0?{parentCallId:s.parentCallId}:void 0,startedAtMs:i,idempotencyKey:c,input:o?s.input:void 0,...isRuntimeWorkflowToolAction(s)?{isWorkflowTool:!0}:void 0,kind:s.kind===`workflow-tool-call`?`tool-call`:s.kind,name:actionName(s),scope:a,type:`action.started`})))}}async function publishActionTerminal(e,t,n){let r=takeInstrumentationActionScopeForCall(t.sessionId,e.data.result.callId);if(r===void 0)return;let{idempotencyKey:i,scope:a}=r,o=n.capturesOutputs??n.capturesContent;if(e.data.status===`completed`){await n.publish(Object.freeze({acceptedAtMs:contextStorage.getStore()?.get(RuntimeActionSettlementTimesKey)?.[e.data.result.callId],idempotencyKey:i,outcome:`completed`,output:Object.freeze(o?{output:e.data.result.output,type:`result`}:{type:`result`}),scope:a,type:`action.completed`,usage:actionUsage(e.data.result)}));return}let s=o?e.data.error===void 0?e.data.result.output:Object.assign(Error(e.data.error.message),{code:e.data.error.code}):void 0;await n.publish(Object.freeze({acceptedAtMs:contextStorage.getStore()?.get(RuntimeActionSettlementTimesKey)?.[e.data.result.callId],error:s,errorCode:e.data.error?.code,idempotencyKey:i,outcome:e.data.status,scope:a,type:`action.failed`,usage:actionUsage(e.data.result)}))}function actionUsage(e){if(e.kind!==`subagent-result`||e.origin!==`child`||e.usage===void 0)return;let t={inputTokenDetails:{cacheReadTokens:e.usage.cacheReadTokens,cacheWriteTokens:e.usage.cacheWriteTokens},inputTokens:e.usage.inputTokens,outputTokens:e.usage.outputTokens};return e.usage.costUsd!==void 0&&(t.costUsd=e.usage.costUsd),t}function actionName(e){return e.kind===`tool-call`||e.kind===`workflow-tool-call`?e.toolName:e.kind===`load-skill`?`load_skill`:e.name}function toLifecycleEvent(e,t,n){switch(e.type){case`session.started`:return{agentName:t.agentName,channelAudience:t.channelAudience,channelKind:t.channelKind,idempotencyKey:sessionIdempotencyKey(t.sessionId),parentLineage:t.parentLineage,parentTraceContext:t.parentTraceContext,rootSessionId:t.rootSessionId??t.sessionId,traceSessionId:t.traceSessionId,scheduleId:t.scheduleId,sessionId:t.sessionId,title:t.title,type:`session.started`};case`session.completed`:case`session.waiting`:return{idempotencyKey:sessionIdempotencyKey(t.sessionId),sessionId:t.sessionId,turnId:n,type:e.type};case`session.failed`:return{error:Error(e.data.message),idempotencyKey:sessionIdempotencyKey(t.sessionId),sessionId:t.sessionId,turnId:n,type:`session.failed`};case`turn.started`:return{idempotencyKey:turnIdempotencyKey(t.sessionId,e.data.turnId),parentLineage:t.parentLineage,parentTraceContext:t.parentTraceContext,rootSessionId:t.rootSessionId??t.sessionId,traceSessionId:t.traceSessionId,sequence:e.data.sequence,sessionId:t.sessionId,turnId:e.data.turnId,type:`turn.started`};case`turn.completed`:case`turn.cancelled`:return{idempotencyKey:turnIdempotencyKey(t.sessionId,e.data.turnId),sessionId:t.sessionId,turnId:e.data.turnId,type:e.type};case`turn.failed`:return{error:Error(e.data.message),idempotencyKey:turnIdempotencyKey(t.sessionId,e.data.turnId),sessionId:t.sessionId,turnId:e.data.turnId,type:`turn.failed`};default:return}}export{createInstrumentationHandleEvent,publishInputResolutions};
1
+ import{contextStorage}from"#context/container.js";import{rememberInstrumentationActionScope,rememberInstrumentationInputScope,takeInstrumentationActionScopeForCall,takeInstrumentationInputScope}from"#instrumentation/state.js";import{RuntimeActionSettlementTimesKey}from"#harness/runtime-action-settlement-state.js";import{isRuntimeWorkflowToolAction}from"#shared/action-types.js";import{actionIdempotencyKey,inputIdempotencyKey,sessionIdempotencyKey,toolCallIdempotencyKey,turnIdempotencyKey}from"#instrumentation/lifecycle.js";import{instrumentChannelDelivery}from"#instrumentation/channel-delivery.js";function createInstrumentationHandleEvent(e){if(e.hooks===void 0)return e.handleEvent;if(e.handleEvent===void 0)return;let t=e.handleEvent,n=e.hooks,r=new Set,i=new Set,a=e.turnId;return async(o,s)=>{let c=Date.now();await t(o,s);let l=toLifecycleEvent(o,e,a);if(o.type===`turn.started`&&(a=o.data.turnId),o.type===`turn.cancelled`||o.type===`turn.completed`||o.type===`turn.failed`||o.type===`session.completed`||o.type===`session.failed`){let e=contextStorage.getStore();e!==void 0&&await instrumentChannelDelivery({ctx:e,error:o.type===`turn.failed`||o.type===`session.failed`?Error(o.data.message):void 0,errorCode:o.type===`turn.failed`||o.type===`session.failed`?o.data.code:void 0,hooks:n,includeTurn:o.type===`turn.cancelled`||o.type===`turn.completed`||o.type===`turn.failed`||o.type===`session.failed`,outcome:o.type===`turn.failed`||o.type===`session.failed`?`failed`:o.type===`turn.cancelled`?`cancelled`:`completed`})}l!==void 0&&await n.publish(l),o.type===`actions.requested`?await publishActionStarts(o,e,n,r,c):o.type===`action.result`?await publishActionTerminal(o,e,n):o.type===`input.requested`&&await publishInputStarts(o,e,n,i)}}async function publishInputStarts(e,t,n,r){let i=t.getAttemptScope?.();if(i===void 0)return;let a=n.capturesOutputs??n.capturesContent;for(let o of e.data.requests){let s=inputIdempotencyKey(t.sessionId,e.data.turnId,o.requestId);r.has(s)||(r.add(s),rememberInstrumentationInputScope(s,i),await n.publish(Object.freeze({action:Object.freeze({callId:o.action.callId,name:o.action.toolName}),idempotencyKey:s,kind:o.kind,request:a?Object.freeze({allowFreeform:o.allowFreeform,display:o.display,options:o.options,prompt:o.prompt}):void 0,requestId:o.requestId,scope:i,type:`input.requested`})))}}async function publishInputResolutions(e){let t=e.hooks.capturesInputs??e.hooks.capturesContent;for(let n of e.batch.inputs){let r=inputIdempotencyKey(e.sessionId,e.batch.event.turnId,n.request.requestId),i=takeInstrumentationInputScope(r);i!==void 0&&await e.hooks.publish(Object.freeze({idempotencyKey:r,kind:n.request.kind,outcome:n.outcome,requestId:n.request.requestId,response:!t||n.response===void 0?void 0:Object.freeze({optionId:n.response.optionId,text:n.response.text}),scope:i,type:`input.resolved`}))}}async function publishActionStarts(e,t,n,r,i){let a=t.getAttemptScope?.();if(a===void 0)return;let o=n.capturesInputs??n.capturesContent;for(let s of e.data.actions){let c=isRuntimeWorkflowToolAction(s)||s.kind===`subagent-call`||s.kind===`remote-agent-call`,l=actionIdempotencyKey(t.sessionId,e.data.turnId,s.callId);r.has(l)||(r.add(l),rememberInstrumentationActionScope(l,a,c?{type:`tool.call.started`,callId:s.callId,toolName:actionName(s),frameworkTool:t.isFrameworkTool?.(actionName(s))===!0,scope:a,idempotencyKey:toolCallIdempotencyKey(a,s.callId,0),startedAtMs:Date.now(),input:o?s.input:void 0}:void 0),await n.publish(Object.freeze({callId:s.callId,...s.kind===`tool-call`&&s.parentCallId!==void 0?{parentCallId:s.parentCallId}:void 0,startedAtMs:i,idempotencyKey:l,input:o?s.input:void 0,...c?{isWorkflowTool:!0}:void 0,kind:s.kind===`workflow-tool-call`?`tool-call`:s.kind,toolName:actionName(s),frameworkTool:t.isFrameworkTool?.(actionName(s))===!0,scope:a,type:`tool.call.started`})))}}async function publishActionTerminal(e,t,n){let r=takeInstrumentationActionScopeForCall(t.sessionId,e.data.result.callId);if(r===void 0)return;let{idempotencyKey:i,scope:a}=r,o=n.capturesOutputs??n.capturesContent;if(e.data.status===`completed`){await n.publish(Object.freeze({acceptedAtMs:contextStorage.getStore()?.get(RuntimeActionSettlementTimesKey)?.[e.data.result.callId],idempotencyKey:i,outcome:`completed`,output:Object.freeze(o?{output:e.data.result.output,type:`result`}:{type:`result`}),scope:a,type:`tool.call.completed`,usage:actionUsage(e.data.result)}));return}let s=o?e.data.error===void 0?e.data.result.output:Object.assign(Error(e.data.error.message),{code:e.data.error.code}):void 0;await n.publish(Object.freeze({acceptedAtMs:contextStorage.getStore()?.get(RuntimeActionSettlementTimesKey)?.[e.data.result.callId],error:s,errorCode:e.data.error?.code,idempotencyKey:i,outcome:e.data.status,scope:a,type:`tool.call.failed`,usage:actionUsage(e.data.result)}))}function actionUsage(e){if(e.kind!==`subagent-result`||e.origin!==`child`||e.usage===void 0)return;let t={inputTokenDetails:{cacheReadTokens:e.usage.cacheReadTokens,cacheWriteTokens:e.usage.cacheWriteTokens},inputTokens:e.usage.inputTokens,outputTokens:e.usage.outputTokens};return e.usage.costUsd!==void 0&&(t.costUsd=e.usage.costUsd),t}function actionName(e){return e.kind===`tool-call`||e.kind===`workflow-tool-call`?e.toolName:e.kind===`load-skill`?`load_skill`:e.name}function toLifecycleEvent(e,t,n){switch(e.type){case`session.started`:return{agentName:t.agentName,channelAudience:t.channelAudience,channelKind:t.channelKind,idempotencyKey:sessionIdempotencyKey(t.sessionId),parentLineage:t.parentLineage,parentTraceContext:t.parentTraceContext,rootSessionId:t.rootSessionId??t.sessionId,traceSessionId:t.traceSessionId,scheduleId:t.scheduleId,sessionId:t.sessionId,title:t.title,type:`session.started`};case`session.completed`:case`session.waiting`:return{idempotencyKey:sessionIdempotencyKey(t.sessionId),sessionId:t.sessionId,turnId:n,type:e.type};case`session.failed`:return{error:Error(e.data.message),idempotencyKey:sessionIdempotencyKey(t.sessionId),sessionId:t.sessionId,turnId:n,type:`session.failed`};case`turn.started`:return{idempotencyKey:turnIdempotencyKey(t.sessionId,e.data.turnId),parentLineage:t.parentLineage,parentTraceContext:t.parentTraceContext,rootSessionId:t.rootSessionId??t.sessionId,traceSessionId:t.traceSessionId,sequence:e.data.sequence,sessionId:t.sessionId,turnId:e.data.turnId,type:`turn.started`};case`turn.completed`:case`turn.cancelled`:return{idempotencyKey:turnIdempotencyKey(t.sessionId,e.data.turnId),sessionId:t.sessionId,turnId:e.data.turnId,type:e.type};case`turn.failed`:return{error:Error(e.data.message),idempotencyKey:turnIdempotencyKey(t.sessionId,e.data.turnId),sessionId:t.sessionId,turnId:e.data.turnId,type:`turn.failed`};default:return}}export{createInstrumentationHandleEvent,publishInputResolutions};
@@ -7,7 +7,7 @@ import type { InstrumentationEvent } from "#instrumentation/lifecycle.js";
7
7
  import type { JsonValue } from "#shared/json.js";
8
8
  import type { TraceCapturePolicy } from "#shared/trace-policy.js";
9
9
  export type { JsonValue } from "#shared/json.js";
10
- export type { InstrumentationActionCompletedEvent, InstrumentationActionFailedEvent, InstrumentationActionKind, InstrumentationActionOutcome, InstrumentationActionOutput, InstrumentationActionStartedEvent, InstrumentationAttemptScope, InstrumentationChannelDeliveryInput, InstrumentationChannelDeliveryOutcome, InstrumentationChannelDeliveryRef, InstrumentationChannelDeliveryStartedEvent, InstrumentationChannelDeliveryTerminalEvent, InstrumentationContentPart, InstrumentationEvent, InstrumentationInputKind, InstrumentationInputOption, InstrumentationInputOutcome, InstrumentationInputRequest, InstrumentationInputRequestedEvent, InstrumentationInputResolvedEvent, InstrumentationInputResponse, InstrumentationModelCallCompletedEvent, InstrumentationModelCallFailedEvent, InstrumentationModelCallStartedEvent, InstrumentationModelRef, InstrumentationOperationRef, InstrumentationParentLineage, InstrumentationSessionFailedEvent, InstrumentationSessionSettledEvent, InstrumentationSessionStartedEvent, InstrumentationSessionTransitionEvent, InstrumentationStepAttemptMetadataEvent, InstrumentationStepAttemptCompletedEvent, InstrumentationStepAttemptFailedEvent, InstrumentationStepAttemptStartedEvent, InstrumentationStepAttemptTerminalEvent, InstrumentationToolCallCompletedEvent, InstrumentationToolCallFailedEvent, InstrumentationToolCallStartedEvent, InstrumentationToolOutput, InstrumentationTraceContext, InstrumentationTurnFailedEvent, InstrumentationTurnSettledEvent, InstrumentationTurnStartedEvent, InstrumentationTurnTerminalEvent, InstrumentationUsage, } from "#instrumentation/lifecycle.js";
10
+ export type { InstrumentationAttemptScope, InstrumentationChannelDeliveryInput, InstrumentationChannelDeliveryOutcome, InstrumentationChannelDeliveryRef, InstrumentationChannelDeliveryStartedEvent, InstrumentationChannelDeliveryTerminalEvent, InstrumentationContentPart, InstrumentationEvent, InstrumentationInputKind, InstrumentationInputOption, InstrumentationInputOutcome, InstrumentationInputRequest, InstrumentationInputRequestedEvent, InstrumentationInputResolvedEvent, InstrumentationInputResponse, InstrumentationModelCallCompletedEvent, InstrumentationModelCallFailedEvent, InstrumentationModelCallStartedEvent, InstrumentationModelRef, InstrumentationOperationRef, InstrumentationParentLineage, InstrumentationSessionFailedEvent, InstrumentationSessionSettledEvent, InstrumentationSessionStartedEvent, InstrumentationSessionTransitionEvent, InstrumentationStepAttemptMetadataEvent, InstrumentationStepAttemptCompletedEvent, InstrumentationStepAttemptFailedEvent, InstrumentationStepAttemptStartedEvent, InstrumentationStepAttemptTerminalEvent, InstrumentationToolCallCompletedEvent, InstrumentationToolCallFailedEvent, InstrumentationToolCallStartedEvent, InstrumentationToolCallKind, InstrumentationToolCallOutcome, InstrumentationToolOutput, InstrumentationTraceContext, InstrumentationTurnFailedEvent, InstrumentationTurnSettledEvent, InstrumentationTurnStartedEvent, InstrumentationTurnTerminalEvent, InstrumentationUsage, } from "#instrumentation/lifecycle.js";
11
11
  export type { InstrumentationMemoryOperation, InstrumentationMemoryOperationCompletedEvent, InstrumentationMemoryOperationEvent, InstrumentationMemoryOperationFailedEvent, InstrumentationMemoryOperationName, InstrumentationMemoryOperationStartedEvent, InstrumentationMemoryOperationTerminalEvent, InstrumentationMemoryRecord, } from "#instrumentation/memory.js";
12
12
  export type { TraceCaptureContext, TraceCapturePolicy, TracePolicyDecision, } from "#shared/trace-policy.js";
13
13
  /**
@@ -1,14 +1,13 @@
1
1
  import type { ModelMessage, SystemModelMessage } from "ai";
2
2
  import type { ChannelInstrumentationProjection, SessionAuthContext, SessionParent } from "#channel/types.js";
3
3
  import type { AlsContext } from "#context/container.js";
4
- import type { HarnessEmissionState } from "#harness/emission.js";
4
+ import type { TurnPosition } from "#harness/session-machine/view.js";
5
5
  import type { HarnessSession } from "#harness/types.js";
6
6
  import type { RuntimeContextResolver } from "#tracing/otel-declaration.js";
7
7
  export interface BuildTelemetryRuntimeContextInput {
8
8
  readonly capturesContent: boolean;
9
9
  readonly context?: InstrumentationRuntimeContextSnapshot;
10
- readonly eveVersion: string;
11
- readonly emissionState: HarnessEmissionState;
10
+ readonly emissionState: TurnPosition;
12
11
  readonly environment: string;
13
12
  readonly modelInput: {
14
13
  readonly instructions: string | SystemModelMessage | undefined;
@@ -1 +1 @@
1
- import{createLogger,formatError}from"#internal/logging.js";import{normalizeInstrumentationChannelKind,resolveInstrumentationProjection}from"#internal/instrumentation.js";import{contextStorage}from"#context/container.js";import{AuthKey,ChannelInstrumentationKey,InitiatorAuthKey,ParentSessionKey}from"#context/keys.js";import{parseJsonValue}from"#shared/json.js";const log=createLogger(`harness.instrumentation-runtime-context`);function snapshotInstrumentationRuntimeContext(e){let t=e?.get(AuthKey)??null;return{channel:snapshotForInstrumentation(e?.get(ChannelInstrumentationKey),`channel.instrumentation`),currentAuth:snapshotForInstrumentation(t,`session.auth.current`)??null,initiatorAuth:snapshotForInstrumentation(e?.get(InitiatorAuthKey)??t,`session.auth.initiator`)??null,parent:snapshotForInstrumentation(e?.get(ParentSessionKey),`session.parent`)}}function buildTelemetryRuntimeContext(e){if(!(e.providerResolvers!==void 0&&e.providerResolvers.length>0))return;let t=resolveProviderRuntimeContext(e),n=(e.context??snapshotInstrumentationRuntimeContext(contextStorage.getStore())).channel;return{...t,"eve.channel.kind":normalizeInstrumentationChannelKind(n?.kind),"eve.environment":e.environment,"eve.session.id":e.session.sessionId,"eve.step.index":String(e.emissionState.stepIndex),"eve.turn.id":e.emissionState.turnId,"eve.turn.sequence":String(e.emissionState.sequence),"eve.version":e.eveVersion}}function buildInstrumentationStepStartedInput(e){let t=e.context??snapshotInstrumentationRuntimeContext(contextStorage.getStore()),n=t.channel;return{channel:{kind:normalizeInstrumentationChannelKind(n?.kind),metadata:snapshotForInstrumentation(n?.metadata,`channel.metadata`)??{}},modelInput:e.capturesContent?snapshotForInstrumentation(e.modelInput,`modelInput`)??{instructions:void 0,messages:[]}:{instructions:void 0,messages:[]},session:{auth:projectSessionAuth(t),id:e.session.sessionId,parent:t.parent},step:{index:e.emissionState.stepIndex},turn:{id:e.emissionState.turnId,sequence:e.emissionState.sequence}}}function filterAuthoredRuntimeContext(e,t){let n={};for(let[r,i]of Object.entries(e)){if(r.startsWith(`eve.`)){log.warn(`ignoring reserved instrumentation runtime context key`,{key:r,source:t});continue}n[r]=i}return Object.keys(n).length>0?n:void 0}function resolveProviderRuntimeContext(e){let t=e.providerResolvers;if(t===void 0||t.length===0)return;let n={},r=!1;for(let i of t){let t=`provider.runtimeContext`,a=resolveInstrumentationProjection({invoke:()=>{let t=buildInstrumentationStepStartedInput(e);return i(t)},log,source:t});if(a===void 0)continue;let o=filterAuthoredRuntimeContext(a,t);o!==void 0&&(Object.assign(n,o),r=!0)}return r?n:void 0}function projectSessionAuth(e){return{current:e.currentAuth,initiator:e.initiatorAuth}}function snapshotForInstrumentation(e,t){if(e!==void 0)try{return parseJsonValue(e)}catch(e){log.warn(`dropping non-serializable instrumentation snapshot`,{error:formatError(e),source:t});return}}export{buildTelemetryRuntimeContext,snapshotInstrumentationRuntimeContext};
1
+ import{createLogger,formatError}from"#internal/logging.js";import{normalizeInstrumentationChannelKind,resolveInstrumentationProjection}from"#internal/instrumentation.js";import{contextStorage}from"#context/container.js";import{AuthKey,ChannelInstrumentationKey,InitiatorAuthKey,ParentSessionKey}from"#context/keys.js";import{parseJsonValue}from"#shared/json.js";const log=createLogger(`harness.instrumentation-runtime-context`);function snapshotInstrumentationRuntimeContext(e){let t=e?.get(AuthKey)??null;return{channel:snapshotForInstrumentation(e?.get(ChannelInstrumentationKey),`channel.instrumentation`),currentAuth:snapshotForInstrumentation(t,`session.auth.current`)??null,initiatorAuth:snapshotForInstrumentation(e?.get(InitiatorAuthKey)??t,`session.auth.initiator`)??null,parent:snapshotForInstrumentation(e?.get(ParentSessionKey),`session.parent`)}}function buildTelemetryRuntimeContext(e){return e.providerResolvers!==void 0&&e.providerResolvers.length>0?{...resolveProviderRuntimeContext(e),"eve.environment":e.environment}:void 0}function buildInstrumentationStepStartedInput(e){let t=e.context??snapshotInstrumentationRuntimeContext(contextStorage.getStore()),n=t.channel;return{channel:{kind:normalizeInstrumentationChannelKind(n?.kind),metadata:snapshotForInstrumentation(n?.metadata,`channel.metadata`)??{}},modelInput:e.capturesContent?snapshotForInstrumentation(e.modelInput,`modelInput`)??{instructions:void 0,messages:[]}:{instructions:void 0,messages:[]},session:{auth:projectSessionAuth(t),id:e.session.sessionId,parent:t.parent},step:{index:e.emissionState.stepIndex},turn:{id:e.emissionState.turnId,sequence:e.emissionState.sequence}}}function filterAuthoredRuntimeContext(e,t){let n={};for(let[r,i]of Object.entries(e)){if(r.startsWith(`eve.`)){log.warn(`ignoring reserved instrumentation runtime context key`,{key:r,source:t});continue}n[r]=i}return Object.keys(n).length>0?n:void 0}function resolveProviderRuntimeContext(e){let t=e.providerResolvers;if(t===void 0||t.length===0)return;let n={},r=!1;for(let i of t){let t=`provider.runtimeContext`,a=resolveInstrumentationProjection({invoke:()=>{let t=buildInstrumentationStepStartedInput(e);return i(t)},log,source:t});if(a===void 0)continue;let o=filterAuthoredRuntimeContext(a,t);o!==void 0&&(Object.assign(n,o),r=!0)}return r?n:void 0}function projectSessionAuth(e){return{current:e.currentAuth,initiator:e.initiatorAuth}}function snapshotForInstrumentation(e,t){if(e!==void 0)try{return parseJsonValue(e)}catch(e){log.warn(`dropping non-serializable instrumentation snapshot`,{error:formatError(e),source:t});return}}export{buildTelemetryRuntimeContext,snapshotInstrumentationRuntimeContext};
@@ -2,7 +2,7 @@ import type { TelemetryOptions } from "ai";
2
2
  import type { InstrumentationAttemptScope, InstrumentationContextRunner, InstrumentationHooks, InstrumentationSessionStartedEvent, InstrumentationTraceContext, InstrumentationTraceSeed, InstrumentationTurnStartedEvent } from "#instrumentation/lifecycle.js";
3
3
  import { type BuildTelemetryRuntimeContextInput } from "#instrumentation/runtime-context.js";
4
4
  import { type CreateInstrumentationHandleEventInput } from "#instrumentation/native-events.js";
5
- import type { ResolvedInputBatch } from "#harness/input-requests.js";
5
+ import type { ResolvedInputBatch } from "#harness/input-request-resolution.js";
6
6
  import type { HandleEventFn } from "#harness/types.js";
7
7
  import { type ChannelDeliveryStartInstrumentation, type ChannelDeliveryTerminalInstrumentation } from "#instrumentation/channel-delivery.js";
8
8
  import { type PrepareTurnTraceContextInput } from "#instrumentation/prepare-trace-context.js";
@@ -23,6 +23,7 @@ interface InstrumentedStepSession {
23
23
  export interface InstrumentationStepScope<TSession> {
24
24
  readonly createHandleEvent: (input: Omit<CreateInstrumentationHandleEventInput, "agentName" | "channelAudience" | "channelKind" | "hooks" | "parentLineage" | "parentTraceContext" | "rootSessionId" | "traceSessionId" | "sessionId">) => HandleEventFn | undefined;
25
25
  readonly prepareAttempt: (input: {
26
+ readonly isFrameworkTool?: (name: string) => boolean;
26
27
  readonly attemptIndex: number;
27
28
  readonly runtimeContext?: Readonly<Record<string, unknown>>;
28
29
  readonly stepIndex: number;
@@ -80,6 +81,15 @@ export interface SessionInstrumentation {
80
81
  }, execute: (scope: InstrumentationStepScope<TSession>) => Promise<TResult>) => Promise<TResult>;
81
82
  }
82
83
  export interface ExecutionInstrumentation {
84
+ readonly instrumentTaskToolCall: (input: {
85
+ readonly callId: string;
86
+ readonly toolName: "task_wait" | "task_cancel";
87
+ readonly startedAtMs: number;
88
+ readonly completedAtMs: number;
89
+ readonly input: unknown;
90
+ readonly output?: unknown;
91
+ readonly failed?: boolean;
92
+ }) => Promise<void>;
83
93
  readonly createHandleEvent: (input: {
84
94
  readonly handleEvent?: HandleEventFn;
85
95
  readonly turnId?: string;
@@ -1 +1 @@
1
- import{ensureAiSdkWarningLogger}from"#instrumentation/ai-sdk-warnings.js";import{recordErrorOnSpan}from"#internal/logging.js";import{applyLiveDeliveryAudienceCeiling}from"#shared/forwarded-trace-policy.js";import{contextStorage}from"#context/container.js";import{ConversationIdKey,ParentSessionKey}from"#context/keys.js";import{createMemoryInstrumentation}from"#instrumentation/memory.js";import{readConversationId}from"#shared/conversation-identity.js";import{readSessionTraceDecision}from"#tracing/agent-trace-context-store.js";import{resolveTraceRootSessionId}from"#shared/trace-root.js";import{shouldCaptureInstrumentationContent}from"#shared/instrumentation-content.js";import{isSampledTrace,resolveTracePolicy,resolveTracePolicyDecision}from"#tracing/sampled-trace.js";import{context,trace}from"#compiled/@opentelemetry/api/index.js";import{attemptIdempotencyKey}from"#instrumentation/lifecycle.js";import{instrumentChannelDelivery}from"#instrumentation/channel-delivery.js";import{buildTelemetryRuntimeContext,snapshotInstrumentationRuntimeContext}from"#instrumentation/runtime-context.js";import{ensureOtelIntegration,getRegisteredTelemetryIntegrations}from"#instrumentation/ai-sdk-telemetry.js";import{createAiSdkHookBridge}from"#instrumentation/ai-sdk-hook-bridge.js";import{createInstrumentationHandleEvent,publishInputResolutions}from"#instrumentation/native-events.js";import{prepareTurnTraceContext}from"#instrumentation/prepare-trace-context.js";import"#tracing/agent-span-id-generator.js";import{withErrorContent}from"#tracing/error-content-context.js";import{readInstrumentationSessionContext}from"#instrumentation/session-context.js";import{readInstrumentationDecision}from"#shared/instrumentation-decision.js";import{getInstrumentationRuntime,registerInstrumentationRuntime}from"#instrumentation/runtime-global.js";import{initializeSessionInstrumentation}from"#instrumentation/session-init.js";const TURN_TRACE_STATE_KEY=`eve.harness.turnTrace`;function bindInstrumentationRuntime(e,t,n){let r={...n,traceSessionId:resolveTraceRootSessionId(t,n.sessionId)};if(readConversationId(t.get(ConversationIdKey))===void 0&&t.set(ConversationIdKey,t.get(ParentSessionKey)?.rootSessionId??r.rootSessionId),e===void 0)return;let i=e.hooks,a=r.traceSessionId,readSessionContext=()=>{let e=readInstrumentationSessionContext(contextStorage.getStore()??t);return{...e,rootSessionId:e.parent?.rootSessionId??r.rootSessionId,traceSessionId:a}},bindHooks=e=>i.forTrace?.({agentName:r.agentName,...e.conversation})??i,captureExecutionRuntime=()=>{let t=e.otelSettings,n=e.ownsAgentSpans===!0;return t!==void 0&&!n&&ensureOtelIntegration(),{ownsAgentSpans:n,otelSettings:t,runtimeContextResolvers:e.runtimeContextResolvers,tracer:t===void 0?void 0:trace.getTracer(`eve`)}},preparePreamble=(t,n)=>prepareTurnTraceContext({...t,instrumentation:e,principals:n.principals,session:{agentName:r.agentName,channelAudience:n.conversation.audience,channelKind:n.conversation.channel.kind,channelType:n.instrumentation?.channelType,parentLineage:n.parentLineage,parentTraceContext:n.parentTraceContext,rootSessionId:n.rootSessionId,traceSessionId:n.traceSessionId,scheduleId:n.scheduleId,sessionId:r.sessionId,title:n.title,traceSeed:n.traceSeed}}),o=e.memoryOperations===!0?createMemoryInstrumentation({resolveContext:()=>{let e=readSessionContext();return{hooks:bindHooks(e),rootSessionId:e.rootSessionId,traceSessionId:e.traceSessionId}},runInContext:e.runInContext,sessionId:r.sessionId}):void 0;return{createHandleEvent:e=>{let t=readSessionContext();return createInstrumentationHandleEvent({agentName:r.agentName,channelKind:t.conversation.channel.kind,handleEvent:e.handleEvent,hooks:bindHooks(t),rootSessionId:t.rootSessionId,traceSessionId:t.traceSessionId,parentLineage:t.parentLineage,parentTraceContext:t.parentTraceContext,scheduleId:t.scheduleId,sessionId:r.sessionId,title:t.title,turnId:e.turnId})},flush:e.forceFlush,instrumentChannelDelivery:e=>{let t=readSessionContext();return`delivery`in e?instrumentChannelDelivery({...e,hooks:i,policyAgentName:r.agentName,traceSessionId:t.traceSessionId}):instrumentChannelDelivery({...e,hooks:i})},memory:o,prepareExecution:()=>{let t=captureExecutionRuntime();return{installAiSdkWarningLogger:ensureAiSdkWarningLogger,runStep:async(n,i)=>{let a=readSessionContext(),o=bindHooks(a),s=t.otelSettings,c=resolveStepInstrumentationDecision(s,r.agentName,a.conversation,a.traceSeed,readSessionTraceDecision(a.context,r.sessionId)),l=t.tracer,u={"eve.environment":n.environment,"eve.session.id":n.session.sessionId,"eve.version":n.eveVersion},d=s?.functionId??r.agentName;d&&(u[`ai.telemetry.functionId`]=d);let f=l!==void 0&&!t.ownsAgentSpans&&c?.action!==`drop`&&n.hasInput?l.startSpan(`ai.eve.turn`,{attributes:u}):void 0,p=f?.spanContext(),m=p===void 0?n.session:{...n.session,state:{...n.session.state,[TURN_TRACE_STATE_KEY]:{spanId:p.spanId,traceFlags:p.traceFlags,traceId:p.traceId}}},h=f===void 0?void 0:trace.setSpan(context.active(),f);if(h===void 0&&l!==void 0){let e=n.session.state?.[TURN_TRACE_STATE_KEY];e!==void 0&&(h=trace.setSpan(context.active(),trace.wrapSpanContext({...e,isRemote:!0})))}let g=readSessionContext(),_=snapshotInstrumentationRuntimeContext(g.context),v=g.conversation,y=v.audience,b=shouldCaptureInstrumentationContent(v),x=c===void 0?c:applyLiveDeliveryAudienceCeiling(c,y,g.forwardedTracePolicy,v.environment),S=x===void 0?b:x.action===`record`&&x.recordInputs,C=c?.action===`drop`,w={recordInputs:!C&&(x?.action===`record`?x.recordInputs:b)&&(s?.recordInputs??!1),recordOutputs:!C&&(x?.action===`record`?x.recordOutputs:b)&&(s?.recordOutputs??!1)},telemetry=e=>{if(s===void 0&&e.bridgeIntegration===void 0)return;let n={};for(let t of Object.keys(e.runtimeContext??{}))n[t]=!0;let i=s!==void 0&&!(w.recordInputs&&w.recordOutputs),integrations=()=>getRegisteredTelemetryIntegrations({...t.ownsAgentSpans?{excludeEveOtelIntegration:!0}:void 0,sanitizeEveOtelErrors:i});return{functionId:s?.functionId??r.agentName,includeRuntimeContext:n,integrations:e.bridgeIntegration===void 0?i?[...integrations()]:void 0:[e.bridgeIntegration,...integrations()],isEnabled:!0,recordInputs:w.recordInputs,recordOutputs:w.recordOutputs}},run=()=>i({createHandleEvent:e=>createInstrumentationHandleEvent({...e,agentName:r.agentName,channelAudience:y,channelKind:v.channel.kind,hooks:o,parentLineage:g.parentLineage,parentTraceContext:g.parentTraceContext,rootSessionId:g.rootSessionId,traceSessionId:g.traceSessionId,scheduleId:g.scheduleId,sessionId:r.sessionId,title:g.title}),prepareAttempt:t=>{let n={attemptId:`${r.sessionId}:${t.turnId}:${t.stepIndex}:${t.attemptIndex}`,attemptIndex:t.attemptIndex,channelAudience:y,functionId:s?.functionId??r.agentName,rootSessionId:g.rootSessionId,traceSessionId:g.traceSessionId,sessionId:r.sessionId,stepIndex:t.stepIndex,turnId:t.turnId},i=createAiSdkHookBridge(n,o,e.runInContext,t.runtimeContext);return{complete:()=>o.publish({idempotencyKey:attemptIdempotencyKey(n),scope:n,type:`step.attempt.completed`}),fail:e=>o.publish({error:e,idempotencyKey:attemptIdempotencyKey(n),scope:n,type:`step.attempt.failed`}),scope:n,telemetry:telemetry({bridgeIntegration:i,runtimeContext:t.runtimeContext})}},preparePreamble:e=>preparePreamble(e,g),publishInputResolutions:e=>publishInputResolutions({...e,hooks:o}),recordError:e=>{f!==void 0&&recordErrorOnSpan(f,e)},resolveRuntimeContext:e=>buildTelemetryRuntimeContext({...e,capturesContent:S,context:_,providerResolvers:t.runtimeContextResolvers}),session:m,setTurnId:e=>f?.setAttribute(`eve.turn.id`,e),telemetry:()=>telemetry({}),traceContext:p===void 0||!isValidSpanContext(p)?void 0:{spanId:p.spanId,traceFlags:p.traceFlags,traceId:p.traceId}});try{return await context.with(withErrorContent(h??context.active(),w.recordOutputs),run)}finally{f?.end(),f=void 0}}}},preparePreamble:e=>preparePreamble(e,readSessionContext())}}function bindSessionInstrumentation(e){let t={agentName:e.agentName,rootSessionId:e.rootSessionId,traceSessionId:resolveTraceRootSessionId(e.ctx,e.sessionId),sessionId:e.sessionId};return bindInstrumentationRuntime(getInstrumentationRuntime(),e.ctx,t)}function resolveStepInstrumentationDecision(e,t,n,r,i){if(e!==void 0)return r?.decision===void 0?i===void 0?r===void 0?resolveTracePolicy(e.tracePolicy,{agentName:t,...n}):resolveTracePolicyDecision(isSampledTrace(r),n):i:readInstrumentationDecision(r.decision)}function isValidSpanContext(e){return/^[0-9a-f]{32}$/u.test(e.traceId)&&e.traceId!==`00000000000000000000000000000000`&&/^[0-9a-f]{16}$/u.test(e.spanId)&&e.spanId!==`0000000000000000`}export{bindInstrumentationRuntime,bindSessionInstrumentation,getInstrumentationRuntime,initializeSessionInstrumentation,registerInstrumentationRuntime};
1
+ import{ensureAiSdkWarningLogger}from"#instrumentation/ai-sdk-warnings.js";import{recordErrorOnSpan}from"#internal/logging.js";import{applyLiveDeliveryAudienceCeiling}from"#shared/forwarded-trace-policy.js";import{contextStorage}from"#context/container.js";import{ConversationIdKey,ParentSessionKey}from"#context/keys.js";import{createMemoryInstrumentation}from"#instrumentation/memory.js";import{readConversationId}from"#shared/conversation-identity.js";import{findInstrumentationActionScopeForCall}from"#instrumentation/state.js";import{readSessionTraceDecision}from"#tracing/agent-trace-context-store.js";import{resolveTraceRootSessionId}from"#shared/trace-root.js";import{shouldCaptureInstrumentationContent}from"#shared/instrumentation-content.js";import{isSampledTrace,resolveTracePolicy,resolveTracePolicyDecision}from"#tracing/sampled-trace.js";import{context,trace}from"#compiled/@opentelemetry/api/index.js";import{attemptIdempotencyKey,toolCallIdempotencyKey}from"#instrumentation/lifecycle.js";import{instrumentChannelDelivery}from"#instrumentation/channel-delivery.js";import{buildTelemetryRuntimeContext,snapshotInstrumentationRuntimeContext}from"#instrumentation/runtime-context.js";import{ensureOtelIntegration,getRegisteredTelemetryIntegrations}from"#instrumentation/ai-sdk-telemetry.js";import{createAiSdkHookBridge}from"#instrumentation/ai-sdk-hook-bridge.js";import{createInstrumentationHandleEvent,publishInputResolutions}from"#instrumentation/native-events.js";import{prepareTurnTraceContext}from"#instrumentation/prepare-trace-context.js";import"#tracing/agent-span-id-generator.js";import{withErrorContent}from"#tracing/error-content-context.js";import{readInstrumentationSessionContext}from"#instrumentation/session-context.js";import{readInstrumentationDecision}from"#shared/instrumentation-decision.js";import{getInstrumentationRuntime,registerInstrumentationRuntime}from"#instrumentation/runtime-global.js";import{initializeSessionInstrumentation}from"#instrumentation/session-init.js";const TURN_TRACE_STATE_KEY=`eve.harness.turnTrace`;function bindInstrumentationRuntime(e,t,n){let r={...n,traceSessionId:resolveTraceRootSessionId(t,n.sessionId)};if(readConversationId(t.get(ConversationIdKey))===void 0&&t.set(ConversationIdKey,t.get(ParentSessionKey)?.rootSessionId??r.rootSessionId),e===void 0)return;let i=e.hooks,a=r.traceSessionId,readSessionContext=()=>{let e=readInstrumentationSessionContext(contextStorage.getStore()??t);return{...e,rootSessionId:e.parent?.rootSessionId??r.rootSessionId,traceSessionId:a}},bindHooks=e=>i.forTrace?.({agentName:r.agentName,...e.conversation})??i,captureExecutionRuntime=()=>{let t=e.otelSettings,n=e.ownsAgentSpans===!0;return t!==void 0&&!n&&ensureOtelIntegration(),{ownsAgentSpans:n,otelSettings:t,runtimeContextResolvers:e.runtimeContextResolvers,tracer:t===void 0?void 0:trace.getTracer(`eve`)}},preparePreamble=(t,n)=>prepareTurnTraceContext({...t,instrumentation:e,principals:n.principals,session:{agentName:r.agentName,channelAudience:n.conversation.audience,channelKind:n.conversation.channel.kind,channelType:n.instrumentation?.channelType,parentLineage:n.parentLineage,parentTraceContext:n.parentTraceContext,rootSessionId:n.rootSessionId,traceSessionId:n.traceSessionId,scheduleId:n.scheduleId,sessionId:r.sessionId,title:n.title,traceSeed:n.traceSeed}}),o=e.memoryOperations===!0?createMemoryInstrumentation({resolveContext:()=>{let e=readSessionContext();return{hooks:bindHooks(e),rootSessionId:e.rootSessionId,traceSessionId:e.traceSessionId}},runInContext:e.runInContext,sessionId:r.sessionId}):void 0;return{async instrumentTaskToolCall(t){let n=findInstrumentationActionScopeForCall(r.sessionId,t.callId);if(n===void 0)return;let i=bindHooks(readSessionContext()),a=n.scope,o=toolCallIdempotencyKey(a,t.callId,0);await e.runInContext({type:`tool.call`,callId:t.callId,idempotencyKey:o,scope:a,toolName:t.toolName,startedAtMs:t.startedAtMs,frameworkTool:!0,input:i.capturesInputs??i.capturesContent?t.input:void 0,completedAtMs:t.completedAtMs,failed:t.failed},()=>Promise.resolve())},createHandleEvent:e=>{let t=readSessionContext();return createInstrumentationHandleEvent({agentName:r.agentName,channelKind:t.conversation.channel.kind,handleEvent:e.handleEvent,hooks:bindHooks(t),rootSessionId:t.rootSessionId,traceSessionId:t.traceSessionId,parentLineage:t.parentLineage,parentTraceContext:t.parentTraceContext,scheduleId:t.scheduleId,sessionId:r.sessionId,title:t.title,turnId:e.turnId})},flush:e.forceFlush,instrumentChannelDelivery:e=>{let t=readSessionContext();return`delivery`in e?instrumentChannelDelivery({...e,hooks:i,policyAgentName:r.agentName,traceSessionId:t.traceSessionId}):instrumentChannelDelivery({...e,hooks:i})},memory:o,prepareExecution:()=>{let t=captureExecutionRuntime();return{installAiSdkWarningLogger:ensureAiSdkWarningLogger,runStep:async(n,i)=>{let a=readSessionContext(),o=bindHooks(a),s=t.otelSettings,c=resolveStepInstrumentationDecision(s,r.agentName,a.conversation,a.traceSeed,readSessionTraceDecision(a.context,r.sessionId)),l=t.tracer,u={"eve.environment":n.environment,"eve.session.id":n.session.sessionId,"eve.version":n.eveVersion},d=s?.functionId??r.agentName;d&&(u[`ai.telemetry.functionId`]=d);let f=l!==void 0&&!t.ownsAgentSpans&&c?.action!==`drop`&&n.hasInput?l.startSpan(`ai.eve.turn`,{attributes:u}):void 0,p=f?.spanContext(),m=p===void 0?n.session:{...n.session,state:{...n.session.state,[TURN_TRACE_STATE_KEY]:{spanId:p.spanId,traceFlags:p.traceFlags,traceId:p.traceId}}},h=f===void 0?void 0:trace.setSpan(context.active(),f);if(h===void 0&&l!==void 0){let e=n.session.state?.[TURN_TRACE_STATE_KEY];e!==void 0&&(h=trace.setSpan(context.active(),trace.wrapSpanContext({...e,isRemote:!0})))}let g=readSessionContext(),_=snapshotInstrumentationRuntimeContext(g.context),v=g.conversation,y=v.audience,b=shouldCaptureInstrumentationContent(v),x=c===void 0?c:applyLiveDeliveryAudienceCeiling(c,y,g.forwardedTracePolicy,v.environment),S=x===void 0?b:x.action===`record`&&x.recordInputs,C=c?.action===`drop`,w={recordInputs:!C&&(x?.action===`record`?x.recordInputs:b)&&(s?.recordInputs??!1),recordOutputs:!C&&(x?.action===`record`?x.recordOutputs:b)&&(s?.recordOutputs??!1)},telemetry=e=>{if(s===void 0&&e.bridgeIntegration===void 0)return;let n={};for(let t of Object.keys(e.runtimeContext??{}))n[t]=!0;let i=s!==void 0&&!(w.recordInputs&&w.recordOutputs),integrations=()=>getRegisteredTelemetryIntegrations({...t.ownsAgentSpans?{excludeEveOtelIntegration:!0}:void 0,sanitizeEveOtelErrors:i});return{functionId:s?.functionId??r.agentName,includeRuntimeContext:n,integrations:e.bridgeIntegration===void 0?i?[...integrations()]:void 0:[e.bridgeIntegration,...integrations()],isEnabled:!0,recordInputs:w.recordInputs,recordOutputs:w.recordOutputs}},run=()=>i({createHandleEvent:e=>createInstrumentationHandleEvent({...e,agentName:r.agentName,channelAudience:y,channelKind:v.channel.kind,hooks:o,parentLineage:g.parentLineage,parentTraceContext:g.parentTraceContext,rootSessionId:g.rootSessionId,traceSessionId:g.traceSessionId,scheduleId:g.scheduleId,sessionId:r.sessionId,title:g.title}),prepareAttempt:t=>{let n={attemptId:`${r.sessionId}:${t.turnId}:${t.stepIndex}:${t.attemptIndex}`,attemptIndex:t.attemptIndex,channelAudience:y,functionId:s?.functionId??r.agentName,rootSessionId:g.rootSessionId,traceSessionId:g.traceSessionId,sessionId:r.sessionId,stepIndex:t.stepIndex,turnId:t.turnId},i=createAiSdkHookBridge(n,o,e.runInContext,t.runtimeContext,t.isFrameworkTool);return{complete:()=>o.publish({idempotencyKey:attemptIdempotencyKey(n),scope:n,type:`step.attempt.completed`}),fail:e=>o.publish({error:e,idempotencyKey:attemptIdempotencyKey(n),scope:n,type:`step.attempt.failed`}),scope:n,telemetry:telemetry({bridgeIntegration:i,runtimeContext:t.runtimeContext})}},preparePreamble:e=>preparePreamble(e,g),publishInputResolutions:e=>publishInputResolutions({...e,hooks:o}),recordError:e=>{f!==void 0&&recordErrorOnSpan(f,e)},resolveRuntimeContext:e=>buildTelemetryRuntimeContext({...e,capturesContent:S,context:_,providerResolvers:t.runtimeContextResolvers}),session:m,setTurnId:e=>f?.setAttribute(`eve.turn.id`,e),telemetry:()=>telemetry({}),traceContext:p===void 0||!isValidSpanContext(p)?void 0:{spanId:p.spanId,traceFlags:p.traceFlags,traceId:p.traceId}});try{return await context.with(withErrorContent(h??context.active(),w.recordOutputs),run)}finally{f?.end(),f=void 0}}}},preparePreamble:e=>preparePreamble(e,readSessionContext())}}function bindSessionInstrumentation(e){let t={agentName:e.agentName,rootSessionId:e.rootSessionId,traceSessionId:resolveTraceRootSessionId(e.ctx,e.sessionId),sessionId:e.sessionId};return bindInstrumentationRuntime(getInstrumentationRuntime(),e.ctx,t)}function resolveStepInstrumentationDecision(e,t,n,r,i){if(e!==void 0)return r?.decision===void 0?i===void 0?r===void 0?resolveTracePolicy(e.tracePolicy,{agentName:t,...n}):resolveTracePolicyDecision(isSampledTrace(r),n):i:readInstrumentationDecision(r.decision)}function isValidSpanContext(e){return/^[0-9a-f]{32}$/u.test(e.traceId)&&e.traceId!==`00000000000000000000000000000000`&&/^[0-9a-f]{16}$/u.test(e.spanId)&&e.spanId!==`0000000000000000`}export{bindInstrumentationRuntime,bindSessionInstrumentation,getInstrumentationRuntime,initializeSessionInstrumentation,registerInstrumentationRuntime};
@@ -6,6 +6,10 @@ export interface InstrumentationStateOwner {
6
6
  readonly sessionId?: string;
7
7
  readonly turnId?: string;
8
8
  }
9
+ interface InstrumentationActionState {
10
+ readonly toolCall?: import("#instrumentation/lifecycle.js").InstrumentationToolCallStartedEvent;
11
+ readonly scope: InstrumentationAttemptScope;
12
+ }
9
13
  /** One provider's view of its own state for one operation. */
10
14
  export interface InstrumentationStateSlot {
11
15
  get(): JsonValue | undefined;
@@ -33,12 +37,13 @@ export declare function releaseAllInstrumentationState(idempotencyKey: string):
33
37
  export declare function releaseAllInstrumentationAttemptState(attemptId: string): void;
34
38
  export declare function releaseAllInstrumentationTurnState(sessionId: string, turnId?: string): void;
35
39
  /** Remembers where a durable runtime action originated. */
36
- export declare function rememberInstrumentationActionScope(idempotencyKey: string, scope: InstrumentationAttemptScope): void;
40
+ export declare function rememberInstrumentationActionScope(idempotencyKey: string, scope: InstrumentationAttemptScope, toolCall?: InstrumentationActionState["toolCall"]): void;
37
41
  /** Remembers where a durable input request originated. */
38
42
  export declare function rememberInstrumentationInputScope(idempotencyKey: string, scope: InstrumentationAttemptScope): void;
39
43
  /** Reads and releases one durable input request's originating scope. */
40
44
  export declare function takeInstrumentationInputScope(idempotencyKey: string): InstrumentationAttemptScope | undefined;
41
45
  interface InstrumentationActionCorrelation {
46
+ readonly toolCall?: InstrumentationActionState["toolCall"];
42
47
  readonly idempotencyKey: string;
43
48
  readonly scope: InstrumentationAttemptScope;
44
49
  }
@@ -1 +1 @@
1
- import{contextStorage,loadContext}from"#context/container.js";import{parseJsonValue}from"#shared/json.js";import{ContextKey}from"#context/key.js";import{SERIALIZED_INSTRUMENTATION_STATE_KEYS,preserveSerializedInstrumentationState}from"#shared/serialized-observability-state.js";const InstrumentationStateKey=new ContextKey(SERIALIZED_INSTRUMENTATION_STATE_KEYS.providerState,{codec:{deserialize:deserializeState,serialize:e=>e}}),InstrumentationActionStateKey=new ContextKey(SERIALIZED_INSTRUMENTATION_STATE_KEYS.actionScopes,{codec:{deserialize:deserializeActionStates,serialize:e=>e}}),InstrumentationInputScopeKey=new ContextKey(SERIALIZED_INSTRUMENTATION_STATE_KEYS.inputScopes,{codec:{deserialize:deserializeScopes,serialize:e=>e}});function instrumentationStateSlot(e,t,n={}){let r=stateKey(e,t),i=!0;return{get:()=>{if(!i)return;let e=contextStorage.getStore()?.get(InstrumentationStateKey)?.[r]?.value;return e===void 0?void 0:cloneAndFreezeJson(e)},revoke:()=>{i=!1},set:e=>{if(!i)return;let t=e===void 0?void 0:cloneAndFreezeJson(parseJsonValue(e));writeInstrumentationState(e=>{if(t===void 0)return writeSlot(e,r,void 0);let i=e[r],a={value:t};return i?.abandoned===!0&&(a.abandoned=!0),assignOwner(a,n),writeSlot(e,r,a)})}}}function abandonInstrumentationState(e,t,n={}){let r=stateKey(e,t);writeInstrumentationState(e=>{let t=e[r],i={attemptId:n.attemptId??t?.attemptId,sessionId:n.sessionId??t?.sessionId,turnId:n.turnId??t?.turnId},a={abandoned:!0};return assignOwner(a,i),t?.value!==void 0&&(a.value=t.value),writeSlot(e,r,a)})}function isInstrumentationStateAbandoned(e,t){return contextStorage.getStore()?.get(InstrumentationStateKey)?.[stateKey(e,t)]?.abandoned===!0}function releaseAllInstrumentationState(e){let t=`\0${e}`;releaseMatchingInstrumentationState(e=>e.endsWith(t))}function releaseAllInstrumentationAttemptState(e){releaseMatchingInstrumentationState((t,n)=>n.attemptId===e)}function releaseAllInstrumentationTurnState(e,t){releaseMatchingInstrumentationState((n,r)=>r.sessionId===e&&(t===void 0||r.turnId===t))}function releaseMatchingInstrumentationState(e){let t=contextStorage.getStore()?.get(InstrumentationStateKey);t!==void 0&&Object.entries(t).some(([t,n])=>e(t,n))&&writeInstrumentationState(t=>{let n={...t};for(let[r,i]of Object.entries(t))e(r,i)&&delete n[r];return n})}function rememberInstrumentationActionScope(e,t){writeContextKey(InstrumentationActionStateKey,n=>({...n,[e]:{scope:t}}))}function rememberInstrumentationInputScope(e,t){writeContextKey(InstrumentationInputScopeKey,n=>({...n,[e]:t}))}function takeInstrumentationInputScope(e){let t=contextStorage.getStore()?.get(InstrumentationInputScopeKey)?.[e];if(t!==void 0)return writeContextKey(InstrumentationInputScopeKey,t=>{let n={...t};return delete n[e],n}),t}function findInstrumentationActionScopeForCall(e,t){let n=contextStorage.getStore()?.get(InstrumentationActionStateKey);if(n!==void 0)for(let r of Object.values(n)){let i=`action:${e}:${r.scope.turnId}:${t}`,a=n[i];if(a!==void 0)return{idempotencyKey:i,scope:a.scope}}}function takeInstrumentationActionScopeForCall(e,t){let n=findInstrumentationActionScopeForCall(e,t);if(n!==void 0)return releaseInstrumentationActionCorrelation(n.idempotencyKey),n}function takeInstrumentationActionScopes(e,t){let n=contextStorage.getStore()?.get(InstrumentationActionStateKey);if(n===void 0)return[];let r=Object.entries(n).filter(([,n])=>n.scope.sessionId===e&&(t===void 0||n.scope.turnId===t)).map(([e,t])=>({idempotencyKey:e,scope:t.scope}));if(r.length===0)return[];let i=new Set(r.map(e=>e.idempotencyKey));return writeContextKey(InstrumentationActionStateKey,e=>{let t={...e};for(let e of i)delete t[e];return t}),r}function releaseInstrumentationActionCorrelation(e){writeContextKey(InstrumentationActionStateKey,t=>{let n={...t};return delete n[e],n})}function writeSlot(e,t,n){if(n===void 0){let n={...e};return delete n[t],n}return{...e,[t]:n}}function writeInstrumentationState(e){writeContextKey(InstrumentationStateKey,e)}function assignOwner(e,t){t.attemptId!==void 0&&(e.attemptId=t.attemptId),t.sessionId!==void 0&&(e.sessionId=t.sessionId),t.turnId!==void 0&&(e.turnId=t.turnId)}function writeContextKey(e,t){contextStorage.getStore()!==void 0&&loadContext().set(e,e=>t(e??{}))}function stateKey(e,t){return`${e}\0${t}`}function deserializeState(e){if(typeof e!=`object`||!e||Array.isArray(e))return{};let t={};for(let[n,r]of Object.entries(e)){if(typeof r!=`object`||!r||Array.isArray(r))continue;let e=r,i=typeof e.attemptId==`string`?e.attemptId:void 0,a=typeof e.sessionId==`string`?e.sessionId:void 0,o=typeof e.turnId==`string`?e.turnId:void 0,s={};e.abandoned===!0&&(s.abandoned=!0),i!==void 0&&(s.attemptId=i),a!==void 0&&(s.sessionId=a),o!==void 0&&(s.turnId=o),e.value!==void 0&&(s.value=cloneAndFreezeJson(e.value)),t[n]=s}return t}function cloneAndFreezeJson(e){if(Array.isArray(e))return Object.freeze(e.map(e=>cloneAndFreezeJson(e)));if(typeof e!=`object`||!e)return e;let t={};for(let[n,r]of Object.entries(e))t[n]=cloneAndFreezeJson(r);return Object.freeze(t)}function deserializeScopes(e){return typeof e!=`object`||!e||Array.isArray(e)?{}:e}function deserializeActionStates(e){if(typeof e!=`object`||!e||Array.isArray(e))return{};let t={};for(let[n,r]of Object.entries(e)){if(typeof r!=`object`||!r||Array.isArray(r))continue;let e=r;t[n]={scope:typeof e.scope==`object`&&e.scope!==null&&!Array.isArray(e.scope)?e.scope:r}}return t}export{abandonInstrumentationState,findInstrumentationActionScopeForCall,instrumentationStateSlot,isInstrumentationStateAbandoned,preserveSerializedInstrumentationState,releaseAllInstrumentationAttemptState,releaseAllInstrumentationState,releaseAllInstrumentationTurnState,rememberInstrumentationActionScope,rememberInstrumentationInputScope,takeInstrumentationActionScopeForCall,takeInstrumentationActionScopes,takeInstrumentationInputScope};
1
+ import{contextStorage,loadContext}from"#context/container.js";import{parseJsonValue}from"#shared/json.js";import{ContextKey}from"#context/key.js";import{SERIALIZED_INSTRUMENTATION_STATE_KEYS,preserveSerializedInstrumentationState}from"#shared/serialized-observability-state.js";const InstrumentationStateKey=new ContextKey(SERIALIZED_INSTRUMENTATION_STATE_KEYS.providerState,{codec:{deserialize:deserializeState,serialize:e=>e}}),InstrumentationActionStateKey=new ContextKey(SERIALIZED_INSTRUMENTATION_STATE_KEYS.actionScopes,{codec:{deserialize:deserializeActionStates,serialize:e=>e}}),InstrumentationInputScopeKey=new ContextKey(SERIALIZED_INSTRUMENTATION_STATE_KEYS.inputScopes,{codec:{deserialize:deserializeScopes,serialize:e=>e}});function instrumentationStateSlot(e,t,n={}){let r=stateKey(e,t),i=!0;return{get:()=>{if(!i)return;let e=contextStorage.getStore()?.get(InstrumentationStateKey)?.[r]?.value;return e===void 0?void 0:cloneAndFreezeJson(e)},revoke:()=>{i=!1},set:e=>{if(!i)return;let t=e===void 0?void 0:cloneAndFreezeJson(parseJsonValue(e));writeInstrumentationState(e=>{if(t===void 0)return writeSlot(e,r,void 0);let i=e[r],a={value:t};return i?.abandoned===!0&&(a.abandoned=!0),assignOwner(a,n),writeSlot(e,r,a)})}}}function abandonInstrumentationState(e,t,n={}){let r=stateKey(e,t);writeInstrumentationState(e=>{let t=e[r],i={attemptId:n.attemptId??t?.attemptId,sessionId:n.sessionId??t?.sessionId,turnId:n.turnId??t?.turnId},a={abandoned:!0};return assignOwner(a,i),t?.value!==void 0&&(a.value=t.value),writeSlot(e,r,a)})}function isInstrumentationStateAbandoned(e,t){return contextStorage.getStore()?.get(InstrumentationStateKey)?.[stateKey(e,t)]?.abandoned===!0}function releaseAllInstrumentationState(e){let t=`\0${e}`;releaseMatchingInstrumentationState(e=>e.endsWith(t))}function releaseAllInstrumentationAttemptState(e){releaseMatchingInstrumentationState((t,n)=>n.attemptId===e)}function releaseAllInstrumentationTurnState(e,t){releaseMatchingInstrumentationState((n,r)=>r.sessionId===e&&(t===void 0||r.turnId===t))}function releaseMatchingInstrumentationState(e){let t=contextStorage.getStore()?.get(InstrumentationStateKey);t!==void 0&&Object.entries(t).some(([t,n])=>e(t,n))&&writeInstrumentationState(t=>{let n={...t};for(let[r,i]of Object.entries(t))e(r,i)&&delete n[r];return n})}function rememberInstrumentationActionScope(e,t,n){writeContextKey(InstrumentationActionStateKey,r=>({...r,[e]:{scope:t,toolCall:n}}))}function rememberInstrumentationInputScope(e,t){writeContextKey(InstrumentationInputScopeKey,n=>({...n,[e]:t}))}function takeInstrumentationInputScope(e){let t=contextStorage.getStore()?.get(InstrumentationInputScopeKey)?.[e];if(t!==void 0)return writeContextKey(InstrumentationInputScopeKey,t=>{let n={...t};return delete n[e],n}),t}function findInstrumentationActionScopeForCall(e,t){let n=contextStorage.getStore()?.get(InstrumentationActionStateKey);if(n!==void 0)for(let r of Object.values(n)){let i=`action:${e}:${r.scope.turnId}:${t}`,a=n[i];if(a!==void 0)return{idempotencyKey:i,scope:a.scope,toolCall:a.toolCall}}}function takeInstrumentationActionScopeForCall(e,t){let n=findInstrumentationActionScopeForCall(e,t);if(n!==void 0)return releaseInstrumentationActionCorrelation(n.idempotencyKey),n}function takeInstrumentationActionScopes(e,t){let n=contextStorage.getStore()?.get(InstrumentationActionStateKey);if(n===void 0)return[];let r=Object.entries(n).filter(([,n])=>n.scope.sessionId===e&&(t===void 0||n.scope.turnId===t)).map(([e,t])=>({idempotencyKey:e,scope:t.scope,toolCall:t.toolCall}));if(r.length===0)return[];let i=new Set(r.map(e=>e.idempotencyKey));return writeContextKey(InstrumentationActionStateKey,e=>{let t={...e};for(let e of i)delete t[e];return t}),r}function releaseInstrumentationActionCorrelation(e){writeContextKey(InstrumentationActionStateKey,t=>{let n={...t};return delete n[e],n})}function writeSlot(e,t,n){if(n===void 0){let n={...e};return delete n[t],n}return{...e,[t]:n}}function writeInstrumentationState(e){writeContextKey(InstrumentationStateKey,e)}function assignOwner(e,t){t.attemptId!==void 0&&(e.attemptId=t.attemptId),t.sessionId!==void 0&&(e.sessionId=t.sessionId),t.turnId!==void 0&&(e.turnId=t.turnId)}function writeContextKey(e,t){contextStorage.getStore()!==void 0&&loadContext().set(e,e=>t(e??{}))}function stateKey(e,t){return`${e}\0${t}`}function deserializeState(e){if(typeof e!=`object`||!e||Array.isArray(e))return{};let t={};for(let[n,r]of Object.entries(e)){if(typeof r!=`object`||!r||Array.isArray(r))continue;let e=r,i=typeof e.attemptId==`string`?e.attemptId:void 0,a=typeof e.sessionId==`string`?e.sessionId:void 0,o=typeof e.turnId==`string`?e.turnId:void 0,s={};e.abandoned===!0&&(s.abandoned=!0),i!==void 0&&(s.attemptId=i),a!==void 0&&(s.sessionId=a),o!==void 0&&(s.turnId=o),e.value!==void 0&&(s.value=cloneAndFreezeJson(e.value)),t[n]=s}return t}function cloneAndFreezeJson(e){if(Array.isArray(e))return Object.freeze(e.map(e=>cloneAndFreezeJson(e)));if(typeof e!=`object`||!e)return e;let t={};for(let[n,r]of Object.entries(e))t[n]=cloneAndFreezeJson(r);return Object.freeze(t)}function deserializeScopes(e){return typeof e!=`object`||!e||Array.isArray(e)?{}:e}function deserializeActionStates(e){if(typeof e!=`object`||!e||Array.isArray(e))return{};let t={};for(let[n,r]of Object.entries(e)){if(typeof r!=`object`||!r||Array.isArray(r))continue;let e=r;t[n]={scope:typeof e.scope==`object`&&e.scope!==null&&!Array.isArray(e.scope)?e.scope:r,toolCall:e.toolCall}}return t}export{abandonInstrumentationState,findInstrumentationActionScopeForCall,instrumentationStateSlot,isInstrumentationStateAbandoned,preserveSerializedInstrumentationState,releaseAllInstrumentationAttemptState,releaseAllInstrumentationState,releaseAllInstrumentationTurnState,rememberInstrumentationActionScope,rememberInstrumentationInputScope,takeInstrumentationActionScopeForCall,takeInstrumentationActionScopes,takeInstrumentationInputScope};
@@ -1 +1 @@
1
- import{createRequire}from"node:module";import{existsSync,readFileSync,realpathSync}from"node:fs";import{basename,dirname,join}from"node:path";import{fileURLToPath}from"node:url";import{EVE_PACKAGE_NAME}from"#internal/package-name.js";let cachedPackageInfo,cachedPackageLocation;const BUNDLED_FALLBACK_PACKAGE_VERSION=`0.71.3`,WORKFLOW_MODULE_ALIASES={"workflow/errors":`src/compiled/@workflow/errors/index.js`,"workflow/internal/private":`src/compiled/@workflow/core/private.js`};function resolveFallbackPackageVersion(){return BUNDLED_FALLBACK_PACKAGE_VERSION.startsWith(`__`)?`0.0.0`:BUNDLED_FALLBACK_PACKAGE_VERSION}const FALLBACK_PACKAGE_INFO={name:EVE_PACKAGE_NAME,version:resolveFallbackPackageVersion()};function resolveCurrentModulePath(){return typeof __filename==`string`?__filename:resolveCurrentModulePathFromStack()}function resolveCurrentModulePathFromStack(){let e=Error.prepareStackTrace;try{Error.prepareStackTrace=(e,t)=>t;let e=Error().stack?.[0]?.getFileName();if(typeof e!=`string`||e.length===0)throw Error(`Failed to resolve the current module path from the stack trace.`);return e.startsWith(`file:`)?fileURLToPath(e):e}finally{Error.prepareStackTrace=e}}const packageRequire=createRequire(resolveCurrentModulePath());function tryResolveVerifiedPackageRoot(e){try{let t=realpathSync.native(e);return tryReadInstalledPackageInfo(t,EVE_PACKAGE_NAME)===void 0?void 0:dirname(t)}catch{return}}function findNearestVerifiedPackageRoot(e){let t=e;for(;;){let e=tryResolveVerifiedPackageRoot(join(t,`package.json`));if(e!==void 0)return e;let n=dirname(t);if(n===t)return;t=n}}function tryResolveDirectBuildLocation(e){let t=dirname(e);for(;;){if(basename(t)===`dist`){let e=tryResolveVerifiedPackageRoot(join(dirname(t),`package.json`));if(e!==void 0)return{packageBuildRoot:t,packageRoot:e}}let e=dirname(t);if(e===t)return;t=e}}function isSourceCheckout(e){return existsSync(join(e,`src`,`internal`,`application`,`package.ts`))}function tryCreatePackageLocation(e){if(isSourceCheckout(e))return{packageBuildRoot:null,packageRoot:e};let t=join(e,`dist`);if(existsSync(t))return{packageBuildRoot:t,packageRoot:e}}function resolveSelfPackageJsonPath(e){return createRequire(e).resolve(`${EVE_PACKAGE_NAME}/package.json`)}function resolvePackageLocationFromModulePath(e,t=resolveSelfPackageJsonPath){let n=realpathSync.native(e),r=tryResolveDirectBuildLocation(n);if(r!==void 0)return r;let i=findNearestVerifiedPackageRoot(dirname(n));if(i!==void 0&&isSourceCheckout(i))return{packageBuildRoot:null,packageRoot:i};try{let e=tryResolveVerifiedPackageRoot(t(n)),r=e===void 0?void 0:tryCreatePackageLocation(e);if(r!==void 0)return r}catch{}let a=i===void 0?void 0:tryCreatePackageLocation(i);if(a!==void 0)return a;throw Error(`Failed to resolve the eve package root from "${e}".`)}function resolvePackageLocation(){return cachedPackageLocation??=resolvePackageLocationFromModulePath(resolveCurrentModulePath()),cachedPackageLocation}function resolvePackageBuildRoot(){return resolvePackageLocation().packageBuildRoot}function resolvePackageRoot(){return resolvePackageLocation().packageRoot}function tryResolvePackageRoot(){try{return resolvePackageRoot()}catch{return}}function rewriteSourceFilePathForBuild(e){return e.replace(/\.[cm]?tsx?$/,`.js`)}function resolvePackageSourceFilePath(e){let t=resolvePackageBuildRoot();return t===null?join(resolvePackageRoot(),e):join(t,rewriteSourceFilePathForBuild(e))}function resolvePackageSourceDirectoryPath(e){let t=resolvePackageBuildRoot();return join(t===null?resolvePackageRoot():t,e)}function resolvePackageDependencyPath(e){try{return packageRequire.resolve(e)}catch(t){let n=tryResolvePackageRoot(),r=n===void 0||!isSourceCheckout(n)?void 0:resolveSourceCheckoutExport(n,e);if(r!==void 0)return r;throw t}}function resolveSourceCheckoutExport(e,t){if(t!==EVE_PACKAGE_NAME&&!t.startsWith(`${EVE_PACKAGE_NAME}/`))return;let n=t===EVE_PACKAGE_NAME?`.`:`.${t.slice(EVE_PACKAGE_NAME.length)}`;try{let t=JSON.parse(readFileSync(join(e,`package.json`),`utf8`)).exports?.[n],r=typeof t==`string`?t:t?.[`eve-source`]??t?.import??t?.default;if(r===void 0)return;let i=r.replace(/^\.\/dist\/src\//,`src/`).replace(/\.[cm]?js$/u,`.ts`),a=join(e,i);return existsSync(a)?a:void 0}catch{return}}function resolvePackageCompiledFilePath(e){let t=resolvePackageBuildRoot();return t===null?join(resolvePackageRoot(),`.generated`,`compiled`,e.replace(/^src\/compiled\//,``)):join(t,e)}function normalizeInstalledPackageInfo(e){let t=e;if(typeof t.name==`string`&&typeof t.version==`string`)return{name:t.name,version:t.version}}function tryReadInstalledPackageInfo(e,t){let n=normalizeInstalledPackageInfo(JSON.parse(readFileSync(e,`utf8`)));if(n?.name===t)return n}function resolveInstalledPackageInfo(){if(cachedPackageInfo)return cachedPackageInfo;let e=tryResolvePackageRoot(),t=e===void 0?void 0:tryReadInstalledPackageInfo(join(e,`package.json`),EVE_PACKAGE_NAME);if(t)return cachedPackageInfo=t,cachedPackageInfo;try{let e=tryReadInstalledPackageInfo(packageRequire.resolve(`${EVE_PACKAGE_NAME}/package.json`),EVE_PACKAGE_NAME);if(e)return cachedPackageInfo=e,cachedPackageInfo}catch{}return cachedPackageInfo={...FALLBACK_PACKAGE_INFO},cachedPackageInfo}function readWorkflowVersionFromManifest(e){let t=e;for(let e of[t.devDependencies,t.dependencies,t.peerDependencies]){let t=e?.[`@workflow/core`];if(typeof t==`string`&&t.trim().length>0)return t}}function resolveExpectedWorkflowVersion(){let e=tryResolvePackageRoot();if(e!==void 0)try{return readWorkflowVersionFromManifest(JSON.parse(readFileSync(join(e,`package.json`),`utf8`)))}catch{}try{return readWorkflowVersionFromManifest(JSON.parse(readFileSync(packageRequire.resolve(`${EVE_PACKAGE_NAME}/package.json`),`utf8`)))}catch{return}}function resolveWorkflowModulePath(e){if(e===`workflow`)return resolvePackageSourceFilePath(`src/internal/workflow/index.ts`);if(e===`workflow/api`||e===`workflow/runtime`)return resolvePackageSourceFilePath(`src/internal/workflow/runtime.ts`);if(e===`workflow/internal/builtins`)return resolvePackageSourceFilePath(`src/internal/workflow/builtins.ts`);let t=WORKFLOW_MODULE_ALIASES[e];return t===void 0?packageRequire.resolve(e):resolvePackageCompiledFilePath(t)}export{resolveExpectedWorkflowVersion,resolveInstalledPackageInfo,resolvePackageCompiledFilePath,resolvePackageDependencyPath,resolvePackageLocationFromModulePath,resolvePackageRoot,resolvePackageSourceDirectoryPath,resolvePackageSourceFilePath,resolveWorkflowModulePath};
1
+ import{createRequire}from"node:module";import{existsSync,readFileSync,realpathSync}from"node:fs";import{basename,dirname,join}from"node:path";import{fileURLToPath}from"node:url";import{EVE_PACKAGE_NAME}from"#internal/package-name.js";let cachedPackageInfo,cachedPackageLocation;const BUNDLED_FALLBACK_PACKAGE_VERSION=`0.72.0`,WORKFLOW_MODULE_ALIASES={"workflow/errors":`src/compiled/@workflow/errors/index.js`,"workflow/internal/private":`src/compiled/@workflow/core/private.js`};function resolveFallbackPackageVersion(){return BUNDLED_FALLBACK_PACKAGE_VERSION.startsWith(`__`)?`0.0.0`:BUNDLED_FALLBACK_PACKAGE_VERSION}const FALLBACK_PACKAGE_INFO={name:EVE_PACKAGE_NAME,version:resolveFallbackPackageVersion()};function resolveCurrentModulePath(){return typeof __filename==`string`?__filename:resolveCurrentModulePathFromStack()}function resolveCurrentModulePathFromStack(){let e=Error.prepareStackTrace;try{Error.prepareStackTrace=(e,t)=>t;let e=Error().stack?.[0]?.getFileName();if(typeof e!=`string`||e.length===0)throw Error(`Failed to resolve the current module path from the stack trace.`);return e.startsWith(`file:`)?fileURLToPath(e):e}finally{Error.prepareStackTrace=e}}const packageRequire=createRequire(resolveCurrentModulePath());function tryResolveVerifiedPackageRoot(e){try{let t=realpathSync.native(e);return tryReadInstalledPackageInfo(t,EVE_PACKAGE_NAME)===void 0?void 0:dirname(t)}catch{return}}function findNearestVerifiedPackageRoot(e){let t=e;for(;;){let e=tryResolveVerifiedPackageRoot(join(t,`package.json`));if(e!==void 0)return e;let n=dirname(t);if(n===t)return;t=n}}function tryResolveDirectBuildLocation(e){let t=dirname(e);for(;;){if(basename(t)===`dist`){let e=tryResolveVerifiedPackageRoot(join(dirname(t),`package.json`));if(e!==void 0)return{packageBuildRoot:t,packageRoot:e}}let e=dirname(t);if(e===t)return;t=e}}function isSourceCheckout(e){return existsSync(join(e,`src`,`internal`,`application`,`package.ts`))}function tryCreatePackageLocation(e){if(isSourceCheckout(e))return{packageBuildRoot:null,packageRoot:e};let t=join(e,`dist`);if(existsSync(t))return{packageBuildRoot:t,packageRoot:e}}function resolveSelfPackageJsonPath(e){return createRequire(e).resolve(`${EVE_PACKAGE_NAME}/package.json`)}function resolvePackageLocationFromModulePath(e,t=resolveSelfPackageJsonPath){let n=realpathSync.native(e),r=tryResolveDirectBuildLocation(n);if(r!==void 0)return r;let i=findNearestVerifiedPackageRoot(dirname(n));if(i!==void 0&&isSourceCheckout(i))return{packageBuildRoot:null,packageRoot:i};try{let e=tryResolveVerifiedPackageRoot(t(n)),r=e===void 0?void 0:tryCreatePackageLocation(e);if(r!==void 0)return r}catch{}let a=i===void 0?void 0:tryCreatePackageLocation(i);if(a!==void 0)return a;throw Error(`Failed to resolve the eve package root from "${e}".`)}function resolvePackageLocation(){return cachedPackageLocation??=resolvePackageLocationFromModulePath(resolveCurrentModulePath()),cachedPackageLocation}function resolvePackageBuildRoot(){return resolvePackageLocation().packageBuildRoot}function resolvePackageRoot(){return resolvePackageLocation().packageRoot}function tryResolvePackageRoot(){try{return resolvePackageRoot()}catch{return}}function rewriteSourceFilePathForBuild(e){return e.replace(/\.[cm]?tsx?$/,`.js`)}function resolvePackageSourceFilePath(e){let t=resolvePackageBuildRoot();return t===null?join(resolvePackageRoot(),e):join(t,rewriteSourceFilePathForBuild(e))}function resolvePackageSourceDirectoryPath(e){let t=resolvePackageBuildRoot();return join(t===null?resolvePackageRoot():t,e)}function resolvePackageDependencyPath(e){try{return packageRequire.resolve(e)}catch(t){let n=tryResolvePackageRoot(),r=n===void 0||!isSourceCheckout(n)?void 0:resolveSourceCheckoutExport(n,e);if(r!==void 0)return r;throw t}}function resolveSourceCheckoutExport(e,t){if(t!==EVE_PACKAGE_NAME&&!t.startsWith(`${EVE_PACKAGE_NAME}/`))return;let n=t===EVE_PACKAGE_NAME?`.`:`.${t.slice(EVE_PACKAGE_NAME.length)}`;try{let t=JSON.parse(readFileSync(join(e,`package.json`),`utf8`)).exports?.[n],r=typeof t==`string`?t:t?.[`eve-source`]??t?.import??t?.default;if(r===void 0)return;let i=r.replace(/^\.\/dist\/src\//,`src/`).replace(/\.[cm]?js$/u,`.ts`),a=join(e,i);return existsSync(a)?a:void 0}catch{return}}function resolvePackageCompiledFilePath(e){let t=resolvePackageBuildRoot();return t===null?join(resolvePackageRoot(),`.generated`,`compiled`,e.replace(/^src\/compiled\//,``)):join(t,e)}function normalizeInstalledPackageInfo(e){let t=e;if(typeof t.name==`string`&&typeof t.version==`string`)return{name:t.name,version:t.version}}function tryReadInstalledPackageInfo(e,t){let n=normalizeInstalledPackageInfo(JSON.parse(readFileSync(e,`utf8`)));if(n?.name===t)return n}function resolveInstalledPackageInfo(){if(cachedPackageInfo)return cachedPackageInfo;let e=tryResolvePackageRoot(),t=e===void 0?void 0:tryReadInstalledPackageInfo(join(e,`package.json`),EVE_PACKAGE_NAME);if(t)return cachedPackageInfo=t,cachedPackageInfo;try{let e=tryReadInstalledPackageInfo(packageRequire.resolve(`${EVE_PACKAGE_NAME}/package.json`),EVE_PACKAGE_NAME);if(e)return cachedPackageInfo=e,cachedPackageInfo}catch{}return cachedPackageInfo={...FALLBACK_PACKAGE_INFO},cachedPackageInfo}function readWorkflowVersionFromManifest(e){let t=e;for(let e of[t.devDependencies,t.dependencies,t.peerDependencies]){let t=e?.[`@workflow/core`];if(typeof t==`string`&&t.trim().length>0)return t}}function resolveExpectedWorkflowVersion(){let e=tryResolvePackageRoot();if(e!==void 0)try{return readWorkflowVersionFromManifest(JSON.parse(readFileSync(join(e,`package.json`),`utf8`)))}catch{}try{return readWorkflowVersionFromManifest(JSON.parse(readFileSync(packageRequire.resolve(`${EVE_PACKAGE_NAME}/package.json`),`utf8`)))}catch{return}}function resolveWorkflowModulePath(e){if(e===`workflow`)return resolvePackageSourceFilePath(`src/internal/workflow/index.ts`);if(e===`workflow/api`||e===`workflow/runtime`)return resolvePackageSourceFilePath(`src/internal/workflow/runtime.ts`);if(e===`workflow/internal/builtins`)return resolvePackageSourceFilePath(`src/internal/workflow/builtins.ts`);let t=WORKFLOW_MODULE_ALIASES[e];return t===void 0?packageRequire.resolve(e):resolvePackageCompiledFilePath(t)}export{resolveExpectedWorkflowVersion,resolveInstalledPackageInfo,resolvePackageCompiledFilePath,resolvePackageDependencyPath,resolvePackageLocationFromModulePath,resolvePackageRoot,resolvePackageSourceDirectoryPath,resolvePackageSourceFilePath,resolveWorkflowModulePath};
@@ -0,0 +1,16 @@
1
+ import type { UploadPolicy } from "#public/channels/upload-policy.js";
2
+ /** The byte cap an upload policy sets; a disabled policy accepts nothing. */
3
+ export declare function maxBytesOf(policy: UploadPolicy): number;
4
+ /**
5
+ * Reads a download's body, failing as soon as it passes `maxBytes`. Checks a
6
+ * declared `content-length` first, then counts what streams in, so a body that
7
+ * misstates or omits its length still stops at the limit.
8
+ */
9
+ export declare function readLimitedBytes(response: Response, maxBytes: number, adapterKind: string): Promise<Buffer>;
10
+ /**
11
+ * Wraps `fetch` so every response body fails once it passes `maxBytes`, for a
12
+ * download that reads the body itself, such as a vendored client's.
13
+ */
14
+ export declare function limitedFetch(fetchImpl: typeof globalThis.fetch, maxBytes: number, adapterKind: string): typeof globalThis.fetch;
15
+ /** Fails a download whose bytes arrived some other way than a `Response`, once they're in hand. */
16
+ export declare function assertWithinLimit(bytes: Uint8Array, maxBytes: number, adapterKind: string): void;
@@ -0,0 +1 @@
1
+ import{EveAttachmentError}from"#internal/attachments/errors.js";function maxBytesOf(e){return e===`disabled`?0:e.maxBytes}async function readLimitedBytes(e,t,n){let r=Number(e.headers.get(`content-length`)??NaN);if(Number.isFinite(r)&&r>t)throw await e.body?.cancel(),overLimit(t,n);if(e.body===null)return Buffer.alloc(0);let i=e.body.getReader(),a=[],o=0;for(;;){let{done:e,value:r}=await i.read();if(e)break;if(o+=r.byteLength,o>t)throw await i.cancel(),overLimit(t,n);a.push(r)}return Buffer.concat(a)}function limitedFetch(e,t,n){return async(r,i)=>{let a=await e(r,i),o=Number(a.headers.get(`content-length`)??NaN);if(Number.isFinite(o)&&o>t)throw await a.body?.cancel(),overLimit(t,n);if(a.body===null)return a;let s=0,c=a.body.pipeThrough(new TransformStream({transform(e,r){s+=e.byteLength,s>t?r.error(overLimit(t,n)):r.enqueue(e)}}));return new Response(c,{headers:a.headers,status:a.status,statusText:a.statusText})}}function assertWithinLimit(e,t,n){if(e.byteLength>t)throw overLimit(t,n)}function overLimit(e,t){return new EveAttachmentError({adapterKind:t,kind:`resolver-threw`,message:`it is over the ${formatMegabytes(e)} upload limit.`})}function formatMegabytes(e){let t=e/1048576;return`${Number.isInteger(t)?t:t.toFixed(1)} MB`}export{assertWithinLimit,limitedFetch,maxBytesOf,readLimitedBytes};
@@ -1,5 +1,6 @@
1
1
  import { type WorkflowToolEntryPoint } from "#tools/workflow-definition.js";
2
2
  import type { JsonObject } from "#shared/json.js";
3
+ import type { WebSearchProvider } from "#shared/web-search.js";
3
4
  import type { InternalToolDefinition, ToolExecuteFn } from "#tools/definition.js";
4
5
  import { type CompiledToolBehavior } from "#tools/behavior.js";
5
6
  import { type WorkflowProgramOptions } from "#tools/workflow-program-input.js";
@@ -40,7 +41,7 @@ type NormalizedToolEntry = {
40
41
  readonly kind: "disabled";
41
42
  } | {
42
43
  readonly kind: "web-search-tool";
43
- readonly provider: "exa" | "parallel";
44
+ readonly provider: WebSearchProvider;
44
45
  } | {
45
46
  readonly kind: "dynamic-tool";
46
47
  readonly eventNames: readonly DynamicToolEventName[];
@@ -1 +1 @@
1
- import{isObject}from"#shared/guards.js";import{expectBoolean,expectFunction,expectObjectRecord,expectOnlyKnownKeys,expectString}from"#internal/authored-module.js";import{UNSPECIFIED_INPUT_SCHEMA,serializeInputSchema,serializeModelInputSchema,serializeOutputSchema,toInputSchema}from"#tools/schema.js";import{readWorkflowFunctionId}from"#internal/workflow/reference.js";import{assertResolverOnlyDynamicSentinel,isDynamicSentinel}from"#dynamic/definition.js";import{isWorkflowToolDefinition,readWorkflowToolEntryPoints}from"#tools/workflow-definition.js";import{shouldRebindDynamicCallbacks}from"#internal/dynamic-tool-rebind.js";import{TASK_ID_INPUT,withTaskIdSchema}from"#execution/tasks/task-id-input.js";import{isDisabledToolSentinel}from"#tools/definition.js";import{normalizeApproval}from"#internal/authored-definition/approval.js";import{isWebSearchToolDefinition}from"#tools/provided/web-search.js";import{readToolBehavior}from"#tools/behavior.js";import{readWorkflowProgramOptions}from"#tools/workflow-program-input.js";function normalizeToolDefinition(e,t){if(isDynamicSentinel(e))return assertResolverOnlyDynamicSentinel(e,t),{kind:`dynamic-tool`,eventNames:Object.keys(e.events),rebindMissingCallbacks:shouldRebindDynamicCallbacks(e)};if(isDisabledToolSentinel(e))return{kind:`disabled`};if(isWebSearchToolDefinition(e)){let n=expectObjectRecord(e,t);expectOnlyKnownKeys(n,[`kind`,`provider`],t);let r=expectString(n.provider,t);if(r!==`exa`&&r!==`parallel`)throw Error(`${t} Expected "provider" to be one of: exa, parallel.`);return{kind:`web-search-tool`,provider:r}}let n=expectObjectRecord(e,t),r=isWorkflowToolDefinition(e)?readCompiledWorkflowEntry(n,t):void 0;if(r===void 0&&readWorkflowFunctionId(n.execute)!==void 0)throw Error(`${t} Workflow executors require defineWorkflowTool() from "eve/tools". Replace defineTool() or the bare tool object with defineWorkflowTool().`);if(r!==void 0&&n.endsTurn!==void 0)throw Error(`${t} "endsTurn" is not supported on defineWorkflowTool(). Workflow tools resume the turn when they finish; use defineTool() for a tool that ends the turn.`);expectOnlyKnownKeys(n,[`availableInSubagents`,`endsTurn`,`label`,`auth`,`description`,`execute`,`inputSchema`,`approval`,`approvalKey`,`outputSchema`,`toModelOutput`,...r===void 0?[]:[r.entryPoint]],t);let i=n.inputSchema===void 0?null:serializeInputSchema(n.inputSchema);r?.entryPoint===`serve`&&assertNoOwnTaskIdInput(i,t);let a=serializeOutputSchema(n.outputSchema),o=readToolBehavior(e),s=readWorkflowProgramOptions(e),c=r!==void 0||n.execute!==void 0;!c&&o?.handling?.kind!==`dispatch`&&expectFunction(n.execute,t);let l={availableInSubagents:n.availableInSubagents===void 0?void 0:expectBoolean(n.availableInSubagents,t),description:expectString(n.description,t),endsTurn:n.endsTurn===void 0||typeof n.endsTurn==`boolean`?n.endsTurn:expectFunction(n.endsTurn,t),hasApproval:n.approval!==void 0,hasExecute:c,hasModelOutputProjection:n.toModelOutput!==void 0,inputSchema:i,modelInputSchema:modelInputSchemaOf(n.inputSchema,r?.entryPoint===`serve`||o?.handling?.kind===`dispatch`)};if(o!==void 0&&(l.behavior=o),s!==void 0&&(l.workflowProgram=s),r===void 0?c&&(l.execute=expectFunction(n.execute,t)):l.workflow=r,a!==void 0&&(l.outputSchema=a),n.label!==void 0){let e=expectObjectRecord(n.label,t);expectOnlyKnownKeys(e,[`start`,`complete`,`delta`],t),expectFunction(e.start,t),e.complete!==void 0&&expectFunction(e.complete,t),e.delta!==void 0&&expectFunction(e.delta,t)}if(n.approval!==void 0&&normalizeApproval(n.approval,t),n.approvalKey!==void 0&&expectFunction(n.approvalKey,t),n.toModelOutput!==void 0&&expectFunction(n.toModelOutput,t),n.auth!==void 0){let e=expectObjectRecord(n.auth,t);expectFunction(e.getToken,t)}return{kind:`tool`,definition:l}}function readCompiledWorkflowEntry(e,t){let[n]=readWorkflowToolEntryPoints(e),r=n===void 0?void 0:readWorkflowFunctionId(e[n]);if(n===void 0||r===void 0)throw Error(`${t} defineWorkflowTool() requires a compiled workflow executor. Start execute, task, or serve with "use workflow" and export defineWorkflowTool() as the default export of a static tool module.`);return{entryPoint:n,workflowId:r}}function modelInputSchemaOf(e,t){let n=toInputSchema(e)??UNSPECIFIED_INPUT_SCHEMA;return serializeModelInputSchema(t?withTaskIdSchema(n):n)}function assertNoOwnTaskIdInput(e,t){let n=e?.properties;if(isObject(n)&&TASK_ID_INPUT in n)throw Error(`${t} inputSchema declares "${TASK_ID_INPUT}", which eve adds to a serve tool's model input to send a call to a running task. Rename the field.`)}export{normalizeToolDefinition};
1
+ import{isObject}from"#shared/guards.js";import{expectBoolean,expectFunction,expectObjectRecord,expectOnlyKnownKeys,expectString}from"#internal/authored-module.js";import{UNSPECIFIED_INPUT_SCHEMA,serializeInputSchema,serializeModelInputSchema,serializeOutputSchema,toInputSchema}from"#tools/schema.js";import{readWorkflowFunctionId}from"#internal/workflow/reference.js";import{assertResolverOnlyDynamicSentinel,isDynamicSentinel}from"#dynamic/definition.js";import{isWorkflowToolDefinition,readWorkflowToolEntryPoints}from"#tools/workflow-definition.js";import{shouldRebindDynamicCallbacks}from"#internal/dynamic-tool-rebind.js";import{TASK_ID_INPUT,withTaskIdSchema}from"#execution/tasks/task-id-input.js";import{isDisabledToolSentinel}from"#tools/definition.js";import{normalizeApproval}from"#internal/authored-definition/approval.js";import{isWebSearchToolDefinition}from"#tools/provided/web-search.js";import{readToolBehavior}from"#tools/behavior.js";import{readWorkflowProgramOptions}from"#tools/workflow-program-input.js";function normalizeToolDefinition(e,t){if(isDynamicSentinel(e))return assertResolverOnlyDynamicSentinel(e,t),{kind:`dynamic-tool`,eventNames:Object.keys(e.events),rebindMissingCallbacks:shouldRebindDynamicCallbacks(e)};if(isDisabledToolSentinel(e))return{kind:`disabled`};if(isWebSearchToolDefinition(e)){let n=expectObjectRecord(e,t);expectOnlyKnownKeys(n,[`kind`,`provider`],t);let r=expectString(n.provider,t);if(r!==`exa`&&r!==`parallel`&&r!==`browserbase`)throw Error(`${t} Expected "provider" to be one of: exa, parallel, browserbase.`);return{kind:`web-search-tool`,provider:r}}let n=expectObjectRecord(e,t),r=isWorkflowToolDefinition(e)?readCompiledWorkflowEntry(n,t):void 0;if(r===void 0&&readWorkflowFunctionId(n.execute)!==void 0)throw Error(`${t} Workflow executors require defineWorkflowTool() from "eve/tools". Replace defineTool() or the bare tool object with defineWorkflowTool().`);if(r!==void 0&&n.endsTurn!==void 0)throw Error(`${t} "endsTurn" is not supported on defineWorkflowTool(). Workflow tools resume the turn when they finish; use defineTool() for a tool that ends the turn.`);expectOnlyKnownKeys(n,[`availableInSubagents`,`endsTurn`,`label`,`auth`,`description`,`execute`,`inputSchema`,`approval`,`approvalKey`,`outputSchema`,`toModelOutput`,...r===void 0?[]:[r.entryPoint]],t);let i=n.inputSchema===void 0?null:serializeInputSchema(n.inputSchema);r?.entryPoint===`serve`&&assertNoOwnTaskIdInput(i,t);let a=serializeOutputSchema(n.outputSchema),o=readToolBehavior(e),s=readWorkflowProgramOptions(e),c=r!==void 0||n.execute!==void 0;!c&&o?.handling?.kind!==`dispatch`&&expectFunction(n.execute,t);let l={availableInSubagents:n.availableInSubagents===void 0?void 0:expectBoolean(n.availableInSubagents,t),description:expectString(n.description,t),endsTurn:n.endsTurn===void 0||typeof n.endsTurn==`boolean`?n.endsTurn:expectFunction(n.endsTurn,t),hasApproval:n.approval!==void 0,hasExecute:c,hasModelOutputProjection:n.toModelOutput!==void 0,inputSchema:i,modelInputSchema:modelInputSchemaOf(n.inputSchema,r?.entryPoint===`serve`||o?.handling?.kind===`dispatch`)};if(o!==void 0&&(l.behavior=o),s!==void 0&&(l.workflowProgram=s),r===void 0?c&&(l.execute=expectFunction(n.execute,t)):l.workflow=r,a!==void 0&&(l.outputSchema=a),n.label!==void 0){let e=expectObjectRecord(n.label,t);expectOnlyKnownKeys(e,[`start`,`complete`,`delta`],t),expectFunction(e.start,t),e.complete!==void 0&&expectFunction(e.complete,t),e.delta!==void 0&&expectFunction(e.delta,t)}if(n.approval!==void 0&&normalizeApproval(n.approval,t),n.approvalKey!==void 0&&expectFunction(n.approvalKey,t),n.toModelOutput!==void 0&&expectFunction(n.toModelOutput,t),n.auth!==void 0){let e=expectObjectRecord(n.auth,t);expectFunction(e.getToken,t)}return{kind:`tool`,definition:l}}function readCompiledWorkflowEntry(e,t){let[n]=readWorkflowToolEntryPoints(e),r=n===void 0?void 0:readWorkflowFunctionId(e[n]);if(n===void 0||r===void 0)throw Error(`${t} defineWorkflowTool() requires a compiled workflow executor. Start execute, task, or serve with "use workflow" and export defineWorkflowTool() as the default export of a static tool module.`);return{entryPoint:n,workflowId:r}}function modelInputSchemaOf(e,t){let n=toInputSchema(e)??UNSPECIFIED_INPUT_SCHEMA;return serializeModelInputSchema(t?withTaskIdSchema(n):n)}function assertNoOwnTaskIdInput(e,t){let n=e?.properties;if(isObject(n)&&TASK_ID_INPUT in n)throw Error(`${t} inputSchema declares "${TASK_ID_INPUT}", which eve adds to a serve tool's model input to send a call to a running task. Rename the field.`)}export{normalizeToolDefinition};
@@ -0,0 +1,13 @@
1
+ import type { AgentToolDescription } from "#channel/agent-description.js";
2
+ import type { InvokeToolFn } from "#channel/invoke-tool.js";
3
+ import { type McpServerTool } from "#internal/mcp/streamable-http-server.js";
4
+ /**
5
+ * The agent's invocable tools as MCP tools. Each `tools/call` runs the tool
6
+ * through `invokeTool` as the route-authenticated caller. Tools named like
7
+ * one in `reserved` are skipped, since the channel serves that name itself.
8
+ */
9
+ export declare function createPublishedTools(input: {
10
+ readonly invokeTool: InvokeToolFn;
11
+ readonly reserved: ReadonlySet<string>;
12
+ readonly tools: readonly AgentToolDescription[];
13
+ }): McpServerTool[];
@@ -0,0 +1 @@
1
+ import{createLogger}from"#internal/logging.js";import{isJsonObjectValue}from"#shared/json.js";import{fromJsonSchema}from"#compiled/@modelcontextprotocol/server/index.js";import{McpToolOperationError,defineMcpTool}from"#internal/mcp/streamable-http-server.js";const log=createLogger(`mcp.tools`),warnedReserved=new Set;function createPublishedTools(e){return e.tools.filter(t=>!e.reserved.has(t.name)||(warnedReserved.has(t.name)||(warnedReserved.add(t.name),log.warn(`mcpChannel does not publish the tool "${t.name}": the channel serves that name.`)),!1)).map(t=>defineMcpTool({definition:{description:t.description,inputSchema:fromJsonSchema(t.inputSchema),name:t.name,outputSchema:t.outputSchema===void 0?void 0:fromJsonSchema(t.outputSchema)},async call(n,{auth:r,signal:i}){if(r===null)throw new McpToolOperationError(`denied`,`The channel authenticated no caller.`);let a=await e.invokeTool(t.name,n,{auth:r,signal:i});return toCallToolResult(t.name,a,t.outputSchema!==void 0)}}))}function toCallToolResult(e,t,n){switch(t.status){case`completed`:{let e=t.output,r=t.modelOutput.type===`text`?t.modelOutput.value:JSON.stringify(e??null);return n||isJsonObjectValue(e)?{content:[{text:r,type:`text`}],structuredContent:e??null}:{content:[{text:r,type:`text`}]}}case`invalid-input`:throw new McpToolOperationError(`invalid_input`,t.message);case`denied`:throw new McpToolOperationError(`denied`,t.reason??`The tool "${e}" was denied by its approval policy.`);case`approval-required`:throw new McpToolOperationError(`approval_required`,`The tool "${e}" needs a person's approval, which this MCP channel cannot ask for. Call it from a conversation instead.`);case`authorization-required`:throw new McpToolOperationError(`authorization_required`,`The tool "${e}" needs a sign-in to ${t.connections.join(`, `)}, which this MCP channel cannot ask for. Sign in from a conversation, then call it again.`);case`failed`:throw new McpToolOperationError(`internal`,t.message)}}export{createPublishedTools};
@@ -0,0 +1,12 @@
1
+ import { type Context } from "#compiled/@opentelemetry/api/index.js";
2
+ /**
3
+ * Adopts the W3C trace context an MCP client sends in a request's
4
+ * `params._meta` as the parent of everything the request runs.
5
+ *
6
+ * Only `traceparent` and `tracestate` are read, and each is validated and
7
+ * bounded; anything malformed leaves `parent` as it was. `baggage` is never
8
+ * read: an MCP caller cannot choose eve's audience, session lineage, or
9
+ * content capture by sending it. Every other value already on `parent`,
10
+ * error-content policy included, is kept.
11
+ */
12
+ export declare function withMcpRequestTraceContext(parent: Context, body: unknown): Context;
@@ -0,0 +1 @@
1
+ import{isObject}from"#shared/guards.js";import{TraceFlags,createTraceState,trace}from"#compiled/@opentelemetry/api/index.js";const TRACEPARENT=/^00-([0-9a-f]{32})-([0-9a-f]{16})-([0-9a-f]{2})$/,ZERO_TRACE_ID=`0`.repeat(32),ZERO_SPAN_ID=`0`.repeat(16);function withMcpRequestTraceContext(e,t){if(!isObject(t)||Array.isArray(t)||!isObject(t.params))return e;let n=t.params._meta;if(!isObject(n))return e;let r=n.traceparent;if(typeof r!=`string`)return e;let i=TRACEPARENT.exec(r);if(i===null)return e;let a=i[1],o=i[2],s=i[3];if(a===void 0||o===void 0||s===void 0||a===ZERO_TRACE_ID||o===ZERO_SPAN_ID)return e;let c=n.tracestate,l=typeof c==`string`&&c.length>0&&c.length<=512?createTraceState(c):void 0,u={isRemote:!0,spanId:o,traceFlags:Number.parseInt(s,16)&TraceFlags.SAMPLED,traceId:a};l!==void 0&&(u.traceState=l);let d=trace.wrapSpanContext(u);return trace.setSpan(e,d)}export{withMcpRequestTraceContext};
@@ -13,7 +13,11 @@ interface McpToolDefinition<TInputSchema extends StandardSchemaWithJSON = Standa
13
13
  readonly inputSchema: TInputSchema;
14
14
  readonly outputSchema?: StandardSchemaWithJSON;
15
15
  }
16
- export interface McpCallToolResult<TStructured extends Readonly<Record<string, unknown>> = Readonly<Record<string, unknown>>> {
16
+ /**
17
+ * `TStructured` is any JSON value: 2026 clients accept non-object structured
18
+ * content, and the SDK wraps it as `{ result }` for 2025 clients.
19
+ */
20
+ export interface McpCallToolResult<TStructured = Readonly<Record<string, unknown>>> {
17
21
  readonly content: readonly McpContent[];
18
22
  readonly isError?: boolean;
19
23
  readonly structuredContent?: TStructured | McpToolOperationErrorEnvelope;
@@ -35,7 +39,7 @@ export type McpContent = {
35
39
  * change or re-read something; `not_found` means stop; `internal` means the
36
40
  * server failed and `errorId` correlates with its logs.
37
41
  */
38
- type McpToolOperationErrorCode = "invalid_input" | "not_found" | "conflict" | "internal";
42
+ type McpToolOperationErrorCode = "invalid_input" | "not_found" | "conflict" | "denied" | "approval_required" | "authorization_required" | "internal";
39
43
  interface McpToolOperationErrorData {
40
44
  readonly code: McpToolOperationErrorCode;
41
45
  readonly errorId?: string;
@@ -53,7 +57,7 @@ export interface McpServerTool {
53
57
  }
54
58
  type InferSchemaOutput<TSchema> = TSchema extends StandardSchemaWithJSON<unknown, infer TOutput> ? TOutput : never;
55
59
  /** Keeps a schema and its inferred handler input coupled while erasing heterogeneous storage. */
56
- export declare function defineMcpTool<const TInputSchema extends StandardSchemaWithJSON<unknown, unknown>, TStructured extends Readonly<Record<string, unknown>> = Readonly<Record<string, unknown>>>(input: {
60
+ export declare function defineMcpTool<const TInputSchema extends StandardSchemaWithJSON<unknown, unknown>, TStructured = Readonly<Record<string, unknown>>>(input: {
57
61
  readonly definition: McpToolDefinition<TInputSchema>;
58
62
  call(value: InferSchemaOutput<TInputSchema>, context: {
59
63
  readonly auth: SessionAuthContext | null;
@@ -1 +1 @@
1
- import{createLogger,logError}from"#internal/logging.js";import{McpServer,createMcpHandler}from"#compiled/@modelcontextprotocol/server/index.js";const log=createLogger(`mcp.server`),MCP_PROTOCOL_VERSION=`2026-07-28`,MCP_REQUEST_BODY_MAX_BYTES=1048576;var McpToolOperationError=class extends Error{code;constructor(e,t){super(t),this.name=`McpToolOperationError`,this.code=e}};const RETRYABLE_CODES=new Set([`conflict`]);function defineMcpTool(e){return{name:e.definition.name,register(t,n){t.registerTool(e.definition.name,{...e.definition.annotations===void 0?{}:{annotations:e.definition.annotations},...e.definition.description===void 0?{}:{description:e.definition.description},inputSchema:advertiseOnly(e.definition.inputSchema),...e.definition.outputSchema===void 0?{}:{outputSchema:e.definition.outputSchema}},async(t,r)=>{let i=await e.definition.inputSchema[`~standard`].validate(t);return i.issues===void 0?await callTool(e.call,i.value,r.mcpReq.signal,n):toolError({code:`invalid_input`,message:`Invalid arguments for tool ${e.definition.name}: ${i.issues.map(formatIssue).join(`, `)}`,retryable:!1})})}}}function advertiseOnly(e){let t=e[`~standard`];return{"~standard":{jsonSchema:t.jsonSchema,validate:e=>({value:e}),vendor:t.vendor,version:t.version}}}function formatIssue(e){return e.path===void 0||e.path.length===0?e.message:`${e.path.map(e=>String(typeof e==`object`?e.key:e)).join(`.`)}: ${e.message}`}function createMcpStreamableHttpServer(e){let t=new Map(e.tools.map(e=>[e.name,e]));if(t.size!==e.tools.length)throw Error(`MCP tool names must be unique.`);return async n=>{let r=await e.authenticate(n);if(r instanceof Response)return r;let i=createMcpHandler(()=>createServer(e,t,r),{legacy:`stateless`});if(n.method.toUpperCase()!==`POST`)return await i.fetch(n);let a=await inspectRequestBody(n);if(a.tooLarge)return requestBodyTooLargeResponse();if(a.invalidJson)return invalidJsonResponse();let o=a.value;if(o===void 0)return await i.fetch(n);let s=await preflightModernRequest(n,o);return s===void 0?await i.fetch(n,{parsedBody:o}):s}}async function preflightModernRequest(e,t){return e.headers.has(`mcp-protocol-version`)||!claimsCurrentProtocolVersion(t)?void 0:await probeEarlierValidationFailure(e,t)??headerMismatchResponse(t)}async function inspectRequestBody(e){let t=e.body;if(t===null)return{tooLarge:!1};let n=Number(e.headers.get(`content-length`));if(Number.isFinite(n)&&n>1048576)return await t.cancel().catch(()=>{}),{tooLarge:!0};let r=t.getReader(),i=[],a=0;try{for(;;){let e=await r.read();if(e.done)break;if(a+=e.value.byteLength,a>1048576)return await r.cancel(),{tooLarge:!0};i.push(e.value)}let e=new Uint8Array(a),t=0;for(let n of i)e.set(n,t),t+=n.byteLength;return{tooLarge:!1,value:JSON.parse(new TextDecoder().decode(e))}}catch{return{invalidJson:!0,tooLarge:!1}}}function invalidJsonResponse(){return Response.json({error:{code:-32700,message:`Parse error`},id:null,jsonrpc:`2.0`},{status:400})}function requestBodyTooLargeResponse(){return Response.json({error:{code:-32e3,message:`Request body too large`},id:null,jsonrpc:`2.0`},{status:413,statusText:`Request Entity Too Large`})}function claimsCurrentProtocolVersion(e){return isPlainRecord(e)&&isPlainRecord(e.params)&&isPlainRecord(e.params._meta)&&e.params._meta[`io.modelcontextprotocol/protocolVersion`]===`2026-07-28`}function isPlainRecord(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}async function probeEarlierValidationFailure(e,t){let n=new Headers(e.headers);n.set(`mcp-protocol-version`,MCP_PROTOCOL_VERSION);let r=new Request(e.url,{body:JSON.stringify(t),headers:n,method:e.method}),i=createMcpHandler(()=>new McpServer({name:`eve-mcp-preflight`,version:`0`}),{legacy:`reject`});try{let e=await i.fetch(r,{parsedBody:t});if(e.status===406||e.status===415)return e;if(e.status===400){let t=await e.clone().json().catch(()=>void 0);if(t?.error?.code===-32700||t?.error?.code===-32600||t?.error?.code===-32602||t?.error?.code===-32022)return e}await e.body?.cancel();return}finally{await i.close().catch(()=>{})}}function headerMismatchResponse(e){let t=`the body carries a modern MCP envelope but the required MCP-Protocol-Version header is absent`;return Response.json({error:{code:-32020,data:{mismatch:{body:t,header:`(missing)`}},message:`Bad Request: the request headers and body disagree: ${t}`},id:readJsonRpcRequestId(e),jsonrpc:`2.0`},{status:400})}function readJsonRpcRequestId(e){if(typeof e!=`object`||!e||Array.isArray(e))return null;let t=Reflect.get(e,`id`);return typeof t==`string`||typeof t==`number`?t:null}function createServer(e,t,n){let r={capabilities:{tools:{listChanged:!1}}};e.instructions!==void 0&&(r.instructions=e.instructions);let i=new McpServer({name:e.name,version:e.version},r);for(let e of t.values())e.register(i,n);return i}async function callTool(e,t,n,r){try{return await e(t,{auth:r,signal:n})}catch(e){return e instanceof McpToolOperationError?toolError({code:e.code,message:e.message,retryable:RETRYABLE_CODES.has(e.code)}):toolError({code:`internal`,errorId:logError(log,`MCP tool call failed`,e),message:`The server could not complete this tool call.`,retryable:!1})}}function toolError(e){return{content:[{type:`text`,text:e.errorId===void 0?e.message:`${e.message} (errorId: ${e.errorId})`}],isError:!0,structuredContent:{error:e}}}export{MCP_PROTOCOL_VERSION,MCP_REQUEST_BODY_MAX_BYTES,McpToolOperationError,createMcpStreamableHttpServer,defineMcpTool};
1
+ import{createLogger,logError}from"#internal/logging.js";import{context}from"#compiled/@opentelemetry/api/index.js";import{McpServer,createMcpHandler}from"#compiled/@modelcontextprotocol/server/index.js";import{withMcpRequestTraceContext}from"#internal/mcp/request-trace-context.js";const log=createLogger(`mcp.server`),MCP_PROTOCOL_VERSION=`2026-07-28`,MCP_REQUEST_BODY_MAX_BYTES=1048576;var McpToolOperationError=class extends Error{code;constructor(e,t){super(t),this.name=`McpToolOperationError`,this.code=e}};const RETRYABLE_CODES=new Set([`conflict`]);function defineMcpTool(e){return{name:e.definition.name,register(t,n){t.registerTool(e.definition.name,{...e.definition.annotations===void 0?{}:{annotations:e.definition.annotations},...e.definition.description===void 0?{}:{description:e.definition.description},inputSchema:advertiseOnly(e.definition.inputSchema),...e.definition.outputSchema===void 0?{}:{outputSchema:e.definition.outputSchema}},async(t,r)=>{let i=await e.definition.inputSchema[`~standard`].validate(t);return i.issues===void 0?await callTool(e.call,i.value,r.mcpReq.signal,n):toolError({code:`invalid_input`,message:`Invalid arguments for tool ${e.definition.name}: ${i.issues.map(formatIssue).join(`, `)}`,retryable:!1})})}}}function advertiseOnly(e){let t=e[`~standard`];return{"~standard":{jsonSchema:t.jsonSchema,validate:e=>({value:e}),vendor:t.vendor,version:t.version}}}function formatIssue(e){return e.path===void 0||e.path.length===0?e.message:`${e.path.map(e=>String(typeof e==`object`?e.key:e)).join(`.`)}: ${e.message}`}function createMcpStreamableHttpServer(e){let t=new Map(e.tools.map(e=>[e.name,e]));if(t.size!==e.tools.length)throw Error(`MCP tool names must be unique.`);return async n=>{let r=await e.authenticate(n);if(r instanceof Response)return r;let i=createMcpHandler(()=>createServer(e,t,r),{legacy:`stateless`});if(n.method.toUpperCase()!==`POST`)return await i.fetch(n);let a=await inspectRequestBody(n);if(a.tooLarge)return requestBodyTooLargeResponse();if(a.invalidJson)return invalidJsonResponse();let o=a.value;if(o===void 0)return await i.fetch(n);let s=await preflightModernRequest(n,o);return s===void 0?await context.with(withMcpRequestTraceContext(context.active(),o),()=>i.fetch(n,{parsedBody:o})):s}}async function preflightModernRequest(e,t){return e.headers.has(`mcp-protocol-version`)||!claimsCurrentProtocolVersion(t)?void 0:await probeEarlierValidationFailure(e,t)??headerMismatchResponse(t)}async function inspectRequestBody(e){let t=e.body;if(t===null)return{tooLarge:!1};let n=Number(e.headers.get(`content-length`));if(Number.isFinite(n)&&n>1048576)return await t.cancel().catch(()=>{}),{tooLarge:!0};let r=t.getReader(),i=[],a=0;try{for(;;){let e=await r.read();if(e.done)break;if(a+=e.value.byteLength,a>1048576)return await r.cancel(),{tooLarge:!0};i.push(e.value)}let e=new Uint8Array(a),t=0;for(let n of i)e.set(n,t),t+=n.byteLength;return{tooLarge:!1,value:JSON.parse(new TextDecoder().decode(e))}}catch{return{invalidJson:!0,tooLarge:!1}}}function invalidJsonResponse(){return Response.json({error:{code:-32700,message:`Parse error`},id:null,jsonrpc:`2.0`},{status:400})}function requestBodyTooLargeResponse(){return Response.json({error:{code:-32e3,message:`Request body too large`},id:null,jsonrpc:`2.0`},{status:413,statusText:`Request Entity Too Large`})}function claimsCurrentProtocolVersion(e){return isPlainRecord(e)&&isPlainRecord(e.params)&&isPlainRecord(e.params._meta)&&e.params._meta[`io.modelcontextprotocol/protocolVersion`]===`2026-07-28`}function isPlainRecord(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}async function probeEarlierValidationFailure(e,t){let n=new Headers(e.headers);n.set(`mcp-protocol-version`,MCP_PROTOCOL_VERSION);let r=new Request(e.url,{body:JSON.stringify(t),headers:n,method:e.method}),i=createMcpHandler(()=>new McpServer({name:`eve-mcp-preflight`,version:`0`}),{legacy:`reject`});try{let e=await i.fetch(r,{parsedBody:t});if(e.status===406||e.status===415)return e;if(e.status===400){let t=await e.clone().json().catch(()=>void 0);if(t?.error?.code===-32700||t?.error?.code===-32600||t?.error?.code===-32602||t?.error?.code===-32022)return e}await e.body?.cancel();return}finally{await i.close().catch(()=>{})}}function headerMismatchResponse(e){let t=`the body carries a modern MCP envelope but the required MCP-Protocol-Version header is absent`;return Response.json({error:{code:-32020,data:{mismatch:{body:t,header:`(missing)`}},message:`Bad Request: the request headers and body disagree: ${t}`},id:readJsonRpcRequestId(e),jsonrpc:`2.0`},{status:400})}function readJsonRpcRequestId(e){if(typeof e!=`object`||!e||Array.isArray(e))return null;let t=Reflect.get(e,`id`);return typeof t==`string`||typeof t==`number`?t:null}function createServer(e,t,n){let r={capabilities:{tools:{listChanged:!1}}};e.instructions!==void 0&&(r.instructions=e.instructions);let i=new McpServer({name:e.name,version:e.version},r);for(let e of t.values())e.register(i,n);return i}async function callTool(e,t,n,r){try{return await e(t,{auth:r,signal:n})}catch(e){return e instanceof McpToolOperationError?toolError({code:e.code,message:e.message,retryable:RETRYABLE_CODES.has(e.code)}):toolError({code:`internal`,errorId:logError(log,`MCP tool call failed`,e),message:`The server could not complete this tool call.`,retryable:!1})}}function toolError(e){return{content:[{type:`text`,text:e.errorId===void 0?e.message:`${e.message} (errorId: ${e.errorId})`}],isError:!0,structuredContent:{error:e}}}export{MCP_PROTOCOL_VERSION,MCP_REQUEST_BODY_MAX_BYTES,McpToolOperationError,createMcpStreamableHttpServer,defineMcpTool};
@@ -1,8 +1,8 @@
1
- import { type Experimental_EvaluationModel as EvaluationModel, type LanguageModel } from "ai";
1
+ import { createGateway, type LanguageModel } from "ai";
2
2
  export { MODEL_CONNECTION_ENV } from "#shared/model-helper.js";
3
3
  export { resolveModelApiKey } from "./api-key.js";
4
4
  export declare function createDirectModelFetch(provider: "openai" | "anthropic"): typeof fetch;
5
5
  /** Resolve the connection for every request, including models constructed before /login. */
6
6
  export declare function localGatewayModel(id: string): LanguageModel | undefined;
7
- /** Resolve an evaluation model through the same local Gateway connection used by language models. */
8
- export declare function localGatewayEvaluationModel(id: string): Exclude<EvaluationModel, string> | undefined;
7
+ /** Resolve a decision model through the same local Gateway connection used by language models. */
8
+ export declare function localGatewayDecisionModel(id: string): ReturnType<ReturnType<typeof createGateway>["decisionModel"]> | undefined;