eve 0.52.4 → 0.52.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/src/cli/commands/init-agent-workspace.d.ts +2 -0
  3. package/dist/src/cli/commands/init-agent-workspace.js +1 -1
  4. package/dist/src/cli/commands/init-install.d.ts +8 -0
  5. package/dist/src/cli/commands/init-install.js +1 -0
  6. package/dist/src/cli/commands/init.d.ts +3 -4
  7. package/dist/src/cli/commands/init.js +1 -1
  8. package/dist/src/cli/run.js +2 -2
  9. package/dist/src/cli/telemetry/index.d.ts +3 -0
  10. package/dist/src/cli/telemetry/index.js +1 -1
  11. package/dist/src/compiled/.vendor-stamp.json +3 -2
  12. package/dist/src/compiled/@workflow/world-local/index.js +1 -1
  13. package/dist/src/compiler/extension-compatibility.d.ts +2 -2
  14. package/dist/src/compiler/extension-compatibility.js +1 -1
  15. package/dist/src/context/dynamic-model-lifecycle.js +1 -1
  16. package/dist/src/context/keys.d.ts +11 -2
  17. package/dist/src/context/keys.js +1 -1
  18. package/dist/src/evals/mock-model.js +1 -1
  19. package/dist/src/evals/runner/run-evals.d.ts +1 -1
  20. package/dist/src/evals/runner/run-evals.js +1 -1
  21. package/dist/src/execution/activity-cohort.d.ts +20 -0
  22. package/dist/src/execution/activity-cohort.js +1 -0
  23. package/dist/src/execution/authorization-callback-match.d.ts +1 -0
  24. package/dist/src/execution/authorization-callback-match.js +1 -1
  25. package/dist/src/execution/parked-delivery-wait.js +1 -1
  26. package/dist/src/execution/session-activity-projection.d.ts +2 -0
  27. package/dist/src/execution/session-activity-projection.js +1 -1
  28. package/dist/src/execution/skills/instructions.js +1 -1
  29. package/dist/src/execution/tools/sleep-workflow.js +1 -1
  30. package/dist/src/execution/workflow-steps.js +1 -1
  31. package/dist/src/harness/approval-delivery-coordinator.js +1 -1
  32. package/dist/src/harness/authorization.d.ts +1 -0
  33. package/dist/src/harness/authorization.js +1 -1
  34. package/dist/src/harness/compaction.js +1 -1
  35. package/dist/src/harness/current-messages.d.ts +8 -2
  36. package/dist/src/harness/current-messages.js +1 -1
  37. package/dist/src/harness/hitl/approval-input-requests.js +1 -1
  38. package/dist/src/harness/input-requests.js +1 -1
  39. package/dist/src/harness/pending-input-batches.d.ts +4 -0
  40. package/dist/src/harness/pending-input-batches.js +1 -1
  41. package/dist/src/harness/tool-loop.js +2 -2
  42. package/dist/src/harness/turn-client-context.d.ts +1 -1
  43. package/dist/src/internal/application/package.js +1 -1
  44. package/dist/src/internal/mock-model-identity.d.ts +2 -0
  45. package/dist/src/internal/mock-model-identity.js +1 -0
  46. package/dist/src/internal/nitro/routes/agent-info/build-agent-info-response.js +1 -1
  47. package/dist/src/public/tools/index.d.ts +1 -0
  48. package/dist/src/public/tools/index.js +1 -1
  49. package/dist/src/setup/scaffold/create/project.js +1 -1
  50. package/dist/src/tasks/delivery-context.d.ts +2 -2
  51. package/dist/src/tasks/delivery-context.js +2 -18
  52. package/dist/src/tasks/delivery-policy.js +1 -1
  53. package/dist/src/tools/durable-callbacks.d.ts +18 -1
  54. package/dist/src/tools/durable-callbacks.js +1 -1
  55. package/docs/channels/overview.mdx +2 -0
  56. package/docs/channels/slack.mdx +2 -0
  57. package/docs/evals/running.mdx +3 -1
  58. package/docs/guides/dynamic-capabilities.md +36 -1
  59. package/docs/guides/instrumentation.md +3 -2
  60. package/docs/instructions.mdx +1 -1
  61. package/docs/reference/cli.md +1 -1
  62. package/docs/reference/telemetry.md +1 -1
  63. package/docs/reference/typescript-api.md +36 -35
  64. package/docs/tools/overview.mdx +4 -2
  65. package/package.json +1 -1
