eve 0.56.0 → 0.57.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 (559) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/dist/src/channel/adapter-context.d.ts +1 -1
  3. package/dist/src/channel/adapter.d.ts +2 -2
  4. package/dist/src/channel/channel-address.js +1 -1
  5. package/dist/src/channel/session.d.ts +4 -3
  6. package/dist/src/channel/session.js +1 -1
  7. package/dist/src/channel/types.d.ts +7 -4
  8. package/dist/src/chunks/{use-eve-agent-RUGSwq8b.js → use-eve-agent-C2APNCdP.js} +45 -12
  9. package/dist/src/chunks/{use-eve-agent-CMdMlS7Y.js → use-eve-agent-D0YnDLi_.js} +45 -12
  10. package/dist/src/cli/commands/init.d.ts +2 -6
  11. package/dist/src/cli/commands/init.js +1 -1
  12. package/dist/src/cli/commands/trace-detail.js +1 -1
  13. package/dist/src/cli/dev/environment.js +1 -1
  14. package/dist/src/cli/dev/run-interactive-ui.js +1 -1
  15. package/dist/src/cli/dev/tui/agent-header.js +1 -1
  16. package/dist/src/cli/dev/tui/blocks.d.ts +1 -6
  17. package/dist/src/cli/dev/tui/blocks.js +1 -1
  18. package/dist/src/cli/dev/tui/command-typeahead.js +1 -1
  19. package/dist/src/cli/dev/tui/message-queue.d.ts +11 -7
  20. package/dist/src/cli/dev/tui/message-queue.js +1 -1
  21. package/dist/src/cli/dev/tui/model-editor.d.ts +1 -1
  22. package/dist/src/cli/dev/tui/model-editor.js +1 -1
  23. package/dist/src/cli/dev/tui/prompt-command-handler.d.ts +0 -3
  24. package/dist/src/cli/dev/tui/prompt-command-handler.js +1 -1
  25. package/dist/src/cli/dev/tui/prompt-commands.d.ts +1 -1
  26. package/dist/src/cli/dev/tui/prompt-commands.js +1 -1
  27. package/dist/src/cli/dev/tui/question-panel.js +1 -1
  28. package/dist/src/cli/dev/tui/remote-auth-result.js +1 -1
  29. package/dist/src/cli/dev/tui/remote-auth.js +1 -1
  30. package/dist/src/cli/dev/tui/remote-startup.d.ts +10 -0
  31. package/dist/src/cli/dev/tui/remote-startup.js +1 -0
  32. package/dist/src/cli/dev/tui/runner.d.ts +12 -18
  33. package/dist/src/cli/dev/tui/runner.js +3 -1
  34. package/dist/src/cli/dev/tui/setup-commands.d.ts +7 -13
  35. package/dist/src/cli/dev/tui/setup-commands.js +2 -2
  36. package/dist/src/cli/dev/tui/setup-issues.d.ts +1 -1
  37. package/dist/src/cli/dev/tui/setup-issues.js +1 -1
  38. package/dist/src/cli/dev/tui/setup-panel.d.ts +5 -17
  39. package/dist/src/cli/dev/tui/setup-panel.js +5 -6
  40. package/dist/src/cli/dev/tui/status-line.d.ts +1 -8
  41. package/dist/src/cli/dev/tui/status-line.js +1 -1
  42. package/dist/src/cli/dev/tui/steering-stream.d.ts +15 -0
  43. package/dist/src/cli/dev/tui/steering-stream.js +1 -0
  44. package/dist/src/cli/dev/tui/terminal-renderer.d.ts +3 -2
  45. package/dist/src/cli/dev/tui/terminal-renderer.js +12 -12
  46. package/dist/src/cli/dev/tui/test/mock-terminal.d.ts +2 -2
  47. package/dist/src/cli/dev/tui/test/mock-terminal.js +1 -1
  48. package/dist/src/cli/dev/tui/theme.d.ts +0 -2
  49. package/dist/src/cli/dev/tui/theme.js +1 -1
  50. package/dist/src/cli/dev/tui/vercel-status.d.ts +4 -2
  51. package/dist/src/cli/dev/tui/vercel-status.js +1 -1
  52. package/dist/src/cli/run.js +1 -1
  53. package/dist/src/cli/telemetry/index.d.ts +1 -1
  54. package/dist/src/cli/telemetry/index.js +1 -1
  55. package/dist/src/client/agent-info-schema.d.ts +2 -0
  56. package/dist/src/client/agent-info-schema.js +1 -1
  57. package/dist/src/client/eve-agent-store-state.d.ts +19 -0
  58. package/dist/src/client/eve-agent-store.js +1 -1
  59. package/dist/src/client/ndjson.d.ts +2 -0
  60. package/dist/src/client/ndjson.js +3 -3
  61. package/dist/src/client/open-stream.d.ts +1 -0
  62. package/dist/src/client/open-stream.js +1 -1
  63. package/dist/src/compiled/.vendor-stamp.json +1 -1
  64. package/dist/src/compiled/@workflow/core/index.js +2 -2
  65. package/dist/src/compiled/@workflow/core/private.js +1 -1
  66. package/dist/src/compiled/@workflow/core/runtime/helpers.js +1 -0
  67. package/dist/src/compiled/@workflow/core/runtime.js +2 -2
  68. package/dist/src/compiled/@workflow/core/serialization.js +1 -0
  69. package/dist/src/compiled/@workflow/core/workflow.js +1 -1
  70. package/dist/src/compiled/@workflow/world-local/index.js +5 -5
  71. package/dist/src/compiled/@workflow/world-vercel/index.js +2 -2
  72. package/dist/src/compiled/_chunks/workflow/attribute-changes-DTFAjP0J.js +6 -0
  73. package/dist/src/compiled/_chunks/workflow/{dist-PLkAQ-U7.js → dist-C5KCXSdI.js} +1 -1
  74. package/dist/src/compiled/_chunks/workflow/{frames-BvATzM2t.js → frames-DJw9L4rO.js} +3 -3
  75. package/dist/src/compiled/_chunks/workflow/global-DFW-hO6M.js +1 -0
  76. package/dist/src/compiled/_chunks/workflow/helpers-ClCA9Lmc.js +1 -0
  77. package/dist/src/compiled/_chunks/workflow/logger-D6vwIEf9.js +13 -0
  78. package/dist/src/compiled/_chunks/workflow/resume-hook-_baK8jaT.js +1 -0
  79. package/dist/src/compiled/_chunks/workflow/run-CRdL17z4.js +1 -0
  80. package/dist/src/compiled/_chunks/workflow/serialization-CWYPL4Eq.js +3 -0
  81. package/dist/src/compiled/_chunks/workflow/sleep-BL0kgJnT.js +1 -0
  82. package/dist/src/compiled/_chunks/workflow/wait-until-DyIt9lEx.js +1 -0
  83. package/dist/src/compiled/_chunks/workflow/{ws-transport-CVezyWwZ.js → ws-transport-Dl5FG4Sw.js} +1 -1
  84. package/dist/src/compiler/extension-compatibility.d.ts +15 -6
  85. package/dist/src/compiler/extension-compatibility.js +1 -1
  86. package/dist/src/context/dynamic-skill-lifecycle.js +1 -1
  87. package/dist/src/context/keys.d.ts +3 -1
  88. package/dist/src/context/keys.js +1 -1
  89. package/dist/src/eve-channel/index.js +1 -1
  90. package/dist/src/eve-channel/request.js +4 -3
  91. package/dist/src/execution/activity-cohort.js +1 -1
  92. package/dist/src/execution/activity-collector.js +1 -1
  93. package/dist/src/execution/authorization-callback-match.d.ts +2 -1
  94. package/dist/src/execution/authorization-callback-match.js +1 -1
  95. package/dist/src/execution/cancel-descendant-turns-step.js +1 -1
  96. package/dist/src/execution/cancel-indexed-session-tasks-step.js +1 -1
  97. package/dist/src/execution/cancelled-model-call-batch.d.ts +1 -1
  98. package/dist/src/execution/connections/callback-route.d.ts +1 -11
  99. package/dist/src/execution/connections/callback-route.js +1 -1
  100. package/dist/src/execution/continuation-conflict-step.d.ts +0 -1
  101. package/dist/src/execution/continuation-conflict-step.js +1 -1
  102. package/dist/src/execution/coordination-dispatch-shared.d.ts +1 -1
  103. package/dist/src/execution/coordination-dispatch-shared.js +1 -1
  104. package/dist/src/execution/create-session-step.d.ts +1 -1
  105. package/dist/src/execution/durable-session-store.d.ts +10 -48
  106. package/dist/src/execution/durable-session-store.js +1 -1
  107. package/dist/src/execution/dynamic-workflow/tool.js +1 -1
  108. package/dist/src/execution/eve-workflow-attributes.d.ts +0 -16
  109. package/dist/src/execution/eve-workflow-attributes.js +1 -1
  110. package/dist/src/execution/hook-ownership.d.ts +2 -4
  111. package/dist/src/execution/hook-ownership.js +1 -1
  112. package/dist/src/execution/legacy-session/authorization.d.ts +9 -0
  113. package/dist/src/execution/legacy-session/authorization.js +1 -0
  114. package/dist/src/execution/legacy-session/completion-step.d.ts +10 -0
  115. package/dist/src/execution/legacy-session/completion-step.js +1 -0
  116. package/dist/src/execution/legacy-session/inbox.d.ts +24 -0
  117. package/dist/src/execution/legacy-session/inbox.js +1 -0
  118. package/dist/src/execution/legacy-session/input.d.ts +19 -0
  119. package/dist/src/execution/legacy-session/input.js +1 -0
  120. package/dist/src/execution/legacy-session/interrupt-step.d.ts +3 -0
  121. package/dist/src/execution/legacy-session/interrupt-step.js +1 -0
  122. package/dist/src/execution/legacy-session/prepare-step.d.ts +24 -0
  123. package/dist/src/execution/legacy-session/prepare-step.js +1 -0
  124. package/dist/src/execution/legacy-session/snapshot.d.ts +12 -0
  125. package/dist/src/execution/legacy-session/snapshot.js +1 -0
  126. package/dist/src/execution/legacy-session/turn-workflow.d.ts +8 -0
  127. package/dist/src/execution/legacy-session/turn-workflow.js +1 -0
  128. package/dist/src/execution/model-call-batching.d.ts +1 -0
  129. package/dist/src/execution/model-call-batching.js +1 -1
  130. package/dist/src/execution/node-step.d.ts +1 -0
  131. package/dist/src/execution/node-step.js +1 -1
  132. package/dist/src/execution/proxied-deliver-step.d.ts +2 -20
  133. package/dist/src/execution/proxied-deliver-step.js +1 -1
  134. package/dist/src/execution/reconcile-session-continuation-token.d.ts +1 -1
  135. package/dist/src/execution/report-dropped-wire-payload-step.d.ts +1 -1
  136. package/dist/src/execution/route-child-delivery.d.ts +2 -2
  137. package/dist/src/execution/route-child-delivery.js +1 -1
  138. package/dist/src/execution/runtime-context.js +1 -1
  139. package/dist/src/execution/sandbox/bindings/eve-image.js +1 -1
  140. package/dist/src/execution/session/accepted-deployment.d.ts +3 -0
  141. package/dist/src/execution/session/accepted-deployment.js +1 -0
  142. package/dist/src/execution/session/admission.d.ts +38 -0
  143. package/dist/src/execution/session/admission.js +1 -0
  144. package/dist/src/execution/session/entry-input.d.ts +42 -0
  145. package/dist/src/execution/session/entry-input.js +1 -0
  146. package/dist/src/execution/session/entry.d.ts +13 -0
  147. package/dist/src/execution/session/entry.js +1 -0
  148. package/dist/src/execution/session/event-sink.d.ts +31 -0
  149. package/dist/src/execution/session/event-sink.js +1 -0
  150. package/dist/src/execution/session/finalization.d.ts +33 -0
  151. package/dist/src/execution/session/finalization.js +1 -0
  152. package/dist/src/execution/session/handoff-steps.d.ts +22 -0
  153. package/dist/src/execution/session/handoff-steps.js +1 -0
  154. package/dist/src/execution/session/handoff.d.ts +69 -0
  155. package/dist/src/execution/session/handoff.js +1 -0
  156. package/dist/src/execution/session/hook-tokens.d.ts +11 -0
  157. package/dist/src/execution/session/hook-tokens.js +1 -0
  158. package/dist/src/execution/session/input-queue.d.ts +72 -0
  159. package/dist/src/execution/session/input-queue.js +1 -0
  160. package/dist/src/execution/session/next-input.d.ts +32 -0
  161. package/dist/src/execution/session/next-input.js +1 -0
  162. package/dist/src/execution/{pending-turn-state.d.ts → session/pending-turn-state.d.ts} +0 -1
  163. package/dist/src/execution/{pending-turn-state.js → session/pending-turn-state.js} +1 -1
  164. package/dist/src/execution/session/program.d.ts +47 -0
  165. package/dist/src/execution/session/program.js +1 -0
  166. package/dist/src/execution/session/route-selected-delivery.d.ts +9 -0
  167. package/dist/src/execution/session/route-selected-delivery.js +1 -0
  168. package/dist/src/execution/session/state-cursor.d.ts +31 -0
  169. package/dist/src/execution/session/state-cursor.js +1 -0
  170. package/dist/src/execution/{session-timeout-control.d.ts → session/timeout-control.d.ts} +1 -1
  171. package/dist/src/execution/session/timeout-control.js +1 -0
  172. package/dist/src/execution/{session-timeout-steps.d.ts → session/timeout-steps.d.ts} +3 -2
  173. package/dist/src/execution/session/timeout-steps.js +1 -0
  174. package/dist/src/execution/{session-timeout-workflow.d.ts → session/timeout-workflow.d.ts} +3 -1
  175. package/dist/src/execution/session/timeout-workflow.js +1 -0
  176. package/dist/src/execution/session/timeout.d.ts +3 -0
  177. package/dist/src/execution/session/timeout.js +1 -0
  178. package/dist/src/execution/session/turn-step-result.d.ts +4 -0
  179. package/dist/src/execution/session/turn-step-result.js +1 -0
  180. package/dist/src/execution/session/turn-step-types.d.ts +68 -0
  181. package/dist/src/execution/session/turn-step-types.js +1 -0
  182. package/dist/src/execution/{workflow-steps.d.ts → session/turn-step.d.ts} +1 -2
  183. package/dist/src/execution/session/turn-step.js +1 -0
  184. package/dist/src/execution/session/turn.d.ts +31 -0
  185. package/dist/src/execution/session/turn.js +1 -0
  186. package/dist/src/execution/session-inbox/address.d.ts +21 -0
  187. package/dist/src/execution/session-inbox/address.js +1 -0
  188. package/dist/src/execution/session-inbox/inbox.d.ts +54 -0
  189. package/dist/src/execution/session-inbox/inbox.js +1 -0
  190. package/dist/src/execution/session-inbox/protocol.d.ts +10 -0
  191. package/dist/src/execution/session-inbox/protocol.js +1 -0
  192. package/dist/src/execution/session-inbox/release-step.d.ts +5 -0
  193. package/dist/src/execution/session-inbox/release-step.js +1 -0
  194. package/dist/src/execution/session-inbox/resume.d.ts +21 -0
  195. package/dist/src/execution/session-inbox/resume.js +1 -0
  196. package/dist/src/execution/{turn-workflow-tool-run.d.ts → session-workflow-tool-run.d.ts} +2 -2
  197. package/dist/src/execution/session-workflow-tool-run.js +1 -0
  198. package/dist/src/execution/settle-cancelled-turn-step.d.ts +2 -2
  199. package/dist/src/execution/settle-cancelled-turn-step.js +1 -1
  200. package/dist/src/execution/skills/instructions.js +1 -1
  201. package/dist/src/execution/stable-workflow-names.d.ts +1 -1
  202. package/dist/src/execution/stable-workflow-names.js +1 -1
  203. package/dist/src/execution/task-input-response-route.js +1 -1
  204. package/dist/src/execution/tasks/child/steps.d.ts +1 -1
  205. package/dist/src/execution/tasks/child/steps.js +1 -1
  206. package/dist/src/execution/tasks/child/workflow.js +1 -1
  207. package/dist/src/execution/tasks/parent/delegate.js +1 -1
  208. package/dist/src/execution/tasks/parent/dispatch.js +1 -1
  209. package/dist/src/execution/tasks/parent/hitl-proxy-steps.js +1 -1
  210. package/dist/src/execution/tasks/parent/tool-execution.js +1 -1
  211. package/dist/src/execution/terminal-session-completion-step.d.ts +1 -1
  212. package/dist/src/execution/terminal-session-event.d.ts +1 -1
  213. package/dist/src/execution/terminal-session-event.js +1 -1
  214. package/dist/src/execution/terminal-session-failure-step.d.ts +1 -1
  215. package/dist/src/execution/terminal-session-failure-step.js +1 -1
  216. package/dist/src/execution/terminate-child-sessions-step.js +1 -1
  217. package/dist/src/execution/tools/sleep-workflow.js +1 -1
  218. package/dist/src/execution/tools/subagent/accept-event-step.js +1 -1
  219. package/dist/src/execution/tools/subagent/emit-called-step.d.ts +1 -1
  220. package/dist/src/execution/tools/subagent/emit-called-step.js +1 -1
  221. package/dist/src/execution/tools/subagent/invoke-agent.d.ts +1 -1
  222. package/dist/src/execution/tools/subagent/invoke-agent.js +1 -1
  223. package/dist/src/execution/tools/subagent/invoke-preparation.d.ts +6 -0
  224. package/dist/src/execution/tools/subagent/invoke-preparation.js +1 -1
  225. package/dist/src/execution/tools/subagent/invoke-step.js +1 -1
  226. package/dist/src/execution/tools/subagent/steer.d.ts +13 -0
  227. package/dist/src/execution/tools/subagent/steer.js +1 -0
  228. package/dist/src/execution/tools/subagent/task-agent-requests.d.ts +1 -1
  229. package/dist/src/execution/tools/subagent/task-agent-requests.js +1 -1
  230. package/dist/src/execution/tools/subagent/task-cancel.js +1 -1
  231. package/dist/src/execution/tools/workflow/ask.d.ts +0 -9
  232. package/dist/src/execution/tools/workflow/ask.js +1 -1
  233. package/dist/src/execution/tools/workflow/body.d.ts +0 -2
  234. package/dist/src/execution/tools/workflow/body.js +1 -1
  235. package/dist/src/execution/tools/workflow/emit-workflow-tool-run-report-step.d.ts +1 -1
  236. package/dist/src/execution/tools/workflow/emit-workflow-tool-run-report-step.js +1 -1
  237. package/dist/src/execution/tools/workflow/messages.d.ts +0 -1
  238. package/dist/src/execution/tools/workflow/messages.js +1 -1
  239. package/dist/src/execution/tools/workflow/owner.d.ts +3 -1
  240. package/dist/src/execution/tools/workflow/owner.js +1 -1
  241. package/dist/src/execution/tools/workflow/resume-hook-step.d.ts +1 -1
  242. package/dist/src/execution/tools/workflow/step-context.d.ts +0 -1
  243. package/dist/src/execution/tools/workflow/step-execution.js +1 -1
  244. package/dist/src/execution/tools/workflow/step.js +1 -1
  245. package/dist/src/execution/tools/workflow/workflow.js +1 -1
  246. package/dist/src/execution/workflow-runtime.d.ts +15 -18
  247. package/dist/src/execution/workflow-runtime.js +1 -1
  248. package/dist/src/harness/authorization.d.ts +5 -37
  249. package/dist/src/harness/authorization.js +1 -1
  250. package/dist/src/harness/compaction.js +1 -1
  251. package/dist/src/harness/coordination.js +1 -1
  252. package/dist/src/harness/emission-state.d.ts +1 -0
  253. package/dist/src/harness/emission.js +1 -1
  254. package/dist/src/harness/generation-steering.d.ts +22 -0
  255. package/dist/src/harness/generation-steering.js +1 -0
  256. package/dist/src/harness/messages.d.ts +1 -1
  257. package/dist/src/harness/messages.js +1 -1
  258. package/dist/src/harness/prompt-cache.js +1 -1
  259. package/dist/src/harness/proxy-input-requests.d.ts +1 -1
  260. package/dist/src/harness/proxy-input-requests.js +1 -1
  261. package/dist/src/harness/semantic-errors/rules/gateway.js +1 -1
  262. package/dist/src/harness/semantic-errors/signals.js +1 -1
  263. package/dist/src/harness/session-limit-enforcement.js +1 -1
  264. package/dist/src/harness/tool-loop.js +2 -2
  265. package/dist/src/harness/types.d.ts +2 -0
  266. package/dist/src/instrumentation/ai-sdk-hook-bridge.js +1 -1
  267. package/dist/src/instrumentation/channel-delivery.js +1 -1
  268. package/dist/src/instrumentation/lifecycle.d.ts +1 -0
  269. package/dist/src/instrumentation/native-events.js +1 -1
  270. package/dist/src/internal/application/compiled-artifacts.js +3 -2
  271. package/dist/src/internal/application/package.js +1 -1
  272. package/dist/src/internal/gateway.d.ts +1 -0
  273. package/dist/src/internal/gateway.js +1 -1
  274. package/dist/src/internal/model-auth/api-key.d.ts +7 -0
  275. package/dist/src/internal/model-auth/api-key.js +1 -0
  276. package/dist/src/internal/model-auth/available-models.d.ts +2 -0
  277. package/dist/src/internal/model-auth/available-models.js +1 -0
  278. package/dist/src/internal/model-auth/development-broker-client.d.ts +3 -0
  279. package/dist/src/internal/model-auth/development-broker-client.js +1 -0
  280. package/dist/src/internal/model-auth/development-broker-protocol.d.ts +12 -0
  281. package/dist/src/internal/model-auth/development-broker-protocol.js +1 -0
  282. package/dist/src/internal/model-auth/development-broker-server.d.ts +4 -0
  283. package/dist/src/internal/model-auth/development-broker-server.js +1 -0
  284. package/dist/src/internal/model-auth/gateway-credential.d.ts +2 -0
  285. package/dist/src/internal/model-auth/gateway-credential.js +1 -0
  286. package/dist/src/internal/model-auth/store.d.ts +16 -0
  287. package/dist/src/internal/model-auth/store.js +1 -0
  288. package/dist/src/internal/model-auth/transport.d.ts +6 -0
  289. package/dist/src/internal/model-auth/transport.js +1 -0
  290. package/dist/src/internal/model-auth/vercel-cli.d.ts +7 -0
  291. package/dist/src/internal/model-auth/vercel-cli.js +1 -0
  292. package/dist/src/internal/model-auth/vercel-team.d.ts +3 -0
  293. package/dist/src/internal/model-auth/vercel-team.js +1 -0
  294. package/dist/src/internal/model-auth/vercel.d.ts +13 -0
  295. package/dist/src/internal/model-auth/vercel.js +1 -0
  296. package/dist/src/internal/nitro/host/dev-authored-source-watcher.js +1 -1
  297. package/dist/src/internal/nitro/host/drained-nitro-dev-server.js +1 -1
  298. package/dist/src/internal/nitro/host/start-development-server.js +2 -2
  299. package/dist/src/internal/nitro/routes/channel-dispatch.js +1 -1
  300. package/dist/src/internal/nitro/routes/info.js +1 -1
  301. package/dist/src/internal/resolve-model-endpoint-status.d.ts +2 -0
  302. package/dist/src/internal/resolve-model-endpoint-status.js +1 -1
  303. package/dist/src/internal/vercel/api-resource.d.ts +4 -0
  304. package/dist/src/internal/vercel/api-resource.js +1 -0
  305. package/dist/src/internal/vercel/eve-service-contribution.js +1 -1
  306. package/dist/src/internal/vercel/vercel-services-config.d.ts +2 -0
  307. package/dist/src/internal/vercel/vercel-services-config.js +1 -1
  308. package/dist/src/internal/workflow/development-world-client.js +1 -1
  309. package/dist/src/internal/workflow/development-world-server.js +1 -1
  310. package/dist/src/internal/workflow/local-world-delivery-timeouts.d.ts +1 -1
  311. package/dist/src/internal/workflow/runtime.d.ts +1 -6
  312. package/dist/src/internal/workflow/runtime.js +1 -1
  313. package/dist/src/internal/workflow/vercel-world-defaults.d.ts +4 -0
  314. package/dist/src/internal/workflow/vercel-world-defaults.js +1 -0
  315. package/dist/src/protocol/activity.js +1 -1
  316. package/dist/src/protocol/message.d.ts +8 -0
  317. package/dist/src/protocol/message.js +2 -2
  318. package/dist/src/protocol/routes.d.ts +0 -2
  319. package/dist/src/protocol/routes.js +1 -1
  320. package/dist/src/public/channels/discord/discordChannel.js +1 -1
  321. package/dist/src/public/channels/slack/slackChannel.js +1 -1
  322. package/dist/src/public/channels/teams/teamsChannel.js +1 -1
  323. package/dist/src/public/channels/telegram/telegramChannel.js +1 -1
  324. package/dist/src/public/definitions/channel.d.ts +1 -1
  325. package/dist/src/public/definitions/channel.js +1 -1
  326. package/dist/src/public/models/anthropic/index.d.ts +3 -0
  327. package/dist/src/public/models/anthropic/index.js +1 -0
  328. package/dist/src/public/models/openai/chatgpt/codex-app-server.js +1 -1
  329. package/dist/src/public/models/openai/chatgpt/credential-store.js +1 -1
  330. package/dist/src/public/models/openai/chatgpt/oauth.js +1 -1
  331. package/dist/src/public/models/openai/chatgpt/transport.js +1 -1
  332. package/dist/src/public/models/openai/index.d.ts +4 -2
  333. package/dist/src/public/models/openai/index.js +1 -1
  334. package/dist/src/public/sandbox/docker-sandbox.d.ts +1 -1
  335. package/dist/src/public/sandbox/microsandbox-sandbox.d.ts +1 -1
  336. package/dist/src/public/sandbox/vercel-sandbox.d.ts +1 -1
  337. package/dist/src/public/vercel/index.d.ts +2 -1
  338. package/dist/src/public/vercel/index.js +1 -1
  339. package/dist/src/runtime/agent/resolve-model.js +1 -1
  340. package/dist/src/runtime/prompt/compose.js +1 -1
  341. package/dist/src/runtime/tools/registry.js +1 -1
  342. package/dist/src/self-modification/agent.js +1 -1
  343. package/dist/src/self-modification/setup.d.ts +9 -3
  344. package/dist/src/self-modification/setup.js +2 -2
  345. package/dist/src/setup/cli/option-row.d.ts +2 -1
  346. package/dist/src/setup/cli/option-row.js +1 -1
  347. package/dist/src/setup/cli/prompt-ui.d.ts +2 -0
  348. package/dist/src/setup/cli/prompt-ui.js +1 -1
  349. package/dist/src/setup/cli/select-state.d.ts +1 -1
  350. package/dist/src/setup/cli/select-state.js +1 -1
  351. package/dist/src/setup/flows/chatgpt-auth.js +1 -1
  352. package/dist/src/setup/flows/deploy.d.ts +4 -9
  353. package/dist/src/setup/flows/deploy.js +1 -1
  354. package/dist/src/setup/flows/ensure-vercel-project.js +1 -1
  355. package/dist/src/setup/flows/install-vercel-cli.d.ts +2 -3
  356. package/dist/src/setup/flows/login.d.ts +3 -1
  357. package/dist/src/setup/flows/login.js +1 -1
  358. package/dist/src/setup/flows/model-login-connection.d.ts +36 -0
  359. package/dist/src/setup/flows/model-login-connection.js +1 -0
  360. package/dist/src/setup/flows/model-login-progress.d.ts +7 -0
  361. package/dist/src/setup/flows/model-login-progress.js +1 -0
  362. package/dist/src/setup/flows/model-login.d.ts +22 -0
  363. package/dist/src/setup/flows/model-login.js +1 -0
  364. package/dist/src/setup/flows/model-source-change.d.ts +7 -0
  365. package/dist/src/setup/flows/model-source-change.js +1 -1
  366. package/dist/src/setup/flows/model.d.ts +6 -24
  367. package/dist/src/setup/flows/model.js +1 -1
  368. package/dist/src/setup/flows/registry.d.ts +3 -19
  369. package/dist/src/setup/flows/registry.js +1 -1
  370. package/dist/src/setup/flows/vercel-model-login.d.ts +5 -0
  371. package/dist/src/setup/flows/vercel-model-login.js +1 -0
  372. package/dist/src/setup/integrations/self-modification/setup.d.ts +2 -0
  373. package/dist/src/setup/integrations/self-modification/setup.js +1 -1
  374. package/dist/src/setup/project-resolution.js +1 -1
  375. package/dist/src/setup/prompter.d.ts +3 -1
  376. package/dist/src/setup/provider-settings.d.ts +19 -6
  377. package/dist/src/setup/provider-settings.js +1 -1
  378. package/dist/src/setup/scaffold/create/project.js +1 -1
  379. package/dist/src/setup/vercel-project.js +0 -0
  380. package/dist/src/setup/with-spinner.d.ts +1 -1
  381. package/dist/src/setup/with-spinner.js +1 -1
  382. package/dist/src/shared/action-types.js +1 -1
  383. package/dist/src/shared/agent-definition.d.ts +6 -4
  384. package/dist/src/shared/chatgpt-model.d.ts +2 -2
  385. package/dist/src/shared/chatgpt-model.js +1 -1
  386. package/dist/src/shared/model-connection.d.ts +17 -0
  387. package/dist/src/shared/model-connection.js +1 -0
  388. package/dist/src/shared/model-endpoint-status.d.ts +2 -1
  389. package/dist/src/shared/model-helper.d.ts +26 -0
  390. package/dist/src/shared/model-helper.js +1 -0
  391. package/dist/src/shared/package-version.d.ts +2 -0
  392. package/dist/src/shared/package-version.js +1 -0
  393. package/dist/src/shared/vercel-services.d.ts +1 -0
  394. package/dist/src/shared/vercel-services.js +1 -1
  395. package/dist/src/source-change/agent-config-ast.d.ts +6 -0
  396. package/dist/src/source-change/agent-config-ast.js +1 -1
  397. package/dist/src/source-change/apply-model-selection.d.ts +3 -1
  398. package/dist/src/source-change/apply-model-selection.js +1 -2
  399. package/dist/src/source-change/static-source-change.js +1 -1
  400. package/dist/src/subagents/callback-route.js +1 -1
  401. package/dist/src/subagents/event-proxy-step.d.ts +3 -3
  402. package/dist/src/subagents/event-proxy-step.js +1 -1
  403. package/dist/src/subagents/handle-dispatch.d.ts +12 -2
  404. package/dist/src/subagents/handle-dispatch.js +1 -1
  405. package/dist/src/subagents/handles/operation-id.d.ts +1 -1
  406. package/dist/src/subagents/handles/query.d.ts +0 -6
  407. package/dist/src/subagents/handles/query.js +1 -1
  408. package/dist/src/subagents/handles/state-key.d.ts +1 -1
  409. package/dist/src/subagents/handles/store.d.ts +1 -1
  410. package/dist/src/subagents/handles/store.js +1 -1
  411. package/dist/src/subagents/hitl-proxy.d.ts +1 -1
  412. package/dist/src/subagents/parent-notification.d.ts +2 -2
  413. package/dist/src/subagents/parent-result.d.ts +1 -1
  414. package/dist/src/subagents/remote-dispatch.d.ts +1 -1
  415. package/dist/src/subagents/remote-dispatch.js +1 -1
  416. package/dist/src/subagents/start-local.js +1 -1
  417. package/dist/src/subagents/tool.js +1 -1
  418. package/dist/src/svelte/index.js +1 -1
  419. package/dist/src/svelte/use-eve-agent.js +1 -1
  420. package/dist/src/tasks/session-index.js +1 -1
  421. package/dist/src/tasks/types.d.ts +1 -1
  422. package/dist/src/tracing/agent-otel-provider.js +2 -2
  423. package/dist/src/tracing/agent-otel-usage.js +1 -1
  424. package/dist/src/tracing/agent-span-contract.d.ts +1 -0
  425. package/dist/src/tracing/agent-span-contract.js +1 -1
  426. package/dist/src/tracing/agent-tool-instrumentation.js +1 -1
  427. package/dist/src/vue/index.js +1 -1
  428. package/dist/src/vue/use-eve-agent.js +1 -1
  429. package/docs/agent-config.md +22 -22
  430. package/docs/channels/chat-sdk.mdx +4 -2
  431. package/docs/channels/custom.mdx +16 -10
  432. package/docs/channels/eve.mdx +3 -1
  433. package/docs/channels/linq.mdx +1 -1
  434. package/docs/channels/overview.mdx +4 -2
  435. package/docs/channels/photon.mdx +4 -1
  436. package/docs/channels/slack.mdx +3 -1
  437. package/docs/concepts/execution-model-and-durability.mdx +62 -13
  438. package/docs/concepts/sessions-runs-and-streaming.md +14 -5
  439. package/docs/getting-started.mdx +7 -3
  440. package/docs/guides/deployment/vercel.mdx +1 -1
  441. package/docs/guides/dev-tui.md +54 -27
  442. package/docs/guides/frontend/overview.mdx +3 -1
  443. package/docs/guides/instrumentation/meta.json +1 -0
  444. package/docs/memory/custom-provider.md +1 -1
  445. package/docs/protocols/acp.md +1 -1
  446. package/docs/reference/cli.md +2 -2
  447. package/docs/reference/telemetry.md +1 -1
  448. package/docs/reference/typescript-api.md +12 -5
  449. package/docs/sandbox.mdx +3 -3
  450. package/docs/subagents/index.mdx +2 -2
  451. package/docs/tools/workflows.mdx +1 -1
  452. package/docs/tutorial/how-it-runs.mdx +1 -1
  453. package/package.json +6 -1
  454. package/dist/src/cli/commands/init-repl.d.ts +0 -80
  455. package/dist/src/cli/commands/init-repl.js +0 -1
  456. package/dist/src/cli/commands/init-self-modification.d.ts +0 -7
  457. package/dist/src/cli/commands/init-self-modification.js +0 -1
  458. package/dist/src/cli/dev/tui/prompt-placeholder.d.ts +0 -12
  459. package/dist/src/cli/dev/tui/prompt-placeholder.js +0 -1
  460. package/dist/src/cli/dev/tui/remote-auth-command.d.ts +0 -11
  461. package/dist/src/cli/dev/tui/remote-auth-command.js +0 -3
  462. package/dist/src/compiled/_chunks/workflow/attribute-changes-BAcgmlXp.js +0 -20
  463. package/dist/src/compiled/_chunks/workflow/private-CFJkQA7R.js +0 -1
  464. package/dist/src/compiled/_chunks/workflow/resume-hook-BEHe0Uut.js +0 -1
  465. package/dist/src/compiled/_chunks/workflow/run-ChHLjaCt.js +0 -1
  466. package/dist/src/compiled/_chunks/workflow/sleep-BB2HuVie.js +0 -1
  467. package/dist/src/execution/accepted-delivery-deployment.d.ts +0 -7
  468. package/dist/src/execution/accepted-delivery-deployment.js +0 -1
  469. package/dist/src/execution/dispatch-turn-step.d.ts +0 -5
  470. package/dist/src/execution/dispatch-turn-step.js +0 -1
  471. package/dist/src/execution/durable-session-migrations/chain.d.ts +0 -38
  472. package/dist/src/execution/durable-session-migrations/chain.js +0 -1
  473. package/dist/src/execution/durable-session-migrations/snapshot.d.ts +0 -6
  474. package/dist/src/execution/durable-session-migrations/snapshot.js +0 -1
  475. package/dist/src/execution/durable-session-migrations/turn-workflow-v0-to-v1.d.ts +0 -12
  476. package/dist/src/execution/durable-session-migrations/turn-workflow-v0-to-v1.js +0 -1
  477. package/dist/src/execution/durable-session-migrations/turn-workflow-v1-to-v2.d.ts +0 -2
  478. package/dist/src/execution/durable-session-migrations/turn-workflow-v1-to-v2.js +0 -1
  479. package/dist/src/execution/durable-session-migrations/turn-workflow.d.ts +0 -88
  480. package/dist/src/execution/durable-session-migrations/turn-workflow.js +0 -1
  481. package/dist/src/execution/forward-turn-cancellation-step.d.ts +0 -6
  482. package/dist/src/execution/forward-turn-cancellation-step.js +0 -1
  483. package/dist/src/execution/forward-turn-delivery-step.d.ts +0 -6
  484. package/dist/src/execution/forward-turn-delivery-step.js +0 -1
  485. package/dist/src/execution/inline-turn.d.ts +0 -31
  486. package/dist/src/execution/inline-turn.js +0 -1
  487. package/dist/src/execution/next-driver-action.d.ts +0 -85
  488. package/dist/src/execution/parked-delivery-wait.d.ts +0 -54
  489. package/dist/src/execution/parked-delivery-wait.js +0 -1
  490. package/dist/src/execution/session-command-inbox.d.ts +0 -52
  491. package/dist/src/execution/session-command-inbox.js +0 -1
  492. package/dist/src/execution/session-command-token.d.ts +0 -6
  493. package/dist/src/execution/session-command-token.js +0 -1
  494. package/dist/src/execution/session-state-cursor.d.ts +0 -25
  495. package/dist/src/execution/session-state-cursor.js +0 -1
  496. package/dist/src/execution/session-timeout-control.js +0 -1
  497. package/dist/src/execution/session-timeout-steps.js +0 -1
  498. package/dist/src/execution/session-timeout-workflow.js +0 -1
  499. package/dist/src/execution/session-timeout.d.ts +0 -2
  500. package/dist/src/execution/session-timeout.js +0 -1
  501. package/dist/src/execution/turn-cancellation-control.d.ts +0 -30
  502. package/dist/src/execution/turn-cancellation-control.js +0 -1
  503. package/dist/src/execution/turn-cancellation-token.d.ts +0 -10
  504. package/dist/src/execution/turn-cancellation-token.js +0 -1
  505. package/dist/src/execution/turn-control-protocol.d.ts +0 -36
  506. package/dist/src/execution/turn-control-protocol.js +0 -1
  507. package/dist/src/execution/turn-control-receiver.d.ts +0 -54
  508. package/dist/src/execution/turn-control-receiver.js +0 -1
  509. package/dist/src/execution/turn-dispatch.d.ts +0 -39
  510. package/dist/src/execution/turn-dispatch.js +0 -1
  511. package/dist/src/execution/turn-execution-cursor.d.ts +0 -49
  512. package/dist/src/execution/turn-execution-cursor.js +0 -1
  513. package/dist/src/execution/turn-workflow-tool-run.js +0 -1
  514. package/dist/src/execution/turn-workflow.d.ts +0 -13
  515. package/dist/src/execution/turn-workflow.js +0 -1
  516. package/dist/src/execution/wire/session-inbox-contract.d.ts +0 -38
  517. package/dist/src/execution/wire/session-inbox-contract.js +0 -1
  518. package/dist/src/execution/wire/session-inbox-encoder.d.ts +0 -47
  519. package/dist/src/execution/wire/session-inbox-encoder.js +0 -1
  520. package/dist/src/execution/wire/session-inbox-resume.d.ts +0 -12
  521. package/dist/src/execution/wire/session-inbox-resume.js +0 -1
  522. package/dist/src/execution/wire/session-inbox-wire.d.ts +0 -29
  523. package/dist/src/execution/wire/session-inbox-wire.js +0 -1
  524. package/dist/src/execution/wire/session-inbox-wire.v0.d.ts +0 -5
  525. package/dist/src/execution/wire/session-inbox-wire.v0.js +0 -1
  526. package/dist/src/execution/wire/session-inbox-wire.v1.d.ts +0 -237
  527. package/dist/src/execution/wire/session-inbox-wire.v1.js +0 -1
  528. package/dist/src/execution/wire/session-inbox-wire.v2-migration.d.ts +0 -2
  529. package/dist/src/execution/wire/session-inbox-wire.v2-migration.js +0 -1
  530. package/dist/src/execution/wire/session-inbox-wire.v2.d.ts +0 -478
  531. package/dist/src/execution/wire/session-inbox-wire.v2.js +0 -1
  532. package/dist/src/execution/wire/session-inbox-wire.v2.migration.d.ts +0 -3
  533. package/dist/src/execution/wire/session-inbox-wire.v2.migration.js +0 -1
  534. package/dist/src/execution/wire/session-inbox-wire.v3.d.ts +0 -480
  535. package/dist/src/execution/wire/session-inbox-wire.v3.js +0 -1
  536. package/dist/src/execution/wire/session-inbox-wire.v3.migration.d.ts +0 -3
  537. package/dist/src/execution/wire/session-inbox-wire.v3.migration.js +0 -1
  538. package/dist/src/execution/wire/session-inbox-wire.v4.d.ts +0 -267
  539. package/dist/src/execution/wire/session-inbox-wire.v4.js +0 -1
  540. package/dist/src/execution/wire/session-inbox-wire.v4.migration.d.ts +0 -3
  541. package/dist/src/execution/wire/session-inbox-wire.v4.migration.js +0 -1
  542. package/dist/src/execution/wire/session-inbox-wire.v5.d.ts +0 -341
  543. package/dist/src/execution/wire/session-inbox-wire.v5.js +0 -1
  544. package/dist/src/execution/wire/session-inbox-wire.v5.migration.d.ts +0 -3
  545. package/dist/src/execution/wire/session-inbox-wire.v5.migration.js +0 -1
  546. package/dist/src/execution/wire/session-inbox-wire.v6.d.ts +0 -341
  547. package/dist/src/execution/wire/session-inbox-wire.v6.js +0 -1
  548. package/dist/src/execution/wire/session-inbox-wire.v7.d.ts +0 -342
  549. package/dist/src/execution/wire/session-inbox-wire.v7.js +0 -1
  550. package/dist/src/execution/workflow-entry-crash.d.ts +0 -39
  551. package/dist/src/execution/workflow-entry-crash.js +0 -1
  552. package/dist/src/execution/workflow-entry-finalization.d.ts +0 -28
  553. package/dist/src/execution/workflow-entry-finalization.js +0 -1
  554. package/dist/src/execution/workflow-entry.d.ts +0 -37
  555. package/dist/src/execution/workflow-entry.js +0 -1
  556. package/dist/src/execution/workflow-steps.js +0 -1
  557. package/dist/src/subagents/handles/rebase.d.ts +0 -4
  558. package/dist/src/subagents/handles/rebase.js +0 -1
  559. /package/dist/src/{execution/next-driver-action.js → client/eve-agent-store-state.js} +0 -0
