eve 0.50.0 → 0.51.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (450) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/src/acp/adapter.js +1 -1
  3. package/dist/src/channel/types.d.ts +12 -19
  4. package/dist/src/chunks/{use-eve-agent-DUMU6dap.js → use-eve-agent-B4xN7-fK.js} +4 -4
  5. package/dist/src/chunks/{use-eve-agent-B5I-k6Ek.js → use-eve-agent-C3vUG5g2.js} +4 -4
  6. package/dist/src/cli/acp/command.d.ts +1 -1
  7. package/dist/src/cli/acp/command.js +2 -2
  8. package/dist/src/cli/agent-command.d.ts +5 -0
  9. package/dist/src/cli/agent-command.js +1 -0
  10. package/dist/src/cli/application-command.d.ts +2 -0
  11. package/dist/src/cli/commands/build.d.ts +1 -1
  12. package/dist/src/cli/commands/build.js +1 -1
  13. package/dist/src/cli/commands/deploy.d.ts +2 -0
  14. package/dist/src/cli/commands/deploy.js +1 -1
  15. package/dist/src/cli/commands/init-agent-workspace.d.ts +14 -0
  16. package/dist/src/cli/commands/init-agent-workspace.js +1 -0
  17. package/dist/src/cli/commands/init-repl.js +1 -1
  18. package/dist/src/cli/commands/init.d.ts +2 -13
  19. package/dist/src/cli/commands/init.js +1 -1
  20. package/dist/src/cli/commands/integration-connect.js +1 -1
  21. package/dist/src/cli/commands/link.d.ts +2 -0
  22. package/dist/src/cli/commands/link.js +1 -1
  23. package/dist/src/cli/commands/preconditions.d.ts +15 -0
  24. package/dist/src/cli/commands/preconditions.js +1 -1
  25. package/dist/src/cli/commands/register-integration-commands.d.ts +1 -1
  26. package/dist/src/cli/commands/register-integration-commands.js +1 -1
  27. package/dist/src/cli/commands/register-registry-commands.js +2 -2
  28. package/dist/src/cli/commands/registry.js +1 -1
  29. package/dist/src/cli/dev/environment.d.ts +1 -1
  30. package/dist/src/cli/dev/environment.js +1 -1
  31. package/dist/src/cli/dev/local-server-process.js +1 -1
  32. package/dist/src/cli/dev/tui/runner.js +1 -1
  33. package/dist/src/cli/invoke/command.d.ts +1 -1
  34. package/dist/src/cli/invoke/command.js +1 -1
  35. package/dist/src/cli/option-parsers.d.ts +1 -0
  36. package/dist/src/cli/option-parsers.js +1 -1
  37. package/dist/src/cli/run.js +3 -3
  38. package/dist/src/client/agent-info-schema.d.ts +0 -1
  39. package/dist/src/client/agent-info-schema.js +1 -1
  40. package/dist/src/client/message-action-parts.js +1 -1
  41. package/dist/src/compiled/.vendor-stamp.json +1 -1
  42. package/dist/src/compiler/extension-compatibility.d.ts +18 -18
  43. package/dist/src/compiler/extension-compatibility.js +1 -1
  44. package/dist/src/compiler/manifest.js +1 -1
  45. package/dist/src/compiler/normalize-agent-config.js +1 -1
  46. package/dist/src/compiler/normalize-manifest-helpers.js +1 -1
  47. package/dist/src/compiler/normalize-manifest.js +1 -1
  48. package/dist/src/context/build-dynamic-tools.js +1 -1
  49. package/dist/src/context/dynamic-subagent-lifecycle.js +1 -1
  50. package/dist/src/context/dynamic-tool-lifecycle.js +1 -1
  51. package/dist/src/context/dynamic-tool-metadata.d.ts +1 -0
  52. package/dist/src/context/keys.d.ts +0 -3
  53. package/dist/src/context/keys.js +1 -1
  54. package/dist/src/discover/project.js +1 -1
  55. package/dist/src/evals/cli/eval.js +1 -1
  56. package/dist/src/evals/mock-model.js +1 -1
  57. package/dist/src/eve-channel/index.js +1 -1
  58. package/dist/src/execution/activity-work-id.js +1 -1
  59. package/dist/src/execution/cancel-descendant-turns-step.js +1 -1
  60. package/dist/src/execution/channel-context.js +1 -1
  61. package/dist/src/execution/coordination-dispatch-shared.d.ts +103 -0
  62. package/dist/src/execution/coordination-dispatch-shared.js +1 -0
  63. package/dist/src/execution/coordination-dispatch-step.d.ts +7 -0
  64. package/dist/src/execution/coordination-dispatch-step.js +1 -0
  65. package/dist/src/execution/create-session-step.d.ts +1 -2
  66. package/dist/src/execution/create-session-step.js +1 -1
  67. package/dist/src/execution/deliver-payloads.js +1 -1
  68. package/dist/src/execution/dispatch-action-failures.d.ts +5 -5
  69. package/dist/src/execution/dispatch-action-failures.js +1 -1
  70. package/dist/src/execution/dispatch-start-operation.d.ts +1 -1
  71. package/dist/src/execution/dispatch-start-operation.js +1 -1
  72. package/dist/src/execution/durable-session-store.d.ts +1 -1
  73. package/dist/src/execution/eve-workflow-attributes.d.ts +1 -1
  74. package/dist/src/execution/inline-turn.js +1 -1
  75. package/dist/src/execution/next-driver-action.d.ts +7 -10
  76. package/dist/src/execution/node-step.d.ts +1 -2
  77. package/dist/src/execution/node-step.js +1 -1
  78. package/dist/src/execution/pending-turn-state.d.ts +1 -2
  79. package/dist/src/execution/pending-turn-state.js +1 -1
  80. package/dist/src/execution/proxied-deliver-step.js +1 -1
  81. package/dist/src/execution/route-child-delivery.js +1 -1
  82. package/dist/src/execution/runtime-context.js +1 -1
  83. package/dist/src/execution/session-command-inbox.d.ts +2 -3
  84. package/dist/src/execution/session.d.ts +1 -1
  85. package/dist/src/execution/session.js +2 -2
  86. package/dist/src/execution/settle-cancelled-turn-step.d.ts +1 -1
  87. package/dist/src/execution/settle-cancelled-turn-step.js +1 -1
  88. package/dist/src/execution/stable-workflow-names.d.ts +1 -1
  89. package/dist/src/execution/stable-workflow-names.js +1 -1
  90. package/dist/src/execution/task-event-callback.js +1 -1
  91. package/dist/src/execution/tasks/child/steps.d.ts +18 -18
  92. package/dist/src/execution/tasks/child/steps.js +1 -1
  93. package/dist/src/execution/tasks/child/update-step.d.ts +6 -0
  94. package/dist/src/execution/tasks/child/update-step.js +1 -0
  95. package/dist/src/execution/tasks/child/update.d.ts +7 -10
  96. package/dist/src/execution/tasks/child/update.js +1 -1
  97. package/dist/src/execution/tasks/child/workflow.d.ts +21 -29
  98. package/dist/src/execution/tasks/child/workflow.js +1 -1
  99. package/dist/src/execution/tasks/parent/control-shared.d.ts +6 -17
  100. package/dist/src/execution/tasks/parent/control-shared.js +1 -1
  101. package/dist/src/execution/tasks/parent/delegate.d.ts +15 -50
  102. package/dist/src/execution/tasks/parent/delegate.js +1 -1
  103. package/dist/src/execution/tasks/parent/dispatch.d.ts +19 -34
  104. package/dist/src/execution/tasks/parent/dispatch.js +1 -1
  105. package/dist/src/execution/tasks/parent/hitl-proxy-steps.d.ts +5 -15
  106. package/dist/src/execution/tasks/parent/hitl-proxy-steps.js +1 -1
  107. package/dist/src/execution/tasks/parent/run-parent.d.ts +2 -2
  108. package/dist/src/execution/tasks/parent/task-cancel.d.ts +11 -0
  109. package/dist/src/execution/tasks/parent/task-cancel.js +1 -0
  110. package/dist/src/execution/tasks/parent/tool-execution.d.ts +2 -3
  111. package/dist/src/execution/tasks/parent/tool-execution.js +1 -1
  112. package/dist/src/execution/terminate-child-sessions-step.js +1 -1
  113. package/dist/src/execution/tools/subagent/accept-event-step.d.ts +7 -0
  114. package/dist/src/execution/tools/subagent/accept-event-step.js +1 -0
  115. package/dist/src/execution/tools/subagent/emit-called-step.d.ts +9 -0
  116. package/dist/src/execution/tools/subagent/emit-called-step.js +1 -0
  117. package/dist/src/execution/tools/subagent/invoke-agent.d.ts +51 -0
  118. package/dist/src/execution/tools/subagent/invoke-agent.js +1 -0
  119. package/dist/src/execution/tools/subagent/invoke-preparation.d.ts +37 -0
  120. package/dist/src/execution/tools/subagent/invoke-preparation.js +1 -0
  121. package/dist/src/execution/tools/subagent/invoke-step.d.ts +55 -0
  122. package/dist/src/execution/tools/subagent/invoke-step.js +1 -0
  123. package/dist/src/execution/tools/subagent/receipt-identity.d.ts +11 -0
  124. package/dist/src/execution/tools/subagent/receipt-identity.js +1 -0
  125. package/dist/src/execution/{dispatch-runtime-actions-start.d.ts → tools/subagent/start.d.ts} +17 -5
  126. package/dist/src/execution/tools/subagent/start.js +1 -0
  127. package/dist/src/execution/tools/subagent/task-agent-requests.d.ts +24 -0
  128. package/dist/src/execution/tools/subagent/task-agent-requests.js +1 -0
  129. package/dist/src/execution/tools/subagent/task-cancel.d.ts +10 -0
  130. package/dist/src/execution/tools/subagent/task-cancel.js +1 -0
  131. package/dist/src/execution/tools/tasks.d.ts +10 -0
  132. package/dist/src/execution/tools/tasks.js +1 -0
  133. package/dist/src/execution/{tool-run → tools/workflow}/answer.d.ts +1 -1
  134. package/dist/src/execution/tools/workflow/answer.js +1 -0
  135. package/dist/src/execution/tools/workflow/ask.d.ts +22 -0
  136. package/dist/src/execution/tools/workflow/ask.js +1 -0
  137. package/dist/src/execution/tools/workflow/background.d.ts +18 -0
  138. package/dist/src/execution/tools/workflow/background.js +1 -0
  139. package/dist/src/execution/tools/workflow/body.d.ts +25 -0
  140. package/dist/src/execution/tools/workflow/body.js +1 -0
  141. package/dist/src/execution/tools/workflow/cancel.d.ts +11 -0
  142. package/dist/src/execution/tools/workflow/cancel.js +1 -0
  143. package/dist/src/execution/tools/workflow/emit-workflow-tool-run-report-step.d.ts +7 -0
  144. package/dist/src/execution/tools/workflow/emit-workflow-tool-run-report-step.js +1 -0
  145. package/dist/src/execution/tools/workflow/messages.d.ts +88 -0
  146. package/dist/src/execution/tools/workflow/messages.js +1 -0
  147. package/dist/src/execution/tools/workflow/owner-inbox.d.ts +13 -0
  148. package/dist/src/execution/tools/workflow/owner-inbox.js +1 -0
  149. package/dist/src/execution/tools/workflow/owner.d.ts +13 -0
  150. package/dist/src/execution/tools/workflow/owner.js +1 -0
  151. package/dist/src/execution/tools/workflow/run-control.d.ts +18 -0
  152. package/dist/src/execution/tools/workflow/run-control.js +1 -0
  153. package/dist/src/execution/tools/workflow/start.d.ts +33 -0
  154. package/dist/src/execution/tools/workflow/start.js +1 -0
  155. package/dist/src/execution/tools/workflow/types.d.ts +26 -0
  156. package/dist/src/execution/tools/workflow/types.js +1 -0
  157. package/dist/src/execution/tools/workflow/workflow.d.ts +3 -0
  158. package/dist/src/execution/tools/workflow/workflow.js +1 -0
  159. package/dist/src/execution/turn-workflow-tool-run.d.ts +16 -0
  160. package/dist/src/execution/turn-workflow-tool-run.js +1 -0
  161. package/dist/src/execution/turn-workflow.js +1 -1
  162. package/dist/src/execution/wire/session-inbox-contract.d.ts +2 -2
  163. package/dist/src/execution/wire/session-inbox-contract.js +1 -1
  164. package/dist/src/execution/wire/session-inbox-encoder.d.ts +6 -2
  165. package/dist/src/execution/wire/session-inbox-encoder.js +1 -1
  166. package/dist/src/execution/wire/session-inbox-wire.d.ts +3 -3
  167. package/dist/src/execution/wire/session-inbox-wire.js +1 -1
  168. package/dist/src/execution/wire/session-inbox-wire.v1.js +1 -1
  169. package/dist/src/execution/wire/session-inbox-wire.v4.d.ts +267 -0
  170. package/dist/src/execution/wire/session-inbox-wire.v4.js +1 -0
  171. package/dist/src/execution/wire/session-inbox-wire.v4.migration.d.ts +3 -0
  172. package/dist/src/execution/wire/session-inbox-wire.v4.migration.js +1 -0
  173. package/dist/src/execution/workflow-entry-finalization.d.ts +6 -0
  174. package/dist/src/execution/workflow-entry-finalization.js +1 -1
  175. package/dist/src/execution/workflow-entry.d.ts +2 -1
  176. package/dist/src/execution/workflow-entry.js +1 -1
  177. package/dist/src/execution/workflow-runtime.d.ts +1 -1
  178. package/dist/src/execution/workflow-runtime.js +1 -1
  179. package/dist/src/execution/workflow-steps.js +1 -1
  180. package/dist/src/framework/sources/registry.js +1 -1
  181. package/dist/src/harness/advertised-tools.d.ts +1 -7
  182. package/dist/src/harness/advertised-tools.js +1 -1
  183. package/dist/src/harness/background-tools.d.ts +8 -2
  184. package/dist/src/harness/{runtime-actions.d.ts → coordination.d.ts} +40 -27
  185. package/dist/src/harness/coordination.js +1 -0
  186. package/dist/src/harness/emission.d.ts +9 -2
  187. package/dist/src/harness/emission.js +1 -1
  188. package/dist/src/harness/execute-tool.d.ts +52 -0
  189. package/dist/src/harness/hitl/session-limit-input-requests.js +1 -1
  190. package/dist/src/harness/input-requests.js +1 -1
  191. package/dist/src/harness/proxy-input-requests.d.ts +6 -2
  192. package/dist/src/harness/stale-input-responses.js +1 -1
  193. package/dist/src/harness/step-hooks.d.ts +1 -2
  194. package/dist/src/harness/step-hooks.js +1 -1
  195. package/dist/src/harness/tool-call-action.js +1 -1
  196. package/dist/src/harness/tool-call-input-errors.js +1 -1
  197. package/dist/src/harness/tool-loop.js +2 -2
  198. package/dist/src/harness/tools.js +1 -1
  199. package/dist/src/harness/turn-tag-state.d.ts +3 -1
  200. package/dist/src/harness/types.d.ts +4 -7
  201. package/dist/src/harness/workflow-interrupt-state.js +1 -1
  202. package/dist/src/harness/workflow-lifecycle.d.ts +10 -0
  203. package/dist/src/harness/workflow-lifecycle.js +1 -1
  204. package/dist/src/harness/workflow-sandbox.d.ts +1 -1
  205. package/dist/src/harness/workflow-sandbox.js +2 -2
  206. package/dist/src/harness/workflow-subagent-limit.d.ts +7 -7
  207. package/dist/src/harness/workflow-subagent-limit.js +1 -1
  208. package/dist/src/harness/workflow-task-state.d.ts +9 -0
  209. package/dist/src/harness/workflow-task-state.js +1 -0
  210. package/dist/src/harness/workflow-tool-runs.d.ts +27 -0
  211. package/dist/src/harness/workflow-tool-runs.js +1 -0
  212. package/dist/src/instrumentation/native-events.js +1 -1
  213. package/dist/src/instrumentation/parent-lineage.js +1 -1
  214. package/dist/src/internal/agent-name.d.ts +4 -0
  215. package/dist/src/internal/agent-name.js +1 -0
  216. package/dist/src/internal/agent-workspace.d.ts +15 -0
  217. package/dist/src/internal/agent-workspace.js +1 -0
  218. package/dist/src/internal/application/package.js +1 -1
  219. package/dist/src/internal/authored-definition/core.js +1 -1
  220. package/dist/src/internal/nitro/host/build-application.js +1 -1
  221. package/dist/src/internal/nitro/host/start-development-server.js +1 -1
  222. package/dist/src/internal/nitro/host/start-production-server.js +3 -3
  223. package/dist/src/internal/nitro/routes/runtime-stack.js +1 -1
  224. package/dist/src/internal/project-context.d.ts +26 -0
  225. package/dist/src/internal/project-context.js +1 -0
  226. package/dist/src/internal/vercel/assemble-eve-services.d.ts +17 -0
  227. package/dist/src/internal/vercel/assemble-eve-services.js +1 -0
  228. package/dist/src/internal/vercel/build-agent-workspace.d.ts +3 -0
  229. package/dist/src/internal/vercel/build-agent-workspace.js +1 -0
  230. package/dist/src/internal/vercel/build-command.d.ts +4 -0
  231. package/dist/src/internal/vercel/build-command.js +1 -0
  232. package/dist/src/internal/vercel/eve-service-contribution.d.ts +27 -0
  233. package/dist/src/internal/vercel/eve-service-contribution.js +1 -0
  234. package/dist/src/internal/vercel/vercel-service-config-operations.d.ts +18 -0
  235. package/dist/src/internal/vercel/vercel-service-config-operations.js +1 -0
  236. package/dist/src/internal/vercel/vercel-service-name.d.ts +6 -0
  237. package/dist/src/internal/vercel/vercel-service-name.js +1 -0
  238. package/dist/src/internal/vercel/vercel-services-config.d.ts +53 -0
  239. package/dist/src/internal/vercel/vercel-services-config.js +1 -0
  240. package/dist/src/internal/workflow-bundle/builder.js +1 -1
  241. package/dist/src/internal/workflow-bundle/workflow-builders.js +1 -1
  242. package/dist/src/protocol/message.d.ts +2 -0
  243. package/dist/src/protocol/message.js +1 -1
  244. package/dist/src/public/channels/slack/action-status.js +1 -1
  245. package/dist/src/public/memory/file/backends/vercel-blob.js +1 -1
  246. package/dist/src/public/next/index.js +1 -1
  247. package/dist/src/public/next/vercel-output-config.js +1 -1
  248. package/dist/src/public/workflow/index.d.ts +3 -1
  249. package/dist/src/public/workflow/index.js +1 -1
  250. package/dist/src/runtime/actions/results.d.ts +3 -3
  251. package/dist/src/runtime/actions/results.js +1 -1
  252. package/dist/src/runtime/agent/bootstrap-model-utils.js +1 -1
  253. package/dist/src/runtime/agent/bootstrap.d.ts +1 -0
  254. package/dist/src/runtime/agent/bootstrap.js +1 -1
  255. package/dist/src/runtime/agent/mock-model-adapter.js +1 -1
  256. package/dist/src/runtime/channels/registry.js +1 -1
  257. package/dist/src/runtime/prompt/compose.d.ts +0 -1
  258. package/dist/src/runtime/prompt/compose.js +1 -1
  259. package/dist/src/runtime/resolve-agent-graph.js +1 -1
  260. package/dist/src/runtime/resolve-agent.js +1 -1
  261. package/dist/src/runtime/sessions/turn.d.ts +16 -1
  262. package/dist/src/runtime/subagents/registry.js +1 -1
  263. package/dist/src/runtime/subagents/workflow-reference.d.ts +5 -0
  264. package/dist/src/runtime/subagents/workflow-reference.js +1 -0
  265. package/dist/src/runtime/subagents/workflow.d.ts +8 -0
  266. package/dist/src/runtime/subagents/workflow.js +1 -0
  267. package/dist/src/runtime/tools/registry.js +1 -1
  268. package/dist/src/setup/integrations/discord/setup.js +1 -1
  269. package/dist/src/setup/integrations/file-memory/vercel.js +1 -1
  270. package/dist/src/setup/integrations/linear/setup.js +1 -1
  271. package/dist/src/setup/integrations/linq/setup.js +3 -3
  272. package/dist/src/setup/integrations/shopify/setup.js +1 -1
  273. package/dist/src/setup/scaffold/create/project.js +1 -1
  274. package/dist/src/setup/scaffold/update/channels.d.ts +4 -12
  275. package/dist/src/setup/scaffold/update/channels.js +1 -1
  276. package/dist/src/shared/action-types.d.ts +74 -14
  277. package/dist/src/shared/action-types.js +1 -1
  278. package/dist/src/shared/json.js +1 -1
  279. package/dist/src/shared/workflow-sandbox.d.ts +1 -1
  280. package/dist/src/{execution/subagent-adapter-state.d.ts → subagents/adapter-state.d.ts} +2 -0
  281. package/dist/src/{execution/subagent-adapter-state.js → subagents/adapter-state.js} +1 -1
  282. package/dist/src/subagents/adapter.js +1 -0
  283. package/dist/src/{harness → subagents}/agent-handle-errors.d.ts +6 -0
  284. package/dist/src/subagents/agent-handle-errors.js +1 -0
  285. package/dist/src/subagents/callback-route.js +1 -0
  286. package/dist/src/subagents/callback-step.js +1 -0
  287. package/dist/src/{execution/agent-continuation-bundle.d.ts → subagents/continuation-bundle.d.ts} +1 -1
  288. package/dist/src/subagents/continuation-bundle.js +1 -0
  289. package/dist/src/{execution/subagent-event-proxy-step.d.ts → subagents/event-proxy-step.d.ts} +2 -8
  290. package/dist/src/subagents/event-proxy-step.js +1 -0
  291. package/dist/src/subagents/handle-dispatch.d.ts +54 -0
  292. package/dist/src/subagents/handle-dispatch.js +1 -0
  293. package/dist/src/{harness → subagents}/handles/prompt.d.ts +4 -4
  294. package/dist/src/{harness → subagents}/handles/prompt.js +1 -1
  295. package/dist/src/{harness → subagents}/handles/query.d.ts +8 -2
  296. package/dist/src/subagents/handles/query.js +1 -0
  297. package/dist/src/subagents/handles/rebase.d.ts +4 -0
  298. package/dist/src/subagents/handles/rebase.js +1 -0
  299. package/dist/src/{harness → subagents}/handles/store.d.ts +90 -15
  300. package/dist/src/subagents/handles/store.js +1 -0
  301. package/dist/src/subagents/handles/transitions.d.ts +103 -0
  302. package/dist/src/subagents/handles/transitions.js +1 -0
  303. package/dist/src/{execution/delegated-parent-notification.d.ts → subagents/parent-notification.d.ts} +1 -7
  304. package/dist/src/subagents/parent-notification.js +1 -0
  305. package/dist/src/subagents/parent-result.js +1 -0
  306. package/dist/src/{execution/remote-agent-dispatch.d.ts → subagents/remote-dispatch.d.ts} +3 -2
  307. package/dist/src/subagents/remote-dispatch.js +1 -0
  308. package/dist/src/{execution/subagent-start-local.d.ts → subagents/start-local.d.ts} +5 -6
  309. package/dist/src/subagents/start-local.js +1 -0
  310. package/dist/src/{execution/subagent-start-remote.d.ts → subagents/start-remote.d.ts} +5 -5
  311. package/dist/src/subagents/start-remote.js +1 -0
  312. package/dist/src/{execution/subagent-tool.d.ts → subagents/tool.d.ts} +5 -3
  313. package/dist/src/subagents/tool.js +1 -0
  314. package/dist/src/svelte/index.js +1 -1
  315. package/dist/src/svelte/use-eve-agent.js +1 -1
  316. package/dist/src/tasks/json.js +1 -1
  317. package/dist/src/tasks/session-index.d.ts +2 -3
  318. package/dist/src/tasks/session-index.js +1 -1
  319. package/dist/src/tasks/task-id.d.ts +3 -4
  320. package/dist/src/tasks/task-id.js +1 -1
  321. package/dist/src/tasks/transitions.d.ts +3 -47
  322. package/dist/src/tasks/transitions.js +1 -1
  323. package/dist/src/tasks/types.d.ts +69 -247
  324. package/dist/src/tasks/types.js +1 -1
  325. package/dist/src/tools/dynamic.d.ts +3 -1
  326. package/dist/src/tools/framework/agent.d.ts +18 -2
  327. package/dist/src/tools/framework/agent.js +1 -1
  328. package/dist/src/tools/framework/task-cancel.d.ts +2 -6
  329. package/dist/src/tools/framework/task-contract.d.ts +44 -65
  330. package/dist/src/tools/framework/task-contract.js +1 -1
  331. package/dist/src/tools/framework/task-update.d.ts +1 -0
  332. package/dist/src/tools/framework/task-update.js +1 -1
  333. package/dist/src/vue/index.js +1 -1
  334. package/dist/src/vue/use-eve-agent.js +1 -1
  335. package/docs/concepts/built-in-tools.md +9 -90
  336. package/docs/concepts/context-control.md +2 -2
  337. package/docs/concepts/execution-model-and-durability.mdx +1 -1
  338. package/docs/concepts/sessions-runs-and-streaming.md +3 -3
  339. package/docs/guides/deployment/vercel.mdx +20 -2
  340. package/docs/guides/dynamic-capabilities.md +2 -2
  341. package/docs/guides/frontend/overview.mdx +1 -1
  342. package/docs/guides/instrumentation-providers.md +242 -0
  343. package/docs/guides/instrumentation.md +2 -0
  344. package/docs/guides/meta.json +1 -0
  345. package/docs/guides/remote-agents.md +8 -9
  346. package/docs/reference/cli.md +5 -2
  347. package/docs/sandbox.mdx +2 -0
  348. package/docs/subagents/index.mdx +9 -8
  349. package/docs/tools/overview.mdx +11 -10
  350. package/docs/tools/workflows.mdx +52 -18
  351. package/package.json +1 -1
  352. package/dist/src/execution/agent-continuation-bundle.js +0 -1
  353. package/dist/src/execution/agent-handle-dispatch.d.ts +0 -79
  354. package/dist/src/execution/agent-handle-dispatch.js +0 -1
  355. package/dist/src/execution/delegated-parent-notification.js +0 -1
  356. package/dist/src/execution/delegated-parent-result.js +0 -1
  357. package/dist/src/execution/delegation-tool.d.ts +0 -10
  358. package/dist/src/execution/delegation-tool.js +0 -1
  359. package/dist/src/execution/dispatch-runtime-actions-shared.d.ts +0 -165
  360. package/dist/src/execution/dispatch-runtime-actions-shared.js +0 -1
  361. package/dist/src/execution/dispatch-runtime-actions-start.js +0 -1
  362. package/dist/src/execution/dispatch-runtime-actions-step.d.ts +0 -18
  363. package/dist/src/execution/dispatch-runtime-actions-step.js +0 -1
  364. package/dist/src/execution/dispatch-workflow-runtime-actions-step.d.ts +0 -18
  365. package/dist/src/execution/dispatch-workflow-runtime-actions-step.js +0 -1
  366. package/dist/src/execution/finalize-terminal-session.d.ts +0 -17
  367. package/dist/src/execution/finalize-terminal-session.js +0 -1
  368. package/dist/src/execution/prepared-agent-action.d.ts +0 -7
  369. package/dist/src/execution/prepared-agent-action.js +0 -1
  370. package/dist/src/execution/remote-agent-dispatch.js +0 -1
  371. package/dist/src/execution/session-callback-route.js +0 -1
  372. package/dist/src/execution/session-callback-step.js +0 -1
  373. package/dist/src/execution/subagent-adapter.js +0 -1
  374. package/dist/src/execution/subagent-event-proxy-step.js +0 -1
  375. package/dist/src/execution/subagent-start-local.js +0 -1
  376. package/dist/src/execution/subagent-start-remote.js +0 -1
  377. package/dist/src/execution/subagent-tool.js +0 -1
  378. package/dist/src/execution/tasks/child/instructions.d.ts +0 -3
  379. package/dist/src/execution/tasks/child/instructions.js +0 -1
  380. package/dist/src/execution/tasks/parent/agent-identity.d.ts +0 -13
  381. package/dist/src/execution/tasks/parent/agent-identity.js +0 -1
  382. package/dist/src/execution/tasks/parent/agent-views.d.ts +0 -7
  383. package/dist/src/execution/tasks/parent/agent-views.js +0 -1
  384. package/dist/src/execution/tasks/parent/continuation-dispatch.d.ts +0 -43
  385. package/dist/src/execution/tasks/parent/continuation-dispatch.js +0 -1
  386. package/dist/src/execution/tasks/parent/dispatch-task-step.d.ts +0 -19
  387. package/dist/src/execution/tasks/parent/dispatch-task-step.js +0 -1
  388. package/dist/src/execution/tool-run/answer.js +0 -1
  389. package/dist/src/execution/tool-run/background.d.ts +0 -14
  390. package/dist/src/execution/tool-run/background.js +0 -1
  391. package/dist/src/execution/tool-run/cancel.d.ts +0 -7
  392. package/dist/src/execution/tool-run/cancel.js +0 -1
  393. package/dist/src/execution/tool-run/dispatch.d.ts +0 -24
  394. package/dist/src/execution/tool-run/dispatch.js +0 -1
  395. package/dist/src/execution/tool-run/emit-run-report-step.d.ts +0 -7
  396. package/dist/src/execution/tool-run/emit-run-report-step.js +0 -1
  397. package/dist/src/execution/tool-run/messages.d.ts +0 -70
  398. package/dist/src/execution/tool-run/messages.js +0 -1
  399. package/dist/src/execution/tool-run/owner-inbox.d.ts +0 -11
  400. package/dist/src/execution/tool-run/owner-inbox.js +0 -1
  401. package/dist/src/execution/tool-run/owner.d.ts +0 -13
  402. package/dist/src/execution/tool-run/owner.js +0 -1
  403. package/dist/src/execution/tool-run/run-control.d.ts +0 -18
  404. package/dist/src/execution/tool-run/run-control.js +0 -1
  405. package/dist/src/execution/tool-run/start.d.ts +0 -11
  406. package/dist/src/execution/tool-run/start.js +0 -1
  407. package/dist/src/execution/tool-run/types.d.ts +0 -21
  408. package/dist/src/execution/tool-run/types.js +0 -1
  409. package/dist/src/execution/tool-run/workflow.d.ts +0 -9
  410. package/dist/src/execution/tool-run/workflow.js +0 -1
  411. package/dist/src/execution/tools/subagent/local.d.ts +0 -40
  412. package/dist/src/execution/tools/subagent/local.js +0 -1
  413. package/dist/src/execution/tools/subagent/remote.d.ts +0 -26
  414. package/dist/src/execution/tools/subagent/remote.js +0 -1
  415. package/dist/src/harness/agent-handle-errors.js +0 -1
  416. package/dist/src/harness/handles/query.js +0 -1
  417. package/dist/src/harness/handles/store.js +0 -1
  418. package/dist/src/harness/handles/transitions.d.ts +0 -167
  419. package/dist/src/harness/handles/transitions.js +0 -1
  420. package/dist/src/harness/runtime-actions.js +0 -1
  421. package/dist/src/harness/subagent-depth.d.ts +0 -10
  422. package/dist/src/harness/subagent-depth.js +0 -1
  423. package/dist/src/harness/tool-runs.d.ts +0 -21
  424. package/dist/src/harness/tool-runs.js +0 -1
  425. package/dist/src/harness/workflow-runtime-action-state.d.ts +0 -9
  426. package/dist/src/harness/workflow-runtime-action-state.js +0 -1
  427. package/dist/src/runtime/actions/keys.d.ts +0 -14
  428. package/dist/src/runtime/actions/keys.js +0 -1
  429. package/dist/src/tasks/wire.d.ts +0 -25
  430. package/dist/src/tasks/wire.js +0 -1
  431. /package/dist/src/execution/{tool-run → tools/workflow}/owner-channels.d.ts +0 -0
  432. /package/dist/src/execution/{tool-run → tools/workflow}/owner-channels.js +0 -0
  433. /package/dist/src/execution/{tool-run → tools/workflow}/resume-hook-step.d.ts +0 -0
  434. /package/dist/src/execution/{tool-run → tools/workflow}/resume-hook-step.js +0 -0
  435. /package/dist/src/{execution/subagent-adapter.d.ts → subagents/adapter.d.ts} +0 -0
  436. /package/dist/src/{execution/session-callback-route.d.ts → subagents/callback-route.d.ts} +0 -0
  437. /package/dist/src/{execution/session-callback-step.d.ts → subagents/callback-step.d.ts} +0 -0
  438. /package/dist/src/{harness → subagents}/handles/operation-id.d.ts +0 -0
  439. /package/dist/src/{harness → subagents}/handles/operation-id.js +0 -0
  440. /package/dist/src/{harness → subagents}/handles/state-key.d.ts +0 -0
  441. /package/dist/src/{harness → subagents}/handles/state-key.js +0 -0
  442. /package/dist/src/{execution/subagent-hitl-proxy.d.ts → subagents/hitl-proxy.d.ts} +0 -0
  443. /package/dist/src/{execution/subagent-hitl-proxy.js → subagents/hitl-proxy.js} +0 -0
  444. /package/dist/src/{execution/subagent-invocation.d.ts → subagents/invocation.d.ts} +0 -0
  445. /package/dist/src/{execution/subagent-invocation.js → subagents/invocation.js} +0 -0
  446. /package/dist/src/{execution/delegated-parent-result.d.ts → subagents/parent-result.d.ts} +0 -0
  447. /package/dist/src/{execution/remote-agent-route-url.d.ts → subagents/remote-route-url.d.ts} +0 -0
  448. /package/dist/src/{execution/remote-agent-route-url.js → subagents/remote-route-url.js} +0 -0
  449. /package/dist/src/{harness/subagent-token-budget.d.ts → subagents/token-budget.d.ts} +0 -0
  450. /package/dist/src/{harness/subagent-token-budget.js → subagents/token-budget.js} +0 -0
