eve 0.47.2 → 0.47.5

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 (289) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/bin/eve.js +4 -0
  3. package/dist/src/channel/activity-renderer.d.ts +21 -0
  4. package/dist/src/channel/activity-renderer.js +1 -0
  5. package/dist/src/channel/activity-sink.d.ts +2 -0
  6. package/dist/src/channel/activity-sink.js +1 -0
  7. package/dist/src/channel/auth/oidc.js +1 -1
  8. package/dist/src/channel/channel-address.js +1 -1
  9. package/dist/src/channel/compiled-channel.d.ts +2 -0
  10. package/dist/src/channel/compiled-channel.js +2 -2
  11. package/dist/src/channel/forwarded-principal.js +1 -1
  12. package/dist/src/channel/session.d.ts +3 -2
  13. package/dist/src/channel/session.js +1 -1
  14. package/dist/src/channel/types.d.ts +11 -0
  15. package/dist/src/chunks/{use-eve-agent-CacMaX4P.js → use-eve-agent-DjYwFJF7.js} +1 -0
  16. package/dist/src/chunks/{use-eve-agent-kmlFdOBB.js → use-eve-agent-DkUB0Ok4.js} +1 -0
  17. package/dist/src/cli/dev/tui/status-line.d.ts +6 -0
  18. package/dist/src/cli/dev/tui/status-line.js +1 -1
  19. package/dist/src/cli/dev/tui/terminal-renderer.js +12 -12
  20. package/dist/src/cli/dev/tui/traces/trace-conversation.js +1 -1
  21. package/dist/src/cli/dev/tui/tui.js +1 -1
  22. package/dist/src/compiled/.vendor-stamp.json +1 -1
  23. package/dist/src/compiled/@opentelemetry/api/index.d.ts +37 -0
  24. package/dist/src/compiled/@vercel/otel/index.d.ts +11 -0
  25. package/dist/src/compiler/extension-compatibility.d.ts +11 -9
  26. package/dist/src/compiler/extension-compatibility.js +1 -1
  27. package/dist/src/compiler/manifest.d.ts +14 -2
  28. package/dist/src/compiler/manifest.js +1 -1
  29. package/dist/src/compiler/normalize-connection.d.ts +9 -2
  30. package/dist/src/compiler/normalize-connection.js +1 -1
  31. package/dist/src/compiler/normalize-manifest.js +1 -1
  32. package/dist/src/compiler/normalize-subagent.js +1 -1
  33. package/dist/src/compiler/validate-artifact.js +1 -1
  34. package/dist/src/context/dynamic-connection-lifecycle.d.ts +9 -0
  35. package/dist/src/context/dynamic-connection-lifecycle.js +1 -0
  36. package/dist/src/context/keys.d.ts +5 -2
  37. package/dist/src/context/keys.js +1 -1
  38. package/dist/src/context/memory-tools.js +1 -1
  39. package/dist/src/context/providers/connection.js +1 -1
  40. package/dist/src/dynamic/definition.d.ts +6 -3
  41. package/dist/src/dynamic/definition.js +1 -1
  42. package/dist/src/eve-channel/activity-observer-request.d.ts +7 -0
  43. package/dist/src/eve-channel/activity-observer-request.js +1 -0
  44. package/dist/src/eve-channel/index.js +1 -1
  45. package/dist/src/eve-channel/request.d.ts +3 -1
  46. package/dist/src/eve-channel/request.js +1 -1
  47. package/dist/src/execution/activity-collector.d.ts +12 -0
  48. package/dist/src/execution/activity-collector.js +1 -0
  49. package/dist/src/execution/activity-events.d.ts +7 -0
  50. package/dist/src/execution/activity-events.js +1 -0
  51. package/dist/src/execution/activity-route.d.ts +2 -0
  52. package/dist/src/execution/activity-route.js +1 -0
  53. package/dist/src/execution/activity-text.d.ts +3 -0
  54. package/dist/src/execution/activity-text.js +1 -0
  55. package/dist/src/execution/activity-work-id.d.ts +9 -0
  56. package/dist/src/execution/activity-work-id.js +1 -0
  57. package/dist/src/execution/activity-work.d.ts +20 -0
  58. package/dist/src/execution/activity-work.js +1 -0
  59. package/dist/src/execution/agent-handle-dispatch.d.ts +3 -1
  60. package/dist/src/execution/agent-handle-dispatch.js +1 -1
  61. package/dist/src/execution/authorization-callback-match.js +1 -1
  62. package/dist/src/execution/cancelled-turn-message.d.ts +2 -0
  63. package/dist/src/execution/cancelled-turn-message.js +1 -0
  64. package/dist/src/execution/delegated-parent-notification.js +1 -1
  65. package/dist/src/execution/dispatch-runtime-actions-shared.d.ts +8 -0
  66. package/dist/src/execution/dispatch-runtime-actions-shared.js +1 -1
  67. package/dist/src/execution/dispatch-runtime-actions-step.js +1 -1
  68. package/dist/src/execution/dynamic-connections.d.ts +9 -0
  69. package/dist/src/execution/dynamic-connections.js +1 -0
  70. package/dist/src/execution/eve-workflow-attributes.js +1 -1
  71. package/dist/src/execution/node-step.d.ts +2 -0
  72. package/dist/src/execution/node-step.js +1 -1
  73. package/dist/src/execution/remote-agent-dispatch.d.ts +3 -1
  74. package/dist/src/execution/remote-agent-dispatch.js +1 -1
  75. package/dist/src/execution/runtime-context.js +1 -1
  76. package/dist/src/execution/sandbox/bindings/vercel-credentials.js +1 -1
  77. package/dist/src/execution/session-activity-projection.d.ts +14 -0
  78. package/dist/src/execution/session-activity-projection.js +1 -0
  79. package/dist/src/execution/session-activity-renderer-step.d.ts +15 -0
  80. package/dist/src/execution/session-activity-renderer-step.js +1 -0
  81. package/dist/src/execution/session-activity.d.ts +6 -0
  82. package/dist/src/execution/session-activity.js +1 -0
  83. package/dist/src/execution/session-callback-request.d.ts +1 -0
  84. package/dist/src/execution/session-callback-request.js +1 -1
  85. package/dist/src/execution/session-callback-route.js +1 -1
  86. package/dist/src/execution/settle-cancelled-turn-step.js +1 -1
  87. package/dist/src/execution/subagent-start-local.d.ts +1 -0
  88. package/dist/src/execution/subagent-start-local.js +1 -1
  89. package/dist/src/execution/subagent-start-remote.d.ts +1 -0
  90. package/dist/src/execution/subagent-start-remote.js +1 -1
  91. package/dist/src/execution/subagent-tool.d.ts +2 -1
  92. package/dist/src/execution/subagent-tool.js +1 -1
  93. package/dist/src/execution/submit-activity.d.ts +7 -0
  94. package/dist/src/execution/submit-activity.js +1 -0
  95. package/dist/src/execution/tasks/child/steps.d.ts +8 -0
  96. package/dist/src/execution/tasks/child/steps.js +1 -1
  97. package/dist/src/execution/tasks/child/update.js +1 -1
  98. package/dist/src/execution/tasks/child/workflow.d.ts +3 -0
  99. package/dist/src/execution/tasks/child/workflow.js +1 -1
  100. package/dist/src/execution/tasks/parent/delegate.d.ts +3 -0
  101. package/dist/src/execution/tasks/parent/delegate.js +1 -1
  102. package/dist/src/execution/tasks/parent/dispatch-task-step.js +1 -1
  103. package/dist/src/execution/tasks/parent/hitl-proxy-steps.js +1 -1
  104. package/dist/src/execution/tasks/parent/tool-execution.js +1 -1
  105. package/dist/src/execution/terminate-child-sessions-step.js +1 -1
  106. package/dist/src/execution/tools/connection-search.js +2 -2
  107. package/dist/src/execution/tools/load-skill.js +1 -1
  108. package/dist/src/execution/tools/subagent/local.js +1 -1
  109. package/dist/src/execution/turn-control-receiver.js +1 -1
  110. package/dist/src/execution/turn-workflow.js +1 -1
  111. package/dist/src/execution/web-fetch/request.js +1 -1
  112. package/dist/src/execution/wire/session-inbox-contract.d.ts +2 -2
  113. package/dist/src/execution/wire/session-inbox-contract.js +1 -1
  114. package/dist/src/execution/wire/session-inbox-encoder.d.ts +6 -2
  115. package/dist/src/execution/wire/session-inbox-encoder.js +1 -1
  116. package/dist/src/execution/wire/session-inbox-wire.js +1 -1
  117. package/dist/src/execution/wire/session-inbox-wire.v2-migration.d.ts +4 -0
  118. package/dist/src/execution/wire/session-inbox-wire.v2-migration.js +1 -0
  119. package/dist/src/execution/wire/session-inbox-wire.v2.d.ts +478 -0
  120. package/dist/src/execution/wire/session-inbox-wire.v2.js +1 -0
  121. package/dist/src/execution/workflow-entry.js +1 -1
  122. package/dist/src/execution/workflow-runtime.d.ts +4 -0
  123. package/dist/src/execution/workflow-runtime.js +1 -1
  124. package/dist/src/execution/workflow-steps.js +1 -1
  125. package/dist/src/execution/workflow-trace-context.d.ts +3 -6
  126. package/dist/src/execution/workflow-trace-context.js +1 -1
  127. package/dist/src/harness/approval-delivery-coordinator.js +1 -1
  128. package/dist/src/harness/authorization.d.ts +11 -4
  129. package/dist/src/harness/authorization.js +1 -1
  130. package/dist/src/harness/inline-tool-authorization.d.ts +13 -1
  131. package/dist/src/harness/inline-tool-authorization.js +1 -1
  132. package/dist/src/harness/model-call-error.js +1 -1
  133. package/dist/src/harness/semantic-errors/rule.d.ts +5 -2
  134. package/dist/src/harness/semantic-errors/rules/gateway.js +1 -1
  135. package/dist/src/harness/tool-loop.js +2 -2
  136. package/dist/src/harness/tool-model-output.js +1 -1
  137. package/dist/src/harness/turn-tag-state.d.ts +1 -1
  138. package/dist/src/harness/types.d.ts +2 -2
  139. package/dist/src/{harness → instrumentation}/ai-sdk-hook-bridge.d.ts +1 -1
  140. package/dist/src/instrumentation/ai-sdk-hook-bridge.js +1 -0
  141. package/dist/src/{harness → instrumentation}/ai-sdk-telemetry.d.ts +5 -1
  142. package/dist/src/instrumentation/ai-sdk-telemetry.js +1 -0
  143. package/dist/src/{harness/channel-delivery-instrumentation.d.ts → instrumentation/channel-delivery.d.ts} +5 -7
  144. package/dist/src/instrumentation/channel-delivery.js +1 -0
  145. package/dist/src/{harness/instrumentation → instrumentation}/config.d.ts +0 -10
  146. package/dist/src/instrumentation/config.js +1 -0
  147. package/dist/src/instrumentation/content-policy.d.ts +5 -0
  148. package/dist/src/instrumentation/content-policy.js +1 -0
  149. package/dist/src/{harness/instrumentation → instrumentation}/content.d.ts +1 -1
  150. package/dist/src/{harness/instrumentation → instrumentation}/dispatch.d.ts +1 -1
  151. package/dist/src/instrumentation/dispatch.js +1 -0
  152. package/dist/src/{harness/instrumentation → instrumentation}/lifecycle.d.ts +34 -35
  153. package/dist/src/instrumentation/lifecycle.js +1 -0
  154. package/dist/src/{harness/instrumentation → instrumentation}/native-events.d.ts +1 -1
  155. package/dist/src/instrumentation/native-events.js +1 -0
  156. package/dist/src/{harness → instrumentation}/parent-lineage.d.ts +1 -1
  157. package/dist/src/instrumentation/prepare-trace-context.d.ts +24 -0
  158. package/dist/src/instrumentation/prepare-trace-context.js +1 -0
  159. package/dist/src/instrumentation/provider.d.ts +13 -9
  160. package/dist/src/{harness/instrumentation → instrumentation}/providers.d.ts +1 -1
  161. package/dist/src/instrumentation/providers.js +1 -0
  162. package/dist/src/{harness/instrumentation → instrumentation}/runtime-context.d.ts +13 -2
  163. package/dist/src/instrumentation/runtime-context.js +1 -0
  164. package/dist/src/instrumentation/runtime.d.ts +100 -0
  165. package/dist/src/instrumentation/runtime.js +1 -0
  166. package/dist/src/{harness/instrumentation → instrumentation}/state.d.ts +2 -11
  167. package/dist/src/internal/application/compiled-artifacts.js +4 -4
  168. package/dist/src/internal/application/package.js +1 -1
  169. package/dist/src/internal/authored-definition/connection.js +1 -1
  170. package/dist/src/internal/instrumentation.d.ts +1 -1
  171. package/dist/src/internal/nitro/routes/channel-request-instrumentation.d.ts +4 -6
  172. package/dist/src/internal/nitro/routes/channel-request-instrumentation.js +1 -1
  173. package/dist/src/internal/user-agent.d.ts +2 -0
  174. package/dist/src/internal/user-agent.js +1 -1
  175. package/dist/src/packages/eve-catalog/src/index.js +1 -1
  176. package/dist/src/protocol/activity.d.ts +105 -0
  177. package/dist/src/protocol/activity.js +1 -0
  178. package/dist/src/protocol/message.js +2 -2
  179. package/dist/src/protocol/routes.d.ts +4 -0
  180. package/dist/src/protocol/routes.js +1 -1
  181. package/dist/src/public/channels/auth.js +1 -1
  182. package/dist/src/public/channels/slack/defaults.js +6 -3
  183. package/dist/src/public/channels/slack/index.d.ts +1 -1
  184. package/dist/src/public/channels/slack/interactions.d.ts +8 -5
  185. package/dist/src/public/channels/slack/interactions.js +1 -1
  186. package/dist/src/public/channels/slack/slackChannel.d.ts +66 -1
  187. package/dist/src/public/channels/slack/slash-command.d.ts +9 -0
  188. package/dist/src/public/channels/slack/slash-command.js +1 -0
  189. package/dist/src/public/connections/index.d.ts +2 -0
  190. package/dist/src/public/connections/index.js +1 -1
  191. package/dist/src/public/definitions/connections/dynamic.d.ts +23 -0
  192. package/dist/src/public/definitions/connections/dynamic.js +1 -0
  193. package/dist/src/public/definitions/connections/mcp.d.ts +8 -0
  194. package/dist/src/public/definitions/connections/openapi.d.ts +8 -0
  195. package/dist/src/public/definitions/connections/protocol.d.ts +6 -0
  196. package/dist/src/public/definitions/connections/protocol.js +1 -1
  197. package/dist/src/runtime/channels/registry.js +1 -1
  198. package/dist/src/runtime/connections/authorization-tokens.d.ts +11 -10
  199. package/dist/src/runtime/connections/instance-identity.d.ts +12 -0
  200. package/dist/src/runtime/connections/instance-identity.js +1 -0
  201. package/dist/src/runtime/connections/mcp-client.js +1 -1
  202. package/dist/src/runtime/connections/openapi-client.js +1 -1
  203. package/dist/src/runtime/connections/registry.d.ts +2 -0
  204. package/dist/src/runtime/connections/registry.js +1 -1
  205. package/dist/src/runtime/connections/scoped-authorization.d.ts +10 -6
  206. package/dist/src/runtime/connections/scoped-authorization.js +1 -1
  207. package/dist/src/runtime/resolve-agent.js +1 -1
  208. package/dist/src/runtime/resolve-connection.d.ts +5 -0
  209. package/dist/src/runtime/resolve-connection.js +1 -1
  210. package/dist/src/runtime/resolve-dynamic-connection.d.ts +5 -0
  211. package/dist/src/runtime/resolve-dynamic-connection.js +1 -0
  212. package/dist/src/runtime/subagents/dynamic-remote-agent-config.js +1 -1
  213. package/dist/src/runtime/types.d.ts +11 -0
  214. package/dist/src/setup/flows/registry.js +1 -1
  215. package/dist/src/setup/gateway-models.js +1 -1
  216. package/dist/src/setup/scaffold/create/project.js +1 -1
  217. package/dist/src/setup/scaffold/create/web-template.d.ts +1 -1
  218. package/dist/src/setup/scaffold/create/web-template.js +9 -5
  219. package/dist/src/shared/trace-policy.d.ts +20 -0
  220. package/dist/src/shared/trace-policy.js +1 -0
  221. package/dist/src/svelte/index.js +1 -1
  222. package/dist/src/svelte/use-eve-agent.js +1 -1
  223. package/dist/src/tracing/agent-action-instrumentation.d.ts +1 -1
  224. package/dist/src/tracing/agent-action-instrumentation.js +1 -1
  225. package/dist/src/tracing/agent-approval-instrumentation.d.ts +1 -3
  226. package/dist/src/tracing/agent-approval-instrumentation.js +1 -1
  227. package/dist/src/tracing/agent-channel-delivery-instrumentation.d.ts +1 -1
  228. package/dist/src/tracing/agent-channel-delivery-instrumentation.js +1 -1
  229. package/dist/src/tracing/agent-otel-provider.d.ts +4 -4
  230. package/dist/src/tracing/agent-otel-provider.js +2 -2
  231. package/dist/src/tracing/agent-otel-runtime-context.d.ts +5 -0
  232. package/dist/src/tracing/agent-otel-runtime-context.js +1 -0
  233. package/dist/src/tracing/agent-otel-session-context.d.ts +3 -3
  234. package/dist/src/tracing/agent-otel-session-context.js +1 -1
  235. package/dist/src/tracing/agent-otel-usage.d.ts +4 -2
  236. package/dist/src/tracing/agent-otel-usage.js +1 -1
  237. package/dist/src/tracing/agent-span-id-generator.d.ts +1 -1
  238. package/dist/src/tracing/agent-tool-instrumentation.d.ts +1 -1
  239. package/dist/src/tracing/agent-tool-instrumentation.js +1 -1
  240. package/dist/src/tracing/agent-trace-context-store.d.ts +6 -0
  241. package/dist/src/tracing/agent-trace-context-store.js +1 -1
  242. package/dist/src/tracing/agent-trace-context.d.ts +3 -0
  243. package/dist/src/tracing/agent-trace-context.js +1 -0
  244. package/dist/src/tracing/agent-trace-state.d.ts +10 -1
  245. package/dist/src/tracing/agent-trace-state.js +1 -1
  246. package/dist/src/tracing/install-instrumentation-runtime.d.ts +3 -2
  247. package/dist/src/tracing/install-instrumentation-runtime.js +1 -1
  248. package/dist/src/tracing/local-instrumentation-runtime.d.ts +1 -1
  249. package/dist/src/tracing/local-instrumentation-runtime.js +1 -1
  250. package/dist/src/tracing/local-trace-reader.d.ts +1 -0
  251. package/dist/src/tracing/local-trace-reader.js +1 -1
  252. package/dist/src/tracing/otel-declaration.d.ts +20 -19
  253. package/dist/src/tracing/otel-declaration.js +1 -1
  254. package/dist/src/tracing/otel-registration.js +1 -1
  255. package/dist/src/tracing/sampled-trace.d.ts +1 -14
  256. package/dist/src/tracing/sampled-trace.js +1 -1
  257. package/dist/src/vue/index.js +1 -1
  258. package/dist/src/vue/use-eve-agent.js +1 -1
  259. package/docs/channels/slack.mdx +25 -5
  260. package/docs/connections/overview.mdx +46 -2
  261. package/docs/extensions.md +2 -2
  262. package/docs/getting-started.mdx +1 -1
  263. package/docs/guides/dynamic-capabilities.md +91 -5
  264. package/docs/memory.md +7 -4
  265. package/docs/reference/cli.md +8 -8
  266. package/docs/reference/typescript-api.md +32 -23
  267. package/package.json +1 -1
  268. package/dist/src/execution/subagent-usage-span.d.ts +0 -9
  269. package/dist/src/execution/subagent-usage-span.js +0 -1
  270. package/dist/src/harness/ai-sdk-hook-bridge.js +0 -1
  271. package/dist/src/harness/ai-sdk-telemetry.js +0 -1
  272. package/dist/src/harness/channel-delivery-instrumentation.js +0 -1
  273. package/dist/src/harness/instrumentation/config.js +0 -1
  274. package/dist/src/harness/instrumentation/content-policy.d.ts +0 -7
  275. package/dist/src/harness/instrumentation/content-policy.js +0 -1
  276. package/dist/src/harness/instrumentation/dispatch.js +0 -1
  277. package/dist/src/harness/instrumentation/lifecycle.js +0 -1
  278. package/dist/src/harness/instrumentation/native-events.js +0 -1
  279. package/dist/src/harness/instrumentation/providers.js +0 -1
  280. package/dist/src/harness/instrumentation/runtime-context.js +0 -1
  281. package/dist/src/harness/instrumentation/runtime.d.ts +0 -21
  282. package/dist/src/harness/instrumentation/runtime.js +0 -1
  283. package/dist/src/harness/prepare-trace-context.d.ts +0 -21
  284. package/dist/src/harness/prepare-trace-context.js +0 -1
  285. /package/dist/src/{harness/instrumentation → instrumentation}/content.js +0 -0
  286. /package/dist/src/{harness → instrumentation}/parent-lineage.js +0 -0
  287. /package/dist/src/{harness/instrumentation → instrumentation}/setup-context.d.ts +0 -0
  288. /package/dist/src/{harness/instrumentation → instrumentation}/setup-context.js +0 -0
  289. /package/dist/src/{harness/instrumentation → instrumentation}/state.js +0 -0
