eve 0.36.0 → 0.37.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (277) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/README.md +1 -0
  3. package/dist/src/channel/routes.d.ts +13 -3
  4. package/dist/src/channel/routes.js +1 -1
  5. package/dist/src/channel/session-callback.js +1 -1
  6. package/dist/src/channel/session.d.ts +2 -1
  7. package/dist/src/channel/session.js +1 -1
  8. package/dist/src/channel/types.d.ts +41 -0
  9. package/dist/src/chunks/{use-eve-agent-CnppTEFk.js → use-eve-agent-Bi5fRxcZ.js} +9 -1
  10. package/dist/src/chunks/{use-eve-agent-COmP-H8R.js → use-eve-agent-DbKUBhl-.js} +9 -1
  11. package/dist/src/cli/commands/agent-instructions.d.ts +4 -4
  12. package/dist/src/cli/commands/init-confirm.d.ts +12 -0
  13. package/dist/src/cli/commands/init-confirm.js +1 -0
  14. package/dist/src/cli/commands/init-git.js +1 -1
  15. package/dist/src/cli/commands/init-recovery.d.ts +3 -0
  16. package/dist/src/cli/commands/init-recovery.js +3 -0
  17. package/dist/src/cli/commands/init-target.d.ts +21 -0
  18. package/dist/src/cli/commands/init-target.js +1 -0
  19. package/dist/src/cli/commands/init.d.ts +6 -5
  20. package/dist/src/cli/commands/init.js +1 -1
  21. package/dist/src/cli/dev/tui/runner.d.ts +8 -0
  22. package/dist/src/cli/dev/tui/runner.js +1 -1
  23. package/dist/src/cli/dev/tui/subagent-pump.d.ts +27 -22
  24. package/dist/src/cli/dev/tui/subagent-pump.js +1 -1
  25. package/dist/src/cli/dev/tui/terminal-renderer.d.ts +16 -0
  26. package/dist/src/cli/dev/tui/terminal-renderer.js +12 -12
  27. package/dist/src/cli/dev/tui/tool-presentation.js +1 -1
  28. package/dist/src/cli/run.d.ts +1 -0
  29. package/dist/src/cli/run.js +3 -3
  30. package/dist/src/client/open-stream.d.ts +2 -0
  31. package/dist/src/client/open-stream.js +1 -1
  32. package/dist/src/client/session.js +1 -1
  33. package/dist/src/compiled/.vendor-stamp.json +3 -1
  34. package/dist/src/compiled/@modelcontextprotocol/server/LICENSE +216 -0
  35. package/dist/src/compiled/@modelcontextprotocol/server/index.d.ts +98 -0
  36. package/dist/src/compiled/@modelcontextprotocol/server/index.js +80 -0
  37. package/dist/src/compiled/@vercel/sandbox/api-client/api-client.d.ts +339 -0
  38. package/dist/src/compiled/@vercel/sandbox/api-client/index.d.ts +1 -1
  39. package/dist/src/compiled/@vercel/sandbox/api-client/validators.d.ts +25 -1
  40. package/dist/src/compiled/@vercel/sandbox/drive.d.ts +140 -0
  41. package/dist/src/compiled/@vercel/sandbox/index.d.ts +3 -2
  42. package/dist/src/compiled/@vercel/sandbox/index.js +13 -13
  43. package/dist/src/compiled/@vercel/sandbox/sandbox.d.ts +55 -18
  44. package/dist/src/compiled/@vercel/sandbox-stable/LICENSE +201 -0
  45. package/dist/src/compiled/@vercel/sandbox-stable/_async-retry.d.ts +8 -0
  46. package/dist/src/compiled/@vercel/sandbox-stable/_workflow-serde.d.ts +5 -0
  47. package/dist/src/compiled/@vercel/sandbox-stable/api-client/api-client.d.ts +1456 -0
  48. package/dist/src/compiled/@vercel/sandbox-stable/api-client/api-error.d.ts +29 -0
  49. package/dist/src/compiled/@vercel/sandbox-stable/api-client/base-client.d.ts +39 -0
  50. package/dist/src/compiled/@vercel/sandbox-stable/api-client/file-writer.d.ts +66 -0
  51. package/dist/src/compiled/@vercel/sandbox-stable/api-client/index.d.ts +2 -0
  52. package/dist/src/compiled/@vercel/sandbox-stable/api-client/validators.d.ts +899 -0
  53. package/dist/src/compiled/@vercel/sandbox-stable/api-client/with-retry.d.ts +10 -0
  54. package/dist/src/compiled/@vercel/sandbox-stable/auth/error.d.ts +15 -0
  55. package/dist/src/compiled/@vercel/sandbox-stable/auth/file.d.ts +18 -0
  56. package/dist/src/compiled/@vercel/sandbox-stable/auth/index.d.ts +6 -0
  57. package/dist/src/compiled/@vercel/sandbox-stable/auth/oauth.d.ts +111 -0
  58. package/dist/src/compiled/@vercel/sandbox-stable/auth/poll-for-token.d.ts +28 -0
  59. package/dist/src/compiled/@vercel/sandbox-stable/auth/project.d.ts +40 -0
  60. package/dist/src/compiled/@vercel/sandbox-stable/command.d.ts +292 -0
  61. package/dist/src/compiled/@vercel/sandbox-stable/constants.d.ts +5 -0
  62. package/dist/src/compiled/@vercel/sandbox-stable/execution-context.d.ts +116 -0
  63. package/dist/src/compiled/@vercel/sandbox-stable/filesystem.d.ts +258 -0
  64. package/dist/src/compiled/@vercel/sandbox-stable/index.d.ts +12 -0
  65. package/dist/src/compiled/@vercel/sandbox-stable/index.js +1 -0
  66. package/dist/src/compiled/@vercel/sandbox-stable/network-policy.d.ts +169 -0
  67. package/dist/src/compiled/@vercel/sandbox-stable/proxy.d.ts +55 -0
  68. package/dist/src/compiled/@vercel/sandbox-stable/sandbox-user.d.ts +212 -0
  69. package/dist/src/compiled/@vercel/sandbox-stable/sandbox.d.ts +1216 -0
  70. package/dist/src/compiled/@vercel/sandbox-stable/session.d.ts +433 -0
  71. package/dist/src/compiled/@vercel/sandbox-stable/snapshot.d.ts +229 -0
  72. package/dist/src/compiled/@vercel/sandbox-stable/utils/get-credentials.d.ts +21 -0
  73. package/dist/src/compiled/@vercel/sandbox-stable/utils/paginator.d.ts +16 -0
  74. package/dist/src/compiled/@vercel/sandbox-stable/utils/resolveSignal.d.ts +15 -0
  75. package/dist/src/compiled/@vercel/sandbox-stable/utils/sandbox-snapshot.d.ts +11 -0
  76. package/dist/src/compiled/@vercel/sandbox-stable/utils/types.d.ts +11 -0
  77. package/dist/src/compiled/_chunks/node/{auth-BS3UoyvT.js → auth-BaNbsImr.js} +1 -1
  78. package/dist/src/compiled/_chunks/node/version-BYHw-SDY.js +1 -0
  79. package/dist/src/compiler/extension-compatibility.d.ts +10 -10
  80. package/dist/src/compiler/extension-compatibility.js +1 -1
  81. package/dist/src/compiler/manifest.js +1 -1
  82. package/dist/src/compiler/normalize-agent-config.js +1 -1
  83. package/dist/src/compiler/normalize-manifest.js +1 -1
  84. package/dist/src/compiler/normalize-subagent.d.ts +1 -1
  85. package/dist/src/compiler/normalize-subagent.js +1 -1
  86. package/dist/src/context/serialized-dynamic-model-selection.d.ts +2 -0
  87. package/dist/src/context/serialized-dynamic-model-selection.js +1 -0
  88. package/dist/src/execution/agent-handle-dispatch.d.ts +15 -1
  89. package/dist/src/execution/agent-handle-dispatch.js +1 -1
  90. package/dist/src/execution/cancel-descendant-turns-step.js +1 -1
  91. package/dist/src/execution/delegated-parent-notification.d.ts +17 -0
  92. package/dist/src/execution/delegated-parent-notification.js +1 -1
  93. package/dist/src/execution/deliver-payloads.js +1 -1
  94. package/dist/src/execution/dispatch-runtime-actions-shared.d.ts +155 -0
  95. package/dist/src/execution/dispatch-runtime-actions-shared.js +1 -0
  96. package/dist/src/execution/dispatch-runtime-actions-step.d.ts +18 -14
  97. package/dist/src/execution/dispatch-runtime-actions-step.js +1 -1
  98. package/dist/src/execution/dispatch-workflow-runtime-actions-step.d.ts +7 -2
  99. package/dist/src/execution/dispatch-workflow-runtime-actions-step.js +1 -1
  100. package/dist/src/execution/effective-output-schema.d.ts +21 -0
  101. package/dist/src/execution/effective-output-schema.js +1 -0
  102. package/dist/src/execution/eve-workflow-attributes.d.ts +2 -0
  103. package/dist/src/execution/node-step.js +1 -1
  104. package/dist/src/execution/parked-delivery-wait.d.ts +8 -12
  105. package/dist/src/execution/parked-delivery-wait.js +1 -1
  106. package/dist/src/execution/{route-proxied-deliver-step.d.ts → proxied-deliver-step.d.ts} +7 -4
  107. package/dist/src/execution/proxied-deliver-step.js +1 -0
  108. package/dist/src/execution/remote-agent-dispatch.d.ts +32 -0
  109. package/dist/src/execution/remote-agent-dispatch.js +1 -1
  110. package/dist/src/execution/remote-agent-route-url.d.ts +2 -0
  111. package/dist/src/execution/remote-agent-route-url.js +1 -0
  112. package/dist/src/execution/route-child-delivery.d.ts +2 -1
  113. package/dist/src/execution/route-child-delivery.js +1 -1
  114. package/dist/src/execution/sandbox/bindings/vercel.d.ts +2 -1
  115. package/dist/src/execution/sandbox/bindings/vercel.js +1 -1
  116. package/dist/src/execution/session-callback-step.d.ts +11 -0
  117. package/dist/src/execution/session-callback-step.js +1 -1
  118. package/dist/src/execution/session-command-wire.js +1 -1
  119. package/dist/src/execution/session-state-cursor.d.ts +25 -0
  120. package/dist/src/execution/session-state-cursor.js +1 -0
  121. package/dist/src/execution/settle-cancelled-turn-step.d.ts +2 -0
  122. package/dist/src/execution/settle-cancelled-turn-step.js +1 -1
  123. package/dist/src/execution/subagent-event-proxy-step.d.ts +15 -0
  124. package/dist/src/execution/subagent-event-proxy-step.js +1 -1
  125. package/dist/src/execution/subagent-hitl-proxy.d.ts +14 -7
  126. package/dist/src/execution/subagent-hitl-proxy.js +1 -1
  127. package/dist/src/execution/subagent-start-local.d.ts +29 -0
  128. package/dist/src/execution/subagent-start-local.js +1 -0
  129. package/dist/src/execution/subagent-start-remote.d.ts +23 -0
  130. package/dist/src/execution/subagent-start-remote.js +1 -0
  131. package/dist/src/execution/task-event-callback.d.ts +13 -0
  132. package/dist/src/execution/task-event-callback.js +1 -0
  133. package/dist/src/execution/task-input-capability.d.ts +4 -0
  134. package/dist/src/execution/task-input-capability.js +1 -0
  135. package/dist/src/execution/tasks/child/steps.d.ts +46 -0
  136. package/dist/src/execution/tasks/child/steps.js +1 -0
  137. package/dist/src/execution/tasks/child/workflow.d.ts +31 -0
  138. package/dist/src/execution/tasks/child/workflow.js +1 -0
  139. package/dist/src/execution/tasks/parent/agent-identity.d.ts +13 -0
  140. package/dist/src/execution/tasks/parent/agent-identity.js +1 -0
  141. package/dist/src/execution/tasks/parent/agent-views.d.ts +6 -0
  142. package/dist/src/execution/tasks/parent/agent-views.js +1 -0
  143. package/dist/src/execution/tasks/parent/continuation-dispatch.d.ts +37 -0
  144. package/dist/src/execution/tasks/parent/continuation-dispatch.js +1 -0
  145. package/dist/src/execution/tasks/parent/control-shared.d.ts +36 -0
  146. package/dist/src/execution/tasks/parent/control-shared.js +1 -0
  147. package/dist/src/execution/tasks/parent/delegate.d.ts +70 -0
  148. package/dist/src/execution/tasks/parent/delegate.js +1 -0
  149. package/dist/src/execution/tasks/parent/dispatch-task-step.d.ts +19 -0
  150. package/dist/src/execution/tasks/parent/dispatch-task-step.js +1 -0
  151. package/dist/src/execution/tasks/parent/dispatch.d.ts +33 -0
  152. package/dist/src/execution/tasks/parent/dispatch.js +1 -0
  153. package/dist/src/execution/tasks/parent/hitl-proxy-steps.d.ts +29 -0
  154. package/dist/src/execution/tasks/parent/hitl-proxy-steps.js +1 -0
  155. package/dist/src/execution/tasks/parent/run-parent.d.ts +72 -0
  156. package/dist/src/execution/tasks/parent/run-parent.js +1 -0
  157. package/dist/src/execution/tasks/parent/send.d.ts +25 -0
  158. package/dist/src/execution/tasks/parent/send.js +1 -0
  159. package/dist/src/execution/tasks/workflow-target.d.ts +2 -0
  160. package/dist/src/execution/tasks/workflow-target.js +1 -0
  161. package/dist/src/execution/terminate-child-sessions-step.d.ts +1 -0
  162. package/dist/src/execution/terminate-child-sessions-step.js +1 -1
  163. package/dist/src/execution/turn-control-receiver.d.ts +10 -0
  164. package/dist/src/execution/turn-control-receiver.js +1 -1
  165. package/dist/src/execution/turn-dispatch.d.ts +2 -0
  166. package/dist/src/execution/turn-dispatch.js +1 -1
  167. package/dist/src/execution/turn-execution-cursor.d.ts +2 -8
  168. package/dist/src/execution/turn-execution-cursor.js +1 -1
  169. package/dist/src/execution/turn-workflow.js +1 -1
  170. package/dist/src/execution/workflow-callback-url.d.ts +5 -0
  171. package/dist/src/execution/workflow-callback-url.js +1 -1
  172. package/dist/src/execution/workflow-entry.js +1 -1
  173. package/dist/src/execution/workflow-runtime.d.ts +9 -0
  174. package/dist/src/execution/workflow-runtime.js +1 -1
  175. package/dist/src/execution/workflow-steps.d.ts +7 -21
  176. package/dist/src/execution/workflow-steps.js +1 -1
  177. package/dist/src/harness/advertised-tools.js +1 -1
  178. package/dist/src/harness/authorization.js +1 -1
  179. package/dist/src/harness/execute-tool.d.ts +7 -0
  180. package/dist/src/harness/handles/prompt.d.ts +12 -0
  181. package/dist/src/harness/handles/prompt.js +2 -1
  182. package/dist/src/harness/handles/query.js +1 -1
  183. package/dist/src/harness/handles/store.d.ts +9 -2
  184. package/dist/src/harness/handles/store.js +1 -1
  185. package/dist/src/harness/handles/transitions.d.ts +10 -1
  186. package/dist/src/harness/handles/transitions.js +1 -1
  187. package/dist/src/harness/proxy-input-requests.d.ts +21 -4
  188. package/dist/src/harness/proxy-input-requests.js +1 -1
  189. package/dist/src/harness/runtime-actions.d.ts +2 -0
  190. package/dist/src/harness/runtime-actions.js +1 -1
  191. package/dist/src/harness/session-limit-enforcement.js +1 -1
  192. package/dist/src/harness/tool-loop.js +2 -2
  193. package/dist/src/harness/workflow-runtime-action-state.js +1 -1
  194. package/dist/src/internal/application/package.js +1 -1
  195. package/dist/src/internal/authored-definition/core.js +1 -1
  196. package/dist/src/internal/invocation/agent-invocation.d.ts +54 -0
  197. package/dist/src/internal/invocation/agent-invocation.js +1 -0
  198. package/dist/src/internal/invocation/attributes.d.ts +2 -0
  199. package/dist/src/internal/invocation/attributes.js +1 -0
  200. package/dist/src/internal/invocation/metadata.d.ts +9 -0
  201. package/dist/src/internal/invocation/metadata.js +1 -0
  202. package/dist/src/internal/invocation/workflow-execution.d.ts +32 -0
  203. package/dist/src/internal/invocation/workflow-execution.js +1 -0
  204. package/dist/src/internal/mcp/http-security.d.ts +12 -0
  205. package/dist/src/internal/mcp/http-security.js +1 -0
  206. package/dist/src/internal/mcp/protected-resource.d.ts +9 -0
  207. package/dist/src/internal/mcp/protected-resource.js +1 -0
  208. package/dist/src/internal/mcp/streamable-http-server.d.ts +51 -0
  209. package/dist/src/internal/mcp/streamable-http-server.js +1 -0
  210. package/dist/src/internal/nitro/routes/channel-dispatch.js +1 -1
  211. package/dist/src/internal/nitro/routes/channel-route-context.d.ts +14 -0
  212. package/dist/src/internal/nitro/routes/channel-route-context.js +1 -1
  213. package/dist/src/internal/nitro/routes/runtime-stack.d.ts +2 -0
  214. package/dist/src/internal/nitro/routes/runtime-stack.js +1 -1
  215. package/dist/src/internal/vercel-agent-summary.d.ts +1 -1
  216. package/dist/src/packages/eve-catalog/src/index.js +1 -1
  217. package/dist/src/protocol/message.d.ts +28 -0
  218. package/dist/src/protocol/message.js +2 -2
  219. package/dist/src/protocol/routes.d.ts +14 -0
  220. package/dist/src/protocol/routes.js +1 -1
  221. package/dist/src/public/channels/auth.d.ts +36 -0
  222. package/dist/src/public/channels/auth.js +1 -1
  223. package/dist/src/public/channels/eve.js +1 -1
  224. package/dist/src/public/channels/mcp.d.ts +19 -0
  225. package/dist/src/public/channels/mcp.js +1 -0
  226. package/dist/src/public/definitions/channel.d.ts +2 -2
  227. package/dist/src/public/definitions/channel.js +1 -1
  228. package/dist/src/public/sandbox/backends/vercel.d.ts +5 -4
  229. package/dist/src/public/sandbox/backends/vercel.js +1 -1
  230. package/dist/src/public/sandbox/vercel-sandbox.d.ts +25 -1
  231. package/dist/src/public/sandbox/vercel.d.ts +2 -1
  232. package/dist/src/public/sandbox/vercel.js +1 -1
  233. package/dist/src/react/use-eve-agent.js +1 -1
  234. package/dist/src/runtime/actions/types.d.ts +9 -0
  235. package/dist/src/runtime/actions/types.js +1 -1
  236. package/dist/src/runtime/agent/bootstrap.js +1 -1
  237. package/dist/src/runtime/connections/authorization-complete-page.js +70 -28
  238. package/dist/src/runtime/framework-channels/index.js +1 -1
  239. package/dist/src/runtime/framework-tools/index.js +1 -1
  240. package/dist/src/runtime/framework-tools/tasks.d.ts +95 -0
  241. package/dist/src/runtime/framework-tools/tasks.js +1 -0
  242. package/dist/src/runtime/prompt/compose.d.ts +1 -0
  243. package/dist/src/runtime/prompt/compose.js +1 -1
  244. package/dist/src/runtime/resolve-agent-graph.js +1 -1
  245. package/dist/src/runtime/resolve-agent.js +1 -1
  246. package/dist/src/runtime/session-callback-route.js +1 -1
  247. package/dist/src/runtime/task-input-response-route.d.ts +5 -0
  248. package/dist/src/runtime/task-input-response-route.js +1 -0
  249. package/dist/src/setup/scaffold/create/add-to-project.js +1 -1
  250. package/dist/src/setup/scaffold/create/project.js +1 -1
  251. package/dist/src/setup/scaffold/create/web-template.d.ts +1 -1
  252. package/dist/src/setup/scaffold/create/web-template.js +0 -1
  253. package/dist/src/shared/agent-definition.d.ts +7 -0
  254. package/dist/src/shared/sandbox-network-policy.d.ts +1 -1
  255. package/dist/src/svelte/index.js +1 -1
  256. package/dist/src/svelte/use-eve-agent.js +1 -1
  257. package/dist/src/tasks/json.d.ts +88 -0
  258. package/dist/src/tasks/json.js +1 -0
  259. package/dist/src/tasks/session-index.d.ts +48 -0
  260. package/dist/src/tasks/session-index.js +1 -0
  261. package/dist/src/tasks/task-id.d.ts +34 -0
  262. package/dist/src/tasks/task-id.js +1 -0
  263. package/dist/src/tasks/transitions.d.ts +23 -0
  264. package/dist/src/tasks/transitions.js +1 -0
  265. package/dist/src/tasks/types.d.ts +295 -0
  266. package/dist/src/tasks/types.js +1 -0
  267. package/dist/src/tasks/wire.d.ts +26 -0
  268. package/dist/src/tasks/wire.js +1 -0
  269. package/dist/src/vue/index.js +1 -1
  270. package/dist/src/vue/use-eve-agent.js +1 -1
  271. package/docs/channels/eve.mdx +14 -0
  272. package/docs/guides/client/streaming.mdx +1 -1
  273. package/docs/reference/cli.md +10 -6
  274. package/docs/tools/human-in-the-loop.md +3 -1
  275. package/package.json +8 -1
  276. package/dist/src/compiled/_chunks/node/version-Cztrk7z6.js +0 -1
  277. package/dist/src/execution/route-proxied-deliver-step.js +0 -1