@@ -1 +1 @@
1
- import{readClientContext}from"#internal/client-context.js";import{resolveTextToResponses}from"#channel/resolve-text.js";import{resolveToolCallInputObject}from"#harness/runtime-actions.js";import{isApprovalRequest}from"#harness/input-request-class.js";import{appendPendingInputBatch,consumeDeferredStepInput,getPendingInputBatches,getPendingInputRequestIds,hasDeferredStepInput,hasPendingInputBatch,queueDeferredStepInput}from"#harness/pending-input-batches.js";import{compactStepInput}from"#harness/hitl/pending-input-resolution.js";import{resolveQuestionOnlyInputBatches}from"#harness/hitl/question-input-requests.js";import{hasTailApprovalResponse}from"#harness/current-messages.js";import{getApprovedTools,hasAnsweredApprovalBatch,resolveApprovalInputBatches}from"#harness/hitl/approval-input-requests.js";import{clearPendingSessionLimitPrompt,isSessionLimitInputBatch,resolveSessionLimitInput}from"#harness/hitl/session-limit-input-requests.js";function hasStepInput(e){return e===void 0?!1:e.message!==void 0||(e.inputResponses?.length??0)>0}function hasPendingApprovalBatch(e){return getPendingInputBatches(e.state).some(e=>e.requests.some(e=>isApprovalRequest(e)))}function resolvePendingInput(t){let n=[...t.history??t.session.history],r=getPendingInputBatches(t.session.state);if(r.length===0)return{outcome:`continue`,messages:n,session:t.session};let i=routePendingInput(r),a=hasTailApprovalResponse(n),s=i.kind===`session-limit`?i.batch:r.length===1?r[0]:void 0,c=s===void 0?t.stepInput:resolveTextMessageInput(s,t.stepInput),l=canonicalizeInputResponses(c?.inputResponses??[]);if(i.kind===`approval`&&t.deferMessagesWhileApprovalsPending===!0&&c?.message!==void 0&&!hasAnsweredApprovalBatch(i.approvalBatches,l))return{deferredMessage:!0,outcome:`unresolved`,messages:n,session:queueDeferredStepInput(t.session,compactStepInput(c))};if(l.length===0&&c?.message===void 0){let r=compactStepInput(c);return{outcome:`unresolved`,messages:n,session:r.context!==void 0||readClientContext(r)!==void 0||r.outputSchema!==void 0?queueDeferredStepInput(t.session,r):t.session}}let u={baseHistory:n,batches:r,deferTurnInput:a,resolvedStepInput:c,responses:l,session:t.session};switch(i.kind){case`session-limit`:return resolveSessionLimitInput({...u,pendingBatch:i.batch});case`approval`:return resolveApprovalInputBatches({...u,approvalBatches:i.approvalBatches,questionBatches:i.questionBatches,resolveApprovalKey:t.resolveApprovalKey});case`question`:return resolveQuestionOnlyInputBatches(u)}}function routePendingInput(e){let t=e.map(e=>({batch:e,domain:classifyPendingInputBatch(e)})),n=t.find(({domain:e})=>e===`session-limit`)?.batch;if(n!==void 0)return{batch:n,kind:`session-limit`};let r=t.filter(({domain:e})=>e===`approval`).map(({batch:e})=>e);if(r.length>0){let t=new Set(r);return{approvalBatches:r,kind:`approval`,questionBatches:e.filter(e=>!t.has(e))}}return{kind:`question`}}function classifyPendingInputBatch(e){for(let t of e.requests)switch(t.kind){case`question`:case`session-limit`:case`tool-approval`:break;default:{let e=t.kind;throw TypeError(`Unhandled pending input request kind: ${String(e)}`)}}return isSessionLimitInputBatch(e)?`session-limit`:e.requests.some(e=>isApprovalRequest(e))?`approval`:`question`}function canonicalizeInputResponses(e){let t=new Map;for(let n of e)t.set(n.requestId,n);return[...t.values()]}function resolveTextMessageInput(e,n){if(typeof n?.message!=`string`)return n;let r=new Set(e.requests.map(e=>e.requestId));if(n.inputResponses?.some(e=>r.has(e.requestId)))return n;let i=new Set(e.responseAuthRequiredRequestIds??[]),a=e.requests.filter(e=>!i.has(e.requestId)),o=resolveTextToResponses(n.message,a);return o.length===0?n:compactStepInput({...n,inputResponses:[...n.inputResponses??[],...o],messageConsumed:!0,message:void 0})}function createRuntimeToolCallActionFromToolCall(e){return{callId:e.toolCall.toolCallId,input:resolveToolCallInputObject(e.toolCall.input,{callId:e.toolCall.toolCallId,toolName:e.toolCall.toolName}),kind:`tool-call`,toolName:e.toolCall.toolName}}export{appendPendingInputBatch,clearPendingSessionLimitPrompt,consumeDeferredStepInput,createRuntimeToolCallActionFromToolCall,getApprovedTools,getPendingInputRequestIds,hasDeferredStepInput,hasPendingApprovalBatch,hasPendingInputBatch,hasStepInput,resolvePendingInput};
1
+ import{readClientContext}from"#internal/client-context.js";import{resolveTextToResponses}from"#channel/resolve-text.js";import{resolveToolCallInputObject}from"#harness/coordination.js";import{isApprovalRequest}from"#harness/input-request-class.js";import{appendPendingInputBatch,consumeDeferredStepInput,getPendingInputBatches,getPendingInputRequestIds,hasDeferredStepInput,hasPendingInputBatch,queueDeferredStepInput}from"#harness/pending-input-batches.js";import{compactStepInput}from"#harness/hitl/pending-input-resolution.js";import{resolveQuestionOnlyInputBatches}from"#harness/hitl/question-input-requests.js";import{hasTailApprovalResponse}from"#harness/current-messages.js";import{getApprovedTools,hasAnsweredApprovalBatch,resolveApprovalInputBatches}from"#harness/hitl/approval-input-requests.js";import{clearPendingSessionLimitPrompt,isSessionLimitInputBatch,resolveSessionLimitInput}from"#harness/hitl/session-limit-input-requests.js";function hasStepInput(e){return e===void 0?!1:e.message!==void 0||(e.inputResponses?.length??0)>0}function hasPendingApprovalBatch(e){return getPendingInputBatches(e.state).some(e=>e.requests.some(e=>isApprovalRequest(e)))}function resolvePendingInput(t){let n=[...t.history??t.session.history],r=getPendingInputBatches(t.session.state);if(r.length===0)return{outcome:`continue`,messages:n,session:t.session};let i=routePendingInput(r),a=hasTailApprovalResponse(n),s=i.kind===`session-limit`?i.batch:r.length===1?r[0]:void 0,c=s===void 0?t.stepInput:resolveTextMessageInput(s,t.stepInput),l=canonicalizeInputResponses(c?.inputResponses??[]);if(i.kind===`approval`&&t.deferMessagesWhileApprovalsPending===!0&&c?.message!==void 0&&!hasAnsweredApprovalBatch(i.approvalBatches,l))return{deferredMessage:!0,outcome:`unresolved`,messages:n,session:queueDeferredStepInput(t.session,compactStepInput(c))};if(l.length===0&&c?.message===void 0){let r=compactStepInput(c);return{outcome:`unresolved`,messages:n,session:r.context!==void 0||readClientContext(r)!==void 0||r.outputSchema!==void 0?queueDeferredStepInput(t.session,r):t.session}}let u={baseHistory:n,batches:r,deferTurnInput:a,resolvedStepInput:c,responses:l,session:t.session};switch(i.kind){case`session-limit`:return resolveSessionLimitInput({...u,pendingBatch:i.batch});case`approval`:return resolveApprovalInputBatches({...u,approvalBatches:i.approvalBatches,questionBatches:i.questionBatches,resolveApprovalKey:t.resolveApprovalKey});case`question`:return resolveQuestionOnlyInputBatches(u)}}function routePendingInput(e){let t=e.map(e=>({batch:e,domain:classifyPendingInputBatch(e)})),n=t.find(({domain:e})=>e===`session-limit`)?.batch;if(n!==void 0)return{batch:n,kind:`session-limit`};let r=t.filter(({domain:e})=>e===`approval`).map(({batch:e})=>e);if(r.length>0){let t=new Set(r);return{approvalBatches:r,kind:`approval`,questionBatches:e.filter(e=>!t.has(e))}}return{kind:`question`}}function classifyPendingInputBatch(e){for(let t of e.requests)switch(t.kind){case`question`:case`session-limit`:case`tool-approval`:break;default:{let e=t.kind;throw TypeError(`Unhandled pending input request kind: ${String(e)}`)}}return isSessionLimitInputBatch(e)?`session-limit`:e.requests.some(e=>isApprovalRequest(e))?`approval`:`question`}function canonicalizeInputResponses(e){let t=new Map;for(let n of e)t.set(n.requestId,n);return[...t.values()]}function resolveTextMessageInput(e,n){if(typeof n?.message!=`string`)return n;let r=new Set(e.requests.map(e=>e.requestId));if(n.inputResponses?.some(e=>r.has(e.requestId)))return n;let i=new Set(e.responseAuthRequiredRequestIds??[]),a=e.requests.filter(e=>!i.has(e.requestId)),o=resolveTextToResponses(n.message,a);return o.length===0?n:compactStepInput({...n,inputResponses:[...n.inputResponses??[],...o],messageConsumed:!0,message:void 0})}function createRuntimeToolCallActionFromToolCall(e){return{callId:e.toolCall.toolCallId,input:resolveToolCallInputObject(e.toolCall.input,{callId:e.toolCall.toolCallId,toolName:e.toolCall.toolName}),kind:`tool-call`,toolName:e.toolCall.toolName}}export{appendPendingInputBatch,clearPendingSessionLimitPrompt,consumeDeferredStepInput,createRuntimeToolCallActionFromToolCall,getApprovedTools,getPendingInputRequestIds,hasDeferredStepInput,hasPendingApprovalBatch,hasPendingInputBatch,hasStepInput,resolvePendingInput};
@@ -61,13 +61,17 @@ export declare function upsertProxyInputRequestState(input: {
61
61
  */
62
62
  export declare function clearProxyInputRequestsForChild(session: HarnessSession, childContinuationToken: string): HarnessSession;
63
63
  /** Removes every proxy route the predicate selects. */
64
- export declare function clearProxyInputRequestsWhere(session: HarnessSession, select: (route: ProxyInputRequest) => boolean): HarnessSession;
64
+ export declare function clearProxyInputRequestsWhere<T extends {
65
+ readonly state?: SessionStateMap;
66
+ }>(session: T, select: (route: ProxyInputRequest) => boolean): T;
65
67
  /** Removes only the request IDs whose responses were successfully forwarded. */
66
68
  export declare function retireProxyInputRequests<T extends {
67
69
  readonly state?: SessionStateMap;
68
70
  }>(session: T, requestIds: readonly string[]): T;
69
71
  /** Removes every proxy route owned by one durable task. */
70
- export declare function clearProxyInputRequestsForTask(session: HarnessSession, taskId: string): HarnessSession;
72
+ export declare function clearProxyInputRequestsForTask<T extends {
73
+ readonly state?: SessionStateMap;
74
+ }>(session: T, taskId: string): T;
71
75
  /**
72
76
  * Removes every proxy entry. Called when a cancelled turn orphans its
73
77
  * descendants so stale HITL responses no longer route to them.
@@ -1,3 +1,3 @@
1
- import{appendUserContent,normalizeUserContent}from"#harness/messages.js";import{isSessionLimitContinuationRequestId}from"#harness/session-limit-continuation.js";import{isApprovalRequest}from"#harness/input-request-class.js";import{extractHistoricalInputRequests}from"#harness/input-extraction.js";function dropStaleSessionLimitContinuationResponses(e){if(e.stepInput===void 0)return;let t=e.stepInput.inputResponses??[],r=e.stepInput.attributedInputResponses??[],keep=t=>e.pendingRequestIds.has(t)||!isSessionLimitContinuationRequestId(t),i=t.filter(e=>keep(e.requestId)),a=r.filter(({response:e})=>keep(e.requestId));if(i.length===t.length&&a.length===r.length)return e.stepInput;let{attributedInputResponses:o,inputResponses:s,...c}=e.stepInput,l=c;return i.length>0&&(l.inputResponses=i),a.length>0&&(l.attributedInputResponses=a),l}function convertStaleResponsesToUserMessage(e){if(e.stepInput===void 0)return{kind:`unchanged`};let t=e.stepInput.inputResponses??[],n=e.stepInput.attributedInputResponses??[];if(t.length===0&&n.length===0)return{kind:`unchanged`,stepInput:e.stepInput};let r=[],a=[],o=[];for(let n of t)(e.pendingRequestIds.has(n.requestId)?r:o).push(n);for(let t of n)e.pendingRequestIds.has(t.response.requestId)?a.push(t):o.push(t.response);if(o.length===0)return{kind:`unchanged`,stepInput:e.stepInput};let s=extractHistoricalInputRequests({history:e.history,requestIds:new Set(o.map(e=>e.requestId)),tools:e.tools}),c=appendOptionalUserContent(e.stepInput.message,formatModelMessage(o,s)),l=appendOptionalUserContent(e.stepInput.message,formatDisplayMessage(o,s)),{attributedInputResponses:u,inputResponses:d,...f}=e.stepInput,p={...f,message:c};return r.length>0&&(p.inputResponses=r),a.length>0&&(p.attributedInputResponses=a),{displayMessage:l,kind:`converted`,stepInput:p}}function formatModelMessage(e,t){let n=e.map(e=>{let n=t.get(e.requestId),i=n?.options?.find(t=>t.id===e.optionId),a={};if(e.optionId!==void 0&&(a.optionId=e.optionId),i!==void 0){let e={id:i.id,label:i.label};i.description!==void 0&&(e.description=i.description),a.selectedOption=e}e.text!==void 0&&(a.text=e.text);let o={requestId:e.requestId,response:a};return n!==void 0&&(o.prompt=n.prompt,o.requestType=isApprovalRequest(n)?`approval`:`question`),o});return[`The user submitted the following response to an earlier interactive prompt.`,`Treat it as new input at the current point in the conversation and decide whether it is still relevant.${e.some(e=>{let n=t.get(e.requestId);return n===void 0||isApprovalRequest(n)})?` This does not authorize an earlier action; request approval again if that action is still needed.`:``}`,JSON.stringify(n,null,2)].join(`
1
+ import{appendUserContent,normalizeUserContent}from"#harness/messages.js";import{isApprovalRequest}from"#harness/input-request-class.js";import{isSessionLimitContinuationRequestId}from"#harness/session-limit-continuation.js";import{extractHistoricalInputRequests}from"#harness/input-extraction.js";function dropStaleSessionLimitContinuationResponses(e){if(e.stepInput===void 0)return;let t=e.stepInput.inputResponses??[],n=e.stepInput.attributedInputResponses??[],keep=t=>e.pendingRequestIds.has(t)||!isSessionLimitContinuationRequestId(t),i=t.filter(e=>keep(e.requestId)),a=n.filter(({response:e})=>keep(e.requestId));if(i.length===t.length&&a.length===n.length)return e.stepInput;let{attributedInputResponses:o,inputResponses:s,...c}=e.stepInput,l=c;return i.length>0&&(l.inputResponses=i),a.length>0&&(l.attributedInputResponses=a),l}function convertStaleResponsesToUserMessage(e){if(e.stepInput===void 0)return{kind:`unchanged`};let t=e.stepInput.inputResponses??[],n=e.stepInput.attributedInputResponses??[];if(t.length===0&&n.length===0)return{kind:`unchanged`,stepInput:e.stepInput};let r=[],a=[],o=[];for(let n of t)(e.pendingRequestIds.has(n.requestId)?r:o).push(n);for(let t of n)e.pendingRequestIds.has(t.response.requestId)?a.push(t):o.push(t.response);if(o.length===0)return{kind:`unchanged`,stepInput:e.stepInput};let s=extractHistoricalInputRequests({history:e.history,requestIds:new Set(o.map(e=>e.requestId)),tools:e.tools}),c=appendOptionalUserContent(e.stepInput.message,formatModelMessage(o,s)),l=appendOptionalUserContent(e.stepInput.message,formatDisplayMessage(o,s)),{attributedInputResponses:u,inputResponses:d,...f}=e.stepInput,p={...f,message:c};return r.length>0&&(p.inputResponses=r),a.length>0&&(p.attributedInputResponses=a),{displayMessage:l,kind:`converted`,stepInput:p}}function formatModelMessage(e,t){let r=e.map(e=>{let r=t.get(e.requestId),i=r?.options?.find(t=>t.id===e.optionId),a={};if(e.optionId!==void 0&&(a.optionId=e.optionId),i!==void 0){let e={id:i.id,label:i.label};i.description!==void 0&&(e.description=i.description),a.selectedOption=e}e.text!==void 0&&(a.text=e.text);let o={requestId:e.requestId,response:a};return r!==void 0&&(o.prompt=r.prompt,o.requestType=isApprovalRequest(r)?`approval`:`question`),o});return[`The user submitted the following response to an earlier interactive prompt.`,`Treat it as new input at the current point in the conversation and decide whether it is still relevant.${e.some(e=>{let r=t.get(e.requestId);return r===void 0||isApprovalRequest(r)})?` This does not authorize an earlier action; request approval again if that action is still needed.`:``}`,JSON.stringify(r,null,2)].join(`
2
2
  `)}function formatDisplayMessage(e,t){return e.map(e=>e.text!==void 0&&e.text.length>0?e.text:t.get(e.requestId)?.options?.find(t=>t.id===e.optionId)?.label??e.optionId??`Response to an earlier interactive prompt`).join(`
3
3
  `)}function appendOptionalUserContent(n,r){let i=normalizeUserContent(n);return i===void 0?r:appendUserContent({appended:r,existing:i})}export{convertStaleResponsesToUserMessage,dropStaleSessionLimitContinuationResponses};
@@ -1,5 +1,4 @@
1
1
  import type { PrepareStepFunction, StepResult, ToolSet } from "ai";
2
- import type { SessionAuthContext } from "#channel/types.js";
3
2
  import type { HarnessEmissionState } from "#harness/emission.js";
4
3
  import { type AnthropicCacheMarker, type PromptCachePath } from "#harness/prompt-cache.js";
5
4
  import { type HarnessEmitFn, type HarnessSession, type ToolLoopHarnessConfig } from "#harness/types.js";
@@ -16,7 +15,7 @@ export type HarnessStepResult = Pick<StepResult<ToolSet>, "content" | "finishRea
16
15
  * Input for {@link buildStepHooks}.
17
16
  */
18
17
  interface StepHooksInput {
19
- readonly auth: SessionAuthContext | null;
18
+ readonly auth?: import("#channel/types.js").SessionAuthContext | null;
20
19
  readonly cachePath: PromptCachePath;
21
20
  readonly emit?: HarnessEmitFn;
22
21
  readonly emissionState: HarnessEmissionState;
@@ -1 +1 @@
1
- import{contextStorage}from"#context/container.js";import{createActionResultEvent,createActionsRequestedEvent,createStepCompletedEvent}from"#protocol/message.js";import{emitStepStarted,normalizeAssistantStepFinishReason}from"#harness/emission.js";import{createRuntimeActionRequestFromToolCall}from"#harness/runtime-actions.js";import{isAuthorizationSignal,isPendingAuthorizationToolOutput}from"#harness/authorization.js";import{createRuntimeToolResultFromMessagePart,createRuntimeToolResultFromStepResult,createRuntimeToolResultFromToolError}from"#harness/action-result-helpers.js";import{isInvalidToolCall}from"#harness/tool-call-input-errors.js";import{readToolInterrupt}from"#harness/tool-interrupts.js";import{extractToolApprovalInputRequests}from"#harness/input-extraction.js";import{applyConversationCacheControl,mergeGatewayAutoCaching}from"#harness/prompt-cache.js";import{mergeProviderSafetyIdentifier}from"#harness/provider-safety.js";import{requireSessionModelReference}from"#harness/types.js";function buildStepHooks(e){let t=e.session,n=e.emit,r;return{onStepFinish:async e=>{r(e)},prepareStep:async({messages:r})=>{let a=r;n&&e.emitStepStarted!==!1&&await emitStepStarted(n,e.emissionState,requireSessionModelReference(t).id,r),e.cachePath.kind===`anthropic-direct`&&e.marker&&(a=applyConversationCacheControl([...r],e.marker));let o={messages:a},s=requireSessionModelReference(t),c=mergeProviderSafetyIdentifier(s,s.providerOptions,e.auth);return e.cachePath.kind===`gateway-auto`?o.providerOptions=mergeGatewayAutoCaching(c):c!==void 0&&(o.providerOptions=c),o},stepResult:new Promise(e=>{r=e})}}async function emitStepActions(e,i,s,c){let l=new Set(s.toolCalls.filter(isProviderExecutedToolCall).map(e=>e.toolCallId)),u=new Set([...c.excludedActionCallIds??[],...l,...extractToolApprovalInputRequests({content:s.content??[],excludedCallIds:c.excludedActionCallIds}).map(e=>e.action.callId),...s.toolCalls.filter(isInvalidToolCall).map(e=>e.toolCallId)]),isExcluded=(e,t)=>u.has(e)||c.excludedActionToolNames.has(t),d=s.toolCalls.filter(e=>!isExcluded(e.toolCallId,e.toolName)&&!c.emittedActionCallIds?.has(e.toolCallId)).map(e=>createRuntimeActionRequestFromToolCall({toolCall:e,tools:c.tools}));d.length>0&&await e(createActionsRequestedEvent({actions:d,sequence:i.sequence,stepIndex:i.stepIndex,turnId:i.turnId}));let f=c.handledInlineToolResultCallIds,p=new Map(s.toolResults.map(e=>[e.toolCallId,e.output]));for(let n of reconcileToolResults(s)){if(isExcluded(n.callId,n.toolName)||f?.has(n.callId))continue;let r=p.get(n.callId);shouldSkipAuthorizationActionResult(n.callId,r)||await e(createActionResultEvent({result:n,sequence:i.sequence,stepIndex:i.stepIndex,turnId:i.turnId}))}await e(createStepCompletedEvent({finishReason:normalizeAssistantStepFinishReason(s.finishReason),providerMetadata:extractStepProviderMetadata(s.providerMetadata),sequence:i.sequence,stepIndex:i.stepIndex,turnId:i.turnId,usage:extractStepUsage({costUsd:extractGatewayCostUsd(s.providerMetadata),usage:s.usage})}))}function isProviderExecutedToolCall(e){return e.providerExecuted===!0}function reconcileToolResults(e){let t=new Map;for(let n of e.toolResults)n.providerExecuted!==!0&&t.set(n.toolCallId,createRuntimeToolResultFromStepResult(n));for(let n of e.content??[])n.type!==`tool-error`||n.providerExecuted===!0||t.has(n.toolCallId)||t.set(n.toolCallId,createRuntimeToolResultFromToolError(n));for(let n of extractToolResultParts(e.response.messages))n.providerExecuted!==!0&&(t.has(n.toolCallId)||t.set(n.toolCallId,createRuntimeToolResultFromMessagePart(n)));return[...t.values()]}function shouldSkipAuthorizationActionResult(t,n){if(n!==void 0&&isPendingAuthorizationToolOutput(n))return!0;let r=contextStorage.getStore();if(r===void 0)return!1;let i=readToolInterrupt(r,t);return i!==void 0&&isAuthorizationSignal(i)}function extractToolResultParts(e){let t=[];for(let n of e)if(!(n.role!==`tool`||!Array.isArray(n.content)))for(let e of n.content)e.type===`tool-result`&&t.push(e);return t}function extractStepUsage(e){let t={};e.costUsd!==void 0&&(t.costUsd=e.costUsd);let n=e.usage;return n===void 0?Object.keys(t).length>0?t:void 0:(n.inputTokens!==void 0&&(t.inputTokens=n.inputTokens),n.outputTokens!==void 0&&(t.outputTokens=n.outputTokens),n.inputTokenDetails?.cacheReadTokens!==void 0&&(t.cacheReadTokens=n.inputTokenDetails.cacheReadTokens),n.inputTokenDetails?.cacheWriteTokens!==void 0&&(t.cacheWriteTokens=n.inputTokenDetails.cacheWriteTokens),Object.keys(t).length>0?t:void 0)}function extractStepProviderMetadata(e){let t=readGatewayGenerationId(e);return t===void 0?void 0:{gateway:{generationId:t}}}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 readGatewayGenerationId(e){let t=readGatewayMetadata(e)?.generationId;return typeof t==`string`&&t.length>0?t:void 0}function readGatewayMetadata(e){let t=e?.gateway;return t&&typeof t==`object`&&!Array.isArray(t)?t:void 0}export{buildStepHooks,emitStepActions};
1
+ import{contextStorage}from"#context/container.js";import{AuthKey}from"#context/keys.js";import{createActionResultEvent,createActionsRequestedEvent,createStepCompletedEvent}from"#protocol/message.js";import{emitStepStarted,normalizeAssistantStepFinishReason}from"#harness/emission.js";import{createRuntimeActionRequestFromToolCall}from"#harness/coordination.js";import{isAuthorizationSignal,isPendingAuthorizationToolOutput}from"#harness/authorization.js";import{createRuntimeToolResultFromMessagePart,createRuntimeToolResultFromStepResult,createRuntimeToolResultFromToolError}from"#harness/action-result-helpers.js";import{isInvalidToolCall}from"#harness/tool-call-input-errors.js";import{readToolInterrupt}from"#harness/tool-interrupts.js";import{extractToolApprovalInputRequests}from"#harness/input-extraction.js";import{applyConversationCacheControl,mergeGatewayAutoCaching}from"#harness/prompt-cache.js";import{requireSessionModelReference}from"#harness/types.js";import{mergeProviderSafetyIdentifier}from"#harness/provider-safety.js";function buildStepHooks(n){let r=n.session,i=n.emit,o;return{onStepFinish:async e=>{o(e)},prepareStep:async({messages:o})=>{let s=o;i&&n.emitStepStarted!==!1&&await emitStepStarted(i,n.emissionState,requireSessionModelReference(r).id,o),n.cachePath.kind===`anthropic-direct`&&n.marker&&(s=applyConversationCacheControl([...o],n.marker));let c={messages:s},l=requireSessionModelReference(r),u=mergeProviderSafetyIdentifier(l,l.providerOptions,n.auth??contextStorage.getStore()?.get(AuthKey)??null);return n.cachePath.kind===`gateway-auto`?c.providerOptions=mergeGatewayAutoCaching(u):u!==void 0&&(c.providerOptions=u),c},stepResult:new Promise(e=>{o=e})}}async function emitStepActions(e,t,a,c){let l=new Set(a.toolCalls.filter(isProviderExecutedToolCall).map(e=>e.toolCallId)),u=new Set([...c.excludedActionCallIds??[],...l,...extractToolApprovalInputRequests({content:a.content??[],excludedCallIds:c.excludedActionCallIds}).map(e=>e.action.callId),...a.toolCalls.filter(isInvalidToolCall).map(e=>e.toolCallId)]),isExcluded=(e,t)=>u.has(e)||c.excludedActionToolNames.has(t),d=a.toolCalls.filter(e=>!isExcluded(e.toolCallId,e.toolName)&&!c.emittedActionCallIds?.has(e.toolCallId)).map(e=>createRuntimeActionRequestFromToolCall({toolCall:e,tools:c.tools}));d.length>0&&await e(createActionsRequestedEvent({actions:d,sequence:t.sequence,stepIndex:t.stepIndex,turnId:t.turnId}));let f=c.handledInlineToolResultCallIds,p=new Map(a.toolResults.map(e=>[e.toolCallId,e.output]));for(let r of reconcileToolResults(a)){if(isExcluded(r.callId,r.toolName)||f?.has(r.callId))continue;let i=p.get(r.callId);shouldSkipAuthorizationActionResult(r.callId,i)||await e(createActionResultEvent({result:r,sequence:t.sequence,stepIndex:t.stepIndex,turnId:t.turnId}))}await e(createStepCompletedEvent({finishReason:normalizeAssistantStepFinishReason(a.finishReason),providerMetadata:extractStepProviderMetadata(a.providerMetadata),sequence:t.sequence,stepIndex:t.stepIndex,turnId:t.turnId,usage:extractStepUsage({costUsd:extractGatewayCostUsd(a.providerMetadata),usage:a.usage})}))}function isProviderExecutedToolCall(e){return e.providerExecuted===!0}function reconcileToolResults(e){let t=new Map;for(let n of e.toolResults)n.providerExecuted!==!0&&t.set(n.toolCallId,createRuntimeToolResultFromStepResult(n));for(let n of e.content??[])n.type!==`tool-error`||n.providerExecuted===!0||t.has(n.toolCallId)||t.set(n.toolCallId,createRuntimeToolResultFromToolError(n));for(let n of extractToolResultParts(e.response.messages))n.providerExecuted!==!0&&(t.has(n.toolCallId)||t.set(n.toolCallId,createRuntimeToolResultFromMessagePart(n)));return[...t.values()]}function shouldSkipAuthorizationActionResult(t,n){if(n!==void 0&&isPendingAuthorizationToolOutput(n))return!0;let r=contextStorage.getStore();if(r===void 0)return!1;let i=readToolInterrupt(r,t);return i!==void 0&&isAuthorizationSignal(i)}function extractToolResultParts(e){let t=[];for(let n of e)if(!(n.role!==`tool`||!Array.isArray(n.content)))for(let e of n.content)e.type===`tool-result`&&t.push(e);return t}function extractStepUsage(e){let t={};e.costUsd!==void 0&&(t.costUsd=e.costUsd);let n=e.usage;return n===void 0?Object.keys(t).length>0?t:void 0:(n.inputTokens!==void 0&&(t.inputTokens=n.inputTokens),n.outputTokens!==void 0&&(t.outputTokens=n.outputTokens),n.inputTokenDetails?.cacheReadTokens!==void 0&&(t.cacheReadTokens=n.inputTokenDetails.cacheReadTokens),n.inputTokenDetails?.cacheWriteTokens!==void 0&&(t.cacheWriteTokens=n.inputTokenDetails.cacheWriteTokens),Object.keys(t).length>0?t:void 0)}function extractStepProviderMetadata(e){let t=readGatewayGenerationId(e);return t===void 0?void 0:{gateway:{generationId:t}}}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 readGatewayGenerationId(e){let t=readGatewayMetadata(e)?.generationId;return typeof t==`string`&&t.length>0?t:void 0}function readGatewayMetadata(e){let t=e?.gateway;return t&&typeof t==`object`&&!Array.isArray(t)?t:void 0}export{buildStepHooks,emitStepActions};
@@ -1 +1 @@
1
- import{resolveToolCallInputObject}from"#harness/runtime-actions.js";function createRuntimeToolCallActionFromToolCall(e){return{callId:e.toolCall.toolCallId,input:resolveToolCallInputObject(e.toolCall.input,{callId:e.toolCall.toolCallId,toolName:e.toolCall.toolName}),kind:`tool-call`,toolName:e.toolCall.toolName}}export{createRuntimeToolCallActionFromToolCall};
1
+ import{resolveToolCallInputObject}from"#harness/coordination.js";function createRuntimeToolCallActionFromToolCall(e){return{callId:e.toolCall.toolCallId,input:resolveToolCallInputObject(e.toolCall.input,{callId:e.toolCall.toolCallId,toolName:e.toolCall.toolName}),kind:`tool-call`,toolName:e.toolCall.toolName}}export{createRuntimeToolCallActionFromToolCall};
@@ -1 +1 @@
1
- import{resolveToolCallInputObject}from"#harness/runtime-actions.js";function isInvalidToolCall(e){return e.invalid===!0}function createInvalidToolCallInputError(e){let{toolCall:t}=e,n={type:`tool-error`,toolCallId:t.toolCallId,toolName:t.toolName,input:t.input,error:e.error};return t.dynamic===!0&&(n.dynamic=!0),t.providerExecuted===!0&&(n.providerExecuted=!0),t.providerMetadata!==void 0&&(n.providerMetadata=t.providerMetadata),t.toolMetadata!==void 0&&(n.toolMetadata=t.toolMetadata),n}function resolveProviderToolCallRequest(t){try{return{request:{callId:t.toolCallId,input:resolveToolCallInputObject(t.input,{callId:t.toolCallId,toolName:t.toolName}),kind:`tool-call`,toolName:t.toolName}}}catch(e){if(!(e instanceof TypeError))throw e;return{toolError:createInvalidToolCallInputError({error:e,toolCall:{input:t.input,providerExecuted:!0,toolCallId:t.toolCallId,toolName:t.toolName,type:`tool-call`}})}}}function getInvalidToolCallInputError(t){let{toolCall:n}=t;if(!isInvalidToolCall(n))try{resolveToolCallInputObject(n.input,{callId:n.toolCallId,toolName:n.toolName});return}catch(e){if(e instanceof TypeError)return createInvalidToolCallInputError({error:e,toolCall:n});throw e}}export{createInvalidToolCallInputError,getInvalidToolCallInputError,isInvalidToolCall,resolveProviderToolCallRequest};
1
+ import{resolveToolCallInputObject}from"#harness/coordination.js";function isInvalidToolCall(e){return e.invalid===!0}function createInvalidToolCallInputError(e){let{toolCall:t}=e,n={type:`tool-error`,toolCallId:t.toolCallId,toolName:t.toolName,input:t.input,error:e.error};return t.dynamic===!0&&(n.dynamic=!0),t.providerExecuted===!0&&(n.providerExecuted=!0),t.providerMetadata!==void 0&&(n.providerMetadata=t.providerMetadata),t.toolMetadata!==void 0&&(n.toolMetadata=t.toolMetadata),n}function resolveProviderToolCallRequest(t){try{return{request:{callId:t.toolCallId,input:resolveToolCallInputObject(t.input,{callId:t.toolCallId,toolName:t.toolName}),kind:`tool-call`,toolName:t.toolName}}}catch(e){if(!(e instanceof TypeError))throw e;return{toolError:createInvalidToolCallInputError({error:e,toolCall:{input:t.input,providerExecuted:!0,toolCallId:t.toolCallId,toolName:t.toolName,type:`tool-call`}})}}}function getInvalidToolCallInputError(t){let{toolCall:n}=t;if(!isInvalidToolCall(n))try{resolveToolCallInputObject(n.input,{callId:n.toolCallId,toolName:n.toolName});return}catch(e){if(e instanceof TypeError)return createInvalidToolCallInputError({error:e,toolCall:n});throw e}}export{createInvalidToolCallInputError,getInvalidToolCallInputError,isInvalidToolCall,resolveProviderToolCallRequest};
@@ -1,3 +1,3 @@
1
- import{readClientContext}from"#internal/client-context.js";import{createErrorId,createLogger,formatError,logError}from"#internal/logging.js";import{contextStorage}from"#context/container.js";import{AuthKey,ParentSessionKey,ScheduleIdKey,SessionCallbackKey,TurnTaskDeliveryKey,TurnTaskStateKey}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,createInputResolvedEvent,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{ChannelKey}from"#runtime/sessions/runtime-context-keys.js";import{buildDynamicTools,buildResponseAuthorizationTools}from"#context/build-dynamic-tools.js";import{drainMemoryCommit,prepareMemoryCompaction,prepareMemoryPreamble}from"#context/memory-lifecycle.js";import{canonicalizeMemoryRecords,clearMemorySessionState,shouldCanonicalizeMemory}from"#shared/memory-state.js";import{advanceStep,emitFailedStep,emitRecoverableFailedTurn,emitStepStarted,emitStreamContent,emitTurnEpilogue,emitTurnPreamble,getHarnessEmissionState,setHarnessEmissionState}from"#harness/emission.js";import{ToolLoopAgent,isStepCount}from"ai";import{resolveAgentsAnnouncement}from"#harness/handles/prompt.js";import{renderPendingApprovalsInstruction,renderPendingApprovalsSnippet}from"#harness/hitl/approval-prompt.js";import{getAgentHandleStore}from"#harness/handles/store.js";import{readTaskIdFromInboxToken}from"#tasks/task-inbox-token.js";import{buildDynamicSubagentTools}from"#context/dynamic-subagent-lifecycle.js";import{hydrateSandboxAttachments,stageAttachmentsToSandbox}from"#harness/attachment-staging.js";import{normalizeModelMessages,normalizeUserContent,resolveAssistantStepText}from"#harness/messages.js";import{createPendingDispatchActionFromToolCall,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{createHistoryViewPreparer}from"#shared/history-view.js";import{throwIfTurnAborted}from"#harness/turn-cancellation.js";import{getActiveDynamicModelSelection,isDynamicModelSelectionError}from"#context/dynamic-model-lifecycle.js";import{getSupersededAuthorizationChallenges,setPendingAuthorization}from"#harness/authorization.js";import{appendPendingInputBatch,consumeDeferredStepInput,getApprovedTools,getPendingInputRequestIds,hasDeferredStepInput,hasPendingApprovalBatch,hasStepInput,resolvePendingInput}from"#harness/input-requests.js";import{accumulateTurnUsage,getTurnUsageState,setTurnUsageState}from"#harness/turn-tag-state.js";import{createBackgroundToolCallBatch}from"#harness/background-tools.js";import{createToolResultMessagePartFromToolError}from"#harness/action-result-helpers.js";import{buildDynamicInstructionMessages,drainDynamicInstructionUserMessages,prepareDynamicInstructionPreamble}from"#context/dynamic-instruction-lifecycle.js";import{PendingSkillAnnouncementKey}from"#context/dynamic-skill-lifecycle.js";import{getWorkflowContinuationSecurity,readWorkflowContinuationSecurity}from"#harness/workflow-continuation-security.js";import{buildWorkflowHostTools,resolveWorkflowSandboxBridgeRequestLimit}from"#harness/workflow-sandbox.js";import{getApprovalAuditState,markApprovalCandidateHistoryEventEmitted,markApprovalCandidatePendingEventEmitted,markApprovalSettlementEventEmitted}from"#harness/approval-candidates.js";import{getPendingInputBatches,queueDeferredStepInput}from"#harness/pending-input-batches.js";import{EMPTY_DELIVERY_SENTINEL,hasEmptyDeliverySentinel}from"#shared/empty-delivery.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{resolveInlineAuthorizationInterrupt}from"#harness/inline-tool-authorization.js";import{createCurrentMessages}from"#harness/current-messages.js";import{extractQuestionInputRequests,extractToolApprovalInputRequests}from"#harness/input-extraction.js";import{applyLastToolCacheBreakpoint,applySystemCacheBreakpoint,detectPromptCachePath,getAnthropicCacheMarker}from"#harness/prompt-cache.js";import{mergeProviderSafetyIdentifier}from"#harness/provider-safety.js";import{requireSessionModelReference}from"#harness/types.js";import{emitWorkflowActionResults,emitWorkflowActionsRequested}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,shouldPrepareApprovalReplayTools}from"#harness/approval-delivery-coordinator.js";import{convertStaleResponsesToUserMessage,dropStaleSessionLimitContinuationResponses}from"#harness/stale-input-responses.js";import{normalizeProviderToolHistory}from"#harness/provider-tool-history.js";import{resolveDeliveryPolicy}from"#tasks/delivery-policy.js";import{extractWorkflowStreamWriteErrorDetails}from"#harness/workflow-stream-error.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"#harness/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 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{readClientContext}from"#internal/client-context.js";import{createErrorId,createLogger,formatError,logError}from"#internal/logging.js";import{contextStorage}from"#context/container.js";import{AuthKey,ParentSessionKey,ScheduleIdKey,SessionCallbackKey,TurnTaskDeliveryKey,TurnTaskStateKey}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,createInputResolvedEvent,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{buildDynamicTools,buildResponseAuthorizationTools}from"#context/build-dynamic-tools.js";import{drainMemoryCommit,prepareMemoryCompaction,prepareMemoryPreamble}from"#context/memory-lifecycle.js";import{canonicalizeMemoryRecords,clearMemorySessionState,shouldCanonicalizeMemory}from"#shared/memory-state.js";import{advanceStep,emitFailedStep,emitRecoverableFailedTurn,emitStepStarted,emitStreamContent,emitTurnEpilogue,emitTurnPreamble,getHarnessEmissionState,setHarnessEmissionState}from"#harness/emission.js";import{ToolLoopAgent,isStepCount}from"ai";import{projectParkedAgentHandles,resolveAgentsAnnouncement}from"#subagents/handles/prompt.js";import{renderPendingApprovalsInstruction,renderPendingApprovalsSnippet}from"#harness/hitl/approval-prompt.js";import{getAgentHandleStore}from"#subagents/handles/store.js";import{buildDynamicSubagentTools}from"#context/dynamic-subagent-lifecycle.js";import{hydrateSandboxAttachments,stageAttachmentsToSandbox}from"#harness/attachment-staging.js";import{normalizeModelMessages,normalizeUserContent,resolveAssistantStepText}from"#harness/messages.js";import{createCoordinationRequestFromToolCall,resolvePendingCoordination,setPendingCoordinationBatch}from"#harness/coordination.js";import{activeTurnId}from"#harness/active-turn-id.js";import{clearPendingWorkflowInterrupt,getPendingWorkflowInterrupt,setPendingWorkflowInterrupt}from"#harness/workflow-interrupt-state.js";import{getWorkflowTaskInterrupts,isWorkflowTaskInterrupt}from"#harness/workflow-task-state.js";import{createHistoryViewPreparer}from"#shared/history-view.js";import{throwIfTurnAborted}from"#harness/turn-cancellation.js";import{getActiveDynamicModelSelection,isDynamicModelSelectionError}from"#context/dynamic-model-lifecycle.js";import{ASK_QUESTION_TOOL_NAME}from"#harness/request-input-tool.js";import{getSupersededAuthorizationChallenges,setPendingAuthorization}from"#harness/authorization.js";import{appendPendingInputBatch,consumeDeferredStepInput,getApprovedTools,getPendingInputRequestIds,hasDeferredStepInput,hasPendingApprovalBatch,hasStepInput,resolvePendingInput}from"#harness/input-requests.js";import{accumulateTurnUsage,getTurnUsageState,setTurnUsageState}from"#harness/turn-tag-state.js";import{BackgroundToolExecutorKey,createBackgroundToolCallBatch}from"#harness/background-tools.js";import{createToolResultMessagePartFromToolError}from"#harness/action-result-helpers.js";import{buildDynamicInstructionMessages,drainDynamicInstructionUserMessages,prepareDynamicInstructionPreamble}from"#context/dynamic-instruction-lifecycle.js";import{PendingSkillAnnouncementKey}from"#context/dynamic-skill-lifecycle.js";import{getWorkflowContinuationSecurity,readWorkflowContinuationSecurity}from"#harness/workflow-continuation-security.js";import{buildWorkflowHostTools,resolveWorkflowSandboxBridgeRequestLimit}from"#harness/workflow-sandbox.js";import{getApprovalAuditState,markApprovalCandidateHistoryEventEmitted,markApprovalCandidatePendingEventEmitted,markApprovalSettlementEventEmitted}from"#harness/approval-candidates.js";import{getPendingInputBatches,queueDeferredStepInput}from"#harness/pending-input-batches.js";import{EMPTY_DELIVERY_SENTINEL,hasEmptyDeliverySentinel}from"#shared/empty-delivery.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{resolveInlineAuthorizationInterrupt}from"#harness/inline-tool-authorization.js";import{createCurrentMessages}from"#harness/current-messages.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{mergeProviderSafetyIdentifier}from"#harness/provider-safety.js";import{emitWorkflowActionResults,emitWorkflowActionsRequested}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,shouldPrepareApprovalReplayTools}from"#harness/approval-delivery-coordinator.js";import{convertStaleResponsesToUserMessage,dropStaleSessionLimitContinuationResponses}from"#harness/stale-input-responses.js";import{normalizeProviderToolHistory}from"#harness/provider-tool-history.js";import{resolveDeliveryPolicy}from"#tasks/delivery-policy.js";import{extractWorkflowStreamWriteErrorDetails}from"#harness/workflow-stream-error.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"#harness/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 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)))}}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 hasDispatchTarget(e,t){return[...e.values()].some(e=>e.behavior?.handling?.kind===`dispatch`&&e.behavior.handling.target.kind===t)}function createToolLoopHarness(n){let r=n.handleEvent,f=resolveApprovalKeyFromTools(n.tools);async function runStep(e,t){return n.instrumentation?.runStep({environment,eveVersion,hasInput:hasStepInput(t),session:e},e=>executeStepBody(e.session,t,e))??executeStepBody(e,t)}async function executeStepBody(g,v,y){let b=g,S=createHistoryViewPreparer({previous:n.historyView,projector:n.historyProjector});S(b.history,b.state);let projectHistory=(e,t)=>S(e,t).messages,w=getHarnessEmissionState(b.state),D=contextStorage.getStore(),ce=D?.get(ParentSessionKey),le=D?.get(ChannelKey),ue=D?.get(SessionCallbackKey),de=ce!==void 0||ue!==void 0,k=(ue?.taskId!==void 0||readTaskIdFromInboxToken(String(le?.state?.parentContinuationToken??``))!==void 0)&&hasDispatchTarget(n.tools,`task-update`),fe,A=y?.createHandleEvent({getAttemptScope:()=>fe,handleEvent:r,turnId:activeTurnId(w)})??r,failModelSelection=async(e,r)=>{if(throwIfTurnAborted(n.abortSignal),y?.recordError(e),!A)throw e;let i=createErrorId(),a=toErrorMessage(e);return log.error(`model selection failed terminally`,{error:e,errorId:i,sessionId:b.sessionId,turnId:r.turnId}),await emitFailedStep(A,r,{code:`MODEL_SELECTION_FAILED`,details:{errorId:i},message:a,sessionId:b.sessionId}),{next:n.mode===`task`||de?{done:!0,isError:!0,output:a}:{done:!0,output:``},session:b}},preparePreambleTrace=async()=>await y?.preparePreamble({sequence:w.sequence,sessionStarted:w.sessionStarted,traceContext:y?.traceContext,turnId:`turn_${w.sequence}`});if(n.clearOnly===!0)return b={...b,compaction:{recentWindowSize:b.compaction.recentWindowSize,threshold:b.compaction.threshold,thresholdPercent:b.compaction.thresholdPercent},history:[],state:clearMemorySessionState(b.state)},await A?.(createContextClearedEvent({sequence:w.sequence,sessionId:b.sessionId,turnId:activeTurnId(w)})),await A?.(createSessionWaitingEvent()),{next:null,session:b};if(n.compactOnly===!0){if(b.history.length>0)try{let e=contextStorage.getStore(),t=await resolveActiveRuntimeModel({config:n,ctx:e,session:b});b=t.session;let r=await maybeCompact({abortSignal:n.abortSignal,auth:e?.get(AuthKey)??null,emit:A,emissionState:{...w,turnId:activeTurnId(w)},force:!0,historyProjector:n.historyProjector,messages:[...b.history],model:t.model,onCompaction:n.onCompaction,resolveModel:n.resolveModel,runtimeIdentity:n.runtimeIdentity,session:b,telemetry:y?.telemetry()});b={...r.session,compaction:{recentWindowSize:r.session.compaction.recentWindowSize,threshold:r.session.compaction.threshold,thresholdPercent:r.session.compaction.thresholdPercent},history:r.messages}}catch(e){logError(log,`manual session compaction failed`,e,{sessionId:b.sessionId})}return await A?.(createSessionWaitingEvent()),{next:null,session:b}}let j=consumeDeferredStepInput({input:v,preferCurrentInput:n.mode!==`conversation`&&v!==void 0&&hasPendingApprovalBatch(b),session:b});b=j.session;let M=await resolvePendingRuntimeActions({emit:A,session:b,stepInput:j.input,tools:n.tools});if(M.outcome===`unresolved`)return{next:null,session:M.session};b=M.session;let pe=getPendingInputRequestIds(b.state),N=convertStaleResponsesToUserMessage({history:M.messages,pendingRequestIds:pe,stepInput:dropStaleSessionLimitContinuationResponses({pendingRequestIds:pe,stepInput:j.input}),tools:n.tools}),P=N.stepInput,me=N.kind===`converted`?{...P,message:N.displayMessage}:P,F=contextStorage.getStore();shouldPrepareApprovalReplayTools({session:b,stepInput:P})&&F!==void 0&&n.prepareStepDynamicTools!==void 0&&await n.prepareStepDynamicTools({ctx:F,event:createStepStartedEvent({modelId:b.agent.modelReference?.id??`dynamic`,sequence:w.sequence,stepIndex:w.stepIndex,turnId:w.turnId}),messages:projectHistory(M.messages,b.state)});let he=shouldPrepareApprovalPolicyTools({session:b,stepInput:P})?buildResponseAuthorizationTools({authoredTools:n.tools,context:F}):n.tools,I=await coordinateApprovalDelivery({session:b,stepInput:P,tools:he});if(b=I.session,A){for(let e of I.feedback)await A(createMessageCompletedEvent({message:e,sequence:w.sequence,stepIndex:w.stepIndex,turnId:w.turnId}));let e=getApprovalAuditState(b.state);for(let t of e.activeCandidates.filter(e=>e.pendingEventEmitted!==!0))await A(createApprovalCandidateEvent({candidateId:t.candidateId,outcome:`pending`,requestId:t.requestId,responderPrincipalId:t.responder.principalId,sequence:w.sequence,stepIndex:w.stepIndex,turnId:w.turnId})),b={...b,state:markApprovalCandidatePendingEventEmitted({candidateId:t.candidateId,state:b.state})};for(let t of e.candidateHistory.filter(e=>e.eventEmitted!==!0&&e.status!==`allowed`))await A(createApprovalCandidateEvent({candidateId:t.candidateId,outcome:t.status,requestId:t.requestId,responderPrincipalId:t.responder.principalId,reason:t.reason,sequence:w.sequence,stepIndex:w.stepIndex,turnId:w.turnId})),b={...b,state:markApprovalCandidateHistoryEventEmitted({candidateId:t.candidateId,state:b.state})};for(let t of e.settlements.filter(e=>e.eventEmitted!==!0))await A(createApprovalSettledEvent({outcome:t.outcome===`allowed`?`approved`:`cancelled`,requestId:t.requestId,responderPrincipalId:t.actor.principalId,sequence:w.sequence,stepIndex:w.stepIndex,turnId:w.turnId})),b={...b,state:markApprovalSettlementEventEmitted({requestId:t.requestId,state:b.state})}}if(I.kind===`park`)return{next:null,session:b};if(I.kind===`continue-coordination`)return{next:runStep,session:I.stepInput===void 0?b:queueDeferredStepInput(b,I.stepInput)};if(I.challenges.length>0){if(A)for(let e of I.challenges)await A(createAuthorizationRequiredEvent({authorization:e.challenge,candidateId:e.candidateId,description:e.challenge.instructions??`Authorization required for ${e.name}`,name:e.name,sequence:w.sequence,stepIndex:w.stepIndex,turnId:w.turnId,webhookUrl:e.hookUrl}));let e=I.stepInput===void 0?b:queueDeferredStepInput(b,I.stepInput);return{next:null,session:{...e,state:setPendingAuthorization(e.state,{challenges:I.challenges})}}}let L=resolvePendingInput({deferMessagesWhileApprovalsPending:n.mode!==`conversation`,history:M.messages,resolveApprovalKey:f,session:b,stepInput:I.stepInput});if(L.outcome===`unresolved`){let e=M.outcome===`resolved`?{...L.session,history:[...M.messages]}:L.session;if(A&&n.mode===`conversation`&&L.deferredMessage===!0&&hasStepInput(v)){D!==void 0&&prepareDynamicInstructionPreamble(D,projectHistory(e.history,e.state));let t=[];try{let e=await preparePreambleTrace();w=await emitTurnPreamble(A,me??{},w,n.runtimeIdentity,e)}catch(n){if(t=D===void 0?[]:drainDynamicInstructionUserMessages(D),e={...e,history:[...e.history,...t]},b=e,!isDynamicModelSelectionError(n))throw n;return failModelSelection(n,{sessionStarted:!0,sequence:w.sequence,stepIndex:0,turnId:`turn_${w.sequence}`})}return t=D===void 0?[]:drainDynamicInstructionUserMessages(D),e={...e,history:[...e.history,...t]},w=await emitTurnEpilogue(A,w,n.mode),{next:null,session:setHarnessEmissionState(e,w)}}return M.outcome===`resolved`?(A&&n.mode===`conversation`&&(w=await emitTurnEpilogue(A,w,n.mode),e=setHarnessEmissionState(e,w)),{next:null,session:e}):{next:null,session:L.session}}if(L.resolvedInputs!==void 0)for(let e of L.resolvedInputs)await y?.publishInputResolutions({batch:e,sessionId:b.sessionId}),A&&await A(createInputResolvedEvent({resolutions:e.inputs.map(e=>{let t={kind:e.request.kind,outcome:e.outcome,requestId:e.request.requestId};return e.response===void 0?t:{...t,response:e.response}}),sequence:e.event.sequence,stepIndex:e.event.stepIndex,turnId:e.event.turnId}));if(A&&L.rejectedActions)for(let e of L.rejectedActions)for(let t of e.results)await A(createActionResultEvent({rejected:!0,result:t,sequence:e.event.sequence,stepIndex:e.event.stepIndex,turnId:e.event.turnId}));let ge=readClientContext(P),R=ge===void 0||L.deferredContext===!0?[]:ge.map(e=>({content:e,role:`user`})),z=[];if(P?.context!==void 0&&L.deferredContext!==!0)for(let e of P.context)z.push({content:e,role:`user`});let _e=normalizeUserContent(P?.message),ve=_e!==void 0&&!L.deferredMessage&&!L.consumedMessage?await stageAttachmentsToSandbox(_e):void 0;ve!==void 0&&z.push({content:ve,role:`user`});let B=[],V;if(A&&hasStepInput(v)){D!==void 0&&(prepareDynamicInstructionPreamble(D,projectHistory(L.session.history,L.session.state)),prepareMemoryPreamble(D,{history:L.messages,input:[...R,...z],state:L.session.state}));try{let e=await preparePreambleTrace();w=await emitTurnPreamble(A,me??{},w,n.runtimeIdentity,e)}catch(e){if(B=D===void 0?[]:drainDynamicInstructionUserMessages(D),V=D===void 0?void 0:drainMemoryCommit(D),b={...L.session,history:[...V?.history??L.session.history,...B],state:V?.state??L.session.state},!isDynamicModelSelectionError(e))throw e;return failModelSelection(e,{sessionStarted:!0,sequence:w.sequence,stepIndex:0,turnId:`turn_${w.sequence}`})}B=D===void 0?[]:drainDynamicInstructionUserMessages(D),V=D===void 0?void 0:drainMemoryCommit(D),y?.setTurnId(w.turnId)}let ye=V?.history??L.session.history,be=L.session.history.length;b=setHarnessEmissionState({...L.session,history:[...ye,...B],state:V?.state??L.session.state},w);let H=[...V?.history??L.messages.slice(0,be),...B,...V===void 0?L.messages.slice(be):[]],U=await applySessionLimitContinuation({config:n,emit:A,emissionState:w,limitContinuation:L.limitContinuation,session:b});if(U.result!==null)return U.result;b=U.session;let W=getAgentHandleStore(b.state);if(W!==void 0&&!hasUnansweredToolCall(H)&&W.handles.some(e=>e.phase===`addressed`)!==!0){let e=resolveAgentsAnnouncement({messages:projectHistory(H,b.state),store:W});e!==void 0&&H.push({content:e,role:`user`})}H=[...H,...z];let createModelMessages=e=>{if(R.length===0)return[...e];let t=Math.max(0,e.length-z.length);return[...e.slice(0,t),...R,...e.slice(t)]},G=projectHistory(createModelMessages(H),b.state),K=D,q;try{K!==void 0&&n.dispatchDynamicModelEvent!==void 0&&await n.dispatchDynamicModelEvent({ctx:K,event:{data:{sequence:w.sequence,stepIndex:w.stepIndex,turnId:w.turnId},type:`step.started`},messages:G}),q=await resolveActiveRuntimeModel({config:n,ctx:K,session:b})}catch(e){return failModelSelection(e,w)}b=q.session;let J=q.model,xe=detectPromptCachePath(J),Y=xe.kind===`anthropic-direct`?getAnthropicCacheMarker():void 0,Se=buildGatewayAttributionHeaders(J,n.runtimeIdentity),Ce=await maybeCompact({abortSignal:n.abortSignal,auth:K?.get(AuthKey)??null,emit:A,emissionState:w,historyProjector:n.historyProjector,messages:[...H],model:J,onCompaction:n.onCompaction,promptMessages:createModelMessages(H),resolveModel:n.resolveModel,runtimeIdentity:n.runtimeIdentity,session:b,telemetry:y?.telemetry()});b=Ce.session,Ce.compacted&&(H=Ce.messages),G=normalizeModelMessages(projectHistory(createModelMessages(H),b.state)),A&&await emitStepStarted(A,w,requireSessionModelReference(b).id,G);let we=getApprovedTools(b,f),Te=w.sequence===0,Ee=resolveDeliveryPolicy({hasScheduleProvenance:Te&&K?.get(ScheduleIdKey)!==void 0,hasOutputSchema:b.outputSchema!==void 0,isChild:K?.get(ParentSessionKey)!==void 0,isFirstTurn:Te,taskDeliveryPhase:K?.get(TurnTaskDeliveryKey)}),X=createCurrentMessages(G,{currentTurnMessages:z});if(K!==void 0){X.addSystem(buildDynamicInstructionMessages(K));let e=K.get(PendingSkillAnnouncementKey);e!==void 0&&e.length>0&&X.add(w.sequence,e);let t=K.get(TurnTaskStateKey);t!==void 0&&X.add(w.sequence,t)}Ee.instruction!==void 0&&X.add(w.sequence,Ee.instruction);let De=renderPendingApprovalsInstruction(getPendingInputBatches(b.state).flatMap(e=>e.requests));De!==void 0&&X.add(w.sequence,De,{cacheFriendly:!1});let Oe=await hydrateSandboxAttachments(X.nonSystemMessages),prepareModelCallInput=e=>{let t=e?[{role:`system`,content:e}]:[],n=b.agent.system?[{role:`system`,content:b.agent.system}]:[],r=X.systemMessages.length>0||t.length>0?[...t,...n,...X.systemMessages]:void 0,i=r!==void 0&&Y?applySystemCacheBreakpoint(r,Y):r,a=i===void 0?b.agent.system??void 0:mergeSystemInstructions(i);return{instructions:a,telemetryRuntimeContext:y?.resolveRuntimeContext({eveVersion,emissionState:w,environment,modelInput:{instructions:a,messages:Oe},session:b})}},ke=n.tools,runSingleModelCall=async e=>{let{instructions:t,telemetryRuntimeContext:r={}}=e.preparedInput??prepareModelCallInput(e.extraSystemNote);e.retryReason&&(r[`eve.retry.reason`]=e.retryReason);let a=e.trailingUserNote?[...Oe,{role:`user`,content:e.trailingUserNote}]:[...Oe],s=buildHarnessToolsWithDynamicSubagents(n.tools,K),c=createBackgroundToolCallBatch(),l=getAdvertisedTools({canRequestInput:n.capabilities?.requestInput===!0,delegatedCaller:k,session:b,tools:s}),u=new Map(l),d=await buildToolSetWithProviderTools({approvedTools:we,backgroundBatch:c,capabilities:n.capabilities,disabledProviderTools:e.disabledProviderTools,modelReference:requireSessionModelReference(b),tools:l});if(K!==void 0){let t=getAdvertisedTools({canRequestInput:n.capabilities?.requestInput===!0,delegatedCaller:k,session:b,tools:buildDynamicTools(K)}),r=buildToolSetFromDefinitions({approvedTools:we,backgroundBatch:c,capabilities:n.capabilities,disabledProviderTools:e.disabledProviderTools,tools:t}),i=new Map;for(let e of t)i.has(e.name)||i.set(e.name,e);for(let[e,t]of Object.entries(r)){if(l.get(e)?.behavior?.handling?.kind===`dispatch`)throw Error(`Dynamic tool "${e}" collides with a runtime-visible subagent.`);let n=i.get(e);if(n===void 0)throw Error(`Dynamic tool "${e}" has no effective harness definition.`);u.set(e,n),d[e]=t}}b.outputSchema!==void 0&&(d[FINAL_OUTPUT_TOOL_NAME]=buildFinalOutputTool(b.outputSchema));let f=n.workflow===!0?{maxSubagents:n.workflowMaxSubagents}:void 0,p=await getAdvertisedTools({canRequestInput:n.capabilities?.requestInput===!0,delegatedCaller:k,modelTools:d,session:b,tools:u,workflow:f});b=p.session,ke=p.harnessTools;let m=p.modelTools,h=Y?applyLastToolCacheBreakpoint(m,Y):m,ee=activeTurnId(w),g=y?.prepareAttempt({attemptIndex:e.attemptIndex,runtimeContext:r,stepIndex:w.stepIndex,turnId:ee});fe=g?.scope;let _=buildStepHooks({auth:K?.get(AuthKey)??null,cachePath:xe,emit:A,emissionState:w,emitStepStarted:e.suppressStepStartedEmission!==!0,marker:Y,session:b}),v=new ToolLoopAgent({headers:Se,instructions:t,model:J,onLanguageModelCallEnd(e){for(let t of e.content)t.type!==`tool-call`||t.providerExecuted===!0||isInvalidToolCall(t)||c.register({callId:t.toolCallId,input:t.input,toolName:t.toolName})},onToolExecutionEnd:logToolExecutionError,onError(e){summarizeKnownError(e.error)?.tags.includes(`config`)!==!0&&logError(log,`tool-loop stream error`,e.error)},onStepFinish:_.onStepFinish,prepareStep:_.prepareStep,reasoning:b.agent.reasoning,runtimeContext:r,stopWhen:isStepCount(1),telemetry:g?.telemetry,toolApproval:buildToolApproval(m),tools:h}),executeModelCall=async()=>{if(A){let e=[...n.tools].filter(([e,t])=>t.behavior?.handling?.kind===`dispatch`&&u.get(e)===void 0).map(([e])=>e),t=[...u.values()].filter(e=>e.behavior?.handling?.kind===`request-input`).map(e=>e.name),r=new Set([FINAL_OUTPUT_TOOL_NAME,...e,...t]),i=await v.stream({abortSignal:n.abortSignal,messages:a}),{emittedActionCallIds:o,handledInlineToolResultCallIds:s,invalidInputToolCallIds:c,inlineAuthorizationResults:l,trailingInlineToolResultParts:d}=await emitStreamContent(A,w,i.fullStream,{excludedActionToolNames:r,tools:u});throwIfTurnAborted(n.abortSignal);let[f,p]=await Promise.all([_.stepResult,i.responseMessages]);if(isEmptyModelResponse(f)&&extractToolResultCallIds(p).size===0&&l.length===0&&d.length===0)throw new EmptyModelResponseError;await emitStepActions(A,w,f,{emittedActionCallIds:o,excludedActionCallIds:c,excludedActionToolNames:r,handledInlineToolResultCallIds:s,tools:u});let m=f.toolResults,h=new Map(m.map(e=>[e.toolCallId,e]));for(let e of l)h.set(e.toolCallId,e);return withAccumulatedResponseMessages({invalidInputToolCallIds:c,responseMessages:appendMissingToolResultMessages({append:d,responseMessages:p}),stepResult:f,toolResults:[...h.values()]})}let e=await v.generate({abortSignal:n.abortSignal,messages:a});throwIfTurnAborted(n.abortSignal);let t=await _.stepResult;if(isEmptyModelResponse(t)&&extractToolResultCallIds(e.responseMessages).size===0)throw new EmptyModelResponseError;return withAccumulatedResponseMessages({responseMessages:e.responseMessages,stepResult:t})};try{let e=await executeModelCall();return await g?.complete(),e}catch(e){return await g?.fail(e),rethrowNoOutputAsEmptyResponse(e)}},Ae=0,runOneModelCall=async e=>runModelCallWithRetries(t=>runSingleModelCall({...e,attemptIndex:Ae++,preparedInput:t===1?e.preparedInput:void 0,suppressStepStartedEmission:t!==1||e.suppressStepStartedEmission}),{sessionId:b.sessionId,turnId:w.turnId},n.abortSignal),je=prepareModelCallInput(),Me=await continuePendingWorkflowInterrupt({childResults:P?.runtimeActionResults,config:n,emit:A,emissionState:w,runStep,session:b,tools:buildHarnessToolsWithDynamicSubagents(n.tools,K)});if(Me!==null)return Me;let Ne=await enforceSessionTokenLimit({config:n,emit:A,emissionState:w,messages:G,session:b});if(Ne!==null)return Ne;let Z;try{Z=await runOneModelCall({preparedInput:je,suppressStepStartedEmission:!0})}catch(e){throwIfTurnAborted(n.abortSignal);let r=await runModelCallRecoveryPipeline({error:e,stages:[e=>attemptUnsupportedProviderToolRecovery({error:e.error,runOneModelCall,sessionId:b.sessionId,turnId:w.turnId}),e=>attemptEmptyResponseRecovery({emptyDeliveryEnabled:Ee.allowsEmptyDelivery,error:e.error,retryCallOptions:e.retryCallOptions,runOneModelCall,sessionId:b.sessionId,turnId:w.turnId})]});if(throwIfTurnAborted(n.abortSignal),r.outcome===`recovered`)Z=r.result;else{let e=r.error;if(y?.recordError(e),!A)throw e;let i=extractWorkflowStreamWriteErrorDetails(e);if(i!==null){let n=createErrorId();return log.error(`workflow stream write failed — parking session for retry by the user`,{...i,errorId:n,error:e,sessionId:b.sessionId,turnId:w.turnId}),w=await emitRecoverableFailedTurn(A,w,{code:`WORKFLOW_STREAM_WRITE_FAILED`,continuationToken:b.continuationToken,details:{...i,errorId:n},message:toErrorMessage(e)}),{next:null,session:setHarnessEmissionState(b,w)}}let a=classifyModelCallError(e),o=createErrorId(),s=summarizeKnownError(e),c=s===null?extractUpstreamRejectionMessage(e):null,l=s?.message??c?.message??toErrorMessage(e),u=s?.hint===void 0?l:`${l} ${s.hint}`,d=extractModelCallErrorDetails(e),f=buildModelCallFailureDetails({catalogSummary:s,error:e,errorId:o,modelCallDetails:d,upstreamRejection:c}),m=buildModelCallFailureLogFields({error:e,errorId:o,modelCallDetails:d,recognized:s!==null||c!==null,sessionId:b.sessionId,turnId:w.turnId});if(a===`terminal`)return s===null?log.error(c?.message??`model call failed terminally`,m):log.error(`${s.name}: ${s.message}`,{errorId:o,hint:s.hint,sessionId:b.sessionId,turnId:w.turnId}),await emitFailedStep(A,w,{code:`MODEL_CALL_FAILED`,details:f,message:l,sessionId:b.sessionId}),{next:n.mode===`task`||de?{done:!0,isError:!0,output:u}:{done:!0,output:``},session:b};if(n.mode===`task`){if(a===`recoverable`&&!(e instanceof EmptyModelResponseError))throw log.warn(c?.message??`model call failed recoverably in task mode — rethrowing for durable step retry`,m),e;return log.error(c?.message??`model call failed; failing the task run`,m),await emitFailedStep(A,w,{code:`MODEL_CALL_FAILED`,details:f,message:l,sessionId:b.sessionId}),{next:{done:!0,isError:!0,output:u},session:b}}log.error(c?.message??`model call failed — parking session for retry by the user`,m),w=await emitRecoverableFailedTurn(A,w,{code:`MODEL_CALL_FAILED`,continuationToken:b.continuationToken,details:f,message:l});let h={isError:!0,output:u};return b={...b,outputSchema:void 0},{next:null,session:setHarnessEmissionState(b,w),settledTurn:h}}}let Q=accumulateTurnUsage({previous:getTurnUsageState(b.state),turnId:w.turnId,usage:extractTokenUsageDelta({costUsd:extractGatewayCostUsd(Z.providerMetadata),usage:Z.usage})});b=setTurnUsageState(b,Q);let $;try{$=formatLanguageModelGatewayId(J)}catch{$=void 0}let Pe=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":n.tools.size}).catch(e=>{logError(log,`Workflow attribute write failed unexpectedly`,e,{sessionId:b.sessionId,turnId:w.turnId})}),Fe;try{Fe=await handleStepResult({config:n,emit:A,emissionState:w,delegatedCaller:k,durableModelPromptMessageCount:R.length===0?G.length:void 0,promptMessages:H,result:Z,runStep,session:b,runtimeActionTools:ke})}finally{await Pe}return Fe}return runStep}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:n,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(n,i),...a}:{errorId:i,message:toErrorMessage(n),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}function hasUnansweredToolCall(e){let t=new Set,n=new Set;for(let r of e)if(Array.isArray(r.content))for(let e of r.content)typeof e!=`object`||!e||(e.type===`tool-call`&&t.add(e.toolCallId),e.type===`tool-result`&&n.add(e.toolCallId));for(let e of t)if(!n.has(e))return!0;return!1}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:o}=e,{emissionState:s,session:c}=e,l=resolveAssistantStepText(i.response.messages,i.text),u=i.finishReason!==`tool-calls`&&i.toolCalls.length===0&&hasEmptyDeliverySentinel(l),d=getInvalidToolCallInputErrors({toolCalls:i.toolCalls}),f=new Set([...i.invalidInputToolCallIds??[],...i.toolCalls.filter(isInvalidToolCall).map(e=>e.toolCallId),...d.map(e=>e.toolCallId)]),p=u?[]:appendMissingToolResultMessages({append:d.map(e=>createToolResultMessagePartFromToolError(e)),responseMessages:i.response.messages}),m=u?null:l,h=new Set;for(let e of[...i.content??[],...i.toolResults??[]])(e.type===`tool-result`||e.type===`tool-error`)&&e.providerExecuted===!0&&h.add(e.toolCallId);let ee=normalizeProviderToolHistory({messages:p,providerExecutedOutcomeIds:h}),v=ee.messages,y={...c,compaction:createNextCompactionConfig(c.compaction,e.durableModelPromptMessageCount,i)},te=t.workflow===!0?readWorkflowContinuationSecurity(y):void 0;if(te!==void 0){let t=await getWorkflowSandboxInterrupt(i,te);if(t!==void 0){if(!isWorkflowRuntimeActionInterrupt(t))throw Error(`Unsupported Workflow interrupt kind "${t.payload.kind}".`);return await parkOnWorkflowInterrupt({baseSession:y,emit:n,emissionState:s,interrupt:t,promptMessages:r,responseMessages:v,tools:e.runtimeActionTools,usedCalls:0})}}let x=extractToolApprovalInputRequests({content:i.content??[],excludedCallIds:f}),ne=new Set(x.map(e=>e.action.callId)),S=extractQuestionInputRequests({toolCalls:i.toolCalls,tools:e.runtimeActionTools,excludedCallIds:new Set([...f,...ne])}),C=[...x,...S],re=renderPendingApprovalsSnippet(x),ie=v.findIndex(e=>e.role!==`tool`),w=ie===-1?v:v.slice(0,ie),ae=v.slice(w.length),oe=[...r,...w,...re===void 0?[]:[{content:re,role:`user`}]],T=getAdvertisedTools({canRequestInput:e.config.capabilities?.requestInput===!0,delegatedCaller:e.delegatedCaller,session:y,tools:e.runtimeActionTools}),E=(i.toolCalls??[]).filter(e=>!f.has(e.toolCallId)).filter(t=>e.runtimeActionTools.get(t.toolName)?.behavior?.handling?.kind===`dispatch`&&e.runtimeActionTools.get(t.toolName)?.execution!==`background`).filter(e=>T.get(e.toolName)?.behavior?.handling?.kind===`dispatch`&&T.get(e.toolName)?.execution!==`background`?!0:(log.warn(`runtime action tool call blocked because tool is not advertised`,{callId:e.toolCallId,sessionId:y.sessionId,toolName:e.toolName}),!1)).map(e=>createPendingDispatchActionFromToolCall({toolCall:e,tools:T}));if(E.length>0){if(C.length===0)return{next:null,session:setHarnessEmissionState(setPendingRuntimeActionBatch({actions:E,event:{sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId},responseMessages:v,session:{...y,history:[...r]}}),advanceStep(s))};let e=setPendingRuntimeActionBatch({actions:E,event:{sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId},responseMessages:ae,session:{...y,history:oe}});return e=appendPendingInputBatch({event:{sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId},requests:C,responseMessages:[],session:e}),n&&await n(createInputRequestedEvent({requests:C,sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId})),{next:null,session:setHarnessEmissionState(e,advanceStep(s))}}if(C.length>0){let e=buildResponseAuthorizationTools({authoredTools:t.tools,context:contextStorage.getStore()}),r=appendPendingInputBatch({event:{sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId},requests:C,responseAuthRequiredRequestIds:x.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:ae,session:{...y,history:oe}});return n&&(await n(createInputRequestedEvent({requests:C,sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId})),t.mode===`conversation`&&(s=await emitTurnEpilogue(n,s,t.mode),r=setHarnessEmissionState(r,s))),{next:hasDeferredStepInput(r)?o:null,session:r}}let D=resolveInlineAuthorizationInterrupt({messages:[...r,...v],toolResults:i.toolResults});if(D){let{challenges:e,history:r}=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:s.sequence,stepIndex:s.stepIndex,turnId:s.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:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId}));t.mode===`conversation`&&(s=await emitTurnEpilogue(n,s,t.mode))}return{next:null,session:setHarnessEmissionState({...y,history:r,state:setPendingAuthorization(y.state,{challenges:e})},s)}}let se=v,ce=[...r,...se],O={...y,history:ce};return!(O.outputSchema!==void 0&&extractFinalOutput(i)!==void 0)&&(se.at(-1)?.role===`tool`||ee.outcomeEndsResponse||hasDeferredStepInput(O))?(n&&(s=advanceStep(s),O=setHarnessEmissionState(O,s)),{next:o,session:O}):t.mode===`task`?finishTaskTurn({emissionState:s,emit:n,history:r,result:i,schema:O.outputSchema,session:O,stepOutput:m}):finishConversationTurn({emissionState:s,emit:n,history:r,result:i,schema:O.outputSchema,session:O,stepOutput:m})}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,i){return await e(createResultCompletedEvent({result:n,sequence:t.sequence,stepIndex:t.stepIndex,turnId:t.turnId})),emitTurnEpilogue(e,t,r,i)}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.history),s=setHarnessEmissionState(s,o)),{next:{done:!0,output:a??``},session:s};let c=extractFinalOutput(r);return c===void 0?(s={...s,outputSchema: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.history),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.history),s=setHarnessEmissionState(s,o)),{next:null,session:s,settledTurn:{output:a??``}};let c=extractFinalOutput(r);if(c===void 0){s={...s,outputSchema: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.history),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 r=e.childResults??[],a=getWorkflowRuntimeActionInterrupts(n);e.emit!==void 0&&r.length>0&&await emitWorkflowActionResults({emit:e.emit,emissionState:e.emissionState,interrupts:a,results:r});let o=getWorkflowContinuationSecurity(e.session),s;try{let t=buildWorkflowHostTools({tools:e.tools}),i=n,a=0;for(;;){s=await continueWorkflowSandboxInterrupt({bridgeRequestLimit:resolveWorkflowSandboxBridgeRequestLimit(e.config.workflowMaxSubagents),continuationSecurity:o,interrupt:i,resolution:r[a]?.output,tools:t});let n=await unwrapWorkflowSandboxResult(s,o);if(n.status!==`interrupted`||!isWorkflowRuntimeActionInterrupt(n.interrupt)||a+1>=r.length)break;let c=getWorkflowRuntimeActionInterrupts(n.interrupt)[0];if(c===void 0)throw Error(`Workflow continuation contains no pending runtime-action interrupt.`);a++,i=c}}catch(e){logError(log,`Workflow interrupt continuation failed`,e),s={error:`workflow_continuation_failed`,message:toErrorMessage(e),retryable:!1}}let c=await unwrapWorkflowSandboxResult(s,o),l=c.status===`interrupted`?c.interrupt:c.output,u=replaceWorkflowToolResult([...e.session.history,...t.responseMessages],n.outerToolCallId,l),d=clearPendingWorkflowInterrupt({...e.session,history:u});if(c.status===`interrupted`){if(!isWorkflowRuntimeActionInterrupt(c.interrupt))throw Error(`Unsupported Workflow interrupt kind "${c.interrupt.payload.kind}".`);let n=e.session.history.length,r=u.slice(0,n),i=u.slice(n);return d={...d,history:r},await parkOnWorkflowInterrupt({baseSession:d,emit:e.emit,emissionState:e.emissionState,interrupt:c.interrupt,promptMessages:r,responseMessages:i,tools:e.tools,usedCalls:t.usedCalls})}return{next:e.runStep,session:d}}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}})}async function parkOnWorkflowInterrupt(e){let t=getWorkflowRuntimeActionInterrupts(e.interrupt),n=t[0];if(n===void 0)throw Error(`Workflow continuation contains no pending runtime-action interrupt.`);e.emit!==void 0&&await emitWorkflowActionsRequested({emit:e.emit,emissionState:e.emissionState,interrupts:t,tools:e.tools});let r={...e.baseSession,history:[...e.promptMessages]};return{next:null,session:setHarnessEmissionState(setPendingWorkflowInterrupt({interrupt:n,responseMessages:e.responseMessages,session:r,usedCalls:e.usedCalls}),e.emissionState)}}function createNextCompactionConfig(e,t,n){let r={recentWindowSize:e.recentWindowSize,threshold:e.threshold,thresholdPercent:e.thresholdPercent};return n.usage?.inputTokens!==void 0&&t!==void 0&&(r.lastKnownInputTokens=n.usage.inputTokens,r.lastKnownPromptMessageCount=t),r}async function maybeCompact(e){let{emit:t,emissionState:n}=e,r=e.messages,i=e.session,o=e.promptMessages??r,s=e.historyProjector?.({messages:o,state:i.state})??o,c=e.force===!0||shouldCompact(s,i.compaction),l=shouldCanonicalizeMemory(r);if(!c&&!l)return{compacted:!1,messages:r,session:i};let u=await resolveCompactionModel({compactionModelReference:i.agent.compactionModelReference,model:e.model,modelReference:requireSessionModelReference(i),resolveModel:e.resolveModel}),d=mergeProviderSafetyIdentifier(i.agent.compactionModelReference??requireSessionModelReference(i),u.providerOptions,e.auth);if(t){let e=contextStorage.getStore();e!==void 0&&prepareMemoryCompaction(e,{history:r,state:i.state}),await t(createCompactionRequestedEvent({modelId:formatLanguageModelGatewayId(u.model),sequence:n.sequence,sessionId:i.sessionId,turnId:n.turnId,usageInputTokens:getInputTokenCount(s,i.compaction)}),s)}let f=canonicalizeMemoryRecords(r),p=e.historyProjector?.({messages:f.ordinary,state:i.state})??f.ordinary,m=c?await compactMessages([...p],u.model,i.compaction,d,e.telemetry,buildGatewayAttributionHeaders(u.model,e.runtimeIdentity),e.abortSignal,e.force===!0):[...p];if(r=[...f.memory,...m],e.onCompaction)for(let t of e.onCompaction())r.push(t);if(t){let o=contextStorage.getStore();if(o!==void 0&&prepareMemoryCompaction(o,{history:r,state:i.state}),await t(createCompactionCompletedEvent({modelId:formatLanguageModelGatewayId(u.model),sequence:n.sequence,sessionId:i.sessionId,turnId:n.turnId}),e.historyProjector?.({messages:r,state:i.state})??r),o!==void 0){let e=drainMemoryCommit(o);e!==void 0&&(r=[...e.history],i={...i,state:e.state})}}return{compacted:!0,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))}}}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)))}}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(n){let r=n.handleEvent,f=resolveApprovalKeyFromTools(n.tools);async function runStep(e,t){return n.instrumentation?.runStep({environment,eveVersion,hasInput:hasStepInput(t),session:e},e=>executeStepBody(e.session,t,e))??executeStepBody(e,t)}async function executeStepBody(_,v,y){let b=_,S=createHistoryViewPreparer({previous:n.historyView,projector:n.historyProjector});S(b.history,b.state);let projectHistory=(e,t)=>S(e,t).messages,w=getHarnessEmissionState(b.state),T=contextStorage.getStore(),E=T?.get(ParentSessionKey),D=T?.get(SessionCallbackKey),ue=E!==void 0||D!==void 0,de,O=y?.createHandleEvent({getAttemptScope:()=>de,handleEvent:r,turnId:activeTurnId(w)})??r,failModelSelection=async(e,r)=>{if(throwIfTurnAborted(n.abortSignal),y?.recordError(e),!O)throw e;let i=createErrorId(),a=toErrorMessage(e);return log.error(`model selection failed terminally`,{error:e,errorId:i,sessionId:b.sessionId,turnId:r.turnId}),await emitFailedStep(O,r,{code:`MODEL_SELECTION_FAILED`,details:{errorId:i},message:a,sessionId:b.sessionId}),{next:n.mode===`task`||ue?{done:!0,isError:!0,output:a}:{done:!0,output:``},session:b}},preparePreambleTrace=async()=>await y?.preparePreamble({sequence:w.sequence,sessionStarted:w.sessionStarted,traceContext:y?.traceContext,turnId:`turn_${w.sequence}`});if(n.clearOnly===!0)return b={...b,compaction:{recentWindowSize:b.compaction.recentWindowSize,threshold:b.compaction.threshold,thresholdPercent:b.compaction.thresholdPercent},history:[],state:clearMemorySessionState(b.state)},await O?.(createContextClearedEvent({sequence:w.sequence,sessionId:b.sessionId,turnId:activeTurnId(w)})),await O?.(createSessionWaitingEvent()),{next:null,session:b};if(n.compactOnly===!0){if(b.history.length>0)try{let e=contextStorage.getStore(),t=await resolveActiveRuntimeModel({config:n,ctx:e,session:b});b=t.session;let r=await maybeCompact({abortSignal:n.abortSignal,auth:e?.get(AuthKey)??null,emit:O,emissionState:{...w,turnId:activeTurnId(w)},force:!0,historyProjector:n.historyProjector,messages:[...b.history],model:t.model,onCompaction:n.onCompaction,resolveModel:n.resolveModel,runtimeIdentity:n.runtimeIdentity,session:b,telemetry:y?.telemetry()});b={...r.session,compaction:{recentWindowSize:r.session.compaction.recentWindowSize,threshold:r.session.compaction.threshold,thresholdPercent:r.session.compaction.thresholdPercent},history:r.messages}}catch(e){logError(log,`manual session compaction failed`,e,{sessionId:b.sessionId})}return await O?.(createSessionWaitingEvent()),{next:null,session:b}}let k=consumeDeferredStepInput({input:v,preferCurrentInput:n.mode!==`conversation`&&v!==void 0&&hasPendingApprovalBatch(b),session:b});b=k.session;let A=await resolvePendingCoordination({emit:O,session:b,stepInput:k.input,tools:n.tools});if(A.outcome===`unresolved`)return{next:null,session:A.session};b=A.session;let fe=getPendingInputRequestIds(b.state),j=convertStaleResponsesToUserMessage({history:A.messages,pendingRequestIds:fe,stepInput:dropStaleSessionLimitContinuationResponses({pendingRequestIds:fe,stepInput:k.input}),tools:n.tools}),M=j.stepInput,pe=j.kind===`converted`?{...M,message:j.displayMessage}:M,N=contextStorage.getStore();N!==void 0&&n.resolveStepDynamicTools!==void 0&&shouldPrepareApprovalReplayTools({session:b,stepInput:M})&&await n.resolveStepDynamicTools({ctx:N,event:createStepStartedEvent({modelId:b.agent.modelReference?.id??`dynamic`,sequence:w.sequence,stepIndex:w.stepIndex,turnId:w.turnId}),messages:projectHistory(A.messages,b.state)});let me=shouldPrepareApprovalPolicyTools({session:b,stepInput:M})?buildResponseAuthorizationTools({authoredTools:n.tools,context:N}):n.tools,P=await coordinateApprovalDelivery({session:b,stepInput:M,tools:me});if(b=P.session,O){for(let e of P.feedback)await O(createMessageCompletedEvent({message:e,sequence:w.sequence,stepIndex:w.stepIndex,turnId:w.turnId}));let e=getApprovalAuditState(b.state);for(let t of e.activeCandidates.filter(e=>e.pendingEventEmitted!==!0))await O(createApprovalCandidateEvent({candidateId:t.candidateId,outcome:`pending`,requestId:t.requestId,responderPrincipalId:t.responder.principalId,sequence:w.sequence,stepIndex:w.stepIndex,turnId:w.turnId})),b={...b,state:markApprovalCandidatePendingEventEmitted({candidateId:t.candidateId,state:b.state})};for(let t of e.candidateHistory.filter(e=>e.eventEmitted!==!0&&e.status!==`allowed`))await O(createApprovalCandidateEvent({candidateId:t.candidateId,outcome:t.status,requestId:t.requestId,responderPrincipalId:t.responder.principalId,reason:t.reason,sequence:w.sequence,stepIndex:w.stepIndex,turnId:w.turnId})),b={...b,state:markApprovalCandidateHistoryEventEmitted({candidateId:t.candidateId,state:b.state})};for(let t of e.settlements.filter(e=>e.eventEmitted!==!0))await O(createApprovalSettledEvent({outcome:t.outcome===`allowed`?`approved`:`cancelled`,requestId:t.requestId,responderPrincipalId:t.actor.principalId,sequence:w.sequence,stepIndex:w.stepIndex,turnId:w.turnId})),b={...b,state:markApprovalSettlementEventEmitted({requestId:t.requestId,state:b.state})}}if(P.kind===`park`)return{next:null,session:b};if(P.kind===`continue-coordination`)return{next:runStep,session:P.stepInput===void 0?b:queueDeferredStepInput(b,P.stepInput)};if(P.challenges.length>0){if(O)for(let e of P.challenges)await O(createAuthorizationRequiredEvent({authorization:e.challenge,candidateId:e.candidateId,description:e.challenge.instructions??`Authorization required for ${e.name}`,name:e.name,sequence:w.sequence,stepIndex:w.stepIndex,turnId:w.turnId,webhookUrl:e.hookUrl}));let e=P.stepInput===void 0?b:queueDeferredStepInput(b,P.stepInput);return{next:null,session:{...e,state:setPendingAuthorization(e.state,{challenges:P.challenges})}}}let F=resolvePendingInput({deferMessagesWhileApprovalsPending:n.mode!==`conversation`,history:A.messages,resolveApprovalKey:f,session:b,stepInput:P.stepInput});if(F.outcome===`unresolved`){let e=A.outcome===`resolved`?{...F.session,history:[...A.messages]}:F.session;if(O&&n.mode===`conversation`&&F.deferredMessage===!0&&hasStepInput(v)){T!==void 0&&prepareDynamicInstructionPreamble(T,projectHistory(e.history,e.state));let t=[];try{let e=await preparePreambleTrace();w=await emitTurnPreamble(O,pe??{},w,n.runtimeIdentity,e)}catch(n){if(t=T===void 0?[]:drainDynamicInstructionUserMessages(T),e={...e,history:[...e.history,...t]},b=e,!isDynamicModelSelectionError(n))throw n;return failModelSelection(n,{sessionStarted:!0,sequence:w.sequence,stepIndex:0,turnId:`turn_${w.sequence}`})}return t=T===void 0?[]:drainDynamicInstructionUserMessages(T),e={...e,history:[...e.history,...t]},w=await emitTurnEpilogue(O,w,n.mode),{next:null,session:setHarnessEmissionState(e,w)}}return A.outcome===`resolved`?(O&&n.mode===`conversation`&&(w=await emitTurnEpilogue(O,w,n.mode),e=setHarnessEmissionState(e,w)),{next:null,session:e}):{next:null,session:F.session}}if(F.resolvedInputs!==void 0)for(let e of F.resolvedInputs)await y?.publishInputResolutions({batch:e,sessionId:b.sessionId}),O&&await O(createInputResolvedEvent({resolutions:e.inputs.map(e=>{let t={kind:e.request.kind,outcome:e.outcome,requestId:e.request.requestId};return e.response===void 0?t:{...t,response:e.response}}),sequence:e.event.sequence,stepIndex:e.event.stepIndex,turnId:e.event.turnId}));if(O&&F.rejectedActions)for(let e of F.rejectedActions)for(let t of e.results)await O(createActionResultEvent({rejected:!0,result:t,sequence:e.event.sequence,stepIndex:e.event.stepIndex,turnId:e.event.turnId}));let he=readClientContext(M),I=he===void 0||F.deferredContext===!0?[]:he.map(e=>({content:e,role:`user`})),L=[];if(M?.context!==void 0&&F.deferredContext!==!0)for(let e of M.context)L.push({content:e,role:`user`});let ge=normalizeUserContent(M?.message),_e=ge!==void 0&&!F.deferredMessage&&!F.consumedMessage?await stageAttachmentsToSandbox(ge):void 0;_e!==void 0&&L.push({content:_e,role:`user`});let R=[],z;if(O&&hasStepInput(v)){T!==void 0&&(prepareDynamicInstructionPreamble(T,projectHistory(F.session.history,F.session.state)),prepareMemoryPreamble(T,{history:F.messages,input:[...I,...L],state:F.session.state}));try{let e=await preparePreambleTrace();w=await emitTurnPreamble(O,pe??{},w,n.runtimeIdentity,e)}catch(e){if(R=T===void 0?[]:drainDynamicInstructionUserMessages(T),z=T===void 0?void 0:drainMemoryCommit(T),b={...F.session,history:[...z?.history??F.session.history,...R],state:z?.state??F.session.state},!isDynamicModelSelectionError(e))throw e;return failModelSelection(e,{sessionStarted:!0,sequence:w.sequence,stepIndex:0,turnId:`turn_${w.sequence}`})}R=T===void 0?[]:drainDynamicInstructionUserMessages(T),z=T===void 0?void 0:drainMemoryCommit(T),y?.setTurnId(w.turnId)}let ve=z?.history??F.session.history,ye=F.session.history.length;b=setHarnessEmissionState({...F.session,history:[...ve,...R],state:z?.state??F.session.state},w);let B=[...z?.history??F.messages.slice(0,ye),...R,...z===void 0?F.messages.slice(ye):[]],V=await applySessionLimitContinuation({config:n,emit:O,emissionState:w,limitContinuation:F.limitContinuation,session:b});if(V.result!==null)return V.result;b=V.session;let be=getAgentHandleStore(b.state);if(!hasUnansweredToolCall(B)){let e=await T?.get(BackgroundToolExecutorKey)?.readAgentViews?.(),t=resolveAgentsAnnouncement({agentViews:e===void 0||e.length===0?void 0:[...projectParkedAgentHandles(be??{handles:[]}).map(e=>({availability:`available`,id:e.identity.id,name:e.identity.name,statusLine:e.phase===`parked`?e.lastStatus:void 0})),...e],messages:projectHistory(B,b.state),store:be});t!==void 0&&B.push({content:t,role:`user`})}B=[...B,...L];let createModelMessages=e=>{if(I.length===0)return[...e];let t=Math.max(0,e.length-L.length);return[...e.slice(0,t),...I,...e.slice(t)]},H=projectHistory(createModelMessages(B),b.state),U=T,W;try{U!==void 0&&n.dispatchDynamicModelEvent!==void 0&&await n.dispatchDynamicModelEvent({ctx:U,event:{data:{sequence:w.sequence,stepIndex:w.stepIndex,turnId:w.turnId},type:`step.started`},messages:H}),W=await resolveActiveRuntimeModel({config:n,ctx:U,session:b})}catch(e){return failModelSelection(e,w)}b=W.session;let G=W.model,xe=detectPromptCachePath(G),K=xe.kind===`anthropic-direct`?getAnthropicCacheMarker():void 0,Se=buildGatewayAttributionHeaders(G,n.runtimeIdentity),q=await maybeCompact({abortSignal:n.abortSignal,auth:U?.get(AuthKey)??null,emit:O,emissionState:w,historyProjector:n.historyProjector,messages:[...B],model:G,onCompaction:n.onCompaction,promptMessages:createModelMessages(B),resolveModel:n.resolveModel,runtimeIdentity:n.runtimeIdentity,session:b,telemetry:y?.telemetry()});b=q.session,q.compacted&&(B=q.messages),H=normalizeModelMessages(projectHistory(createModelMessages(B),b.state)),O&&await emitStepStarted(O,w,requireSessionModelReference(b).id,H);let Ce=getApprovedTools(b,f),we=w.sequence===0,J=resolveDeliveryPolicy({hasScheduleProvenance:we&&U?.get(ScheduleIdKey)!==void 0,hasOutputSchema:b.outputSchema!==void 0,isChild:U?.get(ParentSessionKey)!==void 0,isFirstTurn:we,taskDeliveryPhase:U?.get(TurnTaskDeliveryKey)}),Y=createCurrentMessages(H,{currentTurnMessages:L});if(U!==void 0){Y.addSystem(buildDynamicInstructionMessages(U));let e=U.get(PendingSkillAnnouncementKey);e!==void 0&&e.length>0&&Y.add(w.sequence,e);let t=U.get(TurnTaskStateKey);t!==void 0&&Y.add(w.sequence,t)}J.instruction!==void 0&&Y.add(w.sequence,J.instruction);let Te=renderPendingApprovalsInstruction(getPendingInputBatches(b.state).flatMap(e=>e.requests));Te!==void 0&&Y.add(w.sequence,Te,{cacheFriendly:!1});let X=await hydrateSandboxAttachments(Y.nonSystemMessages),prepareModelCallInput=e=>{let t=e?[{role:`system`,content:e}]:[],n=b.agent.system?[{role:`system`,content:b.agent.system}]:[],r=Y.systemMessages.length>0||t.length>0?[...t,...n,...Y.systemMessages]:void 0,i=r!==void 0&&K?applySystemCacheBreakpoint(r,K):r,a=i===void 0?b.agent.system??void 0:mergeSystemInstructions(i);return{instructions:a,telemetryRuntimeContext:y?.resolveRuntimeContext({eveVersion,emissionState:w,environment,modelInput:{instructions:a,messages:X},session:b})}},Ee=n.tools,runSingleModelCall=async e=>{let{instructions:t,telemetryRuntimeContext:r={}}=e.preparedInput??prepareModelCallInput(e.extraSystemNote);e.retryReason&&(r[`eve.retry.reason`]=e.retryReason);let a=e.trailingUserNote?[...X,{role:`user`,content:e.trailingUserNote}]:[...X],s=buildHarnessToolsWithDynamicSubagents(n.tools,U),c=createBackgroundToolCallBatch(),l=getAdvertisedTools({session:b,tools:s});Ee=l;let u=await buildToolSetWithProviderTools({approvedTools:Ce,backgroundBatch:c,capabilities:n.capabilities,disabledProviderTools:e.disabledProviderTools,modelReference:requireSessionModelReference(b),tools:l});if(U!==void 0){let t=getAdvertisedTools({session:b,tools:buildDynamicTools(U)}),r=buildToolSetFromDefinitions({approvedTools:Ce,backgroundBatch:c,capabilities:n.capabilities,disabledProviderTools:e.disabledProviderTools,tools:t});for(let[e,t]of Object.entries(r)){let n=l.get(e);if(n?.runtimeAction!==void 0||n?.workflowId!==void 0)throw Error(`Dynamic tool "${e}" collides with a coordination-visible deferred tool.`);u[e]=t}}b.outputSchema!==void 0&&(u[FINAL_OUTPUT_TOOL_NAME]=buildFinalOutputTool(b.outputSchema));let d=n.workflow===!0?{maxSubagents:n.workflowMaxSubagents}:void 0,f=await getAdvertisedTools({modelTools:u,session:b,tools:l,workflow:d});b=f.session;let p=f.modelTools,m=K?applyLastToolCacheBreakpoint(p,K):p,h=activeTurnId(w),g=y?.prepareAttempt({attemptIndex:e.attemptIndex,runtimeContext:r,stepIndex:w.stepIndex,turnId:h});de=g?.scope;let _=buildStepHooks({auth:U?.get(AuthKey)??null,cachePath:xe,emit:O,emissionState:w,emitStepStarted:e.suppressStepStartedEmission!==!0,marker:K,session:b}),ee=new ToolLoopAgent({headers:Se,instructions:t,model:G,onLanguageModelCallEnd(e){for(let t of e.content)t.type!==`tool-call`||t.providerExecuted===!0||isInvalidToolCall(t)||c.register({callId:t.toolCallId,input:t.input,toolName:t.toolName})},onToolExecutionEnd:logToolExecutionError,onError(e){summarizeKnownError(e.error)?.tags.includes(`config`)!==!0&&logError(log,`tool-loop stream error`,e.error)},onStepFinish:_.onStepFinish,prepareStep:_.prepareStep,reasoning:b.agent.reasoning,runtimeContext:r,stopWhen:isStepCount(1),telemetry:g?.telemetry,toolApproval:buildToolApproval(p),tools:m}),executeModelCall=async()=>{if(O){let e=[...n.tools].filter(([e,t])=>t.runtimeAction!==void 0&&l.get(e)===void 0).map(([e])=>e),t=new Set([ASK_QUESTION_TOOL_NAME,FINAL_OUTPUT_TOOL_NAME,...e]),r=await ee.stream({abortSignal:n.abortSignal,messages:a}),{emittedActionCallIds:i,handledInlineToolResultCallIds:o,invalidInputToolCallIds:s,inlineAuthorizationResults:c,trailingInlineToolResultParts:u}=await emitStreamContent(O,w,r.fullStream,{excludedActionToolNames:t,tools:l});throwIfTurnAborted(n.abortSignal);let[d,f]=await Promise.all([_.stepResult,r.responseMessages]);if(isEmptyModelResponse(d)&&extractToolResultCallIds(f).size===0&&c.length===0&&u.length===0)throw new EmptyModelResponseError;await emitStepActions(O,w,d,{emittedActionCallIds:i,excludedActionCallIds:s,excludedActionToolNames:t,handledInlineToolResultCallIds:o,tools:l});let p=d.toolResults,m=new Map(p.map(e=>[e.toolCallId,e]));for(let e of c)m.set(e.toolCallId,e);return withAccumulatedResponseMessages({invalidInputToolCallIds:s,responseMessages:appendMissingToolResultMessages({append:u,responseMessages:f}),stepResult:d,toolResults:[...m.values()]})}let e=await ee.generate({abortSignal:n.abortSignal,messages:a});throwIfTurnAborted(n.abortSignal);let t=await _.stepResult;if(isEmptyModelResponse(t)&&extractToolResultCallIds(e.responseMessages).size===0)throw new EmptyModelResponseError;return withAccumulatedResponseMessages({responseMessages:e.responseMessages,stepResult:t})};try{let e=await executeModelCall();return await g?.complete(),e}catch(e){return await g?.fail(e),rethrowNoOutputAsEmptyResponse(e)}},De=0,runOneModelCall=async e=>runModelCallWithRetries(t=>runSingleModelCall({...e,attemptIndex:De++,preparedInput:t===1?e.preparedInput:void 0,suppressStepStartedEmission:t!==1||e.suppressStepStartedEmission}),{sessionId:b.sessionId,turnId:w.turnId},n.abortSignal),Oe=prepareModelCallInput(),ke=await continuePendingWorkflowInterrupt({childResults:M?.runtimeActionResults,config:n,emit:O,emissionState:w,runStep,session:b,tools:buildHarnessToolsWithDynamicSubagents(n.tools,U)});if(ke!==null)return ke;let Ae=await enforceSessionTokenLimit({config:n,emit:O,emissionState:w,messages:H,session:b});if(Ae!==null)return Ae;let Z;try{Z=await runOneModelCall({preparedInput:Oe,suppressStepStartedEmission:!0})}catch(e){throwIfTurnAborted(n.abortSignal);let r=await runModelCallRecoveryPipeline({error:e,stages:[e=>attemptUnsupportedProviderToolRecovery({error:e.error,runOneModelCall,sessionId:b.sessionId,turnId:w.turnId}),e=>attemptEmptyResponseRecovery({emptyDeliveryEnabled:J.allowsEmptyDelivery,error:e.error,retryCallOptions:e.retryCallOptions,runOneModelCall,sessionId:b.sessionId,turnId:w.turnId})]});if(throwIfTurnAborted(n.abortSignal),r.outcome===`recovered`)Z=r.result;else{let e=r.error;if(y?.recordError(e),!O)throw e;let i=extractWorkflowStreamWriteErrorDetails(e);if(i!==null){let n=createErrorId();return log.error(`workflow stream write failed — parking session for retry by the user`,{...i,errorId:n,error:e,sessionId:b.sessionId,turnId:w.turnId}),w=await emitRecoverableFailedTurn(O,w,{code:`WORKFLOW_STREAM_WRITE_FAILED`,continuationToken:b.continuationToken,details:{...i,errorId:n},message:toErrorMessage(e)}),{next:null,session:setHarnessEmissionState(b,w)}}let a=classifyModelCallError(e),o=createErrorId(),s=summarizeKnownError(e),c=s===null?extractUpstreamRejectionMessage(e):null,l=s?.message??c?.message??toErrorMessage(e),u=s?.hint===void 0?l:`${l} ${s.hint}`,d=extractModelCallErrorDetails(e),f=buildModelCallFailureDetails({catalogSummary:s,error:e,errorId:o,modelCallDetails:d,upstreamRejection:c}),m=buildModelCallFailureLogFields({error:e,errorId:o,modelCallDetails:d,recognized:s!==null||c!==null,sessionId:b.sessionId,turnId:w.turnId});if(a===`terminal`)return s===null?log.error(c?.message??`model call failed terminally`,m):log.error(`${s.name}: ${s.message}`,{errorId:o,hint:s.hint,sessionId:b.sessionId,turnId:w.turnId}),await emitFailedStep(O,w,{code:`MODEL_CALL_FAILED`,details:f,message:l,sessionId:b.sessionId}),{next:n.mode===`task`||ue?{done:!0,isError:!0,output:u}:{done:!0,output:``},session:b};if(n.mode===`task`){if(a===`recoverable`&&!(e instanceof EmptyModelResponseError))throw log.warn(c?.message??`model call failed recoverably in task mode — rethrowing for durable step retry`,m),e;return log.error(c?.message??`model call failed; failing the task run`,m),await emitFailedStep(O,w,{code:`MODEL_CALL_FAILED`,details:f,message:l,sessionId:b.sessionId}),{next:{done:!0,isError:!0,output:u},session:b}}log.error(c?.message??`model call failed — parking session for retry by the user`,m),w=await emitRecoverableFailedTurn(O,w,{code:`MODEL_CALL_FAILED`,continuationToken:b.continuationToken,details:f,message:l});let h={isError:!0,output:u};return b={...b,outputSchema:void 0},{next:null,session:setHarnessEmissionState(b,w),settledTurn:h}}}let Q=accumulateTurnUsage({previous:getTurnUsageState(b.state),turnId:w.turnId,usage:extractTokenUsageDelta({costUsd:extractGatewayCostUsd(Z.providerMetadata),usage:Z.usage})});b=setTurnUsageState(b,Q);let $;try{$=formatLanguageModelGatewayId(G)}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":n.tools.size}),handleStepResult({config:n,emit:O,emissionState:w,durableModelPromptMessageCount:I.length===0?H.length:void 0,promptMessages:B,result:Z,runStep,session:b,coordinationTools:Ee})}return runStep}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:n,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(n,i),...a}:{errorId:i,message:toErrorMessage(n),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}function hasUnansweredToolCall(e){let t=new Set,n=new Set;for(let r of e)if(Array.isArray(r.content))for(let e of r.content)typeof e!=`object`||!e||(e.type===`tool-call`&&t.add(e.toolCallId),e.type===`tool-result`&&n.add(e.toolCallId));for(let e of t)if(!n.has(e))return!0;return!1}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:o}=e,{emissionState:s,session:c}=e,l=resolveAssistantStepText(i.response.messages,i.text),u=i.finishReason!==`tool-calls`&&i.toolCalls.length===0&&hasEmptyDeliverySentinel(l),d=getInvalidToolCallInputErrors({toolCalls:i.toolCalls}),f=new Set([...i.invalidInputToolCallIds??[],...i.toolCalls.filter(isInvalidToolCall).map(e=>e.toolCallId),...d.map(e=>e.toolCallId)]),p=u?[]:appendMissingToolResultMessages({append:d.map(e=>createToolResultMessagePartFromToolError(e)),responseMessages:i.response.messages}),m=u?null:l,h=new Set;for(let e of[...i.content??[],...i.toolResults??[]])(e.type===`tool-result`||e.type===`tool-error`)&&e.providerExecuted===!0&&h.add(e.toolCallId);let g=normalizeProviderToolHistory({messages:p,providerExecutedOutcomeIds:h}),v=g.messages,y={...c,compaction:createNextCompactionConfig(c.compaction,e.durableModelPromptMessageCount,i)},te=t.workflow===!0?readWorkflowContinuationSecurity(y):void 0;if(te!==void 0){let t=await getWorkflowSandboxInterrupt(i,te);if(t!==void 0){if(!isWorkflowTaskInterrupt(t))throw Error(`Unsupported Workflow interrupt kind "${t.payload.kind}".`);return await parkOnWorkflowInterrupt({baseSession:y,emit:n,emissionState:s,interrupt:t,promptMessages:r,responseMessages:v,tools:e.coordinationTools,usedCalls:0})}}let x=extractToolApprovalInputRequests({content:i.content??[],excludedCallIds:f}),ne=new Set(x.map(e=>e.action.callId)),S=extractQuestionInputRequests({toolCalls:i.toolCalls,excludedCallIds:new Set([...f,...ne]),tools:e.coordinationTools}),C=[...x,...S],re=renderPendingApprovalsSnippet(x),ie=v.findIndex(e=>e.role!==`tool`),w=ie===-1?v:v.slice(0,ie),ae=v.slice(w.length),oe=[...r,...w,...re===void 0?[]:[{content:re,role:`user`}]],se=getAdvertisedTools({session:y,tools:e.coordinationTools}),T=(i.toolCalls??[]).filter(e=>!f.has(e.toolCallId)).filter(t=>isDeferredHarnessTool(e.coordinationTools.get(t.toolName))).filter(e=>isDeferredHarnessTool(se.get(e.toolName))?!0:(log.warn(`deferred tool call blocked because tool is not advertised`,{callId:e.toolCallId,sessionId:y.sessionId,toolName:e.toolName}),!1)).map(e=>createCoordinationRequestFromToolCall({toolCall:e,tools:se}));if(T.length>0){let e=T.flatMap(e=>e.kind===`runtime-action`?[e.request]:[]),t=T.flatMap(e=>e.kind===`task`?[e.request]:[]);if(C.length===0)return{next:null,session:setHarnessEmissionState(setPendingCoordinationBatch({runtimeActions:e,tasks:t,event:{sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId},responseMessages:v,session:{...y,history:[...r]}}),advanceStep(s))};let i=setPendingCoordinationBatch({runtimeActions:e,tasks:t,event:{sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId},responseMessages:ae,session:{...y,history:oe}});return i=appendPendingInputBatch({event:{sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId},requests:C,responseMessages:[],session:i}),n&&await n(createInputRequestedEvent({requests:C,sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId})),{next:null,session:setHarnessEmissionState(i,advanceStep(s))}}if(C.length>0){let e=buildResponseAuthorizationTools({authoredTools:t.tools,context:contextStorage.getStore()}),r=appendPendingInputBatch({event:{sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId},requests:C,responseAuthRequiredRequestIds:x.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:ae,session:{...y,history:oe}});return n&&(await n(createInputRequestedEvent({requests:C,sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId})),t.mode===`conversation`&&(s=await emitTurnEpilogue(n,s,t.mode),r=setHarnessEmissionState(r,s))),{next:hasDeferredStepInput(r)?o:null,session:r}}let ce=resolveInlineAuthorizationInterrupt({messages:[...r,...v],toolResults:i.toolResults});if(ce){let{challenges:e,history:r}=ce;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:s.sequence,stepIndex:s.stepIndex,turnId:s.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:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId}));t.mode===`conversation`&&(s=await emitTurnEpilogue(n,s,t.mode))}return{next:null,session:setHarnessEmissionState({...y,history:r,state:setPendingAuthorization(y.state,{challenges:e})},s)}}let E=v,le=[...r,...E],D={...y,history:le};return!(D.outputSchema!==void 0&&extractFinalOutput(i)!==void 0)&&(E.at(-1)?.role===`tool`||g.outcomeEndsResponse||hasDeferredStepInput(D))?(n&&(s=advanceStep(s),D=setHarnessEmissionState(D,s)),{next:o,session:D}):t.mode===`task`?finishTaskTurn({emissionState:s,emit:n,history:r,result:i,schema:D.outputSchema,session:D,stepOutput:m}):finishConversationTurn({emissionState:s,emit:n,history:r,result:i,schema:D.outputSchema,session:D,stepOutput:m})}function isDeferredHarnessTool(e){return e?.runtimeAction!==void 0||e?.workflowId!==void 0&&e.execution!==`background`}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?(s={...s,outputSchema: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){s={...s,outputSchema: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(!isWorkflowTaskInterrupt(n))throw Error(`Unsupported Workflow interrupt kind "${n.payload.kind}".`);let r=e.childResults??[],a=getWorkflowTaskInterrupts(n);e.emit!==void 0&&r.length>0&&await emitWorkflowActionResults({emit:e.emit,emissionState:e.emissionState,interrupts:a,results:r});let o=getWorkflowContinuationSecurity(e.session),s;try{let t=buildWorkflowHostTools({tools:e.tools}),i=n,a=0;for(;;){s=await continueWorkflowSandboxInterrupt({bridgeRequestLimit:resolveWorkflowSandboxBridgeRequestLimit(e.config.workflowMaxSubagents),continuationSecurity:o,interrupt:i,resolution:r[a]?.output,tools:t});let n=await unwrapWorkflowSandboxResult(s,o);if(n.status!==`interrupted`||!isWorkflowTaskInterrupt(n.interrupt)||a+1>=r.length)break;let c=getWorkflowTaskInterrupts(n.interrupt)[0];if(c===void 0)throw Error(`Workflow continuation contains no pending workflow-task interrupt.`);a++,i=c}}catch(e){logError(log,`Workflow interrupt continuation failed`,e),s={error:`workflow_continuation_failed`,message:toErrorMessage(e),retryable:!1}}let c=await unwrapWorkflowSandboxResult(s,o),l=c.status===`interrupted`?c.interrupt:c.output,u=replaceWorkflowToolResult([...e.session.history,...t.responseMessages],n.outerToolCallId,l),d=clearPendingWorkflowInterrupt({...e.session,history:u});if(c.status===`interrupted`){if(!isWorkflowTaskInterrupt(c.interrupt))throw Error(`Unsupported Workflow interrupt kind "${c.interrupt.payload.kind}".`);let n=e.session.history.length,r=u.slice(0,n),i=u.slice(n);return d={...d,history:r},await parkOnWorkflowInterrupt({baseSession:d,emit:e.emit,emissionState:e.emissionState,interrupt:c.interrupt,promptMessages:r,responseMessages:i,tools:e.tools,usedCalls:t.usedCalls})}return{next:e.runStep,session:d}}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}})}async function parkOnWorkflowInterrupt(e){let t=getWorkflowTaskInterrupts(e.interrupt),n=t[0];if(n===void 0)throw Error(`Workflow continuation contains no pending workflow-task interrupt.`);e.emit!==void 0&&await emitWorkflowActionsRequested({emit:e.emit,emissionState:e.emissionState,interrupts:t,tools:e.tools});let r={...e.baseSession,history:[...e.promptMessages]};return{next:null,session:setHarnessEmissionState(setPendingWorkflowInterrupt({interrupt:n,responseMessages:e.responseMessages,session:r,usedCalls:e.usedCalls}),e.emissionState)}}function createNextCompactionConfig(e,t,n){let r={recentWindowSize:e.recentWindowSize,threshold:e.threshold,thresholdPercent:e.thresholdPercent};return n.usage?.inputTokens!==void 0&&t!==void 0&&(r.lastKnownInputTokens=n.usage.inputTokens,r.lastKnownPromptMessageCount=t),r}async function maybeCompact(e){let{emit:t,emissionState:n}=e,r=e.messages,i=e.session,o=e.promptMessages??r,s=e.historyProjector?.({messages:o,state:i.state})??o,c=e.force===!0||shouldCompact(s,i.compaction),l=shouldCanonicalizeMemory(r);if(!c&&!l)return{compacted:!1,messages:r,session:i};let u=await resolveCompactionModel({compactionModelReference:i.agent.compactionModelReference,model:e.model,modelReference:requireSessionModelReference(i),resolveModel:e.resolveModel}),d=mergeProviderSafetyIdentifier(i.agent.compactionModelReference??requireSessionModelReference(i),u.providerOptions,e.auth);if(t){let e=contextStorage.getStore();e!==void 0&&prepareMemoryCompaction(e,{history:r,state:i.state}),await t(createCompactionRequestedEvent({modelId:formatLanguageModelGatewayId(u.model),sequence:n.sequence,sessionId:i.sessionId,turnId:n.turnId,usageInputTokens:getInputTokenCount(s,i.compaction)}),s)}let f=canonicalizeMemoryRecords(r),p=e.historyProjector?.({messages:f.ordinary,state:i.state})??f.ordinary,m=c?await compactMessages([...p],u.model,i.compaction,d,e.telemetry,buildGatewayAttributionHeaders(u.model,e.runtimeIdentity),e.abortSignal,e.force===!0):[...p];if(r=[...f.memory,...m],e.onCompaction)for(let t of e.onCompaction())r.push(t);if(t){let o=contextStorage.getStore();if(o!==void 0&&prepareMemoryCompaction(o,{history:r,state:i.state}),await t(createCompactionCompletedEvent({modelId:formatLanguageModelGatewayId(u.model),sequence:n.sequence,sessionId:i.sessionId,turnId:n.turnId}),e.historyProjector?.({messages:r,state:i.state})??r),o!==void 0){let e=drainMemoryCommit(o);e!==void 0&&(r=[...e.history],i={...i,state:e.state})}}return{compacted:!0,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))}}}export{appendMissingToolResultMessages,createToolLoopHarness};
@@ -1 +1 @@
1
- import{loadContext}from"#context/container.js";import{isObject}from"#shared/guards.js";import{buildCallbackContext}from"#context/build-callback-context.js";import{resolveApprovalPolicy}from"#approval/definition.js";import{tool}from"ai";import{authorizationPendingModelText,isAuthorizationPendingModelOutput,isAuthorizationSignal,modelFacingAuthorizationOutput}from"#harness/authorization.js";import{createBackgroundToolCallBatch,executeBackgroundToolCall}from"#harness/background-tools.js";import{isAsyncIterable}from"#shared/async-iterable.js";import{stashToolInterrupt}from"#harness/tool-interrupts.js";import{normalizeToolJsonOutput,normalizeToolModelOutput}from"#harness/tool-model-output.js";import{resolveWebSearchBackend,resolveWebSearchProviderTool}from"#harness/provider-tools.js";const toolApprovals=new WeakMap;function buildToolSet(e){let t={},n=e.backgroundBatch??createBackgroundToolCallBatch(),r=e.capabilities?.requestInput===!0,s=e.disabledProviderTools;for(let c of e.tools.values()){if(c.behavior?.availability.includes(`requires-request-input`)===!0&&!r||s?.has(c.name))continue;n.setTool(c.name,c.execution===`background`&&c.execute!==void 0?c:void 0);let l=c.toModelOutput,u=buildApprovalFn(c,e),d=tool({description:c.description,execute:wrapToolExecute(c,n),inputSchema:c.inputSchema,...c.execution===`background`?{onInputAvailable:({input:e,toolCallId:t})=>{if(c.execute===void 0)throw Error(`Background tool "${c.name}" has no execute function.`);n.register({callId:t,input:e,toolName:c.name})}}:{},outputSchema:c.outputSchema,...c.execute===void 0?l===void 0?{}:{toModelOutput:async({output:e,toolCallId:t})=>normalizeToolModelOutput({output:await l(e),toolCallId:t,toolName:c.name})}:{toModelOutput:async({output:e,toolCallId:t})=>isAuthorizationPendingModelOutput(e)?{type:`text`,value:authorizationPendingModelText(e.connections)}:l===void 0?typeof e==`string`?{type:`text`,value:e}:normalizeToolModelOutput({output:{type:`json`,value:e??null},toolCallId:t,toolName:c.name}):normalizeToolModelOutput({output:await l(e),toolCallId:t,toolName:c.name})}});t[c.name]=d,c.approval!==void 0&&toolApprovals.set(d,u)}return t}function buildToolSetFromDefinitions(e){let t=new Map;for(let n of e.tools)t.has(n.name)||t.set(n.name,n);return buildToolSet({approvedTools:e.approvedTools,backgroundBatch:e.backgroundBatch,capabilities:e.capabilities,disabledProviderTools:e.disabledProviderTools,tools:t})}function wrapToolExecute(e,t=createBackgroundToolCallBatch()){let n=e.execute;if(n!==void 0)return(r,i)=>{let a;try{a=e.execution===`background`?executeBackgroundToolCall({batch:t,definition:e,options:i,toolInput:r}):n(r,i)}catch(e){return Promise.reject(e)}return isAsyncIterable(a)?normalizeToolExecuteIterable(a,e.name,i):Promise.resolve(a).then(t=>normalizeToolExecuteOutput(t,e.name,i))}}async function*normalizeToolExecuteIterable(e,t,n){for await(let r of e)yield normalizeToolExecuteOutput(r,t,n)}function normalizeToolExecuteOutput(t,n,r){return isAuthorizationSignal(t)?(stashToolInterrupt(loadContext(),r.toolCallId,t),modelFacingAuthorizationOutput(t)):normalizeToolJsonOutput({boundary:`execute`,output:t,toolCallId:r.toolCallId,toolName:n})}async function buildToolSetWithProviderTools(e){let t=e.disabledProviderTools,n={...buildToolSet({approvedTools:e.approvedTools,backgroundBatch:e.backgroundBatch,capabilities:e.capabilities,disabledProviderTools:t,tools:e.tools})};for(let r of e.tools.values()){let i=r.behavior?.handling;if(i?.kind===`provider-tool`&&r.execute===void 0&&!t?.has(r.name)){let t=resolveWebSearchBackend(e.modelReference,i.provider);t===null?delete n[r.name]:n[r.name]=await resolveWebSearchProviderTool(t)}}return n}function buildApprovalFn(e,i){return async(a,o)=>{if(e.approval===void 0)return;let s=isObject(a)?a:void 0,c=await resolveApprovalPolicy(e.approval)({...buildCallbackContext(),approvedTools:i.approvedTools??new Set,callId:o,toolInput:s,toolName:e.name});return typeof c==`boolean`?c?`user-approval`:`not-applicable`:c}}function buildToolApproval(e){return async({toolCall:t})=>{let n=e[t.toolName];return n===void 0?void 0:await toolApprovals.get(n)?.(t.input,t.toolCallId)}}export{buildToolApproval,buildToolSet,buildToolSetFromDefinitions,buildToolSetWithProviderTools,wrapToolExecute};
1
+ import{loadContext}from"#context/container.js";import{isObject}from"#shared/guards.js";import{buildCallbackContext}from"#context/build-callback-context.js";import{resolveApprovalPolicy}from"#approval/definition.js";import{tool}from"ai";import{authorizationPendingModelText,isAuthorizationPendingModelOutput,isAuthorizationSignal,modelFacingAuthorizationOutput}from"#harness/authorization.js";import{createBackgroundToolCallBatch,executeBackgroundToolCall}from"#harness/background-tools.js";import{isAsyncIterable}from"#shared/async-iterable.js";import{normalizeToolJsonOutput,normalizeToolModelOutput}from"#harness/tool-model-output.js";import{stashToolInterrupt}from"#harness/tool-interrupts.js";import{resolveWebSearchBackend,resolveWebSearchProviderTool}from"#harness/provider-tools.js";const toolApprovals=new WeakMap;function buildToolSet(e){let t={},n=e.backgroundBatch??createBackgroundToolCallBatch(),r=e.capabilities?.requestInput===!0,s=e.disabledProviderTools;for(let c of e.tools.values()){if(c.behavior?.availability.includes(`requires-request-input`)===!0&&!r||s?.has(c.name))continue;n.setTool(c.name,c.execution===`background`&&c.execute!==void 0?{execute:c.execute,executeInput:c.executeInput,name:c.name,nodeId:c.nodeId,resultKind:c.resultKind,workflowId:c.workflowId}:void 0);let l=c.toModelOutput,u=buildApprovalFn(c,e),d=tool({description:c.description,execute:wrapToolExecute(c,n),inputSchema:c.inputSchema,...c.execution===`background`?{onInputAvailable:({input:e,toolCallId:t})=>{if(c.execute===void 0)throw Error(`Background tool "${c.name}" has no execute function.`);n.register({callId:t,input:e,toolName:c.name})}}:{},outputSchema:c.outputSchema,...c.execute===void 0?l===void 0?{}:{toModelOutput:async({output:e,toolCallId:t})=>normalizeToolModelOutput({output:await l(e),toolCallId:t,toolName:c.name})}:{toModelOutput:async({output:e,toolCallId:t})=>isAuthorizationPendingModelOutput(e)?{type:`text`,value:authorizationPendingModelText(e.connections)}:l===void 0?typeof e==`string`?{type:`text`,value:e}:normalizeToolModelOutput({output:{type:`json`,value:e??null},toolCallId:t,toolName:c.name}):normalizeToolModelOutput({output:await l(e),toolCallId:t,toolName:c.name})}});t[c.name]=d,c.approval!==void 0&&toolApprovals.set(d,u)}return t}function buildToolSetFromDefinitions(e){let t=new Map;for(let n of e.tools)t.has(n.name)||t.set(n.name,n);return buildToolSet({approvedTools:e.approvedTools,backgroundBatch:e.backgroundBatch,capabilities:e.capabilities,disabledProviderTools:e.disabledProviderTools,tools:t})}function wrapToolExecute(e,t=createBackgroundToolCallBatch()){let n=e.execute;if(n!==void 0)return(r,i)=>{let a;try{e.execution===`background`?(t.register({callId:i.toolCallId,input:r,toolName:e.name}),a=executeBackgroundToolCall({batch:t,definition:e,options:i,toolInput:r})):a=n(r,i)}catch(e){return Promise.reject(e)}return isAsyncIterable(a)?normalizeToolExecuteIterable(a,e.name,i):Promise.resolve(a).then(t=>normalizeToolExecuteOutput(t,e.name,i))}}async function*normalizeToolExecuteIterable(e,t,n){for await(let r of e)yield normalizeToolExecuteOutput(r,t,n)}function normalizeToolExecuteOutput(t,n,r){return isAuthorizationSignal(t)?(stashToolInterrupt(loadContext(),r.toolCallId,t),modelFacingAuthorizationOutput(t)):normalizeToolJsonOutput({boundary:`execute`,output:t,toolCallId:r.toolCallId,toolName:n})}async function buildToolSetWithProviderTools(e){let t=e.disabledProviderTools,n={...buildToolSet({approvedTools:e.approvedTools,backgroundBatch:e.backgroundBatch,capabilities:e.capabilities,disabledProviderTools:t,tools:e.tools})};for(let r of e.tools.values()){let i=r.behavior?.handling;if(i?.kind===`provider-tool`&&r.execute===void 0&&!t?.has(r.name)){let t=resolveWebSearchBackend(e.modelReference,i.provider);t===null?delete n[r.name]:n[r.name]=await resolveWebSearchProviderTool(t)}}return n}function buildApprovalFn(e,i){return async(a,o)=>{if(e.approval===void 0)return;let s=isObject(a)?a:void 0,c=await resolveApprovalPolicy(e.approval)({...buildCallbackContext(),approvedTools:i.approvedTools??new Set,callId:o,toolInput:s,toolName:e.name});return typeof c==`boolean`?c?`user-approval`:`not-applicable`:c}}function buildToolApproval(e){return async({toolCall:t})=>{let n=e[t.toolName];return n===void 0?void 0:await toolApprovals.get(n)?.(t.input,t.toolCallId)}}export{buildToolApproval,buildToolSet,buildToolSetFromDefinitions,buildToolSetWithProviderTools,wrapToolExecute};
@@ -95,7 +95,9 @@ export declare function takeSessionUsageDelta(session: HarnessSession): {
95
95
  readonly session: HarnessSession;
96
96
  };
97
97
  /** Writes per-turn token state onto a new copy of the session. */
98
- export declare function setTurnUsageState(session: HarnessSession, next: TurnUsageState): HarnessSession;
98
+ export declare function setTurnUsageState<T extends {
99
+ readonly state?: SessionStateMap;
100
+ }>(session: T, next: TurnUsageState): T;
99
101
  /**
100
102
  * Folds one step's `usage` into the running per-turn totals. When
101
103
  * `turnId` differs from the stored state (e.g. a new turn just
@@ -79,11 +79,8 @@ export interface HarnessSession {
79
79
  readonly sessionId: string;
80
80
  readonly sandboxState?: SandboxState;
81
81
  readonly state?: SessionStateMap;
82
- /**
83
- * Number of local delegated subagent hops from the root session to this
84
- * session. Root sessions are depth 0.
85
- */
86
- readonly subagentDepth?: number;
82
+ /** Framework task that owns this durable session, when present. */
83
+ readonly taskId?: string;
87
84
  /**
88
85
  * Effective maximum subagent calls one `Workflow` invocation may dispatch
89
86
  * for this session, configured by `experimental_workflow({ maxSubagents })`.
@@ -289,8 +286,8 @@ export interface ToolLoopHarnessConfig {
289
286
  * compacted history.
290
287
  */
291
288
  readonly onCompaction?: () => readonly ModelMessage[];
292
- /** Prepares persisted step-scoped tools before an approved call is resumed. */
293
- readonly prepareStepDynamicTools?: (input: {
289
+ /** Resolves persisted step-scoped tools before an approval policy reads them. */
290
+ readonly resolveStepDynamicTools?: (input: {
294
291
  readonly ctx: AlsContext;
295
292
  readonly event: StepStartedStreamEvent;
296
293
  readonly messages: readonly ModelMessage[];
@@ -1 +1 @@
1
- import{WORKFLOW_RUNTIME_ACTION_INTERRUPT_KIND}from"#harness/workflow-runtime-action-state.js";const PENDING_KEY=`eve.harness.pendingWorkflowInterrupt`;function getPendingWorkflowInterrupt(e){let n=e?.[PENDING_KEY];if(isRecord(n)&&!(!isWorkflowInterruptShape(n.interrupt)||!Array.isArray(n.responseMessages))&&!(!Number.isSafeInteger(n.usedCalls)||n.usedCalls<0))return{interrupt:n.interrupt,responseMessages:n.responseMessages,usedCalls:n.usedCalls}}function setPendingWorkflowInterrupt(e){return{...e.session,state:{...e.session.state,[PENDING_KEY]:{interrupt:e.interrupt,responseMessages:e.responseMessages,usedCalls:e.usedCalls}}}}function setPendingWorkflowUsedCalls(e){let t=getPendingWorkflowInterrupt(e.session.state);return t===void 0?e.session:setPendingWorkflowInterrupt({...t,session:e.session,usedCalls:e.usedCalls})}function clearPendingWorkflowInterrupt(e){if(e.state?.[PENDING_KEY]===void 0)return e;let n={...e.state};return delete n[PENDING_KEY],{...e,state:Object.keys(n).length>0?n:void 0}}function isWorkflowInterruptShape(t){return isRecord(t)&&t.type===`code-mode-interrupt`&&typeof t.interruptId==`string`&&typeof t.outerToolCallId==`string`&&isRecord(t.payload)&&t.payload.kind===WORKFLOW_RUNTIME_ACTION_INTERRUPT_KIND&&isRecord(t.continuation)&&t.continuation.version===2&&typeof t.continuation.outerToolCallId==`string`&&Array.isArray(t.continuation.pendingInterruptions)&&Array.isArray(t.continuation.resolutions)}function isRecord(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}export{clearPendingWorkflowInterrupt,getPendingWorkflowInterrupt,setPendingWorkflowInterrupt,setPendingWorkflowUsedCalls};
1
+ import{WORKFLOW_TASK_INTERRUPT_KIND}from"#harness/workflow-task-state.js";const PENDING_KEY=`eve.harness.pendingWorkflowInterrupt`;function getPendingWorkflowInterrupt(e){let n=e?.[PENDING_KEY];if(isRecord(n)&&!(!isWorkflowInterruptShape(n.interrupt)||!Array.isArray(n.responseMessages))&&!(!Number.isSafeInteger(n.usedCalls)||n.usedCalls<0))return{interrupt:n.interrupt,responseMessages:n.responseMessages,usedCalls:n.usedCalls}}function setPendingWorkflowInterrupt(e){return{...e.session,state:{...e.session.state,[PENDING_KEY]:{interrupt:e.interrupt,responseMessages:e.responseMessages,usedCalls:e.usedCalls}}}}function setPendingWorkflowUsedCalls(e){let t=getPendingWorkflowInterrupt(e.session.state);return t===void 0?e.session:setPendingWorkflowInterrupt({...t,session:e.session,usedCalls:e.usedCalls})}function clearPendingWorkflowInterrupt(e){if(e.state?.[PENDING_KEY]===void 0)return e;let n={...e.state};return delete n[PENDING_KEY],{...e,state:Object.keys(n).length>0?n:void 0}}function isWorkflowInterruptShape(t){return isRecord(t)&&t.type===`code-mode-interrupt`&&typeof t.interruptId==`string`&&typeof t.outerToolCallId==`string`&&isRecord(t.payload)&&t.payload.kind===WORKFLOW_TASK_INTERRUPT_KIND&&isRecord(t.continuation)&&t.continuation.version===2&&typeof t.continuation.outerToolCallId==`string`&&Array.isArray(t.continuation.pendingInterruptions)&&Array.isArray(t.continuation.resolutions)}function isRecord(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}export{clearPendingWorkflowInterrupt,getPendingWorkflowInterrupt,setPendingWorkflowInterrupt,setPendingWorkflowUsedCalls};
@@ -2,6 +2,16 @@ import type { HarnessEmissionState } from "#harness/emission.js";
2
2
  import type { HarnessToolMap } from "#harness/types.js";
3
3
  import { type UnstampedMessageStreamEvent } from "#protocol/message.js";
4
4
  import type { WorkflowSandboxInterrupt } from "#shared/workflow-sandbox.js";
5
+ export declare function createWorkflowLifecycle(input: {
6
+ readonly emit: EmitWorkflowLifecycleEvent;
7
+ readonly emissionState: HarnessEmissionState;
8
+ readonly skipReplayed?: boolean;
9
+ readonly tools: HarnessToolMap;
10
+ }): {
11
+ onAfterExecute?: (input: {
12
+ readonly result: unknown;
13
+ }) => Promise<void>;
14
+ };
5
15
  type EmitWorkflowLifecycleEvent = (event: UnstampedMessageStreamEvent) => Promise<void>;
6
16
  /** Projects newly parked workflow calls onto eve's existing action stream. */
7
17
  export declare function emitWorkflowActionsRequested(input: {
@@ -1 +1 @@
1
- import{createActionResultEvent,createActionsRequestedEvent}from"#protocol/message.js";import{createRuntimeActionRequestFromToolCall}from"#harness/runtime-actions.js";import{createRuntimeToolResultFromValue}from"#harness/action-result-helpers.js";async function emitWorkflowActionsRequested(e){for(let r of e.interrupts){let i={input:r.input,toolCallId:r.toolCallId,toolName:r.toolName,type:`tool-call`};await e.emit(createActionsRequestedEvent({actions:[createRuntimeActionRequestFromToolCall({toolCall:i,tools:e.tools})],sequence:e.emissionState.sequence,stepIndex:e.emissionState.stepIndex,turnId:e.emissionState.turnId}))}}async function emitWorkflowActionResults(t){for(let[n,i]of t.results.entries()){let a=t.interrupts[n];if(a===void 0)break;await t.emit(createActionResultEvent({result:createRuntimeToolResultFromValue({callId:a.toolCallId,isError:i.isError,output:i.output,toolName:a.toolName}),sequence:t.emissionState.sequence,stepIndex:t.emissionState.stepIndex,turnId:t.emissionState.turnId}))}}export{emitWorkflowActionResults,emitWorkflowActionsRequested};
1
+ import{createActionResultEvent,createActionsRequestedEvent}from"#protocol/message.js";import{createRuntimeActionRequestFromToolCall}from"#harness/coordination.js";import{createRuntimeToolResultFromValue}from"#harness/action-result-helpers.js";import{getWorkflowSandboxInterrupt}from"#shared/workflow-sandbox.js";function createWorkflowLifecycle(e){return{async onAfterExecute(t){if(e.skipReplayed)return;let n=await getWorkflowSandboxInterrupt(t.result,{});n!==void 0&&await emitWorkflowActionsRequested({emit:e.emit,emissionState:e.emissionState,interrupts:[n],tools:e.tools})}}}async function emitWorkflowActionsRequested(e){for(let r of e.interrupts){let i={input:r.input,toolCallId:r.toolCallId,toolName:r.toolName,type:`tool-call`};await e.emit(createActionsRequestedEvent({actions:[createRuntimeActionRequestFromToolCall({toolCall:i,tools:e.tools})],sequence:e.emissionState.sequence,stepIndex:e.emissionState.stepIndex,turnId:e.emissionState.turnId}))}}async function emitWorkflowActionResults(t){for(let[n,i]of t.results.entries()){let a=t.interrupts[n];if(a===void 0)break;await t.emit(createActionResultEvent({result:createRuntimeToolResultFromValue({callId:a.toolCallId,isError:i.isError,output:i.output,toolName:a.toolName}),sequence:t.emissionState.sequence,stepIndex:t.emissionState.stepIndex,turnId:t.emissionState.turnId}))}}export{createWorkflowLifecycle,emitWorkflowActionResults,emitWorkflowActionsRequested};
@@ -7,7 +7,7 @@ interface WorkflowToolSet {
7
7
  }
8
8
  /**
9
9
  * Adds the dynamic `Workflow` tool while leaving every ordinary model tool
10
- * untouched. Only subagent and remote-agent runtime actions enter the sandbox.
10
+ * untouched. Only workflow-callable delegation tasks enter the sandbox.
11
11
  */
12
12
  export declare function applyWorkflowTool(input: {
13
13
  readonly continuationSecurity: WorkflowSandboxContinuationSecurity;
@@ -1,2 +1,2 @@
1
- import{z}from"#compiled/zod/index.js";import{WORKFLOW_RUNTIME_ACTION_INTERRUPT_KIND}from"#harness/workflow-runtime-action-state.js";import{DEFAULT_WORKFLOW_MAX_SUBAGENTS}from"#harness/workflow-subagent-limit.js";import{WORKFLOW_TOOL_NAME,createWorkflowSandboxTool,readWorkflowSandboxResolution,requestWorkflowSandboxInterrupt}from"#shared/workflow-sandbox.js";import{workflowToolDescription}from"#harness/workflow-tool-description.js";const workflowInputSchema=z.strictObject({js:z.string().describe(`Complete JavaScript orchestration program. Call only the agents listed in the Workflow description and return one JSON-serializable result.`)});async function applyWorkflowTool(e){let t=createWorkflowHostTools(e.harnessTools,Object.keys(e.tools));if(Object.keys(t).length===0)return{hostTools:t,modelTools:e.tools};let n=await createWorkflowSandboxTool({bridgeRequestLimit:resolveWorkflowSandboxBridgeRequestLimit(e.maxSubagents),continuationSecurity:e.continuationSecurity,hostTools:t}),a=typeof n.description==`string`?n.description:``,o=workflowToolDescription(Object.keys(t),{maxSubagents:e.maxSubagents}),s=workflowApiReference(a),c={...e.tools};return c[WORKFLOW_TOOL_NAME]={...n,description:s.length>0?`${o}\n\n${s}`:o,inputSchema:workflowInputSchema},{hostTools:t,modelTools:c}}function resolveWorkflowSandboxBridgeRequestLimit(e){return Math.max(256,(e??DEFAULT_WORKFLOW_MAX_SUBAGENTS)+1)}function workflowApiReference(e){let t=e.indexOf(`Tools:
2
- `);return t<0?e:`Available agent API:\n${e.slice(t+7)}`}function buildWorkflowHostTools(e){return createWorkflowHostTools(e.tools,e.tools.keys())}function createWorkflowHostTools(e,t){let n={};for(let r of t){let t=e.get(r);if(t===void 0)continue;let i=t.behavior?.handling?.kind===`dispatch`?t.behavior.handling.target:void 0;(i?.kind===`self-agent-call`||i?.kind===`subagent-call`||i?.kind===`remote-agent-call`)&&(n[r]=createWorkflowRuntimeActionHostTool(t))}return n}function createWorkflowRuntimeActionHostTool(e){return{description:e.description,inputSchema:e.inputSchema,execute:async(n,r)=>{let i=readWorkflowSandboxResolution(r);return i===void 0?requestWorkflowSandboxInterrupt({dispatchTarget:e.behavior?.handling?.kind===`dispatch`?e.behavior.handling.target:void 0,kind:WORKFLOW_RUNTIME_ACTION_INTERRUPT_KIND,toolInput:n,toolName:e.name}):i}}}export{applyWorkflowTool,buildWorkflowHostTools,resolveWorkflowSandboxBridgeRequestLimit};
1
+ import{z}from"#compiled/zod/index.js";import{DEFAULT_WORKFLOW_MAX_SUBAGENTS}from"#harness/workflow-subagent-limit.js";import{WORKFLOW_TASK_INTERRUPT_KIND}from"#harness/workflow-task-state.js";import{WORKFLOW_TOOL_NAME,createWorkflowSandboxTool,readWorkflowSandboxResolution,requestWorkflowSandboxInterrupt}from"#shared/workflow-sandbox.js";import{workflowToolDescription}from"#harness/workflow-tool-description.js";const workflowInputSchema=z.strictObject({js:z.string().describe(`Complete JavaScript orchestration program. Call only the agents listed in the Workflow description and return one JSON-serializable result.`)});async function applyWorkflowTool(e){let t=createWorkflowHostTools(e.harnessTools,Object.keys(e.tools));if(Object.keys(t).length===0)return{hostTools:t,modelTools:e.tools};let n=await createWorkflowSandboxTool({bridgeRequestLimit:resolveWorkflowSandboxBridgeRequestLimit(e.maxSubagents),continuationSecurity:e.continuationSecurity,hostTools:t}),a=typeof n.description==`string`?n.description:``,o=workflowToolDescription(Object.keys(t),{maxSubagents:e.maxSubagents}),s=workflowApiReference(a),c={...e.tools};return c[WORKFLOW_TOOL_NAME]={...n,description:s.length>0?`${o}\n\n${s}`:o,inputSchema:workflowInputSchema},{hostTools:t,modelTools:c}}function resolveWorkflowSandboxBridgeRequestLimit(e){return Math.max(256,(e??DEFAULT_WORKFLOW_MAX_SUBAGENTS)+1)}function workflowApiReference(e){let t=e.indexOf(`Tools:
2
+ `);return t<0?e:`Available agent API:\n${e.slice(t+7)}`}function buildWorkflowHostTools(e){return createWorkflowHostTools(e.tools,e.tools.keys())}function createWorkflowHostTools(e,t){let n={};for(let r of t){let t=e.get(r);t?.workflowId!==void 0&&(n[r]=createWorkflowTaskHostTool(t))}return n}function createWorkflowTaskHostTool(e){return{description:e.description,inputSchema:e.inputSchema,execute:async(t,r)=>{let i=readWorkflowSandboxResolution(r);return i===void 0?requestWorkflowSandboxInterrupt({kind:WORKFLOW_TASK_INTERRUPT_KIND,task:{executeInput:e.executeInput?.(t),nodeId:e.nodeId,resultKind:e.resultKind,workflowId:e.workflowId},toolInput:t,toolName:e.name}):i}}}export{applyWorkflowTool,buildWorkflowHostTools,resolveWorkflowSandboxBridgeRequestLimit};
@@ -1,17 +1,17 @@
1
- import type { PendingDispatchAction } from "#shared/dispatch-action.js";
1
+ import type { RuntimeWorkflowTaskRequest } from "#shared/action-types.js";
2
2
  /**
3
3
  * Default maximum number of subagent (and remote-agent) calls one `Workflow`
4
4
  * tool invocation may dispatch.
5
5
  */
6
6
  export declare const DEFAULT_WORKFLOW_MAX_SUBAGENTS = 100;
7
7
  /**
8
- * Partition of one workflow interrupt's pending runtime actions against the
9
- * invocation's subagent budget. `allowed` actions may dispatch; `blocked`
10
- * actions must resolve with an error result instead of starting a child.
8
+ * Partition of one workflow interrupt's pending tasks against the invocation's
9
+ * subagent budget. Allowed tasks may dispatch; blocked tasks resolve with an
10
+ * error result instead of starting a child.
11
11
  */
12
12
  export type WorkflowSubagentDispatchPlan = {
13
- readonly allowed: readonly PendingDispatchAction[];
14
- readonly blocked: readonly PendingDispatchAction[];
13
+ readonly allowed: readonly RuntimeWorkflowTaskRequest[];
14
+ readonly blocked: readonly RuntimeWorkflowTaskRequest[];
15
15
  readonly maxSubagents: number;
16
16
  readonly usedCalls: number;
17
17
  };
@@ -22,7 +22,7 @@ export type WorkflowSubagentDispatchPlan = {
22
22
  * program's call order.
23
23
  */
24
24
  export declare function planWorkflowSubagentDispatch(input: {
25
- readonly actions: readonly PendingDispatchAction[];
25
+ readonly tasks: readonly RuntimeWorkflowTaskRequest[];
26
26
  readonly maxSubagents?: number;
27
27
  readonly usedCalls: number;
28
28
  }): WorkflowSubagentDispatchPlan;
@@ -1 +1 @@
1
- const DEFAULT_WORKFLOW_MAX_SUBAGENTS=100;function planWorkflowSubagentDispatch(e){let t=e.maxSubagents??100,n=e.usedCalls,r=Math.max(0,t-n);return{allowed:e.actions.slice(0,r),blocked:e.actions.slice(r),maxSubagents:t,usedCalls:n}}export{DEFAULT_WORKFLOW_MAX_SUBAGENTS,planWorkflowSubagentDispatch};
1
+ const DEFAULT_WORKFLOW_MAX_SUBAGENTS=100;function planWorkflowSubagentDispatch(e){let t=e.maxSubagents??100,n=e.usedCalls,r=Math.max(0,t-n),i=[],a=[];for(let t of e.tasks)t.resultKind===`subagent`?r>0?(i.push(t),r--):a.push(t):i.push(t);return{allowed:i,blocked:a,maxSubagents:t,usedCalls:n}}export{DEFAULT_WORKFLOW_MAX_SUBAGENTS,planWorkflowSubagentDispatch};
@@ -0,0 +1,9 @@
1
+ import type { RuntimeWorkflowTaskRequest } from "#shared/action-types.js";
2
+ import { type WorkflowSandboxInterrupt } from "#shared/workflow-sandbox.js";
3
+ export declare const WORKFLOW_TASK_INTERRUPT_KIND = "eve.workflow-task";
4
+ export declare function isWorkflowTaskInterrupt(interrupt: unknown): boolean;
5
+ export declare function buildWorkflowTaskFromInterrupt(interrupt: WorkflowSandboxInterrupt): RuntimeWorkflowTaskRequest;
6
+ /** Returns every pending workflow-task interrupt in deterministic ledger order. */
7
+ export declare function getWorkflowTaskInterrupts(interrupt: WorkflowSandboxInterrupt): WorkflowSandboxInterrupt[];
8
+ export declare function buildWorkflowTasksFromInterrupt(interrupt: WorkflowSandboxInterrupt): RuntimeWorkflowTaskRequest[];
9
+ export declare function getWorkflowTaskCallIds(interrupt: WorkflowSandboxInterrupt): string[];
@@ -0,0 +1 @@
1
+ import{getWorkflowSandboxPendingInterrupts}from"#shared/workflow-sandbox.js";const WORKFLOW_TASK_INTERRUPT_KIND=`eve.workflow-task`;function isWorkflowTaskInterrupt(e){return isRecord(e)&&isRecord(e.payload)&&e.payload.kind===`eve.workflow-task`}function buildWorkflowTaskFromInterrupt(e){let t=e.payload,n=t.task,r=t.toolInput,i=t.toolName,a=sanitizeCallId(`${i}_${`interruptId`in e?String(e.interruptId):``}`);if(n===void 0||typeof n.workflowId!=`string`)throw Error(`Workflow delegation interrupts require a workflow task.`);let o={callId:a,executeInput:n.executeInput,input:r,kind:`workflow-task`,resultKind:n.resultKind,toolName:i,workflowId:n.workflowId};return n.nodeId!==void 0&&(o.nodeId=n.nodeId),o}function getWorkflowTaskInterrupts(t){return getWorkflowSandboxPendingInterrupts(t).filter(isWorkflowTaskInterrupt)}function buildWorkflowTasksFromInterrupt(e){return getWorkflowTaskInterrupts(e).map(e=>buildWorkflowTaskFromInterrupt(e))}function getWorkflowTaskCallIds(e){return buildWorkflowTasksFromInterrupt(e).map(e=>e.callId)}function sanitizeCallId(e){return e.replace(/[^a-zA-Z0-9_-]/g,`_`)}function isRecord(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}export{WORKFLOW_TASK_INTERRUPT_KIND,buildWorkflowTaskFromInterrupt,buildWorkflowTasksFromInterrupt,getWorkflowTaskCallIds,getWorkflowTaskInterrupts,isWorkflowTaskInterrupt};
@@ -0,0 +1,27 @@
1
+ import type { HarnessSession, SessionStateMap } from "#harness/types.js";
2
+ import type { RuntimeToolResultActionResult } from "#shared/action-types.js";
3
+ export declare function workflowToolRunAnswerToken(runId: string, seq: number): string;
4
+ /** A workflow tool run the active turn waits on. Background runs live in the task index. */
5
+ export interface WorkflowToolRunRecord {
6
+ readonly callId: string;
7
+ readonly hookToken: string;
8
+ readonly runId: string;
9
+ readonly toolName: string;
10
+ readonly resultKind?: "subagent" | "tool";
11
+ }
12
+ export declare function getWorkflowToolRuns(state: SessionStateMap | undefined): readonly WorkflowToolRunRecord[];
13
+ export declare function findWorkflowToolRun(state: SessionStateMap | undefined, callId: string): WorkflowToolRunRecord | undefined;
14
+ export declare function recordWorkflowToolRun<T extends {
15
+ readonly state?: SessionStateMap;
16
+ }>(session: T, record: WorkflowToolRunRecord): T;
17
+ export declare function removeWorkflowToolRun<T extends {
18
+ readonly state?: SessionStateMap;
19
+ }>(session: T, callId: string): T;
20
+ export declare function clearWorkflowToolRuns(session: HarnessSession): HarnessSession;
21
+ /** The turn inbox is shared; a result settles a call only if the turn recorded that run. */
22
+ export declare function isInboxToolResultFromRecordedWorkflowToolRun(state: SessionStateMap | undefined, result: RuntimeToolResultActionResult): boolean;
23
+ /** A child result reported through a shared subagent execute run. */
24
+ export declare function isInboxSubagentResultFromRecordedWorkflowToolRun(state: SessionStateMap | undefined, result: {
25
+ readonly callId: string;
26
+ readonly subagentName: string;
27
+ }): boolean;
@@ -0,0 +1 @@
1
+ const WORKFLOW_TOOL_RUNS_STATE_KEY=`eve.runtime.workflowToolRuns`;function workflowToolRunAnswerToken(e,t){return`eve:workflow-tool-run-answer:${e}:${t}`}function getWorkflowToolRuns(t){let n=t?.[WORKFLOW_TOOL_RUNS_STATE_KEY];return Array.isArray(n)?n:[]}function findWorkflowToolRun(e,t){return getWorkflowToolRuns(e).find(e=>e.callId===t)}function recordWorkflowToolRun(e,t){return writeWorkflowToolRuns(e,[...getWorkflowToolRuns(e.state).filter(e=>e.callId!==t.callId),t])}function removeWorkflowToolRun(e,t){let n=getWorkflowToolRuns(e.state),r=n.filter(e=>e.callId!==t);return r.length===n.length?e:writeWorkflowToolRuns(e,r)}function clearWorkflowToolRuns(e){return getWorkflowToolRuns(e.state).length===0?e:writeWorkflowToolRuns(e,[])}function isInboxToolResultFromRecordedWorkflowToolRun(e,t){let n=findWorkflowToolRun(e,t.callId);return n!==void 0&&n.resultKind!==`subagent`&&n.toolName===t.toolName}function isInboxSubagentResultFromRecordedWorkflowToolRun(e,t){let n=findWorkflowToolRun(e,t.callId);return n?.resultKind===`subagent`&&n.toolName===t.subagentName}function writeWorkflowToolRuns(t,n){let r={...t.state};return n.length===0?delete r[WORKFLOW_TOOL_RUNS_STATE_KEY]:r[WORKFLOW_TOOL_RUNS_STATE_KEY]=n,{...t,state:Object.keys(r).length>0?r:void 0}}export{clearWorkflowToolRuns,findWorkflowToolRun,getWorkflowToolRuns,isInboxSubagentResultFromRecordedWorkflowToolRun,isInboxToolResultFromRecordedWorkflowToolRun,recordWorkflowToolRun,removeWorkflowToolRun,workflowToolRunAnswerToken};