@@ -1,3 +1,3 @@
1
- import{createErrorId,createLogger,formatError,logError,recordErrorOnSpan}from"#internal/logging.js";import{normalizeChannelAudience}from"#shared/channel-audience.js";import{contextStorage}from"#context/container.js";import{AuthKey,ChannelInstrumentationKey,ParentSessionKey,ParentTraceContextKey,ScheduleIdKey,SessionCallbackKey,SessionTraceSeedKey,TurnTaskDeliveryKey,TurnTaskStateKey}from"#context/keys.js";import{resolveInstalledPackageInfo}from"#internal/application/package.js";import{toErrorMessage}from"#shared/errors.js";import{createActionResultEvent,createApprovalCandidateEvent,createApprovalSettledEvent,createAuthorizationCompletedEvent,createAuthorizationRequiredEvent,createCompactionCompletedEvent,createCompactionRequestedEvent,createContextClearedEvent,createInputRequestedEvent,createInputResolvedEvent,createMessageCompletedEvent,createResultCompletedEvent,createSessionWaitingEvent,createStepStartedEvent}from"#protocol/message.js";import{summarizeKnownError}from"#harness/semantic-errors/index.js";import{resolveProviderHeaders}from"#internal/gateway.js";import{formatLanguageModelGatewayId}from"#internal/runtime-model.js";import{ChannelKey}from"#runtime/sessions/runtime-context-keys.js";import{buildDynamicTools,buildResponseAuthorizationTools}from"#context/build-dynamic-tools.js";import{drainMemoryCommit,prepareMemoryCompaction,prepareMemoryPreamble}from"#context/memory-lifecycle.js";import{canonicalizeMemoryRecords,clearMemorySessionState,shouldCanonicalizeMemory}from"#shared/memory-state.js";import{advanceStep,emitFailedStep,emitRecoverableFailedTurn,emitStepStarted,emitStreamContent,emitTurnEpilogue,emitTurnPreamble,getHarnessEmissionState,setHarnessEmissionState}from"#harness/emission.js";import{ToolLoopAgent,isStepCount}from"ai";import{resolveAgentsAnnouncement}from"#harness/handles/prompt.js";import{renderPendingApprovalsInstruction,renderPendingApprovalsSnippet}from"#harness/hitl/approval-prompt.js";import{getAgentHandleStore}from"#harness/handles/store.js";import{readTaskIdFromInboxToken}from"#tasks/task-inbox-token.js";import{buildDynamicSubagentTools}from"#context/dynamic-subagent-lifecycle.js";import{TASK_UPDATE_TOOL_NAME}from"#tools/framework/task-contract.js";import{normalizeModelMessages,normalizeUserContent,resolveAssistantStepText}from"#harness/messages.js";import{createRuntimeActionRequestFromToolCall,resolvePendingRuntimeActions,setPendingRuntimeActionBatch}from"#harness/runtime-actions.js";import{clearPendingWorkflowInterrupt,getPendingWorkflowInterrupt,setPendingWorkflowInterrupt}from"#harness/workflow-interrupt-state.js";import{getWorkflowRuntimeActionInterrupts,isWorkflowRuntimeActionInterrupt}from"#harness/workflow-runtime-action-state.js";import{instrumentationHooksForAudience,instrumentationHooksForDecision,shouldCaptureInstrumentationContent}from"#harness/instrumentation/content-policy.js";import{isSampledTrace,resolveTracePolicy,resolveTracePolicyDecision}from"#tracing/sampled-trace.js";import{createHistoryViewPreparer}from"#shared/history-view.js";import{getActiveDynamicModelSelection,isDynamicModelSelectionError}from"#context/dynamic-model-lifecycle.js";import{getInstrumentationRuntime}from"#harness/instrumentation/runtime.js";import{ASK_QUESTION_TOOL_NAME}from"#harness/request-input-tool.js";import{getSupersededAuthorizationChallenges,isAuthorizationSignal,setPendingAuthorization}from"#harness/authorization.js";import{appendPendingInputBatch,consumeDeferredStepInput,getApprovedTools,getPendingInputRequestIds,hasDeferredStepInput,hasPendingApprovalBatch,hasStepInput,resolvePendingInput}from"#harness/input-requests.js";import{activeTurnId}from"#harness/active-turn-id.js";import{createInstrumentationHandleEvent,publishInputResolutions}from"#harness/instrumentation/native-events.js";import{accumulateTurnUsage,getTurnUsageState,setTurnUsageState}from"#harness/turn-tag-state.js";import{context,trace}from"#compiled/@opentelemetry/api/index.js";import{throwIfTurnAborted}from"#harness/turn-cancellation.js";import{createBackgroundToolCallBatch}from"#harness/background-tools.js";import{buildDynamicInstructionMessages,drainDynamicInstructionUserMessages,prepareDynamicInstructionPreamble}from"#context/dynamic-instruction-lifecycle.js";import{PendingSkillAnnouncementKey}from"#context/dynamic-skill-lifecycle.js";import{hydrateSandboxAttachments,stageAttachmentsToSandbox}from"#harness/attachment-staging.js";import{resolveParentLineage}from"#harness/parent-lineage.js";import{prepareTurnTraceContext}from"#harness/prepare-trace-context.js";import{getWorkflowContinuationSecurity,readWorkflowContinuationSecurity}from"#harness/workflow-continuation-security.js";import{buildWorkflowHostTools,resolveWorkflowSandboxBridgeRequestLimit}from"#harness/workflow-sandbox.js";import{attemptIdempotencyKey}from"#harness/instrumentation/lifecycle.js";import{getApprovalAuditState,markApprovalCandidateHistoryEventEmitted,markApprovalCandidatePendingEventEmitted,markApprovalSettlementEventEmitted}from"#harness/approval-candidates.js";import{getPendingInputBatches,queueDeferredStepInput}from"#harness/pending-input-batches.js";import{EMPTY_DELIVERY_SENTINEL,hasEmptyDeliverySentinel}from"#shared/empty-delivery.js";import{createToolResultMessagePartFromToolError}from"#harness/action-result-helpers.js";import{getInvalidToolCallInputError,isInvalidToolCall}from"#harness/tool-call-input-errors.js";import{EmptyModelResponseError,classifyModelCallError,extractModelCallErrorDetails,extractUnsupportedProviderToolTypes,extractUpstreamRejectionMessage,isNoOutputGeneratedError}from"#harness/model-call-error.js";import{readToolInterrupt}from"#harness/tool-interrupts.js";import{applyAudienceCeiling}from"#shared/instrumentation-content.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{createWorkflowLifecycle}from"#harness/workflow-lifecycle.js";import{compactMessages,getInputTokenCount,resolveCompactionModel,shouldCompact}from"#harness/compaction.js";import{createCurrentMessages}from"#harness/current-messages.js";import{applySessionLimitContinuation,enforceSessionTokenLimit}from"#harness/session-limit-enforcement.js";import{setEveAttributes}from"#runtime/attributes/emit.js";import{coordinateApprovalDelivery,shouldPrepareApprovalPolicyTools}from"#harness/approval-delivery-coordinator.js";import{buildTelemetryRuntimeContext}from"#harness/instrumentation/runtime-context.js";import{createAiSdkHookBridge}from"#harness/ai-sdk-hook-bridge.js";import{convertStaleResponsesToUserMessage,dropStaleSessionLimitContinuationResponses}from"#harness/stale-input-responses.js";import{getInstrumentationConfig}from"#harness/instrumentation/config.js";import{normalizeProviderToolHistory}from"#harness/provider-tool-history.js";import{resolveDeliveryPolicy}from"#tasks/delivery-policy.js";import{extractWorkflowStreamWriteErrorDetails}from"#harness/workflow-stream-error.js";import{ensureOtelIntegration,getRegisteredTelemetryIntegrations}from"#harness/ai-sdk-telemetry.js";import{getAdvertisedTools}from"#harness/advertised-tools.js";import{resolveFrameworkToolFromUpstreamType}from"#harness/provider-tools.js";import{buildStepHooks,emitStepActions}from"#harness/step-hooks.js";import{buildToolApproval,buildToolSetFromDefinitions,buildToolSetWithProviderTools}from"#harness/tools.js";import{continueWorkflowSandboxInterrupt,getWorkflowSandboxInterrupt,unwrapWorkflowSandboxResult}from"#shared/workflow-sandbox.js";import{FINAL_OUTPUT_TOOL_NAME,buildFinalOutputTool}from"#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 enrichTelemetry(e,t,n,r,i,a){if(e?.action===`drop`||t===void 0&&a===void 0)return;let o={};for(let e of Object.keys(i??{}))o[e]=!0;let s=e===void 0?void 0:applyAudienceCeiling(e,n);return{functionId:t?.functionId??r,includeRuntimeContext:o,integrations:a===void 0?void 0:[a,...getRegisteredTelemetryIntegrations()],isEnabled:!0,recordInputs:(s?.action===`record`?s.recordInputs:shouldCaptureInstrumentationContent(n))&&(t?.recordInputs??!1),recordOutputs:(s?.action===`record`?s.recordOutputs:shouldCaptureInstrumentationContent(n))&&(t?.recordOutputs??!1)}}function mergeSystemInstructions(e){if(e.length===0)return;if(e.length===1)return{...e[0]};let t;for(let n of e)n.providerOptions!==void 0&&(t={...t,...n.providerOptions});let n={role:`system`,content:e.map(e=>e.content).join(`
1
+ import{createErrorId,createLogger,formatError,logError}from"#internal/logging.js";import{contextStorage}from"#context/container.js";import{AuthKey,ParentSessionKey,ScheduleIdKey,SessionCallbackKey,TurnTaskDeliveryKey,TurnTaskStateKey}from"#context/keys.js";import{resolveInstalledPackageInfo}from"#internal/application/package.js";import{toErrorMessage}from"#shared/errors.js";import{createActionResultEvent,createApprovalCandidateEvent,createApprovalSettledEvent,createAuthorizationCompletedEvent,createAuthorizationRequiredEvent,createCompactionCompletedEvent,createCompactionRequestedEvent,createContextClearedEvent,createInputRequestedEvent,createInputResolvedEvent,createMessageCompletedEvent,createResultCompletedEvent,createSessionWaitingEvent,createStepStartedEvent}from"#protocol/message.js";import{summarizeKnownError}from"#harness/semantic-errors/index.js";import{resolveProviderHeaders}from"#internal/gateway.js";import{formatLanguageModelGatewayId}from"#internal/runtime-model.js";import{ChannelKey}from"#runtime/sessions/runtime-context-keys.js";import{buildDynamicTools,buildResponseAuthorizationTools}from"#context/build-dynamic-tools.js";import{drainMemoryCommit,prepareMemoryCompaction,prepareMemoryPreamble}from"#context/memory-lifecycle.js";import{canonicalizeMemoryRecords,clearMemorySessionState,shouldCanonicalizeMemory}from"#shared/memory-state.js";import{advanceStep,emitFailedStep,emitRecoverableFailedTurn,emitStepStarted,emitStreamContent,emitTurnEpilogue,emitTurnPreamble,getHarnessEmissionState,setHarnessEmissionState}from"#harness/emission.js";import{ToolLoopAgent,isStepCount}from"ai";import{resolveAgentsAnnouncement}from"#harness/handles/prompt.js";import{renderPendingApprovalsInstruction,renderPendingApprovalsSnippet}from"#harness/hitl/approval-prompt.js";import{getAgentHandleStore}from"#harness/handles/store.js";import{readTaskIdFromInboxToken}from"#tasks/task-inbox-token.js";import{buildDynamicSubagentTools}from"#context/dynamic-subagent-lifecycle.js";import{hydrateSandboxAttachments,stageAttachmentsToSandbox}from"#harness/attachment-staging.js";import{normalizeModelMessages,normalizeUserContent,resolveAssistantStepText}from"#harness/messages.js";import{TASK_UPDATE_TOOL_NAME}from"#tools/framework/task-contract.js";import{createRuntimeActionRequestFromToolCall,resolvePendingRuntimeActions,setPendingRuntimeActionBatch}from"#harness/runtime-actions.js";import{clearPendingWorkflowInterrupt,getPendingWorkflowInterrupt,setPendingWorkflowInterrupt}from"#harness/workflow-interrupt-state.js";import{getWorkflowRuntimeActionInterrupts,isWorkflowRuntimeActionInterrupt}from"#harness/workflow-runtime-action-state.js";import{activeTurnId}from"#harness/active-turn-id.js";import{createHistoryViewPreparer}from"#shared/history-view.js";import{getActiveDynamicModelSelection,isDynamicModelSelectionError}from"#context/dynamic-model-lifecycle.js";import{ASK_QUESTION_TOOL_NAME}from"#harness/request-input-tool.js";import{getSupersededAuthorizationChallenges,setPendingAuthorization}from"#harness/authorization.js";import{appendPendingInputBatch,consumeDeferredStepInput,getApprovedTools,getPendingInputRequestIds,hasDeferredStepInput,hasPendingApprovalBatch,hasStepInput,resolvePendingInput}from"#harness/input-requests.js";import{accumulateTurnUsage,getTurnUsageState,setTurnUsageState}from"#harness/turn-tag-state.js";import{throwIfTurnAborted}from"#harness/turn-cancellation.js";import{createBackgroundToolCallBatch}from"#harness/background-tools.js";import{buildDynamicInstructionMessages,drainDynamicInstructionUserMessages,prepareDynamicInstructionPreamble}from"#context/dynamic-instruction-lifecycle.js";import{PendingSkillAnnouncementKey}from"#context/dynamic-skill-lifecycle.js";import{getWorkflowContinuationSecurity,readWorkflowContinuationSecurity}from"#harness/workflow-continuation-security.js";import{buildWorkflowHostTools,resolveWorkflowSandboxBridgeRequestLimit}from"#harness/workflow-sandbox.js";import{getApprovalAuditState,markApprovalCandidateHistoryEventEmitted,markApprovalCandidatePendingEventEmitted,markApprovalSettlementEventEmitted}from"#harness/approval-candidates.js";import{getPendingInputBatches,queueDeferredStepInput}from"#harness/pending-input-batches.js";import{EMPTY_DELIVERY_SENTINEL,hasEmptyDeliverySentinel}from"#shared/empty-delivery.js";import{createToolResultMessagePartFromToolError}from"#harness/action-result-helpers.js";import{getInvalidToolCallInputError,isInvalidToolCall}from"#harness/tool-call-input-errors.js";import{EmptyModelResponseError,classifyModelCallError,extractModelCallErrorDetails,extractUnsupportedProviderToolTypes,extractUpstreamRejectionMessage,isNoOutputGeneratedError}from"#harness/model-call-error.js";import{resolveInlineAuthorizationInterrupt}from"#harness/inline-tool-authorization.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{createWorkflowLifecycle}from"#harness/workflow-lifecycle.js";import{compactMessages,getInputTokenCount,resolveCompactionModel,shouldCompact}from"#harness/compaction.js";import{createCurrentMessages}from"#harness/current-messages.js";import{applySessionLimitContinuation,enforceSessionTokenLimit}from"#harness/session-limit-enforcement.js";import{setEveAttributes}from"#runtime/attributes/emit.js";import{coordinateApprovalDelivery,shouldPrepareApprovalPolicyTools}from"#harness/approval-delivery-coordinator.js";import{convertStaleResponsesToUserMessage,dropStaleSessionLimitContinuationResponses}from"#harness/stale-input-responses.js";import{normalizeProviderToolHistory}from"#harness/provider-tool-history.js";import{resolveDeliveryPolicy}from"#tasks/delivery-policy.js";import{extractWorkflowStreamWriteErrorDetails}from"#harness/workflow-stream-error.js";import{getAdvertisedTools}from"#harness/advertised-tools.js";import{resolveFrameworkToolFromUpstreamType}from"#harness/provider-tools.js";import{buildStepHooks,emitStepActions}from"#harness/step-hooks.js";import{buildToolApproval,buildToolSetFromDefinitions,buildToolSetWithProviderTools}from"#harness/tools.js";import{continueWorkflowSandboxInterrupt,getWorkflowSandboxInterrupt,unwrapWorkflowSandboxResult}from"#shared/workflow-sandbox.js";import{FINAL_OUTPUT_TOOL_NAME,buildFinalOutputTool}from"#harness/final-output.js";const environment=process.env.NODE_ENV??`unknown`,eveVersion=resolveInstalledPackageInfo().version,log=createLogger(`harness.tool-loop`);function logToolExecutionError(e){e.toolOutput.type===`tool-error`&&logError(log,`tool execution failed`,e.toolOutput.error,{toolName:e.toolCall.toolName,toolCallId:e.toolCall.toolCallId})}function mergeSystemInstructions(e){if(e.length===0)return;if(e.length===1)return{...e[0]};let t;for(let n of e)n.providerOptions!==void 0&&(t={...t,...n.providerOptions});let n={role:`system`,content:e.map(e=>e.content).join(`
2
2
 