@@ -1,3 +1,3 @@
1
- import{readClientContext}from"#internal/client-context.js";import{createErrorId,createLogger,formatError,logError}from"#internal/logging.js";import{contextStorage}from"#context/container.js";import{AuthKey,ParentSessionKey,ScheduleIdKey,SessionCallbackKey,TurnTaskDeliveryKey,TurnTaskStateKey}from"#context/keys.js";import{resolveInstalledPackageInfo}from"#internal/application/package.js";import{toErrorMessage}from"#shared/errors.js";import{createActionResultEvent,createApprovalCandidateEvent,createApprovalSettledEvent,createAuthorizationCompletedEvent,createAuthorizationRequiredEvent,createCompactionCompletedEvent,createCompactionRequestedEvent,createContextClearedEvent,createInputRequestedEvent,createInputResolvedEvent,createMessageCompletedEvent,createResultCompletedEvent,createSessionWaitingEvent,createStepStartedEvent}from"#protocol/message.js";import{summarizeKnownError}from"#harness/semantic-errors/index.js";import{resolveProviderHeaders}from"#internal/gateway.js";import{formatLanguageModelGatewayId}from"#internal/runtime-model.js";import{buildDynamicTools,buildResponseAuthorizationTools}from"#context/build-dynamic-tools.js";import{BoundaryHookError}from"#shared/boundary-hook-error.js";import{drainMemoryCommit,prepareMemoryCompaction,prepareMemoryPreamble}from"#context/memory-lifecycle.js";import{canonicalizeMemoryRecords,clearMemorySessionState,shouldCanonicalizeMemory}from"#shared/memory-state.js";import{advanceStep,emitFailedStep,emitRecoverableFailedTurn,emitStepStarted,emitStreamContent,emitTurnEpilogue,emitTurnPreamble,getHarnessEmissionState,setHarnessEmissionState}from"#harness/emission.js";import{ToolLoopAgent,isStepCount}from"ai";import{projectParkedAgentHandles,resolveAgentsAnnouncement}from"#subagents/handles/prompt.js";import{renderPendingApprovalsInstruction,renderPendingApprovalsSnippet}from"#harness/hitl/approval-prompt.js";import{getAgentHandleStore}from"#subagents/handles/store.js";import{buildDynamicSubagentTools}from"#context/dynamic-subagent-lifecycle.js";import{hydrateSandboxAttachments,stageAttachmentsToSandbox}from"#harness/attachment-staging.js";import{normalizeModelMessages,normalizeUserContent,resolveAssistantStepText}from"#harness/messages.js";import{createCoordinationRequestFromToolCall,resolvePendingCoordination,setPendingCoordinationBatch}from"#harness/coordination.js";import{activeTurnId}from"#harness/active-turn-id.js";import{clearPendingWorkflowInterrupt,getPendingWorkflowInterrupt,setPendingWorkflowInterrupt}from"#harness/workflow-interrupt-state.js";import{getWorkflowTaskInterrupts,isWorkflowTaskInterrupt}from"#harness/workflow-task-state.js";import{createHistoryViewPreparer}from"#shared/history-view.js";import{isTurnCancellation,throwIfTurnAborted}from"#harness/turn-cancellation.js";import{getActiveDynamicModelSelection,isDynamicModelSelectionError}from"#context/dynamic-model-lifecycle.js";import{ASK_QUESTION_TOOL_NAME}from"#harness/request-input-tool.js";import{getSupersededAuthorizationChallenges,setPendingAuthorization}from"#harness/authorization.js";import{appendPendingInputBatch,consumeDeferredStepInput,getApprovedTools,getPendingInputRequestIds,hasDeferredStepInput,hasPendingApprovalBatch,hasStepInput,resolvePendingInput}from"#harness/input-requests.js";import{accumulateTurnUsage,getTurnUsageState,setTurnUsageState}from"#harness/turn-tag-state.js";import{BackgroundToolExecutorKey,createBackgroundToolCallBatch}from"#harness/background-tools.js";import{createToolResultMessagePartFromToolError}from"#harness/action-result-helpers.js";import{buildDynamicInstructionMessages,drainDynamicInstructionUserMessages,prepareDynamicInstructionPreamble}from"#context/dynamic-instruction-lifecycle.js";import{PendingSkillAnnouncementKey}from"#context/dynamic-skill-lifecycle.js";import{getWorkflowContinuationSecurity,readWorkflowContinuationSecurity}from"#harness/workflow-continuation-security.js";import{buildWorkflowHostTools,resolveWorkflowSandboxBridgeRequestLimit}from"#harness/workflow-sandbox.js";import{getApprovalAuditState,markApprovalCandidateHistoryEventEmitted,markApprovalCandidatePendingEventEmitted,markApprovalSettlementEventEmitted}from"#harness/approval-candidates.js";import{getPendingInputBatches,queueDeferredStepInput}from"#harness/pending-input-batches.js";import{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{EmptyModelResponseError,classifyModelCallError,extractModelCallErrorDetails,extractUnsupportedProviderToolTypes,extractUpstreamRejectionMessage,isNoOutputGeneratedError}from"#harness/model-call-error.js";import{resolveInlineAuthorizationInterrupt}from"#harness/inline-tool-authorization.js";import{createCurrentMessages}from"#harness/current-messages.js";import{extractQuestionInputRequests,extractToolApprovalInputRequests}from"#harness/input-extraction.js";import{applyLastToolCacheBreakpoint,applySystemCacheBreakpoint,detectPromptCachePath,getAnthropicCacheMarker}from"#harness/prompt-cache.js";import{mergeProviderSafetyIdentifier}from"#harness/provider-safety.js";import{requireSessionModelReference}from"#harness/types.js";import{emitWorkflowActionResults,emitWorkflowActionsRequested}from"#harness/workflow-lifecycle.js";import{compactMessages,getInputTokenCount,resolveCompactionModel,shouldCompact}from"#harness/compaction.js";import{applySessionLimitContinuation,enforceSessionUsageLimit}from"#harness/session-limit-enforcement.js";import{setEveAttributes}from"#runtime/attributes/emit.js";import{coordinateApprovalDelivery,shouldPrepareApprovalReplayTools}from"#harness/approval-delivery-coordinator.js";import{convertStaleResponsesToUserMessage,dropStaleSessionLimitContinuationResponses}from"#harness/stale-input-responses.js";import{normalizeProviderToolHistory}from"#harness/provider-tool-history.js";import{resolveDeliveryPolicy}from"#tasks/delivery-policy.js";import{extractWorkflowStreamWriteErrorDetails}from"#harness/workflow-stream-error.js";import{getAdvertisedTools}from"#harness/advertised-tools.js";import{resolveFrameworkToolFromUpstreamType}from"#harness/provider-tools.js";import{buildStepHooks,emitStepActions}from"#harness/step-hooks.js";import{buildToolApproval,buildToolSetFromDefinitions,buildToolSetWithProviderTools}from"#harness/tools.js";import{continueWorkflowSandboxInterrupt,getWorkflowSandboxInterrupt,unwrapWorkflowSandboxResult}from"#shared/workflow-sandbox.js";import{FINAL_OUTPUT_TOOL_NAME,buildFinalOutputTool}from"#harness/final-output.js";const environment=process.env.NODE_ENV??`unknown`,eveVersion=resolveInstalledPackageInfo().version,log=createLogger(`harness.tool-loop`);function logToolExecutionError(e){e.toolOutput.type===`tool-error`&&logError(log,`tool execution failed`,e.toolOutput.error,{toolName:e.toolCall.toolName,toolCallId:e.toolCall.toolCallId})}function mergeSystemInstructions(e){if(e.length===0)return;if(e.length===1)return{...e[0]};let t;for(let n of e)n.providerOptions!==void 0&&(t={...t,...n.providerOptions});let n={role:`system`,content:e.map(e=>e.content).join(`
1
+ import{readClientContext}from"#internal/client-context.js";import{createErrorId,createLogger,formatError,logError}from"#internal/logging.js";import{contextStorage}from"#context/container.js";import{AuthKey,HistoryStateKey,ParentSessionKey,ScheduleIdKey,SessionCallbackKey,TurnTaskDeliveryKey}from"#context/keys.js";import{resolveInstalledPackageInfo}from"#internal/application/package.js";import{toErrorMessage}from"#shared/errors.js";import{createActionResultEvent,createApprovalCandidateEvent,createApprovalSettledEvent,createAuthorizationCompletedEvent,createAuthorizationRequiredEvent,createCompactionCompletedEvent,createCompactionRequestedEvent,createContextClearedEvent,createInputRequestedEvent,createInputResolvedEvent,createMessageCompletedEvent,createResultCompletedEvent,createSessionWaitingEvent,createStepStartedEvent}from"#protocol/message.js";import{summarizeKnownError}from"#harness/semantic-errors/index.js";import{resolveProviderHeaders}from"#internal/gateway.js";import{formatLanguageModelGatewayId}from"#internal/runtime-model.js";import{buildDynamicTools,buildResponseAuthorizationTools}from"#context/build-dynamic-tools.js";import{BoundaryHookError}from"#shared/boundary-hook-error.js";import{drainMemoryCommit,prepareMemoryCompaction,prepareMemoryPreamble}from"#context/memory-lifecycle.js";import{canonicalizeMemoryRecords,clearMemorySessionState,shouldCanonicalizeMemory}from"#shared/memory-state.js";import{advanceStep,emitFailedStep,emitRecoverableFailedTurn,emitStepStarted,emitStreamContent,emitTurnEpilogue,emitTurnPreamble,getHarnessEmissionState,setHarnessEmissionState}from"#harness/emission.js";import{ToolLoopAgent,isStepCount}from"ai";import{projectParkedAgentHandles,resolveAgentsAnnouncement}from"#subagents/handles/prompt.js";import{renderPendingApprovalsInstruction,renderPendingApprovalsSnippet}from"#harness/hitl/approval-prompt.js";import{getPendingInputBatches,queueDeferredStepInput}from"#harness/pending-input-batches.js";import{getAgentHandleStore}from"#subagents/handles/store.js";import{buildDynamicSubagentTools}from"#context/dynamic-subagent-lifecycle.js";import{hydrateSandboxAttachments,stageAttachmentsToSandbox}from"#harness/attachment-staging.js";import{normalizeModelMessages,normalizeUserContent,resolveAssistantStepText}from"#harness/messages.js";import{createCoordinationRequestFromToolCall,resolvePendingCoordination,setPendingCoordinationBatch}from"#harness/coordination.js";import{activeTurnId}from"#harness/active-turn-id.js";import{clearPendingWorkflowInterrupt,getPendingWorkflowInterrupt,setPendingWorkflowInterrupt}from"#harness/workflow-interrupt-state.js";import{getWorkflowTaskInterrupts,isWorkflowTaskInterrupt}from"#harness/workflow-task-state.js";import{createHistoryViewPreparer}from"#shared/history-view.js";import{isTurnCancellation,throwIfTurnAborted}from"#harness/turn-cancellation.js";import{getActiveDynamicModelSelection,isDynamicModelSelectionError}from"#context/dynamic-model-lifecycle.js";import{ASK_QUESTION_TOOL_NAME}from"#harness/request-input-tool.js";import{getSupersededAuthorizationChallenges,setPendingAuthorization}from"#harness/authorization.js";import{appendPendingInputBatch,consumeDeferredStepInput,getApprovedTools,getPendingInputRequestIds,hasDeferredStepInput,hasPendingApprovalBatch,hasStepInput,resolvePendingInput}from"#harness/input-requests.js";import{accumulateTurnUsage,getTurnUsageState,setTurnUsageState}from"#harness/turn-tag-state.js";import{BackgroundToolExecutorKey,createBackgroundToolCallBatch}from"#harness/background-tools.js";import{createToolResultMessagePartFromToolError}from"#harness/action-result-helpers.js";import{buildDynamicInstructionMessages,drainDynamicInstructionUserMessages,prepareDynamicInstructionPreamble}from"#context/dynamic-instruction-lifecycle.js";import{PendingSkillAnnouncementKey}from"#context/dynamic-skill-lifecycle.js";import{resolveInitiatingTaskContext}from"#tasks/delivery-context.js";import{getWorkflowContinuationSecurity,readWorkflowContinuationSecurity}from"#harness/workflow-continuation-security.js";import{buildWorkflowHostTools,resolveWorkflowSandboxBridgeRequestLimit}from"#harness/workflow-sandbox.js";import{getApprovalAuditState,markApprovalCandidateHistoryEventEmitted,markApprovalCandidatePendingEventEmitted,markApprovalSettlementEventEmitted}from"#harness/approval-candidates.js";import{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{EmptyModelResponseError,classifyModelCallError,extractModelCallErrorDetails,extractUnsupportedProviderToolTypes,extractUpstreamRejectionMessage,isNoOutputGeneratedError}from"#harness/model-call-error.js";import{resolveInlineAuthorizationInterrupt}from"#harness/inline-tool-authorization.js";import{createCurrentMessages}from"#harness/current-messages.js";import{extractQuestionInputRequests,extractToolApprovalInputRequests}from"#harness/input-extraction.js";import{applyLastToolCacheBreakpoint,applySystemCacheBreakpoint,detectPromptCachePath,getAnthropicCacheMarker}from"#harness/prompt-cache.js";import{mergeProviderSafetyIdentifier}from"#harness/provider-safety.js";import{requireSessionModelReference}from"#harness/types.js";import{emitWorkflowActionResults,emitWorkflowActionsRequested}from"#harness/workflow-lifecycle.js";import{compactMessages,getInputTokenCount,resolveCompactionModel,shouldCompact}from"#harness/compaction.js";import{applySessionLimitContinuation,enforceSessionUsageLimit}from"#harness/session-limit-enforcement.js";import{setEveAttributes}from"#runtime/attributes/emit.js";import{coordinateApprovalDelivery,shouldPrepareApprovalReplayTools}from"#harness/approval-delivery-coordinator.js";import{convertStaleResponsesToUserMessage,dropStaleSessionLimitContinuationResponses}from"#harness/stale-input-responses.js";import{normalizeProviderToolHistory}from"#harness/provider-tool-history.js";import{resolveDeliveryPolicy}from"#tasks/delivery-policy.js";import{extractWorkflowStreamWriteErrorDetails}from"#harness/workflow-stream-error.js";import{getAdvertisedTools}from"#harness/advertised-tools.js";import{resolveFrameworkToolFromUpstreamType}from"#harness/provider-tools.js";import{buildStepHooks,emitStepActions}from"#harness/step-hooks.js";import{buildToolApproval,buildToolSetFromDefinitions,buildToolSetWithProviderTools}from"#harness/tools.js";import{continueWorkflowSandboxInterrupt,getWorkflowSandboxInterrupt,unwrapWorkflowSandboxResult}from"#shared/workflow-sandbox.js";import{FINAL_OUTPUT_TOOL_NAME,buildFinalOutputTool}from"#harness/final-output.js";const environment=process.env.NODE_ENV??`unknown`,eveVersion=resolveInstalledPackageInfo().version,log=createLogger(`harness.tool-loop`);function logToolExecutionError(e){e.toolOutput.type===`tool-error`&&logError(log,`tool execution failed`,e.toolOutput.error,{toolName:e.toolCall.toolName,toolCallId:e.toolCall.toolCallId})}function mergeSystemInstructions(e){if(e.length===0)return;if(e.length===1)return{...e[0]};let t;for(let n of e)n.providerOptions!==void 0&&(t={...t,...n.providerOptions});let n={role:`system`,content:e.map(e=>e.content).join(`
2
2
 
3
- `)};return t!==void 0&&(n.providerOptions=t),n}function buildGatewayAttributionHeaders(e,t){let n=resolveProviderHeaders(e);if(n===void 0)return;let r=t?.agentName??t?.agentId,i=process.env.VERCEL_PROJECT_PRODUCTION_URL||process.env.VERCEL_URL,a=i?`https://${i}`:void 0,o={...n};return r&&(o[`x-title`]=r),a&&(o[`http-referer`]=a),o}async function resolveActiveRuntimeModel(e){if(e.ctx===void 0){let t=e.session.agent.modelReference;if(t===void 0)throw Error(`Dynamic model selection is unavailable outside an eve runtime context.`);return{model:await e.config.resolveModel(t),session:e.session}}let t=getActiveDynamicModelSelection(e.ctx);if(t===null){let t=e.session.agent.modelReference;if(e.session.agent.dynamicModel===!0||t===void 0)throw Error(`Dynamic model selection is required before model-dependent work begins. Add a matching resolver handler that returns a concrete model.`);return{model:await e.config.resolveModel(t),session:e.session}}return{model:t.model===void 0?await e.config.resolveModel(t.reference):t.model,session:updateSessionModelReference(e.session,t.reference)}}function updateSessionModelReference(e,t){return{...e,agent:{...e.agent,modelReference:t},compaction:updateCompactionThresholdForModelReference({compaction:e.compaction,modelReference:t})}}function updateCompactionThresholdForModelReference(e){return e.modelReference.contextWindowTokens===void 0?e.compaction:{...e.compaction,threshold:Math.max(1,Math.floor(e.modelReference.contextWindowTokens*(e.compaction.thresholdPercent??.9)))}}function buildHarnessToolsWithDynamicSubagents(e,t){let n=new Map(e);if(t===void 0)return n;for(let e of buildDynamicSubagentTools(t)){if(n.has(e.name))throw Error(`Dynamic subagent "${e.name}" collides with another runtime-visible tool name.`);n.set(e.name,e)}return n}function createToolLoopHarness(e){let t=e.handleEvent;async function runStep(t,n){return e.instrumentation?.runStep({environment,eveVersion,hasInput:hasStepInput(n),session:t},e=>executeStepBody(e.session,n,e))??executeStepBody(t,n)}async function executeStepBody(n,r,i){let a=n,o=createHistoryViewPreparer({previous:e.historyView,projector:e.historyProjector});o(a.history,a.state);let projectHistory=(e,t)=>o(e,t).messages,s=getHarnessEmissionState(a.state),c=contextStorage.getStore(),l=c?.get(ParentSessionKey),u=c?.get(SessionCallbackKey),d=l!==void 0||u!==void 0,f,p=i?.createHandleEvent({getAttemptScope:()=>f,handleEvent:t,turnId:activeTurnId(s)})??t,failModelSelection=async(t,n)=>{if(throwIfTurnAborted(e.abortSignal),i?.recordError(t),!p)throw t;let r=createErrorId(),o=toErrorMessage(t);return log.error(`model selection failed terminally`,{error:t,errorId:r,sessionId:a.sessionId,turnId:n.turnId}),await emitFailedStep(p,n,{code:`MODEL_SELECTION_FAILED`,details:{errorId:r},message:o,sessionId:a.sessionId}),{next:e.mode===`task`||d?{done:!0,isError:!0,output:o}:{done:!0,output:``},session:a}},failBoundaryEvent=async(t,n)=>{if(throwIfTurnAborted(e.abortSignal),isTurnCancellation(t))throw t;if(isDynamicModelSelectionError(t))return failModelSelection(t,n);if(!p||e.mode!==`conversation`||!(t instanceof BoundaryHookError))throw t;i?.recordError(t);let r=createErrorId(),o=toErrorMessage(t);return log.error(`turn boundary handler failed — parking session`,{error:t,errorId:r,sessionId:a.sessionId,turnId:n.turnId}),s=await emitRecoverableFailedTurn(p,n,{code:`EVENT_HANDLER_FAILED`,continuationToken:a.continuationToken,details:{errorId:r},message:o}),{next:null,session:setHarnessEmissionState({...a,outputSchema:void 0},s),settledTurn:{isError:!0,output:o}}},preparePreambleTrace=async()=>await i?.preparePreamble({sequence:s.sequence,sessionStarted:s.sessionStarted,traceContext:i?.traceContext,turnId:`turn_${s.sequence}`});if(e.clearOnly===!0)return a={...a,compaction:{recentWindowSize:a.compaction.recentWindowSize,threshold:a.compaction.threshold,thresholdPercent:a.compaction.thresholdPercent},history:[],state:clearMemorySessionState(a.state)},await p?.(createContextClearedEvent({sequence:s.sequence,sessionId:a.sessionId,turnId:activeTurnId(s)})),await p?.(createSessionWaitingEvent()),{next:null,session:a};if(e.compactOnly===!0){if(a.history.length>0)try{let t=contextStorage.getStore(),n=await resolveActiveRuntimeModel({config:e,ctx:t,session:a});a=n.session;let r=await maybeCompact({abortSignal:e.abortSignal,auth:t?.get(AuthKey)??null,emit:p,emissionState:{...s,turnId:activeTurnId(s)},force:!0,historyProjector:e.historyProjector,messages:[...a.history],model:n.model,onCompaction:e.onCompaction,resolveModel:e.resolveModel,runtimeIdentity:e.runtimeIdentity,session:a,telemetry:i?.telemetry()});a={...r.session,compaction:{recentWindowSize:r.session.compaction.recentWindowSize,threshold:r.session.compaction.threshold,thresholdPercent:r.session.compaction.thresholdPercent},history:r.messages}}catch(e){logError(log,`manual session compaction failed`,e,{sessionId:a.sessionId})}return await p?.(createSessionWaitingEvent()),{next:null,session:a}}let m=consumeDeferredStepInput({input:r,preferCurrentInput:e.mode!==`conversation`&&r!==void 0&&hasPendingApprovalBatch(a),session:a});a=m.session;let h=await resolvePendingCoordination({emit:p,session:a,stepInput:m.input,tools:e.tools});if(h.outcome===`unresolved`)return{next:null,session:h.session};a=h.session;let g=getPendingInputRequestIds(a.state),_=convertStaleResponsesToUserMessage({history:h.messages,pendingRequestIds:g,stepInput:dropStaleSessionLimitContinuationResponses({pendingRequestIds:g,stepInput:m.input}),tools:e.tools}),v=_.stepInput,y=_.kind===`converted`?{...v,message:_.displayMessage}:v,b=contextStorage.getStore();b!==void 0&&e.resolveStepDynamicTools!==void 0&&shouldPrepareApprovalReplayTools({session:a,stepInput:v})&&await e.resolveStepDynamicTools({ctx:b,event:createStepStartedEvent({modelId:a.agent.modelReference?.id??`dynamic`,sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId}),messages:projectHistory(h.messages,a.state)});let x=shouldPrepareApprovalReplayTools({session:a,stepInput:v})?buildResponseAuthorizationTools({authoredTools:e.tools,context:b}):e.tools,S=await coordinateApprovalDelivery({session:a,stepInput:v,tools:x});if(a=S.session,p){for(let e of S.feedback)await p(createMessageCompletedEvent({message:e,sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId}));let e=getApprovalAuditState(a.state);for(let t of e.activeCandidates.filter(e=>e.pendingEventEmitted!==!0))await p(createApprovalCandidateEvent({candidateId:t.candidateId,outcome:`pending`,requestId:t.requestId,responderPrincipalId:t.responder.principalId,sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId})),a={...a,state:markApprovalCandidatePendingEventEmitted({candidateId:t.candidateId,state:a.state})};for(let t of e.candidateHistory.filter(e=>e.eventEmitted!==!0&&e.status!==`allowed`))await p(createApprovalCandidateEvent({candidateId:t.candidateId,outcome:t.status,requestId:t.requestId,responderPrincipalId:t.responder.principalId,reason:t.reason,sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId})),a={...a,state:markApprovalCandidateHistoryEventEmitted({candidateId:t.candidateId,state:a.state})};for(let t of e.settlements.filter(e=>e.eventEmitted!==!0))await p(createApprovalSettledEvent({outcome:t.outcome===`allowed`?`approved`:`cancelled`,requestId:t.requestId,responderPrincipalId:t.actor.principalId,sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId})),a={...a,state:markApprovalSettlementEventEmitted({requestId:t.requestId,state:a.state})}}if(S.kind===`park`)return{next:null,session:a};if(S.kind===`continue-coordination`)return{next:runStep,session:S.stepInput===void 0?a:queueDeferredStepInput(a,S.stepInput)};if(S.challenges.length>0){if(p)for(let e of S.challenges)await p(createAuthorizationRequiredEvent({authorization:e.challenge,candidateId:e.candidateId,description:e.challenge.instructions??`Authorization required for ${e.name}`,name:e.name,sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId,webhookUrl:e.hookUrl}));let e=S.stepInput===void 0?a:queueDeferredStepInput(a,S.stepInput);return{next:null,session:{...e,state:setPendingAuthorization(e.state,{challenges:S.challenges})}}}let C=resolvePendingInput({deferMessagesWhileApprovalsPending:e.mode!==`conversation`,history:h.messages,resolveApprovalKey:resolveApprovalKeyFromTools(x),session:a,stepInput:S.stepInput});if(C.outcome===`unresolved`){let t=h.outcome===`resolved`?{...C.session,history:[...h.messages]}:C.session;if(p&&e.mode===`conversation`&&C.deferredMessage===!0&&hasStepInput(r)){c!==void 0&&prepareDynamicInstructionPreamble(c,projectHistory(t.history,t.state));let n=[];try{let t=await preparePreambleTrace();s=await emitTurnPreamble(p,y??{},s,e.runtimeIdentity,t)}catch(e){return n=c===void 0?[]:drainDynamicInstructionUserMessages(c),t={...t,history:[...t.history,...n]},a=t,failBoundaryEvent(e,{sessionStarted:!0,sequence:s.sequence,stepIndex:0,turnId:`turn_${s.sequence}`})}return n=c===void 0?[]:drainDynamicInstructionUserMessages(c),t={...t,history:[...t.history,...n]},s=await emitTurnEpilogue(p,s,e.mode),{next:null,session:setHarnessEmissionState(t,s)}}return h.outcome===`resolved`?(p&&e.mode===`conversation`&&(s=await emitTurnEpilogue(p,s,e.mode),t=setHarnessEmissionState(t,s)),{next:null,session:t}):{next:null,session:C.session}}if(C.resolvedInputs!==void 0)for(let e of C.resolvedInputs)await i?.publishInputResolutions({batch:e,sessionId:a.sessionId}),p&&await p(createInputResolvedEvent({resolutions:e.inputs.map(e=>{let t={kind:e.request.kind,outcome:e.outcome,requestId:e.request.requestId};return e.response===void 0?t:{...t,response:e.response}}),sequence:e.event.sequence,stepIndex:e.event.stepIndex,turnId:e.event.turnId}));if(p&&C.rejectedActions)for(let e of C.rejectedActions)for(let t of e.results)await p(createActionResultEvent({rejected:!0,result:t,sequence:e.event.sequence,stepIndex:e.event.stepIndex,turnId:e.event.turnId}));let w=activeTurnId(s),T=getTurnClientContextState(C.session.state,w),E=C.deferredContext===!0?void 0:readClientContext(v),D=(E??T?.messages)?.map(e=>({content:e,role:`user`}))??[],O=[];if(v?.context!==void 0&&C.deferredContext!==!0)for(let e of v.context)O.push({content:e,role:`user`});let k=normalizeUserContent(v?.message),A=k!==void 0&&!C.deferredMessage&&!C.consumedMessage?await stageAttachmentsToSandbox(k):void 0;A!==void 0&&O.push({content:A,role:`user`});let j=[],M;if(p&&hasStepInput(r)){c!==void 0&&(prepareDynamicInstructionPreamble(c,projectHistory(C.session.history,C.session.state)),prepareMemoryPreamble(c,{history:C.messages,input:[...D,...O],state:C.session.state}));try{let t=await preparePreambleTrace();s=await emitTurnPreamble(p,y??{},s,e.runtimeIdentity,t)}catch(e){return j=c===void 0?[]:drainDynamicInstructionUserMessages(c),M=c===void 0?void 0:drainMemoryCommit(c),a={...C.session,history:[...M?.history??C.session.history,...j],state:M?.state??C.session.state},failBoundaryEvent(e,{sessionStarted:!0,sequence:s.sequence,stepIndex:0,turnId:`turn_${s.sequence}`})}j=c===void 0?[]:drainDynamicInstructionUserMessages(c),M=c===void 0?void 0:drainMemoryCommit(c),i?.setTurnId(s.turnId)}let N=M?.history??C.session.history,ee=C.session.history.length;a=setHarnessEmissionState({...C.session,history:[...N,...j],state:M?.state??C.session.state},s);let P=[...M?.history??C.messages.slice(0,ee),...j,...M===void 0?C.messages.slice(ee):[]],F=await applySessionLimitContinuation({config:e,emit:p,emissionState:s,limitContinuation:C.limitContinuation,session:a});if(F.result!==null)return F.result;a=F.session;let I=getAgentHandleStore(a.state);if(!hasUnansweredToolCall(P)){let e=await c?.get(BackgroundToolExecutorKey)?.readAgentViews?.(),t=e===void 0||e.length===0?void 0:[...projectParkedAgentHandles(I??{handles:[]}).map(e=>({availability:`available`,id:e.identity.id,name:e.identity.name,statusLine:e.phase===`parked`?e.lastStatus:void 0})),...e],n=resolveAgentsAnnouncement({agentViews:t,messages:projectHistory(P,a.state),store:I});n!==void 0&&P.push({content:n,role:`user`})}let L=T;(E!==void 0||T===void 0&&O.length>0)&&(L={insertionIndex:T?.insertionIndex??P.length,messages:E??T?.messages??[],turnId:w}),L!==void 0&&(a=setTurnClientContextState(a,L)),P=[...P,...O];let createModelMessages=e=>{if(L===void 0||L.messages.length===0)return[...e];let t=Math.min(Math.max(0,L.insertionIndex),e.length);return[...e.slice(0,t),...L.messages.map(e=>({content:e,role:`user`})),...e.slice(t)]},R=projectHistory(createModelMessages(P),a.state),z=c,B;try{z!==void 0&&e.dispatchDynamicModelEvent!==void 0&&await e.dispatchDynamicModelEvent({ctx:z,event:{data:{sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId},type:`step.started`},messages:R}),B=await resolveActiveRuntimeModel({config:e,ctx:z,session:a})}catch(e){return failModelSelection(e,s)}a=B.session;let V=B.model,H=detectPromptCachePath(V),U=H.kind===`anthropic-direct`?getAnthropicCacheMarker():void 0,te=buildGatewayAttributionHeaders(V,e.runtimeIdentity),W=L===void 0?void 0:Math.max(0,P.length-L.insertionIndex),G=await maybeCompact({abortSignal:e.abortSignal,auth:z?.get(AuthKey)??null,emit:p,emissionState:s,historyProjector:e.historyProjector,messages:[...P],model:V,onCompaction:e.onCompaction,promptMessages:createModelMessages(P),resolveModel:e.resolveModel,runtimeIdentity:e.runtimeIdentity,session:a,telemetry:i?.telemetry()});if(a=G.session,G.compacted&&(P=G.messages,L!==void 0&&W!==void 0&&(L={...L,insertionIndex:Math.max(0,P.length-W)},a=setTurnClientContextState(a,L))),R=normalizeModelMessages(projectHistory(createModelMessages(P),a.state)),p)try{await emitStepStarted(p,s,requireSessionModelReference(a).id,R)}catch(e){return failBoundaryEvent(e,s)}let K=getApprovedTools(a,resolveApprovalKeyFromTools(buildResponseAuthorizationTools({authoredTools:e.tools,context:z}))),q=s.sequence===0,ne=q&&z?.get(ScheduleIdKey)!==void 0,J=resolveDeliveryPolicy({hasScheduleProvenance:ne,hasOutputSchema:a.outputSchema!==void 0,isChild:z?.get(ParentSessionKey)!==void 0,isFirstTurn:q,taskDeliveryPhase:z?.get(TurnTaskDeliveryKey)}),Y=createCurrentMessages(R,{currentTurnMessages:L===void 0?O:P.slice(L.insertionIndex)});if(z!==void 0){Y.addSystem(buildDynamicInstructionMessages(z));let e=z.get(PendingSkillAnnouncementKey);e!==void 0&&e.length>0&&Y.add(s.sequence,e);let t=z.get(TurnTaskStateKey);t!==void 0&&Y.add(s.sequence,t)}J.instruction!==void 0&&Y.add(s.sequence,J.instruction);let re=renderPendingApprovalsInstruction(getPendingInputBatches(a.state).flatMap(e=>e.requests));re!==void 0&&Y.add(s.sequence,re,{cacheFriendly:!1});let X=await hydrateSandboxAttachments(Y.nonSystemMessages),prepareModelCallInput=e=>{let t=e?[{role:`system`,content:e}]:[],n=a.agent.system?[{role:`system`,content:a.agent.system}]:[],r=Y.systemMessages.length>0||t.length>0?[...t,...n,...Y.systemMessages]:void 0,o=r!==void 0&&U?applySystemCacheBreakpoint(r,U):r,c=o===void 0?a.agent.system??void 0:mergeSystemInstructions(o);return{instructions:c,telemetryRuntimeContext:i?.resolveRuntimeContext({eveVersion,emissionState:s,environment,modelInput:{instructions:c,messages:X},session:a})}},ie=e.tools,runSingleModelCall=async t=>{let{instructions:n,telemetryRuntimeContext:r={}}=t.preparedInput??prepareModelCallInput(t.extraSystemNote);t.retryReason&&(r[`eve.retry.reason`]=t.retryReason);let o=t.trailingUserNote?[...X,{role:`user`,content:t.trailingUserNote}]:[...X],c=buildHarnessToolsWithDynamicSubagents(e.tools,z),l=createBackgroundToolCallBatch(),u=getAdvertisedTools({session:a,tools:c});ie=u;let d=await buildToolSetWithProviderTools({approvedTools:K,backgroundBatch:l,capabilities:e.capabilities,disabledProviderTools:t.disabledProviderTools,modelReference:requireSessionModelReference(a),tools:u});if(z!==void 0){let n=getAdvertisedTools({session:a,tools:buildDynamicTools(z)}),r=buildToolSetFromDefinitions({approvedTools:K,backgroundBatch:l,capabilities:e.capabilities,disabledProviderTools:t.disabledProviderTools,tools:n});for(let[e,t]of Object.entries(r)){let n=u.get(e);if(n?.runtimeAction!==void 0||n?.workflowId!==void 0)throw Error(`Dynamic tool "${e}" collides with a coordination-visible deferred tool.`);d[e]=t}}a.outputSchema!==void 0&&(d[FINAL_OUTPUT_TOOL_NAME]=buildFinalOutputTool(a.outputSchema));let m=e.workflow===!0?{maxSubagents:e.workflowMaxSubagents}:void 0,h=await getAdvertisedTools({modelTools:d,session:a,tools:u,workflow:m});a=h.session;let g=h.modelTools,_=U?applyLastToolCacheBreakpoint(g,U):g,v=activeTurnId(s),y=i?.prepareAttempt({attemptIndex:t.attemptIndex,runtimeContext:r,stepIndex:s.stepIndex,turnId:v});f=y?.scope;let b=buildStepHooks({auth:z?.get(AuthKey)??null,cachePath:H,emit:p,emissionState:s,emitStepStarted:t.suppressStepStartedEmission!==!0,marker:U,session:a}),x={headers:te,instructions:n,model:V,onLanguageModelCallEnd(e){for(let t of e.content)t.type!==`tool-call`||t.providerExecuted===!0||isInvalidToolCall(t)||l.register({callId:t.toolCallId,input:t.input,toolName:t.toolName})},onToolExecutionEnd:logToolExecutionError,onError(e){summarizeKnownError(e.error)?.tags.includes(`config`)!==!0&&logError(log,`tool-loop stream error`,e.error)},onStepFinish:b.onStepFinish,prepareStep:b.prepareStep,reasoning:a.agent.reasoning,runtimeContext:r,stopWhen:isStepCount(1),telemetry:y?.telemetry,toolApproval:buildToolApproval(g),tools:_},S=new ToolLoopAgent(x),executeModelCall=async()=>{if(p){let t=[...e.tools].filter(([e,t])=>t.runtimeAction!==void 0&&u.get(e)===void 0).map(([e])=>e),n=new Set([ASK_QUESTION_TOOL_NAME,FINAL_OUTPUT_TOOL_NAME,...t]),r=await S.stream({abortSignal:e.abortSignal,messages:o}),{emittedActionCallIds:i,handledInlineToolResultCallIds:a,invalidInputToolCallIds:c,inlineAuthorizationResults:l,trailingInlineToolResultParts:d}=await emitStreamContent(p,s,r.fullStream,{excludedActionToolNames:n,tools:u});throwIfTurnAborted(e.abortSignal);let[f,m]=await Promise.all([b.stepResult,r.responseMessages]);if(isEmptyModelResponse(f)&&extractToolResultCallIds(m).size===0&&l.length===0&&d.length===0)throw new EmptyModelResponseError;await emitStepActions(p,s,f,{emittedActionCallIds:i,excludedActionCallIds:c,excludedActionToolNames:n,handledInlineToolResultCallIds:a,tools:u});let h=f.toolResults,g=new Map(h.map(e=>[e.toolCallId,e]));for(let e of l)g.set(e.toolCallId,e);return withAccumulatedResponseMessages({invalidInputToolCallIds:c,responseMessages:appendMissingToolResultMessages({append:d,responseMessages:m}),stepResult:f,toolResults:[...g.values()]})}let t=await S.generate({abortSignal:e.abortSignal,messages:o});throwIfTurnAborted(e.abortSignal);let n=await b.stepResult;if(isEmptyModelResponse(n)&&extractToolResultCallIds(t.responseMessages).size===0)throw new EmptyModelResponseError;return withAccumulatedResponseMessages({responseMessages:t.responseMessages,stepResult:n})};try{let e=await executeModelCall();return await y?.complete(),e}catch(e){return await y?.fail(e),rethrowNoOutputAsEmptyResponse(e)}},ae=0,runOneModelCall=async t=>runModelCallWithRetries(e=>runSingleModelCall({...t,attemptIndex:ae++,preparedInput:e===1?t.preparedInput:void 0,suppressStepStartedEmission:e!==1||t.suppressStepStartedEmission}),{sessionId:a.sessionId,turnId:s.turnId},e.abortSignal),oe=prepareModelCallInput(),se=await continuePendingWorkflowInterrupt({childResults:v?.runtimeActionResults,config:e,emit:p,emissionState:s,runStep,session:a,tools:buildHarnessToolsWithDynamicSubagents(e.tools,z)});if(se!==null)return se;let ce=await enforceSessionUsageLimit({config:e,emit:p,emissionState:s,messages:R,session:a});if(ce!==null)return ce;let Z;try{Z=await runOneModelCall({preparedInput:oe,suppressStepStartedEmission:!0})}catch(t){throwIfTurnAborted(e.abortSignal);let n=await runModelCallRecoveryPipeline({error:t,stages:[e=>attemptUnsupportedProviderToolRecovery({error:e.error,runOneModelCall,sessionId:a.sessionId,turnId:s.turnId}),e=>attemptEmptyResponseRecovery({emptyDeliveryEnabled:J.allowsEmptyDelivery,error:e.error,retryCallOptions:e.retryCallOptions,runOneModelCall,sessionId:a.sessionId,turnId:s.turnId})]});if(throwIfTurnAborted(e.abortSignal),n.outcome===`recovered`)Z=n.result;else{let t=n.error;if(i?.recordError(t),!p)throw t;let r=extractWorkflowStreamWriteErrorDetails(t);if(r!==null){let e=createErrorId();return log.error(`workflow stream write failed — parking session for retry by the user`,{...r,errorId:e,error:t,sessionId:a.sessionId,turnId:s.turnId}),s=await emitRecoverableFailedTurn(p,s,{code:`WORKFLOW_STREAM_WRITE_FAILED`,continuationToken:a.continuationToken,details:{...r,errorId:e},message:toErrorMessage(t)}),{next:null,session:setHarnessEmissionState(a,s)}}let o=classifyModelCallError(t),c=createErrorId(),l=summarizeKnownError(t),u=l===null?extractUpstreamRejectionMessage(t):null,f=l?.message??u?.message??toErrorMessage(t),m=l?.hint===void 0?f:`${f} ${l.hint}`,h=extractModelCallErrorDetails(t),g=buildModelCallFailureDetails({catalogSummary:l,error:t,errorId:c,modelCallDetails:h,upstreamRejection:u}),_=buildModelCallFailureLogFields({error:t,errorId:c,modelCallDetails:h,recognized:l!==null||u!==null,sessionId:a.sessionId,turnId:s.turnId});if(o===`terminal`)return l===null?log.error(u?.message??`model call failed terminally`,_):log.error(`${l.name}: ${l.message}`,{errorId:c,hint:l.hint,sessionId:a.sessionId,turnId:s.turnId}),await emitFailedStep(p,s,{code:`MODEL_CALL_FAILED`,details:g,message:f,sessionId:a.sessionId}),{next:e.mode===`task`||d?{done:!0,isError:!0,output:m}:{done:!0,output:``},session:a};if(e.mode===`task`){if(o===`recoverable`&&!(t instanceof EmptyModelResponseError))throw log.warn(u?.message??`model call failed recoverably in task mode — rethrowing for durable step retry`,_),t;return log.error(u?.message??`model call failed; failing the task run`,_),await emitFailedStep(p,s,{code:`MODEL_CALL_FAILED`,details:g,message:f,sessionId:a.sessionId}),{next:{done:!0,isError:!0,output:m},session:a}}log.error(u?.message??`model call failed — parking session for retry by the user`,_),s=await emitRecoverableFailedTurn(p,s,{code:`MODEL_CALL_FAILED`,continuationToken:a.continuationToken,details:g,message:f});let v={isError:!0,output:m};return a={...a,outputSchema:void 0},{next:null,session:setHarnessEmissionState(a,s),settledTurn:v}}}let Q=accumulateTurnUsage({previous:getTurnUsageState(a.state),turnId:s.turnId,usage:extractTokenUsageDelta({costUsd:extractGatewayCostUsd(Z.providerMetadata),usage:Z.usage})});a=setTurnUsageState(a,Q);let $;try{$=formatLanguageModelGatewayId(V)}catch{$=void 0}return await setEveAttributes({"$eve.model":$,"$eve.input_tokens":Q.inputTokens,"$eve.output_tokens":Q.outputTokens,"$eve.cache_read_tokens":Q.cacheReadTokens,"$eve.cache_write_tokens":Q.cacheWriteTokens,"$eve.cost_usd":Q.sawCost?Q.costUsd:void 0,"$eve.tool_count":e.tools.size}),handleStepResult({config:e,emit:p,emissionState:s,durableModelPromptMessageCount:L===void 0||L.messages.length===0?R.length:void 0,promptMessages:P,result:Z,runStep,session:a,coordinationTools:ie})}return runStep}function extractTokenUsageDelta(e){let t=e.usage;if(t!==void 0||e.costUsd!==void 0)return{cacheReadTokens:t?.inputTokenDetails?.cacheReadTokens,cacheWriteTokens:t?.inputTokenDetails?.cacheWriteTokens,costUsd:e.costUsd,inputTokens:t?.inputTokens,outputTokens:t?.outputTokens}}function extractGatewayCostUsd(e){let t=readGatewayMetadata(e)?.cost;if(typeof t==`number`&&Number.isFinite(t))return t;if(typeof t==`string`){let e=Number(t);return Number.isFinite(e)?e:void 0}}function readGatewayMetadata(e){let t=e?.gateway;return t&&typeof t==`object`&&!Array.isArray(t)?t:void 0}function buildModelCallFailureDetails(e){let{catalogSummary:t,error:n,errorId:r,modelCallDetails:i,upstreamRejection:a}=e;if(t!==null){let e={errorId:r,message:t.message,name:t.name,semanticErrorId:t.id,...i};return t.hint!==void 0&&(e.hint=t.hint),e}return a===null?{...formatError(n,r),...i}:{errorId:r,message:toErrorMessage(n),name:a.name,...i}}function buildModelCallFailureLogFields(e){let t={errorId:e.errorId,sessionId:e.sessionId,turnId:e.turnId};return e.recognized?{...t,details:e.modelCallDetails}:{...t,error:e.error}}async function runModelCallRecoveryPipeline(e){let t=e.error,n;for(let r of e.stages){let e=await r({error:t,retryCallOptions:n});if(e.outcome===`recovered`)return e;e.outcome===`failed`&&(t=e.error,n=e.retryCallOptions)}return{outcome:`failed`,error:t}}function withAccumulatedResponseMessages(e){let{stepResult:t}=e;return{content:t.content,finishReason:t.finishReason,...e.invalidInputToolCallIds===void 0?{}:{invalidInputToolCallIds:e.invalidInputToolCallIds},providerMetadata:t.providerMetadata,response:{...t.response,messages:[...e.responseMessages]},text:t.text,toolCalls:t.toolCalls,toolResults:e.toolResults===void 0?t.toolResults:[...e.toolResults],usage:t.usage}}function appendMissingToolResultMessages(e){let t=extractToolResultCallIds(e.responseMessages),n=e.append.filter(e=>!t.has(e.toolCallId));return[...e.responseMessages,...n.length>0?[{role:`tool`,content:[...n]}]:[]]}function getInvalidToolCallInputErrors(e){let t=[];for(let n of e.toolCalls){if(n.toolName===FINAL_OUTPUT_TOOL_NAME)continue;let e=getInvalidToolCallInputError({toolCall:n});e!==void 0&&t.push(e)}return t}function extractToolResultCallIds(e){let t=new Set;for(let n of e)if(Array.isArray(n.content))for(let e of n.content)typeof e==`object`&&e&&e.type===`tool-result`&&t.add(e.toolCallId);return t}function hasUnansweredToolCall(e){let t=new Set,n=new Set;for(let r of e)if(Array.isArray(r.content))for(let e of r.content)typeof e==`object`&&e&&(e.type===`tool-call`&&t.add(e.toolCallId),e.type===`tool-result`&&n.add(e.toolCallId));for(let e of t)if(!n.has(e))return!0;return!1}async function attemptUnsupportedProviderToolRecovery(e){let t=extractUnsupportedProviderToolTypes(e.error);if(t.length===0)return{outcome:`skipped`};let n=[];for(let e of t){let t=resolveFrameworkToolFromUpstreamType(e);t!==null&&!n.includes(t)&&n.push(t)}if(n.length===0)return{outcome:`skipped`};log.warn(`disabling unsupported provider tool(s); retrying step once`,{disabled:n,sessionId:e.sessionId,turnId:e.turnId,upstreamTypes:t});let r={disabledProviderTools:new Set(n),extraSystemNote:buildDisabledToolNote(n)};try{return{outcome:`recovered`,result:await e.runOneModelCall({...r,suppressStepStartedEmission:!0})}}catch(e){return{outcome:`failed`,error:e,retryCallOptions:r}}}function buildDisabledToolNote(e){let t=e.join(`, `);return`The following ${e.length===1?`tool is`:`tools are`} not available with the current model and has been removed: ${t}. Proceed using the remaining tools or your training knowledge.`}function isEmptyModelResponse(e){return e.toolCalls.length===0&&e.toolResults.length===0&&resolveAssistantStepText(e.response.messages,e.text)===null}function rethrowNoOutputAsEmptyResponse(e){throw isNoOutputGeneratedError(e)?new EmptyModelResponseError({cause:e}):e}const EMPTY_RESPONSE_NUDGE=`Your previous reply was empty and was not delivered. Answer now from the tool results above; do not re-run tools or mention this notice.`;function buildEmptyResponseNudge(e){return e?`${EMPTY_RESPONSE_NUDGE} If the current task explicitly requires conditional delivery and there is nothing to report, reply with exactly ${EMPTY_DELIVERY_SENTINEL}.`:EMPTY_RESPONSE_NUDGE}async function attemptEmptyResponseRecovery(e){if(!(e.error instanceof EmptyModelResponseError))return{outcome:`skipped`};log.warn(`empty model response; reissuing the model call once`,{sessionId:e.sessionId,turnId:e.turnId});try{return{outcome:`recovered`,result:await e.runOneModelCall({...e.retryCallOptions,retryReason:`empty-response`,suppressStepStartedEmission:!0,trailingUserNote:buildEmptyResponseNudge(e.emptyDeliveryEnabled)})}}catch(t){return{outcome:`failed`,error:t,retryCallOptions:e.retryCallOptions}}}async function handleStepResult(e){let{config:t,emit:n,promptMessages:r,result:i,runStep:a}=e,{emissionState:o,session:s}=e,c=resolveAssistantStepText(i.response.messages,i.text),l=i.finishReason!==`tool-calls`&&i.toolCalls.length===0&&hasEmptyDeliverySentinel(c),u=getInvalidToolCallInputErrors({toolCalls:i.toolCalls}),d=new Set([...i.invalidInputToolCallIds??[],...i.toolCalls.filter(isInvalidToolCall).map(e=>e.toolCallId),...u.map(e=>e.toolCallId)]),f=l?[]:appendMissingToolResultMessages({append:u.map(e=>createToolResultMessagePartFromToolError(e)),responseMessages:i.response.messages}),p=l?null:c,m=new Set;for(let e of[...i.content??[],...i.toolResults??[]])(e.type===`tool-result`||e.type===`tool-error`)&&e.providerExecuted===!0&&m.add(e.toolCallId);let h=normalizeProviderToolHistory({messages:f,providerExecutedOutcomeIds:m}),g=h.messages,_={...s,compaction:createNextCompactionConfig(s.compaction,e.durableModelPromptMessageCount,i)},v=t.workflow===!0?readWorkflowContinuationSecurity(_):void 0;if(v!==void 0){let t=await getWorkflowSandboxInterrupt(i,v);if(t!==void 0){if(!isWorkflowTaskInterrupt(t))throw Error(`Unsupported Workflow interrupt kind "${t.payload.kind}".`);return await parkOnWorkflowInterrupt({baseSession:_,emit:n,emissionState:o,interrupt:t,promptMessages:r,responseMessages:g,tools:e.coordinationTools,usedCalls:0})}}let y=extractToolApprovalInputRequests({content:i.content??[],excludedCallIds:d}),b=new Set(y.map(e=>e.action.callId)),x=extractQuestionInputRequests({toolCalls:i.toolCalls,excludedCallIds:new Set([...d,...b]),tools:e.coordinationTools}),S=[...y,...x],C=renderPendingApprovalsSnippet(y),w=g.findIndex(e=>e.role!==`tool`),T=w===-1?g:g.slice(0,w),E=g.slice(T.length),D=[...r,...T,...C===void 0?[]:[{content:C,role:`user`}]],O=getAdvertisedTools({session:_,tools:e.coordinationTools}),k=(i.toolCalls??[]).filter(e=>!d.has(e.toolCallId)).filter(t=>isDeferredHarnessTool(e.coordinationTools.get(t.toolName))).filter(e=>isDeferredHarnessTool(O.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:O}));if(k.length>0){let e=k.flatMap(e=>e.kind===`runtime-action`?[e.request]:[]),t=k.flatMap(e=>e.kind===`task`?[e.request]:[]);if(S.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:[...r]}}),advanceStep(o))};let i=setPendingCoordinationBatch({runtimeActions:e,tasks:t,event:{sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId},responseMessages:E,session:{..._,history:D}});return i=appendPendingInputBatch({event:{sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId},requests:S,responseMessages:[],session:i}),n&&await n(createInputRequestedEvent({requests:S,sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId})),{next:null,session:setHarnessEmissionState(i,advanceStep(o))}}if(S.length>0){let e=buildResponseAuthorizationTools({authoredTools:t.tools,context:contextStorage.getStore()}),r=appendPendingInputBatch({event:{sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId},requests:S,responseAuthRequiredRequestIds:y.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:E,session:{..._,history:D}});return n&&(await n(createInputRequestedEvent({requests:S,sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId})),t.mode===`conversation`&&(o=await emitTurnEpilogue(n,o,t.mode),r=setHarnessEmissionState(r,o))),{next:hasDeferredStepInput(r)?a:null,session:r}}let A=resolveInlineAuthorizationInterrupt({messages:[...r,...g],toolResults:i.toolResults});if(A){let{challenges:e,history:r}=A;if(n){for(let t of getSupersededAuthorizationChallenges(_.state,e))await n(createAuthorizationCompletedEvent({attemptId:t.attemptId,authorization:t.challenge,name:t.name,outcome:`failed`,reason:`Superseded by a newer authorization attempt.`,sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId}));for(let t of e)await n(createAuthorizationRequiredEvent({attemptId:t.attemptId,authorization:t.challenge,name:t.name,description:t.challenge.instructions??`Authorization required for ${t.name}`,webhookUrl:t.hookUrl,sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId}));t.mode===`conversation`&&(o=await emitTurnEpilogue(n,o,t.mode))}return{next:null,session:setHarnessEmissionState({..._,history:r,state:setPendingAuthorization(_.state,{challenges:e})},o)}}let j=g,M=[...r,...j],N={..._,history:M};return(N.outputSchema===void 0||extractFinalOutput(i)===void 0)&&(j.at(-1)?.role===`tool`||h.outcomeEndsResponse||hasDeferredStepInput(N))?(n&&(o=advanceStep(o),N=setHarnessEmissionState(N,o)),{next:a,session:N}):t.mode===`task`?finishTaskTurn({emissionState:o,emit:n,history:r,result:i,schema:N.outputSchema,session:N,stepOutput:p}):finishConversationTurn({emissionState:o,emit:n,history:r,result:i,schema:N.outputSchema,session:N,stepOutput:p})}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}}}async function continuePendingWorkflowInterrupt(e){let t=getPendingWorkflowInterrupt(e.session.state);if(t===void 0)return null;let n=t.interrupt;if(!isWorkflowTaskInterrupt(n))throw Error(`Unsupported Workflow interrupt kind "${n.payload.kind}".`);let r=e.childResults??[],i=getWorkflowTaskInterrupts(n);e.emit!==void 0&&r.length>0&&await emitWorkflowActionResults({emit:e.emit,emissionState:e.emissionState,interrupts:i,results:r});let a=getWorkflowContinuationSecurity(e.session),o;try{let t=buildWorkflowHostTools({tools:e.tools}),i=n,s=0;for(;;){o=await continueWorkflowSandboxInterrupt({bridgeRequestLimit:resolveWorkflowSandboxBridgeRequestLimit(e.config.workflowMaxSubagents),continuationSecurity:a,interrupt:i,resolution:r[s]?.output,tools:t});let n=await unwrapWorkflowSandboxResult(o,a);if(n.status!==`interrupted`||!isWorkflowTaskInterrupt(n.interrupt)||s+1>=r.length)break;let c=getWorkflowTaskInterrupts(n.interrupt)[0];if(c===void 0)throw Error(`Workflow continuation contains no pending workflow-task interrupt.`);s++,i=c}}catch(e){logError(log,`Workflow interrupt continuation failed`,e),o={error:`workflow_continuation_failed`,message:toErrorMessage(e),retryable:!1}}let s=await unwrapWorkflowSandboxResult(o,a),c=s.status===`interrupted`?s.interrupt:s.output,l=replaceWorkflowToolResult([...e.session.history,...t.responseMessages],n.outerToolCallId,c),u=clearPendingWorkflowInterrupt({...e.session,history:l});if(s.status===`interrupted`){if(!isWorkflowTaskInterrupt(s.interrupt))throw Error(`Unsupported Workflow interrupt kind "${s.interrupt.payload.kind}".`);let n=e.session.history.length,r=l.slice(0,n),i=l.slice(n);return u={...u,history:r},await parkOnWorkflowInterrupt({baseSession:u,emit:e.emit,emissionState:e.emissionState,interrupt:s.interrupt,promptMessages:r,responseMessages:i,tools:e.tools,usedCalls:t.usedCalls})}return{next:e.runStep,session:u}}function replaceWorkflowToolResult(e,t,n){if(t===void 0)return[...e];let r=typeof n==`string`?{type:`text`,value:n}:{type:`json`,value:n};return e.map(e=>{if(e.role!==`tool`)return e;let n=e.content.map(e=>e.type!==`tool-result`||e.toolCallId!==t?e:{...e,output:r});return{...e,content:n}})}async function parkOnWorkflowInterrupt(e){let t=getWorkflowTaskInterrupts(e.interrupt),n=t[0];if(n===void 0)throw Error(`Workflow continuation contains no pending workflow-task interrupt.`);e.emit!==void 0&&await emitWorkflowActionsRequested({emit:e.emit,emissionState:e.emissionState,interrupts:t,tools:e.tools});let r={...e.baseSession,history:[...e.promptMessages]},i=setPendingWorkflowInterrupt({interrupt:n,responseMessages:e.responseMessages,session:r,usedCalls:e.usedCalls});return{next:null,session:setHarnessEmissionState(i,e.emissionState)}}function createNextCompactionConfig(e,t,n){let r={recentWindowSize:e.recentWindowSize,threshold:e.threshold,thresholdPercent:e.thresholdPercent};return n.usage?.inputTokens!==void 0&&t!==void 0&&(r.lastKnownInputTokens=n.usage.inputTokens,r.lastKnownPromptMessageCount=t),r}async function maybeCompact(e){let{emit:t,emissionState:n}=e,r=e.messages,i=e.session,a=e.promptMessages??r,o=e.historyProjector?.({messages:a,state:i.state})??a,s=e.force===!0||shouldCompact(o,i.compaction),c=shouldCanonicalizeMemory(r);if(!s&&!c)return{compacted:!1,messages:r,session:i};let l=await resolveCompactionModel({compactionModelReference:i.agent.compactionModelReference,model:e.model,modelReference:requireSessionModelReference(i),resolveModel:e.resolveModel}),u=i.agent.compactionModelReference??requireSessionModelReference(i),d=mergeProviderSafetyIdentifier(u,l.providerOptions,e.auth);if(t){let e=contextStorage.getStore();e!==void 0&&prepareMemoryCompaction(e,{history:r,state:i.state}),await t(createCompactionRequestedEvent({modelId:formatLanguageModelGatewayId(l.model),sequence:n.sequence,sessionId:i.sessionId,turnId:n.turnId,usageInputTokens:getInputTokenCount(o,i.compaction)}),o)}let f=canonicalizeMemoryRecords(r),p=e.historyProjector?.({messages:f.ordinary,state:i.state})??f.ordinary,m=s?await compactMessages([...p],l.model,i.compaction,d,e.telemetry,buildGatewayAttributionHeaders(l.model,e.runtimeIdentity),e.abortSignal,e.force===!0):[...p];if(r=[...f.memory,...m],e.onCompaction)for(let t of e.onCompaction())r.push(t);if(t){let a=contextStorage.getStore();if(a!==void 0&&prepareMemoryCompaction(a,{history:r,state:i.state}),await t(createCompactionCompletedEvent({modelId:formatLanguageModelGatewayId(l.model),sequence:n.sequence,sessionId:i.sessionId,turnId:n.turnId}),e.historyProjector?.({messages:r,state:i.state})??r),a!==void 0){let e=drainMemoryCommit(a);e!==void 0&&(r=[...e.history],i={...i,state:e.state})}}return{compacted:!0,messages:r,session:i}}function resolveApprovalKeyFromTools(e){return t=>{let n=e.get(t.action.toolName);if(n?.approvalKey!==void 0)return n.approvalKey(t.action.input)}}async function runModelCallWithRetries(e,t,n){for(let r=1;;r++){throwIfTurnAborted(n);try{return await e(r)}catch(e){if(throwIfTurnAborted(n),r===3||classifyModelCallError(e)!==`retry`)throw e;let i=500*2**(r-1)+Math.floor(Math.random()*250);log.warn(`model call failed transiently — retrying`,{attempt:r,delayMs:i,sessionId:t.sessionId,turnId:t.turnId,error:e}),await new Promise(e=>setTimeout(e,i))}}}export{appendMissingToolResultMessages,createToolLoopHarness};
3
+ `)};return t!==void 0&&(n.providerOptions=t),n}function buildGatewayAttributionHeaders(e,t){let n=resolveProviderHeaders(e);if(n===void 0)return;let r=t?.agentName??t?.agentId,i=process.env.VERCEL_PROJECT_PRODUCTION_URL||process.env.VERCEL_URL,a=i?`https://${i}`:void 0,o={...n};return r&&(o[`x-title`]=r),a&&(o[`http-referer`]=a),o}async function resolveActiveRuntimeModel(e){if(e.ctx===void 0){let t=e.session.agent.modelReference;if(t===void 0)throw Error(`Dynamic model selection is unavailable outside an eve runtime context.`);return{model:await e.config.resolveModel(t),session:e.session}}let t=getActiveDynamicModelSelection(e.ctx);if(t===null){let t=e.session.agent.modelReference;if(e.session.agent.dynamicModel===!0||t===void 0)throw Error(`Dynamic model selection is required before model-dependent work begins. Add a matching resolver handler that returns a concrete model.`);return{model:await e.config.resolveModel(t),session:e.session}}return{model:t.model===void 0?await e.config.resolveModel(t.reference):t.model,session:updateSessionModelReference(e.session,t.reference)}}function updateSessionModelReference(e,t){return{...e,agent:{...e.agent,modelReference:t},compaction:updateCompactionThresholdForModelReference({compaction:e.compaction,modelReference:t})}}function updateCompactionThresholdForModelReference(e){return e.modelReference.contextWindowTokens===void 0?e.compaction:{...e.compaction,threshold:Math.max(1,Math.floor(e.modelReference.contextWindowTokens*(e.compaction.thresholdPercent??.9)))}}function buildHarnessToolsWithDynamicSubagents(e,t){let n=new Map(e);if(t===void 0)return n;for(let e of buildDynamicSubagentTools(t)){if(n.has(e.name))throw Error(`Dynamic subagent "${e.name}" collides with another runtime-visible tool name.`);n.set(e.name,e)}return n}function createToolLoopHarness(e){let t=e.handleEvent;async function runStep(t,n){return e.instrumentation?.runStep({environment,eveVersion,hasInput:hasStepInput(n),session:t},e=>executeStepBody(e.session,n,e))??executeStepBody(t,n)}async function executeStepBody(n,r,i){let a=n,o=createHistoryViewPreparer({previous:e.historyView,projector:e.historyProjector});o(a.history,a.state);let projectHistory=(e,t)=>o(e,t).messages,s=getHarnessEmissionState(a.state),c=contextStorage.getStore(),l=c?.get(ParentSessionKey),u=c?.get(SessionCallbackKey),d=l!==void 0||u!==void 0,f,p=i?.createHandleEvent({getAttemptScope:()=>f,handleEvent:t,turnId:activeTurnId(s)})??t,failModelSelection=async(t,n)=>{if(throwIfTurnAborted(e.abortSignal),i?.recordError(t),!p)throw t;let r=createErrorId(),o=toErrorMessage(t);return log.error(`model selection failed terminally`,{error:t,errorId:r,sessionId:a.sessionId,turnId:n.turnId}),await emitFailedStep(p,n,{code:`MODEL_SELECTION_FAILED`,details:{errorId:r},message:o,sessionId:a.sessionId}),{next:e.mode===`task`||d?{done:!0,isError:!0,output:o}:{done:!0,output:``},session:a}},failBoundaryEvent=async(t,n)=>{if(throwIfTurnAborted(e.abortSignal),isTurnCancellation(t))throw t;if(isDynamicModelSelectionError(t))return failModelSelection(t,n);if(!p||e.mode!==`conversation`||!(t instanceof BoundaryHookError))throw t;i?.recordError(t);let r=createErrorId(),o=toErrorMessage(t);return log.error(`turn boundary handler failed — parking session`,{error:t,errorId:r,sessionId:a.sessionId,turnId:n.turnId}),s=await emitRecoverableFailedTurn(p,n,{code:`EVENT_HANDLER_FAILED`,continuationToken:a.continuationToken,details:{errorId:r},message:o}),{next:null,session:setHarnessEmissionState({...a,outputSchema:void 0},s),settledTurn:{isError:!0,output:o}}},preparePreambleTrace=async()=>await i?.preparePreamble({sequence:s.sequence,sessionStarted:s.sessionStarted,traceContext:i?.traceContext,turnId:`turn_${s.sequence}`});if(e.clearOnly===!0)return a={...a,state:clearMemorySessionState(a.state)},a=replaceSessionHistory(a,[]),await p?.(createContextClearedEvent({sequence:s.sequence,sessionId:a.sessionId,turnId:activeTurnId(s)})),await p?.(createSessionWaitingEvent()),{next:null,session:a};if(e.compactOnly===!0){if(a.history.length>0)try{let t=contextStorage.getStore(),n=await resolveActiveRuntimeModel({config:e,ctx:t,session:a});a=n.session,a=(await maybeCompact({abortSignal:e.abortSignal,auth:t?.get(AuthKey)??null,emit:p,emissionState:{...s,turnId:activeTurnId(s)},force:!0,historyProjector:e.historyProjector,messages:[...a.history],model:n.model,onCompaction:e.onCompaction,resolveModel:e.resolveModel,runtimeIdentity:e.runtimeIdentity,session:a,telemetry:i?.telemetry()})).session}catch(e){logError(log,`manual session compaction failed`,e,{sessionId:a.sessionId})}return await p?.(createSessionWaitingEvent()),{next:null,session:a}}let m=consumeDeferredStepInput({input:r,preferCurrentInput:e.mode!==`conversation`&&r!==void 0&&hasPendingApprovalBatch(a),session:a});a=m.session;let h=await resolvePendingCoordination({emit:p,session:a,stepInput:m.input,tools:e.tools});if(h.outcome===`unresolved`)return{next:null,session:h.session};a=h.session;let g=getPendingInputRequestIds(a.state),_=convertStaleResponsesToUserMessage({history:h.messages,pendingRequestIds:g,stepInput:dropStaleSessionLimitContinuationResponses({pendingRequestIds:g,stepInput:m.input}),tools:e.tools}),v=_.stepInput,y=_.kind===`converted`?{...v,message:_.displayMessage}:v,b=contextStorage.getStore();b!==void 0&&e.resolveStepDynamicTools!==void 0&&shouldPrepareApprovalReplayTools({session:a,stepInput:v})&&await e.resolveStepDynamicTools({ctx:b,event:createStepStartedEvent({modelId:a.agent.modelReference?.id??`dynamic`,sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId}),messages:projectHistory(h.messages,a.state)});let x=shouldPrepareApprovalReplayTools({session:a,stepInput:v})?buildResponseAuthorizationTools({authoredTools:e.tools,context:b}):e.tools,S=await coordinateApprovalDelivery({session:a,stepInput:v,tools:x});if(a=S.session,p){for(let e of S.feedback)await p(createMessageCompletedEvent({message:e,sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId}));let e=getApprovalAuditState(a.state);for(let t of e.activeCandidates.filter(e=>e.pendingEventEmitted!==!0))await p(createApprovalCandidateEvent({candidateId:t.candidateId,outcome:`pending`,requestId:t.requestId,responderPrincipalId:t.responder.principalId,sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId})),a={...a,state:markApprovalCandidatePendingEventEmitted({candidateId:t.candidateId,state:a.state})};for(let t of e.candidateHistory.filter(e=>e.eventEmitted!==!0&&e.status!==`allowed`))await p(createApprovalCandidateEvent({candidateId:t.candidateId,outcome:t.status,requestId:t.requestId,responderPrincipalId:t.responder.principalId,reason:t.reason,sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId})),a={...a,state:markApprovalCandidateHistoryEventEmitted({candidateId:t.candidateId,state:a.state})};for(let t of e.settlements.filter(e=>e.eventEmitted!==!0))await p(createApprovalSettledEvent({outcome:t.outcome===`allowed`?`approved`:`cancelled`,requestId:t.requestId,responderPrincipalId:t.actor.principalId,sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId})),a={...a,state:markApprovalSettlementEventEmitted({requestId:t.requestId,state:a.state})}}if(S.kind===`park`)return{next:null,session:a};if(S.kind===`continue-coordination`)return{next:runStep,session:S.stepInput===void 0?a:queueDeferredStepInput(a,S.stepInput)};if(S.challenges.length>0){if(p)for(let e of S.challenges)await p(createAuthorizationRequiredEvent({authorization:e.challenge,candidateId:e.candidateId,description:e.challenge.instructions??`Authorization required for ${e.name}`,name:e.name,sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId,webhookUrl:e.hookUrl}));let e=S.stepInput===void 0?a:queueDeferredStepInput(a,S.stepInput);return{next:null,session:{...e,state:setPendingAuthorization(e.state,{challenges:S.challenges})}}}let C=resolvePendingInput({deferMessagesWhileApprovalsPending:e.mode!==`conversation`,history:h.messages,resolveApprovalKey:resolveApprovalKeyFromTools(x),session:a,stepInput:S.stepInput});if(C.outcome===`unresolved`){let t=h.outcome===`resolved`?{...C.session,history:[...h.messages]}:C.session;if(p&&e.mode===`conversation`&&C.deferredMessage===!0&&hasStepInput(r)){c!==void 0&&prepareDynamicInstructionPreamble(c,projectHistory(t.history,t.state));let n=[];try{let t=await preparePreambleTrace();s=await emitTurnPreamble(p,y??{},s,e.runtimeIdentity,t)}catch(e){return n=c===void 0?[]:drainDynamicInstructionUserMessages(c),t={...t,history:[...t.history,...n]},a=t,failBoundaryEvent(e,{sessionStarted:!0,sequence:s.sequence,stepIndex:0,turnId:`turn_${s.sequence}`})}return n=c===void 0?[]:drainDynamicInstructionUserMessages(c),t={...t,history:[...t.history,...n]},s=await emitTurnEpilogue(p,s,e.mode),{next:null,session:setHarnessEmissionState(t,s)}}return h.outcome===`resolved`?(p&&e.mode===`conversation`&&(s=await emitTurnEpilogue(p,s,e.mode),t=setHarnessEmissionState(t,s)),{next:null,session:t}):{next:null,session:C.session}}if(C.resolvedInputs!==void 0)for(let e of C.resolvedInputs)await i?.publishInputResolutions({batch:e,sessionId:a.sessionId}),p&&await p(createInputResolvedEvent({resolutions:e.inputs.map(e=>{let t={kind:e.request.kind,outcome:e.outcome,requestId:e.request.requestId};return e.response===void 0?t:{...t,response:e.response}}),sequence:e.event.sequence,stepIndex:e.event.stepIndex,turnId:e.event.turnId}));if(p&&C.rejectedActions)for(let e of C.rejectedActions)for(let t of e.results)await p(createActionResultEvent({rejected:!0,result:t,sequence:e.event.sequence,stepIndex:e.event.stepIndex,turnId:e.event.turnId}));let w=activeTurnId(s),T=getTurnClientContextState(C.session.state,w),E=C.deferredContext===!0?void 0:readClientContext(v),D=(E??T?.messages)?.map(e=>({content:e,role:`user`}))??[],O=[];if(v?.context!==void 0&&C.deferredContext!==!0)for(let e of v.context)O.push({content:e,role:`user`});let k=normalizeUserContent(v?.message),A=k!==void 0&&!C.deferredMessage&&!C.consumedMessage?await stageAttachmentsToSandbox(k):void 0;A!==void 0&&O.push({content:A,role:`user`});let j=[],M;if(p&&hasStepInput(r)){c!==void 0&&(prepareDynamicInstructionPreamble(c,projectHistory(C.session.history,C.session.state)),prepareMemoryPreamble(c,{history:C.messages,input:[...D,...O],state:C.session.state}));try{let t=await preparePreambleTrace();s=await emitTurnPreamble(p,y??{},s,e.runtimeIdentity,t)}catch(e){return j=c===void 0?[]:drainDynamicInstructionUserMessages(c),M=c===void 0?void 0:drainMemoryCommit(c),a={...C.session,history:[...M?.history??C.session.history,...j],state:M?.state??C.session.state},failBoundaryEvent(e,{sessionStarted:!0,sequence:s.sequence,stepIndex:0,turnId:`turn_${s.sequence}`})}j=c===void 0?[]:drainDynamicInstructionUserMessages(c),M=c===void 0?void 0:drainMemoryCommit(c),i?.setTurnId(s.turnId)}let N=M?.history??C.session.history,P=C.session.history.length;a=setHarnessEmissionState({...C.session,history:[...N,...j],state:M?.state??C.session.state},s);let F=[...M?.history??C.messages.slice(0,P),...j,...M===void 0?C.messages.slice(P):[]],I=await applySessionLimitContinuation({config:e,emit:p,emissionState:s,limitContinuation:C.limitContinuation,session:a});if(I.result!==null)return I.result;a=I.session;let L=getAgentHandleStore(a.state);if(!hasUnansweredToolCall(F)){let e=await c?.get(BackgroundToolExecutorKey)?.readAgentViews?.(),t=e===void 0||e.length===0?void 0:[...projectParkedAgentHandles(L??{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,a.state),store:L});n!==void 0&&F.push({content:n,role:`user`})}let R=T;E!==void 0&&(R={insertionIndex:T?.insertionIndex??F.length,messages:E,turnId:w}),R!==void 0&&(a=setTurnClientContextState(a,R)),F=[...F,...O];let createModelMessages=e=>{if(R===void 0||R.messages.length===0)return[...e];let t=Math.min(Math.max(0,R.insertionIndex),e.length);return[...e.slice(0,t),...R.messages.map(e=>({content:e,role:`user`})),...e.slice(t)]},z=projectHistory(createModelMessages(F),a.state),B=c,V;try{B!==void 0&&e.dispatchDynamicModelEvent!==void 0&&await e.dispatchDynamicModelEvent({ctx:B,event:{data:{sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId},type:`step.started`},messages:z}),V=await resolveActiveRuntimeModel({config:e,ctx:B,session:a})}catch(e){return failModelSelection(e,s)}a=V.session;let H=V.model,ee=detectPromptCachePath(H),U=ee.kind===`anthropic-direct`?getAnthropicCacheMarker():void 0,te=buildGatewayAttributionHeaders(H,e.runtimeIdentity),ne=R===void 0?void 0:Math.max(0,F.length-R.insertionIndex),W=await maybeCompact({abortSignal:e.abortSignal,auth:B?.get(AuthKey)??null,emit:p,emissionState:s,historyProjector:e.historyProjector,messages:[...F],model:H,onCompaction:e.onCompaction,promptMessages:createModelMessages(F),resolveModel:e.resolveModel,runtimeIdentity:e.runtimeIdentity,session:a,telemetry:i?.telemetry()});if(a=W.session,W.compacted&&(F=W.messages,R!==void 0&&ne!==void 0&&(R={...R,insertionIndex:Math.max(0,F.length-ne)},a=setTurnClientContextState(a,R))),z=normalizeModelMessages(projectHistory(createModelMessages(F),a.state)),p)try{await emitStepStarted(p,s,requireSessionModelReference(a).id,z)}catch(e){return failBoundaryEvent(e,s)}let re=getApprovedTools(a,resolveApprovalKeyFromTools(buildResponseAuthorizationTools({authoredTools:e.tools,context:B}))),ie=s.sequence===0,ae=ie&&B?.get(ScheduleIdKey)!==void 0,G=resolveDeliveryPolicy({hasScheduleProvenance:ae,hasOutputSchema:a.outputSchema!==void 0,isChild:B?.get(ParentSessionKey)!==void 0,isFirstTurn:ie,taskDeliveryPhase:B?.get(TurnTaskDeliveryKey)}),K=createCurrentMessages(F,{historyState:B?.get(HistoryStateKey),currentTurnMessages:O,projectedMessages:z});B!==void 0&&K.addSystem(buildDynamicInstructionMessages(B));let oe=B?.get(TurnTaskDeliveryKey)===`initiating`?resolveInitiatingTaskContext({state:a.state,turnId:w}):void 0;K.addAnnouncements({availableSkills:B?.get(PendingSkillAnnouncementKey),taskState:oe?.context,deliveryInstruction:G.instruction});let q=renderPendingApprovalsInstruction(getPendingInputBatches(a.state).flatMap(e=>e.requests));q!==void 0&&K.add(q,{cacheFriendly:!1});let se=K.history,J=await hydrateSandboxAttachments(K.nonSystemMessages),prepareModelCallInput=e=>{let t=e?[{role:`system`,content:e}]:[],n=a.agent.system?[{role:`system`,content:a.agent.system}]:[],r=K.systemMessages.length>0||t.length>0?[...t,...n,...K.systemMessages]:void 0,o=r!==void 0&&U?applySystemCacheBreakpoint(r,U):r,c=o===void 0?a.agent.system??void 0:mergeSystemInstructions(o);return{instructions:c,telemetryRuntimeContext:i?.resolveRuntimeContext({eveVersion,emissionState:s,environment,modelInput:{instructions:c,messages:J},session:a})}},Y=e.tools,runSingleModelCall=async t=>{let{instructions:n,telemetryRuntimeContext:r={}}=t.preparedInput??prepareModelCallInput(t.extraSystemNote);t.retryReason&&(r[`eve.retry.reason`]=t.retryReason);let o=t.trailingUserNote?[...J,{role:`user`,content:t.trailingUserNote}]:[...J],c=buildHarnessToolsWithDynamicSubagents(e.tools,B),l=createBackgroundToolCallBatch(),u=getAdvertisedTools({session:a,tools:c});Y=u;let d=await buildToolSetWithProviderTools({approvedTools:re,backgroundBatch:l,capabilities:e.capabilities,disabledProviderTools:t.disabledProviderTools,modelReference:requireSessionModelReference(a),tools:u});if(B!==void 0){let n=getAdvertisedTools({session:a,tools:buildDynamicTools(B)}),r=buildToolSetFromDefinitions({approvedTools:re,backgroundBatch:l,capabilities:e.capabilities,disabledProviderTools:t.disabledProviderTools,tools:n});for(let[e,t]of Object.entries(r)){let n=u.get(e);if(n?.runtimeAction!==void 0||n?.workflowId!==void 0)throw Error(`Dynamic tool "${e}" collides with a coordination-visible deferred tool.`);d[e]=t}}a.outputSchema!==void 0&&(d[FINAL_OUTPUT_TOOL_NAME]=buildFinalOutputTool(a.outputSchema));let m=e.workflow===!0?{maxSubagents:e.workflowMaxSubagents}:void 0,h=await getAdvertisedTools({modelTools:d,session:a,tools:u,workflow:m});a=h.session;let g=h.modelTools,_=U?applyLastToolCacheBreakpoint(g,U):g,v=activeTurnId(s),y=i?.prepareAttempt({attemptIndex:t.attemptIndex,runtimeContext:r,stepIndex:s.stepIndex,turnId:v});f=y?.scope;let b=buildStepHooks({auth:B?.get(AuthKey)??null,cachePath:ee,emit:p,emissionState:s,emitStepStarted:t.suppressStepStartedEmission!==!0,marker:U,session:a}),x={headers:te,instructions:n,model:H,onLanguageModelCallEnd(e){for(let t of e.content)t.type!==`tool-call`||t.providerExecuted===!0||isInvalidToolCall(t)||l.register({callId:t.toolCallId,input:t.input,toolName:t.toolName})},onToolExecutionEnd:logToolExecutionError,onError(e){summarizeKnownError(e.error)?.tags.includes(`config`)!==!0&&logError(log,`tool-loop stream error`,e.error)},onStepFinish:b.onStepFinish,prepareStep:b.prepareStep,reasoning:a.agent.reasoning,runtimeContext:r,stopWhen:isStepCount(1),telemetry:y?.telemetry,toolApproval:buildToolApproval(g),tools:_},S=new ToolLoopAgent(x),executeModelCall=async()=>{if(p){let t=[...e.tools].filter(([e,t])=>t.runtimeAction!==void 0&&u.get(e)===void 0).map(([e])=>e),n=new Set([ASK_QUESTION_TOOL_NAME,FINAL_OUTPUT_TOOL_NAME,...t]),r=await S.stream({abortSignal:e.abortSignal,messages:o}),{emittedActionCallIds:i,handledInlineToolResultCallIds:a,invalidInputToolCallIds:c,inlineAuthorizationResults:l,trailingInlineToolResultParts:d}=await emitStreamContent(p,s,r.fullStream,{excludedActionToolNames:n,tools:u});throwIfTurnAborted(e.abortSignal);let[f,m]=await Promise.all([b.stepResult,r.responseMessages]);if(isEmptyModelResponse(f)&&extractToolResultCallIds(m).size===0&&l.length===0&&d.length===0)throw new EmptyModelResponseError;await emitStepActions(p,s,f,{emittedActionCallIds:i,excludedActionCallIds:c,excludedActionToolNames:n,handledInlineToolResultCallIds:a,tools:u});let h=f.toolResults,g=new Map(h.map(e=>[e.toolCallId,e]));for(let e of l)g.set(e.toolCallId,e);return withAccumulatedResponseMessages({invalidInputToolCallIds:c,responseMessages:appendMissingToolResultMessages({append:d,responseMessages:m}),stepResult:f,toolResults:[...g.values()]})}let t=await S.generate({abortSignal:e.abortSignal,messages:o});throwIfTurnAborted(e.abortSignal);let n=await b.stepResult;if(isEmptyModelResponse(n)&&extractToolResultCallIds(t.responseMessages).size===0)throw new EmptyModelResponseError;return withAccumulatedResponseMessages({responseMessages:t.responseMessages,stepResult:n})};try{let e=await executeModelCall();return await y?.complete(),e}catch(e){return await y?.fail(e),rethrowNoOutputAsEmptyResponse(e)}},ce=0,runOneModelCall=async t=>runModelCallWithRetries(e=>runSingleModelCall({...t,attemptIndex:ce++,preparedInput:e===1?t.preparedInput:void 0,suppressStepStartedEmission:e!==1||t.suppressStepStartedEmission}),{sessionId:a.sessionId,turnId:s.turnId},e.abortSignal),le=prepareModelCallInput(),ue=await continuePendingWorkflowInterrupt({childResults:v?.runtimeActionResults,config:e,emit:p,emissionState:s,runStep,session:a,tools:buildHarnessToolsWithDynamicSubagents(e.tools,B)});if(ue!==null)return ue;let X=await enforceSessionUsageLimit({config:e,emit:p,emissionState:s,messages:z,session:a});if(X!==null)return X;let Z;try{Z=await runOneModelCall({preparedInput:le,suppressStepStartedEmission:!0})}catch(t){throwIfTurnAborted(e.abortSignal);let n=await runModelCallRecoveryPipeline({error:t,stages:[e=>attemptUnsupportedProviderToolRecovery({error:e.error,runOneModelCall,sessionId:a.sessionId,turnId:s.turnId}),e=>attemptEmptyResponseRecovery({emptyDeliveryEnabled:G.allowsEmptyDelivery,error:e.error,retryCallOptions:e.retryCallOptions,runOneModelCall,sessionId:a.sessionId,turnId:s.turnId})]});if(throwIfTurnAborted(e.abortSignal),n.outcome===`recovered`)Z=n.result;else{let t=n.error;if(i?.recordError(t),!p)throw t;let r=extractWorkflowStreamWriteErrorDetails(t);if(r!==null){let e=createErrorId();return log.error(`workflow stream write failed — parking session for retry by the user`,{...r,errorId:e,error:t,sessionId:a.sessionId,turnId:s.turnId}),s=await emitRecoverableFailedTurn(p,s,{code:`WORKFLOW_STREAM_WRITE_FAILED`,continuationToken:a.continuationToken,details:{...r,errorId:e},message:toErrorMessage(t)}),{next:null,session:setHarnessEmissionState(a,s)}}let o=classifyModelCallError(t),c=createErrorId(),l=summarizeKnownError(t),u=l===null?extractUpstreamRejectionMessage(t):null,f=l?.message??u?.message??toErrorMessage(t),m=l?.hint===void 0?f:`${f} ${l.hint}`,h=extractModelCallErrorDetails(t),g=buildModelCallFailureDetails({catalogSummary:l,error:t,errorId:c,modelCallDetails:h,upstreamRejection:u}),_=buildModelCallFailureLogFields({error:t,errorId:c,modelCallDetails:h,recognized:l!==null||u!==null,sessionId:a.sessionId,turnId:s.turnId});if(o===`terminal`)return l===null?log.error(u?.message??`model call failed terminally`,_):log.error(`${l.name}: ${l.message}`,{errorId:c,hint:l.hint,sessionId:a.sessionId,turnId:s.turnId}),await emitFailedStep(p,s,{code:`MODEL_CALL_FAILED`,details:g,message:f,sessionId:a.sessionId}),{next:e.mode===`task`||d?{done:!0,isError:!0,output:m}:{done:!0,output:``},session:a};if(e.mode===`task`){if(o===`recoverable`&&!(t instanceof EmptyModelResponseError))throw log.warn(u?.message??`model call failed recoverably in task mode — rethrowing for durable step retry`,_),t;return log.error(u?.message??`model call failed; failing the task run`,_),await emitFailedStep(p,s,{code:`MODEL_CALL_FAILED`,details:g,message:f,sessionId:a.sessionId}),{next:{done:!0,isError:!0,output:m},session:a}}log.error(u?.message??`model call failed — parking session for retry by the user`,_),s=await emitRecoverableFailedTurn(p,s,{code:`MODEL_CALL_FAILED`,continuationToken:a.continuationToken,details:g,message:f});let v={isError:!0,output:m};return a={...a,outputSchema:void 0},{next:null,session:setHarnessEmissionState(a,s),settledTurn:v}}}let Q=accumulateTurnUsage({previous:getTurnUsageState(a.state),turnId:s.turnId,usage:extractTokenUsageDelta({costUsd:extractGatewayCostUsd(Z.providerMetadata),usage:Z.usage})});a=setTurnUsageState(a,Q);let $;try{$=formatLanguageModelGatewayId(H)}catch{$=void 0}await setEveAttributes({"$eve.model":$,"$eve.input_tokens":Q.inputTokens,"$eve.output_tokens":Q.outputTokens,"$eve.cache_read_tokens":Q.cacheReadTokens,"$eve.cache_write_tokens":Q.cacheWriteTokens,"$eve.cost_usd":Q.sawCost?Q.costUsd:void 0,"$eve.tool_count":e.tools.size});let de=await handleStepResult({config:e,emit:p,emissionState:s,durableModelPromptMessageCount:R===void 0||R.messages.length===0?J.length:void 0,promptMessages:se,result:Z,runStep,session:a,coordinationTools:Y});return B?.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,_={...s,compaction:createNextCompactionConfig(s.compaction,e.durableModelPromptMessageCount,i)},v=t.workflow===!0?readWorkflowContinuationSecurity(_):void 0;if(v!==void 0){let t=await getWorkflowSandboxInterrupt(i,v);if(t!==void 0){if(!isWorkflowTaskInterrupt(t))throw Error(`Unsupported Workflow interrupt kind "${t.payload.kind}".`);return await parkOnWorkflowInterrupt({baseSession:_,emit:n,emissionState:o,interrupt:t,promptMessages:r,responseMessages:g,tools:e.coordinationTools,usedCalls:0})}}let y=extractToolApprovalInputRequests({content:i.content??[],excludedCallIds:d}),b=new Set(y.map(e=>e.action.callId)),x=extractQuestionInputRequests({toolCalls:i.toolCalls,excludedCallIds:new Set([...d,...b]),tools:e.coordinationTools}),S=[...y,...x],C=renderPendingApprovalsSnippet(y),w=g.findIndex(e=>e.role!==`tool`),T=w===-1?g:g.slice(0,w),E=g.slice(T.length),D=[...r,...T,...C===void 0?[]:[{content:C,role:`user`}]],O=getAdvertisedTools({session:_,tools:e.coordinationTools}),k=(i.toolCalls??[]).filter(e=>!d.has(e.toolCallId)).filter(t=>isDeferredHarnessTool(e.coordinationTools.get(t.toolName))).filter(e=>isDeferredHarnessTool(O.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:O}));if(k.length>0){let e=k.flatMap(e=>e.kind===`runtime-action`?[e.request]:[]),t=k.flatMap(e=>e.kind===`task`?[e.request]:[]);if(S.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:[...r]}}),advanceStep(o))};let i=setPendingCoordinationBatch({runtimeActions:e,tasks:t,event:{sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId},responseMessages:E,session:{..._,history:D}});return i=appendPendingInputBatch({event:{sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId},requests:S,responseMessages:[],session:i}),n&&await n(createInputRequestedEvent({requests:S,sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId})),{next:null,session:setHarnessEmissionState(i,advanceStep(o))}}if(S.length>0){let e=buildResponseAuthorizationTools({authoredTools:t.tools,context:contextStorage.getStore()}),r=appendPendingInputBatch({event:{sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId},requests:S,responseAuthRequiredRequestIds:y.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:E,session:{..._,history:D}});return n&&(await n(createInputRequestedEvent({requests:S,sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId})),t.mode===`conversation`&&(o=await emitTurnEpilogue(n,o,t.mode),r=setHarnessEmissionState(r,o))),{next:hasDeferredStepInput(r)?a:null,session:r}}let A=resolveInlineAuthorizationInterrupt({messages:[...r,...g],toolResults:i.toolResults});if(A){let{challenges:e,history:r}=A;if(n){for(let t of getSupersededAuthorizationChallenges(_.state,e))await n(createAuthorizationCompletedEvent({attemptId:t.attemptId,authorization:t.challenge,name:t.name,outcome:`failed`,reason:`Superseded by a newer authorization attempt.`,sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId}));for(let t of e)await n(createAuthorizationRequiredEvent({attemptId:t.attemptId,authorization:t.challenge,name:t.name,description:t.challenge.instructions??`Authorization required for ${t.name}`,webhookUrl:t.hookUrl,sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId}));t.mode===`conversation`&&(o=await emitTurnEpilogue(n,o,t.mode))}return{next:null,session:setHarnessEmissionState({..._,history:r,state:setPendingAuthorization(_.state,{challenges:e})},o)}}let j=g,M=[...r,...j],N={..._,history:M};return(N.outputSchema===void 0||extractFinalOutput(i)===void 0)&&(j.at(-1)?.role===`tool`||h.outcomeEndsResponse||hasDeferredStepInput(N))?(n&&(o=advanceStep(o),N=setHarnessEmissionState(N,o)),{next:a,session:N}):t.mode===`task`?finishTaskTurn({emissionState:o,emit:n,history:r,result:i,schema:N.outputSchema,session:N,stepOutput:p}):finishConversationTurn({emissionState:o,emit:n,history:r,result:i,schema:N.outputSchema,session:N,stepOutput:p})}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}}}async function continuePendingWorkflowInterrupt(e){let t=getPendingWorkflowInterrupt(e.session.state);if(t===void 0)return null;let n=t.interrupt;if(!isWorkflowTaskInterrupt(n))throw Error(`Unsupported Workflow interrupt kind "${n.payload.kind}".`);let r=e.childResults??[],i=getWorkflowTaskInterrupts(n);e.emit!==void 0&&r.length>0&&await emitWorkflowActionResults({emit:e.emit,emissionState:e.emissionState,interrupts:i,results:r});let a=getWorkflowContinuationSecurity(e.session),o;try{let t=buildWorkflowHostTools({tools:e.tools}),i=n,s=0;for(;;){o=await continueWorkflowSandboxInterrupt({bridgeRequestLimit:resolveWorkflowSandboxBridgeRequestLimit(e.config.workflowMaxSubagents),continuationSecurity:a,interrupt:i,resolution:r[s]?.output,tools:t});let n=await unwrapWorkflowSandboxResult(o,a);if(n.status!==`interrupted`||!isWorkflowTaskInterrupt(n.interrupt)||s+1>=r.length)break;let c=getWorkflowTaskInterrupts(n.interrupt)[0];if(c===void 0)throw Error(`Workflow continuation contains no pending workflow-task interrupt.`);s++,i=c}}catch(e){logError(log,`Workflow interrupt continuation failed`,e),o={error:`workflow_continuation_failed`,message:toErrorMessage(e),retryable:!1}}let s=await unwrapWorkflowSandboxResult(o,a),c=s.status===`interrupted`?s.interrupt:s.output,l=replaceWorkflowToolResult([...e.session.history,...t.responseMessages],n.outerToolCallId,c),u=clearPendingWorkflowInterrupt({...e.session,history:l});if(s.status===`interrupted`){if(!isWorkflowTaskInterrupt(s.interrupt))throw Error(`Unsupported Workflow interrupt kind "${s.interrupt.payload.kind}".`);let n=e.session.history.length,r=l.slice(0,n),i=l.slice(n);return u={...u,history:r},await parkOnWorkflowInterrupt({baseSession:u,emit:e.emit,emissionState:e.emissionState,interrupt:s.interrupt,promptMessages:r,responseMessages:i,tools:e.tools,usedCalls:t.usedCalls})}return{next:e.runStep,session:u}}function replaceWorkflowToolResult(e,t,n){if(t===void 0)return[...e];let r=typeof n==`string`?{type:`text`,value:n}:{type:`json`,value:n};return e.map(e=>{if(e.role!==`tool`)return e;let n=e.content.map(e=>e.type!==`tool-result`||e.toolCallId!==t?e:{...e,output:r});return{...e,content:n}})}async function parkOnWorkflowInterrupt(e){let t=getWorkflowTaskInterrupts(e.interrupt),n=t[0];if(n===void 0)throw Error(`Workflow continuation contains no pending workflow-task interrupt.`);e.emit!==void 0&&await emitWorkflowActionsRequested({emit:e.emit,emissionState:e.emissionState,interrupts:t,tools:e.tools});let r={...e.baseSession,history:[...e.promptMessages]},i=setPendingWorkflowInterrupt({interrupt:n,responseMessages:e.responseMessages,session:r,usedCalls:e.usedCalls});return{next:null,session:setHarnessEmissionState(i,e.emissionState)}}function createNextCompactionConfig(e,t,n){let r={recentWindowSize:e.recentWindowSize,threshold:e.threshold,thresholdPercent:e.thresholdPercent};return n.usage?.inputTokens!==void 0&&t!==void 0&&(r.lastKnownInputTokens=n.usage.inputTokens,r.lastKnownPromptMessageCount=t),r}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=e.historyProjector?.({messages:a,state:i.state})??a,s=e.force===!0||shouldCompact(o,i.compaction),c=shouldCanonicalizeMemory(r);if(!s&&!c)return{compacted:!1,messages:r,session:i};let l=await resolveCompactionModel({compactionModelReference:i.agent.compactionModelReference,model:e.model,modelReference:requireSessionModelReference(i),resolveModel:e.resolveModel}),u=i.agent.compactionModelReference??requireSessionModelReference(i),d=mergeProviderSafetyIdentifier(u,l.providerOptions,e.auth);if(t){let e=contextStorage.getStore();e!==void 0&&prepareMemoryCompaction(e,{history:r,state:i.state}),await t(createCompactionRequestedEvent({modelId:formatLanguageModelGatewayId(l.model),sequence:n.sequence,sessionId:i.sessionId,turnId:n.turnId,usageInputTokens:getInputTokenCount(o,i.compaction)}),o)}let f=canonicalizeMemoryRecords(r),p=e.historyProjector?.({messages:f.ordinary,state:i.state})??f.ordinary,m=s?await compactMessages([...p],l.model,i.compaction,d,e.telemetry,buildGatewayAttributionHeaders(l.model,e.runtimeIdentity),e.abortSignal,e.force===!0):[...p];if(r=[...f.memory,...m],e.onCompaction)for(let t of e.onCompaction())r.push(t);if(t){let a=contextStorage.getStore();if(a!==void 0&&prepareMemoryCompaction(a,{history:r,state:i.state}),await t(createCompactionCompletedEvent({modelId:formatLanguageModelGatewayId(l.model),sequence:n.sequence,sessionId:i.sessionId,turnId:n.turnId}),e.historyProjector?.({messages:r,state:i.state})??r),a!==void 0){let e=drainMemoryCommit(a);e!==void 0&&(r=[...e.history],i={...i,state:e.state})}}return{compacted:!0,messages:r,session:replaceSessionHistory(i,r)}}function resolveApprovalKeyFromTools(e){return t=>{let n=e.get(t.action.toolName);if(n?.approvalKey!==void 0)return n.approvalKey(t.action.input)}}async function runModelCallWithRetries(e,t,n){for(let r=1;;r++){throwIfTurnAborted(n);try{return await e(r)}catch(e){if(throwIfTurnAborted(n),r===3||classifyModelCallError(e)!==`retry`)throw e;let i=500*2**(r-1)+Math.floor(Math.random()*250);log.warn(`model call failed transiently — retrying`,{attempt:r,delayMs:i,sessionId:t.sessionId,turnId:t.turnId,error:e}),await new Promise(e=>setTimeout(e,i))}}}export{appendMissingToolResultMessages,createToolLoopHarness};
@@ -1,6 +1,6 @@
1
1
  import type { HarnessSession, SessionStateMap } from "#harness/types.js";
2
2
  export interface TurnClientContextState {
3
- /** Durable turn boundary shared by client context and framework announcements. */
3
+ /** Position of ephemeral client context in each model request for this turn. */
4
4
  readonly insertionIndex: number;
5
5
  readonly messages: readonly string[];
6
6
  readonly turnId: string;
@@ -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.52.4`,WORKFLOW_MODULE_ALIASES={"workflow/errors":`src/compiled/@workflow/errors/index.js`,"workflow/internal/private":`src/compiled/@workflow/core/private.js`};function resolveFallbackPackageVersion(){return BUNDLED_FALLBACK_PACKAGE_VERSION.startsWith(`__`)?`0.0.0`:BUNDLED_FALLBACK_PACKAGE_VERSION}const FALLBACK_PACKAGE_INFO={name:EVE_PACKAGE_NAME,version:resolveFallbackPackageVersion()};function resolveCurrentModulePath(){return typeof __filename==`string`?__filename:resolveCurrentModulePathFromStack()}function resolveCurrentModulePathFromStack(){let e=Error.prepareStackTrace;try{Error.prepareStackTrace=(e,t)=>t;let e=Error().stack?.[0]?.getFileName();if(typeof e!=`string`||e.length===0)throw Error(`Failed to resolve the current module path from the stack trace.`);return e.startsWith(`file:`)?fileURLToPath(e):e}finally{Error.prepareStackTrace=e}}const require=createRequire(resolveCurrentModulePath());function tryResolveVerifiedPackageRoot(e){try{let t=realpathSync.native(e);return tryReadInstalledPackageInfo(t,EVE_PACKAGE_NAME)===void 0?void 0:dirname(t)}catch{return}}function findNearestVerifiedPackageRoot(e){let t=e;for(;;){let e=tryResolveVerifiedPackageRoot(join(t,`package.json`));if(e!==void 0)return e;let n=dirname(t);if(n===t)return;t=n}}function tryResolveDirectBuildLocation(e){let t=dirname(e);for(;;){if(basename(t)===`dist`){let e=tryResolveVerifiedPackageRoot(join(dirname(t),`package.json`));if(e!==void 0)return{packageBuildRoot:t,packageRoot:e}}let e=dirname(t);if(e===t)return;t=e}}function isSourceCheckout(e){return existsSync(join(e,`src`,`internal`,`application`,`package.ts`))}function tryCreatePackageLocation(e){if(isSourceCheckout(e))return{packageBuildRoot:null,packageRoot:e};let t=join(e,`dist`);if(existsSync(t))return{packageBuildRoot:t,packageRoot:e}}function resolveSelfPackageJsonPath(e){return createRequire(e).resolve(`${EVE_PACKAGE_NAME}/package.json`)}function resolvePackageLocationFromModulePath(e,t=resolveSelfPackageJsonPath){let n=realpathSync.native(e),r=tryResolveDirectBuildLocation(n);if(r!==void 0)return r;let i=findNearestVerifiedPackageRoot(dirname(n));if(i!==void 0&&isSourceCheckout(i))return{packageBuildRoot:null,packageRoot:i};try{let e=tryResolveVerifiedPackageRoot(t(n)),r=e===void 0?void 0:tryCreatePackageLocation(e);if(r!==void 0)return r}catch{}let a=i===void 0?void 0:tryCreatePackageLocation(i);if(a!==void 0)return a;throw Error(`Failed to resolve the eve package root from "${e}".`)}function resolvePackageLocation(){return cachedPackageLocation??=resolvePackageLocationFromModulePath(resolveCurrentModulePath()),cachedPackageLocation}function resolvePackageBuildRoot(){return resolvePackageLocation().packageBuildRoot}function resolvePackageRoot(){return resolvePackageLocation().packageRoot}function tryResolvePackageRoot(){try{return resolvePackageRoot()}catch{return}}function rewriteSourceFilePathForBuild(e){return e.replace(/\.[cm]?tsx?$/,`.js`)}function resolvePackageSourceFilePath(e){let t=resolvePackageBuildRoot();return t===null?join(resolvePackageRoot(),e):join(t,rewriteSourceFilePathForBuild(e))}function resolvePackageSourceDirectoryPath(e){let t=resolvePackageBuildRoot();return join(t===null?resolvePackageRoot():t,e)}function resolvePackageDependencyPath(e){return require.resolve(e)}function resolvePackageCompiledFilePath(e){let t=resolvePackageBuildRoot();return t===null?join(resolvePackageRoot(),`.generated`,`compiled`,e.replace(/^src\/compiled\//,``)):join(t,e)}function normalizeInstalledPackageInfo(e){let t=e;if(typeof t.name==`string`&&typeof t.version==`string`)return{name:t.name,version:t.version}}function tryReadInstalledPackageInfo(e,t){let n=normalizeInstalledPackageInfo(JSON.parse(readFileSync(e,`utf8`)));if(n?.name===t)return n}function resolveInstalledPackageInfo(){if(cachedPackageInfo)return cachedPackageInfo;let e=tryResolvePackageRoot(),t=e===void 0?void 0:tryReadInstalledPackageInfo(join(e,`package.json`),EVE_PACKAGE_NAME);if(t)return cachedPackageInfo=t,cachedPackageInfo;try{let e=tryReadInstalledPackageInfo(require.resolve(`${EVE_PACKAGE_NAME}/package.json`),EVE_PACKAGE_NAME);if(e)return cachedPackageInfo=e,cachedPackageInfo}catch{}return cachedPackageInfo={...FALLBACK_PACKAGE_INFO},cachedPackageInfo}function readWorkflowVersionFromManifest(e){let t=e;for(let e of[t.devDependencies,t.dependencies,t.peerDependencies]){let t=e?.[`@workflow/core`];if(typeof t==`string`&&t.trim().length>0)return t}}function resolveExpectedWorkflowVersion(){let e=tryResolvePackageRoot();if(e!==void 0)try{return readWorkflowVersionFromManifest(JSON.parse(readFileSync(join(e,`package.json`),`utf8`)))}catch{}try{return readWorkflowVersionFromManifest(JSON.parse(readFileSync(require.resolve(`${EVE_PACKAGE_NAME}/package.json`),`utf8`)))}catch{return}}function resolveWorkflowModulePath(e){if(e===`workflow`)return resolvePackageSourceFilePath(`src/internal/workflow/index.ts`);if(e===`workflow/api`||e===`workflow/runtime`)return resolvePackageSourceFilePath(`src/internal/workflow/runtime.ts`);if(e===`workflow/internal/builtins`)return resolvePackageSourceFilePath(`src/internal/workflow/builtins.ts`);let t=WORKFLOW_MODULE_ALIASES[e];return t===void 0?require.resolve(e):resolvePackageCompiledFilePath(t)}export{resolveExpectedWorkflowVersion,resolveInstalledPackageInfo,resolvePackageCompiledFilePath,resolvePackageDependencyPath,resolvePackageLocationFromModulePath,resolvePackageRoot,resolvePackageSourceDirectoryPath,resolvePackageSourceFilePath,resolveWorkflowModulePath};
1
+ import{createRequire}from"node:module";import{basename,dirname,join}from"node:path";import{existsSync,readFileSync,realpathSync}from"node:fs";import{fileURLToPath}from"node:url";import{EVE_PACKAGE_NAME}from"#internal/package-name.js";let cachedPackageInfo,cachedPackageLocation;const BUNDLED_FALLBACK_PACKAGE_VERSION=`0.52.5`,WORKFLOW_MODULE_ALIASES={"workflow/errors":`src/compiled/@workflow/errors/index.js`,"workflow/internal/private":`src/compiled/@workflow/core/private.js`};function resolveFallbackPackageVersion(){return BUNDLED_FALLBACK_PACKAGE_VERSION.startsWith(`__`)?`0.0.0`:BUNDLED_FALLBACK_PACKAGE_VERSION}const FALLBACK_PACKAGE_INFO={name:EVE_PACKAGE_NAME,version:resolveFallbackPackageVersion()};function resolveCurrentModulePath(){return typeof __filename==`string`?__filename:resolveCurrentModulePathFromStack()}function resolveCurrentModulePathFromStack(){let e=Error.prepareStackTrace;try{Error.prepareStackTrace=(e,t)=>t;let e=Error().stack?.[0]?.getFileName();if(typeof e!=`string`||e.length===0)throw Error(`Failed to resolve the current module path from the stack trace.`);return e.startsWith(`file:`)?fileURLToPath(e):e}finally{Error.prepareStackTrace=e}}const require=createRequire(resolveCurrentModulePath());function tryResolveVerifiedPackageRoot(e){try{let t=realpathSync.native(e);return tryReadInstalledPackageInfo(t,EVE_PACKAGE_NAME)===void 0?void 0:dirname(t)}catch{return}}function findNearestVerifiedPackageRoot(e){let t=e;for(;;){let e=tryResolveVerifiedPackageRoot(join(t,`package.json`));if(e!==void 0)return e;let n=dirname(t);if(n===t)return;t=n}}function tryResolveDirectBuildLocation(e){let t=dirname(e);for(;;){if(basename(t)===`dist`){let e=tryResolveVerifiedPackageRoot(join(dirname(t),`package.json`));if(e!==void 0)return{packageBuildRoot:t,packageRoot:e}}let e=dirname(t);if(e===t)return;t=e}}function isSourceCheckout(e){return existsSync(join(e,`src`,`internal`,`application`,`package.ts`))}function tryCreatePackageLocation(e){if(isSourceCheckout(e))return{packageBuildRoot:null,packageRoot:e};let t=join(e,`dist`);if(existsSync(t))return{packageBuildRoot:t,packageRoot:e}}function resolveSelfPackageJsonPath(e){return createRequire(e).resolve(`${EVE_PACKAGE_NAME}/package.json`)}function resolvePackageLocationFromModulePath(e,t=resolveSelfPackageJsonPath){let n=realpathSync.native(e),r=tryResolveDirectBuildLocation(n);if(r!==void 0)return r;let i=findNearestVerifiedPackageRoot(dirname(n));if(i!==void 0&&isSourceCheckout(i))return{packageBuildRoot:null,packageRoot:i};try{let e=tryResolveVerifiedPackageRoot(t(n)),r=e===void 0?void 0:tryCreatePackageLocation(e);if(r!==void 0)return r}catch{}let a=i===void 0?void 0:tryCreatePackageLocation(i);if(a!==void 0)return a;throw Error(`Failed to resolve the eve package root from "${e}".`)}function resolvePackageLocation(){return cachedPackageLocation??=resolvePackageLocationFromModulePath(resolveCurrentModulePath()),cachedPackageLocation}function resolvePackageBuildRoot(){return resolvePackageLocation().packageBuildRoot}function resolvePackageRoot(){return resolvePackageLocation().packageRoot}function tryResolvePackageRoot(){try{return resolvePackageRoot()}catch{return}}function rewriteSourceFilePathForBuild(e){return e.replace(/\.[cm]?tsx?$/,`.js`)}function resolvePackageSourceFilePath(e){let t=resolvePackageBuildRoot();return t===null?join(resolvePackageRoot(),e):join(t,rewriteSourceFilePathForBuild(e))}function resolvePackageSourceDirectoryPath(e){let t=resolvePackageBuildRoot();return join(t===null?resolvePackageRoot():t,e)}function resolvePackageDependencyPath(e){return require.resolve(e)}function resolvePackageCompiledFilePath(e){let t=resolvePackageBuildRoot();return t===null?join(resolvePackageRoot(),`.generated`,`compiled`,e.replace(/^src\/compiled\//,``)):join(t,e)}function normalizeInstalledPackageInfo(e){let t=e;if(typeof t.name==`string`&&typeof t.version==`string`)return{name:t.name,version:t.version}}function tryReadInstalledPackageInfo(e,t){let n=normalizeInstalledPackageInfo(JSON.parse(readFileSync(e,`utf8`)));if(n?.name===t)return n}function resolveInstalledPackageInfo(){if(cachedPackageInfo)return cachedPackageInfo;let e=tryResolvePackageRoot(),t=e===void 0?void 0:tryReadInstalledPackageInfo(join(e,`package.json`),EVE_PACKAGE_NAME);if(t)return cachedPackageInfo=t,cachedPackageInfo;try{let e=tryReadInstalledPackageInfo(require.resolve(`${EVE_PACKAGE_NAME}/package.json`),EVE_PACKAGE_NAME);if(e)return cachedPackageInfo=e,cachedPackageInfo}catch{}return cachedPackageInfo={...FALLBACK_PACKAGE_INFO},cachedPackageInfo}function readWorkflowVersionFromManifest(e){let t=e;for(let e of[t.devDependencies,t.dependencies,t.peerDependencies]){let t=e?.[`@workflow/core`];if(typeof t==`string`&&t.trim().length>0)return t}}function resolveExpectedWorkflowVersion(){let e=tryResolvePackageRoot();if(e!==void 0)try{return readWorkflowVersionFromManifest(JSON.parse(readFileSync(join(e,`package.json`),`utf8`)))}catch{}try{return readWorkflowVersionFromManifest(JSON.parse(readFileSync(require.resolve(`${EVE_PACKAGE_NAME}/package.json`),`utf8`)))}catch{return}}function resolveWorkflowModulePath(e){if(e===`workflow`)return resolvePackageSourceFilePath(`src/internal/workflow/index.ts`);if(e===`workflow/api`||e===`workflow/runtime`)return resolvePackageSourceFilePath(`src/internal/workflow/runtime.ts`);if(e===`workflow/internal/builtins`)return resolvePackageSourceFilePath(`src/internal/workflow/builtins.ts`);let t=WORKFLOW_MODULE_ALIASES[e];return t===void 0?require.resolve(e):resolvePackageCompiledFilePath(t)}export{resolveExpectedWorkflowVersion,resolveInstalledPackageInfo,resolvePackageCompiledFilePath,resolvePackageDependencyPath,resolvePackageLocationFromModulePath,resolvePackageRoot,resolvePackageSourceDirectoryPath,resolvePackageSourceFilePath,resolveWorkflowModulePath};
@@ -0,0 +1,2 @@
1
+ export declare function markMockModel<T extends object>(model: T): T;
2
+ export declare function isMockModel(model: unknown): boolean;
@@ -0,0 +1 @@
1
+ const MOCK_MODEL=Symbol.for(`eve:mock-model`);function markMockModel(e){return Object.defineProperty(e,MOCK_MODEL,{value:!0}),e}function isMockModel(e){return typeof e==`object`&&!!e&&Reflect.get(e,MOCK_MODEL)===!0}export{isMockModel,markMockModel};
@@ -1 +1 @@
1
- import{resolveModelEndpointStatus}from"#internal/resolve-model-endpoint-status.js";import{ROOT_COMPILED_AGENT_NODE_ID}from"#compiler/manifest.js";import{WORKFLOW_TOOL_NAME}from"#shared/workflow-sandbox.js";function toChatGptEndpoint(e){if(e===void 0)return;let t={state:e.kind};return e.kind===`ready`&&e.accountLabel!==void 0?{...t,accountLabel:e.accountLabel}:t}function buildAgentInfoResponse(e,t){let{manifest:n}=e,r=toModuleSource(n,n.config.source);if(r.binding===void 0)throw Error(`Compiled config source "${n.config.source.sourceId}" has no binding.`);let i=collectCompositionDiagnostics(n),a=collectRemoteAgents(n);return{agent:{agentRoot:n.agentRoot,appRoot:n.appRoot,config:{...r,binding:r.binding},description:n.config.description,model:n.config.dynamicModel===void 0?{contextWindowTokens:n.config.model.contextWindowTokens,endpoint:resolveModelEndpointStatus(n.config.model.routing,t.gatewayCredentials,toChatGptEndpoint(t.chatgptAuth)),id:n.config.model.id,providerOptions:n.config.model.providerOptions,reasoning:n.config.reasoning,routing:n.config.model.routing,source:n.config.model.source===void 0?void 0:toModuleSource(n,n.config.model.source)}:{reasoning:n.config.reasoning,routing:{kind:`dynamic`,resolver:renderDynamicResolver(n,{...n.config.dynamicModel,slug:`model`})}},name:n.config.name,nodeId:ROOT_COMPILED_AGENT_NODE_ID,outputSchema:n.config.outputSchema},capabilities:{devRoutes:t.mode===`development`},channels:{routes:n.channelRoutes.effective.map(e=>({...toModuleSource(n,e),adapterKind:e.adapterKind,method:e.method,name:e.name,urlPath:e.urlPath})),shadowed:[...n.channelRoutes.shadowed]},composition:i,connections:n.connections.map(e=>({...toModuleSource(n,e),connectionName:e.connectionName,description:e.description,hasApproval:!1,hasAuthorization:e.vercelConnect!==void 0,hasHeaders:!1,protocol:e.protocol,url:e.url})),diagnostics:{discoveryErrors:n.diagnosticsSummary.errors,discoveryWarnings:n.diagnosticsSummary.warnings},hooks:n.hooks.map(e=>({...toModuleSource(n,e),eventNames:[...e.eventNames],slug:e.slug})),instructions:{dynamic:n.dynamicInstructions.map(e=>renderDynamicResolver(n,e)),static:n.instructions.map(e=>({...toOwnedSource(n,e),content:e.content,name:e.name,role:e.role}))},instrumentation:n.instrumentation===void 0?void 0:toModuleSource(n,n.instrumentation),kernelEffects:projectPreparedKernelEffects(n),kind:`eve-agent-info`,memories:n.memories.map(e=>({...toModuleSource(n,e),description:e.description,slot:e.slot,visibility:e.visibility})),mode:t.mode,remoteAgents:{entries:a,total:a.length},sandbox:{...toModuleSource(n,n.sandbox),backendKind:n.sandbox.backendName,description:n.sandbox.description,hasBootstrap:!1,hasOnSession:!1,revalidationKey:n.sandbox.revalidationKey,sourceHash:n.sandbox.sourceHash},schedules:n.schedules.map(e=>({...toOwnedSource(n,e),cron:e.cron,hasRun:e.hasRun,markdown:e.markdown,name:e.name})),skills:{dynamic:n.dynamicSkills.map(e=>renderDynamicResolver(n,e)),static:n.skills.map(e=>({...toOwnedSource(n,e),description:e.description,license:e.license,markdown:e.markdown,metadata:e.metadata,name:e.name}))},subagents:{local:n.subagents.map(e=>{let t={...toOwnedSource(n,e),description:e.description,entryPath:e.entryPath,name:e.name,nodeId:e.nodeId,parentNodeId:e.parentNodeId,rootPath:e.rootPath,summary:summarizeNode(e.agent)};return e.configResolver===void 0?t:{...t,configResolver:renderDynamicResolver(e.agent,{...e.configResolver,slug:`config`})}}),total:n.subagents.length},tools:{dynamic:n.dynamicTools.map(e=>renderDynamicResolver(n,e)),static:n.tools.map(e=>({...toModuleSource(n,e),description:e.description,hasAuth:!1,hasExecute:e.hasExecute,hasModelOutputProjection:e.hasModelOutputProjection,hasOutputSchema:e.outputSchema!==void 0,inputSchema:e.inputSchema,name:e.name,outputSchema:e.outputSchema,requiresApproval:e.requiresApproval}))},version:4,workflow:n.workflowTool===void 0?{enabled:!1,toolName:WORKFLOW_TOOL_NAME}:{enabled:!0,source:toModuleSource(n,n.workflowTool),toolName:WORKFLOW_TOOL_NAME},workspace:{resourceRoot:n.workspaceResourceRoot,rootEntries:[...n.workspaceResourceRoot.rootEntries]}}}function toModuleSource(e,t){let n=e.bindings[t.sourceId];if(n===void 0)throw Error(`Compiled source "${t.sourceId}" has no binding.`);return sourceProjection(t,n.owner,n)}function toOwnedSource(e,t){let n=e.bindings[t.sourceId],r=n?.owner??t.owner;if(r===void 0)throw Error(`Compiled source "${t.sourceId}" has no owner.`);return sourceProjection(t,r,n)}function sourceProjection(e,t,n){let r={logicalPath:e.logicalPath,owner:t,sourceId:e.sourceId,sourceKind:toAgentInfoSourceKind(e.sourceKind)},i=n===void 0?void 0:{backing:n.backing,logicalPath:n.logicalPath,owner:n.owner};return n!==void 0&&e.exportName!==void 0?{...r,binding:i,exportName:e.exportName}:n===void 0?e.exportName===void 0?r:{...r,exportName:e.exportName}:{...r,binding:i}}function toAgentInfoSourceKind(e){switch(e){case`markdown`:case`module`:case`skill-package`:return e;default:throw Error(`Unsupported compiled source kind "${e}".`)}}function renderDynamicResolver(e,t){return{...toModuleSource(e,t),eventNames:[...t.eventNames],slug:t.slug}}function summarizeNode(e){return{channels:e.channelRoutes.effective.length,connections:e.connections.length,hooks:e.hooks.length,instructions:e.instructions.length,memories:e.memories.length,schedules:e.schedules.length,skills:e.skills.length,tools:e.tools.length}}function collectRemoteAgents(e){return[e,...e.subagents.map(e=>e.agent)].flatMap(e=>e.remoteAgents.map(e=>({...sourceProjection(e,e.owner,e.binding),description:e.description,name:e.name,nodeId:e.nodeId,parentNodeId:e.parentNodeId,url:e.url})))}function collectCompositionDiagnostics(e){let t=[e,...e.subagents.map(e=>e.agent)].flatMap(e=>e.sourceComposition.entries).map(e=>{let t={kind:e.kind,logicalPath:e.source.logicalPath,owner:e.source.owner,sourceId:e.source.sourceId};return e.kind===`shadowed`?{...t,winnerSourceId:e.winnerSourceId}:t});return{disabled:t.filter(e=>e.kind===`disabled`),shadowed:t.filter(e=>e.kind===`shadowed`)}}function projectPreparedKernelEffects(e){let t=[];for(let n of e.tools){let e=n.behavior,r=e?.handling;if(e!==void 0&&r!==void 0)switch(r.kind){case`dispatch`:t.push({action:r.action===`self-agent`?`subagent-call`:r.action,audience:[...e.availability],kind:`dispatch`,sourceId:n.sourceId});break;case`provider-tool`:t.push({audience:[...e.availability],kind:`provider-tool`,sourceId:n.sourceId});break;case`request-input`:t.push({audience:[...e.availability],kind:`request-input`,sourceId:n.sourceId});break;case`workflow-tool`:t.push({action:`workflow-tool-call`,audience:[...e.availability],kind:`dispatch`,sourceId:n.sourceId});break;default:throw Error(`Unsupported compiled tool handling: ${String(r)}`)}}return t}export{buildAgentInfoResponse};
1
+ import{resolveModelEndpointStatus}from"#internal/resolve-model-endpoint-status.js";import{ROOT_COMPILED_AGENT_NODE_ID}from"#compiler/manifest.js";import{WORKFLOW_TOOL_NAME}from"#shared/workflow-sandbox.js";function toChatGptEndpoint(e){if(e===void 0)return;let t={state:e.kind};return e.kind===`ready`&&e.accountLabel!==void 0?{...t,accountLabel:e.accountLabel}:t}function buildAgentInfoResponse(e,t){let{manifest:n}=e,r=toModuleSource(n,n.config.source);if(r.binding===void 0)throw Error(`Compiled config source "${n.config.source.sourceId}" has no binding.`);let i=collectCompositionDiagnostics(n),a=collectRemoteAgents(n);return{agent:{agentRoot:n.agentRoot,appRoot:n.appRoot,config:{...r,binding:r.binding},description:n.config.description,model:n.config.dynamicModel===void 0?{contextWindowTokens:n.config.model.contextWindowTokens,endpoint:resolveModelEndpointStatus(n.config.model.routing,t.gatewayCredentials,toChatGptEndpoint(t.chatgptAuth)),id:n.config.model.id,providerOptions:sanitizeProviderOptionsForInfo(n.config.model.providerOptions),reasoning:n.config.reasoning,routing:n.config.model.routing,source:n.config.model.source===void 0?void 0:toModuleSource(n,n.config.model.source)}:{reasoning:n.config.reasoning,routing:{kind:`dynamic`,resolver:renderDynamicResolver(n,{...n.config.dynamicModel,slug:`model`})}},name:n.config.name,nodeId:ROOT_COMPILED_AGENT_NODE_ID,outputSchema:n.config.outputSchema},capabilities:{devRoutes:t.mode===`development`},channels:{routes:n.channelRoutes.effective.map(e=>({...toModuleSource(n,e),adapterKind:e.adapterKind,method:e.method,name:e.name,urlPath:e.urlPath})),shadowed:[...n.channelRoutes.shadowed]},composition:i,connections:n.connections.map(e=>({...toModuleSource(n,e),connectionName:e.connectionName,description:e.description,hasApproval:!1,hasAuthorization:e.vercelConnect!==void 0,hasHeaders:!1,protocol:e.protocol,url:e.url})),diagnostics:{discoveryErrors:n.diagnosticsSummary.errors,discoveryWarnings:n.diagnosticsSummary.warnings},hooks:n.hooks.map(e=>({...toModuleSource(n,e),eventNames:[...e.eventNames],slug:e.slug})),instructions:{dynamic:n.dynamicInstructions.map(e=>renderDynamicResolver(n,e)),static:n.instructions.map(e=>({...toOwnedSource(n,e),content:e.content,name:e.name,role:e.role}))},instrumentation:n.instrumentation===void 0?void 0:toModuleSource(n,n.instrumentation),kernelEffects:projectPreparedKernelEffects(n),kind:`eve-agent-info`,memories:n.memories.map(e=>({...toModuleSource(n,e),description:e.description,slot:e.slot,visibility:e.visibility})),mode:t.mode,remoteAgents:{entries:a,total:a.length},sandbox:{...toModuleSource(n,n.sandbox),backendKind:n.sandbox.backendName,description:n.sandbox.description,hasBootstrap:!1,hasOnSession:!1,revalidationKey:n.sandbox.revalidationKey,sourceHash:n.sandbox.sourceHash},schedules:n.schedules.map(e=>({...toOwnedSource(n,e),cron:e.cron,hasRun:e.hasRun,markdown:e.markdown,name:e.name})),skills:{dynamic:n.dynamicSkills.map(e=>renderDynamicResolver(n,e)),static:n.skills.map(e=>({...toOwnedSource(n,e),description:e.description,license:e.license,markdown:e.markdown,metadata:e.metadata,name:e.name}))},subagents:{local:n.subagents.map(e=>{let t={...toOwnedSource(n,e),description:e.description,entryPath:e.entryPath,name:e.name,nodeId:e.nodeId,parentNodeId:e.parentNodeId,rootPath:e.rootPath,summary:summarizeNode(e.agent)};return e.configResolver===void 0?t:{...t,configResolver:renderDynamicResolver(e.agent,{...e.configResolver,slug:`config`})}}),total:n.subagents.length},tools:{dynamic:n.dynamicTools.map(e=>renderDynamicResolver(n,e)),static:n.tools.map(e=>({...toModuleSource(n,e),description:e.description,hasAuth:!1,hasExecute:e.hasExecute,hasModelOutputProjection:e.hasModelOutputProjection,hasOutputSchema:e.outputSchema!==void 0,inputSchema:e.inputSchema,name:e.name,outputSchema:e.outputSchema,requiresApproval:e.requiresApproval}))},version:4,workflow:n.workflowTool===void 0?{enabled:!1,toolName:WORKFLOW_TOOL_NAME}:{enabled:!0,source:toModuleSource(n,n.workflowTool),toolName:WORKFLOW_TOOL_NAME},workspace:{resourceRoot:n.workspaceResourceRoot,rootEntries:[...n.workspaceResourceRoot.rootEntries]}}}const CREDENTIAL_OPTION_KEY=/^(api[-_]?key|access[-_]?token|auth|authorization|bearer|client[-_]?secret|credentials?|headers|password|private[-_]?key|secret|token)$/i;function sanitizeProviderOptionsForInfo(e){if(e===void 0)return;let t={};for(let[n,r]of Object.entries(e))t[n]=redactCredentialOptions(r);return t}function redactCredentialOptions(e){if(typeof e!=`object`||!e||Array.isArray(e))return{};let t={};for(let[n,r]of Object.entries(e))if(n!==`byok`){if(CREDENTIAL_OPTION_KEY.test(n)){t[n]=`[redacted]`;continue}if(typeof r==`object`&&r){t[n]=Array.isArray(r)?r.map(e=>typeof e==`object`&&e&&!Array.isArray(e)?redactCredentialOptions(e):e):redactCredentialOptions(r);continue}t[n]=r}return t}function toModuleSource(e,t){let n=e.bindings[t.sourceId];if(n===void 0)throw Error(`Compiled source "${t.sourceId}" has no binding.`);return sourceProjection(t,n.owner,n)}function toOwnedSource(e,t){let n=e.bindings[t.sourceId],r=n?.owner??t.owner;if(r===void 0)throw Error(`Compiled source "${t.sourceId}" has no owner.`);return sourceProjection(t,r,n)}function sourceProjection(e,t,n){let r={logicalPath:e.logicalPath,owner:t,sourceId:e.sourceId,sourceKind:toAgentInfoSourceKind(e.sourceKind)},i=n===void 0?void 0:{backing:n.backing,logicalPath:n.logicalPath,owner:n.owner};return n!==void 0&&e.exportName!==void 0?{...r,binding:i,exportName:e.exportName}:n===void 0?e.exportName===void 0?r:{...r,exportName:e.exportName}:{...r,binding:i}}function toAgentInfoSourceKind(e){switch(e){case`markdown`:case`module`:case`skill-package`:return e;default:throw Error(`Unsupported compiled source kind "${e}".`)}}function renderDynamicResolver(e,t){return{...toModuleSource(e,t),eventNames:[...t.eventNames],slug:t.slug}}function summarizeNode(e){return{channels:e.channelRoutes.effective.length,connections:e.connections.length,hooks:e.hooks.length,instructions:e.instructions.length,memories:e.memories.length,schedules:e.schedules.length,skills:e.skills.length,tools:e.tools.length}}function collectRemoteAgents(e){return[e,...e.subagents.map(e=>e.agent)].flatMap(e=>e.remoteAgents.map(e=>({...sourceProjection(e,e.owner,e.binding),description:e.description,name:e.name,nodeId:e.nodeId,parentNodeId:e.parentNodeId,url:e.url})))}function collectCompositionDiagnostics(e){let t=[e,...e.subagents.map(e=>e.agent)].flatMap(e=>e.sourceComposition.entries).map(e=>{let t={kind:e.kind,logicalPath:e.source.logicalPath,owner:e.source.owner,sourceId:e.source.sourceId};return e.kind===`shadowed`?{...t,winnerSourceId:e.winnerSourceId}:t});return{disabled:t.filter(e=>e.kind===`disabled`),shadowed:t.filter(e=>e.kind===`shadowed`)}}function projectPreparedKernelEffects(e){let t=[];for(let n of e.tools){let e=n.behavior,r=e?.handling;if(e!==void 0&&r!==void 0)switch(r.kind){case`dispatch`:t.push({action:r.action===`self-agent`?`subagent-call`:r.action,audience:[...e.availability],kind:`dispatch`,sourceId:n.sourceId});break;case`provider-tool`:t.push({audience:[...e.availability],kind:`provider-tool`,sourceId:n.sourceId});break;case`request-input`:t.push({audience:[...e.availability],kind:`request-input`,sourceId:n.sourceId});break;case`workflow-tool`:t.push({action:`workflow-tool-call`,audience:[...e.availability],kind:`dispatch`,sourceId:n.sourceId});break;default:throw Error(`Unsupported compiled tool handling: ${String(r)}`)}}return t}export{buildAgentInfoResponse};
@@ -3,6 +3,7 @@
3
3
  */
4
4
  export { type BackgroundToolDefinition, type DisabledToolSentinel, defineTool, disableTool, isDisabledToolSentinel, type TaskExec, type TaskReceipt, type ToolLabelDefinition, type ToolAuthOptions, type ToolAuthProvider, type ToolDefinition, type ToolContext, type ToolModelOutput, type ToolModelOutputPart, } from "#tools/definition.js";
5
5
  export { defineDynamic } from "#dynamic/definition.js";
6
+ export { defineDurableCallback } from "#tools/durable-callbacks.js";
6
7
  export { toolOutput, toolOutputPart } from "#tools/model-output.js";
7
8
  export type { DynamicEvents, DynamicResolveContext, DynamicSentinel } from "#dynamic/definition.js";
8
9
  export type { DynamicToolEntry, DynamicToolEvents, DynamicToolSet, DynamicToolResult, } from "#tools/dynamic.js";
@@ -1 +1 @@
1
- import{defineTool,disableTool,isDisabledToolSentinel}from"#tools/definition.js";import{defineDynamic}from"#dynamic/definition.js";import{defineWorkflowTool}from"#tools/workflow-definition.js";import{toolOutput,toolOutputPart}from"#tools/model-output.js";import{toolResultFrom}from"#public/tools/result.js";export{defineDynamic,defineTool,defineWorkflowTool,disableTool,isDisabledToolSentinel,toolOutput,toolOutputPart,toolResultFrom};
1
+ import{defineTool,disableTool,isDisabledToolSentinel}from"#tools/definition.js";import{defineDynamic}from"#dynamic/definition.js";import{defineDurableCallback}from"#tools/durable-callbacks.js";import{defineWorkflowTool}from"#tools/workflow-definition.js";import{toolOutput,toolOutputPart}from"#tools/model-output.js";import{toolResultFrom}from"#public/tools/result.js";export{defineDurableCallback,defineDynamic,defineTool,defineWorkflowTool,disableTool,isDisabledToolSentinel,toolOutput,toolOutputPart,toolResultFrom};
@@ -1,4 +1,4 @@
1
- import{pinnedNodeEngineMajor}from"../../node-engine.js";import{parseChatGptModelSelection}from"../../../shared/chatgpt-model.js";import{SUPPORTED_AUTHORED_MODULE_FILE_EXTENSIONS}from"../update/module-files.js";import{pathExists,writeTextFile}from"../files.js";import{blockingCreateInPlaceEntries}from"../create-in-place.js";import{resolveVersionToken}from"../version-tokens.js";import{applyPackageManagerWorkspaceConfiguration,isPackageManagerWorkspaceMember,patchWorkspaceRootPackageJson}from"../workspace-root.js";import{WEB_APP_TEMPLATE_FILES}from"./web-template.js";import{mkdir,readdir,stat}from"node:fs/promises";import{basename,join,resolve}from"node:path";const CURRENT_DIRECTORY_PROJECT_NAME=`.`,DEFAULT_AI_PACKAGE_VERSION=`^7.0.82`,DEFAULT_CONNECT_PACKAGE_VERSION=`1.0.0`,DEFAULT_ZOD_PACKAGE_VERSION=`4.5.4`,DEFAULT_EVE_PACKAGE_CONTRACT={version:`0.52.4`,nodeEngine:`>=24`};function resolveEvePackageContract(e=DEFAULT_EVE_PACKAGE_CONTRACT){return{version:resolveVersionToken(`evePackage.version`,e.version),nodeEngine:resolveVersionToken(`evePackage.nodeEngine`,e.nodeEngine)}}function modelProviderSlug(e){let t=(e.split(`/`)[0]??``).replaceAll(/[^A-Za-z0-9._-]/gu,``);return t.length>0?t:`anthropic`}function byokProviderEnvVar(e){let t=modelProviderSlug(e).toUpperCase().replaceAll(/[^A-Z0-9]/gu,`_`);return`${/^[0-9]/.test(t)?`_`:``}${t}_API_KEY`}function agentTemplateFiles(e,t){return{"agent/agent.ts":renderAgentTemplate(e,t),"agent/channels/eve.ts":WEB_APP_TEMPLATE_FILES[`agent/channels/eve.ts`],"agent/instructions.md":AGENT_INSTRUCTIONS_TEMPLATE}}function renderAgentTemplate(e,t){let n=parseChatGptModelSelection(e);return n===void 0?BASE_AGENT_TEMPLATE.replaceAll(`__EVE_INIT_MODEL__`,e).replaceAll(`__EVE_INIT_REASONING__`,reasoningTemplateLine(t)):`import { defineAgent } from "eve";\nimport { chatgpt } from "eve/models/openai";\n\nexport default defineAgent({\n model: chatgpt(${JSON.stringify(n)}),\n${reasoningTemplateLine(t)}});\n`}function reasoningTemplateLine(e){return e===void 0||e===`provider-default`?``:` reasoning: "${e}",\n`}function renderTemplate(e,t){return e===BASE_AGENT_TEMPLATE&&parseChatGptModelSelection(t.model)!==void 0?renderAgentTemplate(t.model,t.reasoning):e.replaceAll(`__EVE_INIT_APP_NAME__`,t.appName).replaceAll(`__EVE_INIT_MODEL__`,t.model).replaceAll(`__EVE_INIT_REASONING__`,reasoningTemplateLine(t.reasoning)).replaceAll(`__EVE_INIT_BYOK_PROVIDER__`,modelProviderSlug(t.model)).replaceAll(`__EVE_INIT_BYOK_ENV_VAR__`,byokProviderEnvVar(t.model)).replaceAll(`__EVE_INIT_PACKAGE_VERSION__`,formatEveDependencySpecifier(t.eveVersion)).replaceAll(`__EVE_INIT_AI_SDK_VERSION__`,t.aiPackageVersion).replaceAll(`__EVE_INIT_CONNECT_VERSION__`,t.connectPackageVersion).replaceAll(`__EVE_INIT_ZOD_VERSION__`,t.zodPackageVersion).replaceAll(`__EVE_INIT_TYPESCRIPT_VERSION__`,t.typescriptPackageVersion).replaceAll(`__EVE_INIT_TYPES_NODE_VERSION__`,t.nodeTypesVersion).replaceAll(`__EVE_INIT_NODE_ENGINE__`,t.nodeEngine)}function formatEveDependencySpecifier(e){return/^\d+\.\d+\.\d+(?:[-+][0-9A-Za-z-.]+)?$/.test(e)?`^${e}`:e}const BASE_AGENT_TEMPLATE=`import { defineAgent } from "eve";
1
+ import{pinnedNodeEngineMajor}from"../../node-engine.js";import{parseChatGptModelSelection}from"../../../shared/chatgpt-model.js";import{SUPPORTED_AUTHORED_MODULE_FILE_EXTENSIONS}from"../update/module-files.js";import{pathExists,writeTextFile}from"../files.js";import{blockingCreateInPlaceEntries}from"../create-in-place.js";import{resolveVersionToken}from"../version-tokens.js";import{applyPackageManagerWorkspaceConfiguration,isPackageManagerWorkspaceMember,patchWorkspaceRootPackageJson}from"../workspace-root.js";import{WEB_APP_TEMPLATE_FILES}from"./web-template.js";import{mkdir,readdir,stat}from"node:fs/promises";import{basename,join,resolve}from"node:path";const CURRENT_DIRECTORY_PROJECT_NAME=`.`,DEFAULT_AI_PACKAGE_VERSION=`^7.0.82`,DEFAULT_CONNECT_PACKAGE_VERSION=`1.0.0`,DEFAULT_ZOD_PACKAGE_VERSION=`4.5.4`,DEFAULT_EVE_PACKAGE_CONTRACT={version:`0.52.5`,nodeEngine:`>=24`};function resolveEvePackageContract(e=DEFAULT_EVE_PACKAGE_CONTRACT){return{version:resolveVersionToken(`evePackage.version`,e.version),nodeEngine:resolveVersionToken(`evePackage.nodeEngine`,e.nodeEngine)}}function modelProviderSlug(e){let t=(e.split(`/`)[0]??``).replaceAll(/[^A-Za-z0-9._-]/gu,``);return t.length>0?t:`anthropic`}function byokProviderEnvVar(e){let t=modelProviderSlug(e).toUpperCase().replaceAll(/[^A-Z0-9]/gu,`_`);return`${/^[0-9]/.test(t)?`_`:``}${t}_API_KEY`}function agentTemplateFiles(e,t){return{"agent/agent.ts":renderAgentTemplate(e,t),"agent/channels/eve.ts":WEB_APP_TEMPLATE_FILES[`agent/channels/eve.ts`],"agent/instructions.md":AGENT_INSTRUCTIONS_TEMPLATE}}function renderAgentTemplate(e,t){let n=parseChatGptModelSelection(e);return n===void 0?BASE_AGENT_TEMPLATE.replaceAll(`__EVE_INIT_MODEL__`,e).replaceAll(`__EVE_INIT_REASONING__`,reasoningTemplateLine(t)):`import { defineAgent } from "eve";\nimport { chatgpt } from "eve/models/openai";\n\nexport default defineAgent({\n model: chatgpt(${JSON.stringify(n)}),\n${reasoningTemplateLine(t)}});\n`}function reasoningTemplateLine(e){return e===void 0||e===`provider-default`?``:` reasoning: "${e}",\n`}function renderTemplate(e,t){return e===BASE_AGENT_TEMPLATE&&parseChatGptModelSelection(t.model)!==void 0?renderAgentTemplate(t.model,t.reasoning):e.replaceAll(`__EVE_INIT_APP_NAME__`,t.appName).replaceAll(`__EVE_INIT_MODEL__`,t.model).replaceAll(`__EVE_INIT_REASONING__`,reasoningTemplateLine(t.reasoning)).replaceAll(`__EVE_INIT_BYOK_PROVIDER__`,modelProviderSlug(t.model)).replaceAll(`__EVE_INIT_BYOK_ENV_VAR__`,byokProviderEnvVar(t.model)).replaceAll(`__EVE_INIT_PACKAGE_VERSION__`,formatEveDependencySpecifier(t.eveVersion)).replaceAll(`__EVE_INIT_AI_SDK_VERSION__`,t.aiPackageVersion).replaceAll(`__EVE_INIT_CONNECT_VERSION__`,t.connectPackageVersion).replaceAll(`__EVE_INIT_ZOD_VERSION__`,t.zodPackageVersion).replaceAll(`__EVE_INIT_TYPESCRIPT_VERSION__`,t.typescriptPackageVersion).replaceAll(`__EVE_INIT_TYPES_NODE_VERSION__`,t.nodeTypesVersion).replaceAll(`__EVE_INIT_NODE_ENGINE__`,t.nodeEngine)}function formatEveDependencySpecifier(e){return/^\d+\.\d+\.\d+(?:[-+][0-9A-Za-z-.]+)?$/.test(e)?`^${e}`:e}const BASE_AGENT_TEMPLATE=`import { defineAgent } from "eve";
2
2
 
3
3
  export default defineAgent({
4
4
  model: "__EVE_INIT_MODEL__",
@@ -1,7 +1,6 @@
1
1
  import type { SessionStateMap } from "#harness/types.js";
2
2
  export declare const TASK_DELIVERY_CONTEXT_LABEL = "[Task state]";
3
- export declare const TASK_DELIVERY_INITIATING_INSTRUCTION = "Background task reporting: launch acknowledgement\nThe accompanying [Task state] system message is runtime-authored and lists background tasks accepted so far from the current turn. They continue independently after this turn.\n\nContinue carrying out the user's request, including starting any remaining background work. When no further tool calls are needed in this turn, send one brief user-facing acknowledgement that the background work has started. Do not wait for results or report results that are not available yet. End the turn after the acknowledgement.";
4
- export declare const TASK_DELIVERY_PENDING_INSTRUCTION = "Background task control: incomplete cohort\nThis framework-authored instruction overrides any earlier instruction to report, summarize, acknowledge, or otherwise handle background results.\n\nThe accompanying [Task state] message is runtime-authored and lists tasks started by the same parent turn. At least one of those tasks is still pending, so the combined report is not ready.\n\nAction:\n- You may call tools only if the newly delivered task result requires immediate action.\n- Otherwise, take no action.\n\nDelivery:\n- Do not report completed tasks or partial results.\n- Do not provide progress, status, an acknowledgement, or a waiting message.\n- After any necessary tool calls, your entire final text response must be exactly <eve-empty-delivery/> and no other text.\n\nIncorrect: \"Two of three tasks have completed.\"\nIncorrect: \"Still waiting for the remaining task.\"\nCorrect: <eve-empty-delivery/>";
3
+ export declare const TASK_DELIVERY_INITIATING_INSTRUCTION = "Background task reporting: launch acknowledgement\nThe latest [Task state] message is runtime-authored and lists background tasks accepted so far from the current turn. They continue independently after this turn.\n\nContinue carrying out the user's request, including starting any remaining background work. When no further tool calls are needed in this turn, send one brief user-facing acknowledgement that the background work has started. Do not wait for results or report results that are not available yet. End the turn after the acknowledgement.";
5
4
  export declare const TASK_DELIVERY_SETTLED_INSTRUCTION = "Background task reporting\nThis turn was triggered by background task activity. The accompanying [Task state] message is runtime-authored and lists tasks started by the same parent turn, all settled, with every available terminal output. Do not reply with <eve-empty-delivery/>. Send one user-facing response that combines their useful results.";
6
5
  /** Returns model context and cohort phase for tasks started by the same parent turn as this delivery. */
7
6
  export declare function resolveTaskDeliveryContext(input: {
@@ -10,6 +9,7 @@ export declare function resolveTaskDeliveryContext(input: {
10
9
  }): {
11
10
  readonly context: string;
12
11
  readonly phase: "pending" | "settled";
12
+ readonly rootTurnId: string;
13
13
  } | undefined;
14
14
  /** Returns model context for durable tasks launched by the active parent turn. */
15
15
  export declare function resolveInitiatingTaskContext(input: {
@@ -1,20 +1,4 @@
1
1
  import{getSessionTaskIndex}from"#tasks/session-index.js";import{EMPTY_DELIVERY_SENTINEL}from"#shared/empty-delivery.js";const TASK_DELIVERY_CONTEXT_LABEL=`[Task state]`,TASK_DELIVERY_INITIATING_INSTRUCTION=`Background task reporting: launch acknowledgement
2
- The accompanying ${TASK_DELIVERY_CONTEXT_LABEL} system message is runtime-authored and lists background tasks accepted so far from the current turn. They continue independently after this turn.
2
+ The latest ${TASK_DELIVERY_CONTEXT_LABEL} message is runtime-authored and lists background tasks accepted so far from the current turn. They continue independently after this turn.
3
3
 
4
- Continue carrying out the user's request, including starting any remaining background work. When no further tool calls are needed in this turn, send one brief user-facing acknowledgement that the background work has started. Do not wait for results or report results that are not available yet. End the turn after the acknowledgement.`,TASK_DELIVERY_PENDING_INSTRUCTION=`Background task control: incomplete cohort
5
- This framework-authored instruction overrides any earlier instruction to report, summarize, acknowledge, or otherwise handle background results.
6
-
7
- The accompanying ${TASK_DELIVERY_CONTEXT_LABEL} message is runtime-authored and lists tasks started by the same parent turn. At least one of those tasks is still pending, so the combined report is not ready.
8
-
9
- Action:
10
- - You may call tools only if the newly delivered task result requires immediate action.
11
- - Otherwise, take no action.
12
-
13
- Delivery:
14
- - Do not report completed tasks or partial results.
15
- - Do not provide progress, status, an acknowledgement, or a waiting message.
16
- - After any necessary tool calls, your entire final text response must be exactly ${EMPTY_DELIVERY_SENTINEL} and no other text.
17
-
18
- Incorrect: "Two of three tasks have completed."
19
- Incorrect: "Still waiting for the remaining task."
20
- Correct: ${EMPTY_DELIVERY_SENTINEL}`,TASK_DELIVERY_SETTLED_INSTRUCTION=`Background task reporting\nThis turn was triggered by background task activity. The accompanying ${TASK_DELIVERY_CONTEXT_LABEL} message is runtime-authored and lists tasks started by the same parent turn, all settled, with every available terminal output. Do not reply with ${EMPTY_DELIVERY_SENTINEL}. Send one user-facing response that combines their useful results.`;function resolveTaskDeliveryContext(e){let t=getSessionTaskIndex(e.state),n=t.find(t=>e.taskDeliveryId.startsWith(`${t.taskId}:`));return n===void 0?void 0:projectTaskCohort(t.filter(e=>e.createdByTurnId===n.createdByTurnId))}function resolveInitiatingTaskContext(e){let t=getSessionTaskIndex(e.state).filter(t=>t.createdByTurnId===e.turnId);if(t.some(e=>e.executor!==void 0&&e.terminalView===void 0))return{...projectTaskCohort(t),phase:`initiating`}}function projectTaskCohort(e){let t=e.every(e=>e.terminalView!==void 0),n=e.map(e=>({name:e.metadata.name,output:t?e.terminalView?.lastOutput:void 0,status:e.terminalView?.status??`pending`,taskId:e.taskId}));return{context:`${TASK_DELIVERY_CONTEXT_LABEL}\n${JSON.stringify({tasks:n})}`,phase:t?`settled`:`pending`}}export{TASK_DELIVERY_CONTEXT_LABEL,TASK_DELIVERY_INITIATING_INSTRUCTION,TASK_DELIVERY_PENDING_INSTRUCTION,TASK_DELIVERY_SETTLED_INSTRUCTION,resolveInitiatingTaskContext,resolveTaskDeliveryContext};
4
+ Continue carrying out the user's request, including starting any remaining background work. When no further tool calls are needed in this turn, send one brief user-facing acknowledgement that the background work has started. Do not wait for results or report results that are not available yet. End the turn after the acknowledgement.`,TASK_DELIVERY_SETTLED_INSTRUCTION=`Background task reporting\nThis turn was triggered by background task activity. The accompanying ${TASK_DELIVERY_CONTEXT_LABEL} message is runtime-authored and lists tasks started by the same parent turn, all settled, with every available terminal output. Do not reply with ${EMPTY_DELIVERY_SENTINEL}. Send one user-facing response that combines their useful results.`;function resolveTaskDeliveryContext(e){let t=getSessionTaskIndex(e.state),n=t.find(t=>e.taskDeliveryId.startsWith(`${t.taskId}:`));return n===void 0?void 0:{...projectTaskCohort(t.filter(e=>e.createdByTurnId===n.createdByTurnId)),rootTurnId:n.createdByTurnId}}function resolveInitiatingTaskContext(e){let t=getSessionTaskIndex(e.state).filter(t=>t.createdByTurnId===e.turnId);if(t.some(e=>e.executor!==void 0&&e.terminalView===void 0))return{...projectTaskCohort(t),phase:`initiating`}}function projectTaskCohort(e){let t=e.every(e=>e.terminalView!==void 0),n=e.map(e=>({name:e.metadata.name,output:t?e.terminalView?.lastOutput:void 0,status:e.terminalView?.status??`pending`,taskId:e.taskId}));return{context:`${TASK_DELIVERY_CONTEXT_LABEL}\n${JSON.stringify({tasks:n})}`,phase:t?`settled`:`pending`}}export{TASK_DELIVERY_CONTEXT_LABEL,TASK_DELIVERY_INITIATING_INSTRUCTION,TASK_DELIVERY_SETTLED_INSTRUCTION,resolveInitiatingTaskContext,resolveTaskDeliveryContext};
@@ -1 +1 @@
1
- import{TASK_DELIVERY_INITIATING_INSTRUCTION,TASK_DELIVERY_PENDING_INSTRUCTION,TASK_DELIVERY_SETTLED_INSTRUCTION}from"#tasks/delivery-context.js";import{CONDITIONAL_DELIVERY_INSTRUCTION}from"#shared/empty-delivery.js";const POLICIES={conditional:{allowsEmptyDelivery:!0,instruction:CONDITIONAL_DELIVERY_INSTRUCTION},initiating:{allowsEmptyDelivery:!1,instruction:TASK_DELIVERY_INITIATING_INSTRUCTION},normal:{allowsEmptyDelivery:!1},pending:{allowsEmptyDelivery:!0,instruction:TASK_DELIVERY_PENDING_INSTRUCTION},settled:{allowsEmptyDelivery:!1,instruction:TASK_DELIVERY_SETTLED_INSTRUCTION}};function resolveDeliveryPolicy(e){return e.hasOutputSchema||e.isChild?POLICIES.normal:e.taskDeliveryPhase===`pending`?POLICIES.pending:e.taskDeliveryPhase===`settled`?POLICIES.settled:e.isFirstTurn&&e.hasScheduleProvenance?POLICIES.conditional:e.taskDeliveryPhase===`initiating`?POLICIES.initiating:POLICIES.normal}export{resolveDeliveryPolicy};
1
+ import{TASK_DELIVERY_INITIATING_INSTRUCTION,TASK_DELIVERY_SETTLED_INSTRUCTION}from"#tasks/delivery-context.js";import{CONDITIONAL_DELIVERY_INSTRUCTION}from"#shared/empty-delivery.js";const POLICIES={conditional:{allowsEmptyDelivery:!0,instruction:CONDITIONAL_DELIVERY_INSTRUCTION},initiating:{allowsEmptyDelivery:!1,instruction:TASK_DELIVERY_INITIATING_INSTRUCTION},normal:{allowsEmptyDelivery:!1},pending:{allowsEmptyDelivery:!0},settled:{allowsEmptyDelivery:!1,instruction:TASK_DELIVERY_SETTLED_INSTRUCTION}};function resolveDeliveryPolicy(e){return e.hasOutputSchema||e.isChild?POLICIES.normal:e.taskDeliveryPhase===`pending`?POLICIES.pending:e.taskDeliveryPhase===`settled`?POLICIES.settled:e.isFirstTurn&&e.hasScheduleProvenance?POLICIES.conditional:e.taskDeliveryPhase===`initiating`?POLICIES.initiating:POLICIES.normal}export{resolveDeliveryPolicy};
@@ -1,5 +1,5 @@
1
1
  import type { Approval } from "#approval/definition.js";
2
- import type { JsonObject } from "#shared/json.js";
2
+ import type { JsonObject, JsonPrimitive } from "#shared/json.js";
3
3
  export type DurableDynamicCallbackPhase = "labelComplete" | "labelDelta" | "labelStart" | "approvalKey" | "approvalRequest" | "approvalResponse" | "execute" | "toModelOutput";
4
4
  export type DurableDynamicCallbackFn = (closure: JsonObject, ...args: never[]) => unknown;
5
5
  /**
@@ -71,6 +71,22 @@ export declare function hasUnregisteredDurableDynamicCallbacks(metadata: readonl
71
71
  resolverSlug: string;
72
72
  entryKey: string;
73
73
  }[], scope: Pick<DynamicToolCallbackOwner, "sessionId" | "scope">): boolean;
74
+ type DurableCallbackJsonValue<T> = T extends (...args: never[]) => unknown ? never : T extends JsonPrimitive ? T : T extends readonly (infer TItem)[] ? readonly DurableCallbackJsonValue<TItem>[] : T extends object ? DurableCallbackJsonObject<T> : never;
75
+ type DurableCallbackJsonObject<T extends object> = Extract<keyof T, symbol> extends never ? {
76
+ readonly [TKey in keyof T]: DurableCallbackJsonValue<Exclude<T[TKey], undefined>> | Extract<T[TKey], undefined>;
77
+ } : never;
78
+ /**
79
+ * Defines a replayable callback for tools created outside eve's authored-source
80
+ * transform, such as tools returned by a provider package.
81
+ *
82
+ * Put every per-tool value in `closure`. eve snapshots that JSON-serializable
83
+ * object when the dynamic tool resolves and passes it as the first argument to
84
+ * the current callback implementation during both live execution and replay.
85
+ */
86
+ export declare function defineDurableCallback<TClosure extends object, TArgs extends unknown[], TResult>(input: {
87
+ readonly callback: (closure: TClosure, ...args: TArgs) => TResult;
88
+ readonly closure: TClosure & DurableCallbackJsonObject<TClosure>;
89
+ }): (...args: TArgs) => TResult;
74
90
  /** Marks a live callback with the descriptor needed to register it at resolve time. */
75
91
  export declare function stampDurableDynamicCallback<TCallback extends (...args: never[]) => unknown>(callback: TCallback, descriptor: StampedDurableDynamicCallback): TCallback;
76
92
  export declare function readDurableDynamicCallback(callback: unknown): StampedDurableDynamicCallback | undefined;
@@ -88,3 +104,4 @@ export declare function collectDurableDynamicToolCallbacks(input: {
88
104
  readonly toModelOutput?: (...args: never[]) => unknown;
89
105
  }): LiveDurableDynamicToolCallbacks;
90
106
  export declare function readDurableDynamicToolCallbacks(definition: object): LiveDurableDynamicToolCallbacks | undefined;
107
+ export {};
@@ -1 +1 @@
1
- import{resolveApprovalPolicy}from"#approval/definition.js";const STAMPED_CALLBACK=Symbol.for(`eve:durable-dynamic-callback`),DURABLE_DYNAMIC_TOOL_CALLBACKS=Symbol.for(`eve:durable-dynamic-tool-callbacks`),REGISTRY=Symbol.for(`eve:scoped-dynamic-tool-callbacks`);function getRegistry(){let e=globalThis;return e[REGISTRY]??=new Map}function getSessionBindings(e){let t=getRegistry(),n=t.get(e);return n!==void 0&&(t.delete(e),t.set(e,n)),n}function callbackKey(e,t){return JSON.stringify([e.scope,e.resolverSlug,e.entryKey,e.name,t])}function registerDurableDynamicCallback(e){let t=getRegistry(),n=getSessionBindings(e.owner.sessionId);n===void 0&&(n=new Map,t.set(e.owner.sessionId,n),t.size>1024&&t.delete(t.keys().next().value)),n.set(callbackKey(e.owner,e.phase),e.callback)}function lookupDurableDynamicCallback(e,t){return getSessionBindings(e.sessionId)?.get(callbackKey(e,t))}function clearDurableDynamicCallbacks(e,t){if(t===void 0){getRegistry().delete(e);return}let n=getSessionBindings(e);if(n===void 0)return;let r=JSON.stringify([t.scope,t.resolverSlug]).slice(0,-1)+`,`;for(let e of n.keys())e.startsWith(r)&&n.delete(e)}function callDurableDynamicCallback(e,t,...n){return e(t,...n)}function hasUnregisteredDurableDynamicCallbacks(e,t){return e.some(e=>durableCallbackPhases(e.callbacks).some(n=>lookupDurableDynamicCallback({...e,...t},n)===void 0))}function durableCallbackPhases(e){return[[`execute`,e.execute],[`labelComplete`,e.label?.complete],[`labelDelta`,e.label?.delta],[`labelStart`,e.label?.start],[`approvalKey`,e.approvalKey],[`approvalRequest`,e.approvalRequest],[`approvalResponse`,e.approvalResponse],[`toModelOutput`,e.toModelOutput]].flatMap(([e,t])=>t===void 0?[]:[e])}function stampDurableDynamicCallback(e,t){return Object.defineProperty(e,STAMPED_CALLBACK,{configurable:!0,value:t}),e}function readDurableDynamicCallback(e){if(typeof e==`function`)return Reflect.get(e,STAMPED_CALLBACK)}function stampDurableDynamicToolCallbacks(e,t){Object.defineProperty(e,DURABLE_DYNAMIC_TOOL_CALLBACKS,{configurable:!0,value:t})}function collectDurableDynamicToolCallbacks(e){let t=readDurableDynamicCallback(e.label?.complete),n=readDurableDynamicCallback(e.label?.delta),r=readDurableDynamicCallback(e.label?.start),i=e.approval===void 0?void 0:readDurableDynamicCallback(resolveApprovalPolicy(e.approval)),a=e.approval===void 0||typeof e.approval==`function`?void 0:readDurableDynamicCallback(e.approval.response),o=readDurableDynamicCallback(e.approvalKey),s=readDurableDynamicCallback(e.execute),c=readDurableDynamicCallback(e.toModelOutput),l={};return s!==void 0&&(l.execute=s),(t!==void 0||n!==void 0||r!==void 0)&&(l.label={complete:t,delta:n,start:r}),o!==void 0&&(l.approvalKey=o),i!==void 0&&(l.approvalRequest=i),a!==void 0&&(l.approvalResponse=a),c!==void 0&&(l.toModelOutput=c),l}function readDurableDynamicToolCallbacks(e){return e[DURABLE_DYNAMIC_TOOL_CALLBACKS]}export{DURABLE_DYNAMIC_TOOL_CALLBACKS,callDurableDynamicCallback,clearDurableDynamicCallbacks,collectDurableDynamicToolCallbacks,hasUnregisteredDurableDynamicCallbacks,lookupDurableDynamicCallback,readDurableDynamicCallback,readDurableDynamicToolCallbacks,registerDurableDynamicCallback,stampDurableDynamicCallback,stampDurableDynamicToolCallbacks};
1
+ import{resolveApprovalPolicy}from"#approval/definition.js";const STAMPED_CALLBACK=Symbol.for(`eve:durable-dynamic-callback`),DURABLE_DYNAMIC_TOOL_CALLBACKS=Symbol.for(`eve:durable-dynamic-tool-callbacks`),REGISTRY=Symbol.for(`eve:scoped-dynamic-tool-callbacks`);function getRegistry(){let e=globalThis;return e[REGISTRY]??=new Map}function getSessionBindings(e){let t=getRegistry(),n=t.get(e);return n!==void 0&&(t.delete(e),t.set(e,n)),n}function callbackKey(e,t){return JSON.stringify([e.scope,e.resolverSlug,e.entryKey,e.name,t])}function registerDurableDynamicCallback(e){let t=getRegistry(),n=getSessionBindings(e.owner.sessionId);n===void 0&&(n=new Map,t.set(e.owner.sessionId,n),t.size>1024&&t.delete(t.keys().next().value)),n.set(callbackKey(e.owner,e.phase),e.callback)}function lookupDurableDynamicCallback(e,t){return getSessionBindings(e.sessionId)?.get(callbackKey(e,t))}function clearDurableDynamicCallbacks(e,t){if(t===void 0){getRegistry().delete(e);return}let n=getSessionBindings(e);if(n===void 0)return;let r=JSON.stringify([t.scope,t.resolverSlug]).slice(0,-1)+`,`;for(let e of n.keys())e.startsWith(r)&&n.delete(e)}function callDurableDynamicCallback(e,t,...n){return e(t,...n)}function hasUnregisteredDurableDynamicCallbacks(e,t){return e.some(e=>durableCallbackPhases(e.callbacks).some(n=>lookupDurableDynamicCallback({...e,...t},n)===void 0))}function durableCallbackPhases(e){return[[`execute`,e.execute],[`labelComplete`,e.label?.complete],[`labelDelta`,e.label?.delta],[`labelStart`,e.label?.start],[`approvalKey`,e.approvalKey],[`approvalRequest`,e.approvalRequest],[`approvalResponse`,e.approvalResponse],[`toModelOutput`,e.toModelOutput]].flatMap(([e,t])=>t===void 0?[]:[e])}function defineDurableCallback(e){return stampDurableDynamicCallback((...t)=>e.callback(e.closure,...t),{callback:(t,...n)=>Reflect.apply(e.callback,void 0,[t,...n]),closure:e.closure})}function stampDurableDynamicCallback(e,t){return Object.defineProperty(e,STAMPED_CALLBACK,{configurable:!0,value:t}),e}function readDurableDynamicCallback(e){if(typeof e==`function`)return Reflect.get(e,STAMPED_CALLBACK)}function stampDurableDynamicToolCallbacks(e,t){Object.defineProperty(e,DURABLE_DYNAMIC_TOOL_CALLBACKS,{configurable:!0,value:t})}function collectDurableDynamicToolCallbacks(e){let t=readDurableDynamicCallback(e.label?.complete),n=readDurableDynamicCallback(e.label?.delta),r=readDurableDynamicCallback(e.label?.start),i=e.approval===void 0?void 0:readDurableDynamicCallback(resolveApprovalPolicy(e.approval)),a=e.approval===void 0||typeof e.approval==`function`?void 0:readDurableDynamicCallback(e.approval.response),o=readDurableDynamicCallback(e.approvalKey),s=readDurableDynamicCallback(e.execute),c=readDurableDynamicCallback(e.toModelOutput),l={};return s!==void 0&&(l.execute=s),(t!==void 0||n!==void 0||r!==void 0)&&(l.label={complete:t,delta:n,start:r}),o!==void 0&&(l.approvalKey=o),i!==void 0&&(l.approvalRequest=i),a!==void 0&&(l.approvalResponse=a),c!==void 0&&(l.toModelOutput=c),l}function readDurableDynamicToolCallbacks(e){return e[DURABLE_DYNAMIC_TOOL_CALLBACKS]}export{DURABLE_DYNAMIC_TOOL_CALLBACKS,callDurableDynamicCallback,clearDurableDynamicCallbacks,collectDurableDynamicToolCallbacks,defineDurableCallback,hasUnregisteredDurableDynamicCallbacks,lookupDurableDynamicCallback,readDurableDynamicCallback,readDurableDynamicToolCallbacks,registerDurableDynamicCallback,stampDurableDynamicCallback,stampDurableDynamicToolCallbacks};
@@ -28,6 +28,8 @@ export default defineChannel({
28
28
  });
29
29
  ```
30
30
 
31
+ Adjacent queued messages can combine into one turn only when their full auth contexts match, including identity, issuer, authenticator, and authorization attributes. Their attachments and context stay in payload order. A different auth context ends the batch; eve does not regroup messages across intervening senders. Anonymous deliveries stay separate. Turns still share the session's conversation history.
32
+
31
33
  `from(address).send(...)`, fixed `Session.send(...)`, cross-channel sends, and Chat SDK bridge sends also accept a per-send `turnPolicy` override. Pure `inputResponses` deliveries answer their pending request without steering. Explicit `cancel()` remains the stop-without-replacement operation.
32
34
 
33
35
  Channel admission still runs first. Ignored mentions, rejected signatures, duplicates, and any other dropped platform events never affect the active turn.
@@ -294,6 +294,8 @@ export default slackChannel({
294
294
  });
295
295
  ```
296
296
 
297
+ With `"queue"`, adjacent messages with matching full auth contexts can combine into one turn, keeping their attachments and context in order. Messages from different users, or from the same user with different authorization attributes, stay separate. Anonymous deliveries also stay separate. Batching follows session-inbox order, and turns still share the thread's session history.
298
+
297
299
  Message hooks (`onMessage`, `onAppMention`, and `onDirectMessage`) also receive thread-bound session operations directly on `ctx`. `ctx.cancel({ turnId? })` remains useful for a Stop button: it cancels without sending replacement input. `"accepted"` means the live thread session durably queued that request; a parked session consumes it as a no-op, and `"no_active_turn"` means the thread has no active session owner.
298
300
 
299
301
  Message and interaction hooks expose every current-owner operation directly on `ctx`:
@@ -16,7 +16,7 @@ eve eval --timeout 60000 # per-eval timeout in milliseconds
16
16
  eve eval --max-concurrency 4 # cap concurrent eval executions (default 8)
17
17
  eve eval --junit .eve/junit.xml # write JUnit XML
18
18
  eve eval --list # print discovered evals without running
19
- eve eval --verbose # stream per-eval t.log lines to stdout
19
+ eve eval --verbose # stream per-eval logs and workflow run IDs
20
20
  eve eval --json # machine-readable output
21
21
  eve eval --skip-report # skip config and eval-defined reporters (e.g. Braintrust)
22
22
  ```
@@ -37,6 +37,8 @@ An eval that calls `t.skip(reason)` is reported as skipped, does not count as pa
37
37
 
38
38
  `eve eval --json` flushes the complete report before exiting, including when stdout is piped to another process or redirected to a file.
39
39
 
40
+ With `--verbose`, eve prefixes each line with its eval ID. It streams authored `t.log()` lines as they occur, then prints the workflow run ID for every captured primary and secondary session. Use those `wrun_...` IDs to find the corresponding runs in your workflow provider.
41
+
40
42
  ## Artifacts
41
43
 
42
44
  Each run drops artifacts under `.eve/evals/<timestamp>/`: a run `summary.json`, a `results.jsonl` index, and per-eval assertion results, verdicts, captured event streams, and `t.log` lines under `evals/`. The console output stays tight on purpose; when an eval fails, the artifact has the full story.
@@ -253,7 +253,42 @@ Write callback properties as inline function expressions, arrows, method shortha
253
253
 
254
254
  Closure values must be JSON-serializable. Plain objects, arrays, strings, finite numbers, booleans, and `null` are supported; `undefined` object properties are omitted. Functions, class instances, `Date`, `Map`, symbols, non-finite numbers, and cyclic values fail resolution with the tool name and callback phase instead of being serialized lossily.
255
255
 
256
- Call expressions such as `execute: makeExecutor()` are not transformed. Put the callback body directly in `defineTool()` inside an authored module; eve-provided factories, including [memory provider tools](../memory), may also supply pre-registered callbacks. eve rejects a dynamic tool if any present callback lacks durable metadata.
256
+ Call expressions such as `execute: makeExecutor()` are not transformed. Put the callback body directly in `defineTool()` inside an authored module; eve rejects a dynamic tool if a callback lacks durable metadata.
257
+
258
+ ### Create dynamic tools in a package
259
+
260
+ Prefer an [extension](../extensions) for reusable eve integrations. Extensions contribute a namespaced set of capabilities that consumers can override. Author the final `defineTool()` calls in the extension source. Then build the package with `eve extension build` so eve transforms its callbacks.
261
+
262
+ Use `defineDurableCallback` when a provider package must return dynamic `defineTool()` values directly. eve cannot transform callback code inside an installed dependency. Put every per-tool value in the helper's `closure`. The callback receives that snapshot as its first argument. The closure follows the same JSON-serializability rules as transformed captures.
263
+
264
+ ```ts title="provider-package/search.ts"
265
+ import { defineDurableCallback, defineTool } from "eve/tools";
266
+ import { z } from "zod";
267
+
268
+ interface SearchInput {
269
+ query: string;
270
+ }
271
+
272
+ export function createSearchTool(baseUrl: string) {
273
+ return defineTool({
274
+ description: "Search the provider catalog.",
275
+ inputSchema: z.object({ query: z.string() }),
276
+ execute: defineDurableCallback({
277
+ closure: { baseUrl },
278
+ callback: async ({ baseUrl }, { query }: SearchInput) => {
279
+ const response = await fetch(`${baseUrl}/search?q=${encodeURIComponent(query)}`);
280
+ return response.json();
281
+ },
282
+ }),
283
+ });
284
+ }
285
+ ```
286
+
287
+ Wrap every callback property with the helper. This includes labels, approval policies, `approvalKey`, `execute`, and `toModelOutput`.
288
+
289
+ `closure` is the callback's only durable snapshot. Store the identifiers and configuration needed to reproduce the call there. Reconstruct clients or look up live runtime state when the callback runs. The callback may call stable imported functions, but it must not capture runtime objects outside `closure`. Those values disappear on a cold start.
290
+
291
+ eve-provided factories, including [memory provider tools](../memory), use the same durable callback mechanism.
257
292
 
258
293
  ### Identity and redeploys
259
294
 
@@ -69,8 +69,9 @@ Instrumentation providers receive `channel.delivery.started` followed by
69
69
  `channel.delivery.failed` for every inbound channel operation. The lifecycle
70
70
  covers durable processing through the terminal state of the resulting turn, not
71
71
  messages an adapter sends back to Slack, Telegram, Twilio, or another platform.
72
- Several deliveries can coalesce into one turn while retaining separate lifecycle
73
- pairs, and an adapter can consume a delivery without starting a turn.
72
+ Adjacent queued messages with matching authenticated identities and authorization
73
+ attributes can share a turn while retaining separate lifecycle pairs. An adapter
74
+ can also consume a delivery without starting a turn.
74
75
 
75
76
  Each operation has a framework-owned `deliveryId` distinct from its optional
76
77
  platform request ID. Metadata-only providers receive identity, channel, session,
@@ -86,7 +86,7 @@ See [Dynamic capabilities](./guides/dynamic-capabilities) for examples and failu
86
86
 
87
87
  [Compaction](./concepts/sessions-runs-and-streaming#compact-clear-and-reset) treats user-role instructions like ordinary conversation history, so a summary may replace their original text. Clear removes them with the rest of model-message history and does not rerun static or dynamic instructions. System-role instructions remain because they are outside history.
88
88
 
89
- Keep system-role content stable and place it before frequently changing context when practical. That gives providers the best opportunity to reuse a prompt prefix, but cache behavior and billing remain provider-specific. User-role instructions preserve the normal append-only message prefix. Framework context such as dynamic skill announcements also keeps its position before the current request across tool steps, including when a durable step resumes. eve does not promise a cache hit.
89
+ Keep system-role content stable and place it before frequently changing context when practical. That gives providers the best opportunity to reuse a prompt prefix, but cache behavior and billing remain provider-specific. User-role instructions preserve the normal append-only message prefix. Framework announcements about available skills and background tasks are retained in user-role history: changed snapshots append after earlier steps instead of replacing the context sent with those steps. Unchanged announcements are skipped until history is cleared or compacted. eve does not promise a cache hit.
90
90
 
91
91
  ## Disclaimer
92
92