eve 0.66.0 → 0.66.2

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 (193) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/dist/src/channel/forwarded-principal.d.ts +26 -6
  3. package/dist/src/channel/forwarded-principal.js +1 -1
  4. package/dist/src/chunks/{use-eve-agent-BUeSjwIk.js → use-eve-agent-Di1u2zKu.js} +24 -4
  5. package/dist/src/chunks/{use-eve-agent-ydPlURM4.js → use-eve-agent-PbSMyJ6e.js} +24 -4
  6. package/dist/src/cli/commands/deploy.d.ts +3 -1
  7. package/dist/src/cli/commands/deploy.js +1 -1
  8. package/dist/src/cli/commands/extension-build.js +1 -1
  9. package/dist/src/cli/commands/integration-connect.js +1 -1
  10. package/dist/src/cli/commands/register-project-commands.js +1 -1
  11. package/dist/src/cli/commands/registry-project.d.ts +2 -1
  12. package/dist/src/cli/commands/registry-project.js +2 -2
  13. package/dist/src/cli/commands/registry.js +1 -1
  14. package/dist/src/cli/commands/trace-detail.d.ts +5 -25
  15. package/dist/src/cli/commands/trace-detail.js +1 -1
  16. package/dist/src/cli/commands/trace.js +2 -2
  17. package/dist/src/cli/commands/vercel-non-interactive.d.ts +7 -0
  18. package/dist/src/cli/commands/vercel-non-interactive.js +1 -1
  19. package/dist/src/cli/dev/run-interactive-ui.js +1 -1
  20. package/dist/src/cli/dev/tui/argument-typeahead.d.ts +1 -1
  21. package/dist/src/cli/dev/tui/argument-typeahead.js +1 -1
  22. package/dist/src/cli/dev/tui/prompt-command-handler.js +1 -1
  23. package/dist/src/cli/dev/tui/prompt-commands.js +1 -1
  24. package/dist/src/cli/dev/tui/registry-result-message.js +1 -1
  25. package/dist/src/cli/dev/tui/remote-auth.js +1 -1
  26. package/dist/src/cli/dev/tui/runner.d.ts +2 -2
  27. package/dist/src/cli/dev/tui/runner.js +1 -1
  28. package/dist/src/cli/dev/tui/setup-commands.d.ts +3 -1
  29. package/dist/src/cli/dev/tui/setup-commands.js +1 -1
  30. package/dist/src/cli/dev/tui/setup-panel.d.ts +14 -0
  31. package/dist/src/cli/dev/tui/setup-panel.js +4 -4
  32. package/dist/src/cli/dev/tui/subagent-pump.d.ts +2 -10
  33. package/dist/src/cli/dev/tui/subagent-pump.js +1 -1
  34. package/dist/src/cli/dev/tui/terminal-renderer.d.ts +2 -2
  35. package/dist/src/cli/dev/tui/terminal-renderer.js +10 -10
  36. package/dist/src/cli/dev/tui/traces/trace-conversation.js +1 -1
  37. package/dist/src/cli/dev/tui/tui.js +1 -1
  38. package/dist/src/client/client-error.js +1 -1
  39. package/dist/src/client/open-stream.d.ts +3 -2
  40. package/dist/src/client/open-stream.js +1 -1
  41. package/dist/src/client/session.d.ts +16 -1
  42. package/dist/src/client/session.js +1 -1
  43. package/dist/src/compiled/.vendor-stamp.json +1 -1
  44. package/dist/src/discover/filesystem.d.ts +2 -0
  45. package/dist/src/discover/filesystem.js +1 -1
  46. package/dist/src/discover/grammar.d.ts +4 -2
  47. package/dist/src/discover/grammar.js +1 -1
  48. package/dist/src/discover/sandbox.js +1 -1
  49. package/dist/src/evals/session.d.ts +3 -2
  50. package/dist/src/evals/session.js +1 -1
  51. package/dist/src/evals/types.d.ts +8 -2
  52. package/dist/src/eve-channel/index.js +1 -1
  53. package/dist/src/eve-channel/types.d.ts +12 -4
  54. package/dist/src/execution/cancel-indexed-session-tasks-step.js +1 -1
  55. package/dist/src/execution/dynamic-workflow/tool.js +1 -1
  56. package/dist/src/execution/proxied-deliver-step.js +1 -1
  57. package/dist/src/execution/route-child-delivery.js +2 -2
  58. package/dist/src/execution/session/admission.js +1 -1
  59. package/dist/src/execution/session/finalization.js +1 -1
  60. package/dist/src/execution/session/handoff-steps.js +1 -1
  61. package/dist/src/execution/session/input-queue.d.ts +12 -10
  62. package/dist/src/execution/session/input-queue.js +1 -1
  63. package/dist/src/execution/session/next-input.js +1 -1
  64. package/dist/src/execution/session/program.js +1 -1
  65. package/dist/src/execution/session/turn-step-result.d.ts +3 -1
  66. package/dist/src/execution/session/turn-step-result.js +1 -1
  67. package/dist/src/execution/session/turn-step-types.d.ts +7 -2
  68. package/dist/src/execution/session/turn-step.js +1 -1
  69. package/dist/src/execution/session/turn.js +1 -1
  70. package/dist/src/execution/settle-cancelled-turn-step.js +1 -1
  71. package/dist/src/execution/tasks/parent/control-shared.js +1 -1
  72. package/dist/src/execution/tasks/parent/dispatch.js +1 -1
  73. package/dist/src/execution/tasks/parent/hitl-proxy-steps.d.ts +1 -0
  74. package/dist/src/execution/tasks/parent/hitl-proxy-steps.js +1 -1
  75. package/dist/src/execution/tasks/parent/tool-execution.js +1 -1
  76. package/dist/src/execution/tools/agent-router-workflow.js +1 -1
  77. package/dist/src/execution/tools/ask-question-workflow.js +1 -1
  78. package/dist/src/execution/tools/sleep-workflow.js +1 -1
  79. package/dist/src/execution/tools/subagent/accept-event-step.js +1 -1
  80. package/dist/src/execution/tools/subagent/invoke-preparation.js +1 -1
  81. package/dist/src/execution/tools/subagent/invoke-step.js +1 -1
  82. package/dist/src/execution/tools/subagent/task-cancel.d.ts +1 -1
  83. package/dist/src/execution/tools/subagent/task-cancel.js +1 -1
  84. package/dist/src/harness/session-limit-enforcement.js +1 -1
  85. package/dist/src/harness/tool-loop.js +2 -2
  86. package/dist/src/harness/turn-tag-state.d.ts +2 -2
  87. package/dist/src/harness/workflow-tool-runs.d.ts +33 -5
  88. package/dist/src/harness/workflow-tool-runs.js +1 -1
  89. package/dist/src/internal/application/package.js +1 -1
  90. package/dist/src/internal/instrumentation-layout.js +1 -1
  91. package/dist/src/internal/model-auth/vercel-cli.d.ts +2 -0
  92. package/dist/src/internal/model-auth/vercel-cli.js +1 -1
  93. package/dist/src/internal/nitro/host/build-extension.js +1 -1
  94. package/dist/src/internal/nitro/host/extension-build-lock.d.ts +9 -0
  95. package/dist/src/internal/nitro/host/extension-build-lock.js +1 -0
  96. package/dist/src/internal/nitro/host/extension-capability-requirements.d.ts +1 -0
  97. package/dist/src/internal/nitro/host/extension-capability-requirements.js +1 -1
  98. package/dist/src/internal/nitro/host/extension-declarations.js +1 -1
  99. package/dist/src/internal/nitro/host/extension-distribution.js +1 -1
  100. package/dist/src/internal/nitro/host/extension-state-usage.d.ts +2 -2
  101. package/dist/src/internal/nitro/host/extension-state-usage.js +1 -1
  102. package/dist/src/internal/nitro/host/prepare-application-host.d.ts +5 -4
  103. package/dist/src/internal/nitro/host/prepare-application-host.js +1 -1
  104. package/dist/src/internal/nitro/host/types.d.ts +2 -2
  105. package/dist/src/internal/nitro/host/workspace-extensions.d.ts +31 -0
  106. package/dist/src/internal/nitro/host/workspace-extensions.js +1 -0
  107. package/dist/src/public/next/index.d.ts +10 -7
  108. package/dist/src/public/next/index.js +1 -1
  109. package/dist/src/public/next/server.d.ts +3 -0
  110. package/dist/src/public/next/server.js +2 -2
  111. package/dist/src/self-modification/extension/local-only.d.ts +5 -0
  112. package/dist/src/self-modification/extension/local-only.js +1 -0
  113. package/dist/src/self-modification/extension/subagents/agent/instructions.js +6 -6
  114. package/dist/src/self-modification/extension/subagents/agent/skills/trace_analysis.d.ts +10 -0
  115. package/dist/src/self-modification/extension/subagents/agent/skills/trace_analysis.js +19 -0
  116. package/dist/src/self-modification/extension/subagents/agent/tools/inspect_trace.d.ts +128 -0
  117. package/dist/src/self-modification/extension/subagents/agent/tools/inspect_trace.js +1 -0
  118. package/dist/src/self-modification/extension/subagents/agent/tools/inspect_trace_spans.d.ts +80 -0
  119. package/dist/src/self-modification/extension/subagents/agent/tools/inspect_trace_spans.js +1 -0
  120. package/dist/src/self-modification/extension/subagents/agent/tools/registry_add.js +1 -1
  121. package/dist/src/self-modification/extension/subagents/agent/tools/search_traces.d.ts +53 -0
  122. package/dist/src/self-modification/extension/subagents/agent/tools/search_traces.js +1 -0
  123. package/dist/src/self-modification/extension/trace-inspection.d.ts +15 -0
  124. package/dist/src/self-modification/extension/trace-inspection.js +1 -0
  125. package/dist/src/self-modification/sandbox.js +1 -1
  126. package/dist/src/setup/ask.d.ts +2 -0
  127. package/dist/src/setup/ask.js +1 -1
  128. package/dist/src/setup/boxes/link-project.d.ts +2 -0
  129. package/dist/src/setup/boxes/link-project.js +1 -1
  130. package/dist/src/setup/cli/option-row.d.ts +3 -1
  131. package/dist/src/setup/cli/option-row.js +1 -1
  132. package/dist/src/setup/flows/deploy.d.ts +1 -0
  133. package/dist/src/setup/flows/deploy.js +1 -1
  134. package/dist/src/setup/flows/install-vercel-cli.js +1 -1
  135. package/dist/src/setup/flows/login.js +1 -1
  136. package/dist/src/setup/flows/model-login-connection.js +1 -1
  137. package/dist/src/setup/flows/model-login.d.ts +4 -0
  138. package/dist/src/setup/flows/model-login.js +1 -1
  139. package/dist/src/setup/flows/vercel-model-login.js +1 -1
  140. package/dist/src/setup/integrations/runner.js +1 -1
  141. package/dist/src/setup/integrations/web/setup.d.ts +15 -10
  142. package/dist/src/setup/integrations/web/setup.js +30 -1
  143. package/dist/src/setup/scaffold/create/project.js +2 -2
  144. package/dist/src/setup/scaffold/create/web-template.d.ts +7 -3
  145. package/dist/src/setup/scaffold/create/web-template.js +39 -20
  146. package/dist/src/setup/scaffold/update/channels.js +2 -2
  147. package/dist/src/setup/slackbot.js +1 -1
  148. package/dist/src/setup/vercel-project.d.ts +2 -0
  149. package/dist/src/setup/vercel-project.js +0 -0
  150. package/dist/src/setup/vercel-trace-sampling.d.ts +3 -0
  151. package/dist/src/setup/vercel-trace-sampling.js +1 -0
  152. package/dist/src/subagents/parent-notification.d.ts +1 -1
  153. package/dist/src/subagents/remote-dispatch.d.ts +1 -0
  154. package/dist/src/subagents/remote-dispatch.js +1 -1
  155. package/dist/src/svelte/index.js +1 -1
  156. package/dist/src/svelte/use-eve-agent.js +1 -1
  157. package/dist/src/tasks/delivery-context.js +2 -2
  158. package/dist/src/tasks/notification.d.ts +6 -0
  159. package/dist/src/tasks/notification.js +1 -1
  160. package/dist/src/tracing/agent-trace-context-store.js +1 -1
  161. package/dist/src/tracing/local-trace-analysis.d.ts +51 -0
  162. package/dist/src/tracing/local-trace-analysis.js +1 -0
  163. package/dist/src/tracing/local-trace-discovery-index.d.ts +15 -0
  164. package/dist/src/tracing/local-trace-discovery-index.js +1 -0
  165. package/dist/src/tracing/local-trace-operations.d.ts +13 -0
  166. package/dist/src/tracing/local-trace-operations.js +1 -0
  167. package/dist/src/tracing/local-trace-query.d.ts +17 -0
  168. package/dist/src/tracing/local-trace-query.js +1 -0
  169. package/dist/src/tracing/local-trace-span-processor.js +1 -1
  170. package/dist/src/tracing/local-trace-summary.d.ts +31 -0
  171. package/dist/src/tracing/local-trace-summary.js +1 -0
  172. package/dist/src/vue/index.js +1 -1
  173. package/dist/src/vue/use-eve-agent.js +1 -1
  174. package/docs/concepts/project-structure.mdx +2 -4
  175. package/docs/concepts/sessions-runs-and-streaming.md +2 -2
  176. package/docs/evals/cases.mdx +1 -0
  177. package/docs/extensions.md +3 -1
  178. package/docs/guides/auth-and-route-protection.md +33 -1
  179. package/docs/guides/client/streaming.mdx +26 -0
  180. package/docs/guides/deployment/vercel.mdx +5 -5
  181. package/docs/guides/frontend/nextjs.mdx +20 -7
  182. package/docs/guides/frontend/overview.mdx +1 -1
  183. package/docs/guides/instrumentation/agent-runs.mdx +4 -4
  184. package/docs/guides/remote-agents.md +3 -1
  185. package/docs/install-integrations.mdx +1 -1
  186. package/docs/reference/agent-files.md +16 -0
  187. package/docs/reference/cli.md +1 -1
  188. package/docs/subagents/index.mdx +8 -2
  189. package/package.json +1 -1
  190. package/dist/src/internal/nitro/host/dev-workspace-extensions.d.ts +0 -18
  191. package/dist/src/internal/nitro/host/dev-workspace-extensions.js +0 -1
  192. package/dist/src/tasks/session-task-cohorts.d.ts +0 -7
  193. package/dist/src/tasks/session-task-cohorts.js +0 -1