@@ -1 +1 @@
1
- import{attachClientContext,readClientContext}from"#internal/client-context.js";function createUserMessage(e,t,n){let r={content:t,kind:e,role:`user`};return n===void 0?r:{...r,metadata:n}}function createFrameworkUserMessage(e,t,n){return createUserMessage(e,t,n)}function isUserMessageKind(e){return e===`user`||e===`legacy.unknown`||isFrameworkMessageKind(e)}function isUserModelMessage(e){if(e.role!==`user`)return!1;let{kind:t}=e;return isUserMessageKind(t)}function isFrameworkUserMessage(e){return isUserModelMessage(e)&&isFrameworkMessageKind(e.kind)}function validateHarnessModelMessages(e){let t=[];for(let n of e){if(n.role!==`user`){t.push(n);continue}if(!isUserModelMessage(n))throw TypeError(`Expected every user-role model message to have a kind.`);t.push(n)}return t}function isFrameworkMessageKind(e){return e===`context.instruction`||e===`context.state`||e===`context.compaction`||e===`memory.load`||e===`execution.background_task`||e===`execution.continuation`||e===`execution.retry`}function markFrameworkStepInput(e,t){return{...e,frameworkMessageKind:t}}function frameworkMessageKindForStepInput(e){if(e===void 0)return;let{frameworkMessageKind:t}=e;return isFrameworkMessageKind(t)?t:void 0}function coalesceTurnInputs(e,t){let n=coalesceInputResponses({a:e.inputResponses,b:t.inputResponses}),r=coalesceMessage({a:e.message,b:t.message}),i=coalesceContext({a:e.context,b:t.context}),a=coalesceFrameworkMessageKind({a:e,b:t}),o=coalesceContext({a:readClientContext(e),b:readClientContext(t)}),s=t.outputSchema??e.outputSchema,c={};return n!==void 0&&(c.inputResponses=n),r!==void 0&&(c.message=r),i!==void 0&&(c.context=i),s!==void 0&&(c.outputSchema=s),attachClientContext(a===void 0?c:markFrameworkStepInput(c,a),o)}function normalizeUserContent(e){if(e===void 0)return;if(typeof e==`string`)return e.trim().length>0?e:void 0;let t=e.filter(e=>e.type!==`text`||e.text.trim().length>0);if(t.length!==0)return t.length===e.length?e:t}function normalizeModelMessages(e){return e.flatMap(e=>{if(typeof e.content==`string`)return e.content.trim().length>0?[e]:[];let t=e.content.filter(e=>e.type!==`text`||e.text.trim().length>0);return t.length===0?[]:t.length===e.content.length?[e]:[{...e,content:t}]})}function resolveAssistantStepText(e,t){for(let t=e.length-1;t>=0;--t){let n=e[t];if(n?.role!==`assistant`)continue;let r=extractMessageText(n);if(r.trim().length>0)return r}return t!==void 0&&t.trim().length>0?t:null}function extractMessageText(e){return typeof e.content==`string`?e.content:Array.isArray(e.content)?e.content.flatMap(e=>typeof e==`string`?[e]:`type`in e&&e.type===`text`&&typeof e.text==`string`?[e.text]:[]).join(``):``}function coalesceInputResponses(e){let t=e.a??[],n=e.b??[];if(t.length!==0||n.length!==0)return[...t,...n]}function coalesceContext(e){let t=e.a??[],n=e.b??[];if(t.length!==0||n.length!==0)return[...t,...n]}function coalesceFrameworkMessageKind(e){let t=frameworkMessageKindForStepInput(e.a),n=frameworkMessageKindForStepInput(e.b);return e.a.message===void 0?n:e.b.message===void 0||t===n?t:void 0}function coalesceMessage(e){let t=normalizeUserContent(e.a),n=normalizeUserContent(e.b);return t===void 0?n:n===void 0?t:appendUserContent({appended:n,existing:t})}function appendUserContent(e){return typeof e.existing==`string`&&typeof e.appended==`string`?`${e.existing}\n\n${e.appended}`:[...toUserContentArray(e.existing),...toUserContentArray(e.appended)]}function toUserContentArray(e){return typeof e==`string`?e.length>0?[{type:`text`,text:e}]:[]:Array.isArray(e)?[...e]:[]}function coalesceDeliveries(e){let[t,...n]=e;if(t===void 0)throw Error(`Cannot coalesce an empty delivery batch.`);let r=t.auth,i=t.caller,a=[...t.payloads],o=[...t.deliveryMetadata??[]];for(let e of n){let t=a.length;if(e.auth!==void 0&&(r=e.auth),e.caller!==void 0){if(i!==void 0)throw Error(`Cannot coalesce deliveries from different turns.`);i=e.caller}a.push(...e.payloads),o.push(...(e.deliveryMetadata??[]).map(e=>({...e,payloadIndex:e.payloadIndex+t})))}return{...t,auth:r,caller:i,deliveryMetadata:o.length===0?void 0:o,payloads:a}}export{appendUserContent,coalesceDeliveries,coalesceTurnInputs,createFrameworkUserMessage,createUserMessage,frameworkMessageKindForStepInput,isFrameworkMessageKind,isFrameworkUserMessage,isUserMessageKind,isUserModelMessage,markFrameworkStepInput,normalizeModelMessages,normalizeUserContent,resolveAssistantStepText,validateHarnessModelMessages};
1
+ import{attachClientContext,readClientContext}from"#internal/client-context.js";function createUserMessage(e,t,n){let r={content:t,kind:e,role:`user`};return n===void 0?r:{...r,metadata:n}}function createFrameworkUserMessage(e,t,n){return createUserMessage(e,t,n)}function isUserMessageKind(e){return e===`user`||isFrameworkMessageKind(e)}function isUserModelMessage(e){if(e.role!==`user`)return!1;let{kind:t}=e;return isUserMessageKind(t)}function isFrameworkUserMessage(e){return isUserModelMessage(e)&&e.kind!==`user`}function validateHarnessModelMessages(e){let t=[];for(let n of e){if(n.role!==`user`){t.push(n);continue}if(!isUserModelMessage(n))throw TypeError(`Expected every user-role model message to have a kind.`);t.push(n)}return t}function isFrameworkMessageKind(e){return e===`context.instruction`||e===`context.state`||e===`context.compaction`||e===`memory.load`||e===`execution.background_task`||e===`execution.continuation`||e===`execution.retry`}function markFrameworkStepInput(e,t){return{...e,frameworkMessageKind:t}}function frameworkMessageKindForStepInput(e){if(e===void 0)return;let{frameworkMessageKind:t}=e;return isFrameworkMessageKind(t)?t:void 0}function coalesceTurnInputs(e,t){let n=coalesceInputResponses({a:e.inputResponses,b:t.inputResponses}),r=coalesceMessage({a:e.message,b:t.message}),i=coalesceContext({a:e.context,b:t.context}),a=coalesceFrameworkMessageKind({a:e,b:t}),o=coalesceContext({a:readClientContext(e),b:readClientContext(t)}),s=t.outputSchema??e.outputSchema,c={};return n!==void 0&&(c.inputResponses=n),r!==void 0&&(c.message=r),i!==void 0&&(c.context=i),s!==void 0&&(c.outputSchema=s),attachClientContext(a===void 0?c:markFrameworkStepInput(c,a),o)}function normalizeUserContent(e){if(e===void 0)return;if(typeof e==`string`)return e.trim().length>0?e:void 0;let t=e.filter(e=>e.type!==`text`||e.text.trim().length>0);if(t.length!==0)return t.length===e.length?e:t}function normalizeModelMessages(e){return e.flatMap(e=>{if(typeof e.content==`string`)return e.content.trim().length>0?[e]:[];let t=e.content.filter(e=>e.type!==`text`||e.text.trim().length>0);return t.length===0?[]:t.length===e.content.length?[e]:[{...e,content:t}]})}function resolveAssistantStepText(e,t){for(let t=e.length-1;t>=0;--t){let n=e[t];if(n?.role!==`assistant`)continue;let r=extractMessageText(n);if(r.trim().length>0)return r}return t!==void 0&&t.trim().length>0?t:null}function extractMessageText(e){return typeof e.content==`string`?e.content:Array.isArray(e.content)?e.content.flatMap(e=>typeof e==`string`?[e]:`type`in e&&e.type===`text`&&typeof e.text==`string`?[e.text]:[]).join(``):``}function coalesceInputResponses(e){let t=e.a??[],n=e.b??[];if(t.length!==0||n.length!==0)return[...t,...n]}function coalesceContext(e){let t=e.a??[],n=e.b??[];if(t.length!==0||n.length!==0)return[...t,...n]}function coalesceFrameworkMessageKind(e){let t=frameworkMessageKindForStepInput(e.a),n=frameworkMessageKindForStepInput(e.b);return e.a.message===void 0?n:e.b.message===void 0||t===n?t:void 0}function coalesceMessage(e){let t=normalizeUserContent(e.a),n=normalizeUserContent(e.b);return t===void 0?n:n===void 0?t:appendUserContent({appended:n,existing:t})}function appendUserContent(e){return typeof e.existing==`string`&&typeof e.appended==`string`?`${e.existing}\n\n${e.appended}`:[...toUserContentArray(e.existing),...toUserContentArray(e.appended)]}function toUserContentArray(e){return typeof e==`string`?e.length>0?[{type:`text`,text:e}]:[]:Array.isArray(e)?[...e]:[]}function coalesceDeliveries(e){let[t,...n]=e;if(t===void 0)throw Error(`Cannot coalesce an empty delivery batch.`);let r=t.auth,i=t.caller,a=[...t.payloads],o=[...t.deliveryMetadata??[]];for(let e of n){let t=a.length;if(e.auth!==void 0&&(r=e.auth),e.caller!==void 0){if(i!==void 0)throw Error(`Cannot coalesce deliveries from different turns.`);i=e.caller}a.push(...e.payloads),o.push(...(e.deliveryMetadata??[]).map(e=>({...e,payloadIndex:e.payloadIndex+t})))}return{...t,auth:r,caller:i,deliveryMetadata:o.length===0?void 0:o,payloads:a}}export{appendUserContent,coalesceDeliveries,coalesceTurnInputs,createFrameworkUserMessage,createUserMessage,frameworkMessageKindForStepInput,isFrameworkMessageKind,isFrameworkUserMessage,isUserMessageKind,isUserModelMessage,markFrameworkStepInput,normalizeModelMessages,normalizeUserContent,resolveAssistantStepText,validateHarnessModelMessages};
@@ -1 +1 @@
1
- const ANTHROPIC_CACHE_MARKER=Object.freeze({anthropic:Object.freeze({cacheControl:Object.freeze({type:`ephemeral`})}),bedrock:Object.freeze({cachePoint:Object.freeze({type:`default`})})});function detectPromptCachePath(e){if(typeof e==`string`)return{kind:`gateway-auto`};let t=typeof e.provider==`string`?e.provider.toLowerCase():``;if(t.includes(`anthropic`))return{kind:`anthropic-direct`};let n=typeof e.modelId==`string`?e.modelId.toLowerCase():``;return t.includes(`bedrock`)&&n.includes(`anthropic`)?{kind:`anthropic-direct`}:{kind:`none`}}function getAnthropicCacheMarker(){return ANTHROPIC_CACHE_MARKER}function mergeGatewayAutoCaching(e){let t=e?.gateway!==void 0&&typeof e.gateway==`object`&&e.gateway!==null?e.gateway:void 0,n={...t,caching:t?.caching??`auto`};return{...e,gateway:n}}function applyLastToolCacheBreakpoint(e,t){let n=Object.entries(e);if(n.length===0)return e;let r={};for(let e=0;e<n.length;e++){let[i,a]=n[e];if(e===n.length-1){let e=a.providerOptions!==void 0&&typeof a.providerOptions==`object`?a.providerOptions:void 0;r[i]={...a,providerOptions:{...e,...t}}}else r[i]=a}return r}function applySystemCacheBreakpoint(e,t){if(e.length===0)return[...e];let n=[...e],r=n[n.length-1];return n[n.length-1]={...r,providerOptions:{...r.providerOptions,...t}},n}function applyConversationCacheControl(e,t){if(e.length===0)return[...e];let n=[...e],mark=e=>{let r=n[e];r!==void 0&&(n[e]={...r,providerOptions:{...r.providerOptions,...t}})};mark(n.length-1);for(let e=n.length-2;e>=0;e--)if(n[e]?.role===`assistant`){mark(e);break}return n}export{applyConversationCacheControl,applyLastToolCacheBreakpoint,applySystemCacheBreakpoint,detectPromptCachePath,getAnthropicCacheMarker,mergeGatewayAutoCaching};
1
+ import{isGatewayModel}from"#internal/gateway.js";const ANTHROPIC_CACHE_MARKER=Object.freeze({anthropic:Object.freeze({cacheControl:Object.freeze({type:`ephemeral`})}),bedrock:Object.freeze({cachePoint:Object.freeze({type:`default`})})});function detectPromptCachePath(e){if(typeof e==`string`||isGatewayModel(e))return{kind:`gateway-auto`};let t=typeof e.provider==`string`?e.provider.toLowerCase():``;if(t.includes(`anthropic`))return{kind:`anthropic-direct`};let n=typeof e.modelId==`string`?e.modelId.toLowerCase():``;return t.includes(`bedrock`)&&n.includes(`anthropic`)?{kind:`anthropic-direct`}:{kind:`none`}}function getAnthropicCacheMarker(){return ANTHROPIC_CACHE_MARKER}function mergeGatewayAutoCaching(e){let t=e?.gateway!==void 0&&typeof e.gateway==`object`&&e.gateway!==null?e.gateway:void 0,n={...t,caching:t?.caching??`auto`};return{...e,gateway:n}}function applyLastToolCacheBreakpoint(e,t){let n=Object.entries(e);if(n.length===0)return e;let r={};for(let e=0;e<n.length;e++){let[i,a]=n[e];if(e===n.length-1){let e=a.providerOptions!==void 0&&typeof a.providerOptions==`object`?a.providerOptions:void 0;r[i]={...a,providerOptions:{...e,...t}}}else r[i]=a}return r}function applySystemCacheBreakpoint(e,t){if(e.length===0)return[...e];let n=[...e],r=n[n.length-1];return n[n.length-1]={...r,providerOptions:{...r.providerOptions,...t}},n}function applyConversationCacheControl(e,t){if(e.length===0)return[...e];let n=[...e],mark=e=>{let r=n[e];r!==void 0&&(n[e]={...r,providerOptions:{...r.providerOptions,...t}})};mark(n.length-1);for(let e=n.length-2;e>=0;e--)if(n[e]?.role===`assistant`){mark(e);break}return n}export{applyConversationCacheControl,applyLastToolCacheBreakpoint,applySystemCacheBreakpoint,detectPromptCachePath,getAnthropicCacheMarker,mergeGatewayAutoCaching};
@@ -1,7 +1,7 @@
1
1
  import type { SubagentInputRequestHookPayload } from "#channel/types.js";
2
2
  import type { HarnessSession, SessionStateMap } from "#harness/types.js";
3
3
  import type { InputRequestKind } from "#shared/input.js";