3
- `)};return t!==void 0&&(n.providerOptions=t),n}function buildGatewayAttributionHeaders(e,t){let n=resolveProviderHeaders(e);if(n===void 0)return;let r=t?.agentName??t?.agentId,i=process.env.VERCEL_PROJECT_PRODUCTION_URL||process.env.VERCEL_URL,a=i?`https://${i}`:void 0,o={...n};return r&&(o[`x-title`]=r),a&&(o[`http-referer`]=a),o}async function resolveActiveRuntimeModel(e){if(e.ctx===void 0){let t=e.session.agent.modelReference;if(t===void 0)throw Error(`Dynamic model selection is unavailable outside an eve runtime context.`);return{model:await e.config.resolveModel(t),session:e.session}}let t=getActiveDynamicModelSelection(e.ctx);if(t===null){let t=e.session.agent.modelReference;if(e.session.agent.dynamicModel===!0||t===void 0)throw Error(`Dynamic model selection is required before model-dependent work begins. Add a matching resolver handler that returns a concrete model.`);return{model:await e.config.resolveModel(t),session:e.session}}return{model:t.model===void 0?await e.config.resolveModel(t.reference):t.model,session:updateSessionModelReference(e.session,t.reference)}}function updateSessionModelReference(e,t){return{...e,agent:{...e.agent,modelReference:t},compaction:updateCompactionThresholdForModelReference({compaction:e.compaction,modelReference:t})}}function updateCompactionThresholdForModelReference(e){return e.modelReference.contextWindowTokens===void 0?e.compaction:{...e.compaction,threshold:Math.max(1,Math.floor(e.modelReference.contextWindowTokens*(e.compaction.thresholdPercent??.9)))}}const TURN_TRACE_STATE_KEY=`eve.harness.turnTrace`;function getTurnTraceState(e){return e.state?.[TURN_TRACE_STATE_KEY]}function setTurnTraceState(e,t){let n={traceId:t.traceId,spanId:t.spanId,traceFlags:t.traceFlags};return{...e,state:{...e.state,[TURN_TRACE_STATE_KEY]:n}}}function resolveStepOtelContext(e,t,n){if(t)return trace.setSpan(context.active(),t);if(e){let e=getTurnTraceState(n);if(e){let t=trace.wrapSpanContext({isRemote:!0,traceId:e.traceId,spanId:e.spanId,traceFlags:e.traceFlags});return trace.setSpan(context.active(),t)}}}function buildHarnessToolsWithDynamicSubagents(e,t){let n=new Map(e);if(t===void 0)return n;for(let e of buildDynamicSubagentTools(t)){if(n.has(e.name))throw Error(`Dynamic subagent "${e.name}" collides with another runtime-visible tool name.`);n.set(e.name,e)}return n}function createToolLoopHarness(t){let n=t.handleEvent,g=getInstrumentationRuntime(),x=g?.otelSettings,ee=getInstrumentationConfig(),te=g?.runtimeContextResolvers;x!==void 0&&ensureOtelIntegration();let C=x===void 0?void 0:trace.getTracer(`eve`),w=t.runtimeIdentity?.agentName;async function runStep(e,t){let n=resolveStepInstrumentationDecision(x,w),r;if(C&&n?.action!==`drop`&&hasStepInput(t)){let t=x?.functionId??w,n={"eve.version":eveVersion,"eve.environment":environment,"eve.session.id":e.sessionId};t&&(n[`ai.telemetry.functionId`]=t),r=C.startSpan(`ai.eve.turn`,{attributes:n})}let i=resolveStepOtelContext(C,r,e),executeStep=()=>executeStepBody(e,t,r,n);try{return i?await context.with(i,executeStep):await executeStep()}finally{r?.end()}}async function executeStepBody(g,C,T,D){let O=g,se=createHistoryViewPreparer({previous:t.historyView,projector:t.historyProjector});se(O.history,O.state);let projectHistory=(e,t)=>se(e,t).messages;T&&(O=setTurnTraceState(O,T.spanContext()));let k=getHarnessEmissionState(O.state),A=contextStorage.getStore(),ce=A?.get(ChannelInstrumentationKey),j=normalizeChannelAudience(ce?.metadata.audience),M=D===void 0?instrumentationHooksForAudience(t.instrumentation?.hooks,j):instrumentationHooksForDecision(t.instrumentation?.hooks,D,j),N=A?.get(ParentSessionKey),le=A?.get(ChannelKey),ue=A?.get(SessionCallbackKey),de=N!==void 0||ue!==void 0,P=(ue?.taskId!==void 0||readTaskIdFromInboxToken(String(le?.state?.parentContinuationToken??``))!==void 0)&&t.tools.has(TASK_UPDATE_TOOL_NAME),fe=resolveParentLineage(N,le),pe=A?.get(ParentTraceContextKey),me=A?.get(SessionTraceSeedKey),he,F=createInstrumentationHandleEvent({agentName:t.runtimeIdentity?.agentName,channelAudience:j,channelKind:ce?.kind,getAttemptScope:()=>he,handleEvent:n,hooks:M,parentLineage:fe,parentTraceContext:pe,rootSessionId:N?.rootSessionId,sessionId:O.sessionId,turnId:activeTurnId(k)}),failModelSelection=async(n,r)=>{if(throwIfTurnAborted(t.abortSignal),T&&recordErrorOnSpan(T,n),!F)throw n;let a=createErrorId(),o=toErrorMessage(n);return log.error(`model selection failed terminally`,{error:n,errorId:a,sessionId:O.sessionId,turnId:r.turnId}),await emitFailedStep(F,r,{code:`MODEL_SELECTION_FAILED`,details:{errorId:a},message:o,sessionId:O.sessionId}),{next:t.mode===`task`||de?{done:!0,isError:!0,output:o}:{done:!0,output:``},session:O}},preparePreambleTrace=async()=>{let e=T?.spanContext(),n=e!==void 0&&isValidSpanContext(e)?{spanId:e.spanId,traceFlags:e.traceFlags,traceId:e.traceId}:void 0;return await prepareTurnTraceContext({agentName:t.runtimeIdentity?.agentName,channelAudience:j,channelType:ce?.channelType,instrumentation:t.instrumentation,parentLineage:fe,parentTraceContext:pe,rootSessionId:N?.rootSessionId??O.rootSessionId??O.sessionId,sequence:k.sequence,sessionId:O.sessionId,sessionStarted:k.sessionStarted,traceContext:n,traceSeed:me,turnId:`turn_${k.sequence}`})};if(t.clearOnly===!0)return O={...O,compaction:{recentWindowSize:O.compaction.recentWindowSize,threshold:O.compaction.threshold,thresholdPercent:O.compaction.thresholdPercent},history:[],state:clearMemorySessionState(O.state)},await F?.(createContextClearedEvent({sequence:k.sequence,sessionId:O.sessionId,turnId:activeTurnId(k)})),await F?.(createSessionWaitingEvent()),{next:null,session:O};if(t.compactOnly===!0){if(O.history.length>0)try{let e=contextStorage.getStore(),n=await resolveActiveRuntimeModel({config:t,ctx:e,session:O});O=n.session;let r=await maybeCompact({abortSignal:t.abortSignal,auth:e?.get(AuthKey)??null,emit:F,emissionState:{...k,turnId:activeTurnId(k)},force:!0,historyProjector:t.historyProjector,messages:[...O.history],model:n.model,onCompaction:t.onCompaction,resolveModel:t.resolveModel,runtimeIdentity:t.runtimeIdentity,session:O,telemetry:enrichTelemetry(D,x,j,w)??void 0});O={...r.session,compaction:{recentWindowSize:r.session.compaction.recentWindowSize,threshold:r.session.compaction.threshold,thresholdPercent:r.session.compaction.thresholdPercent},history:r.messages}}catch(e){logError(log,`manual session compaction failed`,e,{sessionId:O.sessionId})}return await F?.(createSessionWaitingEvent()),{next:null,session:O}}let ge=consumeDeferredStepInput({input:C,preferCurrentInput:t.mode!==`conversation`&&C!==void 0&&hasPendingApprovalBatch(O),session:O});O=ge.session;let I=await resolvePendingRuntimeActions({emit:F,session:O,stepInput:ge.input});if(I.outcome===`unresolved`)return{next:null,session:I.session};O=I.session;let _e=getPendingInputRequestIds(O.state),L=convertStaleResponsesToUserMessage({history:I.messages,pendingRequestIds:_e,stepInput:dropStaleSessionLimitContinuationResponses({pendingRequestIds:_e,stepInput:ge.input})}),R=L.stepInput,ve=L.kind===`converted`?{...R,message:L.displayMessage}:R,ye=contextStorage.getStore();ye!==void 0&&t.resolveStepDynamicTools!==void 0&&shouldPrepareApprovalPolicyTools({session:O,stepInput:R})&&await t.resolveStepDynamicTools({ctx:ye,event:createStepStartedEvent({modelId:O.agent.modelReference?.id??`dynamic`,sequence:k.sequence,stepIndex:k.stepIndex,turnId:k.turnId}),messages:projectHistory(I.messages,O.state)});let z=await coordinateApprovalDelivery({session:O,stepInput:R,tools:buildResponseAuthorizationTools({authoredTools:t.tools,context:ye})});if(O=z.session,F){for(let e of z.feedback)await F(createMessageCompletedEvent({message:e,sequence:k.sequence,stepIndex:k.stepIndex,turnId:k.turnId}));let e=getApprovalAuditState(O.state);for(let t of e.activeCandidates.filter(e=>e.pendingEventEmitted!==!0))await F(createApprovalCandidateEvent({candidateId:t.candidateId,outcome:`pending`,requestId:t.requestId,responderPrincipalId:t.responder.principalId,sequence:k.sequence,stepIndex:k.stepIndex,turnId:k.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 F(createApprovalCandidateEvent({candidateId:t.candidateId,outcome:t.status,requestId:t.requestId,responderPrincipalId:t.responder.principalId,reason:t.reason,sequence:k.sequence,stepIndex:k.stepIndex,turnId:k.turnId})),O={...O,state:markApprovalCandidateHistoryEventEmitted({candidateId:t.candidateId,state:O.state})};for(let t of e.settlements.filter(e=>e.eventEmitted!==!0))await F(createApprovalSettledEvent({outcome:t.outcome===`allowed`?`approved`:`cancelled`,requestId:t.requestId,responderPrincipalId:t.actor.principalId,sequence:k.sequence,stepIndex:k.stepIndex,turnId:k.turnId})),O={...O,state:markApprovalSettlementEventEmitted({requestId:t.requestId,state:O.state})}}if(z.kind===`park`)return{next:null,session:O};if(z.kind===`continue-coordination`)return{next:runStep,session:z.stepInput===void 0?O:queueDeferredStepInput(O,z.stepInput)};if(z.challenges.length>0){if(F)for(let e of z.challenges)await F(createAuthorizationRequiredEvent({authorization:e.challenge,candidateId:e.candidateId,description:e.challenge.instructions??`Authorization required for ${e.name}`,name:e.name,sequence:k.sequence,stepIndex:k.stepIndex,turnId:k.turnId,webhookUrl:e.hookUrl}));let e=z.stepInput===void 0?O:queueDeferredStepInput(O,z.stepInput);return{next:null,session:{...e,state:setPendingAuthorization(e.state,{challenges:z.challenges})}}}let B=resolvePendingInput({deferMessagesWhileApprovalsPending:t.mode!==`conversation`,history:I.messages,resolveApprovalKey:resolveApprovalKeyFromTools(t.tools),session:O,stepInput:z.stepInput});if(B.outcome===`unresolved`){let e=I.outcome===`resolved`?{...B.session,history:[...I.messages]}:B.session;if(F&&t.mode===`conversation`&&B.deferredMessage===!0&&hasStepInput(C)){A!==void 0&&prepareDynamicInstructionPreamble(A,projectHistory(e.history,e.state));let n=[];try{let e=await preparePreambleTrace();k=await emitTurnPreamble(F,ve??{},k,t.runtimeIdentity,e)}catch(t){if(n=A===void 0?[]:drainDynamicInstructionUserMessages(A),e={...e,history:[...e.history,...n]},O=e,!isDynamicModelSelectionError(t))throw t;return failModelSelection(t,{sessionStarted:!0,sequence:k.sequence,stepIndex:0,turnId:`turn_${k.sequence}`})}return n=A===void 0?[]:drainDynamicInstructionUserMessages(A),e={...e,history:[...e.history,...n]},k=await emitTurnEpilogue(F,k,t.mode),{next:null,session:setHarnessEmissionState(e,k)}}return I.outcome===`resolved`?(F&&t.mode===`conversation`&&(k=await emitTurnEpilogue(F,k,t.mode),e=setHarnessEmissionState(e,k)),{next:null,session:e}):{next:null,session:B.session}}if(B.resolvedInputs!==void 0)for(let e of B.resolvedInputs)M!==void 0&&await publishInputResolutions({batch:e,hooks:M,sessionId:O.sessionId}),F&&await F(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(F&&B.rejectedActions)for(let e of B.rejectedActions)for(let t of e.results)await F(createActionResultEvent({rejected:!0,result:t,sequence:e.event.sequence,stepIndex:e.event.stepIndex,turnId:e.event.turnId}));let V=[];if(R?.context!==void 0&&B.deferredContext!==!0)for(let e of R.context)V.push({content:e,role:`user`});let be=normalizeUserContent(R?.message),xe=be!==void 0&&!B.deferredMessage&&!B.consumedMessage?await stageAttachmentsToSandbox(be):void 0;xe!==void 0&&V.push({content:xe,role:`user`});let H=[],U;if(F&&hasStepInput(C)){A!==void 0&&(prepareDynamicInstructionPreamble(A,projectHistory(B.session.history,B.session.state)),prepareMemoryPreamble(A,{history:B.messages,input:V,state:B.session.state}));try{let e=await preparePreambleTrace();k=await emitTurnPreamble(F,ve??{},k,t.runtimeIdentity,e)}catch(e){if(H=A===void 0?[]:drainDynamicInstructionUserMessages(A),U=A===void 0?void 0:drainMemoryCommit(A),O={...B.session,history:[...U?.history??B.session.history,...H],state:U?.state??B.session.state},!isDynamicModelSelectionError(e))throw e;return failModelSelection(e,{sessionStarted:!0,sequence:k.sequence,stepIndex:0,turnId:`turn_${k.sequence}`})}H=A===void 0?[]:drainDynamicInstructionUserMessages(A),U=A===void 0?void 0:drainMemoryCommit(A),T&&T.setAttribute(`eve.turn.id`,k.turnId)}let Se=U?.history??B.session.history,Ce=B.session.history.length;O=setHarnessEmissionState({...B.session,history:[...Se,...H],state:U?.state??B.session.state},k);let W=[...U?.history??B.messages.slice(0,Ce),...H,...U===void 0?B.messages.slice(Ce):[]],we=await applySessionLimitContinuation({config:t,emit:F,emissionState:k,limitContinuation:B.limitContinuation,session:O});if(we.result!==null)return we.result;O=we.session;let Te=getAgentHandleStore(O.state);if(Te!==void 0&&!hasUnansweredToolCall(W)&&Te.handles.some(e=>e.phase===`addressed`)!==!0){let e=resolveAgentsAnnouncement({messages:projectHistory(W,O.state),store:Te});e!==void 0&&W.push({content:e,role:`user`})}W=[...W,...V];let G=projectHistory(W,O.state),K=A,Ee;try{K!==void 0&&t.dispatchDynamicModelEvent!==void 0&&await t.dispatchDynamicModelEvent({ctx:K,event:{data:{sequence:k.sequence,stepIndex:k.stepIndex,turnId:k.turnId},type:`step.started`},messages:G}),Ee=await resolveActiveRuntimeModel({config:t,ctx:K,session:O})}catch(e){return failModelSelection(e,k)}O=Ee.session;let q=Ee.model,De=detectPromptCachePath(q),J=De.kind===`anthropic-direct`?getAnthropicCacheMarker():void 0,Oe=buildGatewayAttributionHeaders(q,t.runtimeIdentity),ke=await maybeCompact({abortSignal:t.abortSignal,auth:K?.get(AuthKey)??null,emit:F,emissionState:k,historyProjector:t.historyProjector,messages:[...W],model:q,onCompaction:t.onCompaction,resolveModel:t.resolveModel,runtimeIdentity:t.runtimeIdentity,session:O,telemetry:enrichTelemetry(D,x,j,w)??void 0});O=ke.session,ke.compacted&&(W=ke.messages),G=normalizeModelMessages(projectHistory(W,O.state)),F&&await emitStepStarted(F,k,requireSessionModelReference(O).id,G);let Ae=getApprovedTools(O),je=k.sequence===0,Y=resolveDeliveryPolicy({hasScheduleProvenance:je&&K?.get(ScheduleIdKey)!==void 0,hasOutputSchema:O.outputSchema!==void 0,isChild:K?.get(ParentSessionKey)!==void 0,isFirstTurn:je,taskDeliveryPhase:K?.get(TurnTaskDeliveryKey)}),X=createCurrentMessages(G,{currentTurnMessages:V});if(K!==void 0){X.addSystem(buildDynamicInstructionMessages(K));let e=K.get(PendingSkillAnnouncementKey);e!==void 0&&e.length>0&&X.add(k.sequence,e);let t=K.get(TurnTaskStateKey);t!==void 0&&X.add(k.sequence,t)}Y.instruction!==void 0&&X.add(k.sequence,Y.instruction);let Me=renderPendingApprovalsInstruction(getPendingInputBatches(O.state).flatMap(e=>e.requests));Me!==void 0&&X.add(k.sequence,Me,{cacheFriendly:!1});let Ne=await hydrateSandboxAttachments(X.nonSystemMessages),prepareModelCallInput=e=>{let t=e?[{role:`system`,content:e}]:[],n=O.agent.system?[{role:`system`,content:O.agent.system}]:[],r=X.systemMessages.length>0||t.length>0?[...t,...n,...X.systemMessages]:void 0,i=r!==void 0&&J?applySystemCacheBreakpoint(r,J):r,a=i===void 0?O.agent.system??void 0:mergeSystemInstructions(i);return{instructions:a,telemetryRuntimeContext:buildTelemetryRuntimeContext({eveVersion,authored:ee,emissionState:k,environment,modelInput:{instructions:a,messages:Ne},providerResolvers:te,session:O})}},Pe=t.tools,runSingleModelCall=async e=>{let{instructions:n,telemetryRuntimeContext:i={}}=e.preparedInput??prepareModelCallInput(e.extraSystemNote);e.retryReason&&(i[`eve.retry.reason`]=e.retryReason);let a=e.trailingUserNote?[...Ne,{role:`user`,content:e.trailingUserNote}]:[...Ne],o=buildHarnessToolsWithDynamicSubagents(t.tools,K),c=createBackgroundToolCallBatch(),l=getAdvertisedTools({delegatedCaller:P,session:O,tools:o});Pe=l;let u=await buildToolSetWithProviderTools({approvedTools:Ae,backgroundBatch:c,capabilities:t.capabilities,disabledProviderTools:e.disabledProviderTools,modelReference:requireSessionModelReference(O),tools:l,webSearchProvider:t.webSearchProvider});if(K!==void 0){let n=getAdvertisedTools({delegatedCaller:P,session:O,tools:buildDynamicTools(K)}),r=buildToolSetFromDefinitions({approvedTools:Ae,backgroundBatch:c,capabilities:t.capabilities,disabledProviderTools:e.disabledProviderTools,tools:n});for(let[e,t]of Object.entries(r)){if(l.get(e)?.runtimeAction!==void 0)throw Error(`Dynamic tool "${e}" collides with a runtime-visible subagent.`);u[e]=t}}O.outputSchema!==void 0&&(u[FINAL_OUTPUT_TOOL_NAME]=buildFinalOutputTool(O.outputSchema));let d=F===void 0?void 0:({tools:e})=>createWorkflowLifecycle({emit:F,emissionState:k,tools:e}),f=t.workflow===!0?{lifecycle:d,maxSubagents:t.workflowMaxSubagents}:void 0,p=await getAdvertisedTools({delegatedCaller:P,modelTools:u,session:O,tools:l,workflow:f});O=p.session;let m=p.modelTools,h=J?applyLastToolCacheBreakpoint(m,J):m,g=activeTurnId(k),_=M===void 0?void 0:{attemptId:`${O.sessionId}:${g}:${k.stepIndex}:${e.attemptIndex}`,attemptIndex:e.attemptIndex,channelAudience:j,functionId:x?.functionId??w,rootSessionId:N?.rootSessionId??O.sessionId,sessionId:O.sessionId,stepIndex:k.stepIndex,turnId:g};he=_;let v=D?.action===`drop`||_===void 0||M===void 0?void 0:createAiSdkHookBridge(_,M,t.instrumentation?.runInContext,i),y=buildStepHooks({auth:K?.get(AuthKey)??null,cachePath:De,emit:F,emissionState:k,emitStepStarted:e.suppressStepStartedEmission!==!0,marker:J,session:O}),b=new ToolLoopAgent({headers:Oe,instructions:n,model:q,onLanguageModelCallEnd(e){for(let t of e.content)t.type!==`tool-call`||t.providerExecuted===!0||isInvalidToolCall(t)||c.register({callId:t.toolCallId,input:t.input,toolName:t.toolName})},onToolExecutionEnd:logToolExecutionError,onError(e){summarizeKnownError(e.error)?.tags.includes(`config`)!==!0&&logError(log,`tool-loop stream error`,e.error)},onStepFinish:y.onStepFinish,prepareStep:y.prepareStep,reasoning:O.agent.reasoning,runtimeContext:i,stopWhen:isStepCount(1),telemetry:enrichTelemetry(D,x,j,w,i,v),toolApproval:buildToolApproval(m),tools:h}),executeModelCall=async()=>{if(F){let e=[...t.tools].filter(([e,t])=>t.runtimeAction!==void 0&&l.get(e)===void 0).map(([e])=>e),n=new Set([ASK_QUESTION_TOOL_NAME,FINAL_OUTPUT_TOOL_NAME,...e]),r=await b.stream({abortSignal:t.abortSignal,messages:a}),{emittedActionCallIds:i,handledInlineToolResultCallIds:o,invalidInputToolCallIds:s,inlineAuthorizationResults:c,trailingInlineToolResultParts:u}=await emitStreamContent(F,k,r.fullStream,{excludedActionToolNames:n,tools:l});throwIfTurnAborted(t.abortSignal);let[d,f]=await Promise.all([y.stepResult,r.responseMessages]);if(isEmptyModelResponse(d)&&extractToolResultCallIds(f).size===0&&c.length===0&&u.length===0)throw new EmptyModelResponseError;await emitStepActions(F,k,d,{emittedActionCallIds:i,excludedActionCallIds:s,excludedActionToolNames:n,handledInlineToolResultCallIds:o,tools:l});let p=d.toolResults,m=new Map(p.map(e=>[e.toolCallId,e]));for(let e of c)m.set(e.toolCallId,e);return withAccumulatedResponseMessages({invalidInputToolCallIds:s,responseMessages:appendMissingToolResultMessages({append:u,responseMessages:f}),stepResult:d,toolResults:[...m.values()]})}let e=await b.generate({abortSignal:t.abortSignal,messages:a});throwIfTurnAborted(t.abortSignal);let n=await y.stepResult;if(isEmptyModelResponse(n)&&extractToolResultCallIds(e.responseMessages).size===0)throw new EmptyModelResponseError;return withAccumulatedResponseMessages({responseMessages:e.responseMessages,stepResult:n})};try{let e=await executeModelCall();return _!==void 0&&await M?.publish({idempotencyKey:attemptIdempotencyKey(_),scope:_,type:`step.attempt.completed`}),e}catch(e){return _!==void 0&&await M?.publish({error:e,idempotencyKey:attemptIdempotencyKey(_),scope:_,type:`step.attempt.failed`}),rethrowNoOutputAsEmptyResponse(e)}},Fe=0,runOneModelCall=async e=>runModelCallWithRetries(t=>runSingleModelCall({...e,attemptIndex:Fe++,preparedInput:t===1?e.preparedInput:void 0,suppressStepStartedEmission:t!==1||e.suppressStepStartedEmission}),{sessionId:O.sessionId,turnId:k.turnId},t.abortSignal),Ie=prepareModelCallInput(),Le=await continuePendingWorkflowInterrupt({childResults:R?.runtimeActionResults,config:t,emit:F,emissionState:k,runStep,session:O,tools:buildHarnessToolsWithDynamicSubagents(t.tools,K)});if(Le!==null)return Le;let Re=await enforceSessionTokenLimit({config:t,emit:F,emissionState:k,messages:G,session:O});if(Re!==null)return Re;let Z;try{Z=await runOneModelCall({preparedInput:Ie,suppressStepStartedEmission:!0})}catch(n){throwIfTurnAborted(t.abortSignal);let r=await runModelCallRecoveryPipeline({error:n,stages:[e=>attemptUnsupportedProviderToolRecovery({error:e.error,runOneModelCall,sessionId:O.sessionId,turnId:k.turnId}),e=>attemptEmptyResponseRecovery({emptyDeliveryEnabled:Y.allowsEmptyDelivery,error:e.error,retryCallOptions:e.retryCallOptions,runOneModelCall,sessionId:O.sessionId,turnId:k.turnId})]});if(throwIfTurnAborted(t.abortSignal),r.outcome===`recovered`)Z=r.result;else{let n=r.error;if(T&&recordErrorOnSpan(T,n),!F)throw n;let a=extractWorkflowStreamWriteErrorDetails(n);if(a!==null){let t=createErrorId();return log.error(`workflow stream write failed — parking session for retry by the user`,{...a,errorId:t,error:n,sessionId:O.sessionId,turnId:k.turnId}),k=await emitRecoverableFailedTurn(F,k,{code:`WORKFLOW_STREAM_WRITE_FAILED`,continuationToken:O.continuationToken,details:{...a,errorId:t},message:toErrorMessage(n)}),{next:null,session:setHarnessEmissionState(O,k)}}let o=classifyModelCallError(n),s=createErrorId(),c=summarizeKnownError(n),l=c===null?extractUpstreamRejectionMessage(n):null,u=c?.message??l?.message??toErrorMessage(n),d=c?.hint===void 0?u:`${u} ${c.hint}`,f=extractModelCallErrorDetails(n),p=buildModelCallFailureDetails({catalogSummary:c,error:n,errorId:s,modelCallDetails:f,upstreamRejection:l}),m=buildModelCallFailureLogFields({error:n,errorId:s,modelCallDetails:f,recognized:c!==null||l!==null,sessionId:O.sessionId,turnId:k.turnId});if(o===`terminal`)return c===null?log.error(l?.message??`model call failed terminally`,m):log.error(`${c.name}: ${c.message}`,{errorId:s,hint:c.hint,sessionId:O.sessionId,turnId:k.turnId}),await emitFailedStep(F,k,{code:`MODEL_CALL_FAILED`,details:p,message:u,sessionId:O.sessionId}),{next:t.mode===`task`||de?{done:!0,isError:!0,output:d}:{done:!0,output:``},session:O};if(t.mode===`task`){if(o===`recoverable`&&!(n instanceof EmptyModelResponseError))throw log.warn(l?.message??`model call failed recoverably in task mode — rethrowing for durable step retry`,m),n;return log.error(l?.message??`model call failed; failing the task run`,m),await emitFailedStep(F,k,{code:`MODEL_CALL_FAILED`,details:p,message:u,sessionId:O.sessionId}),{next:{done:!0,isError:!0,output:d},session:O}}log.error(l?.message??`model call failed — parking session for retry by the user`,m),k=await emitRecoverableFailedTurn(F,k,{code:`MODEL_CALL_FAILED`,continuationToken:O.continuationToken,details:p,message:u});let h={isError:!0,output:d};return O={...O,outputSchema:void 0},{next:null,session:setHarnessEmissionState(O,k),settledTurn:h}}}let Q=accumulateTurnUsage({previous:getTurnUsageState(O.state),turnId:k.turnId,usage:extractTokenUsageDelta({costUsd:extractGatewayCostUsd(Z.providerMetadata),usage:Z.usage})});O=setTurnUsageState(O,Q);let $;try{$=formatLanguageModelGatewayId(q)}catch{$=void 0}return await setEveAttributes({"$eve.model":$,"$eve.input_tokens":Q.inputTokens,"$eve.output_tokens":Q.outputTokens,"$eve.cache_read_tokens":Q.cacheReadTokens,"$eve.cache_write_tokens":Q.cacheWriteTokens,"$eve.cost_usd":Q.sawCost?Q.costUsd:void 0,"$eve.tool_count":t.tools.size}),handleStepResult({config:t,emit:F,emissionState:k,delegatedCaller:P,modelPromptMessageCount:G.length,promptMessages:W,result:Z,runStep,session:O,runtimeActionTools:Pe})}return runStep}function resolveStepInstrumentationDecision(e,t){if(e===void 0)return;let n=contextStorage.getStore(),r=n?.get(SessionTraceSeedKey);if(r?.decision!==void 0)return r.decision;let i=n?.get(ChannelInstrumentationKey),s=normalizeChannelAudience(i?.metadata.audience);return r===void 0?resolveTracePolicy(e.tracePolicy,{agentName:t,audience:s,channelType:i?.channelType}):resolveTracePolicyDecision(isSampledTrace(r),s)}function isValidSpanContext(e){return/^[0-9a-f]{32}$/u.test(e.traceId)&&e.traceId!==`00000000000000000000000000000000`&&/^[0-9a-f]{16}$/u.test(e.spanId)&&e.spanId!==`0000000000000000`}function extractTokenUsageDelta(e){let t=e.usage;if(!(t===void 0&&e.costUsd===void 0))return{cacheReadTokens:t?.inputTokenDetails?.cacheReadTokens,cacheWriteTokens:t?.inputTokenDetails?.cacheWriteTokens,costUsd:e.costUsd,inputTokens:t?.inputTokens,outputTokens:t?.outputTokens}}function extractGatewayCostUsd(e){let t=readGatewayMetadata(e)?.cost;if(typeof t==`number`&&Number.isFinite(t))return t;if(typeof t==`string`){let e=Number(t);return Number.isFinite(e)?e:void 0}}function readGatewayMetadata(e){let t=e?.gateway;return t&&typeof t==`object`&&!Array.isArray(t)?t:void 0}function buildModelCallFailureDetails(e){let{catalogSummary:t,error:r,errorId:i,modelCallDetails:a,upstreamRejection:o}=e;if(t!==null){let e={errorId:i,message:t.message,name:t.name,semanticErrorId:t.id,...a};return t.hint!==void 0&&(e.hint=t.hint),e}return o===null?{...formatError(r,i),...a}:{errorId:i,message:toErrorMessage(r),name:o.name,...a}}function buildModelCallFailureLogFields(e){let t={errorId:e.errorId,sessionId:e.sessionId,turnId:e.turnId};return e.recognized?{...t,details:e.modelCallDetails}:{...t,error:e.error}}async function runModelCallRecoveryPipeline(e){let t=e.error,n;for(let r of e.stages){let e=await r({error:t,retryCallOptions:n});if(e.outcome===`recovered`)return e;e.outcome===`failed`&&(t=e.error,n=e.retryCallOptions)}return{outcome:`failed`,error:t}}function withAccumulatedResponseMessages(e){let{stepResult:t}=e;return{content:t.content,finishReason:t.finishReason,...e.invalidInputToolCallIds===void 0?{}:{invalidInputToolCallIds:e.invalidInputToolCallIds},providerMetadata:t.providerMetadata,response:{...t.response,messages:[...e.responseMessages]},text:t.text,toolCalls:t.toolCalls,toolResults:e.toolResults===void 0?t.toolResults:[...e.toolResults],usage:t.usage}}function appendMissingToolResultMessages(e){let t=extractToolResultCallIds(e.responseMessages),n=e.append.filter(e=>!t.has(e.toolCallId));return[...e.responseMessages,...n.length>0?[{role:`tool`,content:[...n]}]:[]]}function getInvalidToolCallInputErrors(e){let t=[];for(let n of e.toolCalls){if(n.toolName===FINAL_OUTPUT_TOOL_NAME)continue;let e=getInvalidToolCallInputError({toolCall:n});e!==void 0&&t.push(e)}return t}function extractToolResultCallIds(e){let t=new Set;for(let n of e)if(Array.isArray(n.content))for(let e of n.content)typeof e==`object`&&e&&e.type===`tool-result`&&t.add(e.toolCallId);return t}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:s,session:c}=e,l=resolveAssistantStepText(i.response.messages,i.text),u=i.finishReason!==`tool-calls`&&i.toolCalls.length===0&&hasEmptyDeliverySentinel(l),d=getInvalidToolCallInputErrors({toolCalls:i.toolCalls}),f=new Set([...i.invalidInputToolCallIds??[],...i.toolCalls.filter(isInvalidToolCall).map(e=>e.toolCallId),...d.map(e=>e.toolCallId)]),p=u?[]:appendMissingToolResultMessages({append:d.map(e=>createToolResultMessagePartFromToolError(e)),responseMessages:i.response.messages}),m=u?null:l,h=new Set;for(let e of[...i.content??[],...i.toolResults??[]])(e.type===`tool-result`||e.type===`tool-error`)&&e.providerExecuted===!0&&h.add(e.toolCallId);let g=normalizeProviderToolHistory({messages:p,providerExecutedOutcomeIds:h}),_=g.messages,v={...c,compaction:createNextCompactionConfig(c.compaction,e.modelPromptMessageCount,i)},y=t.workflow===!0?readWorkflowContinuationSecurity(v):void 0;if(y!==void 0){let e=await getWorkflowSandboxInterrupt(i,y);if(e!==void 0){if(!isWorkflowRuntimeActionInterrupt(e))throw Error(`Unsupported Workflow interrupt kind "${e.payload.kind}".`);return parkOnWorkflowInterrupt({baseSession:v,emissionState:s,interrupt:e,promptMessages:r,responseMessages:_})}}let b=extractToolApprovalInputRequests({content:i.content??[],excludedCallIds:f}),ee=new Set(b.map(e=>e.action.callId)),te=extractQuestionInputRequests({toolCalls:i.toolCalls,excludedCallIds:new Set([...f,...ee])}),S=[...b,...te],ne=renderPendingApprovalsSnippet(b),re=[...r,...ne===void 0?[]:[{content:ne,role:`user`}]],w=getAdvertisedTools({delegatedCaller:e.delegatedCaller,session:v,tools:e.runtimeActionTools}),ie=(i.toolCalls??[]).filter(e=>!f.has(e.toolCallId)).filter(t=>e.runtimeActionTools.get(t.toolName)?.runtimeAction!==void 0).filter(e=>w.get(e.toolName)?.runtimeAction===void 0?(log.warn(`runtime action tool call blocked because tool is not advertised`,{callId:e.toolCallId,sessionId:v.sessionId,toolName:e.toolName}),!1):!0).map(e=>createRuntimeActionRequestFromToolCall({toolCall:e,tools:w}));if(ie.length>0){if(S.length===0)return{next:null,session:setHarnessEmissionState(setPendingRuntimeActionBatch({actions:ie,event:{sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId},responseMessages:_,session:{...v,history:[...r]}}),advanceStep(s))};let e=setPendingRuntimeActionBatch({actions:ie,event:{sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId},responseMessages:_,session:{...v,history:re}});return e=appendPendingInputBatch({event:{sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId},requests:S,responseMessages:[],session:e}),n&&await n(createInputRequestedEvent({requests:S,sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId})),{next:null,session:setHarnessEmissionState(e,advanceStep(s))}}if(S.length>0){let e=buildResponseAuthorizationTools({authoredTools:t.tools,context:contextStorage.getStore()}),r=appendPendingInputBatch({event:{sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId},requests:S,responseAuthRequiredRequestIds:b.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:_,session:{...v,history:re}});return n&&(await n(createInputRequestedEvent({requests:S,sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId})),t.mode===`conversation`&&(s=await emitTurnEpilogue(n,s,t.mode),r=setHarnessEmissionState(r,s))),{next:hasDeferredStepInput(r)?a:null,session:r}}let ae=findAuthorizationSignalFromToolResults(i.toolResults);if(ae){let{challenges:e}=ae;if(n){for(let t of getSupersededAuthorizationChallenges(v.state,e))await n(createAuthorizationCompletedEvent({attemptId:t.attemptId,authorization:t.challenge,name:t.name,outcome:`failed`,reason:`Superseded by a newer authorization attempt.`,sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId}));for(let t of e)await n(createAuthorizationRequiredEvent({attemptId:t.attemptId,authorization:t.challenge,name:t.name,description:t.challenge.instructions??`Authorization required for ${t.name}`,webhookUrl:t.hookUrl,sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId}));t.mode===`conversation`&&(s=await emitTurnEpilogue(n,s,t.mode))}return{next:null,session:setHarnessEmissionState({...v,history:[...r],state:setPendingAuthorization(v.state,{challenges:e})},s)}}let oe=_,T=[...r,...oe],E={...v,history:T};return!(E.outputSchema!==void 0&&extractFinalOutput(i)!==void 0)&&(oe.at(-1)?.role===`tool`||g.outcomeEndsResponse||hasDeferredStepInput(E))?(n&&(s=advanceStep(s),E=setHarnessEmissionState(E,s)),{next:a,session:E}):t.mode===`task`?finishTaskTurn({emissionState:s,emit:n,history:r,result:i,schema:E.outputSchema,session:E,stepOutput:m}):finishConversationTurn({emissionState:s,emit:n,history:r,result:i,schema:E.outputSchema,session:E,stepOutput:m})}const OUTPUT_SCHEMA_NOT_FULFILLED={code:`OUTPUT_SCHEMA_NOT_FULFILLED`,message:`The agent could not produce a result matching the requested schema.`};function extractFinalOutput(e){return(e.toolCalls??[]).find(e=>e.toolName===FINAL_OUTPUT_TOOL_NAME&&!isInvalidToolCall(e))?.input}function persistStructuredAssistantTurn(e,t,n){return{...e,history:[...t,{content:JSON.stringify(n),role:`assistant`}],outputSchema:void 0}}async function emitStructuredResult(e,t,n,r,i){return await e(createResultCompletedEvent({result:n,sequence:t.sequence,stepIndex:t.stepIndex,turnId:t.turnId})),emitTurnEpilogue(e,t,r,i)}async function finishTaskTurn(e){let{emit:t,history:n,result:r,schema:i,stepOutput:a}=e,{emissionState:o,session:s}=e;if(i===void 0)return t&&(o=await emitTurnEpilogue(t,o,`task`,s.history),s=setHarnessEmissionState(s,o)),{next:{done:!0,output:a??``},session:s};let c=extractFinalOutput(r);return c===void 0?(s={...s,outputSchema:void 0},t&&await emitFailedStep(t,o,{...OUTPUT_SCHEMA_NOT_FULFILLED,sessionId:s.sessionId}),{next:{done:!0,isError:!0,output:OUTPUT_SCHEMA_NOT_FULFILLED.message},session:s}):(s=persistStructuredAssistantTurn(s,n,c),t&&(o=await emitStructuredResult(t,o,c,`task`,s.history),s=setHarnessEmissionState(s,o)),{next:{done:!0,output:c},session:s})}async function finishConversationTurn(e){let{emit:t,history:n,result:r,schema:i,stepOutput:a}=e,{emissionState:o,session:s}=e;if(i===void 0)return t&&(o=await emitTurnEpilogue(t,o,`conversation`,s.history),s=setHarnessEmissionState(s,o)),{next:null,session:s,settledTurn:{output:a??``}};let c=extractFinalOutput(r);if(c===void 0){s={...s,outputSchema:void 0},t&&(o=await emitRecoverableFailedTurn(t,o,{...OUTPUT_SCHEMA_NOT_FULFILLED,continuationToken:s.continuationToken}),s=setHarnessEmissionState(s,o));let e={isError:!0,output:OUTPUT_SCHEMA_NOT_FULFILLED.message};return{next:null,session:s,settledTurn:e}}return s=persistStructuredAssistantTurn(s,n,c),t&&(o=await emitStructuredResult(t,o,c,`conversation`,s.history),s=setHarnessEmissionState(s,o)),{next:null,session:s,settledTurn:{output:c}}}async function continuePendingWorkflowInterrupt(e){let t=getPendingWorkflowInterrupt(e.session.state);if(t===void 0)return null;let n=t.interrupt;if(!isWorkflowRuntimeActionInterrupt(n))throw Error(`Unsupported Workflow interrupt kind "${n.payload.kind}".`);let i=e.emit===void 0?void 0:createWorkflowLifecycle({emit:e.emit,emissionState:e.emissionState,skipReplayed:!0,tools:e.tools}),a=getWorkflowContinuationSecurity(e.session),o;try{let t=buildWorkflowHostTools({tools:e.tools}),r=e.childResults??[],s=n,c=0;for(;;){o=await continueWorkflowSandboxInterrupt({bridgeRequestLimit:resolveWorkflowSandboxBridgeRequestLimit(e.config.workflowMaxSubagents),continuationSecurity:a,interrupt:s,lifecycle:i,resolution:r[c]?.output,tools:t});let n=await unwrapWorkflowSandboxResult(o,a);if(n.status!==`interrupted`||!isWorkflowRuntimeActionInterrupt(n.interrupt)||c+1>=r.length)break;let l=getWorkflowRuntimeActionInterrupts(n.interrupt)[0];if(l===void 0)throw Error(`Workflow continuation contains no pending runtime-action interrupt.`);c++,s=l}}catch(e){logError(log,`Workflow interrupt continuation failed`,e),o={error:`workflow_continuation_failed`,message:toErrorMessage(e),retryable:!1}}let s=await unwrapWorkflowSandboxResult(o,a),c=s.status===`interrupted`?s.interrupt:s.output,l=replaceWorkflowToolResult([...e.session.history,...t.responseMessages],n.outerToolCallId,c),u=clearPendingWorkflowInterrupt({...e.session,history:l});if(s.status===`interrupted`){if(!isWorkflowRuntimeActionInterrupt(s.interrupt))throw Error(`Unsupported Workflow interrupt kind "${s.interrupt.payload.kind}".`);let t=e.session.history.length,n=l.slice(0,t),r=l.slice(t);return u={...u,history:n},parkOnWorkflowInterrupt({baseSession:u,emissionState:e.emissionState,interrupt:s.interrupt,promptMessages:n,responseMessages:r})}return{next:e.runStep,session:u}}function replaceWorkflowToolResult(e,t,n){if(t===void 0)return[...e];let r=typeof n==`string`?{type:`text`,value:n}:{type:`json`,value:n};return e.map(e=>{if(e.role!==`tool`)return e;let n=e.content.map(e=>e.type!==`tool-result`||e.toolCallId!==t?e:{...e,output:r});return{...e,content:n}})}function parkOnWorkflowInterrupt(e){let t=getWorkflowRuntimeActionInterrupts(e.interrupt)[0];if(t===void 0)throw Error(`Workflow continuation contains no pending runtime-action interrupt.`);let n={...e.baseSession,history:[...e.promptMessages]};return{next:null,session:setHarnessEmissionState(setPendingWorkflowInterrupt({interrupt:t,responseMessages:e.responseMessages,session:n}),e.emissionState)}}function createNextCompactionConfig(e,t,n){let r={recentWindowSize:e.recentWindowSize,threshold:e.threshold,thresholdPercent:e.thresholdPercent};return n.usage?.inputTokens!==void 0&&(r.lastKnownInputTokens=n.usage.inputTokens,r.lastKnownPromptMessageCount=t),r}async function maybeCompact(e){let{emit:t,emissionState:n}=e,r=e.messages,i=e.session,a=e.historyProjector?.({messages:r,state:i.state})??r,s=e.force===!0||shouldCompact(a,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=mergeProviderSafetyIdentifier(i.agent.compactionModelReference??requireSessionModelReference(i),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(a,i.compaction)}),a)}let d=canonicalizeMemoryRecords(r),f=e.historyProjector?.({messages:d.ordinary,state:i.state})??d.ordinary,p=s?await compactMessages([...f],l.model,i.compaction,u,e.telemetry,buildGatewayAttributionHeaders(l.model,e.runtimeIdentity),e.abortSignal,e.force===!0):[...f];if(r=[...d.memory,...p],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=[...e.history],i={...i,state:e.state})}}return{compacted:!0,messages:r,session:i}}function resolveApprovalKeyFromTools(e){return t=>{let n=e.get(t.action.toolName);if(n?.approvalKey!==void 0)return n.approvalKey(t.action.input)}}async function runModelCallWithRetries(e,t,n){for(let r=1;;r++){throwIfTurnAborted(n);try{return await e(r)}catch(e){if(throwIfTurnAborted(n),r===3||classifyModelCallError(e)!==`retry`)throw e;let i=500*2**(r-1)+Math.floor(Math.random()*250);log.warn(`model call failed transiently — retrying`,{attempt:r,delayMs:i,sessionId:t.sessionId,turnId:t.turnId,error:e}),await new Promise(e=>setTimeout(e,i))}}}function findAuthorizationSignalFromToolResults(e){let t=contextStorage.getStore();if(t!==void 0)for(let n of e??[]){let e=readToolInterrupt(t,n.toolCallId);if(e!==void 0&&isAuthorizationSignal(e))return e}for(let t of e??[])if(isAuthorizationSignal(t.output))return t.output}export{appendMissingToolResultMessages,createToolLoopHarness};
3
+ `)};return t!==void 0&&(n.providerOptions=t),n}function buildGatewayAttributionHeaders(e,t){let n=resolveProviderHeaders(e);if(n===void 0)return;let r=t?.agentName??t?.agentId,i=process.env.VERCEL_PROJECT_PRODUCTION_URL||process.env.VERCEL_URL,a=i?`https://${i}`:void 0,o={...n};return r&&(o[`x-title`]=r),a&&(o[`http-referer`]=a),o}async function resolveActiveRuntimeModel(e){if(e.ctx===void 0){let t=e.session.agent.modelReference;if(t===void 0)throw Error(`Dynamic model selection is unavailable outside an eve runtime context.`);return{model:await e.config.resolveModel(t),session:e.session}}let t=getActiveDynamicModelSelection(e.ctx);if(t===null){let t=e.session.agent.modelReference;if(e.session.agent.dynamicModel===!0||t===void 0)throw Error(`Dynamic model selection is required before model-dependent work begins. Add a matching resolver handler that returns a concrete model.`);return{model:await e.config.resolveModel(t),session:e.session}}return{model:t.model===void 0?await e.config.resolveModel(t.reference):t.model,session:updateSessionModelReference(e.session,t.reference)}}function updateSessionModelReference(e,t){return{...e,agent:{...e.agent,modelReference:t},compaction:updateCompactionThresholdForModelReference({compaction:e.compaction,modelReference:t})}}function updateCompactionThresholdForModelReference(e){return e.modelReference.contextWindowTokens===void 0?e.compaction:{...e.compaction,threshold:Math.max(1,Math.floor(e.modelReference.contextWindowTokens*(e.compaction.thresholdPercent??.9)))}}function buildHarnessToolsWithDynamicSubagents(e,t){let n=new Map(e);if(t===void 0)return n;for(let e of buildDynamicSubagentTools(t)){if(n.has(e.name))throw Error(`Dynamic subagent "${e.name}" collides with another runtime-visible tool name.`);n.set(e.name,e)}return n}function createToolLoopHarness(t){let n=t.handleEvent;async function runStep(e,n){return t.instrumentation?.runStep({environment,eveVersion,hasInput:hasStepInput(n),session:e},e=>executeStepBody(e.session,n,e))??executeStepBody(e,n)}async function executeStepBody(d,g,v){let y=d,x=createHistoryViewPreparer({previous:t.historyView,projector:t.historyProjector});x(y.history,y.state);let projectHistory=(e,t)=>x(e,t).messages,C=getHarnessEmissionState(y.state),T=contextStorage.getStore(),E=T?.get(ParentSessionKey),D=T?.get(ChannelKey),O=T?.get(SessionCallbackKey),le=E!==void 0||O!==void 0,k=(O?.taskId!==void 0||readTaskIdFromInboxToken(String(D?.state?.parentContinuationToken??``))!==void 0)&&t.tools.has(TASK_UPDATE_TOOL_NAME),ue,A=v?.createHandleEvent({getAttemptScope:()=>ue,handleEvent:n,turnId:activeTurnId(C)})??n,failModelSelection=async(n,r)=>{if(throwIfTurnAborted(t.abortSignal),v?.recordError(n),!A)throw n;let i=createErrorId(),a=toErrorMessage(n);return log.error(`model selection failed terminally`,{error:n,errorId:i,sessionId:y.sessionId,turnId:r.turnId}),await emitFailedStep(A,r,{code:`MODEL_SELECTION_FAILED`,details:{errorId:i},message:a,sessionId:y.sessionId}),{next:t.mode===`task`||le?{done:!0,isError:!0,output:a}:{done:!0,output:``},session:y}},preparePreambleTrace=async()=>await v?.preparePreamble({sequence:C.sequence,sessionStarted:C.sessionStarted,traceContext:v?.traceContext,turnId:`turn_${C.sequence}`});if(t.clearOnly===!0)return y={...y,compaction:{recentWindowSize:y.compaction.recentWindowSize,threshold:y.compaction.threshold,thresholdPercent:y.compaction.thresholdPercent},history:[],state:clearMemorySessionState(y.state)},await A?.(createContextClearedEvent({sequence:C.sequence,sessionId:y.sessionId,turnId:activeTurnId(C)})),await A?.(createSessionWaitingEvent()),{next:null,session:y};if(t.compactOnly===!0){if(y.history.length>0)try{let e=contextStorage.getStore(),n=await resolveActiveRuntimeModel({config:t,ctx:e,session:y});y=n.session;let r=await maybeCompact({abortSignal:t.abortSignal,auth:e?.get(AuthKey)??null,emit:A,emissionState:{...C,turnId:activeTurnId(C)},force:!0,historyProjector:t.historyProjector,messages:[...y.history],model:n.model,onCompaction:t.onCompaction,resolveModel:t.resolveModel,runtimeIdentity:t.runtimeIdentity,session:y,telemetry:v?.telemetry()});y={...r.session,compaction:{recentWindowSize:r.session.compaction.recentWindowSize,threshold:r.session.compaction.threshold,thresholdPercent:r.session.compaction.thresholdPercent},history:r.messages}}catch(e){logError(log,`manual session compaction failed`,e,{sessionId:y.sessionId})}return await A?.(createSessionWaitingEvent()),{next:null,session:y}}let j=consumeDeferredStepInput({input:g,preferCurrentInput:t.mode!==`conversation`&&g!==void 0&&hasPendingApprovalBatch(y),session:y});y=j.session;let M=await resolvePendingRuntimeActions({emit:A,session:y,stepInput:j.input});if(M.outcome===`unresolved`)return{next:null,session:M.session};y=M.session;let de=getPendingInputRequestIds(y.state),N=convertStaleResponsesToUserMessage({history:M.messages,pendingRequestIds:de,stepInput:dropStaleSessionLimitContinuationResponses({pendingRequestIds:de,stepInput:j.input})}),P=N.stepInput,fe=N.kind===`converted`?{...P,message:N.displayMessage}:P,F=contextStorage.getStore();F!==void 0&&t.resolveStepDynamicTools!==void 0&&shouldPrepareApprovalPolicyTools({session:y,stepInput:P})&&await t.resolveStepDynamicTools({ctx:F,event:createStepStartedEvent({modelId:y.agent.modelReference?.id??`dynamic`,sequence:C.sequence,stepIndex:C.stepIndex,turnId:C.turnId}),messages:projectHistory(M.messages,y.state)});let I=await coordinateApprovalDelivery({session:y,stepInput:P,tools:buildResponseAuthorizationTools({authoredTools:t.tools,context:F})});if(y=I.session,A){for(let e of I.feedback)await A(createMessageCompletedEvent({message:e,sequence:C.sequence,stepIndex:C.stepIndex,turnId:C.turnId}));let e=getApprovalAuditState(y.state);for(let t of e.activeCandidates.filter(e=>e.pendingEventEmitted!==!0))await A(createApprovalCandidateEvent({candidateId:t.candidateId,outcome:`pending`,requestId:t.requestId,responderPrincipalId:t.responder.principalId,sequence:C.sequence,stepIndex:C.stepIndex,turnId:C.turnId})),y={...y,state:markApprovalCandidatePendingEventEmitted({candidateId:t.candidateId,state:y.state})};for(let t of e.candidateHistory.filter(e=>e.eventEmitted!==!0&&e.status!==`allowed`))await A(createApprovalCandidateEvent({candidateId:t.candidateId,outcome:t.status,requestId:t.requestId,responderPrincipalId:t.responder.principalId,reason:t.reason,sequence:C.sequence,stepIndex:C.stepIndex,turnId:C.turnId})),y={...y,state:markApprovalCandidateHistoryEventEmitted({candidateId:t.candidateId,state:y.state})};for(let t of e.settlements.filter(e=>e.eventEmitted!==!0))await A(createApprovalSettledEvent({outcome:t.outcome===`allowed`?`approved`:`cancelled`,requestId:t.requestId,responderPrincipalId:t.actor.principalId,sequence:C.sequence,stepIndex:C.stepIndex,turnId:C.turnId})),y={...y,state:markApprovalSettlementEventEmitted({requestId:t.requestId,state:y.state})}}if(I.kind===`park`)return{next:null,session:y};if(I.kind===`continue-coordination`)return{next:runStep,session:I.stepInput===void 0?y:queueDeferredStepInput(y,I.stepInput)};if(I.challenges.length>0){if(A)for(let e of I.challenges)await A(createAuthorizationRequiredEvent({authorization:e.challenge,candidateId:e.candidateId,description:e.challenge.instructions??`Authorization required for ${e.name}`,name:e.name,sequence:C.sequence,stepIndex:C.stepIndex,turnId:C.turnId,webhookUrl:e.hookUrl}));let e=I.stepInput===void 0?y:queueDeferredStepInput(y,I.stepInput);return{next:null,session:{...e,state:setPendingAuthorization(e.state,{challenges:I.challenges})}}}let L=resolvePendingInput({deferMessagesWhileApprovalsPending:t.mode!==`conversation`,history:M.messages,resolveApprovalKey:resolveApprovalKeyFromTools(t.tools),session:y,stepInput:I.stepInput});if(L.outcome===`unresolved`){let e=M.outcome===`resolved`?{...L.session,history:[...M.messages]}:L.session;if(A&&t.mode===`conversation`&&L.deferredMessage===!0&&hasStepInput(g)){T!==void 0&&prepareDynamicInstructionPreamble(T,projectHistory(e.history,e.state));let n=[];try{let e=await preparePreambleTrace();C=await emitTurnPreamble(A,fe??{},C,t.runtimeIdentity,e)}catch(t){if(n=T===void 0?[]:drainDynamicInstructionUserMessages(T),e={...e,history:[...e.history,...n]},y=e,!isDynamicModelSelectionError(t))throw t;return failModelSelection(t,{sessionStarted:!0,sequence:C.sequence,stepIndex:0,turnId:`turn_${C.sequence}`})}return n=T===void 0?[]:drainDynamicInstructionUserMessages(T),e={...e,history:[...e.history,...n]},C=await emitTurnEpilogue(A,C,t.mode),{next:null,session:setHarnessEmissionState(e,C)}}return M.outcome===`resolved`?(A&&t.mode===`conversation`&&(C=await emitTurnEpilogue(A,C,t.mode),e=setHarnessEmissionState(e,C)),{next:null,session:e}):{next:null,session:L.session}}if(L.resolvedInputs!==void 0)for(let e of L.resolvedInputs)await v?.publishInputResolutions({batch:e,sessionId:y.sessionId}),A&&await A(createInputResolvedEvent({resolutions:e.inputs.map(e=>{let t={kind:e.request.kind,outcome:e.outcome,requestId:e.request.requestId};return e.response===void 0?t:{...t,response:e.response}}),sequence:e.event.sequence,stepIndex:e.event.stepIndex,turnId:e.event.turnId}));if(A&&L.rejectedActions)for(let e of L.rejectedActions)for(let t of e.results)await A(createActionResultEvent({rejected:!0,result:t,sequence:e.event.sequence,stepIndex:e.event.stepIndex,turnId:e.event.turnId}));let R=[];if(P?.context!==void 0&&L.deferredContext!==!0)for(let e of P.context)R.push({content:e,role:`user`});let pe=normalizeUserContent(P?.message),me=pe!==void 0&&!L.deferredMessage&&!L.consumedMessage?await stageAttachmentsToSandbox(pe):void 0;me!==void 0&&R.push({content:me,role:`user`});let z=[],B;if(A&&hasStepInput(g)){T!==void 0&&(prepareDynamicInstructionPreamble(T,projectHistory(L.session.history,L.session.state)),prepareMemoryPreamble(T,{history:L.messages,input:R,state:L.session.state}));try{let e=await preparePreambleTrace();C=await emitTurnPreamble(A,fe??{},C,t.runtimeIdentity,e)}catch(e){if(z=T===void 0?[]:drainDynamicInstructionUserMessages(T),B=T===void 0?void 0:drainMemoryCommit(T),y={...L.session,history:[...B?.history??L.session.history,...z],state:B?.state??L.session.state},!isDynamicModelSelectionError(e))throw e;return failModelSelection(e,{sessionStarted:!0,sequence:C.sequence,stepIndex:0,turnId:`turn_${C.sequence}`})}z=T===void 0?[]:drainDynamicInstructionUserMessages(T),B=T===void 0?void 0:drainMemoryCommit(T),v?.setTurnId(C.turnId)}let he=B?.history??L.session.history,ge=L.session.history.length;y=setHarnessEmissionState({...L.session,history:[...he,...z],state:B?.state??L.session.state},C);let V=[...B?.history??L.messages.slice(0,ge),...z,...B===void 0?L.messages.slice(ge):[]],H=await applySessionLimitContinuation({config:t,emit:A,emissionState:C,limitContinuation:L.limitContinuation,session:y});if(H.result!==null)return H.result;y=H.session;let U=getAgentHandleStore(y.state);if(U!==void 0&&!hasUnansweredToolCall(V)&&U.handles.some(e=>e.phase===`addressed`)!==!0){let e=resolveAgentsAnnouncement({messages:projectHistory(V,y.state),store:U});e!==void 0&&V.push({content:e,role:`user`})}V=[...V,...R];let W=projectHistory(V,y.state),G=T,K;try{G!==void 0&&t.dispatchDynamicModelEvent!==void 0&&await t.dispatchDynamicModelEvent({ctx:G,event:{data:{sequence:C.sequence,stepIndex:C.stepIndex,turnId:C.turnId},type:`step.started`},messages:W}),K=await resolveActiveRuntimeModel({config:t,ctx:G,session:y})}catch(e){return failModelSelection(e,C)}y=K.session;let q=K.model,_e=detectPromptCachePath(q),J=_e.kind===`anthropic-direct`?getAnthropicCacheMarker():void 0,ve=buildGatewayAttributionHeaders(q,t.runtimeIdentity),Y=await maybeCompact({abortSignal:t.abortSignal,auth:G?.get(AuthKey)??null,emit:A,emissionState:C,historyProjector:t.historyProjector,messages:[...V],model:q,onCompaction:t.onCompaction,resolveModel:t.resolveModel,runtimeIdentity:t.runtimeIdentity,session:y,telemetry:v?.telemetry()});y=Y.session,Y.compacted&&(V=Y.messages),W=normalizeModelMessages(projectHistory(V,y.state)),A&&await emitStepStarted(A,C,requireSessionModelReference(y).id,W);let ye=getApprovedTools(y),be=C.sequence===0,X=resolveDeliveryPolicy({hasScheduleProvenance:be&&G?.get(ScheduleIdKey)!==void 0,hasOutputSchema:y.outputSchema!==void 0,isChild:G?.get(ParentSessionKey)!==void 0,isFirstTurn:be,taskDeliveryPhase:G?.get(TurnTaskDeliveryKey)}),Z=createCurrentMessages(W,{currentTurnMessages:R});if(G!==void 0){Z.addSystem(buildDynamicInstructionMessages(G));let e=G.get(PendingSkillAnnouncementKey);e!==void 0&&e.length>0&&Z.add(C.sequence,e);let t=G.get(TurnTaskStateKey);t!==void 0&&Z.add(C.sequence,t)}X.instruction!==void 0&&Z.add(C.sequence,X.instruction);let xe=renderPendingApprovalsInstruction(getPendingInputBatches(y.state).flatMap(e=>e.requests));xe!==void 0&&Z.add(C.sequence,xe,{cacheFriendly:!1});let Se=await hydrateSandboxAttachments(Z.nonSystemMessages),prepareModelCallInput=e=>{let t=e?[{role:`system`,content:e}]:[],n=y.agent.system?[{role:`system`,content:y.agent.system}]:[],r=Z.systemMessages.length>0||t.length>0?[...t,...n,...Z.systemMessages]:void 0,i=r!==void 0&&J?applySystemCacheBreakpoint(r,J):r,a=i===void 0?y.agent.system??void 0:mergeSystemInstructions(i);return{instructions:a,telemetryRuntimeContext:v?.resolveRuntimeContext({eveVersion,emissionState:C,environment,modelInput:{instructions:a,messages:Se},session:y})}},Ce=t.tools,runSingleModelCall=async e=>{let{instructions:n,telemetryRuntimeContext:i={}}=e.preparedInput??prepareModelCallInput(e.extraSystemNote);e.retryReason&&(i[`eve.retry.reason`]=e.retryReason);let o=e.trailingUserNote?[...Se,{role:`user`,content:e.trailingUserNote}]:[...Se],s=buildHarnessToolsWithDynamicSubagents(t.tools,G),c=createBackgroundToolCallBatch(),l=getAdvertisedTools({delegatedCaller:k,session:y,tools:s});Ce=l;let u=await buildToolSetWithProviderTools({approvedTools:ye,backgroundBatch:c,capabilities:t.capabilities,disabledProviderTools:e.disabledProviderTools,modelReference:requireSessionModelReference(y),tools:l,webSearchProvider:t.webSearchProvider});if(G!==void 0){let n=getAdvertisedTools({delegatedCaller:k,session:y,tools:buildDynamicTools(G)}),r=buildToolSetFromDefinitions({approvedTools:ye,backgroundBatch:c,capabilities:t.capabilities,disabledProviderTools:e.disabledProviderTools,tools:n});for(let[e,t]of Object.entries(r)){if(l.get(e)?.runtimeAction!==void 0)throw Error(`Dynamic tool "${e}" collides with a runtime-visible subagent.`);u[e]=t}}y.outputSchema!==void 0&&(u[FINAL_OUTPUT_TOOL_NAME]=buildFinalOutputTool(y.outputSchema));let d=A===void 0?void 0:({tools:e})=>createWorkflowLifecycle({emit:A,emissionState:C,tools:e}),f=t.workflow===!0?{lifecycle:d,maxSubagents:t.workflowMaxSubagents}:void 0,p=await getAdvertisedTools({delegatedCaller:k,modelTools:u,session:y,tools:l,workflow:f});y=p.session;let m=p.modelTools,h=J?applyLastToolCacheBreakpoint(m,J):m,g=activeTurnId(C),_=v?.prepareAttempt({attemptIndex:e.attemptIndex,runtimeContext:i,stepIndex:C.stepIndex,turnId:g});ue=_?.scope;let b=buildStepHooks({auth:G?.get(AuthKey)??null,cachePath:_e,emit:A,emissionState:C,emitStepStarted:e.suppressStepStartedEmission!==!0,marker:J,session:y}),x=new ToolLoopAgent({headers:ve,instructions:n,model:q,onLanguageModelCallEnd(e){for(let t of e.content)t.type!==`tool-call`||t.providerExecuted===!0||isInvalidToolCall(t)||c.register({callId:t.toolCallId,input:t.input,toolName:t.toolName})},onToolExecutionEnd:logToolExecutionError,onError(e){summarizeKnownError(e.error)?.tags.includes(`config`)!==!0&&logError(log,`tool-loop stream error`,e.error)},onStepFinish:b.onStepFinish,prepareStep:b.prepareStep,reasoning:y.agent.reasoning,runtimeContext:i,stopWhen:isStepCount(1),telemetry:_?.telemetry,toolApproval:buildToolApproval(m),tools:h}),executeModelCall=async()=>{if(A){let e=[...t.tools].filter(([e,t])=>t.runtimeAction!==void 0&&l.get(e)===void 0).map(([e])=>e),n=new Set([ASK_QUESTION_TOOL_NAME,FINAL_OUTPUT_TOOL_NAME,...e]),r=await x.stream({abortSignal:t.abortSignal,messages:o}),{emittedActionCallIds:i,handledInlineToolResultCallIds:a,invalidInputToolCallIds:s,inlineAuthorizationResults:c,trailingInlineToolResultParts:u}=await emitStreamContent(A,C,r.fullStream,{excludedActionToolNames:n,tools:l});throwIfTurnAborted(t.abortSignal);let[d,f]=await Promise.all([b.stepResult,r.responseMessages]);if(isEmptyModelResponse(d)&&extractToolResultCallIds(f).size===0&&c.length===0&&u.length===0)throw new EmptyModelResponseError;await emitStepActions(A,C,d,{emittedActionCallIds:i,excludedActionCallIds:s,excludedActionToolNames:n,handledInlineToolResultCallIds:a,tools:l});let p=d.toolResults,m=new Map(p.map(e=>[e.toolCallId,e]));for(let e of c)m.set(e.toolCallId,e);return withAccumulatedResponseMessages({invalidInputToolCallIds:s,responseMessages:appendMissingToolResultMessages({append:u,responseMessages:f}),stepResult:d,toolResults:[...m.values()]})}let e=await x.generate({abortSignal:t.abortSignal,messages:o});throwIfTurnAborted(t.abortSignal);let n=await b.stepResult;if(isEmptyModelResponse(n)&&extractToolResultCallIds(e.responseMessages).size===0)throw new EmptyModelResponseError;return withAccumulatedResponseMessages({responseMessages:e.responseMessages,stepResult:n})};try{let e=await executeModelCall();return await _?.complete(),e}catch(e){return await _?.fail(e),rethrowNoOutputAsEmptyResponse(e)}},we=0,runOneModelCall=async e=>runModelCallWithRetries(t=>runSingleModelCall({...e,attemptIndex:we++,preparedInput:t===1?e.preparedInput:void 0,suppressStepStartedEmission:t!==1||e.suppressStepStartedEmission}),{sessionId:y.sessionId,turnId:C.turnId},t.abortSignal),Te=prepareModelCallInput(),Ee=await continuePendingWorkflowInterrupt({childResults:P?.runtimeActionResults,config:t,emit:A,emissionState:C,runStep,session:y,tools:buildHarnessToolsWithDynamicSubagents(t.tools,G)});if(Ee!==null)return Ee;let De=await enforceSessionTokenLimit({config:t,emit:A,emissionState:C,messages:W,session:y});if(De!==null)return De;let Q;try{Q=await runOneModelCall({preparedInput:Te,suppressStepStartedEmission:!0})}catch(n){throwIfTurnAborted(t.abortSignal);let r=await runModelCallRecoveryPipeline({error:n,stages:[e=>attemptUnsupportedProviderToolRecovery({error:e.error,runOneModelCall,sessionId:y.sessionId,turnId:C.turnId}),e=>attemptEmptyResponseRecovery({emptyDeliveryEnabled:X.allowsEmptyDelivery,error:e.error,retryCallOptions:e.retryCallOptions,runOneModelCall,sessionId:y.sessionId,turnId:C.turnId})]});if(throwIfTurnAborted(t.abortSignal),r.outcome===`recovered`)Q=r.result;else{let n=r.error;if(v?.recordError(n),!A)throw n;let i=extractWorkflowStreamWriteErrorDetails(n);if(i!==null){let t=createErrorId();return log.error(`workflow stream write failed — parking session for retry by the user`,{...i,errorId:t,error:n,sessionId:y.sessionId,turnId:C.turnId}),C=await emitRecoverableFailedTurn(A,C,{code:`WORKFLOW_STREAM_WRITE_FAILED`,continuationToken:y.continuationToken,details:{...i,errorId:t},message:toErrorMessage(n)}),{next:null,session:setHarnessEmissionState(y,C)}}let a=classifyModelCallError(n),o=createErrorId(),s=summarizeKnownError(n),c=s===null?extractUpstreamRejectionMessage(n):null,l=s?.message??c?.message??toErrorMessage(n),u=s?.hint===void 0?l:`${l} ${s.hint}`,d=extractModelCallErrorDetails(n),p=buildModelCallFailureDetails({catalogSummary:s,error:n,errorId:o,modelCallDetails:d,upstreamRejection:c}),m=buildModelCallFailureLogFields({error:n,errorId:o,modelCallDetails:d,recognized:s!==null||c!==null,sessionId:y.sessionId,turnId:C.turnId});if(a===`terminal`)return s===null?log.error(c?.message??`model call failed terminally`,m):log.error(`${s.name}: ${s.message}`,{errorId:o,hint:s.hint,sessionId:y.sessionId,turnId:C.turnId}),await emitFailedStep(A,C,{code:`MODEL_CALL_FAILED`,details:p,message:l,sessionId:y.sessionId}),{next:t.mode===`task`||le?{done:!0,isError:!0,output:u}:{done:!0,output:``},session:y};if(t.mode===`task`){if(a===`recoverable`&&!(n instanceof EmptyModelResponseError))throw log.warn(c?.message??`model call failed recoverably in task mode — rethrowing for durable step retry`,m),n;return log.error(c?.message??`model call failed; failing the task run`,m),await emitFailedStep(A,C,{code:`MODEL_CALL_FAILED`,details:p,message:l,sessionId:y.sessionId}),{next:{done:!0,isError:!0,output:u},session:y}}log.error(c?.message??`model call failed — parking session for retry by the user`,m),C=await emitRecoverableFailedTurn(A,C,{code:`MODEL_CALL_FAILED`,continuationToken:y.continuationToken,details:p,message:l});let h={isError:!0,output:u};return y={...y,outputSchema:void 0},{next:null,session:setHarnessEmissionState(y,C),settledTurn:h}}}let $=accumulateTurnUsage({previous:getTurnUsageState(y.state),turnId:C.turnId,usage:extractTokenUsageDelta({costUsd:extractGatewayCostUsd(Q.providerMetadata),usage:Q.usage})});y=setTurnUsageState(y,$);let Oe;try{Oe=formatLanguageModelGatewayId(q)}catch{Oe=void 0}return await setEveAttributes({"$eve.model":Oe,"$eve.input_tokens":$.inputTokens,"$eve.output_tokens":$.outputTokens,"$eve.cache_read_tokens":$.cacheReadTokens,"$eve.cache_write_tokens":$.cacheWriteTokens,"$eve.cost_usd":$.sawCost?$.costUsd:void 0,"$eve.tool_count":t.tools.size}),handleStepResult({config:t,emit:A,emissionState:C,delegatedCaller:k,modelPromptMessageCount:W.length,promptMessages:V,result:Q,runStep,session:y,runtimeActionTools:Ce})}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:r,errorId:i,modelCallDetails:a,upstreamRejection:o}=e;if(t!==null){let e={errorId:i,message:t.message,name:t.name,semanticErrorId:t.id,...a};return t.hint!==void 0&&(e.hint=t.hint),e}return o===null?{...formatError(r,i),...a}:{errorId:i,message:toErrorMessage(r),name:o.name,...a}}function buildModelCallFailureLogFields(e){let t={errorId:e.errorId,sessionId:e.sessionId,turnId:e.turnId};return e.recognized?{...t,details:e.modelCallDetails}:{...t,error:e.error}}async function runModelCallRecoveryPipeline(e){let t=e.error,n;for(let r of e.stages){let e=await r({error:t,retryCallOptions:n});if(e.outcome===`recovered`)return e;e.outcome===`failed`&&(t=e.error,n=e.retryCallOptions)}return{outcome:`failed`,error:t}}function withAccumulatedResponseMessages(e){let{stepResult:t}=e;return{content:t.content,finishReason:t.finishReason,...e.invalidInputToolCallIds===void 0?{}:{invalidInputToolCallIds:e.invalidInputToolCallIds},providerMetadata:t.providerMetadata,response:{...t.response,messages:[...e.responseMessages]},text:t.text,toolCalls:t.toolCalls,toolResults:e.toolResults===void 0?t.toolResults:[...e.toolResults],usage:t.usage}}function appendMissingToolResultMessages(e){let t=extractToolResultCallIds(e.responseMessages),n=e.append.filter(e=>!t.has(e.toolCallId));return[...e.responseMessages,...n.length>0?[{role:`tool`,content:[...n]}]:[]]}function getInvalidToolCallInputErrors(e){let t=[];for(let n of e.toolCalls){if(n.toolName===FINAL_OUTPUT_TOOL_NAME)continue;let e=getInvalidToolCallInputError({toolCall:n});e!==void 0&&t.push(e)}return t}function extractToolResultCallIds(e){let t=new Set;for(let n of e)if(Array.isArray(n.content))for(let e of n.content)typeof e==`object`&&e&&e.type===`tool-result`&&t.add(e.toolCallId);return t}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:a,runStep:o}=e,{emissionState:s,session:c}=e,l=resolveAssistantStepText(a.response.messages,a.text),u=a.finishReason!==`tool-calls`&&a.toolCalls.length===0&&hasEmptyDeliverySentinel(l),d=getInvalidToolCallInputErrors({toolCalls:a.toolCalls}),f=new Set([...a.invalidInputToolCallIds??[],...a.toolCalls.filter(isInvalidToolCall).map(e=>e.toolCallId),...d.map(e=>e.toolCallId)]),p=u?[]:appendMissingToolResultMessages({append:d.map(e=>createToolResultMessagePartFromToolError(e)),responseMessages:a.response.messages}),m=u?null:l,h=new Set;for(let e of[...a.content??[],...a.toolResults??[]])(e.type===`tool-result`||e.type===`tool-error`)&&e.providerExecuted===!0&&h.add(e.toolCallId);let v=normalizeProviderToolHistory({messages:p,providerExecutedOutcomeIds:h}),y=v.messages,b={...c,compaction:createNextCompactionConfig(c.compaction,e.modelPromptMessageCount,a)},ee=t.workflow===!0?readWorkflowContinuationSecurity(b):void 0;if(ee!==void 0){let e=await getWorkflowSandboxInterrupt(a,ee);if(e!==void 0){if(!isWorkflowRuntimeActionInterrupt(e))throw Error(`Unsupported Workflow interrupt kind "${e.payload.kind}".`);return parkOnWorkflowInterrupt({baseSession:b,emissionState:s,interrupt:e,promptMessages:r,responseMessages:y})}}let S=extractToolApprovalInputRequests({content:a.content??[],excludedCallIds:f}),C=new Set(S.map(e=>e.action.callId)),te=extractQuestionInputRequests({toolCalls:a.toolCalls,excludedCallIds:new Set([...f,...C])}),w=[...S,...te],ne=renderPendingApprovalsSnippet(S),T=y.findIndex(e=>e.role!==`tool`),re=T===-1?y:y.slice(0,T),ie=y.slice(re.length),ae=[...r,...re,...ne===void 0?[]:[{content:ne,role:`user`}]],oe=getAdvertisedTools({delegatedCaller:e.delegatedCaller,session:b,tools:e.runtimeActionTools}),E=(a.toolCalls??[]).filter(e=>!f.has(e.toolCallId)).filter(t=>e.runtimeActionTools.get(t.toolName)?.runtimeAction!==void 0).filter(e=>oe.get(e.toolName)?.runtimeAction===void 0?(log.warn(`runtime action tool call blocked because tool is not advertised`,{callId:e.toolCallId,sessionId:b.sessionId,toolName:e.toolName}),!1):!0).map(e=>createRuntimeActionRequestFromToolCall({toolCall:e,tools:oe}));if(E.length>0){if(w.length===0)return{next:null,session:setHarnessEmissionState(setPendingRuntimeActionBatch({actions:E,event:{sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId},responseMessages:y,session:{...b,history:[...r]}}),advanceStep(s))};let e=setPendingRuntimeActionBatch({actions:E,event:{sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId},responseMessages:ie,session:{...b,history:ae}});return e=appendPendingInputBatch({event:{sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId},requests:w,responseMessages:[],session:e}),n&&await n(createInputRequestedEvent({requests:w,sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId})),{next:null,session:setHarnessEmissionState(e,advanceStep(s))}}if(w.length>0){let e=buildResponseAuthorizationTools({authoredTools:t.tools,context:contextStorage.getStore()}),r=appendPendingInputBatch({event:{sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId},requests:w,responseAuthRequiredRequestIds:S.filter(t=>{let n=e.get(t.action.toolName)?.approval;return n!==void 0&&typeof n!=`function`&&n.response!==void 0}).map(e=>e.requestId),responseMessages:ie,session:{...b,history:ae}});return n&&(await n(createInputRequestedEvent({requests:w,sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId})),t.mode===`conversation`&&(s=await emitTurnEpilogue(n,s,t.mode),r=setHarnessEmissionState(r,s))),{next:hasDeferredStepInput(r)?o:null,session:r}}let se=resolveInlineAuthorizationInterrupt({messages:[...r,...y],toolResults:a.toolResults});if(se){let{challenges:e,history:r}=se;if(n){for(let t of getSupersededAuthorizationChallenges(b.state,e))await n(createAuthorizationCompletedEvent({attemptId:t.attemptId,authorization:t.challenge,name:t.name,outcome:`failed`,reason:`Superseded by a newer authorization attempt.`,sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId}));for(let t of e)await n(createAuthorizationRequiredEvent({attemptId:t.attemptId,authorization:t.challenge,name:t.name,description:t.challenge.instructions??`Authorization required for ${t.name}`,webhookUrl:t.hookUrl,sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId}));t.mode===`conversation`&&(s=await emitTurnEpilogue(n,s,t.mode))}return{next:null,session:setHarnessEmissionState({...b,history:r,state:setPendingAuthorization(b.state,{challenges:e})},s)}}let D=y,ce=[...r,...D],O={...b,history:ce};return!(O.outputSchema!==void 0&&extractFinalOutput(a)!==void 0)&&(D.at(-1)?.role===`tool`||v.outcomeEndsResponse||hasDeferredStepInput(O))?(n&&(s=advanceStep(s),O=setHarnessEmissionState(O,s)),{next:o,session:O}):t.mode===`task`?finishTaskTurn({emissionState:s,emit:n,history:r,result:a,schema:O.outputSchema,session:O,stepOutput:m}):finishConversationTurn({emissionState:s,emit:n,history:r,result:a,schema:O.outputSchema,session:O,stepOutput:m})}const OUTPUT_SCHEMA_NOT_FULFILLED={code:`OUTPUT_SCHEMA_NOT_FULFILLED`,message:`The agent could not produce a result matching the requested schema.`};function extractFinalOutput(e){return(e.toolCalls??[]).find(e=>e.toolName===FINAL_OUTPUT_TOOL_NAME&&!isInvalidToolCall(e))?.input}function persistStructuredAssistantTurn(e,t,n){return{...e,history:[...t,{content:JSON.stringify(n),role:`assistant`}],outputSchema:void 0}}async function emitStructuredResult(e,t,n,r,i){return await e(createResultCompletedEvent({result:n,sequence:t.sequence,stepIndex:t.stepIndex,turnId:t.turnId})),emitTurnEpilogue(e,t,r,i)}async function finishTaskTurn(e){let{emit:t,history:n,result:r,schema:i,stepOutput:a}=e,{emissionState:o,session:s}=e;if(i===void 0)return t&&(o=await emitTurnEpilogue(t,o,`task`,s.history),s=setHarnessEmissionState(s,o)),{next:{done:!0,output:a??``},session:s};let c=extractFinalOutput(r);return c===void 0?(s={...s,outputSchema:void 0},t&&await emitFailedStep(t,o,{...OUTPUT_SCHEMA_NOT_FULFILLED,sessionId:s.sessionId}),{next:{done:!0,isError:!0,output:OUTPUT_SCHEMA_NOT_FULFILLED.message},session:s}):(s=persistStructuredAssistantTurn(s,n,c),t&&(o=await emitStructuredResult(t,o,c,`task`,s.history),s=setHarnessEmissionState(s,o)),{next:{done:!0,output:c},session:s})}async function finishConversationTurn(e){let{emit:t,history:n,result:r,schema:i,stepOutput:a}=e,{emissionState:o,session:s}=e;if(i===void 0)return t&&(o=await emitTurnEpilogue(t,o,`conversation`,s.history),s=setHarnessEmissionState(s,o)),{next:null,session:s,settledTurn:{output:a??``}};let c=extractFinalOutput(r);if(c===void 0){s={...s,outputSchema:void 0},t&&(o=await emitRecoverableFailedTurn(t,o,{...OUTPUT_SCHEMA_NOT_FULFILLED,continuationToken:s.continuationToken}),s=setHarnessEmissionState(s,o));let e={isError:!0,output:OUTPUT_SCHEMA_NOT_FULFILLED.message};return{next:null,session:s,settledTurn:e}}return s=persistStructuredAssistantTurn(s,n,c),t&&(o=await emitStructuredResult(t,o,c,`conversation`,s.history),s=setHarnessEmissionState(s,o)),{next:null,session:s,settledTurn:{output:c}}}async function continuePendingWorkflowInterrupt(e){let t=getPendingWorkflowInterrupt(e.session.state);if(t===void 0)return null;let n=t.interrupt;if(!isWorkflowRuntimeActionInterrupt(n))throw Error(`Unsupported Workflow interrupt kind "${n.payload.kind}".`);let i=e.emit===void 0?void 0:createWorkflowLifecycle({emit:e.emit,emissionState:e.emissionState,skipReplayed:!0,tools:e.tools}),a=getWorkflowContinuationSecurity(e.session),o;try{let t=buildWorkflowHostTools({tools:e.tools}),r=e.childResults??[],s=n,c=0;for(;;){o=await continueWorkflowSandboxInterrupt({bridgeRequestLimit:resolveWorkflowSandboxBridgeRequestLimit(e.config.workflowMaxSubagents),continuationSecurity:a,interrupt:s,lifecycle:i,resolution:r[c]?.output,tools:t});let n=await unwrapWorkflowSandboxResult(o,a);if(n.status!==`interrupted`||!isWorkflowRuntimeActionInterrupt(n.interrupt)||c+1>=r.length)break;let l=getWorkflowRuntimeActionInterrupts(n.interrupt)[0];if(l===void 0)throw Error(`Workflow continuation contains no pending runtime-action interrupt.`);c++,s=l}}catch(e){logError(log,`Workflow interrupt continuation failed`,e),o={error:`workflow_continuation_failed`,message:toErrorMessage(e),retryable:!1}}let s=await unwrapWorkflowSandboxResult(o,a),c=s.status===`interrupted`?s.interrupt:s.output,l=replaceWorkflowToolResult([...e.session.history,...t.responseMessages],n.outerToolCallId,c),u=clearPendingWorkflowInterrupt({...e.session,history:l});if(s.status===`interrupted`){if(!isWorkflowRuntimeActionInterrupt(s.interrupt))throw Error(`Unsupported Workflow interrupt kind "${s.interrupt.payload.kind}".`);let t=e.session.history.length,n=l.slice(0,t),r=l.slice(t);return u={...u,history:n},parkOnWorkflowInterrupt({baseSession:u,emissionState:e.emissionState,interrupt:s.interrupt,promptMessages:n,responseMessages:r})}return{next:e.runStep,session:u}}function replaceWorkflowToolResult(e,t,n){if(t===void 0)return[...e];let r=typeof n==`string`?{type:`text`,value:n}:{type:`json`,value:n};return e.map(e=>{if(e.role!==`tool`)return e;let n=e.content.map(e=>e.type!==`tool-result`||e.toolCallId!==t?e:{...e,output:r});return{...e,content:n}})}function parkOnWorkflowInterrupt(e){let t=getWorkflowRuntimeActionInterrupts(e.interrupt)[0];if(t===void 0)throw Error(`Workflow continuation contains no pending runtime-action interrupt.`);let n={...e.baseSession,history:[...e.promptMessages]};return{next:null,session:setHarnessEmissionState(setPendingWorkflowInterrupt({interrupt:t,responseMessages:e.responseMessages,session:n}),e.emissionState)}}function createNextCompactionConfig(e,t,n){let r={recentWindowSize:e.recentWindowSize,threshold:e.threshold,thresholdPercent:e.thresholdPercent};return n.usage?.inputTokens!==void 0&&(r.lastKnownInputTokens=n.usage.inputTokens,r.lastKnownPromptMessageCount=t),r}async function maybeCompact(e){let{emit:t,emissionState:n}=e,r=e.messages,a=e.session,o=e.historyProjector?.({messages:r,state:a.state})??r,s=e.force===!0||shouldCompact(o,a.compaction),c=shouldCanonicalizeMemory(r);if(!s&&!c)return{compacted:!1,messages:r,session:a};let l=await resolveCompactionModel({compactionModelReference:a.agent.compactionModelReference,model:e.model,modelReference:requireSessionModelReference(a),resolveModel:e.resolveModel}),u=mergeProviderSafetyIdentifier(a.agent.compactionModelReference??requireSessionModelReference(a),l.providerOptions,e.auth);if(t){let e=contextStorage.getStore();e!==void 0&&prepareMemoryCompaction(e,{history:r,state:a.state}),await t(createCompactionRequestedEvent({modelId:formatLanguageModelGatewayId(l.model),sequence:n.sequence,sessionId:a.sessionId,turnId:n.turnId,usageInputTokens:getInputTokenCount(o,a.compaction)}),o)}let d=canonicalizeMemoryRecords(r),f=e.historyProjector?.({messages:d.ordinary,state:a.state})??d.ordinary,p=s?await compactMessages([...f],l.model,a.compaction,u,e.telemetry,buildGatewayAttributionHeaders(l.model,e.runtimeIdentity),e.abortSignal,e.force===!0):[...f];if(r=[...d.memory,...p],e.onCompaction)for(let t of e.onCompaction())r.push(t);if(t){let o=contextStorage.getStore();if(o!==void 0&&prepareMemoryCompaction(o,{history:r,state:a.state}),await t(createCompactionCompletedEvent({modelId:formatLanguageModelGatewayId(l.model),sequence:n.sequence,sessionId:a.sessionId,turnId:n.turnId}),e.historyProjector?.({messages:r,state:a.state})??r),o!==void 0){let e=drainMemoryCommit(o);e!==void 0&&(r=[...e.history],a={...a,state:e.state})}}return{compacted:!0,messages:r,session:a}}function resolveApprovalKeyFromTools(e){return t=>{let n=e.get(t.action.toolName);if(n?.approvalKey!==void 0)return n.approvalKey(t.action.input)}}async function runModelCallWithRetries(e,t,n){for(let r=1;;r++){throwIfTurnAborted(n);try{return await e(r)}catch(e){if(throwIfTurnAborted(n),r===3||classifyModelCallError(e)!==`retry`)throw e;let i=500*2**(r-1)+Math.floor(Math.random()*250);log.warn(`model call failed transiently — retrying`,{attempt:r,delayMs:i,sessionId:t.sessionId,turnId:t.turnId,error:e}),await new Promise(e=>setTimeout(e,i))}}}export{appendMissingToolResultMessages,createToolLoopHarness};
@@ -1 +1 @@
1
- import{createLogger}from"#internal/logging.js";import{z}from"#compiled/zod/index.js";import{formatValidationError}from"#runtime/validation.js";import{parseJsonValue}from"#shared/json.js";import{withToolOutputSerializationError}from"#harness/tool-output-serialization.js";const log=createLogger(`harness.tool-model-output`),CONTENT_FILE_WARN_BYTES=3*1024*1024,UNSUPPORTED_FILE_DATA_TAGS=new Set([`url`,`reference`,`text`]),toolModelOutputPartSchema=z.discriminatedUnion(`type`,[z.object({type:z.literal(`text`),text:z.string()}),z.object({type:z.literal(`file`),data:z.object({type:z.literal(`data`),data:z.string()}),mediaType:z.string().min(1),filename:z.string().optional()})]),toolModelOutputSchema=z.discriminatedUnion(`type`,[z.object({type:z.literal(`text`),value:z.string()}),z.object({type:z.literal(`json`),value:z.unknown()}),z.object({type:z.literal(`content`),value:z.array(toolModelOutputPartSchema).min(1)})]);function normalizeToolJsonOutput(e){let t=e.output===void 0?null:e.output;return withToolOutputSerializationError(e,()=>(parseJsonValue(t),t))}function normalizeToolModelOutput(e){return withToolOutputSerializationError({boundary:`toModelOutput`,toolCallId:e.toolCallId,toolName:e.toolName},()=>{assertSupportedFilePartData(e.output);let t=toolModelOutputSchema.safeParse(e.output);if(!t.success)throw TypeError(formatValidationError(t.error));let r=t.data;if(r.type===`json`)return{type:`json`,value:normalizeToolJsonOutput({boundary:`toModelOutput`,output:r.value,toolCallId:e.toolCallId,toolName:e.toolName})};if(r.type===`content`)for(let t of r.value)t.type===`file`&&warnOversizedFilePayload(t,e.toolName);return r})}function assertSupportedFilePartData(e){if(typeof e!=`object`||!e)return;let t=e;if(!(t.type!==`content`||!Array.isArray(t.value)))for(let e of t.value){if(typeof e!=`object`||!e)continue;let t=e;if(t.type!==`file`)continue;let n=t.data,r=typeof n==`object`&&n?n.data:void 0;if(isBinaryPayload(n)||isBinaryPayload(r))throw TypeError(`Expected file content part data to be a base64 string, received raw bytes. Base64-encode binary payloads before returning them from toModelOutput.`);let i=typeof n==`object`&&n?n.type:void 0;if(typeof i==`string`&&UNSUPPORTED_FILE_DATA_TAGS.has(i))throw TypeError(`File content part data tag "${i}" is not supported yet; only { type: "data" } with a base64 string is accepted.`)}}function warnOversizedFilePayload(e,t){let n=Math.floor(e.data.data.length*3/4);n<=CONTENT_FILE_WARN_BYTES||log.warn(`content-part file payload exceeds the inline size guideline — it is persisted in history and re-sent on every subsequent model call`,{estimatedBytes:n,mediaType:e.mediaType,toolName:t,warnBytes:CONTENT_FILE_WARN_BYTES})}function isBinaryPayload(e){return e instanceof Uint8Array||e instanceof ArrayBuffer}export{normalizeToolJsonOutput,normalizeToolModelOutput};
1
+ import{z}from"#compiled/zod/index.js";import{createLogger}from"#internal/logging.js";import{formatValidationError}from"#runtime/validation.js";import{parseJsonValue}from"#shared/json.js";import{withToolOutputSerializationError}from"#harness/tool-output-serialization.js";const log=createLogger(`harness.tool-model-output`),CONTENT_FILE_WARN_BYTES=3*1024*1024,UNSUPPORTED_FILE_DATA_TAGS=new Set([`url`,`reference`,`text`]),toolModelOutputPartSchema=z.discriminatedUnion(`type`,[z.object({type:z.literal(`text`),text:z.string()}),z.object({type:z.literal(`file`),data:z.object({type:z.literal(`data`),data:z.string()}),mediaType:z.string().min(1),filename:z.string().optional()})]),toolModelOutputSchema=z.discriminatedUnion(`type`,[z.object({type:z.literal(`text`),value:z.string()}),z.object({type:z.literal(`json`),value:z.unknown()}),z.object({type:z.literal(`content`),value:z.array(toolModelOutputPartSchema).min(1)})]);function normalizeToolJsonOutput(e){let t=e.output===void 0?null:e.output;return withToolOutputSerializationError(e,()=>(parseJsonValue(t),t))}function normalizeToolModelOutput(e){return withToolOutputSerializationError({boundary:`toModelOutput`,toolCallId:e.toolCallId,toolName:e.toolName},()=>{assertSupportedFilePartData(e.output);let t=toolModelOutputSchema.safeParse(e.output);if(!t.success)throw TypeError(formatValidationError(t.error));let r=t.data;if(r.type===`json`)return{type:`json`,value:normalizeToolJsonOutput({boundary:`toModelOutput`,output:r.value,toolCallId:e.toolCallId,toolName:e.toolName})};if(r.type===`content`)for(let t of r.value)t.type===`file`&&warnOversizedFilePayload(t,e.toolName);return r})}function assertSupportedFilePartData(e){if(typeof e!=`object`||!e)return;let t=e;if(!(t.type!==`content`||!Array.isArray(t.value)))for(let e of t.value){if(typeof e!=`object`||!e)continue;let t=e;if(t.type!==`file`)continue;let n=t.data,r=typeof n==`object`&&n?n.data:void 0;if(isBinaryPayload(n)||isBinaryPayload(r))throw TypeError(`Expected file content part data to be a base64 string, received raw bytes. Base64-encode binary payloads before returning them from toModelOutput.`);let i=typeof n==`object`&&n?n.type:void 0;if(typeof i==`string`&&UNSUPPORTED_FILE_DATA_TAGS.has(i))throw TypeError(`File content part data tag "${i}" is not supported yet; only { type: "data" } with a base64 string is accepted.`)}}function warnOversizedFilePayload(e,t){let n=Math.floor(e.data.data.length*3/4);n<=CONTENT_FILE_WARN_BYTES||log.warn(`content-part file payload exceeds the inline size guideline — it is persisted in history and re-sent on every subsequent model call`,{estimatedBytes:n,mediaType:e.mediaType,toolName:t,warnBytes:CONTENT_FILE_WARN_BYTES})}function isBinaryPayload(e){return e instanceof Uint8Array||e instanceof ArrayBuffer}export{normalizeToolJsonOutput,normalizeToolModelOutput};
@@ -111,7 +111,7 @@ export declare function accumulateTurnUsage(input: {
111
111
  * Folds a delegated child session's reported totals into the parent's
112
112
  * session totals without touching the in-flight turn totals. Turn tags
113
113
  * attribute only the parent's own model calls (child spend is attributed by
114
- * the caller-side `invoke_agent` span); session totals feed the session
114
+ * the caller's durable `agent.action` span); session totals feed the session
115
115
  * token limits and the remaining-quota budget granted to later delegations.
116
116
  */
117
117
  export declare function accumulateSessionUsage(input: {
@@ -13,7 +13,7 @@ import type { InternalToolDefinition } from "#tools/definition.js";
13
13
  import type { WebSearchProvider } from "#shared/web-search.js";
14
14
  import type { AgentReasoningDefinition } from "#shared/agent-definition.js";
15
15
  import type { HarnessToolDefinition } from "#harness/execute-tool.js";
16
- import type { HarnessInstrumentation } from "#harness/instrumentation/runtime.js";
16
+ import type { SessionInstrumentation } from "#instrumentation/runtime.js";
17
17
  import type { HistoryViewProjector, PreparedHistoryView } from "#shared/history-view.js";
18
18
  /**
19
19
  * Serializable tool definition stored on the session.
@@ -274,7 +274,7 @@ export interface ToolLoopHarnessConfig {
274
274
  * Internal lifecycle hooks injected into each actual model attempt.
275
275
  * Omitted in production until an instrumentation runtime opts in.
276
276
  */
277
- readonly instrumentation?: HarnessInstrumentation;
277
+ readonly instrumentation?: SessionInstrumentation;
278
278
  /**
279
279
  * Execution mode for the current harness.
280
280
  *
@@ -1,4 +1,4 @@
1
1
  import type { Telemetry } from "ai";
2
- import type { InstrumentationAttemptScope, InstrumentationContextRunner, InstrumentationHooks } from "#harness/instrumentation/lifecycle.js";
2
+ import type { InstrumentationAttemptScope, InstrumentationContextRunner, InstrumentationHooks } from "#instrumentation/lifecycle.js";
3
3
  /** Creates one provider-neutral AI SDK bridge for one actual model attempt. */
4
4
  export declare function createAiSdkHookBridge(scope: InstrumentationAttemptScope, hooks: InstrumentationHooks, runInContext?: InstrumentationContextRunner, runtimeContext?: Readonly<Record<string, unknown>>): Telemetry;
@@ -0,0 +1 @@
1
+ import{attemptIdempotencyKey,modelCallIdempotencyKey,toolCallIdempotencyKey}from"#instrumentation/lifecycle.js";import{structuralProviderMetadata}from"#instrumentation/content.js";function createAiSdkHookBridge(i,a,o=directRunInContext,s){let c={capturesInputs:a.capturesInputs??a.capturesContent,capturesOutputs:a.capturesOutputs??a.capturesContent,modelKeys:new Map,runtimeContext:s!==void 0&&Object.keys(s).length>0?Object.freeze({...s}):void 0,scope:i,toolKeys:new Map};return{onStart(e){c.operation=Object.freeze({modelId:e.modelId,operationId:e.operationId,provider:e.provider})},async onStepStart(e){c.stepNumber=e.stepNumber;let t=toStepAttemptStarted(c);t!==void 0&&await a.publish(t)},async onLanguageModelCallStart(e){let n=modelCallIdempotencyKey(c.scope,c.stepNumber??0);c.modelKeys.set(e.callId,n);let r=toModelCallStarted(c,n,e);await a.publish(r)},executeLanguageModelCall({callId:e,execute:t}){let n=c.modelKeys.get(e);return n===void 0?t():o({idempotencyKey:n,scope:i,type:`model.call`},t)},async onLanguageModelCallEnd(e){let t=c.modelKeys.get(e.callId);if(t===void 0)return;c.modelKeys.delete(e.callId);let n=toModelCallCompleted(c,t,e);await a.publish(n)},async onStepEnd(t){if(t.providerMetadata===void 0)return;let n=c.capturesOutputs?t.providerMetadata:structuralProviderMetadata(t.providerMetadata);await a.publish(Object.freeze({idempotencyKey:attemptIdempotencyKey(c.scope),providerMetadata:n,scope:c.scope,type:`step.attempt.metadata`}))},async onToolExecutionStart(e){let t=toolCallIdempotencyKey(c.scope,e.toolCall.toolCallId,c.stepNumber??0);c.toolKeys.set(e.toolCall.toolCallId,t);let r=toToolCallStarted(c,t,e);await a.publish(r)},executeTool({toolCallId:e,execute:t}){let n=c.toolKeys.get(e);return n===void 0?t():o({idempotencyKey:n,scope:i,type:`tool.call`},t)},async onToolExecutionEnd(e){let t=e.toolCall.toolCallId,n=c.toolKeys.get(t);if(n===void 0)return;c.toolKeys.delete(t);let r=toToolCallCompleted(c,n,e);await a.publish(r)},async onAbort(e){await failOpenOperations(e.reason)},async onError(e){await failOpenOperations(e.error)}};async function failOpenOperations(e){let t=[];for(let n of c.modelKeys.values())t.push(a.publish(Object.freeze({error:e,idempotencyKey:n,scope:i,type:`model.call.failed`})));for(let n of c.toolKeys.values())t.push(a.publish(Object.freeze({error:e,idempotencyKey:n,scope:i,type:`tool.call.failed`})));c.modelKeys.clear(),c.toolKeys.clear(),await Promise.all(t)}}const directRunInContext=(e,t)=>t();function toStepAttemptStarted(t){if(!(t.operation===void 0||t.stepNumber===void 0))return Object.freeze({idempotencyKey:attemptIdempotencyKey(t.scope),operation:t.operation,runtimeContext:t.runtimeContext,scope:t.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,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`}));break;default:break}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};
@@ -16,4 +16,8 @@ export declare function ensureOtelIntegration(): void;
16
16
  * adding to them, so anything that passes integrations per call has to carry
17
17
  * these forward or they stop receiving events.
18
18
  */
19
- export declare function getRegisteredTelemetryIntegrations(): readonly Telemetry[];
19
+ export declare function getRegisteredTelemetryIntegrations(options?: {
20
+ readonly sanitizeEveOtelErrors?: boolean;
21
+ }): readonly Telemetry[];
22
+ /** @internal */
23
+ export declare function telemetryWithoutErrorContent(integration: Telemetry): Telemetry;
@@ -0,0 +1 @@
1
+ import{createLogger}from"#internal/logging.js";import{registerTelemetry}from"ai";import{OpenTelemetry}from"#compiled/@ai-sdk/otel/index.js";const log=createLogger(`harness.ai-sdk-telemetry`);let registered=!1,eveOtelIntegration,errorSafeEveOtelIntegration,warnedMissingEveOtelIntegration=!1;function ensureOtelIntegration(){registered||(registered=!0,eveOtelIntegration=new OpenTelemetry({runtimeContext:!0}),errorSafeEveOtelIntegration=telemetryWithoutErrorContent(eveOtelIntegration),registerTelemetry(eveOtelIntegration))}function getRegisteredTelemetryIntegrations(e){let t=globalThis.AI_SDK_TELEMETRY_INTEGRATIONS??[];if(e?.sanitizeEveOtelErrors!==!0)return t;let n=!1,r=t.map(e=>e!==eveOtelIntegration||errorSafeEveOtelIntegration===void 0?e:(n=!0,errorSafeEveOtelIntegration));return!n&&!warnedMissingEveOtelIntegration&&(warnedMissingEveOtelIntegration=!0,log.warn(`could not sanitize eve's AI SDK OpenTelemetry integration`,{reason:eveOtelIntegration===void 0?`eve OpenTelemetry integration was not registered`:`registered integration identity did not match`})),r}function telemetryWithoutErrorContent(e){let genericError=()=>Error(`AI SDK operation failed`);return new Proxy(e,{get(e,t){if(t===`onError`&&e.onError!==void 0)return t=>e.onError(typeof t==`object`&&t?{...t,error:genericError()}:genericError());if(t===`onToolExecutionEnd`&&e.onToolExecutionEnd!==void 0)return t=>e.onToolExecutionEnd(t.toolOutput.type===`tool-error`?{...t,toolOutput:{...t.toolOutput,error:genericError()}}:t);let n=Reflect.get(e,t);return typeof n==`function`?n.bind(e):n}})}export{ensureOtelIntegration,getRegisteredTelemetryIntegrations,telemetryWithoutErrorContent};
@@ -1,17 +1,18 @@
1
1
  import type { DeliverHookPayload } from "#channel/types.js";
2
2
  import type { AlsContext } from "#context/container.js";
3
- import type { InstrumentationChannelDeliveryOutcome, InstrumentationHooks } from "#harness/instrumentation/lifecycle.js";
4
- interface ChannelDeliveryStartInstrumentation {
3
+ import type { InstrumentationChannelDeliveryOutcome, InstrumentationHooks } from "#instrumentation/lifecycle.js";
4
+ export interface ChannelDeliveryStartInstrumentation {
5
5
  readonly agentName?: string;
6
6
  readonly ctx: AlsContext;
7
7
  readonly delivery: DeliverHookPayload;
8
8
  readonly hooks: InstrumentationHooks | undefined;
9
+ readonly policyAgentName: string;
9
10
  readonly rootSessionId: string;
10
11
  readonly sequence: number;
11
12
  readonly sessionId: string;
12
13
  readonly turnId: string;
13
14
  }
14
- interface ChannelDeliveryTerminalInstrumentation {
15
+ export interface ChannelDeliveryTerminalInstrumentation {
15
16
  readonly ctx: AlsContext;
16
17
  readonly error?: unknown;
17
18
  readonly errorCode?: string;
@@ -19,7 +20,4 @@ interface ChannelDeliveryTerminalInstrumentation {
19
20
  readonly includeTurn: boolean;
20
21
  readonly outcome: InstrumentationChannelDeliveryOutcome;
21
22
  }
22
- export declare function instrumentChannelDelivery(input: ChannelDeliveryStartInstrumentation): Promise<void>;
23
- export declare function instrumentChannelDelivery(input: ChannelDeliveryTerminalInstrumentation): Promise<void>;
24
- export declare function channelDeliveryErrorCode(error: unknown): string;
25
- export {};
23
+ export declare function instrumentChannelDelivery(input: ChannelDeliveryStartInstrumentation | ChannelDeliveryTerminalInstrumentation): Promise<void>;
@@ -0,0 +1 @@
1
+ import{normalizeChannelAudience}from"#shared/channel-audience.js";import{ActiveChannelDeliveriesKey,ChannelInstrumentationKey,ParentTraceContextKey,SessionTraceSeedKey}from"#context/keys.js";import{channelDeliveryIdempotencyKey}from"#instrumentation/lifecycle.js";async function instrumentChannelDelivery(i){if(!(`delivery`in i)){let n=i.ctx.get(ActiveChannelDeliveriesKey);if(n===void 0||i.hooks===void 0)return;let r=`channel.delivery.${i.outcome}`;for(let t of n){let n=t.policyAgentName??t.agentName;n!==void 0&&await(i.hooks.forTrace?.({agentName:n,audience:normalizeChannelAudience(t.delivery.channelAudience),channelType:t.channelType})??i.hooks).publish({agentName:t.agentName,delivery:t.delivery,error:i.error,errorCode:i.errorCode,idempotencyKey:channelDeliveryIdempotencyKey(t.sessionId,t.delivery.deliveryId),outcome:i.outcome,rootSessionId:t.rootSessionId,sequence:i.includeTurn?t.sequence:void 0,sessionId:t.sessionId,turnId:i.includeTurn?t.turnId:void 0,type:r})}i.ctx.delete(ActiveChannelDeliveriesKey);return}if(i.hooks===void 0||i.delivery.deliveryMetadata===void 0)return;let a=[],o=i.ctx.get(ChannelInstrumentationKey),s=normalizeChannelAudience(o?.metadata.audience),c=i.hooks.forTrace?.({agentName:i.policyAgentName,audience:s,channelType:o?.channelType})??i.hooks;for(let e of i.delivery.deliveryMetadata){let t=i.delivery.payloads[e.payloadIndex],n={channelAudience:s,channelKind:e.channelKind,channelName:e.channelName,deliveryId:e.deliveryId,requestId:e.requestId,requestTraceContext:e.requestTraceContext},l=!(c.capturesInputs??c.capturesContent)||t===void 0?void 0:projectDeliveryInput(t),u={agentName:i.agentName,channelType:o?.channelType,delivery:n,policyAgentName:i.policyAgentName,rootSessionId:i.rootSessionId,sequence:i.sequence,sessionId:i.sessionId,turnId:i.turnId};a.push(u),await c?.publish({agentName:u.agentName,delivery:n,idempotencyKey:channelDeliveryIdempotencyKey(i.sessionId,n.deliveryId),input:l,parentTraceContext:i.ctx.get(ParentTraceContextKey),rootSessionId:i.rootSessionId,sessionId:i.sessionId,traceSeed:i.ctx.get(SessionTraceSeedKey),type:`channel.delivery.started`})}a.length>0&&i.ctx.set(ActiveChannelDeliveriesKey,a)}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};
@@ -6,18 +6,8 @@ import type { InstrumentationDefinition } from "#public/instrumentation/index.js
6
6
  * Called once by the generated instrumentation Nitro plugin at server
7
7
  * startup. Subsequent calls overwrite the previous value.
8
8
  *
9
- * The store write lands before `setup` runs so a synchronous caller sees the
10
- * config without waiting on the returned promise.
11
- *
12
9
  * @internal — not part of the public API.
13
10
  */
14
11
  export declare function registerInstrumentationConfig(config: InstrumentationDefinition, input: {
15
12
  readonly agentName: string;
16
13
  }): Promise<void>;
17
- /**
18
- * Returns the registered instrumentation config, or `undefined` when no
19
- * `defineInstrumentation` export was provided.
20
- *
21
- * @internal — not part of the public API.
22
- */
23
- export declare function getInstrumentationConfig(): InstrumentationDefinition | undefined;
@@ -0,0 +1 @@
1
+ import{registerInstrumentationRuntime}from"#instrumentation/runtime.js";import{createInstrumentationHooks}from"#instrumentation/lifecycle.js";import{createInstrumentationSetupContext}from"#instrumentation/setup-context.js";async function registerInstrumentationConfig(n,r){let i=registerInstrumentationRuntime({forceFlush:async()=>void 0,hooks:createInstrumentationHooks([]),otelSettings:{functionId:n.functionId,recordInputs:n.recordInputs===!0,recordOutputs:n.recordOutputs===!0,traceChannelRequests:n.traceChannelRequests===!0},runInContext:(e,t)=>t(),shutdown:async()=>void 0});i.stepStartedRuntimeContextResolver=e=>n.events?.[`step.started`]?.(e),await n.setup?.(createInstrumentationSetupContext(r.agentName))}export{registerInstrumentationConfig};
@@ -0,0 +1,5 @@
1
+ import type { InstrumentationEvent } from "#instrumentation/lifecycle.js";
2
+ import type { ChannelAudience } from "#shared/channel-audience.js";
3
+ import type { InstrumentationDecision } from "#shared/instrumentation-decision.js";
4
+ /** Applies OpenTelemetry's trace content ceiling to one OTel provider event. */
5
+ export declare function instrumentationEventForTraceDecision(event: InstrumentationEvent, decision: InstrumentationDecision, audience: ChannelAudience): InstrumentationEvent;
@@ -0,0 +1 @@
1
+ import{applyAudienceCeiling}from"#shared/instrumentation-content.js";import{withInstrumentationDecision,withoutInstrumentationContent}from"#instrumentation/content.js";function instrumentationEventForTraceDecision(e,t,n){let r=applyAudienceCeiling(t,n);return r.action===`drop`?withoutInstrumentationContent(e):withInstrumentationDecision(e,r)}export{instrumentationEventForTraceDecision};
@@ -1,4 +1,4 @@
1
- import type { InstrumentationEvent } from "#harness/instrumentation/lifecycle.js";
1
+ import type { InstrumentationEvent } from "#instrumentation/lifecycle.js";
2
2
  import type { InstrumentationDecision } from "#shared/instrumentation-decision.js";
3
3
  /** Returns an immutable event projection with conversation content removed. */
4
4
  export declare function withoutInstrumentationContent(event: InstrumentationEvent): InstrumentationEvent;
@@ -1,2 +1,2 @@
1
- import type { CreateInstrumentationHooksOptions, InstrumentationHooks, InstrumentationHooksInput } from "#harness/instrumentation/lifecycle.js";
1
+ import type { CreateInstrumentationHooksOptions, InstrumentationHooks, InstrumentationHooksInput } from "#instrumentation/lifecycle.js";
2
2
  export declare function createInstrumentationDispatcher(input: InstrumentationHooksInput, options: CreateInstrumentationHooksOptions): InstrumentationHooks;
@@ -0,0 +1 @@
1
+ import{createLogger,formatError}from"#internal/logging.js";import{abandonInstrumentationState,instrumentationStateSlot,isInstrumentationStateAbandoned,releaseAllInstrumentationAttemptState,releaseAllInstrumentationState,releaseAllInstrumentationTurnState,takeInstrumentationActionScopes}from"#instrumentation/state.js";import{withInstrumentationDecision,withoutInstrumentationContent}from"#instrumentation/content.js";import{legacyCaptureTracePolicy,resolveTracePolicy}from"#shared/trace-policy.js";const log=createLogger(`harness.instrumentation-dispatch`);function createInstrumentationDispatcher(e,n){let r=n.handlerTimeoutMs??5e3,i=normalizeDispatchGroups(e),a=[...i.serialBefore,...i.parallel,...i.serialAfter],o=new Set;function forTrace(e){let n=new WeakMap,s=new Map(a.map(n=>[n,resolveTracePolicy(n.tracePolicy??legacyCaptureTracePolicy(n.capture),e,e=>{o.has(n)||(o.add(n),log.warn(`instrumentation provider trace policy failed`,{error:formatError(e),provider:n.name}))})])),p=[...s.values()].some(e=>e.action===`record`&&e.recordInputs),m=[...s.values()].some(e=>e.action===`record`&&e.recordOutputs),h=p||m,publish=async e=>{let t=snapshotInstrumentationEvent(withInstrumentationDecision(e,{action:`record`,recordInputs:p,recordOutputs:m}),n,e),a=t.type===`session.completed`||t.type===`session.failed`,o=t.type===`turn.cancelled`||t.type===`turn.failed`;if(a||o){let e=takeInstrumentationActionScopes(t.sessionId,o?t.turnId:void 0),n=terminalActionFailure(t);for(let t of e)await publish({...n,idempotencyKey:t.idempotencyKey,scope:t.scope,type:`action.failed`})}let d=new Map,visibleEvent=e=>{let n=s.get(e);if(n===void 0||n.action===`drop`)return withoutInstrumentationContent(t);if(n.recordInputs&&n.recordOutputs)return t;let r=`${String(n.recordInputs)}:${String(n.recordOutputs)}`,i=d.get(r);return i===void 0&&(i=withInstrumentationDecision(t,n),d.set(r,i)),i},admitted=e=>s.get(e)?.action===`record`;try{try{for(let e of i.serialBefore)admitted(e)&&await dispatchToProvider(e,t,r,()=>visibleEvent(e));let e=i.parallel.filter(admitted);if(e.length===1){let n=e[0];await dispatchToProvider(n,t,r,()=>visibleEvent(n))}else if(e.length>1){let n=(await Promise.allSettled(e.map(e=>dispatchToProvider(e,t,r,()=>visibleEvent(e))))).find(e=>e.status===`rejected`);if(n!==void 0)throw n.reason}}finally{for(let e of i.serialAfter)admitted(e)&&await dispatchToProvider(e,t,r,()=>visibleEvent(e))}}finally{releaseTerminalState(t)}};return{capturesContent:h,capturesInputs:p,capturesOutputs:m,forTrace,publish}}let s=!1;return{capturesContent:!1,forTrace,async publish(e){s||(s=!0,log.debug(`instrumentation event published without trace binding`,{eventType:e.type}))}}}function snapshotInstrumentationEvent(e,t,n){let r=t.get(n);if(r!==void 0)return r;let i=snapshotPlainValue(e,t);return t.set(n,i),i}function snapshotPlainValue(e,t){if(Array.isArray(e)){let n=t.get(e);if(n!==void 0)return n;let r=[];t.set(e,r);for(let n of e)r.push(snapshotPlainValue(n,t));return Object.freeze(r)}if(typeof e!=`object`||!e)return e;let n;try{n=Object.getPrototypeOf(e)}catch{return e}if(n!==Object.prototype&&n!==null)return e;let r=t.get(e);if(r!==void 0)return r;let i={};t.set(e,i);for(let[n,r]of Object.entries(e))i[n]=snapshotPlainValue(r,t);return Object.freeze(i)}function normalizeDispatchGroups(e){if(!Array.isArray(e)){let t=e;return{parallel:t.parallel??[],serialAfter:t.serialAfter??[],serialBefore:t.serialBefore??[]}}return{parallel:[],serialAfter:[],serialBefore:e.map((e,t)=>({...e,name:e.name??`provider-${String(t)}`}))}}async function dispatchToProvider(e,a,o,s){let c=a.type.endsWith(`.started`)||a.type===`input.requested`,l=stateOwner(a),u=e.name,d=e.stateNamespace??u;if(isInstrumentationStateAbandoned(d,a.idempotencyKey))return;let f=e.events?.[a.type];if(f===void 0)return;let p=instrumentationStateSlot(d,a.idempotencyKey,l);try{await withTimeout(async()=>{let t=s();await f(e.projectEvent===void 0?t:await e.projectEvent(t),{state:p})},o,()=>{p.revoke(),c&&abandonInstrumentationState(d,a.idempotencyKey,l)})||log.warn(`instrumentation provider timed out`,{boundary:a.type,provider:u,timeoutMs:o})}catch(e){log.warn(`instrumentation provider failed`,{boundary:a.type,error:formatError(e),provider:u})}finally{p.revoke()}}async function withTimeout(e,t,n){let r;try{return await Promise.race([Promise.resolve(e()).then(()=>!0),new Promise(e=>{r=setTimeout(()=>{n(),e(!1)},t)})])}finally{clearTimeout(r)}}function stateOwner(e){return e.type===`channel.delivery.started`||e.type===`channel.delivery.cancelled`||e.type===`channel.delivery.completed`||e.type===`channel.delivery.failed`?{sessionId:e.sessionId,turnId:e.turnId}:`scope`in e?e.type.startsWith(`action.`)||e.type.startsWith(`input.`)?{sessionId:e.scope.sessionId,turnId:e.scope.turnId}:e.type.startsWith(`model.call.`)||e.type.startsWith(`tool.call.`)||e.type.startsWith(`step.attempt.`)?{attemptId:e.scope.attemptId}:{}:{}}function releaseTerminalState(e){isTerminal(e.type)&&releaseAllInstrumentationState(e.idempotencyKey),(e.type===`step.attempt.completed`||e.type===`step.attempt.failed`)&&releaseAllInstrumentationAttemptState(e.scope.attemptId),(e.type===`session.completed`||e.type===`session.failed`)&&releaseAllInstrumentationTurnState(e.sessionId),(e.type===`turn.cancelled`||e.type===`turn.failed`)&&releaseAllInstrumentationTurnState(e.sessionId,e.turnId)}function terminalActionFailure(e){return e.type===`session.failed`||e.type===`turn.failed`?{error:e.error,outcome:`failed`}:e.type===`turn.cancelled`?{error:Error(`The action was cancelled with its turn.`),errorCode:`ACTION_CANCELLED`,outcome:`cancelled`}:{error:Error(`The session completed before the action settled.`),errorCode:`ACTION_ABANDONED`,outcome:`abandoned`}}function isTerminal(e){return e.endsWith(`.completed`)||e.endsWith(`.failed`)||e.endsWith(`.cancelled`)||e===`input.resolved`}export{createInstrumentationDispatcher};