eve 0.42.0 → 0.44.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (211) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/dist/src/channel/adapter.d.ts +2 -1
  3. package/dist/src/channel/forwarded-principal.d.ts +4 -4
  4. package/dist/src/channel/instrumentation.js +1 -1
  5. package/dist/src/cli/commands/registry-project.d.ts +3 -0
  6. package/dist/src/cli/commands/registry-project.js +2 -1
  7. package/dist/src/cli/commands/registry.d.ts +2 -0
  8. package/dist/src/cli/commands/registry.js +1 -1
  9. package/dist/src/cli/dev/tui/traces/trace-view.js +1 -1
  10. package/dist/src/compiled/.vendor-stamp.json +1 -1
  11. package/dist/src/compiled/jsonc-parser/index.d.ts +19 -0
  12. package/dist/src/compiler/extension-compatibility.d.ts +7 -5
  13. package/dist/src/compiler/extension-compatibility.js +1 -1
  14. package/dist/src/compiler/manifest.d.ts +3 -0
  15. package/dist/src/compiler/manifest.js +1 -1
  16. package/dist/src/compiler/normalize-manifest.js +1 -1
  17. package/dist/src/compiler/normalize-tool.js +1 -1
  18. package/dist/src/context/build-dynamic-tools.d.ts +5 -5
  19. package/dist/src/context/build-dynamic-tools.js +1 -1
  20. package/dist/src/context/dynamic-subagent-lifecycle.js +1 -1
  21. package/dist/src/context/dynamic-tool-lifecycle.d.ts +8 -27
  22. package/dist/src/context/dynamic-tool-lifecycle.js +1 -1
  23. package/dist/src/context/keys.d.ts +10 -14
  24. package/dist/src/context/keys.js +1 -1
  25. package/dist/src/context/provider.d.ts +5 -1
  26. package/dist/src/context/run-step.d.ts +3 -2
  27. package/dist/src/context/run-step.js +1 -1
  28. package/dist/src/execution/agent-handle-dispatch.d.ts +3 -0
  29. package/dist/src/execution/agent-handle-dispatch.js +1 -1
  30. package/dist/src/execution/delegation-tool.d.ts +9 -1
  31. package/dist/src/execution/delegation-tool.js +1 -1
  32. package/dist/src/execution/dispatch-runtime-actions-shared.d.ts +14 -1
  33. package/dist/src/execution/dispatch-runtime-actions-shared.js +1 -1
  34. package/dist/src/execution/dispatch-runtime-actions-step.js +1 -1
  35. package/dist/src/execution/history-view.d.ts +9 -0
  36. package/dist/src/execution/history-view.js +1 -0
  37. package/dist/src/execution/next-driver-action.d.ts +33 -1
  38. package/dist/src/execution/node-step.d.ts +5 -2
  39. package/dist/src/execution/node-step.js +1 -1
  40. package/dist/src/execution/remote-agent-dispatch.d.ts +2 -0
  41. package/dist/src/execution/remote-agent-dispatch.js +1 -1
  42. package/dist/src/execution/session-callback-step.d.ts +2 -2
  43. package/dist/src/execution/session-callback-step.js +1 -1
  44. package/dist/src/execution/tasks/child/steps.js +1 -1
  45. package/dist/src/execution/tasks/child/update.d.ts +2 -2
  46. package/dist/src/execution/tasks/child/update.js +1 -1
  47. package/dist/src/execution/tasks/child/workflow.js +1 -1
  48. package/dist/src/execution/tasks/parent/agent-views.d.ts +2 -1
  49. package/dist/src/execution/tasks/parent/agent-views.js +1 -1
  50. package/dist/src/execution/tasks/parent/continuation-dispatch.d.ts +6 -0
  51. package/dist/src/execution/tasks/parent/continuation-dispatch.js +1 -1
  52. package/dist/src/execution/tasks/parent/control-shared.d.ts +1 -1
  53. package/dist/src/execution/tasks/parent/control-shared.js +1 -1
  54. package/dist/src/execution/tasks/parent/delegate.d.ts +20 -6
  55. package/dist/src/execution/tasks/parent/delegate.js +1 -1
  56. package/dist/src/execution/tasks/parent/dispatch-task-step.js +1 -1
  57. package/dist/src/execution/tasks/parent/dispatch.d.ts +13 -1
  58. package/dist/src/execution/tasks/parent/dispatch.js +1 -1
  59. package/dist/src/execution/tasks/parent/hitl-proxy-steps.js +1 -1
  60. package/dist/src/execution/tasks/parent/tool-execution.d.ts +46 -0
  61. package/dist/src/execution/tasks/parent/tool-execution.js +1 -0
  62. package/dist/src/execution/tool-auth.d.ts +12 -3
  63. package/dist/src/execution/tool-auth.js +1 -1
  64. package/dist/src/execution/turn-cancellation-control.js +1 -1
  65. package/dist/src/execution/turn-workflow.js +1 -1
  66. package/dist/src/execution/wire/session-inbox-wire.v1.js +1 -1
  67. package/dist/src/execution/workflow-steps.d.ts +1 -54
  68. package/dist/src/execution/workflow-steps.js +1 -1
  69. package/dist/src/execution/workflow-trace-context.js +1 -1
  70. package/dist/src/harness/advertised-tools.js +1 -1
  71. package/dist/src/harness/background-tools.d.ts +37 -0
  72. package/dist/src/harness/background-tools.js +1 -0
  73. package/dist/src/harness/channel-delivery-instrumentation.js +1 -1
  74. package/dist/src/harness/execute-tool.d.ts +10 -1
  75. package/dist/src/harness/handles/transitions.d.ts +36 -0
  76. package/dist/src/harness/handles/transitions.js +1 -1
  77. package/dist/src/harness/instrumentation/lifecycle.d.ts +4 -0
  78. package/dist/src/harness/instrumentation/native-events.d.ts +2 -0
  79. package/dist/src/harness/instrumentation/native-events.js +1 -1
  80. package/dist/src/harness/messages.d.ts +2 -0
  81. package/dist/src/harness/messages.js +1 -1
  82. package/dist/src/harness/prepare-trace-context.d.ts +2 -0
  83. package/dist/src/harness/prepare-trace-context.js +1 -1
  84. package/dist/src/harness/tool-loop.js +2 -2
  85. package/dist/src/harness/tools.d.ts +5 -1
  86. package/dist/src/harness/tools.js +1 -1
  87. package/dist/src/harness/types.d.ts +13 -0
  88. package/dist/src/internal/application/package.js +1 -1
  89. package/dist/src/internal/authored-definition/schema-backed.js +1 -1
  90. package/dist/src/internal/authored-module-loader.js +1 -1
  91. package/dist/src/internal/workflow-bundle/dynamic-capability-transform-plugin.js +1 -1
  92. package/dist/src/internal/workflow-bundle/dynamic-tool-ast-references.d.ts +13 -0
  93. package/dist/src/internal/workflow-bundle/dynamic-tool-transform.d.ts +7 -31
  94. package/dist/src/internal/workflow-bundle/dynamic-tool-transform.js +4 -4
  95. package/dist/src/packages/eve-catalog/src/index.js +1 -1
  96. package/dist/src/public/channels/chat-sdk/audience.d.ts +2 -0
  97. package/dist/src/public/channels/chat-sdk/audience.js +1 -0
  98. package/dist/src/public/channels/chat-sdk/chatSdkChannel.d.ts +2 -0
  99. package/dist/src/public/channels/chat-sdk/chatSdkChannel.js +2 -2
  100. package/dist/src/public/channels/discord/audience.d.ts +5 -0
  101. package/dist/src/public/channels/discord/audience.js +1 -0
  102. package/dist/src/public/channels/discord/discordChannel.d.ts +2 -0
  103. package/dist/src/public/channels/discord/discordChannel.js +1 -1
  104. package/dist/src/public/channels/discord/inbound.d.ts +1 -0
  105. package/dist/src/public/channels/discord/inbound.js +1 -1
  106. package/dist/src/public/channels/discord/index.d.ts +1 -0
  107. package/dist/src/public/channels/eve.d.ts +7 -7
  108. package/dist/src/public/channels/eve.js +1 -1
  109. package/dist/src/public/channels/index.d.ts +3 -2
  110. package/dist/src/public/channels/slack/slackChannel.d.ts +4 -0
  111. package/dist/src/public/channels/slack/slackChannel.js +1 -1
  112. package/dist/src/public/channels/teams/index.d.ts +1 -0
  113. package/dist/src/public/channels/teams/teamsChannel.js +1 -1
  114. package/dist/src/public/channels/telegram/audience.d.ts +3 -0
  115. package/dist/src/public/channels/telegram/audience.js +1 -0
  116. package/dist/src/public/channels/telegram/index.d.ts +1 -0
  117. package/dist/src/public/channels/telegram/telegramChannel.js +1 -1
  118. package/dist/src/public/channels/twilio/twilioChannel.d.ts +2 -0
  119. package/dist/src/public/channels/twilio/twilioChannel.js +1 -1
  120. package/dist/src/public/definitions/channel.d.ts +1 -0
  121. package/dist/src/public/definitions/remote-agent.d.ts +7 -5
  122. package/dist/src/public/definitions/tool.d.ts +23 -0
  123. package/dist/src/public/definitions/tool.js +1 -1
  124. package/dist/src/public/instrumentation/otel.d.ts +6 -10
  125. package/dist/src/public/instrumentation/otel.js +1 -1
  126. package/dist/src/public/tools/approval/approval-helpers.js +1 -1
  127. package/dist/src/public/tools/index.d.ts +1 -1
  128. package/dist/src/runtime/framework-tools/connection-search-dynamic.js +2 -2
  129. package/dist/src/runtime/framework-tools/subagent/local.d.ts +41 -0
  130. package/dist/src/runtime/framework-tools/subagent/local.js +1 -0
  131. package/dist/src/runtime/framework-tools/subagent/remote.d.ts +23 -0
  132. package/dist/src/runtime/framework-tools/subagent/remote.js +1 -0
  133. package/dist/src/runtime/framework-tools/tasks.d.ts +11 -2
  134. package/dist/src/runtime/framework-tools/tasks.js +1 -1
  135. package/dist/src/runtime/resolve-tool.js +1 -1
  136. package/dist/src/runtime/session-callback-route.js +1 -1
  137. package/dist/src/setup/integrations/linq/management.d.ts +5 -0
  138. package/dist/src/setup/integrations/linq/management.js +1 -0
  139. package/dist/src/setup/integrations/linq/setup.d.ts +5 -1
  140. package/dist/src/setup/integrations/linq/setup.js +3 -3
  141. package/dist/src/setup/scaffold/create/add-to-project.js +1 -1
  142. package/dist/src/setup/scaffold/create/project.js +4 -10
  143. package/dist/src/setup/scaffold/create/web-template.d.ts +2 -2
  144. package/dist/src/setup/scaffold/create/web-template.js +374 -2
  145. package/dist/src/setup/scaffold/update/channels.d.ts +1 -1
  146. package/dist/src/setup/scaffold/update/channels.js +2 -2
  147. package/dist/src/setup/scaffold/update/package-json.d.ts +0 -2
  148. package/dist/src/setup/scaffold/update/package-json.js +1 -1
  149. package/dist/src/setup/scaffold/workspace-root.d.ts +0 -1
  150. package/dist/src/setup/scaffold/workspace-root.js +1 -1
  151. package/dist/src/shared/channel-audience.d.ts +7 -0
  152. package/dist/src/shared/channel-audience.js +1 -0
  153. package/dist/src/shared/channel-definition.d.ts +2 -1
  154. package/dist/src/shared/durable-dynamic-tool-callbacks.d.ts +34 -0
  155. package/dist/src/shared/durable-dynamic-tool-callbacks.js +1 -0
  156. package/dist/src/shared/dynamic-tool-definition.d.ts +2 -4
  157. package/dist/src/shared/empty-delivery.js +1 -1
  158. package/dist/src/shared/history-view.d.ts +22 -0
  159. package/dist/src/shared/history-view.js +1 -0
  160. package/dist/src/shared/json.d.ts +2 -0
  161. package/dist/src/shared/json.js +1 -1
  162. package/dist/src/shared/tool-definition.d.ts +4 -1
  163. package/dist/src/shared/tool-task.d.ts +107 -0
  164. package/dist/src/shared/tool-task.js +1 -0
  165. package/dist/src/tasks/delivery-context.d.ts +12 -0
  166. package/dist/src/tasks/delivery-context.js +17 -0
  167. package/dist/src/tasks/json.d.ts +25 -10
  168. package/dist/src/tasks/json.js +1 -1
  169. package/dist/src/tasks/session-index.d.ts +5 -3
  170. package/dist/src/tasks/session-index.js +1 -1
  171. package/dist/src/tasks/transitions.d.ts +40 -5
  172. package/dist/src/tasks/transitions.js +1 -1
  173. package/dist/src/tasks/types.d.ts +46 -4
  174. package/dist/src/tasks/types.js +1 -1
  175. package/dist/src/tracing/agent-action-instrumentation.js +1 -1
  176. package/dist/src/tracing/agent-approval-instrumentation.js +1 -1
  177. package/dist/src/tracing/agent-channel-delivery-instrumentation.js +1 -1
  178. package/dist/src/tracing/agent-otel-provider.d.ts +2 -0
  179. package/dist/src/tracing/agent-otel-provider.js +2 -2
  180. package/dist/src/tracing/agent-otel-session-context.d.ts +2 -0
  181. package/dist/src/tracing/agent-otel-session-context.js +1 -1
  182. package/dist/src/tracing/agent-trace-context-store.js +1 -1
  183. package/dist/src/tracing/agent-trace-state.d.ts +3 -0
  184. package/dist/src/tracing/channel-audience-context.d.ts +4 -0
  185. package/dist/src/tracing/channel-audience-context.js +1 -0
  186. package/dist/src/tracing/content-attributes.js +1 -1
  187. package/dist/src/tracing/content-span-processor.d.ts +7 -7
  188. package/dist/src/tracing/content-span-processor.js +1 -1
  189. package/dist/src/tracing/install-instrumentation-runtime.js +1 -1
  190. package/dist/src/tracing/local-instrumentation-runtime.d.ts +3 -0
  191. package/dist/src/tracing/local-instrumentation-runtime.js +1 -1
  192. package/dist/src/tracing/local-traces.d.ts +1 -10
  193. package/dist/src/tracing/local-traces.js +1 -1
  194. package/dist/src/tracing/otel-declaration.d.ts +34 -27
  195. package/dist/src/tracing/otel-declaration.js +1 -1
  196. package/dist/src/tracing/sampled-trace.d.ts +2 -0
  197. package/dist/src/tracing/sampled-trace.js +1 -0
  198. package/dist/src/tracing/span-export-policy.d.ts +41 -0
  199. package/dist/src/tracing/span-export-policy.js +1 -0
  200. package/dist/src/tracing/suppress-tracing.d.ts +2 -0
  201. package/dist/src/tracing/suppress-tracing.js +1 -0
  202. package/docs/channels/custom.mdx +2 -0
  203. package/docs/channels/linq.mdx +1 -1
  204. package/docs/getting-started.mdx +36 -36
  205. package/docs/guides/auth-and-route-protection.md +6 -2
  206. package/docs/guides/dynamic-capabilities.md +12 -10
  207. package/docs/guides/instrumentation.md +2 -0
  208. package/docs/guides/remote-agents.md +10 -2
  209. package/docs/tools/overview.mdx +19 -0
  210. package/docs/tutorial/ship-it.mdx +1 -1
  211. package/package.json +1 -1