@@ -1,3 +1,3 @@
1
- import{ToolLoopAgent,isStepCount}from"ai";import{readClientContext}from"#internal/client-context.js";import{createErrorId,createLogger,formatError,logError}from"#internal/logging.js";import{contextStorage}from"#context/container.js";import{AuthKey,HistoryStateKey,ParentSessionKey,ScheduleIdKey,SessionCallbackKey,StaticModelReferenceKey,TaskDeliveryPolicyKey,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{toModelSchema}from"#tools/schema.js";import{resolveProviderHeaders}from"#internal/gateway.js";import{formatLanguageModelGatewayId}from"#internal/runtime-model.js";import{createFrameworkUserMessage,createTurnInputMessages,createUserMessage,frameworkMessageKindForStepInput,normalizeModelMessages,normalizeUserContent,resolveAssistantStepText,validateHarnessModelMessages}from"#harness/messages.js";import{getEffectiveModelSelection}from"#context/effective-model.js";import{buildDynamicTools,buildResponseAuthorizationTools}from"#context/build-dynamic-tools.js";import{BoundaryHookError}from"#shared/boundary-hook-error.js";import{drainMemoryCommit,prepareMemoryCompaction,prepareMemoryPreamble}from"#context/memory-lifecycle.js";import{canonicalizeMemoryRecords,clearMemorySessionState,shouldCanonicalizeMemory}from"#shared/memory-state.js";import{advanceStep,emitFailedStep,emitRecoverableFailedTurn,emitStepStarted,emitStreamContent,emitTurnEpilogue,emitTurnPreamble,getHarnessEmissionState,isHarnessBetweenTurns,setHarnessEmissionState}from"#harness/emission.js";import{projectParkedAgentHandles,resolveAgentsAnnouncement}from"#subagents/handles/prompt.js";import{renderPendingApprovalsInstruction,renderPendingApprovalsSnippet}from"#harness/hitl/approval-prompt.js";import{setTimeout}from"node:timers/promises";import{getPendingInputBatches,queueDeferredStepInput}from"#harness/pending-input-batches.js";import{createCoordinationRequestFromToolCall,getPendingCoordinationBatch,resolvePendingCoordination,setPendingCoordinationBatch}from"#harness/coordination.js";import{getAgentHandleStore}from"#subagents/handles/store.js";import{buildDynamicSubagentTools}from"#context/dynamic-subagent-lifecycle.js";import{hydrateSandboxAttachments,stageAttachmentsToSandbox}from"#harness/attachment-staging.js";import{activeTurnId}from"#harness/active-turn-id.js";import{createHistoryViewPreparer}from"#shared/history-view.js";import{isDynamicModelSelectionError}from"#context/dynamic-model-lifecycle.js";import{getSupersededAuthorizationChallenges,setPendingAuthorization}from"#harness/authorization.js";import{appendPendingInputBatch,consumeDeferredStepInput as consumeDeferredStepInput$1,getApprovedTools,getPendingInputRequestIds,hasPendingApprovalBatch,hasRunnableDeferredStepInput,hasStepInput,resolvePendingInput}from"#harness/input-requests.js";import{accumulateTurnUsage,getTurnUsageState,setTurnUsageState}from"#harness/turn-tag-state.js";import{PendingSkillAnnouncementKey}from"#context/dynamic-skill-lifecycle.js";import{setEveAttributes}from"#runtime/attributes/emit.js";import{buildDynamicInstructionMessages,drainDynamicInstructionUserMessages,prepareDynamicInstructionPreamble}from"#context/dynamic-instruction-lifecycle.js";import{isTurnCancellation,throwIfTurnAborted}from"#harness/turn-cancellation.js";import{resolveInitiatingTaskContext}from"#tasks/delivery-context.js";import{BackgroundToolExecutorKey,createBackgroundToolCallBatch}from"#harness/background-tools.js";import{createToolResultMessagePartFromToolError}from"#harness/action-result-helpers.js";import{getApprovalAuditState,markApprovalCandidateHistoryEventEmitted,markApprovalCandidatePendingEventEmitted,markApprovalSettlementEventEmitted}from"#harness/approval-candidates.js";import{estimateTokens}from"#harness/token-estimate.js";import{clearTurnClientContextState,getTurnClientContextState,setTurnClientContextState}from"#harness/turn-client-context.js";import{EMPTY_DELIVERY_SENTINEL,hasEmptyDeliverySentinel}from"#shared/empty-delivery.js";import{getInvalidToolCallInputError,isInvalidToolCall}from"#harness/tool-call-input-errors.js";import{ContentFilteredModelResponseError,EmptyModelResponseError,classifyModelCallError,extractModelCallErrorDetails,extractUnsupportedProviderToolTypes,extractUpstreamRejectionMessage,isNoOutputGeneratedError}from"#harness/model-call-error.js";import{interruptStreamOnFailure}from"#harness/interruptible-stream.js";import{resolveInlineAuthorizationInterrupt}from"#harness/inline-tool-authorization.js";import{createCurrentMessages}from"#harness/current-messages.js";import{extractToolApprovalInputRequests}from"#harness/input-extraction.js";import{applyLastToolCacheBreakpoint,applySystemCacheBreakpoint,detectPromptCachePath,getAnthropicCacheMarker}from"#harness/prompt-cache.js";import{mergeProviderSafetyIdentifier}from"#harness/provider-safety.js";import{requireSessionModelReference}from"#harness/types.js";import{GenerationSteering}from"#harness/generation-steering.js";import{estimateRequestEnvelope,getRequestEnvelopeTokens,setRequestEnvelopeTokens}from"#harness/request-envelope.js";import{compactMessages,getInputTokenCount,resolveCompactionModel,shouldCompact}from"#harness/compaction.js";import{applySessionLimitContinuation,enforceSessionUsageLimit}from"#harness/session-limit-enforcement.js";import{coordinateApprovalDelivery,shouldPrepareApprovalReplayTools}from"#harness/approval-delivery-coordinator.js";import{convertStaleResponsesToUserMessage,dropStaleSessionLimitContinuationResponses}from"#harness/stale-input-responses.js";import{normalizeProviderToolHistory}from"#harness/provider-tool-history.js";import{resolveDeliveryPolicy}from"#tasks/delivery-policy.js";import{extractWorkflowStreamWriteErrorDetails}from"#harness/workflow-stream-error.js";import{getAdvertisedTools}from"#harness/advertised-tools.js";import{resolveFrameworkToolFromUpstreamType}from"#harness/provider-tools.js";import{buildStepHooks,emitStepActions,readGatewayGenerationId}from"#harness/step-hooks.js";import{buildToolApproval,buildToolSetFromDefinitions,buildToolSetWithProviderTools}from"#harness/tools.js";import{FINAL_OUTPUT_TOOL_NAME,buildFinalOutputTool}from"#harness/final-output.js";const environment=process.env.NODE_ENV??`unknown`,eveVersion=resolveInstalledPackageInfo().version,log=createLogger(`harness.tool-loop`);function logToolExecutionError(e){e.toolOutput.type===`tool-error`&&logError(log,`tool execution failed`,e.toolOutput.error,{toolName:e.toolCall.toolName,toolCallId:e.toolCall.toolCallId})}function mergeSystemInstructions(e){if(e.length===0)return;if(e.length===1)return{...e[0]};let t;for(let n of e)n.providerOptions!==void 0&&(t={...t,...n.providerOptions});let n={role:`system`,content:e.map(e=>e.content).join(`
1
+ import{ToolLoopAgent,isStepCount}from"ai";import{readClientContext}from"#internal/client-context.js";import{createErrorId,createLogger,formatError,logError}from"#internal/logging.js";import{contextStorage}from"#context/container.js";import{AuthKey,HistoryStateKey,ParentSessionKey,ScheduleIdKey,SessionCallbackKey,StaticModelReferenceKey,TaskDeliveryPolicyKey,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{toModelSchema}from"#tools/schema.js";import{resolveProviderHeaders}from"#internal/gateway.js";import{formatLanguageModelGatewayId}from"#internal/runtime-model.js";import{createFrameworkUserMessage,createTurnInputMessages,createUserMessage,frameworkMessageKindForStepInput,normalizeModelMessages,normalizeUserContent,resolveAssistantStepText,validateHarnessModelMessages}from"#harness/messages.js";import{getEffectiveModelSelection}from"#context/effective-model.js";import{buildDynamicTools,buildResponseAuthorizationTools}from"#context/build-dynamic-tools.js";import{BoundaryHookError}from"#shared/boundary-hook-error.js";import{drainMemoryCommit,prepareMemoryCompaction,prepareMemoryPreamble}from"#context/memory-lifecycle.js";import{canonicalizeMemoryRecords,clearMemorySessionState,shouldCanonicalizeMemory}from"#shared/memory-state.js";import{advanceStep,emitFailedStep,emitRecoverableFailedTurn,emitStepStarted,emitStreamContent,emitTurnEpilogue,emitTurnPreamble,getHarnessEmissionState,isHarnessBetweenTurns,setHarnessEmissionState}from"#harness/emission.js";import{projectParkedAgentHandles,resolveAgentsAnnouncement}from"#subagents/handles/prompt.js";import{renderPendingApprovalsInstruction,renderPendingApprovalsSnippet}from"#harness/hitl/approval-prompt.js";import{setTimeout}from"node:timers/promises";import{getPendingInputBatches,queueDeferredStepInput}from"#harness/pending-input-batches.js";import{createCoordinationRequestFromToolCall,getPendingCoordinationBatch,resolvePendingCoordination,setPendingCoordinationBatch}from"#harness/coordination.js";import{getBackgroundTasks}from"#harness/workflow-tool-runs.js";import{getAgentHandleStore}from"#subagents/handles/store.js";import{buildDynamicSubagentTools}from"#context/dynamic-subagent-lifecycle.js";import{hydrateSandboxAttachments,stageAttachmentsToSandbox}from"#harness/attachment-staging.js";import{activeTurnId}from"#harness/active-turn-id.js";import{createHistoryViewPreparer}from"#shared/history-view.js";import{isDynamicModelSelectionError}from"#context/dynamic-model-lifecycle.js";import{accumulateTurnUsage,getTurnUsageState,setTurnUsageState}from"#harness/turn-tag-state.js";import{getSupersededAuthorizationChallenges,setPendingAuthorization}from"#harness/authorization.js";import{appendPendingInputBatch,consumeDeferredStepInput as consumeDeferredStepInput$1,getApprovedTools,getPendingInputRequestIds,hasPendingApprovalBatch,hasRunnableDeferredStepInput,hasStepInput,resolvePendingInput}from"#harness/input-requests.js";import{PendingSkillAnnouncementKey}from"#context/dynamic-skill-lifecycle.js";import{setEveAttributes}from"#runtime/attributes/emit.js";import{buildDynamicInstructionMessages,drainDynamicInstructionUserMessages,prepareDynamicInstructionPreamble}from"#context/dynamic-instruction-lifecycle.js";import{isTurnCancellation,throwIfTurnAborted}from"#harness/turn-cancellation.js";import{resolveInitiatingTaskContext}from"#tasks/delivery-context.js";import{BackgroundToolExecutorKey,createBackgroundToolCallBatch}from"#harness/background-tools.js";import{createToolResultMessagePartFromToolError}from"#harness/action-result-helpers.js";import{getApprovalAuditState,markApprovalCandidateHistoryEventEmitted,markApprovalCandidatePendingEventEmitted,markApprovalSettlementEventEmitted}from"#harness/approval-candidates.js";import{estimateTokens}from"#harness/token-estimate.js";import{clearTurnClientContextState,getTurnClientContextState,setTurnClientContextState}from"#harness/turn-client-context.js";import{EMPTY_DELIVERY_SENTINEL,hasEmptyDeliverySentinel}from"#shared/empty-delivery.js";import{getInvalidToolCallInputError,isInvalidToolCall}from"#harness/tool-call-input-errors.js";import{ContentFilteredModelResponseError,EmptyModelResponseError,classifyModelCallError,extractModelCallErrorDetails,extractUnsupportedProviderToolTypes,extractUpstreamRejectionMessage,isNoOutputGeneratedError}from"#harness/model-call-error.js";import{interruptStreamOnFailure}from"#harness/interruptible-stream.js";import{resolveInlineAuthorizationInterrupt}from"#harness/inline-tool-authorization.js";import{createCurrentMessages}from"#harness/current-messages.js";import{extractToolApprovalInputRequests}from"#harness/input-extraction.js";import{applyLastToolCacheBreakpoint,applySystemCacheBreakpoint,detectPromptCachePath,getAnthropicCacheMarker}from"#harness/prompt-cache.js";import{mergeProviderSafetyIdentifier}from"#harness/provider-safety.js";import{requireSessionModelReference}from"#harness/types.js";import{GenerationSteering}from"#harness/generation-steering.js";import{estimateRequestEnvelope,getRequestEnvelopeTokens,setRequestEnvelopeTokens}from"#harness/request-envelope.js";import{compactMessages,getInputTokenCount,resolveCompactionModel,shouldCompact}from"#harness/compaction.js";import{applySessionLimitContinuation,enforceSessionUsageLimit}from"#harness/session-limit-enforcement.js";import{coordinateApprovalDelivery,shouldPrepareApprovalReplayTools}from"#harness/approval-delivery-coordinator.js";import{convertStaleResponsesToUserMessage,dropStaleSessionLimitContinuationResponses}from"#harness/stale-input-responses.js";import{normalizeProviderToolHistory}from"#harness/provider-tool-history.js";import{resolveDeliveryPolicy}from"#tasks/delivery-policy.js";import{extractWorkflowStreamWriteErrorDetails}from"#harness/workflow-stream-error.js";import{getAdvertisedTools}from"#harness/advertised-tools.js";import{resolveFrameworkToolFromUpstreamType}from"#harness/provider-tools.js";import{buildStepHooks,emitStepActions,readGatewayGenerationId}from"#harness/step-hooks.js";import{buildToolApproval,buildToolSetFromDefinitions,buildToolSetWithProviderTools}from"#harness/tools.js";import{FINAL_OUTPUT_TOOL_NAME,buildFinalOutputTool}from"#harness/final-output.js";const environment=process.env.NODE_ENV??`unknown`,eveVersion=resolveInstalledPackageInfo().version,log=createLogger(`harness.tool-loop`);function logToolExecutionError(e){e.toolOutput.type===`tool-error`&&logError(log,`tool execution failed`,e.toolOutput.error,{toolName:e.toolCall.toolName,toolCallId:e.toolCall.toolCallId})}function mergeSystemInstructions(e){if(e.length===0)return;if(e.length===1)return{...e[0]};let t;for(let n of e)n.providerOptions!==void 0&&(t={...t,...n.providerOptions});let n={role:`system`,content:e.map(e=>e.content).join(`
2
2
 
3
- `)};return t!==void 0&&(n.providerOptions=t),n}function buildGatewayAttributionHeaders(e,t){let n=resolveProviderHeaders(e);if(n===void 0)return;let r=t?.agentName??t?.agentId,i=process.env.VERCEL_PROJECT_PRODUCTION_URL||process.env.VERCEL_URL,a=i?`https://${i}`:void 0,o={...n};return r&&(o[`x-title`]=r),a&&(o[`http-referer`]=a),o}async function resolveEffectiveRuntimeModel(e){if(e.ctx===void 0){let t=e.session.agent.modelReference;if(t===void 0)throw Error(`Dynamic model selection is unavailable outside an eve runtime context.`);return{model:await e.config.resolveModel(t),session:e.session}}let t=getEffectiveModelSelection(e.ctx);if(t===null)throw Error(`Dynamic model selection is required before model-dependent work begins. Add a matching resolver handler that returns a concrete model.`);return{model:t.model===void 0?await e.config.resolveModel(t.reference):t.model,session:updateSessionModelReference(e.session,t.reference)}}function updateSessionModelReference(e,t){return e.agent.modelReference===t?e:{...e,agent:{...e.agent,modelReference:t},compaction:updateCompactionThresholdForModelReference({compaction:e.compaction,modelReference:t})}}function updateCompactionThresholdForModelReference(e){return e.modelReference.contextWindowTokens===void 0?e.compaction:{...e.compaction,threshold:Math.max(1,Math.floor(e.modelReference.contextWindowTokens*(e.compaction.thresholdPercent??.9)))}}function buildHarnessToolsWithDynamicSubagents(e,t){let n=new Map(e);if(t===void 0)return n;for(let e of buildDynamicSubagentTools(t)){if(n.has(e.name))throw Error(`Dynamic subagent "${e.name}" collides with another runtime-visible tool name.`);n.set(e.name,e)}return n}function createToolLoopHarness(e){e.instrumentation?.installAiSdkWarningLogger();let t=e.handleEvent;async function runStep(t,n){let executeStep=async r=>{let i=r?.session??t,a=new GenerationSteering({abortSignal:e.abortSignal,steeringSignal:e.steeringSignal,outputStarted:getHarnessEmissionState(i.state).assistantOutputStarted});try{return await executeStepBody(i,a,n,r)}finally{a.dispose()}};return e.instrumentation?.runStep({environment,eveVersion,hasInput:hasStepInput(n),session:t},executeStep)??executeStep()}async function executeStepBody(n,r,i,a){let o=n,s=createHistoryViewPreparer({previous:e.historyView,projector:e.historyProjector});s(o.history,o.state);let projectHistory=(e,t)=>s(e,t).messages,c=getHarnessEmissionState(o.state),l=contextStorage.getStore();l!==void 0&&!l.has(StaticModelReferenceKey)&&l.setVirtualContext(StaticModelReferenceKey,o.agent.dynamicModel===!0?null:o.agent.modelReference??null);let u=l?.get(ParentSessionKey),d=l?.get(SessionCallbackKey),f=u!==void 0||d!==void 0,p,m=a?.createHandleEvent({getAttemptScope:()=>p,handleEvent:t,turnId:activeTurnId(c)})??t,h=m===void 0?void 0:async(e,t)=>{r.beforeEvent(e),await m(e,t)},failModelSelection=async(t,n)=>{if(throwIfTurnAborted(e.abortSignal),a?.recordError(t),!h)throw t;let r=createErrorId(),i=toErrorMessage(t);return log.error(`model selection failed terminally`,{error:t,errorId:r,sessionId:o.sessionId,turnId:n.turnId}),await emitFailedStep(h,n,{code:`MODEL_SELECTION_FAILED`,details:{errorId:r},message:i,sessionId:o.sessionId}),{next:e.mode===`task`||f?{done:!0,isError:!0,output:i}:{done:!0,output:``},session:o}},failBoundaryEvent=async(t,n)=>{if(throwIfTurnAborted(e.abortSignal),isTurnCancellation(t))throw t;if(isDynamicModelSelectionError(t))return failModelSelection(t,n);if(!h||e.mode!==`conversation`||!(t instanceof BoundaryHookError))throw t;a?.recordError(t);let r=createErrorId(),i=toErrorMessage(t);return log.error(`turn boundary handler failed — parking session`,{error:t,errorId:r,sessionId:o.sessionId,turnId:n.turnId}),c=await emitRecoverableFailedTurn(h,n,{code:`EVENT_HANDLER_FAILED`,continuationToken:o.continuationToken,details:{errorId:r},message:i}),{next:null,session:setHarnessEmissionState({...o,outputSchema:void 0},c),settledTurn:{isError:!0,output:i}}},preparePreambleTrace=async()=>await a?.preparePreamble({sequence:c.sequence,sessionStarted:c.sessionStarted,traceContext:a?.traceContext,turnId:activeTurnId(c)});if(e.clearOnly===!0)return o={...o,state:clearMemorySessionState(o.state)},o=replaceSessionHistory(o,[]),await h?.(createContextClearedEvent({sequence:c.sequence,sessionId:o.sessionId,turnId:activeTurnId(c)})),await h?.(createSessionWaitingEvent()),{next:null,session:o};if(e.compactOnly===!0){if(o.history.length>0)try{let t=contextStorage.getStore(),n=await resolveEffectiveRuntimeModel({config:e,ctx:t,session:o});o=n.session,o=(await maybeCompact({abortSignal:e.abortSignal,auth:t?.get(AuthKey)??null,emit:h,emissionState:{...c,turnId:activeTurnId(c)},force:!0,historyProjector:e.historyProjector,messages:[...o.history],model:n.model,requestEnvelopeTokens:getRequestEnvelopeTokens(o),resolveModel:e.resolveModel,runtimeIdentity:e.runtimeIdentity,session:o,telemetry:a?.telemetry()})).session}catch(e){logError(log,`manual session compaction failed`,e,{sessionId:o.sessionId})}return await h?.(createSessionWaitingEvent()),{next:null,session:o}}let g=consumeDeferredStepInput$1({input:i,preferCurrentInput:e.mode!==`conversation`&&i!==void 0&&hasPendingApprovalBatch(o),session:o});o=g.session;let _=getPendingCoordinationBatch(o.state),v=await resolvePendingCoordination({emit:h,session:o,stepInput:g.input,tools:e.tools});if(v.outcome===`unresolved`)return{next:null,session:v.session};o=v.session;let y=getPendingInputRequestIds(o.state),b=convertStaleResponsesToUserMessage({history:v.messages,pendingRequestIds:y,stepInput:dropStaleSessionLimitContinuationResponses({pendingRequestIds:y,stepInput:g.input})}),x=b.stepInput,S=b.kind===`converted`?{...x,message:b.displayMessage}:x,C=contextStorage.getStore();C!==void 0&&e.resolveStepDynamicTools!==void 0&&shouldPrepareApprovalReplayTools({session:o,stepInput:x})&&await e.resolveStepDynamicTools({ctx:C,event:createStepStartedEvent({modelId:o.agent.modelReference?.id??`dynamic`,sequence:c.sequence,stepIndex:c.stepIndex,turnId:c.turnId}),messages:projectHistory(v.messages,o.state)});let w=shouldPrepareApprovalReplayTools({session:o,stepInput:x})?buildResponseAuthorizationTools({authoredTools:e.tools,context:C}):e.tools,T=await coordinateApprovalDelivery({session:o,stepInput:x,tools:w});if(o=T.session,h){for(let e of T.feedback)await h(createMessageCompletedEvent({message:e,sequence:c.sequence,stepIndex:c.stepIndex,turnId:c.turnId}));let e=getApprovalAuditState(o.state);for(let t of e.activeCandidates.filter(e=>e.pendingEventEmitted!==!0))await h(createApprovalCandidateEvent({candidateId:t.candidateId,outcome:`pending`,requestId:t.requestId,responderPrincipalId:t.responder.principalId,sequence:c.sequence,stepIndex:c.stepIndex,turnId:c.turnId})),o={...o,state:markApprovalCandidatePendingEventEmitted({candidateId:t.candidateId,state:o.state})};for(let t of e.candidateHistory.filter(e=>e.eventEmitted!==!0&&e.status!==`allowed`))await h(createApprovalCandidateEvent({candidateId:t.candidateId,outcome:t.status,requestId:t.requestId,responderPrincipalId:t.responder.principalId,reason:t.reason,sequence:c.sequence,stepIndex:c.stepIndex,turnId:c.turnId})),o={...o,state:markApprovalCandidateHistoryEventEmitted({candidateId:t.candidateId,state:o.state})};for(let t of e.settlements.filter(e=>e.eventEmitted!==!0))await h(createApprovalSettledEvent({outcome:t.outcome===`allowed`?`approved`:`cancelled`,requestId:t.requestId,responderPrincipalId:t.actor.principalId,sequence:c.sequence,stepIndex:c.stepIndex,turnId:c.turnId})),o={...o,state:markApprovalSettlementEventEmitted({requestId:t.requestId,state:o.state})}}if(T.kind===`park`)return{next:null,session:o};if(T.kind===`continue-coordination`)return{next:runStep,session:T.stepInput===void 0?o:queueDeferredStepInput(o,T.stepInput)};if(T.challenges.length>0){if(h)for(let e of T.challenges)await h(createAuthorizationRequiredEvent({authorization:e.challenge,candidateId:e.candidateId,description:e.challenge.instructions??`Authorization required for ${e.name}`,name:e.name,sequence:c.sequence,stepIndex:c.stepIndex,turnId:c.turnId,webhookUrl:e.hookUrl}));let e=T.stepInput===void 0?o:queueDeferredStepInput(o,T.stepInput);return{next:null,session:{...e,state:setPendingAuthorization(e.state,{challenges:T.challenges})}}}let E=resolvePendingInput({activeTurnId:_?.event.turnId??activeTurnId(c),deferMessagesWhileApprovalsPending:e.mode!==`conversation`,history:v.messages,internalStep:!isHarnessBetweenTurns(o),resolveApprovalKey:resolveApprovalKeyFromTools(w),session:o,stepInput:T.stepInput});if(E.outcome===`unresolved`){let t=v.outcome===`resolved`?{...E.session,history:validateHarnessModelMessages(v.messages)}:E.session;if(h&&e.mode===`conversation`&&E.deferredMessage===!0&&hasStepInput(i)){let n=createTurnInputMessages(x);l!==void 0&&(prepareDynamicInstructionPreamble(l,projectHistory(t.history,t.state)),prepareMemoryPreamble(l,{history:t.history,input:n,projector:e.historyProjector,state:t.state}));let r=[],i;try{let r=await preparePreambleTrace();c=await emitTurnPreamble(h,S??{},c,projectHistory([...t.history,...n],t.state),e.runtimeIdentity,r)}catch(e){return r=l===void 0?[]:drainDynamicInstructionUserMessages(l),i=l===void 0?void 0:drainMemoryCommit(l),t={...t,history:validateHarnessModelMessages([...i?.history??t.history,...r]),state:i?.state??t.state},o=t,failBoundaryEvent(e,{sessionStarted:!0,sequence:c.sequence,stepIndex:0,turnId:activeTurnId(c)})}return r=l===void 0?[]:drainDynamicInstructionUserMessages(l),i=l===void 0?void 0:drainMemoryCommit(l),t={...t,history:validateHarnessModelMessages([...i?.history??t.history,...r]),state:i?.state??t.state},c=await emitTurnEpilogue(h,c,e.mode),{next:null,session:setHarnessEmissionState(t,c)}}return v.outcome===`resolved`?(h&&e.mode===`conversation`&&(c=await emitTurnEpilogue(h,c,e.mode),t=setHarnessEmissionState(t,c)),{next:null,session:t}):{next:null,session:E.session}}if(E.resolvedInputs!==void 0)for(let e of E.resolvedInputs)await a?.publishInputResolutions({batch:e,sessionId:o.sessionId}),h&&await h(createInputResolvedEvent({resolutions:e.inputs.map(e=>{let t={kind:e.request.kind,outcome:e.outcome,requestId:e.request.requestId};return e.response===void 0?t:{...t,response:e.response}}),sequence:e.event.sequence,stepIndex:e.event.stepIndex,turnId:e.event.turnId}));if(h&&E.rejectedActions)for(let e of E.rejectedActions)for(let t of e.results)await h(createActionResultEvent({rejected:!0,result:t,sequence:e.event.sequence,stepIndex:e.event.stepIndex,turnId:e.event.turnId}));let D=activeTurnId(c),O=getTurnClientContextState(E.session.state,D),k=E.deferredContext===!0?void 0:readClientContext(x),A=(k??O?.messages)?.map(e=>createFrameworkUserMessage(`context.instruction`,e))??[],j=[];if(x?.context!==void 0&&E.deferredContext!==!0)for(let e of x.context)j.push(createFrameworkUserMessage(`context.instruction`,e));let ee=frameworkMessageKindForStepInput(x),te=normalizeUserContent(x?.message),M=te!==void 0&&!E.deferredMessage&&!E.consumedMessage?await stageAttachmentsToSandbox(te):void 0;M!==void 0&&j.push(ee===void 0?createUserMessage(`user`,M):createFrameworkUserMessage(ee,M));let N=[],P;if(h&&(hasStepInput(x)||hasStepInput(T.stepInput))){l!==void 0&&(prepareDynamicInstructionPreamble(l,projectHistory(E.session.history,E.session.state)),prepareMemoryPreamble(l,{history:E.messages,input:[...A,...j],projector:e.historyProjector,state:E.session.state}));try{let t=await preparePreambleTrace();c=await emitTurnPreamble(h,S??{},c,projectHistory([...E.messages,...A,...j],E.session.state),e.runtimeIdentity,t)}catch(e){return N=l===void 0?[]:drainDynamicInstructionUserMessages(l),P=l===void 0?void 0:drainMemoryCommit(l),o={...E.session,history:validateHarnessModelMessages([...P?.history??E.session.history,...N]),state:P?.state??E.session.state},failBoundaryEvent(e,{sessionStarted:!0,sequence:c.sequence,stepIndex:0,turnId:activeTurnId(c)})}N=l===void 0?[]:drainDynamicInstructionUserMessages(l),P=l===void 0?void 0:drainMemoryCommit(l),a?.setTurnId(c.turnId)}let ne=P?.history??E.session.history,re=E.session.history.length;o=setHarnessEmissionState({...E.session,history:validateHarnessModelMessages([...ne,...N]),state:P?.state??E.session.state},c);let F=validateHarnessModelMessages([...P?.history??E.messages.slice(0,re),...N,...P===void 0?E.messages.slice(re):[]]),I=await applySessionLimitContinuation({config:e,emit:h,emissionState:c,limitContinuation:E.limitContinuation,session:o});if(I.result!==null)return I.result;o=I.session;let ie=getAgentHandleStore(o.state);if(!hasUnansweredToolCall(F)){let e=await l?.get(BackgroundToolExecutorKey)?.readAgentViews?.(),t=e===void 0||e.length===0?void 0:[...projectParkedAgentHandles(ie??{handles:[]}).map(e=>({availability:`available`,id:e.identity.id,name:e.identity.name,statusLine:e.phase===`parked`?e.lastStatus:void 0})),...e],n=resolveAgentsAnnouncement({agentViews:t,messages:projectHistory(F,o.state),store:ie});n!==void 0&&F.push(createFrameworkUserMessage(`context.state`,n))}let L=O;k!==void 0&&(L={insertionIndex:O?.insertionIndex??F.length,messages:k,turnId:D}),L!==void 0&&(o=setTurnClientContextState(o,L)),F=[...F,...j];let createModelMessages=e=>{if(L===void 0||L.messages.length===0)return[...e];let t=Math.min(Math.max(0,L.insertionIndex),e.length);return[...e.slice(0,t),...L.messages.map(e=>createFrameworkUserMessage(`context.instruction`,e)),...e.slice(t)]},R=validateHarnessModelMessages(projectHistory(createModelMessages(F),o.state)),z=l,B;try{z!==void 0&&e.dispatchDynamicModelEvent!==void 0&&await e.dispatchDynamicModelEvent({ctx:z,event:{data:{sequence:c.sequence,stepIndex:c.stepIndex,turnId:c.turnId},type:`step.started`},messages:R}),B=await resolveEffectiveRuntimeModel({config:e,ctx:z,session:o})}catch(e){return failModelSelection(e,c)}o=B.session;let V=B.model,ae=detectPromptCachePath(V),H=ae.kind===`anthropic-direct`?getAnthropicCacheMarker():void 0,oe=buildGatewayAttributionHeaders(V,e.runtimeIdentity);if(R=validateHarnessModelMessages(normalizeModelMessages(projectHistory(createModelMessages(F),o.state))),h)try{await emitStepStarted(h,c,requireSessionModelReference(o).id,R)}catch(e){return failBoundaryEvent(e,c)}let U=getApprovedTools(o,resolveApprovalKeyFromTools(buildResponseAuthorizationTools({authoredTools:e.tools,context:z}))),W=c.sequence===0,se=W&&z?.get(ScheduleIdKey)!==void 0,G=resolveDeliveryPolicy({hasScheduleProvenance:se,hasOutputSchema:o.outputSchema!==void 0,isChild:z?.get(ParentSessionKey)!==void 0,isFirstTurn:W,taskDeliveryPhase:z?.get(TurnTaskDeliveryKey),taskDeliveryPolicy:z?.get(TaskDeliveryPolicyKey)}),createRequestMessages=()=>{let e=createCurrentMessages(F,{historyState:z?.get(HistoryStateKey),currentTurnMessages:j,projectedMessages:R});z!==void 0&&e.addSystem(buildDynamicInstructionMessages(z));let t=z?.get(TurnTaskDeliveryKey)===`initiating`?resolveInitiatingTaskContext({state:o.state,turnId:D}):void 0;e.addAnnouncements({availableSkills:z?.get(PendingSkillAnnouncementKey),taskState:t?.context,deliveryInstruction:G.instruction});let n=renderPendingApprovalsInstruction(getPendingInputBatches(o.state).flatMap(e=>e.requests));return n!==void 0&&e.add(n,`context.state`,{cacheFriendly:!1}),e},K=createRequestMessages(),q,finishSteeredStep=()=>(throwIfTurnAborted(e.abortSignal),z?.set(HistoryStateKey,K.historyState),q!==void 0&&(o=setTurnUsageState(o,accumulateTurnUsage({previous:getTurnUsageState(o.state),turnId:c.turnId,usage:q}))),{steered:!0,next:runStep,session:setHarnessEmissionState({...o,history:[...K.history]},advanceStep(c))}),J=[],withTrailingUserNote=(e,t)=>t?[...e,createFrameworkUserMessage(`execution.retry`,t)]:[...e],prepareModelInstructions=e=>{let t=e?[{role:`system`,content:e}]:[],n=o.agent.system?[{role:`system`,content:o.agent.system}]:[],r=K.systemMessages.length>0||t.length>0?[...t,...n,...K.systemMessages]:void 0,i=r!==void 0&&H?applySystemCacheBreakpoint(r,H):r;return i===void 0?o.agent.system??void 0:mergeSystemInstructions(i)},prepareModelCallInput=e=>{let t=prepareModelInstructions(e);return{instructions:t,telemetryRuntimeContext:a?.resolveRuntimeContext({eveVersion,emissionState:c,environment,modelInput:{instructions:t,messages:J},session:o})}},ce=e.tools,Y=0,X,throwIfCompactionFailed=()=>{if(X!==void 0)throw X.error},prepareModelTools=async t=>{let n=buildHarnessToolsWithDynamicSubagents(e.tools,z),i=createBackgroundToolCallBatch(),a=getAdvertisedTools({session:o,tools:n});ce=a;let s=await buildToolSetWithProviderTools({approvedTools:U,backgroundBatch:i,disabledProviderTools:t.disabledProviderTools,modelReference:requireSessionModelReference(o),tools:a});if(z!==void 0){let e=getAdvertisedTools({session:o,tools:buildDynamicTools(z)}),n=buildToolSetFromDefinitions({approvedTools:U,backgroundBatch:i,disabledProviderTools:t.disabledProviderTools,tools:e});for(let[e,t]of Object.entries(n)){let n=a.get(e);if(n?.runtimeAction!==void 0||n?.workflowId!==void 0)throw Error(`Dynamic tool "${e}" collides with a coordination-visible deferred tool.`);s[e]=t}}o.outputSchema!==void 0&&(s[FINAL_OUTPUT_TOOL_NAME]=buildFinalOutputTool(o.outputSchema));let c=await getAdvertisedTools({modelTools:s,session:o,tools:a});o=c.session;let l=c.modelTools,u=H?applyLastToolCacheBreakpoint(l,H):l;for(let e of Object.values(u)){e.inputSchema=toModelSchema(e.inputSchema,`input`),e.outputSchema!==void 0&&(e.outputSchema=toModelSchema(e.outputSchema,`output`));let t=e.execute;t!==void 0&&(e.execute=(...e)=>(r.protectToolExecution(),t(...e)));let n=e.onInputAvailable;n!==void 0&&(e.onInputAvailable=(...e)=>(r.protectToolExecution(),n(...e)))}return{effectiveTools:u,backgroundBatch:i,advertisedHarnessTools:a,modelTools:l}},runSingleModelCall=async t=>{let{effectiveTools:n,backgroundBatch:i,advertisedHarnessTools:s,modelTools:l}=await prepareModelTools(t);K=createRequestMessages(),Y=await estimateRequestEnvelope({history:R,instructions:prepareModelInstructions(t.extraSystemNote),messages:withTrailingUserNote(K.nonSystemMessages,t.trailingUserNote),tools:n});let u=L===void 0?void 0:Math.max(0,F.length-L.insertionIndex),d=await(async()=>{try{return await maybeCompact({abortSignal:e.abortSignal,auth:z?.get(AuthKey)??null,emit:h,emissionState:c,historyProjector:e.historyProjector,messages:[...F],model:V,promptMessages:createModelMessages(F),requestEnvelopeTokens:Y,resolveModel:e.resolveModel,runtimeIdentity:e.runtimeIdentity,session:o,telemetry:a?.telemetry()})}catch(e){throw X={error:e},e}})();o=d.session,d.compacted&&(F=d.messages,L!==void 0&&u!==void 0&&(L={...L,insertionIndex:Math.max(0,F.length-u)},o=setTurnClientContextState(o,L)),o={...o,compaction:{recentWindowSize:o.compaction.recentWindowSize,threshold:o.compaction.threshold,thresholdPercent:o.compaction.thresholdPercent}},R=validateHarnessModelMessages(normalizeModelMessages(projectHistory(createModelMessages(F),o.state))),K=createRequestMessages(),{effectiveTools:n,backgroundBatch:i,advertisedHarnessTools:s,modelTools:l}=await prepareModelTools(t),Y=await estimateRequestEnvelope({history:R,instructions:prepareModelInstructions(t.extraSystemNote),messages:withTrailingUserNote(K.nonSystemMessages,t.trailingUserNote),tools:n})),Y=Math.max(0,Y-(estimateTokens(K.history)-estimateTokens(F))),r.begin(),J=await hydrateSandboxAttachments(K.nonSystemMessages);let{instructions:f,telemetryRuntimeContext:m={}}=prepareModelCallInput(t.extraSystemNote);t.retryReason&&(m[`eve.retry.reason`]=t.retryReason);let g=withTrailingUserNote(J,t.trailingUserNote),_=activeTurnId(c),v=a?.prepareAttempt({attemptIndex:t.attemptIndex,runtimeContext:m,stepIndex:c.stepIndex,turnId:_});p=v?.scope;let y=buildStepHooks({auth:z?.get(AuthKey)??null,cachePath:ae,emit:h,emissionState:c,emitStepStarted:t.suppressStepStartedEmission!==!0,marker:H,session:o}),b={headers:oe,instructions:f,model:V,onLanguageModelCallEnd(e){if(!r.interrupted){q=extractTokenUsageDelta({usage:e.usage,costUsd:extractGatewayCostUsd(e.providerMetadata)});for(let t of e.content)t.type!==`tool-call`||t.providerExecuted===!0||isInvalidToolCall(t)||i.register({callId:t.toolCallId,input:t.input,toolName:t.toolName})}},onToolExecutionEnd:logToolExecutionError,onError(e){r.interrupted||summarizeKnownError(e.error)?.tags.includes(`config`)!==!0&&logError(log,`tool-loop stream error`,e.error)},onStepEnd:y.onStepEnd,onStepStart:y.onStepStart,prepareStep:y.prepareStep,reasoning:o.agent.modelReference?.reasoning??o.agent.reasoning,runtimeContext:m,stopWhen:isStepCount(1),telemetry:v?.telemetry,toolApproval:buildToolApproval(l,r.signal),tools:n},x=new ToolLoopAgent(b),executeModelCall=async()=>{if(h){let t=[...e.tools].filter(([e,t])=>t.runtimeAction!==void 0&&s.get(e)===void 0).map(([e])=>e),n=new Set([FINAL_OUTPUT_TOOL_NAME,...t]),i=await x.stream({abortSignal:r.signal,messages:g}),{emittedActionCallIds:a,handledInlineToolResultCallIds:o,invalidInputToolCallIds:l,inlineAuthorizationResults:u,trailingInlineToolResultParts:d}=await emitStreamContent(h,c,interruptStreamOnFailure(i.fullStream,r.signal),{excludedActionToolNames:n,tools:s});throwIfTurnAborted(e.abortSignal),r.check();let[f,p]=await Promise.all([y.stepResult,i.responseMessages]);if(f.finishReason===`content-filter`)throw new ContentFilteredModelResponseError(readGatewayGenerationId(f.providerMetadata));if(isEmptyModelResponse(f)&&extractToolResultCallIds(p).size===0&&u.length===0&&d.length===0)throw new EmptyModelResponseError;await emitStepActions(h,c,f,{emittedActionCallIds:a,excludedActionCallIds:l,excludedActionToolNames:n,handledInlineToolResultCallIds:o,tools:s});let m=f.toolResults,_=new Map(m.map(e=>[e.toolCallId,e]));for(let e of u)_.set(e.toolCallId,e);return withAccumulatedResponseMessages({invalidInputToolCallIds:l,responseMessages:appendMissingToolResultMessages({append:d,responseMessages:p}),stepResult:f,toolResults:[..._.values()]})}let t=await x.generate({abortSignal:r.signal,messages:g});throwIfTurnAborted(e.abortSignal),r.check();let n=await y.stepResult;if(n.finishReason===`content-filter`)throw new ContentFilteredModelResponseError(readGatewayGenerationId(n.providerMetadata));if(isEmptyModelResponse(n)&&extractToolResultCallIds(t.responseMessages).size===0)throw new EmptyModelResponseError;return withAccumulatedResponseMessages({responseMessages:t.responseMessages,stepResult:n})};try{let e=await executeModelCall();return await v?.complete(),e}catch(e){return r.interrupted?await v?.complete():await v?.fail(e),r.check(),rethrowNoOutputAsEmptyResponse(e)}},le=0,runOneModelCall=async e=>runModelCallWithRetries(t=>runSingleModelCall({...e,attemptIndex:le++,suppressStepStartedEmission:t!==1||e.suppressStepStartedEmission}),{sessionId:o.sessionId,turnId:c.turnId,canRetry:()=>X===void 0},r.signal),ue=await enforceSessionUsageLimit({config:e,emit:h,emissionState:c,messages:R,session:o});if(ue!==null)return ue;let Z;try{Z=await runOneModelCall({suppressStepStartedEmission:!0})}catch(t){if(throwIfCompactionFailed(),throwIfTurnAborted(e.abortSignal),r.interrupted)return finishSteeredStep();let n=await runModelCallRecoveryPipeline({error:t,stages:[e=>attemptUnsupportedProviderToolRecovery({error:e.error,runOneModelCall,sessionId:o.sessionId,turnId:c.turnId}),e=>attemptEmptyResponseRecovery({emptyDeliveryEnabled:G.allowsEmptyDelivery,error:e.error,retryCallOptions:e.retryCallOptions,runOneModelCall,sessionId:o.sessionId,turnId:c.turnId})]});if(throwIfCompactionFailed(),throwIfTurnAborted(e.abortSignal),r.interrupted)return finishSteeredStep();if(n.outcome===`recovered`)Z=n.result;else{let t=n.error;if(a?.recordError(t),!h)throw t;let r=extractWorkflowStreamWriteErrorDetails(t);if(r!==null){let e=createErrorId();return log.error(`workflow stream write failed — parking session for retry by the user`,{...r,errorId:e,error:t,sessionId:o.sessionId,turnId:c.turnId}),c=await emitRecoverableFailedTurn(h,c,{code:`WORKFLOW_STREAM_WRITE_FAILED`,continuationToken:o.continuationToken,details:{...r,errorId:e},message:toErrorMessage(t)}),{next:null,session:setHarnessEmissionState(o,c)}}let i=classifyModelCallError(t),s=createErrorId(),l=summarizeKnownError(t),u=l===null?extractUpstreamRejectionMessage(t):null,d=l?.message??u?.message??toErrorMessage(t),p=l?.hint===void 0?d:`${d} ${l.hint}`,m=extractModelCallErrorDetails(t),g=buildModelCallFailureDetails({catalogSummary:l,error:t,errorId:s,modelCallDetails:m,upstreamRejection:u}),_=buildModelCallFailureLogFields({error:t,errorId:s,modelCallDetails:m,recognized:l!==null||u!==null,sessionId:o.sessionId,turnId:c.turnId});if(i===`terminal`)return l===null?log.error(u?.message??`model call failed terminally`,_):log.error(`${l.name}: ${l.message}`,{errorId:s,hint:l.hint,sessionId:o.sessionId,turnId:c.turnId}),await emitFailedStep(h,c,{code:`MODEL_CALL_FAILED`,details:g,message:d,sessionId:o.sessionId}),{next:e.mode===`task`||f?{done:!0,isError:!0,output:p}:{done:!0,output:``},session:o};if(e.mode===`task`){if(i===`recoverable`&&!(t instanceof EmptyModelResponseError)&&!(t instanceof ContentFilteredModelResponseError))throw log.warn(u?.message??`model call failed recoverably in task mode — rethrowing for durable step retry`,_),t;return log.error(u?.message??`model call failed; failing the task run`,_),await emitFailedStep(h,c,{code:`MODEL_CALL_FAILED`,details:g,message:d,sessionId:o.sessionId}),{next:{done:!0,isError:!0,output:p},session:o}}log.error(u?.message??`model call failed — parking session for retry by the user`,_),c=await emitRecoverableFailedTurn(h,c,{code:`MODEL_CALL_FAILED`,continuationToken:o.continuationToken,details:g,message:d});let v={isError:!0,output:p};return o={...o,outputSchema:void 0},{next:null,session:setHarnessEmissionState(o,c),settledTurn:v}}}let Q=accumulateTurnUsage({previous:getTurnUsageState(o.state),turnId:c.turnId,usage:extractTokenUsageDelta({costUsd:extractGatewayCostUsd(Z.providerMetadata),usage:Z.usage})});o=setTurnUsageState(o,Q),q=void 0;let $;try{$=formatLanguageModelGatewayId(V)}catch{$=void 0}await setEveAttributes({"$eve.model":$,"$eve.input_tokens":Q.inputTokens,"$eve.output_tokens":Q.outputTokens,"$eve.cache_read_tokens":Q.cacheReadTokens,"$eve.cache_write_tokens":Q.cacheWriteTokens,"$eve.cost_usd":Q.sawCost?Q.costUsd:void 0,"$eve.tool_count":e.tools.size});let de;try{r.check(),de=await handleStepResult({config:e,emit:h,emissionState:r.outputStarted?{...c,assistantOutputStarted:!0}:c,requestEnvelopeTokens:Y,durableModelPromptMessageCount:L===void 0||L.messages.length===0?J.length:void 0,promptMessages:K.history,result:Z,runStep,session:o,coordinationTools:ce})}catch(t){if(throwIfTurnAborted(e.abortSignal),r.interrupted)return finishSteeredStep();throw t}return z?.set(HistoryStateKey,K.historyState),de}return runStep}function extractTokenUsageDelta(e){let t=e.usage;if(t!==void 0||e.costUsd!==void 0)return{cacheReadTokens:t?.inputTokenDetails?.cacheReadTokens,cacheWriteTokens:t?.inputTokenDetails?.cacheWriteTokens,costUsd:e.costUsd,inputTokens:t?.inputTokens,outputTokens:t?.outputTokens}}function extractGatewayCostUsd(e){let t=readGatewayMetadata(e)?.cost;if(typeof t==`number`&&Number.isFinite(t))return t;if(typeof t==`string`){let e=Number(t);return Number.isFinite(e)?e:void 0}}function readGatewayMetadata(e){let t=e?.gateway;return t&&typeof t==`object`&&!Array.isArray(t)?t:void 0}function buildModelCallFailureDetails(e){let{catalogSummary:t,error:n,errorId:r,modelCallDetails:i,upstreamRejection:a}=e;if(t!==null){let e={errorId:r,message:t.message,name:t.name,semanticErrorId:t.id,...i};return t.hint!==void 0&&(e.hint=t.hint),e}return a===null?{...formatError(n,r),...i}:{errorId:r,message:toErrorMessage(n),name:a.name,...i}}function buildModelCallFailureLogFields(e){let t={errorId:e.errorId,sessionId:e.sessionId,turnId:e.turnId};return e.recognized?{...t,details:e.modelCallDetails}:{...t,error:e.error}}async function runModelCallRecoveryPipeline(e){let t=e.error,n;for(let r of e.stages){let e=await r({error:t,retryCallOptions:n});if(e.outcome===`recovered`)return e;e.outcome===`failed`&&(t=e.error,n=e.retryCallOptions)}return{outcome:`failed`,error:t}}function withAccumulatedResponseMessages(e){let{stepResult:t}=e;return{content:t.content,finishReason:t.finishReason,...e.invalidInputToolCallIds===void 0?{}:{invalidInputToolCallIds:e.invalidInputToolCallIds},providerMetadata:t.providerMetadata,response:{...t.response,messages:[...e.responseMessages]},text:t.text,toolCalls:t.toolCalls,toolResults:e.toolResults===void 0?t.toolResults:[...e.toolResults],usage:t.usage}}function appendMissingToolResultMessages(e){let t=extractToolResultCallIds(e.responseMessages),n=e.append.filter(e=>!t.has(e.toolCallId));return[...e.responseMessages,...n.length>0?[{role:`tool`,content:[...n]}]:[]]}function getInvalidToolCallInputErrors(e){let t=[];for(let n of e.toolCalls){if(n.toolName===FINAL_OUTPUT_TOOL_NAME)continue;let e=getInvalidToolCallInputError({toolCall:n});e!==void 0&&t.push(e)}return t}function extractToolResultCallIds(e){let t=new Set;for(let n of e)if(Array.isArray(n.content))for(let e of n.content)typeof e==`object`&&e&&e.type===`tool-result`&&t.add(e.toolCallId);return t}function hasUnansweredToolCall(e){let t=new Set,n=new Set;for(let r of e)if(Array.isArray(r.content))for(let e of r.content)typeof e==`object`&&e&&(e.type===`tool-call`&&t.add(e.toolCallId),e.type===`tool-result`&&n.add(e.toolCallId));for(let e of t)if(!n.has(e))return!0;return!1}async function attemptUnsupportedProviderToolRecovery(e){let t=extractUnsupportedProviderToolTypes(e.error);if(t.length===0)return{outcome:`skipped`};let n=[];for(let e of t){let t=resolveFrameworkToolFromUpstreamType(e);t!==null&&!n.includes(t)&&n.push(t)}if(n.length===0)return{outcome:`skipped`};log.warn(`disabling unsupported provider tool(s); retrying step once`,{disabled:n,sessionId:e.sessionId,turnId:e.turnId,upstreamTypes:t});let r={disabledProviderTools:new Set(n),extraSystemNote:buildDisabledToolNote(n)};try{return{outcome:`recovered`,result:await e.runOneModelCall({...r,suppressStepStartedEmission:!0})}}catch(e){return{outcome:`failed`,error:e,retryCallOptions:r}}}function buildDisabledToolNote(e){let t=e.join(`, `);return`The following ${e.length===1?`tool is`:`tools are`} not available with the current model and has been removed: ${t}. Proceed using the remaining tools or your training knowledge.`}function isEmptyModelResponse(e){return e.toolCalls.length===0&&e.toolResults.length===0&&resolveAssistantStepText(e.response.messages,e.text)===null}function rethrowNoOutputAsEmptyResponse(e){throw isNoOutputGeneratedError(e)?new EmptyModelResponseError({cause:e}):e}const EMPTY_RESPONSE_NUDGE=`Your previous reply was empty and was not delivered. Answer now from the tool results above; do not re-run tools or mention this notice.`;function buildEmptyResponseNudge(e){return e?`${EMPTY_RESPONSE_NUDGE} If the current task explicitly requires conditional delivery and there is nothing to report, reply with exactly ${EMPTY_DELIVERY_SENTINEL}.`:EMPTY_RESPONSE_NUDGE}async function attemptEmptyResponseRecovery(e){if(!(e.error instanceof EmptyModelResponseError))return{outcome:`skipped`};log.warn(`empty model response; reissuing the model call once`,{sessionId:e.sessionId,turnId:e.turnId});try{return{outcome:`recovered`,result:await e.runOneModelCall({...e.retryCallOptions,retryReason:`empty-response`,suppressStepStartedEmission:!0,trailingUserNote:buildEmptyResponseNudge(e.emptyDeliveryEnabled)})}}catch(t){return{outcome:`failed`,error:t,retryCallOptions:e.retryCallOptions}}}async function handleStepResult(e){let{config:t,emit:n,promptMessages:r,result:i,runStep:a}=e,{emissionState:o,session:s}=e,c=resolveAssistantStepText(i.response.messages,i.text),l=i.finishReason!==`tool-calls`&&i.toolCalls.length===0&&hasEmptyDeliverySentinel(c),u=getInvalidToolCallInputErrors({toolCalls:i.toolCalls}),d=new Set([...i.invalidInputToolCallIds??[],...i.toolCalls.filter(isInvalidToolCall).map(e=>e.toolCallId),...u.map(e=>e.toolCallId)]),f=l?[]:appendMissingToolResultMessages({append:u.map(e=>createToolResultMessagePartFromToolError(e)),responseMessages:i.response.messages}),p=l?null:c,m=new Set;for(let e of[...i.content??[],...i.toolResults??[]])(e.type===`tool-result`||e.type===`tool-error`)&&e.providerExecuted===!0&&m.add(e.toolCallId);let h=normalizeProviderToolHistory({messages:f,providerExecutedOutcomeIds:m}),g=h.messages,_=setRequestEnvelopeTokens({...s,compaction:createNextCompactionConfig(s.compaction,e.durableModelPromptMessageCount,i)},i.usage?.inputTokens!==void 0&&e.durableModelPromptMessageCount!==void 0?e.requestEnvelopeTokens:void 0),v=extractToolApprovalInputRequests({content:i.content??[],excludedCallIds:d}),y=v,b=renderPendingApprovalsSnippet(v),x=g.findIndex(e=>e.role!==`tool`),S=x===-1?g:g.slice(0,x),C=g.slice(S.length),w=validateHarnessModelMessages([...r,...S,...b===void 0?[]:[createFrameworkUserMessage(`context.state`,b)]]),T=getAdvertisedTools({session:_,tools:e.coordinationTools}),E=(i.toolCalls??[]).filter(e=>!d.has(e.toolCallId)).filter(t=>isDeferredHarnessTool(e.coordinationTools.get(t.toolName))).filter(e=>isDeferredHarnessTool(T.get(e.toolName))?!0:(log.warn(`deferred tool call blocked because tool is not advertised`,{callId:e.toolCallId,sessionId:_.sessionId,toolName:e.toolName}),!1)).map(e=>createCoordinationRequestFromToolCall({toolCall:e,tools:T}));if(E.length>0){let e=E.flatMap(e=>e.kind===`runtime-action`?[e.request]:[]),t=E.flatMap(e=>e.kind===`task`?[e.request]:[]);if(y.length===0)return{next:null,session:setHarnessEmissionState(setPendingCoordinationBatch({runtimeActions:e,tasks:t,event:{sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId},responseMessages:g,session:{..._,history:validateHarnessModelMessages(r)}}),advanceStep(o))};let i=setPendingCoordinationBatch({runtimeActions:e,tasks:t,event:{sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId},responseMessages:C,session:{..._,history:w}});return i=appendPendingInputBatch({event:{sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId},requests:y,responseMessages:[],session:i}),n&&await n(createInputRequestedEvent({requests:y,sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId})),{next:null,session:setHarnessEmissionState(i,advanceStep(o))}}if(y.length>0){let e=buildResponseAuthorizationTools({authoredTools:t.tools,context:contextStorage.getStore()}),r=appendPendingInputBatch({event:{sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId},requests:y,responseAuthRequiredRequestIds:v.filter(t=>{let n=e.get(t.action.toolName)?.approval;return n!==void 0&&typeof n!=`function`&&n.response!==void 0}).map(e=>e.requestId),responseMessages:C,session:{..._,history:w}});return n&&(await n(createInputRequestedEvent({requests:y,sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId})),t.mode===`conversation`&&(o=await emitTurnEpilogue(n,o,t.mode),r=setHarnessEmissionState(r,o))),{next:hasRunnableDeferredStepInput(r)?a:null,session:r}}let D=resolveInlineAuthorizationInterrupt({messages:[...r,...g],toolResults:i.toolResults});if(D){let{challenges:e,history:r}=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:validateHarnessModelMessages(r),state:setPendingAuthorization(_.state,{challenges:e})},o)}}let O=g,k=validateHarnessModelMessages([...r,...O]),A={..._,history:k};return(A.outputSchema===void 0||extractFinalOutput(i)===void 0)&&(O.at(-1)?.role===`tool`||h.outcomeEndsResponse||hasRunnableDeferredStepInput(A))?(n&&(o=advanceStep(o),A=setHarnessEmissionState(A,o)),{next:a,session:A}):t.mode===`task`&&contextStorage.getStore()?.get(ScheduleIdKey)!==void 0&&contextStorage.getStore()?.get(BackgroundToolExecutorKey)?.hasPendingTasks?.()===!0?deferTaskTurn({emissionState:o,emit:n,history:r,result:i,schema:A.outputSchema,session:A,stepOutput:p}):t.mode===`task`?finishTaskTurn({emissionState:o,emit:n,history:r,result:i,schema:A.outputSchema,session:A,stepOutput:p}):finishConversationTurn({emissionState:o,emit:n,history:r,result:i,schema:A.outputSchema,session:A,stepOutput:p})}async function deferTaskTurn(e){let{emit:t,history:n,result:r,schema:i,stepOutput:a}=e,{emissionState:o,session:s}=e;s=clearTurnClientContextState(s);let c=i===void 0?void 0:extractFinalOutput(r);return c!==void 0&&(s={...persistStructuredAssistantTurn(s,n,c),outputSchema:i}),t&&(o=await emitTurnEpilogue(t,o,`conversation`),s=setHarnessEmissionState(s,o)),{next:null,session:s,settledTurn:{output:c??a??``}}}function isDeferredHarnessTool(e){return e?.runtimeAction!==void 0||e?.workflowId!==void 0&&e.execution!==`background`}const OUTPUT_SCHEMA_NOT_FULFILLED={code:`OUTPUT_SCHEMA_NOT_FULFILLED`,message:`The agent could not produce a result matching the requested schema.`};function extractFinalOutput(e){return(e.toolCalls??[]).find(e=>e.toolName===FINAL_OUTPUT_TOOL_NAME&&!isInvalidToolCall(e))?.input}function persistStructuredAssistantTurn(e,t,n){return{...e,history:[...t,{content:JSON.stringify(n),role:`assistant`}],outputSchema:void 0}}async function emitStructuredResult(e,t,n,r){return await e(createResultCompletedEvent({result:n,sequence:t.sequence,stepIndex:t.stepIndex,turnId:t.turnId})),emitTurnEpilogue(e,t,r)}async function finishTaskTurn(e){let{emit:t,history:n,result:r,schema:i,stepOutput:a}=e,{emissionState:o,session:s}=e;if(s=clearTurnClientContextState(s),i===void 0)return t&&(o=await emitTurnEpilogue(t,o,`task`),s=setHarnessEmissionState(s,o)),{next:{done:!0,output:a??``},session:s};let c=extractFinalOutput(r);return c===void 0?(s={...s,outputSchema:void 0},t&&await emitFailedStep(t,o,{...OUTPUT_SCHEMA_NOT_FULFILLED,sessionId:s.sessionId}),{next:{done:!0,isError:!0,output:OUTPUT_SCHEMA_NOT_FULFILLED.message},session:s}):(s=persistStructuredAssistantTurn(s,n,c),t&&(o=await emitStructuredResult(t,o,c,`task`),s=setHarnessEmissionState(s,o)),{next:{done:!0,output:c},session:s})}async function finishConversationTurn(e){let{emit:t,history:n,result:r,schema:i,stepOutput:a}=e,{emissionState:o,session:s}=e;if(s=clearTurnClientContextState(s),i===void 0)return t&&(o=await emitTurnEpilogue(t,o,`conversation`),s=setHarnessEmissionState(s,o)),{next:null,session:s,settledTurn:{output:a??``}};let c=extractFinalOutput(r);if(c===void 0){s={...s,outputSchema:void 0},t&&(o=await emitRecoverableFailedTurn(t,o,{...OUTPUT_SCHEMA_NOT_FULFILLED,continuationToken:s.continuationToken}),s=setHarnessEmissionState(s,o));let e={isError:!0,output:OUTPUT_SCHEMA_NOT_FULFILLED.message};return{next:null,session:s,settledTurn:e}}return s=persistStructuredAssistantTurn(s,n,c),t&&(o=await emitStructuredResult(t,o,c,`conversation`),s=setHarnessEmissionState(s,o)),{next:null,session:s,settledTurn:{output:c}}}function createNextCompactionConfig(e,t,n){let r={recentWindowSize:e.recentWindowSize,threshold:e.threshold,thresholdPercent:e.thresholdPercent};return n.usage?.inputTokens!==void 0&&t!==void 0&&(r.lastKnownInputTokens=n.usage.inputTokens,r.lastKnownPromptMessageCount=t),r}function replaceSessionHistory(e,t){return contextStorage.getStore()?.delete(HistoryStateKey),{...e,history:t,compaction:{recentWindowSize:e.compaction.recentWindowSize,threshold:e.compaction.threshold,thresholdPercent:e.compaction.thresholdPercent}}}async function maybeCompact(e){let{emit:t,emissionState:n}=e,r=e.messages,i=e.session,a=e.promptMessages??r,o=validateHarnessModelMessages(e.historyProjector?.({messages:a,state:i.state})??a),s=e.force===!0||shouldCompact(o,i.compaction,e.requestEnvelopeTokens,getRequestEnvelopeTokens(i)),c=shouldCanonicalizeMemory(r);if(!s&&!c)return{compacted:!1,messages:r,session:i};let l=await resolveCompactionModel({compactionModelReference:i.agent.compactionModelReference,model:e.model,modelReference:requireSessionModelReference(i),resolveModel:e.resolveModel}),u=i.agent.compactionModelReference??requireSessionModelReference(i),d=mergeProviderSafetyIdentifier(u,l.providerOptions,e.auth);if(t){let a=contextStorage.getStore();a!==void 0&&prepareMemoryCompaction(a,{history:r,state:i.state}),await t(createCompactionRequestedEvent({modelId:formatLanguageModelGatewayId(l.model),sequence:n.sequence,sessionId:i.sessionId,turnId:n.turnId,usageInputTokens:getInputTokenCount(o,i.compaction,e.requestEnvelopeTokens,getRequestEnvelopeTokens(i))}),o)}let f=canonicalizeMemoryRecords(r),p=validateHarnessModelMessages(e.historyProjector?.({messages:f.ordinary,state:i.state})??f.ordinary),m=e.requestEnvelopeTokens??0,h={...i.compaction,threshold:Math.max(1,i.compaction.threshold-m),lastKnownInputTokens:i.compaction.lastKnownInputTokens===void 0?void 0:Math.max(0,i.compaction.lastKnownInputTokens-Math.min(getRequestEnvelopeTokens(i)??0,m))},g=s?await compactMessages([...p],l.model,h,d,e.telemetry,buildGatewayAttributionHeaders(l.model,e.runtimeIdentity),e.abortSignal,e.force===!0,e.requestEnvelopeTokens===void 0?void 0:Math.max(0,getInputTokenCount(o,i.compaction,m,getRequestEnvelopeTokens(i))-m)):[...p];if(r=validateHarnessModelMessages([...f.memory,...g]),t){let a=contextStorage.getStore();if(a!==void 0&&prepareMemoryCompaction(a,{history:r,state:i.state}),await t(createCompactionCompletedEvent({modelId:formatLanguageModelGatewayId(l.model),sequence:n.sequence,sessionId:i.sessionId,turnId:n.turnId}),e.historyProjector?.({messages:r,state:i.state})??r),a!==void 0){let e=drainMemoryCommit(a);e!==void 0&&(r=validateHarnessModelMessages(e.history),i={...i,state:e.state})}}return{compacted:!0,messages:r,session:replaceSessionHistory(i,r)}}function resolveApprovalKeyFromTools(e){return t=>{let n=e.get(t.action.toolName);if(n?.approvalKey!==void 0)return n.approvalKey(t.action.input)}}async function runModelCallWithRetries(e,t,n){for(let r=1;;r++){n.throwIfAborted();try{return await e(r)}catch(e){if(n.throwIfAborted(),t.canRetry?.()===!1||r===3||classifyModelCallError(e)!==`retry`)throw e;let i=500*2**(r-1)+Math.floor(Math.random()*250);log.warn(`model call failed transiently — retrying`,{attempt:r,delayMs:i,sessionId:t.sessionId,turnId:t.turnId,error:e}),await setTimeout(i,void 0,{signal:n})}}}export{appendMissingToolResultMessages,createToolLoopHarness};
3
+ `)};return t!==void 0&&(n.providerOptions=t),n}function buildGatewayAttributionHeaders(e,t){let n=resolveProviderHeaders(e);if(n===void 0)return;let r=t?.agentName??t?.agentId,i=process.env.VERCEL_PROJECT_PRODUCTION_URL||process.env.VERCEL_URL,a=i?`https://${i}`:void 0,o={...n};return r&&(o[`x-title`]=r),a&&(o[`http-referer`]=a),o}async function resolveEffectiveRuntimeModel(e){if(e.ctx===void 0){let t=e.session.agent.modelReference;if(t===void 0)throw Error(`Dynamic model selection is unavailable outside an eve runtime context.`);return{model:await e.config.resolveModel(t),session:e.session}}let t=getEffectiveModelSelection(e.ctx);if(t===null)throw Error(`Dynamic model selection is required before model-dependent work begins. Add a matching resolver handler that returns a concrete model.`);return{model:t.model===void 0?await e.config.resolveModel(t.reference):t.model,session:updateSessionModelReference(e.session,t.reference)}}function updateSessionModelReference(e,t){return e.agent.modelReference===t?e:{...e,agent:{...e.agent,modelReference:t},compaction:updateCompactionThresholdForModelReference({compaction:e.compaction,modelReference:t})}}function updateCompactionThresholdForModelReference(e){return e.modelReference.contextWindowTokens===void 0?e.compaction:{...e.compaction,threshold:Math.max(1,Math.floor(e.modelReference.contextWindowTokens*(e.compaction.thresholdPercent??.9)))}}function buildHarnessToolsWithDynamicSubagents(e,t){let n=new Map(e);if(t===void 0)return n;for(let e of buildDynamicSubagentTools(t)){if(n.has(e.name))throw Error(`Dynamic subagent "${e.name}" collides with another runtime-visible tool name.`);n.set(e.name,e)}return n}function createToolLoopHarness(e){e.instrumentation?.installAiSdkWarningLogger();let t=e.handleEvent;async function runStep(t,n){let executeStep=async r=>{let i=r?.session??t,a=new GenerationSteering({abortSignal:e.abortSignal,steeringSignal:e.steeringSignal,outputStarted:getHarnessEmissionState(i.state).assistantOutputStarted});try{return await executeStepBody(i,a,n,r)}finally{a.dispose()}};return e.instrumentation?.runStep({environment,eveVersion,hasInput:hasStepInput(n),session:t},executeStep)??executeStep()}async function executeStepBody(n,r,i,a){let o=n,s=createHistoryViewPreparer({previous:e.historyView,projector:e.historyProjector});s(o.history,o.state);let projectHistory=(e,t)=>s(e,t).messages,c=getHarnessEmissionState(o.state),l=contextStorage.getStore();l!==void 0&&!l.has(StaticModelReferenceKey)&&l.setVirtualContext(StaticModelReferenceKey,o.agent.dynamicModel===!0?null:o.agent.modelReference??null);let u=l?.get(ParentSessionKey),d=l?.get(SessionCallbackKey),f=u!==void 0||d!==void 0,p,m=a?.createHandleEvent({getAttemptScope:()=>p,handleEvent:t,turnId:activeTurnId(c)})??t,h=m===void 0?void 0:async(e,t)=>{r.beforeEvent(e),await m(e,t)},failModelSelection=async(t,n)=>{if(throwIfTurnAborted(e.abortSignal),a?.recordError(t),!h)throw t;let r=createErrorId(),i=toErrorMessage(t);return log.error(`model selection failed terminally`,{error:t,errorId:r,sessionId:o.sessionId,turnId:n.turnId}),await emitFailedStep(h,n,{code:`MODEL_SELECTION_FAILED`,details:{errorId:r},message:i,sessionId:o.sessionId}),{next:e.mode===`task`||f?{done:!0,isError:!0,output:i}:{done:!0,output:``},session:o}},failBoundaryEvent=async(t,n)=>{if(throwIfTurnAborted(e.abortSignal),isTurnCancellation(t))throw t;if(isDynamicModelSelectionError(t))return failModelSelection(t,n);if(!h||e.mode!==`conversation`||!(t instanceof BoundaryHookError))throw t;a?.recordError(t);let r=createErrorId(),i=toErrorMessage(t);return log.error(`turn boundary handler failed — parking session`,{error:t,errorId:r,sessionId:o.sessionId,turnId:n.turnId}),c=await emitRecoverableFailedTurn(h,n,{code:`EVENT_HANDLER_FAILED`,continuationToken:o.continuationToken,details:{errorId:r},message:i}),{next:null,session:setHarnessEmissionState({...o,outputSchema:void 0},c),settledTurn:{isError:!0,output:i}}},preparePreambleTrace=async()=>await a?.preparePreamble({sequence:c.sequence,sessionStarted:c.sessionStarted,traceContext:a?.traceContext,turnId:activeTurnId(c)});if(e.clearOnly===!0)return o={...o,state:clearMemorySessionState(o.state)},o=replaceSessionHistory(o,[]),await h?.(createContextClearedEvent({sequence:c.sequence,sessionId:o.sessionId,turnId:activeTurnId(c)})),await h?.(createSessionWaitingEvent()),{next:null,session:o};if(e.compactOnly===!0){if(o.history.length>0)try{let t=contextStorage.getStore(),n=await resolveEffectiveRuntimeModel({config:e,ctx:t,session:o});o=n.session,o=(await maybeCompact({abortSignal:e.abortSignal,auth:t?.get(AuthKey)??null,emit:h,emissionState:{...c,turnId:activeTurnId(c)},force:!0,historyProjector:e.historyProjector,messages:[...o.history],model:n.model,requestEnvelopeTokens:getRequestEnvelopeTokens(o),resolveModel:e.resolveModel,runtimeIdentity:e.runtimeIdentity,session:o,telemetry:a?.telemetry()})).session}catch(e){logError(log,`manual session compaction failed`,e,{sessionId:o.sessionId})}return await h?.(createSessionWaitingEvent()),{next:null,session:o}}let g=consumeDeferredStepInput$1({input:i,preferCurrentInput:e.mode!==`conversation`&&i!==void 0&&hasPendingApprovalBatch(o),session:o});o=g.session;let _=getPendingCoordinationBatch(o.state),v=await resolvePendingCoordination({emit:h,session:o,stepInput:g.input,tools:e.tools});if(v.outcome===`unresolved`)return{next:null,session:v.session};o=v.session;let y=getPendingInputRequestIds(o.state),b=convertStaleResponsesToUserMessage({history:v.messages,pendingRequestIds:y,stepInput:dropStaleSessionLimitContinuationResponses({pendingRequestIds:y,stepInput:g.input})}),x=b.stepInput,S=b.kind===`converted`?{...x,message:b.displayMessage}:x,C=contextStorage.getStore();C!==void 0&&e.resolveStepDynamicTools!==void 0&&shouldPrepareApprovalReplayTools({session:o,stepInput:x})&&await e.resolveStepDynamicTools({ctx:C,event:createStepStartedEvent({modelId:o.agent.modelReference?.id??`dynamic`,sequence:c.sequence,stepIndex:c.stepIndex,turnId:c.turnId}),messages:projectHistory(v.messages,o.state)});let w=shouldPrepareApprovalReplayTools({session:o,stepInput:x})?buildResponseAuthorizationTools({authoredTools:e.tools,context:C}):e.tools,T=await coordinateApprovalDelivery({session:o,stepInput:x,tools:w});if(o=T.session,h){for(let e of T.feedback)await h(createMessageCompletedEvent({message:e,sequence:c.sequence,stepIndex:c.stepIndex,turnId:c.turnId}));let e=getApprovalAuditState(o.state);for(let t of e.activeCandidates.filter(e=>e.pendingEventEmitted!==!0))await h(createApprovalCandidateEvent({candidateId:t.candidateId,outcome:`pending`,requestId:t.requestId,responderPrincipalId:t.responder.principalId,sequence:c.sequence,stepIndex:c.stepIndex,turnId:c.turnId})),o={...o,state:markApprovalCandidatePendingEventEmitted({candidateId:t.candidateId,state:o.state})};for(let t of e.candidateHistory.filter(e=>e.eventEmitted!==!0&&e.status!==`allowed`))await h(createApprovalCandidateEvent({candidateId:t.candidateId,outcome:t.status,requestId:t.requestId,responderPrincipalId:t.responder.principalId,reason:t.reason,sequence:c.sequence,stepIndex:c.stepIndex,turnId:c.turnId})),o={...o,state:markApprovalCandidateHistoryEventEmitted({candidateId:t.candidateId,state:o.state})};for(let t of e.settlements.filter(e=>e.eventEmitted!==!0))await h(createApprovalSettledEvent({outcome:t.outcome===`allowed`?`approved`:`cancelled`,requestId:t.requestId,responderPrincipalId:t.actor.principalId,sequence:c.sequence,stepIndex:c.stepIndex,turnId:c.turnId})),o={...o,state:markApprovalSettlementEventEmitted({requestId:t.requestId,state:o.state})}}if(T.kind===`park`)return{next:null,session:o};if(T.kind===`continue-coordination`)return{next:runStep,session:T.stepInput===void 0?o:queueDeferredStepInput(o,T.stepInput)};if(T.challenges.length>0){if(h)for(let e of T.challenges)await h(createAuthorizationRequiredEvent({authorization:e.challenge,candidateId:e.candidateId,description:e.challenge.instructions??`Authorization required for ${e.name}`,name:e.name,sequence:c.sequence,stepIndex:c.stepIndex,turnId:c.turnId,webhookUrl:e.hookUrl}));let e=T.stepInput===void 0?o:queueDeferredStepInput(o,T.stepInput);return{next:null,session:{...e,state:setPendingAuthorization(e.state,{challenges:T.challenges})}}}let E=resolvePendingInput({activeTurnId:_?.event.turnId??activeTurnId(c),deferMessagesWhileApprovalsPending:e.mode!==`conversation`,history:v.messages,internalStep:!isHarnessBetweenTurns(o),resolveApprovalKey:resolveApprovalKeyFromTools(w),session:o,stepInput:T.stepInput});if(E.outcome===`unresolved`){let t=v.outcome===`resolved`?{...E.session,history:validateHarnessModelMessages(v.messages)}:E.session;if(h&&e.mode===`conversation`&&E.deferredMessage===!0&&hasStepInput(i)){let n=createTurnInputMessages(x);l!==void 0&&(prepareDynamicInstructionPreamble(l,projectHistory(t.history,t.state)),prepareMemoryPreamble(l,{history:t.history,input:n,projector:e.historyProjector,state:t.state}));let r=[],i;try{let r=await preparePreambleTrace();c=await emitTurnPreamble(h,S??{},c,projectHistory([...t.history,...n],t.state),e.runtimeIdentity,r)}catch(e){return r=l===void 0?[]:drainDynamicInstructionUserMessages(l),i=l===void 0?void 0:drainMemoryCommit(l),t={...t,history:validateHarnessModelMessages([...i?.history??t.history,...r]),state:i?.state??t.state},o=t,failBoundaryEvent(e,{sessionStarted:!0,sequence:c.sequence,stepIndex:0,turnId:activeTurnId(c)})}return r=l===void 0?[]:drainDynamicInstructionUserMessages(l),i=l===void 0?void 0:drainMemoryCommit(l),t={...t,history:validateHarnessModelMessages([...i?.history??t.history,...r]),state:i?.state??t.state},c=await emitTurnEpilogue(h,c,e.mode),{next:null,session:setHarnessEmissionState(t,c)}}return v.outcome===`resolved`?(h&&e.mode===`conversation`&&(c=await emitTurnEpilogue(h,c,e.mode),t=setHarnessEmissionState(t,c)),{next:null,session:t}):{next:null,session:E.session}}if(E.resolvedInputs!==void 0)for(let e of E.resolvedInputs)await a?.publishInputResolutions({batch:e,sessionId:o.sessionId}),h&&await h(createInputResolvedEvent({resolutions:e.inputs.map(e=>{let t={kind:e.request.kind,outcome:e.outcome,requestId:e.request.requestId};return e.response===void 0?t:{...t,response:e.response}}),sequence:e.event.sequence,stepIndex:e.event.stepIndex,turnId:e.event.turnId}));if(h&&E.rejectedActions)for(let e of E.rejectedActions)for(let t of e.results)await h(createActionResultEvent({rejected:!0,result:t,sequence:e.event.sequence,stepIndex:e.event.stepIndex,turnId:e.event.turnId}));let D=activeTurnId(c),O=getTurnClientContextState(E.session.state,D),k=E.deferredContext===!0?void 0:readClientContext(x),A=(k??O?.messages)?.map(e=>createFrameworkUserMessage(`context.instruction`,e))??[],j=[];if(x?.context!==void 0&&E.deferredContext!==!0)for(let e of x.context)j.push(createFrameworkUserMessage(`context.instruction`,e));let ee=frameworkMessageKindForStepInput(x),te=normalizeUserContent(x?.message),M=te!==void 0&&!E.deferredMessage&&!E.consumedMessage?await stageAttachmentsToSandbox(te):void 0;M!==void 0&&j.push(ee===void 0?createUserMessage(`user`,M):createFrameworkUserMessage(ee,M));let N=[],P;if(h&&(hasStepInput(x)||hasStepInput(T.stepInput))){l!==void 0&&(prepareDynamicInstructionPreamble(l,projectHistory(E.session.history,E.session.state)),prepareMemoryPreamble(l,{history:E.messages,input:[...A,...j],projector:e.historyProjector,state:E.session.state}));try{let t=await preparePreambleTrace();c=await emitTurnPreamble(h,S??{},c,projectHistory([...E.messages,...A,...j],E.session.state),e.runtimeIdentity,t)}catch(e){return N=l===void 0?[]:drainDynamicInstructionUserMessages(l),P=l===void 0?void 0:drainMemoryCommit(l),o={...E.session,history:validateHarnessModelMessages([...P?.history??E.session.history,...N]),state:P?.state??E.session.state},failBoundaryEvent(e,{sessionStarted:!0,sequence:c.sequence,stepIndex:0,turnId:activeTurnId(c)})}N=l===void 0?[]:drainDynamicInstructionUserMessages(l),P=l===void 0?void 0:drainMemoryCommit(l),a?.setTurnId(c.turnId)}let ne=P?.history??E.session.history,re=E.session.history.length;o=setHarnessEmissionState({...E.session,history:validateHarnessModelMessages([...ne,...N]),state:P?.state??E.session.state},c);let F=validateHarnessModelMessages([...P?.history??E.messages.slice(0,re),...N,...P===void 0?E.messages.slice(re):[]]),I=await applySessionLimitContinuation({config:e,emit:h,emissionState:c,limitContinuation:E.limitContinuation,session:o});if(I.result!==null)return I.result;o=I.session;let ie=getAgentHandleStore(o.state);if(!hasUnansweredToolCall(F)){let e=await l?.get(BackgroundToolExecutorKey)?.readAgentViews?.(),t=e===void 0||e.length===0?void 0:[...projectParkedAgentHandles(ie??{handles:[]}).map(e=>({availability:`available`,id:e.identity.id,name:e.identity.name,statusLine:e.phase===`parked`?e.lastStatus:void 0})),...e],n=resolveAgentsAnnouncement({agentViews:t,messages:projectHistory(F,o.state),store:ie});n!==void 0&&F.push(createFrameworkUserMessage(`context.state`,n))}let L=O;k!==void 0&&(L={insertionIndex:O?.insertionIndex??F.length,messages:k,turnId:D}),L!==void 0&&(o=setTurnClientContextState(o,L)),F=[...F,...j];let createModelMessages=e=>{if(L===void 0||L.messages.length===0)return[...e];let t=Math.min(Math.max(0,L.insertionIndex),e.length);return[...e.slice(0,t),...L.messages.map(e=>createFrameworkUserMessage(`context.instruction`,e)),...e.slice(t)]},R=validateHarnessModelMessages(projectHistory(createModelMessages(F),o.state)),z=l,B;try{z!==void 0&&e.dispatchDynamicModelEvent!==void 0&&await e.dispatchDynamicModelEvent({ctx:z,event:{data:{sequence:c.sequence,stepIndex:c.stepIndex,turnId:activeTurnId(c)},type:`step.started`},messages:R}),B=await resolveEffectiveRuntimeModel({config:e,ctx:z,session:o})}catch(e){return failModelSelection(e,c)}o=B.session;let V=B.model,ae=detectPromptCachePath(V),H=ae.kind===`anthropic-direct`?getAnthropicCacheMarker():void 0,oe=buildGatewayAttributionHeaders(V,e.runtimeIdentity);if(R=validateHarnessModelMessages(normalizeModelMessages(projectHistory(createModelMessages(F),o.state))),h)try{await emitStepStarted(h,c,requireSessionModelReference(o).id,R)}catch(e){return failBoundaryEvent(e,c)}let U=getApprovedTools(o,resolveApprovalKeyFromTools(buildResponseAuthorizationTools({authoredTools:e.tools,context:z}))),W=c.sequence===0,se=W&&z?.get(ScheduleIdKey)!==void 0,G=resolveDeliveryPolicy({hasScheduleProvenance:se,hasOutputSchema:o.outputSchema!==void 0,isChild:z?.get(ParentSessionKey)!==void 0,isFirstTurn:W,taskDeliveryPhase:z?.get(TurnTaskDeliveryKey),taskDeliveryPolicy:z?.get(TaskDeliveryPolicyKey)}),createRequestMessages=()=>{let e=createCurrentMessages(F,{historyState:z?.get(HistoryStateKey),currentTurnMessages:j,projectedMessages:R});z!==void 0&&e.addSystem(buildDynamicInstructionMessages(z));let t=z?.get(TurnTaskDeliveryKey)===`initiating`?resolveInitiatingTaskContext({state:o.state,turnId:D}):void 0;e.addAnnouncements({availableSkills:z?.get(PendingSkillAnnouncementKey),taskState:t?.context,deliveryInstruction:G.instruction});let n=renderPendingApprovalsInstruction(getPendingInputBatches(o.state).flatMap(e=>e.requests));return n!==void 0&&e.add(n,`context.state`,{cacheFriendly:!1}),e},K=createRequestMessages(),q,finishSteeredStep=()=>(throwIfTurnAborted(e.abortSignal),z?.set(HistoryStateKey,K.historyState),q!==void 0&&(o=setTurnUsageState(o,accumulateTurnUsage({previous:getTurnUsageState(o.state),turnId:c.turnId,usage:q}))),{steered:!0,next:runStep,session:setHarnessEmissionState({...o,history:[...K.history]},advanceStep(c))}),J=[],withTrailingUserNote=(e,t)=>t?[...e,createFrameworkUserMessage(`execution.retry`,t)]:[...e],prepareModelInstructions=e=>{let t=e?[{role:`system`,content:e}]:[],n=o.agent.system?[{role:`system`,content:o.agent.system}]:[],r=K.systemMessages.length>0||t.length>0?[...t,...n,...K.systemMessages]:void 0,i=r!==void 0&&H?applySystemCacheBreakpoint(r,H):r;return i===void 0?o.agent.system??void 0:mergeSystemInstructions(i)},prepareModelCallInput=e=>{let t=prepareModelInstructions(e);return{instructions:t,telemetryRuntimeContext:a?.resolveRuntimeContext({eveVersion,emissionState:c,environment,modelInput:{instructions:t,messages:J},session:o})}},ce=e.tools,Y=0,X,throwIfCompactionFailed=()=>{if(X!==void 0)throw X.error},prepareModelTools=async t=>{let n=buildHarnessToolsWithDynamicSubagents(e.tools,z),i=createBackgroundToolCallBatch(),a=getAdvertisedTools({session:o,tools:n});ce=a;let s=await buildToolSetWithProviderTools({approvedTools:U,backgroundBatch:i,disabledProviderTools:t.disabledProviderTools,modelReference:requireSessionModelReference(o),tools:a});if(z!==void 0){let e=getAdvertisedTools({session:o,tools:buildDynamicTools(z)}),n=buildToolSetFromDefinitions({approvedTools:U,backgroundBatch:i,disabledProviderTools:t.disabledProviderTools,tools:e});for(let[e,t]of Object.entries(n)){let n=a.get(e);if(n?.runtimeAction!==void 0||n?.workflowId!==void 0)throw Error(`Dynamic tool "${e}" collides with a coordination-visible deferred tool.`);s[e]=t}}o.outputSchema!==void 0&&(s[FINAL_OUTPUT_TOOL_NAME]=buildFinalOutputTool(o.outputSchema));let c=await getAdvertisedTools({modelTools:s,session:o,tools:a});o=c.session;let l=c.modelTools,u=H?applyLastToolCacheBreakpoint(l,H):l;for(let e of Object.values(u)){e.inputSchema=toModelSchema(e.inputSchema,`input`),e.outputSchema!==void 0&&(e.outputSchema=toModelSchema(e.outputSchema,`output`));let t=e.execute;t!==void 0&&(e.execute=(...e)=>(r.protectToolExecution(),t(...e)));let n=e.onInputAvailable;n!==void 0&&(e.onInputAvailable=(...e)=>(r.protectToolExecution(),n(...e)))}return{effectiveTools:u,backgroundBatch:i,advertisedHarnessTools:a,modelTools:l}},runSingleModelCall=async t=>{let{effectiveTools:n,backgroundBatch:i,advertisedHarnessTools:s,modelTools:l}=await prepareModelTools(t);K=createRequestMessages(),Y=await estimateRequestEnvelope({history:R,instructions:prepareModelInstructions(t.extraSystemNote),messages:withTrailingUserNote(K.nonSystemMessages,t.trailingUserNote),tools:n});let u=L===void 0?void 0:Math.max(0,F.length-L.insertionIndex),d=await(async()=>{try{return await maybeCompact({abortSignal:e.abortSignal,auth:z?.get(AuthKey)??null,emit:h,emissionState:c,historyProjector:e.historyProjector,messages:[...F],model:V,promptMessages:createModelMessages(F),requestEnvelopeTokens:Y,resolveModel:e.resolveModel,runtimeIdentity:e.runtimeIdentity,session:o,telemetry:a?.telemetry()})}catch(e){throw X={error:e},e}})();o=d.session,d.compacted&&(F=d.messages,L!==void 0&&u!==void 0&&(L={...L,insertionIndex:Math.max(0,F.length-u)},o=setTurnClientContextState(o,L)),o={...o,compaction:{recentWindowSize:o.compaction.recentWindowSize,threshold:o.compaction.threshold,thresholdPercent:o.compaction.thresholdPercent}},R=validateHarnessModelMessages(normalizeModelMessages(projectHistory(createModelMessages(F),o.state))),K=createRequestMessages(),{effectiveTools:n,backgroundBatch:i,advertisedHarnessTools:s,modelTools:l}=await prepareModelTools(t),Y=await estimateRequestEnvelope({history:R,instructions:prepareModelInstructions(t.extraSystemNote),messages:withTrailingUserNote(K.nonSystemMessages,t.trailingUserNote),tools:n})),Y=Math.max(0,Y-(estimateTokens(K.history)-estimateTokens(F))),r.begin(),J=await hydrateSandboxAttachments(K.nonSystemMessages);let{instructions:f,telemetryRuntimeContext:m={}}=prepareModelCallInput(t.extraSystemNote);t.retryReason&&(m[`eve.retry.reason`]=t.retryReason);let g=withTrailingUserNote(J,t.trailingUserNote),_=activeTurnId(c),v=a?.prepareAttempt({attemptIndex:t.attemptIndex,runtimeContext:m,stepIndex:c.stepIndex,turnId:_});p=v?.scope;let y=buildStepHooks({auth:z?.get(AuthKey)??null,cachePath:ae,emit:h,emissionState:c,emitStepStarted:t.suppressStepStartedEmission!==!0,marker:H,session:o}),b={headers:oe,instructions:f,model:V,onLanguageModelCallEnd(e){if(!r.interrupted){q=extractTokenUsageDelta({usage:e.usage,costUsd:extractGatewayCostUsd(e.providerMetadata)});for(let t of e.content)t.type!==`tool-call`||t.providerExecuted===!0||isInvalidToolCall(t)||i.register({callId:t.toolCallId,input:t.input,toolName:t.toolName})}},onToolExecutionEnd:logToolExecutionError,onError(e){r.interrupted||summarizeKnownError(e.error)?.tags.includes(`config`)!==!0&&logError(log,`tool-loop stream error`,e.error)},onStepEnd:y.onStepEnd,onStepStart:y.onStepStart,prepareStep:y.prepareStep,reasoning:o.agent.modelReference?.reasoning??o.agent.reasoning,runtimeContext:m,stopWhen:isStepCount(1),telemetry:v?.telemetry,toolApproval:buildToolApproval(l,r.signal),tools:n},x=new ToolLoopAgent(b),executeModelCall=async()=>{if(h){let t=[...e.tools].filter(([e,t])=>t.runtimeAction!==void 0&&s.get(e)===void 0).map(([e])=>e),n=new Set([FINAL_OUTPUT_TOOL_NAME,...t]),i=await x.stream({abortSignal:r.signal,messages:g}),{emittedActionCallIds:a,handledInlineToolResultCallIds:o,invalidInputToolCallIds:l,inlineAuthorizationResults:u,trailingInlineToolResultParts:d}=await emitStreamContent(h,c,interruptStreamOnFailure(i.fullStream,r.signal),{excludedActionToolNames:n,tools:s});throwIfTurnAborted(e.abortSignal),r.check();let[f,p]=await Promise.all([y.stepResult,i.responseMessages]);if(f.finishReason===`content-filter`)throw new ContentFilteredModelResponseError(readGatewayGenerationId(f.providerMetadata));if(isEmptyModelResponse(f)&&extractToolResultCallIds(p).size===0&&u.length===0&&d.length===0)throw new EmptyModelResponseError;await emitStepActions(h,c,f,{emittedActionCallIds:a,excludedActionCallIds:l,excludedActionToolNames:n,handledInlineToolResultCallIds:o,tools:s});let m=f.toolResults,_=new Map(m.map(e=>[e.toolCallId,e]));for(let e of u)_.set(e.toolCallId,e);return withAccumulatedResponseMessages({invalidInputToolCallIds:l,responseMessages:appendMissingToolResultMessages({append:d,responseMessages:p}),stepResult:f,toolResults:[..._.values()]})}let t=await x.generate({abortSignal:r.signal,messages:g});throwIfTurnAborted(e.abortSignal),r.check();let n=await y.stepResult;if(n.finishReason===`content-filter`)throw new ContentFilteredModelResponseError(readGatewayGenerationId(n.providerMetadata));if(isEmptyModelResponse(n)&&extractToolResultCallIds(t.responseMessages).size===0)throw new EmptyModelResponseError;return withAccumulatedResponseMessages({responseMessages:t.responseMessages,stepResult:n})};try{let e=await executeModelCall();return await v?.complete(),e}catch(e){return r.interrupted?await v?.complete():await v?.fail(e),r.check(),rethrowNoOutputAsEmptyResponse(e)}},le=0,runOneModelCall=async e=>runModelCallWithRetries(t=>runSingleModelCall({...e,attemptIndex:le++,suppressStepStartedEmission:t!==1||e.suppressStepStartedEmission}),{sessionId:o.sessionId,turnId:c.turnId,canRetry:()=>X===void 0},r.signal),ue=await enforceSessionUsageLimit({config:e,emit:h,emissionState:c,messages:R,session:o});if(ue!==null)return ue;let Z;try{Z=await runOneModelCall({suppressStepStartedEmission:!0})}catch(t){if(throwIfCompactionFailed(),throwIfTurnAborted(e.abortSignal),r.interrupted)return finishSteeredStep();let n=await runModelCallRecoveryPipeline({error:t,stages:[e=>attemptUnsupportedProviderToolRecovery({error:e.error,runOneModelCall,sessionId:o.sessionId,turnId:c.turnId}),e=>attemptEmptyResponseRecovery({emptyDeliveryEnabled:G.allowsEmptyDelivery,error:e.error,retryCallOptions:e.retryCallOptions,runOneModelCall,sessionId:o.sessionId,turnId:c.turnId})]});if(throwIfCompactionFailed(),throwIfTurnAborted(e.abortSignal),r.interrupted)return finishSteeredStep();if(n.outcome===`recovered`)Z=n.result;else{let t=n.error;if(a?.recordError(t),!h)throw t;let r=extractWorkflowStreamWriteErrorDetails(t);if(r!==null){let e=createErrorId();return log.error(`workflow stream write failed — parking session for retry by the user`,{...r,errorId:e,error:t,sessionId:o.sessionId,turnId:c.turnId}),c=await emitRecoverableFailedTurn(h,c,{code:`WORKFLOW_STREAM_WRITE_FAILED`,continuationToken:o.continuationToken,details:{...r,errorId:e},message:toErrorMessage(t)}),{next:null,session:setHarnessEmissionState(o,c)}}let i=classifyModelCallError(t),s=createErrorId(),l=summarizeKnownError(t),u=l===null?extractUpstreamRejectionMessage(t):null,d=l?.message??u?.message??toErrorMessage(t),p=l?.hint===void 0?d:`${d} ${l.hint}`,m=extractModelCallErrorDetails(t),g=buildModelCallFailureDetails({catalogSummary:l,error:t,errorId:s,modelCallDetails:m,upstreamRejection:u}),_=buildModelCallFailureLogFields({error:t,errorId:s,modelCallDetails:m,recognized:l!==null||u!==null,sessionId:o.sessionId,turnId:c.turnId});if(i===`terminal`)return l===null?log.error(u?.message??`model call failed terminally`,_):log.error(`${l.name}: ${l.message}`,{errorId:s,hint:l.hint,sessionId:o.sessionId,turnId:c.turnId}),await emitFailedStep(h,c,{code:`MODEL_CALL_FAILED`,details:g,message:d,sessionId:o.sessionId}),{next:e.mode===`task`||f?{done:!0,isError:!0,output:p}:{done:!0,output:``},session:o};if(e.mode===`task`){if(i===`recoverable`&&!(t instanceof EmptyModelResponseError)&&!(t instanceof ContentFilteredModelResponseError))throw log.warn(u?.message??`model call failed recoverably in task mode — rethrowing for durable step retry`,_),t;return log.error(u?.message??`model call failed; failing the task run`,_),await emitFailedStep(h,c,{code:`MODEL_CALL_FAILED`,details:g,message:d,sessionId:o.sessionId}),{next:{done:!0,isError:!0,output:p},session:o}}log.error(u?.message??`model call failed — parking session for retry by the user`,_),c=await emitRecoverableFailedTurn(h,c,{code:`MODEL_CALL_FAILED`,continuationToken:o.continuationToken,details:g,message:d});let v={isError:!0,output:p};return o={...o,outputSchema:void 0},{next:null,session:setHarnessEmissionState(o,c),settledTurn:v}}}let Q=accumulateTurnUsage({previous:getTurnUsageState(o.state),turnId:c.turnId,usage:extractTokenUsageDelta({costUsd:extractGatewayCostUsd(Z.providerMetadata),usage:Z.usage})});o=setTurnUsageState(o,Q),q=void 0;let $;try{$=formatLanguageModelGatewayId(V)}catch{$=void 0}await setEveAttributes({"$eve.model":$,"$eve.input_tokens":Q.inputTokens,"$eve.output_tokens":Q.outputTokens,"$eve.cache_read_tokens":Q.cacheReadTokens,"$eve.cache_write_tokens":Q.cacheWriteTokens,"$eve.cost_usd":Q.sawCost?Q.costUsd:void 0,"$eve.tool_count":e.tools.size});let de;try{r.check(),de=await handleStepResult({config:e,emit:h,emissionState:r.outputStarted?{...c,assistantOutputStarted:!0}:c,requestEnvelopeTokens:Y,durableModelPromptMessageCount:L===void 0||L.messages.length===0?J.length:void 0,promptMessages:K.history,result:Z,runStep,session:o,coordinationTools:ce})}catch(t){if(throwIfTurnAborted(e.abortSignal),r.interrupted)return finishSteeredStep();throw t}return z?.set(HistoryStateKey,K.historyState),de}return runStep}function extractTokenUsageDelta(e){let t=e.usage;if(t!==void 0||e.costUsd!==void 0)return{cacheReadTokens:t?.inputTokenDetails?.cacheReadTokens,cacheWriteTokens:t?.inputTokenDetails?.cacheWriteTokens,costUsd:e.costUsd,inputTokens:t?.inputTokens,outputTokens:t?.outputTokens}}function extractGatewayCostUsd(e){let t=readGatewayMetadata(e)?.cost;if(typeof t==`number`&&Number.isFinite(t))return t;if(typeof t==`string`){let e=Number(t);return Number.isFinite(e)?e:void 0}}function readGatewayMetadata(e){let t=e?.gateway;return t&&typeof t==`object`&&!Array.isArray(t)?t:void 0}function buildModelCallFailureDetails(e){let{catalogSummary:t,error:n,errorId:r,modelCallDetails:i,upstreamRejection:a}=e;if(t!==null){let e={errorId:r,message:t.message,name:t.name,semanticErrorId:t.id,...i};return t.hint!==void 0&&(e.hint=t.hint),e}return a===null?{...formatError(n,r),...i}:{errorId:r,message:toErrorMessage(n),name:a.name,...i}}function buildModelCallFailureLogFields(e){let t={errorId:e.errorId,sessionId:e.sessionId,turnId:e.turnId};return e.recognized?{...t,details:e.modelCallDetails}:{...t,error:e.error}}async function runModelCallRecoveryPipeline(e){let t=e.error,n;for(let r of e.stages){let e=await r({error:t,retryCallOptions:n});if(e.outcome===`recovered`)return e;e.outcome===`failed`&&(t=e.error,n=e.retryCallOptions)}return{outcome:`failed`,error:t}}function withAccumulatedResponseMessages(e){let{stepResult:t}=e;return{content:t.content,finishReason:t.finishReason,...e.invalidInputToolCallIds===void 0?{}:{invalidInputToolCallIds:e.invalidInputToolCallIds},providerMetadata:t.providerMetadata,response:{...t.response,messages:[...e.responseMessages]},text:t.text,toolCalls:t.toolCalls,toolResults:e.toolResults===void 0?t.toolResults:[...e.toolResults],usage:t.usage}}function appendMissingToolResultMessages(e){let t=extractToolResultCallIds(e.responseMessages),n=e.append.filter(e=>!t.has(e.toolCallId));return[...e.responseMessages,...n.length>0?[{role:`tool`,content:[...n]}]:[]]}function getInvalidToolCallInputErrors(e){let t=[];for(let n of e.toolCalls){if(n.toolName===FINAL_OUTPUT_TOOL_NAME)continue;let e=getInvalidToolCallInputError({toolCall:n});e!==void 0&&t.push(e)}return t}function extractToolResultCallIds(e){let t=new Set;for(let n of e)if(Array.isArray(n.content))for(let e of n.content)typeof e==`object`&&e&&e.type===`tool-result`&&t.add(e.toolCallId);return t}function hasUnansweredToolCall(e){let t=new Set,n=new Set;for(let r of e)if(Array.isArray(r.content))for(let e of r.content)typeof e==`object`&&e&&(e.type===`tool-call`&&t.add(e.toolCallId),e.type===`tool-result`&&n.add(e.toolCallId));for(let e of t)if(!n.has(e))return!0;return!1}async function attemptUnsupportedProviderToolRecovery(e){let t=extractUnsupportedProviderToolTypes(e.error);if(t.length===0)return{outcome:`skipped`};let n=[];for(let e of t){let t=resolveFrameworkToolFromUpstreamType(e);t!==null&&!n.includes(t)&&n.push(t)}if(n.length===0)return{outcome:`skipped`};log.warn(`disabling unsupported provider tool(s); retrying step once`,{disabled:n,sessionId:e.sessionId,turnId:e.turnId,upstreamTypes:t});let r={disabledProviderTools:new Set(n),extraSystemNote:buildDisabledToolNote(n)};try{return{outcome:`recovered`,result:await e.runOneModelCall({...r,suppressStepStartedEmission:!0})}}catch(e){return{outcome:`failed`,error:e,retryCallOptions:r}}}function buildDisabledToolNote(e){let t=e.join(`, `);return`The following ${e.length===1?`tool is`:`tools are`} not available with the current model and has been removed: ${t}. Proceed using the remaining tools or your training knowledge.`}function isEmptyModelResponse(e){return e.toolCalls.length===0&&e.toolResults.length===0&&resolveAssistantStepText(e.response.messages,e.text)===null}function rethrowNoOutputAsEmptyResponse(e){throw isNoOutputGeneratedError(e)?new EmptyModelResponseError({cause:e}):e}const EMPTY_RESPONSE_NUDGE=`Your previous reply was empty and was not delivered. Answer now from the tool results above; do not re-run tools or mention this notice.`;function buildEmptyResponseNudge(e){return e?`${EMPTY_RESPONSE_NUDGE} If the current task explicitly requires conditional delivery and there is nothing to report, reply with exactly ${EMPTY_DELIVERY_SENTINEL}.`:EMPTY_RESPONSE_NUDGE}async function attemptEmptyResponseRecovery(e){if(!(e.error instanceof EmptyModelResponseError))return{outcome:`skipped`};log.warn(`empty model response; reissuing the model call once`,{sessionId:e.sessionId,turnId:e.turnId});try{return{outcome:`recovered`,result:await e.runOneModelCall({...e.retryCallOptions,retryReason:`empty-response`,suppressStepStartedEmission:!0,trailingUserNote:buildEmptyResponseNudge(e.emptyDeliveryEnabled)})}}catch(t){return{outcome:`failed`,error:t,retryCallOptions:e.retryCallOptions}}}async function handleStepResult(e){let{config:t,emit:n,promptMessages:r,result:i,runStep:a}=e,{emissionState:o,session:s}=e,c=resolveAssistantStepText(i.response.messages,i.text),l=i.finishReason!==`tool-calls`&&i.toolCalls.length===0&&hasEmptyDeliverySentinel(c),u=getInvalidToolCallInputErrors({toolCalls:i.toolCalls}),d=new Set([...i.invalidInputToolCallIds??[],...i.toolCalls.filter(isInvalidToolCall).map(e=>e.toolCallId),...u.map(e=>e.toolCallId)]),f=l?[]:appendMissingToolResultMessages({append:u.map(e=>createToolResultMessagePartFromToolError(e)),responseMessages:i.response.messages}),p=l?null:c,m=new Set;for(let e of[...i.content??[],...i.toolResults??[]])(e.type===`tool-result`||e.type===`tool-error`)&&e.providerExecuted===!0&&m.add(e.toolCallId);let h=normalizeProviderToolHistory({messages:f,providerExecutedOutcomeIds:m}),g=h.messages,_=setRequestEnvelopeTokens({...s,compaction:createNextCompactionConfig(s.compaction,e.durableModelPromptMessageCount,i)},i.usage?.inputTokens!==void 0&&e.durableModelPromptMessageCount!==void 0?e.requestEnvelopeTokens:void 0),v=extractToolApprovalInputRequests({content:i.content??[],excludedCallIds:d}),y=v,b=renderPendingApprovalsSnippet(v),x=g.findIndex(e=>e.role!==`tool`),S=x===-1?g:g.slice(0,x),C=g.slice(S.length),w=validateHarnessModelMessages([...r,...S,...b===void 0?[]:[createFrameworkUserMessage(`context.state`,b)]]),T=getAdvertisedTools({session:_,tools:e.coordinationTools}),E=(i.toolCalls??[]).filter(e=>!d.has(e.toolCallId)).filter(t=>isDeferredHarnessTool(e.coordinationTools.get(t.toolName))).filter(e=>isDeferredHarnessTool(T.get(e.toolName))?!0:(log.warn(`deferred tool call blocked because tool is not advertised`,{callId:e.toolCallId,sessionId:_.sessionId,toolName:e.toolName}),!1)).map(e=>createCoordinationRequestFromToolCall({toolCall:e,tools:T}));if(E.length>0){let e=E.flatMap(e=>e.kind===`runtime-action`?[e.request]:[]),t=E.flatMap(e=>e.kind===`task`?[e.request]:[]);if(y.length===0)return{next:null,session:setHarnessEmissionState(setPendingCoordinationBatch({runtimeActions:e,tasks:t,event:{sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId},responseMessages:g,session:{..._,history:validateHarnessModelMessages(r)}}),advanceStep(o))};let i=setPendingCoordinationBatch({runtimeActions:e,tasks:t,event:{sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId},responseMessages:C,session:{..._,history:w}});return i=appendPendingInputBatch({event:{sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId},requests:y,responseMessages:[],session:i}),n&&await n(createInputRequestedEvent({requests:y,sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId})),{next:null,session:setHarnessEmissionState(i,advanceStep(o))}}if(y.length>0){let e=buildResponseAuthorizationTools({authoredTools:t.tools,context:contextStorage.getStore()}),r=appendPendingInputBatch({event:{sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId},requests:y,responseAuthRequiredRequestIds:v.filter(t=>{let n=e.get(t.action.toolName)?.approval;return n!==void 0&&typeof n!=`function`&&n.response!==void 0}).map(e=>e.requestId),responseMessages:C,session:{..._,history:w}});return n&&(await n(createInputRequestedEvent({requests:y,sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId})),t.mode===`conversation`&&(o=await emitTurnEpilogue(n,o,t.mode),r=setHarnessEmissionState(r,o))),{next:hasRunnableDeferredStepInput(r)?a:null,session:r}}let D=resolveInlineAuthorizationInterrupt({messages:[...r,...g],toolResults:i.toolResults});if(D){let{challenges:e,history:r}=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:validateHarnessModelMessages(r),state:setPendingAuthorization(_.state,{challenges:e})},o)}}let O=g,k=validateHarnessModelMessages([...r,...O]),A={..._,history:k};return(A.outputSchema===void 0||extractFinalOutput(i)===void 0)&&(O.at(-1)?.role===`tool`||h.outcomeEndsResponse||hasRunnableDeferredStepInput(A))?(n&&(o=advanceStep(o),A=setHarnessEmissionState(A,o)),{next:a,session:A}):t.mode===`task`&&(getBackgroundTasks(A.state).query({state:`working`}).length>0||contextStorage.getStore()?.get(BackgroundToolExecutorKey)?.hasPendingTasks?.()===!0)?deferTaskTurn({emissionState:o,emit:n,history:r,result:i,schema:A.outputSchema,session:A,stepOutput:p}):t.mode===`task`?finishTaskTurn({emissionState:o,emit:n,history:r,result:i,schema:A.outputSchema,session:A,stepOutput:p}):finishConversationTurn({emissionState:o,emit:n,history:r,result:i,schema:A.outputSchema,session:A,stepOutput:p})}async function deferTaskTurn(e){let{emit:t,history:n,result:r,schema:i,stepOutput:a}=e,{emissionState:o,session:s}=e;s=clearTurnClientContextState(s);let c=i===void 0?void 0:extractFinalOutput(r);return c!==void 0&&(s={...persistStructuredAssistantTurn(s,n,c),outputSchema:i}),t&&(o=await emitTurnEpilogue(t,o,`conversation`),s=setHarnessEmissionState(s,o)),{next:null,session:s,settledTurn:{output:c??a??``}}}function isDeferredHarnessTool(e){return e?.runtimeAction!==void 0||e?.workflowId!==void 0&&e.execution!==`background`}const OUTPUT_SCHEMA_NOT_FULFILLED={code:`OUTPUT_SCHEMA_NOT_FULFILLED`,message:`The agent could not produce a result matching the requested schema.`};function extractFinalOutput(e){return(e.toolCalls??[]).find(e=>e.toolName===FINAL_OUTPUT_TOOL_NAME&&!isInvalidToolCall(e))?.input}function persistStructuredAssistantTurn(e,t,n){return{...e,history:[...t,{content:JSON.stringify(n),role:`assistant`}],outputSchema:void 0}}async function emitStructuredResult(e,t,n,r){return await e(createResultCompletedEvent({result:n,sequence:t.sequence,stepIndex:t.stepIndex,turnId:t.turnId})),emitTurnEpilogue(e,t,r)}async function finishTaskTurn(e){let{emit:t,history:n,result:r,schema:i,stepOutput:a}=e,{emissionState:o,session:s}=e;if(s=clearTurnClientContextState(s),i===void 0)return t&&(o=await emitTurnEpilogue(t,o,`task`),s=setHarnessEmissionState(s,o)),{next:{done:!0,output:a??``},session:s};let c=extractFinalOutput(r);return c===void 0?(s={...s,outputSchema:void 0},t&&await emitFailedStep(t,o,{...OUTPUT_SCHEMA_NOT_FULFILLED,sessionId:s.sessionId}),{next:{done:!0,isError:!0,output:OUTPUT_SCHEMA_NOT_FULFILLED.message},session:s}):(s=persistStructuredAssistantTurn(s,n,c),t&&(o=await emitStructuredResult(t,o,c,`task`),s=setHarnessEmissionState(s,o)),{next:{done:!0,output:c},session:s})}async function finishConversationTurn(e){let{emit:t,history:n,result:r,schema:i,stepOutput:a}=e,{emissionState:o,session:s}=e;if(s=clearTurnClientContextState(s),i===void 0)return t&&(o=await emitTurnEpilogue(t,o,`conversation`),s=setHarnessEmissionState(s,o)),{next:null,session:s,settledTurn:{output:a??``}};let c=extractFinalOutput(r);if(c===void 0){s={...s,outputSchema:void 0},t&&(o=await emitRecoverableFailedTurn(t,o,{...OUTPUT_SCHEMA_NOT_FULFILLED,continuationToken:s.continuationToken}),s=setHarnessEmissionState(s,o));let e={isError:!0,output:OUTPUT_SCHEMA_NOT_FULFILLED.message};return{next:null,session:s,settledTurn:e}}return s=persistStructuredAssistantTurn(s,n,c),t&&(o=await emitStructuredResult(t,o,c,`conversation`),s=setHarnessEmissionState(s,o)),{next:null,session:s,settledTurn:{output:c}}}function createNextCompactionConfig(e,t,n){let r={recentWindowSize:e.recentWindowSize,threshold:e.threshold,thresholdPercent:e.thresholdPercent};return n.usage?.inputTokens!==void 0&&t!==void 0&&(r.lastKnownInputTokens=n.usage.inputTokens,r.lastKnownPromptMessageCount=t),r}function replaceSessionHistory(e,t){return contextStorage.getStore()?.delete(HistoryStateKey),{...e,history:t,compaction:{recentWindowSize:e.compaction.recentWindowSize,threshold:e.compaction.threshold,thresholdPercent:e.compaction.thresholdPercent}}}async function maybeCompact(e){let{emit:t,emissionState:n}=e,r=e.messages,i=e.session,a=e.promptMessages??r,o=validateHarnessModelMessages(e.historyProjector?.({messages:a,state:i.state})??a),s=e.force===!0||shouldCompact(o,i.compaction,e.requestEnvelopeTokens,getRequestEnvelopeTokens(i)),c=shouldCanonicalizeMemory(r);if(!s&&!c)return{compacted:!1,messages:r,session:i};let l=await resolveCompactionModel({compactionModelReference:i.agent.compactionModelReference,model:e.model,modelReference:requireSessionModelReference(i),resolveModel:e.resolveModel}),u=i.agent.compactionModelReference??requireSessionModelReference(i),d=mergeProviderSafetyIdentifier(u,l.providerOptions,e.auth);if(t){let a=contextStorage.getStore();a!==void 0&&prepareMemoryCompaction(a,{history:r,state:i.state}),await t(createCompactionRequestedEvent({modelId:formatLanguageModelGatewayId(l.model),sequence:n.sequence,sessionId:i.sessionId,turnId:n.turnId,usageInputTokens:getInputTokenCount(o,i.compaction,e.requestEnvelopeTokens,getRequestEnvelopeTokens(i))}),o)}let f=canonicalizeMemoryRecords(r),p=validateHarnessModelMessages(e.historyProjector?.({messages:f.ordinary,state:i.state})??f.ordinary),m=e.requestEnvelopeTokens??0,h={...i.compaction,threshold:Math.max(1,i.compaction.threshold-m),lastKnownInputTokens:i.compaction.lastKnownInputTokens===void 0?void 0:Math.max(0,i.compaction.lastKnownInputTokens-Math.min(getRequestEnvelopeTokens(i)??0,m))},g=s?await compactMessages([...p],l.model,h,d,e.telemetry,buildGatewayAttributionHeaders(l.model,e.runtimeIdentity),e.abortSignal,e.force===!0,e.requestEnvelopeTokens===void 0?void 0:Math.max(0,getInputTokenCount(o,i.compaction,m,getRequestEnvelopeTokens(i))-m)):[...p];if(r=validateHarnessModelMessages([...f.memory,...g]),t){let a=contextStorage.getStore();if(a!==void 0&&prepareMemoryCompaction(a,{history:r,state:i.state}),await t(createCompactionCompletedEvent({modelId:formatLanguageModelGatewayId(l.model),sequence:n.sequence,sessionId:i.sessionId,turnId:n.turnId}),e.historyProjector?.({messages:r,state:i.state})??r),a!==void 0){let e=drainMemoryCommit(a);e!==void 0&&(r=validateHarnessModelMessages(e.history),i={...i,state:e.state})}}return{compacted:!0,messages:r,session:replaceSessionHistory(i,r)}}function resolveApprovalKeyFromTools(e){return t=>{let n=e.get(t.action.toolName);if(n?.approvalKey!==void 0)return n.approvalKey(t.action.input)}}async function runModelCallWithRetries(e,t,n){for(let r=1;;r++){n.throwIfAborted();try{return await e(r)}catch(e){if(n.throwIfAborted(),t.canRetry?.()===!1||r===3||classifyModelCallError(e)!==`retry`)throw e;let i=500*2**(r-1)+Math.floor(Math.random()*250);log.warn(`model call failed transiently — retrying`,{attempt:r,delayMs:i,sessionId:t.sessionId,turnId:t.turnId,error:e}),await setTimeout(i,void 0,{signal:n})}}}export{appendMissingToolResultMessages,createToolLoopHarness};
@@ -87,9 +87,9 @@ export declare function getSessionUsageLimitViolation(session: Pick<HarnessSessi
87
87
  * measures everything since the last report, so the deltas of a
88
88
  * multi-turn persistent child sum exactly to its session totals.
89
89
  */
90
- export declare function takeSessionUsageDelta(session: HarnessSession): {
90
+ export declare function takeSessionUsageDelta<T extends Pick<HarnessSession, "state">>(session: T): {
91
91
  readonly delta: TokenUsage;
92
- readonly session: HarnessSession;
92
+ readonly session: T;
93
93
  };
94
94
  /** Writes per-turn token state onto a new copy of the session. */
95
95
  export declare function setTurnUsageState<T extends {
@@ -1,7 +1,7 @@
1
1
  import type { RuntimeToolResultActionResult } from "#shared/action-types.js";
2
2
  import type { SessionStateMap } from "#harness/types.js";
3
3
  import { type ActivityWorkIdentityV1 } from "#protocol/activity.js";
4
- import { type TaskMetadata, type TaskView } from "#tasks/types.js";
4
+ import { type TaskMetadata, type TaskStatus, type TaskView } from "#tasks/types.js";
5
5
  import type { DurableDynamicSubagentSelection, SessionAuth } from "#context/keys.js";
6
6
  export declare const WORKFLOW_TOOL_RUNS_STATE_KEY = "eve.workflowTool";
7
7
  export interface WorkflowTaskPayload {
@@ -41,15 +41,43 @@ export interface TaskAgentDispatchContext {
41
41
  /** Decode retained output only when it is consumed, independently of ownership reads. */
42
42
  export declare function readWorkflowTaskView(task: WorkflowTaskPayload): TaskView | undefined;
43
43
  export declare function getWorkflowToolRuns(state: SessionStateMap | undefined): readonly WorkflowToolRun[];
44
- export declare function getBackgroundWorkflowToolRuns(state: SessionStateMap | undefined): readonly BackgroundWorkflowToolRun[];
44
+ /** Parent-observed lifecycle state. Input requests are tracked on the parent session instead. */
45
+ export type BackgroundTaskState = Exclude<TaskStatus, "input_required">;
46
+ /** A background run with its decoded lifecycle view. */
47
+ export type BackgroundTask = TaskView & {
48
+ /** Overlapping work reported together; a task without a join target starts its own cohort. */
49
+ readonly cohortId: string;
50
+ /** The parent turn that started the task. */
51
+ readonly turnId: string;
52
+ readonly run: BackgroundWorkflowToolRun;
53
+ };
54
+ export interface BackgroundTaskFilter {
55
+ readonly state?: BackgroundTaskState | readonly BackgroundTaskState[];
56
+ readonly cohortId?: string;
57
+ readonly turnId?: string;
58
+ }
59
+ export interface BackgroundTasks {
60
+ get(taskId: string): BackgroundTask | undefined;
61
+ query(filter?: BackgroundTaskFilter): readonly BackgroundTask[];
62
+ }
63
+ /**
64
+ * Read-only parent view: a task without a recorded terminal outcome is working.
65
+ * Only returned tasks are decoded, so one corrupt retained outcome cannot block
66
+ * reads of unrelated tasks, and working-only reads never decode.
67
+ */
68
+ export declare function getBackgroundTasks(state: SessionStateMap | undefined): BackgroundTasks;
45
69
  export declare function getBlockingWorkflowToolRuns(state: SessionStateMap | undefined, turnId?: string): readonly BlockingWorkflowToolRun[];
46
- export declare function findBackgroundWorkflowToolRun(state: SessionStateMap | undefined, taskId: string): BackgroundWorkflowToolRun | undefined;
47
70
  /** Registration is idempotent by originating turn and call; retained task facts survive replay. */
48
71
  export declare function registerWorkflowToolRun<T extends {
49
72
  readonly state?: SessionStateMap;
50
73
  }>(session: T, entry: WorkflowToolRun): T;
51
- /** Task payloads remain available for the session lifetime, including after report delivery. */
52
- export declare function recordWorkflowTaskView(state: SessionStateMap | undefined, view: TaskView): SessionStateMap | undefined;
74
+ /** Records the first terminal outcome and distinguishes it from repeated or late reports. */
75
+ export declare function recordWorkflowTaskView(state: SessionStateMap | undefined, view: TaskView): {
76
+ readonly state: SessionStateMap | undefined;
77
+ readonly view: TaskView;
78
+ /** True only when this call recorded the task's first outcome. */
79
+ readonly firstOutcome: boolean;
80
+ };
53
81
  /** Removes only this turn's waiting calls. Session-owned task payloads are never pruned here. */
54
82
  export declare function removeBlockingWorkflowToolRuns<T extends {
55
83
  readonly state?: SessionStateMap;
@@ -1 +1 @@
1
- import{isNonEmptyString,isObject}from"#shared/guards.js";import{parseActivityWorkIdentityV1}from"#protocol/activity.js";import{sameTaskMetadata}from"#tasks/types.js";const WORKFLOW_TOOL_RUNS_STATE_KEY=`eve.workflowTool`;function isTaskMetadata(e){return isObject(e)&&isNonEmptyString(e.kind)&&isNonEmptyString(e.name)}function isRecord(e){if(!isObject(e))return!1;let t=e.constructor;return typeof t!=`function`||isObject(t.prototype)&&Object.hasOwn(t.prototype,`isPrototypeOf`)}function isSessionAuthContext(e){return e===null||isObject(e)&&Object.keys(e).every(e=>[`attributes`,`authenticator`,`issuer`,`principalId`,`principalType`,`subject`].includes(e))&&isRecord(e.attributes)&&Object.values(e.attributes).every(e=>typeof e==`string`||Array.isArray(e)&&Array.from(e).every(e=>typeof e==`string`))&&typeof e.authenticator==`string`&&typeof e.principalId==`string`&&typeof e.principalType==`string`&&(e.issuer===void 0||typeof e.issuer==`string`)&&(e.subject===void 0||typeof e.subject==`string`)}function isTaskAgentDispatchContext(e){return isObject(e)&&Object.keys(e).every(e=>[`auth`,`sessionDynamicSubagentSelections`,`turnDynamicSubagentSelections`].includes(e))&&isObject(e.auth)&&Object.keys(e.auth).every(e=>e===`current`||e===`initiator`)&&isSessionAuthContext(e.auth.current)&&isSessionAuthContext(e.auth.initiator)&&(e.sessionDynamicSubagentSelections===void 0||isRecord(e.sessionDynamicSubagentSelections))&&(e.turnDynamicSubagentSelections===void 0||isRecord(e.turnDynamicSubagentSelections))}function isWorkflowToolRun(e){if(!isObject(e)||!isNonEmptyString(e.callId)||!isNonEmptyString(e.toolName)||!isObject(e.origin)||!isNonEmptyString(e.origin.turnId)||typeof e.origin.stepIndex!=`number`||!Number.isSafeInteger(e.origin.stepIndex)||e.origin.stepIndex<0||!isObject(e.address)||!isNonEmptyString(e.address.runId)||!isNonEmptyString(e.address.hookToken))return!1;if(e.lifetime===`turn`)return e.task===void 0;if(e.lifetime!==`session`||!isObject(e.task))return!1;let t=e.task;return isNonEmptyString(t.taskId)&&isTaskMetadata(t.metadata)&&isTaskAgentDispatchContext(t.dispatchContext)&&(t.cohortId===void 0||isNonEmptyString(t.cohortId))&&(t.activityWorkIdentity===void 0||parseActivityWorkIdentityV1(t.activityWorkIdentity)!==void 0)}function parseRegistry(e){if(!isObject(e)||e.version!==3||!Array.isArray(e.runs)||!Array.from(e.runs).every(isWorkflowToolRun))throw Error(`Corrupt workflow tool run registry: invalid version or run.`);let t=new Set,n=new Set;for(let r of e.runs){let e=JSON.stringify([r.origin.turnId,r.callId]);if(t.has(e))throw Error(`Corrupt workflow tool run registry: Run identities must be unique.`);if(t.add(e),r.lifetime===`session`){if(n.has(r.task.taskId))throw Error(`Corrupt workflow tool run registry: Task ids must be unique.`);n.add(r.task.taskId)}}return{...e,version:3,runs:e.runs.map(copyWorkflowToolRun)}}function copySessionAuthContext(e){return e===null?null:{...e,attributes:Object.fromEntries(Object.entries(e.attributes).map(([e,t])=>[e,typeof t==`string`?t:Object.freeze([...t])]))}}function copyWorkflowToolRun(e){let t={...e,origin:{...e.origin},address:{...e.address}};if(e.lifetime===`turn`)return t;let n=e.task.dispatchContext,r={...n,auth:{current:copySessionAuthContext(n.auth.current),initiator:copySessionAuthContext(n.auth.initiator)}};return n.sessionDynamicSubagentSelections!==void 0&&(r.sessionDynamicSubagentSelections={...n.sessionDynamicSubagentSelections}),n.turnDynamicSubagentSelections!==void 0&&(r.turnDynamicSubagentSelections={...n.turnDynamicSubagentSelections}),{...t,lifetime:`session`,task:{...e.task,metadata:{...e.task.metadata},dispatchContext:r}}}function parseTaskOutcome(e){if(!isObject(e)||e.inputRequests!==void 0)return;let t=e.usage;if(t!==void 0&&(!isObject(t)||![t.cacheReadTokens,t.cacheWriteTokens,t.inputTokens,t.outputTokens,...t.costUsd===void 0?[]:[t.costUsd]].every(e=>typeof e==`number`&&Number.isFinite(e)&&e>=0)))return;if(e.status===`cancelled`){if(e.lastOutput!==void 0)return}else{if(e.status!==`completed`&&e.status!==`failed`)return;let t=e.status===`completed`?`result`:`error`;if(!isObject(e.lastOutput)||e.lastOutput.type!==t)return}let n={...e};return t!==void 0&&(n.usage={...t}),isObject(e.lastOutput)&&(n.lastOutput={...e.lastOutput}),n}function readWorkflowTaskView(e){if(e.outcome===void 0)return;let t=parseTaskOutcome(e.outcome);if(t===void 0)throw Error(`Corrupt workflow task result "${e.taskId}": invalid outcome.`);return{...t,taskId:e.taskId,metadata:{...e.metadata}}}function readRegistry(e){if(e?.[`eve.tasks`]!==void 0||e?.[`eve.runtime.workflowToolRuns`]!==void 0)throw Error(`Unsupported workflow tool run state: start a new session or import its conversation.`);let t=e?.[WORKFLOW_TOOL_RUNS_STATE_KEY];return t===void 0?{version:3,runs:[]}:parseRegistry(t)}function getWorkflowToolRuns(e){return readRegistry(e).runs}function getBackgroundWorkflowToolRuns(e){return getWorkflowToolRuns(e).filter(e=>e.lifetime===`session`)}function getBlockingWorkflowToolRuns(e,t){return getWorkflowToolRuns(e).filter(e=>e.lifetime===`turn`&&(t===void 0||e.origin.turnId===t))}function findBackgroundWorkflowToolRun(e,t){return getBackgroundWorkflowToolRuns(e).find(e=>e.task.taskId===t)}function writeRegistry(e,t){if(t.runs.length===0){let t={...e};return delete t[WORKFLOW_TOOL_RUNS_STATE_KEY],Object.keys(t).length===0?void 0:t}return{...e,[WORKFLOW_TOOL_RUNS_STATE_KEY]:parseRegistry(t)}}function registerWorkflowToolRun(e,t){let n=readRegistry(e.state),r=[...n.runs],i=r.findIndex(e=>e.origin.turnId===t.origin.turnId&&e.callId===t.callId),a=r[i];if(a!==void 0&&(a.lifetime!==t.lifetime||a.toolName!==t.toolName))throw Error(`Replayed invocation changed its ownership or tool identity.`);if(t.lifetime===`session`){if(a?.lifetime===`session`){if(t.task.taskId!==a.task.taskId)throw Error(`Replayed invocation changed its task identity.`);t={...t,task:{...a.task,...t.task,metadata:{...a.task.metadata,...t.task.metadata},activityWorkIdentity:t.task.activityWorkIdentity===void 0?a.task.activityWorkIdentity:{...a.task.activityWorkIdentity,...t.task.activityWorkIdentity},cohortId:a.task.cohortId,dispatchContext:a.task.dispatchContext,outcome:a.task.outcome??t.task.outcome}}}else{let e=r.find(e=>e.lifetime===`session`&&e.task.outcome===void 0);t={...t,task:{...t.task,cohortId:e===void 0?void 0:e.task.cohortId??e.task.taskId}}}}return t.lifetime===`session`&&readWorkflowTaskView(t.task),a===void 0?r.push(t):r[i]={...a,...t,origin:a.origin,address:{...a.address,...t.address}},{...e,state:writeRegistry(e.state,{...n,runs:r})}}function recordWorkflowTaskView(e,t){let{taskId:n,metadata:r,...i}=t,a=parseTaskOutcome(i);if(!isNonEmptyString(n)||!isTaskMetadata(r)||a===void 0)throw Error(`Invalid terminal workflow task view.`);let o=readRegistry(e),s=[...o.runs],c=s.findIndex(e=>e.lifetime===`session`&&e.task.taskId===n),l=s[c];if(l===void 0||l.lifetime!==`session`)return e;if(!sameTaskMetadata(l.task.metadata,r))throw Error(`Task view metadata does not match invocation "${t.taskId}".`);return readWorkflowTaskView(l.task)===void 0?(s[c]={...l,task:{...l.task,outcome:a}},writeRegistry(e,{...o,runs:s})):e}function removeBlockingWorkflowToolRuns(e,t,n){let r=readRegistry(e.state),i=r.runs,a=i.filter(e=>e.lifetime!==`turn`||e.origin.turnId!==t||n!==void 0&&e.callId!==n);return a.length===i.length?e:{...e,state:writeRegistry(e.state,{...r,runs:a})}}function findBlockingWorkflowToolRun(e,t,n){let r=getBlockingWorkflowToolRuns(e,n).filter(e=>e.callId===t);return r.length===1?r[0]:void 0}function isInboxToolResultFromRecordedWorkflowToolRun(e,t){let n=findBlockingWorkflowToolRun(e,t.callId);return n!==void 0&&n.toolName===t.toolName}export{WORKFLOW_TOOL_RUNS_STATE_KEY,findBackgroundWorkflowToolRun,findBlockingWorkflowToolRun,getBackgroundWorkflowToolRuns,getBlockingWorkflowToolRuns,getWorkflowToolRuns,isInboxToolResultFromRecordedWorkflowToolRun,readWorkflowTaskView,recordWorkflowTaskView,registerWorkflowToolRun,removeBlockingWorkflowToolRuns};
1
+ import{isNonEmptyString,isObject}from"#shared/guards.js";import{parseActivityWorkIdentityV1}from"#protocol/activity.js";import{sameTaskMetadata}from"#tasks/types.js";const WORKFLOW_TOOL_RUNS_STATE_KEY=`eve.workflowTool`;function isTaskMetadata(e){return isObject(e)&&isNonEmptyString(e.kind)&&isNonEmptyString(e.name)}function isRecord(e){if(!isObject(e))return!1;let t=e.constructor;return typeof t!=`function`||isObject(t.prototype)&&Object.hasOwn(t.prototype,`isPrototypeOf`)}function isSessionAuthContext(e){return e===null||isObject(e)&&Object.keys(e).every(e=>[`attributes`,`authenticator`,`issuer`,`principalId`,`principalType`,`subject`].includes(e))&&isRecord(e.attributes)&&Object.values(e.attributes).every(e=>typeof e==`string`||Array.isArray(e)&&Array.from(e).every(e=>typeof e==`string`))&&typeof e.authenticator==`string`&&typeof e.principalId==`string`&&typeof e.principalType==`string`&&(e.issuer===void 0||typeof e.issuer==`string`)&&(e.subject===void 0||typeof e.subject==`string`)}function isTaskAgentDispatchContext(e){return isObject(e)&&Object.keys(e).every(e=>[`auth`,`sessionDynamicSubagentSelections`,`turnDynamicSubagentSelections`].includes(e))&&isObject(e.auth)&&Object.keys(e.auth).every(e=>e===`current`||e===`initiator`)&&isSessionAuthContext(e.auth.current)&&isSessionAuthContext(e.auth.initiator)&&(e.sessionDynamicSubagentSelections===void 0||isRecord(e.sessionDynamicSubagentSelections))&&(e.turnDynamicSubagentSelections===void 0||isRecord(e.turnDynamicSubagentSelections))}function isWorkflowToolRun(e){if(!isObject(e)||!isNonEmptyString(e.callId)||!isNonEmptyString(e.toolName)||!isObject(e.origin)||!isNonEmptyString(e.origin.turnId)||typeof e.origin.stepIndex!=`number`||!Number.isSafeInteger(e.origin.stepIndex)||e.origin.stepIndex<0||!isObject(e.address)||!isNonEmptyString(e.address.runId)||!isNonEmptyString(e.address.hookToken))return!1;if(e.lifetime===`turn`)return e.task===void 0;if(e.lifetime!==`session`||!isObject(e.task))return!1;let t=e.task;return isNonEmptyString(t.taskId)&&isTaskMetadata(t.metadata)&&isTaskAgentDispatchContext(t.dispatchContext)&&(t.cohortId===void 0||isNonEmptyString(t.cohortId))&&(t.activityWorkIdentity===void 0||parseActivityWorkIdentityV1(t.activityWorkIdentity)!==void 0)}function parseRegistry(e){if(!isObject(e)||e.version!==3||!Array.isArray(e.runs)||!Array.from(e.runs).every(isWorkflowToolRun))throw Error(`Corrupt workflow tool run registry: invalid version or run.`);let t=new Set,n=new Set;for(let r of e.runs){let e=JSON.stringify([r.origin.turnId,r.callId]);if(t.has(e))throw Error(`Corrupt workflow tool run registry: Run identities must be unique.`);if(t.add(e),r.lifetime===`session`){if(n.has(r.task.taskId))throw Error(`Corrupt workflow tool run registry: Task ids must be unique.`);n.add(r.task.taskId)}}return{...e,version:3,runs:e.runs.map(copyWorkflowToolRun)}}function copySessionAuthContext(e){return e===null?null:{...e,attributes:Object.fromEntries(Object.entries(e.attributes).map(([e,t])=>[e,typeof t==`string`?t:Object.freeze([...t])]))}}function copyWorkflowToolRun(e){let t={...e,origin:{...e.origin},address:{...e.address}};if(e.lifetime===`turn`)return t;let n=e.task.dispatchContext,r={...n,auth:{current:copySessionAuthContext(n.auth.current),initiator:copySessionAuthContext(n.auth.initiator)}};return n.sessionDynamicSubagentSelections!==void 0&&(r.sessionDynamicSubagentSelections={...n.sessionDynamicSubagentSelections}),n.turnDynamicSubagentSelections!==void 0&&(r.turnDynamicSubagentSelections={...n.turnDynamicSubagentSelections}),{...t,lifetime:`session`,task:{...e.task,metadata:{...e.task.metadata},dispatchContext:r}}}function parseTaskOutcome(e){if(!isObject(e)||e.inputRequests!==void 0)return;let t=e.usage;if(t!==void 0&&(!isObject(t)||![t.cacheReadTokens,t.cacheWriteTokens,t.inputTokens,t.outputTokens,...t.costUsd===void 0?[]:[t.costUsd]].every(e=>typeof e==`number`&&Number.isFinite(e)&&e>=0)))return;if(e.status===`cancelled`){if(e.lastOutput!==void 0)return}else{if(e.status!==`completed`&&e.status!==`failed`)return;let t=e.status===`completed`?`result`:`error`;if(!isObject(e.lastOutput)||e.lastOutput.type!==t)return}let n={...e};return t!==void 0&&(n.usage={...t}),isObject(e.lastOutput)&&(n.lastOutput={...e.lastOutput}),n}function readWorkflowTaskView(e){if(e.outcome===void 0)return;let t=parseTaskOutcome(e.outcome);if(t===void 0)throw Error(`Corrupt workflow task result "${e.taskId}": invalid outcome.`);return{...t,taskId:e.taskId,metadata:{...e.metadata}}}function readRegistry(e){if(e?.[`eve.tasks`]!==void 0||e?.[`eve.runtime.workflowToolRuns`]!==void 0)throw Error(`Unsupported workflow tool run state: start a new session or import its conversation.`);let t=e?.[WORKFLOW_TOOL_RUNS_STATE_KEY];return t===void 0?{version:3,runs:[]}:parseRegistry(t)}function getWorkflowToolRuns(e){return readRegistry(e).runs}function getBackgroundTasks(e){let t=getWorkflowToolRuns(e).filter(e=>e.lifetime===`session`);return{get(e){let n=t.find(t=>t.task.taskId===e);return n===void 0?void 0:toBackgroundTask(n)},query(e={}){let n=typeof e.state==`string`?[e.state]:e.state,r=n===void 0||n.some(e=>e!==`working`);return t.flatMap(t=>{if(e.cohortId!==void 0&&cohortIdOf(t)!==e.cohortId||e.turnId!==void 0&&t.origin.turnId!==e.turnId||t.task.outcome!==void 0&&!r)return[];let i=toBackgroundTask(t);return n===void 0||n.includes(i.status)?[i]:[]})}}}function cohortIdOf(e){return e.task.cohortId??e.task.taskId}function toBackgroundTask(e){return{...readWorkflowTaskView(e.task)??{taskId:e.task.taskId,metadata:e.task.metadata,status:`working`},cohortId:cohortIdOf(e),turnId:e.origin.turnId,run:e}}function getBlockingWorkflowToolRuns(e,t){return getWorkflowToolRuns(e).filter(e=>e.lifetime===`turn`&&(t===void 0||e.origin.turnId===t))}function writeRegistry(e,t){if(t.runs.length===0){let t={...e};return delete t[WORKFLOW_TOOL_RUNS_STATE_KEY],Object.keys(t).length===0?void 0:t}return{...e,[WORKFLOW_TOOL_RUNS_STATE_KEY]:parseRegistry(t)}}function registerWorkflowToolRun(e,t){let n=readRegistry(e.state),r=[...n.runs],i=r.findIndex(e=>e.origin.turnId===t.origin.turnId&&e.callId===t.callId),a=r[i];if(a!==void 0&&(a.lifetime!==t.lifetime||a.toolName!==t.toolName))throw Error(`Replayed invocation changed its ownership or tool identity.`);if(t.lifetime===`session`){if(a?.lifetime===`session`){if(t.task.taskId!==a.task.taskId)throw Error(`Replayed invocation changed its task identity.`);t={...t,task:{...a.task,...t.task,metadata:{...a.task.metadata,...t.task.metadata},activityWorkIdentity:t.task.activityWorkIdentity===void 0?a.task.activityWorkIdentity:{...a.task.activityWorkIdentity,...t.task.activityWorkIdentity},cohortId:a.task.cohortId,dispatchContext:a.task.dispatchContext,outcome:a.task.outcome??t.task.outcome}}}else{let e=r.find(e=>e.lifetime===`session`&&e.task.outcome===void 0);t={...t,task:{...t.task,cohortId:e===void 0?void 0:e.task.cohortId??e.task.taskId}}}}return t.lifetime===`session`&&readWorkflowTaskView(t.task),a===void 0?r.push(t):r[i]={...a,...t,origin:a.origin,address:{...a.address,...t.address}},{...e,state:writeRegistry(e.state,{...n,runs:r})}}function recordWorkflowTaskView(e,t){let{taskId:n,metadata:r,...i}=t,a=parseTaskOutcome(i);if(!isNonEmptyString(n)||!isTaskMetadata(r)||a===void 0)throw Error(`Invalid terminal workflow task view.`);let o=readRegistry(e),s=[...o.runs],c=s.findIndex(e=>e.lifetime===`session`&&e.task.taskId===n),l=s[c];if(l===void 0||l.lifetime!==`session`)return{state:e,view:t,firstOutcome:!1};if(!sameTaskMetadata(l.task.metadata,r))throw Error(`Task view metadata does not match invocation "${t.taskId}".`);let u=readWorkflowTaskView(l.task);return u===void 0?(s[c]={...l,task:{...l.task,outcome:a}},{state:writeRegistry(e,{...o,runs:s}),view:t,firstOutcome:!0}):{state:e,view:u,firstOutcome:!1}}function removeBlockingWorkflowToolRuns(e,t,n){let r=readRegistry(e.state),i=r.runs,a=i.filter(e=>e.lifetime!==`turn`||e.origin.turnId!==t||n!==void 0&&e.callId!==n);return a.length===i.length?e:{...e,state:writeRegistry(e.state,{...r,runs:a})}}function findBlockingWorkflowToolRun(e,t,n){let r=getBlockingWorkflowToolRuns(e,n).filter(e=>e.callId===t);return r.length===1?r[0]:void 0}function isInboxToolResultFromRecordedWorkflowToolRun(e,t){let n=findBlockingWorkflowToolRun(e,t.callId);return n!==void 0&&n.toolName===t.toolName}export{WORKFLOW_TOOL_RUNS_STATE_KEY,findBlockingWorkflowToolRun,getBackgroundTasks,getBlockingWorkflowToolRuns,getWorkflowToolRuns,isInboxToolResultFromRecordedWorkflowToolRun,readWorkflowTaskView,recordWorkflowTaskView,registerWorkflowToolRun,removeBlockingWorkflowToolRuns};
@@ -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.66.0`,WORKFLOW_MODULE_ALIASES={"workflow/errors":`src/compiled/@workflow/errors/index.js`,"workflow/internal/private":`src/compiled/@workflow/core/private.js`};function resolveFallbackPackageVersion(){return BUNDLED_FALLBACK_PACKAGE_VERSION.startsWith(`__`)?`0.0.0`:BUNDLED_FALLBACK_PACKAGE_VERSION}const FALLBACK_PACKAGE_INFO={name:EVE_PACKAGE_NAME,version:resolveFallbackPackageVersion()};function resolveCurrentModulePath(){return typeof __filename==`string`?__filename:resolveCurrentModulePathFromStack()}function resolveCurrentModulePathFromStack(){let e=Error.prepareStackTrace;try{Error.prepareStackTrace=(e,t)=>t;let e=Error().stack?.[0]?.getFileName();if(typeof e!=`string`||e.length===0)throw Error(`Failed to resolve the current module path from the stack trace.`);return e.startsWith(`file:`)?fileURLToPath(e):e}finally{Error.prepareStackTrace=e}}const require=createRequire(resolveCurrentModulePath());function tryResolveVerifiedPackageRoot(e){try{let t=realpathSync.native(e);return tryReadInstalledPackageInfo(t,EVE_PACKAGE_NAME)===void 0?void 0:dirname(t)}catch{return}}function findNearestVerifiedPackageRoot(e){let t=e;for(;;){let e=tryResolveVerifiedPackageRoot(join(t,`package.json`));if(e!==void 0)return e;let n=dirname(t);if(n===t)return;t=n}}function tryResolveDirectBuildLocation(e){let t=dirname(e);for(;;){if(basename(t)===`dist`){let e=tryResolveVerifiedPackageRoot(join(dirname(t),`package.json`));if(e!==void 0)return{packageBuildRoot:t,packageRoot:e}}let e=dirname(t);if(e===t)return;t=e}}function isSourceCheckout(e){return existsSync(join(e,`src`,`internal`,`application`,`package.ts`))}function tryCreatePackageLocation(e){if(isSourceCheckout(e))return{packageBuildRoot:null,packageRoot:e};let t=join(e,`dist`);if(existsSync(t))return{packageBuildRoot:t,packageRoot:e}}function resolveSelfPackageJsonPath(e){return createRequire(e).resolve(`${EVE_PACKAGE_NAME}/package.json`)}function resolvePackageLocationFromModulePath(e,t=resolveSelfPackageJsonPath){let n=realpathSync.native(e),r=tryResolveDirectBuildLocation(n);if(r!==void 0)return r;let i=findNearestVerifiedPackageRoot(dirname(n));if(i!==void 0&&isSourceCheckout(i))return{packageBuildRoot:null,packageRoot:i};try{let e=tryResolveVerifiedPackageRoot(t(n)),r=e===void 0?void 0:tryCreatePackageLocation(e);if(r!==void 0)return r}catch{}let a=i===void 0?void 0:tryCreatePackageLocation(i);if(a!==void 0)return a;throw Error(`Failed to resolve the eve package root from "${e}".`)}function resolvePackageLocation(){return cachedPackageLocation??=resolvePackageLocationFromModulePath(resolveCurrentModulePath()),cachedPackageLocation}function resolvePackageBuildRoot(){return resolvePackageLocation().packageBuildRoot}function resolvePackageRoot(){return resolvePackageLocation().packageRoot}function tryResolvePackageRoot(){try{return resolvePackageRoot()}catch{return}}function rewriteSourceFilePathForBuild(e){return e.replace(/\.[cm]?tsx?$/,`.js`)}function resolvePackageSourceFilePath(e){let t=resolvePackageBuildRoot();return t===null?join(resolvePackageRoot(),e):join(t,rewriteSourceFilePathForBuild(e))}function resolvePackageSourceDirectoryPath(e){let t=resolvePackageBuildRoot();return join(t===null?resolvePackageRoot():t,e)}function resolvePackageDependencyPath(e){try{return require.resolve(e)}catch(t){let n=tryResolvePackageRoot(),r=n===void 0||!isSourceCheckout(n)?void 0:resolveSourceCheckoutExport(n,e);if(r!==void 0)return r;throw t}}function resolveSourceCheckoutExport(e,t){if(t!==EVE_PACKAGE_NAME&&!t.startsWith(`${EVE_PACKAGE_NAME}/`))return;let n=t===EVE_PACKAGE_NAME?`.`:`.${t.slice(EVE_PACKAGE_NAME.length)}`;try{let t=JSON.parse(readFileSync(join(e,`package.json`),`utf8`)).exports?.[n],r=typeof t==`string`?t:t?.[`eve-source`]??t?.import??t?.default;if(r===void 0)return;let i=r.replace(/^\.\/dist\/src\//,`src/`).replace(/\.[cm]?js$/u,`.ts`),a=join(e,i);return existsSync(a)?a:void 0}catch{return}}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.66.2`,WORKFLOW_MODULE_ALIASES={"workflow/errors":`src/compiled/@workflow/errors/index.js`,"workflow/internal/private":`src/compiled/@workflow/core/private.js`};function resolveFallbackPackageVersion(){return BUNDLED_FALLBACK_PACKAGE_VERSION.startsWith(`__`)?`0.0.0`:BUNDLED_FALLBACK_PACKAGE_VERSION}const FALLBACK_PACKAGE_INFO={name:EVE_PACKAGE_NAME,version:resolveFallbackPackageVersion()};function resolveCurrentModulePath(){return typeof __filename==`string`?__filename:resolveCurrentModulePathFromStack()}function resolveCurrentModulePathFromStack(){let e=Error.prepareStackTrace;try{Error.prepareStackTrace=(e,t)=>t;let e=Error().stack?.[0]?.getFileName();if(typeof e!=`string`||e.length===0)throw Error(`Failed to resolve the current module path from the stack trace.`);return e.startsWith(`file:`)?fileURLToPath(e):e}finally{Error.prepareStackTrace=e}}const require=createRequire(resolveCurrentModulePath());function tryResolveVerifiedPackageRoot(e){try{let t=realpathSync.native(e);return tryReadInstalledPackageInfo(t,EVE_PACKAGE_NAME)===void 0?void 0:dirname(t)}catch{return}}function findNearestVerifiedPackageRoot(e){let t=e;for(;;){let e=tryResolveVerifiedPackageRoot(join(t,`package.json`));if(e!==void 0)return e;let n=dirname(t);if(n===t)return;t=n}}function tryResolveDirectBuildLocation(e){let t=dirname(e);for(;;){if(basename(t)===`dist`){let e=tryResolveVerifiedPackageRoot(join(dirname(t),`package.json`));if(e!==void 0)return{packageBuildRoot:t,packageRoot:e}}let e=dirname(t);if(e===t)return;t=e}}function isSourceCheckout(e){return existsSync(join(e,`src`,`internal`,`application`,`package.ts`))}function tryCreatePackageLocation(e){if(isSourceCheckout(e))return{packageBuildRoot:null,packageRoot:e};let t=join(e,`dist`);if(existsSync(t))return{packageBuildRoot:t,packageRoot:e}}function resolveSelfPackageJsonPath(e){return createRequire(e).resolve(`${EVE_PACKAGE_NAME}/package.json`)}function resolvePackageLocationFromModulePath(e,t=resolveSelfPackageJsonPath){let n=realpathSync.native(e),r=tryResolveDirectBuildLocation(n);if(r!==void 0)return r;let i=findNearestVerifiedPackageRoot(dirname(n));if(i!==void 0&&isSourceCheckout(i))return{packageBuildRoot:null,packageRoot:i};try{let e=tryResolveVerifiedPackageRoot(t(n)),r=e===void 0?void 0:tryCreatePackageLocation(e);if(r!==void 0)return r}catch{}let a=i===void 0?void 0:tryCreatePackageLocation(i);if(a!==void 0)return a;throw Error(`Failed to resolve the eve package root from "${e}".`)}function resolvePackageLocation(){return cachedPackageLocation??=resolvePackageLocationFromModulePath(resolveCurrentModulePath()),cachedPackageLocation}function resolvePackageBuildRoot(){return resolvePackageLocation().packageBuildRoot}function resolvePackageRoot(){return resolvePackageLocation().packageRoot}function tryResolvePackageRoot(){try{return resolvePackageRoot()}catch{return}}function rewriteSourceFilePathForBuild(e){return e.replace(/\.[cm]?tsx?$/,`.js`)}function resolvePackageSourceFilePath(e){let t=resolvePackageBuildRoot();return t===null?join(resolvePackageRoot(),e):join(t,rewriteSourceFilePathForBuild(e))}function resolvePackageSourceDirectoryPath(e){let t=resolvePackageBuildRoot();return join(t===null?resolvePackageRoot():t,e)}function resolvePackageDependencyPath(e){try{return require.resolve(e)}catch(t){let n=tryResolvePackageRoot(),r=n===void 0||!isSourceCheckout(n)?void 0:resolveSourceCheckoutExport(n,e);if(r!==void 0)return r;throw t}}function resolveSourceCheckoutExport(e,t){if(t!==EVE_PACKAGE_NAME&&!t.startsWith(`${EVE_PACKAGE_NAME}/`))return;let n=t===EVE_PACKAGE_NAME?`.`:`.${t.slice(EVE_PACKAGE_NAME.length)}`;try{let t=JSON.parse(readFileSync(join(e,`package.json`),`utf8`)).exports?.[n],r=typeof t==`string`?t:t?.[`eve-source`]??t?.import??t?.default;if(r===void 0)return;let i=r.replace(/^\.\/dist\/src\//,`src/`).replace(/\.[cm]?js$/u,`.ts`),a=join(e,i);return existsSync(a)?a:void 0}catch{return}}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{join}from"node:path";import{existsSync,readdirSync,statSync}from"node:fs";const INSTRUMENTATION_EXTENSIONS=[`.ts`,`.mts`,`.js`,`.mjs`],INSTRUMENTATION_DIRECTORY=`instrumentation`;function resolveInstrumentationLayout(e){let t=findRemovedInstrumentationFile(e.agentRoot),n=join(e.agentRoot,INSTRUMENTATION_DIRECTORY),r=existsSync(n)&&statSync(n).isDirectory();if(t!==void 0)throw Error(`Found removed instrumentation file "${t}". Move it into the "${INSTRUMENTATION_DIRECTORY}/" directory as one file per provider. See the instrumentation migration guide.`);return r?{kind:`directory`,modulePathsBySlot:collectInstrumentationProviderModules(n)}:{kind:`directory`,modulePathsBySlot:{}}}function collectInstrumentationProviderModules(e){let t=new Map;for(let n of readdirSync(e,{withFileTypes:!0})){if(!n.isFile())continue;let r=INSTRUMENTATION_EXTENSIONS.find(e=>n.name.endsWith(e));if(r===void 0)continue;let i=n.name.slice(0,-r.length);if(i!==``){if(t.get(i)!==void 0)throw Error(`Two files declare the "${i}" instrumentation provider in "${e}". Keep one of them.`);t.set(i,join(e,n.name))}}return Object.fromEntries([...t].sort(([e],[t])=>e.localeCompare(t)))}function findRemovedInstrumentationFile(e){for(let t of INSTRUMENTATION_EXTENSIONS){let n=join(e,`${INSTRUMENTATION_DIRECTORY}${t}`);if(existsSync(n))return n}}export{resolveInstrumentationLayout};
1
+ import{join}from"node:path";import{existsSync,readdirSync,statSync}from"node:fs";import{isAuthoredTestPath}from"#discover/filesystem.js";const INSTRUMENTATION_EXTENSIONS=[`.ts`,`.mts`,`.js`,`.mjs`],INSTRUMENTATION_DIRECTORY=`instrumentation`;function resolveInstrumentationLayout(e){let t=findRemovedInstrumentationFile(e.agentRoot),n=join(e.agentRoot,INSTRUMENTATION_DIRECTORY),r=existsSync(n)&&statSync(n).isDirectory();if(t!==void 0)throw Error(`Found removed instrumentation file "${t}". Move it into the "${INSTRUMENTATION_DIRECTORY}/" directory as one file per provider. See the instrumentation migration guide.`);return r?{kind:`directory`,modulePathsBySlot:collectInstrumentationProviderModules(n)}:{kind:`directory`,modulePathsBySlot:{}}}function collectInstrumentationProviderModules(e){let t=new Map;for(let n of readdirSync(e,{withFileTypes:!0})){if(!n.isFile()||isAuthoredTestPath(n.name))continue;let r=INSTRUMENTATION_EXTENSIONS.find(e=>n.name.endsWith(e));if(r===void 0)continue;let i=n.name.slice(0,-r.length);if(i!==``){if(t.get(i)!==void 0)throw Error(`Two files declare the "${i}" instrumentation provider in "${e}". Keep one of them.`);t.set(i,join(e,n.name))}}return Object.fromEntries([...t].sort(([e],[t])=>e.localeCompare(t)))}function findRemovedInstrumentationFile(e){for(let t of INSTRUMENTATION_EXTENSIONS){let n=join(e,`${INSTRUMENTATION_DIRECTORY}${t}`);if(existsSync(n))return n}}export{resolveInstrumentationLayout};
@@ -4,4 +4,6 @@ export declare function readVercelCliConnection(): Promise<{
4
4
  token: string;
5
5
  teamId: string;
6
6
  } | undefined>;
7
+ /** Read a CLI token without requiring a selected team (personal accounts have none). */
8
+ export declare function readVercelCliToken(): Promise<string | undefined>;
7
9
  export declare function refreshVercelCliConnection(): Promise<void>;
@@ -1 +1 @@
1
- import{createRequire}from"node:module";import{createHash}from"node:crypto";import{readFile,realpath}from"node:fs/promises";import{isObject}from"#shared/guards.js";import{delimiter,join}from"node:path";import{execFile}from"node:child_process";import{promisify}from"node:util";import{homedir}from"node:os";async function readObject(e){try{let t=await readFile(e,`utf8`);if(Buffer.byteLength(t)>65536)return;let n=JSON.parse(t);return isObject(n)?n:void 0}catch{return}}async function readCliConfiguration(){let e=homedir(),t=process.platform===`darwin`?join(e,`Library`,`Application Support`):process.platform===`win32`?process.env.APPDATA??join(e,`AppData`,`Roaming`):process.env.XDG_DATA_HOME??join(e,`.local`,`share`);for(let n of[join(t,`com.vercel.cli`),join(e,`.now`),join(t,`now`)]){let e=await readObject(join(n,`config.json`));if(e===void 0)continue;let t=typeof e.currentTeam==`string`?e.currentTeam:void 0;return t?{directory:n,config:e,teamId:t}:void 0}}async function readVercelCliTeam(){return(await readCliConfiguration())?.teamId}async function readVercelCliConnection(){let e=await readCliConfiguration();if(!e)return;let{directory:t,config:n,teamId:r}=e;if(process.env.VERCEL_TOKEN)return{token:process.env.VERCEL_TOKEN,teamId:r};let i=process.env.VERCEL_TOKEN_STORAGE??n.credStorage??`file`,a=join(t,`auth.json`),o;if(i===`file`&&(o=await readObject(a)),!o&&(i===`keyring`||i===`auto`)){let e=`cli:${createHash(`sha256`).update(a).digest(`hex`).slice(0,16)}`;try{let t=await readCliKeyring(e),n=t&&t.length<=65536?JSON.parse(t):void 0;isObject(n)&&(o=n)}catch{if(i===`keyring`)return}!o&&i===`auto`&&(o=await readObject(a))}if(typeof o?.token==`string`&&o.token)return{token:o.token,teamId:r}}async function refreshVercelCliConnection(){try{await promisify(execFile)(`vercel`,[`whoami`],{timeout:15e3,maxBuffer:65536,windowsHide:!0})}catch{throw Error(`Vercel CLI access expired. Run /login to reconnect.`)}}async function readCliKeyring(e){for(let t of(process.env.PATH??``).split(delimiter))try{let n=await realpath(join(t,process.platform===`win32`?`vercel.cmd`:`vercel`)),r=createRequire(n);process.platform===`win32`&&(r=createRequire(r.resolve(`vercel/package.json`)));try{r=createRequire(r.resolve(`@vercel/cli-auth/package.json`))}catch{}return new(r("@napi-rs/keyring")).Entry(`com.vercel.vercel-cli`,e).getPassword()??void 0}catch{}}export{readVercelCliConnection,readVercelCliTeam,refreshVercelCliConnection};
1
+ import{createRequire}from"node:module";import{createHash}from"node:crypto";import{readFile,realpath}from"node:fs/promises";import{isObject}from"#shared/guards.js";import{delimiter,join}from"node:path";import{execFile}from"node:child_process";import{promisify}from"node:util";import{homedir}from"node:os";async function readObject(e){try{let t=await readFile(e,`utf8`);if(Buffer.byteLength(t)>65536)return;let n=JSON.parse(t);return isObject(n)?n:void 0}catch{return}}async function readCliConfiguration(){let e=homedir(),t=process.platform===`darwin`?join(e,`Library`,`Application Support`):process.platform===`win32`?process.env.APPDATA??join(e,`AppData`,`Roaming`):process.env.XDG_DATA_HOME??join(e,`.local`,`share`);for(let n of[join(t,`com.vercel.cli`),join(e,`.now`),join(t,`now`)]){let e=await readObject(join(n,`config.json`));if(e!==void 0)return{directory:n,config:e,teamId:typeof e.currentTeam==`string`?e.currentTeam:void 0}}}async function readVercelCliTeam(){return(await readCliConfiguration())?.teamId}async function readVercelCliConnection(){let e=await readCliConfiguration();if(!e?.teamId)return;let t=await readCliToken(e);return t===void 0?void 0:{token:t,teamId:e.teamId}}async function readVercelCliToken(){return readCliToken(await readCliConfiguration())}async function readCliToken(e){if(process.env.VERCEL_TOKEN)return process.env.VERCEL_TOKEN;if(!e)return;let{directory:t,config:n}=e,r=process.env.VERCEL_TOKEN_STORAGE??n.credStorage??`file`,i=join(t,`auth.json`),a;if(r===`file`&&(a=await readObject(i)),!a&&(r===`keyring`||r===`auto`)){let e=`cli:${createHash(`sha256`).update(i).digest(`hex`).slice(0,16)}`;try{let t=await readCliKeyring(e),n=t&&t.length<=65536?JSON.parse(t):void 0;isObject(n)&&(a=n)}catch{if(r===`keyring`)return}!a&&r===`auto`&&(a=await readObject(i))}if(typeof a?.token==`string`&&a.token)return a.token}async function refreshVercelCliConnection(){try{await promisify(execFile)(`vercel`,[`whoami`],{timeout:15e3,maxBuffer:65536,windowsHide:!0})}catch{throw Error(`Vercel CLI access expired. Run /login to reconnect.`)}}async function readCliKeyring(e){for(let t of(process.env.PATH??``).split(delimiter))try{let n=await realpath(join(t,process.platform===`win32`?`vercel.cmd`:`vercel`)),r=createRequire(n);process.platform===`win32`&&(r=createRequire(r.resolve(`vercel/package.json`)));try{r=createRequire(r.resolve(`@vercel/cli-auth/package.json`))}catch{}return new(r("@napi-rs/keyring")).Entry(`com.vercel.vercel-cli`,e).getPassword()??void 0}catch{}}export{readVercelCliConnection,readVercelCliTeam,readVercelCliToken,refreshVercelCliConnection};
@@ -1,2 +1,2 @@
1
1
  import{mkdir,mkdtemp,rm}from"node:fs/promises";import{join,relative,resolve}from"node:path";import{resolveInstalledPackageInfo}from"#internal/application/package.js";import{discoverAgent}from"#discover/discover-agent.js";import{createDiskProjectSource}from"#discover/project-source.js";import{discoverFlatModuleSource,readSortedDirectoryEntries}from"#discover/grammar.js";import{EXTENSION_COMPATIBILITY_MANIFEST_FORMAT_VERSION,EXTENSION_COMPATIBILITY_MANIFEST_KIND,writeExtensionCompatibilityManifest}from"#compiler/extension-compatibility.js";import{ensureExtensionExports,tryReadExtensionBuildConfig}from"#internal/nitro/host/extension-build-config.js";import{deriveExtensionCapabilityRequirements}from"#internal/nitro/host/extension-capability-requirements.js";import{ExtensionOutputRestoreError,emitExtensionDistribution,replaceExtensionBuildOutput}from"#internal/nitro/host/extension-distribution.js";async function buildExtensionPackage(e,t){let n=resolve(e),r=createDiskProjectSource(),{diagnostics:i,manifest:a}=await discoverAgent({agentRoot:t.sourceRoot,appRoot:n,source:r,role:`extension`}),o=i.filter(e=>e.severity===`error`);if(o.length>0)throw Error(`Cannot build extension "${t.packageName}":\n${o.map(e=>` - ${e.message}`).join(`
2
- `)}`);let s=discoverFlatModuleSource({rootEntries:await readSortedDirectoryEntries(r,t.sourceRoot),rootPath:t.sourceRoot,slotName:`extension`}).module;if(s===void 0)throw Error(`Cannot build extension "${t.packageName}": its source root "${t.sourceRoot}" is missing an "extension.<ext>" declaration. Add \`export default defineExtension(...)\` there (with or without config).`);let c=await mkdtemp(join(n,`.eve-extension-build-`)),l=join(c,`output`),u=join(l,relative(t.outDir,t.distRoot)),d=!1;try{await mkdir(u,{recursive:!0});let e=await emitExtensionDistribution({appRoot:n,declarationModule:s,declarationsRoot:join(c,`declarations`),manifest:a,runtimeDependencies:t.runtimeDependencies,shortName:t.shortName,sourceRoot:t.sourceRoot,stagedDistRoot:u,stagedOutDir:l,transactionRoot:c});return await writeExtensionCompatibilityManifest(u,{kind:EXTENSION_COMPATIBILITY_MANIFEST_KIND,formatVersion:EXTENSION_COMPATIBILITY_MANIFEST_FORMAT_VERSION,builtWithEve:resolveInstalledPackageInfo().version,...t.externalDependencies.length===0?{}:{build:{externalDependencies:t.externalDependencies}},requires:await deriveExtensionCapabilityRequirements({runtimeImports:e,declarationModule:s,manifest:a,packageName:t.packageName,runtimeDependencies:t.runtimeDependencies,shortName:t.shortName,sourceRoot:t.sourceRoot})}),await ensureExtensionExports(n,t.outDir),await replaceExtensionBuildOutput({outDir:t.outDir,stagedOutDir:l,transactionRoot:c}),t.outDir}catch(e){throw d=e instanceof ExtensionOutputRestoreError,e}finally{d||await rm(c,{force:!0,recursive:!0})}}export{buildExtensionPackage,tryReadExtensionBuildConfig};
2
+ `)}`);let s=discoverFlatModuleSource({rootEntries:await readSortedDirectoryEntries(r,t.sourceRoot),rootPath:t.sourceRoot,slotName:`extension`}).module;if(s===void 0)throw Error(`Cannot build extension "${t.packageName}": its source root "${t.sourceRoot}" is missing an "extension.<ext>" declaration. Add \`export default defineExtension(...)\` there (with or without config).`);let c=await mkdtemp(join(n,`.eve-extension-build-`)),l=join(c,`output`),u=join(l,relative(t.outDir,t.distRoot)),d=!1;try{await mkdir(u,{recursive:!0});let e=await emitExtensionDistribution({appRoot:n,declarationModule:s,declarationsRoot:join(c,`declarations`),manifest:a,runtimeDependencies:t.runtimeDependencies,shortName:t.shortName,sourceRoot:t.sourceRoot,stagedDistRoot:u,stagedOutDir:l,transactionRoot:c});return await ensureExtensionExports(n,t.outDir),await writeExtensionCompatibilityManifest(u,{kind:EXTENSION_COMPATIBILITY_MANIFEST_KIND,formatVersion:EXTENSION_COMPATIBILITY_MANIFEST_FORMAT_VERSION,builtWithEve:resolveInstalledPackageInfo().version,...t.externalDependencies.length===0?{}:{build:{externalDependencies:t.externalDependencies}},requires:await deriveExtensionCapabilityRequirements({runtimeImports:e,runtimeRoot:l,declarationModule:s,manifest:a,packageName:t.packageName,runtimeDependencies:t.runtimeDependencies,shortName:t.shortName,sourceRoot:t.sourceRoot})}),await replaceExtensionBuildOutput({outDir:t.outDir,stagedOutDir:l,transactionRoot:c}),t.outDir}catch(e){throw d=e instanceof ExtensionOutputRestoreError,e}finally{d||await rm(c,{force:!0,recursive:!0})}}export{buildExtensionPackage,tryReadExtensionBuildConfig};
@@ -0,0 +1,9 @@
1
+ /** Path of the cross-process lock that serializes writes to one extension's build output. */
2
+ export declare function resolveExtensionBuildLockPath(packageRoot: string): string;
3
+ /**
4
+ * Runs `callback` while holding a cross-process lock scoped to one extension
5
+ * package. Separate `eve build`, `eve dev`, `withEve`, and `eve extension
6
+ * build` processes can build the same workspace extension, and publication
7
+ * swaps the whole output directory, so concurrent builds must not overlap.
8
+ */
9
+ export declare function withExtensionBuildLock<T>(packageRoot: string, callback: () => Promise<T>): Promise<T>;
@@ -0,0 +1 @@
1
+ import{mkdir,rm,stat,utimes}from"node:fs/promises";import{isErrnoCode}from"#shared/guards.js";import{dirname,join}from"node:path";function resolveExtensionBuildLockPath(e){return join(e,`.eve`,`locks`,`extension-build.lock`)}async function withExtensionBuildLock(e,t){let n=resolveExtensionBuildLockPath(e);await acquireExtensionBuildLock(n,e);let r=setInterval(()=>{let e=new Date;utimes(n,e,e).catch(()=>void 0)},2e3);r.unref();try{return await t()}finally{clearInterval(r),await rm(n,{force:!0,recursive:!0})}}async function acquireExtensionBuildLock(e,t){let n=Date.now()+6e5;for(await mkdir(dirname(e),{recursive:!0});;){try{await mkdir(e);return}catch(e){if(!isErrnoCode(e,`EEXIST`))throw e}let r=(await stat(e).catch(()=>void 0))?.mtimeMs;if(r!==void 0&&Date.now()-r>=3e4){await rm(e,{force:!0,recursive:!0});continue}if(Date.now()>=n)throw Error(`Timed out after 10 minutes waiting for another eve process to finish building the extension at ${t}. If no other build is running, delete ${e} and retry.`);await new Promise(e=>setTimeout(e,100))}}export{resolveExtensionBuildLockPath,withExtensionBuildLock};
@@ -8,6 +8,7 @@ export declare function deriveExtensionCapabilityRequirements(input: {
8
8
  readonly packageName: string;
9
9
  readonly runtimeDependencies: readonly string[];
10
10
  readonly runtimeImports: readonly string[];
11
+ readonly runtimeRoot: string;
11
12
  readonly shortName: string;
12
13
  readonly sourceRoot: string;
13
14
  }): Promise<ExtensionCapabilityRequirements>;
@@ -1 +1 @@
1
- import{join}from"node:path";import{createCompiledBindingNamespaceLoader}from"#compiler/load-binding-namespace.js";import{loadAuthoredModuleNamespace}from"#internal/authored-module-loader.js";import{compileInstructionsEntry}from"#compiler/normalize-instructions.js";import{compileSkillSource}from"#compiler/normalize-skill.js";import{compileToolEntry}from"#compiler/normalize-tool.js";import{EXTENSION_CAPABILITY_VERSIONS}from"#compiler/extension-compatibility.js";import{extensionUsesState}from"#internal/nitro/host/extension-state-usage.js";async function deriveExtensionCapabilityRequirements(e){let t=new Set([`extension`]),n=collectSubagentManifests(e.manifest),[r,i,a,o,s]=await Promise.all([Promise.all(n.flatMap(t=>t.tools.map(n=>compileToolEntry(t.agentRoot,n,createLoadOptions(e,n,t.agentRoot))))),Promise.all(n.flatMap(t=>t.skills.map(n=>compileSkillSource(t.agentRoot,n,createLoadOptions(e,n,t.agentRoot))))),Promise.all(n.flatMap(t=>t.instructions.map(n=>compileInstructionsEntry(t.agentRoot,n,createLoadOptions(e,n,t.agentRoot))))),loadAuthoredModuleNamespace(join(e.sourceRoot,e.declarationModule.logicalPath),{externalDependencies:e.runtimeDependencies}),extensionUsesState(e.sourceRoot)]);r.length>0&&t.add(`tool`),r.some(e=>e.kind===`dynamic-tool`)&&t.add(`dynamicTool`),n.some(e=>e.channels.length>0)&&t.add(`channel`),n.some(e=>e.connections.length>0)&&t.add(`connection`),n.some(e=>e.hooks.length>0)&&t.add(`hook`),n.some(e=>e.schedules.length>0)&&t.add(`schedule`),n.some(e=>e.subagents.length>0)&&t.add(`subagent`),i.length>0&&t.add(`skill`),i.some(e=>e.kind===`dynamic-skill`)&&t.add(`dynamicSkill`),a.length>0&&t.add(`instructions`),a.some(e=>e.kind===`dynamic-instructions`)&&t.add(`dynamicInstructions`);let c=o[e.declarationModule.exportName??`default`];return(typeof c==`function`||typeof c==`object`&&c)&&`schema`in c&&c.schema!==void 0&&t.add(`config`),s&&t.add(`state`),e.runtimeImports.includes(`eve/ai`)&&t.add(`tool`),e.runtimeImports.includes(`eve/models`)&&t.add(`dynamicTool`),Object.fromEntries(Object.keys(EXTENSION_CAPABILITY_VERSIONS).filter(e=>t.has(e)).map(e=>[e,EXTENSION_CAPABILITY_VERSIONS[e]]))}function createLoadOptions(e,t,n){let r={kind:`extension`,namespace:e.shortName,packageName:e.packageName},i={backing:{externalDependencies:e.runtimeDependencies,extensionScope:{namespace:e.shortName,sourceRoot:e.sourceRoot},kind:`filesystem`,sourcePath:join(n,t.logicalPath)},logicalPath:t.logicalPath,owner:r};return{binding:i,loadNamespace:createCompiledBindingNamespaceLoader({bindings:{[t.sourceId]:i},registries:[]}),owner:r}}function collectSubagentManifests(e){return[e,...e.subagents.flatMap(e=>collectSubagentManifests(e.manifest))]}export{deriveExtensionCapabilityRequirements};
1
+ import{join}from"node:path";import{createCompiledBindingNamespaceLoader}from"#compiler/load-binding-namespace.js";import{loadAuthoredModuleNamespace}from"#internal/authored-module-loader.js";import{compileInstructionsEntry}from"#compiler/normalize-instructions.js";import{compileSkillSource}from"#compiler/normalize-skill.js";import{compileToolEntry}from"#compiler/normalize-tool.js";import{EXTENSION_CAPABILITY_VERSIONS}from"#compiler/extension-compatibility.js";import{extensionUsesState}from"#internal/nitro/host/extension-state-usage.js";async function deriveExtensionCapabilityRequirements(e){let t=new Set([`extension`]),n=collectSubagentManifests(e.manifest),[r,i,a,o,s]=await Promise.all([Promise.all(n.flatMap(t=>t.tools.map(n=>compileToolEntry(t.agentRoot,n,createLoadOptions(e,n,t.agentRoot))))),Promise.all(n.flatMap(t=>t.skills.map(n=>compileSkillSource(t.agentRoot,n,createLoadOptions(e,n,t.agentRoot))))),Promise.all(n.flatMap(t=>t.instructions.map(n=>compileInstructionsEntry(t.agentRoot,n,createLoadOptions(e,n,t.agentRoot))))),loadAuthoredModuleNamespace(join(e.sourceRoot,e.declarationModule.logicalPath),{externalDependencies:e.runtimeDependencies}),extensionUsesState(e.runtimeRoot)]);r.length>0&&t.add(`tool`),r.some(e=>e.kind===`dynamic-tool`)&&t.add(`dynamicTool`),n.some(e=>e.channels.length>0)&&t.add(`channel`),n.some(e=>e.connections.length>0)&&t.add(`connection`),n.some(e=>e.hooks.length>0)&&t.add(`hook`),n.some(e=>e.schedules.length>0)&&t.add(`schedule`),n.some(e=>e.subagents.length>0)&&t.add(`subagent`),i.length>0&&t.add(`skill`),i.some(e=>e.kind===`dynamic-skill`)&&t.add(`dynamicSkill`),a.length>0&&t.add(`instructions`),a.some(e=>e.kind===`dynamic-instructions`)&&t.add(`dynamicInstructions`);let c=o[e.declarationModule.exportName??`default`];return(typeof c==`function`||typeof c==`object`&&c)&&`schema`in c&&c.schema!==void 0&&t.add(`config`),s&&t.add(`state`),e.runtimeImports.includes(`eve/ai`)&&t.add(`tool`),e.runtimeImports.includes(`eve/models`)&&t.add(`dynamicTool`),Object.fromEntries(Object.keys(EXTENSION_CAPABILITY_VERSIONS).filter(e=>t.has(e)).map(e=>[e,EXTENSION_CAPABILITY_VERSIONS[e]]))}function createLoadOptions(e,t,n){let r={kind:`extension`,namespace:e.shortName,packageName:e.packageName},i={backing:{externalDependencies:e.runtimeDependencies,extensionScope:{namespace:e.shortName,sourceRoot:e.sourceRoot},kind:`filesystem`,sourcePath:join(n,t.logicalPath)},logicalPath:t.logicalPath,owner:r};return{binding:i,loadNamespace:createCompiledBindingNamespaceLoader({bindings:{[t.sourceId]:i},registries:[]}),owner:r}}function collectSubagentManifests(e){return[e,...e.subagents.flatMap(e=>collectSubagentManifests(e.manifest))]}export{deriveExtensionCapabilityRequirements};
@@ -1,2 +1,2 @@
1
- import{createRequire}from"node:module";import{readFile,readdir,stat}from"node:fs/promises";import{dirname,join,relative}from"node:path";import{execFile}from"node:child_process";import{promisify}from"node:util";import{SUPPORTED_AUTHORED_MODULE_FILE_EXTENSIONS}from"#discover/filesystem.js";async function emitExtensionDeclarations(e){let t=await resolveTypeScriptBinary(e.appRoot),n=join(e.appRoot,`tsconfig.json`),r=await stat(n).then(e=>e.isFile()).catch(()=>!1),i=[`--declaration`,`--emitDeclarationOnly`,`--noEmit`,`false`,`--noEmitOnError`,`true`,`--rootDir`,e.appRoot,`--outDir`,e.declarationsRoot,`--pretty`,`false`],a=r?[`--project`,n,...i]:[...i,`--allowJs`,`--checkJs`,`false`,`--module`,`esnext`,`--moduleResolution`,`bundler`,`--target`,`ES2022`,`--skipLibCheck`,`true`,...await collectDeclarationInputs(e.sourceRoot)];try{await promisify(execFile)(process.execPath,[t,...a],{cwd:e.appRoot,maxBuffer:10485760})}catch(e){let t=declarationEmitOutput(e);throw Error(`Cannot emit extension declarations${t.length>0?`:\n${t}`:`.`}`,{cause:e})}await assertModuleDeclarationsEmitted(e)}async function assertModuleDeclarationsEmitted(e){let t=relative(e.appRoot,e.sourceRoot),n=(await Promise.all(e.moduleLogicalPaths.map(async n=>{let r=join(e.declarationsRoot,t,declarationLogicalPath(n));return await stat(r).then(e=>e.isFile()).catch(()=>!1)?void 0:n}))).filter(e=>e!==void 0);if(n.length===0)return;if(n.length===e.moduleLogicalPaths.length)throw Error(`TypeScript emitted no declarations for "${t}". Ensure the package tsconfig.json \`include\` covers every module under \`eve.extension.source\`.`);let r=n.length===1?`module`:`modules`;throw Error(`TypeScript emitted no declaration for extension ${r} ${n.map(e=>JSON.stringify(e)).join(`, `)}. Include ${n.length===1?`it`:`them`} in the package tsconfig.json before publishing the extension.`)}function declarationLogicalPath(e){if(e.endsWith(`.mts`)||e.endsWith(`.mjs`))return`${e.slice(0,-4)}.d.mts`;if(e.endsWith(`.cts`)||e.endsWith(`.cjs`))return`${e.slice(0,-4)}.d.cts`;if(e.endsWith(`.ts`)||e.endsWith(`.js`))return`${e.slice(0,-3)}.d.ts`;throw Error(`Unsupported extension module path "${e}".`)}async function collectDeclarationInputs(e){let t=[];for(let n of await readdir(e,{withFileTypes:!0})){let r=join(e,n.name);n.isDirectory()?t.push(...await collectDeclarationInputs(r)):n.isFile()&&SUPPORTED_AUTHORED_MODULE_FILE_EXTENSIONS.some(e=>n.name.endsWith(e))&&t.push(r)}return t.sort()}function declarationEmitOutput(e){if(!(e instanceof Error))return String(e);let t=e;return[t.stdout,t.stderr,t.message].filter(e=>typeof e==`string`&&e.trim().length>0).join(`
1
+ import{createRequire}from"node:module";import{readFile,readdir,stat}from"node:fs/promises";import{dirname,join,relative}from"node:path";import{execFile}from"node:child_process";import{promisify}from"node:util";import{SUPPORTED_AUTHORED_MODULE_FILE_EXTENSIONS,isAuthoredTestPath}from"#discover/filesystem.js";async function emitExtensionDeclarations(e){let t=await resolveTypeScriptBinary(e.appRoot),n=join(e.appRoot,`tsconfig.json`),r=await stat(n).then(e=>e.isFile()).catch(()=>!1),i=[`--declaration`,`--emitDeclarationOnly`,`--noEmit`,`false`,`--noEmitOnError`,`true`,`--rootDir`,e.appRoot,`--outDir`,e.declarationsRoot,`--pretty`,`false`],a=r?[`--project`,n,...i]:[...i,`--allowJs`,`--checkJs`,`false`,`--module`,`esnext`,`--moduleResolution`,`bundler`,`--target`,`ES2022`,`--skipLibCheck`,`true`,...await collectDeclarationInputs(e.sourceRoot)];try{await promisify(execFile)(process.execPath,[t,...a],{cwd:e.appRoot,maxBuffer:10485760})}catch(e){let t=declarationEmitOutput(e);throw Error(`Cannot emit extension declarations${t.length>0?`:\n${t}`:`.`}`,{cause:e})}await assertModuleDeclarationsEmitted(e)}async function assertModuleDeclarationsEmitted(e){let t=relative(e.appRoot,e.sourceRoot),n=(await Promise.all(e.moduleLogicalPaths.map(async n=>{let r=join(e.declarationsRoot,t,declarationLogicalPath(n));return await stat(r).then(e=>e.isFile()).catch(()=>!1)?void 0:n}))).filter(e=>e!==void 0);if(n.length===0)return;if(n.length===e.moduleLogicalPaths.length)throw Error(`TypeScript emitted no declarations for "${t}". Ensure the package tsconfig.json \`include\` covers every module under \`eve.extension.source\`.`);let r=n.length===1?`module`:`modules`;throw Error(`TypeScript emitted no declaration for extension ${r} ${n.map(e=>JSON.stringify(e)).join(`, `)}. Include ${n.length===1?`it`:`them`} in the package tsconfig.json before publishing the extension.`)}function declarationLogicalPath(e){if(e.endsWith(`.mts`)||e.endsWith(`.mjs`))return`${e.slice(0,-4)}.d.mts`;if(e.endsWith(`.cts`)||e.endsWith(`.cjs`))return`${e.slice(0,-4)}.d.cts`;if(e.endsWith(`.ts`)||e.endsWith(`.js`))return`${e.slice(0,-3)}.d.ts`;throw Error(`Unsupported extension module path "${e}".`)}async function collectDeclarationInputs(e){let t=[];for(let n of await readdir(e,{withFileTypes:!0})){if(isAuthoredTestPath(n.name))continue;let r=join(e,n.name);n.isDirectory()?t.push(...await collectDeclarationInputs(r)):n.isFile()&&SUPPORTED_AUTHORED_MODULE_FILE_EXTENSIONS.some(e=>n.name.endsWith(e))&&t.push(r)}return t.sort()}function declarationEmitOutput(e){if(!(e instanceof Error))return String(e);let t=e;return[t.stdout,t.stderr,t.message].filter(e=>typeof e==`string`&&e.trim().length>0).join(`
2
2
  `).trim()}async function resolveTypeScriptBinary(e){for(let t of[join(e,`package.json`),import.meta.url]){let e;try{e=createRequire(t).resolve(`typescript/package.json`)}catch{continue}let n=JSON.parse(await readFile(e,`utf8`)),r=typeof n.bin==`string`?n.bin:n.bin?.tsc;if(r!==void 0)return join(dirname(e),r)}throw Error("Cannot build an eve extension without TypeScript. Add `typescript` to the package's devDependencies.")}export{emitExtensionDeclarations};
@@ -1,3 +1,3 @@
1
- import{cp,mkdir,readdir,rename,writeFile}from"node:fs/promises";import{dirname,join,relative}from"node:path";import{SUPPORTED_AUTHORED_MODULE_FILE_EXTENSIONS}from"#discover/filesystem.js";import{bundleExtensionDistributionGraph}from"#internal/authored-module-loader.js";import{EXTENSION_COMPATIBILITY_MANIFEST_FILENAME}from"#compiler/extension-compatibility.js";import{emitExtensionDeclarations}from"#internal/nitro/host/extension-declarations.js";async function emitExtensionDistribution(e){let t=await collectExtensionSourceFiles(e.sourceRoot),n=e.manifest.skills.filter(e=>e.sourceKind===`skill-package`).map(t=>relative(e.sourceRoot,t.rootPath).replaceAll(`\\`,`/`)),r=t.filter(e=>isAuthoredModule(e.logicalPath)&&!n.some(t=>e.logicalPath.startsWith(`${t}/`)));await copyDistributionDataFiles({files:t,moduleLogicalPaths:new Set(r.map(e=>e.logicalPath)),stagedDistRoot:e.stagedDistRoot});let i=await createDistributionEntries({...e,moduleFiles:r}),[a,o]=await Promise.allSettled([bundleExtensionDistributionGraph({entries:i,packageRoot:e.appRoot,runtimeDependencies:e.runtimeDependencies}),emitExtensionDeclarations({appRoot:e.appRoot,declarationsRoot:e.declarationsRoot,moduleLogicalPaths:r.map(e=>e.logicalPath),sourceRoot:e.sourceRoot})]);if(a.status===`rejected`)throw a.reason;if(o.status===`rejected`)throw o.reason;let s=a.value;for(let[t,n]of s.files){let r=join(e.stagedOutDir,t);await mkdir(dirname(r),{recursive:!0}),await writeFile(r,n,`utf8`)}let c=relative(e.appRoot,e.sourceRoot);try{await cp(join(e.declarationsRoot,c),e.stagedDistRoot,{recursive:!0})}catch(e){throw isFileSystemError(e,`ENOENT`)?Error(`TypeScript emitted no declarations for "${c}". Ensure the package tsconfig.json \`include\` covers every module under \`eve.extension.source\`.`,{cause:e}):e}return await emitDeclarationBarrels(e),s.imports}var ExtensionOutputRestoreError=class extends Error{preservedOutputPath;constructor(e,t){super(`Publishing the extension build output failed, and the previous output could not be restored. It is preserved at "${e}".`,t),this.name=`ExtensionOutputRestoreError`,this.preservedOutputPath=e}};async function replaceExtensionBuildOutput(e){await mkdir(dirname(e.outDir),{recursive:!0});let t=join(e.transactionRoot,`previous-output`),n=!1;try{await rename(e.outDir,t),n=!0}catch(e){if(!isFileSystemError(e,`ENOENT`))throw e}try{await rename(e.stagedOutDir,e.outDir)}catch(r){if(n)try{await rename(t,e.outDir)}catch{throw new ExtensionOutputRestoreError(t,{cause:r})}throw r}}async function collectExtensionSourceFiles(e,t=e){let n=[];for(let r of await readdir(t,{withFileTypes:!0})){let i=join(t,r.name);if(r.isDirectory())n.push(...await collectExtensionSourceFiles(e,i));else if(r.isFile()){let t=relative(e,i).replaceAll(`\\`,`/`);if(t===EXTENSION_COMPATIBILITY_MANIFEST_FILENAME)throw Error(`The extension source cannot contain "${EXTENSION_COMPATIBILITY_MANIFEST_FILENAME}"; eve reserves it for generated compatibility metadata.`);n.push({absolutePath:i,logicalPath:t})}else throw Error(`Extension source entry "${i}" must be a regular file or directory.`)}return n.sort((e,t)=>e.logicalPath.localeCompare(t.logicalPath))}function isAuthoredModule(e){return!/\.d\.[cm]?ts$/.test(e)&&SUPPORTED_AUTHORED_MODULE_FILE_EXTENSIONS.some(t=>e.endsWith(t))}async function copyDistributionDataFiles(e){await Promise.all(e.files.filter(t=>!e.moduleLogicalPaths.has(t.logicalPath)).map(async t=>{let n=join(e.stagedDistRoot,t.logicalPath);await mkdir(dirname(n),{recursive:!0}),await cp(t.absolutePath,n)}))}async function createDistributionEntries(e){let t=relative(e.stagedOutDir,e.stagedDistRoot).replaceAll(`\\`,`/`),n=e.moduleFiles.map(e=>({name:`${t}/${stripAuthoredModuleExtension(e.logicalPath)}`,path:e.absolutePath})),r=new Set;for(let e of n){if(r.has(e.name))throw Error(`Multiple extension modules emit the same path "${e.name}.mjs".`);r.add(e.name)}let i=join(e.transactionRoot,`barrels`);return n.push(await stageRuntimeBarrel({barrelPath:join(i,`index.mjs`),name:`index`,reexports:[{name:`default`,path:join(e.sourceRoot,e.declarationModule.logicalPath)},{name:e.shortName,path:join(e.sourceRoot,e.declarationModule.logicalPath)}]}),await stageRuntimeBarrel({barrelPath:join(i,`tools.mjs`),name:`tools/index`,reexports:e.manifest.tools.map(t=>({name:toolExportName(t.logicalPath),path:join(e.sourceRoot,t.logicalPath)}))})),n}async function stageRuntimeBarrel(e){await mkdir(dirname(e.barrelPath),{recursive:!0});let t=e.reexports.map(t=>reexportLine(t.name,relativeImport(dirname(e.barrelPath),t.path)));return await writeFile(e.barrelPath,`${t.join(`
1
+ import{cp,mkdir,readdir,rename,writeFile}from"node:fs/promises";import{dirname,join,relative}from"node:path";import{SUPPORTED_AUTHORED_MODULE_FILE_EXTENSIONS,isAuthoredTestPath}from"#discover/filesystem.js";import{bundleExtensionDistributionGraph}from"#internal/authored-module-loader.js";import{EXTENSION_COMPATIBILITY_MANIFEST_FILENAME}from"#compiler/extension-compatibility.js";import{emitExtensionDeclarations}from"#internal/nitro/host/extension-declarations.js";async function emitExtensionDistribution(e){let t=collectExtensionResourceRoots(e.manifest).map(t=>relative(e.sourceRoot,t).replaceAll(`\\`,`/`)),n=await collectExtensionSourceFiles(e.sourceRoot,t),r=n.filter(e=>isAuthoredModule(e.logicalPath)&&!t.some(t=>e.logicalPath.startsWith(`${t}/`)));await copyDistributionDataFiles({files:n,moduleLogicalPaths:new Set(r.map(e=>e.logicalPath)),stagedDistRoot:e.stagedDistRoot});let i=await createDistributionEntries({...e,moduleFiles:r}),[a,o]=await Promise.allSettled([bundleExtensionDistributionGraph({entries:i,packageRoot:e.appRoot,runtimeDependencies:e.runtimeDependencies}),emitExtensionDeclarations({appRoot:e.appRoot,declarationsRoot:e.declarationsRoot,moduleLogicalPaths:r.map(e=>e.logicalPath),sourceRoot:e.sourceRoot})]);if(a.status===`rejected`)throw a.reason;if(o.status===`rejected`)throw o.reason;let s=a.value;for(let[t,n]of s.files){let r=join(e.stagedOutDir,t);await mkdir(dirname(r),{recursive:!0}),await writeFile(r,n,`utf8`)}let c=relative(e.appRoot,e.sourceRoot);try{await cp(join(e.declarationsRoot,c),e.stagedDistRoot,{recursive:!0})}catch(e){throw isFileSystemError(e,`ENOENT`)?Error(`TypeScript emitted no declarations for "${c}". Ensure the package tsconfig.json \`include\` covers every module under \`eve.extension.source\`.`,{cause:e}):e}return await emitDeclarationBarrels(e),s.imports}function collectExtensionResourceRoots(e){return[...e.sandboxWorkspaces.map(e=>e.sourcePath),...e.skills.flatMap(e=>e.sourceKind===`skill-package`?[e.rootPath]:[]),...e.subagents.flatMap(e=>collectExtensionResourceRoots(e.manifest))]}var ExtensionOutputRestoreError=class extends Error{preservedOutputPath;constructor(e,t){super(`Publishing the extension build output failed, and the previous output could not be restored. It is preserved at "${e}".`,t),this.name=`ExtensionOutputRestoreError`,this.preservedOutputPath=e}};async function replaceExtensionBuildOutput(e){await mkdir(dirname(e.outDir),{recursive:!0});let t=join(e.transactionRoot,`previous-output`),n=!1;try{await rename(e.outDir,t),n=!0}catch(e){if(!isFileSystemError(e,`ENOENT`))throw e}try{await rename(e.stagedOutDir,e.outDir)}catch(r){if(n)try{await rename(t,e.outDir)}catch{throw new ExtensionOutputRestoreError(t,{cause:r})}throw r}}async function collectExtensionSourceFiles(e,t,n=e){let r=[];for(let i of await readdir(n,{withFileTypes:!0})){let a=join(n,i.name),o=relative(e,a).replaceAll(`\\`,`/`);if(!isAuthoredTestPath(o)||t.some(e=>o.startsWith(`${e}/`))){if(i.isDirectory())r.push(...await collectExtensionSourceFiles(e,t,a));else if(i.isFile()){if(o===EXTENSION_COMPATIBILITY_MANIFEST_FILENAME)throw Error(`The extension source cannot contain "${EXTENSION_COMPATIBILITY_MANIFEST_FILENAME}"; eve reserves it for generated compatibility metadata.`);r.push({absolutePath:a,logicalPath:o})}else throw Error(`Extension source entry "${a}" must be a regular file or directory.`)}}return r.sort((e,t)=>e.logicalPath.localeCompare(t.logicalPath))}function isAuthoredModule(e){return!/\.d\.[cm]?ts$/.test(e)&&SUPPORTED_AUTHORED_MODULE_FILE_EXTENSIONS.some(t=>e.endsWith(t))}async function copyDistributionDataFiles(e){await Promise.all(e.files.filter(t=>!e.moduleLogicalPaths.has(t.logicalPath)).map(async t=>{let n=join(e.stagedDistRoot,t.logicalPath);await mkdir(dirname(n),{recursive:!0}),await cp(t.absolutePath,n)}))}async function createDistributionEntries(e){let t=relative(e.stagedOutDir,e.stagedDistRoot).replaceAll(`\\`,`/`),n=e.moduleFiles.map(e=>({name:`${t}/${stripAuthoredModuleExtension(e.logicalPath)}`,path:e.absolutePath})),r=new Set;for(let e of n){if(r.has(e.name))throw Error(`Multiple extension modules emit the same path "${e.name}.mjs".`);r.add(e.name)}let i=join(e.transactionRoot,`barrels`);return n.push(await stageRuntimeBarrel({barrelPath:join(i,`index.mjs`),name:`index`,reexports:[{name:`default`,path:join(e.sourceRoot,e.declarationModule.logicalPath)},{name:e.shortName,path:join(e.sourceRoot,e.declarationModule.logicalPath)}]}),await stageRuntimeBarrel({barrelPath:join(i,`tools.mjs`),name:`tools/index`,reexports:e.manifest.tools.map(t=>({name:toolExportName(t.logicalPath),path:join(e.sourceRoot,t.logicalPath)}))})),n}async function stageRuntimeBarrel(e){await mkdir(dirname(e.barrelPath),{recursive:!0});let t=e.reexports.map(t=>reexportLine(t.name,relativeImport(dirname(e.barrelPath),t.path)));return await writeFile(e.barrelPath,`${t.join(`
2
2
  `)}\n`,`utf8`),{name:e.name,path:e.barrelPath}}async function emitDeclarationBarrels(e){await mkdir(join(e.stagedOutDir,`tools`),{recursive:!0});let t=relativeImport(e.stagedOutDir,join(e.stagedDistRoot,e.declarationModule.logicalPath));await writeDeclarationBarrel({path:join(e.stagedOutDir,`index.d.ts`),reexports:[{name:`default`,specifier:t},{name:e.shortName,specifier:t}]}),await writeDeclarationBarrel({path:join(e.stagedOutDir,`tools`,`index.d.ts`),reexports:e.manifest.tools.map(t=>({name:toolExportName(t.logicalPath),specifier:relativeImport(join(e.stagedOutDir,`tools`),join(e.stagedDistRoot,t.logicalPath))}))})}async function writeDeclarationBarrel(e){let t=e.reexports.map(e=>reexportLine(e.name,toDeclarationSpecifier(e.specifier)));await writeFile(e.path,[`// Generated by eve. Do not edit by hand.`,``,...t,``].join(`
3
3
  `),`utf8`)}function stripAuthoredModuleExtension(e){for(let t of SUPPORTED_AUTHORED_MODULE_FILE_EXTENSIONS)if(e.endsWith(t))return e.slice(0,e.length-t.length);return e}function toolExportName(e){let t=stripAuthoredModuleExtension(e).replace(/^tools\//,``).replace(/[^A-Za-z0-9_$]/g,`_`);return/^[A-Za-z_$]/.test(t)?t:`_${t}`}function relativeImport(e,t){let n=relative(e,t).replaceAll(`\\`,`/`);return n.startsWith(`.`)?n:`./${n}`}function reexportLine(e,t){return e==="default"?`export { default } from ${JSON.stringify(t)};`:`export { default as ${e} } from ${JSON.stringify(t)};`}function toDeclarationSpecifier(e){return e.replace(/\.mts$/,`.mjs`).replace(/\.cts$/,`.cjs`).replace(/\.tsx?$/,`.js`)}function isFileSystemError(e,t){return e instanceof Error&&`code`in e&&e.code===t}export{ExtensionOutputRestoreError,emitExtensionDistribution,replaceExtensionBuildOutput};
@@ -1,7 +1,7 @@
1
1
  /**
2
- * Detects whether an authored extension tree calls `defineState` from
2
+ * Detects whether emitted extension modules call `defineState` from
3
3
  * `eve/context`. Usage is followed through local re-export barrels — aliased
4
4
  * re-exports, `export *`, and import-then-re-export chains — so indirect
5
5
  * usage still stamps the `state` capability requirement.
6
6
  */
7
- export declare function extensionUsesState(sourceRoot: string): Promise<boolean>;
7
+ export declare function extensionUsesState(runtimeRoot: string): Promise<boolean>;
@@ -1 +1 @@
1
- import{readFile,readdir}from"node:fs/promises";import{dirname,join,resolve}from"node:path";import{SUPPORTED_AUTHORED_MODULE_FILE_EXTENSIONS}from"#discover/filesystem.js";import{parseWithNitroRolldownAst}from"#internal/bundler/nitro-rolldown.js";const STATE_MODULE=`eve/context`,STATE_EXPORT=`defineState`;async function extensionUsesState(e){let t=await collectAuthoredModules(e),n=new Map;for(let e of t)n.set(e,await readFile(e,`utf8`));if(![...n.values()].some(e=>e.includes(STATE_EXPORT)))return!1;let r=new Set(t),i=new Map;for(let[e,t]of n){let n=await parseWithNitroRolldownAst(e,t);i.set(e,analyzeModule(n))}let a=computeStateExports(i,r);for(let[e,t]of i){for(let[n,i]of t.imports)if(t.calledIdentifiers.has(n)&&specifierExportsState({...i,fromModulePath:e,stateExports:a,moduleSet:r}))return!0;for(let[n,i]of t.namespaceImports){let o=t.calledMembers.get(n);if(o===void 0)continue;if(i===STATE_MODULE){if(o.has(STATE_EXPORT))return!0;continue}let s=resolveLocalSpecifier(e,i,r),c=s===null?void 0:a.get(s);if(c!==void 0&&[...o].some(e=>c.has(e)))return!0}}return!1}async function collectAuthoredModules(e){let t=[];for(let n of await readdir(e,{withFileTypes:!0})){let r=join(e,n.name);n.isDirectory()?t.push(...await collectAuthoredModules(r)):n.isFile()&&!/\.d\.[cm]?ts$/.test(n.name)&&SUPPORTED_AUTHORED_MODULE_FILE_EXTENSIONS.some(e=>n.name.endsWith(e))&&t.push(r)}return t.sort()}function analyzeModule(e){let t={imports:new Map,namespaceImports:new Map,reexports:new Map,starReexportSpecifiers:[],localReexports:new Map,calledIdentifiers:new Set,calledMembers:new Map};return walkAst(e,e=>{if(e.type===`ImportDeclaration`){let n=stringValue(e.source);if(n===null)return;for(let r of e.specifiers??[]){let e=moduleName(r.local);if(e!==null){if(r.type===`ImportNamespaceSpecifier`)t.namespaceImports.set(e,n);else if(r.type===`ImportSpecifier`){let i=moduleName(r.imported);i!==null&&t.imports.set(e,{specifier:n,importedName:i})}}}}else if(e.type===`ExportNamedDeclaration`){let n=stringValue(e.source);for(let r of e.specifiers??[]){if(r.type!==`ExportSpecifier`)continue;let e=moduleName(r.local),i=moduleName(r.exported)??e;e!==null&&i!==null&&(n===null?t.localReexports.set(i,e):t.reexports.set(i,{specifier:n,importedName:e}))}}else if(e.type===`ExportAllDeclaration`){let n=stringValue(e.source);n!==null&&e.exported==null&&t.starReexportSpecifiers.push(n)}else if(e.type===`CallExpression`){let n=e.callee;if(n?.type===`Identifier`){let e=moduleName(n);e!==null&&t.calledIdentifiers.add(e)}else if(n?.type===`MemberExpression`&&n.object?.type===`Identifier`){let e=moduleName(n.object),r=moduleName(n.property);if(e!==null&&r!==null){let n=t.calledMembers.get(e)??new Set;n.add(r),t.calledMembers.set(e,n)}}}}),t}function computeStateExports(e,t){let n=new Map;for(let t of e.keys())n.set(t,new Set);let r=!0;for(;r;){r=!1;for(let[i,a]of e){let e=n.get(i),add=t=>{e.has(t)||(e.add(t),r=!0)};for(let[e,r]of a.reexports)specifierExportsState({...r,fromModulePath:i,stateExports:n,moduleSet:t})&&add(e);for(let e of a.starReexportSpecifiers){if(e===STATE_MODULE){add(STATE_EXPORT);continue}let r=resolveLocalSpecifier(i,e,t);if(r!==null)for(let e of n.get(r)??[])add(e)}for(let[e,r]of a.localReexports){let o=a.imports.get(r);o!==void 0&&specifierExportsState({...o,fromModulePath:i,stateExports:n,moduleSet:t})&&add(e)}}}return n}function specifierExportsState(e){if(e.specifier===STATE_MODULE)return e.importedName===STATE_EXPORT;let t=resolveLocalSpecifier(e.fromModulePath,e.specifier,e.moduleSet);return t!==null&&(e.stateExports.get(t)?.has(e.importedName)??!1)}function resolveLocalSpecifier(e,t,n){if(!t.startsWith(`.`))return null;let r=resolve(dirname(e),t),i=[r,...emittedExtensionVariants(r)];for(let e of SUPPORTED_AUTHORED_MODULE_FILE_EXTENSIONS)i.push(`${r}${e}`,join(r,`index${e}`));return i.find(e=>n.has(e))??null}function emittedExtensionVariants(e){return[[`.js`,`.ts`],[`.jsx`,`.tsx`],[`.mjs`,`.mts`],[`.cjs`,`.cts`]].filter(([t])=>e.endsWith(t)).map(([t,n])=>e.slice(0,-t.length)+n)}function moduleName(e){return e==null?null:typeof e.name==`string`?e.name:typeof e.value==`string`?e.value:null}function stringValue(e){return typeof e?.value==`string`?e.value:null}function walkAst(e,t){t(e);for(let n of Object.values(e))if(Array.isArray(n))for(let e of n)typeof e==`object`&&e&&`type`in e&&walkAst(e,t);else typeof n==`object`&&n&&`type`in n&&walkAst(n,t)}export{extensionUsesState};
1
+ import{readFile,readdir}from"node:fs/promises";import{dirname,join,resolve}from"node:path";import{SUPPORTED_AUTHORED_MODULE_FILE_EXTENSIONS,isAuthoredTestPath}from"#discover/filesystem.js";import{parseWithNitroRolldownAst}from"#internal/bundler/nitro-rolldown.js";const STATE_MODULE=`eve/context`,STATE_EXPORT=`defineState`;async function extensionUsesState(e){let t=await collectRuntimeModules(e),n=new Map;for(let e of t)n.set(e,await readFile(e,`utf8`));if(![...n.values()].some(e=>e.includes(STATE_EXPORT)))return!1;let r=new Set(t),i=new Map;for(let[e,t]of n){let n=await parseWithNitroRolldownAst(e,t);i.set(e,analyzeModule(n))}let a=computeStateExports(i,r);for(let[e,t]of i){for(let[n,i]of t.imports)if(t.calledIdentifiers.has(n)&&specifierExportsState({...i,fromModulePath:e,stateExports:a,moduleSet:r}))return!0;for(let[n,i]of t.namespaceImports){let o=t.calledMembers.get(n);if(o===void 0)continue;if(i===STATE_MODULE){if(o.has(STATE_EXPORT))return!0;continue}let s=resolveLocalSpecifier(e,i,r),c=s===null?void 0:a.get(s);if(c!==void 0&&[...o].some(e=>c.has(e)))return!0}}return!1}async function collectRuntimeModules(e){let t=[];for(let n of await readdir(e,{withFileTypes:!0})){if(isAuthoredTestPath(n.name))continue;let r=join(e,n.name);n.isDirectory()?t.push(...await collectRuntimeModules(r)):n.isFile()&&!/\.d\.[cm]?ts$/.test(n.name)&&SUPPORTED_AUTHORED_MODULE_FILE_EXTENSIONS.some(e=>n.name.endsWith(e))&&t.push(r)}return t.sort()}function analyzeModule(e){let t={imports:new Map,namespaceImports:new Map,reexports:new Map,starReexportSpecifiers:[],localReexports:new Map,calledIdentifiers:new Set,calledMembers:new Map};return walkAst(e,e=>{if(e.type===`ImportDeclaration`){let n=stringValue(e.source);if(n===null)return;for(let r of e.specifiers??[]){let e=moduleName(r.local);if(e!==null){if(r.type===`ImportNamespaceSpecifier`)t.namespaceImports.set(e,n);else if(r.type===`ImportSpecifier`){let i=moduleName(r.imported);i!==null&&t.imports.set(e,{specifier:n,importedName:i})}}}}else if(e.type===`ExportNamedDeclaration`){let n=stringValue(e.source);for(let r of e.specifiers??[]){if(r.type!==`ExportSpecifier`)continue;let e=moduleName(r.local),i=moduleName(r.exported)??e;e!==null&&i!==null&&(n===null?t.localReexports.set(i,e):t.reexports.set(i,{specifier:n,importedName:e}))}}else if(e.type===`ExportAllDeclaration`){let n=stringValue(e.source);n!==null&&e.exported==null&&t.starReexportSpecifiers.push(n)}else if(e.type===`CallExpression`){let n=e.callee;if(n?.type===`Identifier`){let e=moduleName(n);e!==null&&t.calledIdentifiers.add(e)}else if(n?.type===`MemberExpression`&&n.object?.type===`Identifier`){let e=moduleName(n.object),r=moduleName(n.property);if(e!==null&&r!==null){let n=t.calledMembers.get(e)??new Set;n.add(r),t.calledMembers.set(e,n)}}}}),t}function computeStateExports(e,t){let n=new Map;for(let t of e.keys())n.set(t,new Set);let r=!0;for(;r;){r=!1;for(let[i,a]of e){let e=n.get(i),add=t=>{e.has(t)||(e.add(t),r=!0)};for(let[e,r]of a.reexports)specifierExportsState({...r,fromModulePath:i,stateExports:n,moduleSet:t})&&add(e);for(let e of a.starReexportSpecifiers){if(e===STATE_MODULE){add(STATE_EXPORT);continue}let r=resolveLocalSpecifier(i,e,t);if(r!==null)for(let e of n.get(r)??[])add(e)}for(let[e,r]of a.localReexports){let o=a.imports.get(r);o!==void 0&&specifierExportsState({...o,fromModulePath:i,stateExports:n,moduleSet:t})&&add(e)}}}return n}function specifierExportsState(e){if(e.specifier===STATE_MODULE)return e.importedName===STATE_EXPORT;let t=resolveLocalSpecifier(e.fromModulePath,e.specifier,e.moduleSet);return t!==null&&(e.stateExports.get(t)?.has(e.importedName)??!1)}function resolveLocalSpecifier(e,t,n){if(!t.startsWith(`.`))return null;let r=resolve(dirname(e),t),i=[r,...emittedExtensionVariants(r)];for(let e of SUPPORTED_AUTHORED_MODULE_FILE_EXTENSIONS)i.push(`${r}${e}`,join(r,`index${e}`));return i.find(e=>n.has(e))??null}function emittedExtensionVariants(e){return[[`.js`,`.ts`],[`.jsx`,`.tsx`],[`.mjs`,`.mts`],[`.cjs`,`.cts`]].filter(([t])=>e.endsWith(t)).map(([t,n])=>e.slice(0,-t.length)+n)}function moduleName(e){return e==null?null:typeof e.name==`string`?e.name:typeof e.value==`string`?e.value:null}function stringValue(e){return typeof e?.value==`string`?e.value:null}function walkAst(e,t){t(e);for(let n of Object.values(e))if(Array.isArray(n))for(let e of n)typeof e==`object`&&e&&`type`in e&&walkAst(e,t);else typeof n==`object`&&n&&`type`in n&&walkAst(n,t)}export{extensionUsesState};