@@ -1,3 +1,3 @@
1
- import{createErrorId,createLogger,formatError,logError,recordErrorOnSpan}from"#internal/logging.js";import{isScheduleAppAuth}from"#channel/schedule-auth.js";import{AuthKey,ChannelInstrumentationKey,ParentSessionKey,ParentTraceContextKey,SessionCallbackKey}from"#context/keys.js";import{resolveInstalledPackageInfo}from"#internal/application/package.js";import{toErrorMessage}from"#shared/errors.js";import{createActionResultEvent,createApprovalCandidateEvent,createApprovalSettledEvent,createAuthorizationCompletedEvent,createAuthorizationRequiredEvent,createCompactionCompletedEvent,createCompactionRequestedEvent,createContextClearedEvent,createInputRequestedEvent,createMessageCompletedEvent,createResultCompletedEvent,createSessionWaitingEvent,createStepStartedEvent}from"#protocol/message.js";import{summarizeKnownError}from"#harness/semantic-errors/index.js";import{resolveProviderHeaders}from"#internal/gateway.js";import{formatLanguageModelGatewayId}from"#internal/runtime-model.js";import{contextStorage}from"#context/container.js";import{ChannelKey}from"#runtime/sessions/runtime-context-keys.js";import{advanceStep,emitFailedStep,emitRecoverableFailedTurn,emitStepStarted,emitStreamContent,emitTurnEpilogue,emitTurnPreamble,getHarnessEmissionState,setHarnessEmissionState}from"#harness/emission.js";import{ToolLoopAgent,isStepCount}from"ai";import{getAgentHandleStore}from"#harness/handles/store.js";import{buildDynamicSubagentTools}from"#context/dynamic-subagent-lifecycle.js";import{normalizeUserContent,resolveAssistantStepText}from"#harness/messages.js";import{createRuntimeActionRequestFromToolCall,resolvePendingRuntimeActions,setPendingRuntimeActionBatch}from"#harness/runtime-actions.js";import{activeTurnId}from"#harness/active-turn-id.js";import{clearPendingWorkflowInterrupt,getPendingWorkflowInterrupt,setPendingWorkflowInterrupt}from"#harness/workflow-interrupt-state.js";import{getWorkflowRuntimeActionInterrupts,isWorkflowRuntimeActionInterrupt}from"#harness/workflow-runtime-action-state.js";import{getActiveDynamicModelSelection,isDynamicModelSelectionError}from"#context/dynamic-model-lifecycle.js";import{getInstrumentationRuntime}from"#harness/instrumentation/runtime.js";import{appendPendingInputBatch,consumeDeferredStepInput,getApprovedTools,getPendingInputRequestIds,hasDeferredStepInput,hasPendingApprovalBatch,hasStepInput,resolvePendingInput}from"#harness/input-requests.js";import{createInstrumentationHandleEvent,publishInputResolutions}from"#harness/instrumentation/native-events.js";import{context,trace}from"#compiled/@opentelemetry/api/index.js";import{getSupersededAuthorizationChallenges,isAuthorizationSignal,setPendingAuthorization}from"#harness/authorization.js";import{throwIfTurnAborted}from"#harness/turn-cancellation.js";import{buildDynamicInstructionMessages,drainDynamicInstructionUserMessages,prepareDynamicInstructionPreamble}from"#context/dynamic-instruction-lifecycle.js";import{PendingSkillAnnouncementKey}from"#context/dynamic-skill-lifecycle.js";import{accumulateTurnUsage,getTurnUsageState,setTurnUsageState}from"#harness/turn-tag-state.js";import{resolveParentLineage}from"#harness/parent-lineage.js";import{prepareTurnTraceContext}from"#harness/prepare-trace-context.js";import{getWorkflowContinuationSecurity,readWorkflowContinuationSecurity}from"#harness/workflow-continuation-security.js";import{buildWorkflowHostTools,resolveWorkflowSandboxBridgeRequestLimit}from"#harness/workflow-sandbox.js";import{attemptIdempotencyKey}from"#harness/instrumentation/lifecycle.js";import{getApprovalAuditState,markApprovalCandidateHistoryEventEmitted,markApprovalCandidatePendingEventEmitted,markApprovalSettlementEventEmitted}from"#harness/approval-candidates.js";import{queueDeferredStepInput}from"#harness/pending-input-batches.js";import{CONDITIONAL_DELIVERY_INSTRUCTION,EMPTY_DELIVERY_SENTINEL,hasEmptyDeliverySentinel}from"#shared/empty-delivery.js";import{createToolResultMessagePartFromToolError}from"#harness/action-result-helpers.js";import{getInvalidToolCallInputError,isInvalidToolCall}from"#harness/tool-call-input-errors.js";import{EmptyModelResponseError,classifyModelCallError,extractModelCallErrorDetails,extractUnsupportedProviderToolTypes,extractUpstreamRejectionMessage,isNoOutputGeneratedError}from"#harness/model-call-error.js";import{readToolInterrupt}from"#harness/tool-interrupts.js";import{ASK_QUESTION_TOOL_NAME}from"#runtime/framework-tools/ask-question.js";import{extractQuestionInputRequests,extractToolApprovalInputRequests}from"#harness/input-extraction.js";import{applyLastToolCacheBreakpoint,applySystemCacheBreakpoint,detectPromptCachePath,getAnthropicCacheMarker}from"#harness/prompt-cache.js";import{requireSessionModelReference}from"#harness/types.js";import{buildDynamicTools,buildResponseAuthorizationTools}from"#context/build-dynamic-tools.js";import{resolveAgentsAnnouncement}from"#harness/handles/prompt.js";import{hydrateSandboxAttachments,stageAttachmentsToSandbox}from"#harness/attachment-staging.js";import{createWorkflowLifecycle}from"#harness/workflow-lifecycle.js";import{compactMessages,getInputTokenCount,resolveCompactionModel,shouldCompact}from"#harness/compaction.js";import{applySessionLimitContinuation,enforceSessionTokenLimit}from"#harness/session-limit-enforcement.js";import{setEveAttributes}from"#runtime/attributes/emit.js";import{coordinateApprovalDelivery,shouldPrepareApprovalPolicyTools}from"#harness/approval-delivery-coordinator.js";import{buildTelemetryRuntimeContext}from"#harness/instrumentation/runtime-context.js";import{createAiSdkHookBridge}from"#harness/ai-sdk-hook-bridge.js";import{convertStaleResponsesToUserMessage,dropStaleSessionLimitContinuationResponses}from"#harness/stale-input-responses.js";import{getInstrumentationConfig}from"#harness/instrumentation/config.js";import{normalizeProviderToolHistory}from"#harness/provider-tool-history.js";import{extractWorkflowStreamWriteErrorDetails}from"#harness/workflow-stream-error.js";import{ensureOtelIntegration,getRegisteredTelemetryIntegrations}from"#harness/ai-sdk-telemetry.js";import{getAdvertisedTools}from"#harness/advertised-tools.js";import{resolveFrameworkToolFromUpstreamType}from"#harness/provider-tools.js";import{buildStepHooks,emitStepActions}from"#harness/step-hooks.js";import{buildToolApproval,buildToolSetFromDefinitions,buildToolSetWithProviderTools}from"#harness/tools.js";import{continueWorkflowSandboxInterrupt,getWorkflowSandboxInterrupt,unwrapWorkflowSandboxResult}from"#shared/workflow-sandbox.js";import{FINAL_OUTPUT_TOOL_NAME,buildFinalOutputTool}from"#runtime/framework-tools/final-output.js";const environment=process.env.NODE_ENV??`unknown`,eveVersion=resolveInstalledPackageInfo().version,log=createLogger(`harness.tool-loop`);function logToolExecutionError(e){e.toolOutput.type===`tool-error`&&logError(log,`tool execution failed`,e.toolOutput.error,{toolName:e.toolCall.toolName,toolCallId:e.toolCall.toolCallId})}function enrichTelemetry(e,t,n,r){if(e===void 0&&r===void 0)return;let i={};for(let e of Object.keys(n??{}))i[e]=!0;return{functionId:e?.functionId??t,includeRuntimeContext:i,integrations:r===void 0?void 0:[r,...getRegisteredTelemetryIntegrations()],isEnabled:!0,recordInputs:e?.recordInputs??!1,recordOutputs:e?.recordOutputs??!1}}function mergeSystemInstructions(e){if(e.length===0)return;if(e.length===1)return{...e[0]};let t;for(let n of e)n.providerOptions!==void 0&&(t={...t,...n.providerOptions});let n={role:`system`,content:e.map(e=>e.content).join(`
1
+ import{createErrorId,createLogger,formatError,logError,recordErrorOnSpan}from"#internal/logging.js";import{isScheduleAppAuth}from"#channel/schedule-auth.js";import{AuthKey,ChannelInstrumentationKey,ParentSessionKey,ParentTraceContextKey,SessionCallbackKey}from"#context/keys.js";import{resolveInstalledPackageInfo}from"#internal/application/package.js";import{toErrorMessage}from"#shared/errors.js";import{createActionResultEvent,createApprovalCandidateEvent,createApprovalSettledEvent,createAuthorizationCompletedEvent,createAuthorizationRequiredEvent,createCompactionCompletedEvent,createCompactionRequestedEvent,createContextClearedEvent,createInputRequestedEvent,createMessageCompletedEvent,createResultCompletedEvent,createSessionWaitingEvent,createStepStartedEvent}from"#protocol/message.js";import{summarizeKnownError}from"#harness/semantic-errors/index.js";import{resolveProviderHeaders}from"#internal/gateway.js";import{formatLanguageModelGatewayId}from"#internal/runtime-model.js";import{contextStorage}from"#context/container.js";import{ChannelKey}from"#runtime/sessions/runtime-context-keys.js";import{advanceStep,emitFailedStep,emitRecoverableFailedTurn,emitStepStarted,emitStreamContent,emitTurnEpilogue,emitTurnPreamble,getHarnessEmissionState,setHarnessEmissionState}from"#harness/emission.js";import{ToolLoopAgent,isStepCount}from"ai";import{getAgentHandleStore}from"#harness/handles/store.js";import{buildDynamicSubagentTools}from"#context/dynamic-subagent-lifecycle.js";import{normalizeUserContent,resolveAssistantStepText}from"#harness/messages.js";import{createRuntimeActionRequestFromToolCall,resolvePendingRuntimeActions,setPendingRuntimeActionBatch}from"#harness/runtime-actions.js";import{clearPendingWorkflowInterrupt,getPendingWorkflowInterrupt,setPendingWorkflowInterrupt}from"#harness/workflow-interrupt-state.js";import{getWorkflowRuntimeActionInterrupts,isWorkflowRuntimeActionInterrupt}from"#harness/workflow-runtime-action-state.js";import{getActiveDynamicModelSelection,isDynamicModelSelectionError}from"#context/dynamic-model-lifecycle.js";import{getInstrumentationRuntime}from"#harness/instrumentation/runtime.js";import{activeTurnId}from"#harness/active-turn-id.js";import{appendPendingInputBatch,consumeDeferredStepInput,getApprovedTools,getPendingInputRequestIds,hasDeferredStepInput,hasPendingApprovalBatch,hasStepInput,resolvePendingInput}from"#harness/input-requests.js";import{createInstrumentationHandleEvent,publishInputResolutions}from"#harness/instrumentation/native-events.js";import{accumulateTurnUsage,getTurnUsageState,setTurnUsageState}from"#harness/turn-tag-state.js";import{context,trace}from"#compiled/@opentelemetry/api/index.js";import{resolveAgentsAnnouncement}from"#harness/handles/prompt.js";import{getSupersededAuthorizationChallenges,isAuthorizationSignal,setPendingAuthorization}from"#harness/authorization.js";import{throwIfTurnAborted}from"#harness/turn-cancellation.js";import{buildDynamicInstructionMessages,drainDynamicInstructionUserMessages,prepareDynamicInstructionPreamble}from"#context/dynamic-instruction-lifecycle.js";import{PendingSkillAnnouncementKey}from"#context/dynamic-skill-lifecycle.js";import{resolveParentLineage}from"#harness/parent-lineage.js";import{prepareTurnTraceContext}from"#harness/prepare-trace-context.js";import{getWorkflowContinuationSecurity,readWorkflowContinuationSecurity}from"#harness/workflow-continuation-security.js";import{buildWorkflowHostTools,resolveWorkflowSandboxBridgeRequestLimit}from"#harness/workflow-sandbox.js";import{attemptIdempotencyKey}from"#harness/instrumentation/lifecycle.js";import{getApprovalAuditState,markApprovalCandidateHistoryEventEmitted,markApprovalCandidatePendingEventEmitted,markApprovalSettlementEventEmitted}from"#harness/approval-candidates.js";import{queueDeferredStepInput}from"#harness/pending-input-batches.js";import{CONDITIONAL_DELIVERY_INSTRUCTION,EMPTY_DELIVERY_SENTINEL,hasEmptyDeliverySentinel}from"#shared/empty-delivery.js";import{createToolResultMessagePartFromToolError}from"#harness/action-result-helpers.js";import{getInvalidToolCallInputError,isInvalidToolCall}from"#harness/tool-call-input-errors.js";import{EmptyModelResponseError,classifyModelCallError,extractModelCallErrorDetails,extractUnsupportedProviderToolTypes,extractUpstreamRejectionMessage,isNoOutputGeneratedError}from"#harness/model-call-error.js";import{readToolInterrupt}from"#harness/tool-interrupts.js";import{ASK_QUESTION_TOOL_NAME}from"#runtime/framework-tools/ask-question.js";import{extractQuestionInputRequests,extractToolApprovalInputRequests}from"#harness/input-extraction.js";import{applyLastToolCacheBreakpoint,applySystemCacheBreakpoint,detectPromptCachePath,getAnthropicCacheMarker}from"#harness/prompt-cache.js";import{requireSessionModelReference}from"#harness/types.js";import{buildDynamicTools,buildResponseAuthorizationTools}from"#context/build-dynamic-tools.js";import{hydrateSandboxAttachments,stageAttachmentsToSandbox}from"#harness/attachment-staging.js";import{createWorkflowLifecycle}from"#harness/workflow-lifecycle.js";import{compactMessages,getInputTokenCount,resolveCompactionModel,shouldCompact}from"#harness/compaction.js";import{applySessionLimitContinuation,enforceSessionTokenLimit}from"#harness/session-limit-enforcement.js";import{setEveAttributes}from"#runtime/attributes/emit.js";import{coordinateApprovalDelivery,shouldPrepareApprovalPolicyTools}from"#harness/approval-delivery-coordinator.js";import{buildTelemetryRuntimeContext}from"#harness/instrumentation/runtime-context.js";import{createAiSdkHookBridge}from"#harness/ai-sdk-hook-bridge.js";import{convertStaleResponsesToUserMessage,dropStaleSessionLimitContinuationResponses}from"#harness/stale-input-responses.js";import{getInstrumentationConfig}from"#harness/instrumentation/config.js";import{normalizeProviderToolHistory}from"#harness/provider-tool-history.js";import{extractWorkflowStreamWriteErrorDetails}from"#harness/workflow-stream-error.js";import{ensureOtelIntegration,getRegisteredTelemetryIntegrations}from"#harness/ai-sdk-telemetry.js";import{getAdvertisedTools}from"#harness/advertised-tools.js";import{resolveFrameworkToolFromUpstreamType}from"#harness/provider-tools.js";import{buildStepHooks,emitStepActions}from"#harness/step-hooks.js";import{buildToolApproval,buildToolSetFromDefinitions,buildToolSetWithProviderTools}from"#harness/tools.js";import{continueWorkflowSandboxInterrupt,getWorkflowSandboxInterrupt,unwrapWorkflowSandboxResult}from"#shared/workflow-sandbox.js";import{FINAL_OUTPUT_TOOL_NAME,buildFinalOutputTool}from"#runtime/framework-tools/final-output.js";const environment=process.env.NODE_ENV??`unknown`,eveVersion=resolveInstalledPackageInfo().version,log=createLogger(`harness.tool-loop`);function logToolExecutionError(e){e.toolOutput.type===`tool-error`&&logError(log,`tool execution failed`,e.toolOutput.error,{toolName:e.toolCall.toolName,toolCallId:e.toolCall.toolCallId})}function enrichTelemetry(e,t,n,r){if(e===void 0&&r===void 0)return;let i={};for(let e of Object.keys(n??{}))i[e]=!0;return{functionId:e?.functionId??t,includeRuntimeContext:i,integrations:r===void 0?void 0:[r,...getRegisteredTelemetryIntegrations()],isEnabled:!0,recordInputs:e?.recordInputs??!1,recordOutputs:e?.recordOutputs??!1}}function mergeSystemInstructions(e){if(e.length===0)return;if(e.length===1)return{...e[0]};let t;for(let n of e)n.providerOptions!==void 0&&(t={...t,...n.providerOptions});let n={role:`system`,content:e.map(e=>e.content).join(`
2
2
 
3
- `)};return t!==void 0&&(n.providerOptions=t),n}function buildGatewayAttributionHeaders(e,t){let n=resolveProviderHeaders(e);if(n===void 0)return;let r=t?.agentName??t?.agentId,i=process.env.VERCEL_PROJECT_PRODUCTION_URL||process.env.VERCEL_URL,a=i?`https://${i}`:void 0,o={...n};return r&&(o[`x-title`]=r),a&&(o[`http-referer`]=a),o}async function resolveActiveRuntimeModel(e){if(e.ctx===void 0){let t=e.session.agent.modelReference;if(t===void 0)throw Error(`Dynamic model selection is unavailable outside an eve runtime context.`);return{model:await e.config.resolveModel(t),session:e.session}}let t=getActiveDynamicModelSelection(e.ctx);if(t===null){let t=e.session.agent.modelReference;if(e.session.agent.dynamicModel===!0||t===void 0)throw Error(`Dynamic model selection is required before model-dependent work begins. Add a matching resolver handler that returns a concrete model.`);return{model:await e.config.resolveModel(t),session:e.session}}return{model:t.model===void 0?await e.config.resolveModel(t.reference):t.model,session:updateSessionModelReference(e.session,t.reference)}}function updateSessionModelReference(e,t){return{...e,agent:{...e.agent,modelReference:t},compaction:updateCompactionThresholdForModelReference({compaction:e.compaction,modelReference:t})}}function updateCompactionThresholdForModelReference(e){return e.modelReference.contextWindowTokens===void 0?e.compaction:{...e.compaction,threshold:Math.max(1,Math.floor(e.modelReference.contextWindowTokens*(e.compaction.thresholdPercent??.9)))}}const TURN_TRACE_STATE_KEY=`eve.harness.turnTrace`;function getTurnTraceState(e){return e.state?.[TURN_TRACE_STATE_KEY]}function setTurnTraceState(e,t){let n={traceId:t.traceId,spanId:t.spanId,traceFlags:t.traceFlags};return{...e,state:{...e.state,[TURN_TRACE_STATE_KEY]:n}}}function resolveStepOtelContext(e,t,n){if(t)return trace.setSpan(context.active(),t);if(e){let e=getTurnTraceState(n);if(e){let t=trace.wrapSpanContext({isRemote:!0,traceId:e.traceId,spanId:e.spanId,traceFlags:e.traceFlags});return trace.setSpan(context.active(),t)}}}function buildHarnessToolsWithDynamicSubagents(e,t){let n=new Map(e);if(t===void 0)return n;for(let e of buildDynamicSubagentTools(t)){if(n.has(e.name))throw Error(`Dynamic subagent "${e.name}" collides with another runtime-visible tool name.`);n.set(e.name,e)}return n}function createToolLoopHarness(t){let n=t.handleEvent,d=getInstrumentationRuntime()?.otelSettings,g=getInstrumentationConfig();d!==void 0&&ensureOtelIntegration();let v=d===void 0?void 0:trace.getTracer(`eve`),y=t.runtimeIdentity?.agentName;async function runStep(e,t){let n;if(v&&hasStepInput(t)){let t=d?.functionId??y,r={"eve.version":eveVersion,"eve.environment":environment,"eve.session.id":e.sessionId};t&&(r[`ai.telemetry.functionId`]=t),n=v.startSpan(`ai.eve.turn`,{attributes:r})}let r=resolveStepOtelContext(v,n,e),executeStep=()=>executeStepBody(e,t,n);try{return r?await context.with(r,executeStep):await executeStep()}finally{n?.end()}}async function executeStepBody(v,x,C){let E=v;C&&(E=setTurnTraceState(E,C.spanContext()));let O=getHarnessEmissionState(E.state),A=contextStorage.getStore(),j=A?.get(ParentSessionKey),M=j!==void 0||A?.get(SessionCallbackKey)!==void 0,re=resolveParentLineage(j,A?.get(ChannelKey)),ie=A?.get(ParentTraceContextKey),ae,N=createInstrumentationHandleEvent({agentName:t.runtimeIdentity?.agentName,channelKind:A?.get(ChannelInstrumentationKey)?.kind,getAttemptScope:()=>ae,handleEvent:n,hooks:t.instrumentation?.hooks,parentLineage:re,parentTraceContext:ie,rootSessionId:j?.rootSessionId,sessionId:E.sessionId,turnId:activeTurnId(O)}),failModelSelection=async(n,r)=>{if(throwIfTurnAborted(t.abortSignal),C&&recordErrorOnSpan(C,n),!N)throw n;let a=createErrorId(),o=toErrorMessage(n);return log.error(`model selection failed terminally`,{error:n,errorId:a,sessionId:E.sessionId,turnId:r.turnId}),await emitFailedStep(N,r,{code:`MODEL_SELECTION_FAILED`,details:{errorId:a},message:o,sessionId:E.sessionId}),{next:t.mode===`task`||M?{done:!0,isError:!0,output:o}:{done:!0,output:``},session:E}},preparePreambleTrace=async()=>{let e=C?.spanContext(),n=e!==void 0&&isValidSpanContext(e)?{spanId:e.spanId,traceFlags:e.traceFlags,traceId:e.traceId}:void 0;return await prepareTurnTraceContext({agentName:t.runtimeIdentity?.agentName,instrumentation:t.instrumentation,parentLineage:re,parentTraceContext:ie,rootSessionId:j?.rootSessionId??E.rootSessionId??E.sessionId,sequence:O.sequence,sessionId:E.sessionId,sessionStarted:O.sessionStarted,traceContext:n,turnId:`turn_${O.sequence}`})};if(t.clearOnly===!0)return E={...E,compaction:{recentWindowSize:E.compaction.recentWindowSize,threshold:E.compaction.threshold,thresholdPercent:E.compaction.thresholdPercent},history:[]},await N?.(createContextClearedEvent({sequence:O.sequence,sessionId:E.sessionId,turnId:activeTurnId(O)})),await N?.(createSessionWaitingEvent()),{next:null,session:E};if(t.compactOnly===!0){if(E.history.length>0)try{let e=await resolveActiveRuntimeModel({config:t,ctx:contextStorage.getStore(),session:E});E=e.session;let n=await maybeCompact({abortSignal:t.abortSignal,emit:N,emissionState:{...O,turnId:activeTurnId(O)},force:!0,messages:[...E.history],model:e.model,onCompaction:t.onCompaction,resolveModel:t.resolveModel,runtimeIdentity:t.runtimeIdentity,session:E,telemetry:enrichTelemetry(d,y)??void 0});E={...n.session,compaction:{recentWindowSize:n.session.compaction.recentWindowSize,threshold:n.session.compaction.threshold,thresholdPercent:n.session.compaction.thresholdPercent},history:n.messages}}catch(e){logError(log,`manual session compaction failed`,e,{sessionId:E.sessionId})}return await N?.(createSessionWaitingEvent()),{next:null,session:E}}let P=consumeDeferredStepInput({input:x,preferCurrentInput:t.mode!==`conversation`&&x!==void 0&&hasPendingApprovalBatch(E),session:E});E=P.session;let F=await resolvePendingRuntimeActions({emit:N,session:E,stepInput:P.input});if(F.outcome===`unresolved`)return{next:null,session:F.session};E=F.session;let oe=getPendingInputRequestIds(E.state),I=convertStaleResponsesToUserMessage({history:F.messages,pendingRequestIds:oe,stepInput:dropStaleSessionLimitContinuationResponses({pendingRequestIds:oe,stepInput:P.input})}),L=I.stepInput,R=I.kind===`converted`?{...L,message:I.displayMessage}:L,z=contextStorage.getStore();z!==void 0&&t.resolveStepDynamicTools!==void 0&&shouldPrepareApprovalPolicyTools({session:E,stepInput:L})&&await t.resolveStepDynamicTools({ctx:z,event:createStepStartedEvent({modelId:E.agent.modelReference?.id??`dynamic`,sequence:O.sequence,stepIndex:O.stepIndex,turnId:O.turnId}),messages:F.messages});let B=await coordinateApprovalDelivery({session:E,stepInput:L,tools:buildResponseAuthorizationTools({authoredTools:t.tools,context:z})});if(E=B.session,N){for(let e of B.feedback)await N(createMessageCompletedEvent({message:e,sequence:O.sequence,stepIndex:O.stepIndex,turnId:O.turnId}));let e=getApprovalAuditState(E.state);for(let t of e.activeCandidates.filter(e=>e.pendingEventEmitted!==!0))await N(createApprovalCandidateEvent({candidateId:t.candidateId,outcome:`pending`,requestId:t.requestId,responderPrincipalId:t.responder.principalId,sequence:O.sequence,stepIndex:O.stepIndex,turnId:O.turnId})),E={...E,state:markApprovalCandidatePendingEventEmitted({candidateId:t.candidateId,state:E.state})};for(let t of e.candidateHistory.filter(e=>e.eventEmitted!==!0&&e.status!==`allowed`))await N(createApprovalCandidateEvent({candidateId:t.candidateId,outcome:t.status,requestId:t.requestId,responderPrincipalId:t.responder.principalId,reason:t.reason,sequence:O.sequence,stepIndex:O.stepIndex,turnId:O.turnId})),E={...E,state:markApprovalCandidateHistoryEventEmitted({candidateId:t.candidateId,state:E.state})};for(let t of e.settlements.filter(e=>e.eventEmitted!==!0))await N(createApprovalSettledEvent({outcome:t.outcome===`allowed`?`approved`:`cancelled`,requestId:t.requestId,responderPrincipalId:t.actor.principalId,sequence:O.sequence,stepIndex:O.stepIndex,turnId:O.turnId})),E={...E,state:markApprovalSettlementEventEmitted({requestId:t.requestId,state:E.state})}}if(B.kind===`park`)return{next:null,session:E};if(B.kind===`continue-coordination`)return{next:runStep,session:B.stepInput===void 0?E:queueDeferredStepInput(E,B.stepInput)};if(B.challenges.length>0){if(N)for(let e of B.challenges)await N(createAuthorizationRequiredEvent({authorization:e.challenge,candidateId:e.candidateId,description:e.challenge.instructions??`Authorization required for ${e.name}`,name:e.name,sequence:O.sequence,stepIndex:O.stepIndex,turnId:O.turnId,webhookUrl:e.hookUrl}));let e=B.stepInput===void 0?E:queueDeferredStepInput(E,B.stepInput);return{next:null,session:{...e,state:setPendingAuthorization(e.state,{challenges:B.challenges})}}}let V=resolvePendingInput({deferMessagesWhileApprovalsPending:t.mode!==`conversation`,history:F.messages,resolveApprovalKey:resolveApprovalKeyFromTools(t.tools),session:E,stepInput:B.stepInput});if(V.outcome===`unresolved`){let e=F.outcome===`resolved`?{...V.session,history:[...F.messages]}:V.session;if(N&&t.mode===`conversation`&&V.deferredMessage===!0&&hasStepInput(x)){A!==void 0&&prepareDynamicInstructionPreamble(A,e.history);let n=[];try{let e=await preparePreambleTrace();O=await emitTurnPreamble(N,R??{},O,t.runtimeIdentity,e)}catch(t){if(n=A===void 0?[]:drainDynamicInstructionUserMessages(A),e={...e,history:[...e.history,...n]},E=e,!isDynamicModelSelectionError(t))throw t;return failModelSelection(t,{sessionStarted:!0,sequence:O.sequence,stepIndex:0,turnId:`turn_${O.sequence}`})}return n=A===void 0?[]:drainDynamicInstructionUserMessages(A),e={...e,history:[...e.history,...n]},O=await emitTurnEpilogue(N,O,t.mode),{next:null,session:setHarnessEmissionState(e,O)}}return F.outcome===`resolved`?(N&&t.mode===`conversation`&&(O=await emitTurnEpilogue(N,O,t.mode),e=setHarnessEmissionState(e,O)),{next:null,session:e}):{next:null,session:V.session}}if(t.instrumentation?.hooks!==void 0&&V.resolvedInputs!==void 0)for(let e of V.resolvedInputs)await publishInputResolutions({batch:e,hooks:t.instrumentation.hooks,sessionId:E.sessionId});if(N&&V.rejectedActions)for(let e of V.rejectedActions)for(let t of e.results)await N(createActionResultEvent({rejected:!0,result:t,sequence:e.event.sequence,stepIndex:e.event.stepIndex,turnId:e.event.turnId}));let H=[];if(N&&hasStepInput(x)){A!==void 0&&prepareDynamicInstructionPreamble(A,V.session.history);try{let e=await preparePreambleTrace();O=await emitTurnPreamble(N,R??{},O,t.runtimeIdentity,e)}catch(e){if(H=A===void 0?[]:drainDynamicInstructionUserMessages(A),E={...V.session,history:[...V.session.history,...H]},!isDynamicModelSelectionError(e))throw e;return failModelSelection(e,{sessionStarted:!0,sequence:O.sequence,stepIndex:0,turnId:`turn_${O.sequence}`})}H=A===void 0?[]:drainDynamicInstructionUserMessages(A),C&&C.setAttribute(`eve.turn.id`,O.turnId)}let se=V.session.history.length;E=setHarnessEmissionState({...V.session,history:[...V.session.history,...H]},O);let U=[...V.messages.slice(0,se),...H,...V.messages.slice(se)],W=await applySessionLimitContinuation({config:t,emit:N,emissionState:O,limitContinuation:V.limitContinuation,session:E});if(W.result!==null)return W.result;if(E=W.session,t.persistentSubagentSessions===!0){let e=resolveAgentsAnnouncement({messages:U,store:getAgentHandleStore(E.state)});e!==void 0&&U.push({content:e,role:`user`})}if(L?.context!==void 0&&V.deferredContext!==!0)for(let e of L.context)U.push({content:e,role:`user`});let ce=normalizeUserContent(L?.message);if(ce!==void 0&&!V.deferredMessage&&!V.consumedMessage){let e=await stageAttachmentsToSandbox(ce);U.push({content:e,role:`user`})}let G=A,K;try{G!==void 0&&t.dispatchDynamicModelEvent!==void 0&&await t.dispatchDynamicModelEvent({ctx:G,event:{data:{sequence:O.sequence,stepIndex:O.stepIndex,turnId:O.turnId},type:`step.started`},messages:U}),K=await resolveActiveRuntimeModel({config:t,ctx:G,session:E})}catch(e){return failModelSelection(e,O)}E=K.session;let q=K.model;N&&await emitStepStarted(N,O,requireSessionModelReference(E).id,U);let le=detectPromptCachePath(q),J=le.kind===`anthropic-direct`?getAnthropicCacheMarker():void 0,ue=buildGatewayAttributionHeaders(q,t.runtimeIdentity);({messages:U,session:E}=await maybeCompact({abortSignal:t.abortSignal,emit:N,emissionState:O,messages:U,model:q,onCompaction:t.onCompaction,resolveModel:t.resolveModel,runtimeIdentity:t.runtimeIdentity,session:E,telemetry:enrichTelemetry(d,y)??void 0}));let de=getApprovedTools(E),fe=E.outputSchema===void 0&&G!==void 0&&isScheduleAppAuth(G.get(AuthKey))&&G.get(ParentSessionKey)===void 0,pe=await hydrateSandboxAttachments(U),Y=[],me=[];for(let e of pe)e.role===`system`?Y.push(e):me.push(e);if(G!==void 0){Y.push(...buildDynamicInstructionMessages(G));let e=G.get(PendingSkillAnnouncementKey);e!==void 0&&e.length>0&&Y.push({role:`system`,content:e})}fe&&Y.push({role:`system`,content:CONDITIONAL_DELIVERY_INSTRUCTION});let X=me,prepareModelCallInput=e=>{let t=e?[{role:`system`,content:e}]:[],n=E.agent.system?[{role:`system`,content:E.agent.system}]:[],r=Y.length>0||t.length>0?[...t,...n,...Y]:void 0,i=r!==void 0&&J?applySystemCacheBreakpoint(r,J):r,a=i===void 0?E.agent.system??void 0:mergeSystemInstructions(i);return{instructions:a,telemetryRuntimeContext:buildTelemetryRuntimeContext({eveVersion,authored:g,emissionState:O,environment,modelInput:{instructions:a,messages:X},session:E})}},he=t.tools,runSingleModelCall=async e=>{let{instructions:n,telemetryRuntimeContext:i={}}=e.preparedInput??prepareModelCallInput(e.extraSystemNote);e.retryReason&&(i[`eve.retry.reason`]=e.retryReason);let a=e.trailingUserNote?[...X,{role:`user`,content:e.trailingUserNote}]:X,o=buildHarnessToolsWithDynamicSubagents(t.tools,G),s=getAdvertisedTools({session:E,tools:o});he=s;let c=await buildToolSetWithProviderTools({approvedTools:de,capabilities:t.capabilities,disabledProviderTools:e.disabledProviderTools,modelReference:requireSessionModelReference(E),tools:s,webSearchProvider:t.webSearchProvider});if(G!==void 0){let n=getAdvertisedTools({session:E,tools:buildDynamicTools(G)}),r=buildToolSetFromDefinitions({approvedTools:de,capabilities:t.capabilities,disabledProviderTools:e.disabledProviderTools,tools:n});for(let[e,t]of Object.entries(r)){if(s.get(e)?.runtimeAction!==void 0)throw Error(`Dynamic tool "${e}" collides with a runtime-visible subagent.`);c[e]=t}}E.outputSchema!==void 0&&(c[FINAL_OUTPUT_TOOL_NAME]=buildFinalOutputTool(E.outputSchema));let l=N===void 0?void 0:({tools:e})=>createWorkflowLifecycle({emit:N,emissionState:O,tools:e}),u=t.workflow===!0?{lifecycle:l,maxSubagents:t.workflowMaxSubagents}:void 0,f=await getAdvertisedTools({modelTools:c,session:E,tools:s,workflow:u});E=f.session;let p=f.modelTools,m=J?applyLastToolCacheBreakpoint(p,J):p,h=t.instrumentation?.hooks,g=activeTurnId(O),_=h===void 0?void 0:{attemptId:`${E.sessionId}:${g}:${O.stepIndex}:${e.attemptIndex}`,attemptIndex:e.attemptIndex,functionId:d?.functionId??y,rootSessionId:j?.rootSessionId??E.sessionId,sessionId:E.sessionId,stepIndex:O.stepIndex,turnId:g};ae=_;let v=_===void 0||h===void 0?void 0:createAiSdkHookBridge(_,h,t.instrumentation?.runInContext),b=buildStepHooks({cachePath:le,emit:N,emissionState:O,emitStepStarted:e.suppressStepStartedEmission!==!0,marker:J,session:E}),x=new ToolLoopAgent({headers:ue,instructions:n,model:q,onToolExecutionEnd:logToolExecutionError,onError(e){summarizeKnownError(e.error)?.tags.includes(`config`)!==!0&&logError(log,`tool-loop stream error`,e.error)},onStepFinish:b.onStepFinish,prepareStep:b.prepareStep,reasoning:E.agent.reasoning,runtimeContext:i,stopWhen:isStepCount(1),telemetry:enrichTelemetry(d,y,i,v),toolApproval:buildToolApproval(p),tools:m}),executeModelCall=async()=>{if(N){let e=[...t.tools].filter(([e,t])=>t.runtimeAction!==void 0&&s.get(e)===void 0).map(([e])=>e),n=new Set([ASK_QUESTION_TOOL_NAME,FINAL_OUTPUT_TOOL_NAME,...e]),r=await x.stream({abortSignal:t.abortSignal,messages:a}),{emittedActionCallIds:i,handledInlineToolResultCallIds:o,invalidInputToolCallIds:c,inlineAuthorizationResults:l,trailingInlineToolResultParts:u}=await emitStreamContent(N,O,r.fullStream,{excludedActionToolNames:n,tools:s});throwIfTurnAborted(t.abortSignal);let[d,f]=await Promise.all([b.stepResult,r.responseMessages]);if(isEmptyModelResponse(d)&&extractToolResultCallIds(f).size===0&&l.length===0&&u.length===0)throw new EmptyModelResponseError;await emitStepActions(N,O,d,{emittedActionCallIds:i,excludedActionCallIds:c,excludedActionToolNames:n,handledInlineToolResultCallIds:o,tools:s});let p=d.toolResults,m=new Map(p.map(e=>[e.toolCallId,e]));for(let e of l)m.set(e.toolCallId,e);return withAccumulatedResponseMessages({invalidInputToolCallIds:c,responseMessages:appendMissingToolResultMessages({append:u,responseMessages:f}),stepResult:d,toolResults:[...m.values()]})}let e=await x.generate({abortSignal:t.abortSignal,messages:a});throwIfTurnAborted(t.abortSignal);let n=await b.stepResult;if(isEmptyModelResponse(n)&&extractToolResultCallIds(e.responseMessages).size===0)throw new EmptyModelResponseError;return withAccumulatedResponseMessages({responseMessages:e.responseMessages,stepResult:n})};try{let e=await executeModelCall();return _!==void 0&&await h?.publish({idempotencyKey:attemptIdempotencyKey(_),scope:_,type:`step.attempt.completed`}),e}catch(e){return _!==void 0&&await h?.publish({error:e,idempotencyKey:attemptIdempotencyKey(_),scope:_,type:`step.attempt.failed`}),rethrowNoOutputAsEmptyResponse(e)}},ge=0,runOneModelCall=async e=>runModelCallWithRetries(t=>runSingleModelCall({...e,attemptIndex:ge++,preparedInput:t===1?e.preparedInput:void 0,suppressStepStartedEmission:t!==1||e.suppressStepStartedEmission}),{sessionId:E.sessionId,turnId:O.turnId},t.abortSignal),_e=prepareModelCallInput(),ve=await continuePendingWorkflowInterrupt({childResults:L?.runtimeActionResults,config:t,emit:N,emissionState:O,runStep,session:E,tools:buildHarnessToolsWithDynamicSubagents(t.tools,G)});if(ve!==null)return ve;let ye=await enforceSessionTokenLimit({config:t,emit:N,emissionState:O,messages:U,session:E});if(ye!==null)return ye;let Z;try{Z=await runOneModelCall({preparedInput:_e,suppressStepStartedEmission:!0})}catch(n){throwIfTurnAborted(t.abortSignal);let r=await runModelCallRecoveryPipeline({error:n,stages:[e=>attemptUnsupportedProviderToolRecovery({error:e.error,runOneModelCall,sessionId:E.sessionId,turnId:O.turnId}),e=>attemptEmptyResponseRecovery({emptyDeliveryEnabled:fe,error:e.error,retryCallOptions:e.retryCallOptions,runOneModelCall,sessionId:E.sessionId,turnId:O.turnId})]});if(throwIfTurnAborted(t.abortSignal),r.outcome===`recovered`)Z=r.result;else{let n=r.error;if(C&&recordErrorOnSpan(C,n),!N)throw n;let a=extractWorkflowStreamWriteErrorDetails(n);if(a!==null){let t=createErrorId();return log.error(`workflow stream write failed — parking session for retry by the user`,{...a,errorId:t,error:n,sessionId:E.sessionId,turnId:O.turnId}),O=await emitRecoverableFailedTurn(N,O,{code:`WORKFLOW_STREAM_WRITE_FAILED`,continuationToken:E.continuationToken,details:{...a,errorId:t},message:toErrorMessage(n)}),{next:null,session:setHarnessEmissionState(E,O)}}let o=classifyModelCallError(n),s=createErrorId(),c=summarizeKnownError(n),l=c===null?extractUpstreamRejectionMessage(n):null,u=c?.message??l?.message??toErrorMessage(n),d=c?.hint===void 0?u:`${u} ${c.hint}`,p=extractModelCallErrorDetails(n),m=buildModelCallFailureDetails({catalogSummary:c,error:n,errorId:s,modelCallDetails:p,upstreamRejection:l}),h=buildModelCallFailureLogFields({error:n,errorId:s,modelCallDetails:p,recognized:c!==null||l!==null,sessionId:E.sessionId,turnId:O.turnId});if(o===`terminal`)return c===null?log.error(l?.message??`model call failed terminally`,h):log.error(`${c.name}: ${c.message}`,{errorId:s,hint:c.hint,sessionId:E.sessionId,turnId:O.turnId}),await emitFailedStep(N,O,{code:`MODEL_CALL_FAILED`,details:m,message:u,sessionId:E.sessionId}),{next:t.mode===`task`||M?{done:!0,isError:!0,output:d}:{done:!0,output:``},session:E};if(t.mode===`task`){if(o===`recoverable`&&!(n instanceof EmptyModelResponseError))throw log.warn(l?.message??`model call failed recoverably in task mode — rethrowing for durable step retry`,h),n;return log.error(l?.message??`model call failed; failing the task run`,h),await emitFailedStep(N,O,{code:`MODEL_CALL_FAILED`,details:m,message:u,sessionId:E.sessionId}),{next:{done:!0,isError:!0,output:d},session:E}}log.error(l?.message??`model call failed — parking session for retry by the user`,h),O=await emitRecoverableFailedTurn(N,O,{code:`MODEL_CALL_FAILED`,continuationToken:E.continuationToken,details:m,message:u});let g={isError:!0,output:d};return{next:null,session:setHarnessEmissionState(E,O),settledTurn:g}}}let Q=accumulateTurnUsage({previous:getTurnUsageState(E.state),turnId:O.turnId,usage:extractTokenUsageDelta({costUsd:extractGatewayCostUsd(Z.providerMetadata),usage:Z.usage})});E=setTurnUsageState(E,Q);let $;try{$=formatLanguageModelGatewayId(q)}catch{$=void 0}return await setEveAttributes({"$eve.model":$,"$eve.input_tokens":Q.inputTokens,"$eve.output_tokens":Q.outputTokens,"$eve.cache_read_tokens":Q.cacheReadTokens,"$eve.cache_write_tokens":Q.cacheWriteTokens,"$eve.cost_usd":Q.sawCost?Q.costUsd:void 0,"$eve.tool_count":t.tools.size}),handleStepResult({config:t,emit:N,emissionState:O,promptMessages:U,result:Z,runStep,session:E,runtimeActionTools:he})}return runStep}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`}function extractTokenUsageDelta(e){let t=e.usage;if(!(t===void 0&&e.costUsd===void 0))return{cacheReadTokens:t?.inputTokenDetails?.cacheReadTokens,cacheWriteTokens:t?.inputTokenDetails?.cacheWriteTokens,costUsd:e.costUsd,inputTokens:t?.inputTokens,outputTokens:t?.outputTokens}}function extractGatewayCostUsd(e){let t=readGatewayMetadata(e)?.cost;if(typeof t==`number`&&Number.isFinite(t))return t;if(typeof t==`string`){let e=Number(t);return Number.isFinite(e)?e:void 0}}function readGatewayMetadata(e){let t=e?.gateway;return t&&typeof t==`object`&&!Array.isArray(t)?t:void 0}function buildModelCallFailureDetails(e){let{catalogSummary:t,error:r,errorId:i,modelCallDetails:a,upstreamRejection:o}=e;if(t!==null){let e={errorId:i,message:t.message,name:t.name,semanticErrorId:t.id,...a};return t.hint!==void 0&&(e.hint=t.hint),e}return o===null?{...formatError(r,i),...a}:{errorId:i,message:toErrorMessage(r),name:o.name,...a}}function buildModelCallFailureLogFields(e){let t={errorId:e.errorId,sessionId:e.sessionId,turnId:e.turnId};return e.recognized?{...t,details:e.modelCallDetails}:{...t,error:e.error}}async function runModelCallRecoveryPipeline(e){let t=e.error,n;for(let r of e.stages){let e=await r({error:t,retryCallOptions:n});if(e.outcome===`recovered`)return e;e.outcome===`failed`&&(t=e.error,n=e.retryCallOptions)}return{outcome:`failed`,error:t}}function withAccumulatedResponseMessages(e){let{stepResult:t}=e;return{content:t.content,finishReason:t.finishReason,...e.invalidInputToolCallIds===void 0?{}:{invalidInputToolCallIds:e.invalidInputToolCallIds},providerMetadata:t.providerMetadata,response:{...t.response,messages:[...e.responseMessages]},text:t.text,toolCalls:t.toolCalls,toolResults:e.toolResults===void 0?t.toolResults:[...e.toolResults],usage:t.usage}}function appendMissingToolResultMessages(e){let t=extractToolResultCallIds(e.responseMessages),n=e.append.filter(e=>!t.has(e.toolCallId));return[...e.responseMessages,...n.length>0?[{role:`tool`,content:[...n]}]:[]]}function getInvalidToolCallInputErrors(e){let t=[];for(let n of e.toolCalls){if(n.toolName===FINAL_OUTPUT_TOOL_NAME)continue;let e=getInvalidToolCallInputError({toolCall:n});e!==void 0&&t.push(e)}return t}function extractToolResultCallIds(e){let t=new Set;for(let n of e)if(Array.isArray(n.content))for(let e of n.content)typeof e==`object`&&e&&e.type===`tool-result`&&t.add(e.toolCallId);return t}async function attemptUnsupportedProviderToolRecovery(e){let t=extractUnsupportedProviderToolTypes(e.error);if(t.length===0)return{outcome:`skipped`};let n=[];for(let e of t){let t=resolveFrameworkToolFromUpstreamType(e);t!==null&&!n.includes(t)&&n.push(t)}if(n.length===0)return{outcome:`skipped`};log.warn(`disabling unsupported provider tool(s); retrying step once`,{disabled:n,sessionId:e.sessionId,turnId:e.turnId,upstreamTypes:t});let r={disabledProviderTools:new Set(n),extraSystemNote:buildDisabledToolNote(n)};try{return{outcome:`recovered`,result:await e.runOneModelCall({...r,suppressStepStartedEmission:!0})}}catch(e){return{outcome:`failed`,error:e,retryCallOptions:r}}}function buildDisabledToolNote(e){let t=e.join(`, `);return`The following ${e.length===1?`tool is`:`tools are`} not available with the current model and has been removed: ${t}. Proceed using the remaining tools or your training knowledge.`}function isEmptyModelResponse(e){return e.toolCalls.length===0&&e.toolResults.length===0&&resolveAssistantStepText(e.response.messages,e.text)===null}function rethrowNoOutputAsEmptyResponse(e){throw isNoOutputGeneratedError(e)?new EmptyModelResponseError({cause:e}):e}const EMPTY_RESPONSE_NUDGE=`Your previous reply was empty and was not delivered. Answer now from the tool results above; do not re-run tools or mention this notice.`;function buildEmptyResponseNudge(e){return e?`${EMPTY_RESPONSE_NUDGE} If the current task explicitly requires conditional delivery and there is nothing to report, reply with exactly ${EMPTY_DELIVERY_SENTINEL}.`:EMPTY_RESPONSE_NUDGE}async function attemptEmptyResponseRecovery(e){if(!(e.error instanceof EmptyModelResponseError))return{outcome:`skipped`};log.warn(`empty model response; reissuing the model call once`,{sessionId:e.sessionId,turnId:e.turnId});try{return{outcome:`recovered`,result:await e.runOneModelCall({...e.retryCallOptions,retryReason:`empty-response`,suppressStepStartedEmission:!0,trailingUserNote:buildEmptyResponseNudge(e.emptyDeliveryEnabled)})}}catch(t){return{outcome:`failed`,error:t,retryCallOptions:e.retryCallOptions}}}async function handleStepResult(e){let{config:t,emit:n,promptMessages:r,result:i,runStep:a}=e,{emissionState:o,session:s}=e,c=resolveAssistantStepText(i.response.messages,i.text),l=i.finishReason!==`tool-calls`&&i.toolCalls.length===0&&hasEmptyDeliverySentinel(c),u=getInvalidToolCallInputErrors({toolCalls:i.toolCalls}),d=new Set([...i.invalidInputToolCallIds??[],...i.toolCalls.filter(isInvalidToolCall).map(e=>e.toolCallId),...u.map(e=>e.toolCallId)]),f=l?[]:appendMissingToolResultMessages({append:u.map(e=>createToolResultMessagePartFromToolError(e)),responseMessages:i.response.messages}),p=l?null:c,m=new Set;for(let e of[...i.content??[],...i.toolResults??[]])(e.type===`tool-result`||e.type===`tool-error`)&&e.providerExecuted===!0&&m.add(e.toolCallId);let h=normalizeProviderToolHistory({messages:f,providerExecutedOutcomeIds:m}),v=h.messages,y={...s,compaction:createNextCompactionConfig(s.compaction,r,i)},b=t.workflow===!0?readWorkflowContinuationSecurity(y):void 0;if(b!==void 0){let e=await getWorkflowSandboxInterrupt(i,b);if(e!==void 0){if(!isWorkflowRuntimeActionInterrupt(e))throw Error(`Unsupported Workflow interrupt kind "${e.payload.kind}".`);return parkOnWorkflowInterrupt({baseSession:y,emissionState:o,interrupt:e,promptMessages:r,responseMessages:v})}}let S=extractToolApprovalInputRequests({content:i.content??[],excludedCallIds:d}),C=new Set(S.map(e=>e.action.callId)),ee=extractQuestionInputRequests({toolCalls:i.toolCalls,excludedCallIds:new Set([...d,...C])}),w=[...S,...ee],T=getAdvertisedTools({session:y,tools:e.runtimeActionTools}),E=(i.toolCalls??[]).filter(e=>!d.has(e.toolCallId)).filter(t=>e.runtimeActionTools.get(t.toolName)?.runtimeAction!==void 0).filter(e=>T.get(e.toolName)?.runtimeAction===void 0?(log.warn(`runtime action tool call blocked because tool is not advertised`,{callId:e.toolCallId,sessionId:y.sessionId,toolName:e.toolName}),!1):!0).map(e=>createRuntimeActionRequestFromToolCall({toolCall:e,tools:T}));if(E.length>0){if(w.length===0)return{next:null,session:setHarnessEmissionState(setPendingRuntimeActionBatch({actions:E,event:{sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId},responseMessages:v,session:{...y,history:[...r]}}),advanceStep(o))};let e=setPendingRuntimeActionBatch({actions:E,event:{sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId},responseMessages:v,session:{...y,history:[...r]}});return e=appendPendingInputBatch({event:{sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId},requests:w,responseMessages:[],session:e}),n&&await n(createInputRequestedEvent({requests:w,sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId})),{next:null,session:setHarnessEmissionState(e,advanceStep(o))}}if(w.length>0){let e=buildResponseAuthorizationTools({authoredTools:t.tools,context:contextStorage.getStore()}),i=appendPendingInputBatch({event:{sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId},requests:w,responseAuthRequiredRequestIds:S.filter(t=>{let n=e.get(t.action.toolName)?.approval;return n!==void 0&&typeof n!=`function`&&n.response!==void 0}).map(e=>e.requestId),responseMessages:v,session:{...y,history:[...r]}});return n&&(await n(createInputRequestedEvent({requests:w,sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId})),t.mode===`conversation`&&(o=await emitTurnEpilogue(n,o,t.mode),i=setHarnessEmissionState(i,o))),{next:hasDeferredStepInput(i)?a:null,session:i}}let D=findAuthorizationSignalFromToolResults(i.toolResults);if(D){let{challenges:e}=D;if(n){for(let t of getSupersededAuthorizationChallenges(y.state,e))await n(createAuthorizationCompletedEvent({authorization:t.challenge,name:t.name,outcome:`failed`,reason:`Superseded by a newer authorization attempt.`,sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId}));for(let t of e)await n(createAuthorizationRequiredEvent({authorization:t.challenge,name:t.name,description:t.challenge.instructions??`Authorization required for ${t.name}`,webhookUrl:t.hookUrl,sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId}));t.mode===`conversation`&&(o=await emitTurnEpilogue(n,o,t.mode))}return{next:null,session:setHarnessEmissionState({...y,history:[...r],state:setPendingAuthorization(y.state,{challenges:e})},o)}}let te=v,ne=[...r,...te],k={...y,history:ne};return!(k.outputSchema!==void 0&&extractFinalOutput(i)!==void 0)&&(te.at(-1)?.role===`tool`||h.outcomeEndsResponse||hasDeferredStepInput(k))?(n&&(o=advanceStep(o),k=setHarnessEmissionState(k,o)),{next:a,session:k}):t.mode===`task`?finishTaskTurn({emissionState:o,emit:n,history:r,result:i,schema:k.outputSchema,session:k,stepOutput:p}):finishConversationTurn({emissionState:o,emit:n,history:r,result:i,schema:k.outputSchema,session:k,stepOutput:p})}const OUTPUT_SCHEMA_NOT_FULFILLED={code:`OUTPUT_SCHEMA_NOT_FULFILLED`,message:`The agent could not produce a result matching the requested schema.`};function extractFinalOutput(e){return(e.toolCalls??[]).find(e=>e.toolName===FINAL_OUTPUT_TOOL_NAME&&!isInvalidToolCall(e))?.input}function persistStructuredAssistantTurn(e,t,n){return{...e,history:[...t,{content:JSON.stringify(n),role:`assistant`}],outputSchema:void 0}}async function emitStructuredResult(e,t,n,r){return await e(createResultCompletedEvent({result:n,sequence:t.sequence,stepIndex:t.stepIndex,turnId:t.turnId})),emitTurnEpilogue(e,t,r)}async function finishTaskTurn(e){let{emit:t,history:n,result:r,schema:i,stepOutput:a}=e,{emissionState:o,session:s}=e;if(i===void 0)return t&&(o=await emitTurnEpilogue(t,o,`task`),s=setHarnessEmissionState(s,o)),{next:{done:!0,output:a??``},session:s};let c=extractFinalOutput(r);return c===void 0?(t&&await emitFailedStep(t,o,{...OUTPUT_SCHEMA_NOT_FULFILLED,sessionId:s.sessionId}),{next:{done:!0,isError:!0,output:OUTPUT_SCHEMA_NOT_FULFILLED.message},session:s}):(s=persistStructuredAssistantTurn(s,n,c),t&&(o=await emitStructuredResult(t,o,c,`task`),s=setHarnessEmissionState(s,o)),{next:{done:!0,output:c},session:s})}async function finishConversationTurn(e){let{emit:t,history:n,result:r,schema:i,stepOutput:a}=e,{emissionState:o,session:s}=e;if(i===void 0)return t&&(o=await emitTurnEpilogue(t,o,`conversation`),s=setHarnessEmissionState(s,o)),{next:null,session:s,settledTurn:{output:a??``}};let c=extractFinalOutput(r);if(c===void 0){t&&(o=await emitRecoverableFailedTurn(t,o,{...OUTPUT_SCHEMA_NOT_FULFILLED,continuationToken:s.continuationToken}),s=setHarnessEmissionState(s,o));let e={isError:!0,output:OUTPUT_SCHEMA_NOT_FULFILLED.message};return{next:null,session:s,settledTurn:e}}return s=persistStructuredAssistantTurn(s,n,c),t&&(o=await emitStructuredResult(t,o,c,`conversation`),s=setHarnessEmissionState(s,o)),{next:null,session:s,settledTurn:{output:c}}}async function continuePendingWorkflowInterrupt(e){let t=getPendingWorkflowInterrupt(e.session.state);if(t===void 0)return null;let n=t.interrupt;if(!isWorkflowRuntimeActionInterrupt(n))throw Error(`Unsupported Workflow interrupt kind "${n.payload.kind}".`);let i=e.emit===void 0?void 0:createWorkflowLifecycle({emit:e.emit,emissionState:e.emissionState,skipReplayed:!0,tools:e.tools}),a=getWorkflowContinuationSecurity(e.session),o;try{let t=buildWorkflowHostTools({tools:e.tools}),r=e.childResults??[],s=n,c=0;for(;;){o=await continueWorkflowSandboxInterrupt({bridgeRequestLimit:resolveWorkflowSandboxBridgeRequestLimit(e.config.workflowMaxSubagents),continuationSecurity:a,interrupt:s,lifecycle:i,resolution:r[c]?.output,tools:t});let n=await unwrapWorkflowSandboxResult(o,a);if(n.status!==`interrupted`||!isWorkflowRuntimeActionInterrupt(n.interrupt)||c+1>=r.length)break;let l=getWorkflowRuntimeActionInterrupts(n.interrupt)[0];if(l===void 0)throw Error(`Workflow continuation contains no pending runtime-action interrupt.`);c++,s=l}}catch(e){logError(log,`Workflow interrupt continuation failed`,e),o={error:`workflow_continuation_failed`,message:toErrorMessage(e),retryable:!1}}let s=await unwrapWorkflowSandboxResult(o,a),c=s.status===`interrupted`?s.interrupt:s.output,l=replaceWorkflowToolResult([...e.session.history,...t.responseMessages],n.outerToolCallId,c),u=clearPendingWorkflowInterrupt({...e.session,history:l});if(s.status===`interrupted`){if(!isWorkflowRuntimeActionInterrupt(s.interrupt))throw Error(`Unsupported Workflow interrupt kind "${s.interrupt.payload.kind}".`);let t=e.session.history.length,n=l.slice(0,t),r=l.slice(t);return u={...u,history:n},parkOnWorkflowInterrupt({baseSession:u,emissionState:e.emissionState,interrupt:s.interrupt,promptMessages:n,responseMessages:r})}return{next:e.runStep,session:u}}function replaceWorkflowToolResult(e,t,n){if(t===void 0)return[...e];let r=typeof n==`string`?{type:`text`,value:n}:{type:`json`,value:n};return e.map(e=>{if(e.role!==`tool`)return e;let n=e.content.map(e=>e.type!==`tool-result`||e.toolCallId!==t?e:{...e,output:r});return{...e,content:n}})}function parkOnWorkflowInterrupt(e){let t=getWorkflowRuntimeActionInterrupts(e.interrupt)[0];if(t===void 0)throw Error(`Workflow continuation contains no pending runtime-action interrupt.`);let n={...e.baseSession,history:[...e.promptMessages]};return{next:null,session:setHarnessEmissionState(setPendingWorkflowInterrupt({interrupt:t,responseMessages:e.responseMessages,session:n}),e.emissionState)}}function createNextCompactionConfig(e,t,n){let r={recentWindowSize:e.recentWindowSize,threshold:e.threshold,thresholdPercent:e.thresholdPercent};return n.usage?.inputTokens!==void 0&&(r.lastKnownInputTokens=n.usage.inputTokens,r.lastKnownPromptMessageCount=t.length),r}async function maybeCompact(e){let{emit:t,emissionState:n}=e,r=e.messages,i=e.session;if(e.force!==!0&&!shouldCompact(r,i.compaction))return{messages:r,session:i};let a=await resolveCompactionModel({compactionModelReference:i.agent.compactionModelReference,model:e.model,modelReference:requireSessionModelReference(i),resolveModel:e.resolveModel});if(t&&await t(createCompactionRequestedEvent({modelId:formatLanguageModelGatewayId(a.model),sequence:n.sequence,sessionId:i.sessionId,turnId:n.turnId,usageInputTokens:getInputTokenCount(r,i.compaction)})),r=await compactMessages(r,a.model,i.compaction,a.providerOptions,e.telemetry,buildGatewayAttributionHeaders(a.model,e.runtimeIdentity),e.abortSignal,e.force===!0),e.onCompaction)for(let t of e.onCompaction())r.push(t);return t&&await t(createCompactionCompletedEvent({modelId:formatLanguageModelGatewayId(a.model),sequence:n.sequence,sessionId:i.sessionId,turnId:n.turnId})),{messages:r,session:i}}function resolveApprovalKeyFromTools(e){return t=>{let n=e.get(t.action.toolName);if(n?.approvalKey!==void 0)return n.approvalKey(t.action.input)}}async function runModelCallWithRetries(e,t,n){for(let r=1;;r++){throwIfTurnAborted(n);try{return await e(r)}catch(e){if(throwIfTurnAborted(n),r===3||classifyModelCallError(e)!==`retry`)throw e;let i=500*2**(r-1)+Math.floor(Math.random()*250);log.warn(`model call failed transiently — retrying`,{attempt:r,delayMs:i,sessionId:t.sessionId,turnId:t.turnId,error:e}),await new Promise(e=>setTimeout(e,i))}}}function findAuthorizationSignalFromToolResults(e){let t=contextStorage.getStore();if(t!==void 0)for(let n of e??[]){let e=readToolInterrupt(t,n.toolCallId);if(e!==void 0&&isAuthorizationSignal(e))return e}for(let t of e??[])if(isAuthorizationSignal(t.output))return t.output}export{appendMissingToolResultMessages,createToolLoopHarness};
3
+ `)};return t!==void 0&&(n.providerOptions=t),n}function buildGatewayAttributionHeaders(e,t){let n=resolveProviderHeaders(e);if(n===void 0)return;let r=t?.agentName??t?.agentId,i=process.env.VERCEL_PROJECT_PRODUCTION_URL||process.env.VERCEL_URL,a=i?`https://${i}`:void 0,o={...n};return r&&(o[`x-title`]=r),a&&(o[`http-referer`]=a),o}async function resolveActiveRuntimeModel(e){if(e.ctx===void 0){let t=e.session.agent.modelReference;if(t===void 0)throw Error(`Dynamic model selection is unavailable outside an eve runtime context.`);return{model:await e.config.resolveModel(t),session:e.session}}let t=getActiveDynamicModelSelection(e.ctx);if(t===null){let t=e.session.agent.modelReference;if(e.session.agent.dynamicModel===!0||t===void 0)throw Error(`Dynamic model selection is required before model-dependent work begins. Add a matching resolver handler that returns a concrete model.`);return{model:await e.config.resolveModel(t),session:e.session}}return{model:t.model===void 0?await e.config.resolveModel(t.reference):t.model,session:updateSessionModelReference(e.session,t.reference)}}function updateSessionModelReference(e,t){return{...e,agent:{...e.agent,modelReference:t},compaction:updateCompactionThresholdForModelReference({compaction:e.compaction,modelReference:t})}}function updateCompactionThresholdForModelReference(e){return e.modelReference.contextWindowTokens===void 0?e.compaction:{...e.compaction,threshold:Math.max(1,Math.floor(e.modelReference.contextWindowTokens*(e.compaction.thresholdPercent??.9)))}}const TURN_TRACE_STATE_KEY=`eve.harness.turnTrace`;function getTurnTraceState(e){return e.state?.[TURN_TRACE_STATE_KEY]}function setTurnTraceState(e,t){let n={traceId:t.traceId,spanId:t.spanId,traceFlags:t.traceFlags};return{...e,state:{...e.state,[TURN_TRACE_STATE_KEY]:n}}}function resolveStepOtelContext(e,t,n){if(t)return trace.setSpan(context.active(),t);if(e){let e=getTurnTraceState(n);if(e){let t=trace.wrapSpanContext({isRemote:!0,traceId:e.traceId,spanId:e.spanId,traceFlags:e.traceFlags});return trace.setSpan(context.active(),t)}}}function buildHarnessToolsWithDynamicSubagents(e,t){let n=new Map(e);if(t===void 0)return n;for(let e of buildDynamicSubagentTools(t)){if(n.has(e.name))throw Error(`Dynamic subagent "${e.name}" collides with another runtime-visible tool name.`);n.set(e.name,e)}return n}function createToolLoopHarness(t){let n=t.handleEvent,d=getInstrumentationRuntime()?.otelSettings,g=getInstrumentationConfig();d!==void 0&&ensureOtelIntegration();let v=d===void 0?void 0:trace.getTracer(`eve`),y=t.runtimeIdentity?.agentName;async function runStep(e,t){let n;if(v&&hasStepInput(t)){let t=d?.functionId??y,r={"eve.version":eveVersion,"eve.environment":environment,"eve.session.id":e.sessionId};t&&(r[`ai.telemetry.functionId`]=t),n=v.startSpan(`ai.eve.turn`,{attributes:r})}let r=resolveStepOtelContext(v,n,e),executeStep=()=>executeStepBody(e,t,n);try{return r?await context.with(r,executeStep):await executeStep()}finally{n?.end()}}async function executeStepBody(v,x,C){let E=v;C&&(E=setTurnTraceState(E,C.spanContext()));let O=getHarnessEmissionState(E.state),A=contextStorage.getStore(),j=A?.get(ParentSessionKey),M=j!==void 0||A?.get(SessionCallbackKey)!==void 0,re=resolveParentLineage(j,A?.get(ChannelKey)),ie=A?.get(ParentTraceContextKey),ae,N=createInstrumentationHandleEvent({agentName:t.runtimeIdentity?.agentName,channelKind:A?.get(ChannelInstrumentationKey)?.kind,getAttemptScope:()=>ae,handleEvent:n,hooks:t.instrumentation?.hooks,parentLineage:re,parentTraceContext:ie,rootSessionId:j?.rootSessionId,sessionId:E.sessionId,turnId:activeTurnId(O)}),failModelSelection=async(n,r)=>{if(throwIfTurnAborted(t.abortSignal),C&&recordErrorOnSpan(C,n),!N)throw n;let a=createErrorId(),o=toErrorMessage(n);return log.error(`model selection failed terminally`,{error:n,errorId:a,sessionId:E.sessionId,turnId:r.turnId}),await emitFailedStep(N,r,{code:`MODEL_SELECTION_FAILED`,details:{errorId:a},message:o,sessionId:E.sessionId}),{next:t.mode===`task`||M?{done:!0,isError:!0,output:o}:{done:!0,output:``},session:E}},preparePreambleTrace=async()=>{let e=C?.spanContext(),n=e!==void 0&&isValidSpanContext(e)?{spanId:e.spanId,traceFlags:e.traceFlags,traceId:e.traceId}:void 0;return await prepareTurnTraceContext({agentName:t.runtimeIdentity?.agentName,instrumentation:t.instrumentation,parentLineage:re,parentTraceContext:ie,rootSessionId:j?.rootSessionId??E.rootSessionId??E.sessionId,sequence:O.sequence,sessionId:E.sessionId,sessionStarted:O.sessionStarted,traceContext:n,turnId:`turn_${O.sequence}`})};if(t.clearOnly===!0)return E={...E,compaction:{recentWindowSize:E.compaction.recentWindowSize,threshold:E.compaction.threshold,thresholdPercent:E.compaction.thresholdPercent},history:[]},await N?.(createContextClearedEvent({sequence:O.sequence,sessionId:E.sessionId,turnId:activeTurnId(O)})),await N?.(createSessionWaitingEvent()),{next:null,session:E};if(t.compactOnly===!0){if(E.history.length>0)try{let e=await resolveActiveRuntimeModel({config:t,ctx:contextStorage.getStore(),session:E});E=e.session;let n=await maybeCompact({abortSignal:t.abortSignal,emit:N,emissionState:{...O,turnId:activeTurnId(O)},force:!0,messages:[...E.history],model:e.model,onCompaction:t.onCompaction,resolveModel:t.resolveModel,runtimeIdentity:t.runtimeIdentity,session:E,telemetry:enrichTelemetry(d,y)??void 0});E={...n.session,compaction:{recentWindowSize:n.session.compaction.recentWindowSize,threshold:n.session.compaction.threshold,thresholdPercent:n.session.compaction.thresholdPercent},history:n.messages}}catch(e){logError(log,`manual session compaction failed`,e,{sessionId:E.sessionId})}return await N?.(createSessionWaitingEvent()),{next:null,session:E}}let P=consumeDeferredStepInput({input:x,preferCurrentInput:t.mode!==`conversation`&&x!==void 0&&hasPendingApprovalBatch(E),session:E});E=P.session;let F=await resolvePendingRuntimeActions({emit:N,session:E,stepInput:P.input});if(F.outcome===`unresolved`)return{next:null,session:F.session};E=F.session;let oe=getPendingInputRequestIds(E.state),I=convertStaleResponsesToUserMessage({history:F.messages,pendingRequestIds:oe,stepInput:dropStaleSessionLimitContinuationResponses({pendingRequestIds:oe,stepInput:P.input})}),L=I.stepInput,R=I.kind===`converted`?{...L,message:I.displayMessage}:L,z=contextStorage.getStore();z!==void 0&&t.resolveStepDynamicTools!==void 0&&shouldPrepareApprovalPolicyTools({session:E,stepInput:L})&&await t.resolveStepDynamicTools({ctx:z,event:createStepStartedEvent({modelId:E.agent.modelReference?.id??`dynamic`,sequence:O.sequence,stepIndex:O.stepIndex,turnId:O.turnId}),messages:F.messages});let B=await coordinateApprovalDelivery({session:E,stepInput:L,tools:buildResponseAuthorizationTools({authoredTools:t.tools,context:z})});if(E=B.session,N){for(let e of B.feedback)await N(createMessageCompletedEvent({message:e,sequence:O.sequence,stepIndex:O.stepIndex,turnId:O.turnId}));let e=getApprovalAuditState(E.state);for(let t of e.activeCandidates.filter(e=>e.pendingEventEmitted!==!0))await N(createApprovalCandidateEvent({candidateId:t.candidateId,outcome:`pending`,requestId:t.requestId,responderPrincipalId:t.responder.principalId,sequence:O.sequence,stepIndex:O.stepIndex,turnId:O.turnId})),E={...E,state:markApprovalCandidatePendingEventEmitted({candidateId:t.candidateId,state:E.state})};for(let t of e.candidateHistory.filter(e=>e.eventEmitted!==!0&&e.status!==`allowed`))await N(createApprovalCandidateEvent({candidateId:t.candidateId,outcome:t.status,requestId:t.requestId,responderPrincipalId:t.responder.principalId,reason:t.reason,sequence:O.sequence,stepIndex:O.stepIndex,turnId:O.turnId})),E={...E,state:markApprovalCandidateHistoryEventEmitted({candidateId:t.candidateId,state:E.state})};for(let t of e.settlements.filter(e=>e.eventEmitted!==!0))await N(createApprovalSettledEvent({outcome:t.outcome===`allowed`?`approved`:`cancelled`,requestId:t.requestId,responderPrincipalId:t.actor.principalId,sequence:O.sequence,stepIndex:O.stepIndex,turnId:O.turnId})),E={...E,state:markApprovalSettlementEventEmitted({requestId:t.requestId,state:E.state})}}if(B.kind===`park`)return{next:null,session:E};if(B.kind===`continue-coordination`)return{next:runStep,session:B.stepInput===void 0?E:queueDeferredStepInput(E,B.stepInput)};if(B.challenges.length>0){if(N)for(let e of B.challenges)await N(createAuthorizationRequiredEvent({authorization:e.challenge,candidateId:e.candidateId,description:e.challenge.instructions??`Authorization required for ${e.name}`,name:e.name,sequence:O.sequence,stepIndex:O.stepIndex,turnId:O.turnId,webhookUrl:e.hookUrl}));let e=B.stepInput===void 0?E:queueDeferredStepInput(E,B.stepInput);return{next:null,session:{...e,state:setPendingAuthorization(e.state,{challenges:B.challenges})}}}let V=resolvePendingInput({deferMessagesWhileApprovalsPending:t.mode!==`conversation`,history:F.messages,resolveApprovalKey:resolveApprovalKeyFromTools(t.tools),session:E,stepInput:B.stepInput});if(V.outcome===`unresolved`){let e=F.outcome===`resolved`?{...V.session,history:[...F.messages]}:V.session;if(N&&t.mode===`conversation`&&V.deferredMessage===!0&&hasStepInput(x)){A!==void 0&&prepareDynamicInstructionPreamble(A,e.history);let n=[];try{let e=await preparePreambleTrace();O=await emitTurnPreamble(N,R??{},O,t.runtimeIdentity,e)}catch(t){if(n=A===void 0?[]:drainDynamicInstructionUserMessages(A),e={...e,history:[...e.history,...n]},E=e,!isDynamicModelSelectionError(t))throw t;return failModelSelection(t,{sessionStarted:!0,sequence:O.sequence,stepIndex:0,turnId:`turn_${O.sequence}`})}return n=A===void 0?[]:drainDynamicInstructionUserMessages(A),e={...e,history:[...e.history,...n]},O=await emitTurnEpilogue(N,O,t.mode),{next:null,session:setHarnessEmissionState(e,O)}}return F.outcome===`resolved`?(N&&t.mode===`conversation`&&(O=await emitTurnEpilogue(N,O,t.mode),e=setHarnessEmissionState(e,O)),{next:null,session:e}):{next:null,session:V.session}}if(t.instrumentation?.hooks!==void 0&&V.resolvedInputs!==void 0)for(let e of V.resolvedInputs)await publishInputResolutions({batch:e,hooks:t.instrumentation.hooks,sessionId:E.sessionId});if(N&&V.rejectedActions)for(let e of V.rejectedActions)for(let t of e.results)await N(createActionResultEvent({rejected:!0,result:t,sequence:e.event.sequence,stepIndex:e.event.stepIndex,turnId:e.event.turnId}));let H=[];if(N&&hasStepInput(x)){A!==void 0&&prepareDynamicInstructionPreamble(A,V.session.history);try{let e=await preparePreambleTrace();O=await emitTurnPreamble(N,R??{},O,t.runtimeIdentity,e)}catch(e){if(H=A===void 0?[]:drainDynamicInstructionUserMessages(A),E={...V.session,history:[...V.session.history,...H]},!isDynamicModelSelectionError(e))throw e;return failModelSelection(e,{sessionStarted:!0,sequence:O.sequence,stepIndex:0,turnId:`turn_${O.sequence}`})}H=A===void 0?[]:drainDynamicInstructionUserMessages(A),C&&C.setAttribute(`eve.turn.id`,O.turnId)}let se=V.session.history.length;E=setHarnessEmissionState({...V.session,history:[...V.session.history,...H]},O);let U=[...V.messages.slice(0,se),...H,...V.messages.slice(se)],W=await applySessionLimitContinuation({config:t,emit:N,emissionState:O,limitContinuation:V.limitContinuation,session:E});if(W.result!==null)return W.result;if(E=W.session,t.persistentSubagentSessions===!0){let e=getAgentHandleStore(E.state);if(e?.handles.some(e=>e.phase===`addressed`)!==!0){let t=resolveAgentsAnnouncement({messages:U,store:e});t!==void 0&&U.push({content:t,role:`user`})}}if(L?.context!==void 0&&V.deferredContext!==!0)for(let e of L.context)U.push({content:e,role:`user`});let ce=normalizeUserContent(L?.message);if(ce!==void 0&&!V.deferredMessage&&!V.consumedMessage){let e=await stageAttachmentsToSandbox(ce);U.push({content:e,role:`user`})}let G=A,K;try{G!==void 0&&t.dispatchDynamicModelEvent!==void 0&&await t.dispatchDynamicModelEvent({ctx:G,event:{data:{sequence:O.sequence,stepIndex:O.stepIndex,turnId:O.turnId},type:`step.started`},messages:U}),K=await resolveActiveRuntimeModel({config:t,ctx:G,session:E})}catch(e){return failModelSelection(e,O)}E=K.session;let q=K.model;N&&await emitStepStarted(N,O,requireSessionModelReference(E).id,U);let le=detectPromptCachePath(q),J=le.kind===`anthropic-direct`?getAnthropicCacheMarker():void 0,ue=buildGatewayAttributionHeaders(q,t.runtimeIdentity);({messages:U,session:E}=await maybeCompact({abortSignal:t.abortSignal,emit:N,emissionState:O,messages:U,model:q,onCompaction:t.onCompaction,resolveModel:t.resolveModel,runtimeIdentity:t.runtimeIdentity,session:E,telemetry:enrichTelemetry(d,y)??void 0}));let de=getApprovedTools(E),fe=E.outputSchema===void 0&&G!==void 0&&isScheduleAppAuth(G.get(AuthKey))&&G.get(ParentSessionKey)===void 0,pe=await hydrateSandboxAttachments(U),Y=[],me=[];for(let e of pe)e.role===`system`?Y.push(e):me.push(e);if(G!==void 0){Y.push(...buildDynamicInstructionMessages(G));let e=G.get(PendingSkillAnnouncementKey);e!==void 0&&e.length>0&&Y.push({role:`system`,content:e})}fe&&Y.push({role:`system`,content:CONDITIONAL_DELIVERY_INSTRUCTION});let X=me,prepareModelCallInput=e=>{let t=e?[{role:`system`,content:e}]:[],n=E.agent.system?[{role:`system`,content:E.agent.system}]:[],r=Y.length>0||t.length>0?[...t,...n,...Y]:void 0,i=r!==void 0&&J?applySystemCacheBreakpoint(r,J):r,a=i===void 0?E.agent.system??void 0:mergeSystemInstructions(i);return{instructions:a,telemetryRuntimeContext:buildTelemetryRuntimeContext({eveVersion,authored:g,emissionState:O,environment,modelInput:{instructions:a,messages:X},session:E})}},he=t.tools,runSingleModelCall=async e=>{let{instructions:n,telemetryRuntimeContext:i={}}=e.preparedInput??prepareModelCallInput(e.extraSystemNote);e.retryReason&&(i[`eve.retry.reason`]=e.retryReason);let a=e.trailingUserNote?[...X,{role:`user`,content:e.trailingUserNote}]:X,o=buildHarnessToolsWithDynamicSubagents(t.tools,G),s=getAdvertisedTools({session:E,tools:o});he=s;let c=await buildToolSetWithProviderTools({approvedTools:de,capabilities:t.capabilities,disabledProviderTools:e.disabledProviderTools,modelReference:requireSessionModelReference(E),tools:s,webSearchProvider:t.webSearchProvider});if(G!==void 0){let n=getAdvertisedTools({session:E,tools:buildDynamicTools(G)}),r=buildToolSetFromDefinitions({approvedTools:de,capabilities:t.capabilities,disabledProviderTools:e.disabledProviderTools,tools:n});for(let[e,t]of Object.entries(r)){if(s.get(e)?.runtimeAction!==void 0)throw Error(`Dynamic tool "${e}" collides with a runtime-visible subagent.`);c[e]=t}}E.outputSchema!==void 0&&(c[FINAL_OUTPUT_TOOL_NAME]=buildFinalOutputTool(E.outputSchema));let l=N===void 0?void 0:({tools:e})=>createWorkflowLifecycle({emit:N,emissionState:O,tools:e}),u=t.workflow===!0?{lifecycle:l,maxSubagents:t.workflowMaxSubagents}:void 0,f=await getAdvertisedTools({modelTools:c,session:E,tools:s,workflow:u});E=f.session;let p=f.modelTools,m=J?applyLastToolCacheBreakpoint(p,J):p,h=t.instrumentation?.hooks,g=activeTurnId(O),_=h===void 0?void 0:{attemptId:`${E.sessionId}:${g}:${O.stepIndex}:${e.attemptIndex}`,attemptIndex:e.attemptIndex,functionId:d?.functionId??y,rootSessionId:j?.rootSessionId??E.sessionId,sessionId:E.sessionId,stepIndex:O.stepIndex,turnId:g};ae=_;let v=_===void 0||h===void 0?void 0:createAiSdkHookBridge(_,h,t.instrumentation?.runInContext),b=buildStepHooks({cachePath:le,emit:N,emissionState:O,emitStepStarted:e.suppressStepStartedEmission!==!0,marker:J,session:E}),x=new ToolLoopAgent({headers:ue,instructions:n,model:q,onToolExecutionEnd:logToolExecutionError,onError(e){summarizeKnownError(e.error)?.tags.includes(`config`)!==!0&&logError(log,`tool-loop stream error`,e.error)},onStepFinish:b.onStepFinish,prepareStep:b.prepareStep,reasoning:E.agent.reasoning,runtimeContext:i,stopWhen:isStepCount(1),telemetry:enrichTelemetry(d,y,i,v),toolApproval:buildToolApproval(p),tools:m}),executeModelCall=async()=>{if(N){let e=[...t.tools].filter(([e,t])=>t.runtimeAction!==void 0&&s.get(e)===void 0).map(([e])=>e),n=new Set([ASK_QUESTION_TOOL_NAME,FINAL_OUTPUT_TOOL_NAME,...e]),r=await x.stream({abortSignal:t.abortSignal,messages:a}),{emittedActionCallIds:i,handledInlineToolResultCallIds:o,invalidInputToolCallIds:c,inlineAuthorizationResults:l,trailingInlineToolResultParts:u}=await emitStreamContent(N,O,r.fullStream,{excludedActionToolNames:n,tools:s});throwIfTurnAborted(t.abortSignal);let[d,f]=await Promise.all([b.stepResult,r.responseMessages]);if(isEmptyModelResponse(d)&&extractToolResultCallIds(f).size===0&&l.length===0&&u.length===0)throw new EmptyModelResponseError;await emitStepActions(N,O,d,{emittedActionCallIds:i,excludedActionCallIds:c,excludedActionToolNames:n,handledInlineToolResultCallIds:o,tools:s});let p=d.toolResults,m=new Map(p.map(e=>[e.toolCallId,e]));for(let e of l)m.set(e.toolCallId,e);return withAccumulatedResponseMessages({invalidInputToolCallIds:c,responseMessages:appendMissingToolResultMessages({append:u,responseMessages:f}),stepResult:d,toolResults:[...m.values()]})}let e=await x.generate({abortSignal:t.abortSignal,messages:a});throwIfTurnAborted(t.abortSignal);let n=await b.stepResult;if(isEmptyModelResponse(n)&&extractToolResultCallIds(e.responseMessages).size===0)throw new EmptyModelResponseError;return withAccumulatedResponseMessages({responseMessages:e.responseMessages,stepResult:n})};try{let e=await executeModelCall();return _!==void 0&&await h?.publish({idempotencyKey:attemptIdempotencyKey(_),scope:_,type:`step.attempt.completed`}),e}catch(e){return _!==void 0&&await h?.publish({error:e,idempotencyKey:attemptIdempotencyKey(_),scope:_,type:`step.attempt.failed`}),rethrowNoOutputAsEmptyResponse(e)}},ge=0,runOneModelCall=async e=>runModelCallWithRetries(t=>runSingleModelCall({...e,attemptIndex:ge++,preparedInput:t===1?e.preparedInput:void 0,suppressStepStartedEmission:t!==1||e.suppressStepStartedEmission}),{sessionId:E.sessionId,turnId:O.turnId},t.abortSignal),_e=prepareModelCallInput(),ve=await continuePendingWorkflowInterrupt({childResults:L?.runtimeActionResults,config:t,emit:N,emissionState:O,runStep,session:E,tools:buildHarnessToolsWithDynamicSubagents(t.tools,G)});if(ve!==null)return ve;let ye=await enforceSessionTokenLimit({config:t,emit:N,emissionState:O,messages:U,session:E});if(ye!==null)return ye;let Z;try{Z=await runOneModelCall({preparedInput:_e,suppressStepStartedEmission:!0})}catch(n){throwIfTurnAborted(t.abortSignal);let r=await runModelCallRecoveryPipeline({error:n,stages:[e=>attemptUnsupportedProviderToolRecovery({error:e.error,runOneModelCall,sessionId:E.sessionId,turnId:O.turnId}),e=>attemptEmptyResponseRecovery({emptyDeliveryEnabled:fe,error:e.error,retryCallOptions:e.retryCallOptions,runOneModelCall,sessionId:E.sessionId,turnId:O.turnId})]});if(throwIfTurnAborted(t.abortSignal),r.outcome===`recovered`)Z=r.result;else{let n=r.error;if(C&&recordErrorOnSpan(C,n),!N)throw n;let a=extractWorkflowStreamWriteErrorDetails(n);if(a!==null){let t=createErrorId();return log.error(`workflow stream write failed — parking session for retry by the user`,{...a,errorId:t,error:n,sessionId:E.sessionId,turnId:O.turnId}),O=await emitRecoverableFailedTurn(N,O,{code:`WORKFLOW_STREAM_WRITE_FAILED`,continuationToken:E.continuationToken,details:{...a,errorId:t},message:toErrorMessage(n)}),{next:null,session:setHarnessEmissionState(E,O)}}let o=classifyModelCallError(n),s=createErrorId(),c=summarizeKnownError(n),l=c===null?extractUpstreamRejectionMessage(n):null,u=c?.message??l?.message??toErrorMessage(n),d=c?.hint===void 0?u:`${u} ${c.hint}`,p=extractModelCallErrorDetails(n),m=buildModelCallFailureDetails({catalogSummary:c,error:n,errorId:s,modelCallDetails:p,upstreamRejection:l}),h=buildModelCallFailureLogFields({error:n,errorId:s,modelCallDetails:p,recognized:c!==null||l!==null,sessionId:E.sessionId,turnId:O.turnId});if(o===`terminal`)return c===null?log.error(l?.message??`model call failed terminally`,h):log.error(`${c.name}: ${c.message}`,{errorId:s,hint:c.hint,sessionId:E.sessionId,turnId:O.turnId}),await emitFailedStep(N,O,{code:`MODEL_CALL_FAILED`,details:m,message:u,sessionId:E.sessionId}),{next:t.mode===`task`||M?{done:!0,isError:!0,output:d}:{done:!0,output:``},session:E};if(t.mode===`task`){if(o===`recoverable`&&!(n instanceof EmptyModelResponseError))throw log.warn(l?.message??`model call failed recoverably in task mode — rethrowing for durable step retry`,h),n;return log.error(l?.message??`model call failed; failing the task run`,h),await emitFailedStep(N,O,{code:`MODEL_CALL_FAILED`,details:m,message:u,sessionId:E.sessionId}),{next:{done:!0,isError:!0,output:d},session:E}}log.error(l?.message??`model call failed — parking session for retry by the user`,h),O=await emitRecoverableFailedTurn(N,O,{code:`MODEL_CALL_FAILED`,continuationToken:E.continuationToken,details:m,message:u});let g={isError:!0,output:d};return{next:null,session:setHarnessEmissionState(E,O),settledTurn:g}}}let Q=accumulateTurnUsage({previous:getTurnUsageState(E.state),turnId:O.turnId,usage:extractTokenUsageDelta({costUsd:extractGatewayCostUsd(Z.providerMetadata),usage:Z.usage})});E=setTurnUsageState(E,Q);let $;try{$=formatLanguageModelGatewayId(q)}catch{$=void 0}return await setEveAttributes({"$eve.model":$,"$eve.input_tokens":Q.inputTokens,"$eve.output_tokens":Q.outputTokens,"$eve.cache_read_tokens":Q.cacheReadTokens,"$eve.cache_write_tokens":Q.cacheWriteTokens,"$eve.cost_usd":Q.sawCost?Q.costUsd:void 0,"$eve.tool_count":t.tools.size}),handleStepResult({config:t,emit:N,emissionState:O,promptMessages:U,result:Z,runStep,session:E,runtimeActionTools:he})}return runStep}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`}function extractTokenUsageDelta(e){let t=e.usage;if(!(t===void 0&&e.costUsd===void 0))return{cacheReadTokens:t?.inputTokenDetails?.cacheReadTokens,cacheWriteTokens:t?.inputTokenDetails?.cacheWriteTokens,costUsd:e.costUsd,inputTokens:t?.inputTokens,outputTokens:t?.outputTokens}}function extractGatewayCostUsd(e){let t=readGatewayMetadata(e)?.cost;if(typeof t==`number`&&Number.isFinite(t))return t;if(typeof t==`string`){let e=Number(t);return Number.isFinite(e)?e:void 0}}function readGatewayMetadata(e){let t=e?.gateway;return t&&typeof t==`object`&&!Array.isArray(t)?t:void 0}function buildModelCallFailureDetails(e){let{catalogSummary:t,error:r,errorId:i,modelCallDetails:a,upstreamRejection:o}=e;if(t!==null){let e={errorId:i,message:t.message,name:t.name,semanticErrorId:t.id,...a};return t.hint!==void 0&&(e.hint=t.hint),e}return o===null?{...formatError(r,i),...a}:{errorId:i,message:toErrorMessage(r),name:o.name,...a}}function buildModelCallFailureLogFields(e){let t={errorId:e.errorId,sessionId:e.sessionId,turnId:e.turnId};return e.recognized?{...t,details:e.modelCallDetails}:{...t,error:e.error}}async function runModelCallRecoveryPipeline(e){let t=e.error,n;for(let r of e.stages){let e=await r({error:t,retryCallOptions:n});if(e.outcome===`recovered`)return e;e.outcome===`failed`&&(t=e.error,n=e.retryCallOptions)}return{outcome:`failed`,error:t}}function withAccumulatedResponseMessages(e){let{stepResult:t}=e;return{content:t.content,finishReason:t.finishReason,...e.invalidInputToolCallIds===void 0?{}:{invalidInputToolCallIds:e.invalidInputToolCallIds},providerMetadata:t.providerMetadata,response:{...t.response,messages:[...e.responseMessages]},text:t.text,toolCalls:t.toolCalls,toolResults:e.toolResults===void 0?t.toolResults:[...e.toolResults],usage:t.usage}}function appendMissingToolResultMessages(e){let t=extractToolResultCallIds(e.responseMessages),n=e.append.filter(e=>!t.has(e.toolCallId));return[...e.responseMessages,...n.length>0?[{role:`tool`,content:[...n]}]:[]]}function getInvalidToolCallInputErrors(e){let t=[];for(let n of e.toolCalls){if(n.toolName===FINAL_OUTPUT_TOOL_NAME)continue;let e=getInvalidToolCallInputError({toolCall:n});e!==void 0&&t.push(e)}return t}function extractToolResultCallIds(e){let t=new Set;for(let n of e)if(Array.isArray(n.content))for(let e of n.content)typeof e==`object`&&e&&e.type===`tool-result`&&t.add(e.toolCallId);return t}async function attemptUnsupportedProviderToolRecovery(e){let t=extractUnsupportedProviderToolTypes(e.error);if(t.length===0)return{outcome:`skipped`};let n=[];for(let e of t){let t=resolveFrameworkToolFromUpstreamType(e);t!==null&&!n.includes(t)&&n.push(t)}if(n.length===0)return{outcome:`skipped`};log.warn(`disabling unsupported provider tool(s); retrying step once`,{disabled:n,sessionId:e.sessionId,turnId:e.turnId,upstreamTypes:t});let r={disabledProviderTools:new Set(n),extraSystemNote:buildDisabledToolNote(n)};try{return{outcome:`recovered`,result:await e.runOneModelCall({...r,suppressStepStartedEmission:!0})}}catch(e){return{outcome:`failed`,error:e,retryCallOptions:r}}}function buildDisabledToolNote(e){let t=e.join(`, `);return`The following ${e.length===1?`tool is`:`tools are`} not available with the current model and has been removed: ${t}. Proceed using the remaining tools or your training knowledge.`}function isEmptyModelResponse(e){return e.toolCalls.length===0&&e.toolResults.length===0&&resolveAssistantStepText(e.response.messages,e.text)===null}function rethrowNoOutputAsEmptyResponse(e){throw isNoOutputGeneratedError(e)?new EmptyModelResponseError({cause:e}):e}const EMPTY_RESPONSE_NUDGE=`Your previous reply was empty and was not delivered. Answer now from the tool results above; do not re-run tools or mention this notice.`;function buildEmptyResponseNudge(e){return e?`${EMPTY_RESPONSE_NUDGE} If the current task explicitly requires conditional delivery and there is nothing to report, reply with exactly ${EMPTY_DELIVERY_SENTINEL}.`:EMPTY_RESPONSE_NUDGE}async function attemptEmptyResponseRecovery(e){if(!(e.error instanceof EmptyModelResponseError))return{outcome:`skipped`};log.warn(`empty model response; reissuing the model call once`,{sessionId:e.sessionId,turnId:e.turnId});try{return{outcome:`recovered`,result:await e.runOneModelCall({...e.retryCallOptions,retryReason:`empty-response`,suppressStepStartedEmission:!0,trailingUserNote:buildEmptyResponseNudge(e.emptyDeliveryEnabled)})}}catch(t){return{outcome:`failed`,error:t,retryCallOptions:e.retryCallOptions}}}async function handleStepResult(e){let{config:t,emit:n,promptMessages:r,result:i,runStep:a}=e,{emissionState:o,session:s}=e,c=resolveAssistantStepText(i.response.messages,i.text),l=i.finishReason!==`tool-calls`&&i.toolCalls.length===0&&hasEmptyDeliverySentinel(c),u=getInvalidToolCallInputErrors({toolCalls:i.toolCalls}),d=new Set([...i.invalidInputToolCallIds??[],...i.toolCalls.filter(isInvalidToolCall).map(e=>e.toolCallId),...u.map(e=>e.toolCallId)]),f=l?[]:appendMissingToolResultMessages({append:u.map(e=>createToolResultMessagePartFromToolError(e)),responseMessages:i.response.messages}),p=l?null:c,m=new Set;for(let e of[...i.content??[],...i.toolResults??[]])(e.type===`tool-result`||e.type===`tool-error`)&&e.providerExecuted===!0&&m.add(e.toolCallId);let h=normalizeProviderToolHistory({messages:f,providerExecutedOutcomeIds:m}),v=h.messages,y={...s,compaction:createNextCompactionConfig(s.compaction,r,i)},b=t.workflow===!0?readWorkflowContinuationSecurity(y):void 0;if(b!==void 0){let e=await getWorkflowSandboxInterrupt(i,b);if(e!==void 0){if(!isWorkflowRuntimeActionInterrupt(e))throw Error(`Unsupported Workflow interrupt kind "${e.payload.kind}".`);return parkOnWorkflowInterrupt({baseSession:y,emissionState:o,interrupt:e,promptMessages:r,responseMessages:v})}}let S=extractToolApprovalInputRequests({content:i.content??[],excludedCallIds:d}),C=new Set(S.map(e=>e.action.callId)),ee=extractQuestionInputRequests({toolCalls:i.toolCalls,excludedCallIds:new Set([...d,...C])}),w=[...S,...ee],T=getAdvertisedTools({session:y,tools:e.runtimeActionTools}),E=(i.toolCalls??[]).filter(e=>!d.has(e.toolCallId)).filter(t=>e.runtimeActionTools.get(t.toolName)?.runtimeAction!==void 0).filter(e=>T.get(e.toolName)?.runtimeAction===void 0?(log.warn(`runtime action tool call blocked because tool is not advertised`,{callId:e.toolCallId,sessionId:y.sessionId,toolName:e.toolName}),!1):!0).map(e=>createRuntimeActionRequestFromToolCall({toolCall:e,tools:T}));if(E.length>0){if(w.length===0)return{next:null,session:setHarnessEmissionState(setPendingRuntimeActionBatch({actions:E,event:{sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId},responseMessages:v,session:{...y,history:[...r]}}),advanceStep(o))};let e=setPendingRuntimeActionBatch({actions:E,event:{sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId},responseMessages:v,session:{...y,history:[...r]}});return e=appendPendingInputBatch({event:{sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId},requests:w,responseMessages:[],session:e}),n&&await n(createInputRequestedEvent({requests:w,sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId})),{next:null,session:setHarnessEmissionState(e,advanceStep(o))}}if(w.length>0){let e=buildResponseAuthorizationTools({authoredTools:t.tools,context:contextStorage.getStore()}),i=appendPendingInputBatch({event:{sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId},requests:w,responseAuthRequiredRequestIds:S.filter(t=>{let n=e.get(t.action.toolName)?.approval;return n!==void 0&&typeof n!=`function`&&n.response!==void 0}).map(e=>e.requestId),responseMessages:v,session:{...y,history:[...r]}});return n&&(await n(createInputRequestedEvent({requests:w,sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId})),t.mode===`conversation`&&(o=await emitTurnEpilogue(n,o,t.mode),i=setHarnessEmissionState(i,o))),{next:hasDeferredStepInput(i)?a:null,session:i}}let D=findAuthorizationSignalFromToolResults(i.toolResults);if(D){let{challenges:e}=D;if(n){for(let t of getSupersededAuthorizationChallenges(y.state,e))await n(createAuthorizationCompletedEvent({attemptId:t.attemptId,authorization:t.challenge,name:t.name,outcome:`failed`,reason:`Superseded by a newer authorization attempt.`,sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId}));for(let t of e)await n(createAuthorizationRequiredEvent({attemptId:t.attemptId,authorization:t.challenge,name:t.name,description:t.challenge.instructions??`Authorization required for ${t.name}`,webhookUrl:t.hookUrl,sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId}));t.mode===`conversation`&&(o=await emitTurnEpilogue(n,o,t.mode))}return{next:null,session:setHarnessEmissionState({...y,history:[...r],state:setPendingAuthorization(y.state,{challenges:e})},o)}}let te=v,ne=[...r,...te],k={...y,history:ne};return!(k.outputSchema!==void 0&&extractFinalOutput(i)!==void 0)&&(te.at(-1)?.role===`tool`||h.outcomeEndsResponse||hasDeferredStepInput(k))?(n&&(o=advanceStep(o),k=setHarnessEmissionState(k,o)),{next:a,session:k}):t.mode===`task`?finishTaskTurn({emissionState:o,emit:n,history:r,result:i,schema:k.outputSchema,session:k,stepOutput:p}):finishConversationTurn({emissionState:o,emit:n,history:r,result:i,schema:k.outputSchema,session:k,stepOutput:p})}const OUTPUT_SCHEMA_NOT_FULFILLED={code:`OUTPUT_SCHEMA_NOT_FULFILLED`,message:`The agent could not produce a result matching the requested schema.`};function extractFinalOutput(e){return(e.toolCalls??[]).find(e=>e.toolName===FINAL_OUTPUT_TOOL_NAME&&!isInvalidToolCall(e))?.input}function persistStructuredAssistantTurn(e,t,n){return{...e,history:[...t,{content:JSON.stringify(n),role:`assistant`}],outputSchema:void 0}}async function emitStructuredResult(e,t,n,r){return await e(createResultCompletedEvent({result:n,sequence:t.sequence,stepIndex:t.stepIndex,turnId:t.turnId})),emitTurnEpilogue(e,t,r)}async function finishTaskTurn(e){let{emit:t,history:n,result:r,schema:i,stepOutput:a}=e,{emissionState:o,session:s}=e;if(i===void 0)return t&&(o=await emitTurnEpilogue(t,o,`task`),s=setHarnessEmissionState(s,o)),{next:{done:!0,output:a??``},session:s};let c=extractFinalOutput(r);return c===void 0?(t&&await emitFailedStep(t,o,{...OUTPUT_SCHEMA_NOT_FULFILLED,sessionId:s.sessionId}),{next:{done:!0,isError:!0,output:OUTPUT_SCHEMA_NOT_FULFILLED.message},session:s}):(s=persistStructuredAssistantTurn(s,n,c),t&&(o=await emitStructuredResult(t,o,c,`task`),s=setHarnessEmissionState(s,o)),{next:{done:!0,output:c},session:s})}async function finishConversationTurn(e){let{emit:t,history:n,result:r,schema:i,stepOutput:a}=e,{emissionState:o,session:s}=e;if(i===void 0)return t&&(o=await emitTurnEpilogue(t,o,`conversation`),s=setHarnessEmissionState(s,o)),{next:null,session:s,settledTurn:{output:a??``}};let c=extractFinalOutput(r);if(c===void 0){t&&(o=await emitRecoverableFailedTurn(t,o,{...OUTPUT_SCHEMA_NOT_FULFILLED,continuationToken:s.continuationToken}),s=setHarnessEmissionState(s,o));let e={isError:!0,output:OUTPUT_SCHEMA_NOT_FULFILLED.message};return{next:null,session:s,settledTurn:e}}return s=persistStructuredAssistantTurn(s,n,c),t&&(o=await emitStructuredResult(t,o,c,`conversation`),s=setHarnessEmissionState(s,o)),{next:null,session:s,settledTurn:{output:c}}}async function continuePendingWorkflowInterrupt(e){let t=getPendingWorkflowInterrupt(e.session.state);if(t===void 0)return null;let n=t.interrupt;if(!isWorkflowRuntimeActionInterrupt(n))throw Error(`Unsupported Workflow interrupt kind "${n.payload.kind}".`);let i=e.emit===void 0?void 0:createWorkflowLifecycle({emit:e.emit,emissionState:e.emissionState,skipReplayed:!0,tools:e.tools}),a=getWorkflowContinuationSecurity(e.session),o;try{let t=buildWorkflowHostTools({tools:e.tools}),r=e.childResults??[],s=n,c=0;for(;;){o=await continueWorkflowSandboxInterrupt({bridgeRequestLimit:resolveWorkflowSandboxBridgeRequestLimit(e.config.workflowMaxSubagents),continuationSecurity:a,interrupt:s,lifecycle:i,resolution:r[c]?.output,tools:t});let n=await unwrapWorkflowSandboxResult(o,a);if(n.status!==`interrupted`||!isWorkflowRuntimeActionInterrupt(n.interrupt)||c+1>=r.length)break;let l=getWorkflowRuntimeActionInterrupts(n.interrupt)[0];if(l===void 0)throw Error(`Workflow continuation contains no pending runtime-action interrupt.`);c++,s=l}}catch(e){logError(log,`Workflow interrupt continuation failed`,e),o={error:`workflow_continuation_failed`,message:toErrorMessage(e),retryable:!1}}let s=await unwrapWorkflowSandboxResult(o,a),c=s.status===`interrupted`?s.interrupt:s.output,l=replaceWorkflowToolResult([...e.session.history,...t.responseMessages],n.outerToolCallId,c),u=clearPendingWorkflowInterrupt({...e.session,history:l});if(s.status===`interrupted`){if(!isWorkflowRuntimeActionInterrupt(s.interrupt))throw Error(`Unsupported Workflow interrupt kind "${s.interrupt.payload.kind}".`);let t=e.session.history.length,n=l.slice(0,t),r=l.slice(t);return u={...u,history:n},parkOnWorkflowInterrupt({baseSession:u,emissionState:e.emissionState,interrupt:s.interrupt,promptMessages:n,responseMessages:r})}return{next:e.runStep,session:u}}function replaceWorkflowToolResult(e,t,n){if(t===void 0)return[...e];let r=typeof n==`string`?{type:`text`,value:n}:{type:`json`,value:n};return e.map(e=>{if(e.role!==`tool`)return e;let n=e.content.map(e=>e.type!==`tool-result`||e.toolCallId!==t?e:{...e,output:r});return{...e,content:n}})}function parkOnWorkflowInterrupt(e){let t=getWorkflowRuntimeActionInterrupts(e.interrupt)[0];if(t===void 0)throw Error(`Workflow continuation contains no pending runtime-action interrupt.`);let n={...e.baseSession,history:[...e.promptMessages]};return{next:null,session:setHarnessEmissionState(setPendingWorkflowInterrupt({interrupt:t,responseMessages:e.responseMessages,session:n}),e.emissionState)}}function createNextCompactionConfig(e,t,n){let r={recentWindowSize:e.recentWindowSize,threshold:e.threshold,thresholdPercent:e.thresholdPercent};return n.usage?.inputTokens!==void 0&&(r.lastKnownInputTokens=n.usage.inputTokens,r.lastKnownPromptMessageCount=t.length),r}async function maybeCompact(e){let{emit:t,emissionState:n}=e,r=e.messages,i=e.session;if(e.force!==!0&&!shouldCompact(r,i.compaction))return{messages:r,session:i};let a=await resolveCompactionModel({compactionModelReference:i.agent.compactionModelReference,model:e.model,modelReference:requireSessionModelReference(i),resolveModel:e.resolveModel});if(t&&await t(createCompactionRequestedEvent({modelId:formatLanguageModelGatewayId(a.model),sequence:n.sequence,sessionId:i.sessionId,turnId:n.turnId,usageInputTokens:getInputTokenCount(r,i.compaction)})),r=await compactMessages(r,a.model,i.compaction,a.providerOptions,e.telemetry,buildGatewayAttributionHeaders(a.model,e.runtimeIdentity),e.abortSignal,e.force===!0),e.onCompaction)for(let t of e.onCompaction())r.push(t);return t&&await t(createCompactionCompletedEvent({modelId:formatLanguageModelGatewayId(a.model),sequence:n.sequence,sessionId:i.sessionId,turnId:n.turnId})),{messages:r,session:i}}function resolveApprovalKeyFromTools(e){return t=>{let n=e.get(t.action.toolName);if(n?.approvalKey!==void 0)return n.approvalKey(t.action.input)}}async function runModelCallWithRetries(e,t,n){for(let r=1;;r++){throwIfTurnAborted(n);try{return await e(r)}catch(e){if(throwIfTurnAborted(n),r===3||classifyModelCallError(e)!==`retry`)throw e;let i=500*2**(r-1)+Math.floor(Math.random()*250);log.warn(`model call failed transiently — retrying`,{attempt:r,delayMs:i,sessionId:t.sessionId,turnId:t.turnId,error:e}),await new Promise(e=>setTimeout(e,i))}}}function findAuthorizationSignalFromToolResults(e){let t=contextStorage.getStore();if(t!==void 0)for(let n of e??[]){let e=readToolInterrupt(t,n.toolCallId);if(e!==void 0&&isAuthorizationSignal(e))return e}for(let t of e??[])if(isAuthorizationSignal(t.output))return t.output}export{appendMissingToolResultMessages,createToolLoopHarness};
@@ -1 +1 @@
1
- import{getRuntimeActionRequestKey}from"#runtime/actions/keys.js";const WORKFLOW_RUNTIME_ACTION_INTERRUPT_KIND=`eve.workflow-runtime-action`;function isWorkflowRuntimeActionInterrupt(e){return isRecord(e)&&isRecord(e.payload)&&e.payload.kind===`eve.workflow-runtime-action`}function buildRuntimeActionFromWorkflowInterrupt(e){let t=e.payload,n=t.runtimeAction,r=t.toolInput,i=t.toolName,a=sanitizeCallId(`${i}_${`interruptId`in e?String(e.interruptId):``}`);return n.kind===`remote-agent-call`?{callId:a,description:``,input:r,kind:`remote-agent-call`,name:i,nodeId:n.nodeId,remoteAgentName:n.remoteAgentName??i}:{callId:a,description:``,input:r,kind:`subagent-call`,name:i,nodeId:n.nodeId,subagentName:n.subagentName}}function getWorkflowRuntimeActionInterrupts(e){return e.continuation.ledger.flatMap(t=>t.kind!==`tool`||t.status!==`interrupted`||t.interruptPayload.kind!==`eve.workflow-runtime-action`?[]:[{continuation:e.continuation,input:t.inputJson===``?void 0:JSON.parse(t.inputJson),interruptId:t.interruptId,outerToolCallId:e.continuation.outerToolCallId,payload:t.interruptPayload,toolCallId:t.toolCallId,toolName:t.name,type:`code-mode-interrupt`}])}function buildRuntimeActionsFromWorkflowInterrupt(e){return getWorkflowRuntimeActionInterrupts(e).map(e=>buildRuntimeActionFromWorkflowInterrupt(e))}function getRuntimeActionKeysFromWorkflowInterrupt(t){return buildRuntimeActionsFromWorkflowInterrupt(t).map(getRuntimeActionRequestKey)}function sanitizeCallId(e){return e.replace(/[^a-zA-Z0-9_-]/g,`_`)}function isRecord(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}export{WORKFLOW_RUNTIME_ACTION_INTERRUPT_KIND,buildRuntimeActionFromWorkflowInterrupt,buildRuntimeActionsFromWorkflowInterrupt,getRuntimeActionKeysFromWorkflowInterrupt,getWorkflowRuntimeActionInterrupts,isWorkflowRuntimeActionInterrupt};
1
+ import{getRuntimeActionRequestKey}from"#runtime/actions/keys.js";const WORKFLOW_RUNTIME_ACTION_INTERRUPT_KIND=`eve.workflow-runtime-action`;function isWorkflowRuntimeActionInterrupt(e){return isRecord(e)&&isRecord(e.payload)&&e.payload.kind===`eve.workflow-runtime-action`}function buildRuntimeActionFromWorkflowInterrupt(e){let t=e.payload,n=t.runtimeAction,r=t.toolInput,i=t.toolName,a=sanitizeCallId(`${i}_${`interruptId`in e?String(e.interruptId):``}`);if(n.kind===`remote-agent-call`)return{callId:a,description:``,input:r,kind:`remote-agent-call`,name:i,nodeId:n.nodeId,remoteAgentName:n.remoteAgentName??i};if(n.kind===`subagent-call`)return{callId:a,description:``,input:r,kind:`subagent-call`,name:i,nodeId:n.nodeId,subagentName:n.subagentName};throw Error(`Workflow runtime actions cannot carry "${n.kind}" tools.`)}function getWorkflowRuntimeActionInterrupts(e){return e.continuation.ledger.flatMap(t=>t.kind!==`tool`||t.status!==`interrupted`||t.interruptPayload.kind!==`eve.workflow-runtime-action`?[]:[{continuation:e.continuation,input:t.inputJson===``?void 0:JSON.parse(t.inputJson),interruptId:t.interruptId,outerToolCallId:e.continuation.outerToolCallId,payload:t.interruptPayload,toolCallId:t.toolCallId,toolName:t.name,type:`code-mode-interrupt`}])}function buildRuntimeActionsFromWorkflowInterrupt(e){return getWorkflowRuntimeActionInterrupts(e).map(e=>buildRuntimeActionFromWorkflowInterrupt(e))}function getRuntimeActionKeysFromWorkflowInterrupt(t){return buildRuntimeActionsFromWorkflowInterrupt(t).map(getRuntimeActionRequestKey)}function sanitizeCallId(e){return e.replace(/[^a-zA-Z0-9_-]/g,`_`)}function isRecord(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}export{WORKFLOW_RUNTIME_ACTION_INTERRUPT_KIND,buildRuntimeActionFromWorkflowInterrupt,buildRuntimeActionsFromWorkflowInterrupt,getRuntimeActionKeysFromWorkflowInterrupt,getWorkflowRuntimeActionInterrupts,isWorkflowRuntimeActionInterrupt};
@@ -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.36.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 require=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 n=join(e,`dist`);if(existsSync(n))return{packageBuildRoot:n,packageRoot:e}}function resolveSelfPackageJsonPath(t){return createRequire(t).resolve(`${EVE_PACKAGE_NAME}/package.json`)}function resolvePackageLocationFromModulePath(e,t=resolveSelfPackageJsonPath){let n=realpathSync.native(e),i=tryResolveDirectBuildLocation(n);if(i!==void 0)return i;let a=findNearestVerifiedPackageRoot(dirname(n));if(a!==void 0&&isSourceCheckout(a))return{packageBuildRoot:null,packageRoot:a};try{let e=tryResolveVerifiedPackageRoot(t(n)),r=e===void 0?void 0:tryCreatePackageLocation(e);if(r!==void 0)return r}catch{}let o=a===void 0?void 0:tryCreatePackageLocation(a);if(o!==void 0)return o;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){return require.resolve(e)}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 r=normalizeInstalledPackageInfo(JSON.parse(readFileSync(e,`utf8`)));if(r?.name===t)return r}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(require.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(require.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?require.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.37.1`,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 require=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 n=join(e,`dist`);if(existsSync(n))return{packageBuildRoot:n,packageRoot:e}}function resolveSelfPackageJsonPath(t){return createRequire(t).resolve(`${EVE_PACKAGE_NAME}/package.json`)}function resolvePackageLocationFromModulePath(e,t=resolveSelfPackageJsonPath){let n=realpathSync.native(e),i=tryResolveDirectBuildLocation(n);if(i!==void 0)return i;let a=findNearestVerifiedPackageRoot(dirname(n));if(a!==void 0&&isSourceCheckout(a))return{packageBuildRoot:null,packageRoot:a};try{let e=tryResolveVerifiedPackageRoot(t(n)),r=e===void 0?void 0:tryCreatePackageLocation(e);if(r!==void 0)return r}catch{}let o=a===void 0?void 0:tryCreatePackageLocation(a);if(o!==void 0)return o;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){return require.resolve(e)}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 r=normalizeInstalledPackageInfo(JSON.parse(readFileSync(e,`utf8`)));if(r?.name===t)return r}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(require.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(require.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?require.resolve(e):resolvePackageCompiledFilePath(t)}export{resolveExpectedWorkflowVersion,resolveInstalledPackageInfo,resolvePackageCompiledFilePath,resolvePackageDependencyPath,resolvePackageLocationFromModulePath,resolvePackageRoot,resolvePackageSourceDirectoryPath,resolvePackageSourceFilePath,resolveWorkflowModulePath};
@@ -1 +1 @@
1
- import{expectFunction,expectObjectRecord,expectOnlyKnownKeys,expectPositiveInteger,expectProviderOptions,expectString,getOptionalStringRecordProperty}from"#internal/authored-module.js";import{isDynamicSentinel}from"#shared/dynamic-tool-definition.js";function normalizeAgentDefinition(e,i){let o=expectObjectRecord(e,i);if(expectOnlyKnownKeys(o,[`build`,`compaction`,`description`,`experimental`,`limits`,`model`,`modelContextWindowTokens`,`modelOptions`,`outputSchema`,`reasoning`],i),o.model===void 0)throw Error(`${i} The "model" field is required.`);let c={model:normalizeAgentModelDefinition(o.model,i)};if(isDynamicSentinel(c.model)&&(o.modelContextWindowTokens!==void 0||o.modelOptions!==void 0))throw Error(`${i} Dynamic model definitions do not support sibling "modelContextWindowTokens" or "modelOptions" fields. Return those overrides from the resolver selection instead.`);return o.description!==void 0&&(c.description=expectString(o.description,i)),o.compaction!==void 0&&(c.compaction=normalizeAgentCompactionDefinition(o.compaction,i)),o.build!==void 0&&(c.build=normalizeAgentBuildDefinition(o.build,i)),o.experimental!==void 0&&(c.experimental=normalizeAgentExperimentalDefinition(o.experimental,i)),o.modelOptions!==void 0&&(c.modelOptions=normalizeAgentModelOptions(o.modelOptions,i)),o.modelContextWindowTokens!==void 0&&(c.modelContextWindowTokens=expectPositiveInteger(o.modelContextWindowTokens,i)),o.outputSchema!==void 0&&(c.outputSchema=o.outputSchema),o.reasoning!==void 0&&(c.reasoning=normalizeAgentReasoningDefinition(o.reasoning,i)),o.limits!==void 0&&(c.limits=normalizeAgentLimitsDefinition(o.limits,i)),c}function normalizeAgentReasoningDefinition(e,t){let n=expectString(e,t);switch(n){case`provider-default`:case`none`:case`minimal`:case`low`:case`medium`:case`high`:case`xhigh`:return n;default:throw Error(t)}}function normalizeAgentModelDefinition(r,i){if(!isDynamicSentinel(r))return r;let a=expectObjectRecord(r,i);expectOnlyKnownKeys(a,[`events`,`kind`],i);let o=expectObjectRecord(a.events,i),c={};for(let[t,n]of Object.entries(o))c[t]=expectFunction(n,i);return{events:c,kind:a.kind}}function expectPositiveIntegerOrFalse(e,t){return e!==!1&&expectPositiveInteger(e,t)}function normalizeAgentLimitsDefinition(e,r){let i=expectObjectRecord(e,r);expectOnlyKnownKeys(i,[`maxInputTokensPerSession`,`maxOutputTokensPerSession`,`sessionTimeoutMs`],r);let a={};return i.sessionTimeoutMs!==void 0&&(a.sessionTimeoutMs=expectPositiveIntegerOrFalse(i.sessionTimeoutMs,r)),i.maxInputTokensPerSession!==void 0&&(a.maxInputTokensPerSession=expectPositiveIntegerOrFalse(i.maxInputTokensPerSession,r)),i.maxOutputTokensPerSession!==void 0&&(a.maxOutputTokensPerSession=expectPositiveIntegerOrFalse(i.maxOutputTokensPerSession,r)),a}function normalizeAgentBuildDefinition(e,r){let i=expectObjectRecord(e,r);expectOnlyKnownKeys(i,[`externalDependencies`],r);let o={};if(i.externalDependencies!==void 0){if(!Array.isArray(i.externalDependencies))throw Error(r);o.externalDependencies=Object.freeze(i.externalDependencies.map(e=>expectString(e,r)))}return o}function normalizeAgentWorkflowDefinition(e,r){let i=expectObjectRecord(e,r);expectOnlyKnownKeys(i,[`world`],r);let a={};return i.world!==void 0&&(a.world=normalizeAgentWorkflowWorldDefinition(i.world,r)),a}function normalizeAgentWorkflowWorldDefinition(e,t){let n=expectString(e,t);if(n.trim()===``)throw Error(`${t} "experimental.workflow.world" must be a non-empty package name.`);return n}function normalizeAgentExperimentalDefinition(e,r){let i=expectObjectRecord(e,r);expectOnlyKnownKeys(i,[`instrumentationProviders`,`subagentPersistentSessions`,`workflow`],r);let a={};if(i.instrumentationProviders!==void 0){if(typeof i.instrumentationProviders!=`boolean`)throw Error(`${r} "experimental.instrumentationProviders" must be a boolean.`);a.instrumentationProviders=i.instrumentationProviders}if(i.subagentPersistentSessions!==void 0){if(typeof i.subagentPersistentSessions!=`boolean`)throw Error(`${r} "experimental.subagentPersistentSessions" must be a boolean.`);a.subagentPersistentSessions=i.subagentPersistentSessions}return i.workflow!==void 0&&(a.workflow=normalizeAgentWorkflowDefinition(i.workflow,r)),a}function normalizeAgentModelOptions(e,r){let a=expectObjectRecord(e,r);expectOnlyKnownKeys(a,[`providerOptions`],r);let o=a.providerOptions;return o===void 0?{}:{providerOptions:expectProviderOptions(o,r)}}function normalizeAgentCompactionDefinition(e,i){let a=expectObjectRecord(e,i);expectOnlyKnownKeys(a,[`model`,`modelContextWindowTokens`,`thresholdPercent`],i);let o={};if(a.model!==void 0){if(isDynamicSentinel(a.model))throw Error(`${i} "compaction.model" does not support defineDynamic — provide a static model.`);o.model=a.model}if(a.modelContextWindowTokens!==void 0&&(o.modelContextWindowTokens=expectPositiveInteger(a.modelContextWindowTokens,i)),a.thresholdPercent!==void 0){let e=a.thresholdPercent;if(typeof e!=`number`||!Number.isFinite(e)||e<0||e>1)throw Error(i);o.thresholdPercent=e}return o}function normalizeInstructionsDefinition(e,r){let i=expectObjectRecord(e,r);expectOnlyKnownKeys(i,[`content`,`markdown`,`role`],r);let o=Object.hasOwn(i,`content`),s=Object.hasOwn(i,`markdown`);if(o===s)throw Error(`${r} Provide exactly one of "content" or "markdown".`);if(s){if(Object.hasOwn(i,`role`))throw Error(`${r} The deprecated "markdown" shape does not support "role".`);return{content:expectString(i.markdown,r),role:`system`}}let c=i.role===void 0?`system`:expectString(i.role,r);if(c!==`system`&&c!==`user`)throw Error(`${r} Expected "role" to be one of: system, user.`);return{content:expectString(i.content,r),role:c}}function normalizeSkillDefinition(e,r){let i=expectObjectRecord(e,r);expectOnlyKnownKeys(i,[`description`,`files`,`license`,`markdown`,`metadata`],r);let s={description:expectString(i.description,r),markdown:expectString(i.markdown,r)},c=i.license,l=getOptionalStringRecordProperty(i,`metadata`,r);return c!==void 0&&(s.license=expectString(c,r)),l!==void 0&&(s.metadata=l),i.files!==void 0&&(s.files=normalizeSkillFiles(i.files,r)),s}function normalizeSkillFiles(e,n){let r=expectObjectRecord(e,n),i={};for(let[e,t]of Object.entries(r)){if(typeof t==`string`||t instanceof Uint8Array){i[e]=t;continue}throw Error(`${n} Expected skill file "${e}" to be a string or Uint8Array.`)}return i}function normalizeScheduleDefinition(r,i){let o=expectObjectRecord(r,i);expectOnlyKnownKeys(o,[`cron`,`markdown`,`run`],i);let s=expectString(o.cron,i),c=o.markdown!==void 0,l=o.run!==void 0;if(c&&l)throw Error(`${i} Pass either "markdown" (fire-and-forget) or "run" (handler) — not both.`);if(!c&&!l)throw Error(`${i} Must provide either "markdown" (fire-and-forget) or "run" (handler).`);let u={cron:s};return c?u.markdown=expectString(o.markdown,i):u.run=expectFunction(o.run,i),u}export{normalizeAgentDefinition,normalizeInstructionsDefinition,normalizeScheduleDefinition,normalizeSkillDefinition};
1
+ import{expectFunction,expectObjectRecord,expectOnlyKnownKeys,expectPositiveInteger,expectProviderOptions,expectString,getOptionalStringRecordProperty}from"#internal/authored-module.js";import{isDynamicSentinel}from"#shared/dynamic-tool-definition.js";function normalizeAgentDefinition(e,i){let o=expectObjectRecord(e,i);if(expectOnlyKnownKeys(o,[`build`,`compaction`,`description`,`experimental`,`limits`,`model`,`modelContextWindowTokens`,`modelOptions`,`outputSchema`,`reasoning`],i),o.model===void 0)throw Error(`${i} The "model" field is required.`);let c={model:normalizeAgentModelDefinition(o.model,i)};if(isDynamicSentinel(c.model)&&(o.modelContextWindowTokens!==void 0||o.modelOptions!==void 0))throw Error(`${i} Dynamic model definitions do not support sibling "modelContextWindowTokens" or "modelOptions" fields. Return those overrides from the resolver selection instead.`);return o.description!==void 0&&(c.description=expectString(o.description,i)),o.compaction!==void 0&&(c.compaction=normalizeAgentCompactionDefinition(o.compaction,i)),o.build!==void 0&&(c.build=normalizeAgentBuildDefinition(o.build,i)),o.experimental!==void 0&&(c.experimental=normalizeAgentExperimentalDefinition(o.experimental,i)),o.modelOptions!==void 0&&(c.modelOptions=normalizeAgentModelOptions(o.modelOptions,i)),o.modelContextWindowTokens!==void 0&&(c.modelContextWindowTokens=expectPositiveInteger(o.modelContextWindowTokens,i)),o.outputSchema!==void 0&&(c.outputSchema=o.outputSchema),o.reasoning!==void 0&&(c.reasoning=normalizeAgentReasoningDefinition(o.reasoning,i)),o.limits!==void 0&&(c.limits=normalizeAgentLimitsDefinition(o.limits,i)),c}function normalizeAgentReasoningDefinition(e,t){let n=expectString(e,t);switch(n){case`provider-default`:case`none`:case`minimal`:case`low`:case`medium`:case`high`:case`xhigh`:return n;default:throw Error(t)}}function normalizeAgentModelDefinition(r,i){if(!isDynamicSentinel(r))return r;let a=expectObjectRecord(r,i);expectOnlyKnownKeys(a,[`events`,`kind`],i);let o=expectObjectRecord(a.events,i),c={};for(let[t,n]of Object.entries(o))c[t]=expectFunction(n,i);return{events:c,kind:a.kind}}function expectPositiveIntegerOrFalse(e,t){return e!==!1&&expectPositiveInteger(e,t)}function normalizeAgentLimitsDefinition(e,r){let i=expectObjectRecord(e,r);expectOnlyKnownKeys(i,[`maxInputTokensPerSession`,`maxOutputTokensPerSession`,`sessionTimeoutMs`],r);let a={};return i.sessionTimeoutMs!==void 0&&(a.sessionTimeoutMs=expectPositiveIntegerOrFalse(i.sessionTimeoutMs,r)),i.maxInputTokensPerSession!==void 0&&(a.maxInputTokensPerSession=expectPositiveIntegerOrFalse(i.maxInputTokensPerSession,r)),i.maxOutputTokensPerSession!==void 0&&(a.maxOutputTokensPerSession=expectPositiveIntegerOrFalse(i.maxOutputTokensPerSession,r)),a}function normalizeAgentBuildDefinition(e,r){let i=expectObjectRecord(e,r);expectOnlyKnownKeys(i,[`externalDependencies`],r);let o={};if(i.externalDependencies!==void 0){if(!Array.isArray(i.externalDependencies))throw Error(r);o.externalDependencies=Object.freeze(i.externalDependencies.map(e=>expectString(e,r)))}return o}function normalizeAgentWorkflowDefinition(e,r){let i=expectObjectRecord(e,r);expectOnlyKnownKeys(i,[`world`],r);let a={};return i.world!==void 0&&(a.world=normalizeAgentWorkflowWorldDefinition(i.world,r)),a}function normalizeAgentWorkflowWorldDefinition(e,t){let n=expectString(e,t);if(n.trim()===``)throw Error(`${t} "experimental.workflow.world" must be a non-empty package name.`);return n}function normalizeAgentExperimentalDefinition(e,r){let i=expectObjectRecord(e,r);expectOnlyKnownKeys(i,[`instrumentationProviders`,`subagentPersistentSessions`,`tasks`,`workflow`],r);let a={};if(i.instrumentationProviders!==void 0){if(typeof i.instrumentationProviders!=`boolean`)throw Error(`${r} "experimental.instrumentationProviders" must be a boolean.`);a.instrumentationProviders=i.instrumentationProviders}if(i.subagentPersistentSessions!==void 0){if(typeof i.subagentPersistentSessions!=`boolean`)throw Error(`${r} "experimental.subagentPersistentSessions" must be a boolean.`);a.subagentPersistentSessions=i.subagentPersistentSessions}if(i.tasks!==void 0){if(typeof i.tasks!=`boolean`)throw Error(`${r} "experimental.tasks" must be a boolean.`);a.tasks=i.tasks}return i.workflow!==void 0&&(a.workflow=normalizeAgentWorkflowDefinition(i.workflow,r)),a}function normalizeAgentModelOptions(e,r){let a=expectObjectRecord(e,r);expectOnlyKnownKeys(a,[`providerOptions`],r);let o=a.providerOptions;return o===void 0?{}:{providerOptions:expectProviderOptions(o,r)}}function normalizeAgentCompactionDefinition(e,i){let a=expectObjectRecord(e,i);expectOnlyKnownKeys(a,[`model`,`modelContextWindowTokens`,`thresholdPercent`],i);let o={};if(a.model!==void 0){if(isDynamicSentinel(a.model))throw Error(`${i} "compaction.model" does not support defineDynamic — provide a static model.`);o.model=a.model}if(a.modelContextWindowTokens!==void 0&&(o.modelContextWindowTokens=expectPositiveInteger(a.modelContextWindowTokens,i)),a.thresholdPercent!==void 0){let e=a.thresholdPercent;if(typeof e!=`number`||!Number.isFinite(e)||e<0||e>1)throw Error(i);o.thresholdPercent=e}return o}function normalizeInstructionsDefinition(e,r){let i=expectObjectRecord(e,r);expectOnlyKnownKeys(i,[`content`,`markdown`,`role`],r);let o=Object.hasOwn(i,`content`),s=Object.hasOwn(i,`markdown`);if(o===s)throw Error(`${r} Provide exactly one of "content" or "markdown".`);if(s){if(Object.hasOwn(i,`role`))throw Error(`${r} The deprecated "markdown" shape does not support "role".`);return{content:expectString(i.markdown,r),role:`system`}}let c=i.role===void 0?`system`:expectString(i.role,r);if(c!==`system`&&c!==`user`)throw Error(`${r} Expected "role" to be one of: system, user.`);return{content:expectString(i.content,r),role:c}}function normalizeSkillDefinition(e,r){let i=expectObjectRecord(e,r);expectOnlyKnownKeys(i,[`description`,`files`,`license`,`markdown`,`metadata`],r);let s={description:expectString(i.description,r),markdown:expectString(i.markdown,r)},c=i.license,l=getOptionalStringRecordProperty(i,`metadata`,r);return c!==void 0&&(s.license=expectString(c,r)),l!==void 0&&(s.metadata=l),i.files!==void 0&&(s.files=normalizeSkillFiles(i.files,r)),s}function normalizeSkillFiles(e,n){let r=expectObjectRecord(e,n),i={};for(let[e,t]of Object.entries(r)){if(typeof t==`string`||t instanceof Uint8Array){i[e]=t;continue}throw Error(`${n} Expected skill file "${e}" to be a string or Uint8Array.`)}return i}function normalizeScheduleDefinition(r,i){let o=expectObjectRecord(r,i);expectOnlyKnownKeys(o,[`cron`,`markdown`,`run`],i);let s=expectString(o.cron,i),c=o.markdown!==void 0,l=o.run!==void 0;if(c&&l)throw Error(`${i} Pass either "markdown" (fire-and-forget) or "run" (handler) — not both.`);if(!c&&!l)throw Error(`${i} Must provide either "markdown" (fire-and-forget) or "run" (handler).`);let u={cron:s};return c?u.markdown=expectString(o.markdown,i):u.run=expectFunction(o.run,i),u}export{normalizeAgentDefinition,normalizeInstructionsDefinition,normalizeScheduleDefinition,normalizeSkillDefinition};
@@ -0,0 +1,54 @@
1
+ import type { ConnectionAuthorizationChallenge } from "#public/connections/errors.js";
2
+ import type { InputRequest } from "#runtime/input/types.js";
3
+ import type { JsonValue } from "#shared/json.js";
4
+ export interface AgentInvocationAuthorizationRequest {
5
+ readonly authorization?: ConnectionAuthorizationChallenge;
6
+ readonly description: string;
7
+ readonly name: string;
8
+ readonly webhookUrl?: string;
9
+ }
10
+ interface AgentInvocationBase {
11
+ readonly invocationId: string;
12
+ readonly createdAt: string;
13
+ readonly expiresAt?: string;
14
+ }
15
+ export type AgentInvocation = (AgentInvocationBase & {
16
+ readonly status: "working";
17
+ readonly pollAfterMs: number;
18
+ readonly result?: JsonValue;
19
+ }) | (AgentInvocationBase & {
20
+ readonly status: "input_required";
21
+ readonly inputRequests: Readonly<Record<string, InputRequest>>;
22
+ readonly result?: JsonValue;
23
+ }) | (AgentInvocationBase & {
24
+ readonly status: "authorization_required";
25
+ readonly authorizations: readonly [
26
+ AgentInvocationAuthorizationRequest,
27
+ ...AgentInvocationAuthorizationRequest[]
28
+ ];
29
+ readonly pollAfterMs: number;
30
+ readonly result?: JsonValue;
31
+ }) | (AgentInvocationBase & {
32
+ readonly status: "completed";
33
+ readonly result?: JsonValue;
34
+ }) | (AgentInvocationBase & {
35
+ readonly status: "failed";
36
+ readonly error: {
37
+ readonly code: number;
38
+ readonly message: string;
39
+ readonly data?: JsonValue;
40
+ };
41
+ }) | (AgentInvocationBase & {
42
+ readonly status: "cancelled";
43
+ });
44
+ export type AgentInvocationStatus = AgentInvocation["status"];
45
+ export type AgentInvocationMutationResult = {
46
+ readonly type: "success";
47
+ readonly invocation: AgentInvocation;
48
+ } | {
49
+ readonly type: "conflict";
50
+ readonly message: string;
51
+ } | {
52
+ readonly type: "not_found";
53
+ };
54
+ export {};
@@ -0,0 +1 @@
1
+ export{};
@@ -0,0 +1,2 @@
1
+ export declare const INVOCATION_TOKEN_ATTRIBUTE = "$eve.invocation_token";
2
+ export declare const INVOCATION_OWNER_ATTRIBUTE = "$eve.invocation_owner";
@@ -0,0 +1 @@
1
+ const INVOCATION_TOKEN_ATTRIBUTE=`$eve.invocation_token`,INVOCATION_OWNER_ATTRIBUTE=`$eve.invocation_owner`;export{INVOCATION_OWNER_ATTRIBUTE,INVOCATION_TOKEN_ATTRIBUTE};
@@ -0,0 +1,9 @@
1
+ import type { RunInput, SessionAuthContext } from "#channel/types.js";
2
+ import { INVOCATION_OWNER_ATTRIBUTE, INVOCATION_TOKEN_ATTRIBUTE } from "#internal/invocation/attributes.js";
3
+ export { INVOCATION_OWNER_ATTRIBUTE, INVOCATION_TOKEN_ATTRIBUTE };
4
+ export type ExternalInvocationMetadata = NonNullable<RunInput["externalInvocation"]>;
5
+ /** Batch-scoped request id exposed to MCP clients for one durable pending-input event. */
6
+ export declare function invocationInputRequestId(pendingBatchId: string, requestId: string): string;
7
+ /** Fixed-width fingerprint used to bind an invocation to its initiating principal. */
8
+ export declare function invocationOwnerKey(auth: SessionAuthContext | null): string;
9
+ export declare function buildInvocationAttributes(metadata: ExternalInvocationMetadata): Readonly<Record<string, string>>;
@@ -0,0 +1 @@
1
+ import{createHash}from"node:crypto";import{INVOCATION_OWNER_ATTRIBUTE,INVOCATION_TOKEN_ATTRIBUTE}from"#internal/invocation/attributes.js";function invocationInputRequestId(t,n){return createHash(`sha256`).update(JSON.stringify([t,n]),`utf8`).digest(`hex`)}function invocationOwnerKey(t){let n=t===null?[`anonymous`]:[t.authenticator,t.issuer??``,t.principalType,t.principalId,t.subject??``];return createHash(`sha256`).update(JSON.stringify(n),`utf8`).digest(`hex`)}function buildInvocationAttributes(e){return{[INVOCATION_OWNER_ATTRIBUTE]:e.ownerKey,[INVOCATION_TOKEN_ATTRIBUTE]:e.continuationToken}}export{INVOCATION_OWNER_ATTRIBUTE,INVOCATION_TOKEN_ATTRIBUTE,buildInvocationAttributes,invocationInputRequestId,invocationOwnerKey};
@@ -0,0 +1,32 @@
1
+ import type { UserContent } from "ai";
2
+ import type { SessionAuthContext } from "#channel/types.js";
3
+ import { type ChannelFrom } from "#channel/channel-operations.js";
4
+ import type { AgentInvocation, AgentInvocationMutationResult } from "#internal/invocation/agent-invocation.js";
5
+ import type { RouteSessionCreator } from "#internal/nitro/routes/channel-route-context.js";
6
+ import type { InputResponse } from "#runtime/input/types.js";
7
+ import type { JsonObject } from "#shared/json.js";
8
+ export declare class WorkflowAgentInvocationExecution {
9
+ #private;
10
+ constructor(input: {
11
+ readonly createSession: RouteSessionCreator;
12
+ readonly from: ChannelFrom;
13
+ });
14
+ create(input: {
15
+ readonly auth: SessionAuthContext | null;
16
+ readonly message: string | UserContent;
17
+ readonly outputSchema?: JsonObject;
18
+ }): Promise<AgentInvocation>;
19
+ read(input: {
20
+ readonly auth: SessionAuthContext | null;
21
+ readonly invocationId: string;
22
+ }): Promise<AgentInvocation | undefined>;
23
+ update(input: {
24
+ readonly auth: SessionAuthContext | null;
25
+ readonly invocationId: string;
26
+ readonly responses: readonly InputResponse[];
27
+ }): Promise<AgentInvocationMutationResult>;
28
+ cancel(input: {
29
+ readonly auth: SessionAuthContext | null;
30
+ readonly invocationId: string;
31
+ }): Promise<AgentInvocation | undefined>;
32
+ }
@@ -0,0 +1 @@
1
+ import{INTERNAL_CHANNEL_DELIVER}from"#channel/channel-operations.js";import{parseJsonValue}from"#shared/json.js";import{RunExpiredError,WorkflowRunNotFoundError}from"#compiled/@workflow/errors/index.js";import{getRun,getWorld}from"#internal/workflow/runtime.js";import{parseNdjsonStream}from"#execution/ndjson-stream.js";import{INVOCATION_OWNER_ATTRIBUTE,INVOCATION_TOKEN_ATTRIBUTE,invocationInputRequestId,invocationOwnerKey}from"#internal/invocation/metadata.js";var WorkflowAgentInvocationExecution=class{#e;#t;constructor(e){this.#e=e.createSession,this.#t=e.from}async create(e){let t=`invocation:${crypto.randomUUID()}`,n=await this.#e({auth:e.auth,capabilities:{requestInput:!0},continuationToken:t,externalInvocation:{continuationToken:t,ownerKey:invocationOwnerKey(e.auth)},input:{message:e.message,outputSchema:e.outputSchema},mode:`task`}),r=await this.#n(n.sessionId,e.auth);if(r===void 0)throw Error(`Invocation run was unavailable after durable creation.`);return workingInvocation(n.sessionId,r.createdAt.toISOString(),r.expiredAt?.toISOString())}async read(e){let t=await this.#n(e.invocationId,e.auth);if(t===void 0)return;if(isTerminalRunStatus(t.status))return await terminalInvocation(t);let n=await readRecentPersistedEvents(e.invocationId);return projectNonterminal(t.runId,t.createdAt.toISOString(),t.expiredAt?.toISOString(),n)}async update(t){let r=await this.read(t);if(r===void 0)return{type:`not_found`};if(r.status!==`input_required`)return conflict(`Invocation is not waiting for input.`);let i=await this.#n(t.invocationId,t.auth);if(i===void 0)return{type:`not_found`};let a=latestPendingInputBatch(await readRecentPersistedEvents(t.invocationId));if(a===void 0)return conflict(`Invocation input changed before the update could be applied.`);let o=new Set,s=[];for(let e of t.responses){let t=a.rawRequestIds[e.requestId];if(t===void 0)return conflict(`Unknown input request: ${e.requestId}`);o.add(e.requestId),s.push({...e,requestId:t})}if(o.size!==t.responses.length||o.size!==Object.keys(a.requests).length)return conflict(`Responses must answer the complete pending input batch exactly once.`);let l=i.attributes[INVOCATION_TOKEN_ATTRIBUTE];if(l===void 0)return{type:`not_found`};try{await this.#t(l)[INTERNAL_CHANNEL_DELIVER]({inputResponses:s},{auth:t.auth})}catch(e){if(RunExpiredError.is(e))return{type:`not_found`};throw e}return{invocation:workingInvocation(t.invocationId,r.createdAt,r.expiresAt),type:`success`}}async cancel(e){let t=await this.read(e);if(t===void 0||isTerminal(t.status))return t;try{await getRun(e.invocationId).cancel()}catch(e){if(WorkflowRunNotFoundError.is(e)||RunExpiredError.is(e))return;throw e}return await this.read(e)}async#n(e,t){let i=await getWorld();try{let n=await i.runs.get(e);return n.attributes[INVOCATION_TOKEN_ATTRIBUTE]===void 0?void 0:n.attributes[INVOCATION_OWNER_ATTRIBUTE]===invocationOwnerKey(t)?n:void 0}catch(e){if(WorkflowRunNotFoundError.is(e)||RunExpiredError.is(e))return;throw e}}};async function readRecentPersistedEvents(e){let t=getRun(e).getReadable({startIndex:-64}),n=await t.getTailIndex();if(n<0)return await t.cancel(`invocation event stream is empty`).catch(()=>{}),[];let r=Math.min(n+1,64),a=parseNdjsonStream(()=>t).getReader(),s=[];try{for(;s.length<r;){let{done:e,value:t}=await a.read();if(e)break;s.push(t)}}finally{await a.cancel(`invocation event window read complete`).catch(()=>{}),a.releaseLock()}return s}function pendingInputBatch(e){let t={},n={};for(let r of e.data.requests){let i=invocationInputRequestId(e.meta.id,r.requestId);t[i]=r.requestId,n[i]={...r,requestId:i}}return{id:e.meta.id,rawRequestIds:t,requests:n}}function latestPendingInputBatch(e){let t;for(let n of e)n.type===`input.requested`?t=pendingInputBatch(n):n.type===`turn.started`&&(t=void 0);return t}function projectNonterminal(e,t,n,r){let i=new Map,a,o;for(let e of r)if(e.type===`input.requested`)a=pendingInputBatch(e);else if(e.type===`turn.started`)i.clear(),a=void 0,o=void 0;else if(e.type===`authorization.required`){let t={description:e.data.description,name:e.data.name};e.data.authorization!==void 0&&(t.authorization=e.data.authorization),e.data.webhookUrl!==void 0&&(t.webhookUrl=e.data.webhookUrl),i.set(e.data.name,t)}else e.type===`authorization.completed`?i.delete(e.data.name):e.type===`message.completed`&&e.data.finishReason!==`tool-calls`&&e.data.message!==null&&(o=safeJson(e.data.message));let s=[...i.values()],c={createdAt:t,expiresAt:n,invocationId:e,result:o};return s.length>0?{...c,authorizations:s,pollAfterMs:1e3,status:`authorization_required`}:a===void 0?{...c,pollAfterMs:1e3,status:`working`}:{...c,inputRequests:a.requests,status:`input_required`}}async function terminalInvocation(e){let t={createdAt:e.createdAt.toISOString(),expiresAt:e.expiredAt?.toISOString(),invocationId:e.runId};if(e.status===`cancelled`)return{...t,status:`cancelled`};if(e.status===`failed`)return{...t,error:{code:-32603,data:safeJson(e.error),message:errorMessage(e.error)},status:`failed`};let n=await getRun(e.runId).returnValue;return{...t,result:safeJson(n.output),status:`completed`}}function workingInvocation(e,t,n){return{createdAt:t,expiresAt:n,invocationId:e,pollAfterMs:1e3,status:`working`}}function safeJson(e){try{return parseJsonValue(e)}catch{return String(e)}}function errorMessage(e){return e instanceof Error?e.message:`Session failed.`}function conflict(e){return{message:e,type:`conflict`}}function isTerminal(e){return e===`completed`||e===`failed`||e===`cancelled`}function isTerminalRunStatus(e){return e===`completed`||e===`failed`||e===`cancelled`}export{WorkflowAgentInvocationExecution};
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Applies the fetch-native HTTP guards required in front of the MCP SDK.
3
+ *
4
+ * Non-browser clients normally omit `Origin`; browser requests are restricted
5
+ * to the endpoint's exact origin. Plain HTTP is accepted only on loopback.
6
+ */
7
+ export declare function validateMcpHttpRequest(request: Request): Response | undefined;
8
+ /**
9
+ * Applies transport and Host validation to the public OAuth discovery route
10
+ * without restricting its Origin. The route itself supplies permissive CORS.
11
+ */
12
+ export declare function validateMcpMetadataRequest(request: Request): Response | undefined;
@@ -0,0 +1 @@
1
+ import{isLoopbackHostname}from"#shared/network-address.js";function validateMcpHttpRequest(e){let t=validateMcpHttpRequestBase(e);if(t!==void 0)return t;let n=new URL(e.url),r=e.headers.get(`origin`);if(r===null||r.length===0)return;let i;try{i=new URL(r)}catch{return securityError(`Invalid Origin header.`)}if(i.origin!==n.origin)return securityError(`Invalid Origin: ${i.origin}`)}function validateMcpMetadataRequest(e){return validateMcpHttpRequestBase(e)}function validateMcpHttpRequestBase(t){let n;try{n=new URL(t.url)}catch{return securityError(`Invalid MCP request URL.`,400)}if(n.protocol!==`https:`&&!(n.protocol===`http:`&&isLoopbackHostname(n.hostname)))return securityError(`MCP endpoints require HTTPS except on loopback.`);let r=validateHostHeader(t,n);if(r!==void 0)return r}function validateHostHeader(e,t){let n=e.headers.get(`host`);if(n===null||n.length===0)return securityError(`Missing Host header`);let r;try{r=new URL(`${t.protocol}//${n}`)}catch{return securityError(`Invalid Host header`)}if(r.username!==``||r.password!==``||r.pathname!==`/`||r.search!==``||r.hash!==``||r.host!==t.host)return securityError(`Invalid Host header: ${n}`)}function securityError(e,t=403){return Response.json({error:{code:-32e3,message:e},id:null,jsonrpc:`2.0`},{headers:{"content-type":`application/json`},status:t})}export{validateMcpHttpRequest,validateMcpMetadataRequest};
@@ -0,0 +1,9 @@
1
+ export interface McpProtectedResourceMetadataOptions {
2
+ readonly authorizationServers: readonly string[];
3
+ readonly resource: string;
4
+ readonly scopesSupported?: readonly string[];
5
+ }
6
+ /** Creates RFC 9728 protected-resource metadata for an MCP endpoint. */
7
+ export declare function createMcpProtectedResourceMetadata(options: McpProtectedResourceMetadataOptions): Readonly<Record<string, unknown>>;
8
+ /** Creates the RFC 9728 bearer discovery challenge for an MCP resource. */
9
+ export declare function createMcpResourceChallenge(resourceMetadataUrl: string, scopes?: readonly string[]): string;
@@ -0,0 +1 @@
1
+ import{escapeAuthChallengeParameter}from"#public/channels/auth.js";function createMcpProtectedResourceMetadata(e){let t={authorization_servers:e.authorizationServers,resource:e.resource};return e.scopesSupported!==void 0&&(t.scopes_supported=e.scopesSupported),t}function createMcpResourceChallenge(t,n){let r=[`resource_metadata="${escapeAuthChallengeParameter(t)}"`];return n?.length&&r.push(`scope="${escapeAuthChallengeParameter(n.join(` `))}"`),`Bearer ${r.join(`, `)}`}export{createMcpProtectedResourceMetadata,createMcpResourceChallenge};
@@ -0,0 +1,51 @@
1
+ import { McpServer, type McpToolAnnotations, type StandardSchemaWithJSON } from "#compiled/@modelcontextprotocol/server/index.js";
2
+ import type { SessionAuthContext } from "#channel/types.js";
3
+ export declare const MCP_PROTOCOL_VERSION = "2026-07-28";
4
+ export declare const MCP_LEGACY_PROTOCOL_VERSION = "2025-11-25";
5
+ export interface McpToolDefinition<TInputSchema extends StandardSchemaWithJSON = StandardSchemaWithJSON> {
6
+ readonly name: string;
7
+ readonly description?: string;
8
+ readonly annotations?: McpToolAnnotations;
9
+ readonly inputSchema: TInputSchema;
10
+ readonly outputSchema?: StandardSchemaWithJSON;
11
+ }
12
+ export interface McpCallToolResult<TStructured extends Readonly<Record<string, unknown>> = Readonly<Record<string, unknown>>> {
13
+ readonly content: readonly McpContent[];
14
+ readonly isError?: boolean;
15
+ readonly structuredContent?: TStructured;
16
+ }
17
+ export type McpContent = {
18
+ readonly type: "text";
19
+ readonly text: string;
20
+ } | {
21
+ readonly type: "resource_link";
22
+ readonly name: string;
23
+ readonly uri: string;
24
+ };
25
+ export interface McpServerTool {
26
+ readonly name: string;
27
+ register(server: McpServer, auth: SessionAuthContext | null): void;
28
+ }
29
+ type InferSchemaOutput<TSchema> = TSchema extends StandardSchemaWithJSON<unknown, infer TOutput> ? TOutput : never;
30
+ /** Keeps a schema and its inferred handler input coupled while erasing heterogeneous storage. */
31
+ export declare function defineMcpTool<const TInputSchema extends StandardSchemaWithJSON<unknown, unknown>, TStructured extends Readonly<Record<string, unknown>> = Readonly<Record<string, unknown>>>(input: {
32
+ readonly definition: McpToolDefinition<TInputSchema>;
33
+ call(value: InferSchemaOutput<TInputSchema>, context: {
34
+ readonly auth: SessionAuthContext | null;
35
+ readonly signal: AbortSignal;
36
+ }): Promise<McpCallToolResult<TStructured>>;
37
+ }): McpServerTool;
38
+ export interface McpStreamableHttpServerOptions {
39
+ readonly name: string;
40
+ readonly version: string;
41
+ readonly tools: readonly McpServerTool[];
42
+ authenticate(request: Request): Promise<SessionAuthContext | null | Response>;
43
+ }
44
+ /**
45
+ * Creates a dual-era, stateless MCP HTTP request handler.
46
+ *
47
+ * Current clients use MCP 2026-07-28's per-request envelope. Older clients
48
+ * fall back to the SDK's stateless 2025 Streamable HTTP implementation.
49
+ */
50
+ export declare function createMcpStreamableHttpServer(options: McpStreamableHttpServerOptions): (request: Request) => Promise<Response>;
51
+ export {};
@@ -0,0 +1 @@
1
+ import{McpServer,createMcpHandler}from"#compiled/@modelcontextprotocol/server/index.js";const MCP_PROTOCOL_VERSION=`2026-07-28`,MCP_LEGACY_PROTOCOL_VERSION=`2025-11-25`;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:e.definition.inputSchema,...e.definition.outputSchema===void 0?{}:{outputSchema:e.definition.outputSchema}},async(t,r)=>await callTool(e.call,t,r.mcpReq.signal,n))}}}function createMcpStreamableHttpServer(e){let n=new Map(e.tools.map(e=>[e.name,e]));if(n.size!==e.tools.length)throw Error(`MCP tool names must be unique.`);return async r=>{let i=await e.authenticate(r);if(i instanceof Response)return i;let a=await preflightModernRequest(r);return a.response===void 0?await createMcpHandler(()=>createServer(e,n,i),{legacy:`stateless`}).fetch(r,a.parsedBody===void 0?void 0:{parsedBody:a.parsedBody}):a.response}}async function preflightModernRequest(e){if(e.method.toUpperCase()!==`POST`||e.headers.has(`mcp-protocol-version`))return{};let t=await inspectRequestBody(e);if(t.tooLarge)return{response:requestBodyTooLargeResponse()};if(t.invalidJson)return{response:invalidJsonResponse()};let n=t.value;if(n===void 0)return{};if(!claimsCurrentProtocolVersion(n))return{parsedBody:n};let r=await probeEarlierValidationFailure(e,n);return r===void 0?{parsedBody:n,response:headerMismatchResponse(n)}:{parsedBody:n,response:r}}async function inspectRequestBody(e){let t=e.body;if(t===null)return{tooLarge:!1};let n=t.getReader(),r=[],i=0;try{for(;;){let e=await n.read();if(e.done)break;if(i+=e.value.byteLength,i>4194304)return await n.cancel(),{tooLarge:!0};r.push(e.value)}let e=new Uint8Array(i),t=0;for(let n of r)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(r,i){let a=new Headers(r.headers);a.set(`mcp-protocol-version`,MCP_PROTOCOL_VERSION);let o=new Request(r.url,{body:JSON.stringify(i),headers:a,method:r.method}),s=createMcpHandler(()=>new McpServer({name:`eve-mcp-preflight`,version:`0`}),{legacy:`reject`});try{let e=await s.fetch(o,{parsedBody:i});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 s.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(t,n,r){let i=new McpServer({name:t.name,version:t.version},{capabilities:{tools:{listChanged:!1}}});for(let e of n.values())e.register(i,r);return i}async function callTool(e,t,n,r){try{return await e(t,{auth:r,signal:n})}catch(e){return toolError(e instanceof Error?e.message:`Tool call failed.`)}}function toolError(e){return{content:[{type:`text`,text:e}],isError:!0}}export{MCP_LEGACY_PROTOCOL_VERSION,MCP_PROTOCOL_VERSION,createMcpStreamableHttpServer,defineMcpTool};
@@ -1 +1 @@
1
- import{createAttachSessionFn}from"#channel/session.js";import{createLogger,logError}from"#internal/logging.js";import{createChannelDeliveryMetadata}from"#channel/delivery-metadata.js";import{createChannelOperations}from"#channel/channel-operations.js";import{getChannelInstrumentationKind}from"#channel/compiled-channel.js";import{createCrossChannelToFn,toCrossChannelTargets}from"#channel/cross-channel-receive.js";import{DEVELOPMENT_WORKFLOW_SECRET_ENV}from"#internal/workflow/development-world-protocol.js";import{readTrustedDevelopmentClientAddress}from"#internal/nitro/dev-client-address.js";import{attachAgentInfoRouteResponse,attachRouteSessionCreator}from"#internal/nitro/routes/channel-route-context.js";import{traceChannelRequest}from"#internal/nitro/routes/channel-request-instrumentation.js";import{resolveNitroChannelRuntimeBundle}from"#internal/nitro/routes/runtime-stack.js";import{readVercelProjectLink}from"#internal/vercel/project-link.js";import{withVercelOidcProjectResolver}from"#runtime/governance/auth/vercel-oidc-project.js";const log=createLogger(`channel.dispatch`);async function dispatchChannelRequest(e,t,r){return await traceChannelRequest({request:e.req,routeKey:t},async i=>{let o=await resolveNitroChannelRuntimeBundle(r),s=o.channels.find(e=>`${e.method.toUpperCase()} ${e.urlPath}`===t);if(s===void 0)return Response.json({error:`No matching channel for this request.`,ok:!1},{status:404});i?.setAttribute(`eve.channel.name`,s.name);let c=getChannelInstrumentationKind(s.definition)??s.adapter?.kind;c!==void 0&&i?.setAttribute(`eve.channel.kind`,c);let l=buildRouteArgs(e,o,s.name,c??`channel`,r,i),u;try{u=await withDevelopmentVercelOidcContext(r,e.req,async()=>{if(s.handler)return await s.handler(e.req,l.args);let t={waitUntil:l.args.waitUntil,params:l.args.params,requestIp:l.args.requestIp};return await s.fetch(e.req,t)})}catch(r){let i=logError(log,`channel handler threw`,r,{routeKey:t,channel:s.name});return flushBackgroundTasks(e,l.backgroundTasks,t,s.name),Response.json({error:`Channel handler failed.`,errorId:i,ok:!1},{status:500})}return flushBackgroundTasks(e,l.backgroundTasks,t,s.name),u})}async function dispatchChannelWebSocketRequest(e,t,r){let i=await resolveNitroChannelRuntimeBundle(r),o=i.channels.find(e=>`${e.method.toUpperCase()} ${e.urlPath}`===t);if(o===void 0||o.websocket===void 0)return rejectWebSocketUpgrade({error:`No matching websocket channel for this request.`,ok:!1},404);let s=o.websocket,c=getChannelInstrumentationKind(o.definition)??o.adapter?.kind??`channel`,l=buildRouteArgs(e,i,o.name,c,r,void 0);try{let n=await withDevelopmentVercelOidcContext(r,e.req,async()=>await s(e.req,l.args));return flushBackgroundTasks(e,l.backgroundTasks,t,o.name),n}catch(r){let i=logError(log,`channel websocket handler threw`,r,{routeKey:t,channel:o.name});return flushBackgroundTasks(e,l.backgroundTasks,t,o.name),rejectWebSocketUpgrade({error:`Channel websocket handler failed.`,errorId:i,ok:!1},500)}}async function withDevelopmentVercelOidcContext(e,t,n){return e.kind===`development`?await withVercelOidcProjectResolver({request:t,resolveCurrentProject:async()=>{let t=await readVercelProjectLink(e.appRoot);return t===void 0?void 0:{environment:`development`,projectId:t.projectId}}},n):await n()}function buildRouteArgs(t,n,a,c,l,d){let f=readVercelRequestId(t.req.headers),p=extractRequestIp(t,l),m=[],h=t.context.params??{},g={};for(let[e,t]of Object.entries(h))g[e]=decodeURIComponent(t);let waitUntil=e=>{m.push(e)},_=n.channels.find(e=>e.name===a),v=_?.adapter??{kind:`channel`},y=d?.spanContext(),b={channelKind:c,channelName:a,requestId:f,requestTraceContext:y===void 0?void 0:{spanId:y.spanId,traceFlags:y.traceFlags,traceId:y.traceId}},x=createChannelOperations({adapter:v,channelName:a,metadata:b,runtime:n.runtime,turnPolicy:_?.turnPolicy}),S=createAttachSessionFn(n.runtime,{...b,turnPolicy:_?.turnPolicy}),C=createCrossChannelToFn(n.runtime,toCrossChannelTargets(n.channels));return{args:attachRouteSessionCreator(attachAgentInfoRouteResponse({attachSession:S,...x,params:g,requestIp:p,to:C,waitUntil},async()=>{let{handleAgentInfoRequest:e}=await import(`#internal/nitro/routes/info.js`);return await e(l)}),async e=>await n.runtime.createSession({...e,adapter:v,channelName:a,delivery:createChannelDeliveryMetadata(b),requestId:f})),backgroundTasks:m}}function readVercelRequestId(e){let t=e.get(`x-vercel-id`)?.trim();return t===``?void 0:t}function rejectWebSocketUpgrade(e,t){return{upgrade(){throw Response.json(e,{status:t})}}}function flushBackgroundTasks(e,t,r,i){t.length!==0&&e.waitUntil(Promise.allSettled(t).then(e=>{for(let t of e)t.status===`rejected`&&logError(log,`channel background task failed`,t.reason,{routeKey:r,channel:i})}))}function extractRequestIp(e,t){if(t.kind===`development`){let t=readTrustedDevelopmentClientAddress(e.req.headers,process.env[DEVELOPMENT_WORKFLOW_SECRET_ENV]);if(t!==void 0)return t}return extractSocketIp(e)}function extractSocketIp(e){let t=e.req.ip;return typeof t==`string`&&t.length>0?t:null}export{dispatchChannelRequest,dispatchChannelWebSocketRequest};
1
+ import{createAttachSessionFn}from"#channel/session.js";import{createLogger,logError}from"#internal/logging.js";import{createChannelDeliveryMetadata}from"#channel/delivery-metadata.js";import{createChannelOperations}from"#channel/channel-operations.js";import{getChannelInstrumentationKind}from"#channel/compiled-channel.js";import{createCrossChannelToFn,toCrossChannelTargets}from"#channel/cross-channel-receive.js";import{DEVELOPMENT_WORKFLOW_SECRET_ENV}from"#internal/workflow/development-world-protocol.js";import{readTrustedDevelopmentClientAddress}from"#internal/nitro/dev-client-address.js";import{attachAgentInfoRouteResponse,attachRemoteAgentStreamHeadersResolver,attachRouteChannelName,attachRouteSessionCreator}from"#internal/nitro/routes/channel-route-context.js";import{traceChannelRequest}from"#internal/nitro/routes/channel-request-instrumentation.js";import{resolveNitroChannelRuntimeBundle}from"#internal/nitro/routes/runtime-stack.js";import{readVercelProjectLink}from"#internal/vercel/project-link.js";import{withVercelOidcProjectResolver}from"#runtime/governance/auth/vercel-oidc-project.js";const log=createLogger(`channel.dispatch`);async function dispatchChannelRequest(e,t,r){return await traceChannelRequest({request:e.req,routeKey:t},async i=>{let o=await resolveNitroChannelRuntimeBundle(r),s=o.channels.find(e=>`${e.method.toUpperCase()} ${e.urlPath}`===t);if(s===void 0)return Response.json({error:`No matching channel for this request.`,ok:!1},{status:404});i?.setAttribute(`eve.channel.name`,s.name);let c=getChannelInstrumentationKind(s.definition)??s.adapter?.kind;c!==void 0&&i?.setAttribute(`eve.channel.kind`,c);let l=buildRouteArgs(e,o,s.name,c??`channel`,r,i),u;try{u=await withDevelopmentVercelOidcContext(r,e.req,async()=>{if(s.handler)return await s.handler(e.req,l.args);let t={waitUntil:l.args.waitUntil,params:l.args.params,requestIp:l.args.requestIp};return await s.fetch(e.req,t)})}catch(r){let i=logError(log,`channel handler threw`,r,{routeKey:t,channel:s.name});return flushBackgroundTasks(e,l.backgroundTasks,t,s.name),Response.json({error:`Channel handler failed.`,errorId:i,ok:!1},{status:500})}return flushBackgroundTasks(e,l.backgroundTasks,t,s.name),u})}async function dispatchChannelWebSocketRequest(e,t,r){let i=await resolveNitroChannelRuntimeBundle(r),o=i.channels.find(e=>`${e.method.toUpperCase()} ${e.urlPath}`===t);if(o===void 0||o.websocket===void 0)return rejectWebSocketUpgrade({error:`No matching websocket channel for this request.`,ok:!1},404);let s=o.websocket,c=getChannelInstrumentationKind(o.definition)??o.adapter?.kind??`channel`,l=buildRouteArgs(e,i,o.name,c,r,void 0);try{let n=await withDevelopmentVercelOidcContext(r,e.req,async()=>await s(e.req,l.args));return flushBackgroundTasks(e,l.backgroundTasks,t,o.name),n}catch(r){let i=logError(log,`channel websocket handler threw`,r,{routeKey:t,channel:o.name});return flushBackgroundTasks(e,l.backgroundTasks,t,o.name),rejectWebSocketUpgrade({error:`Channel websocket handler failed.`,errorId:i,ok:!1},500)}}async function withDevelopmentVercelOidcContext(e,t,n){return e.kind===`development`?await withVercelOidcProjectResolver({request:t,resolveCurrentProject:async()=>{let t=await readVercelProjectLink(e.appRoot);return t===void 0?void 0:{environment:`development`,projectId:t.projectId}}},n):await n()}function buildRouteArgs(t,n,a,c,l,d){let f=readVercelRequestId(t.req.headers),p=extractRequestIp(t,l),m=[],h=t.context.params??{},g={};for(let[e,t]of Object.entries(h))g[e]=decodeURIComponent(t);let waitUntil=e=>{m.push(e)},_=n.channels.find(e=>e.name===a),v=_?.adapter??{kind:`channel`},y=d?.spanContext(),b={channelKind:c,channelName:a,requestId:f,requestTraceContext:y===void 0?void 0:{spanId:y.spanId,traceFlags:y.traceFlags,traceId:y.traceId}},x=createChannelOperations({adapter:v,channelName:a,metadata:b,runtime:n.runtime,turnPolicy:_?.turnPolicy}),S=createAttachSessionFn(n.runtime,{...b,turnPolicy:_?.turnPolicy}),C=createCrossChannelToFn(n.runtime,toCrossChannelTargets(n.channels)),w=attachRouteSessionCreator(attachRouteChannelName(attachAgentInfoRouteResponse({attachSession:S,...x,params:g,requestIp:p,to:C,waitUntil},async()=>{let{handleAgentInfoRequest:e}=await import(`#internal/nitro/routes/info.js`);return await e(l)}),a),async e=>await n.runtime.createSession({...e,adapter:v,channelName:a,continuationToken:e.continuationToken===void 0?void 0:`${a}:${e.continuationToken}`,delivery:createChannelDeliveryMetadata(b),requestId:f}));return n.resolveRemoteAgentStreamHeaders!==void 0&&attachRemoteAgentStreamHeadersResolver(w,n.resolveRemoteAgentStreamHeaders),{args:w,backgroundTasks:m}}function readVercelRequestId(e){let t=e.get(`x-vercel-id`)?.trim();return t===``?void 0:t}function rejectWebSocketUpgrade(e,t){return{upgrade(){throw Response.json(e,{status:t})}}}function flushBackgroundTasks(e,t,r,i){t.length!==0&&e.waitUntil(Promise.allSettled(t).then(e=>{for(let t of e)t.status===`rejected`&&logError(log,`channel background task failed`,t.reason,{routeKey:r,channel:i})}))}function extractRequestIp(e,t){if(t.kind===`development`){let t=readTrustedDevelopmentClientAddress(e.req.headers,process.env[DEVELOPMENT_WORKFLOW_SECRET_ENV]);if(t!==void 0)return t}return extractSocketIp(e)}function extractSocketIp(e){let t=e.req.ip;return typeof t==`string`&&t.length>0?t:null}export{dispatchChannelRequest,dispatchChannelWebSocketRequest};
@@ -1,9 +1,23 @@
1
1
  import type { RouteHandlerArgs } from "#channel/routes.js";
2
2
  import type { RunHandle, RunInput } from "#channel/types.js";
3
3
  type AgentInfoRouteResponse = () => Promise<Response>;
4
+ /**
5
+ * Creates one session from a route handler. `continuationToken` is
6
+ * channel-local (the dispatcher prepends the channel name), so ownership
7
+ * established here is visible to `resolveSession` on the same channel.
8
+ */
4
9
  export type RouteSessionCreator = (input: Omit<RunInput, "adapter" | "channelName" | "requestId">) => Promise<RunHandle>;
10
+ export type RemoteAgentStreamHeadersResolver = (input: {
11
+ readonly name: string;
12
+ readonly resolverId?: string;
13
+ readonly url: string;
14
+ }) => Promise<Record<string, string>>;
15
+ export declare function attachRouteChannelName<TArgs extends RouteHandlerArgs>(args: TArgs, channelName: string): TArgs;
16
+ export declare function readRouteChannelName(args: RouteHandlerArgs): string | undefined;
5
17
  export declare function attachAgentInfoRouteResponse<TArgs extends RouteHandlerArgs>(args: TArgs, respond: AgentInfoRouteResponse): TArgs;
6
18
  export declare function readAgentInfoRouteResponse(args: RouteHandlerArgs): AgentInfoRouteResponse | undefined;
7
19
  export declare function attachRouteSessionCreator<TArgs extends RouteHandlerArgs>(args: TArgs, createSession: RouteSessionCreator): TArgs;
8
20
  export declare function readRouteSessionCreator(args: RouteHandlerArgs): RouteSessionCreator | undefined;
21
+ export declare function attachRemoteAgentStreamHeadersResolver<TArgs extends RouteHandlerArgs>(args: TArgs, resolve: RemoteAgentStreamHeadersResolver): TArgs;
22
+ export declare function readRemoteAgentStreamHeadersResolver(args: RouteHandlerArgs): RemoteAgentStreamHeadersResolver | undefined;
9
23
  export {};
@@ -1 +1 @@
1
- const agentInfoRouteResponseKey=`__eveAgentInfoRouteResponse`,routeSessionCreatorKey=`__eveRouteSessionCreator`;function attachAgentInfoRouteResponse(t,n){let r=t;return r[agentInfoRouteResponseKey]=n,t}function readAgentInfoRouteResponse(t){return t[agentInfoRouteResponseKey]}function attachRouteSessionCreator(e,n){let r=e;return r[routeSessionCreatorKey]=n,e}function readRouteSessionCreator(e){return e[routeSessionCreatorKey]}export{attachAgentInfoRouteResponse,attachRouteSessionCreator,readAgentInfoRouteResponse,readRouteSessionCreator};
1
+ const agentInfoRouteResponseKey=`__eveAgentInfoRouteResponse`,routeChannelNameKey=`__eveRouteChannelName`,remoteAgentStreamHeadersResolverKey=`__eveRemoteAgentStreamHeadersResolver`,routeSessionCreatorKey=`__eveRouteSessionCreator`;function attachRouteChannelName(e,n){let r=e;return r[routeChannelNameKey]=n,e}function readRouteChannelName(e){return e[routeChannelNameKey]}function attachAgentInfoRouteResponse(t,n){let r=t;return r[agentInfoRouteResponseKey]=n,t}function readAgentInfoRouteResponse(t){return t[agentInfoRouteResponseKey]}function attachRouteSessionCreator(e,t){let n=e;return n[routeSessionCreatorKey]=t,e}function readRouteSessionCreator(e){return e[routeSessionCreatorKey]}function attachRemoteAgentStreamHeadersResolver(e,t){let r=e;return r[remoteAgentStreamHeadersResolverKey]=t,e}function readRemoteAgentStreamHeadersResolver(e){return e[remoteAgentStreamHeadersResolverKey]}export{attachAgentInfoRouteResponse,attachRemoteAgentStreamHeadersResolver,attachRouteChannelName,attachRouteSessionCreator,readAgentInfoRouteResponse,readRemoteAgentStreamHeadersResolver,readRouteChannelName,readRouteSessionCreator};