@@ -1,3 +1,3 @@
1
- import{createErrorId,createLogger,formatError,logError,recordErrorOnSpan}from"#internal/logging.js";import{isScheduleAppAuth}from"#channel/schedule-auth.js";import{AuthKey,ChannelInstrumentationKey,ParentSessionKey,ParentTraceContextKey,SessionCallbackKey,TurnTaskDeliveryKey}from"#context/keys.js";import{resolveInstalledPackageInfo}from"#internal/application/package.js";import{toErrorMessage}from"#shared/errors.js";import{createActionResultEvent,createApprovalCandidateEvent,createApprovalSettledEvent,createAuthorizationCompletedEvent,createAuthorizationRequiredEvent,createCompactionCompletedEvent,createCompactionRequestedEvent,createContextClearedEvent,createInputRequestedEvent,createInputResolvedEvent,createMessageCompletedEvent,createResultCompletedEvent,createSessionWaitingEvent,createStepStartedEvent}from"#protocol/message.js";import{summarizeKnownError}from"#harness/semantic-errors/index.js";import{resolveProviderHeaders}from"#internal/gateway.js";import{formatLanguageModelGatewayId}from"#internal/runtime-model.js";import{contextStorage}from"#context/container.js";import{ChannelKey}from"#runtime/sessions/runtime-context-keys.js";import{advanceStep,emitFailedStep,emitRecoverableFailedTurn,emitStepStarted,emitStreamContent,emitTurnEpilogue,emitTurnPreamble,getHarnessEmissionState,setHarnessEmissionState}from"#harness/emission.js";import{ToolLoopAgent,isStepCount}from"ai";import{resolveAgentsAnnouncement}from"#harness/handles/prompt.js";import{renderPendingApprovalsSnippet}from"#harness/hitl/approval-prompt.js";import{getAgentHandleStore}from"#harness/handles/store.js";import{buildDynamicSubagentTools}from"#context/dynamic-subagent-lifecycle.js";import{TASK_UPDATE_TOOL_NAME}from"#runtime/framework-tools/tasks.js";import{normalizeUserContent,resolveAssistantStepText}from"#harness/messages.js";import{createRuntimeActionRequestFromToolCall,resolvePendingRuntimeActions,setPendingRuntimeActionBatch}from"#harness/runtime-actions.js";import{clearPendingWorkflowInterrupt,getPendingWorkflowInterrupt,setPendingWorkflowInterrupt}from"#harness/workflow-interrupt-state.js";import{getWorkflowRuntimeActionInterrupts,isWorkflowRuntimeActionInterrupt}from"#harness/workflow-runtime-action-state.js";import{getActiveDynamicModelSelection,isDynamicModelSelectionError}from"#context/dynamic-model-lifecycle.js";import{getInstrumentationRuntime}from"#harness/instrumentation/runtime.js";import{activeTurnId}from"#harness/active-turn-id.js";import{appendPendingInputBatch,consumeDeferredStepInput,getApprovedTools,getPendingInputRequestIds,hasDeferredStepInput,hasPendingApprovalBatch,hasStepInput,resolvePendingInput}from"#harness/input-requests.js";import{createInstrumentationHandleEvent,publishInputResolutions}from"#harness/instrumentation/native-events.js";import{accumulateTurnUsage,getTurnUsageState,setTurnUsageState}from"#harness/turn-tag-state.js";import{context,trace}from"#compiled/@opentelemetry/api/index.js";import{readTaskIdFromInboxToken}from"#tasks/task-inbox-token.js";import{getSupersededAuthorizationChallenges,isAuthorizationSignal,setPendingAuthorization}from"#harness/authorization.js";import{throwIfTurnAborted}from"#harness/turn-cancellation.js";import{buildDynamicInstructionMessages,drainDynamicInstructionUserMessages,prepareDynamicInstructionPreamble}from"#context/dynamic-instruction-lifecycle.js";import{PendingSkillAnnouncementKey}from"#context/dynamic-skill-lifecycle.js";import{resolveParentLineage}from"#harness/parent-lineage.js";import{prepareTurnTraceContext}from"#harness/prepare-trace-context.js";import{getWorkflowContinuationSecurity,readWorkflowContinuationSecurity}from"#harness/workflow-continuation-security.js";import{buildWorkflowHostTools,resolveWorkflowSandboxBridgeRequestLimit}from"#harness/workflow-sandbox.js";import{attemptIdempotencyKey}from"#harness/instrumentation/lifecycle.js";import{getApprovalAuditState,markApprovalCandidateHistoryEventEmitted,markApprovalCandidatePendingEventEmitted,markApprovalSettlementEventEmitted}from"#harness/approval-candidates.js";import{queueDeferredStepInput}from"#harness/pending-input-batches.js";import{CONDITIONAL_DELIVERY_INSTRUCTION,EMPTY_DELIVERY_SENTINEL,hasEmptyDeliverySentinel}from"#shared/empty-delivery.js";import{createToolResultMessagePartFromToolError}from"#harness/action-result-helpers.js";import{getInvalidToolCallInputError,isInvalidToolCall}from"#harness/tool-call-input-errors.js";import{EmptyModelResponseError,classifyModelCallError,extractModelCallErrorDetails,extractUnsupportedProviderToolTypes,extractUpstreamRejectionMessage,isNoOutputGeneratedError}from"#harness/model-call-error.js";import{readToolInterrupt}from"#harness/tool-interrupts.js";import{ASK_QUESTION_TOOL_NAME}from"#runtime/framework-tools/ask-question.js";import{extractQuestionInputRequests,extractToolApprovalInputRequests}from"#harness/input-extraction.js";import{applyLastToolCacheBreakpoint,applySystemCacheBreakpoint,detectPromptCachePath,getAnthropicCacheMarker}from"#harness/prompt-cache.js";import{requireSessionModelReference}from"#harness/types.js";import{buildDynamicTools,buildResponseAuthorizationTools}from"#context/build-dynamic-tools.js";import{hydrateSandboxAttachments,stageAttachmentsToSandbox}from"#harness/attachment-staging.js";import{createWorkflowLifecycle}from"#harness/workflow-lifecycle.js";import{compactMessages,getInputTokenCount,resolveCompactionModel,shouldCompact}from"#harness/compaction.js";import{applySessionLimitContinuation,enforceSessionTokenLimit}from"#harness/session-limit-enforcement.js";import{setEveAttributes}from"#runtime/attributes/emit.js";import{coordinateApprovalDelivery,shouldPrepareApprovalPolicyTools}from"#harness/approval-delivery-coordinator.js";import{buildTelemetryRuntimeContext}from"#harness/instrumentation/runtime-context.js";import{createAiSdkHookBridge}from"#harness/ai-sdk-hook-bridge.js";import{convertStaleResponsesToUserMessage,dropStaleSessionLimitContinuationResponses}from"#harness/stale-input-responses.js";import{getInstrumentationConfig}from"#harness/instrumentation/config.js";import{normalizeProviderToolHistory}from"#harness/provider-tool-history.js";import{extractWorkflowStreamWriteErrorDetails}from"#harness/workflow-stream-error.js";import{ensureOtelIntegration,getRegisteredTelemetryIntegrations}from"#harness/ai-sdk-telemetry.js";import{getAdvertisedTools}from"#harness/advertised-tools.js";import{resolveFrameworkToolFromUpstreamType}from"#harness/provider-tools.js";import{buildStepHooks,emitStepActions}from"#harness/step-hooks.js";import{buildToolApproval,buildToolSetFromDefinitions,buildToolSetWithProviderTools}from"#harness/tools.js";import{continueWorkflowSandboxInterrupt,getWorkflowSandboxInterrupt,unwrapWorkflowSandboxResult}from"#shared/workflow-sandbox.js";import{FINAL_OUTPUT_TOOL_NAME,buildFinalOutputTool}from"#runtime/framework-tools/final-output.js";const environment=process.env.NODE_ENV??`unknown`,eveVersion=resolveInstalledPackageInfo().version,log=createLogger(`harness.tool-loop`);function logToolExecutionError(e){e.toolOutput.type===`tool-error`&&logError(log,`tool execution failed`,e.toolOutput.error,{toolName:e.toolCall.toolName,toolCallId:e.toolCall.toolCallId})}function enrichTelemetry(e,t,n,r){if(e===void 0&&r===void 0)return;let i={};for(let e of Object.keys(n??{}))i[e]=!0;return{functionId:e?.functionId??t,includeRuntimeContext:i,integrations:r===void 0?void 0:[r,...getRegisteredTelemetryIntegrations()],isEnabled:!0,recordInputs:e?.recordInputs??!1,recordOutputs:e?.recordOutputs??!1}}function mergeSystemInstructions(e){if(e.length===0)return;if(e.length===1)return{...e[0]};let t;for(let n of e)n.providerOptions!==void 0&&(t={...t,...n.providerOptions});let n={role:`system`,content:e.map(e=>e.content).join(`
1
+ import{createErrorId,createLogger,formatError,logError,recordErrorOnSpan}from"#internal/logging.js";import{normalizeChannelAudience}from"#shared/channel-audience.js";import{isScheduleAppAuth}from"#channel/schedule-auth.js";import{AuthKey,ChannelInstrumentationKey,ParentSessionKey,ParentTraceContextKey,SessionCallbackKey,TurnTaskDeliveryKey}from"#context/keys.js";import{resolveInstalledPackageInfo}from"#internal/application/package.js";import{toErrorMessage}from"#shared/errors.js";import{createActionResultEvent,createApprovalCandidateEvent,createApprovalSettledEvent,createAuthorizationCompletedEvent,createAuthorizationRequiredEvent,createCompactionCompletedEvent,createCompactionRequestedEvent,createContextClearedEvent,createInputRequestedEvent,createInputResolvedEvent,createMessageCompletedEvent,createResultCompletedEvent,createSessionWaitingEvent,createStepStartedEvent}from"#protocol/message.js";import{summarizeKnownError}from"#harness/semantic-errors/index.js";import{resolveProviderHeaders}from"#internal/gateway.js";import{formatLanguageModelGatewayId}from"#internal/runtime-model.js";import{contextStorage}from"#context/container.js";import{ChannelKey}from"#runtime/sessions/runtime-context-keys.js";import{buildDynamicTools,buildResponseAuthorizationTools}from"#context/build-dynamic-tools.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{renderPendingApprovalsSnippet}from"#harness/hitl/approval-prompt.js";import{getAgentHandleStore}from"#harness/handles/store.js";import{buildDynamicSubagentTools}from"#context/dynamic-subagent-lifecycle.js";import{TASK_UPDATE_TOOL_NAME}from"#runtime/framework-tools/tasks.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{createHistoryViewPreparer}from"#shared/history-view.js";import{getActiveDynamicModelSelection,isDynamicModelSelectionError}from"#context/dynamic-model-lifecycle.js";import{getInstrumentationRuntime}from"#harness/instrumentation/runtime.js";import{activeTurnId}from"#harness/active-turn-id.js";import{appendPendingInputBatch,consumeDeferredStepInput,getApprovedTools,getPendingInputRequestIds,hasDeferredStepInput,hasPendingApprovalBatch,hasStepInput,resolvePendingInput}from"#harness/input-requests.js";import{createInstrumentationHandleEvent,publishInputResolutions}from"#harness/instrumentation/native-events.js";import{accumulateTurnUsage,getTurnUsageState,setTurnUsageState}from"#harness/turn-tag-state.js";import{context,trace}from"#compiled/@opentelemetry/api/index.js";import{readTaskIdFromInboxToken}from"#tasks/task-inbox-token.js";import{getSupersededAuthorizationChallenges,isAuthorizationSignal,setPendingAuthorization}from"#harness/authorization.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{TASK_DELIVERY_PENDING_INSTRUCTION,TASK_DELIVERY_SETTLED_INSTRUCTION}from"#tasks/delivery-context.js";import{resolveParentLineage}from"#harness/parent-lineage.js";import{prepareTurnTraceContext}from"#harness/prepare-trace-context.js";import{getWorkflowContinuationSecurity,readWorkflowContinuationSecurity}from"#harness/workflow-continuation-security.js";import{buildWorkflowHostTools,resolveWorkflowSandboxBridgeRequestLimit}from"#harness/workflow-sandbox.js";import{attemptIdempotencyKey}from"#harness/instrumentation/lifecycle.js";import{getApprovalAuditState,markApprovalCandidateHistoryEventEmitted,markApprovalCandidatePendingEventEmitted,markApprovalSettlementEventEmitted}from"#harness/approval-candidates.js";import{queueDeferredStepInput}from"#harness/pending-input-batches.js";import{CONDITIONAL_DELIVERY_INSTRUCTION,EMPTY_DELIVERY_SENTINEL,hasEmptyDeliverySentinel}from"#shared/empty-delivery.js";import{createToolResultMessagePartFromToolError}from"#harness/action-result-helpers.js";import{getInvalidToolCallInputError,isInvalidToolCall}from"#harness/tool-call-input-errors.js";import{EmptyModelResponseError,classifyModelCallError,extractModelCallErrorDetails,extractUnsupportedProviderToolTypes,extractUpstreamRejectionMessage,isNoOutputGeneratedError}from"#harness/model-call-error.js";import{readToolInterrupt}from"#harness/tool-interrupts.js";import{ASK_QUESTION_TOOL_NAME}from"#runtime/framework-tools/ask-question.js";import{extractQuestionInputRequests,extractToolApprovalInputRequests}from"#harness/input-extraction.js";import{applyLastToolCacheBreakpoint,applySystemCacheBreakpoint,detectPromptCachePath,getAnthropicCacheMarker}from"#harness/prompt-cache.js";import{requireSessionModelReference}from"#harness/types.js";import{hydrateSandboxAttachments,stageAttachmentsToSandbox}from"#harness/attachment-staging.js";import{createWorkflowLifecycle}from"#harness/workflow-lifecycle.js";import{compactMessages,getInputTokenCount,resolveCompactionModel,shouldCompact}from"#harness/compaction.js";import{applySessionLimitContinuation,enforceSessionTokenLimit}from"#harness/session-limit-enforcement.js";import{setEveAttributes}from"#runtime/attributes/emit.js";import{coordinateApprovalDelivery,shouldPrepareApprovalPolicyTools}from"#harness/approval-delivery-coordinator.js";import{buildTelemetryRuntimeContext}from"#harness/instrumentation/runtime-context.js";import{createAiSdkHookBridge}from"#harness/ai-sdk-hook-bridge.js";import{convertStaleResponsesToUserMessage,dropStaleSessionLimitContinuationResponses}from"#harness/stale-input-responses.js";import{getInstrumentationConfig}from"#harness/instrumentation/config.js";import{normalizeProviderToolHistory}from"#harness/provider-tool-history.js";import{extractWorkflowStreamWriteErrorDetails}from"#harness/workflow-stream-error.js";import{ensureOtelIntegration,getRegisteredTelemetryIntegrations}from"#harness/ai-sdk-telemetry.js";import{getAdvertisedTools}from"#harness/advertised-tools.js";import{resolveFrameworkToolFromUpstreamType}from"#harness/provider-tools.js";import{buildStepHooks,emitStepActions}from"#harness/step-hooks.js";import{buildToolApproval,buildToolSetFromDefinitions,buildToolSetWithProviderTools}from"#harness/tools.js";import{continueWorkflowSandboxInterrupt,getWorkflowSandboxInterrupt,unwrapWorkflowSandboxResult}from"#shared/workflow-sandbox.js";import{FINAL_OUTPUT_TOOL_NAME,buildFinalOutputTool}from"#runtime/framework-tools/final-output.js";const environment=process.env.NODE_ENV??`unknown`,eveVersion=resolveInstalledPackageInfo().version,log=createLogger(`harness.tool-loop`);function logToolExecutionError(e){e.toolOutput.type===`tool-error`&&logError(log,`tool execution failed`,e.toolOutput.error,{toolName:e.toolCall.toolName,toolCallId:e.toolCall.toolCallId})}function enrichTelemetry(e,t,n,r){if(e===void 0&&r===void 0)return;let i={};for(let e of Object.keys(n??{}))i[e]=!0;return{functionId:e?.functionId??t,includeRuntimeContext:i,integrations:r===void 0?void 0:[r,...getRegisteredTelemetryIntegrations()],isEnabled:!0,recordInputs:e?.recordInputs??!1,recordOutputs:e?.recordOutputs??!1}}function mergeSystemInstructions(e){if(e.length===0)return;if(e.length===1)return{...e[0]};let t;for(let n of e)n.providerOptions!==void 0&&(t={...t,...n.providerOptions});let n={role:`system`,content:e.map(e=>e.content).join(`
2
2
 
3
- `)};return t!==void 0&&(n.providerOptions=t),n}function buildGatewayAttributionHeaders(e,t){let n=resolveProviderHeaders(e);if(n===void 0)return;let r=t?.agentName??t?.agentId,i=process.env.VERCEL_PROJECT_PRODUCTION_URL||process.env.VERCEL_URL,a=i?`https://${i}`:void 0,o={...n};return r&&(o[`x-title`]=r),a&&(o[`http-referer`]=a),o}async function resolveActiveRuntimeModel(e){if(e.ctx===void 0){let t=e.session.agent.modelReference;if(t===void 0)throw Error(`Dynamic model selection is unavailable outside an eve runtime context.`);return{model:await e.config.resolveModel(t),session:e.session}}let t=getActiveDynamicModelSelection(e.ctx);if(t===null){let t=e.session.agent.modelReference;if(e.session.agent.dynamicModel===!0||t===void 0)throw Error(`Dynamic model selection is required before model-dependent work begins. Add a matching resolver handler that returns a concrete model.`);return{model:await e.config.resolveModel(t),session:e.session}}return{model:t.model===void 0?await e.config.resolveModel(t.reference):t.model,session:updateSessionModelReference(e.session,t.reference)}}function updateSessionModelReference(e,t){return{...e,agent:{...e.agent,modelReference:t},compaction:updateCompactionThresholdForModelReference({compaction:e.compaction,modelReference:t})}}function updateCompactionThresholdForModelReference(e){return e.modelReference.contextWindowTokens===void 0?e.compaction:{...e.compaction,threshold:Math.max(1,Math.floor(e.modelReference.contextWindowTokens*(e.compaction.thresholdPercent??.9)))}}const TURN_TRACE_STATE_KEY=`eve.harness.turnTrace`;function getTurnTraceState(e){return e.state?.[TURN_TRACE_STATE_KEY]}function setTurnTraceState(e,t){let n={traceId:t.traceId,spanId:t.spanId,traceFlags:t.traceFlags};return{...e,state:{...e.state,[TURN_TRACE_STATE_KEY]:n}}}function resolveStepOtelContext(e,t,n){if(t)return trace.setSpan(context.active(),t);if(e){let e=getTurnTraceState(n);if(e){let t=trace.wrapSpanContext({isRemote:!0,traceId:e.traceId,spanId:e.spanId,traceFlags:e.traceFlags});return trace.setSpan(context.active(),t)}}}function buildHarnessToolsWithDynamicSubagents(e,t){let n=new Map(e);if(t===void 0)return n;for(let e of buildDynamicSubagentTools(t)){if(n.has(e.name))throw Error(`Dynamic subagent "${e.name}" collides with another runtime-visible tool name.`);n.set(e.name,e)}return n}function createToolLoopHarness(t){let n=t.handleEvent,f=getInstrumentationRuntime(),_=f?.otelSettings,v=getInstrumentationConfig(),y=f?.runtimeContextResolvers;_!==void 0&&ensureOtelIntegration();let x=_===void 0?void 0:trace.getTracer(`eve`),S=t.runtimeIdentity?.agentName;async function runStep(e,t){let n;if(x&&hasStepInput(t)){let t=_?.functionId??S,r={"eve.version":eveVersion,"eve.environment":environment,"eve.session.id":e.sessionId};t&&(r[`ai.telemetry.functionId`]=t),n=x.startSpan(`ai.eve.turn`,{attributes:r})}let r=resolveStepOtelContext(x,n,e),executeStep=()=>executeStepBody(e,t,n);try{return r?await context.with(r,executeStep):await executeStep()}finally{n?.end()}}async function executeStepBody(f,x,T){let E=f;T&&(E=setTurnTraceState(E,T.spanContext()));let O=getHarnessEmissionState(E.state),k=contextStorage.getStore(),A=k?.get(ParentSessionKey),se=k?.get(ChannelKey),ce=k?.get(SessionCallbackKey),le=A!==void 0||ce!==void 0,j=(ce?.taskId!==void 0||readTaskIdFromInboxToken(String(se?.state?.parentContinuationToken??``))!==void 0)&&t.tools.has(TASK_UPDATE_TOOL_NAME),ue=resolveParentLineage(A,se),de=k?.get(ParentTraceContextKey),fe,M=createInstrumentationHandleEvent({agentName:t.runtimeIdentity?.agentName,channelKind:k?.get(ChannelInstrumentationKey)?.kind,getAttemptScope:()=>fe,handleEvent:n,hooks:t.instrumentation?.hooks,parentLineage:ue,parentTraceContext:de,rootSessionId:A?.rootSessionId,sessionId:E.sessionId,turnId:activeTurnId(O)}),failModelSelection=async(n,r)=>{if(throwIfTurnAborted(t.abortSignal),T&&recordErrorOnSpan(T,n),!M)throw n;let a=createErrorId(),o=toErrorMessage(n);return log.error(`model selection failed terminally`,{error:n,errorId:a,sessionId:E.sessionId,turnId:r.turnId}),await emitFailedStep(M,r,{code:`MODEL_SELECTION_FAILED`,details:{errorId:a},message:o,sessionId:E.sessionId}),{next:t.mode===`task`||le?{done:!0,isError:!0,output:o}:{done:!0,output:``},session:E}},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,instrumentation:t.instrumentation,parentLineage:ue,parentTraceContext:de,rootSessionId:A?.rootSessionId??E.rootSessionId??E.sessionId,sequence:O.sequence,sessionId:E.sessionId,sessionStarted:O.sessionStarted,traceContext:n,turnId:`turn_${O.sequence}`})};if(t.clearOnly===!0)return E={...E,compaction:{recentWindowSize:E.compaction.recentWindowSize,threshold:E.compaction.threshold,thresholdPercent:E.compaction.thresholdPercent},history:[]},await M?.(createContextClearedEvent({sequence:O.sequence,sessionId:E.sessionId,turnId:activeTurnId(O)})),await M?.(createSessionWaitingEvent()),{next:null,session:E};if(t.compactOnly===!0){if(E.history.length>0)try{let e=await resolveActiveRuntimeModel({config:t,ctx:contextStorage.getStore(),session:E});E=e.session;let n=await maybeCompact({abortSignal:t.abortSignal,emit:M,emissionState:{...O,turnId:activeTurnId(O)},force:!0,messages:[...E.history],model:e.model,onCompaction:t.onCompaction,resolveModel:t.resolveModel,runtimeIdentity:t.runtimeIdentity,session:E,telemetry:enrichTelemetry(_,S)??void 0});E={...n.session,compaction:{recentWindowSize:n.session.compaction.recentWindowSize,threshold:n.session.compaction.threshold,thresholdPercent:n.session.compaction.thresholdPercent},history:n.messages}}catch(e){logError(log,`manual session compaction failed`,e,{sessionId:E.sessionId})}return await M?.(createSessionWaitingEvent()),{next:null,session:E}}let N=consumeDeferredStepInput({input:x,preferCurrentInput:t.mode!==`conversation`&&x!==void 0&&hasPendingApprovalBatch(E),session:E});E=N.session;let P=await resolvePendingRuntimeActions({emit:M,session:E,stepInput:N.input});if(P.outcome===`unresolved`)return{next:null,session:P.session};E=P.session;let pe=getPendingInputRequestIds(E.state),F=convertStaleResponsesToUserMessage({history:P.messages,pendingRequestIds:pe,stepInput:dropStaleSessionLimitContinuationResponses({pendingRequestIds:pe,stepInput:N.input})}),I=F.stepInput,L=F.kind===`converted`?{...I,message:F.displayMessage}:I,R=contextStorage.getStore();R!==void 0&&t.resolveStepDynamicTools!==void 0&&shouldPrepareApprovalPolicyTools({session:E,stepInput:I})&&await t.resolveStepDynamicTools({ctx:R,event:createStepStartedEvent({modelId:E.agent.modelReference?.id??`dynamic`,sequence:O.sequence,stepIndex:O.stepIndex,turnId:O.turnId}),messages:P.messages});let z=await coordinateApprovalDelivery({session:E,stepInput:I,tools:buildResponseAuthorizationTools({authoredTools:t.tools,context:R})});if(E=z.session,M){for(let e of z.feedback)await M(createMessageCompletedEvent({message:e,sequence:O.sequence,stepIndex:O.stepIndex,turnId:O.turnId}));let e=getApprovalAuditState(E.state);for(let t of e.activeCandidates.filter(e=>e.pendingEventEmitted!==!0))await M(createApprovalCandidateEvent({candidateId:t.candidateId,outcome:`pending`,requestId:t.requestId,responderPrincipalId:t.responder.principalId,sequence:O.sequence,stepIndex:O.stepIndex,turnId:O.turnId})),E={...E,state:markApprovalCandidatePendingEventEmitted({candidateId:t.candidateId,state:E.state})};for(let t of e.candidateHistory.filter(e=>e.eventEmitted!==!0&&e.status!==`allowed`))await M(createApprovalCandidateEvent({candidateId:t.candidateId,outcome:t.status,requestId:t.requestId,responderPrincipalId:t.responder.principalId,reason:t.reason,sequence:O.sequence,stepIndex:O.stepIndex,turnId:O.turnId})),E={...E,state:markApprovalCandidateHistoryEventEmitted({candidateId:t.candidateId,state:E.state})};for(let t of e.settlements.filter(e=>e.eventEmitted!==!0))await M(createApprovalSettledEvent({outcome:t.outcome===`allowed`?`approved`:`cancelled`,requestId:t.requestId,responderPrincipalId:t.actor.principalId,sequence:O.sequence,stepIndex:O.stepIndex,turnId:O.turnId})),E={...E,state:markApprovalSettlementEventEmitted({requestId:t.requestId,state:E.state})}}if(z.kind===`park`)return{next:null,session:E};if(z.kind===`continue-coordination`)return{next:runStep,session:z.stepInput===void 0?E:queueDeferredStepInput(E,z.stepInput)};if(z.challenges.length>0){if(M)for(let e of z.challenges)await M(createAuthorizationRequiredEvent({authorization:e.challenge,candidateId:e.candidateId,description:e.challenge.instructions??`Authorization required for ${e.name}`,name:e.name,sequence:O.sequence,stepIndex:O.stepIndex,turnId:O.turnId,webhookUrl:e.hookUrl}));let e=z.stepInput===void 0?E:queueDeferredStepInput(E,z.stepInput);return{next:null,session:{...e,state:setPendingAuthorization(e.state,{challenges:z.challenges})}}}let B=resolvePendingInput({deferMessagesWhileApprovalsPending:t.mode!==`conversation`,history:P.messages,resolveApprovalKey:resolveApprovalKeyFromTools(t.tools),session:E,stepInput:z.stepInput});if(B.outcome===`unresolved`){let e=P.outcome===`resolved`?{...B.session,history:[...P.messages]}:B.session;if(M&&t.mode===`conversation`&&B.deferredMessage===!0&&hasStepInput(x)){k!==void 0&&prepareDynamicInstructionPreamble(k,e.history);let n=[];try{let e=await preparePreambleTrace();O=await emitTurnPreamble(M,L??{},O,t.runtimeIdentity,e)}catch(t){if(n=k===void 0?[]:drainDynamicInstructionUserMessages(k),e={...e,history:[...e.history,...n]},E=e,!isDynamicModelSelectionError(t))throw t;return failModelSelection(t,{sessionStarted:!0,sequence:O.sequence,stepIndex:0,turnId:`turn_${O.sequence}`})}return n=k===void 0?[]:drainDynamicInstructionUserMessages(k),e={...e,history:[...e.history,...n]},O=await emitTurnEpilogue(M,O,t.mode),{next:null,session:setHarnessEmissionState(e,O)}}return P.outcome===`resolved`?(M&&t.mode===`conversation`&&(O=await emitTurnEpilogue(M,O,t.mode),e=setHarnessEmissionState(e,O)),{next:null,session:e}):{next:null,session:B.session}}if(B.resolvedInputs!==void 0)for(let e of B.resolvedInputs)t.instrumentation?.hooks!==void 0&&await publishInputResolutions({batch:e,hooks:t.instrumentation.hooks,sessionId:E.sessionId}),M&&await M(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(M&&B.rejectedActions)for(let e of B.rejectedActions)for(let t of e.results)await M(createActionResultEvent({rejected:!0,result:t,sequence:e.event.sequence,stepIndex:e.event.stepIndex,turnId:e.event.turnId}));let V=[];if(M&&hasStepInput(x)){k!==void 0&&prepareDynamicInstructionPreamble(k,B.session.history);try{let e=await preparePreambleTrace();O=await emitTurnPreamble(M,L??{},O,t.runtimeIdentity,e)}catch(e){if(V=k===void 0?[]:drainDynamicInstructionUserMessages(k),E={...B.session,history:[...B.session.history,...V]},!isDynamicModelSelectionError(e))throw e;return failModelSelection(e,{sessionStarted:!0,sequence:O.sequence,stepIndex:0,turnId:`turn_${O.sequence}`})}V=k===void 0?[]:drainDynamicInstructionUserMessages(k),T&&T.setAttribute(`eve.turn.id`,O.turnId)}let me=B.session.history.length;E=setHarnessEmissionState({...B.session,history:[...B.session.history,...V]},O);let H=[...B.messages.slice(0,me),...V,...B.messages.slice(me)],U=await applySessionLimitContinuation({config:t,emit:M,emissionState:O,limitContinuation:B.limitContinuation,session:E});if(U.result!==null)return U.result;if(E=U.session,t.persistentSubagentSessions===!0){let e=getAgentHandleStore(E.state);if(e?.handles.some(e=>e.phase===`addressed`)!==!0){let t=resolveAgentsAnnouncement({messages:H,store:e});t!==void 0&&H.push({content:t,role:`user`})}}if(I?.context!==void 0&&B.deferredContext!==!0)for(let e of I.context)H.push({content:e,role:`user`});let he=normalizeUserContent(I?.message);if(he!==void 0&&!B.deferredMessage&&!B.consumedMessage){let e=await stageAttachmentsToSandbox(he);H.push({content:e,role:`user`})}let W=k,G;try{W!==void 0&&t.dispatchDynamicModelEvent!==void 0&&await t.dispatchDynamicModelEvent({ctx:W,event:{data:{sequence:O.sequence,stepIndex:O.stepIndex,turnId:O.turnId},type:`step.started`},messages:H}),G=await resolveActiveRuntimeModel({config:t,ctx:W,session:E})}catch(e){return failModelSelection(e,O)}E=G.session;let K=G.model;M&&await emitStepStarted(M,O,requireSessionModelReference(E).id,H);let ge=detectPromptCachePath(K),q=ge.kind===`anthropic-direct`?getAnthropicCacheMarker():void 0,_e=buildGatewayAttributionHeaders(K,t.runtimeIdentity);({messages:H,session:E}=await maybeCompact({abortSignal:t.abortSignal,emit:M,emissionState:O,messages:H,model:K,onCompaction:t.onCompaction,resolveModel:t.resolveModel,runtimeIdentity:t.runtimeIdentity,session:E,telemetry:enrichTelemetry(_,S)??void 0}));let ve=getApprovedTools(E),ye=E.outputSchema===void 0&&W!==void 0&&W.get(ParentSessionKey)===void 0&&(isScheduleAppAuth(W.get(AuthKey))||W.get(TurnTaskDeliveryKey)===!0),be=await hydrateSandboxAttachments(H),J=[],Y=[];for(let e of be)e.role===`system`?J.push(e):Y.push(e);if(W!==void 0){J.push(...buildDynamicInstructionMessages(W));let e=W.get(PendingSkillAnnouncementKey);e!==void 0&&e.length>0&&J.push({role:`system`,content:e})}ye&&J.push({role:`system`,content:CONDITIONAL_DELIVERY_INSTRUCTION});let X=Y,prepareModelCallInput=e=>{let t=e?[{role:`system`,content:e}]:[],n=E.agent.system?[{role:`system`,content:E.agent.system}]:[],r=J.length>0||t.length>0?[...t,...n,...J]:void 0,i=r!==void 0&&q?applySystemCacheBreakpoint(r,q):r,a=i===void 0?E.agent.system??void 0:mergeSystemInstructions(i);return{instructions:a,telemetryRuntimeContext:buildTelemetryRuntimeContext({eveVersion,authored:v,emissionState:O,environment,modelInput:{instructions:a,messages:X},providerResolvers:y,session:E})}},xe=t.tools,runSingleModelCall=async e=>{let{instructions:n,telemetryRuntimeContext:i={}}=e.preparedInput??prepareModelCallInput(e.extraSystemNote);e.retryReason&&(i[`eve.retry.reason`]=e.retryReason);let a=e.trailingUserNote?[...X,{role:`user`,content:e.trailingUserNote}]:X,o=buildHarnessToolsWithDynamicSubagents(t.tools,W),s=getAdvertisedTools({delegatedCaller:j,session:E,tools:o});xe=s;let c=await buildToolSetWithProviderTools({approvedTools:ve,capabilities:t.capabilities,disabledProviderTools:e.disabledProviderTools,modelReference:requireSessionModelReference(E),tools:s,webSearchProvider:t.webSearchProvider});if(W!==void 0){let n=getAdvertisedTools({delegatedCaller:j,session:E,tools:buildDynamicTools(W)}),r=buildToolSetFromDefinitions({approvedTools:ve,capabilities:t.capabilities,disabledProviderTools:e.disabledProviderTools,tools:n});for(let[e,t]of Object.entries(r)){if(s.get(e)?.runtimeAction!==void 0)throw Error(`Dynamic tool "${e}" collides with a runtime-visible subagent.`);c[e]=t}}E.outputSchema!==void 0&&(c[FINAL_OUTPUT_TOOL_NAME]=buildFinalOutputTool(E.outputSchema));let l=M===void 0?void 0:({tools:e})=>createWorkflowLifecycle({emit:M,emissionState:O,tools:e}),u=t.workflow===!0?{lifecycle:l,maxSubagents:t.workflowMaxSubagents}:void 0,d=await getAdvertisedTools({delegatedCaller:j,modelTools:c,session:E,tools:s,workflow:u});E=d.session;let f=d.modelTools,p=q?applyLastToolCacheBreakpoint(f,q):f,m=t.instrumentation?.hooks,h=activeTurnId(O),g=m===void 0?void 0:{attemptId:`${E.sessionId}:${h}:${O.stepIndex}:${e.attemptIndex}`,attemptIndex:e.attemptIndex,functionId:_?.functionId??S,rootSessionId:A?.rootSessionId??E.sessionId,sessionId:E.sessionId,stepIndex:O.stepIndex,turnId:h};fe=g;let ee=g===void 0||m===void 0?void 0:createAiSdkHookBridge(g,m,t.instrumentation?.runInContext,i),v=buildStepHooks({cachePath:ge,emit:M,emissionState:O,emitStepStarted:e.suppressStepStartedEmission!==!0,marker:q,session:E}),y=new ToolLoopAgent({headers:_e,instructions:n,model:K,onToolExecutionEnd:logToolExecutionError,onError(e){summarizeKnownError(e.error)?.tags.includes(`config`)!==!0&&logError(log,`tool-loop stream error`,e.error)},onStepFinish:v.onStepFinish,prepareStep:v.prepareStep,reasoning:E.agent.reasoning,runtimeContext:i,stopWhen:isStepCount(1),telemetry:enrichTelemetry(_,S,i,ee),toolApproval:buildToolApproval(f),toolChoice:hasPendingApprovalBatch(E)?`none`:void 0,tools:p}),executeModelCall=async()=>{if(M){let e=[...t.tools].filter(([e,t])=>t.runtimeAction!==void 0&&s.get(e)===void 0).map(([e])=>e),n=new Set([ASK_QUESTION_TOOL_NAME,FINAL_OUTPUT_TOOL_NAME,...e]),r=await y.stream({abortSignal:t.abortSignal,messages:a}),{emittedActionCallIds:i,handledInlineToolResultCallIds:o,invalidInputToolCallIds:c,inlineAuthorizationResults:l,trailingInlineToolResultParts:u}=await emitStreamContent(M,O,r.fullStream,{excludedActionToolNames:n,tools:s});throwIfTurnAborted(t.abortSignal);let[d,f]=await Promise.all([v.stepResult,r.responseMessages]);if(isEmptyModelResponse(d)&&extractToolResultCallIds(f).size===0&&l.length===0&&u.length===0)throw new EmptyModelResponseError;await emitStepActions(M,O,d,{emittedActionCallIds:i,excludedActionCallIds:c,excludedActionToolNames:n,handledInlineToolResultCallIds:o,tools:s});let p=d.toolResults,m=new Map(p.map(e=>[e.toolCallId,e]));for(let e of l)m.set(e.toolCallId,e);return withAccumulatedResponseMessages({invalidInputToolCallIds:c,responseMessages:appendMissingToolResultMessages({append:u,responseMessages:f}),stepResult:d,toolResults:[...m.values()]})}let e=await y.generate({abortSignal:t.abortSignal,messages:a});throwIfTurnAborted(t.abortSignal);let n=await v.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 g!==void 0&&await m?.publish({idempotencyKey:attemptIdempotencyKey(g),scope:g,type:`step.attempt.completed`}),e}catch(e){return g!==void 0&&await m?.publish({error:e,idempotencyKey:attemptIdempotencyKey(g),scope:g,type:`step.attempt.failed`}),rethrowNoOutputAsEmptyResponse(e)}},Se=0,runOneModelCall=async e=>runModelCallWithRetries(t=>runSingleModelCall({...e,attemptIndex:Se++,preparedInput:t===1?e.preparedInput:void 0,suppressStepStartedEmission:t!==1||e.suppressStepStartedEmission}),{sessionId:E.sessionId,turnId:O.turnId},t.abortSignal),Ce=prepareModelCallInput(),we=await continuePendingWorkflowInterrupt({childResults:I?.runtimeActionResults,config:t,emit:M,emissionState:O,runStep,session:E,tools:buildHarnessToolsWithDynamicSubagents(t.tools,W)});if(we!==null)return we;let Te=await enforceSessionTokenLimit({config:t,emit:M,emissionState:O,messages:H,session:E});if(Te!==null)return Te;let Z;try{Z=await runOneModelCall({preparedInput:Ce,suppressStepStartedEmission:!0})}catch(n){throwIfTurnAborted(t.abortSignal);let r=await runModelCallRecoveryPipeline({error:n,stages:[e=>attemptUnsupportedProviderToolRecovery({error:e.error,runOneModelCall,sessionId:E.sessionId,turnId:O.turnId}),e=>attemptEmptyResponseRecovery({emptyDeliveryEnabled:ye,error:e.error,retryCallOptions:e.retryCallOptions,runOneModelCall,sessionId:E.sessionId,turnId:O.turnId})]});if(throwIfTurnAborted(t.abortSignal),r.outcome===`recovered`)Z=r.result;else{let n=r.error;if(T&&recordErrorOnSpan(T,n),!M)throw n;let a=extractWorkflowStreamWriteErrorDetails(n);if(a!==null){let t=createErrorId();return log.error(`workflow stream write failed — parking session for retry by the user`,{...a,errorId:t,error:n,sessionId:E.sessionId,turnId:O.turnId}),O=await emitRecoverableFailedTurn(M,O,{code:`WORKFLOW_STREAM_WRITE_FAILED`,continuationToken:E.continuationToken,details:{...a,errorId:t},message:toErrorMessage(n)}),{next:null,session:setHarnessEmissionState(E,O)}}let o=classifyModelCallError(n),s=createErrorId(),c=summarizeKnownError(n),l=c===null?extractUpstreamRejectionMessage(n):null,u=c?.message??l?.message??toErrorMessage(n),d=c?.hint===void 0?u:`${u} ${c.hint}`,f=extractModelCallErrorDetails(n),m=buildModelCallFailureDetails({catalogSummary:c,error:n,errorId:s,modelCallDetails:f,upstreamRejection:l}),h=buildModelCallFailureLogFields({error:n,errorId:s,modelCallDetails:f,recognized:c!==null||l!==null,sessionId:E.sessionId,turnId:O.turnId});if(o===`terminal`)return c===null?log.error(l?.message??`model call failed terminally`,h):log.error(`${c.name}: ${c.message}`,{errorId:s,hint:c.hint,sessionId:E.sessionId,turnId:O.turnId}),await emitFailedStep(M,O,{code:`MODEL_CALL_FAILED`,details:m,message:u,sessionId:E.sessionId}),{next:t.mode===`task`||le?{done:!0,isError:!0,output:d}:{done:!0,output:``},session:E};if(t.mode===`task`){if(o===`recoverable`&&!(n instanceof EmptyModelResponseError))throw log.warn(l?.message??`model call failed recoverably in task mode — rethrowing for durable step retry`,h),n;return log.error(l?.message??`model call failed; failing the task run`,h),await emitFailedStep(M,O,{code:`MODEL_CALL_FAILED`,details:m,message:u,sessionId:E.sessionId}),{next:{done:!0,isError:!0,output:d},session:E}}log.error(l?.message??`model call failed — parking session for retry by the user`,h),O=await emitRecoverableFailedTurn(M,O,{code:`MODEL_CALL_FAILED`,continuationToken:E.continuationToken,details:m,message:u});let g={isError:!0,output:d};return{next:null,session:setHarnessEmissionState(E,O),settledTurn:g}}}let Q=accumulateTurnUsage({previous:getTurnUsageState(E.state),turnId:O.turnId,usage:extractTokenUsageDelta({costUsd:extractGatewayCostUsd(Z.providerMetadata),usage:Z.usage})});E=setTurnUsageState(E,Q);let $;try{$=formatLanguageModelGatewayId(K)}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:M,emissionState:O,delegatedCaller:j,promptMessages:H,result:Z,runStep,session:E,runtimeActionTools:xe})}return runStep}function isValidSpanContext(e){return/^[0-9a-f]{32}$/u.test(e.traceId)&&e.traceId!==`00000000000000000000000000000000`&&/^[0-9a-f]{16}$/u.test(e.spanId)&&e.spanId!==`0000000000000000`}function extractTokenUsageDelta(e){let t=e.usage;if(!(t===void 0&&e.costUsd===void 0))return{cacheReadTokens:t?.inputTokenDetails?.cacheReadTokens,cacheWriteTokens:t?.inputTokenDetails?.cacheWriteTokens,costUsd:e.costUsd,inputTokens:t?.inputTokens,outputTokens:t?.outputTokens}}function extractGatewayCostUsd(e){let t=readGatewayMetadata(e)?.cost;if(typeof t==`number`&&Number.isFinite(t))return t;if(typeof t==`string`){let e=Number(t);return Number.isFinite(e)?e:void 0}}function readGatewayMetadata(e){let t=e?.gateway;return t&&typeof t==`object`&&!Array.isArray(t)?t:void 0}function buildModelCallFailureDetails(e){let{catalogSummary:t,error:r,errorId:i,modelCallDetails:a,upstreamRejection:o}=e;if(t!==null){let e={errorId:i,message:t.message,name:t.name,semanticErrorId:t.id,...a};return t.hint!==void 0&&(e.hint=t.hint),e}return o===null?{...formatError(r,i),...a}:{errorId:i,message:toErrorMessage(r),name:o.name,...a}}function buildModelCallFailureLogFields(e){let t={errorId:e.errorId,sessionId:e.sessionId,turnId:e.turnId};return e.recognized?{...t,details:e.modelCallDetails}:{...t,error:e.error}}async function runModelCallRecoveryPipeline(e){let t=e.error,n;for(let r of e.stages){let e=await r({error:t,retryCallOptions:n});if(e.outcome===`recovered`)return e;e.outcome===`failed`&&(t=e.error,n=e.retryCallOptions)}return{outcome:`failed`,error:t}}function withAccumulatedResponseMessages(e){let{stepResult:t}=e;return{content:t.content,finishReason:t.finishReason,...e.invalidInputToolCallIds===void 0?{}:{invalidInputToolCallIds:e.invalidInputToolCallIds},providerMetadata:t.providerMetadata,response:{...t.response,messages:[...e.responseMessages]},text:t.text,toolCalls:t.toolCalls,toolResults:e.toolResults===void 0?t.toolResults:[...e.toolResults],usage:t.usage}}function appendMissingToolResultMessages(e){let t=extractToolResultCallIds(e.responseMessages),n=e.append.filter(e=>!t.has(e.toolCallId));return[...e.responseMessages,...n.length>0?[{role:`tool`,content:[...n]}]:[]]}function getInvalidToolCallInputErrors(e){let t=[];for(let n of e.toolCalls){if(n.toolName===FINAL_OUTPUT_TOOL_NAME)continue;let e=getInvalidToolCallInputError({toolCall:n});e!==void 0&&t.push(e)}return t}function extractToolResultCallIds(e){let t=new Set;for(let n of e)if(Array.isArray(n.content))for(let e of n.content)typeof e==`object`&&e&&e.type===`tool-result`&&t.add(e.toolCallId);return t}async function attemptUnsupportedProviderToolRecovery(e){let t=extractUnsupportedProviderToolTypes(e.error);if(t.length===0)return{outcome:`skipped`};let n=[];for(let e of t){let t=resolveFrameworkToolFromUpstreamType(e);t!==null&&!n.includes(t)&&n.push(t)}if(n.length===0)return{outcome:`skipped`};log.warn(`disabling unsupported provider tool(s); retrying step once`,{disabled:n,sessionId:e.sessionId,turnId:e.turnId,upstreamTypes:t});let r={disabledProviderTools:new Set(n),extraSystemNote:buildDisabledToolNote(n)};try{return{outcome:`recovered`,result:await e.runOneModelCall({...r,suppressStepStartedEmission:!0})}}catch(e){return{outcome:`failed`,error:e,retryCallOptions:r}}}function buildDisabledToolNote(e){let t=e.join(`, `);return`The following ${e.length===1?`tool is`:`tools are`} not available with the current model and has been removed: ${t}. Proceed using the remaining tools or your training knowledge.`}function isEmptyModelResponse(e){return e.toolCalls.length===0&&e.toolResults.length===0&&resolveAssistantStepText(e.response.messages,e.text)===null}function rethrowNoOutputAsEmptyResponse(e){throw isNoOutputGeneratedError(e)?new EmptyModelResponseError({cause:e}):e}const EMPTY_RESPONSE_NUDGE=`Your previous reply was empty and was not delivered. Answer now from the tool results above; do not re-run tools or mention this notice.`;function buildEmptyResponseNudge(e){return e?`${EMPTY_RESPONSE_NUDGE} If the current task explicitly requires conditional delivery and there is nothing to report, reply with exactly ${EMPTY_DELIVERY_SENTINEL}.`:EMPTY_RESPONSE_NUDGE}async function attemptEmptyResponseRecovery(e){if(!(e.error instanceof EmptyModelResponseError))return{outcome:`skipped`};log.warn(`empty model response; reissuing the model call once`,{sessionId:e.sessionId,turnId:e.turnId});try{return{outcome:`recovered`,result:await e.runOneModelCall({...e.retryCallOptions,retryReason:`empty-response`,suppressStepStartedEmission:!0,trailingUserNote:buildEmptyResponseNudge(e.emptyDeliveryEnabled)})}}catch(t){return{outcome:`failed`,error:t,retryCallOptions:e.retryCallOptions}}}async function handleStepResult(e){let{config:t,emit:n,promptMessages:r,result:i,runStep:a}=e,{emissionState:o,session:s}=e,c=resolveAssistantStepText(i.response.messages,i.text),l=i.finishReason!==`tool-calls`&&i.toolCalls.length===0&&hasEmptyDeliverySentinel(c),u=getInvalidToolCallInputErrors({toolCalls:i.toolCalls}),d=new Set([...i.invalidInputToolCallIds??[],...i.toolCalls.filter(isInvalidToolCall).map(e=>e.toolCallId),...u.map(e=>e.toolCallId)]),f=l?[]:appendMissingToolResultMessages({append:u.map(e=>createToolResultMessagePartFromToolError(e)),responseMessages:i.response.messages}),p=l?null:c,m=new Set;for(let e of[...i.content??[],...i.toolResults??[]])(e.type===`tool-result`||e.type===`tool-error`)&&e.providerExecuted===!0&&m.add(e.toolCallId);let h=normalizeProviderToolHistory({messages:f,providerExecutedOutcomeIds:m}),g=h.messages,v={...s,compaction:createNextCompactionConfig(s.compaction,r,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:o,interrupt:e,promptMessages:r,responseMessages:g})}}let b=extractToolApprovalInputRequests({content:i.content??[],excludedCallIds:d}),te=new Set(b.map(e=>e.action.callId)),ne=extractQuestionInputRequests({toolCalls:i.toolCalls,excludedCallIds:new Set([...d,...te])}),S=[...b,...ne],C=renderPendingApprovalsSnippet(b),w=[...r,...C===void 0?[]:[{content:C,role:`user`}]],re=getAdvertisedTools({delegatedCaller:e.delegatedCaller,session:v,tools:e.runtimeActionTools}),T=(i.toolCalls??[]).filter(e=>!d.has(e.toolCallId)).filter(t=>e.runtimeActionTools.get(t.toolName)?.runtimeAction!==void 0).filter(e=>re.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:re}));if(T.length>0){if(S.length===0)return{next:null,session:setHarnessEmissionState(setPendingRuntimeActionBatch({actions:T,event:{sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId},responseMessages:g,session:{...v,history:[...r]}}),advanceStep(o))};let e=setPendingRuntimeActionBatch({actions:T,event:{sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId},responseMessages:g,session:{...v,history:w}});return e=appendPendingInputBatch({event:{sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId},requests:S,responseMessages:[],session:e}),n&&await n(createInputRequestedEvent({requests:S,sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId})),{next:null,session:setHarnessEmissionState(e,advanceStep(o))}}if(S.length>0){let e=buildResponseAuthorizationTools({authoredTools:t.tools,context:contextStorage.getStore()}),r=appendPendingInputBatch({event:{sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.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:g,session:{...v,history:w}});return n&&(await n(createInputRequestedEvent({requests:S,sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId})),t.mode===`conversation`&&(o=await emitTurnEpilogue(n,o,t.mode),r=setHarnessEmissionState(r,o))),{next:hasDeferredStepInput(r)?a:null,session:r}}let ie=findAuthorizationSignalFromToolResults(i.toolResults);if(ie){let{challenges:e}=ie;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:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId}));for(let t of e)await n(createAuthorizationRequiredEvent({attemptId:t.attemptId,authorization:t.challenge,name:t.name,description:t.challenge.instructions??`Authorization required for ${t.name}`,webhookUrl:t.hookUrl,sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId}));t.mode===`conversation`&&(o=await emitTurnEpilogue(n,o,t.mode))}return{next:null,session:setHarnessEmissionState({...v,history:[...r],state:setPendingAuthorization(v.state,{challenges:e})},o)}}let ae=g,oe=[...r,...ae],D={...v,history:oe};return!(D.outputSchema!==void 0&&extractFinalOutput(i)!==void 0)&&(ae.at(-1)?.role===`tool`||h.outcomeEndsResponse||hasDeferredStepInput(D))?(n&&(o=advanceStep(o),D=setHarnessEmissionState(D,o)),{next:a,session:D}):t.mode===`task`?finishTaskTurn({emissionState:o,emit:n,history:r,result:i,schema:D.outputSchema,session:D,stepOutput:p}):finishConversationTurn({emissionState:o,emit:n,history:r,result:i,schema:D.outputSchema,session:D,stepOutput:p})}const OUTPUT_SCHEMA_NOT_FULFILLED={code:`OUTPUT_SCHEMA_NOT_FULFILLED`,message:`The agent could not produce a result matching the requested schema.`};function extractFinalOutput(e){return(e.toolCalls??[]).find(e=>e.toolName===FINAL_OUTPUT_TOOL_NAME&&!isInvalidToolCall(e))?.input}function persistStructuredAssistantTurn(e,t,n){return{...e,history:[...t,{content:JSON.stringify(n),role:`assistant`}],outputSchema:void 0}}async function emitStructuredResult(e,t,n,r){return await e(createResultCompletedEvent({result:n,sequence:t.sequence,stepIndex:t.stepIndex,turnId:t.turnId})),emitTurnEpilogue(e,t,r)}async function finishTaskTurn(e){let{emit:t,history:n,result:r,schema:i,stepOutput:a}=e,{emissionState:o,session:s}=e;if(i===void 0)return t&&(o=await emitTurnEpilogue(t,o,`task`),s=setHarnessEmissionState(s,o)),{next:{done:!0,output:a??``},session:s};let c=extractFinalOutput(r);return c===void 0?(t&&await emitFailedStep(t,o,{...OUTPUT_SCHEMA_NOT_FULFILLED,sessionId:s.sessionId}),{next:{done:!0,isError:!0,output:OUTPUT_SCHEMA_NOT_FULFILLED.message},session:s}):(s=persistStructuredAssistantTurn(s,n,c),t&&(o=await emitStructuredResult(t,o,c,`task`),s=setHarnessEmissionState(s,o)),{next:{done:!0,output:c},session:s})}async function finishConversationTurn(e){let{emit:t,history:n,result:r,schema:i,stepOutput:a}=e,{emissionState:o,session:s}=e;if(i===void 0)return t&&(o=await emitTurnEpilogue(t,o,`conversation`),s=setHarnessEmissionState(s,o)),{next:null,session:s,settledTurn:{output:a??``}};let c=extractFinalOutput(r);if(c===void 0){t&&(o=await emitRecoverableFailedTurn(t,o,{...OUTPUT_SCHEMA_NOT_FULFILLED,continuationToken:s.continuationToken}),s=setHarnessEmissionState(s,o));let e={isError:!0,output:OUTPUT_SCHEMA_NOT_FULFILLED.message};return{next:null,session:s,settledTurn:e}}return s=persistStructuredAssistantTurn(s,n,c),t&&(o=await emitStructuredResult(t,o,c,`conversation`),s=setHarnessEmissionState(s,o)),{next:null,session:s,settledTurn:{output:c}}}async function continuePendingWorkflowInterrupt(e){let t=getPendingWorkflowInterrupt(e.session.state);if(t===void 0)return null;let n=t.interrupt;if(!isWorkflowRuntimeActionInterrupt(n))throw Error(`Unsupported Workflow interrupt kind "${n.payload.kind}".`);let i=e.emit===void 0?void 0:createWorkflowLifecycle({emit:e.emit,emissionState:e.emissionState,skipReplayed:!0,tools:e.tools}),a=getWorkflowContinuationSecurity(e.session),o;try{let t=buildWorkflowHostTools({tools:e.tools}),r=e.childResults??[],s=n,c=0;for(;;){o=await continueWorkflowSandboxInterrupt({bridgeRequestLimit:resolveWorkflowSandboxBridgeRequestLimit(e.config.workflowMaxSubagents),continuationSecurity:a,interrupt:s,lifecycle:i,resolution:r[c]?.output,tools:t});let n=await unwrapWorkflowSandboxResult(o,a);if(n.status!==`interrupted`||!isWorkflowRuntimeActionInterrupt(n.interrupt)||c+1>=r.length)break;let l=getWorkflowRuntimeActionInterrupts(n.interrupt)[0];if(l===void 0)throw Error(`Workflow continuation contains no pending runtime-action interrupt.`);c++,s=l}}catch(e){logError(log,`Workflow interrupt continuation failed`,e),o={error:`workflow_continuation_failed`,message:toErrorMessage(e),retryable:!1}}let s=await unwrapWorkflowSandboxResult(o,a),c=s.status===`interrupted`?s.interrupt:s.output,l=replaceWorkflowToolResult([...e.session.history,...t.responseMessages],n.outerToolCallId,c),u=clearPendingWorkflowInterrupt({...e.session,history:l});if(s.status===`interrupted`){if(!isWorkflowRuntimeActionInterrupt(s.interrupt))throw Error(`Unsupported Workflow interrupt kind "${s.interrupt.payload.kind}".`);let t=e.session.history.length,n=l.slice(0,t),r=l.slice(t);return u={...u,history:n},parkOnWorkflowInterrupt({baseSession:u,emissionState:e.emissionState,interrupt:s.interrupt,promptMessages:n,responseMessages:r})}return{next:e.runStep,session:u}}function replaceWorkflowToolResult(e,t,n){if(t===void 0)return[...e];let r=typeof n==`string`?{type:`text`,value:n}:{type:`json`,value:n};return e.map(e=>{if(e.role!==`tool`)return e;let n=e.content.map(e=>e.type!==`tool-result`||e.toolCallId!==t?e:{...e,output:r});return{...e,content:n}})}function parkOnWorkflowInterrupt(e){let t=getWorkflowRuntimeActionInterrupts(e.interrupt)[0];if(t===void 0)throw Error(`Workflow continuation contains no pending runtime-action interrupt.`);let n={...e.baseSession,history:[...e.promptMessages]};return{next:null,session:setHarnessEmissionState(setPendingWorkflowInterrupt({interrupt:t,responseMessages:e.responseMessages,session:n}),e.emissionState)}}function createNextCompactionConfig(e,t,n){let r={recentWindowSize:e.recentWindowSize,threshold:e.threshold,thresholdPercent:e.thresholdPercent};return n.usage?.inputTokens!==void 0&&(r.lastKnownInputTokens=n.usage.inputTokens,r.lastKnownPromptMessageCount=t.length),r}async function maybeCompact(e){let{emit:t,emissionState:n}=e,r=e.messages,i=e.session;if(e.force!==!0&&!shouldCompact(r,i.compaction))return{messages:r,session:i};let a=await resolveCompactionModel({compactionModelReference:i.agent.compactionModelReference,model:e.model,modelReference:requireSessionModelReference(i),resolveModel:e.resolveModel});if(t&&await t(createCompactionRequestedEvent({modelId:formatLanguageModelGatewayId(a.model),sequence:n.sequence,sessionId:i.sessionId,turnId:n.turnId,usageInputTokens:getInputTokenCount(r,i.compaction)})),r=await compactMessages(r,a.model,i.compaction,a.providerOptions,e.telemetry,buildGatewayAttributionHeaders(a.model,e.runtimeIdentity),e.abortSignal,e.force===!0),e.onCompaction)for(let t of e.onCompaction())r.push(t);return t&&await t(createCompactionCompletedEvent({modelId:formatLanguageModelGatewayId(a.model),sequence:n.sequence,sessionId:i.sessionId,turnId:n.turnId})),{messages:r,session:i}}function resolveApprovalKeyFromTools(e){return t=>{let n=e.get(t.action.toolName);if(n?.approvalKey!==void 0)return n.approvalKey(t.action.input)}}async function runModelCallWithRetries(e,t,n){for(let r=1;;r++){throwIfTurnAborted(n);try{return await e(r)}catch(e){if(throwIfTurnAborted(n),r===3||classifyModelCallError(e)!==`retry`)throw e;let i=500*2**(r-1)+Math.floor(Math.random()*250);log.warn(`model call failed transiently — retrying`,{attempt:r,delayMs:i,sessionId:t.sessionId,turnId:t.turnId,error:e}),await new Promise(e=>setTimeout(e,i))}}}function findAuthorizationSignalFromToolResults(e){let t=contextStorage.getStore();if(t!==void 0)for(let n of e??[]){let e=readToolInterrupt(t,n.toolCallId);if(e!==void 0&&isAuthorizationSignal(e))return e}for(let t of e??[])if(isAuthorizationSignal(t.output))return t.output}export{appendMissingToolResultMessages,createToolLoopHarness};
3
+ `)};return t!==void 0&&(n.providerOptions=t),n}function buildGatewayAttributionHeaders(e,t){let n=resolveProviderHeaders(e);if(n===void 0)return;let r=t?.agentName??t?.agentId,i=process.env.VERCEL_PROJECT_PRODUCTION_URL||process.env.VERCEL_URL,a=i?`https://${i}`:void 0,o={...n};return r&&(o[`x-title`]=r),a&&(o[`http-referer`]=a),o}async function resolveActiveRuntimeModel(e){if(e.ctx===void 0){let t=e.session.agent.modelReference;if(t===void 0)throw Error(`Dynamic model selection is unavailable outside an eve runtime context.`);return{model:await e.config.resolveModel(t),session:e.session}}let t=getActiveDynamicModelSelection(e.ctx);if(t===null){let t=e.session.agent.modelReference;if(e.session.agent.dynamicModel===!0||t===void 0)throw Error(`Dynamic model selection is required before model-dependent work begins. Add a matching resolver handler that returns a concrete model.`);return{model:await e.config.resolveModel(t),session:e.session}}return{model:t.model===void 0?await e.config.resolveModel(t.reference):t.model,session:updateSessionModelReference(e.session,t.reference)}}function updateSessionModelReference(e,t){return{...e,agent:{...e.agent,modelReference:t},compaction:updateCompactionThresholdForModelReference({compaction:e.compaction,modelReference:t})}}function updateCompactionThresholdForModelReference(e){return e.modelReference.contextWindowTokens===void 0?e.compaction:{...e.compaction,threshold:Math.max(1,Math.floor(e.modelReference.contextWindowTokens*(e.compaction.thresholdPercent??.9)))}}const TURN_TRACE_STATE_KEY=`eve.harness.turnTrace`;function getTurnTraceState(e){return e.state?.[TURN_TRACE_STATE_KEY]}function setTurnTraceState(e,t){let n={traceId:t.traceId,spanId:t.spanId,traceFlags:t.traceFlags};return{...e,state:{...e.state,[TURN_TRACE_STATE_KEY]:n}}}function resolveStepOtelContext(e,t,n){if(t)return trace.setSpan(context.active(),t);if(e){let e=getTurnTraceState(n);if(e){let t=trace.wrapSpanContext({isRemote:!0,traceId:e.traceId,spanId:e.spanId,traceFlags:e.traceFlags});return trace.setSpan(context.active(),t)}}}function buildHarnessToolsWithDynamicSubagents(e,t){let n=new Map(e);if(t===void 0)return n;for(let e of buildDynamicSubagentTools(t)){if(n.has(e.name))throw Error(`Dynamic subagent "${e.name}" collides with another runtime-visible tool name.`);n.set(e.name,e)}return n}function createToolLoopHarness(t){let n=t.handleEvent,p=getInstrumentationRuntime(),v=p?.otelSettings,b=getInstrumentationConfig(),x=p?.runtimeContextResolvers;v!==void 0&&ensureOtelIntegration();let C=v===void 0?void 0:trace.getTracer(`eve`),T=t.runtimeIdentity?.agentName;async function runStep(e,t){let n;if(C&&hasStepInput(t)){let t=v?.functionId??T,r={"eve.version":eveVersion,"eve.environment":environment,"eve.session.id":e.sessionId};t&&(r[`ai.telemetry.functionId`]=t),n=C.startSpan(`ai.eve.turn`,{attributes:r})}let r=resolveStepOtelContext(C,n,e),executeStep=()=>executeStepBody(e,t,n);try{return r?await context.with(r,executeStep):await executeStep()}finally{n?.end()}}async function executeStepBody(p,C,D){let k=p,ae=createHistoryViewPreparer({previous:t.historyView,projector:t.historyProjector});ae(k.history,k.state);let projectHistory=(e,t)=>ae(e,t).messages;D&&(k=setTurnTraceState(k,D.spanContext()));let A=getHarnessEmissionState(k.state),j=contextStorage.getStore(),M=j?.get(ChannelInstrumentationKey),N=j?.get(ParentSessionKey),oe=j?.get(ChannelKey),se=j?.get(SessionCallbackKey),ce=N!==void 0||se!==void 0,P=(se?.taskId!==void 0||readTaskIdFromInboxToken(String(oe?.state?.parentContinuationToken??``))!==void 0)&&t.tools.has(TASK_UPDATE_TOOL_NAME),le=resolveParentLineage(N,oe),ue=j?.get(ParentTraceContextKey),de,F=createInstrumentationHandleEvent({agentName:t.runtimeIdentity?.agentName,channelAudience:normalizeChannelAudience(M?.metadata.audience),channelKind:M?.kind,getAttemptScope:()=>de,handleEvent:n,hooks:t.instrumentation?.hooks,parentLineage:le,parentTraceContext:ue,rootSessionId:N?.rootSessionId,sessionId:k.sessionId,turnId:activeTurnId(A)}),failModelSelection=async(n,r)=>{if(throwIfTurnAborted(t.abortSignal),D&&recordErrorOnSpan(D,n),!F)throw n;let a=createErrorId(),o=toErrorMessage(n);return log.error(`model selection failed terminally`,{error:n,errorId:a,sessionId:k.sessionId,turnId:r.turnId}),await emitFailedStep(F,r,{code:`MODEL_SELECTION_FAILED`,details:{errorId:a},message:o,sessionId:k.sessionId}),{next:t.mode===`task`||ce?{done:!0,isError:!0,output:o}:{done:!0,output:``},session:k}},preparePreambleTrace=async()=>{let e=D?.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:normalizeChannelAudience(M?.metadata.audience),instrumentation:t.instrumentation,parentLineage:le,parentTraceContext:ue,rootSessionId:N?.rootSessionId??k.rootSessionId??k.sessionId,sequence:A.sequence,sessionId:k.sessionId,sessionStarted:A.sessionStarted,traceContext:n,turnId:`turn_${A.sequence}`})};if(t.clearOnly===!0)return k={...k,compaction:{recentWindowSize:k.compaction.recentWindowSize,threshold:k.compaction.threshold,thresholdPercent:k.compaction.thresholdPercent},history:[]},await F?.(createContextClearedEvent({sequence:A.sequence,sessionId:k.sessionId,turnId:activeTurnId(A)})),await F?.(createSessionWaitingEvent()),{next:null,session:k};if(t.compactOnly===!0){if(k.history.length>0)try{let e=await resolveActiveRuntimeModel({config:t,ctx:contextStorage.getStore(),session:k});k=e.session;let n=await maybeCompact({abortSignal:t.abortSignal,emit:F,emissionState:{...A,turnId:activeTurnId(A)},force:!0,messages:[...projectHistory(k.history,k.state)],model:e.model,onCompaction:t.onCompaction,resolveModel:t.resolveModel,runtimeIdentity:t.runtimeIdentity,session:k,telemetry:enrichTelemetry(v,T)??void 0});k={...n.session,compaction:{recentWindowSize:n.session.compaction.recentWindowSize,threshold:n.session.compaction.threshold,thresholdPercent:n.session.compaction.thresholdPercent},history:n.messages}}catch(e){logError(log,`manual session compaction failed`,e,{sessionId:k.sessionId})}return await F?.(createSessionWaitingEvent()),{next:null,session:k}}let I=consumeDeferredStepInput({input:C,preferCurrentInput:t.mode!==`conversation`&&C!==void 0&&hasPendingApprovalBatch(k),session:k});k=I.session;let L=await resolvePendingRuntimeActions({emit:F,session:k,stepInput:I.input});if(L.outcome===`unresolved`)return{next:null,session:L.session};k=L.session;let fe=getPendingInputRequestIds(k.state),pe=convertStaleResponsesToUserMessage({history:L.messages,pendingRequestIds:fe,stepInput:dropStaleSessionLimitContinuationResponses({pendingRequestIds:fe,stepInput:I.input})}),R=pe.stepInput,me=pe.kind===`converted`?{...R,message:pe.displayMessage}:R,he=contextStorage.getStore();he!==void 0&&t.resolveStepDynamicTools!==void 0&&shouldPrepareApprovalPolicyTools({session:k,stepInput:R})&&await t.resolveStepDynamicTools({ctx:he,event:createStepStartedEvent({modelId:k.agent.modelReference?.id??`dynamic`,sequence:A.sequence,stepIndex:A.stepIndex,turnId:A.turnId}),messages:projectHistory(L.messages,k.state)});let z=await coordinateApprovalDelivery({session:k,stepInput:R,tools:buildResponseAuthorizationTools({authoredTools:t.tools,context:he})});if(k=z.session,F){for(let e of z.feedback)await F(createMessageCompletedEvent({message:e,sequence:A.sequence,stepIndex:A.stepIndex,turnId:A.turnId}));let e=getApprovalAuditState(k.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:A.sequence,stepIndex:A.stepIndex,turnId:A.turnId})),k={...k,state:markApprovalCandidatePendingEventEmitted({candidateId:t.candidateId,state:k.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:A.sequence,stepIndex:A.stepIndex,turnId:A.turnId})),k={...k,state:markApprovalCandidateHistoryEventEmitted({candidateId:t.candidateId,state:k.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:A.sequence,stepIndex:A.stepIndex,turnId:A.turnId})),k={...k,state:markApprovalSettlementEventEmitted({requestId:t.requestId,state:k.state})}}if(z.kind===`park`)return{next:null,session:k};if(z.kind===`continue-coordination`)return{next:runStep,session:z.stepInput===void 0?k:queueDeferredStepInput(k,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:A.sequence,stepIndex:A.stepIndex,turnId:A.turnId,webhookUrl:e.hookUrl}));let e=z.stepInput===void 0?k:queueDeferredStepInput(k,z.stepInput);return{next:null,session:{...e,state:setPendingAuthorization(e.state,{challenges:z.challenges})}}}let B=resolvePendingInput({deferMessagesWhileApprovalsPending:t.mode!==`conversation`,history:L.messages,resolveApprovalKey:resolveApprovalKeyFromTools(t.tools),session:k,stepInput:z.stepInput});if(B.outcome===`unresolved`){let e=L.outcome===`resolved`?{...B.session,history:[...L.messages]}:B.session;if(F&&t.mode===`conversation`&&B.deferredMessage===!0&&hasStepInput(C)){j!==void 0&&prepareDynamicInstructionPreamble(j,projectHistory(e.history,e.state));let n=[];try{let e=await preparePreambleTrace();A=await emitTurnPreamble(F,me??{},A,t.runtimeIdentity,e)}catch(t){if(n=j===void 0?[]:drainDynamicInstructionUserMessages(j),e={...e,history:[...e.history,...n]},k=e,!isDynamicModelSelectionError(t))throw t;return failModelSelection(t,{sessionStarted:!0,sequence:A.sequence,stepIndex:0,turnId:`turn_${A.sequence}`})}return n=j===void 0?[]:drainDynamicInstructionUserMessages(j),e={...e,history:[...e.history,...n]},A=await emitTurnEpilogue(F,A,t.mode),{next:null,session:setHarnessEmissionState(e,A)}}return L.outcome===`resolved`?(F&&t.mode===`conversation`&&(A=await emitTurnEpilogue(F,A,t.mode),e=setHarnessEmissionState(e,A)),{next:null,session:e}):{next:null,session:B.session}}if(B.resolvedInputs!==void 0)for(let e of B.resolvedInputs)t.instrumentation?.hooks!==void 0&&await publishInputResolutions({batch:e,hooks:t.instrumentation.hooks,sessionId:k.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(F&&hasStepInput(C)){j!==void 0&&prepareDynamicInstructionPreamble(j,projectHistory(B.session.history,B.session.state));try{let e=await preparePreambleTrace();A=await emitTurnPreamble(F,me??{},A,t.runtimeIdentity,e)}catch(e){if(V=j===void 0?[]:drainDynamicInstructionUserMessages(j),k={...B.session,history:[...B.session.history,...V]},!isDynamicModelSelectionError(e))throw e;return failModelSelection(e,{sessionStarted:!0,sequence:A.sequence,stepIndex:0,turnId:`turn_${A.sequence}`})}V=j===void 0?[]:drainDynamicInstructionUserMessages(j),D&&D.setAttribute(`eve.turn.id`,A.turnId)}let ge=B.session.history.length;k=setHarnessEmissionState({...B.session,history:[...B.session.history,...V]},A);let H=[...B.messages.slice(0,ge),...V,...B.messages.slice(ge)],U=await applySessionLimitContinuation({config:t,emit:F,emissionState:A,limitContinuation:B.limitContinuation,session:k});if(U.result!==null)return U.result;if(k=U.session,t.persistentSubagentSessions===!0){let e=getAgentHandleStore(k.state);if(e?.handles.some(e=>e.phase===`addressed`)!==!0){let t=resolveAgentsAnnouncement({messages:projectHistory(H,k.state),store:e});t!==void 0&&H.push({content:t,role:`user`})}}if(R?.context!==void 0&&B.deferredContext!==!0)for(let e of R.context)H.push({content:e,role:`user`});let _e=normalizeUserContent(R?.message);if(_e!==void 0&&!B.deferredMessage&&!B.consumedMessage){let e=await stageAttachmentsToSandbox(_e);H.push({content:e,role:`user`})}let W=projectHistory(H,k.state),G=j,K;try{G!==void 0&&t.dispatchDynamicModelEvent!==void 0&&await t.dispatchDynamicModelEvent({ctx:G,event:{data:{sequence:A.sequence,stepIndex:A.stepIndex,turnId:A.turnId},type:`step.started`},messages:W}),K=await resolveActiveRuntimeModel({config:t,ctx:G,session:k})}catch(e){return failModelSelection(e,A)}k=K.session;let q=K.model,ve=detectPromptCachePath(q),J=ve.kind===`anthropic-direct`?getAnthropicCacheMarker():void 0,ye=buildGatewayAttributionHeaders(q,t.runtimeIdentity),Y=await maybeCompact({abortSignal:t.abortSignal,emit:F,emissionState:A,messages:[...W],model:q,onCompaction:t.onCompaction,resolveModel:t.resolveModel,runtimeIdentity:t.runtimeIdentity,session:k,telemetry:enrichTelemetry(v,T)??void 0});k=Y.session,Y.compacted&&(H=Y.messages),W=normalizeModelMessages(projectHistory(H,k.state)),F&&await emitStepStarted(F,A,requireSessionModelReference(k).id,W);let be=getApprovedTools(k),X=G?.get(TurnTaskDeliveryKey),xe=k.outputSchema===void 0&&G!==void 0&&G.get(ParentSessionKey)===void 0&&(isScheduleAppAuth(G.get(AuthKey))||X===`pending`||X===`settled`),Se=await hydrateSandboxAttachments(W),Z=[],Ce=[];for(let e of Se)e.role===`system`?Z.push(e):Ce.push(e);if(G!==void 0){Z.push(...buildDynamicInstructionMessages(G));let e=G.get(PendingSkillAnnouncementKey);e!==void 0&&e.length>0&&Z.push({role:`system`,content:e})}if(xe){let e=X===`pending`?TASK_DELIVERY_PENDING_INSTRUCTION:X===`settled`?TASK_DELIVERY_SETTLED_INSTRUCTION:CONDITIONAL_DELIVERY_INSTRUCTION;Z.push({role:`system`,content:e})}let we=Ce,prepareModelCallInput=e=>{let t=e?[{role:`system`,content:e}]:[],n=k.agent.system?[{role:`system`,content:k.agent.system}]:[],r=Z.length>0||t.length>0?[...t,...n,...Z]:void 0,i=r!==void 0&&J?applySystemCacheBreakpoint(r,J):r,a=i===void 0?k.agent.system??void 0:mergeSystemInstructions(i);return{instructions:a,telemetryRuntimeContext:buildTelemetryRuntimeContext({eveVersion,authored:b,emissionState:A,environment,modelInput:{instructions:a,messages:we},providerResolvers:x,session:k})}},Te=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?[...we,{role:`user`,content:e.trailingUserNote}]:we,s=buildHarnessToolsWithDynamicSubagents(t.tools,G),c=createBackgroundToolCallBatch(),l=getAdvertisedTools({delegatedCaller:P,session:k,tools:s});Te=l;let u=await buildToolSetWithProviderTools({approvedTools:be,backgroundBatch:c,capabilities:t.capabilities,disabledProviderTools:e.disabledProviderTools,modelReference:requireSessionModelReference(k),tools:l,webSearchProvider:t.webSearchProvider});if(G!==void 0){let n=getAdvertisedTools({delegatedCaller:P,session:k,tools:buildDynamicTools(G)}),r=buildToolSetFromDefinitions({approvedTools:be,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}}k.outputSchema!==void 0&&(u[FINAL_OUTPUT_TOOL_NAME]=buildFinalOutputTool(k.outputSchema));let d=F===void 0?void 0:({tools:e})=>createWorkflowLifecycle({emit:F,emissionState:A,tools:e}),f=t.workflow===!0?{lifecycle:d,maxSubagents:t.workflowMaxSubagents}:void 0,p=await getAdvertisedTools({delegatedCaller:P,modelTools:u,session:k,tools:l,workflow:f});k=p.session;let m=p.modelTools,h=J?applyLastToolCacheBreakpoint(m,J):m,g=t.instrumentation?.hooks,_=activeTurnId(A),y=g===void 0?void 0:{attemptId:`${k.sessionId}:${_}:${A.stepIndex}:${e.attemptIndex}`,attemptIndex:e.attemptIndex,channelAudience:normalizeChannelAudience(M?.metadata.audience),functionId:v?.functionId??T,rootSessionId:N?.rootSessionId??k.sessionId,sessionId:k.sessionId,stepIndex:A.stepIndex,turnId:_};de=y;let b=y===void 0||g===void 0?void 0:createAiSdkHookBridge(y,g,t.instrumentation?.runInContext,i),x=buildStepHooks({cachePath:ve,emit:F,emissionState:A,emitStepStarted:e.suppressStepStartedEmission!==!0,marker:J,session:k}),S=new ToolLoopAgent({headers:ye,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:x.onStepFinish,prepareStep:x.prepareStep,reasoning:k.agent.reasoning,runtimeContext:i,stopWhen:isStepCount(1),telemetry:enrichTelemetry(v,T,i,b),toolApproval:buildToolApproval(m),toolChoice:hasPendingApprovalBatch(k)?`none`:void 0,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 S.stream({abortSignal:t.abortSignal,messages:o}),{emittedActionCallIds:i,handledInlineToolResultCallIds:a,invalidInputToolCallIds:s,inlineAuthorizationResults:c,trailingInlineToolResultParts:u}=await emitStreamContent(F,A,r.fullStream,{excludedActionToolNames:n,tools:l});throwIfTurnAborted(t.abortSignal);let[d,f]=await Promise.all([x.stepResult,r.responseMessages]);if(isEmptyModelResponse(d)&&extractToolResultCallIds(f).size===0&&c.length===0&&u.length===0)throw new EmptyModelResponseError;await emitStepActions(F,A,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 S.generate({abortSignal:t.abortSignal,messages:o});throwIfTurnAborted(t.abortSignal);let n=await x.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 y!==void 0&&await g?.publish({idempotencyKey:attemptIdempotencyKey(y),scope:y,type:`step.attempt.completed`}),e}catch(e){return y!==void 0&&await g?.publish({error:e,idempotencyKey:attemptIdempotencyKey(y),scope:y,type:`step.attempt.failed`}),rethrowNoOutputAsEmptyResponse(e)}},Ee=0,runOneModelCall=async e=>runModelCallWithRetries(t=>runSingleModelCall({...e,attemptIndex:Ee++,preparedInput:t===1?e.preparedInput:void 0,suppressStepStartedEmission:t!==1||e.suppressStepStartedEmission}),{sessionId:k.sessionId,turnId:A.turnId},t.abortSignal),De=prepareModelCallInput(),Oe=await continuePendingWorkflowInterrupt({childResults:R?.runtimeActionResults,config:t,emit:F,emissionState:A,runStep,session:k,tools:buildHarnessToolsWithDynamicSubagents(t.tools,G)});if(Oe!==null)return Oe;let ke=await enforceSessionTokenLimit({config:t,emit:F,emissionState:A,messages:W,session:k});if(ke!==null)return ke;let Q;try{Q=await runOneModelCall({preparedInput:De,suppressStepStartedEmission:!0})}catch(n){throwIfTurnAborted(t.abortSignal);let r=await runModelCallRecoveryPipeline({error:n,stages:[e=>attemptUnsupportedProviderToolRecovery({error:e.error,runOneModelCall,sessionId:k.sessionId,turnId:A.turnId}),e=>attemptEmptyResponseRecovery({emptyDeliveryEnabled:xe,error:e.error,retryCallOptions:e.retryCallOptions,runOneModelCall,sessionId:k.sessionId,turnId:A.turnId})]});if(throwIfTurnAborted(t.abortSignal),r.outcome===`recovered`)Q=r.result;else{let n=r.error;if(D&&recordErrorOnSpan(D,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:k.sessionId,turnId:A.turnId}),A=await emitRecoverableFailedTurn(F,A,{code:`WORKFLOW_STREAM_WRITE_FAILED`,continuationToken:k.continuationToken,details:{...a,errorId:t},message:toErrorMessage(n)}),{next:null,session:setHarnessEmissionState(k,A)}}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}),h=buildModelCallFailureLogFields({error:n,errorId:s,modelCallDetails:f,recognized:c!==null||l!==null,sessionId:k.sessionId,turnId:A.turnId});if(o===`terminal`)return c===null?log.error(l?.message??`model call failed terminally`,h):log.error(`${c.name}: ${c.message}`,{errorId:s,hint:c.hint,sessionId:k.sessionId,turnId:A.turnId}),await emitFailedStep(F,A,{code:`MODEL_CALL_FAILED`,details:p,message:u,sessionId:k.sessionId}),{next:t.mode===`task`||ce?{done:!0,isError:!0,output:d}:{done:!0,output:``},session:k};if(t.mode===`task`){if(o===`recoverable`&&!(n instanceof EmptyModelResponseError))throw log.warn(l?.message??`model call failed recoverably in task mode — rethrowing for durable step retry`,h),n;return log.error(l?.message??`model call failed; failing the task run`,h),await emitFailedStep(F,A,{code:`MODEL_CALL_FAILED`,details:p,message:u,sessionId:k.sessionId}),{next:{done:!0,isError:!0,output:d},session:k}}log.error(l?.message??`model call failed — parking session for retry by the user`,h),A=await emitRecoverableFailedTurn(F,A,{code:`MODEL_CALL_FAILED`,continuationToken:k.continuationToken,details:p,message:u});let g={isError:!0,output:d};return{next:null,session:setHarnessEmissionState(k,A),settledTurn:g}}}let $=accumulateTurnUsage({previous:getTurnUsageState(k.state),turnId:A.turnId,usage:extractTokenUsageDelta({costUsd:extractGatewayCostUsd(Q.providerMetadata),usage:Q.usage})});k=setTurnUsageState(k,$);let Ae;try{Ae=formatLanguageModelGatewayId(q)}catch{Ae=void 0}return await setEveAttributes({"$eve.model":Ae,"$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:F,emissionState:A,delegatedCaller:P,modelPromptMessageCount:W.length,promptMessages:H,result:Q,runStep,session:k,runtimeActionTools:Te})}return runStep}function isValidSpanContext(e){return/^[0-9a-f]{32}$/u.test(e.traceId)&&e.traceId!==`00000000000000000000000000000000`&&/^[0-9a-f]{16}$/u.test(e.spanId)&&e.spanId!==`0000000000000000`}function extractTokenUsageDelta(e){let t=e.usage;if(!(t===void 0&&e.costUsd===void 0))return{cacheReadTokens:t?.inputTokenDetails?.cacheReadTokens,cacheWriteTokens:t?.inputTokenDetails?.cacheWriteTokens,costUsd:e.costUsd,inputTokens:t?.inputTokens,outputTokens:t?.outputTokens}}function extractGatewayCostUsd(e){let t=readGatewayMetadata(e)?.cost;if(typeof t==`number`&&Number.isFinite(t))return t;if(typeof t==`string`){let e=Number(t);return Number.isFinite(e)?e:void 0}}function readGatewayMetadata(e){let t=e?.gateway;return t&&typeof t==`object`&&!Array.isArray(t)?t:void 0}function buildModelCallFailureDetails(e){let{catalogSummary:t,error:r,errorId:i,modelCallDetails:a,upstreamRejection:o}=e;if(t!==null){let e={errorId:i,message:t.message,name:t.name,semanticErrorId:t.id,...a};return t.hint!==void 0&&(e.hint=t.hint),e}return o===null?{...formatError(r,i),...a}:{errorId:i,message:toErrorMessage(r),name:o.name,...a}}function buildModelCallFailureLogFields(e){let t={errorId:e.errorId,sessionId:e.sessionId,turnId:e.turnId};return e.recognized?{...t,details:e.modelCallDetails}:{...t,error:e.error}}async function runModelCallRecoveryPipeline(e){let t=e.error,n;for(let r of e.stages){let e=await r({error:t,retryCallOptions:n});if(e.outcome===`recovered`)return e;e.outcome===`failed`&&(t=e.error,n=e.retryCallOptions)}return{outcome:`failed`,error:t}}function withAccumulatedResponseMessages(e){let{stepResult:t}=e;return{content:t.content,finishReason:t.finishReason,...e.invalidInputToolCallIds===void 0?{}:{invalidInputToolCallIds:e.invalidInputToolCallIds},providerMetadata:t.providerMetadata,response:{...t.response,messages:[...e.responseMessages]},text:t.text,toolCalls:t.toolCalls,toolResults:e.toolResults===void 0?t.toolResults:[...e.toolResults],usage:t.usage}}function appendMissingToolResultMessages(e){let t=extractToolResultCallIds(e.responseMessages),n=e.append.filter(e=>!t.has(e.toolCallId));return[...e.responseMessages,...n.length>0?[{role:`tool`,content:[...n]}]:[]]}function getInvalidToolCallInputErrors(e){let t=[];for(let n of e.toolCalls){if(n.toolName===FINAL_OUTPUT_TOOL_NAME)continue;let e=getInvalidToolCallInputError({toolCall:n});e!==void 0&&t.push(e)}return t}function extractToolResultCallIds(e){let t=new Set;for(let n of e)if(Array.isArray(n.content))for(let e of n.content)typeof e==`object`&&e&&e.type===`tool-result`&&t.add(e.toolCallId);return t}async function attemptUnsupportedProviderToolRecovery(e){let t=extractUnsupportedProviderToolTypes(e.error);if(t.length===0)return{outcome:`skipped`};let n=[];for(let e of t){let t=resolveFrameworkToolFromUpstreamType(e);t!==null&&!n.includes(t)&&n.push(t)}if(n.length===0)return{outcome:`skipped`};log.warn(`disabling unsupported provider tool(s); retrying step once`,{disabled:n,sessionId:e.sessionId,turnId:e.turnId,upstreamTypes:t});let r={disabledProviderTools:new Set(n),extraSystemNote:buildDisabledToolNote(n)};try{return{outcome:`recovered`,result:await e.runOneModelCall({...r,suppressStepStartedEmission:!0})}}catch(e){return{outcome:`failed`,error:e,retryCallOptions:r}}}function buildDisabledToolNote(e){let t=e.join(`, `);return`The following ${e.length===1?`tool is`:`tools are`} not available with the current model and has been removed: ${t}. Proceed using the remaining tools or your training knowledge.`}function isEmptyModelResponse(e){return e.toolCalls.length===0&&e.toolResults.length===0&&resolveAssistantStepText(e.response.messages,e.text)===null}function rethrowNoOutputAsEmptyResponse(e){throw isNoOutputGeneratedError(e)?new EmptyModelResponseError({cause:e}):e}const EMPTY_RESPONSE_NUDGE=`Your previous reply was empty and was not delivered. Answer now from the tool results above; do not re-run tools or mention this notice.`;function buildEmptyResponseNudge(e){return e?`${EMPTY_RESPONSE_NUDGE} If the current task explicitly requires conditional delivery and there is nothing to report, reply with exactly ${EMPTY_DELIVERY_SENTINEL}.`:EMPTY_RESPONSE_NUDGE}async function attemptEmptyResponseRecovery(e){if(!(e.error instanceof EmptyModelResponseError))return{outcome:`skipped`};log.warn(`empty model response; reissuing the model call once`,{sessionId:e.sessionId,turnId:e.turnId});try{return{outcome:`recovered`,result:await e.runOneModelCall({...e.retryCallOptions,retryReason:`empty-response`,suppressStepStartedEmission:!0,trailingUserNote:buildEmptyResponseNudge(e.emptyDeliveryEnabled)})}}catch(t){return{outcome:`failed`,error:t,retryCallOptions:e.retryCallOptions}}}async function handleStepResult(e){let{config:t,emit:n,promptMessages:r,result:i,runStep:a}=e,{emissionState:o,session:s}=e,c=resolveAssistantStepText(i.response.messages,i.text),l=i.finishReason!==`tool-calls`&&i.toolCalls.length===0&&hasEmptyDeliverySentinel(c),u=getInvalidToolCallInputErrors({toolCalls:i.toolCalls}),d=new Set([...i.invalidInputToolCallIds??[],...i.toolCalls.filter(isInvalidToolCall).map(e=>e.toolCallId),...u.map(e=>e.toolCallId)]),f=l?[]:appendMissingToolResultMessages({append:u.map(e=>createToolResultMessagePartFromToolError(e)),responseMessages:i.response.messages}),p=l?null:c,m=new Set;for(let e of[...i.content??[],...i.toolResults??[]])(e.type===`tool-result`||e.type===`tool-error`)&&e.providerExecuted===!0&&m.add(e.toolCallId);let h=normalizeProviderToolHistory({messages:f,providerExecutedOutcomeIds:m}),g=h.messages,_={...s,compaction:createNextCompactionConfig(s.compaction,e.modelPromptMessageCount,i)},b=t.workflow===!0?readWorkflowContinuationSecurity(_):void 0;if(b!==void 0){let e=await getWorkflowSandboxInterrupt(i,b);if(e!==void 0){if(!isWorkflowRuntimeActionInterrupt(e))throw Error(`Unsupported Workflow interrupt kind "${e.payload.kind}".`);return parkOnWorkflowInterrupt({baseSession:_,emissionState:o,interrupt:e,promptMessages:r,responseMessages:g})}}let x=extractToolApprovalInputRequests({content:i.content??[],excludedCallIds:d}),S=new Set(x.map(e=>e.action.callId)),ee=extractQuestionInputRequests({toolCalls:i.toolCalls,excludedCallIds:new Set([...d,...S])}),w=[...x,...ee],T=renderPendingApprovalsSnippet(x),te=[...r,...T===void 0?[]:[{content:T,role:`user`}]],ne=getAdvertisedTools({delegatedCaller:e.delegatedCaller,session:_,tools:e.runtimeActionTools}),E=(i.toolCalls??[]).filter(e=>!d.has(e.toolCallId)).filter(t=>e.runtimeActionTools.get(t.toolName)?.runtimeAction!==void 0).filter(e=>ne.get(e.toolName)?.runtimeAction===void 0?(log.warn(`runtime action tool call blocked because tool is not advertised`,{callId:e.toolCallId,sessionId:_.sessionId,toolName:e.toolName}),!1):!0).map(e=>createRuntimeActionRequestFromToolCall({toolCall:e,tools:ne}));if(E.length>0){if(w.length===0)return{next:null,session:setHarnessEmissionState(setPendingRuntimeActionBatch({actions:E,event:{sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId},responseMessages:g,session:{..._,history:[...r]}}),advanceStep(o))};let e=setPendingRuntimeActionBatch({actions:E,event:{sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId},responseMessages:g,session:{..._,history:te}});return e=appendPendingInputBatch({event:{sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId},requests:w,responseMessages:[],session:e}),n&&await n(createInputRequestedEvent({requests:w,sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId})),{next:null,session:setHarnessEmissionState(e,advanceStep(o))}}if(w.length>0){let e=buildResponseAuthorizationTools({authoredTools:t.tools,context:contextStorage.getStore()}),r=appendPendingInputBatch({event:{sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId},requests:w,responseAuthRequiredRequestIds:x.filter(t=>{let n=e.get(t.action.toolName)?.approval;return n!==void 0&&typeof n!=`function`&&n.response!==void 0}).map(e=>e.requestId),responseMessages:g,session:{..._,history:te}});return n&&(await n(createInputRequestedEvent({requests:w,sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId})),t.mode===`conversation`&&(o=await emitTurnEpilogue(n,o,t.mode),r=setHarnessEmissionState(r,o))),{next:hasDeferredStepInput(r)?a:null,session:r}}let D=findAuthorizationSignalFromToolResults(i.toolResults);if(D){let{challenges:e}=D;if(n){for(let t of getSupersededAuthorizationChallenges(_.state,e))await n(createAuthorizationCompletedEvent({attemptId:t.attemptId,authorization:t.challenge,name:t.name,outcome:`failed`,reason:`Superseded by a newer authorization attempt.`,sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId}));for(let t of e)await n(createAuthorizationRequiredEvent({attemptId:t.attemptId,authorization:t.challenge,name:t.name,description:t.challenge.instructions??`Authorization required for ${t.name}`,webhookUrl:t.hookUrl,sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId}));t.mode===`conversation`&&(o=await emitTurnEpilogue(n,o,t.mode))}return{next:null,session:setHarnessEmissionState({..._,history:[...r],state:setPendingAuthorization(_.state,{challenges:e})},o)}}let re=g,ie=[...r,...re],O={..._,history:ie};return!(O.outputSchema!==void 0&&extractFinalOutput(i)!==void 0)&&(re.at(-1)?.role===`tool`||h.outcomeEndsResponse||hasDeferredStepInput(O))?(n&&(o=advanceStep(o),O=setHarnessEmissionState(O,o)),{next:a,session:O}):t.mode===`task`?finishTaskTurn({emissionState:o,emit:n,history:r,result:i,schema:O.outputSchema,session:O,stepOutput:p}):finishConversationTurn({emissionState:o,emit:n,history:r,result:i,schema:O.outputSchema,session:O,stepOutput:p})}const OUTPUT_SCHEMA_NOT_FULFILLED={code:`OUTPUT_SCHEMA_NOT_FULFILLED`,message:`The agent could not produce a result matching the requested schema.`};function extractFinalOutput(e){return(e.toolCalls??[]).find(e=>e.toolName===FINAL_OUTPUT_TOOL_NAME&&!isInvalidToolCall(e))?.input}function persistStructuredAssistantTurn(e,t,n){return{...e,history:[...t,{content:JSON.stringify(n),role:`assistant`}],outputSchema:void 0}}async function emitStructuredResult(e,t,n,r){return await e(createResultCompletedEvent({result:n,sequence:t.sequence,stepIndex:t.stepIndex,turnId:t.turnId})),emitTurnEpilogue(e,t,r)}async function finishTaskTurn(e){let{emit:t,history:n,result:r,schema:i,stepOutput:a}=e,{emissionState:o,session:s}=e;if(i===void 0)return t&&(o=await emitTurnEpilogue(t,o,`task`),s=setHarnessEmissionState(s,o)),{next:{done:!0,output:a??``},session:s};let c=extractFinalOutput(r);return c===void 0?(t&&await emitFailedStep(t,o,{...OUTPUT_SCHEMA_NOT_FULFILLED,sessionId:s.sessionId}),{next:{done:!0,isError:!0,output:OUTPUT_SCHEMA_NOT_FULFILLED.message},session:s}):(s=persistStructuredAssistantTurn(s,n,c),t&&(o=await emitStructuredResult(t,o,c,`task`),s=setHarnessEmissionState(s,o)),{next:{done:!0,output:c},session:s})}async function finishConversationTurn(e){let{emit:t,history:n,result:r,schema:i,stepOutput:a}=e,{emissionState:o,session:s}=e;if(i===void 0)return t&&(o=await emitTurnEpilogue(t,o,`conversation`),s=setHarnessEmissionState(s,o)),{next:null,session:s,settledTurn:{output:a??``}};let c=extractFinalOutput(r);if(c===void 0){t&&(o=await emitRecoverableFailedTurn(t,o,{...OUTPUT_SCHEMA_NOT_FULFILLED,continuationToken:s.continuationToken}),s=setHarnessEmissionState(s,o));let e={isError:!0,output:OUTPUT_SCHEMA_NOT_FULFILLED.message};return{next:null,session:s,settledTurn:e}}return s=persistStructuredAssistantTurn(s,n,c),t&&(o=await emitStructuredResult(t,o,c,`conversation`),s=setHarnessEmissionState(s,o)),{next:null,session:s,settledTurn:{output:c}}}async function continuePendingWorkflowInterrupt(e){let t=getPendingWorkflowInterrupt(e.session.state);if(t===void 0)return null;let n=t.interrupt;if(!isWorkflowRuntimeActionInterrupt(n))throw Error(`Unsupported Workflow interrupt kind "${n.payload.kind}".`);let i=e.emit===void 0?void 0:createWorkflowLifecycle({emit:e.emit,emissionState:e.emissionState,skipReplayed:!0,tools:e.tools}),a=getWorkflowContinuationSecurity(e.session),o;try{let t=buildWorkflowHostTools({tools:e.tools}),r=e.childResults??[],s=n,c=0;for(;;){o=await continueWorkflowSandboxInterrupt({bridgeRequestLimit:resolveWorkflowSandboxBridgeRequestLimit(e.config.workflowMaxSubagents),continuationSecurity:a,interrupt:s,lifecycle:i,resolution:r[c]?.output,tools:t});let n=await unwrapWorkflowSandboxResult(o,a);if(n.status!==`interrupted`||!isWorkflowRuntimeActionInterrupt(n.interrupt)||c+1>=r.length)break;let l=getWorkflowRuntimeActionInterrupts(n.interrupt)[0];if(l===void 0)throw Error(`Workflow continuation contains no pending runtime-action interrupt.`);c++,s=l}}catch(e){logError(log,`Workflow interrupt continuation failed`,e),o={error:`workflow_continuation_failed`,message:toErrorMessage(e),retryable:!1}}let s=await unwrapWorkflowSandboxResult(o,a),c=s.status===`interrupted`?s.interrupt:s.output,l=replaceWorkflowToolResult([...e.session.history,...t.responseMessages],n.outerToolCallId,c),u=clearPendingWorkflowInterrupt({...e.session,history:l});if(s.status===`interrupted`){if(!isWorkflowRuntimeActionInterrupt(s.interrupt))throw Error(`Unsupported Workflow interrupt kind "${s.interrupt.payload.kind}".`);let t=e.session.history.length,n=l.slice(0,t),r=l.slice(t);return u={...u,history:n},parkOnWorkflowInterrupt({baseSession:u,emissionState:e.emissionState,interrupt:s.interrupt,promptMessages:n,responseMessages:r})}return{next:e.runStep,session:u}}function replaceWorkflowToolResult(e,t,n){if(t===void 0)return[...e];let r=typeof n==`string`?{type:`text`,value:n}:{type:`json`,value:n};return e.map(e=>{if(e.role!==`tool`)return e;let n=e.content.map(e=>e.type!==`tool-result`||e.toolCallId!==t?e:{...e,output:r});return{...e,content:n}})}function parkOnWorkflowInterrupt(e){let t=getWorkflowRuntimeActionInterrupts(e.interrupt)[0];if(t===void 0)throw Error(`Workflow continuation contains no pending runtime-action interrupt.`);let n={...e.baseSession,history:[...e.promptMessages]};return{next:null,session:setHarnessEmissionState(setPendingWorkflowInterrupt({interrupt:t,responseMessages:e.responseMessages,session:n}),e.emissionState)}}function createNextCompactionConfig(e,t,n){let r={recentWindowSize:e.recentWindowSize,threshold:e.threshold,thresholdPercent:e.thresholdPercent};return n.usage?.inputTokens!==void 0&&(r.lastKnownInputTokens=n.usage.inputTokens,r.lastKnownPromptMessageCount=t),r}async function maybeCompact(e){let{emit:t,emissionState:n}=e,r=e.messages,i=e.session;if(e.force!==!0&&!shouldCompact(r,i.compaction))return{compacted:!1,messages:r,session:i};let a=await resolveCompactionModel({compactionModelReference:i.agent.compactionModelReference,model:e.model,modelReference:requireSessionModelReference(i),resolveModel:e.resolveModel});if(t&&await t(createCompactionRequestedEvent({modelId:formatLanguageModelGatewayId(a.model),sequence:n.sequence,sessionId:i.sessionId,turnId:n.turnId,usageInputTokens:getInputTokenCount(r,i.compaction)})),r=await compactMessages(r,a.model,i.compaction,a.providerOptions,e.telemetry,buildGatewayAttributionHeaders(a.model,e.runtimeIdentity),e.abortSignal,e.force===!0),e.onCompaction)for(let t of e.onCompaction())r.push(t);return t&&await t(createCompactionCompletedEvent({modelId:formatLanguageModelGatewayId(a.model),sequence:n.sequence,sessionId:i.sessionId,turnId:n.turnId})),{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};
@@ -5,6 +5,7 @@ import type { WebSearchProvider } from "#shared/web-search.js";
5
5
  import type { HarnessToolDefinition } from "#harness/execute-tool.js";
6
6
  import type { HarnessToolMap } from "#harness/types.js";
7
7
  import type { ToolExecuteOptions } from "#shared/tool-definition.js";
8
+ import { type BackgroundToolCallBatch } from "#harness/background-tools.js";
8
9
  /**
9
10
  * Builds an AI SDK `ToolSet` from unified harness tool definitions.
10
11
  *
@@ -23,6 +24,7 @@ import type { ToolExecuteOptions } from "#shared/tool-definition.js";
23
24
  */
24
25
  export declare function buildToolSet(input: {
25
26
  readonly approvedTools?: ReadonlySet<string>;
27
+ readonly backgroundBatch?: BackgroundToolCallBatch;
26
28
  readonly capabilities?: SessionCapabilities;
27
29
  readonly disabledProviderTools?: ReadonlySet<string>;
28
30
  readonly tools: HarnessToolMap;
@@ -35,6 +37,7 @@ export declare function buildToolSet(input: {
35
37
  */
36
38
  export declare function buildToolSetFromDefinitions(input: {
37
39
  readonly approvedTools?: ReadonlySet<string>;
40
+ readonly backgroundBatch?: BackgroundToolCallBatch;
38
41
  readonly capabilities?: SessionCapabilities;
39
42
  readonly disabledProviderTools?: ReadonlySet<string>;
40
43
  readonly tools: readonly HarnessToolDefinition[];
@@ -46,7 +49,7 @@ export declare function buildToolSetFromDefinitions(input: {
46
49
  * omits OAuth URLs, user codes, and hook URLs from model-facing history.
47
50
  * Returns `undefined` for client-side tools (no `execute`).
48
51
  */
49
- export declare function wrapToolExecute(definition: HarnessToolDefinition): ((input: any, options: ToolExecuteOptions) => Promise<any> | AsyncIterable<any>) | undefined;
52
+ export declare function wrapToolExecute(definition: HarnessToolDefinition, backgroundBatch?: BackgroundToolCallBatch): ((input: any, options: ToolExecuteOptions) => Promise<any> | AsyncIterable<any>) | undefined;
50
53
  /**
51
54
  * Builds the AI SDK ToolSet for one harness step.
52
55
  *
@@ -68,6 +71,7 @@ export declare function wrapToolExecute(definition: HarnessToolDefinition): ((in
68
71
  */
69
72
  export declare function buildToolSetWithProviderTools(input: {
70
73
  readonly approvedTools?: ReadonlySet<string>;
74
+ readonly backgroundBatch?: BackgroundToolCallBatch;
71
75
  readonly capabilities?: SessionCapabilities;
72
76
  readonly disabledProviderTools?: ReadonlySet<string>;
73
77
  readonly modelReference: RuntimeModelReference;
@@ -1 +1 @@
1
- import{isObject}from"#shared/guards.js";import{loadContext}from"#context/container.js";import{buildCallbackContext}from"#context/build-callback-context.js";import{resolveApprovalPolicy}from"#public/definitions/approval.js";import{tool}from"ai";import{authorizationPendingModelText,isAuthorizationPendingModelOutput,isAuthorizationSignal,modelFacingAuthorizationOutput}from"#harness/authorization.js";import{isAsyncIterable}from"#shared/async-iterable.js";import{stashToolInterrupt}from"#harness/tool-interrupts.js";import{ASK_QUESTION_TOOL_NAME}from"#runtime/framework-tools/ask-question.js";import{WEB_SEARCH_TOOL_DEFINITION}from"#runtime/framework-tools/web-search.js";import{resolveWebSearchBackend,resolveWebSearchProviderTool}from"#harness/provider-tools.js";import{normalizeToolJsonOutput,normalizeToolModelOutput}from"#harness/tool-model-output.js";const toolApprovals=new WeakMap;function buildToolSet(e){let t={},n=e.capabilities?.requestInput===!0,r=e.disabledProviderTools;for(let s of e.tools.values()){if(s.name===ASK_QUESTION_TOOL_NAME&&!n||r?.has(s.name))continue;let c=s.toModelOutput,l=buildApprovalFn(s,e),u=tool({description:s.description,execute:wrapToolExecute(s),inputSchema:s.inputSchema,outputSchema:s.outputSchema,...s.execute===void 0?c===void 0?{}:{toModelOutput:async({output:e,toolCallId:t})=>normalizeToolModelOutput({output:await c(e),toolCallId:t,toolName:s.name})}:{toModelOutput:async({output:e,toolCallId:t})=>isAuthorizationPendingModelOutput(e)?{type:`text`,value:authorizationPendingModelText(e.connections)}:c===void 0?typeof e==`string`?{type:`text`,value:e}:normalizeToolModelOutput({output:{type:`json`,value:e??null},toolCallId:t,toolName:s.name}):normalizeToolModelOutput({output:await c(e),toolCallId:t,toolName:s.name})}});t[s.name]=u,s.approval!==void 0&&toolApprovals.set(u,l)}return t}function buildToolSetFromDefinitions(e){let t=new Map;for(let n of e.tools)t.has(n.name)||t.set(n.name,n);return buildToolSet({approvedTools:e.approvedTools,capabilities:e.capabilities,disabledProviderTools:e.disabledProviderTools,tools:t})}function wrapToolExecute(e){let t=e.execute;if(t!==void 0)return(n,r)=>{let i;try{i=t(n,r)}catch(e){return Promise.reject(e)}return isAsyncIterable(i)?normalizeToolExecuteIterable(i,e.name,r):Promise.resolve(i).then(t=>normalizeToolExecuteOutput(t,e.name,r))}}async function*normalizeToolExecuteIterable(e,t,n){for await(let r of e)yield normalizeToolExecuteOutput(r,t,n)}function normalizeToolExecuteOutput(e,n,r){return isAuthorizationSignal(e)?(stashToolInterrupt(loadContext(),r.toolCallId,e),modelFacingAuthorizationOutput(e)):normalizeToolJsonOutput({boundary:`execute`,output:e,toolCallId:r.toolCallId,toolName:n})}async function buildToolSetWithProviderTools(e){let t=e.disabledProviderTools,n={...buildToolSet({approvedTools:e.approvedTools,capabilities:e.capabilities,disabledProviderTools:t,tools:e.tools})};if(!t?.has(WEB_SEARCH_TOOL_DEFINITION.name)){let t=e.tools.get(WEB_SEARCH_TOOL_DEFINITION.name);if(t!==void 0&&t.execute===void 0){let t=resolveWebSearchBackend(e.modelReference,e.webSearchProvider);t===null?delete n[WEB_SEARCH_TOOL_DEFINITION.name]:n[WEB_SEARCH_TOOL_DEFINITION.name]=await resolveWebSearchProviderTool(t)}}return n}function buildApprovalFn(t,i){return async(a,o)=>{if(t.approval===void 0)return;let s=isObject(a)?a:void 0,c=await resolveApprovalPolicy(t.approval)({...buildCallbackContext(),approvedTools:i.approvedTools??new Set,callId:o,toolInput:s,toolName:t.name});return typeof c==`boolean`?c?`user-approval`:`not-applicable`:c}}function buildToolApproval(e){return async({toolCall:t})=>{let n=e[t.toolName];return n===void 0?void 0:await toolApprovals.get(n)?.(t.input,t.toolCallId)}}export{buildToolApproval,buildToolSet,buildToolSetFromDefinitions,buildToolSetWithProviderTools,wrapToolExecute};
1
+ import{isObject}from"#shared/guards.js";import{loadContext}from"#context/container.js";import{buildCallbackContext}from"#context/build-callback-context.js";import{tool}from"ai";import{authorizationPendingModelText,isAuthorizationPendingModelOutput,isAuthorizationSignal,modelFacingAuthorizationOutput}from"#harness/authorization.js";import{createBackgroundToolCallBatch,executeBackgroundToolCall}from"#harness/background-tools.js";import{isAsyncIterable}from"#shared/async-iterable.js";import{stashToolInterrupt}from"#harness/tool-interrupts.js";import{ASK_QUESTION_TOOL_NAME}from"#runtime/framework-tools/ask-question.js";import{WEB_SEARCH_TOOL_DEFINITION}from"#runtime/framework-tools/web-search.js";import{resolveWebSearchBackend,resolveWebSearchProviderTool}from"#harness/provider-tools.js";import{resolveApprovalPolicy}from"#public/definitions/approval.js";import{normalizeToolJsonOutput,normalizeToolModelOutput}from"#harness/tool-model-output.js";const toolApprovals=new WeakMap;function buildToolSet(e){let t={},n=e.backgroundBatch??createBackgroundToolCallBatch(),o=e.capabilities?.requestInput===!0,s=e.disabledProviderTools;for(let c of e.tools.values()){if(c.name===ASK_QUESTION_TOOL_NAME&&!o||s?.has(c.name))continue;n.setTool(c.name,c.execution===`background`&&c.execute!==void 0?c:void 0);let l=c.toModelOutput,u=buildApprovalFn(c,e),d=tool({description:c.description,execute:wrapToolExecute(c,n),inputSchema:c.inputSchema,...c.execution===`background`?{onInputAvailable:({input:e,toolCallId:t})=>{if(c.execute===void 0)throw Error(`Background tool "${c.name}" has no execute function.`);n.register({callId:t,input:e,toolName:c.name})}}:{},outputSchema:c.outputSchema,...c.execute===void 0?l===void 0?{}:{toModelOutput:async({output:e,toolCallId:t})=>normalizeToolModelOutput({output:await l(e),toolCallId:t,toolName:c.name})}:{toModelOutput:async({output:e,toolCallId:t})=>isAuthorizationPendingModelOutput(e)?{type:`text`,value:authorizationPendingModelText(e.connections)}:l===void 0?typeof e==`string`?{type:`text`,value:e}:normalizeToolModelOutput({output:{type:`json`,value:e??null},toolCallId:t,toolName:c.name}):normalizeToolModelOutput({output:await l(e),toolCallId:t,toolName:c.name})}});t[c.name]=d,c.approval!==void 0&&toolApprovals.set(d,u)}return t}function buildToolSetFromDefinitions(e){let t=new Map;for(let n of e.tools)t.has(n.name)||t.set(n.name,n);return buildToolSet({approvedTools:e.approvedTools,backgroundBatch:e.backgroundBatch,capabilities:e.capabilities,disabledProviderTools:e.disabledProviderTools,tools:t})}function wrapToolExecute(e,t=createBackgroundToolCallBatch()){let n=e.execute;if(n!==void 0)return(r,i)=>{let a;try{a=e.execution===`background`?executeBackgroundToolCall({batch:t,definition:e,options:i,toolInput:r}):n(r,i)}catch(e){return Promise.reject(e)}return isAsyncIterable(a)?normalizeToolExecuteIterable(a,e.name,i):Promise.resolve(a).then(t=>normalizeToolExecuteOutput(t,e.name,i))}}async function*normalizeToolExecuteIterable(e,t,n){for await(let r of e)yield normalizeToolExecuteOutput(r,t,n)}function normalizeToolExecuteOutput(e,n,r){return isAuthorizationSignal(e)?(stashToolInterrupt(loadContext(),r.toolCallId,e),modelFacingAuthorizationOutput(e)):normalizeToolJsonOutput({boundary:`execute`,output:e,toolCallId:r.toolCallId,toolName:n})}async function buildToolSetWithProviderTools(e){let t=e.disabledProviderTools,n={...buildToolSet({approvedTools:e.approvedTools,backgroundBatch:e.backgroundBatch,capabilities:e.capabilities,disabledProviderTools:t,tools:e.tools})};if(!t?.has(WEB_SEARCH_TOOL_DEFINITION.name)){let t=e.tools.get(WEB_SEARCH_TOOL_DEFINITION.name);if(t!==void 0&&t.execute===void 0){let t=resolveWebSearchBackend(e.modelReference,e.webSearchProvider);t===null?delete n[WEB_SEARCH_TOOL_DEFINITION.name]:n[WEB_SEARCH_TOOL_DEFINITION.name]=await resolveWebSearchProviderTool(t)}}return n}function buildApprovalFn(t,r){return async(i,a)=>{if(t.approval===void 0)return;let o=isObject(i)?i:void 0,s=await resolveApprovalPolicy(t.approval)({...buildCallbackContext(),approvedTools:r.approvedTools??new Set,callId:a,toolInput:o,toolName:t.name});return typeof s==`boolean`?s?`user-approval`:`not-applicable`:s}}function buildToolApproval(e){return async({toolCall:t})=>{let n=e[t.toolName];return n===void 0?void 0:await toolApprovals.get(n)?.(t.input,t.toolCallId)}}export{buildToolApproval,buildToolSet,buildToolSetFromDefinitions,buildToolSetWithProviderTools,wrapToolExecute};
@@ -14,6 +14,7 @@ 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
16
  import type { HarnessInstrumentation } from "#harness/instrumentation/runtime.js";
17
+ import type { HistoryViewProjector, PreparedHistoryView } from "#shared/history-view.js";
17
18
  /**
18
19
  * Serializable tool definition stored on the session.
19
20
  *
@@ -186,6 +187,14 @@ export interface SettledTurn {
186
187
  * Result returned by one harness step invocation.
187
188
  */
188
189
  export interface StepResult {
190
+ /** Background-tool effects projected onto the session that entered this step. */
191
+ readonly backgroundTaskSession?: HarnessSession;
192
+ /** Durable tasks started by background tools and awaiting the parent commit barrier. */
193
+ readonly backgroundTasks?: readonly {
194
+ readonly taskInboxToken: string;
195
+ readonly taskId: string;
196
+ readonly taskRunId: string;
197
+ }[];
189
198
  readonly next: StepNext;
190
199
  readonly session: HarnessSession;
191
200
  /**
@@ -257,6 +266,10 @@ export interface ToolLoopHarnessConfig {
257
266
  /** AI Gateway provider selected for the framework `web_search` tool. */
258
267
  readonly webSearchProvider?: WebSearchProvider;
259
268
  readonly handleEvent?: HandleEventFn;
269
+ /** Projects raw durable history before it crosses a message-bearing boundary. */
270
+ readonly historyProjector?: HistoryViewProjector;
271
+ /** Execution-prepared view of the history supplied to the first harness step. */
272
+ readonly historyView?: PreparedHistoryView;
260
273
  /**
261
274
  * Internal lifecycle hooks injected into each actual model attempt.
262
275
  * Omitted in production until an instrumentation runtime opts in.
@@ -1 +1 @@
1
- import{createRequire}from"node:module";import{basename,dirname,join}from"node:path";import{existsSync,readFileSync,realpathSync}from"node:fs";import{fileURLToPath}from"node:url";import{EVE_PACKAGE_NAME}from"#internal/package-name.js";let cachedPackageInfo,cachedPackageLocation;const BUNDLED_FALLBACK_PACKAGE_VERSION=`0.42.0`,WORKFLOW_MODULE_ALIASES={"workflow/errors":`src/compiled/@workflow/errors/index.js`,"workflow/internal/private":`src/compiled/@workflow/core/private.js`};function resolveFallbackPackageVersion(){return BUNDLED_FALLBACK_PACKAGE_VERSION.startsWith(`__`)?`0.0.0`:BUNDLED_FALLBACK_PACKAGE_VERSION}const FALLBACK_PACKAGE_INFO={name:EVE_PACKAGE_NAME,version:resolveFallbackPackageVersion()};function resolveCurrentModulePath(){return typeof __filename==`string`?__filename:resolveCurrentModulePathFromStack()}function resolveCurrentModulePathFromStack(){let e=Error.prepareStackTrace;try{Error.prepareStackTrace=(e,t)=>t;let e=Error().stack?.[0]?.getFileName();if(typeof e!=`string`||e.length===0)throw Error(`Failed to resolve the current module path from the stack trace.`);return e.startsWith(`file:`)?fileURLToPath(e):e}finally{Error.prepareStackTrace=e}}const require=createRequire(resolveCurrentModulePath());function tryResolveVerifiedPackageRoot(e){try{let t=realpathSync.native(e);return tryReadInstalledPackageInfo(t,EVE_PACKAGE_NAME)===void 0?void 0:dirname(t)}catch{return}}function findNearestVerifiedPackageRoot(e){let t=e;for(;;){let e=tryResolveVerifiedPackageRoot(join(t,`package.json`));if(e!==void 0)return e;let i=dirname(t);if(i===t)return;t=i}}function tryResolveDirectBuildLocation(e){let i=dirname(e);for(;;){if(basename(i)===`dist`){let e=tryResolveVerifiedPackageRoot(join(dirname(i),`package.json`));if(e!==void 0)return{packageBuildRoot:i,packageRoot:e}}let e=dirname(i);if(e===i)return;i=e}}function isSourceCheckout(e){return existsSync(join(e,`src`,`internal`,`application`,`package.ts`))}function tryCreatePackageLocation(e){if(isSourceCheckout(e))return{packageBuildRoot:null,packageRoot:e};let t=join(e,`dist`);if(existsSync(t))return{packageBuildRoot:t,packageRoot:e}}function resolveSelfPackageJsonPath(t){return createRequire(t).resolve(`${EVE_PACKAGE_NAME}/package.json`)}function resolvePackageLocationFromModulePath(e,t=resolveSelfPackageJsonPath){let r=realpathSync.native(e),i=tryResolveDirectBuildLocation(r);if(i!==void 0)return i;let a=findNearestVerifiedPackageRoot(dirname(r));if(a!==void 0&&isSourceCheckout(a))return{packageBuildRoot:null,packageRoot:a};try{let e=tryResolveVerifiedPackageRoot(t(r)),n=e===void 0?void 0:tryCreatePackageLocation(e);if(n!==void 0)return n}catch{}let o=a===void 0?void 0:tryCreatePackageLocation(a);if(o!==void 0)return o;throw Error(`Failed to resolve the eve package root from "${e}".`)}function resolvePackageLocation(){return cachedPackageLocation??=resolvePackageLocationFromModulePath(resolveCurrentModulePath()),cachedPackageLocation}function resolvePackageBuildRoot(){return resolvePackageLocation().packageBuildRoot}function resolvePackageRoot(){return resolvePackageLocation().packageRoot}function tryResolvePackageRoot(){try{return resolvePackageRoot()}catch{return}}function rewriteSourceFilePathForBuild(e){return e.replace(/\.[cm]?tsx?$/,`.js`)}function resolvePackageSourceFilePath(e){let t=resolvePackageBuildRoot();return t===null?join(resolvePackageRoot(),e):join(t,rewriteSourceFilePathForBuild(e))}function resolvePackageSourceDirectoryPath(e){let t=resolvePackageBuildRoot();return join(t===null?resolvePackageRoot():t,e)}function resolvePackageDependencyPath(e){return require.resolve(e)}function resolvePackageCompiledFilePath(e){let t=resolvePackageBuildRoot();return t===null?join(resolvePackageRoot(),`.generated`,`compiled`,e.replace(/^src\/compiled\//,``)):join(t,e)}function normalizeInstalledPackageInfo(e){let t=e;if(!(typeof t.name!=`string`||typeof t.version!=`string`))return{name:t.name,version:t.version}}function tryReadInstalledPackageInfo(e,t){let n=normalizeInstalledPackageInfo(JSON.parse(readFileSync(e,`utf8`)));if(n?.name===t)return n}function resolveInstalledPackageInfo(){if(cachedPackageInfo)return cachedPackageInfo;let e=tryResolvePackageRoot(),t=e===void 0?void 0:tryReadInstalledPackageInfo(join(e,`package.json`),EVE_PACKAGE_NAME);if(t)return cachedPackageInfo=t,cachedPackageInfo;try{let e=tryReadInstalledPackageInfo(require.resolve(`${EVE_PACKAGE_NAME}/package.json`),EVE_PACKAGE_NAME);if(e)return cachedPackageInfo=e,cachedPackageInfo}catch{}return cachedPackageInfo={...FALLBACK_PACKAGE_INFO},cachedPackageInfo}function readWorkflowVersionFromManifest(e){let t=e;for(let e of[t.devDependencies,t.dependencies,t.peerDependencies]){let t=e?.[`@workflow/core`];if(typeof t==`string`&&t.trim().length>0)return t}}function resolveExpectedWorkflowVersion(){let e=tryResolvePackageRoot();if(e!==void 0)try{return readWorkflowVersionFromManifest(JSON.parse(readFileSync(join(e,`package.json`),`utf8`)))}catch{}try{return readWorkflowVersionFromManifest(JSON.parse(readFileSync(require.resolve(`${EVE_PACKAGE_NAME}/package.json`),`utf8`)))}catch{return}}function resolveWorkflowModulePath(e){if(e===`workflow`)return resolvePackageSourceFilePath(`src/internal/workflow/index.ts`);if(e===`workflow/api`||e===`workflow/runtime`)return resolvePackageSourceFilePath(`src/internal/workflow/runtime.ts`);if(e===`workflow/internal/builtins`)return resolvePackageSourceFilePath(`src/internal/workflow/builtins.ts`);let t=WORKFLOW_MODULE_ALIASES[e];return t===void 0?require.resolve(e):resolvePackageCompiledFilePath(t)}export{resolveExpectedWorkflowVersion,resolveInstalledPackageInfo,resolvePackageCompiledFilePath,resolvePackageDependencyPath,resolvePackageLocationFromModulePath,resolvePackageRoot,resolvePackageSourceDirectoryPath,resolvePackageSourceFilePath,resolveWorkflowModulePath};
1
+ import{createRequire}from"node:module";import{basename,dirname,join}from"node:path";import{existsSync,readFileSync,realpathSync}from"node:fs";import{fileURLToPath}from"node:url";import{EVE_PACKAGE_NAME}from"#internal/package-name.js";let cachedPackageInfo,cachedPackageLocation;const BUNDLED_FALLBACK_PACKAGE_VERSION=`0.44.0`,WORKFLOW_MODULE_ALIASES={"workflow/errors":`src/compiled/@workflow/errors/index.js`,"workflow/internal/private":`src/compiled/@workflow/core/private.js`};function resolveFallbackPackageVersion(){return BUNDLED_FALLBACK_PACKAGE_VERSION.startsWith(`__`)?`0.0.0`:BUNDLED_FALLBACK_PACKAGE_VERSION}const FALLBACK_PACKAGE_INFO={name:EVE_PACKAGE_NAME,version:resolveFallbackPackageVersion()};function resolveCurrentModulePath(){return typeof __filename==`string`?__filename:resolveCurrentModulePathFromStack()}function resolveCurrentModulePathFromStack(){let e=Error.prepareStackTrace;try{Error.prepareStackTrace=(e,t)=>t;let e=Error().stack?.[0]?.getFileName();if(typeof e!=`string`||e.length===0)throw Error(`Failed to resolve the current module path from the stack trace.`);return e.startsWith(`file:`)?fileURLToPath(e):e}finally{Error.prepareStackTrace=e}}const require=createRequire(resolveCurrentModulePath());function tryResolveVerifiedPackageRoot(e){try{let t=realpathSync.native(e);return tryReadInstalledPackageInfo(t,EVE_PACKAGE_NAME)===void 0?void 0:dirname(t)}catch{return}}function findNearestVerifiedPackageRoot(e){let t=e;for(;;){let e=tryResolveVerifiedPackageRoot(join(t,`package.json`));if(e!==void 0)return e;let i=dirname(t);if(i===t)return;t=i}}function tryResolveDirectBuildLocation(e){let i=dirname(e);for(;;){if(basename(i)===`dist`){let e=tryResolveVerifiedPackageRoot(join(dirname(i),`package.json`));if(e!==void 0)return{packageBuildRoot:i,packageRoot:e}}let e=dirname(i);if(e===i)return;i=e}}function isSourceCheckout(e){return existsSync(join(e,`src`,`internal`,`application`,`package.ts`))}function tryCreatePackageLocation(e){if(isSourceCheckout(e))return{packageBuildRoot:null,packageRoot:e};let t=join(e,`dist`);if(existsSync(t))return{packageBuildRoot:t,packageRoot:e}}function resolveSelfPackageJsonPath(t){return createRequire(t).resolve(`${EVE_PACKAGE_NAME}/package.json`)}function resolvePackageLocationFromModulePath(e,t=resolveSelfPackageJsonPath){let r=realpathSync.native(e),i=tryResolveDirectBuildLocation(r);if(i!==void 0)return i;let a=findNearestVerifiedPackageRoot(dirname(r));if(a!==void 0&&isSourceCheckout(a))return{packageBuildRoot:null,packageRoot:a};try{let e=tryResolveVerifiedPackageRoot(t(r)),n=e===void 0?void 0:tryCreatePackageLocation(e);if(n!==void 0)return n}catch{}let o=a===void 0?void 0:tryCreatePackageLocation(a);if(o!==void 0)return o;throw Error(`Failed to resolve the eve package root from "${e}".`)}function resolvePackageLocation(){return cachedPackageLocation??=resolvePackageLocationFromModulePath(resolveCurrentModulePath()),cachedPackageLocation}function resolvePackageBuildRoot(){return resolvePackageLocation().packageBuildRoot}function resolvePackageRoot(){return resolvePackageLocation().packageRoot}function tryResolvePackageRoot(){try{return resolvePackageRoot()}catch{return}}function rewriteSourceFilePathForBuild(e){return e.replace(/\.[cm]?tsx?$/,`.js`)}function resolvePackageSourceFilePath(e){let t=resolvePackageBuildRoot();return t===null?join(resolvePackageRoot(),e):join(t,rewriteSourceFilePathForBuild(e))}function resolvePackageSourceDirectoryPath(e){let t=resolvePackageBuildRoot();return join(t===null?resolvePackageRoot():t,e)}function resolvePackageDependencyPath(e){return require.resolve(e)}function resolvePackageCompiledFilePath(e){let t=resolvePackageBuildRoot();return t===null?join(resolvePackageRoot(),`.generated`,`compiled`,e.replace(/^src\/compiled\//,``)):join(t,e)}function normalizeInstalledPackageInfo(e){let t=e;if(!(typeof t.name!=`string`||typeof t.version!=`string`))return{name:t.name,version:t.version}}function tryReadInstalledPackageInfo(e,t){let n=normalizeInstalledPackageInfo(JSON.parse(readFileSync(e,`utf8`)));if(n?.name===t)return n}function resolveInstalledPackageInfo(){if(cachedPackageInfo)return cachedPackageInfo;let e=tryResolvePackageRoot(),t=e===void 0?void 0:tryReadInstalledPackageInfo(join(e,`package.json`),EVE_PACKAGE_NAME);if(t)return cachedPackageInfo=t,cachedPackageInfo;try{let e=tryReadInstalledPackageInfo(require.resolve(`${EVE_PACKAGE_NAME}/package.json`),EVE_PACKAGE_NAME);if(e)return cachedPackageInfo=e,cachedPackageInfo}catch{}return cachedPackageInfo={...FALLBACK_PACKAGE_INFO},cachedPackageInfo}function readWorkflowVersionFromManifest(e){let t=e;for(let e of[t.devDependencies,t.dependencies,t.peerDependencies]){let t=e?.[`@workflow/core`];if(typeof t==`string`&&t.trim().length>0)return t}}function resolveExpectedWorkflowVersion(){let e=tryResolvePackageRoot();if(e!==void 0)try{return readWorkflowVersionFromManifest(JSON.parse(readFileSync(join(e,`package.json`),`utf8`)))}catch{}try{return readWorkflowVersionFromManifest(JSON.parse(readFileSync(require.resolve(`${EVE_PACKAGE_NAME}/package.json`),`utf8`)))}catch{return}}function resolveWorkflowModulePath(e){if(e===`workflow`)return resolvePackageSourceFilePath(`src/internal/workflow/index.ts`);if(e===`workflow/api`||e===`workflow/runtime`)return resolvePackageSourceFilePath(`src/internal/workflow/runtime.ts`);if(e===`workflow/internal/builtins`)return resolvePackageSourceFilePath(`src/internal/workflow/builtins.ts`);let t=WORKFLOW_MODULE_ALIASES[e];return t===void 0?require.resolve(e):resolvePackageCompiledFilePath(t)}export{resolveExpectedWorkflowVersion,resolveInstalledPackageInfo,resolvePackageCompiledFilePath,resolvePackageDependencyPath,resolvePackageLocationFromModulePath,resolvePackageRoot,resolvePackageSourceDirectoryPath,resolvePackageSourceFilePath,resolveWorkflowModulePath};
@@ -1 +1 @@
1
- import{expectFunction,expectObjectRecord,expectOnlyKnownKeys,expectPositiveInteger,expectString}from"#internal/authored-module.js";import{serializeInputSchema,serializeOutputSchema}from"#shared/tool-schema.js";import{assertResolverOnlyDynamicSentinel,isDynamicSentinel}from"#shared/dynamic-tool-definition.js";import{normalizeApproval}from"#internal/authored-definition/approval.js";import{isDisabledToolSentinel,isExperimentalWorkflowToolDefinition}from"#public/definitions/tool.js";import{isWebSearchToolDefinition}from"#public/tools/web-search.js";function normalizeToolDefinition(n,r){if(isDynamicSentinel(n))return assertResolverOnlyDynamicSentinel(n,r),{kind:`dynamic-tool`,eventNames:Object.keys(n.events)};if(isDisabledToolSentinel(n))return{kind:`disabled`};if(isExperimentalWorkflowToolDefinition(n)){let e=expectObjectRecord(n,r);return expectOnlyKnownKeys(e,[`kind`,`maxSubagents`],r),{kind:`workflow-tool`,maxSubagents:e.maxSubagents===void 0?void 0:expectPositiveInteger(e.maxSubagents,r)}}if(isWebSearchToolDefinition(n)){let e=expectObjectRecord(n,r);expectOnlyKnownKeys(e,[`kind`,`provider`],r);let t=expectString(e.provider,r);if(t!==`exa`&&t!==`parallel`)throw Error(`${r} Expected "provider" to be one of: exa, parallel.`);return{kind:`web-search-tool`,provider:t}}let i=expectObjectRecord(n,r);expectOnlyKnownKeys(i,[`auth`,`description`,`execute`,`inputSchema`,`approval`,`outputSchema`,`toModelOutput`],r);let a=i.inputSchema===void 0?null:serializeInputSchema(i.inputSchema),o=serializeOutputSchema(i.outputSchema),s={description:expectString(i.description,r),execute:expectFunction(i.execute,r),inputSchema:a};return o!==void 0&&(s.outputSchema=o),i.approval!==void 0&&normalizeApproval(i.approval,r),i.toModelOutput!==void 0&&expectFunction(i.toModelOutput,r),i.auth!==void 0&&expectFunction(expectObjectRecord(i.auth,r).getToken,r),{kind:`tool`,definition:s}}export{normalizeToolDefinition};
1
+ import{expectFunction,expectObjectRecord,expectOnlyKnownKeys,expectPositiveInteger,expectString}from"#internal/authored-module.js";import{serializeInputSchema,serializeOutputSchema}from"#shared/tool-schema.js";import{assertResolverOnlyDynamicSentinel,isDynamicSentinel}from"#shared/dynamic-tool-definition.js";import{normalizeApproval}from"#internal/authored-definition/approval.js";import{isDisabledToolSentinel,isExperimentalWorkflowToolDefinition}from"#public/definitions/tool.js";import{isWebSearchToolDefinition}from"#public/tools/web-search.js";function normalizeToolDefinition(n,r){if(isDynamicSentinel(n))return assertResolverOnlyDynamicSentinel(n,r),{kind:`dynamic-tool`,eventNames:Object.keys(n.events)};if(isDisabledToolSentinel(n))return{kind:`disabled`};if(isExperimentalWorkflowToolDefinition(n)){let e=expectObjectRecord(n,r);return expectOnlyKnownKeys(e,[`kind`,`maxSubagents`],r),{kind:`workflow-tool`,maxSubagents:e.maxSubagents===void 0?void 0:expectPositiveInteger(e.maxSubagents,r)}}if(isWebSearchToolDefinition(n)){let e=expectObjectRecord(n,r);expectOnlyKnownKeys(e,[`kind`,`provider`],r);let t=expectString(e.provider,r);if(t!==`exa`&&t!==`parallel`)throw Error(`${r} Expected "provider" to be one of: exa, parallel.`);return{kind:`web-search-tool`,provider:t}}let i=expectObjectRecord(n,r);expectOnlyKnownKeys(i,[`auth`,`description`,`execute`,`execution`,`inputSchema`,`approval`,`outputSchema`,`toModelOutput`],r);let a=i.inputSchema===void 0?null:serializeInputSchema(i.inputSchema),o=serializeOutputSchema(i.outputSchema),s={description:expectString(i.description,r),execute:expectFunction(i.execute,r),inputSchema:a};if(i.execution!==void 0){let e=expectString(i.execution,r);if(e!==`background`)throw Error(`${r} Expected "execution" to be "background".`);s.execution=e}return o!==void 0&&(s.outputSchema=o),i.approval!==void 0&&normalizeApproval(i.approval,r),i.toModelOutput!==void 0&&expectFunction(i.toModelOutput,r),i.auth!==void 0&&expectFunction(expectObjectRecord(i.auth,r).getToken,r),{kind:`tool`,definition:s}}export{normalizeToolDefinition};
@@ -1,4 +1,4 @@
1
- import{createHash}from"node:crypto";import{expectObjectRecord}from"#internal/authored-module.js";import{dirname,join,resolve}from"node:path";import{existsSync,mkdirSync,realpathSync,writeFileSync}from"node:fs";import{createCompiledModuleMapSource}from"#compiler/module-map.js";import{buildSingleRolldownChunk,buildWithNitroRolldown}from"#internal/bundler/nitro-rolldown.js";import{createAuthoredAssetImportPlugin}from"#internal/authored-asset-import-plugin.js";import{assertNoWorkflowDirectivePrologue}from"#internal/authored-directive-prologue.js";import{createAuthoredModuleBundleError}from"#internal/authored-module-bundle.js";import{createAuthoredModuleEvaluationError}from"#internal/authored-module-evaluation-error.js";import{createAuthoredPackageTsConfigPathsPlugin}from"#internal/authored-package-tsconfig-paths.js";import{createAuthoredRelativeExtensionResolverPlugin}from"#internal/authored-relative-extension-resolver.js";import{createExtensionScopePlugin,createFixedNamespaceScopePlugin}from"#internal/bundler/extension-scope-plugin.js";import{CACHED_CHANNEL_PREFIX,RESOLVE_EXTENSIONS,createDistributionPackageBoundaryPlugin,createGenerationPackageBoundaryPlugin,createRuntimeLoaderPackageBoundaryPlugin,isNodeModulesPath,normalizeExternalDependencies}from"#internal/authored-package-boundary.js";import{createNodeEsmCompatBannerPlugin}from"#internal/node-esm-compat-banner.js";import{createDynamicCapabilityTransformPlugin}from"#internal/workflow-bundle/dynamic-capability-transform-plugin.js";const AUTHORED_BUNDLED_MODULE_EXTENSION=/\.[cm]?[jt]sx?$/,AUTHORED_MODULE_BUNDLE_DIRECTORY_PATH=join(`node_modules`,`.cache`,`eve`,`authored-modules`),CHANNEL_MODULE_CACHE_KEY=`__eveChannelModuleCache__`;function getChannelModuleCache(){return globalThis[CHANNEL_MODULE_CACHE_KEY]}const inFlightModuleLoads=new Map;function loadAuthoredModuleNamespace(e,t={}){let n=createInFlightModuleLoadKey(resolve(e),t),r=inFlightModuleLoads.get(n);if(r!==void 0)return r;let a=(async()=>{try{return await doLoadAuthoredModuleNamespace(e,t)}finally{inFlightModuleLoads.delete(n)}})();return inFlightModuleLoads.set(n,a),a}async function doLoadAuthoredModuleNamespace(e,n){return expectObjectRecord(AUTHORED_BUNDLED_MODULE_EXTENSION.test(e)?await loadBundledAuthoredModule(e,n):await import(createFileImportSpecifier(e)),`Expected "${e}" to export a module namespace object.`)}function createFileImportSpecifier(e){let t=e.replaceAll(`\\`,`/`);return/^[A-Za-z]:\//.test(t)?`file:///${encodeURI(t)}`:t.startsWith(`/`)?`file://${encodeURI(t)}`:t}async function bundleAuthoredModuleCode(e,t={}){return await buildAuthoredModuleBundle(e,t,{channelIdentity:!0,packageBoundaryPlugin:createRuntimeLoaderPackageBoundaryPlugin({externalDependencies:normalizeExternalDependencies(t.externalDependencies),packageRoot:resolveAuthoredPackageRoot(e)}),plugins:[],sourcemap:`inline`})}async function bundleAuthoredModuleForGeneration(e,t={}){return removeRolldownModuleRegionComments(await buildAuthoredModuleBundle(e,t,{channelIdentity:!1,packageBoundaryPlugin:createGenerationPackageBoundaryPlugin({externalDependencies:normalizeExternalDependencies(t.externalDependencies),packageRoot:resolveAuthoredPackageRoot(e)}),plugins:[createAuthoredDirectiveGuardPlugin()],sourcemap:!1}))}async function bundleExtensionDistributionGraph(e){let t=[createAuthoredDirectiveGuardPlugin(),createAuthoredRelativeExtensionResolverPlugin({extensions:RESOLVE_EXTENSIONS}),createAuthoredAssetImportPlugin(),createAuthoredPackageTsConfigPathsPlugin({appPackageRoot:e.packageRoot,extensions:RESOLVE_EXTENSIONS}),createNodeEsmCompatBannerPlugin({includeRequire:!0}),createDistributionPackageBoundaryPlugin({packageRoot:e.packageRoot,runtimeDependencies:e.runtimeDependencies})];try{let n=await buildWithNitroRolldown({cwd:e.packageRoot,input:Object.fromEntries(e.entries.map(e=>[e.name,e.path])),platform:`node`,plugins:t,resolve:{extensions:[...RESOLVE_EXTENSIONS]},tsconfig:resolveAuthoredTsConfigPath(e.packageRoot),write:!1,output:{chunkFileNames:`_chunks/[name]-[hash].mjs`,codeSplitting:!0,comments:!1,entryFileNames:`[name].mjs`,format:`esm`,sourcemap:!1}}),r=new Map;for(let e of n.output)e.type===`chunk`&&r.set(e.fileName,removeRolldownModuleRegionComments(e.code));return r}catch(t){throw createAuthoredModuleBundleError(e.packageRoot,t)}}async function bundleAuthoredModuleMapForGeneration(e){let t=resolveAuthoredPackageRoot(e.manifest.agentRoot),n=normalizeExternalDependencies([...e.manifest.config.build?.externalDependencies??[],...e.manifest.subagents.flatMap(e=>e.configResolver===void 0?e.agent.config.build?.externalDependencies??[]:e.configResolver.build?.externalDependencies??[])]),r=createCompiledModuleMapSource({manifest:e.manifest,moduleMapPath:e.moduleMapPath}),i=createExtensionScopePlugin([e.manifest,...e.manifest.subagents.map(e=>e.agent)].flatMap(e=>e.extensionMounts.map(e=>({packageNamespace:e.packageNamespace,sourceRoot:e.sourceRoot})))),a=[createVirtualGenerationModuleMapPlugin({id:e.moduleMapPath,source:r}),createDynamicCapabilityTransformPlugin({dynamicTools:!1}),createAuthoredDirectiveGuardPlugin(),i,createAuthoredRelativeExtensionResolverPlugin({extensions:RESOLVE_EXTENSIONS}),createAuthoredAssetImportPlugin(),createAuthoredPackageTsConfigPathsPlugin({appPackageRoot:t,extensions:RESOLVE_EXTENSIONS}),createNodeEsmCompatBannerPlugin({includeRequire:!0}),createGenerationPackageBoundaryPlugin({externalDependencies:n,packageRoot:t})].filter(e=>e!==null);try{return removeRolldownModuleRegionComments((await buildSingleRolldownChunk(`authored module map`,{cwd:t,input:e.moduleMapPath,platform:`node`,plugins:a,resolve:{conditionNames:[`eve-source`],extensions:[...RESOLVE_EXTENSIONS]},tsconfig:resolveAuthoredTsConfigPath(t),output:{comments:!1,format:`esm`,sourcemap:!1}})).code)}catch(t){throw createAuthoredModuleBundleError(e.moduleMapPath,t)}}function createVirtualGenerationModuleMapPlugin(e){return{name:`eve-generation-module-map`,resolveId(t){return t===e.id?t:void 0},load(t){return t===e.id?{code:e.source,moduleType:`js`}:void 0}}}async function buildAuthoredModuleBundle(e,t,n){let r=n.channelIdentity?getChannelModuleCache():void 0,a=resolveAuthoredPackageRoot(e),o=resolveAuthoredTsConfigPath(a),s=[r&&r.size>0?{name:`eve-channel-identity`,async resolveId(e,t,n){if(!/channels[/\\]/.test(e)||n.kind!==`import-statement`)return;let a=await this.resolve(e,t,{kind:n.kind,skipSelf:!0});if(a===null||typeof a.id!=`string`)return;let o=resolve(a.id);if(r.has(o))return{id:`${CACHED_CHANNEL_PREFIX}${o}`}},load(e){if(!e.startsWith(CACHED_CHANNEL_PREFIX))return;let t=e.slice(CACHED_CHANNEL_PREFIX.length);return{code:[`const cache = globalThis["${CHANNEL_MODULE_CACHE_KEY}"];`,`export default cache.get(${JSON.stringify(t)});`].join(`
1
+ import{createHash}from"node:crypto";import{expectObjectRecord}from"#internal/authored-module.js";import{dirname,join,resolve}from"node:path";import{existsSync,mkdirSync,realpathSync,writeFileSync}from"node:fs";import{createCompiledModuleMapSource}from"#compiler/module-map.js";import{buildSingleRolldownChunk,buildWithNitroRolldown}from"#internal/bundler/nitro-rolldown.js";import{createAuthoredAssetImportPlugin}from"#internal/authored-asset-import-plugin.js";import{assertNoWorkflowDirectivePrologue}from"#internal/authored-directive-prologue.js";import{createAuthoredModuleBundleError}from"#internal/authored-module-bundle.js";import{createAuthoredModuleEvaluationError}from"#internal/authored-module-evaluation-error.js";import{createAuthoredPackageTsConfigPathsPlugin}from"#internal/authored-package-tsconfig-paths.js";import{createAuthoredRelativeExtensionResolverPlugin}from"#internal/authored-relative-extension-resolver.js";import{createExtensionScopePlugin,createFixedNamespaceScopePlugin}from"#internal/bundler/extension-scope-plugin.js";import{CACHED_CHANNEL_PREFIX,RESOLVE_EXTENSIONS,createDistributionPackageBoundaryPlugin,createGenerationPackageBoundaryPlugin,createRuntimeLoaderPackageBoundaryPlugin,isNodeModulesPath,normalizeExternalDependencies}from"#internal/authored-package-boundary.js";import{createNodeEsmCompatBannerPlugin}from"#internal/node-esm-compat-banner.js";import{createDynamicCapabilityTransformPlugin}from"#internal/workflow-bundle/dynamic-capability-transform-plugin.js";const AUTHORED_BUNDLED_MODULE_EXTENSION=/\.[cm]?[jt]sx?$/,AUTHORED_MODULE_BUNDLE_DIRECTORY_PATH=join(`node_modules`,`.cache`,`eve`,`authored-modules`),CHANNEL_MODULE_CACHE_KEY=`__eveChannelModuleCache__`;function getChannelModuleCache(){return globalThis[CHANNEL_MODULE_CACHE_KEY]}const inFlightModuleLoads=new Map;function loadAuthoredModuleNamespace(e,t={}){let n=createInFlightModuleLoadKey(resolve(e),t),r=inFlightModuleLoads.get(n);if(r!==void 0)return r;let a=(async()=>{try{return await doLoadAuthoredModuleNamespace(e,t)}finally{inFlightModuleLoads.delete(n)}})();return inFlightModuleLoads.set(n,a),a}async function doLoadAuthoredModuleNamespace(e,n){return expectObjectRecord(AUTHORED_BUNDLED_MODULE_EXTENSION.test(e)?await loadBundledAuthoredModule(e,n):await import(createFileImportSpecifier(e)),`Expected "${e}" to export a module namespace object.`)}function createFileImportSpecifier(e){let t=e.replaceAll(`\\`,`/`);return/^[A-Za-z]:\//.test(t)?`file:///${encodeURI(t)}`:t.startsWith(`/`)?`file://${encodeURI(t)}`:t}async function bundleAuthoredModuleCode(e,t={}){return await buildAuthoredModuleBundle(e,t,{channelIdentity:!0,packageBoundaryPlugin:createRuntimeLoaderPackageBoundaryPlugin({externalDependencies:normalizeExternalDependencies(t.externalDependencies),packageRoot:resolveAuthoredPackageRoot(e)}),plugins:[],sourcemap:`inline`})}async function bundleAuthoredModuleForGeneration(e,t={}){return removeRolldownModuleRegionComments(await buildAuthoredModuleBundle(e,t,{channelIdentity:!1,packageBoundaryPlugin:createGenerationPackageBoundaryPlugin({externalDependencies:normalizeExternalDependencies(t.externalDependencies),packageRoot:resolveAuthoredPackageRoot(e)}),plugins:[createAuthoredDirectiveGuardPlugin()],sourcemap:!1}))}async function bundleExtensionDistributionGraph(e){let t=[createAuthoredDirectiveGuardPlugin(),createAuthoredRelativeExtensionResolverPlugin({extensions:RESOLVE_EXTENSIONS}),createAuthoredAssetImportPlugin(),createAuthoredPackageTsConfigPathsPlugin({appPackageRoot:e.packageRoot,extensions:RESOLVE_EXTENSIONS}),createNodeEsmCompatBannerPlugin({includeRequire:!0}),createDistributionPackageBoundaryPlugin({packageRoot:e.packageRoot,runtimeDependencies:e.runtimeDependencies})];try{let n=await buildWithNitroRolldown({cwd:e.packageRoot,input:Object.fromEntries(e.entries.map(e=>[e.name,e.path])),platform:`node`,plugins:t,resolve:{extensions:[...RESOLVE_EXTENSIONS]},tsconfig:resolveAuthoredTsConfigPath(e.packageRoot),write:!1,output:{chunkFileNames:`_chunks/[name]-[hash].mjs`,codeSplitting:!0,comments:!1,entryFileNames:`[name].mjs`,format:`esm`,sourcemap:!1}}),r=new Map;for(let e of n.output)e.type===`chunk`&&r.set(e.fileName,removeRolldownModuleRegionComments(e.code));return r}catch(t){throw createAuthoredModuleBundleError(e.packageRoot,t)}}async function bundleAuthoredModuleMapForGeneration(e){let t=resolveAuthoredPackageRoot(e.manifest.agentRoot),n=normalizeExternalDependencies([...e.manifest.config.build?.externalDependencies??[],...e.manifest.subagents.flatMap(e=>e.configResolver===void 0?e.agent.config.build?.externalDependencies??[]:e.configResolver.build?.externalDependencies??[])]),r=createCompiledModuleMapSource({manifest:e.manifest,moduleMapPath:e.moduleMapPath}),i=createExtensionScopePlugin([e.manifest,...e.manifest.subagents.map(e=>e.agent)].flatMap(e=>e.extensionMounts.map(e=>({packageNamespace:e.packageNamespace,sourceRoot:e.sourceRoot})))),a=[createVirtualGenerationModuleMapPlugin({id:e.moduleMapPath,source:r}),createDynamicCapabilityTransformPlugin(),createAuthoredDirectiveGuardPlugin(),i,createAuthoredRelativeExtensionResolverPlugin({extensions:RESOLVE_EXTENSIONS}),createAuthoredAssetImportPlugin(),createAuthoredPackageTsConfigPathsPlugin({appPackageRoot:t,extensions:RESOLVE_EXTENSIONS}),createNodeEsmCompatBannerPlugin({includeRequire:!0}),createGenerationPackageBoundaryPlugin({externalDependencies:n,packageRoot:t})].filter(e=>e!==null);try{return removeRolldownModuleRegionComments((await buildSingleRolldownChunk(`authored module map`,{cwd:t,input:e.moduleMapPath,platform:`node`,plugins:a,resolve:{conditionNames:[`eve-source`],extensions:[...RESOLVE_EXTENSIONS]},tsconfig:resolveAuthoredTsConfigPath(t),output:{comments:!1,format:`esm`,sourcemap:!1}})).code)}catch(t){throw createAuthoredModuleBundleError(e.moduleMapPath,t)}}function createVirtualGenerationModuleMapPlugin(e){return{name:`eve-generation-module-map`,resolveId(t){return t===e.id?t:void 0},load(t){return t===e.id?{code:e.source,moduleType:`js`}:void 0}}}async function buildAuthoredModuleBundle(e,t,n){let r=n.channelIdentity?getChannelModuleCache():void 0,a=resolveAuthoredPackageRoot(e),o=resolveAuthoredTsConfigPath(a),s=[r&&r.size>0?{name:`eve-channel-identity`,async resolveId(e,t,n){if(!/channels[/\\]/.test(e)||n.kind!==`import-statement`)return;let a=await this.resolve(e,t,{kind:n.kind,skipSelf:!0});if(a===null||typeof a.id!=`string`)return;let o=resolve(a.id);if(r.has(o))return{id:`${CACHED_CHANNEL_PREFIX}${o}`}},load(e){if(!e.startsWith(CACHED_CHANNEL_PREFIX))return;let t=e.slice(CACHED_CHANNEL_PREFIX.length);return{code:[`const cache = globalThis["${CHANNEL_MODULE_CACHE_KEY}"];`,`export default cache.get(${JSON.stringify(t)});`].join(`
2
2
  `),moduleType:`js`}}}:null,...n.plugins,t.extensionScopeNamespace===void 0?null:createFixedNamespaceScopePlugin(t.extensionScopeNamespace),createAuthoredRelativeExtensionResolverPlugin({extensions:RESOLVE_EXTENSIONS}),createAuthoredAssetImportPlugin(),createAuthoredPackageTsConfigPathsPlugin({appPackageRoot:a,extensions:RESOLVE_EXTENSIONS}),createNodeEsmCompatBannerPlugin({includeRequire:!0}),n.packageBoundaryPlugin].filter(e=>e!==null);try{return(await buildSingleRolldownChunk(`authored module for "${e}"`,{cwd:a,input:e,platform:`node`,plugins:s,resolve:{conditionNames:[`eve-source`],extensions:[...RESOLVE_EXTENSIONS]},tsconfig:o,output:{comments:!1,format:`esm`,sourcemap:n.sourcemap}})).code}catch(t){throw createAuthoredModuleBundleError(e,t)}}function createAuthoredDirectiveGuardPlugin(){return{name:`eve-authored-directive-guard`,async transform(e,t){!AUTHORED_BUNDLED_MODULE_EXTENSION.test(t)||isNodeModulesPath(t)||await assertNoWorkflowDirectivePrologue({filePath:t,source:e})}}}function removeRolldownModuleRegionComments(e){return e.split(`
3
3
  `).filter(e=>!e.startsWith(`//#region `)&&e!==`//#endregion`).join(`
4
4
  `)}async function loadBundledAuthoredModule(t,n){let i=await bundleAuthoredModuleCode(t,n),s=normalizeExternalDependencies(n.externalDependencies),c=createHash(`sha1`).update(t).update(`\0`).update(s.join(`\0`)).update(`\0`).update(n.extensionScopeNamespace??``).update(`\0`).update(i).digest(`hex`),l=join(resolveAuthoredPackageRoot(t),AUTHORED_MODULE_BUNDLE_DIRECTORY_PATH),u=join(l,`${c}.mjs`);existsSync(u)||(mkdirSync(l,{recursive:!0}),writeFileSync(u,i));try{return await import(`${createFileImportSpecifier(u)}?v=${c}`)}catch(e){throw createAuthoredModuleEvaluationError(t,e)}}function createInFlightModuleLoadKey(e,t){return`${e}\0${normalizeExternalDependencies(t.externalDependencies).join(`\0`)}\0${t.extensionScopeNamespace??``}`}function resolveAuthoredTsConfigPath(e){for(let t of[`tsconfig.json`,`jsconfig.json`]){let n=join(e,t);if(existsSync(n))return n}return!1}function resolveAuthoredPackageRoot(e){let t=dirname(e);for(;;){if(existsSync(join(t,`package.json`)))return realpathSync(t);let i=dirname(t);if(i===t)throw Error(`Failed to resolve the authored package root for "${e}".`);t=i}}export{bundleAuthoredModuleCode,bundleAuthoredModuleForGeneration,bundleAuthoredModuleMapForGeneration,bundleExtensionDistributionGraph,loadAuthoredModuleNamespace};
@@ -1 +1 @@
1
- import{transformDynamicRemoteAgentCredentials}from"#internal/workflow-bundle/dynamic-remote-agent-transform.js";import{transformDynamicToolExecute}from"#internal/workflow-bundle/dynamic-tool-transform.js";function createDynamicCapabilityTransformPlugin(n={}){return{async transform(r,i){let a=i.replaceAll(`\\`,`/`),o=n.dynamicTools!==!1&&a.includes(`/tools/`),s=n.dynamicRemoteAgents!==!1&&a.includes(`/subagents/`);if(!o&&!s)return null;let c=r,l=!1;if(o){let e=await transformDynamicToolExecute(i,c);e!==null&&(c=e.code,l=!0)}if(s){let t=await transformDynamicRemoteAgentCredentials(i,c);t!==null&&(c=t.code,l=!0)}return l?{code:c,map:null}:null},name:`eve:dynamic-capability-transform`}}export{createDynamicCapabilityTransformPlugin};
1
+ import{transformDynamicRemoteAgentCredentials}from"#internal/workflow-bundle/dynamic-remote-agent-transform.js";import{transformDynamicToolExecute}from"#internal/workflow-bundle/dynamic-tool-transform.js";function createDynamicCapabilityTransformPlugin(n={}){return{async transform(r,i){let a=i.replaceAll(`\\`,`/`),o=n.dynamicTools!==!1,s=n.dynamicRemoteAgents!==!1&&a.includes(`/subagents/`);if(!o&&!s)return null;let c=r,l=!1;if(o){let e=await transformDynamicToolExecute(i,c);e!==null&&(c=e.code,l=!0)}if(s){let t=await transformDynamicRemoteAgentCredentials(i,c);t!==null&&(c=t.code,l=!0)}return l?{code:c,map:null}:null},name:`eve:dynamic-capability-transform`}}export{createDynamicCapabilityTransformPlugin};
@@ -15,23 +15,36 @@ export type DynamicToolAstNode = {
15
15
  declarations?: DynamicToolAstNode[];
16
16
  end?: number;
17
17
  expression?: DynamicToolAstNode | null;
18
+ generator?: boolean;
18
19
  id?: {
19
20
  name?: string;
20
21
  start?: number;
21
22
  end?: number;
22
23
  } | null;
23
24
  init?: DynamicToolAstNode | null;
25
+ imported?: {
26
+ name?: string;
27
+ value?: unknown;
28
+ } | null;
24
29
  key?: DynamicToolAstNode | null;
25
30
  kind?: string;
26
31
  left?: DynamicToolAstNode | null;
32
+ local?: {
33
+ name?: string;
34
+ } | null;
27
35
  method?: boolean;
28
36
  name?: string;
29
37
  params?: DynamicToolAstNode[];
30
38
  properties?: DynamicToolAstNode[];
31
39
  right?: DynamicToolAstNode | null;
40
+ source?: {
41
+ value?: unknown;
42
+ } | null;
43
+ specifiers?: DynamicToolAstNode[];
32
44
  start?: number;
33
45
  type?: string;
34
46
  value?: DynamicToolAstNode | unknown;
47
+ elements?: Array<DynamicToolAstNode | null>;
35
48
  };
36
49
  export declare function findProperty(object: DynamicToolAstNode, name: string): DynamicToolAstNode | undefined;
37
50
  export declare function walkNode(node: DynamicToolAstNode, visitor: (node: DynamicToolAstNode) => boolean): void;
@@ -1,37 +1,13 @@
1
1
  /**
2
- * Compiler transform for dynamic tool files.
3
- *
4
- * Hoists inline `execute` functions from `defineDynamic`
5
- * event handler return values to module-scope named functions
6
- * registered in the global step registry. The workflow SDK then
7
- * handles serialization and replay.
8
- *
9
- * The walker enters nested functions (helpers, callbacks, IIFEs) so
10
- * patterns like `function buildTool(n) { return { execute() {} } }`
11
- * are supported. For each execute found, scope variables from every
12
- * enclosing function between the handler and the execute are
13
- * collected. Only variables the execute body actually references are
14
- * captured — this avoids TDZ errors from later declarations.
15
- *
16
- * At each call site the inline execute is replaced with:
17
- * - A wrapper that passes referenced scope values as `__vars`
18
- * - `__executeStepFn`: reference to the hoisted function
19
- * - `__closureVars`: snapshot for durable serialization
20
- *
21
- * Limitation: `execute` must be an inline function literal (function
22
- * expression, arrow, or method shorthand). Variable references
23
- * (`execute: myFn`) and call results (`execute: makeFn()`) are not
24
- * detected — the transform returns null and the tool works on the
25
- * first workflow step but is not replayable.
2
+ * Stamps callbacks passed to authored `defineTool()` calls with stable replay
3
+ * descriptors. Each callback is hoisted independently, registered under a
4
+ * module-and-source-coordinate id, and receives only the lexical values its
5
+ * body references.
26
6
  */
27
7
  /**
28
- * Transforms a dynamic tool file:
29
- * 1. Hoists execute functions to module scope with "use step"
30
- * 2. Captures handler-scope variables via __vars parameter
31
- * 3. Adds "use step" to event handlers so the workflow SDK caches
32
- * the handler's return value (resolver runs once per scope)
33
- *
34
- * Returns null if the file doesn't contain a dynamic tool pattern.
8
+ * Transforms every `defineTool()` call imported from an eve authoring entry
9
+ * point. This includes tools created in authored helper modules, not only the
10
+ * file containing `defineDynamic()`.
35
11
  */
36
12
  export declare function transformDynamicToolExecute(filename: string, source: string): Promise<{
37
13
  code: string;
@@ -1,4 +1,4 @@
1
- import{parseWithNitroRolldownAst}from"#internal/bundler/nitro-rolldown.js";import{collectReferencedIdentifierNames,findProperty,walkNode}from"#internal/workflow-bundle/dynamic-tool-ast-references.js";let transformCounter=0;async function transformDynamicToolExecute(e,t){if(!t.includes(`defineDynamic`)||!t.includes(`events`)||!t.includes(`execute`))return null;let n=findDynamicToolHandlers(t,await parseSource(e,t));return n.every(e=>e.executes.length===0)?null:applyTransform(t,n)}async function parseSource(t,n){return await parseWithNitroRolldownAst(t,n)}function findDynamicToolHandlers(e,t){let i=[];return walkNode(t,t=>{if(t.type===`CallExpression`&&t.callee?.type===`Identifier`&&t.callee.name===`defineDynamic`&&t.arguments?.length===1){let r=t.arguments[0];if(r.type===`ObjectExpression`){let t=findProperty(r,`events`);t?.value&&t.value.type===`ObjectExpression`&&collectHandlers(e,t.value,i)}return!1}return!0}),i}function collectHandlers(e,t,n){for(let r of t.properties??[]){if(r.type!==`Property`)continue;let t=r.value;if(!t||t.type!==`ArrowFunctionExpression`&&t.type!==`FunctionExpression`)continue;let i=t.body;if(!i)continue;let a=findBlockBodyStart(i);if(a===null)continue;let o=extractParamNames(t),s=collectScopeVarDeclarations(i),c=findExecuteFunctions(e,i);c.length>0&&n.push({handlerNode:t,bodyStart:a,scopeVars:s,paramNames:o,executes:c})}}function findBlockBodyStart(e){return e.type===`BlockStatement`&&e.start!==void 0?e.start:typeof e.body==`object`&&!Array.isArray(e.body)&&e.body?.type===`BlockStatement`&&e.body.start!==void 0?e.body.start:null}function extractParamNames(e){let t=[];for(let n of e.params??[])n.type===`Identifier`&&n.name&&t.push(n.name);return t}function collectScopeVarDeclarations(e){let t=[];return collectVarsRecursive(e,t),t}function collectVarsRecursive(e,t){if(!e||e.type===`FunctionExpression`||e.type===`ArrowFunctionExpression`||e.type===`FunctionDeclaration`)return;if(e.type===`VariableDeclaration`)for(let n of e.declarations??[])collectDeclaredNames(n,t);e.type===`ForStatement`&&e.init&&collectVarsRecursive(e.init,t);let n=e;if((e.type===`ForInStatement`||e.type===`ForOfStatement`)&&e.left&&collectVarsRecursive(e.left,t),Array.isArray(e.body))for(let n of e.body)collectVarsRecursive(n,t);else e.body&&typeof e.body==`object`&&`type`in e.body&&collectVarsRecursive(e.body,t);if(e.declarations)for(let n of e.declarations)collectVarsRecursive(n,t);if(e.expression&&collectVarsRecursive(e.expression,t),Array.isArray(n.consequent))for(let e of n.consequent)collectVarsRecursive(e,t);else n.consequent&&collectVarsRecursive(n.consequent,t);if(n.alternate&&collectVarsRecursive(n.alternate,t),n.block&&collectVarsRecursive(n.block,t),n.handler&&collectVarsRecursive(n.handler,t),n.finalizer&&collectVarsRecursive(n.finalizer,t),n.cases&&Array.isArray(n.cases))for(let e of n.cases)collectVarsRecursive(e,t)}function collectDeclaredNames(e,t){e.type===`VariableDeclarator`&&collectPatternNames(e.id,t)}function collectPatternNames(e,t){if(e){if(e.type===`Identifier`&&e.name){t.push(e.name);return}if(e.type===`ObjectPattern`)for(let n of e.properties??[])n.type===`Property`?collectPatternNames(n.value,t):n.type===`RestElement`&&collectPatternNames(n.argument,t);if(e.type===`ArrayPattern`)for(let n of e.elements??[])n&&collectPatternNames(n,t)}}function findExecuteFunctions(e,t){let n=[];return walkForExecuteProps(e,t,n,[]),n}function walkForExecuteProps(e,t,n,r){if(!t)return;if(t.type===`FunctionExpression`||t.type===`ArrowFunctionExpression`||t.type===`FunctionDeclaration`){let i=extractParamNames(t),a=t.body;if(!a)return;let o=collectScopeVarDeclarations(a),s=[...r,{params:i,vars:o}];a.type,walkForExecuteProps(e,a,n,s);return}if(t.type===`CallExpression`&&t.callee?.type===`Identifier`&&t.callee.name===`defineTool`&&t.arguments?.length===1&&t.arguments[0].type===`ObjectExpression`){let a=t.arguments[0];for(let t of a.properties??[])if(t.type===`Property`&&!t.computed&&t.key?.type===`Identifier`&&t.key.name===`execute`&&t.start!==void 0&&t.end!==void 0){let a=t.value;if(!a||a.start===void 0||a.end===void 0)continue;let o=a.type===`FunctionExpression`||a.type===`ArrowFunctionExpression`,s=t.method===!0;if(o||s){let o=extractFnParams(e,a),s=extractFnBody(e,a),c=a.body,l=a.async===!0;c&&n.push({propStart:t.start,propEnd:t.end,fnSource:e.slice(a.start,a.end),isAsync:l,params:o,body:s,bodyNode:c,hoistedName:`__eve_dynamic_exec_${transformCounter++}`,nestedScopes:r})}}return}let walk=t=>walkForExecuteProps(e,t,n,r);if(Array.isArray(t.body))for(let e of t.body)walk(e);else t.body&&typeof t.body==`object`&&`type`in t.body&&walk(t.body);if(t.properties)for(let e of t.properties)e.value&&typeof e.value==`object`&&`type`in e.value&&walk(e.value);if(t.callee&&walk(t.callee),t.arguments)for(let e of t.arguments)walk(e);if(t.expression&&walk(t.expression),t.argument&&walk(t.argument),t.init&&walk(t.init),t.left&&walk(t.left),t.right&&walk(t.right),t.declarations)for(let e of t.declarations)walk(e);let a=t;if(Array.isArray(a.consequent))for(let e of a.consequent)walk(e);else a.consequent&&walk(a.consequent);if(a.alternate&&walk(a.alternate),a.block&&walk(a.block),a.handler&&walk(a.handler),a.finalizer&&walk(a.finalizer),a.cases&&Array.isArray(a.cases))for(let e of a.cases)walk(e)}function extractFnParams(e,t){if(!t.params||t.params.length===0)return``;let n=t.params[0],r=t.params[t.params.length-1];return n.start===void 0||r.end===void 0?``:e.slice(n.start,r.end)}function extractFnBody(e,t){let n=t.body;if(!n||n.start===void 0||n.end===void 0)return`{}`;let r=e.slice(n.start,n.end);return t.type===`ArrowFunctionExpression`&&n.type!==`BlockStatement`?`{ return ${r}; }`:r}function applyTransform(e,n){let r=[],i=[],a=[],o=[];for(let e of n)for(let n of e.executes){let s=[...e.paramNames,...e.scopeVars,...n.nestedScopes.flatMap(e=>[...e.params,...e.vars])],c=new Set,l=[];for(let e=s.length-1;e>=0;e--)c.has(s[e])||(c.add(s[e]),l.unshift(s[e]));let u=collectReferencedIdentifierNames(n.bodyNode),d=extractExecuteParamNames(n.params),f=l.filter(e=>!d.has(e)&&u.has(e)),p=f.length>0?`{ ${f.join(`, `)} }`:`{}`,m=n.isAsync?`async `:``,h=f.length>0?`const ${p} = __vars;\n `:``,g=n.params,_=g?`__vars, ${g}`:`__vars`,v=n.body.slice(1,-1).trim(),y=`eve:dynamic-tool//${n.hoistedName}`;i.push(`${m}function ${n.hoistedName}(${_}) {\n ${h}${v}\n}`),a.push(`${n.hoistedName}.stepId = ${JSON.stringify(y)};`),a.push(`__eveStepRegistry.set(${JSON.stringify(y)}, ${n.hoistedName});`),o.push(n.hoistedName);let b=g||``,x=g?splitParamsTopLevel(g).map(e=>extractParamBindingName(e)).join(`, `):``,S=x?`${p}, ${x}`:p,C=n.isAsync?`async `:``,w=n.isAsync?`await `:``;r.push({start:n.propStart,end:n.propEnd,text:[`execute: ${C}(${b}) => ${w}${n.hoistedName}(${S})`,`__executeStepFn: ${n.hoistedName}`,`__closureVars: ${p}`].join(`,
2
- `)})}let s=[...r].sort((e,t)=>t.start-e.start),c=e;for(let e of s)c=c.slice(0,e.start)+e.text+c.slice(e.end);c=`${[`var __eveStepRegistrySym = Symbol.for("@workflow/core//registeredSteps");`,`if (!globalThis[__eveStepRegistrySym]) globalThis[__eveStepRegistrySym] = new Map();`,`var __eveStepRegistry = globalThis[__eveStepRegistrySym];`].join(`
3
- `)}\n${c}`;let l=[...i,...a];return l.length>0&&(c=`${c}\n\n${l.join(`
4
- `)}\n`),{code:c}}function splitParamsTopLevel(e){let t=[],n=0,r=0;for(let i=0;i<e.length;i++){let a=e[i];a===`<`||a===`(`||a===`[`||a===`{`?n++:a===`>`||a===`)`||a===`]`||a===`}`?n--:a===`,`&&n===0&&(t.push(e.slice(r,i)),r=i+1)}return t.push(e.slice(r)),t}function extractParamBindingName(e){let t=e.trim(),n=0;for(let e=0;e<t.length;e++){let r=t[e];if(r===`<`||r===`(`||r===`[`||r===`{`)n++;else if(r===`>`||r===`)`||r===`]`||r===`}`)n--;else if(n===0&&(r===`:`||r===`=`))return t.slice(0,e).trim()}return t}function extractExecuteParamNames(e){if(!e)return new Set;let t=new Set;for(let n of splitParamsTopLevel(e)){let e=extractParamBindingName(n);e&&t.add(e)}return t}export{transformDynamicToolExecute as transformDynamicToolAwait,transformDynamicToolExecute};
1
+ import{createHash}from"node:crypto";import{parseWithNitroRolldownAst}from"#internal/bundler/nitro-rolldown.js";import{collectReferencedIdentifierNames,findProperty,walkNode}from"#internal/workflow-bundle/dynamic-tool-ast-references.js";async function transformDynamicToolExecute(e,n){if(!n.includes(`defineTool`))return null;let r=await parseWithNitroRolldownAst(e,n),i=findDefineToolAliases(r);if(i.size===0)return null;let a=[];return walkForCallbacks(n,r,a,[],i),a.length===0?null:applyTransform(e,n,a)}function findDefineToolAliases(e){let t=new Set;return walkNode(e,e=>{if(e.type!==`ImportDeclaration`)return!0;let n=e.source?.value;if(typeof n!=`string`||n!==`eve`&&!n.startsWith(`eve/`))return!1;for(let n of e.specifiers??[])n.type===`ImportSpecifier`&&(n.imported?.name??n.imported?.value)===`defineTool`&&n.local?.name&&t.add(n.local.name);return!1}),t}function walkForCallbacks(e,t,n,r,i){if(t){if(isFunction(t)){let a=t.body;if(!a)return;walkForCallbacks(e,a,n,[...r,{params:extractParamNames(t),vars:collectScopeVarDeclarations(a)}],i);return}if(t.type===`CallExpression`&&t.callee?.type===`Identifier`&&t.callee.name!==void 0&&i.has(t.callee.name)&&t.arguments?.length===1&&t.arguments[0]?.type===`ObjectExpression`){collectToolCallbacks(e,t.arguments[0],n,r);return}for(let a of Object.values(t))if(Array.isArray(a))for(let t of a)isAstNode(t)&&walkForCallbacks(e,t,n,r,i);else isAstNode(a)&&walkForCallbacks(e,a,n,r,i)}}function collectToolCallbacks(e,t,n,i){collectCallbackProperty(e,findProperty(t,`execute`),`execute`,`execute`,n,i),collectCallbackProperty(e,findProperty(t,`toModelOutput`),`toModelOutput`,`toModelOutput`,n,i);let a=findProperty(t,`approval`),o=a?.value;o?.type===`ObjectExpression`?(collectCallbackProperty(e,findProperty(o,`request`),`approvalRequest`,`request`,n,i),collectCallbackProperty(e,findProperty(o,`response`),`approvalResponse`,`response`,n,i)):collectCallbackProperty(e,a,`approvalRequest`,`approval`,n,i)}function collectCallbackProperty(e,t,n,r,i,a){if(t?.type!==`Property`||t.start===void 0||t.end===void 0)return;let o=t.value;if(!(!o||o.start===void 0||o.end===void 0)){if(isFunction(o)||t.method===!0){let s=o.body;if(!s)return;i.push({body:extractFnBody(e,o),bodyNode:s,isAsync:o.async===!0,isGenerator:o.generator===!0,isReference:!1,nestedScopes:a,params:extractFnParams(e,o),phase:n,propertyName:r,propEnd:t.end,propStart:t.start,sourceEnd:o.end,sourceStart:o.start});return}o.type===`Identifier`&&i.push({body:`{ return ${e.slice(o.start,o.end)}(...__args); }`,bodyNode:o,isAsync:!1,isGenerator:!1,isReference:!0,nestedScopes:a,params:`...__args`,phase:n,propertyName:r,propEnd:t.end,propStart:t.start,sourceEnd:o.end,sourceStart:o.start})}}function applyTransform(e,t,r){let i=[],a=[],o=[],s=stableModuleId(e);for(let e of r){let t=collectReferencedIdentifierNames(e.bodyNode),r=e.nestedScopes.flatMap(e=>[...e.params,...e.vars]),c=extractCallbackParamNames(e.params),l=dedupeShadowed(r).filter(e=>!c.has(e)&&t.has(e)),u=l.length>0?`{ ${l.join(`, `)} }`:`{}`,d=`${String(e.sourceStart)}-${String(e.sourceEnd)}`,f=e.phase.replace(/[A-Z]/g,e=>`_${e.toLowerCase()}`),p=e.phase===`execute`?`__eve_dynamic_exec_${e.sourceStart}`:`__eve_dynamic_${f}_${e.sourceStart}`,m=`eve:dynamic-tool//${s}/${e.phase}/${d}`,h=e.params,g=h?`__vars, ${h}`:`__vars`,_=l.length>0?`const ${u} = __vars;\n `:``,v=e.body.slice(1,-1).trim(),y=e.isAsync?`async `:``,b=e.isGenerator?`*`:``;a.push(`${y}function${b} ${p}(${g}) {\n ${_}${v}\n}`),o.push(`${p}.stepId = ${JSON.stringify(m)};`),o.push(`__eveStepRegistry.set(${JSON.stringify(m)}, ${p});`);let x=`__eveStampDynamicCallback(${createLiveWrapper(e,p,u)}, ${JSON.stringify(m)}, ${u})`,S=[`${e.propertyName}: ${x}`];e.phase===`execute`&&S.push(`__executeStepFn: ${p}`,`__closureVars: ${u}`),i.push({end:e.propEnd,start:e.propStart,text:S.join(`,
2
+ `)})}let c=t;for(let e of i.sort((e,t)=>t.start-e.start))c=c.slice(0,e.start)+e.text+c.slice(e.end);let l=[`var __eveStepRegistrySym = Symbol.for("@workflow/core//registeredSteps");`,`if (!globalThis[__eveStepRegistrySym]) globalThis[__eveStepRegistrySym] = new Map();`,`var __eveStepRegistry = globalThis[__eveStepRegistrySym];`,`var __eveDurableCallbackSym = Symbol.for("eve:durable-dynamic-callback");`,`function __eveStampDynamicCallback(callback, stepId, closure) {`,` Object.defineProperty(callback, __eveDurableCallbackSym, { configurable: true, value: { stepId, closure } });`,` return callback;`,`}`].join(`
3
+ `),u=[...a,...o].join(`
4
+ `);return{code:`${l}\n${c}\n\n${u}\n`}}function createLiveWrapper(e,t,n){if(e.isReference)return`(...__args) => ${t}(${n}, ...__args)`;let r=e.isAsync?`async `:``;return e.isGenerator?`${r}function* (...__args) { yield* ${t}(${n}, ...__args); }`:`${r}(...__args) => ${e.isAsync?`await `:``}${t}(${n}, ...__args)`}function stableModuleId(t){let n=t.replaceAll(`\\`,`/`).replace(/[?#].*$/,``),r=n.lastIndexOf(`/node_modules/`);if(r>=0)n=n.slice(r+14);else{let e=process.cwd().replaceAll(`\\`,`/`);n.startsWith(`${e}/`)&&(n=n.slice(e.length+1))}return createHash(`sha256`).update(n).digest(`hex`).slice(0,32)}function dedupeShadowed(e){let t=new Set,n=[];for(let r=e.length-1;r>=0;r--){let i=e[r];t.has(i)||(t.add(i),n.unshift(i))}return n}function collectScopeVarDeclarations(e){let t=[];return walkNode(e,n=>n!==e&&isFunction(n)?!1:(n.type===`VariableDeclarator`&&collectPatternNames(n.id,t),n.type===`FunctionDeclaration`&&n.id?.name&&t.push(n.id.name),!0)),t}function collectPatternNames(e,t){if(e){if(e.type===`Identifier`&&e.name){t.push(e.name);return}if(e.type===`ObjectPattern`)for(let n of e.properties??[])collectPatternNames(n.type===`RestElement`?n.argument:n.value,t);if(e.type===`ArrayPattern`)for(let n of e.elements??[])collectPatternNames(n,t);e.type===`AssignmentPattern`&&collectPatternNames(e.left,t)}}function extractParamNames(e){let t=[];for(let n of e.params??[])collectPatternNames(n,t);return t}function extractFnParams(e,t){if(!t.params||t.params.length===0)return``;let n=t.params[0],r=t.params[t.params.length-1];return n.start===void 0||r.end===void 0?``:e.slice(n.start,r.end)}function extractFnBody(e,t){let n=t.body;if(!n||n.start===void 0||n.end===void 0)return`{}`;let r=e.slice(n.start,n.end);return t.type===`ArrowFunctionExpression`&&n.type!==`BlockStatement`?`{ return ${r}; }`:r}function splitParamsTopLevel(e){let t=[],n=0,r=0;for(let i=0;i<e.length;i++){let a=e[i];a===`<`||a===`(`||a===`[`||a===`{`?n++:a===`>`||a===`)`||a===`]`||a===`}`?n--:a===`,`&&n===0&&(t.push(e.slice(r,i)),r=i+1)}return t.push(e.slice(r)),t}function extractParamBindingName(e){let t=e.trim(),n=0;for(let e=0;e<t.length;e++){let r=t[e];if(r===`<`||r===`(`||r===`[`||r===`{`)n++;else if(r===`>`||r===`)`||r===`]`||r===`}`)n--;else if(n===0&&(r===`:`||r===`=`))return t.slice(0,e).trim()}return t}function extractCallbackParamNames(e){let t=[];if(!e)return new Set;for(let n of splitParamsTopLevel(e)){let e=extractParamBindingName(n);e.startsWith(`...`)?t.push(e.slice(3)):t.push(e)}return new Set(t)}function isFunction(e){return e.type===`ArrowFunctionExpression`||e.type===`FunctionDeclaration`||e.type===`FunctionExpression`}function isAstNode(e){return typeof e==`object`&&!!e&&typeof e.type==`string`}export{transformDynamicToolExecute as transformDynamicToolAwait,transformDynamicToolExecute};