eve 0.70.2 → 0.71.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +23 -0
- package/dist/src/chunks/{use-eve-agent-CJQeE7-t.js → use-eve-agent-CFCaYnrI.js} +1 -1
- package/dist/src/chunks/{use-eve-agent-DdemtY6C.js → use-eve-agent-DcDhXNv1.js} +1 -1
- package/dist/src/client/ndjson.js +1 -1
- package/dist/src/compiled/.vendor-stamp.json +1 -1
- package/dist/src/context/memory-tools.js +1 -1
- package/dist/src/execution/dynamic-workflow/tool.js +1 -1
- package/dist/src/execution/proxied-deliver-step.js +1 -1
- package/dist/src/execution/sandbox/bash.d.ts +34 -11
- package/dist/src/execution/sandbox/bash.js +24 -1
- package/dist/src/execution/sandbox/bindings/docker-session.js +1 -1
- package/dist/src/execution/sandbox/bindings/just-bash-runtime.js +1 -1
- package/dist/src/execution/sandbox/bindings/local-provider-utils.js +1 -1
- package/dist/src/execution/sandbox/bindings/microsandbox-runtime.js +1 -1
- package/dist/src/execution/sandbox/bindings/vercel.js +1 -1
- package/dist/src/execution/sandbox/glob-tool.js +1 -1
- package/dist/src/execution/sandbox/grep-tool.js +1 -1
- package/dist/src/execution/tools/agent-router-workflow.js +1 -1
- package/dist/src/harness/attachment-staging.js +1 -1
- package/dist/src/harness/compaction-prompt.js +1 -1
- package/dist/src/harness/token-estimate.d.ts +6 -4
- package/dist/src/harness/token-estimate.js +1 -1
- package/dist/src/harness/tool-loop.js +2 -2
- package/dist/src/instrumentation/ai-sdk-hook-bridge.js +1 -1
- package/dist/src/instrumentation/lifecycle.d.ts +2 -0
- package/dist/src/internal/application/package.js +1 -1
- package/dist/src/protocol/message.d.ts +2 -1
- package/dist/src/react/use-eve-agent.js +1 -1
- package/dist/src/setup/scaffold/create/project.js +1 -1
- package/dist/src/subagents/hitl-proxy.d.ts +2 -0
- package/dist/src/subagents/hitl-proxy.js +1 -1
- package/dist/src/svelte/index.js +1 -1
- package/dist/src/svelte/use-eve-agent.js +1 -1
- package/dist/src/tools/provided/ask-question-workflow.js +1 -1
- package/dist/src/tools/provided/bash.d.ts +17 -2
- package/dist/src/tools/provided/bash.js +1 -1
- package/dist/src/tools/provided/sleep-workflow.js +1 -1
- package/dist/src/tracing/agent-tool-instrumentation.js +1 -1
- package/dist/src/vue/index.js +1 -1
- package/dist/src/vue/use-eve-agent.js +1 -1
- package/docs/README.md +1 -0
- package/docs/code-extension.mdx +119 -0
- package/docs/concepts/built-in-tools.md +17 -0
- package/docs/concepts/sessions-runs-and-streaming.md +3 -1
- package/docs/extensions.md +1 -0
- package/docs/guides/client/streaming.mdx +1 -1
- package/docs/memory/custom-provider.md +4 -1
- package/docs/meta.json +1 -0
- package/docs/sandbox/index.mdx +2 -0
- package/package.json +1 -1
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{ToolLoopAgent,isStepCount}from"ai";import{readClientContext}from"#internal/client-context.js";import{createErrorId,createLogger,formatError,logError}from"#internal/logging.js";import{contextStorage}from"#context/container.js";import{AuthKey,HistoryStateKey,ParentSessionKey,ScheduleIdKey,SessionCallbackKey,StaticModelReferenceKey}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,createTurnWaitingEvent}from"#protocol/message.js";import{toModelSchema}from"#tools/schema.js";import{resolveProviderHeaders}from"#internal/gateway.js";import{formatLanguageModelGatewayId}from"#internal/runtime-model.js";import{TOOL_RESULT_BOUNDARY,createFrameworkUserMessage,createUserMessage,followsToolResults,frameworkMessageKindForStepInput,normalizeModelMessages,normalizeUserContent,resolveAssistantStepText,validateHarnessModelMessages}from"#harness/messages.js";import{getEffectiveModelSelection}from"#context/effective-model.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{renderFinalOutputWhileWorkingError}from"#execution/tasks/render.js";import{renderPendingApprovalsInstruction,renderPendingApprovalsSnippet}from"#harness/hitl/approval-prompt.js";import{setTimeout}from"node:timers/promises";import{resolveConversationId}from"#shared/conversation-identity.js";import{accumulateTurnUsage,getSessionUsage,getTurnUsageState,setTurnUsageState}from"#harness/turn-tag-state.js";import{getPendingCoordinationBatch,resolvePendingCoordination,setPendingCoordinationBatch}from"#harness/coordination.js";import{hydrateSandboxAttachments,moveToolResultFilesToUserMessages,stageAttachmentsToSandbox,stageToolResultMedia}from"#harness/attachment-staging.js";import{getPendingAnnouncements}from"#harness/announcements.js";import{activeTurnId}from"#harness/active-turn-id.js";import{buildDynamicSubagentTools}from"#context/dynamic-subagent-lifecycle.js";import{createHistoryViewPreparer}from"#shared/history-view.js";import{isDynamicModelSelectionError}from"#context/dynamic-model-lifecycle.js";import{isTurnCancellation,throwIfTurnAborted}from"#harness/turn-cancellation.js";import{getPendingAuthorization,getSupersededAuthorizationChallenges,setPendingAuthorization}from"#harness/authorization.js";import{appendPendingInputBatch,consumeDeferredStepInput,getApprovedTools,getPendingInputRequestIds,hasRunnableDeferredStepInput,hasStepInput,resolvePendingInput,selectApprovalReplayBatch}from"#harness/input-requests.js";import{buildDynamicInstructionMessages,drainDynamicInstructionUserMessages,prepareDynamicInstructionPreamble}from"#context/dynamic-instruction-lifecycle.js";import{PendingSkillAnnouncementKey}from"#context/dynamic-skill-lifecycle.js";import{getPendingInputBatches,queueDeferredStepInput}from"#harness/pending-input-batches.js";import{setEveAttributes}from"#runtime/attributes/emit.js";import{authorizationEventFields}from"#harness/authorization-event-fields.js";import{declinedSignInEvents,withdrawHeldSignIns}from"#harness/held-requests.js";import{createToolResultMessagePartFromToolError,isToolResultError}from"#harness/action-result-helpers.js";import{summarizeKnownError}from"#harness/semantic-errors/index.js";import{getApprovalAuditState,markApprovalCandidateHistoryEventEmitted,markApprovalCandidatePendingEventEmitted,markApprovalSettlementEventEmitted}from"#harness/approval-candidates.js";import{estimateTokens}from"#harness/token-estimate.js";import{extractToolApprovalInputRequests}from"#harness/input-extraction.js";import{clearTurnClientContextState,getTurnClientContextState,setTurnClientContextState}from"#harness/turn-client-context.js";import{getInvalidToolCallInputError,isInvalidToolCall}from"#harness/tool-call-input-errors.js";import{ContentFilteredModelResponseError,EmptyModelResponseError,classifyModelCallError,extractModelCallErrorDetails,extractUnsupportedProviderToolTypes,extractUpstreamRejectionMessage,isNoOutputGeneratedError}from"#harness/model-call-error.js";import{interruptStreamOnFailure}from"#harness/interruptible-stream.js";import{resolveInlineAuthorizationInterrupt}from"#harness/inline-tool-authorization.js";import{createCurrentMessages,hasTailApprovalResponse}from"#harness/current-messages.js";import{applyLastToolCacheBreakpoint,applySystemCacheBreakpoint,detectPromptCachePath,getAnthropicCacheMarker}from"#harness/prompt-cache.js";import{resolveCallProviderOptions}from"#harness/provider-safety.js";import{requireSessionModelReference}from"#harness/types.js";import{GenerationSteering}from"#harness/generation-steering.js";import{estimateRequestEnvelope,getRequestEnvelopeTokens,setRequestEnvelopeTokens}from"#harness/request-envelope.js";import{buildDynamicTools,buildResponseAuthorizationTools}from"#context/build-dynamic-tools.js";import{compactMessages,getInputTokenCount,resolveCompactionModel,shouldCompact}from"#harness/compaction.js";import{collectDeferredCalls,dispatchApprovedWorkflowCalls}from"#harness/workflow-dispatch.js";import{applySessionLimitContinuation,enforceSessionUsageLimit}from"#harness/session-limit-enforcement.js";import{coordinateApprovalDelivery}from"#harness/approval-delivery-coordinator.js";import{convertStaleResponsesToUserMessage,dropStaleSessionLimitContinuationResponses}from"#harness/stale-input-responses.js";import{normalizeProviderToolHistory}from"#harness/provider-tool-history.js";import{appendTaskContext,isTaskTool,taskSystemMessages,withTaskTools,workingTaskIds}from"#execution/tasks/model-step.js";import{extractWorkflowStreamWriteErrorDetails}from"#harness/workflow-stream-error.js";import{getAdvertisedTools}from"#harness/advertised-tools.js";import{resolveFrameworkToolFromUpstreamType}from"#harness/provider-tools.js";import{buildStepHooks,emitStepActions,readGatewayGenerationId}from"#harness/step-hooks.js";import{buildToolApproval,buildToolSetFromDefinitions,buildToolSetWithProviderTools}from"#harness/tools.js";import{FINAL_OUTPUT_TOOL_NAME,buildFinalOutputTool}from"#harness/final-output.js";const environment=process.env.NODE_ENV??`unknown`,eveVersion=resolveInstalledPackageInfo().version,log=createLogger(`harness.tool-loop`);function logToolExecutionError(e){e.toolOutput.type!==`tool-error`||isTurnCancellation(e.toolOutput.error)||logError(log,`tool execution failed`,e.toolOutput.error,{toolName:e.toolCall.toolName,toolCallId:e.toolCall.toolCallId})}function mergeSystemInstructions(e){if(e.length===0)return;if(e.length===1)return{...e[0]};let t;for(let n of e)n.providerOptions!==void 0&&(t={...t,...n.providerOptions});let n={role:`system`,content:e.map(e=>e.content).join(`
|
|
1
|
+
import{ToolLoopAgent,isStepCount}from"ai";import{readClientContext}from"#internal/client-context.js";import{createErrorId,createLogger,formatError,logError}from"#internal/logging.js";import{contextStorage}from"#context/container.js";import{AuthKey,HistoryStateKey,ParentSessionKey,ScheduleIdKey,SessionCallbackKey,StaticModelReferenceKey}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,createStepCompletedEvent,createStepStartedEvent,createTurnWaitingEvent}from"#protocol/message.js";import{toModelSchema}from"#tools/schema.js";import{resolveProviderHeaders}from"#internal/gateway.js";import{formatLanguageModelGatewayId}from"#internal/runtime-model.js";import{TOOL_RESULT_BOUNDARY,createFrameworkUserMessage,createUserMessage,followsToolResults,frameworkMessageKindForStepInput,normalizeModelMessages,normalizeUserContent,resolveAssistantStepText,validateHarnessModelMessages}from"#harness/messages.js";import{getEffectiveModelSelection}from"#context/effective-model.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{renderFinalOutputWhileWorkingError}from"#execution/tasks/render.js";import{renderPendingApprovalsInstruction,renderPendingApprovalsSnippet}from"#harness/hitl/approval-prompt.js";import{setTimeout}from"node:timers/promises";import{resolveConversationId}from"#shared/conversation-identity.js";import{accumulateTurnUsage,getSessionUsage,getTurnUsageState,setTurnUsageState}from"#harness/turn-tag-state.js";import{getPendingCoordinationBatch,resolvePendingCoordination,setPendingCoordinationBatch}from"#harness/coordination.js";import{hydrateSandboxAttachments,moveToolResultFilesToUserMessages,stageAttachmentsToSandbox,stageToolResultMedia}from"#harness/attachment-staging.js";import{getPendingAnnouncements}from"#harness/announcements.js";import{activeTurnId}from"#harness/active-turn-id.js";import{buildDynamicSubagentTools}from"#context/dynamic-subagent-lifecycle.js";import{createHistoryViewPreparer}from"#shared/history-view.js";import{isDynamicModelSelectionError}from"#context/dynamic-model-lifecycle.js";import{isTurnCancellation,throwIfTurnAborted}from"#harness/turn-cancellation.js";import{getPendingAuthorization,getSupersededAuthorizationChallenges,setPendingAuthorization}from"#harness/authorization.js";import{appendPendingInputBatch,consumeDeferredStepInput,getApprovedTools,getPendingInputRequestIds,hasRunnableDeferredStepInput,hasStepInput,resolvePendingInput,selectApprovalReplayBatch}from"#harness/input-requests.js";import{buildDynamicInstructionMessages,drainDynamicInstructionUserMessages,prepareDynamicInstructionPreamble}from"#context/dynamic-instruction-lifecycle.js";import{PendingSkillAnnouncementKey}from"#context/dynamic-skill-lifecycle.js";import{getPendingInputBatches,queueDeferredStepInput}from"#harness/pending-input-batches.js";import{setEveAttributes}from"#runtime/attributes/emit.js";import{authorizationEventFields}from"#harness/authorization-event-fields.js";import{declinedSignInEvents,withdrawHeldSignIns}from"#harness/held-requests.js";import{createToolResultMessagePartFromToolError,isToolResultError}from"#harness/action-result-helpers.js";import{summarizeKnownError}from"#harness/semantic-errors/index.js";import{getApprovalAuditState,markApprovalCandidateHistoryEventEmitted,markApprovalCandidatePendingEventEmitted,markApprovalSettlementEventEmitted}from"#harness/approval-candidates.js";import{estimateTokens}from"#harness/token-estimate.js";import{extractToolApprovalInputRequests}from"#harness/input-extraction.js";import{clearTurnClientContextState,getTurnClientContextState,setTurnClientContextState}from"#harness/turn-client-context.js";import{getInvalidToolCallInputError,isInvalidToolCall}from"#harness/tool-call-input-errors.js";import{ContentFilteredModelResponseError,EmptyModelResponseError,classifyModelCallError,extractModelCallErrorDetails,extractUnsupportedProviderToolTypes,extractUpstreamRejectionMessage,isNoOutputGeneratedError}from"#harness/model-call-error.js";import{interruptStreamOnFailure}from"#harness/interruptible-stream.js";import{resolveInlineAuthorizationInterrupt}from"#harness/inline-tool-authorization.js";import{createCurrentMessages,hasTailApprovalResponse}from"#harness/current-messages.js";import{applyLastToolCacheBreakpoint,applySystemCacheBreakpoint,detectPromptCachePath,getAnthropicCacheMarker}from"#harness/prompt-cache.js";import{resolveCallProviderOptions}from"#harness/provider-safety.js";import{requireSessionModelReference}from"#harness/types.js";import{GenerationSteering}from"#harness/generation-steering.js";import{estimateRequestEnvelope,getRequestEnvelopeTokens,setRequestEnvelopeTokens}from"#harness/request-envelope.js";import{buildDynamicTools,buildResponseAuthorizationTools}from"#context/build-dynamic-tools.js";import{compactMessages,getInputTokenCount,resolveCompactionModel,shouldCompact}from"#harness/compaction.js";import{collectDeferredCalls,dispatchApprovedWorkflowCalls}from"#harness/workflow-dispatch.js";import{applySessionLimitContinuation,enforceSessionUsageLimit}from"#harness/session-limit-enforcement.js";import{coordinateApprovalDelivery}from"#harness/approval-delivery-coordinator.js";import{convertStaleResponsesToUserMessage,dropStaleSessionLimitContinuationResponses}from"#harness/stale-input-responses.js";import{normalizeProviderToolHistory}from"#harness/provider-tool-history.js";import{appendTaskContext,isTaskTool,taskSystemMessages,withTaskTools,workingTaskIds}from"#execution/tasks/model-step.js";import{extractWorkflowStreamWriteErrorDetails}from"#harness/workflow-stream-error.js";import{getAdvertisedTools}from"#harness/advertised-tools.js";import{resolveFrameworkToolFromUpstreamType}from"#harness/provider-tools.js";import{buildStepHooks,emitStepActions,readGatewayGenerationId}from"#harness/step-hooks.js";import{buildToolApproval,buildToolSetFromDefinitions,buildToolSetWithProviderTools}from"#harness/tools.js";import{FINAL_OUTPUT_TOOL_NAME,buildFinalOutputTool}from"#harness/final-output.js";const environment=process.env.NODE_ENV??`unknown`,eveVersion=resolveInstalledPackageInfo().version,log=createLogger(`harness.tool-loop`);function logToolExecutionError(e){e.toolOutput.type!==`tool-error`||isTurnCancellation(e.toolOutput.error)||logError(log,`tool execution failed`,e.toolOutput.error,{toolName:e.toolCall.toolName,toolCallId:e.toolCall.toolCallId})}function mergeSystemInstructions(e){if(e.length===0)return;if(e.length===1)return{...e[0]};let t;for(let n of e)n.providerOptions!==void 0&&(t={...t,...n.providerOptions});let n={role:`system`,content:e.map(e=>e.content).join(`
|
|
2
2
|
|
|
3
|
-
`)};return t!==void 0&&(n.providerOptions=t),n}function buildGatewayAttributionHeaders(e,t){let n=resolveProviderHeaders(e);if(n===void 0)return;let r=t?.agentName??t?.agentId,i=process.env.VERCEL_PROJECT_PRODUCTION_URL||process.env.VERCEL_URL,a=i?`https://${i}`:void 0,o={...n};return r&&(o[`x-title`]=r),a&&(o[`http-referer`]=a),o}async function resolveEffectiveRuntimeModel(e){if(e.ctx===void 0){let t=e.session.agent.modelReference;if(t===void 0)throw Error(`Dynamic model selection is unavailable outside an eve runtime context.`);return{model:await e.config.resolveModel(t),session:e.session}}let t=getEffectiveModelSelection(e.ctx);if(t===null)throw Error(`Dynamic model selection is required before model-dependent work begins. Add a matching resolver handler that returns a concrete model.`);return{model:t.model===void 0?await e.config.resolveModel(t.reference):t.model,session:updateSessionModelReference(e.session,t.reference)}}function updateSessionModelReference(e,t){return e.agent.modelReference===t?e:{...e,agent:{...e.agent,modelReference:t},compaction:updateCompactionThresholdForModelReference({compaction:e.compaction,modelReference:t})}}function updateCompactionThresholdForModelReference(e){return e.modelReference.contextWindowTokens===void 0?e.compaction:{...e.compaction,threshold:Math.max(1,Math.floor(e.modelReference.contextWindowTokens*(e.compaction.thresholdPercent??.9)))}}function buildHarnessToolsWithDynamicSubagents(e,t){let n=new Map(e);if(t===void 0)return n;for(let e of buildDynamicSubagentTools(t)){if(n.has(e.name))throw Error(`Dynamic subagent "${e.name}" collides with another runtime-visible tool name.`);n.set(e.name,e)}return n}function createToolLoopHarness(e){e.instrumentation?.installAiSdkWarningLogger();let t=e.handleEvent;async function runStep(t,n){let executeStep=async r=>{let i=r?.session??t,a=new GenerationSteering({abortSignal:e.abortSignal,steeringSignal:e.steeringSignal,outputStarted:getHarnessEmissionState(i.state).assistantOutputStarted});try{return await executeStepBody(i,a,n,r)}finally{a.dispose()}};return e.instrumentation?.runStep({environment,eveVersion,hasInput:hasStepInput(n),session:t},executeStep)??executeStep()}async function executeStepBody(n,r,i,a){let o=n,s=createHistoryViewPreparer({previous:e.historyView,projector:e.historyProjector});s(o.history,o.state);let projectHistory=(e,t)=>s(e,t).messages,c=getHarnessEmissionState(o.state),l=contextStorage.getStore();l!==void 0&&!l.has(StaticModelReferenceKey)&&l.setVirtualContext(StaticModelReferenceKey,o.agent.dynamicModel===!0?null:o.agent.modelReference??null);let u=l?.get(ParentSessionKey),d=l?.get(SessionCallbackKey),f=u!==void 0||d!==void 0,p=f||l?.get(ScheduleIdKey)!==void 0,m,h=a?.createHandleEvent({getAttemptScope:()=>m,handleEvent:t,turnId:activeTurnId(c)})??t,g=h===void 0?void 0:async(e,t)=>{r.beforeEvent(e),await h(e,t)},failModelSelection=async(t,n)=>{if(throwIfTurnAborted(e.abortSignal),a?.recordError(t),!g)throw t;let r=createErrorId(),i=toErrorMessage(t);return log.error(`model selection failed terminally`,{error:t,errorId:r,sessionId:o.sessionId,turnId:n.turnId}),await emitFailedStep(g,n,{code:`MODEL_SELECTION_FAILED`,details:{errorId:r},message:i,sessionId:o.sessionId,usage:getSessionUsage(o)}),{next:f?{done:!0,isError:!0,output:i}:{done:!0,output:``},session:o}},failBoundaryEvent=async(t,n)=>{if(throwIfTurnAborted(e.abortSignal),isTurnCancellation(t))throw t;if(isDynamicModelSelectionError(t))return failModelSelection(t,n);throw t},preparePreambleTrace=async()=>await a?.preparePreamble({sequence:c.sequence,sessionStarted:c.sessionStarted,traceContext:a?.traceContext,turnId:activeTurnId(c)});if(e.clearOnly===!0)return o={...o,state:clearMemorySessionState(o.state)},o=replaceSessionHistory(o,[]),await g?.(createContextClearedEvent({sequence:c.sequence,sessionId:o.sessionId,turnId:activeTurnId(c)})),await g?.(createSessionWaitingEvent(getSessionUsage(o))),{next:null,session:o};if(e.compactOnly===!0){if(o.history.length>0)try{let t=contextStorage.getStore(),n=await resolveEffectiveRuntimeModel({config:e,ctx:t,session:o});o=n.session,o=(await maybeCompact({abortSignal:e.abortSignal,auth:t?.get(AuthKey)??null,emit:g,emissionState:{...c,turnId:activeTurnId(c)},force:!0,historyProjector:e.historyProjector,messages:[...o.history],model:n.model,requestEnvelopeTokens:getRequestEnvelopeTokens(o),resolveModel:e.resolveModel,runtimeIdentity:e.runtimeIdentity,session:o,telemetry:a?.telemetry()})).session}catch(e){logError(log,`manual session compaction failed`,e,{sessionId:o.sessionId})}return await g?.(createSessionWaitingEvent(getSessionUsage(o))),{next:null,session:o}}let _=getPendingCoordinationBatch(o.state),v=_===void 0?consumeDeferredStepInput({input:i,session:o}):{input:i,session:o};o=v.session;let y=await resolvePendingCoordination({emit:g,session:o,stepInput:v.input,tools:e.tools}),b=y.outcome===`resolved`?{...y,messages:await stageToolResultMedia(y.messages)}:y;if(b.outcome===`unresolved`)return{next:null,session:b.session};o=b.session;let x=getPendingInputRequestIds(o.state),S=convertStaleResponsesToUserMessage({history:b.messages,pendingRequestIds:x,stepInput:dropStaleSessionLimitContinuationResponses({pendingRequestIds:x,stepInput:v.input})}),C=S.stepInput;if(i?.message!==void 0||S.kind===`converted`){let e=withdrawHeldSignIns(o.state,{completedAt:Date.now(),reason:STEERED_SIGN_IN_REASON});if(o={...o,state:e.state},e.withdrawn.length>0){if(g)for(let t of declinedSignInEvents(e.withdrawn,STEERED_SIGN_IN_REASON,c))await g(t);let t=[...new Set(e.withdrawn.map(e=>e.name))];C={...C,context:[...C?.context??[],`Sign-in to ${t.join(`, `)} was cancelled because the user sent a new message instead. Ask to sign in again only if the new message still needs it.`]}}}let w=S.kind===`converted`?{...C,message:S.displayMessage}:C,T=contextStorage.getStore(),prepareApprovalTools=async t=>(t?.event!==void 0&&await e.prepareApprovalTurn?.(t.event),T!==void 0&&await e.resolveStepDynamicTools?.({ctx:T,event:createStepStartedEvent({modelId:o.agent.modelReference?.id??`dynamic`,...t?.event??c}),messages:projectHistory(b.messages,o.state)}),buildResponseAuthorizationTools({authoredTools:e.tools,context:T})),E=getPendingAuthorization(o.state)?.challenges??[],D=await coordinateApprovalDelivery({session:o,stepInput:C,tools:e.tools,prepareTools:async e=>{let t=getPendingInputBatches(o.state).find(t=>t.requests.some(t=>t.requestId===e.requestId));return await prepareApprovalTools(t)}});if(o=D.session,g){for(let e of D.feedback)await g(createMessageCompletedEvent({message:e,sequence:c.sequence,stepIndex:c.stepIndex,turnId:c.turnId}));let e=getApprovalAuditState(o.state);for(let t of E)e.candidateHistory.some(e=>e.candidateId===t.candidateId&&e.status===`timed-out`&&e.eventEmitted!==!0)&&await g(createAuthorizationCompletedEvent({...authorizationEventFields(t),outcome:`failed`,reason:`The approval response expired. Please submit a new response.`,sequence:c.sequence,stepIndex:c.stepIndex,turnId:c.turnId}));for(let t of e.activeCandidates.filter(e=>e.pendingEventEmitted!==!0))await g(createApprovalCandidateEvent({candidateId:t.candidateId,outcome:`pending`,requestId:t.requestId,responderPrincipalId:t.responder.principalId,sequence:c.sequence,stepIndex:c.stepIndex,turnId:c.turnId})),o={...o,state:markApprovalCandidatePendingEventEmitted({candidateId:t.candidateId,state:o.state})};for(let t of e.candidateHistory.filter(e=>e.eventEmitted!==!0&&e.status!==`allowed`))await g(createApprovalCandidateEvent({candidateId:t.candidateId,outcome:t.status,requestId:t.requestId,responderPrincipalId:t.responder.principalId,reason:t.reason,sequence:c.sequence,stepIndex:c.stepIndex,turnId:c.turnId})),o={...o,state:markApprovalCandidateHistoryEventEmitted({candidateId:t.candidateId,state:o.state})};for(let t of e.settlements.filter(e=>e.eventEmitted!==!0))await g(createApprovalSettledEvent({outcome:t.outcome===`allowed`?`approved`:`cancelled`,requestId:t.requestId,responderPrincipalId:t.actor.principalId,sequence:c.sequence,stepIndex:c.stepIndex,turnId:c.turnId})),o={...o,state:markApprovalSettlementEventEmitted({requestId:t.requestId,state:o.state})}}if(D.kind===`park`)return{next:null,session:o};if(D.kind===`continue-coordination`)return{next:runStep,session:D.stepInput===void 0?o:queueDeferredStepInput(o,D.stepInput)};if(D.challenges.length>0){if(g){for(let e of D.challenges)await g(createAuthorizationRequiredEvent({...authorizationEventFields(e),description:e.challenge.instructions??`Authorization required for ${e.name}`,sequence:c.sequence,stepIndex:c.stepIndex,turnId:c.turnId,webhookUrl:e.hookUrl}));c=await holdTurnForRequest(g,c,o)}let e=D.stepInput===void 0?o:queueDeferredStepInput(o,D.stepInput);return{held:{kind:`request`},next:null,session:setHarnessEmissionState({...e,state:setPendingAuthorization(e.state,{challenges:D.challenges})},c)}}let O=_!==void 0&&hasTailApprovalResponse(b.messages)?_:selectApprovalReplayBatch(o,D.stepInput),k=O===void 0?e.tools:await prepareApprovalTools(O),A=resolvePendingInput({history:b.messages,resolveApprovalKey:resolveApprovalKeyFromTools(k),session:o,stepInput:D.stepInput});if(A.outcome===`unresolved`){let e=b.outcome===`resolved`?{...A.session,history:validateHarnessModelMessages(b.messages)}:A.session;return g&&(c=await holdTurnForRequest(g,c,e),e=setHarnessEmissionState(e,c)),{held:{kind:`request`},next:null,session:e}}if(A.resolvedInputs!==void 0)for(let e of A.resolvedInputs)await a?.publishInputResolutions({batch:e,sessionId:o.sessionId}),g&&await g(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(g&&A.rejectedActions)for(let e of A.rejectedActions)for(let t of e.results)await g(createActionResultEvent({rejected:!0,result:t,sequence:e.event.sequence,stepIndex:e.event.stepIndex,turnId:e.event.turnId}));let j=activeTurnId(c),M=getTurnClientContextState(A.session.state,j),N=A.deferredContext===!0?void 0:readClientContext(C),P=(N??M?.messages)?.map(e=>createFrameworkUserMessage(`context.instruction`,e))??[],F=[];if(C?.context!==void 0&&A.deferredContext!==!0)for(let e of C.context)F.push(createFrameworkUserMessage(`context.instruction`,e));let I=frameworkMessageKindForStepInput(C),L=normalizeUserContent(C?.message),R=L!==void 0&&!A.deferredMessage&&!A.consumedMessage?await stageAttachmentsToSandbox(L):void 0;R!==void 0&&F.push(I===void 0?createUserMessage(`user`,R):createFrameworkUserMessage(I,R));let z=[],B;if(g&&(hasStepInput(C)||hasStepInput(D.stepInput))){l!==void 0&&(prepareDynamicInstructionPreamble(l,projectHistory(A.session.history,A.session.state)),prepareMemoryPreamble(l,{history:A.messages,input:[...P,...F],projector:e.historyProjector,state:A.session.state}));try{let t=await preparePreambleTrace();c=await emitTurnPreamble(g,A.deferredMessage===!0?{...w,message:void 0}:w??{},c,projectHistory([...A.messages,...P,...F],A.session.state),e.runtimeIdentity,t)}catch(e){return z=l===void 0?[]:drainDynamicInstructionUserMessages(l),B=l===void 0?void 0:drainMemoryCommit(l),o={...A.session,history:validateHarnessModelMessages([...A.session.history,...B?.recalledMessages??[],...z]),state:B?.state??A.session.state},failBoundaryEvent(e,{sessionStarted:!0,sequence:c.sequence,stepIndex:0,turnId:activeTurnId(c)})}z=l===void 0?[]:drainDynamicInstructionUserMessages(l),B=l===void 0?void 0:drainMemoryCommit(l),a?.setTurnId(c.turnId)}let ee=A.session.history.length,te=[...B?.recalledMessages??[],...z];o=setHarnessEmissionState({...A.session,history:validateHarnessModelMessages([...A.session.history,...te]),state:B?.state??A.session.state},c);let V=validateHarnessModelMessages([...A.messages.slice(0,ee),...te,...A.messages.slice(ee)]),ne=await applySessionLimitContinuation({config:e,emit:g,emissionState:c,limitContinuation:A.limitContinuation,session:o});if(ne.result!==null)return ne.result;if(o=ne.session,!hasUnansweredToolCall(V)){let t=await appendTaskContext({messages:V,projectHistory,session:o,tools:e.tools});o=t.session,V.push(...t.messages)}let H=M;N!==void 0&&(H={insertionIndex:M?.insertionIndex??V.length,messages:N,turnId:j}),H!==void 0&&(o=setTurnClientContextState(o,H));let re=R!==void 0&&I===void 0&&followsToolResults(V);V=[...V,...re?[{content:TOOL_RESULT_BOUNDARY,role:`assistant`}]:[],...F];let createModelMessages=e=>{if(H===void 0||H.messages.length===0)return[...e];let t=Math.min(Math.max(0,H.insertionIndex),e.length);return[...e.slice(0,t),...H.messages.map(e=>createFrameworkUserMessage(`context.instruction`,e)),...e.slice(t)]},U=validateHarnessModelMessages(projectHistory(createModelMessages(V),o.state)),W=l,ie;try{W!==void 0&&e.dispatchDynamicModelEvent!==void 0&&await e.dispatchDynamicModelEvent({ctx:W,event:{data:{sequence:c.sequence,stepIndex:c.stepIndex,turnId:activeTurnId(c)},type:`step.started`},messages:U}),ie=await resolveEffectiveRuntimeModel({config:e,ctx:W,session:o})}catch(e){return failModelSelection(e,c)}o=ie.session;let G=ie.model,ae=detectPromptCachePath(G),K=ae.kind===`anthropic-direct`?getAnthropicCacheMarker():void 0,oe=buildGatewayAttributionHeaders(G,e.runtimeIdentity);if(U=validateHarnessModelMessages(normalizeModelMessages(projectHistory(createModelMessages(V),o.state))),g)try{await emitStepStarted(g,c,requireSessionModelReference(o).id,U)}catch(e){return failBoundaryEvent(e,c)}let se=(A.resolvedInputs??[]).flatMap(e=>e.inputs.filter(e=>e.outcome===`approved`));if(se.length>0){let t=buildResponseAuthorizationTools({authoredTools:e.tools,context:W});for(let{request:e}of se)if(!t.has(e.action.toolName))throw Error(`The approved tool is no longer available. Request a new tool call and approval.`)}let ce=getApprovedTools(o,resolveApprovalKeyFromTools(buildResponseAuthorizationTools({authoredTools:e.tools,context:W}))),le=e.tools,ue=new Map,createRequestMessages=()=>{let e=createCurrentMessages(V,{historyState:W?.get(HistoryStateKey),currentTurnMessages:F,projectedMessages:U});W!==void 0&&e.addSystem(buildDynamicInstructionMessages(W)),e.addSystem(taskSystemMessages(le,{finalReplyOnly:p})),e.addAnnouncements({availableSkills:W?.get(PendingSkillAnnouncementKey),keyed:getPendingAnnouncements(W)});let t=renderPendingApprovalsInstruction(getPendingInputBatches(o.state).flatMap(e=>e.requests));return t!==void 0&&e.add(t,`context.state`,{cacheFriendly:!1}),e},q=createRequestMessages(),J,finishSteeredStep=()=>(throwIfTurnAborted(e.abortSignal),W?.set(HistoryStateKey,q.historyState),J!==void 0&&(o=setTurnUsageState(o,accumulateTurnUsage({previous:getTurnUsageState(o.state),turnId:c.turnId,usage:J}))),{steered:!0,next:runStep,session:setHarnessEmissionState({...o,history:[...q.history]},advanceStep(c))}),Y=[],withTrailingUserNote=(e,t)=>t?[...e,createFrameworkUserMessage(`execution.retry`,t)]:[...e],prepareModelInstructions=e=>{let t=e?[{role:`system`,content:e}]:[],n=o.agent.system?[{role:`system`,content:o.agent.system}]:[],r=q.systemMessages.length>0||t.length>0?[...t,...n,...q.systemMessages]:void 0,i=r!==void 0&&K?applySystemCacheBreakpoint(r,K):r;return i===void 0?o.agent.system??void 0:mergeSystemInstructions(i)},prepareModelCallInput=e=>{let t=prepareModelInstructions(e);return{instructions:t,telemetryRuntimeContext:a?.resolveRuntimeContext({eveVersion,emissionState:c,environment,modelInput:{instructions:t,messages:Y},session:o})}},X=0,Z,throwIfCompactionFailed=()=>{if(Z!==void 0)throw Z.error},prepareModelTools=async t=>{let n=buildHarnessToolsWithDynamicSubagents(e.tools,W),i=withTaskTools(getAdvertisedTools({session:o,tools:n}));le=i;let a=await buildToolSetWithProviderTools({approvedTools:ce,disabledProviderTools:t.disabledProviderTools,modelReference:requireSessionModelReference(o),tools:i}),s=new Map(i);if(W!==void 0){let e=getAdvertisedTools({session:o,tools:buildDynamicTools(W)}),n=buildToolSetFromDefinitions({approvedTools:ce,disabledProviderTools:t.disabledProviderTools,tools:e});for(let[e,t]of Object.entries(n)){if(i.get(e)?.workflowId!==void 0)throw Error(`Dynamic tool "${e}" collides with a coordination-visible deferred tool.`);a[e]=t}let r=new Set;for(let t of e)r.has(t.name)||(r.add(t.name),s.set(t.name,t))}o.outputSchema!==void 0&&(a[FINAL_OUTPUT_TOOL_NAME]=buildFinalOutputTool(o.outputSchema));let c=await getAdvertisedTools({modelTools:a,session:o,tools:i});o=c.session;let l=c.modelTools,u=new Map;if(!f&&o.outputSchema===void 0)for(let[e,t]of Object.entries(l)){let n=s.get(e)?.endsTurn;t.type!==`provider`&&n!==void 0&&n!==!1&&(u.set(e,n),n===!0&&(t.description=`${t.description??``}\n\n${ENDS_TURN_TOOL_NOTE}`.trimStart()))}ue=u;let d=K?applyLastToolCacheBreakpoint(l,K):l;for(let e of Object.values(d)){e.inputSchema=toModelSchema(e.inputSchema,`input`),e.outputSchema!==void 0&&(e.outputSchema=toModelSchema(e.outputSchema,`output`));let t=e.execute;t!==void 0&&(e.execute=(...e)=>(r.protectToolExecution(),t(...e)))}return{effectiveTools:d,modelTools:l,presentationTools:s}},runSingleModelCall=async t=>{let{effectiveTools:n,modelTools:i,presentationTools:s}=await prepareModelTools(t);q=createRequestMessages(),X=await estimateRequestEnvelope({history:U,instructions:prepareModelInstructions(t.extraSystemNote),messages:withTrailingUserNote(q.nonSystemMessages,t.trailingUserNote),tools:n});let l=H===void 0?void 0:Math.max(0,V.length-H.insertionIndex),u=await(async()=>{try{return await maybeCompact({abortSignal:e.abortSignal,auth:W?.get(AuthKey)??null,emit:g,emissionState:c,historyProjector:e.historyProjector,messages:[...V],model:G,promptMessages:createModelMessages(V),requestEnvelopeTokens:X,resolveModel:e.resolveModel,runtimeIdentity:e.runtimeIdentity,session:o,telemetry:a?.telemetry()})}catch(e){throw Z={error:e},e}})();o=u.session,u.compacted&&(V=u.messages,H!==void 0&&l!==void 0&&(H={...H,insertionIndex:Math.max(0,V.length-l)},o=setTurnClientContextState(o,H)),o={...o,compaction:{recentWindowSize:o.compaction.recentWindowSize,threshold:o.compaction.threshold,thresholdPercent:o.compaction.thresholdPercent}},U=validateHarnessModelMessages(normalizeModelMessages(projectHistory(createModelMessages(V),o.state))),q=createRequestMessages(),{effectiveTools:n,modelTools:i,presentationTools:s}=await prepareModelTools(t),X=await estimateRequestEnvelope({history:U,instructions:prepareModelInstructions(t.extraSystemNote),messages:withTrailingUserNote(q.nonSystemMessages,t.trailingUserNote),tools:n})),X=Math.max(0,X-(estimateTokens(q.history)-estimateTokens(V))),r.begin(),Y=await hydrateSandboxAttachments(q.nonSystemMessages),sendsToolResultFilesAsText(G)&&(Y=moveToolResultFilesToUserMessages(Y));let{instructions:d,telemetryRuntimeContext:f={}}=prepareModelCallInput(t.extraSystemNote);t.retryReason&&(f[`eve.retry.reason`]=t.retryReason);let h=withTrailingUserNote(Y,t.trailingUserNote),_=activeTurnId(c),v=a?.prepareAttempt({attemptIndex:t.attemptIndex,runtimeContext:f,stepIndex:c.stepIndex,turnId:_});m=v?.scope;let y=buildStepHooks({auth:W?.get(AuthKey)??null,cachePath:ae,emit:g,emissionState:c,emitStepStarted:t.suppressStepStartedEmission!==!0,marker:K,session:o}),b={headers:oe,instructions:d,model:G,onLanguageModelCallEnd(e){r.interrupted||(J=extractTokenUsageDelta({usage:e.usage,costUsd:extractGatewayCostUsd(e.providerMetadata)}))},onToolExecutionEnd:logToolExecutionError,onError(e){r.interrupted||summarizeKnownError(e.error)?.tags.includes(`config`)!==!0&&logError(log,`tool-loop stream error`,e.error)},onStepEnd:y.onStepEnd,onStepStart:y.onStepStart,prepareStep:y.prepareStep,reasoning:o.agent.modelReference?.reasoning??o.agent.reasoning,runtimeContext:f,stopWhen:isStepCount(1),telemetry:v?.telemetry,toolApproval:buildToolApproval(i,r.signal),tools:n},x=new ToolLoopAgent(b),executeModelCall=async()=>{if(g){let t=new Set([FINAL_OUTPUT_TOOL_NAME]),i=await x.stream({abortSignal:r.signal,messages:h}),{emittedActionCallIds:a,handledInlineToolResultCallIds:l,invalidInputToolCallIds:u,inlineAuthorizationResults:d,trailingInlineToolResultParts:f}=await emitStreamContent(g,c,interruptStreamOnFailure(i.fullStream,r.signal),{excludedActionToolNames:t,hidesHeldText:p&&workingTaskIds(o).length>0,tools:s});throwIfTurnAborted(e.abortSignal),r.check();let[m,_]=await Promise.all([y.stepResult,i.responseMessages]);if(m.finishReason===`content-filter`)throw new ContentFilteredModelResponseError(readGatewayGenerationId(m.providerMetadata));if(isEmptyModelResponse(m)&&extractToolResultCallIds(_).size===0&&d.length===0&&f.length===0)throw new EmptyModelResponseError;let v=answerSkippedToolCalls(m,n);await emitStepActions(g,c,v.length===0?m:withAccumulatedResponseMessages({responseMessages:appendMissingToolResultMessages({append:v,responseMessages:m.response.messages}),stepResult:m}),{emittedActionCallIds:a,excludedActionCallIds:u,excludedActionToolNames:t,handledInlineToolResultCallIds:l,tools:s});let b=m.toolResults,S=new Map(b.map(e=>[e.toolCallId,e]));for(let e of d)S.set(e.toolCallId,e);return withAccumulatedResponseMessages({invalidInputToolCallIds:u,responseMessages:appendMissingToolResultMessages({append:[...f,...v],responseMessages:_}),stepResult:m,toolResults:[...S.values()]})}let t=await x.generate({abortSignal:r.signal,messages:h});throwIfTurnAborted(e.abortSignal),r.check();let i=await y.stepResult;if(i.finishReason===`content-filter`)throw new ContentFilteredModelResponseError(readGatewayGenerationId(i.providerMetadata));if(isEmptyModelResponse(i)&&extractToolResultCallIds(t.responseMessages).size===0)throw new EmptyModelResponseError;return withAccumulatedResponseMessages({responseMessages:appendMissingToolResultMessages({append:answerSkippedToolCalls(i,n),responseMessages:t.responseMessages}),stepResult:i})};try{let e=await executeModelCall();return await v?.complete(),e}catch(e){return r.interrupted?await v?.complete():await v?.fail(e),r.check(),rethrowNoOutputAsEmptyResponse(e)}},de=0,runOneModelCall=async e=>runModelCallWithRetries(t=>runSingleModelCall({...e,attemptIndex:de++,suppressStepStartedEmission:t!==1||e.suppressStepStartedEmission}),{sessionId:o.sessionId,turnId:c.turnId,canRetry:()=>Z===void 0},r.signal),fe=dispatchApprovedWorkflowCalls({messages:V,resolvedInputs:A.resolvedInputs,session:o,tools:buildResponseAuthorizationTools({authoredTools:e.tools,context:W})});if(fe!==void 0)return{next:null,session:setHarnessEmissionState(fe,advanceStep(c))};let pe=await enforceSessionUsageLimit({config:e,emit:g,emissionState:c,messages:U,session:o});if(pe!==null)return pe;let Q;try{Q=await runOneModelCall({suppressStepStartedEmission:!0})}catch(t){if(throwIfCompactionFailed(),throwIfTurnAborted(e.abortSignal),r.interrupted)return finishSteeredStep();let n=await runModelCallRecoveryPipeline({error:t,stages:[e=>attemptUnsupportedProviderToolRecovery({error:e.error,runOneModelCall,sessionId:o.sessionId,turnId:c.turnId}),e=>attemptEmptyResponseRecovery({error:e.error,retryCallOptions:e.retryCallOptions,runOneModelCall,sessionId:o.sessionId,turnId:c.turnId})]});if(throwIfCompactionFailed(),throwIfTurnAborted(e.abortSignal),r.interrupted)return finishSteeredStep();if(n.outcome===`recovered`)Q=n.result;else{let e=n.error;if(a?.recordError(e),!g)throw e;let t=extractWorkflowStreamWriteErrorDetails(e);if(t!==null){let n=createErrorId();return log.error(`workflow stream write failed — parking session for retry by the user`,{...t,errorId:n,error:e,sessionId:o.sessionId,turnId:c.turnId}),c=await emitRecoverableFailedTurn(g,c,{code:`WORKFLOW_STREAM_WRITE_FAILED`,continuationToken:o.continuationToken,usage:getSessionUsage(o),details:{...t,errorId:n},message:toErrorMessage(e)}),{next:null,session:setHarnessEmissionState(o,c)}}let r=classifyModelCallError(e),i=createErrorId(),s=summarizeKnownError(e),l=s===null?extractUpstreamRejectionMessage(e):null,u=s?.message??l?.message??toErrorMessage(e),d=s?.hint===void 0?u:`${u} ${s.hint}`,p=extractModelCallErrorDetails(e),m=buildModelCallFailureDetails({catalogSummary:s,error:e,errorId:i,modelCallDetails:p,upstreamRejection:l}),h=buildModelCallFailureLogFields({error:e,errorId:i,modelCallDetails:p,recognized:s!==null||l!==null,sessionId:o.sessionId,turnId:c.turnId});if(r===`terminal`)return s===null?log.error(l?.message??`model call failed terminally`,h):log.error(`${s.name}: ${s.message}`,{errorId:i,hint:s.hint,sessionId:o.sessionId,turnId:c.turnId}),await emitFailedStep(g,c,{code:`MODEL_CALL_FAILED`,details:m,message:u,sessionId:o.sessionId,usage:getSessionUsage(o)}),{next:f?{done:!0,isError:!0,output:d}:{done:!0,output:``},session:o};log.error(l?.message??`model call failed — parking session for retry by the user`,h),c=await emitRecoverableFailedTurn(g,c,{code:`MODEL_CALL_FAILED`,continuationToken:o.continuationToken,usage:getSessionUsage(o),details:m,message:u});let _={isError:!0,output:d};return o={...o,outputSchema:void 0},{next:null,session:setHarnessEmissionState(o,c),settledTurn:_}}}let $=accumulateTurnUsage({previous:getTurnUsageState(o.state),turnId:c.turnId,usage:extractTokenUsageDelta({costUsd:extractGatewayCostUsd(Q.providerMetadata),usage:Q.usage})});o=setTurnUsageState(o,$),J=void 0;let me;try{me=formatLanguageModelGatewayId(G)}catch{me=void 0}await setEveAttributes({"$eve.model":me,"$eve.input_tokens":$.inputTokens,"$eve.output_tokens":$.outputTokens,"$eve.cache_read_tokens":$.cacheReadTokens,"$eve.cache_write_tokens":$.cacheWriteTokens,"$eve.cost_usd":$.sawCost?$.costUsd:void 0,"$eve.tool_count":e.tools.size});let he;try{r.check(),he=await handleStepResult({config:e,emit:g,emissionState:r.outputStarted?{...c,assistantOutputStarted:!0}:c,requestEnvelopeTokens:X,durableModelPromptMessageCount:H===void 0||H.messages.length===0?Y.length:void 0,promptMessages:q.history,result:Q,runStep,session:o,coordinationTools:le,endsTurnTools:ue})}catch(t){if(throwIfTurnAborted(e.abortSignal),r.interrupted)return finishSteeredStep();throw t}return W?.set(HistoryStateKey,q.historyState),he}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 answerSkippedToolCalls(e,t){let{finishReason:n}=e;if(n===`stop`||n===`tool-calls`)return[];let r=extractToolResultCallIds(e.response.messages),i=new Set((e.content??[]).flatMap(e=>e.type===`tool-approval-request`&&e.isAutomatic!==!0?[e.toolCall.toolCallId]:[])),a=`The tool did not run because the model response ended early (finish reason: ${n}). Call the tool again if you still need its result.`;return(e.toolCalls??[]).filter(e=>t[e.toolName]?.execute!==void 0&&e.providerExecuted!==!0&&!isInvalidToolCall(e)&&getInvalidToolCallInputError({toolCall:e})===void 0&&!r.has(e.toolCallId)&&!i.has(e.toolCallId)).map(e=>({output:{type:`error-text`,value:a},toolCallId:e.toolCallId,toolName:e.toolName,type:`tool-result`}))}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}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:`Your previous reply was empty and was not delivered. Continue the current user request. Reuse completed results when they satisfy the request. If existing results are stale or insufficient, use the appropriate read tools to get fresh results. Do not repeat writes or other side effects that already completed. Do not mention this notice.`})}}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=getInvalidToolCallInputErrors({toolCalls:i.toolCalls}),u=new Set([...i.invalidInputToolCallIds??[],...i.toolCalls.filter(isInvalidToolCall).map(e=>e.toolCallId),...l.map(e=>e.toolCallId)]),d=appendMissingToolResultMessages({append:l.map(e=>createToolResultMessagePartFromToolError(e)),responseMessages:i.response.messages}),f=new Set;for(let e of[...i.content??[],...i.toolResults??[]])(e.type===`tool-result`||e.type===`tool-error`)&&e.providerExecuted===!0&&f.add(e.toolCallId);let p=normalizeProviderToolHistory({messages:d,providerExecutedOutcomeIds:f}),m=await stageToolResultMedia(p.messages),h=setRequestEnvelopeTokens({...s,compaction:createNextCompactionConfig(s.compaction,e.durableModelPromptMessageCount,i)},i.usage?.inputTokens!==void 0&&e.durableModelPromptMessageCount!==void 0?e.requestEnvelopeTokens:void 0),g=extractToolApprovalInputRequests({content:i.content??[],excludedCallIds:u}),_=g,v=renderPendingApprovalsSnippet(g),y=m.findIndex(e=>e.role!==`tool`),b=y===-1?m:m.slice(0,y),x=m.slice(b.length),S=validateHarnessModelMessages([...r,...b,...v===void 0?[]:[createFrameworkUserMessage(`context.state`,v)]]),C=getAdvertisedTools({session:h,tools:e.coordinationTools}),w=new Set([...g.map(e=>e.action.callId),...extractToolResultCallIds(m)]),T=(i.toolCalls??[]).filter(e=>!u.has(e.toolCallId)).filter(e=>!w.has(e.toolCallId)).filter(t=>isDeferredHarnessTool(e.coordinationTools.get(t.toolName))).filter(e=>isDeferredHarnessTool(C.get(e.toolName))?!0:(log.warn(`deferred tool call blocked because tool is not advertised`,{callId:e.toolCallId,sessionId:h.sessionId,toolName:e.toolName}),!1)),E=collectDeferredCalls({session:h,toolCalls:T,tools:C,turnId:o.turnId}),D=E.workflowRequests;if(T.length>0){if(_.length===0)return{next:null,session:setHarnessEmissionState(setPendingCoordinationBatch({tasks:D,event:{sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId},responseMessages:m,session:{...E.session,history:validateHarnessModelMessages(r)}}),advanceStep(o))};let e=setPendingCoordinationBatch({tasks:D,event:{sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId},responseMessages:x,session:{...E.session,history:S}});return e=appendPendingInputBatch({event:{sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId},requests:_,responseAuthRequiredRequestIds:responsePolicyRequestIds(t,g),responseMessages:[],session:e}),n&&await n(createInputRequestedEvent({requests:_,sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId})),{next:null,session:setHarnessEmissionState(e,advanceStep(o))}}if(_.length>0){let e=appendPendingInputBatch({event:{sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId},requests:_,responseAuthRequiredRequestIds:responsePolicyRequestIds(t,g),responseMessages:x,session:{...h,history:S}}),r=hasRunnableDeferredStepInput(e);return n&&(await n(createInputRequestedEvent({requests:_,sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId})),r||(o=await holdTurnForRequest(n,o,e),e=setHarnessEmissionState(e,o))),r?{next:a,session:e}:{held:{kind:`request`},next:null,session:e}}let O=resolveInlineAuthorizationInterrupt({messages:[...r,...m],toolResults:i.toolResults});if(O){let{challenges:e,history:t}=O;if(n){for(let t of getSupersededAuthorizationChallenges(h.state,e))await n(createAuthorizationCompletedEvent({...authorizationEventFields(t),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({...authorizationEventFields(t),description:t.challenge.instructions??`Authorization required for ${t.name}`,webhookUrl:t.hookUrl,sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId}));o=await holdTurnForRequest(n,o,h)}return{held:{kind:`request`},next:null,session:setHarnessEmissionState({...h,history:validateHarnessModelMessages(t),state:setPendingAuthorization(h.state,{challenges:e})},o)}}let k=m,A=validateHarnessModelMessages([...r,...k]),j={...h,history:A},M=j.outputSchema!==void 0&&extractFinalOutput(i)!==void 0,N=workingTaskIds(j),P=M&&N.length>0,F=k;P&&(F=rejectFinalOutput(k,i,N),j={...j,history:validateHarnessModelMessages([...r,...F])});let I=await stepEndsTurn(i,k,e.endsTurnTools),L=(!M||P)&&(F.at(-1)?.role===`tool`&&!I||p.outcomeEndsResponse||hasRunnableDeferredStepInput(j)),R=!L&&N.length>0;return L||R?(n&&(o=advanceStep(o),j=setHarnessEmissionState(j,o)),R?(n&&await n(createTurnWaitingEvent({on:`tasks`,sequence:o.sequence,turnId:o.turnId,usage:getSessionUsage(j)})),{held:{kind:`tasks`,taskIds:N},next:null,session:j}):{next:a,session:j}):finishTurn({emissionState:o,emit:n,history:r,result:i,schema:j.outputSchema,session:j,stepOutput:I?null:c})}async function holdTurnForRequest(e,t,n){let r=advanceStep(t);return await e(createTurnWaitingEvent({on:`input`,sequence:r.sequence,turnId:r.turnId,usage:getSessionUsage(n)})),r}const STEERED_SIGN_IN_REASON=`Cancelled because a new message arrived.`,ENDS_TURN_TOOL_NOTE=`Calling this tool ends your turn once it succeeds: do not write a reply or call other tools in the same step. If it fails, you will see the error and can continue.`;async function stepEndsTurn(e,t,n){let r=e.toolCalls??[];if(r.length===0)return!1;let i=new Map;for(let e of t)if(e.role===`tool`)for(let t of e.content)t.type===`tool-result`&&i.set(t.toolCallId,t.output);if(!r.every(e=>{let t=i.get(e.toolCallId);return n.has(e.toolName)&&t!==void 0&&!isToolResultError(t)}))return!1;let a=new Map((e.toolResults??[]).map(e=>[e.toolCallId,e.output]));for(let e of r){let t=n.get(e.toolName);if(typeof t==`function`&&!await callEndsTurn(t,a.get(e.toolCallId),e))return!1}return!0}async function callEndsTurn(e,t,n){try{return await e(t)===!0}catch(e){return log.warn(`endsTurn threw; continuing the turn`,{callId:n.toolCallId,error:e,toolName:n.toolName}),!1}}function isDeferredHarnessTool(e){return e?.workflowId!==void 0||isTaskTool(e)}function rejectFinalOutput(e,t,n){let r=(t.toolCalls??[]).find(e=>e.toolName===FINAL_OUTPUT_TOOL_NAME);if(r===void 0)return[...e];let i={output:{type:`error-text`,value:renderFinalOutputWhileWorkingError(n)},toolCallId:r.toolCallId,toolName:FINAL_OUTPUT_TOOL_NAME,type:`tool-result`};return[...e,{content:[i],role:`tool`}]}const OUTPUT_SCHEMA_NOT_FULFILLED={code:`OUTPUT_SCHEMA_NOT_FULFILLED`,message:`The agent could not produce a result matching the requested schema.`};function extractFinalOutput(e){return(e.toolCalls??[]).find(e=>e.toolName===FINAL_OUTPUT_TOOL_NAME&&!isInvalidToolCall(e))?.input}function persistStructuredAssistantTurn(e,t,n){return{...e,history:[...t,{content:JSON.stringify(n),role:`assistant`}],outputSchema:void 0}}async function emitStructuredResult(e,t,n,r,i){return await e(createResultCompletedEvent({result:n,sequence:t.sequence,stepIndex:t.stepIndex,turnId:t.turnId})),emitTurnEpilogue(e,t,r,i)}async function finishTurn(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,s.history,getSessionUsage(s)),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,usage:getSessionUsage(s)}),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,s.history,getSessionUsage(s)),s=setHarnessEmissionState(s,o)),{next:null,session:s,settledTurn:{output:c}}}function sendsToolResultFilesAsText(e){return typeof e!=`string`&&typeof e.provider==`string`&&e.provider.endsWith(`.chat`)}function createNextCompactionConfig(e,t,n){let r={recentWindowSize:e.recentWindowSize,threshold:e.threshold,thresholdPercent:e.thresholdPercent};return n.usage?.inputTokens!==void 0&&t!==void 0&&(r.lastKnownInputTokens=n.usage.inputTokens,r.lastKnownPromptMessageCount=t),r}function replaceSessionHistory(e,t){return contextStorage.getStore()?.delete(HistoryStateKey),{...e,history:t,compaction:{recentWindowSize:e.compaction.recentWindowSize,threshold:e.compaction.threshold,thresholdPercent:e.compaction.thresholdPercent}}}async function maybeCompact(e){let{emit:t,emissionState:n}=e,r=e.messages,i=e.session,a=e.promptMessages??r,o=validateHarnessModelMessages(e.historyProjector?.({messages:a,state:i.state})??a),s=e.force===!0||shouldCompact(o,i.compaction,e.requestEnvelopeTokens,getRequestEnvelopeTokens(i)),c=shouldCanonicalizeMemory(r);if(!s&&!c)return{compacted:!1,messages:r,session:i};let l=await resolveCompactionModel({compactionModelReference:i.agent.compactionModelReference,model:e.model,modelReference:requireSessionModelReference(i),resolveModel:e.resolveModel}),u=i.agent.compactionModelReference??requireSessionModelReference(i),d=resolveCallProviderOptions({auth:e.auth,conversationId:resolveConversationId(i.rootSessionId??i.sessionId),model:l.model,modelReference:u,providerOptions:l.providerOptions});if(t){let a=contextStorage.getStore();a!==void 0&&prepareMemoryCompaction(a,{history:r,state:i.state}),await t(createCompactionRequestedEvent({modelId:formatLanguageModelGatewayId(l.model),sequence:n.sequence,sessionId:i.sessionId,stepIndex:n.stepIndex,turnId:n.turnId,usageInputTokens:getInputTokenCount(o,i.compaction,e.requestEnvelopeTokens,getRequestEnvelopeTokens(i))}),o)}let f=canonicalizeMemoryRecords(r),p=validateHarnessModelMessages(e.historyProjector?.({messages:f.ordinary,state:i.state})??f.ordinary),m=e.requestEnvelopeTokens??0,h={...i.compaction,threshold:Math.max(1,i.compaction.threshold-m),lastKnownInputTokens:i.compaction.lastKnownInputTokens===void 0?void 0:Math.max(0,i.compaction.lastKnownInputTokens-Math.min(getRequestEnvelopeTokens(i)??0,m))},g=s?await compactMessages([...p],l.model,h,d,e.telemetry,buildGatewayAttributionHeaders(l.model,e.runtimeIdentity),e.abortSignal,e.force===!0,e.requestEnvelopeTokens===void 0?void 0:Math.max(0,getInputTokenCount(o,i.compaction,m,getRequestEnvelopeTokens(i))-m)):[...p];if(r=validateHarnessModelMessages([...f.memory,...g]),t){let a=contextStorage.getStore();if(a!==void 0&&prepareMemoryCompaction(a,{history:r,state:i.state}),await t(createCompactionCompletedEvent({modelId:formatLanguageModelGatewayId(l.model),sequence:n.sequence,sessionId:i.sessionId,stepIndex:n.stepIndex,turnId:n.turnId}),e.historyProjector?.({messages:r,state:i.state})??r),a!==void 0){let e=drainMemoryCommit(a);e!==void 0&&(r=validateHarnessModelMessages([...r,...e.recalledMessages]),i={...i,state:e.state})}}return{compacted:!0,messages:r,session:replaceSessionHistory(i,r)}}function responsePolicyRequestIds(e,t){let n=buildResponseAuthorizationTools({authoredTools:e.tools,context:contextStorage.getStore()});return t.filter(e=>{let t=n.get(e.action.toolName)?.approval;return t!==void 0&&typeof t!=`function`&&t.response!==void 0}).map(e=>e.requestId)}function resolveApprovalKeyFromTools(e){return t=>{let n=e.get(t.action.toolName);if(n?.approvalKey!==void 0)return n.approvalKey(t.action.input)}}async function runModelCallWithRetries(e,t,n){for(let r=1;;r++){n.throwIfAborted();try{return await e(r)}catch(e){if(n.throwIfAborted(),t.canRetry?.()===!1||r===3||classifyModelCallError(e)!==`retry`)throw e;let i=500*2**(r-1)+Math.floor(Math.random()*250);log.warn(`model call failed transiently — retrying`,{attempt:r,delayMs:i,sessionId:t.sessionId,turnId:t.turnId,error:e}),await setTimeout(i,void 0,{signal:n})}}}export{appendMissingToolResultMessages,createToolLoopHarness};
|
|
3
|
+
`)};return t!==void 0&&(n.providerOptions=t),n}function buildGatewayAttributionHeaders(e,t){let n=resolveProviderHeaders(e);if(n===void 0)return;let r=t?.agentName??t?.agentId,i=process.env.VERCEL_PROJECT_PRODUCTION_URL||process.env.VERCEL_URL,a=i?`https://${i}`:void 0,o={...n};return r&&(o[`x-title`]=r),a&&(o[`http-referer`]=a),o}async function resolveEffectiveRuntimeModel(e){if(e.ctx===void 0){let t=e.session.agent.modelReference;if(t===void 0)throw Error(`Dynamic model selection is unavailable outside an eve runtime context.`);return{model:await e.config.resolveModel(t),session:e.session}}let t=getEffectiveModelSelection(e.ctx);if(t===null)throw Error(`Dynamic model selection is required before model-dependent work begins. Add a matching resolver handler that returns a concrete model.`);return{model:t.model===void 0?await e.config.resolveModel(t.reference):t.model,session:updateSessionModelReference(e.session,t.reference)}}function updateSessionModelReference(e,t){return e.agent.modelReference===t?e:{...e,agent:{...e.agent,modelReference:t},compaction:updateCompactionThresholdForModelReference({compaction:e.compaction,modelReference:t})}}function updateCompactionThresholdForModelReference(e){return e.modelReference.contextWindowTokens===void 0?e.compaction:{...e.compaction,threshold:Math.max(1,Math.floor(e.modelReference.contextWindowTokens*(e.compaction.thresholdPercent??.9)))}}function buildHarnessToolsWithDynamicSubagents(e,t){let n=new Map(e);if(t===void 0)return n;for(let e of buildDynamicSubagentTools(t)){if(n.has(e.name))throw Error(`Dynamic subagent "${e.name}" collides with another runtime-visible tool name.`);n.set(e.name,e)}return n}function createToolLoopHarness(e){e.instrumentation?.installAiSdkWarningLogger();let t=e.handleEvent;async function runStep(t,n){let executeStep=async r=>{let i=r?.session??t,a=new GenerationSteering({abortSignal:e.abortSignal,steeringSignal:e.steeringSignal,outputStarted:getHarnessEmissionState(i.state).assistantOutputStarted});try{return await executeStepBody(i,a,n,r)}finally{a.dispose()}};return e.instrumentation?.runStep({environment,eveVersion,hasInput:hasStepInput(n),session:t},executeStep)??executeStep()}async function executeStepBody(n,r,i,a){let o=n,s=createHistoryViewPreparer({previous:e.historyView,projector:e.historyProjector});s(o.history,o.state);let projectHistory=(e,t)=>s(e,t).messages,c=getHarnessEmissionState(o.state),l=contextStorage.getStore();l!==void 0&&!l.has(StaticModelReferenceKey)&&l.setVirtualContext(StaticModelReferenceKey,o.agent.dynamicModel===!0?null:o.agent.modelReference??null);let u=l?.get(ParentSessionKey),d=l?.get(SessionCallbackKey),f=u!==void 0||d!==void 0,p=f||l?.get(ScheduleIdKey)!==void 0,m,h=a?.createHandleEvent({getAttemptScope:()=>m,handleEvent:t,turnId:activeTurnId(c)})??t,g=h===void 0?void 0:async(e,t)=>{r.beforeEvent(e),await h(e,t)},failModelSelection=async(t,n)=>{if(throwIfTurnAborted(e.abortSignal),a?.recordError(t),!g)throw t;let r=createErrorId(),i=toErrorMessage(t);return log.error(`model selection failed terminally`,{error:t,errorId:r,sessionId:o.sessionId,turnId:n.turnId}),await emitFailedStep(g,n,{code:`MODEL_SELECTION_FAILED`,details:{errorId:r},message:i,sessionId:o.sessionId,usage:getSessionUsage(o)}),{next:f?{done:!0,isError:!0,output:i}:{done:!0,output:``},session:o}},failBoundaryEvent=async(t,n)=>{if(throwIfTurnAborted(e.abortSignal),isTurnCancellation(t))throw t;if(isDynamicModelSelectionError(t))return failModelSelection(t,n);throw t},preparePreambleTrace=async()=>await a?.preparePreamble({sequence:c.sequence,sessionStarted:c.sessionStarted,traceContext:a?.traceContext,turnId:activeTurnId(c)});if(e.clearOnly===!0)return o={...o,state:clearMemorySessionState(o.state)},o=replaceSessionHistory(o,[]),await g?.(createContextClearedEvent({sequence:c.sequence,sessionId:o.sessionId,turnId:activeTurnId(c)})),await g?.(createSessionWaitingEvent(getSessionUsage(o))),{next:null,session:o};if(e.compactOnly===!0){if(o.history.length>0)try{let t=contextStorage.getStore(),n=await resolveEffectiveRuntimeModel({config:e,ctx:t,session:o});o=n.session,o=(await maybeCompact({abortSignal:e.abortSignal,auth:t?.get(AuthKey)??null,emit:g,emissionState:{...c,turnId:activeTurnId(c)},force:!0,historyProjector:e.historyProjector,messages:[...o.history],model:n.model,requestEnvelopeTokens:getRequestEnvelopeTokens(o),resolveModel:e.resolveModel,runtimeIdentity:e.runtimeIdentity,session:o,telemetry:a?.telemetry()})).session}catch(e){logError(log,`manual session compaction failed`,e,{sessionId:o.sessionId})}return await g?.(createSessionWaitingEvent(getSessionUsage(o))),{next:null,session:o}}let _=getPendingCoordinationBatch(o.state),v=_===void 0?consumeDeferredStepInput({input:i,session:o}):{input:i,session:o};o=v.session;let y=await resolvePendingCoordination({emit:g,session:o,stepInput:v.input,tools:e.tools}),b=y.outcome===`resolved`?{...y,messages:await stageToolResultMedia(y.messages)}:y;if(b.outcome===`unresolved`)return{next:null,session:b.session};o=b.session;let x=getPendingInputRequestIds(o.state),S=convertStaleResponsesToUserMessage({history:b.messages,pendingRequestIds:x,stepInput:dropStaleSessionLimitContinuationResponses({pendingRequestIds:x,stepInput:v.input})}),C=S.stepInput;if(i?.message!==void 0||S.kind===`converted`){let e=withdrawHeldSignIns(o.state,{completedAt:Date.now(),reason:STEERED_SIGN_IN_REASON});if(o={...o,state:e.state},e.withdrawn.length>0){if(g)for(let t of declinedSignInEvents(e.withdrawn,STEERED_SIGN_IN_REASON,c))await g(t);let t=[...new Set(e.withdrawn.map(e=>e.name))];C={...C,context:[...C?.context??[],`Sign-in to ${t.join(`, `)} was cancelled because the user sent a new message instead. Ask to sign in again only if the new message still needs it.`]}}}let w=S.kind===`converted`?{...C,message:S.displayMessage}:C,T=contextStorage.getStore(),prepareApprovalTools=async t=>(t?.event!==void 0&&await e.prepareApprovalTurn?.(t.event),T!==void 0&&await e.resolveStepDynamicTools?.({ctx:T,event:createStepStartedEvent({modelId:o.agent.modelReference?.id??`dynamic`,...t?.event??c}),messages:projectHistory(b.messages,o.state)}),buildResponseAuthorizationTools({authoredTools:e.tools,context:T})),E=getPendingAuthorization(o.state)?.challenges??[],D=await coordinateApprovalDelivery({session:o,stepInput:C,tools:e.tools,prepareTools:async e=>{let t=getPendingInputBatches(o.state).find(t=>t.requests.some(t=>t.requestId===e.requestId));return await prepareApprovalTools(t)}});if(o=D.session,g){for(let e of D.feedback)await g(createMessageCompletedEvent({message:e,sequence:c.sequence,stepIndex:c.stepIndex,turnId:c.turnId}));let e=getApprovalAuditState(o.state);for(let t of E)e.candidateHistory.some(e=>e.candidateId===t.candidateId&&e.status===`timed-out`&&e.eventEmitted!==!0)&&await g(createAuthorizationCompletedEvent({...authorizationEventFields(t),outcome:`failed`,reason:`The approval response expired. Please submit a new response.`,sequence:c.sequence,stepIndex:c.stepIndex,turnId:c.turnId}));for(let t of e.activeCandidates.filter(e=>e.pendingEventEmitted!==!0))await g(createApprovalCandidateEvent({candidateId:t.candidateId,outcome:`pending`,requestId:t.requestId,responderPrincipalId:t.responder.principalId,sequence:c.sequence,stepIndex:c.stepIndex,turnId:c.turnId})),o={...o,state:markApprovalCandidatePendingEventEmitted({candidateId:t.candidateId,state:o.state})};for(let t of e.candidateHistory.filter(e=>e.eventEmitted!==!0&&e.status!==`allowed`))await g(createApprovalCandidateEvent({candidateId:t.candidateId,outcome:t.status,requestId:t.requestId,responderPrincipalId:t.responder.principalId,reason:t.reason,sequence:c.sequence,stepIndex:c.stepIndex,turnId:c.turnId})),o={...o,state:markApprovalCandidateHistoryEventEmitted({candidateId:t.candidateId,state:o.state})};for(let t of e.settlements.filter(e=>e.eventEmitted!==!0))await g(createApprovalSettledEvent({outcome:t.outcome===`allowed`?`approved`:`cancelled`,requestId:t.requestId,responderPrincipalId:t.actor.principalId,sequence:c.sequence,stepIndex:c.stepIndex,turnId:c.turnId})),o={...o,state:markApprovalSettlementEventEmitted({requestId:t.requestId,state:o.state})}}if(D.kind===`park`)return{next:null,session:o};if(D.kind===`continue-coordination`)return{next:runStep,session:D.stepInput===void 0?o:queueDeferredStepInput(o,D.stepInput)};if(D.challenges.length>0){if(g){for(let e of D.challenges)await g(createAuthorizationRequiredEvent({...authorizationEventFields(e),description:e.challenge.instructions??`Authorization required for ${e.name}`,sequence:c.sequence,stepIndex:c.stepIndex,turnId:c.turnId,webhookUrl:e.hookUrl}));c=await holdTurnForRequest(g,c,o)}let e=D.stepInput===void 0?o:queueDeferredStepInput(o,D.stepInput);return{held:{kind:`request`},next:null,session:setHarnessEmissionState({...e,state:setPendingAuthorization(e.state,{challenges:D.challenges})},c)}}let O=_!==void 0&&hasTailApprovalResponse(b.messages)?_:selectApprovalReplayBatch(o,D.stepInput),k=O===void 0?e.tools:await prepareApprovalTools(O),A=resolvePendingInput({history:b.messages,resolveApprovalKey:resolveApprovalKeyFromTools(k),session:o,stepInput:D.stepInput});if(A.outcome===`unresolved`){let e=b.outcome===`resolved`?{...A.session,history:validateHarnessModelMessages(b.messages)}:A.session;return g&&(c=await holdTurnForRequest(g,c,e),e=setHarnessEmissionState(e,c)),{held:{kind:`request`},next:null,session:e}}if(A.resolvedInputs!==void 0)for(let e of A.resolvedInputs)await a?.publishInputResolutions({batch:e,sessionId:o.sessionId}),g&&await g(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(g&&A.rejectedActions)for(let e of A.rejectedActions)for(let t of e.results)await g(createActionResultEvent({rejected:!0,result:t,sequence:e.event.sequence,stepIndex:e.event.stepIndex,turnId:e.event.turnId}));let j=activeTurnId(c),M=getTurnClientContextState(A.session.state,j),N=A.deferredContext===!0?void 0:readClientContext(C),P=(N??M?.messages)?.map(e=>createFrameworkUserMessage(`context.instruction`,e))??[],F=[];if(C?.context!==void 0&&A.deferredContext!==!0)for(let e of C.context)F.push(createFrameworkUserMessage(`context.instruction`,e));let I=frameworkMessageKindForStepInput(C),L=normalizeUserContent(C?.message),R=L!==void 0&&!A.deferredMessage&&!A.consumedMessage?await stageAttachmentsToSandbox(L):void 0;R!==void 0&&F.push(I===void 0?createUserMessage(`user`,R):createFrameworkUserMessage(I,R));let z=[],B;if(g&&(hasStepInput(C)||hasStepInput(D.stepInput))){l!==void 0&&(prepareDynamicInstructionPreamble(l,projectHistory(A.session.history,A.session.state)),prepareMemoryPreamble(l,{history:A.messages,input:[...P,...F],projector:e.historyProjector,state:A.session.state}));try{let t=await preparePreambleTrace();c=await emitTurnPreamble(g,A.deferredMessage===!0?{...w,message:void 0}:w??{},c,projectHistory([...A.messages,...P,...F],A.session.state),e.runtimeIdentity,t)}catch(e){return z=l===void 0?[]:drainDynamicInstructionUserMessages(l),B=l===void 0?void 0:drainMemoryCommit(l),o={...A.session,history:validateHarnessModelMessages([...A.session.history,...B?.recalledMessages??[],...z]),state:B?.state??A.session.state},failBoundaryEvent(e,{sessionStarted:!0,sequence:c.sequence,stepIndex:0,turnId:activeTurnId(c)})}z=l===void 0?[]:drainDynamicInstructionUserMessages(l),B=l===void 0?void 0:drainMemoryCommit(l),a?.setTurnId(c.turnId)}let ee=A.session.history.length,te=[...B?.recalledMessages??[],...z];o=setHarnessEmissionState({...A.session,history:validateHarnessModelMessages([...A.session.history,...te]),state:B?.state??A.session.state},c);let V=validateHarnessModelMessages([...A.messages.slice(0,ee),...te,...A.messages.slice(ee)]),ne=await applySessionLimitContinuation({config:e,emit:g,emissionState:c,limitContinuation:A.limitContinuation,session:o});if(ne.result!==null)return ne.result;if(o=ne.session,!hasUnansweredToolCall(V)){let t=await appendTaskContext({messages:V,projectHistory,session:o,tools:e.tools});o=t.session,V.push(...t.messages)}let H=M;N!==void 0&&(H={insertionIndex:M?.insertionIndex??V.length,messages:N,turnId:j}),H!==void 0&&(o=setTurnClientContextState(o,H));let re=R!==void 0&&I===void 0&&followsToolResults(V);V=[...V,...re?[{content:TOOL_RESULT_BOUNDARY,role:`assistant`}]:[],...F];let createModelMessages=e=>{if(H===void 0||H.messages.length===0)return[...e];let t=Math.min(Math.max(0,H.insertionIndex),e.length);return[...e.slice(0,t),...H.messages.map(e=>createFrameworkUserMessage(`context.instruction`,e)),...e.slice(t)]},U=validateHarnessModelMessages(projectHistory(createModelMessages(V),o.state)),W=l,ie;try{W!==void 0&&e.dispatchDynamicModelEvent!==void 0&&await e.dispatchDynamicModelEvent({ctx:W,event:{data:{sequence:c.sequence,stepIndex:c.stepIndex,turnId:activeTurnId(c)},type:`step.started`},messages:U}),ie=await resolveEffectiveRuntimeModel({config:e,ctx:W,session:o})}catch(e){return failModelSelection(e,c)}o=ie.session;let G=ie.model,ae=detectPromptCachePath(G),K=ae.kind===`anthropic-direct`?getAnthropicCacheMarker():void 0,oe=buildGatewayAttributionHeaders(G,e.runtimeIdentity);if(U=validateHarnessModelMessages(normalizeModelMessages(projectHistory(createModelMessages(V),o.state))),g)try{await emitStepStarted(g,c,requireSessionModelReference(o).id,U)}catch(e){return failBoundaryEvent(e,c)}let se=(A.resolvedInputs??[]).flatMap(e=>e.inputs.filter(e=>e.outcome===`approved`));if(se.length>0){let t=buildResponseAuthorizationTools({authoredTools:e.tools,context:W});for(let{request:e}of se)if(!t.has(e.action.toolName))throw Error(`The approved tool is no longer available. Request a new tool call and approval.`)}let ce=getApprovedTools(o,resolveApprovalKeyFromTools(buildResponseAuthorizationTools({authoredTools:e.tools,context:W}))),le=e.tools,ue=new Map,createRequestMessages=()=>{let e=createCurrentMessages(V,{historyState:W?.get(HistoryStateKey),currentTurnMessages:F,projectedMessages:U});W!==void 0&&e.addSystem(buildDynamicInstructionMessages(W)),e.addSystem(taskSystemMessages(le,{finalReplyOnly:p})),e.addAnnouncements({availableSkills:W?.get(PendingSkillAnnouncementKey),keyed:getPendingAnnouncements(W)});let t=renderPendingApprovalsInstruction(getPendingInputBatches(o.state).flatMap(e=>e.requests));return t!==void 0&&e.add(t,`context.state`,{cacheFriendly:!1}),e},q=createRequestMessages(),J,finishSteeredStep=async()=>(throwIfTurnAborted(e.abortSignal),W?.set(HistoryStateKey,q.historyState),J!==void 0&&(o=setTurnUsageState(o,accumulateTurnUsage({previous:getTurnUsageState(o.state),turnId:c.turnId,usage:J}))),await h?.(createStepCompletedEvent({finishReason:`other`,sequence:c.sequence,stepIndex:c.stepIndex,turnId:c.turnId,usage:J})),{steered:!0,next:runStep,session:setHarnessEmissionState({...o,history:[...q.history]},advanceStep(c))}),Y=[],withTrailingUserNote=(e,t)=>t?[...e,createFrameworkUserMessage(`execution.retry`,t)]:[...e],prepareModelInstructions=e=>{let t=e?[{role:`system`,content:e}]:[],n=o.agent.system?[{role:`system`,content:o.agent.system}]:[],r=q.systemMessages.length>0||t.length>0?[...t,...n,...q.systemMessages]:void 0,i=r!==void 0&&K?applySystemCacheBreakpoint(r,K):r;return i===void 0?o.agent.system??void 0:mergeSystemInstructions(i)},prepareModelCallInput=e=>{let t=prepareModelInstructions(e);return{instructions:t,telemetryRuntimeContext:a?.resolveRuntimeContext({eveVersion,emissionState:c,environment,modelInput:{instructions:t,messages:Y},session:o})}},X=0,Z,throwIfCompactionFailed=()=>{if(Z!==void 0)throw Z.error},prepareModelTools=async t=>{let n=buildHarnessToolsWithDynamicSubagents(e.tools,W),i=withTaskTools(getAdvertisedTools({session:o,tools:n}));le=i;let a=await buildToolSetWithProviderTools({approvedTools:ce,disabledProviderTools:t.disabledProviderTools,modelReference:requireSessionModelReference(o),tools:i}),s=new Map(i);if(W!==void 0){let e=getAdvertisedTools({session:o,tools:buildDynamicTools(W)}),n=buildToolSetFromDefinitions({approvedTools:ce,disabledProviderTools:t.disabledProviderTools,tools:e});for(let[e,t]of Object.entries(n)){if(i.get(e)?.workflowId!==void 0)throw Error(`Dynamic tool "${e}" collides with a coordination-visible deferred tool.`);a[e]=t}let r=new Set;for(let t of e)r.has(t.name)||(r.add(t.name),s.set(t.name,t))}o.outputSchema!==void 0&&(a[FINAL_OUTPUT_TOOL_NAME]=buildFinalOutputTool(o.outputSchema));let c=await getAdvertisedTools({modelTools:a,session:o,tools:i});o=c.session;let l=c.modelTools,u=new Map;if(!f&&o.outputSchema===void 0)for(let[e,t]of Object.entries(l)){let n=s.get(e)?.endsTurn;t.type!==`provider`&&n!==void 0&&n!==!1&&(u.set(e,n),n===!0&&(t.description=`${t.description??``}\n\n${ENDS_TURN_TOOL_NOTE}`.trimStart()))}ue=u;let d=K?applyLastToolCacheBreakpoint(l,K):l;for(let e of Object.values(d)){e.inputSchema=toModelSchema(e.inputSchema,`input`),e.outputSchema!==void 0&&(e.outputSchema=toModelSchema(e.outputSchema,`output`));let t=e.execute;t!==void 0&&(e.execute=(...e)=>(r.protectToolExecution(),t(...e)))}return{effectiveTools:d,modelTools:l,presentationTools:s}},runSingleModelCall=async t=>{let{effectiveTools:n,modelTools:i,presentationTools:s}=await prepareModelTools(t);q=createRequestMessages(),X=await estimateRequestEnvelope({history:U,instructions:prepareModelInstructions(t.extraSystemNote),messages:withTrailingUserNote(q.nonSystemMessages,t.trailingUserNote),tools:n});let l=H===void 0?void 0:Math.max(0,V.length-H.insertionIndex),u=await(async()=>{try{return await maybeCompact({abortSignal:e.abortSignal,auth:W?.get(AuthKey)??null,emit:g,emissionState:c,historyProjector:e.historyProjector,messages:[...V],model:G,promptMessages:createModelMessages(V),requestEnvelopeTokens:X,resolveModel:e.resolveModel,runtimeIdentity:e.runtimeIdentity,session:o,telemetry:a?.telemetry()})}catch(e){throw Z={error:e},e}})();o=u.session,u.compacted&&(V=u.messages,H!==void 0&&l!==void 0&&(H={...H,insertionIndex:Math.max(0,V.length-l)},o=setTurnClientContextState(o,H)),o={...o,compaction:{recentWindowSize:o.compaction.recentWindowSize,threshold:o.compaction.threshold,thresholdPercent:o.compaction.thresholdPercent}},U=validateHarnessModelMessages(normalizeModelMessages(projectHistory(createModelMessages(V),o.state))),q=createRequestMessages(),{effectiveTools:n,modelTools:i,presentationTools:s}=await prepareModelTools(t),X=await estimateRequestEnvelope({history:U,instructions:prepareModelInstructions(t.extraSystemNote),messages:withTrailingUserNote(q.nonSystemMessages,t.trailingUserNote),tools:n})),X=Math.max(0,X-(estimateTokens(q.history)-estimateTokens(V))),r.begin(),Y=await hydrateSandboxAttachments(q.nonSystemMessages),sendsToolResultFilesAsText(G)&&(Y=moveToolResultFilesToUserMessages(Y));let{instructions:d,telemetryRuntimeContext:f={}}=prepareModelCallInput(t.extraSystemNote);t.retryReason&&(f[`eve.retry.reason`]=t.retryReason);let h=withTrailingUserNote(Y,t.trailingUserNote),_=activeTurnId(c),v=a?.prepareAttempt({attemptIndex:t.attemptIndex,runtimeContext:f,stepIndex:c.stepIndex,turnId:_});m=v?.scope;let y=buildStepHooks({auth:W?.get(AuthKey)??null,cachePath:ae,emit:g,emissionState:c,emitStepStarted:t.suppressStepStartedEmission!==!0,marker:K,session:o}),b={headers:oe,instructions:d,model:G,onLanguageModelCallEnd(e){r.interrupted||(J=extractTokenUsageDelta({usage:e.usage,costUsd:extractGatewayCostUsd(e.providerMetadata)}))},onToolExecutionEnd:logToolExecutionError,onError(e){r.interrupted||summarizeKnownError(e.error)?.tags.includes(`config`)!==!0&&logError(log,`tool-loop stream error`,e.error)},onStepEnd:y.onStepEnd,onStepStart:y.onStepStart,prepareStep:y.prepareStep,reasoning:o.agent.modelReference?.reasoning??o.agent.reasoning,runtimeContext:f,stopWhen:isStepCount(1),telemetry:v?.telemetry,toolApproval:buildToolApproval(i,r.signal),tools:n},x=new ToolLoopAgent(b),executeModelCall=async()=>{if(g){let t=new Set([FINAL_OUTPUT_TOOL_NAME]),i=await x.stream({abortSignal:r.signal,messages:h}),{emittedActionCallIds:a,handledInlineToolResultCallIds:l,invalidInputToolCallIds:u,inlineAuthorizationResults:d,trailingInlineToolResultParts:f}=await emitStreamContent(g,c,interruptStreamOnFailure(i.fullStream,r.signal),{excludedActionToolNames:t,hidesHeldText:p&&workingTaskIds(o).length>0,tools:s});throwIfTurnAborted(e.abortSignal),r.check();let[m,_]=await Promise.all([y.stepResult,i.responseMessages]);if(m.finishReason===`content-filter`)throw new ContentFilteredModelResponseError(readGatewayGenerationId(m.providerMetadata));if(isEmptyModelResponse(m)&&extractToolResultCallIds(_).size===0&&d.length===0&&f.length===0)throw new EmptyModelResponseError;let v=answerSkippedToolCalls(m,n);await emitStepActions(g,c,v.length===0?m:withAccumulatedResponseMessages({responseMessages:appendMissingToolResultMessages({append:v,responseMessages:m.response.messages}),stepResult:m}),{emittedActionCallIds:a,excludedActionCallIds:u,excludedActionToolNames:t,handledInlineToolResultCallIds:l,tools:s});let b=m.toolResults,S=new Map(b.map(e=>[e.toolCallId,e]));for(let e of d)S.set(e.toolCallId,e);return withAccumulatedResponseMessages({invalidInputToolCallIds:u,responseMessages:appendMissingToolResultMessages({append:[...f,...v],responseMessages:_}),stepResult:m,toolResults:[...S.values()]})}let t=await x.generate({abortSignal:r.signal,messages:h});throwIfTurnAborted(e.abortSignal),r.check();let i=await y.stepResult;if(i.finishReason===`content-filter`)throw new ContentFilteredModelResponseError(readGatewayGenerationId(i.providerMetadata));if(isEmptyModelResponse(i)&&extractToolResultCallIds(t.responseMessages).size===0)throw new EmptyModelResponseError;return withAccumulatedResponseMessages({responseMessages:appendMissingToolResultMessages({append:answerSkippedToolCalls(i,n),responseMessages:t.responseMessages}),stepResult:i})};try{let e=await executeModelCall();return await v?.complete(),e}catch(e){return r.interrupted?await v?.complete():await v?.fail(e),r.check(),rethrowNoOutputAsEmptyResponse(e)}},de=0,runOneModelCall=async e=>runModelCallWithRetries(t=>runSingleModelCall({...e,attemptIndex:de++,suppressStepStartedEmission:t!==1||e.suppressStepStartedEmission}),{sessionId:o.sessionId,turnId:c.turnId,canRetry:()=>Z===void 0},r.signal),fe=dispatchApprovedWorkflowCalls({messages:V,resolvedInputs:A.resolvedInputs,session:o,tools:buildResponseAuthorizationTools({authoredTools:e.tools,context:W})});if(fe!==void 0)return{next:null,session:setHarnessEmissionState(fe,advanceStep(c))};let pe=await enforceSessionUsageLimit({config:e,emit:g,emissionState:c,messages:U,session:o});if(pe!==null)return pe;let Q;try{Q=await runOneModelCall({suppressStepStartedEmission:!0})}catch(t){if(throwIfCompactionFailed(),throwIfTurnAborted(e.abortSignal),r.interrupted)return finishSteeredStep();let n=await runModelCallRecoveryPipeline({error:t,stages:[e=>attemptUnsupportedProviderToolRecovery({error:e.error,runOneModelCall,sessionId:o.sessionId,turnId:c.turnId}),e=>attemptEmptyResponseRecovery({error:e.error,retryCallOptions:e.retryCallOptions,runOneModelCall,sessionId:o.sessionId,turnId:c.turnId})]});if(throwIfCompactionFailed(),throwIfTurnAborted(e.abortSignal),r.interrupted)return finishSteeredStep();if(n.outcome===`recovered`)Q=n.result;else{let e=n.error;if(a?.recordError(e),!g)throw e;let t=extractWorkflowStreamWriteErrorDetails(e);if(t!==null){let n=createErrorId();return log.error(`workflow stream write failed — parking session for retry by the user`,{...t,errorId:n,error:e,sessionId:o.sessionId,turnId:c.turnId}),c=await emitRecoverableFailedTurn(g,c,{code:`WORKFLOW_STREAM_WRITE_FAILED`,continuationToken:o.continuationToken,usage:getSessionUsage(o),details:{...t,errorId:n},message:toErrorMessage(e)}),{next:null,session:setHarnessEmissionState(o,c)}}let r=classifyModelCallError(e),i=createErrorId(),s=summarizeKnownError(e),l=s===null?extractUpstreamRejectionMessage(e):null,u=s?.message??l?.message??toErrorMessage(e),d=s?.hint===void 0?u:`${u} ${s.hint}`,p=extractModelCallErrorDetails(e),m=buildModelCallFailureDetails({catalogSummary:s,error:e,errorId:i,modelCallDetails:p,upstreamRejection:l}),h=buildModelCallFailureLogFields({error:e,errorId:i,modelCallDetails:p,recognized:s!==null||l!==null,sessionId:o.sessionId,turnId:c.turnId});if(r===`terminal`)return s===null?log.error(l?.message??`model call failed terminally`,h):log.error(`${s.name}: ${s.message}`,{errorId:i,hint:s.hint,sessionId:o.sessionId,turnId:c.turnId}),await emitFailedStep(g,c,{code:`MODEL_CALL_FAILED`,details:m,message:u,sessionId:o.sessionId,usage:getSessionUsage(o)}),{next:f?{done:!0,isError:!0,output:d}:{done:!0,output:``},session:o};log.error(l?.message??`model call failed — parking session for retry by the user`,h),c=await emitRecoverableFailedTurn(g,c,{code:`MODEL_CALL_FAILED`,continuationToken:o.continuationToken,usage:getSessionUsage(o),details:m,message:u});let _={isError:!0,output:d};return o={...o,outputSchema:void 0},{next:null,session:setHarnessEmissionState(o,c),settledTurn:_}}}let $=accumulateTurnUsage({previous:getTurnUsageState(o.state),turnId:c.turnId,usage:extractTokenUsageDelta({costUsd:extractGatewayCostUsd(Q.providerMetadata),usage:Q.usage})});o=setTurnUsageState(o,$),J=void 0;let me;try{me=formatLanguageModelGatewayId(G)}catch{me=void 0}await setEveAttributes({"$eve.model":me,"$eve.input_tokens":$.inputTokens,"$eve.output_tokens":$.outputTokens,"$eve.cache_read_tokens":$.cacheReadTokens,"$eve.cache_write_tokens":$.cacheWriteTokens,"$eve.cost_usd":$.sawCost?$.costUsd:void 0,"$eve.tool_count":e.tools.size});let he;try{r.check(),he=await handleStepResult({config:e,emit:g,emissionState:r.outputStarted?{...c,assistantOutputStarted:!0}:c,requestEnvelopeTokens:X,durableModelPromptMessageCount:H===void 0||H.messages.length===0?Y.length:void 0,promptMessages:q.history,result:Q,runStep,session:o,coordinationTools:le,endsTurnTools:ue})}catch(t){if(throwIfTurnAborted(e.abortSignal),r.interrupted)return finishSteeredStep();throw t}return W?.set(HistoryStateKey,q.historyState),he}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 answerSkippedToolCalls(e,t){let{finishReason:n}=e;if(n===`stop`||n===`tool-calls`)return[];let r=extractToolResultCallIds(e.response.messages),i=new Set((e.content??[]).flatMap(e=>e.type===`tool-approval-request`&&e.isAutomatic!==!0?[e.toolCall.toolCallId]:[])),a=`The tool did not run because the model response ended early (finish reason: ${n}). Call the tool again if you still need its result.`;return(e.toolCalls??[]).filter(e=>t[e.toolName]?.execute!==void 0&&e.providerExecuted!==!0&&!isInvalidToolCall(e)&&getInvalidToolCallInputError({toolCall:e})===void 0&&!r.has(e.toolCallId)&&!i.has(e.toolCallId)).map(e=>({output:{type:`error-text`,value:a},toolCallId:e.toolCallId,toolName:e.toolName,type:`tool-result`}))}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}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:`Your previous reply was empty and was not delivered. Continue the current user request. Reuse completed results when they satisfy the request. If existing results are stale or insufficient, use the appropriate read tools to get fresh results. Do not repeat writes or other side effects that already completed. Do not mention this notice.`})}}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=getInvalidToolCallInputErrors({toolCalls:i.toolCalls}),u=new Set([...i.invalidInputToolCallIds??[],...i.toolCalls.filter(isInvalidToolCall).map(e=>e.toolCallId),...l.map(e=>e.toolCallId)]),d=appendMissingToolResultMessages({append:l.map(e=>createToolResultMessagePartFromToolError(e)),responseMessages:i.response.messages}),f=new Set;for(let e of[...i.content??[],...i.toolResults??[]])(e.type===`tool-result`||e.type===`tool-error`)&&e.providerExecuted===!0&&f.add(e.toolCallId);let p=normalizeProviderToolHistory({messages:d,providerExecutedOutcomeIds:f}),m=await stageToolResultMedia(p.messages),h=setRequestEnvelopeTokens({...s,compaction:createNextCompactionConfig(s.compaction,e.durableModelPromptMessageCount,i)},i.usage?.inputTokens!==void 0&&e.durableModelPromptMessageCount!==void 0?e.requestEnvelopeTokens:void 0),g=extractToolApprovalInputRequests({content:i.content??[],excludedCallIds:u}),_=g,v=renderPendingApprovalsSnippet(g),y=m.findIndex(e=>e.role!==`tool`),b=y===-1?m:m.slice(0,y),x=m.slice(b.length),S=validateHarnessModelMessages([...r,...b,...v===void 0?[]:[createFrameworkUserMessage(`context.state`,v)]]),C=getAdvertisedTools({session:h,tools:e.coordinationTools}),w=new Set([...g.map(e=>e.action.callId),...extractToolResultCallIds(m)]),T=(i.toolCalls??[]).filter(e=>!u.has(e.toolCallId)).filter(e=>!w.has(e.toolCallId)).filter(t=>isDeferredHarnessTool(e.coordinationTools.get(t.toolName))).filter(e=>isDeferredHarnessTool(C.get(e.toolName))?!0:(log.warn(`deferred tool call blocked because tool is not advertised`,{callId:e.toolCallId,sessionId:h.sessionId,toolName:e.toolName}),!1)),E=collectDeferredCalls({session:h,toolCalls:T,tools:C,turnId:o.turnId}),D=E.workflowRequests;if(T.length>0){if(_.length===0)return{next:null,session:setHarnessEmissionState(setPendingCoordinationBatch({tasks:D,event:{sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId},responseMessages:m,session:{...E.session,history:validateHarnessModelMessages(r)}}),advanceStep(o))};let e=setPendingCoordinationBatch({tasks:D,event:{sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId},responseMessages:x,session:{...E.session,history:S}});return e=appendPendingInputBatch({event:{sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId},requests:_,responseAuthRequiredRequestIds:responsePolicyRequestIds(t,g),responseMessages:[],session:e}),n&&await n(createInputRequestedEvent({requests:_,sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId})),{next:null,session:setHarnessEmissionState(e,advanceStep(o))}}if(_.length>0){let e=appendPendingInputBatch({event:{sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId},requests:_,responseAuthRequiredRequestIds:responsePolicyRequestIds(t,g),responseMessages:x,session:{...h,history:S}}),r=hasRunnableDeferredStepInput(e);return n&&(await n(createInputRequestedEvent({requests:_,sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId})),r||(o=await holdTurnForRequest(n,o,e),e=setHarnessEmissionState(e,o))),r?{next:a,session:e}:{held:{kind:`request`},next:null,session:e}}let O=resolveInlineAuthorizationInterrupt({messages:[...r,...m],toolResults:i.toolResults});if(O){let{challenges:e,history:t}=O;if(n){for(let t of getSupersededAuthorizationChallenges(h.state,e))await n(createAuthorizationCompletedEvent({...authorizationEventFields(t),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({...authorizationEventFields(t),description:t.challenge.instructions??`Authorization required for ${t.name}`,webhookUrl:t.hookUrl,sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId}));o=await holdTurnForRequest(n,o,h)}return{held:{kind:`request`},next:null,session:setHarnessEmissionState({...h,history:validateHarnessModelMessages(t),state:setPendingAuthorization(h.state,{challenges:e})},o)}}let k=m,A=validateHarnessModelMessages([...r,...k]),j={...h,history:A},M=j.outputSchema!==void 0&&extractFinalOutput(i)!==void 0,N=workingTaskIds(j),P=M&&N.length>0,F=k;P&&(F=rejectFinalOutput(k,i,N),j={...j,history:validateHarnessModelMessages([...r,...F])});let I=await stepEndsTurn(i,k,e.endsTurnTools),L=(!M||P)&&(F.at(-1)?.role===`tool`&&!I||p.outcomeEndsResponse||hasRunnableDeferredStepInput(j)),R=!L&&N.length>0;return L||R?(n&&(o=advanceStep(o),j=setHarnessEmissionState(j,o)),R?(n&&await n(createTurnWaitingEvent({on:`tasks`,sequence:o.sequence,turnId:o.turnId,usage:getSessionUsage(j)})),{held:{kind:`tasks`,taskIds:N},next:null,session:j}):{next:a,session:j}):finishTurn({emissionState:o,emit:n,history:r,result:i,schema:j.outputSchema,session:j,stepOutput:I?null:c})}async function holdTurnForRequest(e,t,n){let r=advanceStep(t);return await e(createTurnWaitingEvent({on:`input`,sequence:r.sequence,turnId:r.turnId,usage:getSessionUsage(n)})),r}const STEERED_SIGN_IN_REASON=`Cancelled because a new message arrived.`,ENDS_TURN_TOOL_NOTE=`Calling this tool ends your turn once it succeeds: do not write a reply or call other tools in the same step. If it fails, you will see the error and can continue.`;async function stepEndsTurn(e,t,n){let r=e.toolCalls??[];if(r.length===0)return!1;let i=new Map;for(let e of t)if(e.role===`tool`)for(let t of e.content)t.type===`tool-result`&&i.set(t.toolCallId,t.output);if(!r.every(e=>{let t=i.get(e.toolCallId);return n.has(e.toolName)&&t!==void 0&&!isToolResultError(t)}))return!1;let a=new Map((e.toolResults??[]).map(e=>[e.toolCallId,e.output]));for(let e of r){let t=n.get(e.toolName);if(typeof t==`function`&&!await callEndsTurn(t,a.get(e.toolCallId),e))return!1}return!0}async function callEndsTurn(e,t,n){try{return await e(t)===!0}catch(e){return log.warn(`endsTurn threw; continuing the turn`,{callId:n.toolCallId,error:e,toolName:n.toolName}),!1}}function isDeferredHarnessTool(e){return e?.workflowId!==void 0||isTaskTool(e)}function rejectFinalOutput(e,t,n){let r=(t.toolCalls??[]).find(e=>e.toolName===FINAL_OUTPUT_TOOL_NAME);if(r===void 0)return[...e];let i={output:{type:`error-text`,value:renderFinalOutputWhileWorkingError(n)},toolCallId:r.toolCallId,toolName:FINAL_OUTPUT_TOOL_NAME,type:`tool-result`};return[...e,{content:[i],role:`tool`}]}const OUTPUT_SCHEMA_NOT_FULFILLED={code:`OUTPUT_SCHEMA_NOT_FULFILLED`,message:`The agent could not produce a result matching the requested schema.`};function extractFinalOutput(e){return(e.toolCalls??[]).find(e=>e.toolName===FINAL_OUTPUT_TOOL_NAME&&!isInvalidToolCall(e))?.input}function persistStructuredAssistantTurn(e,t,n){return{...e,history:[...t,{content:JSON.stringify(n),role:`assistant`}],outputSchema:void 0}}async function emitStructuredResult(e,t,n,r,i){return await e(createResultCompletedEvent({result:n,sequence:t.sequence,stepIndex:t.stepIndex,turnId:t.turnId})),emitTurnEpilogue(e,t,r,i)}async function finishTurn(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,s.history,getSessionUsage(s)),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,usage:getSessionUsage(s)}),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,s.history,getSessionUsage(s)),s=setHarnessEmissionState(s,o)),{next:null,session:s,settledTurn:{output:c}}}function sendsToolResultFilesAsText(e){return typeof e!=`string`&&typeof e.provider==`string`&&e.provider.endsWith(`.chat`)}function createNextCompactionConfig(e,t,n){let r={recentWindowSize:e.recentWindowSize,threshold:e.threshold,thresholdPercent:e.thresholdPercent};return n.usage?.inputTokens!==void 0&&t!==void 0&&(r.lastKnownInputTokens=n.usage.inputTokens,r.lastKnownPromptMessageCount=t),r}function replaceSessionHistory(e,t){return contextStorage.getStore()?.delete(HistoryStateKey),{...e,history:t,compaction:{recentWindowSize:e.compaction.recentWindowSize,threshold:e.compaction.threshold,thresholdPercent:e.compaction.thresholdPercent}}}async function maybeCompact(e){let{emit:t,emissionState:n}=e,r=e.messages,i=e.session,a=e.promptMessages??r,o=validateHarnessModelMessages(e.historyProjector?.({messages:a,state:i.state})??a),s=e.force===!0||shouldCompact(o,i.compaction,e.requestEnvelopeTokens,getRequestEnvelopeTokens(i)),c=shouldCanonicalizeMemory(r);if(!s&&!c)return{compacted:!1,messages:r,session:i};let l=await resolveCompactionModel({compactionModelReference:i.agent.compactionModelReference,model:e.model,modelReference:requireSessionModelReference(i),resolveModel:e.resolveModel}),u=i.agent.compactionModelReference??requireSessionModelReference(i),d=resolveCallProviderOptions({auth:e.auth,conversationId:resolveConversationId(i.rootSessionId??i.sessionId),model:l.model,modelReference:u,providerOptions:l.providerOptions});if(t){let a=contextStorage.getStore();a!==void 0&&prepareMemoryCompaction(a,{history:r,state:i.state}),await t(createCompactionRequestedEvent({modelId:formatLanguageModelGatewayId(l.model),sequence:n.sequence,sessionId:i.sessionId,stepIndex:n.stepIndex,turnId:n.turnId,usageInputTokens:getInputTokenCount(o,i.compaction,e.requestEnvelopeTokens,getRequestEnvelopeTokens(i))}),o)}let f=canonicalizeMemoryRecords(r),p=validateHarnessModelMessages(e.historyProjector?.({messages:f.ordinary,state:i.state})??f.ordinary),m=e.requestEnvelopeTokens??0,h={...i.compaction,threshold:Math.max(1,i.compaction.threshold-m),lastKnownInputTokens:i.compaction.lastKnownInputTokens===void 0?void 0:Math.max(0,i.compaction.lastKnownInputTokens-Math.min(getRequestEnvelopeTokens(i)??0,m))},g=s?await compactMessages([...p],l.model,h,d,e.telemetry,buildGatewayAttributionHeaders(l.model,e.runtimeIdentity),e.abortSignal,e.force===!0,e.requestEnvelopeTokens===void 0?void 0:Math.max(0,getInputTokenCount(o,i.compaction,m,getRequestEnvelopeTokens(i))-m)):[...p];if(r=validateHarnessModelMessages([...f.memory,...g]),t){let a=contextStorage.getStore();if(a!==void 0&&prepareMemoryCompaction(a,{history:r,state:i.state}),await t(createCompactionCompletedEvent({modelId:formatLanguageModelGatewayId(l.model),sequence:n.sequence,sessionId:i.sessionId,stepIndex:n.stepIndex,turnId:n.turnId}),e.historyProjector?.({messages:r,state:i.state})??r),a!==void 0){let e=drainMemoryCommit(a);e!==void 0&&(r=validateHarnessModelMessages([...r,...e.recalledMessages]),i={...i,state:e.state})}}return{compacted:!0,messages:r,session:replaceSessionHistory(i,r)}}function responsePolicyRequestIds(e,t){let n=buildResponseAuthorizationTools({authoredTools:e.tools,context:contextStorage.getStore()});return t.filter(e=>{let t=n.get(e.action.toolName)?.approval;return t!==void 0&&typeof t!=`function`&&t.response!==void 0}).map(e=>e.requestId)}function resolveApprovalKeyFromTools(e){return t=>{let n=e.get(t.action.toolName);if(n?.approvalKey!==void 0)return n.approvalKey(t.action.input)}}async function runModelCallWithRetries(e,t,n){for(let r=1;;r++){n.throwIfAborted();try{return await e(r)}catch(e){if(n.throwIfAborted(),t.canRetry?.()===!1||r===3||classifyModelCallError(e)!==`retry`)throw e;let i=500*2**(r-1)+Math.floor(Math.random()*250);log.warn(`model call failed transiently — retrying`,{attempt:r,delayMs:i,sessionId:t.sessionId,turnId:t.turnId,error:e}),await setTimeout(i,void 0,{signal:n})}}}export{appendMissingToolResultMessages,createToolLoopHarness};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{attemptIdempotencyKey,modelCallIdempotencyKey,toolCallIdempotencyKey}from"#instrumentation/lifecycle.js";import{structuralProviderMetadata}from"#instrumentation/content.js";function createAiSdkHookBridge(e,t,n=directRunInContext,r){let i={capturesInputs:t.capturesInputs??t.capturesContent,capturesOutputs:t.capturesOutputs??t.capturesContent,modelCallIndexes:new Map,modelCallStartEvents:new Map,modelKeys:new Map,runtimeContext:r!==void 0&&Object.keys(r).length>0?Object.freeze({...r}):void 0,scope:e,toolKeys:new Map},nextModelCallKey=e=>{let t=i.modelCallIndexes.get(e)??0;return i.modelCallIndexes.set(e,t+1),modelCallIdempotencyKey(i.scope,e,t)};return{onStart(e){i.operation=Object.freeze({modelId:e.modelId,operationId:e.operationId,provider:e.provider})},async onStepStart(e){i.stepNumber=e.stepNumber;let n=toStepAttemptStarted(i);n!==void 0&&await t.publish(n)},async onLanguageModelCallStart(e){let n=i.stepNumber??0,r=nextModelCallKey(n);i.modelKeys.set(e.callId,r);let a=toModelCallStarted(i,r,e);i.modelCallStartEvents.set(e.callId,{event:a,stepNumber:n}),await t.publish(a)},async executeLanguageModelCall({callId:r,execute:a}){let o=i.modelKeys.get(r);if(o===void 0){let e=i.modelCallStartEvents.get(r);if(e===void 0)return a();o=nextModelCallKey(e.stepNumber),i.modelKeys.set(r,o),await t.publish(Object.freeze({...e.event,idempotencyKey:o}))}try{return await n({idempotencyKey:o,scope:e,type:`model.call`},a)}catch(n){throw i.modelKeys.get(r)===o&&i.modelKeys.delete(r),await t.publish(Object.freeze({error:n,idempotencyKey:o,scope:e,type:`model.call.failed`})),n}},async onLanguageModelCallEnd(e){let n=i.modelKeys.get(e.callId);if(n===void 0)return;i.modelKeys.delete(e.callId),i.modelCallStartEvents.delete(e.callId);let r=toModelCallCompleted(i,n,e);await t.publish(r)},async onStepEnd(e){if(e.providerMetadata===void 0)return;let n=i.capturesOutputs?e.providerMetadata:structuralProviderMetadata(e.providerMetadata);await t.publish(Object.freeze({idempotencyKey:attemptIdempotencyKey(i.scope),providerMetadata:n,scope:i.scope,type:`step.attempt.metadata`}))},async onToolExecutionStart(e){let n=toolCallIdempotencyKey(i.scope,e.toolCall.toolCallId,i.stepNumber??0);i.toolKeys.set(e.toolCall.toolCallId,n);let r=toToolCallStarted(i,n,e);await t.publish(r)},executeTool({toolCallId:t,execute:r}){let a=i.toolKeys.get(t);return a===void 0?r():n({idempotencyKey:a,scope:e,type:`tool.call`},r)},async onToolExecutionEnd(e){let n=e.toolCall.toolCallId,r=i.toolKeys.get(n);if(r===void 0)return;i.toolKeys.delete(n);let a=toToolCallCompleted(i,r,e);await t.publish(a)},async onAbort(e){await failOpenOperations(e.reason)},async onError(e){await failOpenOperations(e.error)}};async function failOpenOperations(n){let r=[];for(let a of i.modelKeys.values())r.push(t.publish(Object.freeze({error:n,idempotencyKey:a,scope:e,type:`model.call.failed`})));for(let a of i.toolKeys.values())r.push(t.publish(Object.freeze({error:n,idempotencyKey:a,scope:e,type:`tool.call.failed`})));i.modelKeys.clear(),i.modelCallStartEvents.clear(),i.toolKeys.clear(),await Promise.all(r)}}const directRunInContext=(e,t)=>t();function toStepAttemptStarted(e){if(e.operation!==void 0&&e.stepNumber!==void 0)return Object.freeze({idempotencyKey:attemptIdempotencyKey(e.scope),operation:e.operation,runtimeContext:e.runtimeContext,scope:e.scope,type:`step.attempt.started`})}function toModelCallStarted(e,t,n){return Object.freeze({idempotencyKey:t,input:e.capturesInputs?Object.freeze({instructions:n.instructions,messages:Object.freeze([...n.messages])}):void 0,model:Object.freeze({modelId:n.modelId,provider:n.provider}),runtimeContext:e.runtimeContext,scope:e.scope,type:`model.call.started`})}function toModelCallCompleted(e,t,n){return Object.freeze({content:e.capturesOutputs?toContentParts(n.content):void 0,finishReason:n.finishReason,idempotencyKey:t,responseModelId:n.modelId,responseId:n.responseId,scope:e.scope,type:`model.call.completed`,usage:toUsage(n.usage)})}function toUsage(e){return Object.freeze({inputTokenDetails:Object.freeze({cacheReadTokens:e.inputTokenDetails?.cacheReadTokens,cacheWriteTokens:e.inputTokenDetails?.cacheWriteTokens}),inputTokens:e.inputTokens,outputTokens:e.outputTokens})}function toContentParts(e){let t=[];for(let n of e)switch(n.type){case`text`:case`reasoning`:t.push(Object.freeze({text:n.text,type:n.type}));break;case`tool-call`:t.push(Object.freeze({callId:n.toolCallId,input:n.input,toolName:n.toolName,type:`tool-call`}));break;case`tool-result`:t.push(Object.freeze({callId:n.toolCallId,input:n.input,output:n.output,toolName:n.toolName,type:`tool-result`}));break;case`tool-error`:t.push(Object.freeze({callId:n.toolCallId,error:n.error,input:n.input,toolName:n.toolName,type:`tool-error`}))}return Object.freeze(t)}function toToolCallStarted(e,t,n){return Object.freeze({callId:n.toolCall.toolCallId,idempotencyKey:t,input:e.capturesInputs?n.toolCall.input:void 0,scope:e.scope,toolName:n.toolCall.toolName,type:`tool.call.started`})}function toToolCallCompleted(e,t,n){return Object.freeze({idempotencyKey:t,output:toToolOutput(n.toolOutput,e.capturesOutputs),scope:e.scope,type:`tool.call.completed`})}function toToolOutput(e,t){return e.type===`tool-result`?Object.freeze(t?{output:e.output,type:`result`}:{type:`result`}):Object.freeze(t?{error:e.error,type:`error`}:{type:`error`})}export{createAiSdkHookBridge};
|
|
1
|
+
import{attemptIdempotencyKey,modelCallIdempotencyKey,toolCallIdempotencyKey}from"#instrumentation/lifecycle.js";import{structuralProviderMetadata}from"#instrumentation/content.js";function createAiSdkHookBridge(e,t,n=directRunInContext,r){let i={capturesInputs:t.capturesInputs??t.capturesContent,capturesOutputs:t.capturesOutputs??t.capturesContent,modelCallIndexes:new Map,modelCallStartEvents:new Map,modelKeys:new Map,runtimeContext:r!==void 0&&Object.keys(r).length>0?Object.freeze({...r}):void 0,scope:e,toolKeys:new Map},nextModelCallKey=e=>{let t=i.modelCallIndexes.get(e)??0;return i.modelCallIndexes.set(e,t+1),modelCallIdempotencyKey(i.scope,e,t)};return{onStart(e){i.operation=Object.freeze({modelId:e.modelId,operationId:e.operationId,provider:e.provider})},async onStepStart(e){i.stepNumber=e.stepNumber;let n=toStepAttemptStarted(i);n!==void 0&&await t.publish(n)},async onLanguageModelCallStart(e){let n=i.stepNumber??0,r=nextModelCallKey(n);i.modelKeys.set(e.callId,r);let a=toModelCallStarted(i,r,e);i.modelCallStartEvents.set(e.callId,{event:a,stepNumber:n}),await t.publish(a)},async executeLanguageModelCall({callId:r,execute:a}){let o=i.modelKeys.get(r);if(o===void 0){let e=i.modelCallStartEvents.get(r);if(e===void 0)return a();o=nextModelCallKey(e.stepNumber),i.modelKeys.set(r,o),await t.publish(Object.freeze({...e.event,idempotencyKey:o}))}try{return await n({idempotencyKey:o,scope:e,type:`model.call`},a)}catch(n){throw i.modelKeys.get(r)===o&&i.modelKeys.delete(r),await t.publish(Object.freeze({error:n,idempotencyKey:o,scope:e,type:`model.call.failed`})),n}},async onLanguageModelCallEnd(e){let n=i.modelKeys.get(e.callId);if(n===void 0)return;i.modelKeys.delete(e.callId),i.modelCallStartEvents.delete(e.callId);let r=toModelCallCompleted(i,n,e);await t.publish(r)},async onStepEnd(e){if(e.providerMetadata===void 0)return;let n=i.capturesOutputs?e.providerMetadata:structuralProviderMetadata(e.providerMetadata);await t.publish(Object.freeze({idempotencyKey:attemptIdempotencyKey(i.scope),providerMetadata:n,scope:i.scope,type:`step.attempt.metadata`}))},async onToolExecutionStart(e){let n=toolCallIdempotencyKey(i.scope,e.toolCall.toolCallId,i.stepNumber??0);i.toolKeys.set(e.toolCall.toolCallId,n);let r=toToolCallStarted(i,n,e);await t.publish(r)},executeTool({toolCallId:t,execute:r}){let a=i.toolKeys.get(t);return a===void 0?r():n({idempotencyKey:a,scope:e,type:`tool.call`},r)},async onToolExecutionEnd(e){let n=e.toolCall.toolCallId,r=i.toolKeys.get(n);if(r===void 0)return;i.toolKeys.delete(n);let a=toToolCallCompleted(i,r,e);await t.publish(a)},async onAbort(e){await failOpenOperations(e.reason)},async onError(e){await failOpenOperations(e.error)}};async function failOpenOperations(n){let r=[];for(let a of i.modelKeys.values())r.push(t.publish(Object.freeze({error:n,idempotencyKey:a,scope:e,type:`model.call.failed`})));for(let a of i.toolKeys.values())r.push(t.publish(Object.freeze({error:n,idempotencyKey:a,scope:e,type:`tool.call.failed`})));i.modelKeys.clear(),i.modelCallStartEvents.clear(),i.toolKeys.clear(),await Promise.all(r)}}const directRunInContext=(e,t)=>t();function toStepAttemptStarted(e){if(e.operation!==void 0&&e.stepNumber!==void 0)return Object.freeze({idempotencyKey:attemptIdempotencyKey(e.scope),operation:e.operation,runtimeContext:e.runtimeContext,scope:e.scope,type:`step.attempt.started`})}function toModelCallStarted(e,t,n){return Object.freeze({idempotencyKey:t,input:e.capturesInputs?Object.freeze({instructions:n.instructions,messages:Object.freeze([...n.messages])}):void 0,model:Object.freeze({modelId:n.modelId,provider:n.provider}),runtimeContext:e.runtimeContext,scope:e.scope,type:`model.call.started`})}function toModelCallCompleted(e,t,n){return Object.freeze({content:e.capturesOutputs?toContentParts(n.content):void 0,finishReason:n.finishReason,idempotencyKey:t,responseModelId:n.modelId,responseId:n.responseId,scope:e.scope,type:`model.call.completed`,usage:toUsage(n.usage)})}function toUsage(e){return Object.freeze({inputTokenDetails:Object.freeze({cacheReadTokens:e.inputTokenDetails?.cacheReadTokens,cacheWriteTokens:e.inputTokenDetails?.cacheWriteTokens}),inputTokens:e.inputTokens,outputTokens:e.outputTokens})}function toContentParts(e){let t=[];for(let n of e)switch(n.type){case`text`:case`reasoning`:t.push(Object.freeze({text:n.text,type:n.type}));break;case`tool-call`:t.push(Object.freeze({callId:n.toolCallId,input:n.input,toolName:n.toolName,type:`tool-call`}));break;case`tool-result`:t.push(Object.freeze({callId:n.toolCallId,input:n.input,output:n.output,toolName:n.toolName,type:`tool-result`}));break;case`tool-error`:t.push(Object.freeze({callId:n.toolCallId,error:n.error,input:n.input,toolName:n.toolName,type:`tool-error`}))}return Object.freeze(t)}function toToolCallStarted(e,t,n){return Object.freeze({callId:n.toolCall.toolCallId,idempotencyKey:t,input:e.capturesInputs?n.toolCall.input:void 0,scope:e.scope,toolName:n.toolCall.toolName,type:`tool.call.started`})}function toToolCallCompleted(e,t,n){return Object.freeze({durationMs:n.toolExecutionMs,idempotencyKey:t,output:toToolOutput(n.toolOutput,e.capturesOutputs),scope:e.scope,type:`tool.call.completed`})}function toToolOutput(e,t){return e.type===`tool-result`?Object.freeze(t?{output:e.output,type:`result`}:{type:`result`}):Object.freeze(t?{error:e.error,type:`error`}:{type:`error`})}export{createAiSdkHookBridge};
|
|
@@ -363,6 +363,8 @@ export interface InstrumentationToolCallStartedEvent {
|
|
|
363
363
|
}
|
|
364
364
|
export interface InstrumentationToolCallCompletedEvent {
|
|
365
365
|
readonly type: "tool.call.completed";
|
|
366
|
+
/** How long the tool's `execute` ran, in milliseconds, when the publisher measured it. */
|
|
367
|
+
readonly durationMs?: number;
|
|
366
368
|
readonly idempotencyKey: string;
|
|
367
369
|
readonly output: InstrumentationToolOutput;
|
|
368
370
|
readonly scope: InstrumentationAttemptScope;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createRequire}from"node:module";import{existsSync,readFileSync,realpathSync}from"node:fs";import{basename,dirname,join}from"node:path";import{fileURLToPath}from"node:url";import{EVE_PACKAGE_NAME}from"#internal/package-name.js";let cachedPackageInfo,cachedPackageLocation;const BUNDLED_FALLBACK_PACKAGE_VERSION=`0.
|
|
1
|
+
import{createRequire}from"node:module";import{existsSync,readFileSync,realpathSync}from"node:fs";import{basename,dirname,join}from"node:path";import{fileURLToPath}from"node:url";import{EVE_PACKAGE_NAME}from"#internal/package-name.js";let cachedPackageInfo,cachedPackageLocation;const BUNDLED_FALLBACK_PACKAGE_VERSION=`0.71.0`,WORKFLOW_MODULE_ALIASES={"workflow/errors":`src/compiled/@workflow/errors/index.js`,"workflow/internal/private":`src/compiled/@workflow/core/private.js`};function resolveFallbackPackageVersion(){return BUNDLED_FALLBACK_PACKAGE_VERSION.startsWith(`__`)?`0.0.0`:BUNDLED_FALLBACK_PACKAGE_VERSION}const FALLBACK_PACKAGE_INFO={name:EVE_PACKAGE_NAME,version:resolveFallbackPackageVersion()};function resolveCurrentModulePath(){return typeof __filename==`string`?__filename:resolveCurrentModulePathFromStack()}function resolveCurrentModulePathFromStack(){let e=Error.prepareStackTrace;try{Error.prepareStackTrace=(e,t)=>t;let e=Error().stack?.[0]?.getFileName();if(typeof e!=`string`||e.length===0)throw Error(`Failed to resolve the current module path from the stack trace.`);return e.startsWith(`file:`)?fileURLToPath(e):e}finally{Error.prepareStackTrace=e}}const packageRequire=createRequire(resolveCurrentModulePath());function tryResolveVerifiedPackageRoot(e){try{let t=realpathSync.native(e);return tryReadInstalledPackageInfo(t,EVE_PACKAGE_NAME)===void 0?void 0:dirname(t)}catch{return}}function findNearestVerifiedPackageRoot(e){let t=e;for(;;){let e=tryResolveVerifiedPackageRoot(join(t,`package.json`));if(e!==void 0)return e;let n=dirname(t);if(n===t)return;t=n}}function tryResolveDirectBuildLocation(e){let t=dirname(e);for(;;){if(basename(t)===`dist`){let e=tryResolveVerifiedPackageRoot(join(dirname(t),`package.json`));if(e!==void 0)return{packageBuildRoot:t,packageRoot:e}}let e=dirname(t);if(e===t)return;t=e}}function isSourceCheckout(e){return existsSync(join(e,`src`,`internal`,`application`,`package.ts`))}function tryCreatePackageLocation(e){if(isSourceCheckout(e))return{packageBuildRoot:null,packageRoot:e};let t=join(e,`dist`);if(existsSync(t))return{packageBuildRoot:t,packageRoot:e}}function resolveSelfPackageJsonPath(e){return createRequire(e).resolve(`${EVE_PACKAGE_NAME}/package.json`)}function resolvePackageLocationFromModulePath(e,t=resolveSelfPackageJsonPath){let n=realpathSync.native(e),r=tryResolveDirectBuildLocation(n);if(r!==void 0)return r;let i=findNearestVerifiedPackageRoot(dirname(n));if(i!==void 0&&isSourceCheckout(i))return{packageBuildRoot:null,packageRoot:i};try{let e=tryResolveVerifiedPackageRoot(t(n)),r=e===void 0?void 0:tryCreatePackageLocation(e);if(r!==void 0)return r}catch{}let a=i===void 0?void 0:tryCreatePackageLocation(i);if(a!==void 0)return a;throw Error(`Failed to resolve the eve package root from "${e}".`)}function resolvePackageLocation(){return cachedPackageLocation??=resolvePackageLocationFromModulePath(resolveCurrentModulePath()),cachedPackageLocation}function resolvePackageBuildRoot(){return resolvePackageLocation().packageBuildRoot}function resolvePackageRoot(){return resolvePackageLocation().packageRoot}function tryResolvePackageRoot(){try{return resolvePackageRoot()}catch{return}}function rewriteSourceFilePathForBuild(e){return e.replace(/\.[cm]?tsx?$/,`.js`)}function resolvePackageSourceFilePath(e){let t=resolvePackageBuildRoot();return t===null?join(resolvePackageRoot(),e):join(t,rewriteSourceFilePathForBuild(e))}function resolvePackageSourceDirectoryPath(e){let t=resolvePackageBuildRoot();return join(t===null?resolvePackageRoot():t,e)}function resolvePackageDependencyPath(e){try{return packageRequire.resolve(e)}catch(t){let n=tryResolvePackageRoot(),r=n===void 0||!isSourceCheckout(n)?void 0:resolveSourceCheckoutExport(n,e);if(r!==void 0)return r;throw t}}function resolveSourceCheckoutExport(e,t){if(t!==EVE_PACKAGE_NAME&&!t.startsWith(`${EVE_PACKAGE_NAME}/`))return;let n=t===EVE_PACKAGE_NAME?`.`:`.${t.slice(EVE_PACKAGE_NAME.length)}`;try{let t=JSON.parse(readFileSync(join(e,`package.json`),`utf8`)).exports?.[n],r=typeof t==`string`?t:t?.[`eve-source`]??t?.import??t?.default;if(r===void 0)return;let i=r.replace(/^\.\/dist\/src\//,`src/`).replace(/\.[cm]?js$/u,`.ts`),a=join(e,i);return existsSync(a)?a:void 0}catch{return}}function resolvePackageCompiledFilePath(e){let t=resolvePackageBuildRoot();return t===null?join(resolvePackageRoot(),`.generated`,`compiled`,e.replace(/^src\/compiled\//,``)):join(t,e)}function normalizeInstalledPackageInfo(e){let t=e;if(typeof t.name==`string`&&typeof t.version==`string`)return{name:t.name,version:t.version}}function tryReadInstalledPackageInfo(e,t){let n=normalizeInstalledPackageInfo(JSON.parse(readFileSync(e,`utf8`)));if(n?.name===t)return n}function resolveInstalledPackageInfo(){if(cachedPackageInfo)return cachedPackageInfo;let e=tryResolvePackageRoot(),t=e===void 0?void 0:tryReadInstalledPackageInfo(join(e,`package.json`),EVE_PACKAGE_NAME);if(t)return cachedPackageInfo=t,cachedPackageInfo;try{let e=tryReadInstalledPackageInfo(packageRequire.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(packageRequire.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?packageRequire.resolve(e):resolvePackageCompiledFilePath(t)}export{resolveExpectedWorkflowVersion,resolveInstalledPackageInfo,resolvePackageCompiledFilePath,resolvePackageDependencyPath,resolvePackageLocationFromModulePath,resolvePackageRoot,resolvePackageSourceDirectoryPath,resolvePackageSourceFilePath,resolveWorkflowModulePath};
|
|
@@ -24,7 +24,8 @@ export declare const EVE_STREAM_LEASE_ENDED_CONTROL: {
|
|
|
24
24
|
*
|
|
25
25
|
* `tool-calls` is the only non-terminal assistant step in the current
|
|
26
26
|
* tool-loop harness. All other values indicate the assistant step ended the
|
|
27
|
-
* current turn
|
|
27
|
+
* current turn, except a step superseded by a steering message: it completes
|
|
28
|
+
* with `other` and the turn continues with the next step.
|
|
28
29
|
*/
|
|
29
30
|
export type AssistantStepFinishReason = "content-filter" | "error" | "length" | "other" | "stop" | "tool-calls";
|
|
30
31
|
type ProviderMetadataEntry = NonNullable<ProviderMetadata[string]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{EveAgentStore,attachEveAgentStore,detachEveAgentStore}from"#client/eve-agent-store.js";import{conversationReducer}from"#client/conversation-reducer.js";import{useCallback,useEffect,useMemo,useRef,useState,useSyncExternalStore}from"react";import{resolveEveAgentHost}from"#client/agent-host.js";function useEveAgent(e={}){let t=useRef(void 0),n=useRef(e.resume??!1),[
|
|
1
|
+
import{EveAgentStore,attachEveAgentStore,detachEveAgentStore}from"#client/eve-agent-store.js";import{conversationReducer}from"#client/conversation-reducer.js";import{useCallback,useEffect,useMemo,useRef,useState,useSyncExternalStore}from"react";import{resolveEveAgentHost}from"#client/agent-host.js";function useEveAgent(e={}){let t=useRef(void 0),n=useRef(!1),r=useRef(e.resume??!1),[i,a]=useState(r.current),[o,s]=useState(0),c=e.prewarm??!1;if(!t.current){if(r.current&&e.initialSession===void 0&&e.session===void 0)throw Error(`useEveAgent({ resume: true }) requires initialSession or session.`);let n=e.reducer??conversationReducer;t.current=new EveAgentStore({auth:e.auth,headers:e.headers,host:resolveEveAgentHost({agent:e.agent,host:e.host}),initialEvents:e.initialEvents,initialSession:e.initialSession,optimistic:e.optimistic,followSubagents:e.followSubagents,reducer:n,session:e.session})}let l=t.current;l.setCallbacks({onError:e.onError,onEvent:e.onEvent,onFinish:e.onFinish,onSessionChange:e.onSessionChange,prepareSend:e.prepareSend});let u=useCallback(e=>l.subscribe(e),[l]),d=useSyncExternalStore(u,()=>l.snapshot,()=>l.snapshot);useEffect(()=>{n.current=!0;let e=setTimeout(()=>attachEveAgentStore(l),0);return()=>{n.current=!1,clearTimeout(e),queueMicrotask(()=>{n.current||detachEveAgentStore(l)})}},[l]),useEffect(()=>{if(!c)return;let e=setTimeout(()=>void l.prewarm().catch(()=>{}),0);return()=>clearTimeout(e)},[o,c,l]),useEffect(()=>{if(!r.current)return;let e=!0,finish=()=>{e&&a(!1)},t=setTimeout(()=>void l.resume().then(finish,finish),0);return()=>{e=!1,clearTimeout(t)}},[l]);let f=useCallback(()=>l.cancel(),[l]),p=useCallback(()=>{l.reset(),s(e=>e+1)},[l]),m=useCallback(()=>l.prewarm(),[l]),h=useCallback(()=>l.resume(),[l]),g=useCallback((e,t)=>l.send({...t,message:e}),[l]),_=useCallback((e,t)=>l.send({...t,inputResponses:e}),[l]),v=i&&d.status===`ready`?{...d,status:`resuming`}:d;return useMemo(()=>({...v,cancel:f,prewarm:m,reset:p,respond:_,resume:h,send:g}),[f,m,p,_,h,g,v])}export{useEveAgent};
|
|
@@ -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{DEFAULT_CONNECT_PACKAGE_VERSION,resolveVersionToken}from"../version-tokens.js";import{applyPackageManagerWorkspaceConfiguration,isPackageManagerWorkspaceMember,patchWorkspaceRootPackageJson}from"../workspace-root.js";import{WEB_CHANNEL_TEMPLATES}from"./web-template.js";import{AGENT_INSTRUCTIONS_TEMPLATE}from"./instructions-template.js";import{SCAFFOLDED_AGENT_PATHS}from"./agent-paths.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.105`,DEFAULT_ZOD_PACKAGE_VERSION=`4.5.4`,DEFAULT_EVE_PACKAGE_CONTRACT={version:`0.
|
|
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{DEFAULT_CONNECT_PACKAGE_VERSION,resolveVersionToken}from"../version-tokens.js";import{applyPackageManagerWorkspaceConfiguration,isPackageManagerWorkspaceMember,patchWorkspaceRootPackageJson}from"../workspace-root.js";import{WEB_CHANNEL_TEMPLATES}from"./web-template.js";import{AGENT_INSTRUCTIONS_TEMPLATE}from"./instructions-template.js";import{SCAFFOLDED_AGENT_PATHS}from"./agent-paths.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.105`,DEFAULT_ZOD_PACKAGE_VERSION=`4.5.4`,DEFAULT_EVE_PACKAGE_CONTRACT={version:`0.71.0`,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{[SCAFFOLDED_AGENT_PATHS.config]:renderAgentTemplate(e,t),[SCAFFOLDED_AGENT_PATHS.channel]:WEB_CHANNEL_TEMPLATES.default,[SCAFFOLDED_AGENT_PATHS.instructions]: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__",
|
|
@@ -27,6 +27,8 @@ export declare function emitProxiedAuthorizationEvent(input: {
|
|
|
27
27
|
readonly hookPayload: SubagentAuthorizationEventHookPayload;
|
|
28
28
|
readonly session: HarnessSessionBase;
|
|
29
29
|
}): Promise<void>;
|
|
30
|
+
/** The `turn.waiting` that parks the session's open turn while a person must act. */
|
|
31
|
+
export declare function createTurnWaitingOnInputEvent(session: Pick<HarnessSessionBase, "state">): import("#protocol/message.js").TurnWaitingStreamEvent;
|
|
30
32
|
/** One proxied-child bucket of a routed deliver payload. */
|
|
31
33
|
export interface RoutedChildDelivery {
|
|
32
34
|
readonly workflowAsk?: WorkflowAskRoute;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{inputTextKey,readAnswerText}from"#internal/input-text.js";import{createInputRequestedEvent,createTurnWaitingEvent}from"#protocol/message.js";import{resolveTextToResponse}from"#channel/resolve-text.js";import{getHarnessEmissionState}from"#harness/emission.js";import{getSessionUsage}from"#harness/turn-tag-state.js";import{getProxyInputRequests,toProxyInputRequestEntries}from"#harness/proxy-input-requests.js";import{resolveInputOutcome}from"#harness/input-request-resolution.js";import{SESSION_LIMIT_STOP_OPTION_ID}from"#harness/session-limit-continuation.js";async function emitProxiedInputRequest(e){return await e.emit(createInputRequestedEvent({requests:e.hookPayload.event.requests,sequence:e.hookPayload.event.sequence,stepIndex:e.hookPayload.event.stepIndex,taskId:e.hookPayload.event.taskId,turnId:e.hookPayload.event.turnId})),await
|
|
1
|
+
import{inputTextKey,readAnswerText}from"#internal/input-text.js";import{createInputRequestedEvent,createTurnWaitingEvent}from"#protocol/message.js";import{resolveTextToResponse}from"#channel/resolve-text.js";import{getHarnessEmissionState}from"#harness/emission.js";import{getSessionUsage}from"#harness/turn-tag-state.js";import{getProxyInputRequests,toProxyInputRequestEntries}from"#harness/proxy-input-requests.js";import{resolveInputOutcome}from"#harness/input-request-resolution.js";import{SESSION_LIMIT_STOP_OPTION_ID}from"#harness/session-limit-continuation.js";async function emitProxiedInputRequest(e){return await e.emit(createInputRequestedEvent({requests:e.hookPayload.event.requests,sequence:e.hookPayload.event.sequence,stepIndex:e.hookPayload.event.stepIndex,taskId:e.hookPayload.event.taskId,turnId:e.hookPayload.event.turnId})),await e.emit(createTurnWaitingOnInputEvent(e.session)),toProxyInputRequestEntries(e.hookPayload)}async function emitProxiedAuthorizationEvent(e){await e.emit(e.hookPayload.event),e.hookPayload.event.type===`authorization.required`&&await e.emit(createTurnWaitingOnInputEvent(e.session))}function createTurnWaitingOnInputEvent(e){let t=getHarnessEmissionState(e.state);return createTurnWaitingEvent({on:`input`,sequence:t.sequence,turnId:t.turnId,usage:getSessionUsage(e)})}const CONSUMED_MESSAGE_KEYS=new Set([`context`,`message`,inputTextKey]);function routeDeliverPayload(e){let t=getProxyInputRequests(e.state),routable=(t,n)=>n!==void 0&&e.allowRoute?.(t,n)!==!1,n=resolveMessageAgainstQuestions({enabled:e.resolveMessage===!0,entries:t,payload:e.payload,routable}),r=[...e.payload.inputResponses??[],...n.responses],i=new Map,a=[],o,bucketFor=e=>{let t=JSON.stringify([e.childContinuationToken,e.childSessionInbox?.sessionId??``,e.remote?.sessionId??``,e.event.sequence,e.event.stepIndex,e.event.turnId,e.inputSource??null]),n=i.get(t);if(n!==void 0)return n;let r={childContinuationToken:e.childContinuationToken,remote:e.remote,event:e.event,parentRequestIds:[],responses:[],routes:[],...e.childSessionInbox!==void 0&&{childSessionInbox:e.childSessionInbox},...e.workflowAsk!==void 0&&{workflowAsk:e.workflowAsk}};return i.set(t,r),r},s=new Set;for(let e of r){let n=t.get(e.requestId);if(n===void 0||!routable(e.requestId,n)){a.push(e);continue}if(s.has(e.requestId))continue;s.add(e.requestId),n.kind===`session-limit`&&e.optionId===SESSION_LIMIT_STOP_OPTION_ID&&(o={kind:`cancel-turn`});let r=bucketFor(n);r.parentRequestIds.push(e.requestId),r.responses.push(e),r.routes.push(n)}let c=[...i.values()].map(({workflowAsk:e,remote:n,childContinuationToken:r,childSessionInbox:i,event:a,parentRequestIds:o,responses:s,routes:c})=>{let l=new Set(o),u=new Set(l);for(let e of c)if(e.batch!==void 0&&batchResolves({batch:e.batch,childContinuationToken:r,entries:t,responseIds:l}))for(let t of e.batch.requestIds)u.add(t);return{childContinuationToken:r,payload:{inputResponses:s},resolved:{event:a,resolutions:resolveRetiredRequests({entries:t,responses:s,retireRequestIds:u})},...i!==void 0&&{childSessionInbox:i},...e!==void 0&&{workflowAsk:e},...n!==void 0&&{remote:n},...c[0]?.inputSource!==void 0&&{inputSource:c[0].inputSource}}}),l={};for(let[t,r]of Object.entries(e.payload))t!==`inputResponses`&&r!==void 0&&(n.consumed&&CONSUMED_MESSAGE_KEYS.has(t)||(l[t]=r));return a.length>0&&(l.inputResponses=a),{forChildren:c,forSelf:Object.keys(l).length>0?l:void 0,parentAction:o}}function resolveRetiredRequests(e){let t=new Map(e.responses.map(e=>[e.requestId,e])),n=[];for(let r of e.retireRequestIds){let i=e.entries.get(r);i!==void 0&&n.push(toInputResolution(r,i,t.get(r)))}return n}function toInputResolution(e,t,n){let r=resolveInputOutcome(t.kind,n),i={kind:t.kind,outcome:r,requestId:e};return n===void 0?i:{...i,response:n}}function resolveMessageAgainstQuestions(e){let t={consumed:!1,responses:[]};if(!e.enabled||(e.payload.inputResponses?.length??0)>0||e.payload.message===void 0)return t;let n=[...e.entries].filter(([t,n])=>n.kind===`question`&&e.routable(t,n)),r=n.flatMap(([e,t])=>{let n=t.workflowAsk?.question??t.question;return n===void 0?[]:[{requestId:e,...n}]});if(r.length===0)return t;let[i]=r,a=readAnswerText(e.payload),o=n.length===1&&i!==void 0&&a!==void 0?resolveTextToResponse(a,i):void 0;return o===void 0?t:{consumed:!0,responses:[o]}}function batchResolves(e){return e.batch.approvalRequestIds.length===0||e.batch.approvalRequestIds.every(t=>{let n=e.entries.get(t);return n===void 0||!sameBatch(n,e)||e.responseIds.has(t)})}function sameBatch(e,t){return e.childContinuationToken===t.childContinuationToken&&e.batch?.requestIds.length===t.batch.requestIds.length&&e.batch.requestIds.every((e,n)=>e===t.batch.requestIds[n])}export{createTurnWaitingOnInputEvent,emitProxiedAuthorizationEvent,emitProxiedInputRequest,routeDeliverPayload};
|
package/dist/src/svelte/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { i as openConversationInputs, n as conversationReducer, r as defaultMessageReducer, t as useEveAgent } from "../chunks/use-eve-agent-
|
|
1
|
+
import { i as openConversationInputs, n as conversationReducer, r as defaultMessageReducer, t as useEveAgent } from "../chunks/use-eve-agent-DcDhXNv1.js";
|
|
2
2
|
|
|
3
3
|
export { conversationReducer, defaultMessageReducer, openConversationInputs, useEveAgent };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
async function executeAskQuestionTool(e,t){"use workflow";return toAskQuestionOutput(await t.ask(toAskQuestionRequest(e)))}function toAskQuestionRequest(e){let t=e.options?.map(e=>({description:e.description,id:e.label,label:e.label}));return{allowFreeform:!0,display:t===void 0?`text`:`select`,prompt:e.question,...t!==void 0&&{options:t}}}function toAskQuestionOutput(e){switch(e.status){case`answered`:return{answer:e.optionId??e.text??``,status:`answered`};case`cancelled`:return{interrupted:!0};case`unavailable`:return{status:`unavailable`}}}executeAskQuestionTool.workflowId=`workflow//eve@0.
|
|
1
|
+
async function executeAskQuestionTool(e,t){"use workflow";return toAskQuestionOutput(await t.ask(toAskQuestionRequest(e)))}function toAskQuestionRequest(e){let t=e.options?.map(e=>({description:e.description,id:e.label,label:e.label}));return{allowFreeform:!0,display:t===void 0?`text`:`select`,prompt:e.question,...t!==void 0&&{options:t}}}function toAskQuestionOutput(e){switch(e.status){case`answered`:return{answer:e.optionId??e.text??``,status:`answered`};case`cancelled`:return{interrupted:!0};case`unavailable`:return{status:`unavailable`}}}executeAskQuestionTool.workflowId=`workflow//eve@0.71.0//executeAskQuestionTool`;export{executeAskQuestionTool,toAskQuestionOutput,toAskQuestionRequest};
|
|
@@ -2,12 +2,27 @@ import { type ToolDefinition } from "#tools/definition.js";
|
|
|
2
2
|
export interface BashToolInput {
|
|
3
3
|
command: string;
|
|
4
4
|
}
|
|
5
|
-
|
|
5
|
+
/**
|
|
6
|
+
* Output of the provided `bash` tool. A command that finishes within 30
|
|
7
|
+
* seconds is `completed`. A longer command keeps running in the sandbox as
|
|
8
|
+
* process group `pid` and returns `running` with its output so far; it keeps
|
|
9
|
+
* writing `stdout`, `stderr`, and finally `exit` files in `outputDirectory`.
|
|
10
|
+
*/
|
|
11
|
+
export type BashToolOutput = {
|
|
12
|
+
status: "completed";
|
|
6
13
|
exitCode: number;
|
|
7
14
|
stderr: string;
|
|
8
15
|
stdout: string;
|
|
9
16
|
truncated: boolean;
|
|
10
|
-
}
|
|
17
|
+
} | {
|
|
18
|
+
status: "running";
|
|
19
|
+
pid: number;
|
|
20
|
+
outputDirectory: string;
|
|
21
|
+
message: string;
|
|
22
|
+
stderr: string;
|
|
23
|
+
stdout: string;
|
|
24
|
+
truncated: boolean;
|
|
25
|
+
};
|
|
11
26
|
/**
|
|
12
27
|
* Input schema for the provided `bash` tool.
|
|
13
28
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{defineJsonSchema}from"#tools/schema.js";import{defineTool}from"#tools/definition.js";import{toolLabel}from"#tools/tool-label.js";import{executeBashOnSandbox}from"#execution/sandbox/bash.js";const BASH_INPUT_SCHEMA=defineJsonSchema({type:`object`,properties:{command:{type:`string`,description:`The shell command to execute.`}},required:[`command`],additionalProperties:!1}),BASH_OUTPUT_SCHEMA=defineJsonSchema({type:`object`,properties:{exitCode:{type:`number`},stderr:{type:`string`},stdout:{type:`string`},truncated:{type:`boolean`}},required:[`exitCode`,`stderr`,`stdout`,`truncated`],additionalProperties:!1}),bash=defineTool({label:{start:e=>toolLabel(`Run`,e.command)},description:`Execute a shell command in the shared workspace environment.`,async execute(e,t){return await executeBashOnSandbox(await t.getSandbox(),e)},inputSchema:BASH_INPUT_SCHEMA,outputSchema:BASH_OUTPUT_SCHEMA});export{BASH_INPUT_SCHEMA,BASH_OUTPUT_SCHEMA,bash,bash as default};
|
|
1
|
+
import{defineJsonSchema}from"#tools/schema.js";import{defineTool}from"#tools/definition.js";import{toolLabel}from"#tools/tool-label.js";import{BASH_YIELD_SECONDS,executeBashOnSandbox}from"#execution/sandbox/bash.js";const BASH_INPUT_SCHEMA=defineJsonSchema({type:`object`,properties:{command:{type:`string`,description:`The shell command to execute.`}},required:[`command`],additionalProperties:!1}),BASH_OUTPUT_SCHEMA=defineJsonSchema({oneOf:[{type:`object`,properties:{status:{const:`completed`},exitCode:{type:`number`},stderr:{type:`string`},stdout:{type:`string`},truncated:{type:`boolean`}},required:[`status`,`exitCode`,`stderr`,`stdout`,`truncated`],additionalProperties:!1},{type:`object`,properties:{status:{const:`running`},pid:{type:`number`},outputDirectory:{type:`string`},message:{type:`string`},stderr:{type:`string`},stdout:{type:`string`},truncated:{type:`boolean`}},required:[`status`,`pid`,`outputDirectory`,`message`,`stderr`,`stdout`,`truncated`],additionalProperties:!1}]}),bash=defineTool({label:{start:e=>toolLabel(`Run`,e.command)},description:`Execute a shell command in the shared workspace environment. A command still running after ${BASH_YIELD_SECONDS} seconds keeps running in the background and returns status "running" with its output so far and how to check on or stop it.`,async execute(e,t){return await executeBashOnSandbox(await t.getSandbox(),e,{abortSignal:t.abortSignal})},inputSchema:BASH_INPUT_SCHEMA,outputSchema:BASH_OUTPUT_SCHEMA});export{BASH_INPUT_SCHEMA,BASH_OUTPUT_SCHEMA,bash,bash as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{sleep}from"#compiled/@workflow/core/index.js";async function executeSleepTool(e,t){"use workflow";let n=new Promise(e=>t.abortSignal.addEventListener(`abort`,()=>e(`interrupted`),{once:!0})),r=sleep(Math.ceil(e.seconds*1e3)).then(()=>`elapsed`);return await Promise.race([r,n])===`elapsed`?{waitedSeconds:e.seconds}:{interrupted:!0}}executeSleepTool.workflowId=`workflow//eve@0.
|
|
1
|
+
import{sleep}from"#compiled/@workflow/core/index.js";async function executeSleepTool(e,t){"use workflow";let n=new Promise(e=>t.abortSignal.addEventListener(`abort`,()=>e(`interrupted`),{once:!0})),r=sleep(Math.ceil(e.seconds*1e3)).then(()=>`elapsed`);return await Promise.race([r,n])===`elapsed`?{waitedSeconds:e.seconds}:{interrupted:!0}}executeSleepTool.workflowId=`workflow//eve@0.71.0//executeSleepTool`;export{executeSleepTool};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{ROOT_CONTEXT,SpanKind,trace}from"#compiled/@opentelemetry/api/index.js";import{actionIdempotencyKey}from"#instrumentation/lifecycle.js";import{agentSpanNamingAttributes}from"#tracing/agent-span-naming.js";import{contentAttribute}from"#tracing/agent-otel-content.js";import{recordAgentSpanError}from"#tracing/agent-span-error.js";import{withAgentToolSpanContext}from"#tracing/agent-tool-span-context.js";import{agentTraceIdentityAttributes,traceSessionIdOf}from"#tracing/agent-otel-attributes.js";import{withChannelAudience}from"#tracing/channel-audience-context.js";function createAgentToolInstrumentation(e){let t=new Map,n=new Map,onStarted=async t=>{let n=actionIdempotencyKey(t.scope.sessionId,t.scope.turnId,t.callId),r=e.resolveFallback(t),i=r===void 0?void 0:reserve(t,n,r),a=await e.actionContextFor(t.scope.sessionId,t.scope.turnId,t.callId);if(i===void 0){if(a===void 0)return;i=reserve(t,n,a)}a!==void 0&&startSpan(i,a.context)},onTerminal=async t=>{let r=n.get(t.scope.attemptId)?.get(t.idempotencyKey);if(r!==void 0){if(r.terminal=t,r.span===void 0){let t=await e.actionContextFor(r.event.scope.sessionId,r.event.scope.turnId,r.event.callId);t!==void 0&&startSpan(r,t.context)}finishIfReady(r)}};return{async actionStarted(n){let r=t.get(n.idempotencyKey);if(r===void 0||r.span!==void 0||r.finished===!0)return;let i=await e.actionContextFor(n.scope.sessionId,n.scope.turnId,n.callId);i!==void 0&&(startSpan(r,i.context),finishIfReady(r))},contextFor:(e,t)=>n.get(e)?.get(t)?.context,drain(e,t){let r=n.get(e);if(r!==void 0){for(let e of r.values())e.finished!==!0&&(e.span===void 0&&startSpan(e,e.fallbackParent),finish(e,t));n.delete(e)}},events:{"tool.call.completed":onTerminal,"tool.call.failed":onTerminal,"tool.call.started":onStarted}};function getAttemptStates(e){let t=n.get(e);return t===void 0&&(t=new Map,n.set(e,t)),t}function reserve(n,r,i){let a=e.idGenerator.deriveSpanId(`tool:${n.idempotencyKey}`),o={actionKey:r,attemptId:n.scope.attemptId,additionalAttributes:{},context:withChannelAudience(contextFromSpanContext({isRemote:!1,spanId:a,traceFlags:i.spanContext.traceFlags,traceId:i.spanContext.traceId}),n.scope.channelAudience),event:n,fallbackParent:i.context,idempotencyKey:n.idempotencyKey,spanId:a,startTimeMs:Date.now()};return o.context=withAgentToolSpanContext(o.context,{recordInputs:e.recordInputs,recordOutputs:e.recordOutputs,setAttributes(e){if(Object.assign(o.additionalAttributes,e),o.span!==void 0)for(let[t,n]of Object.entries(e))n!==void 0&&o.span.setAttribute(t,n)},recordError(e,t){o.pendingError={error:e,errorType:t},o.span!==void 0&&recordAgentSpanError(o.span,e,t)}}),getAttemptStates(n.scope.attemptId).set(n.idempotencyKey,o),t.set(r,o),o}function startSpan(t,n){if(t.span===void 0&&t.finished!==!0&&(t.span=e.idGenerator.withSpanId(t.spanId,()=>e.tracer.startSpan(`execute_tool ${t.event.toolName}`,{attributes:{...toolAttributes(t.event),...t.additionalAttributes},kind:SpanKind.INTERNAL,startTime:t.startTimeMs},n)),t.pendingError!==void 0&&recordAgentSpanError(t.span,t.pendingError.error,t.pendingError.errorType),e.recordInputs)){let e=contentAttribute(t.event.input);e!==void 0&&t.span.setAttribute(`gen_ai.tool.call.arguments`,e)}}function finishIfReady(e){e.span!==void 0&&e.terminal!==void 0&&finish(e)}function finish(r,i){let a=r.span;if(a===void 0||r.finished===!0)return;r.finished=!0;let o=r.terminal;if(i!==void 0)recordAgentSpanError(a,i.error);else if(o?.type===`tool.call.failed`)recordAgentSpanError(a,o.error);else if(o?.output.type===`error`)recordAgentSpanError(a,o.output.error);else if(o!==void 0&&e.recordOutputs){let e=contentAttribute(o.output.output);e!==void 0&&a.setAttribute(`gen_ai.tool.call.result`,e)}a.end(),t.delete(r.actionKey);let s=n.get(r.attemptId);s?.delete(r.idempotencyKey),s?.size===0&&n.delete(r.attemptId)}}function toolAttributes(e){return{...e.scope.functionId===void 0?{}:{"gen_ai.agent.name":e.scope.functionId},"gen_ai.operation.name":`execute_tool`,"gen_ai.tool.call.id":e.callId,"gen_ai.tool.name":e.toolName,"gen_ai.tool.type":`function`,...agentSpanNamingAttributes(`execute_tool ${e.toolName}`,`execute_tool`),...agentTraceIdentityAttributes({rootSessionId:e.scope.rootSessionId??e.scope.sessionId,traceSessionId:traceSessionIdOf(e.scope),sessionId:e.scope.sessionId})}}function contextFromSpanContext(e){return trace.setSpan(ROOT_CONTEXT,trace.wrapSpanContext(e))}export{createAgentToolInstrumentation};
|
|
1
|
+
import{ROOT_CONTEXT,SpanKind,trace}from"#compiled/@opentelemetry/api/index.js";import{actionIdempotencyKey}from"#instrumentation/lifecycle.js";import{agentSpanNamingAttributes}from"#tracing/agent-span-naming.js";import{contentAttribute}from"#tracing/agent-otel-content.js";import{recordAgentSpanError}from"#tracing/agent-span-error.js";import{withAgentToolSpanContext}from"#tracing/agent-tool-span-context.js";import{agentTraceIdentityAttributes,traceSessionIdOf}from"#tracing/agent-otel-attributes.js";import{withChannelAudience}from"#tracing/channel-audience-context.js";function createAgentToolInstrumentation(e){let t=new Map,n=new Map,onStarted=async t=>{let n=actionIdempotencyKey(t.scope.sessionId,t.scope.turnId,t.callId),r=e.resolveFallback(t),i=r===void 0?void 0:reserve(t,n,r),a=await e.actionContextFor(t.scope.sessionId,t.scope.turnId,t.callId);if(i===void 0){if(a===void 0)return;i=reserve(t,n,a)}a!==void 0&&startSpan(i,a.context)},onTerminal=async t=>{let r=n.get(t.scope.attemptId)?.get(t.idempotencyKey);if(r!==void 0){if(r.terminal=t,r.span===void 0){let t=await e.actionContextFor(r.event.scope.sessionId,r.event.scope.turnId,r.event.callId);t!==void 0&&startSpan(r,t.context)}finishIfReady(r)}};return{async actionStarted(n){let r=t.get(n.idempotencyKey);if(r===void 0||r.span!==void 0||r.finished===!0)return;let i=await e.actionContextFor(n.scope.sessionId,n.scope.turnId,n.callId);i!==void 0&&(startSpan(r,i.context),finishIfReady(r))},contextFor:(e,t)=>n.get(e)?.get(t)?.context,drain(e,t){let r=n.get(e);if(r!==void 0){for(let e of r.values())e.finished!==!0&&(e.span===void 0&&startSpan(e,e.fallbackParent),finish(e,t));n.delete(e)}},events:{"tool.call.completed":onTerminal,"tool.call.failed":onTerminal,"tool.call.started":onStarted}};function getAttemptStates(e){let t=n.get(e);return t===void 0&&(t=new Map,n.set(e,t)),t}function reserve(n,r,i){let a=e.idGenerator.deriveSpanId(`tool:${n.idempotencyKey}`),o={actionKey:r,attemptId:n.scope.attemptId,additionalAttributes:{},context:withChannelAudience(contextFromSpanContext({isRemote:!1,spanId:a,traceFlags:i.spanContext.traceFlags,traceId:i.spanContext.traceId}),n.scope.channelAudience),event:n,fallbackParent:i.context,idempotencyKey:n.idempotencyKey,spanId:a,startTimeMs:Date.now()};return o.context=withAgentToolSpanContext(o.context,{recordInputs:e.recordInputs,recordOutputs:e.recordOutputs,setAttributes(e){if(Object.assign(o.additionalAttributes,e),o.span!==void 0)for(let[t,n]of Object.entries(e))n!==void 0&&o.span.setAttribute(t,n)},recordError(e,t){o.pendingError={error:e,errorType:t},o.span!==void 0&&recordAgentSpanError(o.span,e,t)}}),getAttemptStates(n.scope.attemptId).set(n.idempotencyKey,o),t.set(r,o),o}function startSpan(t,n){if(t.span===void 0&&t.finished!==!0&&(t.span=e.idGenerator.withSpanId(t.spanId,()=>e.tracer.startSpan(`execute_tool ${t.event.toolName}`,{attributes:{...toolAttributes(t.event),...t.additionalAttributes},kind:SpanKind.INTERNAL,startTime:t.startTimeMs},n)),t.pendingError!==void 0&&recordAgentSpanError(t.span,t.pendingError.error,t.pendingError.errorType),e.recordInputs)){let e=contentAttribute(t.event.input);e!==void 0&&t.span.setAttribute(`gen_ai.tool.call.arguments`,e)}}function finishIfReady(e){e.span!==void 0&&e.terminal!==void 0&&finish(e)}function finish(r,i){let a=r.span;if(a===void 0||r.finished===!0)return;r.finished=!0;let o=r.terminal;if(o?.type===`tool.call.completed`&&o.durationMs!==void 0&&a.setAttribute(`gen_ai.execute_tool.duration`,o.durationMs/1e3),i!==void 0)recordAgentSpanError(a,i.error);else if(o?.type===`tool.call.failed`)recordAgentSpanError(a,o.error);else if(o?.output.type===`error`)recordAgentSpanError(a,o.output.error);else if(o!==void 0&&e.recordOutputs){let e=contentAttribute(o.output.output);e!==void 0&&a.setAttribute(`gen_ai.tool.call.result`,e)}a.end(),t.delete(r.actionKey);let s=n.get(r.attemptId);s?.delete(r.idempotencyKey),s?.size===0&&n.delete(r.attemptId)}}function toolAttributes(e){return{...e.scope.functionId===void 0?{}:{"gen_ai.agent.name":e.scope.functionId},"gen_ai.operation.name":`execute_tool`,"gen_ai.tool.call.id":e.callId,"gen_ai.tool.name":e.toolName,"gen_ai.tool.type":`function`,...agentSpanNamingAttributes(`execute_tool ${e.toolName}`,`execute_tool`),...agentTraceIdentityAttributes({rootSessionId:e.scope.rootSessionId??e.scope.sessionId,traceSessionId:traceSessionIdOf(e.scope),sessionId:e.scope.sessionId})}}function contextFromSpanContext(e){return trace.setSpan(ROOT_CONTEXT,trace.wrapSpanContext(e))}export{createAgentToolInstrumentation};
|
package/dist/src/vue/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { i as openConversationInputs, n as conversationReducer, r as defaultMessageReducer, t as useEveAgent } from "../chunks/use-eve-agent-
|
|
1
|
+
import { i as openConversationInputs, n as conversationReducer, r as defaultMessageReducer, t as useEveAgent } from "../chunks/use-eve-agent-CFCaYnrI.js";
|
|
2
2
|
|
|
3
3
|
export { conversationReducer, defaultMessageReducer, openConversationInputs, useEveAgent };
|
package/docs/README.md
CHANGED
|
@@ -28,6 +28,7 @@ Important naming note:
|
|
|
28
28
|
| Delegate work to a specialist child agent | [Subagents](./subagents/index.mdx) |
|
|
29
29
|
| Run work on a recurring schedule | [Schedules](./schedules.mdx) |
|
|
30
30
|
| Install an existing integration instead of writing one | [Add Integrations](./install-integrations.mdx) |
|
|
31
|
+
| Build a coding agent, or compare eve-code benchmarks | [Code Extension](./code-extension.mdx) |
|
|
31
32
|
| Link a Vercel project and deploy to production | [Deploy to Vercel](./guides/deployment/vercel.mdx) |
|
|
32
33
|
| Self-host, or compare hosting strategies | [Deployment](./guides/deployment/overview.md) |
|
|
33
34
|
| Authorize routes, sessions, and per-user access | [Authentication](./guides/auth-and-route-protection.md) |
|