4
- import { type SessionInboxAddress } from "#execution/wire/session-inbox-contract.js";
4
+ import { type SessionInboxAddress } from "#execution/session-inbox/address.js";
5
5
  /**
6
6
  * Marks a continuation token as a bare hook a workflow tool run created for one
7
7
  * request, resumed with the plain response, rather than a child session inbox.
@@ -1 +1 @@
1
- import{isLoopbackHostname}from"#shared/network-address.js";import{isSessionInboxAddress}from"#execution/wire/session-inbox-contract.js";const PROXY_INPUT_REQUESTS_KEY=`eve.runtime.proxyInputRequests`,PROXY_INPUT_REQUEST_KINDS={question:!0,"session-limit":!0,"tool-approval":!0};function createTaskInputRequestId(e,t){return`${e}:${t}`}function getProxyInputRequests(e){return new Map(Object.entries(readMap(e)))}function hasProxyInputRequests(e){for(let t of Object.keys(readMap(e)))return!0;return!1}function upsertProxyInputRequests(e){return{...e.session,state:upsertProxyInputRequestState({entries:e.entries,forChildContinuationToken:e.forChildContinuationToken,state:e.session.state})}}function upsertProxyInputRequestState(e){let t={};for(let[n,r]of Object.entries(readMap(e.state)))r.childContinuationToken!==e.forChildContinuationToken&&(t[n]=r);for(let[n,r]of e.entries)t[n]=r;let n={...e.state};return Object.keys(t).length===0?delete n[PROXY_INPUT_REQUESTS_KEY]:n[PROXY_INPUT_REQUESTS_KEY]=t,Object.keys(n).length>0?n:void 0}function clearProxyInputRequestsForChild(e,t){return clearProxyInputRequestsWhere(e,e=>e.childContinuationToken===t)}function clearProxyInputRequestsWhere(e,t){let n=readMap(e.state),r={},i=!1;for(let[e,a]of Object.entries(n)){if(t(a)){i=!0;continue}r[e]=a}return i?writeMap(e,r):e}function retireProxyInputRequests(e,t){let n={...readMap(e.state)},r=!1;for(let e of t)Object.hasOwn(n,e)&&(delete n[e],r=!0);return r?writeMap(e,n):e}function clearProxyInputRequestsForTask(e,t){return clearProxyInputRequestsWhere(e,e=>e.taskId===t)}function clearAllProxyInputRequests(e){return hasProxyInputRequests(e.state)?writeMap(e,{}):e}function toProxyInputRequestEntries(e,t){let n={approvalRequestIds:e.event.requests.flatMap(e=>e.kind===`tool-approval`?[e.requestId]:[]),requestIds:e.event.requests.map(e=>e.requestId)};return e.event.requests.map(r=>{let i={batch:n,childContinuationToken:e.childContinuationToken,kind:r.kind};return t!==void 0&&(i.taskId=t),e.childSessionInbox?.sessionId===e.childSessionId&&(i.childSessionInbox=e.childSessionInbox),[r.requestId,i]})}function readMap(e){let t=e?.[PROXY_INPUT_REQUESTS_KEY];if(typeof t!=`object`||!t||Array.isArray(t))return{};let n={};for(let[e,r]of Object.entries(t)){let t=parseProxyInputRequest(r,e);t!==void 0&&(n[e]=t)}return n}function writeMap(e,t){let n={...e.state};return Object.keys(t).length===0?(delete n[PROXY_INPUT_REQUESTS_KEY],{...e,state:Object.keys(n).length>0?n:void 0}):(n[PROXY_INPUT_REQUESTS_KEY]=t,{...e,state:n})}function parseProxyInputRequest(e,t){if(typeof e!=`object`||!e||Array.isArray(e)||!(`childContinuationToken`in e)||!(`kind`in e)||typeof e.childContinuationToken!=`string`||!isInputRequestKind(e.kind))return;let n=`taskId`in e?e.taskId:void 0,r=`childRequestId`in e?e.childRequestId:void 0,i=`childResponseUrl`in e?e.childResponseUrl:void 0;if(n!==void 0&&(typeof n!=`string`||n.length===0)||r!==void 0&&(typeof r!=`string`||r.length===0)||n===void 0!=(r===void 0)||i!==void 0&&(typeof i!=`string`||!isAllowedChildResponseUrl(i)))return;let a=`batch`in e?parseProxyInputRequestBatch(e.batch):void 0,o=`answerHook`in e?parseAnswerHookRoute(e.answerHook):void 0;if(`answerHook`in e&&o===void 0)return;let s=`childSessionInbox`in e?e.childSessionInbox:void 0;if(s!==void 0&&!isSessionInboxAddress(s))return;let c={childContinuationToken:e.childContinuationToken,kind:e.kind};return o!==void 0&&(c.answerHook=o),s!==void 0&&(c.childSessionInbox=s),a!==void 0&&a.requestIds.includes(t)&&(c.batch=a),typeof r==`string`&&(c.childRequestId=r),typeof i==`string`&&(c.childResponseUrl=i),typeof n==`string`&&(c.taskId=n),c}function parseAnswerHookRoute(e){if(typeof e==`object`&&e&&`runId`in e)return typeof e.runId==`string`&&e.runId.length>0?{runId:e.runId}:void 0}function parseProxyInputRequestBatch(e){if(typeof e!=`object`||!e||Array.isArray(e)||!(`approvalRequestIds`in e)||!(`requestIds`in e)||!isStringArray(e.approvalRequestIds)||!isStringArray(e.requestIds))return;let t=new Set(e.requestIds);if(!(t.size!==e.requestIds.length||e.approvalRequestIds.some(e=>!t.has(e))))return{approvalRequestIds:e.approvalRequestIds,requestIds:e.requestIds}}function isStringArray(e){return Array.isArray(e)&&e.every(e=>typeof e==`string`)}function isAllowedChildResponseUrl(e){let t;try{t=new URL(e)}catch{return!1}return t.protocol===`https:`||t.protocol===`http:`&&isLoopbackHostname(t.hostname)}function isInputRequestKind(e){return typeof e==`string`&&Object.hasOwn(PROXY_INPUT_REQUEST_KINDS,e)}export{clearAllProxyInputRequests,clearProxyInputRequestsForChild,clearProxyInputRequestsForTask,clearProxyInputRequestsWhere,createTaskInputRequestId,getProxyInputRequests,hasProxyInputRequests,retireProxyInputRequests,toProxyInputRequestEntries,upsertProxyInputRequestState,upsertProxyInputRequests};
1
+ import{isLoopbackHostname}from"#shared/network-address.js";import{isSessionInboxAddress}from"#execution/session-inbox/address.js";const PROXY_INPUT_REQUESTS_KEY=`eve.runtime.proxyInputRequests`,PROXY_INPUT_REQUEST_KINDS={question:!0,"session-limit":!0,"tool-approval":!0};function createTaskInputRequestId(e,t){return`${e}:${t}`}function getProxyInputRequests(e){return new Map(Object.entries(readMap(e)))}function hasProxyInputRequests(e){for(let t of Object.keys(readMap(e)))return!0;return!1}function upsertProxyInputRequests(e){return{...e.session,state:upsertProxyInputRequestState({entries:e.entries,forChildContinuationToken:e.forChildContinuationToken,state:e.session.state})}}function upsertProxyInputRequestState(e){let t={};for(let[n,r]of Object.entries(readMap(e.state)))r.childContinuationToken!==e.forChildContinuationToken&&(t[n]=r);for(let[n,r]of e.entries)t[n]=r;let n={...e.state};return Object.keys(t).length===0?delete n[PROXY_INPUT_REQUESTS_KEY]:n[PROXY_INPUT_REQUESTS_KEY]=t,Object.keys(n).length>0?n:void 0}function clearProxyInputRequestsForChild(e,t){return clearProxyInputRequestsWhere(e,e=>e.childContinuationToken===t)}function clearProxyInputRequestsWhere(e,t){let n=readMap(e.state),r={},i=!1;for(let[e,a]of Object.entries(n)){if(t(a)){i=!0;continue}r[e]=a}return i?writeMap(e,r):e}function retireProxyInputRequests(e,t){let n={...readMap(e.state)},r=!1;for(let e of t)Object.hasOwn(n,e)&&(delete n[e],r=!0);return r?writeMap(e,n):e}function clearProxyInputRequestsForTask(e,t){return clearProxyInputRequestsWhere(e,e=>e.taskId===t)}function clearAllProxyInputRequests(e){return hasProxyInputRequests(e.state)?writeMap(e,{}):e}function toProxyInputRequestEntries(e,t){let n={approvalRequestIds:e.event.requests.flatMap(e=>e.kind===`tool-approval`?[e.requestId]:[]),requestIds:e.event.requests.map(e=>e.requestId)};return e.event.requests.map(r=>{let i={batch:n,childContinuationToken:e.childContinuationToken,kind:r.kind};return t!==void 0&&(i.taskId=t),e.childSessionInbox?.sessionId===e.childSessionId&&(i.childSessionInbox=e.childSessionInbox),[r.requestId,i]})}function readMap(e){let t=e?.[PROXY_INPUT_REQUESTS_KEY];if(typeof t!=`object`||!t||Array.isArray(t))return{};let n={};for(let[e,r]of Object.entries(t)){let t=parseProxyInputRequest(r,e);t!==void 0&&(n[e]=t)}return n}function writeMap(e,t){let n={...e.state};return Object.keys(t).length===0?(delete n[PROXY_INPUT_REQUESTS_KEY],{...e,state:Object.keys(n).length>0?n:void 0}):(n[PROXY_INPUT_REQUESTS_KEY]=t,{...e,state:n})}function parseProxyInputRequest(e,t){if(typeof e!=`object`||!e||Array.isArray(e)||!(`childContinuationToken`in e)||!(`kind`in e)||typeof e.childContinuationToken!=`string`||!isInputRequestKind(e.kind))return;let n=`taskId`in e?e.taskId:void 0,r=`childRequestId`in e?e.childRequestId:void 0,i=`childResponseUrl`in e?e.childResponseUrl:void 0;if(n!==void 0&&(typeof n!=`string`||n.length===0)||r!==void 0&&(typeof r!=`string`||r.length===0)||n===void 0!=(r===void 0)||i!==void 0&&(typeof i!=`string`||!isAllowedChildResponseUrl(i)))return;let a=`batch`in e?parseProxyInputRequestBatch(e.batch):void 0,o=`answerHook`in e?parseAnswerHookRoute(e.answerHook):void 0;if(`answerHook`in e&&o===void 0)return;let s=`childSessionInbox`in e?e.childSessionInbox:void 0;if(s!==void 0&&!isSessionInboxAddress(s))return;let c={childContinuationToken:e.childContinuationToken,kind:e.kind};return o!==void 0&&(c.answerHook=o),s!==void 0&&(c.childSessionInbox=s),a!==void 0&&a.requestIds.includes(t)&&(c.batch=a),typeof r==`string`&&(c.childRequestId=r),typeof i==`string`&&(c.childResponseUrl=i),typeof n==`string`&&(c.taskId=n),c}function parseAnswerHookRoute(e){if(typeof e==`object`&&e&&`runId`in e)return typeof e.runId==`string`&&e.runId.length>0?{runId:e.runId}:void 0}function parseProxyInputRequestBatch(e){if(typeof e!=`object`||!e||Array.isArray(e)||!(`approvalRequestIds`in e)||!(`requestIds`in e)||!isStringArray(e.approvalRequestIds)||!isStringArray(e.requestIds))return;let t=new Set(e.requestIds);if(!(t.size!==e.requestIds.length||e.approvalRequestIds.some(e=>!t.has(e))))return{approvalRequestIds:e.approvalRequestIds,requestIds:e.requestIds}}function isStringArray(e){return Array.isArray(e)&&e.every(e=>typeof e==`string`)}function isAllowedChildResponseUrl(e){let t;try{t=new URL(e)}catch{return!1}return t.protocol===`https:`||t.protocol===`http:`&&isLoopbackHostname(t.hostname)}function isInputRequestKind(e){return typeof e==`string`&&Object.hasOwn(PROXY_INPUT_REQUEST_KINDS,e)}export{clearAllProxyInputRequests,clearProxyInputRequestsForChild,clearProxyInputRequestsForTask,clearProxyInputRequestsWhere,createTaskInputRequestId,getProxyInputRequests,hasProxyInputRequests,retireProxyInputRequests,toProxyInputRequestEntries,upsertProxyInputRequestState,upsertProxyInputRequests};
@@ -1 +1 @@
1
- import{allOf,anyOf,messageMatches,nameIs,typeIs}from"../rule.js";const GATEWAY_AUTH_FAILURE_SUMMARY_NAME=`AI Gateway authentication failed`,gatewayAuthenticationFailure=anyOf(nameIs(`GatewayAuthenticationError`),typeIs(`authentication_error`),messageMatches(/AI Gateway authentication/i)),GATEWAY_RULES=[{id:`gateway-billing-required`,name:`AI Gateway billing setup required`,tags:[`gateway`,`config`,`recoverable`],when:messageMatches(/AI Gateway requires a valid credit card on file/),message:e=>e.message,hint:`Add a valid credit card or credits in the Vercel dashboard, then retry.`},{id:`gateway-free-tier-model-restricted`,name:`Model unavailable on AI Gateway free tier`,tags:[`gateway`,`config`,`recoverable`],when:messageMatches(/Free tier users do not have access to this model/),message:e=>e.message,hint:`Switch to a model available on the free tier or upgrade your Vercel plan, then retry.`},{id:`gateway-free-tier-rate-limited`,name:`AI Gateway free tier rate limit exceeded`,tags:[`gateway`,`recoverable`],when:messageMatches(/Free tier requests on this model are rate-limited/),message:e=>e.message,hint:`Wait for the free-tier limit to reset or upgrade your Vercel plan, then retry.`},{id:`gateway-auth-invalid-api-key`,name:GATEWAY_AUTH_FAILURE_SUMMARY_NAME,tags:[`gateway`,`config`],when:allOf(gatewayAuthenticationFailure,messageMatches(/Invalid API key/i)),message:`AI Gateway rejected the provided API key.`,hint:"Update or unset `AI_GATEWAY_API_KEY` (check your shell profile if you did not set it for this project) — manage keys at https://vercel.com/dashboard/ai/api-keys. Unsetting it falls back to OIDC via `eve link`."},{id:`gateway-auth-invalid-oidc-token`,name:GATEWAY_AUTH_FAILURE_SUMMARY_NAME,tags:[`gateway`,`config`],when:allOf(gatewayAuthenticationFailure,messageMatches(/Invalid OIDC token/i)),message:`AI Gateway rejected the OIDC token.`,hint:"Run `eve link` to refresh `VERCEL_OIDC_TOKEN` in `.env.local`, or set `AI_GATEWAY_API_KEY` — create a key at https://vercel.com/dashboard/ai/api-keys."},{id:`gateway-auth-missing-credentials`,name:GATEWAY_AUTH_FAILURE_SUMMARY_NAME,tags:[`gateway`,`config`],when:gatewayAuthenticationFailure,message:`AI Gateway received no credentials.`,hint:"Run `eve link` to populate `VERCEL_OIDC_TOKEN`, or set `AI_GATEWAY_API_KEY` — create a key at https://vercel.com/dashboard/ai/api-keys."},{id:`model-not-found`,name:`Model not found`,tags:[`gateway`,`config`],when:anyOf(nameIs(`GatewayModelNotFoundError`,`AI_NoSuchModelError`),typeIs(`model_not_found`)),message:`The requested model is not available.`,hint:"Check the model id in `agent.ts` (`model:`) or switch models with `/model` in `eve dev` — browse available models at https://vercel.com/ai-gateway/models."},{id:`gateway-rate-limited`,name:`AI Gateway rate limit exceeded`,tags:[`gateway`,`transient`],when:anyOf(nameIs(`GatewayRateLimitError`),typeIs(`rate_limit_exceeded`)),message:`AI Gateway rate-limited the request.`,hint:`Retries are automatic; if it persists, reduce request volume or review your plan limits at https://vercel.com/ai-gateway.`},{id:`gateway-upstream-unavailable`,name:`Model provider unavailable`,tags:[`gateway`,`transient`],when:anyOf(nameIs(`GatewayTimeoutError`),typeIs(`timeout_error`,`overloaded_error`)),message:`The model provider is overloaded or timing out upstream of AI Gateway.`,hint:"This is transient — retry shortly, or switch models with `/model` in `eve dev`."}];export{GATEWAY_RULES};
1
+ import{allOf,anyOf,messageMatches,nameIs,typeIs}from"../rule.js";const GATEWAY_AUTH_FAILURE_SUMMARY_NAME=`AI Gateway authentication failed`,gatewayAuthenticationFailure=anyOf(nameIs(`GatewayAuthenticationError`),typeIs(`authentication_error`),messageMatches(/AI Gateway authentication/i)),GATEWAY_RULES=[{id:`gateway-billing-required`,name:`AI Gateway billing setup required`,tags:[`gateway`,`config`,`recoverable`],when:messageMatches(/AI Gateway requires a valid credit card on file/),message:e=>e.message,hint:`Add a valid credit card or credits in the Vercel dashboard, then retry.`},{id:`gateway-credit-exhausted`,name:`AI Gateway credit balance exhausted`,tags:[`gateway`,`config`,`recoverable`],when:anyOf(typeIs(`insufficient_funds`),messageMatches(/A positive credit balance is required/i)),message:`AI Gateway requires a positive credit balance to process requests.`,hint:`Add credits in the Vercel dashboard, then retry.`},{id:`gateway-budget-exhausted`,name:`AI Gateway project budget exceeded`,tags:[`gateway`,`config`,`recoverable`],when:anyOf(typeIs(`quota_for_entity_exceeded`),messageMatches(/Project budget exceeded/i)),message:`The AI Gateway project budget has been exceeded.`,hint:`Ask your administrator to increase the project budget, then retry.`},{id:`gateway-free-tier-model-restricted`,name:`Model unavailable on AI Gateway free tier`,tags:[`gateway`,`config`,`recoverable`],when:messageMatches(/Free tier users do not have access to this model/),message:e=>e.message,hint:`Switch to a model available on the free tier or upgrade your Vercel plan, then retry.`},{id:`gateway-free-tier-rate-limited`,name:`AI Gateway free tier rate limit exceeded`,tags:[`gateway`,`recoverable`],when:messageMatches(/Free tier requests on this model are rate-limited/),message:e=>e.message,hint:`Wait for the free-tier limit to reset or upgrade your Vercel plan, then retry.`},{id:`gateway-auth-invalid-api-key`,name:GATEWAY_AUTH_FAILURE_SUMMARY_NAME,tags:[`gateway`,`config`],when:allOf(gatewayAuthenticationFailure,messageMatches(/Invalid API key/i)),message:`AI Gateway rejected the provided API key.`,hint:"Update or unset `AI_GATEWAY_API_KEY` (check your shell profile if you did not set it for this project) — manage keys at https://vercel.com/dashboard/ai/api-keys. Unsetting it falls back to OIDC via `eve link`."},{id:`gateway-auth-invalid-oidc-token`,name:GATEWAY_AUTH_FAILURE_SUMMARY_NAME,tags:[`gateway`,`config`],when:allOf(gatewayAuthenticationFailure,messageMatches(/Invalid OIDC token/i)),message:`AI Gateway rejected the OIDC token.`,hint:"Run `eve link` to refresh `VERCEL_OIDC_TOKEN` in `.env.local`, or set `AI_GATEWAY_API_KEY` — create a key at https://vercel.com/dashboard/ai/api-keys."},{id:`gateway-auth-missing-credentials`,name:GATEWAY_AUTH_FAILURE_SUMMARY_NAME,tags:[`gateway`,`config`],when:gatewayAuthenticationFailure,message:`AI Gateway received no credentials.`,hint:"Run `eve link` to populate `VERCEL_OIDC_TOKEN`, or set `AI_GATEWAY_API_KEY` — create a key at https://vercel.com/dashboard/ai/api-keys."},{id:`model-not-found`,name:`Model not found`,tags:[`gateway`,`config`],when:anyOf(nameIs(`GatewayModelNotFoundError`,`AI_NoSuchModelError`),typeIs(`model_not_found`)),message:`The requested model is not available.`,hint:"Check the model id in `agent.ts` (`model:`) or switch models with `/model` in `eve dev` — browse available models at https://vercel.com/ai-gateway/models."},{id:`gateway-rate-limited`,name:`AI Gateway rate limit exceeded`,tags:[`gateway`,`transient`],when:anyOf(nameIs(`GatewayRateLimitError`),typeIs(`rate_limit_exceeded`)),message:`AI Gateway rate-limited the request.`,hint:`Retries are automatic; if it persists, reduce request volume or review your plan limits at https://vercel.com/ai-gateway.`},{id:`gateway-upstream-unavailable`,name:`Model provider unavailable`,tags:[`gateway`,`transient`],when:anyOf(nameIs(`GatewayTimeoutError`),typeIs(`timeout_error`,`overloaded_error`)),message:`The model provider is overloaded or timing out upstream of AI Gateway.`,hint:"This is transient — retry shortly, or switch models with `/model` in `eve dev`."}];export{GATEWAY_RULES};
@@ -1 +1 @@
1
- import{isObject}from"#shared/guards.js";import{walkCauseChain}from"#shared/errors.js";function extractErrorSignals(e){let t=[];for(let n of walkCauseChain(e)){if(!isObject(n))continue;let e={message:typeof n.message==`string`?n.message:``};typeof n.name==`string`&&n.name.length>0&&(e.name=n.name),typeof n.code==`string`&&n.code.length>0&&(e.code=n.code),typeof n.statusCode==`number`&&(e.statusCode=n.statusCode),typeof n.type==`string`&&n.type.length>0&&(e.type=n.type),typeof n.hint==`string`&&n.hint.length>0&&(e.hint=n.hint),t.push(e)}return{chain:t}}export{extractErrorSignals};
1
+ import{isObject}from"#shared/guards.js";import{walkCauseChain}from"#shared/errors.js";function extractErrorSignals(e){let t=[];for(let n of walkCauseChain(e)){if(!isObject(n))continue;let e={message:typeof n.message==`string`?n.message:``};typeof n.name==`string`&&n.name.length>0&&(e.name=n.name),typeof n.code==`string`&&n.code.length>0&&(e.code=n.code),typeof n.statusCode==`number`&&(e.statusCode=n.statusCode);let r=readGatewayType(n);r!==void 0&&(e.type=r),typeof n.hint==`string`&&n.hint.length>0&&(e.hint=n.hint),t.push(e)}return{chain:t}}function readGatewayType(e){if(typeof e.type==`string`&&e.type.length>0)return e.type;let t=readGatewayTypeFromBody(e.data);if(t!==void 0)return t;if(typeof e.responseBody==`string`)try{return readGatewayTypeFromBody(JSON.parse(e.responseBody))}catch{return}}function readGatewayTypeFromBody(e){if(!isObject(e))return;let t=e.error;return isObject(t)&&typeof t.type==`string`?t.type.length>0?t.type:void 0:typeof e.type==`string`&&e.type.length>0?e.type:void 0}export{extractErrorSignals};
@@ -1 +1 @@
1
- import{createInputRequestedEvent}from"#protocol/message.js";import{emitFailedStep,emitTurnEpilogue,setHarnessEmissionState}from"#harness/emission.js";import{SessionLimitDeclinedError}from"#harness/turn-cancellation.js";import{appendPendingInputBatch}from"#harness/input-requests.js";import{bumpSessionRuntimeUsageLimits,getSessionTokenUsage,getSessionUsageLimitViolation}from"#harness/turn-tag-state.js";import{createSessionLimitContinuationRequest}from"#harness/session-limit-continuation.js";async function applySessionLimitContinuation(e){if(e.limitContinuation===void 0)return{result:null,session:e.session};if(e.limitContinuation.granted)return{result:null,session:bumpSessionRuntimeUsageLimits(e.session)};if(e.config.mode!==`conversation`&&e.session.continuationToken===``){let t=getSessionUsageLimitViolation(e.session);return{result:t===null?{next:{done:!0,output:``},session:e.session}:await failSessionUsageLimit({...e,violation:t}),session:e.session}}throw new SessionLimitDeclinedError}async function enforceSessionUsageLimit(e){let t=getSessionUsageLimitViolation(e.session);if(t===null)return null;let{emit:n}=e;return violationWindow(t)>0&&n!==void 0&&(e.config.mode===`conversation`||e.config.capabilities?.requestInput===!0)?parkOnSessionUsageLimit({...e,emit:n,violation:t}):failSessionUsageLimit({...e,violation:t})}async function parkOnSessionUsageLimit(e){let t=createSessionLimitContinuationRequest({sessionId:e.session.sessionId,violation:e.violation}),n=e.emissionState,r=appendPendingInputBatch({event:{sequence:n.sequence,stepIndex:n.stepIndex,turnId:n.turnId},requests:[t],responseMessages:[],session:{...e.session,history:[...e.messages]}});return await e.emit(createInputRequestedEvent({requests:[t],sequence:n.sequence,stepIndex:n.stepIndex,turnId:n.turnId})),e.config.mode===`conversation`&&(n=await emitTurnEpilogue(e.emit,n,e.config.mode)),{next:null,session:setHarnessEmissionState(r,n)}}function violationWindow(e){return e.kind===`token-cost`?e.limitUsd:e.limit}function formatSessionLimitMessage(e){return e===`token-cost`?`The session reached its configured model token-cost limit.`:`The session reached its configured ${e} token limit.`}async function failSessionUsageLimit(e){let t=getSessionTokenUsage(e.session),n=formatSessionLimitMessage(e.violation.kind),r=e.violation.kind===`token-cost`?{costUsd:t.costUsd,kind:e.violation.kind,limitUsd:e.violation.limitUsd,usedCostUsd:e.violation.usedCostUsd}:{inputTokens:t.inputTokens,kind:e.violation.kind,limit:e.violation.limit,outputTokens:t.outputTokens,usedTokens:e.violation.usedTokens};return e.emit&&await emitFailedStep(e.emit,e.emissionState,{code:e.violation.kind===`token-cost`?`SESSION_TOKEN_COST_LIMIT_REACHED`:`SESSION_TOKEN_LIMIT_REACHED`,details:r,message:n,sessionId:e.session.sessionId}),{next:{done:!0,isError:e.config.mode===`task`||void 0,output:e.config.mode===`task`?n:``},session:e.session}}export{applySessionLimitContinuation,enforceSessionUsageLimit};
1
+ import{createInputRequestedEvent}from"#protocol/message.js";import{emitFailedStep,emitTurnEpilogue,setHarnessEmissionState}from"#harness/emission.js";import{appendPendingInputBatch}from"#harness/input-requests.js";import{bumpSessionRuntimeUsageLimits,getSessionTokenUsage,getSessionUsageLimitViolation}from"#harness/turn-tag-state.js";import{SessionLimitDeclinedError}from"#harness/turn-cancellation.js";import{createSessionLimitContinuationRequest}from"#harness/session-limit-continuation.js";async function applySessionLimitContinuation(e){if(e.limitContinuation===void 0)return{result:null,session:e.session};if(e.limitContinuation.granted)return{result:null,session:bumpSessionRuntimeUsageLimits(e.session)};if(e.config.mode!==`conversation`&&e.session.continuationToken===``){let t=getSessionUsageLimitViolation(e.session);return{result:t===null?{next:{done:!0,output:``},session:e.session}:await failSessionUsageLimit({...e,violation:t}),session:e.session}}throw new SessionLimitDeclinedError}async function enforceSessionUsageLimit(e){let t=getSessionUsageLimitViolation(e.session);if(t===null)return null;let{emit:n}=e;return violationWindow(t)>0&&n!==void 0&&(e.config.mode===`conversation`||e.config.capabilities?.requestInput===!0)?parkOnSessionUsageLimit({...e,emit:n,violation:t}):failSessionUsageLimit({...e,violation:t})}async function parkOnSessionUsageLimit(e){let t=createSessionLimitContinuationRequest({sessionId:e.session.sessionId,violation:e.violation}),n=e.emissionState,r=appendPendingInputBatch({event:{sequence:n.sequence,stepIndex:n.stepIndex,turnId:n.turnId},requests:[t],responseMessages:[],session:{...e.session,history:[...e.messages]}});return await e.emit(createInputRequestedEvent({requests:[t],sequence:n.sequence,stepIndex:n.stepIndex,turnId:n.turnId})),e.config.mode===`conversation`&&(n=await emitTurnEpilogue(e.emit,n,e.config.mode)),{next:null,session:setHarnessEmissionState(r,n)}}function violationWindow(e){return e.kind===`token-cost`?e.limitUsd:e.limit}function formatSessionLimitMessage(e){return e===`token-cost`?`The session reached its configured model token-cost limit.`:`The session reached its configured ${e} token limit.`}async function failSessionUsageLimit(e){let t=getSessionTokenUsage(e.session),n=formatSessionLimitMessage(e.violation.kind),r=e.violation.kind===`token-cost`?{costUsd:t.costUsd,kind:e.violation.kind,limitUsd:e.violation.limitUsd,usedCostUsd:e.violation.usedCostUsd}:{inputTokens:t.inputTokens,kind:e.violation.kind,limit:e.violation.limit,outputTokens:t.outputTokens,usedTokens:e.violation.usedTokens};return e.emit&&await emitFailedStep(e.emit,e.emissionState,{code:e.violation.kind===`token-cost`?`SESSION_TOKEN_COST_LIMIT_REACHED`:`SESSION_TOKEN_LIMIT_REACHED`,details:r,message:n,sessionId:e.session.sessionId}),{next:{done:!0,isError:e.config.mode===`task`||void 0,output:e.config.mode===`task`?n:``},session:e.session}}export{applySessionLimitContinuation,enforceSessionUsageLimit};
@@ -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,HistoryStateKey,ParentSessionKey,ScheduleIdKey,SessionCallbackKey,StaticModelReferenceKey,TurnTaskDeliveryKey}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{createFrameworkUserMessage,createUserMessage,frameworkMessageKindForStepInput,normalizeModelMessages,normalizeUserContent,resolveAssistantStepText,validateHarnessModelMessages}from"#harness/messages.js";import{getEffectiveModelSelection}from"#context/effective-model.js";import{buildDynamicTools,buildResponseAuthorizationTools}from"#context/build-dynamic-tools.js";import{BoundaryHookError}from"#shared/boundary-hook-error.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{getPendingInputBatches,queueDeferredStepInput}from"#harness/pending-input-batches.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{createCoordinationRequestFromToolCall,resolvePendingCoordination,setPendingCoordinationBatch}from"#harness/coordination.js";import{activeTurnId}from"#harness/active-turn-id.js";import{createHistoryViewPreparer}from"#shared/history-view.js";import{isTurnCancellation,throwIfTurnAborted}from"#harness/turn-cancellation.js";import{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{resolveInitiatingTaskContext}from"#tasks/delivery-context.js";import{getApprovalAuditState,markApprovalCandidateHistoryEventEmitted,markApprovalCandidatePendingEventEmitted,markApprovalSettlementEventEmitted}from"#harness/approval-candidates.js";import{clearTurnClientContextState,getTurnClientContextState,setTurnClientContextState}from"#harness/turn-client-context.js";import{EMPTY_DELIVERY_SENTINEL,hasEmptyDeliverySentinel}from"#shared/empty-delivery.js";import{getInvalidToolCallInputError,isInvalidToolCall}from"#harness/tool-call-input-errors.js";import{ContentFilteredModelResponseError,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{compactMessages,getInputTokenCount,resolveCompactionModel,shouldCompact}from"#harness/compaction.js";import{applySessionLimitContinuation,enforceSessionUsageLimit}from"#harness/session-limit-enforcement.js";import{setEveAttributes}from"#runtime/attributes/emit.js";import{coordinateApprovalDelivery,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,readGatewayGenerationId}from"#harness/step-hooks.js";import{buildToolApproval,buildToolSetFromDefinitions,buildToolSetWithProviderTools}from"#harness/tools.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,HistoryStateKey,ParentSessionKey,ScheduleIdKey,SessionCallbackKey,StaticModelReferenceKey,TurnTaskDeliveryKey}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{createFrameworkUserMessage,createUserMessage,frameworkMessageKindForStepInput,normalizeModelMessages,normalizeUserContent,resolveAssistantStepText,validateHarnessModelMessages}from"#harness/messages.js";import{getEffectiveModelSelection}from"#context/effective-model.js";import{buildDynamicTools,buildResponseAuthorizationTools}from"#context/build-dynamic-tools.js";import{BoundaryHookError}from"#shared/boundary-hook-error.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{setTimeout}from"node:timers/promises";import{getPendingInputBatches,queueDeferredStepInput}from"#harness/pending-input-batches.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{createCoordinationRequestFromToolCall,resolvePendingCoordination,setPendingCoordinationBatch}from"#harness/coordination.js";import{activeTurnId}from"#harness/active-turn-id.js";import{createHistoryViewPreparer}from"#shared/history-view.js";import{isDynamicModelSelectionError}from"#context/dynamic-model-lifecycle.js";import{ASK_QUESTION_TOOL_NAME}from"#harness/request-input-tool.js";import{buildDynamicInstructionMessages,drainDynamicInstructionUserMessages,prepareDynamicInstructionPreamble}from"#context/dynamic-instruction-lifecycle.js";import{PendingSkillAnnouncementKey}from"#context/dynamic-skill-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{isTurnCancellation,throwIfTurnAborted}from"#harness/turn-cancellation.js";import{resolveInitiatingTaskContext}from"#tasks/delivery-context.js";import{BackgroundToolExecutorKey,createBackgroundToolCallBatch}from"#harness/background-tools.js";import{createToolResultMessagePartFromToolError}from"#harness/action-result-helpers.js";import{getApprovalAuditState,markApprovalCandidateHistoryEventEmitted,markApprovalCandidatePendingEventEmitted,markApprovalSettlementEventEmitted}from"#harness/approval-candidates.js";import{clearTurnClientContextState,getTurnClientContextState,setTurnClientContextState}from"#harness/turn-client-context.js";import{EMPTY_DELIVERY_SENTINEL,hasEmptyDeliverySentinel}from"#shared/empty-delivery.js";import{getInvalidToolCallInputError,isInvalidToolCall}from"#harness/tool-call-input-errors.js";import{ContentFilteredModelResponseError,EmptyModelResponseError,classifyModelCallError,extractModelCallErrorDetails,extractUnsupportedProviderToolTypes,extractUpstreamRejectionMessage,isNoOutputGeneratedError}from"#harness/model-call-error.js";import{interruptStreamOnFailure}from"#harness/interruptible-stream.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{GenerationSteering}from"#harness/generation-steering.js";import{compactMessages,getInputTokenCount,resolveCompactionModel,shouldCompact}from"#harness/compaction.js";import{applySessionLimitContinuation,enforceSessionUsageLimit}from"#harness/session-limit-enforcement.js";import{setEveAttributes}from"#runtime/attributes/emit.js";import{coordinateApprovalDelivery,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,readGatewayGenerationId}from"#harness/step-hooks.js";import{buildToolApproval,buildToolSetFromDefinitions,buildToolSetWithProviderTools}from"#harness/tools.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 resolveEffectiveRuntimeModel(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=getEffectiveModelSelection(e.ctx);if(t===null)throw Error(`Dynamic model selection is required before model-dependent work begins. Add a matching resolver handler that returns a concrete model.`);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.modelReference===t?e:{...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(e){let t=e.handleEvent;async function runStep(t,n){return e.instrumentation?.runStep({environment,eveVersion,hasInput:hasStepInput(n),session:t},e=>executeStepBody(e.session,n,e))??executeStepBody(t,n)}async function executeStepBody(n,r,i){let a=n,o=createHistoryViewPreparer({previous:e.historyView,projector:e.historyProjector});o(a.history,a.state);let projectHistory=(e,t)=>o(e,t).messages,s=getHarnessEmissionState(a.state),c=contextStorage.getStore();c!==void 0&&!c.has(StaticModelReferenceKey)&&c.setVirtualContext(StaticModelReferenceKey,a.agent.dynamicModel===!0?null:a.agent.modelReference??null);let l=c?.get(ParentSessionKey),u=c?.get(SessionCallbackKey),d=l!==void 0||u!==void 0,f,p=i?.createHandleEvent({getAttemptScope:()=>f,handleEvent:t,turnId:activeTurnId(s)})??t,failModelSelection=async(t,n)=>{if(throwIfTurnAborted(e.abortSignal),i?.recordError(t),!p)throw t;let r=createErrorId(),o=toErrorMessage(t);return log.error(`model selection failed terminally`,{error:t,errorId:r,sessionId:a.sessionId,turnId:n.turnId}),await emitFailedStep(p,n,{code:`MODEL_SELECTION_FAILED`,details:{errorId:r},message:o,sessionId:a.sessionId}),{next:e.mode===`task`||d?{done:!0,isError:!0,output:o}:{done:!0,output:``},session:a}},failBoundaryEvent=async(t,n)=>{if(throwIfTurnAborted(e.abortSignal),isTurnCancellation(t))throw t;if(isDynamicModelSelectionError(t))return failModelSelection(t,n);if(!p||e.mode!==`conversation`||!(t instanceof BoundaryHookError))throw t;i?.recordError(t);let r=createErrorId(),o=toErrorMessage(t);return log.error(`turn boundary handler failed — parking session`,{error:t,errorId:r,sessionId:a.sessionId,turnId:n.turnId}),s=await emitRecoverableFailedTurn(p,n,{code:`EVENT_HANDLER_FAILED`,continuationToken:a.continuationToken,details:{errorId:r},message:o}),{next:null,session:setHarnessEmissionState({...a,outputSchema:void 0},s),settledTurn:{isError:!0,output:o}}},preparePreambleTrace=async()=>await i?.preparePreamble({sequence:s.sequence,sessionStarted:s.sessionStarted,traceContext:i?.traceContext,turnId:`turn_${s.sequence}`});if(e.clearOnly===!0)return a={...a,state:clearMemorySessionState(a.state)},a=replaceSessionHistory(a,[]),await p?.(createContextClearedEvent({sequence:s.sequence,sessionId:a.sessionId,turnId:activeTurnId(s)})),await p?.(createSessionWaitingEvent()),{next:null,session:a};if(e.compactOnly===!0){if(a.history.length>0)try{let t=contextStorage.getStore(),n=await resolveEffectiveRuntimeModel({config:e,ctx:t,session:a});a=n.session,a=(await maybeCompact({abortSignal:e.abortSignal,auth:t?.get(AuthKey)??null,emit:p,emissionState:{...s,turnId:activeTurnId(s)},force:!0,historyProjector:e.historyProjector,messages:[...a.history],model:n.model,onCompaction:e.onCompaction,resolveModel:e.resolveModel,runtimeIdentity:e.runtimeIdentity,session:a,telemetry:i?.telemetry()})).session}catch(e){logError(log,`manual session compaction failed`,e,{sessionId:a.sessionId})}return await p?.(createSessionWaitingEvent()),{next:null,session:a}}let m=consumeDeferredStepInput({input:r,preferCurrentInput:e.mode!==`conversation`&&r!==void 0&&hasPendingApprovalBatch(a),session:a});a=m.session;let h=await resolvePendingCoordination({emit:p,session:a,stepInput:m.input,tools:e.tools});if(h.outcome===`unresolved`)return{next:null,session:h.session};a=h.session;let g=getPendingInputRequestIds(a.state),_=convertStaleResponsesToUserMessage({history:h.messages,pendingRequestIds:g,stepInput:dropStaleSessionLimitContinuationResponses({pendingRequestIds:g,stepInput:m.input}),tools:e.tools}),v=_.stepInput,y=_.kind===`converted`?{...v,message:_.displayMessage}:v,b=contextStorage.getStore();b!==void 0&&e.resolveStepDynamicTools!==void 0&&shouldPrepareApprovalReplayTools({session:a,stepInput:v})&&await e.resolveStepDynamicTools({ctx:b,event:createStepStartedEvent({modelId:a.agent.modelReference?.id??`dynamic`,sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId}),messages:projectHistory(h.messages,a.state)});let x=shouldPrepareApprovalReplayTools({session:a,stepInput:v})?buildResponseAuthorizationTools({authoredTools:e.tools,context:b}):e.tools,S=await coordinateApprovalDelivery({session:a,stepInput:v,tools:x});if(a=S.session,p){for(let e of S.feedback)await p(createMessageCompletedEvent({message:e,sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId}));let e=getApprovalAuditState(a.state);for(let t of e.activeCandidates.filter(e=>e.pendingEventEmitted!==!0))await p(createApprovalCandidateEvent({candidateId:t.candidateId,outcome:`pending`,requestId:t.requestId,responderPrincipalId:t.responder.principalId,sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId})),a={...a,state:markApprovalCandidatePendingEventEmitted({candidateId:t.candidateId,state:a.state})};for(let t of e.candidateHistory.filter(e=>e.eventEmitted!==!0&&e.status!==`allowed`))await p(createApprovalCandidateEvent({candidateId:t.candidateId,outcome:t.status,requestId:t.requestId,responderPrincipalId:t.responder.principalId,reason:t.reason,sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId})),a={...a,state:markApprovalCandidateHistoryEventEmitted({candidateId:t.candidateId,state:a.state})};for(let t of e.settlements.filter(e=>e.eventEmitted!==!0))await p(createApprovalSettledEvent({outcome:t.outcome===`allowed`?`approved`:`cancelled`,requestId:t.requestId,responderPrincipalId:t.actor.principalId,sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId})),a={...a,state:markApprovalSettlementEventEmitted({requestId:t.requestId,state:a.state})}}if(S.kind===`park`)return{next:null,session:a};if(S.kind===`continue-coordination`)return{next:runStep,session:S.stepInput===void 0?a:queueDeferredStepInput(a,S.stepInput)};if(S.challenges.length>0){if(p)for(let e of S.challenges)await p(createAuthorizationRequiredEvent({authorization:e.challenge,candidateId:e.candidateId,description:e.challenge.instructions??`Authorization required for ${e.name}`,name:e.name,sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId,webhookUrl:e.hookUrl}));let e=S.stepInput===void 0?a:queueDeferredStepInput(a,S.stepInput);return{next:null,session:{...e,state:setPendingAuthorization(e.state,{challenges:S.challenges})}}}let C=resolvePendingInput({deferMessagesWhileApprovalsPending:e.mode!==`conversation`,history:h.messages,resolveApprovalKey:resolveApprovalKeyFromTools(x),session:a,stepInput:S.stepInput});if(C.outcome===`unresolved`){let t=h.outcome===`resolved`?{...C.session,history:validateHarnessModelMessages(h.messages)}:C.session;if(p&&e.mode===`conversation`&&C.deferredMessage===!0&&hasStepInput(r)){c!==void 0&&prepareDynamicInstructionPreamble(c,projectHistory(t.history,t.state));let n=[];try{let t=await preparePreambleTrace();s=await emitTurnPreamble(p,y??{},s,e.runtimeIdentity,t)}catch(e){return n=c===void 0?[]:drainDynamicInstructionUserMessages(c),t={...t,history:validateHarnessModelMessages([...t.history,...n])},a=t,failBoundaryEvent(e,{sessionStarted:!0,sequence:s.sequence,stepIndex:0,turnId:`turn_${s.sequence}`})}return n=c===void 0?[]:drainDynamicInstructionUserMessages(c),t={...t,history:validateHarnessModelMessages([...t.history,...n])},s=await emitTurnEpilogue(p,s,e.mode),{next:null,session:setHarnessEmissionState(t,s)}}return h.outcome===`resolved`?(p&&e.mode===`conversation`&&(s=await emitTurnEpilogue(p,s,e.mode),t=setHarnessEmissionState(t,s)),{next:null,session:t}):{next:null,session:C.session}}if(C.resolvedInputs!==void 0)for(let e of C.resolvedInputs)await i?.publishInputResolutions({batch:e,sessionId:a.sessionId}),p&&await p(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(p&&C.rejectedActions)for(let e of C.rejectedActions)for(let t of e.results)await p(createActionResultEvent({rejected:!0,result:t,sequence:e.event.sequence,stepIndex:e.event.stepIndex,turnId:e.event.turnId}));let w=activeTurnId(s),T=getTurnClientContextState(C.session.state,w),E=C.deferredContext===!0?void 0:readClientContext(v),D=(E??T?.messages)?.map(e=>createFrameworkUserMessage(`context.instruction`,e))??[],O=[];if(v?.context!==void 0&&C.deferredContext!==!0)for(let e of v.context)O.push(createFrameworkUserMessage(`context.instruction`,e));let k=frameworkMessageKindForStepInput(v),A=normalizeUserContent(v?.message),j=A!==void 0&&!C.deferredMessage&&!C.consumedMessage?await stageAttachmentsToSandbox(A):void 0;j!==void 0&&O.push(k===void 0?createUserMessage(`user`,j):createFrameworkUserMessage(k,j));let M=[],N;if(p&&hasStepInput(r)){c!==void 0&&(prepareDynamicInstructionPreamble(c,projectHistory(C.session.history,C.session.state)),prepareMemoryPreamble(c,{history:C.messages,input:[...D,...O],state:C.session.state}));try{let t=await preparePreambleTrace();s=await emitTurnPreamble(p,y??{},s,e.runtimeIdentity,t)}catch(e){return M=c===void 0?[]:drainDynamicInstructionUserMessages(c),N=c===void 0?void 0:drainMemoryCommit(c),a={...C.session,history:validateHarnessModelMessages([...N?.history??C.session.history,...M]),state:N?.state??C.session.state},failBoundaryEvent(e,{sessionStarted:!0,sequence:s.sequence,stepIndex:0,turnId:`turn_${s.sequence}`})}M=c===void 0?[]:drainDynamicInstructionUserMessages(c),N=c===void 0?void 0:drainMemoryCommit(c),i?.setTurnId(s.turnId)}let ee=N?.history??C.session.history,te=C.session.history.length;a=setHarnessEmissionState({...C.session,history:validateHarnessModelMessages([...ee,...M]),state:N?.state??C.session.state},s);let P=validateHarnessModelMessages([...N?.history??C.messages.slice(0,te),...M,...N===void 0?C.messages.slice(te):[]]),F=await applySessionLimitContinuation({config:e,emit:p,emissionState:s,limitContinuation:C.limitContinuation,session:a});if(F.result!==null)return F.result;a=F.session;let I=getAgentHandleStore(a.state);if(!hasUnansweredToolCall(P)){let e=await c?.get(BackgroundToolExecutorKey)?.readAgentViews?.(),t=e===void 0||e.length===0?void 0:[...projectParkedAgentHandles(I??{handles:[]}).map(e=>({availability:`available`,id:e.identity.id,name:e.identity.name,statusLine:e.phase===`parked`?e.lastStatus:void 0})),...e],n=resolveAgentsAnnouncement({agentViews:t,messages:projectHistory(P,a.state),store:I});n!==void 0&&P.push(createFrameworkUserMessage(`context.state`,n))}let L=T;E!==void 0&&(L={insertionIndex:T?.insertionIndex??P.length,messages:E,turnId:w}),L!==void 0&&(a=setTurnClientContextState(a,L)),P=[...P,...O];let createModelMessages=e=>{if(L===void 0||L.messages.length===0)return[...e];let t=Math.min(Math.max(0,L.insertionIndex),e.length);return[...e.slice(0,t),...L.messages.map(e=>createFrameworkUserMessage(`context.instruction`,e)),...e.slice(t)]},R=validateHarnessModelMessages(projectHistory(createModelMessages(P),a.state)),z=c,B;try{z!==void 0&&e.dispatchDynamicModelEvent!==void 0&&await e.dispatchDynamicModelEvent({ctx:z,event:{data:{sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId},type:`step.started`},messages:R}),B=await resolveEffectiveRuntimeModel({config:e,ctx:z,session:a})}catch(e){return failModelSelection(e,s)}a=B.session;let V=B.model,H=detectPromptCachePath(V),U=H.kind===`anthropic-direct`?getAnthropicCacheMarker():void 0,ne=buildGatewayAttributionHeaders(V,e.runtimeIdentity),W=L===void 0?void 0:Math.max(0,P.length-L.insertionIndex),G=await maybeCompact({abortSignal:e.abortSignal,auth:z?.get(AuthKey)??null,emit:p,emissionState:s,historyProjector:e.historyProjector,messages:[...P],model:V,onCompaction:e.onCompaction,promptMessages:createModelMessages(P),resolveModel:e.resolveModel,runtimeIdentity:e.runtimeIdentity,session:a,telemetry:i?.telemetry()});if(a=G.session,G.compacted&&(P=G.messages,L!==void 0&&W!==void 0&&(L={...L,insertionIndex:Math.max(0,P.length-W)},a=setTurnClientContextState(a,L))),R=validateHarnessModelMessages(normalizeModelMessages(projectHistory(createModelMessages(P),a.state))),p)try{await emitStepStarted(p,s,requireSessionModelReference(a).id,R)}catch(e){return failBoundaryEvent(e,s)}let K=getApprovedTools(a,resolveApprovalKeyFromTools(buildResponseAuthorizationTools({authoredTools:e.tools,context:z}))),q=s.sequence===0,re=q&&z?.get(ScheduleIdKey)!==void 0,J=resolveDeliveryPolicy({hasScheduleProvenance:re,hasOutputSchema:a.outputSchema!==void 0,isChild:z?.get(ParentSessionKey)!==void 0,isFirstTurn:q,taskDeliveryPhase:z?.get(TurnTaskDeliveryKey)}),Y=createCurrentMessages(P,{historyState:z?.get(HistoryStateKey),currentTurnMessages:O,projectedMessages:R});z!==void 0&&Y.addSystem(buildDynamicInstructionMessages(z));let ie=z?.get(TurnTaskDeliveryKey)===`initiating`?resolveInitiatingTaskContext({state:a.state,turnId:w}):void 0;Y.addAnnouncements({availableSkills:z?.get(PendingSkillAnnouncementKey),taskState:ie?.context,deliveryInstruction:J.instruction});let ae=renderPendingApprovalsInstruction(getPendingInputBatches(a.state).flatMap(e=>e.requests));ae!==void 0&&Y.add(ae,`context.state`,{cacheFriendly:!1});let oe=Y.history,X=await hydrateSandboxAttachments(Y.nonSystemMessages),prepareModelCallInput=e=>{let t=e?[{role:`system`,content:e}]:[],n=a.agent.system?[{role:`system`,content:a.agent.system}]:[],r=Y.systemMessages.length>0||t.length>0?[...t,...n,...Y.systemMessages]:void 0,o=r!==void 0&&U?applySystemCacheBreakpoint(r,U):r,c=o===void 0?a.agent.system??void 0:mergeSystemInstructions(o);return{instructions:c,telemetryRuntimeContext:i?.resolveRuntimeContext({eveVersion,emissionState:s,environment,modelInput:{instructions:c,messages:X},session:a})}},se=e.tools,runSingleModelCall=async t=>{let{instructions:n,telemetryRuntimeContext:r={}}=t.preparedInput??prepareModelCallInput(t.extraSystemNote);t.retryReason&&(r[`eve.retry.reason`]=t.retryReason);let o=t.trailingUserNote?[...X,createFrameworkUserMessage(`execution.retry`,t.trailingUserNote)]:[...X],c=buildHarnessToolsWithDynamicSubagents(e.tools,z),l=createBackgroundToolCallBatch(),u=getAdvertisedTools({session:a,tools:c});se=u;let d=await buildToolSetWithProviderTools({approvedTools:K,backgroundBatch:l,capabilities:e.capabilities,disabledProviderTools:t.disabledProviderTools,modelReference:requireSessionModelReference(a),tools:u});if(z!==void 0){let n=getAdvertisedTools({session:a,tools:buildDynamicTools(z)}),r=buildToolSetFromDefinitions({approvedTools:K,backgroundBatch:l,capabilities:e.capabilities,disabledProviderTools:t.disabledProviderTools,tools:n});for(let[e,t]of Object.entries(r)){let n=u.get(e);if(n?.runtimeAction!==void 0||n?.workflowId!==void 0)throw Error(`Dynamic tool "${e}" collides with a coordination-visible deferred tool.`);d[e]=t}}a.outputSchema!==void 0&&(d[FINAL_OUTPUT_TOOL_NAME]=buildFinalOutputTool(a.outputSchema));let m=await getAdvertisedTools({modelTools:d,session:a,tools:u});a=m.session;let h=m.modelTools,g=U?applyLastToolCacheBreakpoint(h,U):h,_=activeTurnId(s),v=i?.prepareAttempt({attemptIndex:t.attemptIndex,runtimeContext:r,stepIndex:s.stepIndex,turnId:_});f=v?.scope;let y=buildStepHooks({auth:z?.get(AuthKey)??null,cachePath:H,emit:p,emissionState:s,emitStepStarted:t.suppressStepStartedEmission!==!0,marker:U,session:a}),b={headers:ne,instructions:n,model:V,onLanguageModelCallEnd(e){for(let t of e.content)t.type!==`tool-call`||t.providerExecuted===!0||isInvalidToolCall(t)||l.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)},onStepEnd:y.onStepEnd,onStepStart:y.onStepStart,prepareStep:y.prepareStep,reasoning:a.agent.reasoning,runtimeContext:r,stopWhen:isStepCount(1),telemetry:v?.telemetry,toolApproval:buildToolApproval(h),tools:g},x=new ToolLoopAgent(b),executeModelCall=async()=>{if(p){let t=[...e.tools].filter(([e,t])=>t.runtimeAction!==void 0&&u.get(e)===void 0).map(([e])=>e),n=new Set([ASK_QUESTION_TOOL_NAME,FINAL_OUTPUT_TOOL_NAME,...t]),r=await x.stream({abortSignal:e.abortSignal,messages:o}),{emittedActionCallIds:i,handledInlineToolResultCallIds:a,invalidInputToolCallIds:c,inlineAuthorizationResults:l,trailingInlineToolResultParts:d}=await emitStreamContent(p,s,r.fullStream,{excludedActionToolNames:n,tools:u});throwIfTurnAborted(e.abortSignal);let[f,m]=await Promise.all([y.stepResult,r.responseMessages]);if(f.finishReason===`content-filter`)throw new ContentFilteredModelResponseError(readGatewayGenerationId(f.providerMetadata));if(isEmptyModelResponse(f)&&extractToolResultCallIds(m).size===0&&l.length===0&&d.length===0)throw new EmptyModelResponseError;await emitStepActions(p,s,f,{emittedActionCallIds:i,excludedActionCallIds:c,excludedActionToolNames:n,handledInlineToolResultCallIds:a,tools:u});let h=f.toolResults,g=new Map(h.map(e=>[e.toolCallId,e]));for(let e of l)g.set(e.toolCallId,e);return withAccumulatedResponseMessages({invalidInputToolCallIds:c,responseMessages:appendMissingToolResultMessages({append:d,responseMessages:m}),stepResult:f,toolResults:[...g.values()]})}let t=await x.generate({abortSignal:e.abortSignal,messages:o});throwIfTurnAborted(e.abortSignal);let n=await y.stepResult;if(n.finishReason===`content-filter`)throw new ContentFilteredModelResponseError(readGatewayGenerationId(n.providerMetadata));if(isEmptyModelResponse(n)&&extractToolResultCallIds(t.responseMessages).size===0)throw new EmptyModelResponseError;return withAccumulatedResponseMessages({responseMessages:t.responseMessages,stepResult:n})};try{let e=await executeModelCall();return await v?.complete(),e}catch(e){return await v?.fail(e),rethrowNoOutputAsEmptyResponse(e)}},ce=0,runOneModelCall=async t=>runModelCallWithRetries(e=>runSingleModelCall({...t,attemptIndex:ce++,preparedInput:e===1?t.preparedInput:void 0,suppressStepStartedEmission:e!==1||t.suppressStepStartedEmission}),{sessionId:a.sessionId,turnId:s.turnId},e.abortSignal),le=prepareModelCallInput(),ue=await enforceSessionUsageLimit({config:e,emit:p,emissionState:s,messages:R,session:a});if(ue!==null)return ue;let Z;try{Z=await runOneModelCall({preparedInput:le,suppressStepStartedEmission:!0})}catch(t){throwIfTurnAborted(e.abortSignal);let n=await runModelCallRecoveryPipeline({error:t,stages:[e=>attemptUnsupportedProviderToolRecovery({error:e.error,runOneModelCall,sessionId:a.sessionId,turnId:s.turnId}),e=>attemptEmptyResponseRecovery({emptyDeliveryEnabled:J.allowsEmptyDelivery,error:e.error,retryCallOptions:e.retryCallOptions,runOneModelCall,sessionId:a.sessionId,turnId:s.turnId})]});if(throwIfTurnAborted(e.abortSignal),n.outcome===`recovered`)Z=n.result;else{let t=n.error;if(i?.recordError(t),!p)throw t;let r=extractWorkflowStreamWriteErrorDetails(t);if(r!==null){let e=createErrorId();return log.error(`workflow stream write failed — parking session for retry by the user`,{...r,errorId:e,error:t,sessionId:a.sessionId,turnId:s.turnId}),s=await emitRecoverableFailedTurn(p,s,{code:`WORKFLOW_STREAM_WRITE_FAILED`,continuationToken:a.continuationToken,details:{...r,errorId:e},message:toErrorMessage(t)}),{next:null,session:setHarnessEmissionState(a,s)}}let o=classifyModelCallError(t),c=createErrorId(),l=summarizeKnownError(t),u=l===null?extractUpstreamRejectionMessage(t):null,f=l?.message??u?.message??toErrorMessage(t),m=l?.hint===void 0?f:`${f} ${l.hint}`,h=extractModelCallErrorDetails(t),g=buildModelCallFailureDetails({catalogSummary:l,error:t,errorId:c,modelCallDetails:h,upstreamRejection:u}),_=buildModelCallFailureLogFields({error:t,errorId:c,modelCallDetails:h,recognized:l!==null||u!==null,sessionId:a.sessionId,turnId:s.turnId});if(o===`terminal`)return l===null?log.error(u?.message??`model call failed terminally`,_):log.error(`${l.name}: ${l.message}`,{errorId:c,hint:l.hint,sessionId:a.sessionId,turnId:s.turnId}),await emitFailedStep(p,s,{code:`MODEL_CALL_FAILED`,details:g,message:f,sessionId:a.sessionId}),{next:e.mode===`task`||d?{done:!0,isError:!0,output:m}:{done:!0,output:``},session:a};if(e.mode===`task`){if(o===`recoverable`&&!(t instanceof EmptyModelResponseError)&&!(t instanceof ContentFilteredModelResponseError))throw log.warn(u?.message??`model call failed recoverably in task mode — rethrowing for durable step retry`,_),t;return log.error(u?.message??`model call failed; failing the task run`,_),await emitFailedStep(p,s,{code:`MODEL_CALL_FAILED`,details:g,message:f,sessionId:a.sessionId}),{next:{done:!0,isError:!0,output:m},session:a}}log.error(u?.message??`model call failed — parking session for retry by the user`,_),s=await emitRecoverableFailedTurn(p,s,{code:`MODEL_CALL_FAILED`,continuationToken:a.continuationToken,details:g,message:f});let v={isError:!0,output:m};return a={...a,outputSchema:void 0},{next:null,session:setHarnessEmissionState(a,s),settledTurn:v}}}let Q=accumulateTurnUsage({previous:getTurnUsageState(a.state),turnId:s.turnId,usage:extractTokenUsageDelta({costUsd:extractGatewayCostUsd(Z.providerMetadata),usage:Z.usage})});a=setTurnUsageState(a,Q);let $;try{$=formatLanguageModelGatewayId(V)}catch{$=void 0}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":e.tools.size});let de=await handleStepResult({config:e,emit:p,emissionState:s,durableModelPromptMessageCount:L===void 0||L.messages.length===0?X.length:void 0,promptMessages:oe,result:Z,runStep,session:a,coordinationTools:se});return z?.set(HistoryStateKey,Y.historyState),de}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:r,modelCallDetails:i,upstreamRejection:a}=e;if(t!==null){let e={errorId:r,message:t.message,name:t.name,semanticErrorId:t.id,...i};return t.hint!==void 0&&(e.hint=t.hint),e}return a===null?{...formatError(n,r),...i}:{errorId:r,message:toErrorMessage(n),name:a.name,...i}}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:a}=e,{emissionState:o,session:s}=e,c=resolveAssistantStepText(i.response.messages,i.text),l=i.finishReason!==`tool-calls`&&i.toolCalls.length===0&&hasEmptyDeliverySentinel(c),u=getInvalidToolCallInputErrors({toolCalls:i.toolCalls}),d=new Set([...i.invalidInputToolCallIds??[],...i.toolCalls.filter(isInvalidToolCall).map(e=>e.toolCallId),...u.map(e=>e.toolCallId)]),f=l?[]:appendMissingToolResultMessages({append:u.map(e=>createToolResultMessagePartFromToolError(e)),responseMessages:i.response.messages}),p=l?null:c,m=new Set;for(let e of[...i.content??[],...i.toolResults??[]])(e.type===`tool-result`||e.type===`tool-error`)&&e.providerExecuted===!0&&m.add(e.toolCallId);let h=normalizeProviderToolHistory({messages:f,providerExecutedOutcomeIds:m}),g=h.messages,_={...s,compaction:createNextCompactionConfig(s.compaction,e.durableModelPromptMessageCount,i)},v=extractToolApprovalInputRequests({content:i.content??[],excludedCallIds:d}),y=new Set(v.map(e=>e.action.callId)),b=extractQuestionInputRequests({toolCalls:i.toolCalls,excludedCallIds:new Set([...d,...y]),tools:e.coordinationTools}),x=[...v,...b],S=renderPendingApprovalsSnippet(v),C=g.findIndex(e=>e.role!==`tool`),w=C===-1?g:g.slice(0,C),T=g.slice(w.length),E=validateHarnessModelMessages([...r,...w,...S===void 0?[]:[createFrameworkUserMessage(`context.state`,S)]]),D=getAdvertisedTools({session:_,tools:e.coordinationTools}),O=(i.toolCalls??[]).filter(e=>!d.has(e.toolCallId)).filter(t=>isDeferredHarnessTool(e.coordinationTools.get(t.toolName))).filter(e=>isDeferredHarnessTool(D.get(e.toolName))?!0:(log.warn(`deferred tool call blocked because tool is not advertised`,{callId:e.toolCallId,sessionId:_.sessionId,toolName:e.toolName}),!1)).map(e=>createCoordinationRequestFromToolCall({toolCall:e,tools:D}));if(O.length>0){let e=O.flatMap(e=>e.kind===`runtime-action`?[e.request]:[]),t=O.flatMap(e=>e.kind===`task`?[e.request]:[]);if(x.length===0)return{next:null,session:setHarnessEmissionState(setPendingCoordinationBatch({runtimeActions:e,tasks:t,event:{sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId},responseMessages:g,session:{..._,history:validateHarnessModelMessages(r)}}),advanceStep(o))};let i=setPendingCoordinationBatch({runtimeActions:e,tasks:t,event:{sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId},responseMessages:T,session:{..._,history:E}});return i=appendPendingInputBatch({event:{sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId},requests:x,responseMessages:[],session:i}),n&&await n(createInputRequestedEvent({requests:x,sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId})),{next:null,session:setHarnessEmissionState(i,advanceStep(o))}}if(x.length>0){let e=buildResponseAuthorizationTools({authoredTools:t.tools,context:contextStorage.getStore()}),r=appendPendingInputBatch({event:{sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId},requests:x,responseAuthRequiredRequestIds:v.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:T,session:{..._,history:E}});return n&&(await n(createInputRequestedEvent({requests:x,sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId})),t.mode===`conversation`&&(o=await emitTurnEpilogue(n,o,t.mode),r=setHarnessEmissionState(r,o))),{next:hasDeferredStepInput(r)?a:null,session:r}}let k=resolveInlineAuthorizationInterrupt({messages:[...r,...g],toolResults:i.toolResults});if(k){let{challenges:e,history:r}=k;if(n){for(let t of getSupersededAuthorizationChallenges(_.state,e))await n(createAuthorizationCompletedEvent({attemptId:t.attemptId,authorization:t.challenge,name:t.name,outcome:`failed`,reason:`Superseded by a newer authorization attempt.`,sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId}));for(let t of e)await n(createAuthorizationRequiredEvent({attemptId:t.attemptId,authorization:t.challenge,name:t.name,description:t.challenge.instructions??`Authorization required for ${t.name}`,webhookUrl:t.hookUrl,sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId}));t.mode===`conversation`&&(o=await emitTurnEpilogue(n,o,t.mode))}return{next:null,session:setHarnessEmissionState({..._,history:validateHarnessModelMessages(r),state:setPendingAuthorization(_.state,{challenges:e})},o)}}let A=g,j=validateHarnessModelMessages([...r,...A]),M={..._,history:j};return(M.outputSchema===void 0||extractFinalOutput(i)===void 0)&&(A.at(-1)?.role===`tool`||h.outcomeEndsResponse||hasDeferredStepInput(M))?(n&&(o=advanceStep(o),M=setHarnessEmissionState(M,o)),{next:a,session:M}):t.mode===`task`&&contextStorage.getStore()?.get(ScheduleIdKey)!==void 0&&contextStorage.getStore()?.get(BackgroundToolExecutorKey)?.hasPendingTasks?.()===!0?deferTaskTurn({emissionState:o,emit:n,history:r,result:i,schema:M.outputSchema,session:M,stepOutput:p}):t.mode===`task`?finishTaskTurn({emissionState:o,emit:n,history:r,result:i,schema:M.outputSchema,session:M,stepOutput:p}):finishConversationTurn({emissionState:o,emit:n,history:r,result:i,schema:M.outputSchema,session:M,stepOutput:p})}async function deferTaskTurn(e){let{emit:t,history:n,result:r,schema:i,stepOutput:a}=e,{emissionState:o,session:s}=e;s=clearTurnClientContextState(s);let c=i===void 0?void 0:extractFinalOutput(r);return c!==void 0&&(s={...persistStructuredAssistantTurn(s,n,c),outputSchema:i}),t&&(o=await emitTurnEpilogue(t,o,`conversation`),s=setHarnessEmissionState(s,o)),{next:null,session:s,settledTurn:{output:c??a??``}}}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(s=clearTurnClientContextState(s),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(s=clearTurnClientContextState(s),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}}}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}function replaceSessionHistory(e,t){return contextStorage.getStore()?.delete(HistoryStateKey),{...e,history:t,compaction:{recentWindowSize:e.compaction.recentWindowSize,threshold:e.compaction.threshold,thresholdPercent:e.compaction.thresholdPercent}}}async function maybeCompact(e){let{emit:t,emissionState:n}=e,r=e.messages,i=e.session,a=e.promptMessages??r,o=validateHarnessModelMessages(e.historyProjector?.({messages:a,state:i.state})??a),s=e.force===!0||shouldCompact(o,i.compaction),c=shouldCanonicalizeMemory(r);if(!s&&!c)return{compacted:!1,messages:r,session:i};let l=await resolveCompactionModel({compactionModelReference:i.agent.compactionModelReference,model:e.model,modelReference:requireSessionModelReference(i),resolveModel:e.resolveModel}),u=i.agent.compactionModelReference??requireSessionModelReference(i),d=mergeProviderSafetyIdentifier(u,l.providerOptions,e.auth);if(t){let e=contextStorage.getStore();e!==void 0&&prepareMemoryCompaction(e,{history:r,state:i.state}),await t(createCompactionRequestedEvent({modelId:formatLanguageModelGatewayId(l.model),sequence:n.sequence,sessionId:i.sessionId,turnId:n.turnId,usageInputTokens:getInputTokenCount(o,i.compaction)}),o)}let f=canonicalizeMemoryRecords(r),p=validateHarnessModelMessages(e.historyProjector?.({messages:f.ordinary,state:i.state})??f.ordinary),m=s?await compactMessages([...p],l.model,i.compaction,d,e.telemetry,buildGatewayAttributionHeaders(l.model,e.runtimeIdentity),e.abortSignal,e.force===!0):[...p];if(r=validateHarnessModelMessages([...f.memory,...m]),e.onCompaction)for(let t of e.onCompaction())r.push(t);if(t){let a=contextStorage.getStore();if(a!==void 0&&prepareMemoryCompaction(a,{history:r,state:i.state}),await t(createCompactionCompletedEvent({modelId:formatLanguageModelGatewayId(l.model),sequence:n.sequence,sessionId:i.sessionId,turnId:n.turnId}),e.historyProjector?.({messages:r,state:i.state})??r),a!==void 0){let e=drainMemoryCommit(a);e!==void 0&&(r=validateHarnessModelMessages(e.history),i={...i,state:e.state})}}return{compacted:!0,messages:r,session:replaceSessionHistory(i,r)}}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 resolveEffectiveRuntimeModel(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=getEffectiveModelSelection(e.ctx);if(t===null)throw Error(`Dynamic model selection is required before model-dependent work begins. Add a matching resolver handler that returns a concrete model.`);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.modelReference===t?e:{...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(e){let t=e.handleEvent;async function runStep(t,n){let executeStep=async r=>{let i=r?.session??t,a=new GenerationSteering({abortSignal:e.abortSignal,steeringSignal:e.steeringSignal,outputStarted:getHarnessEmissionState(i.state).assistantOutputStarted});try{return await executeStepBody(i,a,n,r)}finally{a.dispose()}};return e.instrumentation?.runStep({environment,eveVersion,hasInput:hasStepInput(n),session:t},executeStep)??executeStep()}async function executeStepBody(n,r,i,a){let o=n,s=createHistoryViewPreparer({previous:e.historyView,projector:e.historyProjector});s(o.history,o.state);let projectHistory=(e,t)=>s(e,t).messages,c=getHarnessEmissionState(o.state),l=contextStorage.getStore();l!==void 0&&!l.has(StaticModelReferenceKey)&&l.setVirtualContext(StaticModelReferenceKey,o.agent.dynamicModel===!0?null:o.agent.modelReference??null);let u=l?.get(ParentSessionKey),d=l?.get(SessionCallbackKey),f=u!==void 0||d!==void 0,p,m=a?.createHandleEvent({getAttemptScope:()=>p,handleEvent:t,turnId:activeTurnId(c)})??t,h=m===void 0?void 0:async(e,t)=>{r.beforeEvent(e),await m(e,t)},failModelSelection=async(t,n)=>{if(throwIfTurnAborted(e.abortSignal),a?.recordError(t),!h)throw t;let r=createErrorId(),i=toErrorMessage(t);return log.error(`model selection failed terminally`,{error:t,errorId:r,sessionId:o.sessionId,turnId:n.turnId}),await emitFailedStep(h,n,{code:`MODEL_SELECTION_FAILED`,details:{errorId:r},message:i,sessionId:o.sessionId}),{next:e.mode===`task`||f?{done:!0,isError:!0,output:i}:{done:!0,output:``},session:o}},failBoundaryEvent=async(t,n)=>{if(throwIfTurnAborted(e.abortSignal),isTurnCancellation(t))throw t;if(isDynamicModelSelectionError(t))return failModelSelection(t,n);if(!h||e.mode!==`conversation`||!(t instanceof BoundaryHookError))throw t;a?.recordError(t);let r=createErrorId(),i=toErrorMessage(t);return log.error(`turn boundary handler failed — parking session`,{error:t,errorId:r,sessionId:o.sessionId,turnId:n.turnId}),c=await emitRecoverableFailedTurn(h,n,{code:`EVENT_HANDLER_FAILED`,continuationToken:o.continuationToken,details:{errorId:r},message:i}),{next:null,session:setHarnessEmissionState({...o,outputSchema:void 0},c),settledTurn:{isError:!0,output:i}}},preparePreambleTrace=async()=>await a?.preparePreamble({sequence:c.sequence,sessionStarted:c.sessionStarted,traceContext:a?.traceContext,turnId:activeTurnId(c)});if(e.clearOnly===!0)return o={...o,state:clearMemorySessionState(o.state)},o=replaceSessionHistory(o,[]),await h?.(createContextClearedEvent({sequence:c.sequence,sessionId:o.sessionId,turnId:activeTurnId(c)})),await h?.(createSessionWaitingEvent()),{next:null,session:o};if(e.compactOnly===!0){if(o.history.length>0)try{let t=contextStorage.getStore(),n=await resolveEffectiveRuntimeModel({config:e,ctx:t,session:o});o=n.session,o=(await maybeCompact({abortSignal:e.abortSignal,auth:t?.get(AuthKey)??null,emit:h,emissionState:{...c,turnId:activeTurnId(c)},force:!0,historyProjector:e.historyProjector,messages:[...o.history],model:n.model,onCompaction:e.onCompaction,resolveModel:e.resolveModel,runtimeIdentity:e.runtimeIdentity,session:o,telemetry:a?.telemetry()})).session}catch(e){logError(log,`manual session compaction failed`,e,{sessionId:o.sessionId})}return await h?.(createSessionWaitingEvent()),{next:null,session:o}}let g=consumeDeferredStepInput({input:i,preferCurrentInput:e.mode!==`conversation`&&i!==void 0&&hasPendingApprovalBatch(o),session:o});o=g.session;let _=await resolvePendingCoordination({emit:h,session:o,stepInput:g.input,tools:e.tools});if(_.outcome===`unresolved`)return{next:null,session:_.session};o=_.session;let v=getPendingInputRequestIds(o.state),y=convertStaleResponsesToUserMessage({history:_.messages,pendingRequestIds:v,stepInput:dropStaleSessionLimitContinuationResponses({pendingRequestIds:v,stepInput:g.input}),tools:e.tools}),b=y.stepInput,x=y.kind===`converted`?{...b,message:y.displayMessage}:b,S=contextStorage.getStore();S!==void 0&&e.resolveStepDynamicTools!==void 0&&shouldPrepareApprovalReplayTools({session:o,stepInput:b})&&await e.resolveStepDynamicTools({ctx:S,event:createStepStartedEvent({modelId:o.agent.modelReference?.id??`dynamic`,sequence:c.sequence,stepIndex:c.stepIndex,turnId:c.turnId}),messages:projectHistory(_.messages,o.state)});let C=shouldPrepareApprovalReplayTools({session:o,stepInput:b})?buildResponseAuthorizationTools({authoredTools:e.tools,context:S}):e.tools,w=await coordinateApprovalDelivery({session:o,stepInput:b,tools:C});if(o=w.session,h){for(let e of w.feedback)await h(createMessageCompletedEvent({message:e,sequence:c.sequence,stepIndex:c.stepIndex,turnId:c.turnId}));let e=getApprovalAuditState(o.state);for(let t of e.activeCandidates.filter(e=>e.pendingEventEmitted!==!0))await h(createApprovalCandidateEvent({candidateId:t.candidateId,outcome:`pending`,requestId:t.requestId,responderPrincipalId:t.responder.principalId,sequence:c.sequence,stepIndex:c.stepIndex,turnId:c.turnId})),o={...o,state:markApprovalCandidatePendingEventEmitted({candidateId:t.candidateId,state:o.state})};for(let t of e.candidateHistory.filter(e=>e.eventEmitted!==!0&&e.status!==`allowed`))await h(createApprovalCandidateEvent({candidateId:t.candidateId,outcome:t.status,requestId:t.requestId,responderPrincipalId:t.responder.principalId,reason:t.reason,sequence:c.sequence,stepIndex:c.stepIndex,turnId:c.turnId})),o={...o,state:markApprovalCandidateHistoryEventEmitted({candidateId:t.candidateId,state:o.state})};for(let t of e.settlements.filter(e=>e.eventEmitted!==!0))await h(createApprovalSettledEvent({outcome:t.outcome===`allowed`?`approved`:`cancelled`,requestId:t.requestId,responderPrincipalId:t.actor.principalId,sequence:c.sequence,stepIndex:c.stepIndex,turnId:c.turnId})),o={...o,state:markApprovalSettlementEventEmitted({requestId:t.requestId,state:o.state})}}if(w.kind===`park`)return{next:null,session:o};if(w.kind===`continue-coordination`)return{next:runStep,session:w.stepInput===void 0?o:queueDeferredStepInput(o,w.stepInput)};if(w.challenges.length>0){if(h)for(let e of w.challenges)await h(createAuthorizationRequiredEvent({authorization:e.challenge,candidateId:e.candidateId,description:e.challenge.instructions??`Authorization required for ${e.name}`,name:e.name,sequence:c.sequence,stepIndex:c.stepIndex,turnId:c.turnId,webhookUrl:e.hookUrl}));let e=w.stepInput===void 0?o:queueDeferredStepInput(o,w.stepInput);return{next:null,session:{...e,state:setPendingAuthorization(e.state,{challenges:w.challenges})}}}let T=resolvePendingInput({deferMessagesWhileApprovalsPending:e.mode!==`conversation`,history:_.messages,resolveApprovalKey:resolveApprovalKeyFromTools(C),session:o,stepInput:w.stepInput});if(T.outcome===`unresolved`){let t=_.outcome===`resolved`?{...T.session,history:validateHarnessModelMessages(_.messages)}:T.session;if(h&&e.mode===`conversation`&&T.deferredMessage===!0&&hasStepInput(i)){l!==void 0&&prepareDynamicInstructionPreamble(l,projectHistory(t.history,t.state));let n=[];try{let t=await preparePreambleTrace();c=await emitTurnPreamble(h,x??{},c,e.runtimeIdentity,t)}catch(e){return n=l===void 0?[]:drainDynamicInstructionUserMessages(l),t={...t,history:validateHarnessModelMessages([...t.history,...n])},o=t,failBoundaryEvent(e,{sessionStarted:!0,sequence:c.sequence,stepIndex:0,turnId:activeTurnId(c)})}return n=l===void 0?[]:drainDynamicInstructionUserMessages(l),t={...t,history:validateHarnessModelMessages([...t.history,...n])},c=await emitTurnEpilogue(h,c,e.mode),{next:null,session:setHarnessEmissionState(t,c)}}return _.outcome===`resolved`?(h&&e.mode===`conversation`&&(c=await emitTurnEpilogue(h,c,e.mode),t=setHarnessEmissionState(t,c)),{next:null,session:t}):{next:null,session:T.session}}if(T.resolvedInputs!==void 0)for(let e of T.resolvedInputs)await a?.publishInputResolutions({batch:e,sessionId:o.sessionId}),h&&await h(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(h&&T.rejectedActions)for(let e of T.rejectedActions)for(let t of e.results)await h(createActionResultEvent({rejected:!0,result:t,sequence:e.event.sequence,stepIndex:e.event.stepIndex,turnId:e.event.turnId}));let E=activeTurnId(c),D=getTurnClientContextState(T.session.state,E),O=T.deferredContext===!0?void 0:readClientContext(b),k=(O??D?.messages)?.map(e=>createFrameworkUserMessage(`context.instruction`,e))??[],A=[];if(b?.context!==void 0&&T.deferredContext!==!0)for(let e of b.context)A.push(createFrameworkUserMessage(`context.instruction`,e));let j=frameworkMessageKindForStepInput(b),M=normalizeUserContent(b?.message),N=M!==void 0&&!T.deferredMessage&&!T.consumedMessage?await stageAttachmentsToSandbox(M):void 0;N!==void 0&&A.push(j===void 0?createUserMessage(`user`,N):createFrameworkUserMessage(j,N));let P=[],F;if(h&&hasStepInput(i)){l!==void 0&&(prepareDynamicInstructionPreamble(l,projectHistory(T.session.history,T.session.state)),prepareMemoryPreamble(l,{history:T.messages,input:[...k,...A],state:T.session.state}));try{let t=await preparePreambleTrace();c=await emitTurnPreamble(h,x??{},c,e.runtimeIdentity,t)}catch(e){return P=l===void 0?[]:drainDynamicInstructionUserMessages(l),F=l===void 0?void 0:drainMemoryCommit(l),o={...T.session,history:validateHarnessModelMessages([...F?.history??T.session.history,...P]),state:F?.state??T.session.state},failBoundaryEvent(e,{sessionStarted:!0,sequence:c.sequence,stepIndex:0,turnId:activeTurnId(c)})}P=l===void 0?[]:drainDynamicInstructionUserMessages(l),F=l===void 0?void 0:drainMemoryCommit(l),a?.setTurnId(c.turnId)}let ee=F?.history??T.session.history,te=T.session.history.length;o=setHarnessEmissionState({...T.session,history:validateHarnessModelMessages([...ee,...P]),state:F?.state??T.session.state},c);let I=validateHarnessModelMessages([...F?.history??T.messages.slice(0,te),...P,...F===void 0?T.messages.slice(te):[]]),L=await applySessionLimitContinuation({config:e,emit:h,emissionState:c,limitContinuation:T.limitContinuation,session:o});if(L.result!==null)return L.result;o=L.session;let ne=getAgentHandleStore(o.state);if(!hasUnansweredToolCall(I)){let e=await l?.get(BackgroundToolExecutorKey)?.readAgentViews?.(),t=e===void 0||e.length===0?void 0:[...projectParkedAgentHandles(ne??{handles:[]}).map(e=>({availability:`available`,id:e.identity.id,name:e.identity.name,statusLine:e.phase===`parked`?e.lastStatus:void 0})),...e],n=resolveAgentsAnnouncement({agentViews:t,messages:projectHistory(I,o.state),store:ne});n!==void 0&&I.push(createFrameworkUserMessage(`context.state`,n))}let R=D;O!==void 0&&(R={insertionIndex:D?.insertionIndex??I.length,messages:O,turnId:E}),R!==void 0&&(o=setTurnClientContextState(o,R)),I=[...I,...A];let createModelMessages=e=>{if(R===void 0||R.messages.length===0)return[...e];let t=Math.min(Math.max(0,R.insertionIndex),e.length);return[...e.slice(0,t),...R.messages.map(e=>createFrameworkUserMessage(`context.instruction`,e)),...e.slice(t)]},z=validateHarnessModelMessages(projectHistory(createModelMessages(I),o.state)),B=l,V;try{B!==void 0&&e.dispatchDynamicModelEvent!==void 0&&await e.dispatchDynamicModelEvent({ctx:B,event:{data:{sequence:c.sequence,stepIndex:c.stepIndex,turnId:c.turnId},type:`step.started`},messages:z}),V=await resolveEffectiveRuntimeModel({config:e,ctx:B,session:o})}catch(e){return failModelSelection(e,c)}o=V.session;let H=V.model,U=detectPromptCachePath(H),W=U.kind===`anthropic-direct`?getAnthropicCacheMarker():void 0,re=buildGatewayAttributionHeaders(H,e.runtimeIdentity),G=R===void 0?void 0:Math.max(0,I.length-R.insertionIndex),K=await maybeCompact({abortSignal:e.abortSignal,auth:B?.get(AuthKey)??null,emit:h,emissionState:c,historyProjector:e.historyProjector,messages:[...I],model:H,onCompaction:e.onCompaction,promptMessages:createModelMessages(I),resolveModel:e.resolveModel,runtimeIdentity:e.runtimeIdentity,session:o,telemetry:a?.telemetry()});if(o=K.session,K.compacted&&(I=K.messages,R!==void 0&&G!==void 0&&(R={...R,insertionIndex:Math.max(0,I.length-G)},o=setTurnClientContextState(o,R))),z=validateHarnessModelMessages(normalizeModelMessages(projectHistory(createModelMessages(I),o.state))),h)try{await emitStepStarted(h,c,requireSessionModelReference(o).id,z)}catch(e){return failBoundaryEvent(e,c)}let q=getApprovedTools(o,resolveApprovalKeyFromTools(buildResponseAuthorizationTools({authoredTools:e.tools,context:B}))),ie=c.sequence===0,ae=ie&&B?.get(ScheduleIdKey)!==void 0,oe=resolveDeliveryPolicy({hasScheduleProvenance:ae,hasOutputSchema:o.outputSchema!==void 0,isChild:B?.get(ParentSessionKey)!==void 0,isFirstTurn:ie,taskDeliveryPhase:B?.get(TurnTaskDeliveryKey)}),J=createCurrentMessages(I,{historyState:B?.get(HistoryStateKey),currentTurnMessages:A,projectedMessages:z});B!==void 0&&J.addSystem(buildDynamicInstructionMessages(B));let se=B?.get(TurnTaskDeliveryKey)===`initiating`?resolveInitiatingTaskContext({state:o.state,turnId:E}):void 0;J.addAnnouncements({availableSkills:B?.get(PendingSkillAnnouncementKey),taskState:se?.context,deliveryInstruction:oe.instruction});let ce=renderPendingApprovalsInstruction(getPendingInputBatches(o.state).flatMap(e=>e.requests));ce!==void 0&&J.add(ce,`context.state`,{cacheFriendly:!1});let le=J.history,Y,finishSteeredStep=()=>(throwIfTurnAborted(e.abortSignal),B?.set(HistoryStateKey,J.historyState),Y!==void 0&&(o=setTurnUsageState(o,accumulateTurnUsage({previous:getTurnUsageState(o.state),turnId:c.turnId,usage:Y}))),{steered:!0,next:runStep,session:setHarnessEmissionState({...o,history:[...le]},advanceStep(c))}),X=await hydrateSandboxAttachments(J.nonSystemMessages),prepareModelCallInput=e=>{let t=e?[{role:`system`,content:e}]:[],n=o.agent.system?[{role:`system`,content:o.agent.system}]:[],r=J.systemMessages.length>0||t.length>0?[...t,...n,...J.systemMessages]:void 0,i=r!==void 0&&W?applySystemCacheBreakpoint(r,W):r,s=i===void 0?o.agent.system??void 0:mergeSystemInstructions(i);return{instructions:s,telemetryRuntimeContext:a?.resolveRuntimeContext({eveVersion,emissionState:c,environment,modelInput:{instructions:s,messages:X},session:o})}},ue=e.tools,runSingleModelCall=async t=>{r.begin();let{instructions:n,telemetryRuntimeContext:i={}}=t.preparedInput??prepareModelCallInput(t.extraSystemNote);t.retryReason&&(i[`eve.retry.reason`]=t.retryReason);let s=t.trailingUserNote?[...X,createFrameworkUserMessage(`execution.retry`,t.trailingUserNote)]:[...X],l=buildHarnessToolsWithDynamicSubagents(e.tools,B),u=createBackgroundToolCallBatch(),d=getAdvertisedTools({session:o,tools:l});ue=d;let f=await buildToolSetWithProviderTools({approvedTools:q,backgroundBatch:u,capabilities:e.capabilities,disabledProviderTools:t.disabledProviderTools,modelReference:requireSessionModelReference(o),tools:d});if(B!==void 0){let n=getAdvertisedTools({session:o,tools:buildDynamicTools(B)}),r=buildToolSetFromDefinitions({approvedTools:q,backgroundBatch:u,capabilities:e.capabilities,disabledProviderTools:t.disabledProviderTools,tools:n});for(let[e,t]of Object.entries(r)){let n=d.get(e);if(n?.runtimeAction!==void 0||n?.workflowId!==void 0)throw Error(`Dynamic tool "${e}" collides with a coordination-visible deferred tool.`);f[e]=t}}o.outputSchema!==void 0&&(f[FINAL_OUTPUT_TOOL_NAME]=buildFinalOutputTool(o.outputSchema));let m=await getAdvertisedTools({modelTools:f,session:o,tools:d});o=m.session;let g=m.modelTools,_=W?applyLastToolCacheBreakpoint(g,W):g;for(let e of Object.values(_)){let t=e.execute;t!==void 0&&(e.execute=(...e)=>(r.protectToolExecution(),t(...e)));let n=e.onInputAvailable;n!==void 0&&(e.onInputAvailable=(...e)=>(r.protectToolExecution(),n(...e)))}let v=activeTurnId(c),y=a?.prepareAttempt({attemptIndex:t.attemptIndex,runtimeContext:i,stepIndex:c.stepIndex,turnId:v});p=y?.scope;let b=buildStepHooks({auth:B?.get(AuthKey)??null,cachePath:U,emit:h,emissionState:c,emitStepStarted:t.suppressStepStartedEmission!==!0,marker:W,session:o}),x={headers:re,instructions:n,model:H,onLanguageModelCallEnd(e){if(!r.interrupted){Y=extractTokenUsageDelta({usage:e.usage,costUsd:extractGatewayCostUsd(e.providerMetadata)});for(let t of e.content)t.type!==`tool-call`||t.providerExecuted===!0||isInvalidToolCall(t)||u.register({callId:t.toolCallId,input:t.input,toolName:t.toolName})}},onToolExecutionEnd:logToolExecutionError,onError(e){r.interrupted||summarizeKnownError(e.error)?.tags.includes(`config`)!==!0&&logError(log,`tool-loop stream error`,e.error)},onStepEnd:b.onStepEnd,onStepStart:b.onStepStart,prepareStep:b.prepareStep,reasoning:o.agent.reasoning,runtimeContext:i,stopWhen:isStepCount(1),telemetry:y?.telemetry,toolApproval:buildToolApproval(g),tools:_},S=new ToolLoopAgent(x),executeModelCall=async()=>{if(h){let t=[...e.tools].filter(([e,t])=>t.runtimeAction!==void 0&&d.get(e)===void 0).map(([e])=>e),n=new Set([ASK_QUESTION_TOOL_NAME,FINAL_OUTPUT_TOOL_NAME,...t]),i=await S.stream({abortSignal:r.signal,messages:s}),{emittedActionCallIds:a,handledInlineToolResultCallIds:o,invalidInputToolCallIds:l,inlineAuthorizationResults:u,trailingInlineToolResultParts:f}=await emitStreamContent(h,c,interruptStreamOnFailure(i.fullStream,r.signal),{excludedActionToolNames:n,tools:d});throwIfTurnAborted(e.abortSignal),r.check();let[p,m]=await Promise.all([b.stepResult,i.responseMessages]);if(p.finishReason===`content-filter`)throw new ContentFilteredModelResponseError(readGatewayGenerationId(p.providerMetadata));if(isEmptyModelResponse(p)&&extractToolResultCallIds(m).size===0&&u.length===0&&f.length===0)throw new EmptyModelResponseError;await emitStepActions(h,c,p,{emittedActionCallIds:a,excludedActionCallIds:l,excludedActionToolNames:n,handledInlineToolResultCallIds:o,tools:d});let g=p.toolResults,_=new Map(g.map(e=>[e.toolCallId,e]));for(let e of u)_.set(e.toolCallId,e);return withAccumulatedResponseMessages({invalidInputToolCallIds:l,responseMessages:appendMissingToolResultMessages({append:f,responseMessages:m}),stepResult:p,toolResults:[..._.values()]})}let t=await S.generate({abortSignal:r.signal,messages:s});throwIfTurnAborted(e.abortSignal),r.check();let n=await b.stepResult;if(n.finishReason===`content-filter`)throw new ContentFilteredModelResponseError(readGatewayGenerationId(n.providerMetadata));if(isEmptyModelResponse(n)&&extractToolResultCallIds(t.responseMessages).size===0)throw new EmptyModelResponseError;return withAccumulatedResponseMessages({responseMessages:t.responseMessages,stepResult:n})};try{let e=await executeModelCall();return await y?.complete(),e}catch(e){return r.interrupted?await y?.complete():await y?.fail(e),r.check(),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:o.sessionId,turnId:c.turnId},r.signal),fe=prepareModelCallInput(),pe=await enforceSessionUsageLimit({config:e,emit:h,emissionState:c,messages:z,session:o});if(pe!==null)return pe;let Z;try{Z=await runOneModelCall({preparedInput:fe,suppressStepStartedEmission:!0})}catch(t){if(throwIfTurnAborted(e.abortSignal),r.interrupted)return finishSteeredStep();let n=await runModelCallRecoveryPipeline({error:t,stages:[e=>attemptUnsupportedProviderToolRecovery({error:e.error,runOneModelCall,sessionId:o.sessionId,turnId:c.turnId}),e=>attemptEmptyResponseRecovery({emptyDeliveryEnabled:oe.allowsEmptyDelivery,error:e.error,retryCallOptions:e.retryCallOptions,runOneModelCall,sessionId:o.sessionId,turnId:c.turnId})]});if(throwIfTurnAborted(e.abortSignal),r.interrupted)return finishSteeredStep();if(n.outcome===`recovered`)Z=n.result;else{let t=n.error;if(a?.recordError(t),!h)throw t;let r=extractWorkflowStreamWriteErrorDetails(t);if(r!==null){let e=createErrorId();return log.error(`workflow stream write failed — parking session for retry by the user`,{...r,errorId:e,error:t,sessionId:o.sessionId,turnId:c.turnId}),c=await emitRecoverableFailedTurn(h,c,{code:`WORKFLOW_STREAM_WRITE_FAILED`,continuationToken:o.continuationToken,details:{...r,errorId:e},message:toErrorMessage(t)}),{next:null,session:setHarnessEmissionState(o,c)}}let i=classifyModelCallError(t),s=createErrorId(),l=summarizeKnownError(t),u=l===null?extractUpstreamRejectionMessage(t):null,d=l?.message??u?.message??toErrorMessage(t),p=l?.hint===void 0?d:`${d} ${l.hint}`,m=extractModelCallErrorDetails(t),g=buildModelCallFailureDetails({catalogSummary:l,error:t,errorId:s,modelCallDetails:m,upstreamRejection:u}),_=buildModelCallFailureLogFields({error:t,errorId:s,modelCallDetails:m,recognized:l!==null||u!==null,sessionId:o.sessionId,turnId:c.turnId});if(i===`terminal`)return l===null?log.error(u?.message??`model call failed terminally`,_):log.error(`${l.name}: ${l.message}`,{errorId:s,hint:l.hint,sessionId:o.sessionId,turnId:c.turnId}),await emitFailedStep(h,c,{code:`MODEL_CALL_FAILED`,details:g,message:d,sessionId:o.sessionId}),{next:e.mode===`task`||f?{done:!0,isError:!0,output:p}:{done:!0,output:``},session:o};if(e.mode===`task`){if(i===`recoverable`&&!(t instanceof EmptyModelResponseError)&&!(t instanceof ContentFilteredModelResponseError))throw log.warn(u?.message??`model call failed recoverably in task mode — rethrowing for durable step retry`,_),t;return log.error(u?.message??`model call failed; failing the task run`,_),await emitFailedStep(h,c,{code:`MODEL_CALL_FAILED`,details:g,message:d,sessionId:o.sessionId}),{next:{done:!0,isError:!0,output:p},session:o}}log.error(u?.message??`model call failed — parking session for retry by the user`,_),c=await emitRecoverableFailedTurn(h,c,{code:`MODEL_CALL_FAILED`,continuationToken:o.continuationToken,details:g,message:d});let v={isError:!0,output:p};return o={...o,outputSchema:void 0},{next:null,session:setHarnessEmissionState(o,c),settledTurn:v}}}let Q=accumulateTurnUsage({previous:getTurnUsageState(o.state),turnId:c.turnId,usage:extractTokenUsageDelta({costUsd:extractGatewayCostUsd(Z.providerMetadata),usage:Z.usage})});o=setTurnUsageState(o,Q),Y=void 0;let $;try{$=formatLanguageModelGatewayId(H)}catch{$=void 0}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":e.tools.size});let me;try{r.check(),me=await handleStepResult({config:e,emit:h,emissionState:r.outputStarted?{...c,assistantOutputStarted:!0}:c,durableModelPromptMessageCount:R===void 0||R.messages.length===0?X.length:void 0,promptMessages:le,result:Z,runStep,session:o,coordinationTools:ue})}catch(t){if(throwIfTurnAborted(e.abortSignal),r.interrupted)return finishSteeredStep();throw t}return B?.set(HistoryStateKey,J.historyState),me}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:r,modelCallDetails:i,upstreamRejection:a}=e;if(t!==null){let e={errorId:r,message:t.message,name:t.name,semanticErrorId:t.id,...i};return t.hint!==void 0&&(e.hint=t.hint),e}return a===null?{...formatError(n,r),...i}:{errorId:r,message:toErrorMessage(n),name:a.name,...i}}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:a}=e,{emissionState:o,session:s}=e,c=resolveAssistantStepText(i.response.messages,i.text),l=i.finishReason!==`tool-calls`&&i.toolCalls.length===0&&hasEmptyDeliverySentinel(c),u=getInvalidToolCallInputErrors({toolCalls:i.toolCalls}),d=new Set([...i.invalidInputToolCallIds??[],...i.toolCalls.filter(isInvalidToolCall).map(e=>e.toolCallId),...u.map(e=>e.toolCallId)]),f=l?[]:appendMissingToolResultMessages({append:u.map(e=>createToolResultMessagePartFromToolError(e)),responseMessages:i.response.messages}),p=l?null:c,m=new Set;for(let e of[...i.content??[],...i.toolResults??[]])(e.type===`tool-result`||e.type===`tool-error`)&&e.providerExecuted===!0&&m.add(e.toolCallId);let h=normalizeProviderToolHistory({messages:f,providerExecutedOutcomeIds:m}),g=h.messages,_={...s,compaction:createNextCompactionConfig(s.compaction,e.durableModelPromptMessageCount,i)},v=extractToolApprovalInputRequests({content:i.content??[],excludedCallIds:d}),y=new Set(v.map(e=>e.action.callId)),b=extractQuestionInputRequests({toolCalls:i.toolCalls,excludedCallIds:new Set([...d,...y]),tools:e.coordinationTools}),x=[...v,...b],S=renderPendingApprovalsSnippet(v),C=g.findIndex(e=>e.role!==`tool`),w=C===-1?g:g.slice(0,C),T=g.slice(w.length),E=validateHarnessModelMessages([...r,...w,...S===void 0?[]:[createFrameworkUserMessage(`context.state`,S)]]),D=getAdvertisedTools({session:_,tools:e.coordinationTools}),O=(i.toolCalls??[]).filter(e=>!d.has(e.toolCallId)).filter(t=>isDeferredHarnessTool(e.coordinationTools.get(t.toolName))).filter(e=>isDeferredHarnessTool(D.get(e.toolName))?!0:(log.warn(`deferred tool call blocked because tool is not advertised`,{callId:e.toolCallId,sessionId:_.sessionId,toolName:e.toolName}),!1)).map(e=>createCoordinationRequestFromToolCall({toolCall:e,tools:D}));if(O.length>0){let e=O.flatMap(e=>e.kind===`runtime-action`?[e.request]:[]),t=O.flatMap(e=>e.kind===`task`?[e.request]:[]);if(x.length===0)return{next:null,session:setHarnessEmissionState(setPendingCoordinationBatch({runtimeActions:e,tasks:t,event:{sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId},responseMessages:g,session:{..._,history:validateHarnessModelMessages(r)}}),advanceStep(o))};let i=setPendingCoordinationBatch({runtimeActions:e,tasks:t,event:{sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId},responseMessages:T,session:{..._,history:E}});return i=appendPendingInputBatch({event:{sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId},requests:x,responseMessages:[],session:i}),n&&await n(createInputRequestedEvent({requests:x,sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId})),{next:null,session:setHarnessEmissionState(i,advanceStep(o))}}if(x.length>0){let e=buildResponseAuthorizationTools({authoredTools:t.tools,context:contextStorage.getStore()}),r=appendPendingInputBatch({event:{sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId},requests:x,responseAuthRequiredRequestIds:v.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:T,session:{..._,history:E}});return n&&(await n(createInputRequestedEvent({requests:x,sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId})),t.mode===`conversation`&&(o=await emitTurnEpilogue(n,o,t.mode),r=setHarnessEmissionState(r,o))),{next:hasDeferredStepInput(r)?a:null,session:r}}let k=resolveInlineAuthorizationInterrupt({messages:[...r,...g],toolResults:i.toolResults});if(k){let{challenges:e,history:r}=k;if(n){for(let t of getSupersededAuthorizationChallenges(_.state,e))await n(createAuthorizationCompletedEvent({attemptId:t.attemptId,authorization:t.challenge,name:t.name,outcome:`failed`,reason:`Superseded by a newer authorization attempt.`,sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId}));for(let t of e)await n(createAuthorizationRequiredEvent({attemptId:t.attemptId,authorization:t.challenge,name:t.name,description:t.challenge.instructions??`Authorization required for ${t.name}`,webhookUrl:t.hookUrl,sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId}));t.mode===`conversation`&&(o=await emitTurnEpilogue(n,o,t.mode))}return{next:null,session:setHarnessEmissionState({..._,history:validateHarnessModelMessages(r),state:setPendingAuthorization(_.state,{challenges:e})},o)}}let A=g,j=validateHarnessModelMessages([...r,...A]),M={..._,history:j};return(M.outputSchema===void 0||extractFinalOutput(i)===void 0)&&(A.at(-1)?.role===`tool`||h.outcomeEndsResponse||hasDeferredStepInput(M))?(n&&(o=advanceStep(o),M=setHarnessEmissionState(M,o)),{next:a,session:M}):t.mode===`task`&&contextStorage.getStore()?.get(ScheduleIdKey)!==void 0&&contextStorage.getStore()?.get(BackgroundToolExecutorKey)?.hasPendingTasks?.()===!0?deferTaskTurn({emissionState:o,emit:n,history:r,result:i,schema:M.outputSchema,session:M,stepOutput:p}):t.mode===`task`?finishTaskTurn({emissionState:o,emit:n,history:r,result:i,schema:M.outputSchema,session:M,stepOutput:p}):finishConversationTurn({emissionState:o,emit:n,history:r,result:i,schema:M.outputSchema,session:M,stepOutput:p})}async function deferTaskTurn(e){let{emit:t,history:n,result:r,schema:i,stepOutput:a}=e,{emissionState:o,session:s}=e;s=clearTurnClientContextState(s);let c=i===void 0?void 0:extractFinalOutput(r);return c!==void 0&&(s={...persistStructuredAssistantTurn(s,n,c),outputSchema:i}),t&&(o=await emitTurnEpilogue(t,o,`conversation`),s=setHarnessEmissionState(s,o)),{next:null,session:s,settledTurn:{output:c??a??``}}}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(s=clearTurnClientContextState(s),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(s=clearTurnClientContextState(s),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}}}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}function replaceSessionHistory(e,t){return contextStorage.getStore()?.delete(HistoryStateKey),{...e,history:t,compaction:{recentWindowSize:e.compaction.recentWindowSize,threshold:e.compaction.threshold,thresholdPercent:e.compaction.thresholdPercent}}}async function maybeCompact(e){let{emit:t,emissionState:n}=e,r=e.messages,i=e.session,a=e.promptMessages??r,o=validateHarnessModelMessages(e.historyProjector?.({messages:a,state:i.state})??a),s=e.force===!0||shouldCompact(o,i.compaction),c=shouldCanonicalizeMemory(r);if(!s&&!c)return{compacted:!1,messages:r,session:i};let l=await resolveCompactionModel({compactionModelReference:i.agent.compactionModelReference,model:e.model,modelReference:requireSessionModelReference(i),resolveModel:e.resolveModel}),u=i.agent.compactionModelReference??requireSessionModelReference(i),d=mergeProviderSafetyIdentifier(u,l.providerOptions,e.auth);if(t){let e=contextStorage.getStore();e!==void 0&&prepareMemoryCompaction(e,{history:r,state:i.state}),await t(createCompactionRequestedEvent({modelId:formatLanguageModelGatewayId(l.model),sequence:n.sequence,sessionId:i.sessionId,turnId:n.turnId,usageInputTokens:getInputTokenCount(o,i.compaction)}),o)}let f=canonicalizeMemoryRecords(r),p=validateHarnessModelMessages(e.historyProjector?.({messages:f.ordinary,state:i.state})??f.ordinary),m=s?await compactMessages([...p],l.model,i.compaction,d,e.telemetry,buildGatewayAttributionHeaders(l.model,e.runtimeIdentity),e.abortSignal,e.force===!0):[...p];if(r=validateHarnessModelMessages([...f.memory,...m]),e.onCompaction)for(let t of e.onCompaction())r.push(t);if(t){let a=contextStorage.getStore();if(a!==void 0&&prepareMemoryCompaction(a,{history:r,state:i.state}),await t(createCompactionCompletedEvent({modelId:formatLanguageModelGatewayId(l.model),sequence:n.sequence,sessionId:i.sessionId,turnId:n.turnId}),e.historyProjector?.({messages:r,state:i.state})??r),a!==void 0){let e=drainMemoryCommit(a);e!==void 0&&(r=validateHarnessModelMessages(e.history),i={...i,state:e.state})}}return{compacted:!0,messages:r,session:replaceSessionHistory(i,r)}}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++){n.throwIfAborted();try{return await e(r)}catch(e){if(n.throwIfAborted(),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 setTimeout(i,void 0,{signal:n})}}}export{appendMissingToolResultMessages,createToolLoopHarness};
@@ -183,6 +183,7 @@ export interface SettledTurn {
183
183
  * Result returned by one harness step invocation.
184
184
  */
185
185
  export interface StepResult {
186
+ readonly steered?: true;
186
187
  /** Background-tool effects projected onto the session that entered this step. */
187
188
  readonly backgroundTaskSession?: HarnessSession;
188
189
  /** Durable tasks started by background tools and awaiting the parent commit barrier. */
@@ -233,6 +234,7 @@ export type HandleEventFn = (event: UnstampedMessageStreamEvent, messages?: read
233
234
  * Dependencies injected into the tool-loop harness at construction time.
234
235
  */
235
236
  export interface ToolLoopHarnessConfig {
237
+ readonly steeringSignal?: AbortSignal;
236
238
  /** Cancellation signal for the active turn. */
237
239
  readonly abortSignal?: AbortSignal;
238
240
  /**
@@ -1 +1 @@
1
- import{attemptIdempotencyKey,modelCallIdempotencyKey,toolCallIdempotencyKey}from"#instrumentation/lifecycle.js";import{structuralProviderMetadata}from"#instrumentation/content.js";function createAiSdkHookBridge(e,t,n=directRunInContext,r){let i={capturesInputs:t.capturesInputs??t.capturesContent,capturesOutputs:t.capturesOutputs??t.capturesContent,modelKeys:new Map,runtimeContext:r!==void 0&&Object.keys(r).length>0?Object.freeze({...r}):void 0,scope:e,toolKeys:new Map};return{onStart(e){i.operation=Object.freeze({modelId:e.modelId,operationId:e.operationId,provider:e.provider})},async onStepStart(e){i.stepNumber=e.stepNumber;let n=toStepAttemptStarted(i);n!==void 0&&await t.publish(n)},async onLanguageModelCallStart(e){let n=modelCallIdempotencyKey(i.scope,i.stepNumber??0);i.modelKeys.set(e.callId,n);let r=toModelCallStarted(i,n,e);await t.publish(r)},executeLanguageModelCall({callId:t,execute:r}){let a=i.modelKeys.get(t);return a===void 0?r():n({idempotencyKey:a,scope:e,type:`model.call`},r)},async onLanguageModelCallEnd(e){let n=i.modelKeys.get(e.callId);if(n===void 0)return;i.modelKeys.delete(e.callId);let r=toModelCallCompleted(i,n,e);await t.publish(r)},async onStepEnd(e){if(e.providerMetadata===void 0)return;let n=i.capturesOutputs?e.providerMetadata:structuralProviderMetadata(e.providerMetadata);await t.publish(Object.freeze({idempotencyKey:attemptIdempotencyKey(i.scope),providerMetadata:n,scope:i.scope,type:`step.attempt.metadata`}))},async onToolExecutionStart(e){let n=toolCallIdempotencyKey(i.scope,e.toolCall.toolCallId,i.stepNumber??0);i.toolKeys.set(e.toolCall.toolCallId,n);let r=toToolCallStarted(i,n,e);await t.publish(r)},executeTool({toolCallId:t,execute:r}){let a=i.toolKeys.get(t);return a===void 0?r():n({idempotencyKey:a,scope:e,type:`tool.call`},r)},async onToolExecutionEnd(e){let n=e.toolCall.toolCallId,r=i.toolKeys.get(n);if(r===void 0)return;i.toolKeys.delete(n);let a=toToolCallCompleted(i,r,e);await t.publish(a)},async onAbort(e){await failOpenOperations(e.reason)},async onError(e){await failOpenOperations(e.error)}};async function failOpenOperations(n){let r=[];for(let a of i.modelKeys.values())r.push(t.publish(Object.freeze({error:n,idempotencyKey:a,scope:e,type:`model.call.failed`})));for(let a of i.toolKeys.values())r.push(t.publish(Object.freeze({error:n,idempotencyKey:a,scope:e,type:`tool.call.failed`})));i.modelKeys.clear(),i.toolKeys.clear(),await Promise.all(r)}}const directRunInContext=(e,t)=>t();function toStepAttemptStarted(e){if(e.operation!==void 0&&e.stepNumber!==void 0)return Object.freeze({idempotencyKey:attemptIdempotencyKey(e.scope),operation:e.operation,runtimeContext:e.runtimeContext,scope:e.scope,type:`step.attempt.started`})}function toModelCallStarted(e,t,n){return Object.freeze({idempotencyKey:t,input:e.capturesInputs?Object.freeze({instructions:n.instructions,messages:Object.freeze([...n.messages])}):void 0,model:Object.freeze({modelId:n.modelId,provider:n.provider}),runtimeContext:e.runtimeContext,scope:e.scope,type:`model.call.started`})}function toModelCallCompleted(e,t,n){return Object.freeze({content:e.capturesOutputs?toContentParts(n.content):void 0,finishReason:n.finishReason,idempotencyKey:t,responseId:n.responseId,scope:e.scope,type:`model.call.completed`,usage:toUsage(n.usage)})}function toUsage(e){return Object.freeze({inputTokenDetails:Object.freeze({cacheReadTokens:e.inputTokenDetails?.cacheReadTokens,cacheWriteTokens:e.inputTokenDetails?.cacheWriteTokens}),inputTokens:e.inputTokens,outputTokens:e.outputTokens})}function toContentParts(e){let t=[];for(let n of e)switch(n.type){case`text`:case`reasoning`:t.push(Object.freeze({text:n.text,type:n.type}));break;case`tool-call`:t.push(Object.freeze({callId:n.toolCallId,input:n.input,toolName:n.toolName,type:`tool-call`}));break;case`tool-result`:t.push(Object.freeze({callId:n.toolCallId,input:n.input,output:n.output,toolName:n.toolName,type:`tool-result`}));break;case`tool-error`:t.push(Object.freeze({callId:n.toolCallId,error:n.error,input:n.input,toolName:n.toolName,type:`tool-error`}))}return Object.freeze(t)}function toToolCallStarted(e,t,n){return Object.freeze({callId:n.toolCall.toolCallId,idempotencyKey:t,input:e.capturesInputs?n.toolCall.input:void 0,scope:e.scope,toolName:n.toolCall.toolName,type:`tool.call.started`})}function toToolCallCompleted(e,t,n){return Object.freeze({idempotencyKey:t,output:toToolOutput(n.toolOutput,e.capturesOutputs),scope:e.scope,type:`tool.call.completed`})}function toToolOutput(e,t){return e.type===`tool-result`?Object.freeze(t?{output:e.output,type:`result`}:{type:`result`}):Object.freeze(t?{error:e.error,type:`error`}:{type:`error`})}export{createAiSdkHookBridge};
1
+ import{attemptIdempotencyKey,modelCallIdempotencyKey,toolCallIdempotencyKey}from"#instrumentation/lifecycle.js";import{structuralProviderMetadata}from"#instrumentation/content.js";function createAiSdkHookBridge(e,t,n=directRunInContext,r){let i={capturesInputs:t.capturesInputs??t.capturesContent,capturesOutputs:t.capturesOutputs??t.capturesContent,modelKeys:new Map,runtimeContext:r!==void 0&&Object.keys(r).length>0?Object.freeze({...r}):void 0,scope:e,toolKeys:new Map};return{onStart(e){i.operation=Object.freeze({modelId:e.modelId,operationId:e.operationId,provider:e.provider})},async onStepStart(e){i.stepNumber=e.stepNumber;let n=toStepAttemptStarted(i);n!==void 0&&await t.publish(n)},async onLanguageModelCallStart(e){let n=modelCallIdempotencyKey(i.scope,i.stepNumber??0);i.modelKeys.set(e.callId,n);let r=toModelCallStarted(i,n,e);await t.publish(r)},executeLanguageModelCall({callId:t,execute:r}){let a=i.modelKeys.get(t);return a===void 0?r():n({idempotencyKey:a,scope:e,type:`model.call`},r)},async onLanguageModelCallEnd(e){let n=i.modelKeys.get(e.callId);if(n===void 0)return;i.modelKeys.delete(e.callId);let r=toModelCallCompleted(i,n,e);await t.publish(r)},async onStepEnd(e){if(e.providerMetadata===void 0)return;let n=i.capturesOutputs?e.providerMetadata:structuralProviderMetadata(e.providerMetadata);await t.publish(Object.freeze({idempotencyKey:attemptIdempotencyKey(i.scope),providerMetadata:n,scope:i.scope,type:`step.attempt.metadata`}))},async onToolExecutionStart(e){let n=toolCallIdempotencyKey(i.scope,e.toolCall.toolCallId,i.stepNumber??0);i.toolKeys.set(e.toolCall.toolCallId,n);let r=toToolCallStarted(i,n,e);await t.publish(r)},executeTool({toolCallId:t,execute:r}){let a=i.toolKeys.get(t);return a===void 0?r():n({idempotencyKey:a,scope:e,type:`tool.call`},r)},async onToolExecutionEnd(e){let n=e.toolCall.toolCallId,r=i.toolKeys.get(n);if(r===void 0)return;i.toolKeys.delete(n);let a=toToolCallCompleted(i,r,e);await t.publish(a)},async onAbort(e){await failOpenOperations(e.reason)},async onError(e){await failOpenOperations(e.error)}};async function failOpenOperations(n){let r=[];for(let a of i.modelKeys.values())r.push(t.publish(Object.freeze({error:n,idempotencyKey:a,scope:e,type:`model.call.failed`})));for(let a of i.toolKeys.values())r.push(t.publish(Object.freeze({error:n,idempotencyKey:a,scope:e,type:`tool.call.failed`})));i.modelKeys.clear(),i.toolKeys.clear(),await Promise.all(r)}}const directRunInContext=(e,t)=>t();function toStepAttemptStarted(e){if(e.operation!==void 0&&e.stepNumber!==void 0)return Object.freeze({idempotencyKey:attemptIdempotencyKey(e.scope),operation:e.operation,runtimeContext:e.runtimeContext,scope:e.scope,type:`step.attempt.started`})}function toModelCallStarted(e,t,n){return Object.freeze({idempotencyKey:t,input:e.capturesInputs?Object.freeze({instructions:n.instructions,messages:Object.freeze([...n.messages])}):void 0,model:Object.freeze({modelId:n.modelId,provider:n.provider}),runtimeContext:e.runtimeContext,scope:e.scope,type:`model.call.started`})}function toModelCallCompleted(e,t,n){return Object.freeze({content:e.capturesOutputs?toContentParts(n.content):void 0,finishReason:n.finishReason,idempotencyKey:t,responseModelId:n.modelId,responseId:n.responseId,scope:e.scope,type:`model.call.completed`,usage:toUsage(n.usage)})}function toUsage(e){return Object.freeze({inputTokenDetails:Object.freeze({cacheReadTokens:e.inputTokenDetails?.cacheReadTokens,cacheWriteTokens:e.inputTokenDetails?.cacheWriteTokens}),inputTokens:e.inputTokens,outputTokens:e.outputTokens})}function toContentParts(e){let t=[];for(let n of e)switch(n.type){case`text`:case`reasoning`:t.push(Object.freeze({text:n.text,type:n.type}));break;case`tool-call`:t.push(Object.freeze({callId:n.toolCallId,input:n.input,toolName:n.toolName,type:`tool-call`}));break;case`tool-result`:t.push(Object.freeze({callId:n.toolCallId,input:n.input,output:n.output,toolName:n.toolName,type:`tool-result`}));break;case`tool-error`:t.push(Object.freeze({callId:n.toolCallId,error:n.error,input:n.input,toolName:n.toolName,type:`tool-error`}))}return Object.freeze(t)}function toToolCallStarted(e,t,n){return Object.freeze({callId:n.toolCall.toolCallId,idempotencyKey:t,input:e.capturesInputs?n.toolCall.input:void 0,scope:e.scope,toolName:n.toolCall.toolName,type:`tool.call.started`})}function toToolCallCompleted(e,t,n){return Object.freeze({idempotencyKey:t,output:toToolOutput(n.toolOutput,e.capturesOutputs),scope:e.scope,type:`tool.call.completed`})}function toToolOutput(e,t){return e.type===`tool-result`?Object.freeze(t?{output:e.output,type:`result`}:{type:`result`}):Object.freeze(t?{error:e.error,type:`error`}:{type:`error`})}export{createAiSdkHookBridge};
@@ -1 +1 @@
1
- import{ConversationContextKey,UNKNOWN_CONVERSATION_CONTEXT}from"#shared/conversation-context.js";import{ActiveChannelDeliveriesKey,ChannelInstrumentationKey,ParentTraceContextKey,SessionTraceSeedKey}from"#context/keys.js";import{channelDeliveryIdempotencyKey}from"#instrumentation/lifecycle.js";async function instrumentChannelDelivery(e){if(!(`delivery`in e)){let t=e.ctx.get(ActiveChannelDeliveriesKey);if(t===void 0||e.hooks===void 0)return;let n=`channel.delivery.${e.outcome}`;for(let r of t){let t=r.policyAgentName??r.agentName;if(t===void 0)continue;let i=e.ctx.get(ConversationContextKey)??UNKNOWN_CONVERSATION_CONTEXT;await(e.hooks.forTrace?.({agentName:t,...i,audience:r.delivery.channelAudience??i.audience})??e.hooks).publish({agentName:r.agentName,delivery:r.delivery,error:e.error,errorCode:e.errorCode,idempotencyKey:channelDeliveryIdempotencyKey(r.sessionId,r.delivery.deliveryId),outcome:e.outcome,rootSessionId:r.rootSessionId,sequence:e.includeTurn?r.sequence:void 0,sessionId:r.sessionId,turnId:e.includeTurn?r.turnId:void 0,type:n})}e.ctx.delete(ActiveChannelDeliveriesKey);return}if(e.hooks===void 0||e.delivery.deliveryMetadata===void 0)return;let t=[],n=e.ctx.get(ConversationContextKey)??UNKNOWN_CONVERSATION_CONTEXT,r=n.audience,i=e.hooks.forTrace?.({agentName:e.policyAgentName,...n})??e.hooks;for(let n of e.delivery.deliveryMetadata){let a=e.delivery.payloads[n.payloadIndex],o={channelAudience:r,channelKind:n.channelKind,channelName:n.channelName,deliveryId:n.deliveryId,requestId:n.requestId,requestTraceContext:n.requestTraceContext},s=!(i.capturesInputs??i.capturesContent)||a===void 0?void 0:projectDeliveryInput(a),c={agentName:e.agentName,channelType:e.ctx.get(ChannelInstrumentationKey)?.channelType,delivery:o,policyAgentName:e.policyAgentName,rootSessionId:e.rootSessionId,sequence:e.sequence,sessionId:e.sessionId,turnId:e.turnId};t.push(c),await i?.publish({agentName:c.agentName,delivery:o,idempotencyKey:channelDeliveryIdempotencyKey(e.sessionId,o.deliveryId),input:s,parentTraceContext:e.ctx.get(ParentTraceContextKey),rootSessionId:e.rootSessionId,sequence:e.sequence,sessionId:e.sessionId,traceSeed:e.ctx.get(SessionTraceSeedKey),turnId:e.turnId,type:`channel.delivery.started`})}t.length>0&&e.ctx.set(ActiveChannelDeliveriesKey,t)}function projectDeliveryInput(e){let t={};return e.context!==void 0&&(t.context=e.context),e.message!==void 0&&(t.message=e.message),e.outputSchema!==void 0&&(t.outputSchema=e.outputSchema),e.inputResponses!==void 0&&(t.inputResponses=e.inputResponses.map(e=>{let t={};return e.optionId!==void 0&&(t.optionId=e.optionId),e.text!==void 0&&(t.text=e.text),t})),t}export{instrumentChannelDelivery};
1
+ import{ConversationContextKey,UNKNOWN_CONVERSATION_CONTEXT}from"#shared/conversation-context.js";import{ActiveChannelDeliveriesKey,ChannelInstrumentationKey,ParentTraceContextKey,SessionTraceSeedKey}from"#context/keys.js";import{channelDeliveryIdempotencyKey}from"#instrumentation/lifecycle.js";async function instrumentChannelDelivery(e){if(!(`delivery`in e)){let t=e.ctx.get(ActiveChannelDeliveriesKey);if(t===void 0||e.hooks===void 0)return;let n=`channel.delivery.${e.outcome}`;for(let r of t){let t=r.policyAgentName??r.agentName;if(t===void 0)continue;let i=e.ctx.get(ConversationContextKey)??UNKNOWN_CONVERSATION_CONTEXT;await(e.hooks.forTrace?.({agentName:t,...i,audience:r.delivery.channelAudience??i.audience})??e.hooks).publish({agentName:r.agentName,delivery:r.delivery,error:e.error,errorCode:e.errorCode,idempotencyKey:channelDeliveryIdempotencyKey(r.sessionId,r.delivery.deliveryId),outcome:e.outcome,rootSessionId:r.rootSessionId,sequence:e.includeTurn?r.sequence:void 0,sessionId:r.sessionId,turnId:e.includeTurn?r.turnId:void 0,type:n})}e.ctx.delete(ActiveChannelDeliveriesKey);return}if(e.hooks===void 0||e.delivery.deliveryMetadata===void 0)return;let t=[...e.ctx.get(ActiveChannelDeliveriesKey)??[]],n=e.ctx.get(ConversationContextKey)??UNKNOWN_CONVERSATION_CONTEXT,r=n.audience,i=e.hooks.forTrace?.({agentName:e.policyAgentName,...n})??e.hooks;for(let n of e.delivery.deliveryMetadata){let a=e.delivery.payloads[n.payloadIndex],o={channelAudience:r,channelKind:n.channelKind,channelName:n.channelName,deliveryId:n.deliveryId,requestId:n.requestId,requestTraceContext:n.requestTraceContext},s=!(i.capturesInputs??i.capturesContent)||a===void 0?void 0:projectDeliveryInput(a),c={agentName:e.agentName,channelType:e.ctx.get(ChannelInstrumentationKey)?.channelType,delivery:o,policyAgentName:e.policyAgentName,rootSessionId:e.rootSessionId,sequence:e.sequence,sessionId:e.sessionId,turnId:e.turnId};t.some(e=>e.sessionId===c.sessionId&&e.delivery.deliveryId===c.delivery.deliveryId)||(t.push(c),await i?.publish({agentName:c.agentName,delivery:o,idempotencyKey:channelDeliveryIdempotencyKey(e.sessionId,o.deliveryId),input:s,parentTraceContext:e.ctx.get(ParentTraceContextKey),rootSessionId:e.rootSessionId,sequence:e.sequence,sessionId:e.sessionId,traceSeed:e.ctx.get(SessionTraceSeedKey),turnId:e.turnId,type:`channel.delivery.started`}))}t.length>0&&e.ctx.set(ActiveChannelDeliveriesKey,t)}function projectDeliveryInput(e){let t={};return e.context!==void 0&&(t.context=e.context),e.message!==void 0&&(t.message=e.message),e.outputSchema!==void 0&&(t.outputSchema=e.outputSchema),e.inputResponses!==void 0&&(t.inputResponses=e.inputResponses.map(e=>{let t={};return e.optionId!==void 0&&(t.optionId=e.optionId),e.text!==void 0&&(t.text=e.text),t})),t}export{instrumentChannelDelivery};
@@ -333,6 +333,7 @@ export interface InstrumentationModelCallCompletedEvent {
333
333
  readonly content?: readonly InstrumentationContentPart[];
334
334
  readonly finishReason: string;
335
335
  readonly idempotencyKey: string;
336
+ readonly responseModelId?: string;
336
337
  readonly responseId?: string;
337
338
  readonly scope: InstrumentationAttemptScope;
338
339
  readonly usage: InstrumentationUsage;
@@ -1 +1 @@
1
- import{contextStorage}from"#context/container.js";import{findInstrumentationActionScopeForCall,rememberInstrumentationActionScope,rememberInstrumentationInputScope,takeInstrumentationActionScopeForCall,takeInstrumentationActionScopeForTask,takeInstrumentationInputScope}from"#instrumentation/state.js";import{deriveTaskId}from"#tasks/task-id.js";import{isRuntimeWorkflowToolAction}from"#shared/action-types.js";import{RuntimeActionSettlementTimesKey}from"#harness/runtime-action-settlement-state.js";import{actionIdempotencyKey,inputIdempotencyKey,sessionIdempotencyKey,turnIdempotencyKey}from"#instrumentation/lifecycle.js";import{instrumentChannelDelivery}from"#instrumentation/channel-delivery.js";function createInstrumentationHandleEvent(e){if(e.hooks===void 0)return e.handleEvent;if(e.handleEvent===void 0)return;let t=e.handleEvent,n=e.hooks,r=new Set,i=new Set,a=e.turnId;return async(o,s)=>{await t(o,s);let c=toLifecycleEvent(o,e,a);if(o.type===`turn.started`&&(a=o.data.turnId),o.type===`turn.cancelled`||o.type===`turn.completed`||o.type===`turn.failed`||o.type===`session.completed`||o.type===`session.failed`){let e=contextStorage.getStore();e!==void 0&&await instrumentChannelDelivery({ctx:e,error:o.type===`turn.failed`||o.type===`session.failed`?Error(o.data.message):void 0,errorCode:o.type===`turn.failed`||o.type===`session.failed`?o.data.code:void 0,hooks:n,includeTurn:o.type===`turn.cancelled`||o.type===`turn.completed`||o.type===`turn.failed`||o.type===`session.failed`,outcome:o.type===`turn.failed`||o.type===`session.failed`?`failed`:o.type===`turn.cancelled`?`cancelled`:`completed`})}c!==void 0&&await n.publish(c),o.type===`actions.requested`?await publishActionStarts(o,e,n,r):o.type===`action.result`?await publishActionTerminal(o,e,n):o.type===`input.requested`&&await publishInputStarts(o,e,n,i)}}async function publishInputStarts(e,t,n,r){let i=t.getAttemptScope?.();if(i===void 0)return;let a=n.capturesOutputs??n.capturesContent;for(let o of e.data.requests){let s=inputIdempotencyKey(t.sessionId,e.data.turnId,o.requestId);r.has(s)||(r.add(s),rememberInstrumentationInputScope(s,i),await n.publish(Object.freeze({action:Object.freeze({callId:o.action.callId,name:o.action.toolName}),idempotencyKey:s,kind:o.kind,request:a?Object.freeze({allowFreeform:o.allowFreeform,display:o.display,options:o.options,prompt:o.prompt}):void 0,requestId:o.requestId,scope:i,type:`input.requested`})))}}async function publishInputResolutions(e){let t=e.hooks.capturesInputs??e.hooks.capturesContent;for(let n of e.batch.inputs){let r=inputIdempotencyKey(e.sessionId,e.batch.event.turnId,n.request.requestId),i=takeInstrumentationInputScope(r);i!==void 0&&await e.hooks.publish(Object.freeze({idempotencyKey:r,kind:n.request.kind,outcome:n.outcome,requestId:n.request.requestId,response:!t||n.response===void 0?void 0:Object.freeze({optionId:n.response.optionId,text:n.response.text}),scope:i,type:`input.resolved`}))}}async function publishActionStarts(e,t,n,r){let i=t.getAttemptScope?.();if(i===void 0)return;let a=n.capturesInputs??n.capturesContent;for(let o of e.data.actions){let s=actionIdempotencyKey(t.sessionId,e.data.turnId,o.callId);r.has(s)||(r.add(s),rememberInstrumentationActionScope(s,i),await n.publish(Object.freeze({callId:o.callId,idempotencyKey:s,input:a?o.input:void 0,...isRuntimeWorkflowToolAction(o)?{isWorkflowTool:!0}:void 0,kind:o.kind===`workflow-tool-call`?`tool-call`:o.kind,name:actionName(o),scope:i,type:`action.started`})))}}async function publishActionTerminal(e,t,n){let r=findInstrumentationActionScopeForCall(t.sessionId,e.data.result.callId);if(r===void 0)return;let i=readBackgroundTaskReceipt(e.data.result,r);if(e.data.status===`completed`&&i!==void 0)return;takeInstrumentationActionScopeForCall(t.sessionId,e.data.result.callId);let{idempotencyKey:a,scope:o}=r,s=n.capturesOutputs??n.capturesContent;if(e.data.status===`completed`){await n.publish(Object.freeze({acceptedAtMs:contextStorage.getStore()?.get(RuntimeActionSettlementTimesKey)?.[e.data.result.callId],idempotencyKey:a,outcome:`completed`,output:Object.freeze(s?{output:e.data.result.output,type:`result`}:{type:`result`}),scope:o,type:`action.completed`,usage:actionUsage(e.data.result)}));return}let c=s?e.data.error===void 0?e.data.result.output:Object.assign(Error(e.data.error.message),{code:e.data.error.code}):void 0;await n.publish(Object.freeze({acceptedAtMs:contextStorage.getStore()?.get(RuntimeActionSettlementTimesKey)?.[e.data.result.callId],error:c,errorCode:e.data.error?.code,idempotencyKey:a,outcome:e.data.status,scope:o,type:`action.failed`}))}async function publishBackgroundTaskSettlements(e){let t=e.hooks.capturesOutputs??e.hooks.capturesContent,n=e.acceptedAtMs??Date.now();for(let r of e.views){if(r.status!==`completed`&&r.status!==`failed`&&r.status!==`cancelled`)continue;let i=takeInstrumentationActionScopeForTask(r.taskId);if(i!==void 0){if(r.status===`completed`){await e.hooks.publish(Object.freeze({acceptedAtMs:n,idempotencyKey:i.idempotencyKey,outcome:`completed`,output:Object.freeze(t?{output:r.lastOutput.data,type:`result`}:{type:`result`}),scope:i.scope,type:`action.completed`,usage:instrumentationUsage(r.usage)}));continue}await e.hooks.publish(Object.freeze({acceptedAtMs:n,error:r.status===`failed`?t?r.lastOutput.data:void 0:Error(`The background task was cancelled.`),errorCode:r.status===`failed`?`BACKGROUND_TASK_FAILED`:`BACKGROUND_TASK_CANCELLED`,idempotencyKey:i.idempotencyKey,outcome:r.status,scope:i.scope,type:`action.failed`}))}}}function readBackgroundTaskReceipt(e,t){let n=e.output;if(typeof n!=`object`||!n||Array.isArray(n)||Reflect.get(n,`status`)!==`working`)return;let r=Reflect.get(n,`taskId`);return typeof r==`string`&&r===deriveTaskId({callId:e.callId,parentSessionId:t.scope.sessionId,parentTurnId:t.scope.turnId})?{taskId:r}:void 0}function instrumentationUsage(e){if(e!==void 0)return{inputTokenDetails:{cacheReadTokens:e.cacheReadTokens,cacheWriteTokens:e.cacheWriteTokens},inputTokens:e.inputTokens,outputTokens:e.outputTokens}}function actionUsage(e){if(e.kind===`subagent-result`&&e.origin===`child`&&e.usage!==void 0)return{inputTokenDetails:{cacheReadTokens:e.usage.cacheReadTokens,cacheWriteTokens:e.usage.cacheWriteTokens},inputTokens:e.usage.inputTokens,outputTokens:e.usage.outputTokens}}function actionName(e){return e.kind===`tool-call`||e.kind===`workflow-tool-call`?e.toolName:e.kind===`load-skill`?`load_skill`:e.name}function toLifecycleEvent(e,t,n){switch(e.type){case`session.started`:return{agentName:t.agentName,channelAudience:t.channelAudience,channelKind:t.channelKind,idempotencyKey:sessionIdempotencyKey(t.sessionId),parentLineage:t.parentLineage,parentTraceContext:t.parentTraceContext,rootSessionId:t.rootSessionId??t.sessionId,scheduleId:t.scheduleId,sessionId:t.sessionId,title:t.title,type:`session.started`};case`session.completed`:case`session.waiting`:return{idempotencyKey:sessionIdempotencyKey(t.sessionId),sessionId:t.sessionId,turnId:n,type:e.type};case`session.failed`:return{error:Error(e.data.message),idempotencyKey:sessionIdempotencyKey(t.sessionId),sessionId:t.sessionId,turnId:n,type:`session.failed`};case`turn.started`:return{idempotencyKey:turnIdempotencyKey(t.sessionId,e.data.turnId),parentLineage:t.parentLineage,parentTraceContext:t.parentTraceContext,rootSessionId:t.rootSessionId??t.sessionId,sequence:e.data.sequence,sessionId:t.sessionId,turnId:e.data.turnId,type:`turn.started`};case`turn.completed`:case`turn.cancelled`:return{idempotencyKey:turnIdempotencyKey(t.sessionId,e.data.turnId),sessionId:t.sessionId,turnId:e.data.turnId,type:e.type};case`turn.failed`:return{error:Error(e.data.message),idempotencyKey:turnIdempotencyKey(t.sessionId,e.data.turnId),sessionId:t.sessionId,turnId:e.data.turnId,type:`turn.failed`};default:return}}export{createInstrumentationHandleEvent,publishBackgroundTaskSettlements,publishInputResolutions};
1
+ import{contextStorage}from"#context/container.js";import{findInstrumentationActionScopeForCall,rememberInstrumentationActionScope,rememberInstrumentationInputScope,takeInstrumentationActionScopeForCall,takeInstrumentationActionScopeForTask,takeInstrumentationInputScope}from"#instrumentation/state.js";import{RuntimeActionSettlementTimesKey}from"#harness/runtime-action-settlement-state.js";import{deriveTaskId}from"#tasks/task-id.js";import{isRuntimeWorkflowToolAction}from"#shared/action-types.js";import{actionIdempotencyKey,inputIdempotencyKey,sessionIdempotencyKey,turnIdempotencyKey}from"#instrumentation/lifecycle.js";import{instrumentChannelDelivery}from"#instrumentation/channel-delivery.js";function createInstrumentationHandleEvent(e){if(e.hooks===void 0)return e.handleEvent;if(e.handleEvent===void 0)return;let t=e.handleEvent,n=e.hooks,r=new Set,i=new Set,a=e.turnId;return async(o,s)=>{await t(o,s);let c=toLifecycleEvent(o,e,a);if(o.type===`turn.started`&&(a=o.data.turnId),o.type===`turn.cancelled`||o.type===`turn.completed`||o.type===`turn.failed`||o.type===`session.completed`||o.type===`session.failed`){let e=contextStorage.getStore();e!==void 0&&await instrumentChannelDelivery({ctx:e,error:o.type===`turn.failed`||o.type===`session.failed`?Error(o.data.message):void 0,errorCode:o.type===`turn.failed`||o.type===`session.failed`?o.data.code:void 0,hooks:n,includeTurn:o.type===`turn.cancelled`||o.type===`turn.completed`||o.type===`turn.failed`||o.type===`session.failed`,outcome:o.type===`turn.failed`||o.type===`session.failed`?`failed`:o.type===`turn.cancelled`?`cancelled`:`completed`})}c!==void 0&&await n.publish(c),o.type===`actions.requested`?await publishActionStarts(o,e,n,r):o.type===`action.result`?await publishActionTerminal(o,e,n):o.type===`input.requested`&&await publishInputStarts(o,e,n,i)}}async function publishInputStarts(e,t,n,r){let i=t.getAttemptScope?.();if(i===void 0)return;let a=n.capturesOutputs??n.capturesContent;for(let o of e.data.requests){let s=inputIdempotencyKey(t.sessionId,e.data.turnId,o.requestId);r.has(s)||(r.add(s),rememberInstrumentationInputScope(s,i),await n.publish(Object.freeze({action:Object.freeze({callId:o.action.callId,name:o.action.toolName}),idempotencyKey:s,kind:o.kind,request:a?Object.freeze({allowFreeform:o.allowFreeform,display:o.display,options:o.options,prompt:o.prompt}):void 0,requestId:o.requestId,scope:i,type:`input.requested`})))}}async function publishInputResolutions(e){let t=e.hooks.capturesInputs??e.hooks.capturesContent;for(let n of e.batch.inputs){let r=inputIdempotencyKey(e.sessionId,e.batch.event.turnId,n.request.requestId),i=takeInstrumentationInputScope(r);i!==void 0&&await e.hooks.publish(Object.freeze({idempotencyKey:r,kind:n.request.kind,outcome:n.outcome,requestId:n.request.requestId,response:!t||n.response===void 0?void 0:Object.freeze({optionId:n.response.optionId,text:n.response.text}),scope:i,type:`input.resolved`}))}}async function publishActionStarts(e,t,n,r){let i=t.getAttemptScope?.();if(i===void 0)return;let a=n.capturesInputs??n.capturesContent;for(let o of e.data.actions){let s=actionIdempotencyKey(t.sessionId,e.data.turnId,o.callId);r.has(s)||(r.add(s),rememberInstrumentationActionScope(s,i),await n.publish(Object.freeze({callId:o.callId,idempotencyKey:s,input:a?o.input:void 0,...isRuntimeWorkflowToolAction(o)?{isWorkflowTool:!0}:void 0,kind:o.kind===`workflow-tool-call`?`tool-call`:o.kind,name:actionName(o),scope:i,type:`action.started`})))}}async function publishActionTerminal(e,t,n){let r=findInstrumentationActionScopeForCall(t.sessionId,e.data.result.callId);if(r===void 0)return;let i=readBackgroundTaskReceipt(e.data.result,r);if(e.data.status===`completed`&&i!==void 0)return;takeInstrumentationActionScopeForCall(t.sessionId,e.data.result.callId);let{idempotencyKey:a,scope:o}=r,s=n.capturesOutputs??n.capturesContent;if(e.data.status===`completed`){await n.publish(Object.freeze({acceptedAtMs:contextStorage.getStore()?.get(RuntimeActionSettlementTimesKey)?.[e.data.result.callId],idempotencyKey:a,outcome:`completed`,output:Object.freeze(s?{output:e.data.result.output,type:`result`}:{type:`result`}),scope:o,type:`action.completed`,usage:actionUsage(e.data.result)}));return}let c=s?e.data.error===void 0?e.data.result.output:Object.assign(Error(e.data.error.message),{code:e.data.error.code}):void 0;await n.publish(Object.freeze({acceptedAtMs:contextStorage.getStore()?.get(RuntimeActionSettlementTimesKey)?.[e.data.result.callId],error:c,errorCode:e.data.error?.code,idempotencyKey:a,outcome:e.data.status,scope:o,type:`action.failed`}))}async function publishBackgroundTaskSettlements(e){let t=e.hooks.capturesOutputs??e.hooks.capturesContent,n=e.acceptedAtMs??Date.now();for(let r of e.views){if(r.status!==`completed`&&r.status!==`failed`&&r.status!==`cancelled`)continue;let i=takeInstrumentationActionScopeForTask(r.taskId);if(i!==void 0){if(r.status===`completed`){await e.hooks.publish(Object.freeze({acceptedAtMs:n,idempotencyKey:i.idempotencyKey,outcome:`completed`,output:Object.freeze(t?{output:r.lastOutput.data,type:`result`}:{type:`result`}),scope:i.scope,type:`action.completed`,usage:instrumentationUsage(r.usage)}));continue}await e.hooks.publish(Object.freeze({acceptedAtMs:n,error:r.status===`failed`?t?r.lastOutput.data:void 0:Error(`The background task was cancelled.`),errorCode:r.status===`failed`?`BACKGROUND_TASK_FAILED`:`BACKGROUND_TASK_CANCELLED`,idempotencyKey:i.idempotencyKey,outcome:r.status,scope:i.scope,type:`action.failed`}))}}}function readBackgroundTaskReceipt(e,t){let n=e.output;if(typeof n!=`object`||!n||Array.isArray(n)||Reflect.get(n,`status`)!==`working`)return;let r=Reflect.get(n,`taskId`);return typeof r==`string`&&r===deriveTaskId({callId:e.callId,parentSessionId:t.scope.sessionId,parentTurnId:t.scope.turnId})?{taskId:r}:void 0}function instrumentationUsage(e){if(e!==void 0)return{inputTokenDetails:{cacheReadTokens:e.cacheReadTokens,cacheWriteTokens:e.cacheWriteTokens},inputTokens:e.inputTokens,outputTokens:e.outputTokens}}function actionUsage(e){if(e.kind===`subagent-result`&&e.origin===`child`&&e.usage!==void 0)return{inputTokenDetails:{cacheReadTokens:e.usage.cacheReadTokens,cacheWriteTokens:e.usage.cacheWriteTokens},inputTokens:e.usage.inputTokens,outputTokens:e.usage.outputTokens}}function actionName(e){return e.kind===`tool-call`||e.kind===`workflow-tool-call`?e.toolName:e.kind===`load-skill`?`load_skill`:e.name}function toLifecycleEvent(e,t,n){switch(e.type){case`session.started`:return{agentName:t.agentName,channelAudience:t.channelAudience,channelKind:t.channelKind,idempotencyKey:sessionIdempotencyKey(t.sessionId),parentLineage:t.parentLineage,parentTraceContext:t.parentTraceContext,rootSessionId:t.rootSessionId??t.sessionId,scheduleId:t.scheduleId,sessionId:t.sessionId,title:t.title,type:`session.started`};case`session.completed`:case`session.waiting`:return{idempotencyKey:sessionIdempotencyKey(t.sessionId),sessionId:t.sessionId,turnId:n,type:e.type};case`session.failed`:return{error:Error(e.data.message),idempotencyKey:sessionIdempotencyKey(t.sessionId),sessionId:t.sessionId,turnId:n,type:`session.failed`};case`turn.started`:return{idempotencyKey:turnIdempotencyKey(t.sessionId,e.data.turnId),parentLineage:t.parentLineage,parentTraceContext:t.parentTraceContext,rootSessionId:t.rootSessionId??t.sessionId,sequence:e.data.sequence,sessionId:t.sessionId,turnId:e.data.turnId,type:`turn.started`};case`turn.completed`:case`turn.cancelled`:return{idempotencyKey:turnIdempotencyKey(t.sessionId,e.data.turnId),sessionId:t.sessionId,turnId:e.data.turnId,type:e.type};case`turn.failed`:return{error:Error(e.data.message),idempotencyKey:turnIdempotencyKey(t.sessionId,e.data.turnId),sessionId:t.sessionId,turnId:e.data.turnId,type:`turn.failed`};default:return}}export{createInstrumentationHandleEvent,publishBackgroundTaskSettlements,publishInputResolutions};
@@ -6,10 +6,11 @@ import { resolveLocalWorkflowWorldDataDirectory } from ${t};`.trimStart().split(
6
6
  `),runtimeImports:`getWorld, setWorld`,createWorldSource:`applyLocalWorkflowWorldDeliveryTimeoutDefaults();
7
7
  const workflowWorld = await workflowWorldModule.createWorld({
8
8
  dataDir: resolveLocalWorkflowWorldDataDirectory(process.cwd()),
9
- });`}}return e===`@workflow/world-vercel`?{moduleImportSpecifier:resolvePackageCompiledFilePath(`src/compiled/${e}/index.js`),extraImportLines:[],runtimeImports:`getWorld, setWorld`,createWorldSource:`
9
+ });`}}if(e===`@workflow/world-vercel`){let t=stringifyEsmImportSpecifier(resolvePackageSourceFilePath(`src/internal/workflow/vercel-world-defaults.ts`)),n=resolvePackageCompiledFilePath(`src/compiled/${e}/index.js`),r=`
10
10
  const workflowWorld = await workflowWorldModule.createWorld({
11
11
  headers: { "User-Agent": ${JSON.stringify(buildPackageUserAgent())} },
12
- });`.trimStart()}:{moduleImportSpecifier:e,extraImportLines:[],runtimeImports:`createWorldFromModule, getWorld, setWorld`,createWorldSource:`const workflowWorld = await createWorldFromModule(workflowWorldModule);`}}function createWorkflowWorldPluginSource(e){let t=e.configuredWorld??e.defaultWorld,n=resolveWorkflowWorldWiring(resolveWorkflowWorldImport(t)),r=resolvePackageCompiledFilePath(`src/compiled/@workflow/core/runtime.js`),i=resolvePackageSourceFilePath(`src/internal/workflow/validate-world.ts`);return[`// Generated by eve. Do not edit by hand.`,`import ${stringifyEsmImportSpecifier(e.compiledArtifactsBootstrapPath)};`,`import * as workflowWorldModule from ${stringifyEsmImportSpecifier(n.moduleImportSpecifier)};`,...n.extraImportLines,`import { ${n.runtimeImports} } from ${stringifyEsmImportSpecifier(r)};`,`import { validateWorkflowWorld } from ${stringifyEsmImportSpecifier(i)};`,``,n.createWorldSource,`validateWorkflowWorld({ packageName: ${JSON.stringify(e.configuredWorld)}, world: workflowWorld });`,`setWorld(workflowWorld);`,`await getWorld();`,`await workflowWorld.start?.();`,``,`export default function installWorkflowWorldPlugin() {}`,``].join(`
12
+ });
13
+ applyVercelWorkflowWorldDefaults(workflowWorld);`.trimStart();return{moduleImportSpecifier:n,extraImportLines:[`import { applyVercelWorkflowWorldDefaults } from ${t};`],runtimeImports:`getWorld, setWorld`,createWorldSource:r}}return{moduleImportSpecifier:e,extraImportLines:[],runtimeImports:`createWorldFromModule, getWorld, setWorld`,createWorldSource:`const workflowWorld = await createWorldFromModule(workflowWorldModule);`}}function createWorkflowWorldPluginSource(e){let t=e.configuredWorld??e.defaultWorld,n=resolveWorkflowWorldWiring(resolveWorkflowWorldImport(t)),r=resolvePackageCompiledFilePath(`src/compiled/@workflow/core/runtime.js`),i=resolvePackageSourceFilePath(`src/internal/workflow/validate-world.ts`);return[`// Generated by eve. Do not edit by hand.`,`import ${stringifyEsmImportSpecifier(e.compiledArtifactsBootstrapPath)};`,`import * as workflowWorldModule from ${stringifyEsmImportSpecifier(n.moduleImportSpecifier)};`,...n.extraImportLines,`import { ${n.runtimeImports} } from ${stringifyEsmImportSpecifier(r)};`,`import { validateWorkflowWorld } from ${stringifyEsmImportSpecifier(i)};`,``,n.createWorldSource,`validateWorkflowWorld({ packageName: ${JSON.stringify(e.configuredWorld)}, world: workflowWorld });`,`setWorld(workflowWorld);`,`await getWorld();`,`await workflowWorld.start?.();`,``,`export default function installWorkflowWorldPlugin() {}`,``].join(`
13
14
  `)}function createDevelopmentWorkflowWorldPluginSource(e){if(!usesParentDevelopmentWorkflowWorld(e.configuredWorld))return createWorkflowWorldPluginSource({...e,defaultWorld:`local`});let t=resolvePackageCompiledFilePath(`src/compiled/@workflow/core/runtime.js`),n=resolvePackageSourceFilePath(`src/internal/workflow/development-world-client.ts`);return[`// Generated by eve. Do not edit by hand.`,`import ${stringifyEsmImportSpecifier(e.compiledArtifactsBootstrapPath)};`,`import { getWorld, setWorld } from ${stringifyEsmImportSpecifier(t)};`,`import { createDevelopmentWorkflowWorld } from ${stringifyEsmImportSpecifier(n)};`,``,`setWorld(createDevelopmentWorkflowWorld());`,`await getWorld();`,``,`export default function installDevelopmentWorkflowWorldPlugin() {}`,``].join(`
14
15
  `)}function createInstrumentationPluginSource(e){let t=JSON.stringify(e.agentName);if(e.layout.kind===`module-map`){let n=resolvePackageSourceFilePath(`src/instrumentation/config.ts`);return[`// Generated by eve. Do not edit by hand.`,`import { moduleMap } from ${stringifyEsmImportSpecifier(e.layout.moduleMapPath)};`,`import { registerInstrumentationConfig } from ${stringifyEsmImportSpecifier(n)};`,``,`const instrumentationModule = moduleMap.nodes["__root__"].modules[${JSON.stringify(e.layout.sourceId)}];`,`if (instrumentationModule.default != null) {`,` await registerInstrumentationConfig(instrumentationModule.default, { agentName: ${t} });`,`}`,``,`export default function installInstrumentationPlugin() {}`,``].join(`
15
16
  `)}if(e.layout.kind===`file`){let n=resolvePackageSourceFilePath(`src/instrumentation/config.ts`);return[`// Generated by eve. Do not edit by hand.`,`import * as instrumentationModule from ${stringifyEsmImportSpecifier(e.layout.modulePath)};`,`import { registerInstrumentationConfig } from ${stringifyEsmImportSpecifier(n)};`,``,`if (instrumentationModule.default != null) {`,` await registerInstrumentationConfig(instrumentationModule.default, { agentName: ${t} });`,`}`,``,`// Default export satisfies the Nitro plugin contract so this file`,`// can be used directly as a Nitro plugin without a separate wrapper.`,`export default function installInstrumentationPlugin() {}`,``].join(`
@@ -1 +1 @@
1
- import{createRequire}from"node:module";import{basename,dirname,join}from"node:path";import{existsSync,readFileSync,realpathSync}from"node:fs";import{fileURLToPath}from"node:url";import{EVE_PACKAGE_NAME}from"#internal/package-name.js";let cachedPackageInfo,cachedPackageLocation;const BUNDLED_FALLBACK_PACKAGE_VERSION=`0.56.0`,WORKFLOW_MODULE_ALIASES={"workflow/errors":`src/compiled/@workflow/errors/index.js`,"workflow/internal/private":`src/compiled/@workflow/core/private.js`};function resolveFallbackPackageVersion(){return BUNDLED_FALLBACK_PACKAGE_VERSION.startsWith(`__`)?`0.0.0`:BUNDLED_FALLBACK_PACKAGE_VERSION}const FALLBACK_PACKAGE_INFO={name:EVE_PACKAGE_NAME,version:resolveFallbackPackageVersion()};function resolveCurrentModulePath(){return typeof __filename==`string`?__filename:resolveCurrentModulePathFromStack()}function resolveCurrentModulePathFromStack(){let e=Error.prepareStackTrace;try{Error.prepareStackTrace=(e,t)=>t;let e=Error().stack?.[0]?.getFileName();if(typeof e!=`string`||e.length===0)throw Error(`Failed to resolve the current module path from the stack trace.`);return e.startsWith(`file:`)?fileURLToPath(e):e}finally{Error.prepareStackTrace=e}}const require=createRequire(resolveCurrentModulePath());function tryResolveVerifiedPackageRoot(e){try{let t=realpathSync.native(e);return tryReadInstalledPackageInfo(t,EVE_PACKAGE_NAME)===void 0?void 0:dirname(t)}catch{return}}function findNearestVerifiedPackageRoot(e){let t=e;for(;;){let e=tryResolveVerifiedPackageRoot(join(t,`package.json`));if(e!==void 0)return e;let n=dirname(t);if(n===t)return;t=n}}function tryResolveDirectBuildLocation(e){let t=dirname(e);for(;;){if(basename(t)===`dist`){let e=tryResolveVerifiedPackageRoot(join(dirname(t),`package.json`));if(e!==void 0)return{packageBuildRoot:t,packageRoot:e}}let e=dirname(t);if(e===t)return;t=e}}function isSourceCheckout(e){return existsSync(join(e,`src`,`internal`,`application`,`package.ts`))}function tryCreatePackageLocation(e){if(isSourceCheckout(e))return{packageBuildRoot:null,packageRoot:e};let t=join(e,`dist`);if(existsSync(t))return{packageBuildRoot:t,packageRoot:e}}function resolveSelfPackageJsonPath(e){return createRequire(e).resolve(`${EVE_PACKAGE_NAME}/package.json`)}function resolvePackageLocationFromModulePath(e,t=resolveSelfPackageJsonPath){let n=realpathSync.native(e),r=tryResolveDirectBuildLocation(n);if(r!==void 0)return r;let i=findNearestVerifiedPackageRoot(dirname(n));if(i!==void 0&&isSourceCheckout(i))return{packageBuildRoot:null,packageRoot:i};try{let e=tryResolveVerifiedPackageRoot(t(n)),r=e===void 0?void 0:tryCreatePackageLocation(e);if(r!==void 0)return r}catch{}let a=i===void 0?void 0:tryCreatePackageLocation(i);if(a!==void 0)return a;throw Error(`Failed to resolve the eve package root from "${e}".`)}function resolvePackageLocation(){return cachedPackageLocation??=resolvePackageLocationFromModulePath(resolveCurrentModulePath()),cachedPackageLocation}function resolvePackageBuildRoot(){return resolvePackageLocation().packageBuildRoot}function resolvePackageRoot(){return resolvePackageLocation().packageRoot}function tryResolvePackageRoot(){try{return resolvePackageRoot()}catch{return}}function rewriteSourceFilePathForBuild(e){return e.replace(/\.[cm]?tsx?$/,`.js`)}function resolvePackageSourceFilePath(e){let t=resolvePackageBuildRoot();return t===null?join(resolvePackageRoot(),e):join(t,rewriteSourceFilePathForBuild(e))}function resolvePackageSourceDirectoryPath(e){let t=resolvePackageBuildRoot();return join(t===null?resolvePackageRoot():t,e)}function resolvePackageDependencyPath(e){return require.resolve(e)}function resolvePackageCompiledFilePath(e){let t=resolvePackageBuildRoot();return t===null?join(resolvePackageRoot(),`.generated`,`compiled`,e.replace(/^src\/compiled\//,``)):join(t,e)}function normalizeInstalledPackageInfo(e){let t=e;if(typeof t.name==`string`&&typeof t.version==`string`)return{name:t.name,version:t.version}}function tryReadInstalledPackageInfo(e,t){let n=normalizeInstalledPackageInfo(JSON.parse(readFileSync(e,`utf8`)));if(n?.name===t)return n}function resolveInstalledPackageInfo(){if(cachedPackageInfo)return cachedPackageInfo;let e=tryResolvePackageRoot(),t=e===void 0?void 0:tryReadInstalledPackageInfo(join(e,`package.json`),EVE_PACKAGE_NAME);if(t)return cachedPackageInfo=t,cachedPackageInfo;try{let e=tryReadInstalledPackageInfo(require.resolve(`${EVE_PACKAGE_NAME}/package.json`),EVE_PACKAGE_NAME);if(e)return cachedPackageInfo=e,cachedPackageInfo}catch{}return cachedPackageInfo={...FALLBACK_PACKAGE_INFO},cachedPackageInfo}function readWorkflowVersionFromManifest(e){let t=e;for(let e of[t.devDependencies,t.dependencies,t.peerDependencies]){let t=e?.[`@workflow/core`];if(typeof t==`string`&&t.trim().length>0)return t}}function resolveExpectedWorkflowVersion(){let e=tryResolvePackageRoot();if(e!==void 0)try{return readWorkflowVersionFromManifest(JSON.parse(readFileSync(join(e,`package.json`),`utf8`)))}catch{}try{return readWorkflowVersionFromManifest(JSON.parse(readFileSync(require.resolve(`${EVE_PACKAGE_NAME}/package.json`),`utf8`)))}catch{return}}function resolveWorkflowModulePath(e){if(e===`workflow`)return resolvePackageSourceFilePath(`src/internal/workflow/index.ts`);if(e===`workflow/api`||e===`workflow/runtime`)return resolvePackageSourceFilePath(`src/internal/workflow/runtime.ts`);if(e===`workflow/internal/builtins`)return resolvePackageSourceFilePath(`src/internal/workflow/builtins.ts`);let t=WORKFLOW_MODULE_ALIASES[e];return t===void 0?require.resolve(e):resolvePackageCompiledFilePath(t)}export{resolveExpectedWorkflowVersion,resolveInstalledPackageInfo,resolvePackageCompiledFilePath,resolvePackageDependencyPath,resolvePackageLocationFromModulePath,resolvePackageRoot,resolvePackageSourceDirectoryPath,resolvePackageSourceFilePath,resolveWorkflowModulePath};
1
+ import{createRequire}from"node:module";import{basename,dirname,join}from"node:path";import{existsSync,readFileSync,realpathSync}from"node:fs";import{fileURLToPath}from"node:url";import{EVE_PACKAGE_NAME}from"#internal/package-name.js";let cachedPackageInfo,cachedPackageLocation;const BUNDLED_FALLBACK_PACKAGE_VERSION=`0.57.0`,WORKFLOW_MODULE_ALIASES={"workflow/errors":`src/compiled/@workflow/errors/index.js`,"workflow/internal/private":`src/compiled/@workflow/core/private.js`};function resolveFallbackPackageVersion(){return BUNDLED_FALLBACK_PACKAGE_VERSION.startsWith(`__`)?`0.0.0`:BUNDLED_FALLBACK_PACKAGE_VERSION}const FALLBACK_PACKAGE_INFO={name:EVE_PACKAGE_NAME,version:resolveFallbackPackageVersion()};function resolveCurrentModulePath(){return typeof __filename==`string`?__filename:resolveCurrentModulePathFromStack()}function resolveCurrentModulePathFromStack(){let e=Error.prepareStackTrace;try{Error.prepareStackTrace=(e,t)=>t;let e=Error().stack?.[0]?.getFileName();if(typeof e!=`string`||e.length===0)throw Error(`Failed to resolve the current module path from the stack trace.`);return e.startsWith(`file:`)?fileURLToPath(e):e}finally{Error.prepareStackTrace=e}}const require=createRequire(resolveCurrentModulePath());function tryResolveVerifiedPackageRoot(e){try{let t=realpathSync.native(e);return tryReadInstalledPackageInfo(t,EVE_PACKAGE_NAME)===void 0?void 0:dirname(t)}catch{return}}function findNearestVerifiedPackageRoot(e){let t=e;for(;;){let e=tryResolveVerifiedPackageRoot(join(t,`package.json`));if(e!==void 0)return e;let n=dirname(t);if(n===t)return;t=n}}function tryResolveDirectBuildLocation(e){let t=dirname(e);for(;;){if(basename(t)===`dist`){let e=tryResolveVerifiedPackageRoot(join(dirname(t),`package.json`));if(e!==void 0)return{packageBuildRoot:t,packageRoot:e}}let e=dirname(t);if(e===t)return;t=e}}function isSourceCheckout(e){return existsSync(join(e,`src`,`internal`,`application`,`package.ts`))}function tryCreatePackageLocation(e){if(isSourceCheckout(e))return{packageBuildRoot:null,packageRoot:e};let t=join(e,`dist`);if(existsSync(t))return{packageBuildRoot:t,packageRoot:e}}function resolveSelfPackageJsonPath(e){return createRequire(e).resolve(`${EVE_PACKAGE_NAME}/package.json`)}function resolvePackageLocationFromModulePath(e,t=resolveSelfPackageJsonPath){let n=realpathSync.native(e),r=tryResolveDirectBuildLocation(n);if(r!==void 0)return r;let i=findNearestVerifiedPackageRoot(dirname(n));if(i!==void 0&&isSourceCheckout(i))return{packageBuildRoot:null,packageRoot:i};try{let e=tryResolveVerifiedPackageRoot(t(n)),r=e===void 0?void 0:tryCreatePackageLocation(e);if(r!==void 0)return r}catch{}let a=i===void 0?void 0:tryCreatePackageLocation(i);if(a!==void 0)return a;throw Error(`Failed to resolve the eve package root from "${e}".`)}function resolvePackageLocation(){return cachedPackageLocation??=resolvePackageLocationFromModulePath(resolveCurrentModulePath()),cachedPackageLocation}function resolvePackageBuildRoot(){return resolvePackageLocation().packageBuildRoot}function resolvePackageRoot(){return resolvePackageLocation().packageRoot}function tryResolvePackageRoot(){try{return resolvePackageRoot()}catch{return}}function rewriteSourceFilePathForBuild(e){return e.replace(/\.[cm]?tsx?$/,`.js`)}function resolvePackageSourceFilePath(e){let t=resolvePackageBuildRoot();return t===null?join(resolvePackageRoot(),e):join(t,rewriteSourceFilePathForBuild(e))}function resolvePackageSourceDirectoryPath(e){let t=resolvePackageBuildRoot();return join(t===null?resolvePackageRoot():t,e)}function resolvePackageDependencyPath(e){return require.resolve(e)}function resolvePackageCompiledFilePath(e){let t=resolvePackageBuildRoot();return t===null?join(resolvePackageRoot(),`.generated`,`compiled`,e.replace(/^src\/compiled\//,``)):join(t,e)}function normalizeInstalledPackageInfo(e){let t=e;if(typeof t.name==`string`&&typeof t.version==`string`)return{name:t.name,version:t.version}}function tryReadInstalledPackageInfo(e,t){let n=normalizeInstalledPackageInfo(JSON.parse(readFileSync(e,`utf8`)));if(n?.name===t)return n}function resolveInstalledPackageInfo(){if(cachedPackageInfo)return cachedPackageInfo;let e=tryResolvePackageRoot(),t=e===void 0?void 0:tryReadInstalledPackageInfo(join(e,`package.json`),EVE_PACKAGE_NAME);if(t)return cachedPackageInfo=t,cachedPackageInfo;try{let e=tryReadInstalledPackageInfo(require.resolve(`${EVE_PACKAGE_NAME}/package.json`),EVE_PACKAGE_NAME);if(e)return cachedPackageInfo=e,cachedPackageInfo}catch{}return cachedPackageInfo={...FALLBACK_PACKAGE_INFO},cachedPackageInfo}function readWorkflowVersionFromManifest(e){let t=e;for(let e of[t.devDependencies,t.dependencies,t.peerDependencies]){let t=e?.[`@workflow/core`];if(typeof t==`string`&&t.trim().length>0)return t}}function resolveExpectedWorkflowVersion(){let e=tryResolvePackageRoot();if(e!==void 0)try{return readWorkflowVersionFromManifest(JSON.parse(readFileSync(join(e,`package.json`),`utf8`)))}catch{}try{return readWorkflowVersionFromManifest(JSON.parse(readFileSync(require.resolve(`${EVE_PACKAGE_NAME}/package.json`),`utf8`)))}catch{return}}function resolveWorkflowModulePath(e){if(e===`workflow`)return resolvePackageSourceFilePath(`src/internal/workflow/index.ts`);if(e===`workflow/api`||e===`workflow/runtime`)return resolvePackageSourceFilePath(`src/internal/workflow/runtime.ts`);if(e===`workflow/internal/builtins`)return resolvePackageSourceFilePath(`src/internal/workflow/builtins.ts`);let t=WORKFLOW_MODULE_ALIASES[e];return t===void 0?require.resolve(e):resolvePackageCompiledFilePath(t)}export{resolveExpectedWorkflowVersion,resolveInstalledPackageInfo,resolvePackageCompiledFilePath,resolvePackageDependencyPath,resolvePackageLocationFromModulePath,resolvePackageRoot,resolvePackageSourceDirectoryPath,resolvePackageSourceFilePath,resolveWorkflowModulePath};
@@ -17,3 +17,4 @@ export declare const vercelGatewayFetch: typeof globalThis.fetch;
17
17
  * the traffic; direct-provider models get no extra headers.
18
18
  */
19
19
  export declare function resolveProviderHeaders(model: LanguageModel): Record<string, string> | undefined;
20
+ export declare function isGatewayModel(model: LanguageModel): boolean;
@@ -1 +1 @@
1
- import{appendPackageUserAgent,withPackageUserAgent}from"#internal/user-agent.js";const GATEWAY_BASE_URL=`https://ai-gateway.vercel.sh`,AI_GATEWAY_MODELS_URL=`${GATEWAY_BASE_URL}/v1/models`,AI_GATEWAY_MODELS_CATALOG_URL=`${GATEWAY_BASE_URL}/v1/models/catalog`,vercelGatewayFetch=withPackageUserAgent();function resolveProviderHeaders(e){if(isGatewayModel(e))return Object.fromEntries(appendPackageUserAgent(new Headers))}function isGatewayModel(e){return typeof e==`string`||e.provider?.split(`.`)[0]===`gateway`}export{AI_GATEWAY_MODELS_CATALOG_URL,AI_GATEWAY_MODELS_URL,resolveProviderHeaders,vercelGatewayFetch};
1
+ import{appendPackageUserAgent,withPackageUserAgent}from"#internal/user-agent.js";const GATEWAY_BASE_URL=`https://ai-gateway.vercel.sh`,AI_GATEWAY_MODELS_URL=`${GATEWAY_BASE_URL}/v1/models`,AI_GATEWAY_MODELS_CATALOG_URL=`${GATEWAY_BASE_URL}/v1/models/catalog`,vercelGatewayFetch=withPackageUserAgent();function resolveProviderHeaders(e){if(isGatewayModel(e))return Object.fromEntries(appendPackageUserAgent(new Headers))}function isGatewayModel(e){return typeof e==`string`||e.provider?.split(`.`)[0]===`gateway`}export{AI_GATEWAY_MODELS_CATALOG_URL,AI_GATEWAY_MODELS_URL,isGatewayModel,resolveProviderHeaders,vercelGatewayFetch};
@@ -0,0 +1,7 @@
1
+ declare const KEY_ENV: {
2
+ readonly openai: "OPENAI_API_KEY";
3
+ readonly anthropic: "ANTHROPIC_API_KEY";
4
+ readonly "ai-gateway-key": "AI_GATEWAY_API_KEY";
5
+ };
6
+ export declare function resolveModelApiKey(provider: keyof typeof KEY_ENV): Promise<string>;
7
+ export {};
@@ -0,0 +1 @@
1
+ import{modelKeySecretName,readModelSecret}from"./store.js";import{MODEL_CONNECTION_ENV}from"#shared/model-helper.js";import{isEveDevEnvironment}from"#internal/application/dev-environment.js";const KEY_ENV={openai:`OPENAI_API_KEY`,anthropic:`ANTHROPIC_API_KEY`,"ai-gateway-key":`AI_GATEWAY_API_KEY`};async function resolveModelApiKey(e){let t=process.env[KEY_ENV[e]],n=isEveDevEnvironment()&&process.env[MODEL_CONNECTION_ENV]===e?process.env.EVE_MODEL_KEY_SOURCE:void 0;if(t?.trim()&&n!==`secret`)return t;if(isEveDevEnvironment()&&n!==`environment`){let t=await readModelSecret(modelKeySecretName(e));if(t)return t}throw Error(n===`secret`?`The selected saved API key is unavailable. Run /login to reconnect.`:`Set ${KEY_ENV[e]}${isEveDevEnvironment()?` or connect with /login`:` in the server environment`}.`)}export{resolveModelApiKey};
@@ -0,0 +1,2 @@
1
+ export declare function availableDirectModels(provider: "openai" | "anthropic", key: string, signal?: AbortSignal): Promise<string[]>;
2
+ export declare function availableHelperModels(provider: "openai" | "anthropic" | "chatgpt", signal?: AbortSignal): Promise<string[]>;
@@ -0,0 +1 @@
1
+ import{resolveModelApiKey}from"./api-key.js";import{authJson}from"./vercel.js";import"./transport.js";import{isObject}from"#shared/guards.js";import{getDefaultCodexTokenBroker}from"#public/models/openai/chatgpt/token-broker.js";const MODEL_CATALOG_MAX_BYTES=8388608;async function availableDirectModels(e,t,n){let r=await authJson(e===`openai`?`https://api.openai.com/v1/models`:`https://api.anthropic.com/v1/models?limit=1000`,{headers:e===`openai`?{authorization:`Bearer ${t}`}:{"x-api-key":t,"anthropic-version":`2023-06-01`},signal:n},MODEL_CATALOG_MAX_BYTES);if(!Array.isArray(r.data))throw Error(`The provider could not validate this key. Check it and retry /login.`);return r.data.flatMap(e=>isObject(e)&&typeof e.id==`string`?[e.id]:[])}async function availableHelperModels(e,t){if(e!==`chatgpt`)return availableDirectModels(e,await resolveModelApiKey(e),t);let n=await getDefaultCodexTokenBroker().getToken({reason:`request`}),r={authorization:`Bearer ${n.token}`,originator:`eve`};n.accountId&&(r[`ChatGPT-Account-Id`]=n.accountId);let i=await authJson(`https://chatgpt.com/backend-api/codex/models?client_version=0.148.0`,{headers:r,signal:t},MODEL_CATALOG_MAX_BYTES);if(!Array.isArray(i.models))throw Error(`Could not load ChatGPT models. Check your connection and retry /login.`);return i.models.flatMap(e=>isObject(e)&&typeof e.slug==`string`&&e.visibility!==`hide`?[e.slug]:[])}export{availableDirectModels,availableHelperModels};
@@ -0,0 +1,3 @@
1
+ import { type DevelopmentModelCredential, type DevelopmentModelProvider } from "./development-broker-protocol.js";
2
+ export declare function developmentModelBrokerAvailable(): boolean;
3
+ export declare function readDevelopmentModelCredential(provider: DevelopmentModelProvider, rejectedToken?: string, signal?: AbortSignal | null): Promise<DevelopmentModelCredential | undefined>;
@@ -0,0 +1 @@
1
+ import{authJson}from"./vercel.js";import{DEVELOPMENT_MODEL_CREDENTIAL_ROUTE,DEVELOPMENT_MODEL_REJECTED_HEADER}from"./development-broker-protocol.js";import{createHash}from"node:crypto";import{isLoopbackHostname}from"#shared/network-address.js";import{isEveDevEnvironment}from"#internal/application/dev-environment.js";import{DEVELOPMENT_WORKFLOW_SECRET_ENV,DEVELOPMENT_WORKFLOW_TRANSPORT_HEADER}from"#internal/workflow/development-world-protocol.js";function developmentModelBrokerAvailable(){return isEveDevEnvironment()&&!!(process.env.EVE_DEV_CONTROL_URL&&process.env[DEVELOPMENT_WORKFLOW_SECRET_ENV])}async function readDevelopmentModelCredential(e,t,n){if(!developmentModelBrokerAvailable())return;let r=new URL(DEVELOPMENT_MODEL_CREDENTIAL_ROUTE,process.env.EVE_DEV_CONTROL_URL);if(!isLoopbackHostname(r.hostname)||r.protocol!==`http:`||r.username||r.password)throw Error(`The local model connection is unavailable. Restart eve dev.`);r.searchParams.set(`provider`,e);let i={[DEVELOPMENT_WORKFLOW_TRANSPORT_HEADER]:process.env[DEVELOPMENT_WORKFLOW_SECRET_ENV]};t&&(i[DEVELOPMENT_MODEL_REJECTED_HEADER]=createHash(`sha256`).update(t).digest(`hex`));let a=await authJson(r.href,{headers:i,signal:n},256e3,75e3);if(typeof a.token!=`string`||!a.token||![`api-key`,`oauth`,`oidc`].includes(String(a.kind)))throw Error(`The model connection is unavailable. Run /login to reconnect.`);return{kind:a.kind,token:a.token,...typeof a.teamId==`string`&&{teamId:a.teamId},...typeof a.teamName==`string`&&{teamName:a.teamName},...typeof a.accountId==`string`&&{accountId:a.accountId},...typeof a.accountLabel==`string`&&{accountLabel:a.accountLabel}}}export{developmentModelBrokerAvailable,readDevelopmentModelCredential};
@@ -0,0 +1,12 @@
1
+ export declare const DEVELOPMENT_MODEL_CREDENTIAL_ROUTE = "/eve/v1/dev/internal/model-credential";
2
+ export declare const DEVELOPMENT_MODEL_REJECTED_HEADER = "x-eve-model-rejected-token-sha256";
3
+ export type DevelopmentModelProvider = "gateway" | "openai" | "anthropic" | "chatgpt";
4
+ /** Only transported over the authenticated local control plane; never persisted. */
5
+ export interface DevelopmentModelCredential {
6
+ readonly kind: "api-key" | "oauth" | "oidc";
7
+ readonly token: string;
8
+ readonly teamId?: string;
9
+ readonly teamName?: string;
10
+ readonly accountId?: string;
11
+ readonly accountLabel?: string;
12
+ }
@@ -0,0 +1 @@
1
+ const DEVELOPMENT_MODEL_CREDENTIAL_ROUTE=`/eve/v1/dev/internal/model-credential`,DEVELOPMENT_MODEL_REJECTED_HEADER=`x-eve-model-rejected-token-sha256`;export{DEVELOPMENT_MODEL_CREDENTIAL_ROUTE,DEVELOPMENT_MODEL_REJECTED_HEADER};