eve 0.47.6 → 0.47.7
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 +34 -0
- package/dist/src/channel/adapter.js +1 -1
- package/dist/src/channel/session.js +1 -1
- package/dist/src/chunks/{use-eve-agent-DjYwFJF7.js → use-eve-agent-B5zw1dwj.js} +0 -1
- package/dist/src/chunks/{use-eve-agent-DkUB0Ok4.js → use-eve-agent-Dg5S44kG.js} +0 -1
- package/dist/src/cli/commands/registry-declared-setups.js +1 -1
- package/dist/src/cli/commands/registry-install-transaction.d.ts +23 -0
- package/dist/src/cli/commands/registry-install-transaction.js +1 -0
- package/dist/src/cli/commands/registry-package.js +1 -1
- package/dist/src/cli/commands/registry.js +1 -1
- package/dist/src/cli/commands/setup-headless.d.ts +6 -0
- package/dist/src/cli/commands/setup-headless.js +1 -1
- package/dist/src/cli/dev/run-interactive-ui.js +1 -1
- package/dist/src/cli/dev/tui/line-editor.d.ts +4 -0
- package/dist/src/cli/dev/tui/line-editor.js +3 -3
- package/dist/src/cli/dev/tui/runner.d.ts +2 -0
- package/dist/src/cli/dev/tui/runner.js +1 -1
- package/dist/src/cli/dev/tui/stream-format.d.ts +8 -0
- package/dist/src/cli/dev/tui/stream-format.js +2 -2
- package/dist/src/cli/dev/tui/subagent-pump.d.ts +3 -0
- package/dist/src/cli/dev/tui/subagent-pump.js +1 -1
- package/dist/src/cli/dev/tui/tui.js +1 -1
- package/dist/src/client/agent-info-schema.d.ts +0 -1
- package/dist/src/client/agent-info-schema.js +1 -1
- package/dist/src/compiled/.vendor-stamp.json +1 -1
- package/dist/src/compiler/extension-compatibility.d.ts +2 -2
- package/dist/src/compiler/extension-compatibility.js +1 -1
- package/dist/src/compiler/manifest.d.ts +7 -17
- package/dist/src/compiler/manifest.js +1 -1
- package/dist/src/compiler/normalize-manifest.js +1 -1
- package/dist/src/compiler/normalize-tool.d.ts +0 -1
- package/dist/src/compiler/normalize-tool.js +1 -1
- package/dist/src/context/build-dynamic-tools.d.ts +2 -2
- package/dist/src/context/build-dynamic-tools.js +1 -1
- package/dist/src/context/container.d.ts +7 -0
- package/dist/src/context/container.js +1 -1
- package/dist/src/context/dynamic-tool-lifecycle.d.ts +16 -9
- package/dist/src/context/dynamic-tool-lifecycle.js +1 -1
- package/dist/src/context/dynamic-tool-metadata.d.ts +44 -0
- package/dist/src/context/dynamic-tool-metadata.js +1 -0
- package/dist/src/context/keys.d.ts +11 -14
- package/dist/src/context/keys.js +1 -1
- package/dist/src/eve-channel/index.js +1 -1
- package/dist/src/eve-channel/request.d.ts +0 -1
- package/dist/src/eve-channel/request.js +2 -2
- package/dist/src/execution/create-session-step.js +1 -1
- package/dist/src/execution/delegation-tool.d.ts +1 -2
- package/dist/src/execution/delegation-tool.js +1 -1
- package/dist/src/execution/dispatch-runtime-actions-shared.d.ts +8 -3
- package/dist/src/execution/dispatch-runtime-actions-shared.js +1 -1
- package/dist/src/execution/dispatch-runtime-actions-step.js +1 -1
- package/dist/src/execution/dispatch-workflow-runtime-actions-step.js +1 -1
- package/dist/src/execution/node-step.js +1 -1
- package/dist/src/execution/pending-turn-state.js +1 -1
- package/dist/src/execution/prepared-agent-action.d.ts +7 -0
- package/dist/src/execution/prepared-agent-action.js +1 -0
- package/dist/src/execution/subagent-start-local.d.ts +3 -0
- package/dist/src/execution/subagent-start-local.js +1 -1
- package/dist/src/execution/subagent-tool.d.ts +1 -0
- package/dist/src/execution/subagent-tool.js +1 -1
- package/dist/src/execution/tasks/child/update.d.ts +3 -2
- package/dist/src/execution/tasks/parent/control-shared.d.ts +5 -4
- package/dist/src/execution/tasks/parent/dispatch-task-step.js +1 -1
- package/dist/src/execution/tasks/parent/dispatch.d.ts +4 -3
- package/dist/src/execution/tasks/parent/dispatch.js +1 -1
- package/dist/src/execution/tools/subagent/local.d.ts +3 -4
- package/dist/src/execution/tools/subagent/local.js +1 -1
- package/dist/src/execution/tools/subagent/remote.d.ts +4 -1
- package/dist/src/execution/tools/subagent/remote.js +1 -1
- package/dist/src/execution/workflow-entry-finalization.d.ts +22 -0
- package/dist/src/execution/workflow-entry-finalization.js +1 -0
- package/dist/src/execution/workflow-entry.d.ts +1 -1
- package/dist/src/execution/workflow-entry.js +1 -1
- package/dist/src/execution/workflow-steps.js +1 -1
- package/dist/src/framework/sources/registry.js +1 -1
- package/dist/src/harness/advertised-tools.d.ts +3 -0
- package/dist/src/harness/advertised-tools.js +1 -1
- package/dist/src/harness/approval-delivery-coordinator.d.ts +6 -0
- package/dist/src/harness/approval-delivery-coordinator.js +1 -1
- package/dist/src/harness/background-tools.d.ts +2 -0
- package/dist/src/harness/execute-tool.d.ts +2 -28
- package/dist/src/harness/hitl/pending-input-resolution.js +1 -1
- package/dist/src/harness/input-extraction.d.ts +3 -0
- package/dist/src/harness/input-extraction.js +1 -1
- package/dist/src/harness/input-requests.js +1 -1
- package/dist/src/harness/messages.js +1 -1
- package/dist/src/harness/runtime-actions.d.ts +9 -3
- package/dist/src/harness/runtime-actions.js +1 -1
- package/dist/src/harness/stale-input-responses.d.ts +2 -1
- package/dist/src/harness/stale-input-responses.js +1 -1
- package/dist/src/harness/subagent-depth.d.ts +3 -4
- package/dist/src/harness/subagent-depth.js +1 -1
- package/dist/src/harness/tool-loop.js +2 -2
- package/dist/src/harness/tools.d.ts +0 -2
- package/dist/src/harness/tools.js +1 -1
- package/dist/src/harness/types.d.ts +6 -7
- package/dist/src/harness/workflow-runtime-action-state.d.ts +3 -3
- package/dist/src/harness/workflow-runtime-action-state.js +1 -1
- package/dist/src/harness/workflow-sandbox.js +1 -1
- package/dist/src/harness/workflow-subagent-limit.d.ts +4 -4
- package/dist/src/instrumentation/ai-sdk-telemetry.d.ts +1 -0
- package/dist/src/instrumentation/ai-sdk-telemetry.js +1 -1
- package/dist/src/instrumentation/runtime.d.ts +3 -0
- package/dist/src/instrumentation/runtime.js +1 -1
- package/dist/src/internal/application/build-output-environment.d.ts +2 -0
- package/dist/src/internal/application/build-output-environment.js +1 -0
- package/dist/src/internal/application/package.js +1 -1
- package/dist/src/internal/application/paths.d.ts +1 -2
- package/dist/src/internal/application/paths.js +1 -1
- package/dist/src/internal/authored-definition/schema-backed.d.ts +6 -2
- package/dist/src/internal/authored-definition/schema-backed.js +1 -1
- package/dist/src/internal/client-context.d.ts +2 -0
- package/dist/src/internal/client-context.js +1 -0
- package/dist/src/internal/nitro/dev-client-address.d.ts +2 -0
- package/dist/src/internal/nitro/dev-client-address.js +1 -1
- package/dist/src/internal/nitro/host/dev-authored-source-watcher.d.ts +2 -2
- package/dist/src/internal/nitro/host/dev-authored-source-watcher.js +1 -1
- package/dist/src/internal/nitro/host/start-development-server.js +2 -2
- package/dist/src/internal/nitro/routes/agent-info/build-agent-info-response.js +1 -1
- package/dist/src/internal/nitro/routes/channel-dispatch.js +1 -1
- package/dist/src/packages/eve-catalog/src/index.js +1 -1
- package/dist/src/protocol/routes.d.ts +2 -2
- package/dist/src/public/local-dev.d.ts +9 -0
- package/dist/src/public/local-dev.js +1 -0
- package/dist/src/public/next/vercel-output-config.js +1 -1
- package/dist/src/runtime/actions/keys.d.ts +3 -0
- package/dist/src/runtime/actions/keys.js +1 -1
- package/dist/src/runtime/agent/bootstrap.js +1 -1
- package/dist/src/runtime/loaders/bundled-artifacts.js +1 -1
- package/dist/src/runtime/local-dev-capability.d.ts +55 -0
- package/dist/src/runtime/local-dev-capability.js +1 -0
- package/dist/src/runtime/resolve-agent-graph.js +1 -1
- package/dist/src/runtime/resolve-agent.js +1 -1
- package/dist/src/runtime/resolve-tool.js +1 -1
- package/dist/src/runtime/sessions/runtime-session.d.ts +1 -0
- package/dist/src/runtime/sessions/runtime-session.js +1 -1
- package/dist/src/runtime/sessions/turn.d.ts +3 -0
- package/dist/src/runtime/subagents/registry.js +1 -1
- package/dist/src/runtime/tools/registry.d.ts +1 -0
- package/dist/src/runtime/tools/registry.js +1 -1
- package/dist/src/runtime/types.d.ts +2 -2
- package/dist/src/services/dev-client/client-options.d.ts +1 -0
- package/dist/src/services/dev-client/client-options.js +1 -1
- package/dist/src/services/dev-client/runtime-artifacts.d.ts +2 -0
- package/dist/src/services/dev-client/runtime-artifacts.js +1 -1
- package/dist/src/setup/scaffold/create/project.js +1 -1
- package/dist/src/shared/dispatch-action.d.ts +24 -0
- package/dist/src/shared/dispatch-action.js +1 -0
- package/dist/src/shared/workflow-sandbox.d.ts +1 -1
- package/dist/src/svelte/index.js +1 -1
- package/dist/src/svelte/use-eve-agent.js +1 -1
- package/dist/src/tasks/json.js +1 -1
- package/dist/src/tools/behavior.d.ts +55 -0
- package/dist/src/tools/behavior.js +1 -0
- package/dist/src/tools/durable-callbacks.d.ts +1 -0
- package/dist/src/tools/framework/agent.d.ts +2 -11
- package/dist/src/tools/framework/agent.js +1 -1
- package/dist/src/tools/framework/ask-question.d.ts +2 -14
- package/dist/src/tools/framework/ask-question.js +1 -1
- package/dist/src/tools/framework/task-cancel.d.ts +2 -7
- package/dist/src/tools/framework/task-cancel.js +1 -1
- package/dist/src/tools/framework/task-contract.d.ts +0 -2
- package/dist/src/tools/framework/task-contract.js +1 -1
- package/dist/src/tools/framework/task-update.d.ts +2 -7
- package/dist/src/tools/framework/task-update.js +1 -1
- package/dist/src/tools/native-definition.d.ts +6 -0
- package/dist/src/tools/native-definition.js +1 -0
- package/dist/src/tools/provided/load-skill.js +1 -1
- package/dist/src/tracing/agent-approval-instrumentation.js +1 -1
- package/dist/src/tracing/agent-channel-delivery-instrumentation.js +1 -1
- package/dist/src/tracing/agent-otel-provider.js +1 -1
- package/dist/src/tracing/agent-tool-instrumentation.js +1 -1
- package/dist/src/tracing/install-instrumentation-runtime.js +1 -1
- package/dist/src/tracing/otel-registration.d.ts +2 -0
- package/dist/src/tracing/otel-registration.js +1 -1
- package/dist/src/vue/index.js +1 -1
- package/dist/src/vue/use-eve-agent.js +1 -1
- package/docs/reference/typescript-api.md +24 -0
- package/package.json +6 -1
- package/dist/src/execution/tools/tasks.d.ts +0 -18
- package/dist/src/execution/tools/tasks.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createActionResultEvent}from"#protocol/message.js";import{parseJsonObject}from"#shared/json.js";import{settleAgentTurn}from"#harness/handles/transitions.js";import{clearProxyInputRequestsForChild}from"#harness/proxy-input-requests.js";import{
|
|
1
|
+
import{createActionResultEvent}from"#protocol/message.js";import{parseJsonObject}from"#shared/json.js";import{settleAgentTurn}from"#harness/handles/transitions.js";import{clearProxyInputRequestsForChild}from"#harness/proxy-input-requests.js";import{getPendingDispatchActionKey}from"#runtime/actions/keys.js";import{accumulateSessionUsage,getTurnUsageState,setTurnUsageState}from"#harness/turn-tag-state.js";import{findRunningAgentHandle,isResultBoundToRunningHandle}from"#harness/handles/query.js";import{resolveRuntimeActionResultsForKeys}from"#runtime/actions/results.js";const PENDING_RUNTIME_ACTION_BATCH_KEY=`eve.runtime.pendingActionBatch`;function readSubagentResultOutcome(e){return e.origin===`child`?e.outcome:void 0}function getPendingRuntimeActionBatch(e){let t=e?.[PENDING_RUNTIME_ACTION_BATCH_KEY];if(typeof t!=`object`||!t)return;let n=t;if(!(!Array.isArray(n.actions)||!Array.isArray(n.responseMessages)||typeof n.event!=`object`||n.event===null))return n}function hasPendingRuntimeActionBatch(e){return getPendingRuntimeActionBatch(e)!==void 0}function clearPendingRuntimeActionBatch(e){if(e.state?.[PENDING_RUNTIME_ACTION_BATCH_KEY]===void 0)return e;let t={...e.state};return delete t[PENDING_RUNTIME_ACTION_BATCH_KEY],{...e,state:Object.keys(t).length>0?t:void 0}}function setPendingRuntimeActionBatch(e){assertUniqueRuntimeActionCallIds(e.actions);let t={...e.session.state};return t[PENDING_RUNTIME_ACTION_BATCH_KEY]={actions:[...e.actions],event:e.event,responseMessages:[...e.responseMessages]},{...e.session,state:t}}function assertUniqueRuntimeActionCallIds(e){let t=new Set;for(let n of e){if(t.has(n.callId))throw Error(`Runtime action batch contains duplicate callId "${n.callId}".`);t.add(n.callId)}}function resolveReadyRuntimeActionResults(e){let t=getPendingRuntimeActionBatch(e.session.state);if(t!==void 0)return resolveRuntimeActionResultsForBatch({batch:t,results:e.results,state:e.session.state})}function resolveRuntimeActionResultsForBatch(e){return resolveRuntimeActionResultsForKeys({pendingKeys:e.batch.actions.map(e=>getPendingDispatchActionKey(e)),results:e.results.filter(t=>isResultBoundToRunningHandle(e.state,t))})}async function resolvePendingRuntimeActions(t){let i=getPendingRuntimeActionBatch(t.session.state);if(i===void 0)return{messages:[...t.session.history],outcome:`continue`,session:t.session};let o=resolveReadyRuntimeActionResults({results:t.stepInput?.runtimeActionResults??[],session:t.session});if(o===void 0)return{messages:[...t.session.history],outcome:`unresolved`,session:t.session};if(t.emit!==void 0)for(let n of o){if(n.kind===`subagent-result`&&n.isError!==!0){let e=readBackgroundTaskReceipt(n),r={callId:n.callId,output:typeof n.output==`string`?n.output:JSON.stringify(n.output),subagentName:n.subagentName};await t.emit({data:e===void 0?r:{...r,backgroundTask:e},type:`subagent.completed`})}await t.emit(createActionResultEvent({result:n,sequence:i.event.sequence,stepIndex:i.event.stepIndex,turnId:i.event.turnId}))}let s=t.session;for(let e of o){if(e.kind!==`subagent-result`||e.origin!==`child`||readBackgroundTaskReceipt(e)!==void 0)continue;let t=findRunningAgentHandle(s.state,{callId:e.callId});if(t===void 0)continue;let i=readSubagentResultOutcome(e);if(i===void 0)continue;i.kind===`terminal`&&`continuationToken`in t.address&&(s=clearProxyInputRequestsForChild(s,t.address.continuationToken));let a=settleAgentTurn(s,{operationId:t.operation.id,outcome:i});a.kind===`settled`&&(s=a.session)}let c={...s.state};delete c[PENDING_RUNTIME_ACTION_BATCH_KEY],s={...s,state:Object.keys(c).length>0?c:void 0};for(let e of o){if(e.kind!==`subagent-result`)continue;let t=readSubagentResultOutcome(e);t!==void 0&&(s=setTurnUsageState(s,accumulateSessionUsage({previous:getTurnUsageState(s.state),usage:t.usageDelta})))}let l=o.map(e=>{switch(e.kind){case`load-skill-result`:return{output:toToolResultOutput(e),toolCallId:e.callId,toolName:`load_skill`,type:`tool-result`};case`subagent-result`:return{output:toToolResultOutput(e),toolCallId:e.callId,toolName:e.subagentName,type:`tool-result`};case`tool-result`:return{output:toToolResultOutput(e),toolCallId:e.callId,toolName:e.toolName,type:`tool-result`}}throw Error(`Unsupported runtime action result kind "${String(e)}".`)}),u=[...s.history,...i.responseMessages];return l.length>0&&u.push({content:l,role:`tool`}),{messages:u,outcome:`resolved`,session:s}}function readBackgroundTaskReceipt(e){return`backgroundTask`in e?e.backgroundTask:void 0}function createRuntimeActionRequestFromToolCall(e){let t=e.tools.get(e.toolCall.toolName),n=resolveToolCallInputObject(e.toolCall.input,{callId:e.toolCall.toolCallId,toolName:e.toolCall.toolName});if(t?.behavior?.presentation===`load-skill`)return{callId:e.toolCall.toolCallId,input:n,kind:`load-skill`};let r=t?.execution===`background`||t?.behavior?.handling?.kind!==`dispatch`?void 0:t.behavior.handling.target;return t!==void 0&&(r?.kind===`self-agent-call`||r?.kind===`subagent-call`)?{callId:e.toolCall.toolCallId,description:t.description,input:n,kind:`subagent-call`,name:t.name,nodeId:r.nodeId,subagentName:r.subagentName}:t!==void 0&&r?.kind===`remote-agent-call`?{callId:e.toolCall.toolCallId,description:t.description,input:n,kind:`remote-agent-call`,name:t.name,nodeId:r.nodeId,remoteAgentName:r.remoteAgentName}:{callId:e.toolCall.toolCallId,input:n,kind:`tool-call`,toolName:e.toolCall.toolName}}function createPendingDispatchActionFromToolCall(e){let t=e.tools.get(e.toolCall.toolName);if(t===void 0)throw Error(`Unknown tool "${e.toolCall.toolName}" in dispatch projection.`);let n=t.behavior?.handling;if(n?.kind!==`dispatch`||t.execution===`background`)throw Error(`Tool "${e.toolCall.toolName}" is not a durable dispatch tool.`);return{callId:e.toolCall.toolCallId,description:t.description,input:resolveToolCallInputObject(e.toolCall.input,{callId:e.toolCall.toolCallId,toolName:e.toolCall.toolName}),target:n.target,toolName:t.name}}function resolveToolCallInputObject(e,n){if(e==null||typeof e==`string`&&e.trim()===``)return{};try{return parseJsonObject(typeof e==`string`?parseJsonStringInput(e):e)}catch(e){let t=e instanceof Error?e.message:String(e);throw TypeError(`Failed to parse tool-call arguments for "${n.toolName}" (${n.callId}): ${t}`,{cause:e})}}function parseJsonStringInput(e){return JSON.parse(e)}function toToolResultOutput(e){return typeof e.output==`string`?e.isError===!0?{type:`error-text`,value:e.output}:{type:`text`,value:e.output}:e.isError===!0?{type:`error-json`,value:toMutableJsonValue(e.output)}:{type:`json`,value:toMutableJsonValue(e.output)}}function toMutableJsonValue(e){if(e===null||typeof e==`string`||typeof e==`number`||typeof e==`boolean`)return e;if(Array.isArray(e))return e.map(e=>toMutableJsonValue(e));let t={};for(let[n,r]of Object.entries(e))t[n]=toMutableJsonValue(r);return t}export{assertUniqueRuntimeActionCallIds,clearPendingRuntimeActionBatch,createPendingDispatchActionFromToolCall,createRuntimeActionRequestFromToolCall,getPendingRuntimeActionBatch,hasPendingRuntimeActionBatch,resolvePendingRuntimeActions,resolveToolCallInputObject,setPendingRuntimeActionBatch};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ModelMessage, UserContent } from "ai";
|
|
2
|
-
import type { StepInput } from "#harness/types.js";
|
|
2
|
+
import type { HarnessToolMap, StepInput } from "#harness/types.js";
|
|
3
3
|
type StaleResponseConversion = {
|
|
4
4
|
readonly kind: "unchanged";
|
|
5
5
|
readonly stepInput?: StepInput;
|
|
@@ -40,5 +40,6 @@ export declare function convertStaleResponsesToUserMessage(input: {
|
|
|
40
40
|
readonly history: readonly ModelMessage[];
|
|
41
41
|
readonly pendingRequestIds: ReadonlySet<string>;
|
|
42
42
|
readonly stepInput?: StepInput;
|
|
43
|
+
readonly tools: HarnessToolMap;
|
|
43
44
|
}): StaleResponseConversion;
|
|
44
45
|
export {};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{appendUserContent,normalizeUserContent}from"#harness/messages.js";import{isSessionLimitContinuationRequestId}from"#harness/session-limit-continuation.js";import{isApprovalRequest}from"#harness/input-request-class.js";import{extractHistoricalInputRequests}from"#harness/input-extraction.js";function dropStaleSessionLimitContinuationResponses(e){if(e.stepInput===void 0)return;let t=e.stepInput.inputResponses??[],r=e.stepInput.attributedInputResponses??[],keep=t=>e.pendingRequestIds.has(t)||!isSessionLimitContinuationRequestId(t),i=t.filter(e=>keep(e.requestId)),a=r.filter(({response:e})=>keep(e.requestId));if(i.length===t.length&&a.length===r.length)return e.stepInput;let{attributedInputResponses:o,inputResponses:s,...c}=e.stepInput,l=c;return i.length>0&&(l.inputResponses=i),a.length>0&&(l.attributedInputResponses=a),l}function convertStaleResponsesToUserMessage(e){if(e.stepInput===void 0)return{kind:`unchanged`};let t=e.stepInput.inputResponses??[],n=e.stepInput.attributedInputResponses??[];if(t.length===0&&n.length===0)return{kind:`unchanged`,stepInput:e.stepInput};let r=[],a=[],o=[];for(let n of t)(e.pendingRequestIds.has(n.requestId)?r:o).push(n);for(let t of n)e.pendingRequestIds.has(t.response.requestId)?a.push(t):o.push(t.response);if(o.length===0)return{kind:`unchanged`,stepInput:e.stepInput};let s=extractHistoricalInputRequests({history:e.history,requestIds:new Set(o.map(e=>e.requestId))}),c=appendOptionalUserContent(e.stepInput.message,formatModelMessage(o,s)),l=appendOptionalUserContent(e.stepInput.message,formatDisplayMessage(o,s)),{attributedInputResponses:u,inputResponses:d,...f}=e.stepInput,p={...f,message:c};return r.length>0&&(p.inputResponses=r),a.length>0&&(p.attributedInputResponses=a),{displayMessage:l,kind:`converted`,stepInput:p}}function formatModelMessage(e,t){let n=e.map(e=>{let n=t.get(e.requestId),i=n?.options?.find(t=>t.id===e.optionId),a={};if(e.optionId!==void 0&&(a.optionId=e.optionId),i!==void 0){let e={id:i.id,label:i.label};i.description!==void 0&&(e.description=i.description),a.selectedOption=e}e.text!==void 0&&(a.text=e.text);let o={requestId:e.requestId,response:a};return n!==void 0&&(o.prompt=n.prompt,o.requestType=isApprovalRequest(n)?`approval`:`question`),o});return[`The user submitted the following response to an earlier interactive prompt.`,`Treat it as new input at the current point in the conversation and decide whether it is still relevant.${e.some(e=>{let n=t.get(e.requestId);return n===void 0||isApprovalRequest(n)})?` This does not authorize an earlier action; request approval again if that action is still needed.`:``}`,JSON.stringify(n,null,2)].join(`
|
|
1
|
+
import{appendUserContent,normalizeUserContent}from"#harness/messages.js";import{isSessionLimitContinuationRequestId}from"#harness/session-limit-continuation.js";import{isApprovalRequest}from"#harness/input-request-class.js";import{extractHistoricalInputRequests}from"#harness/input-extraction.js";function dropStaleSessionLimitContinuationResponses(e){if(e.stepInput===void 0)return;let t=e.stepInput.inputResponses??[],r=e.stepInput.attributedInputResponses??[],keep=t=>e.pendingRequestIds.has(t)||!isSessionLimitContinuationRequestId(t),i=t.filter(e=>keep(e.requestId)),a=r.filter(({response:e})=>keep(e.requestId));if(i.length===t.length&&a.length===r.length)return e.stepInput;let{attributedInputResponses:o,inputResponses:s,...c}=e.stepInput,l=c;return i.length>0&&(l.inputResponses=i),a.length>0&&(l.attributedInputResponses=a),l}function convertStaleResponsesToUserMessage(e){if(e.stepInput===void 0)return{kind:`unchanged`};let t=e.stepInput.inputResponses??[],n=e.stepInput.attributedInputResponses??[];if(t.length===0&&n.length===0)return{kind:`unchanged`,stepInput:e.stepInput};let r=[],a=[],o=[];for(let n of t)(e.pendingRequestIds.has(n.requestId)?r:o).push(n);for(let t of n)e.pendingRequestIds.has(t.response.requestId)?a.push(t):o.push(t.response);if(o.length===0)return{kind:`unchanged`,stepInput:e.stepInput};let s=extractHistoricalInputRequests({history:e.history,requestIds:new Set(o.map(e=>e.requestId)),tools:e.tools}),c=appendOptionalUserContent(e.stepInput.message,formatModelMessage(o,s)),l=appendOptionalUserContent(e.stepInput.message,formatDisplayMessage(o,s)),{attributedInputResponses:u,inputResponses:d,...f}=e.stepInput,p={...f,message:c};return r.length>0&&(p.inputResponses=r),a.length>0&&(p.attributedInputResponses=a),{displayMessage:l,kind:`converted`,stepInput:p}}function formatModelMessage(e,t){let n=e.map(e=>{let n=t.get(e.requestId),i=n?.options?.find(t=>t.id===e.optionId),a={};if(e.optionId!==void 0&&(a.optionId=e.optionId),i!==void 0){let e={id:i.id,label:i.label};i.description!==void 0&&(e.description=i.description),a.selectedOption=e}e.text!==void 0&&(a.text=e.text);let o={requestId:e.requestId,response:a};return n!==void 0&&(o.prompt=n.prompt,o.requestType=isApprovalRequest(n)?`approval`:`question`),o});return[`The user submitted the following response to an earlier interactive prompt.`,`Treat it as new input at the current point in the conversation and decide whether it is still relevant.${e.some(e=>{let n=t.get(e.requestId);return n===void 0||isApprovalRequest(n)})?` This does not authorize an earlier action; request approval again if that action is still needed.`:``}`,JSON.stringify(n,null,2)].join(`
|
|
2
2
|
`)}function formatDisplayMessage(e,t){return e.map(e=>e.text!==void 0&&e.text.length>0?e.text:t.get(e.requestId)?.options?.find(t=>t.id===e.optionId)?.label??e.optionId??`Response to an earlier interactive prompt`).join(`
|
|
3
3
|
`)}function appendOptionalUserContent(n,r){let i=normalizeUserContent(n);return i===void 0?r:appendUserContent({appended:r,existing:i})}export{convertStaleResponsesToUserMessage,dropStaleSessionLimitContinuationResponses};
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import type { HarnessSession } from "#harness/types.js";
|
|
2
|
-
import type {
|
|
3
|
-
export type DelegatedRuntimeActionRequest = RuntimeRemoteAgentCallActionRequest | RuntimeSubagentCallActionRequest;
|
|
2
|
+
import type { PendingAgentDispatchAction, PendingDispatchAction } from "#shared/dispatch-action.js";
|
|
4
3
|
export type ResolvedSubagentDepth = {
|
|
5
4
|
readonly currentDepth: number;
|
|
6
5
|
readonly nextChildDepth: number;
|
|
7
6
|
};
|
|
8
7
|
export declare function resolveSubagentDepth(session: Pick<HarnessSession, "subagentDepth">): ResolvedSubagentDepth;
|
|
9
8
|
export declare function readSerializedSubagentDepth(serializedContext: Readonly<Record<string, unknown>>): number | undefined;
|
|
10
|
-
export declare function isSubagentDelegationAction(action:
|
|
11
|
-
export declare function getSubagentDelegationName(action:
|
|
9
|
+
export declare function isSubagentDelegationAction(action: PendingDispatchAction): action is PendingAgentDispatchAction;
|
|
10
|
+
export declare function getSubagentDelegationName(action: PendingAgentDispatchAction): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{SubagentDepthKey}from"#context/keys.js";function resolveSubagentDepth(e){let t=parseSubagentDepth(e.subagentDepth);return{currentDepth:t,nextChildDepth:t+1}}function readSerializedSubagentDepth(t){let n=parseSubagentDepth(t[SubagentDepthKey.name]);return n===0?void 0:n}function isSubagentDelegationAction(e){return e.kind===`subagent-call`||e.kind===`remote-agent-call`}function getSubagentDelegationName(e){switch(e.kind){case`remote-agent-call`:return e.remoteAgentName;case`subagent-call`:return e.subagentName;default:return e}}function parseSubagentDepth(e){return typeof e==`number`&&Number.isInteger(e)&&e>0?e:0}export{getSubagentDelegationName,isSubagentDelegationAction,readSerializedSubagentDepth,resolveSubagentDepth};
|
|
1
|
+
import{SubagentDepthKey}from"#context/keys.js";function resolveSubagentDepth(e){let t=parseSubagentDepth(e.subagentDepth);return{currentDepth:t,nextChildDepth:t+1}}function readSerializedSubagentDepth(t){let n=parseSubagentDepth(t[SubagentDepthKey.name]);return n===0?void 0:n}function isSubagentDelegationAction(e){return e.target.kind===`self-agent-call`||e.target.kind===`subagent-call`||e.target.kind===`remote-agent-call`}function getSubagentDelegationName(e){switch(e.target.kind){case`remote-agent-call`:return e.target.remoteAgentName;case`self-agent-call`:case`subagent-call`:return e.target.subagentName;default:return e.target}}function parseSubagentDepth(e){return typeof e==`number`&&Number.isInteger(e)&&e>0?e:0}export{getSubagentDelegationName,isSubagentDelegationAction,readSerializedSubagentDepth,resolveSubagentDepth};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{createErrorId,createLogger,formatError,logError}from"#internal/logging.js";import{contextStorage}from"#context/container.js";import{AuthKey,ParentSessionKey,ScheduleIdKey,SessionCallbackKey,TurnTaskDeliveryKey,TurnTaskStateKey}from"#context/keys.js";import{resolveInstalledPackageInfo}from"#internal/application/package.js";import{toErrorMessage}from"#shared/errors.js";import{createActionResultEvent,createApprovalCandidateEvent,createApprovalSettledEvent,createAuthorizationCompletedEvent,createAuthorizationRequiredEvent,createCompactionCompletedEvent,createCompactionRequestedEvent,createContextClearedEvent,createInputRequestedEvent,createInputResolvedEvent,createMessageCompletedEvent,createResultCompletedEvent,createSessionWaitingEvent,createStepStartedEvent}from"#protocol/message.js";import{summarizeKnownError}from"#harness/semantic-errors/index.js";import{resolveProviderHeaders}from"#internal/gateway.js";import{formatLanguageModelGatewayId}from"#internal/runtime-model.js";import{ChannelKey}from"#runtime/sessions/runtime-context-keys.js";import{buildDynamicTools,buildResponseAuthorizationTools}from"#context/build-dynamic-tools.js";import{drainMemoryCommit,prepareMemoryCompaction,prepareMemoryPreamble}from"#context/memory-lifecycle.js";import{canonicalizeMemoryRecords,clearMemorySessionState,shouldCanonicalizeMemory}from"#shared/memory-state.js";import{advanceStep,emitFailedStep,emitRecoverableFailedTurn,emitStepStarted,emitStreamContent,emitTurnEpilogue,emitTurnPreamble,getHarnessEmissionState,setHarnessEmissionState}from"#harness/emission.js";import{ToolLoopAgent,isStepCount}from"ai";import{resolveAgentsAnnouncement}from"#harness/handles/prompt.js";import{renderPendingApprovalsInstruction,renderPendingApprovalsSnippet}from"#harness/hitl/approval-prompt.js";import{getAgentHandleStore}from"#harness/handles/store.js";import{readTaskIdFromInboxToken}from"#tasks/task-inbox-token.js";import{buildDynamicSubagentTools}from"#context/dynamic-subagent-lifecycle.js";import{hydrateSandboxAttachments,stageAttachmentsToSandbox}from"#harness/attachment-staging.js";import{normalizeModelMessages,normalizeUserContent,resolveAssistantStepText}from"#harness/messages.js";import{
|
|
1
|
+
import{readClientContext}from"#internal/client-context.js";import{createErrorId,createLogger,formatError,logError}from"#internal/logging.js";import{contextStorage}from"#context/container.js";import{AuthKey,ParentSessionKey,ScheduleIdKey,SessionCallbackKey,TurnTaskDeliveryKey,TurnTaskStateKey}from"#context/keys.js";import{resolveInstalledPackageInfo}from"#internal/application/package.js";import{toErrorMessage}from"#shared/errors.js";import{createActionResultEvent,createApprovalCandidateEvent,createApprovalSettledEvent,createAuthorizationCompletedEvent,createAuthorizationRequiredEvent,createCompactionCompletedEvent,createCompactionRequestedEvent,createContextClearedEvent,createInputRequestedEvent,createInputResolvedEvent,createMessageCompletedEvent,createResultCompletedEvent,createSessionWaitingEvent,createStepStartedEvent}from"#protocol/message.js";import{summarizeKnownError}from"#harness/semantic-errors/index.js";import{resolveProviderHeaders}from"#internal/gateway.js";import{formatLanguageModelGatewayId}from"#internal/runtime-model.js";import{ChannelKey}from"#runtime/sessions/runtime-context-keys.js";import{buildDynamicTools,buildResponseAuthorizationTools}from"#context/build-dynamic-tools.js";import{drainMemoryCommit,prepareMemoryCompaction,prepareMemoryPreamble}from"#context/memory-lifecycle.js";import{canonicalizeMemoryRecords,clearMemorySessionState,shouldCanonicalizeMemory}from"#shared/memory-state.js";import{advanceStep,emitFailedStep,emitRecoverableFailedTurn,emitStepStarted,emitStreamContent,emitTurnEpilogue,emitTurnPreamble,getHarnessEmissionState,setHarnessEmissionState}from"#harness/emission.js";import{ToolLoopAgent,isStepCount}from"ai";import{resolveAgentsAnnouncement}from"#harness/handles/prompt.js";import{renderPendingApprovalsInstruction,renderPendingApprovalsSnippet}from"#harness/hitl/approval-prompt.js";import{getAgentHandleStore}from"#harness/handles/store.js";import{readTaskIdFromInboxToken}from"#tasks/task-inbox-token.js";import{buildDynamicSubagentTools}from"#context/dynamic-subagent-lifecycle.js";import{hydrateSandboxAttachments,stageAttachmentsToSandbox}from"#harness/attachment-staging.js";import{normalizeModelMessages,normalizeUserContent,resolveAssistantStepText}from"#harness/messages.js";import{createPendingDispatchActionFromToolCall,resolvePendingRuntimeActions,setPendingRuntimeActionBatch}from"#harness/runtime-actions.js";import{clearPendingWorkflowInterrupt,getPendingWorkflowInterrupt,setPendingWorkflowInterrupt}from"#harness/workflow-interrupt-state.js";import{getWorkflowRuntimeActionInterrupts,isWorkflowRuntimeActionInterrupt}from"#harness/workflow-runtime-action-state.js";import{activeTurnId}from"#harness/active-turn-id.js";import{createHistoryViewPreparer}from"#shared/history-view.js";import{getActiveDynamicModelSelection,isDynamicModelSelectionError}from"#context/dynamic-model-lifecycle.js";import{getSupersededAuthorizationChallenges,setPendingAuthorization}from"#harness/authorization.js";import{appendPendingInputBatch,consumeDeferredStepInput,getApprovedTools,getPendingInputRequestIds,hasDeferredStepInput,hasPendingApprovalBatch,hasStepInput,resolvePendingInput}from"#harness/input-requests.js";import{accumulateTurnUsage,getTurnUsageState,setTurnUsageState}from"#harness/turn-tag-state.js";import{throwIfTurnAborted}from"#harness/turn-cancellation.js";import{createBackgroundToolCallBatch}from"#harness/background-tools.js";import{buildDynamicInstructionMessages,drainDynamicInstructionUserMessages,prepareDynamicInstructionPreamble}from"#context/dynamic-instruction-lifecycle.js";import{PendingSkillAnnouncementKey}from"#context/dynamic-skill-lifecycle.js";import{getWorkflowContinuationSecurity,readWorkflowContinuationSecurity}from"#harness/workflow-continuation-security.js";import{buildWorkflowHostTools,resolveWorkflowSandboxBridgeRequestLimit}from"#harness/workflow-sandbox.js";import{getApprovalAuditState,markApprovalCandidateHistoryEventEmitted,markApprovalCandidatePendingEventEmitted,markApprovalSettlementEventEmitted}from"#harness/approval-candidates.js";import{getPendingInputBatches,queueDeferredStepInput}from"#harness/pending-input-batches.js";import{EMPTY_DELIVERY_SENTINEL,hasEmptyDeliverySentinel}from"#shared/empty-delivery.js";import{createToolResultMessagePartFromToolError}from"#harness/action-result-helpers.js";import{getInvalidToolCallInputError,isInvalidToolCall}from"#harness/tool-call-input-errors.js";import{EmptyModelResponseError,classifyModelCallError,extractModelCallErrorDetails,extractUnsupportedProviderToolTypes,extractUpstreamRejectionMessage,isNoOutputGeneratedError}from"#harness/model-call-error.js";import{resolveInlineAuthorizationInterrupt}from"#harness/inline-tool-authorization.js";import{extractQuestionInputRequests,extractToolApprovalInputRequests}from"#harness/input-extraction.js";import{applyLastToolCacheBreakpoint,applySystemCacheBreakpoint,detectPromptCachePath,getAnthropicCacheMarker}from"#harness/prompt-cache.js";import{mergeProviderSafetyIdentifier}from"#harness/provider-safety.js";import{requireSessionModelReference}from"#harness/types.js";import{emitWorkflowActionResults,emitWorkflowActionsRequested}from"#harness/workflow-lifecycle.js";import{compactMessages,getInputTokenCount,resolveCompactionModel,shouldCompact}from"#harness/compaction.js";import{createCurrentMessages}from"#harness/current-messages.js";import{applySessionLimitContinuation,enforceSessionTokenLimit}from"#harness/session-limit-enforcement.js";import{setEveAttributes}from"#runtime/attributes/emit.js";import{coordinateApprovalDelivery,shouldPrepareApprovalPolicyTools,shouldPrepareApprovalReplayTools}from"#harness/approval-delivery-coordinator.js";import{convertStaleResponsesToUserMessage,dropStaleSessionLimitContinuationResponses}from"#harness/stale-input-responses.js";import{normalizeProviderToolHistory}from"#harness/provider-tool-history.js";import{resolveDeliveryPolicy}from"#tasks/delivery-policy.js";import{extractWorkflowStreamWriteErrorDetails}from"#harness/workflow-stream-error.js";import{getAdvertisedTools}from"#harness/advertised-tools.js";import{resolveFrameworkToolFromUpstreamType}from"#harness/provider-tools.js";import{buildStepHooks,emitStepActions}from"#harness/step-hooks.js";import{buildToolApproval,buildToolSetFromDefinitions,buildToolSetWithProviderTools}from"#harness/tools.js";import{continueWorkflowSandboxInterrupt,getWorkflowSandboxInterrupt,unwrapWorkflowSandboxResult}from"#shared/workflow-sandbox.js";import{FINAL_OUTPUT_TOOL_NAME,buildFinalOutputTool}from"#harness/final-output.js";const environment=process.env.NODE_ENV??`unknown`,eveVersion=resolveInstalledPackageInfo().version,log=createLogger(`harness.tool-loop`);function logToolExecutionError(e){e.toolOutput.type===`tool-error`&&logError(log,`tool execution failed`,e.toolOutput.error,{toolName:e.toolCall.toolName,toolCallId:e.toolCall.toolCallId})}function mergeSystemInstructions(e){if(e.length===0)return;if(e.length===1)return{...e[0]};let t;for(let n of e)n.providerOptions!==void 0&&(t={...t,...n.providerOptions});let n={role:`system`,content:e.map(e=>e.content).join(`
|
|
2
2
|
|
|
3
|
-
`)};return t!==void 0&&(n.providerOptions=t),n}function buildGatewayAttributionHeaders(e,t){let n=resolveProviderHeaders(e);if(n===void 0)return;let r=t?.agentName??t?.agentId,i=process.env.VERCEL_PROJECT_PRODUCTION_URL||process.env.VERCEL_URL,a=i?`https://${i}`:void 0,o={...n};return r&&(o[`x-title`]=r),a&&(o[`http-referer`]=a),o}async function resolveActiveRuntimeModel(e){if(e.ctx===void 0){let t=e.session.agent.modelReference;if(t===void 0)throw Error(`Dynamic model selection is unavailable outside an eve runtime context.`);return{model:await e.config.resolveModel(t),session:e.session}}let t=getActiveDynamicModelSelection(e.ctx);if(t===null){let t=e.session.agent.modelReference;if(e.session.agent.dynamicModel===!0||t===void 0)throw Error(`Dynamic model selection is required before model-dependent work begins. Add a matching resolver handler that returns a concrete model.`);return{model:await e.config.resolveModel(t),session:e.session}}return{model:t.model===void 0?await e.config.resolveModel(t.reference):t.model,session:updateSessionModelReference(e.session,t.reference)}}function updateSessionModelReference(e,t){return{...e,agent:{...e.agent,modelReference:t},compaction:updateCompactionThresholdForModelReference({compaction:e.compaction,modelReference:t})}}function updateCompactionThresholdForModelReference(e){return e.modelReference.contextWindowTokens===void 0?e.compaction:{...e.compaction,threshold:Math.max(1,Math.floor(e.modelReference.contextWindowTokens*(e.compaction.thresholdPercent??.9)))}}function buildHarnessToolsWithDynamicSubagents(e,t){let n=new Map(e);if(t===void 0)return n;for(let e of buildDynamicSubagentTools(t)){if(n.has(e.name))throw Error(`Dynamic subagent "${e.name}" collides with another runtime-visible tool name.`);n.set(e.name,e)}return n}function createToolLoopHarness(t){let n=t.handleEvent;async function runStep(e,n){return t.instrumentation?.runStep({environment,eveVersion,hasInput:hasStepInput(n),session:e},e=>executeStepBody(e.session,n,e))??executeStepBody(e,n)}async function executeStepBody(d,g,v){let y=d,ee=createHistoryViewPreparer({previous:t.historyView,projector:t.historyProjector});ee(y.history,y.state);let projectHistory=(e,t)=>ee(e,t).messages,S=getHarnessEmissionState(y.state),w=contextStorage.getStore(),T=w?.get(ParentSessionKey),E=w?.get(ChannelKey),D=w?.get(SessionCallbackKey),ue=T!==void 0||D!==void 0,O=(D?.taskId!==void 0||readTaskIdFromInboxToken(String(E?.state?.parentContinuationToken??``))!==void 0)&&t.tools.has(TASK_UPDATE_TOOL_NAME),de,k=v?.createHandleEvent({getAttemptScope:()=>de,handleEvent:n,turnId:activeTurnId(S)})??n,failModelSelection=async(n,r)=>{if(throwIfTurnAborted(t.abortSignal),v?.recordError(n),!k)throw n;let i=createErrorId(),a=toErrorMessage(n);return log.error(`model selection failed terminally`,{error:n,errorId:i,sessionId:y.sessionId,turnId:r.turnId}),await emitFailedStep(k,r,{code:`MODEL_SELECTION_FAILED`,details:{errorId:i},message:a,sessionId:y.sessionId}),{next:t.mode===`task`||ue?{done:!0,isError:!0,output:a}:{done:!0,output:``},session:y}},preparePreambleTrace=async()=>await v?.preparePreamble({sequence:S.sequence,sessionStarted:S.sessionStarted,traceContext:v?.traceContext,turnId:`turn_${S.sequence}`});if(t.clearOnly===!0)return y={...y,compaction:{recentWindowSize:y.compaction.recentWindowSize,threshold:y.compaction.threshold,thresholdPercent:y.compaction.thresholdPercent},history:[],state:clearMemorySessionState(y.state)},await k?.(createContextClearedEvent({sequence:S.sequence,sessionId:y.sessionId,turnId:activeTurnId(S)})),await k?.(createSessionWaitingEvent()),{next:null,session:y};if(t.compactOnly===!0){if(y.history.length>0)try{let e=contextStorage.getStore(),n=await resolveActiveRuntimeModel({config:t,ctx:e,session:y});y=n.session;let r=await maybeCompact({abortSignal:t.abortSignal,auth:e?.get(AuthKey)??null,emit:k,emissionState:{...S,turnId:activeTurnId(S)},force:!0,historyProjector:t.historyProjector,messages:[...y.history],model:n.model,onCompaction:t.onCompaction,resolveModel:t.resolveModel,runtimeIdentity:t.runtimeIdentity,session:y,telemetry:v?.telemetry()});y={...r.session,compaction:{recentWindowSize:r.session.compaction.recentWindowSize,threshold:r.session.compaction.threshold,thresholdPercent:r.session.compaction.thresholdPercent},history:r.messages}}catch(e){logError(log,`manual session compaction failed`,e,{sessionId:y.sessionId})}return await k?.(createSessionWaitingEvent()),{next:null,session:y}}let A=consumeDeferredStepInput({input:g,preferCurrentInput:t.mode!==`conversation`&&g!==void 0&&hasPendingApprovalBatch(y),session:y});y=A.session;let j=await resolvePendingRuntimeActions({emit:k,session:y,stepInput:A.input});if(j.outcome===`unresolved`)return{next:null,session:j.session};y=j.session;let fe=getPendingInputRequestIds(y.state),M=convertStaleResponsesToUserMessage({history:j.messages,pendingRequestIds:fe,stepInput:dropStaleSessionLimitContinuationResponses({pendingRequestIds:fe,stepInput:A.input})}),N=M.stepInput,pe=M.kind===`converted`?{...N,message:M.displayMessage}:N,P=contextStorage.getStore();P!==void 0&&t.resolveStepDynamicTools!==void 0&&shouldPrepareApprovalPolicyTools({session:y,stepInput:N})&&await t.resolveStepDynamicTools({ctx:P,event:createStepStartedEvent({modelId:y.agent.modelReference?.id??`dynamic`,sequence:S.sequence,stepIndex:S.stepIndex,turnId:S.turnId}),messages:projectHistory(j.messages,y.state)});let F=await coordinateApprovalDelivery({session:y,stepInput:N,tools:buildResponseAuthorizationTools({authoredTools:t.tools,context:P})});if(y=F.session,k){for(let e of F.feedback)await k(createMessageCompletedEvent({message:e,sequence:S.sequence,stepIndex:S.stepIndex,turnId:S.turnId}));let e=getApprovalAuditState(y.state);for(let t of e.activeCandidates.filter(e=>e.pendingEventEmitted!==!0))await k(createApprovalCandidateEvent({candidateId:t.candidateId,outcome:`pending`,requestId:t.requestId,responderPrincipalId:t.responder.principalId,sequence:S.sequence,stepIndex:S.stepIndex,turnId:S.turnId})),y={...y,state:markApprovalCandidatePendingEventEmitted({candidateId:t.candidateId,state:y.state})};for(let t of e.candidateHistory.filter(e=>e.eventEmitted!==!0&&e.status!==`allowed`))await k(createApprovalCandidateEvent({candidateId:t.candidateId,outcome:t.status,requestId:t.requestId,responderPrincipalId:t.responder.principalId,reason:t.reason,sequence:S.sequence,stepIndex:S.stepIndex,turnId:S.turnId})),y={...y,state:markApprovalCandidateHistoryEventEmitted({candidateId:t.candidateId,state:y.state})};for(let t of e.settlements.filter(e=>e.eventEmitted!==!0))await k(createApprovalSettledEvent({outcome:t.outcome===`allowed`?`approved`:`cancelled`,requestId:t.requestId,responderPrincipalId:t.actor.principalId,sequence:S.sequence,stepIndex:S.stepIndex,turnId:S.turnId})),y={...y,state:markApprovalSettlementEventEmitted({requestId:t.requestId,state:y.state})}}if(F.kind===`park`)return{next:null,session:y};if(F.kind===`continue-coordination`)return{next:runStep,session:F.stepInput===void 0?y:queueDeferredStepInput(y,F.stepInput)};if(F.challenges.length>0){if(k)for(let e of F.challenges)await k(createAuthorizationRequiredEvent({authorization:e.challenge,candidateId:e.candidateId,description:e.challenge.instructions??`Authorization required for ${e.name}`,name:e.name,sequence:S.sequence,stepIndex:S.stepIndex,turnId:S.turnId,webhookUrl:e.hookUrl}));let e=F.stepInput===void 0?y:queueDeferredStepInput(y,F.stepInput);return{next:null,session:{...e,state:setPendingAuthorization(e.state,{challenges:F.challenges})}}}let I=resolvePendingInput({deferMessagesWhileApprovalsPending:t.mode!==`conversation`,history:j.messages,resolveApprovalKey:resolveApprovalKeyFromTools(t.tools),session:y,stepInput:F.stepInput});if(I.outcome===`unresolved`){let e=j.outcome===`resolved`?{...I.session,history:[...j.messages]}:I.session;if(k&&t.mode===`conversation`&&I.deferredMessage===!0&&hasStepInput(g)){w!==void 0&&prepareDynamicInstructionPreamble(w,projectHistory(e.history,e.state));let n=[];try{let e=await preparePreambleTrace();S=await emitTurnPreamble(k,pe??{},S,t.runtimeIdentity,e)}catch(t){if(n=w===void 0?[]:drainDynamicInstructionUserMessages(w),e={...e,history:[...e.history,...n]},y=e,!isDynamicModelSelectionError(t))throw t;return failModelSelection(t,{sessionStarted:!0,sequence:S.sequence,stepIndex:0,turnId:`turn_${S.sequence}`})}return n=w===void 0?[]:drainDynamicInstructionUserMessages(w),e={...e,history:[...e.history,...n]},S=await emitTurnEpilogue(k,S,t.mode),{next:null,session:setHarnessEmissionState(e,S)}}return j.outcome===`resolved`?(k&&t.mode===`conversation`&&(S=await emitTurnEpilogue(k,S,t.mode),e=setHarnessEmissionState(e,S)),{next:null,session:e}):{next:null,session:I.session}}if(I.resolvedInputs!==void 0)for(let e of I.resolvedInputs)await v?.publishInputResolutions({batch:e,sessionId:y.sessionId}),k&&await k(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(k&&I.rejectedActions)for(let e of I.rejectedActions)for(let t of e.results)await k(createActionResultEvent({rejected:!0,result:t,sequence:e.event.sequence,stepIndex:e.event.stepIndex,turnId:e.event.turnId}));let L=[];if(N?.context!==void 0&&I.deferredContext!==!0)for(let e of N.context)L.push({content:e,role:`user`});let me=normalizeUserContent(N?.message),he=me!==void 0&&!I.deferredMessage&&!I.consumedMessage?await stageAttachmentsToSandbox(me):void 0;he!==void 0&&L.push({content:he,role:`user`});let R=[],z;if(k&&hasStepInput(g)){w!==void 0&&(prepareDynamicInstructionPreamble(w,projectHistory(I.session.history,I.session.state)),prepareMemoryPreamble(w,{history:I.messages,input:L,state:I.session.state}));try{let e=await preparePreambleTrace();S=await emitTurnPreamble(k,pe??{},S,t.runtimeIdentity,e)}catch(e){if(R=w===void 0?[]:drainDynamicInstructionUserMessages(w),z=w===void 0?void 0:drainMemoryCommit(w),y={...I.session,history:[...z?.history??I.session.history,...R],state:z?.state??I.session.state},!isDynamicModelSelectionError(e))throw e;return failModelSelection(e,{sessionStarted:!0,sequence:S.sequence,stepIndex:0,turnId:`turn_${S.sequence}`})}R=w===void 0?[]:drainDynamicInstructionUserMessages(w),z=w===void 0?void 0:drainMemoryCommit(w),v?.setTurnId(S.turnId)}let ge=z?.history??I.session.history,_e=I.session.history.length;y=setHarnessEmissionState({...I.session,history:[...ge,...R],state:z?.state??I.session.state},S);let B=[...z?.history??I.messages.slice(0,_e),...R,...z===void 0?I.messages.slice(_e):[]],V=await applySessionLimitContinuation({config:t,emit:k,emissionState:S,limitContinuation:I.limitContinuation,session:y});if(V.result!==null)return V.result;y=V.session;let H=getAgentHandleStore(y.state);if(H!==void 0&&!hasUnansweredToolCall(B)&&H.handles.some(e=>e.phase===`addressed`)!==!0){let e=resolveAgentsAnnouncement({messages:projectHistory(B,y.state),store:H});e!==void 0&&B.push({content:e,role:`user`})}B=[...B,...L];let U=projectHistory(B,y.state),W=w,G;try{W!==void 0&&t.dispatchDynamicModelEvent!==void 0&&await t.dispatchDynamicModelEvent({ctx:W,event:{data:{sequence:S.sequence,stepIndex:S.stepIndex,turnId:S.turnId},type:`step.started`},messages:U}),G=await resolveActiveRuntimeModel({config:t,ctx:W,session:y})}catch(e){return failModelSelection(e,S)}y=G.session;let K=G.model,ve=detectPromptCachePath(K),q=ve.kind===`anthropic-direct`?getAnthropicCacheMarker():void 0,ye=buildGatewayAttributionHeaders(K,t.runtimeIdentity),J=await maybeCompact({abortSignal:t.abortSignal,auth:W?.get(AuthKey)??null,emit:k,emissionState:S,historyProjector:t.historyProjector,messages:[...B],model:K,onCompaction:t.onCompaction,resolveModel:t.resolveModel,runtimeIdentity:t.runtimeIdentity,session:y,telemetry:v?.telemetry()});y=J.session,J.compacted&&(B=J.messages),U=normalizeModelMessages(projectHistory(B,y.state)),k&&await emitStepStarted(k,S,requireSessionModelReference(y).id,U);let be=getApprovedTools(y),xe=S.sequence===0,Y=resolveDeliveryPolicy({hasScheduleProvenance:xe&&W?.get(ScheduleIdKey)!==void 0,hasOutputSchema:y.outputSchema!==void 0,isChild:W?.get(ParentSessionKey)!==void 0,isFirstTurn:xe,taskDeliveryPhase:W?.get(TurnTaskDeliveryKey)}),X=createCurrentMessages(U,{currentTurnMessages:L});if(W!==void 0){X.addSystem(buildDynamicInstructionMessages(W));let e=W.get(PendingSkillAnnouncementKey);e!==void 0&&e.length>0&&X.add(S.sequence,e);let t=W.get(TurnTaskStateKey);t!==void 0&&X.add(S.sequence,t)}Y.instruction!==void 0&&X.add(S.sequence,Y.instruction);let Se=renderPendingApprovalsInstruction(getPendingInputBatches(y.state).flatMap(e=>e.requests));Se!==void 0&&X.add(S.sequence,Se,{cacheFriendly:!1});let Z=await hydrateSandboxAttachments(X.nonSystemMessages),prepareModelCallInput=e=>{let t=e?[{role:`system`,content:e}]:[],n=y.agent.system?[{role:`system`,content:y.agent.system}]:[],r=X.systemMessages.length>0||t.length>0?[...t,...n,...X.systemMessages]:void 0,i=r!==void 0&&q?applySystemCacheBreakpoint(r,q):r,a=i===void 0?y.agent.system??void 0:mergeSystemInstructions(i);return{instructions:a,telemetryRuntimeContext:v?.resolveRuntimeContext({eveVersion,emissionState:S,environment,modelInput:{instructions:a,messages:Z},session:y})}},Ce=t.tools,runSingleModelCall=async e=>{let{instructions:n,telemetryRuntimeContext:i={}}=e.preparedInput??prepareModelCallInput(e.extraSystemNote);e.retryReason&&(i[`eve.retry.reason`]=e.retryReason);let o=e.trailingUserNote?[...Z,{role:`user`,content:e.trailingUserNote}]:[...Z],s=buildHarnessToolsWithDynamicSubagents(t.tools,W),c=createBackgroundToolCallBatch(),l=getAdvertisedTools({delegatedCaller:O,session:y,tools:s});Ce=l;let u=await buildToolSetWithProviderTools({approvedTools:be,backgroundBatch:c,capabilities:t.capabilities,disabledProviderTools:e.disabledProviderTools,modelReference:requireSessionModelReference(y),tools:l,webSearchProvider:t.webSearchProvider});if(W!==void 0){let n=getAdvertisedTools({delegatedCaller:O,session:y,tools:buildDynamicTools(W)}),r=buildToolSetFromDefinitions({approvedTools:be,backgroundBatch:c,capabilities:t.capabilities,disabledProviderTools:e.disabledProviderTools,tools:n});for(let[e,t]of Object.entries(r)){if(l.get(e)?.runtimeAction!==void 0)throw Error(`Dynamic tool "${e}" collides with a runtime-visible subagent.`);u[e]=t}}y.outputSchema!==void 0&&(u[FINAL_OUTPUT_TOOL_NAME]=buildFinalOutputTool(y.outputSchema));let d=t.workflow===!0?{maxSubagents:t.workflowMaxSubagents}:void 0,f=await getAdvertisedTools({delegatedCaller:O,modelTools:u,session:y,tools:l,workflow:d});y=f.session;let p=f.modelTools,m=q?applyLastToolCacheBreakpoint(p,q):p,h=activeTurnId(S),g=v?.prepareAttempt({attemptIndex:e.attemptIndex,runtimeContext:i,stepIndex:S.stepIndex,turnId:h});de=g?.scope;let _=buildStepHooks({auth:W?.get(AuthKey)??null,cachePath:ve,emit:k,emissionState:S,emitStepStarted:e.suppressStepStartedEmission!==!0,marker:q,session:y}),b=new ToolLoopAgent({headers:ye,instructions:n,model:K,onLanguageModelCallEnd(e){for(let t of e.content)t.type!==`tool-call`||t.providerExecuted===!0||isInvalidToolCall(t)||c.register({callId:t.toolCallId,input:t.input,toolName:t.toolName})},onToolExecutionEnd:logToolExecutionError,onError(e){summarizeKnownError(e.error)?.tags.includes(`config`)!==!0&&logError(log,`tool-loop stream error`,e.error)},onStepFinish:_.onStepFinish,prepareStep:_.prepareStep,reasoning:y.agent.reasoning,runtimeContext:i,stopWhen:isStepCount(1),telemetry:g?.telemetry,toolApproval:buildToolApproval(p),tools:m}),executeModelCall=async()=>{if(k){let e=[...t.tools].filter(([e,t])=>t.runtimeAction!==void 0&&l.get(e)===void 0).map(([e])=>e),n=new Set([ASK_QUESTION_TOOL_NAME,FINAL_OUTPUT_TOOL_NAME,...e]),r=await b.stream({abortSignal:t.abortSignal,messages:o}),{emittedActionCallIds:i,handledInlineToolResultCallIds:a,invalidInputToolCallIds:s,inlineAuthorizationResults:c,trailingInlineToolResultParts:u}=await emitStreamContent(k,S,r.fullStream,{excludedActionToolNames:n,tools:l});throwIfTurnAborted(t.abortSignal);let[d,f]=await Promise.all([_.stepResult,r.responseMessages]);if(isEmptyModelResponse(d)&&extractToolResultCallIds(f).size===0&&c.length===0&&u.length===0)throw new EmptyModelResponseError;await emitStepActions(k,S,d,{emittedActionCallIds:i,excludedActionCallIds:s,excludedActionToolNames:n,handledInlineToolResultCallIds:a,tools:l});let p=d.toolResults,m=new Map(p.map(e=>[e.toolCallId,e]));for(let e of c)m.set(e.toolCallId,e);return withAccumulatedResponseMessages({invalidInputToolCallIds:s,responseMessages:appendMissingToolResultMessages({append:u,responseMessages:f}),stepResult:d,toolResults:[...m.values()]})}let e=await b.generate({abortSignal:t.abortSignal,messages:o});throwIfTurnAborted(t.abortSignal);let n=await _.stepResult;if(isEmptyModelResponse(n)&&extractToolResultCallIds(e.responseMessages).size===0)throw new EmptyModelResponseError;return withAccumulatedResponseMessages({responseMessages:e.responseMessages,stepResult:n})};try{let e=await executeModelCall();return await g?.complete(),e}catch(e){return await g?.fail(e),rethrowNoOutputAsEmptyResponse(e)}},we=0,runOneModelCall=async e=>runModelCallWithRetries(t=>runSingleModelCall({...e,attemptIndex:we++,preparedInput:t===1?e.preparedInput:void 0,suppressStepStartedEmission:t!==1||e.suppressStepStartedEmission}),{sessionId:y.sessionId,turnId:S.turnId},t.abortSignal),Te=prepareModelCallInput(),Ee=await continuePendingWorkflowInterrupt({childResults:N?.runtimeActionResults,config:t,emit:k,emissionState:S,runStep,session:y,tools:buildHarnessToolsWithDynamicSubagents(t.tools,W)});if(Ee!==null)return Ee;let De=await enforceSessionTokenLimit({config:t,emit:k,emissionState:S,messages:U,session:y});if(De!==null)return De;let Q;try{Q=await runOneModelCall({preparedInput:Te,suppressStepStartedEmission:!0})}catch(n){throwIfTurnAborted(t.abortSignal);let r=await runModelCallRecoveryPipeline({error:n,stages:[e=>attemptUnsupportedProviderToolRecovery({error:e.error,runOneModelCall,sessionId:y.sessionId,turnId:S.turnId}),e=>attemptEmptyResponseRecovery({emptyDeliveryEnabled:Y.allowsEmptyDelivery,error:e.error,retryCallOptions:e.retryCallOptions,runOneModelCall,sessionId:y.sessionId,turnId:S.turnId})]});if(throwIfTurnAborted(t.abortSignal),r.outcome===`recovered`)Q=r.result;else{let n=r.error;if(v?.recordError(n),!k)throw n;let i=extractWorkflowStreamWriteErrorDetails(n);if(i!==null){let t=createErrorId();return log.error(`workflow stream write failed — parking session for retry by the user`,{...i,errorId:t,error:n,sessionId:y.sessionId,turnId:S.turnId}),S=await emitRecoverableFailedTurn(k,S,{code:`WORKFLOW_STREAM_WRITE_FAILED`,continuationToken:y.continuationToken,details:{...i,errorId:t},message:toErrorMessage(n)}),{next:null,session:setHarnessEmissionState(y,S)}}let a=classifyModelCallError(n),o=createErrorId(),s=summarizeKnownError(n),c=s===null?extractUpstreamRejectionMessage(n):null,l=s?.message??c?.message??toErrorMessage(n),u=s?.hint===void 0?l:`${l} ${s.hint}`,d=extractModelCallErrorDetails(n),p=buildModelCallFailureDetails({catalogSummary:s,error:n,errorId:o,modelCallDetails:d,upstreamRejection:c}),m=buildModelCallFailureLogFields({error:n,errorId:o,modelCallDetails:d,recognized:s!==null||c!==null,sessionId:y.sessionId,turnId:S.turnId});if(a===`terminal`)return s===null?log.error(c?.message??`model call failed terminally`,m):log.error(`${s.name}: ${s.message}`,{errorId:o,hint:s.hint,sessionId:y.sessionId,turnId:S.turnId}),await emitFailedStep(k,S,{code:`MODEL_CALL_FAILED`,details:p,message:l,sessionId:y.sessionId}),{next:t.mode===`task`||ue?{done:!0,isError:!0,output:u}:{done:!0,output:``},session:y};if(t.mode===`task`){if(a===`recoverable`&&!(n instanceof EmptyModelResponseError))throw log.warn(c?.message??`model call failed recoverably in task mode — rethrowing for durable step retry`,m),n;return log.error(c?.message??`model call failed; failing the task run`,m),await emitFailedStep(k,S,{code:`MODEL_CALL_FAILED`,details:p,message:l,sessionId:y.sessionId}),{next:{done:!0,isError:!0,output:u},session:y}}log.error(c?.message??`model call failed — parking session for retry by the user`,m),S=await emitRecoverableFailedTurn(k,S,{code:`MODEL_CALL_FAILED`,continuationToken:y.continuationToken,details:p,message:l});let h={isError:!0,output:u};return y={...y,outputSchema:void 0},{next:null,session:setHarnessEmissionState(y,S),settledTurn:h}}}let $=accumulateTurnUsage({previous:getTurnUsageState(y.state),turnId:S.turnId,usage:extractTokenUsageDelta({costUsd:extractGatewayCostUsd(Q.providerMetadata),usage:Q.usage})});y=setTurnUsageState(y,$);let Oe;try{Oe=formatLanguageModelGatewayId(K)}catch{Oe=void 0}return await setEveAttributes({"$eve.model":Oe,"$eve.input_tokens":$.inputTokens,"$eve.output_tokens":$.outputTokens,"$eve.cache_read_tokens":$.cacheReadTokens,"$eve.cache_write_tokens":$.cacheWriteTokens,"$eve.cost_usd":$.sawCost?$.costUsd:void 0,"$eve.tool_count":t.tools.size}),handleStepResult({config:t,emit:k,emissionState:S,delegatedCaller:O,modelPromptMessageCount:U.length,promptMessages:B,result:Q,runStep,session:y,runtimeActionTools:Ce})}return runStep}function extractTokenUsageDelta(e){let t=e.usage;if(!(t===void 0&&e.costUsd===void 0))return{cacheReadTokens:t?.inputTokenDetails?.cacheReadTokens,cacheWriteTokens:t?.inputTokenDetails?.cacheWriteTokens,costUsd:e.costUsd,inputTokens:t?.inputTokens,outputTokens:t?.outputTokens}}function extractGatewayCostUsd(e){let t=readGatewayMetadata(e)?.cost;if(typeof t==`number`&&Number.isFinite(t))return t;if(typeof t==`string`){let e=Number(t);return Number.isFinite(e)?e:void 0}}function readGatewayMetadata(e){let t=e?.gateway;return t&&typeof t==`object`&&!Array.isArray(t)?t:void 0}function buildModelCallFailureDetails(e){let{catalogSummary:t,error:r,errorId:i,modelCallDetails:a,upstreamRejection:o}=e;if(t!==null){let e={errorId:i,message:t.message,name:t.name,semanticErrorId:t.id,...a};return t.hint!==void 0&&(e.hint=t.hint),e}return o===null?{...formatError(r,i),...a}:{errorId:i,message:toErrorMessage(r),name:o.name,...a}}function buildModelCallFailureLogFields(e){let t={errorId:e.errorId,sessionId:e.sessionId,turnId:e.turnId};return e.recognized?{...t,details:e.modelCallDetails}:{...t,error:e.error}}async function runModelCallRecoveryPipeline(e){let t=e.error,n;for(let r of e.stages){let e=await r({error:t,retryCallOptions:n});if(e.outcome===`recovered`)return e;e.outcome===`failed`&&(t=e.error,n=e.retryCallOptions)}return{outcome:`failed`,error:t}}function withAccumulatedResponseMessages(e){let{stepResult:t}=e;return{content:t.content,finishReason:t.finishReason,...e.invalidInputToolCallIds===void 0?{}:{invalidInputToolCallIds:e.invalidInputToolCallIds},providerMetadata:t.providerMetadata,response:{...t.response,messages:[...e.responseMessages]},text:t.text,toolCalls:t.toolCalls,toolResults:e.toolResults===void 0?t.toolResults:[...e.toolResults],usage:t.usage}}function appendMissingToolResultMessages(e){let t=extractToolResultCallIds(e.responseMessages),n=e.append.filter(e=>!t.has(e.toolCallId));return[...e.responseMessages,...n.length>0?[{role:`tool`,content:[...n]}]:[]]}function getInvalidToolCallInputErrors(e){let t=[];for(let n of e.toolCalls){if(n.toolName===FINAL_OUTPUT_TOOL_NAME)continue;let e=getInvalidToolCallInputError({toolCall:n});e!==void 0&&t.push(e)}return t}function extractToolResultCallIds(e){let t=new Set;for(let n of e)if(Array.isArray(n.content))for(let e of n.content)typeof e==`object`&&e&&e.type===`tool-result`&&t.add(e.toolCallId);return t}function hasUnansweredToolCall(e){let t=new Set,n=new Set;for(let r of e)if(Array.isArray(r.content))for(let e of r.content)typeof e!=`object`||!e||(e.type===`tool-call`&&t.add(e.toolCallId),e.type===`tool-result`&&n.add(e.toolCallId));for(let e of t)if(!n.has(e))return!0;return!1}async function attemptUnsupportedProviderToolRecovery(e){let t=extractUnsupportedProviderToolTypes(e.error);if(t.length===0)return{outcome:`skipped`};let n=[];for(let e of t){let t=resolveFrameworkToolFromUpstreamType(e);t!==null&&!n.includes(t)&&n.push(t)}if(n.length===0)return{outcome:`skipped`};log.warn(`disabling unsupported provider tool(s); retrying step once`,{disabled:n,sessionId:e.sessionId,turnId:e.turnId,upstreamTypes:t});let r={disabledProviderTools:new Set(n),extraSystemNote:buildDisabledToolNote(n)};try{return{outcome:`recovered`,result:await e.runOneModelCall({...r,suppressStepStartedEmission:!0})}}catch(e){return{outcome:`failed`,error:e,retryCallOptions:r}}}function buildDisabledToolNote(e){let t=e.join(`, `);return`The following ${e.length===1?`tool is`:`tools are`} not available with the current model and has been removed: ${t}. Proceed using the remaining tools or your training knowledge.`}function isEmptyModelResponse(e){return e.toolCalls.length===0&&e.toolResults.length===0&&resolveAssistantStepText(e.response.messages,e.text)===null}function rethrowNoOutputAsEmptyResponse(e){throw isNoOutputGeneratedError(e)?new EmptyModelResponseError({cause:e}):e}const EMPTY_RESPONSE_NUDGE=`Your previous reply was empty and was not delivered. Answer now from the tool results above; do not re-run tools or mention this notice.`;function buildEmptyResponseNudge(e){return e?`${EMPTY_RESPONSE_NUDGE} If the current task explicitly requires conditional delivery and there is nothing to report, reply with exactly ${EMPTY_DELIVERY_SENTINEL}.`:EMPTY_RESPONSE_NUDGE}async function attemptEmptyResponseRecovery(e){if(!(e.error instanceof EmptyModelResponseError))return{outcome:`skipped`};log.warn(`empty model response; reissuing the model call once`,{sessionId:e.sessionId,turnId:e.turnId});try{return{outcome:`recovered`,result:await e.runOneModelCall({...e.retryCallOptions,retryReason:`empty-response`,suppressStepStartedEmission:!0,trailingUserNote:buildEmptyResponseNudge(e.emptyDeliveryEnabled)})}}catch(t){return{outcome:`failed`,error:t,retryCallOptions:e.retryCallOptions}}}async function handleStepResult(e){let{config:t,emit:n,promptMessages:r,result:a,runStep:o}=e,{emissionState:s,session:c}=e,l=resolveAssistantStepText(a.response.messages,a.text),u=a.finishReason!==`tool-calls`&&a.toolCalls.length===0&&hasEmptyDeliverySentinel(l),d=getInvalidToolCallInputErrors({toolCalls:a.toolCalls}),f=new Set([...a.invalidInputToolCallIds??[],...a.toolCalls.filter(isInvalidToolCall).map(e=>e.toolCallId),...d.map(e=>e.toolCallId)]),p=u?[]:appendMissingToolResultMessages({append:d.map(e=>createToolResultMessagePartFromToolError(e)),responseMessages:a.response.messages}),m=u?null:l,h=new Set;for(let e of[...a.content??[],...a.toolResults??[]])(e.type===`tool-result`||e.type===`tool-error`)&&e.providerExecuted===!0&&h.add(e.toolCallId);let v=normalizeProviderToolHistory({messages:p,providerExecutedOutcomeIds:h}),y=v.messages,b={...c,compaction:createNextCompactionConfig(c.compaction,e.modelPromptMessageCount,a)},te=t.workflow===!0?readWorkflowContinuationSecurity(b):void 0;if(te!==void 0){let t=await getWorkflowSandboxInterrupt(a,te);if(t!==void 0){if(!isWorkflowRuntimeActionInterrupt(t))throw Error(`Unsupported Workflow interrupt kind "${t.payload.kind}".`);return await parkOnWorkflowInterrupt({baseSession:b,emit:n,emissionState:s,interrupt:t,promptMessages:r,responseMessages:y,tools:e.runtimeActionTools,usedCalls:0})}}let x=extractToolApprovalInputRequests({content:a.content??[],excludedCallIds:f}),S=new Set(x.map(e=>e.action.callId)),ne=extractQuestionInputRequests({toolCalls:a.toolCalls,excludedCallIds:new Set([...f,...S])}),C=[...x,...ne],re=renderPendingApprovalsSnippet(x),w=y.findIndex(e=>e.role!==`tool`),ie=w===-1?y:y.slice(0,w),ae=y.slice(ie.length),oe=[...r,...ie,...re===void 0?[]:[{content:re,role:`user`}]],se=getAdvertisedTools({delegatedCaller:e.delegatedCaller,session:b,tools:e.runtimeActionTools}),T=(a.toolCalls??[]).filter(e=>!f.has(e.toolCallId)).filter(t=>e.runtimeActionTools.get(t.toolName)?.runtimeAction!==void 0).filter(e=>se.get(e.toolName)?.runtimeAction===void 0?(log.warn(`runtime action tool call blocked because tool is not advertised`,{callId:e.toolCallId,sessionId:b.sessionId,toolName:e.toolName}),!1):!0).map(e=>createRuntimeActionRequestFromToolCall({toolCall:e,tools:se}));if(T.length>0){if(C.length===0)return{next:null,session:setHarnessEmissionState(setPendingRuntimeActionBatch({actions:T,event:{sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId},responseMessages:y,session:{...b,history:[...r]}}),advanceStep(s))};let e=setPendingRuntimeActionBatch({actions:T,event:{sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId},responseMessages:ae,session:{...b,history:oe}});return e=appendPendingInputBatch({event:{sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId},requests:C,responseMessages:[],session:e}),n&&await n(createInputRequestedEvent({requests:C,sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId})),{next:null,session:setHarnessEmissionState(e,advanceStep(s))}}if(C.length>0){let e=buildResponseAuthorizationTools({authoredTools:t.tools,context:contextStorage.getStore()}),r=appendPendingInputBatch({event:{sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId},requests:C,responseAuthRequiredRequestIds:x.filter(t=>{let n=e.get(t.action.toolName)?.approval;return n!==void 0&&typeof n!=`function`&&n.response!==void 0}).map(e=>e.requestId),responseMessages:ae,session:{...b,history:oe}});return n&&(await n(createInputRequestedEvent({requests:C,sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId})),t.mode===`conversation`&&(s=await emitTurnEpilogue(n,s,t.mode),r=setHarnessEmissionState(r,s))),{next:hasDeferredStepInput(r)?o:null,session:r}}let ce=resolveInlineAuthorizationInterrupt({messages:[...r,...y],toolResults:a.toolResults});if(ce){let{challenges:e,history:r}=ce;if(n){for(let t of getSupersededAuthorizationChallenges(b.state,e))await n(createAuthorizationCompletedEvent({attemptId:t.attemptId,authorization:t.challenge,name:t.name,outcome:`failed`,reason:`Superseded by a newer authorization attempt.`,sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId}));for(let t of e)await n(createAuthorizationRequiredEvent({attemptId:t.attemptId,authorization:t.challenge,name:t.name,description:t.challenge.instructions??`Authorization required for ${t.name}`,webhookUrl:t.hookUrl,sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId}));t.mode===`conversation`&&(s=await emitTurnEpilogue(n,s,t.mode))}return{next:null,session:setHarnessEmissionState({...b,history:r,state:setPendingAuthorization(b.state,{challenges:e})},s)}}let E=y,le=[...r,...E],D={...b,history:le};return!(D.outputSchema!==void 0&&extractFinalOutput(a)!==void 0)&&(E.at(-1)?.role===`tool`||v.outcomeEndsResponse||hasDeferredStepInput(D))?(n&&(s=advanceStep(s),D=setHarnessEmissionState(D,s)),{next:o,session:D}):t.mode===`task`?finishTaskTurn({emissionState:s,emit:n,history:r,result:a,schema:D.outputSchema,session:D,stepOutput:m}):finishConversationTurn({emissionState:s,emit:n,history:r,result:a,schema:D.outputSchema,session:D,stepOutput:m})}const OUTPUT_SCHEMA_NOT_FULFILLED={code:`OUTPUT_SCHEMA_NOT_FULFILLED`,message:`The agent could not produce a result matching the requested schema.`};function extractFinalOutput(e){return(e.toolCalls??[]).find(e=>e.toolName===FINAL_OUTPUT_TOOL_NAME&&!isInvalidToolCall(e))?.input}function persistStructuredAssistantTurn(e,t,n){return{...e,history:[...t,{content:JSON.stringify(n),role:`assistant`}],outputSchema:void 0}}async function emitStructuredResult(e,t,n,r,i){return await e(createResultCompletedEvent({result:n,sequence:t.sequence,stepIndex:t.stepIndex,turnId:t.turnId})),emitTurnEpilogue(e,t,r,i)}async function finishTaskTurn(e){let{emit:t,history:n,result:r,schema:i,stepOutput:a}=e,{emissionState:o,session:s}=e;if(i===void 0)return t&&(o=await emitTurnEpilogue(t,o,`task`,s.history),s=setHarnessEmissionState(s,o)),{next:{done:!0,output:a??``},session:s};let c=extractFinalOutput(r);return c===void 0?(s={...s,outputSchema:void 0},t&&await emitFailedStep(t,o,{...OUTPUT_SCHEMA_NOT_FULFILLED,sessionId:s.sessionId}),{next:{done:!0,isError:!0,output:OUTPUT_SCHEMA_NOT_FULFILLED.message},session:s}):(s=persistStructuredAssistantTurn(s,n,c),t&&(o=await emitStructuredResult(t,o,c,`task`,s.history),s=setHarnessEmissionState(s,o)),{next:{done:!0,output:c},session:s})}async function finishConversationTurn(e){let{emit:t,history:n,result:r,schema:i,stepOutput:a}=e,{emissionState:o,session:s}=e;if(i===void 0)return t&&(o=await emitTurnEpilogue(t,o,`conversation`,s.history),s=setHarnessEmissionState(s,o)),{next:null,session:s,settledTurn:{output:a??``}};let c=extractFinalOutput(r);if(c===void 0){s={...s,outputSchema:void 0},t&&(o=await emitRecoverableFailedTurn(t,o,{...OUTPUT_SCHEMA_NOT_FULFILLED,continuationToken:s.continuationToken}),s=setHarnessEmissionState(s,o));let e={isError:!0,output:OUTPUT_SCHEMA_NOT_FULFILLED.message};return{next:null,session:s,settledTurn:e}}return s=persistStructuredAssistantTurn(s,n,c),t&&(o=await emitStructuredResult(t,o,c,`conversation`,s.history),s=setHarnessEmissionState(s,o)),{next:null,session:s,settledTurn:{output:c}}}async function continuePendingWorkflowInterrupt(e){let t=getPendingWorkflowInterrupt(e.session.state);if(t===void 0)return null;let n=t.interrupt;if(!isWorkflowRuntimeActionInterrupt(n))throw Error(`Unsupported Workflow interrupt kind "${n.payload.kind}".`);let i=e.childResults??[],a=getWorkflowRuntimeActionInterrupts(n);e.emit!==void 0&&i.length>0&&await emitWorkflowActionResults({emit:e.emit,emissionState:e.emissionState,interrupts:a,results:i});let o=getWorkflowContinuationSecurity(e.session),s;try{let t=buildWorkflowHostTools({tools:e.tools}),r=n,a=0;for(;;){s=await continueWorkflowSandboxInterrupt({bridgeRequestLimit:resolveWorkflowSandboxBridgeRequestLimit(e.config.workflowMaxSubagents),continuationSecurity:o,interrupt:r,resolution:i[a]?.output,tools:t});let n=await unwrapWorkflowSandboxResult(s,o);if(n.status!==`interrupted`||!isWorkflowRuntimeActionInterrupt(n.interrupt)||a+1>=i.length)break;let c=getWorkflowRuntimeActionInterrupts(n.interrupt)[0];if(c===void 0)throw Error(`Workflow continuation contains no pending runtime-action interrupt.`);a++,r=c}}catch(e){logError(log,`Workflow interrupt continuation failed`,e),s={error:`workflow_continuation_failed`,message:toErrorMessage(e),retryable:!1}}let c=await unwrapWorkflowSandboxResult(s,o),l=c.status===`interrupted`?c.interrupt:c.output,u=replaceWorkflowToolResult([...e.session.history,...t.responseMessages],n.outerToolCallId,l),d=clearPendingWorkflowInterrupt({...e.session,history:u});if(c.status===`interrupted`){if(!isWorkflowRuntimeActionInterrupt(c.interrupt))throw Error(`Unsupported Workflow interrupt kind "${c.interrupt.payload.kind}".`);let n=e.session.history.length,r=u.slice(0,n),i=u.slice(n);return d={...d,history:r},await parkOnWorkflowInterrupt({baseSession:d,emit:e.emit,emissionState:e.emissionState,interrupt:c.interrupt,promptMessages:r,responseMessages:i,tools:e.tools,usedCalls:t.usedCalls})}return{next:e.runStep,session:d}}function replaceWorkflowToolResult(e,t,n){if(t===void 0)return[...e];let r=typeof n==`string`?{type:`text`,value:n}:{type:`json`,value:n};return e.map(e=>{if(e.role!==`tool`)return e;let n=e.content.map(e=>e.type!==`tool-result`||e.toolCallId!==t?e:{...e,output:r});return{...e,content:n}})}async function parkOnWorkflowInterrupt(e){let t=getWorkflowRuntimeActionInterrupts(e.interrupt),n=t[0];if(n===void 0)throw Error(`Workflow continuation contains no pending runtime-action interrupt.`);e.emit!==void 0&&await emitWorkflowActionsRequested({emit:e.emit,emissionState:e.emissionState,interrupts:t,tools:e.tools});let r={...e.baseSession,history:[...e.promptMessages]};return{next:null,session:setHarnessEmissionState(setPendingWorkflowInterrupt({interrupt:n,responseMessages:e.responseMessages,session:r,usedCalls:e.usedCalls}),e.emissionState)}}function createNextCompactionConfig(e,t,n){let r={recentWindowSize:e.recentWindowSize,threshold:e.threshold,thresholdPercent:e.thresholdPercent};return n.usage?.inputTokens!==void 0&&(r.lastKnownInputTokens=n.usage.inputTokens,r.lastKnownPromptMessageCount=t),r}async function maybeCompact(e){let{emit:t,emissionState:n}=e,r=e.messages,a=e.session,o=e.historyProjector?.({messages:r,state:a.state})??r,s=e.force===!0||shouldCompact(o,a.compaction),c=shouldCanonicalizeMemory(r);if(!s&&!c)return{compacted:!1,messages:r,session:a};let l=await resolveCompactionModel({compactionModelReference:a.agent.compactionModelReference,model:e.model,modelReference:requireSessionModelReference(a),resolveModel:e.resolveModel}),u=mergeProviderSafetyIdentifier(a.agent.compactionModelReference??requireSessionModelReference(a),l.providerOptions,e.auth);if(t){let e=contextStorage.getStore();e!==void 0&&prepareMemoryCompaction(e,{history:r,state:a.state}),await t(createCompactionRequestedEvent({modelId:formatLanguageModelGatewayId(l.model),sequence:n.sequence,sessionId:a.sessionId,turnId:n.turnId,usageInputTokens:getInputTokenCount(o,a.compaction)}),o)}let d=canonicalizeMemoryRecords(r),f=e.historyProjector?.({messages:d.ordinary,state:a.state})??d.ordinary,p=s?await compactMessages([...f],l.model,a.compaction,u,e.telemetry,buildGatewayAttributionHeaders(l.model,e.runtimeIdentity),e.abortSignal,e.force===!0):[...f];if(r=[...d.memory,...p],e.onCompaction)for(let t of e.onCompaction())r.push(t);if(t){let o=contextStorage.getStore();if(o!==void 0&&prepareMemoryCompaction(o,{history:r,state:a.state}),await t(createCompactionCompletedEvent({modelId:formatLanguageModelGatewayId(l.model),sequence:n.sequence,sessionId:a.sessionId,turnId:n.turnId}),e.historyProjector?.({messages:r,state:a.state})??r),o!==void 0){let e=drainMemoryCommit(o);e!==void 0&&(r=[...e.history],a={...a,state:e.state})}}return{compacted:!0,messages:r,session:a}}function resolveApprovalKeyFromTools(e){return t=>{let n=e.get(t.action.toolName);if(n?.approvalKey!==void 0)return n.approvalKey(t.action.input)}}async function runModelCallWithRetries(e,t,n){for(let r=1;;r++){throwIfTurnAborted(n);try{return await e(r)}catch(e){if(throwIfTurnAborted(n),r===3||classifyModelCallError(e)!==`retry`)throw e;let i=500*2**(r-1)+Math.floor(Math.random()*250);log.warn(`model call failed transiently — retrying`,{attempt:r,delayMs:i,sessionId:t.sessionId,turnId:t.turnId,error:e}),await new Promise(e=>setTimeout(e,i))}}}export{appendMissingToolResultMessages,createToolLoopHarness};
|
|
3
|
+
`)};return t!==void 0&&(n.providerOptions=t),n}function buildGatewayAttributionHeaders(e,t){let n=resolveProviderHeaders(e);if(n===void 0)return;let r=t?.agentName??t?.agentId,i=process.env.VERCEL_PROJECT_PRODUCTION_URL||process.env.VERCEL_URL,a=i?`https://${i}`:void 0,o={...n};return r&&(o[`x-title`]=r),a&&(o[`http-referer`]=a),o}async function resolveActiveRuntimeModel(e){if(e.ctx===void 0){let t=e.session.agent.modelReference;if(t===void 0)throw Error(`Dynamic model selection is unavailable outside an eve runtime context.`);return{model:await e.config.resolveModel(t),session:e.session}}let t=getActiveDynamicModelSelection(e.ctx);if(t===null){let t=e.session.agent.modelReference;if(e.session.agent.dynamicModel===!0||t===void 0)throw Error(`Dynamic model selection is required before model-dependent work begins. Add a matching resolver handler that returns a concrete model.`);return{model:await e.config.resolveModel(t),session:e.session}}return{model:t.model===void 0?await e.config.resolveModel(t.reference):t.model,session:updateSessionModelReference(e.session,t.reference)}}function updateSessionModelReference(e,t){return{...e,agent:{...e.agent,modelReference:t},compaction:updateCompactionThresholdForModelReference({compaction:e.compaction,modelReference:t})}}function updateCompactionThresholdForModelReference(e){return e.modelReference.contextWindowTokens===void 0?e.compaction:{...e.compaction,threshold:Math.max(1,Math.floor(e.modelReference.contextWindowTokens*(e.compaction.thresholdPercent??.9)))}}function buildHarnessToolsWithDynamicSubagents(e,t){let n=new Map(e);if(t===void 0)return n;for(let e of buildDynamicSubagentTools(t)){if(n.has(e.name))throw Error(`Dynamic subagent "${e.name}" collides with another runtime-visible tool name.`);n.set(e.name,e)}return n}function hasDispatchTarget(e,t){return[...e.values()].some(e=>e.behavior?.handling?.kind===`dispatch`&&e.behavior.handling.target.kind===t)}function createToolLoopHarness(n){let r=n.handleEvent;async function runStep(e,t){return n.instrumentation?.runStep({environment,eveVersion,hasInput:hasStepInput(t),session:e},e=>executeStepBody(e.session,t,e))??executeStepBody(e,t)}async function executeStepBody(f,g,v){let y=f,te=createHistoryViewPreparer({previous:n.historyView,projector:n.historyProjector});te(y.history,y.state);let projectHistory=(e,t)=>te(e,t).messages,S=getHarnessEmissionState(y.state),w=contextStorage.getStore(),D=w?.get(ParentSessionKey),ce=w?.get(ChannelKey),le=w?.get(SessionCallbackKey),ue=D!==void 0||le!==void 0,k=(le?.taskId!==void 0||readTaskIdFromInboxToken(String(ce?.state?.parentContinuationToken??``))!==void 0)&&hasDispatchTarget(n.tools,`task-update`),de,A=v?.createHandleEvent({getAttemptScope:()=>de,handleEvent:r,turnId:activeTurnId(S)})??r,failModelSelection=async(e,r)=>{if(throwIfTurnAborted(n.abortSignal),v?.recordError(e),!A)throw e;let i=createErrorId(),a=toErrorMessage(e);return log.error(`model selection failed terminally`,{error:e,errorId:i,sessionId:y.sessionId,turnId:r.turnId}),await emitFailedStep(A,r,{code:`MODEL_SELECTION_FAILED`,details:{errorId:i},message:a,sessionId:y.sessionId}),{next:n.mode===`task`||ue?{done:!0,isError:!0,output:a}:{done:!0,output:``},session:y}},preparePreambleTrace=async()=>await v?.preparePreamble({sequence:S.sequence,sessionStarted:S.sessionStarted,traceContext:v?.traceContext,turnId:`turn_${S.sequence}`});if(n.clearOnly===!0)return y={...y,compaction:{recentWindowSize:y.compaction.recentWindowSize,threshold:y.compaction.threshold,thresholdPercent:y.compaction.thresholdPercent},history:[],state:clearMemorySessionState(y.state)},await A?.(createContextClearedEvent({sequence:S.sequence,sessionId:y.sessionId,turnId:activeTurnId(S)})),await A?.(createSessionWaitingEvent()),{next:null,session:y};if(n.compactOnly===!0){if(y.history.length>0)try{let e=contextStorage.getStore(),t=await resolveActiveRuntimeModel({config:n,ctx:e,session:y});y=t.session;let r=await maybeCompact({abortSignal:n.abortSignal,auth:e?.get(AuthKey)??null,emit:A,emissionState:{...S,turnId:activeTurnId(S)},force:!0,historyProjector:n.historyProjector,messages:[...y.history],model:t.model,onCompaction:n.onCompaction,resolveModel:n.resolveModel,runtimeIdentity:n.runtimeIdentity,session:y,telemetry:v?.telemetry()});y={...r.session,compaction:{recentWindowSize:r.session.compaction.recentWindowSize,threshold:r.session.compaction.threshold,thresholdPercent:r.session.compaction.thresholdPercent},history:r.messages}}catch(e){logError(log,`manual session compaction failed`,e,{sessionId:y.sessionId})}return await A?.(createSessionWaitingEvent()),{next:null,session:y}}let j=consumeDeferredStepInput({input:g,preferCurrentInput:n.mode!==`conversation`&&g!==void 0&&hasPendingApprovalBatch(y),session:y});y=j.session;let M=await resolvePendingRuntimeActions({emit:A,session:y,stepInput:j.input});if(M.outcome===`unresolved`)return{next:null,session:M.session};y=M.session;let fe=getPendingInputRequestIds(y.state),pe=convertStaleResponsesToUserMessage({history:M.messages,pendingRequestIds:fe,stepInput:dropStaleSessionLimitContinuationResponses({pendingRequestIds:fe,stepInput:j.input}),tools:n.tools}),N=pe.stepInput,me=pe.kind===`converted`?{...N,message:pe.displayMessage}:N,P=contextStorage.getStore();shouldPrepareApprovalReplayTools({session:y,stepInput:N})&&P!==void 0&&n.prepareStepDynamicTools!==void 0&&await n.prepareStepDynamicTools({ctx:P,event:createStepStartedEvent({modelId:y.agent.modelReference?.id??`dynamic`,sequence:S.sequence,stepIndex:S.stepIndex,turnId:S.turnId}),messages:projectHistory(M.messages,y.state)});let he=shouldPrepareApprovalPolicyTools({session:y,stepInput:N})?buildResponseAuthorizationTools({authoredTools:n.tools,context:P}):n.tools,F=await coordinateApprovalDelivery({session:y,stepInput:N,tools:he});if(y=F.session,A){for(let e of F.feedback)await A(createMessageCompletedEvent({message:e,sequence:S.sequence,stepIndex:S.stepIndex,turnId:S.turnId}));let e=getApprovalAuditState(y.state);for(let t of e.activeCandidates.filter(e=>e.pendingEventEmitted!==!0))await A(createApprovalCandidateEvent({candidateId:t.candidateId,outcome:`pending`,requestId:t.requestId,responderPrincipalId:t.responder.principalId,sequence:S.sequence,stepIndex:S.stepIndex,turnId:S.turnId})),y={...y,state:markApprovalCandidatePendingEventEmitted({candidateId:t.candidateId,state:y.state})};for(let t of e.candidateHistory.filter(e=>e.eventEmitted!==!0&&e.status!==`allowed`))await A(createApprovalCandidateEvent({candidateId:t.candidateId,outcome:t.status,requestId:t.requestId,responderPrincipalId:t.responder.principalId,reason:t.reason,sequence:S.sequence,stepIndex:S.stepIndex,turnId:S.turnId})),y={...y,state:markApprovalCandidateHistoryEventEmitted({candidateId:t.candidateId,state:y.state})};for(let t of e.settlements.filter(e=>e.eventEmitted!==!0))await A(createApprovalSettledEvent({outcome:t.outcome===`allowed`?`approved`:`cancelled`,requestId:t.requestId,responderPrincipalId:t.actor.principalId,sequence:S.sequence,stepIndex:S.stepIndex,turnId:S.turnId})),y={...y,state:markApprovalSettlementEventEmitted({requestId:t.requestId,state:y.state})}}if(F.kind===`park`)return{next:null,session:y};if(F.kind===`continue-coordination`)return{next:runStep,session:F.stepInput===void 0?y:queueDeferredStepInput(y,F.stepInput)};if(F.challenges.length>0){if(A)for(let e of F.challenges)await A(createAuthorizationRequiredEvent({authorization:e.challenge,candidateId:e.candidateId,description:e.challenge.instructions??`Authorization required for ${e.name}`,name:e.name,sequence:S.sequence,stepIndex:S.stepIndex,turnId:S.turnId,webhookUrl:e.hookUrl}));let e=F.stepInput===void 0?y:queueDeferredStepInput(y,F.stepInput);return{next:null,session:{...e,state:setPendingAuthorization(e.state,{challenges:F.challenges})}}}let I=resolvePendingInput({deferMessagesWhileApprovalsPending:n.mode!==`conversation`,history:M.messages,resolveApprovalKey:resolveApprovalKeyFromTools(n.tools),session:y,stepInput:F.stepInput});if(I.outcome===`unresolved`){let e=M.outcome===`resolved`?{...I.session,history:[...M.messages]}:I.session;if(A&&n.mode===`conversation`&&I.deferredMessage===!0&&hasStepInput(g)){w!==void 0&&prepareDynamicInstructionPreamble(w,projectHistory(e.history,e.state));let t=[];try{let e=await preparePreambleTrace();S=await emitTurnPreamble(A,me??{},S,n.runtimeIdentity,e)}catch(n){if(t=w===void 0?[]:drainDynamicInstructionUserMessages(w),e={...e,history:[...e.history,...t]},y=e,!isDynamicModelSelectionError(n))throw n;return failModelSelection(n,{sessionStarted:!0,sequence:S.sequence,stepIndex:0,turnId:`turn_${S.sequence}`})}return t=w===void 0?[]:drainDynamicInstructionUserMessages(w),e={...e,history:[...e.history,...t]},S=await emitTurnEpilogue(A,S,n.mode),{next:null,session:setHarnessEmissionState(e,S)}}return M.outcome===`resolved`?(A&&n.mode===`conversation`&&(S=await emitTurnEpilogue(A,S,n.mode),e=setHarnessEmissionState(e,S)),{next:null,session:e}):{next:null,session:I.session}}if(I.resolvedInputs!==void 0)for(let e of I.resolvedInputs)await v?.publishInputResolutions({batch:e,sessionId:y.sessionId}),A&&await A(createInputResolvedEvent({resolutions:e.inputs.map(e=>{let t={kind:e.request.kind,outcome:e.outcome,requestId:e.request.requestId};return e.response===void 0?t:{...t,response:e.response}}),sequence:e.event.sequence,stepIndex:e.event.stepIndex,turnId:e.event.turnId}));if(A&&I.rejectedActions)for(let e of I.rejectedActions)for(let t of e.results)await A(createActionResultEvent({rejected:!0,result:t,sequence:e.event.sequence,stepIndex:e.event.stepIndex,turnId:e.event.turnId}));let ge=readClientContext(N),L=ge===void 0||I.deferredContext===!0?[]:ge.map(e=>({content:e,role:`user`})),R=[];if(N?.context!==void 0&&I.deferredContext!==!0)for(let e of N.context)R.push({content:e,role:`user`});let _e=normalizeUserContent(N?.message),ve=_e!==void 0&&!I.deferredMessage&&!I.consumedMessage?await stageAttachmentsToSandbox(_e):void 0;ve!==void 0&&R.push({content:ve,role:`user`});let z=[],B;if(A&&hasStepInput(g)){w!==void 0&&(prepareDynamicInstructionPreamble(w,projectHistory(I.session.history,I.session.state)),prepareMemoryPreamble(w,{history:I.messages,input:[...L,...R],state:I.session.state}));try{let e=await preparePreambleTrace();S=await emitTurnPreamble(A,me??{},S,n.runtimeIdentity,e)}catch(e){if(z=w===void 0?[]:drainDynamicInstructionUserMessages(w),B=w===void 0?void 0:drainMemoryCommit(w),y={...I.session,history:[...B?.history??I.session.history,...z],state:B?.state??I.session.state},!isDynamicModelSelectionError(e))throw e;return failModelSelection(e,{sessionStarted:!0,sequence:S.sequence,stepIndex:0,turnId:`turn_${S.sequence}`})}z=w===void 0?[]:drainDynamicInstructionUserMessages(w),B=w===void 0?void 0:drainMemoryCommit(w),v?.setTurnId(S.turnId)}let ye=B?.history??I.session.history,be=I.session.history.length;y=setHarnessEmissionState({...I.session,history:[...ye,...z],state:B?.state??I.session.state},S);let V=[...B?.history??I.messages.slice(0,be),...z,...B===void 0?I.messages.slice(be):[]],H=await applySessionLimitContinuation({config:n,emit:A,emissionState:S,limitContinuation:I.limitContinuation,session:y});if(H.result!==null)return H.result;y=H.session;let U=getAgentHandleStore(y.state);if(U!==void 0&&!hasUnansweredToolCall(V)&&U.handles.some(e=>e.phase===`addressed`)!==!0){let e=resolveAgentsAnnouncement({messages:projectHistory(V,y.state),store:U});e!==void 0&&V.push({content:e,role:`user`})}V=[...V,...R];let createModelMessages=e=>{if(L.length===0)return[...e];let t=Math.max(0,e.length-R.length);return[...e.slice(0,t),...L,...e.slice(t)]},W=projectHistory(createModelMessages(V),y.state),G=w,K;try{G!==void 0&&n.dispatchDynamicModelEvent!==void 0&&await n.dispatchDynamicModelEvent({ctx:G,event:{data:{sequence:S.sequence,stepIndex:S.stepIndex,turnId:S.turnId},type:`step.started`},messages:W}),K=await resolveActiveRuntimeModel({config:n,ctx:G,session:y})}catch(e){return failModelSelection(e,S)}y=K.session;let q=K.model,xe=detectPromptCachePath(q),J=xe.kind===`anthropic-direct`?getAnthropicCacheMarker():void 0,Se=buildGatewayAttributionHeaders(q,n.runtimeIdentity),Y=await maybeCompact({abortSignal:n.abortSignal,auth:G?.get(AuthKey)??null,emit:A,emissionState:S,historyProjector:n.historyProjector,messages:[...V],model:q,onCompaction:n.onCompaction,promptMessages:createModelMessages(V),resolveModel:n.resolveModel,runtimeIdentity:n.runtimeIdentity,session:y,telemetry:v?.telemetry()});y=Y.session,Y.compacted&&(V=Y.messages),W=normalizeModelMessages(projectHistory(createModelMessages(V),y.state)),A&&await emitStepStarted(A,S,requireSessionModelReference(y).id,W);let Ce=getApprovedTools(y),we=S.sequence===0,X=resolveDeliveryPolicy({hasScheduleProvenance:we&&G?.get(ScheduleIdKey)!==void 0,hasOutputSchema:y.outputSchema!==void 0,isChild:G?.get(ParentSessionKey)!==void 0,isFirstTurn:we,taskDeliveryPhase:G?.get(TurnTaskDeliveryKey)}),Z=createCurrentMessages(W,{currentTurnMessages:R});if(G!==void 0){Z.addSystem(buildDynamicInstructionMessages(G));let e=G.get(PendingSkillAnnouncementKey);e!==void 0&&e.length>0&&Z.add(S.sequence,e);let t=G.get(TurnTaskStateKey);t!==void 0&&Z.add(S.sequence,t)}X.instruction!==void 0&&Z.add(S.sequence,X.instruction);let Te=renderPendingApprovalsInstruction(getPendingInputBatches(y.state).flatMap(e=>e.requests));Te!==void 0&&Z.add(S.sequence,Te,{cacheFriendly:!1});let Ee=await hydrateSandboxAttachments(Z.nonSystemMessages),prepareModelCallInput=e=>{let t=e?[{role:`system`,content:e}]:[],n=y.agent.system?[{role:`system`,content:y.agent.system}]:[],r=Z.systemMessages.length>0||t.length>0?[...t,...n,...Z.systemMessages]:void 0,i=r!==void 0&&J?applySystemCacheBreakpoint(r,J):r,a=i===void 0?y.agent.system??void 0:mergeSystemInstructions(i);return{instructions:a,telemetryRuntimeContext:v?.resolveRuntimeContext({eveVersion,emissionState:S,environment,modelInput:{instructions:a,messages:Ee},session:y})}},De=n.tools,runSingleModelCall=async e=>{let{instructions:t,telemetryRuntimeContext:r={}}=e.preparedInput??prepareModelCallInput(e.extraSystemNote);e.retryReason&&(r[`eve.retry.reason`]=e.retryReason);let a=e.trailingUserNote?[...Ee,{role:`user`,content:e.trailingUserNote}]:[...Ee],s=buildHarnessToolsWithDynamicSubagents(n.tools,G),c=createBackgroundToolCallBatch(),l=getAdvertisedTools({canRequestInput:n.capabilities?.requestInput===!0,delegatedCaller:k,session:y,tools:s}),u=new Map(l),d=await buildToolSetWithProviderTools({approvedTools:Ce,backgroundBatch:c,capabilities:n.capabilities,disabledProviderTools:e.disabledProviderTools,modelReference:requireSessionModelReference(y),tools:l});if(G!==void 0){let t=getAdvertisedTools({canRequestInput:n.capabilities?.requestInput===!0,delegatedCaller:k,session:y,tools:buildDynamicTools(G)}),r=buildToolSetFromDefinitions({approvedTools:Ce,backgroundBatch:c,capabilities:n.capabilities,disabledProviderTools:e.disabledProviderTools,tools:t}),i=new Map;for(let e of t)i.has(e.name)||i.set(e.name,e);for(let[e,t]of Object.entries(r)){if(l.get(e)?.behavior?.handling?.kind===`dispatch`)throw Error(`Dynamic tool "${e}" collides with a runtime-visible subagent.`);let n=i.get(e);if(n===void 0)throw Error(`Dynamic tool "${e}" has no effective harness definition.`);u.set(e,n),d[e]=t}}y.outputSchema!==void 0&&(d[FINAL_OUTPUT_TOOL_NAME]=buildFinalOutputTool(y.outputSchema));let f=n.workflow===!0?{maxSubagents:n.workflowMaxSubagents}:void 0,p=await getAdvertisedTools({canRequestInput:n.capabilities?.requestInput===!0,delegatedCaller:k,modelTools:d,session:y,tools:u,workflow:f});y=p.session,De=p.harnessTools;let m=p.modelTools,h=J?applyLastToolCacheBreakpoint(m,J):m,ee=activeTurnId(S),g=v?.prepareAttempt({attemptIndex:e.attemptIndex,runtimeContext:r,stepIndex:S.stepIndex,turnId:ee});de=g?.scope;let _=buildStepHooks({auth:G?.get(AuthKey)??null,cachePath:xe,emit:A,emissionState:S,emitStepStarted:e.suppressStepStartedEmission!==!0,marker:J,session:y}),b=new ToolLoopAgent({headers:Se,instructions:t,model:q,onLanguageModelCallEnd(e){for(let t of e.content)t.type!==`tool-call`||t.providerExecuted===!0||isInvalidToolCall(t)||c.register({callId:t.toolCallId,input:t.input,toolName:t.toolName})},onToolExecutionEnd:logToolExecutionError,onError(e){summarizeKnownError(e.error)?.tags.includes(`config`)!==!0&&logError(log,`tool-loop stream error`,e.error)},onStepFinish:_.onStepFinish,prepareStep:_.prepareStep,reasoning:y.agent.reasoning,runtimeContext:r,stopWhen:isStepCount(1),telemetry:g?.telemetry,toolApproval:buildToolApproval(m),tools:h}),executeModelCall=async()=>{if(A){let e=[...n.tools].filter(([e,t])=>t.behavior?.handling?.kind===`dispatch`&&u.get(e)===void 0).map(([e])=>e),t=[...u.values()].filter(e=>e.behavior?.handling?.kind===`request-input`).map(e=>e.name),r=new Set([FINAL_OUTPUT_TOOL_NAME,...e,...t]),i=await b.stream({abortSignal:n.abortSignal,messages:a}),{emittedActionCallIds:o,handledInlineToolResultCallIds:s,invalidInputToolCallIds:c,inlineAuthorizationResults:l,trailingInlineToolResultParts:d}=await emitStreamContent(A,S,i.fullStream,{excludedActionToolNames:r,tools:u});throwIfTurnAborted(n.abortSignal);let[f,p]=await Promise.all([_.stepResult,i.responseMessages]);if(isEmptyModelResponse(f)&&extractToolResultCallIds(p).size===0&&l.length===0&&d.length===0)throw new EmptyModelResponseError;await emitStepActions(A,S,f,{emittedActionCallIds:o,excludedActionCallIds:c,excludedActionToolNames:r,handledInlineToolResultCallIds:s,tools:u});let m=f.toolResults,h=new Map(m.map(e=>[e.toolCallId,e]));for(let e of l)h.set(e.toolCallId,e);return withAccumulatedResponseMessages({invalidInputToolCallIds:c,responseMessages:appendMissingToolResultMessages({append:d,responseMessages:p}),stepResult:f,toolResults:[...h.values()]})}let e=await b.generate({abortSignal:n.abortSignal,messages:a});throwIfTurnAborted(n.abortSignal);let t=await _.stepResult;if(isEmptyModelResponse(t)&&extractToolResultCallIds(e.responseMessages).size===0)throw new EmptyModelResponseError;return withAccumulatedResponseMessages({responseMessages:e.responseMessages,stepResult:t})};try{let e=await executeModelCall();return await g?.complete(),e}catch(e){return await g?.fail(e),rethrowNoOutputAsEmptyResponse(e)}},Oe=0,runOneModelCall=async e=>runModelCallWithRetries(t=>runSingleModelCall({...e,attemptIndex:Oe++,preparedInput:t===1?e.preparedInput:void 0,suppressStepStartedEmission:t!==1||e.suppressStepStartedEmission}),{sessionId:y.sessionId,turnId:S.turnId},n.abortSignal),ke=prepareModelCallInput(),Ae=await continuePendingWorkflowInterrupt({childResults:N?.runtimeActionResults,config:n,emit:A,emissionState:S,runStep,session:y,tools:buildHarnessToolsWithDynamicSubagents(n.tools,G)});if(Ae!==null)return Ae;let je=await enforceSessionTokenLimit({config:n,emit:A,emissionState:S,messages:W,session:y});if(je!==null)return je;let Q;try{Q=await runOneModelCall({preparedInput:ke,suppressStepStartedEmission:!0})}catch(e){throwIfTurnAborted(n.abortSignal);let r=await runModelCallRecoveryPipeline({error:e,stages:[e=>attemptUnsupportedProviderToolRecovery({error:e.error,runOneModelCall,sessionId:y.sessionId,turnId:S.turnId}),e=>attemptEmptyResponseRecovery({emptyDeliveryEnabled:X.allowsEmptyDelivery,error:e.error,retryCallOptions:e.retryCallOptions,runOneModelCall,sessionId:y.sessionId,turnId:S.turnId})]});if(throwIfTurnAborted(n.abortSignal),r.outcome===`recovered`)Q=r.result;else{let e=r.error;if(v?.recordError(e),!A)throw e;let i=extractWorkflowStreamWriteErrorDetails(e);if(i!==null){let n=createErrorId();return log.error(`workflow stream write failed — parking session for retry by the user`,{...i,errorId:n,error:e,sessionId:y.sessionId,turnId:S.turnId}),S=await emitRecoverableFailedTurn(A,S,{code:`WORKFLOW_STREAM_WRITE_FAILED`,continuationToken:y.continuationToken,details:{...i,errorId:n},message:toErrorMessage(e)}),{next:null,session:setHarnessEmissionState(y,S)}}let a=classifyModelCallError(e),o=createErrorId(),s=summarizeKnownError(e),c=s===null?extractUpstreamRejectionMessage(e):null,l=s?.message??c?.message??toErrorMessage(e),u=s?.hint===void 0?l:`${l} ${s.hint}`,d=extractModelCallErrorDetails(e),f=buildModelCallFailureDetails({catalogSummary:s,error:e,errorId:o,modelCallDetails:d,upstreamRejection:c}),m=buildModelCallFailureLogFields({error:e,errorId:o,modelCallDetails:d,recognized:s!==null||c!==null,sessionId:y.sessionId,turnId:S.turnId});if(a===`terminal`)return s===null?log.error(c?.message??`model call failed terminally`,m):log.error(`${s.name}: ${s.message}`,{errorId:o,hint:s.hint,sessionId:y.sessionId,turnId:S.turnId}),await emitFailedStep(A,S,{code:`MODEL_CALL_FAILED`,details:f,message:l,sessionId:y.sessionId}),{next:n.mode===`task`||ue?{done:!0,isError:!0,output:u}:{done:!0,output:``},session:y};if(n.mode===`task`){if(a===`recoverable`&&!(e instanceof EmptyModelResponseError))throw log.warn(c?.message??`model call failed recoverably in task mode — rethrowing for durable step retry`,m),e;return log.error(c?.message??`model call failed; failing the task run`,m),await emitFailedStep(A,S,{code:`MODEL_CALL_FAILED`,details:f,message:l,sessionId:y.sessionId}),{next:{done:!0,isError:!0,output:u},session:y}}log.error(c?.message??`model call failed — parking session for retry by the user`,m),S=await emitRecoverableFailedTurn(A,S,{code:`MODEL_CALL_FAILED`,continuationToken:y.continuationToken,details:f,message:l});let h={isError:!0,output:u};return y={...y,outputSchema:void 0},{next:null,session:setHarnessEmissionState(y,S),settledTurn:h}}}let $=accumulateTurnUsage({previous:getTurnUsageState(y.state),turnId:S.turnId,usage:extractTokenUsageDelta({costUsd:extractGatewayCostUsd(Q.providerMetadata),usage:Q.usage})});y=setTurnUsageState(y,$);let Me;try{Me=formatLanguageModelGatewayId(q)}catch{Me=void 0}let Ne=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":n.tools.size}).catch(e=>{logError(log,`Workflow attribute write failed unexpectedly`,e,{sessionId:y.sessionId,turnId:S.turnId})}),Pe;try{Pe=await handleStepResult({config:n,emit:A,emissionState:S,delegatedCaller:k,durableModelPromptMessageCount:L.length===0?W.length:void 0,promptMessages:V,result:Q,runStep,session:y,runtimeActionTools:De})}finally{await Ne}return Pe}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:i,modelCallDetails:a,upstreamRejection:o}=e;if(t!==null){let e={errorId:i,message:t.message,name:t.name,semanticErrorId:t.id,...a};return t.hint!==void 0&&(e.hint=t.hint),e}return o===null?{...formatError(n,i),...a}:{errorId:i,message:toErrorMessage(n),name:o.name,...a}}function buildModelCallFailureLogFields(e){let t={errorId:e.errorId,sessionId:e.sessionId,turnId:e.turnId};return e.recognized?{...t,details:e.modelCallDetails}:{...t,error:e.error}}async function runModelCallRecoveryPipeline(e){let t=e.error,n;for(let r of e.stages){let e=await r({error:t,retryCallOptions:n});if(e.outcome===`recovered`)return e;e.outcome===`failed`&&(t=e.error,n=e.retryCallOptions)}return{outcome:`failed`,error:t}}function withAccumulatedResponseMessages(e){let{stepResult:t}=e;return{content:t.content,finishReason:t.finishReason,...e.invalidInputToolCallIds===void 0?{}:{invalidInputToolCallIds:e.invalidInputToolCallIds},providerMetadata:t.providerMetadata,response:{...t.response,messages:[...e.responseMessages]},text:t.text,toolCalls:t.toolCalls,toolResults:e.toolResults===void 0?t.toolResults:[...e.toolResults],usage:t.usage}}function appendMissingToolResultMessages(e){let t=extractToolResultCallIds(e.responseMessages),n=e.append.filter(e=>!t.has(e.toolCallId));return[...e.responseMessages,...n.length>0?[{role:`tool`,content:[...n]}]:[]]}function getInvalidToolCallInputErrors(e){let t=[];for(let n of e.toolCalls){if(n.toolName===FINAL_OUTPUT_TOOL_NAME)continue;let e=getInvalidToolCallInputError({toolCall:n});e!==void 0&&t.push(e)}return t}function extractToolResultCallIds(e){let t=new Set;for(let n of e)if(Array.isArray(n.content))for(let e of n.content)typeof e==`object`&&e&&e.type===`tool-result`&&t.add(e.toolCallId);return t}function hasUnansweredToolCall(e){let t=new Set,n=new Set;for(let r of e)if(Array.isArray(r.content))for(let e of r.content)typeof e!=`object`||!e||(e.type===`tool-call`&&t.add(e.toolCallId),e.type===`tool-result`&&n.add(e.toolCallId));for(let e of t)if(!n.has(e))return!0;return!1}async function attemptUnsupportedProviderToolRecovery(e){let t=extractUnsupportedProviderToolTypes(e.error);if(t.length===0)return{outcome:`skipped`};let n=[];for(let e of t){let t=resolveFrameworkToolFromUpstreamType(e);t!==null&&!n.includes(t)&&n.push(t)}if(n.length===0)return{outcome:`skipped`};log.warn(`disabling unsupported provider tool(s); retrying step once`,{disabled:n,sessionId:e.sessionId,turnId:e.turnId,upstreamTypes:t});let r={disabledProviderTools:new Set(n),extraSystemNote:buildDisabledToolNote(n)};try{return{outcome:`recovered`,result:await e.runOneModelCall({...r,suppressStepStartedEmission:!0})}}catch(e){return{outcome:`failed`,error:e,retryCallOptions:r}}}function buildDisabledToolNote(e){let t=e.join(`, `);return`The following ${e.length===1?`tool is`:`tools are`} not available with the current model and has been removed: ${t}. Proceed using the remaining tools or your training knowledge.`}function isEmptyModelResponse(e){return e.toolCalls.length===0&&e.toolResults.length===0&&resolveAssistantStepText(e.response.messages,e.text)===null}function rethrowNoOutputAsEmptyResponse(e){throw isNoOutputGeneratedError(e)?new EmptyModelResponseError({cause:e}):e}const EMPTY_RESPONSE_NUDGE=`Your previous reply was empty and was not delivered. Answer now from the tool results above; do not re-run tools or mention this notice.`;function buildEmptyResponseNudge(e){return e?`${EMPTY_RESPONSE_NUDGE} If the current task explicitly requires conditional delivery and there is nothing to report, reply with exactly ${EMPTY_DELIVERY_SENTINEL}.`:EMPTY_RESPONSE_NUDGE}async function attemptEmptyResponseRecovery(e){if(!(e.error instanceof EmptyModelResponseError))return{outcome:`skipped`};log.warn(`empty model response; reissuing the model call once`,{sessionId:e.sessionId,turnId:e.turnId});try{return{outcome:`recovered`,result:await e.runOneModelCall({...e.retryCallOptions,retryReason:`empty-response`,suppressStepStartedEmission:!0,trailingUserNote:buildEmptyResponseNudge(e.emptyDeliveryEnabled)})}}catch(t){return{outcome:`failed`,error:t,retryCallOptions:e.retryCallOptions}}}async function handleStepResult(e){let{config:t,emit:n,promptMessages:r,result:i,runStep:o}=e,{emissionState:s,session:c}=e,l=resolveAssistantStepText(i.response.messages,i.text),u=i.finishReason!==`tool-calls`&&i.toolCalls.length===0&&hasEmptyDeliverySentinel(l),d=getInvalidToolCallInputErrors({toolCalls:i.toolCalls}),f=new Set([...i.invalidInputToolCallIds??[],...i.toolCalls.filter(isInvalidToolCall).map(e=>e.toolCallId),...d.map(e=>e.toolCallId)]),p=u?[]:appendMissingToolResultMessages({append:d.map(e=>createToolResultMessagePartFromToolError(e)),responseMessages:i.response.messages}),m=u?null:l,h=new Set;for(let e of[...i.content??[],...i.toolResults??[]])(e.type===`tool-result`||e.type===`tool-error`)&&e.providerExecuted===!0&&h.add(e.toolCallId);let ee=normalizeProviderToolHistory({messages:p,providerExecutedOutcomeIds:h}),v=ee.messages,y={...c,compaction:createNextCompactionConfig(c.compaction,e.durableModelPromptMessageCount,i)},b=t.workflow===!0?readWorkflowContinuationSecurity(y):void 0;if(b!==void 0){let t=await getWorkflowSandboxInterrupt(i,b);if(t!==void 0){if(!isWorkflowRuntimeActionInterrupt(t))throw Error(`Unsupported Workflow interrupt kind "${t.payload.kind}".`);return await parkOnWorkflowInterrupt({baseSession:y,emit:n,emissionState:s,interrupt:t,promptMessages:r,responseMessages:v,tools:e.runtimeActionTools,usedCalls:0})}}let x=extractToolApprovalInputRequests({content:i.content??[],excludedCallIds:f}),ne=new Set(x.map(e=>e.action.callId)),S=extractQuestionInputRequests({toolCalls:i.toolCalls,tools:e.runtimeActionTools,excludedCallIds:new Set([...f,...ne])}),C=[...x,...S],re=renderPendingApprovalsSnippet(x),ie=v.findIndex(e=>e.role!==`tool`),w=ie===-1?v:v.slice(0,ie),ae=v.slice(w.length),oe=[...r,...w,...re===void 0?[]:[{content:re,role:`user`}]],T=getAdvertisedTools({canRequestInput:e.config.capabilities?.requestInput===!0,delegatedCaller:e.delegatedCaller,session:y,tools:e.runtimeActionTools}),E=(i.toolCalls??[]).filter(e=>!f.has(e.toolCallId)).filter(t=>e.runtimeActionTools.get(t.toolName)?.behavior?.handling?.kind===`dispatch`&&e.runtimeActionTools.get(t.toolName)?.execution!==`background`).filter(e=>T.get(e.toolName)?.behavior?.handling?.kind===`dispatch`&&T.get(e.toolName)?.execution!==`background`?!0:(log.warn(`runtime action tool call blocked because tool is not advertised`,{callId:e.toolCallId,sessionId:y.sessionId,toolName:e.toolName}),!1)).map(e=>createPendingDispatchActionFromToolCall({toolCall:e,tools:T}));if(E.length>0){if(C.length===0)return{next:null,session:setHarnessEmissionState(setPendingRuntimeActionBatch({actions:E,event:{sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId},responseMessages:v,session:{...y,history:[...r]}}),advanceStep(s))};let e=setPendingRuntimeActionBatch({actions:E,event:{sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId},responseMessages:ae,session:{...y,history:oe}});return e=appendPendingInputBatch({event:{sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId},requests:C,responseMessages:[],session:e}),n&&await n(createInputRequestedEvent({requests:C,sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId})),{next:null,session:setHarnessEmissionState(e,advanceStep(s))}}if(C.length>0){let e=buildResponseAuthorizationTools({authoredTools:t.tools,context:contextStorage.getStore()}),r=appendPendingInputBatch({event:{sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId},requests:C,responseAuthRequiredRequestIds:x.filter(t=>{let n=e.get(t.action.toolName)?.approval;return n!==void 0&&typeof n!=`function`&&n.response!==void 0}).map(e=>e.requestId),responseMessages:ae,session:{...y,history:oe}});return n&&(await n(createInputRequestedEvent({requests:C,sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId})),t.mode===`conversation`&&(s=await emitTurnEpilogue(n,s,t.mode),r=setHarnessEmissionState(r,s))),{next:hasDeferredStepInput(r)?o:null,session:r}}let D=resolveInlineAuthorizationInterrupt({messages:[...r,...v],toolResults:i.toolResults});if(D){let{challenges:e,history:r}=D;if(n){for(let t of getSupersededAuthorizationChallenges(y.state,e))await n(createAuthorizationCompletedEvent({attemptId:t.attemptId,authorization:t.challenge,name:t.name,outcome:`failed`,reason:`Superseded by a newer authorization attempt.`,sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId}));for(let t of e)await n(createAuthorizationRequiredEvent({attemptId:t.attemptId,authorization:t.challenge,name:t.name,description:t.challenge.instructions??`Authorization required for ${t.name}`,webhookUrl:t.hookUrl,sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId}));t.mode===`conversation`&&(s=await emitTurnEpilogue(n,s,t.mode))}return{next:null,session:setHarnessEmissionState({...y,history:r,state:setPendingAuthorization(y.state,{challenges:e})},s)}}let se=v,ce=[...r,...se],O={...y,history:ce};return!(O.outputSchema!==void 0&&extractFinalOutput(i)!==void 0)&&(se.at(-1)?.role===`tool`||ee.outcomeEndsResponse||hasDeferredStepInput(O))?(n&&(s=advanceStep(s),O=setHarnessEmissionState(O,s)),{next:o,session:O}):t.mode===`task`?finishTaskTurn({emissionState:s,emit:n,history:r,result:i,schema:O.outputSchema,session:O,stepOutput:m}):finishConversationTurn({emissionState:s,emit:n,history:r,result:i,schema:O.outputSchema,session:O,stepOutput:m})}const OUTPUT_SCHEMA_NOT_FULFILLED={code:`OUTPUT_SCHEMA_NOT_FULFILLED`,message:`The agent could not produce a result matching the requested schema.`};function extractFinalOutput(e){return(e.toolCalls??[]).find(e=>e.toolName===FINAL_OUTPUT_TOOL_NAME&&!isInvalidToolCall(e))?.input}function persistStructuredAssistantTurn(e,t,n){return{...e,history:[...t,{content:JSON.stringify(n),role:`assistant`}],outputSchema:void 0}}async function emitStructuredResult(e,t,n,r,i){return await e(createResultCompletedEvent({result:n,sequence:t.sequence,stepIndex:t.stepIndex,turnId:t.turnId})),emitTurnEpilogue(e,t,r,i)}async function finishTaskTurn(e){let{emit:t,history:n,result:r,schema:i,stepOutput:a}=e,{emissionState:o,session:s}=e;if(i===void 0)return t&&(o=await emitTurnEpilogue(t,o,`task`,s.history),s=setHarnessEmissionState(s,o)),{next:{done:!0,output:a??``},session:s};let c=extractFinalOutput(r);return c===void 0?(s={...s,outputSchema:void 0},t&&await emitFailedStep(t,o,{...OUTPUT_SCHEMA_NOT_FULFILLED,sessionId:s.sessionId}),{next:{done:!0,isError:!0,output:OUTPUT_SCHEMA_NOT_FULFILLED.message},session:s}):(s=persistStructuredAssistantTurn(s,n,c),t&&(o=await emitStructuredResult(t,o,c,`task`,s.history),s=setHarnessEmissionState(s,o)),{next:{done:!0,output:c},session:s})}async function finishConversationTurn(e){let{emit:t,history:n,result:r,schema:i,stepOutput:a}=e,{emissionState:o,session:s}=e;if(i===void 0)return t&&(o=await emitTurnEpilogue(t,o,`conversation`,s.history),s=setHarnessEmissionState(s,o)),{next:null,session:s,settledTurn:{output:a??``}};let c=extractFinalOutput(r);if(c===void 0){s={...s,outputSchema:void 0},t&&(o=await emitRecoverableFailedTurn(t,o,{...OUTPUT_SCHEMA_NOT_FULFILLED,continuationToken:s.continuationToken}),s=setHarnessEmissionState(s,o));let e={isError:!0,output:OUTPUT_SCHEMA_NOT_FULFILLED.message};return{next:null,session:s,settledTurn:e}}return s=persistStructuredAssistantTurn(s,n,c),t&&(o=await emitStructuredResult(t,o,c,`conversation`,s.history),s=setHarnessEmissionState(s,o)),{next:null,session:s,settledTurn:{output:c}}}async function continuePendingWorkflowInterrupt(e){let t=getPendingWorkflowInterrupt(e.session.state);if(t===void 0)return null;let n=t.interrupt;if(!isWorkflowRuntimeActionInterrupt(n))throw Error(`Unsupported Workflow interrupt kind "${n.payload.kind}".`);let r=e.childResults??[],a=getWorkflowRuntimeActionInterrupts(n);e.emit!==void 0&&r.length>0&&await emitWorkflowActionResults({emit:e.emit,emissionState:e.emissionState,interrupts:a,results:r});let o=getWorkflowContinuationSecurity(e.session),s;try{let t=buildWorkflowHostTools({tools:e.tools}),i=n,a=0;for(;;){s=await continueWorkflowSandboxInterrupt({bridgeRequestLimit:resolveWorkflowSandboxBridgeRequestLimit(e.config.workflowMaxSubagents),continuationSecurity:o,interrupt:i,resolution:r[a]?.output,tools:t});let n=await unwrapWorkflowSandboxResult(s,o);if(n.status!==`interrupted`||!isWorkflowRuntimeActionInterrupt(n.interrupt)||a+1>=r.length)break;let c=getWorkflowRuntimeActionInterrupts(n.interrupt)[0];if(c===void 0)throw Error(`Workflow continuation contains no pending runtime-action interrupt.`);a++,i=c}}catch(e){logError(log,`Workflow interrupt continuation failed`,e),s={error:`workflow_continuation_failed`,message:toErrorMessage(e),retryable:!1}}let c=await unwrapWorkflowSandboxResult(s,o),l=c.status===`interrupted`?c.interrupt:c.output,u=replaceWorkflowToolResult([...e.session.history,...t.responseMessages],n.outerToolCallId,l),d=clearPendingWorkflowInterrupt({...e.session,history:u});if(c.status===`interrupted`){if(!isWorkflowRuntimeActionInterrupt(c.interrupt))throw Error(`Unsupported Workflow interrupt kind "${c.interrupt.payload.kind}".`);let n=e.session.history.length,r=u.slice(0,n),i=u.slice(n);return d={...d,history:r},await parkOnWorkflowInterrupt({baseSession:d,emit:e.emit,emissionState:e.emissionState,interrupt:c.interrupt,promptMessages:r,responseMessages:i,tools:e.tools,usedCalls:t.usedCalls})}return{next:e.runStep,session:d}}function replaceWorkflowToolResult(e,t,n){if(t===void 0)return[...e];let r=typeof n==`string`?{type:`text`,value:n}:{type:`json`,value:n};return e.map(e=>{if(e.role!==`tool`)return e;let n=e.content.map(e=>e.type!==`tool-result`||e.toolCallId!==t?e:{...e,output:r});return{...e,content:n}})}async function parkOnWorkflowInterrupt(e){let t=getWorkflowRuntimeActionInterrupts(e.interrupt),n=t[0];if(n===void 0)throw Error(`Workflow continuation contains no pending runtime-action interrupt.`);e.emit!==void 0&&await emitWorkflowActionsRequested({emit:e.emit,emissionState:e.emissionState,interrupts:t,tools:e.tools});let r={...e.baseSession,history:[...e.promptMessages]};return{next:null,session:setHarnessEmissionState(setPendingWorkflowInterrupt({interrupt:n,responseMessages:e.responseMessages,session:r,usedCalls:e.usedCalls}),e.emissionState)}}function createNextCompactionConfig(e,t,n){let r={recentWindowSize:e.recentWindowSize,threshold:e.threshold,thresholdPercent:e.thresholdPercent};return n.usage?.inputTokens!==void 0&&t!==void 0&&(r.lastKnownInputTokens=n.usage.inputTokens,r.lastKnownPromptMessageCount=t),r}async function maybeCompact(e){let{emit:t,emissionState:n}=e,r=e.messages,i=e.session,o=e.promptMessages??r,s=e.historyProjector?.({messages:o,state:i.state})??o,c=e.force===!0||shouldCompact(s,i.compaction),l=shouldCanonicalizeMemory(r);if(!c&&!l)return{compacted:!1,messages:r,session:i};let u=await resolveCompactionModel({compactionModelReference:i.agent.compactionModelReference,model:e.model,modelReference:requireSessionModelReference(i),resolveModel:e.resolveModel}),d=mergeProviderSafetyIdentifier(i.agent.compactionModelReference??requireSessionModelReference(i),u.providerOptions,e.auth);if(t){let e=contextStorage.getStore();e!==void 0&&prepareMemoryCompaction(e,{history:r,state:i.state}),await t(createCompactionRequestedEvent({modelId:formatLanguageModelGatewayId(u.model),sequence:n.sequence,sessionId:i.sessionId,turnId:n.turnId,usageInputTokens:getInputTokenCount(s,i.compaction)}),s)}let f=canonicalizeMemoryRecords(r),p=e.historyProjector?.({messages:f.ordinary,state:i.state})??f.ordinary,m=c?await compactMessages([...p],u.model,i.compaction,d,e.telemetry,buildGatewayAttributionHeaders(u.model,e.runtimeIdentity),e.abortSignal,e.force===!0):[...p];if(r=[...f.memory,...m],e.onCompaction)for(let t of e.onCompaction())r.push(t);if(t){let o=contextStorage.getStore();if(o!==void 0&&prepareMemoryCompaction(o,{history:r,state:i.state}),await t(createCompactionCompletedEvent({modelId:formatLanguageModelGatewayId(u.model),sequence:n.sequence,sessionId:i.sessionId,turnId:n.turnId}),e.historyProjector?.({messages:r,state:i.state})??r),o!==void 0){let e=drainMemoryCommit(o);e!==void 0&&(r=[...e.history],i={...i,state:e.state})}}return{compacted:!0,messages:r,session:i}}function resolveApprovalKeyFromTools(e){return t=>{let n=e.get(t.action.toolName);if(n?.approvalKey!==void 0)return n.approvalKey(t.action.input)}}async function runModelCallWithRetries(e,t,n){for(let r=1;;r++){throwIfTurnAborted(n);try{return await e(r)}catch(e){if(throwIfTurnAborted(n),r===3||classifyModelCallError(e)!==`retry`)throw e;let i=500*2**(r-1)+Math.floor(Math.random()*250);log.warn(`model call failed transiently — retrying`,{attempt:r,delayMs:i,sessionId:t.sessionId,turnId:t.turnId,error:e}),await new Promise(e=>setTimeout(e,i))}}}export{appendMissingToolResultMessages,createToolLoopHarness};
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { type ToolApprovalConfiguration, type ToolSet } from "ai";
|
|
2
2
|
import type { SessionCapabilities } from "#channel/types.js";
|
|
3
3
|
import type { RuntimeModelReference } from "#runtime/agent/bootstrap.js";
|
|
4
|
-
import type { WebSearchProvider } from "#shared/web-search.js";
|
|
5
4
|
import type { HarnessToolDefinition } from "#harness/execute-tool.js";
|
|
6
5
|
import type { HarnessToolMap } from "#harness/types.js";
|
|
7
6
|
import type { ToolExecuteOptions } from "#tools/definition.js";
|
|
@@ -76,7 +75,6 @@ export declare function buildToolSetWithProviderTools(input: {
|
|
|
76
75
|
readonly disabledProviderTools?: ReadonlySet<string>;
|
|
77
76
|
readonly modelReference: RuntimeModelReference;
|
|
78
77
|
readonly tools: HarnessToolMap;
|
|
79
|
-
readonly webSearchProvider?: WebSearchProvider;
|
|
80
78
|
}): Promise<ToolSet>;
|
|
81
79
|
/** Builds the AI SDK 7 call-level approval policy for an assembled tool set. */
|
|
82
80
|
export declare function buildToolApproval(tools: ToolSet): ToolApprovalConfiguration<ToolSet, Record<string, unknown>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{loadContext}from"#context/container.js";import{isObject}from"#shared/guards.js";import{buildCallbackContext}from"#context/build-callback-context.js";import{resolveApprovalPolicy}from"#approval/definition.js";import{tool}from"ai";import{
|
|
1
|
+
import{loadContext}from"#context/container.js";import{isObject}from"#shared/guards.js";import{buildCallbackContext}from"#context/build-callback-context.js";import{resolveApprovalPolicy}from"#approval/definition.js";import{tool}from"ai";import{authorizationPendingModelText,isAuthorizationPendingModelOutput,isAuthorizationSignal,modelFacingAuthorizationOutput}from"#harness/authorization.js";import{createBackgroundToolCallBatch,executeBackgroundToolCall}from"#harness/background-tools.js";import{isAsyncIterable}from"#shared/async-iterable.js";import{stashToolInterrupt}from"#harness/tool-interrupts.js";import{resolveWebSearchBackend,resolveWebSearchProviderTool}from"#harness/provider-tools.js";import{normalizeToolJsonOutput,normalizeToolModelOutput}from"#harness/tool-model-output.js";const toolApprovals=new WeakMap;function buildToolSet(e){let t={},n=e.backgroundBatch??createBackgroundToolCallBatch(),r=e.capabilities?.requestInput===!0,s=e.disabledProviderTools;for(let c of e.tools.values()){if(c.behavior?.availability.includes(`requires-request-input`)===!0&&!r||s?.has(c.name))continue;n.setTool(c.name,c.execution===`background`&&c.execute!==void 0?c:void 0);let l=c.toModelOutput,u=buildApprovalFn(c,e),d=tool({description:c.description,execute:wrapToolExecute(c,n),inputSchema:c.inputSchema,...c.execution===`background`?{onInputAvailable:({input:e,toolCallId:t})=>{if(c.execute===void 0)throw Error(`Background tool "${c.name}" has no execute function.`);n.register({callId:t,input:e,toolName:c.name})}}:{},outputSchema:c.outputSchema,...c.execute===void 0?l===void 0?{}:{toModelOutput:async({output:e,toolCallId:t})=>normalizeToolModelOutput({output:await l(e),toolCallId:t,toolName:c.name})}:{toModelOutput:async({output:e,toolCallId:t})=>isAuthorizationPendingModelOutput(e)?{type:`text`,value:authorizationPendingModelText(e.connections)}:l===void 0?typeof e==`string`?{type:`text`,value:e}:normalizeToolModelOutput({output:{type:`json`,value:e??null},toolCallId:t,toolName:c.name}):normalizeToolModelOutput({output:await l(e),toolCallId:t,toolName:c.name})}});t[c.name]=d,c.approval!==void 0&&toolApprovals.set(d,u)}return t}function buildToolSetFromDefinitions(e){let t=new Map;for(let n of e.tools)t.has(n.name)||t.set(n.name,n);return buildToolSet({approvedTools:e.approvedTools,backgroundBatch:e.backgroundBatch,capabilities:e.capabilities,disabledProviderTools:e.disabledProviderTools,tools:t})}function wrapToolExecute(e,t=createBackgroundToolCallBatch()){let n=e.execute;if(n!==void 0)return(r,i)=>{let a;try{a=e.execution===`background`?executeBackgroundToolCall({batch:t,definition:e,options:i,toolInput:r}):n(r,i)}catch(e){return Promise.reject(e)}return isAsyncIterable(a)?normalizeToolExecuteIterable(a,e.name,i):Promise.resolve(a).then(t=>normalizeToolExecuteOutput(t,e.name,i))}}async function*normalizeToolExecuteIterable(e,t,n){for await(let r of e)yield normalizeToolExecuteOutput(r,t,n)}function normalizeToolExecuteOutput(t,n,r){return isAuthorizationSignal(t)?(stashToolInterrupt(loadContext(),r.toolCallId,t),modelFacingAuthorizationOutput(t)):normalizeToolJsonOutput({boundary:`execute`,output:t,toolCallId:r.toolCallId,toolName:n})}async function buildToolSetWithProviderTools(e){let t=e.disabledProviderTools,n={...buildToolSet({approvedTools:e.approvedTools,backgroundBatch:e.backgroundBatch,capabilities:e.capabilities,disabledProviderTools:t,tools:e.tools})};for(let r of e.tools.values()){let i=r.behavior?.handling;if(i?.kind===`provider-tool`&&r.execute===void 0&&!t?.has(r.name)){let t=resolveWebSearchBackend(e.modelReference,i.provider);t===null?delete n[r.name]:n[r.name]=await resolveWebSearchProviderTool(t)}}return n}function buildApprovalFn(e,i){return async(a,o)=>{if(e.approval===void 0)return;let s=isObject(a)?a:void 0,c=await resolveApprovalPolicy(e.approval)({...buildCallbackContext(),approvedTools:i.approvedTools??new Set,callId:o,toolInput:s,toolName:e.name});return typeof c==`boolean`?c?`user-approval`:`not-applicable`:c}}function buildToolApproval(e){return async({toolCall:t})=>{let n=e[t.toolName];return n===void 0?void 0:await toolApprovals.get(n)?.(t.input,t.toolCallId)}}export{buildToolApproval,buildToolSet,buildToolSetFromDefinitions,buildToolSetWithProviderTools,wrapToolExecute};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { LanguageModel, ModelMessage, UserContent } from "ai";
|
|
2
2
|
import type { SessionAuthContext, SessionCapabilities } from "#channel/types.js";
|
|
3
3
|
import type { AlsContext } from "#context/container.js";
|
|
4
|
-
import type {
|
|
4
|
+
import type { RuntimeIdentity, StepStartedStreamEvent, UnstampedMessageStreamEvent } from "#protocol/message.js";
|
|
5
5
|
import type { RunMode } from "#shared/run-mode.js";
|
|
6
6
|
import type { RuntimeActionResult } from "#shared/action-types.js";
|
|
7
7
|
import type { RuntimeModelReference } from "#runtime/agent/bootstrap.js";
|
|
@@ -10,7 +10,6 @@ import type { SandboxState } from "#sandbox/state.js";
|
|
|
10
10
|
import type { JsonObject } from "#shared/json.js";
|
|
11
11
|
import type { TokenUsage } from "#shared/token-usage.js";
|
|
12
12
|
import type { InternalToolDefinition } from "#tools/definition.js";
|
|
13
|
-
import type { WebSearchProvider } from "#shared/web-search.js";
|
|
14
13
|
import type { AgentReasoningDefinition } from "#shared/agent-definition.js";
|
|
15
14
|
import type { HarnessToolDefinition } from "#harness/execute-tool.js";
|
|
16
15
|
import type { SessionInstrumentation } from "#instrumentation/runtime.js";
|
|
@@ -263,8 +262,6 @@ export interface ToolLoopHarnessConfig {
|
|
|
263
262
|
* {@link import("#harness/workflow-subagent-limit.js").DEFAULT_WORKFLOW_MAX_SUBAGENTS}.
|
|
264
263
|
*/
|
|
265
264
|
readonly workflowMaxSubagents?: number;
|
|
266
|
-
/** AI Gateway provider selected for the framework `web_search` tool. */
|
|
267
|
-
readonly webSearchProvider?: WebSearchProvider;
|
|
268
265
|
readonly handleEvent?: HandleEventFn;
|
|
269
266
|
/** Projects raw durable history before it crosses a message-bearing boundary. */
|
|
270
267
|
readonly historyProjector?: HistoryViewProjector;
|
|
@@ -283,6 +280,8 @@ export interface ToolLoopHarnessConfig {
|
|
|
283
280
|
* for terminal assistant text inside the current invocation.
|
|
284
281
|
*/
|
|
285
282
|
readonly mode: RunMode;
|
|
283
|
+
/** Whether this node enables framework background-task behavior. */
|
|
284
|
+
readonly tasksEnabled?: boolean;
|
|
286
285
|
/**
|
|
287
286
|
* Called after compaction to let the execution layer re-apply
|
|
288
287
|
* framework-owned state preservation (read-before-write reset, todo
|
|
@@ -290,10 +289,10 @@ export interface ToolLoopHarnessConfig {
|
|
|
290
289
|
* compacted history.
|
|
291
290
|
*/
|
|
292
291
|
readonly onCompaction?: () => readonly ModelMessage[];
|
|
293
|
-
/**
|
|
294
|
-
readonly
|
|
292
|
+
/** Prepares persisted step-scoped tools before an approved call is resumed. */
|
|
293
|
+
readonly prepareStepDynamicTools?: (input: {
|
|
295
294
|
readonly ctx: AlsContext;
|
|
296
|
-
readonly event:
|
|
295
|
+
readonly event: StepStartedStreamEvent;
|
|
297
296
|
readonly messages: readonly ModelMessage[];
|
|
298
297
|
}) => Promise<void>;
|
|
299
298
|
readonly dispatchDynamicModelEvent?: (input: {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { PendingDispatchAction } from "#shared/dispatch-action.js";
|
|
2
2
|
import { type WorkflowSandboxInterrupt } from "#shared/workflow-sandbox.js";
|
|
3
3
|
export declare const WORKFLOW_RUNTIME_ACTION_INTERRUPT_KIND = "eve.workflow-runtime-action";
|
|
4
4
|
export declare function isWorkflowRuntimeActionInterrupt(interrupt: unknown): boolean;
|
|
5
|
-
export declare function buildRuntimeActionFromWorkflowInterrupt(interrupt: WorkflowSandboxInterrupt):
|
|
5
|
+
export declare function buildRuntimeActionFromWorkflowInterrupt(interrupt: WorkflowSandboxInterrupt): PendingDispatchAction;
|
|
6
6
|
/** Returns every pending runtime-action interrupt in deterministic request order. */
|
|
7
7
|
export declare function getWorkflowRuntimeActionInterrupts(interrupt: WorkflowSandboxInterrupt): WorkflowSandboxInterrupt[];
|
|
8
|
-
export declare function buildRuntimeActionsFromWorkflowInterrupt(interrupt: WorkflowSandboxInterrupt):
|
|
8
|
+
export declare function buildRuntimeActionsFromWorkflowInterrupt(interrupt: WorkflowSandboxInterrupt): PendingDispatchAction[];
|
|
9
9
|
export declare function getRuntimeActionKeysFromWorkflowInterrupt(interrupt: WorkflowSandboxInterrupt): string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{getPendingDispatchActionKey}from"#runtime/actions/keys.js";import{getWorkflowSandboxPendingInterrupts}from"#shared/workflow-sandbox.js";const WORKFLOW_RUNTIME_ACTION_INTERRUPT_KIND=`eve.workflow-runtime-action`;function isWorkflowRuntimeActionInterrupt(e){return isRecord(e)&&isRecord(e.payload)&&e.payload.kind===`eve.workflow-runtime-action`}function buildRuntimeActionFromWorkflowInterrupt(e){let t=e.payload,n=t.dispatchTarget,r=t.toolInput,i=t.toolName,a=sanitizeCallId(`${i}_${`interruptId`in e?String(e.interruptId):``}`);if(n.kind===`self-agent-call`||n.kind===`subagent-call`||n.kind===`remote-agent-call`)return{callId:a,description:``,input:r,target:n,toolName:i};throw Error(`Workflow runtime actions cannot carry "${n.kind}" tools.`)}function getWorkflowRuntimeActionInterrupts(e){return getWorkflowSandboxPendingInterrupts(e).filter(isWorkflowRuntimeActionInterrupt)}function buildRuntimeActionsFromWorkflowInterrupt(e){return getWorkflowRuntimeActionInterrupts(e).map(e=>buildRuntimeActionFromWorkflowInterrupt(e))}function getRuntimeActionKeysFromWorkflowInterrupt(t){return buildRuntimeActionsFromWorkflowInterrupt(t).map(getPendingDispatchActionKey)}function sanitizeCallId(e){return e.replace(/[^a-zA-Z0-9_-]/g,`_`)}function isRecord(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}export{WORKFLOW_RUNTIME_ACTION_INTERRUPT_KIND,buildRuntimeActionFromWorkflowInterrupt,buildRuntimeActionsFromWorkflowInterrupt,getRuntimeActionKeysFromWorkflowInterrupt,getWorkflowRuntimeActionInterrupts,isWorkflowRuntimeActionInterrupt};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import{z}from"#compiled/zod/index.js";import{WORKFLOW_RUNTIME_ACTION_INTERRUPT_KIND}from"#harness/workflow-runtime-action-state.js";import{DEFAULT_WORKFLOW_MAX_SUBAGENTS}from"#harness/workflow-subagent-limit.js";import{WORKFLOW_TOOL_NAME,createWorkflowSandboxTool,readWorkflowSandboxResolution,requestWorkflowSandboxInterrupt}from"#shared/workflow-sandbox.js";import{workflowToolDescription}from"#harness/workflow-tool-description.js";const workflowInputSchema=z.strictObject({js:z.string().describe(`Complete JavaScript orchestration program. Call only the agents listed in the Workflow description and return one JSON-serializable result.`)});async function applyWorkflowTool(e){let t=createWorkflowHostTools(e.harnessTools,Object.keys(e.tools));if(Object.keys(t).length===0)return{hostTools:t,modelTools:e.tools};let n=await createWorkflowSandboxTool({bridgeRequestLimit:resolveWorkflowSandboxBridgeRequestLimit(e.maxSubagents),continuationSecurity:e.continuationSecurity,hostTools:t}),a=typeof n.description==`string`?n.description:``,o=workflowToolDescription(Object.keys(t),{maxSubagents:e.maxSubagents}),s=workflowApiReference(a),c={...e.tools};return c[WORKFLOW_TOOL_NAME]={...n,description:s.length>0?`${o}\n\n${s}`:o,inputSchema:workflowInputSchema},{hostTools:t,modelTools:c}}function resolveWorkflowSandboxBridgeRequestLimit(e){return Math.max(256,(e??DEFAULT_WORKFLOW_MAX_SUBAGENTS)+1)}function workflowApiReference(e){let t=e.indexOf(`Tools:
|
|
2
|
-
`);return t<0?e:`Available agent API:\n${e.slice(t+7)}`}function buildWorkflowHostTools(e){return createWorkflowHostTools(e.tools,e.tools.keys())}function createWorkflowHostTools(e,t){let n={};for(let r of t){let t=e.get(r);t?.
|
|
2
|
+
`);return t<0?e:`Available agent API:\n${e.slice(t+7)}`}function buildWorkflowHostTools(e){return createWorkflowHostTools(e.tools,e.tools.keys())}function createWorkflowHostTools(e,t){let n={};for(let r of t){let t=e.get(r);if(t===void 0)continue;let i=t.behavior?.handling?.kind===`dispatch`?t.behavior.handling.target:void 0;(i?.kind===`self-agent-call`||i?.kind===`subagent-call`||i?.kind===`remote-agent-call`)&&(n[r]=createWorkflowRuntimeActionHostTool(t))}return n}function createWorkflowRuntimeActionHostTool(e){return{description:e.description,inputSchema:e.inputSchema,execute:async(n,r)=>{let i=readWorkflowSandboxResolution(r);return i===void 0?requestWorkflowSandboxInterrupt({dispatchTarget:e.behavior?.handling?.kind===`dispatch`?e.behavior.handling.target:void 0,kind:WORKFLOW_RUNTIME_ACTION_INTERRUPT_KIND,toolInput:n,toolName:e.name}):i}}}export{applyWorkflowTool,buildWorkflowHostTools,resolveWorkflowSandboxBridgeRequestLimit};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { PendingDispatchAction } from "#shared/dispatch-action.js";
|
|
2
2
|
/**
|
|
3
3
|
* Default maximum number of subagent (and remote-agent) calls one `Workflow`
|
|
4
4
|
* tool invocation may dispatch.
|
|
@@ -10,8 +10,8 @@ export declare const DEFAULT_WORKFLOW_MAX_SUBAGENTS = 100;
|
|
|
10
10
|
* actions must resolve with an error result instead of starting a child.
|
|
11
11
|
*/
|
|
12
12
|
export type WorkflowSubagentDispatchPlan = {
|
|
13
|
-
readonly allowed: readonly
|
|
14
|
-
readonly blocked: readonly
|
|
13
|
+
readonly allowed: readonly PendingDispatchAction[];
|
|
14
|
+
readonly blocked: readonly PendingDispatchAction[];
|
|
15
15
|
readonly maxSubagents: number;
|
|
16
16
|
readonly usedCalls: number;
|
|
17
17
|
};
|
|
@@ -22,7 +22,7 @@ export type WorkflowSubagentDispatchPlan = {
|
|
|
22
22
|
* program's call order.
|
|
23
23
|
*/
|
|
24
24
|
export declare function planWorkflowSubagentDispatch(input: {
|
|
25
|
-
readonly actions: readonly
|
|
25
|
+
readonly actions: readonly PendingDispatchAction[];
|
|
26
26
|
readonly maxSubagents?: number;
|
|
27
27
|
readonly usedCalls: number;
|
|
28
28
|
}): WorkflowSubagentDispatchPlan;
|
|
@@ -17,6 +17,7 @@ export declare function ensureOtelIntegration(): void;
|
|
|
17
17
|
* these forward or they stop receiving events.
|
|
18
18
|
*/
|
|
19
19
|
export declare function getRegisteredTelemetryIntegrations(options?: {
|
|
20
|
+
readonly excludeEveOtelIntegration?: boolean;
|
|
20
21
|
readonly sanitizeEveOtelErrors?: boolean;
|
|
21
22
|
}): readonly Telemetry[];
|
|
22
23
|
/** @internal */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createLogger}from"#internal/logging.js";import{registerTelemetry}from"ai";import{OpenTelemetry}from"#compiled/@ai-sdk/otel/index.js";const log=createLogger(`harness.ai-sdk-telemetry`);let registered=!1,eveOtelIntegration,errorSafeEveOtelIntegration,warnedMissingEveOtelIntegration=!1;function ensureOtelIntegration(){registered||(registered=!0,eveOtelIntegration=new OpenTelemetry({runtimeContext:!0}),errorSafeEveOtelIntegration=telemetryWithoutErrorContent(eveOtelIntegration),registerTelemetry(eveOtelIntegration))}function getRegisteredTelemetryIntegrations(e){let t=globalThis.AI_SDK_TELEMETRY_INTEGRATIONS??[];if(e?.sanitizeEveOtelErrors!==!0)return
|
|
1
|
+
import{createLogger}from"#internal/logging.js";import{registerTelemetry}from"ai";import{OpenTelemetry}from"#compiled/@ai-sdk/otel/index.js";const log=createLogger(`harness.ai-sdk-telemetry`);let registered=!1,eveOtelIntegration,errorSafeEveOtelIntegration,warnedMissingEveOtelIntegration=!1;function ensureOtelIntegration(){registered||(registered=!0,eveOtelIntegration=new OpenTelemetry({runtimeContext:!0}),errorSafeEveOtelIntegration=telemetryWithoutErrorContent(eveOtelIntegration),registerTelemetry(eveOtelIntegration))}function getRegisteredTelemetryIntegrations(e){let t=globalThis.AI_SDK_TELEMETRY_INTEGRATIONS??[],n=e?.excludeEveOtelIntegration===!0?t.filter(e=>e!==eveOtelIntegration):t;if(e?.sanitizeEveOtelErrors!==!0)return n;let r=!1,i=n.map(e=>e!==eveOtelIntegration||errorSafeEveOtelIntegration===void 0?e:(r=!0,errorSafeEveOtelIntegration));return!r&&e.excludeEveOtelIntegration!==!0&&!warnedMissingEveOtelIntegration&&(warnedMissingEveOtelIntegration=!0,log.warn(`could not sanitize eve's AI SDK OpenTelemetry integration`,{reason:eveOtelIntegration===void 0?`eve OpenTelemetry integration was not registered`:`registered integration identity did not match`})),i}function telemetryWithoutErrorContent(e){let genericError=()=>Error(`AI SDK operation failed`);return new Proxy(e,{get(e,t){if(t===`onError`&&e.onError!==void 0)return t=>e.onError(typeof t==`object`&&t?{...t,error:genericError()}:genericError());if(t===`onToolExecutionEnd`&&e.onToolExecutionEnd!==void 0)return t=>e.onToolExecutionEnd(t.toolOutput.type===`tool-error`?{...t,toolOutput:{...t.toolOutput,error:genericError()}}:t);let n=Reflect.get(e,t);return typeof n==`function`?n.bind(e):n}})}export{ensureOtelIntegration,getRegisteredTelemetryIntegrations,telemetryWithoutErrorContent};
|
|
@@ -54,11 +54,14 @@ export interface InstrumentationRuntime {
|
|
|
54
54
|
readonly hooks: InstrumentationHooks;
|
|
55
55
|
readonly idGenerator?: AgentSpanIdGenerator;
|
|
56
56
|
readonly instrumentationProviders?: boolean;
|
|
57
|
+
readonly ownsAgentSpans?: boolean;
|
|
57
58
|
readonly prepareSessionTrace?: (event: InstrumentationSessionStartedEvent) => Promise<InstrumentationTraceSeed>;
|
|
58
59
|
readonly prepareTurnTrace?: (event: InstrumentationTurnStartedEvent) => Promise<InstrumentationTraceSeed>;
|
|
59
60
|
otelSettings: OtelHarnessSettings | undefined;
|
|
60
61
|
readonly runtimeContextResolvers?: readonly RuntimeContextResolver[];
|
|
61
62
|
readonly runInContext: InstrumentationContextRunner;
|
|
63
|
+
/** Whether the installed OTel sampler would record a trace with this id. */
|
|
64
|
+
readonly samplesTrace?: (traceId: string) => boolean;
|
|
62
65
|
readonly shutdown: () => Promise<void>;
|
|
63
66
|
stepStartedRuntimeContextResolver?: InstrumentationEvents["step.started"];
|
|
64
67
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{recordErrorOnSpan}from"#internal/logging.js";import{normalizeChannelAudience}from"#shared/channel-audience.js";import{contextStorage}from"#context/container.js";import{ChannelInstrumentationKey,OtelTraceEnabledKey,ParentSessionKey,ParentTraceContextKey,SessionTraceSeedKey}from"#context/keys.js";import{ChannelKey}from"#runtime/sessions/runtime-context-keys.js";import{readSessionTraceDecision}from"#tracing/agent-trace-context-store.js";import{applyAudienceCeiling,shouldCaptureInstrumentationContent}from"#shared/instrumentation-content.js";import{isSampledTrace,resolveTracePolicy,resolveTracePolicyDecision}from"#tracing/sampled-trace.js";import{context,trace}from"#compiled/@opentelemetry/api/index.js";import{attemptIdempotencyKey}from"#instrumentation/lifecycle.js";import{instrumentChannelDelivery}from"#instrumentation/channel-delivery.js";import{buildTelemetryRuntimeContext,snapshotInstrumentationRuntimeContext}from"#instrumentation/runtime-context.js";import{ensureOtelIntegration,getRegisteredTelemetryIntegrations}from"#instrumentation/ai-sdk-telemetry.js";import{createAiSdkHookBridge}from"#instrumentation/ai-sdk-hook-bridge.js";import{createInstrumentationHandleEvent,publishInputResolutions}from"#instrumentation/native-events.js";import{prepareTurnTraceContext}from"#instrumentation/prepare-trace-context.js";import{resolveParentLineage}from"#instrumentation/parent-lineage.js";const INSTRUMENTATION_RUNTIME_KEY=Symbol.for(`eve.instrumentation-runtime`),TURN_TRACE_STATE_KEY=`eve.harness.turnTrace`;function bindInstrumentationRuntime(i,l,u){if(i===void 0)return;let d=i.hooks,readSessionContext=()=>{let e=contextStorage.getStore()??l;return{channel:e.get(ChannelKey),context:e,instrumentation:e.get(ChannelInstrumentationKey),parent:e.get(ParentSessionKey),parentTraceContext:e.get(ParentTraceContextKey),traceSeed:e.get(SessionTraceSeedKey)}},bindHooks=e=>{let n=e.instrumentation;return d.forTrace?.({agentName:u.agentName,audience:normalizeChannelAudience(n?.metadata.audience),channelType:n?.channelType})??d},captureExecutionRuntime=()=>{let e=i.otelSettings;return e!==void 0&&ensureOtelIntegration(),{otelSettings:e,runtimeContextResolvers:i.runtimeContextResolvers,stepStartedRuntimeContextResolver:i.stepStartedRuntimeContextResolver,tracer:e===void 0?void 0:trace.getTracer(`eve`)}},preparePreamble=(e,n)=>{let r=n.instrumentation,a=normalizeChannelAudience(r?.metadata.audience);return prepareTurnTraceContext({...e,agentName:u.agentName,channelAudience:a,channelType:r?.channelType,instrumentation:i,parentLineage:resolveParentLineage(n.parent,n.channel),parentTraceContext:n.parentTraceContext,rootSessionId:n.parent?.rootSessionId??u.rootSessionId,sessionId:u.sessionId,traceSeed:n.traceSeed})};return{createCancellationHandleEvent:e=>{let t=readSessionContext();return createInstrumentationHandleEvent({agentName:u.agentName,channelKind:t.instrumentation?.kind,handleEvent:e.handleEvent,hooks:bindHooks(t),sessionId:u.sessionId,turnId:e.turnId})},flush:i.forceFlush,instrumentChannelDelivery:e=>instrumentChannelDelivery({...e,hooks:d,policyAgentName:u.agentName}),prepareExecution:()=>{let n=captureExecutionRuntime();return{runStep:async(r,a)=>{let o=readSessionContext(),s=bindHooks(o),c=n.otelSettings,l=resolveStepInstrumentationDecision(c,u.agentName,o.instrumentation,o.traceSeed,readSessionTraceDecision(o.context,u.sessionId)),d=n.tracer,f={"eve.environment":r.environment,"eve.session.id":r.session.sessionId,"eve.version":r.eveVersion},p=c?.functionId??u.agentName;p&&(f[`ai.telemetry.functionId`]=p);let m=d!==void 0&&l?.action!==`drop`&&r.hasInput?d.startSpan(`ai.eve.turn`,{attributes:f}):void 0,h=m?.spanContext(),g=h===void 0?r.session:{...r.session,state:{...r.session.state,[TURN_TRACE_STATE_KEY]:{spanId:h.spanId,traceFlags:h.traceFlags,traceId:h.traceId}}},_=m===void 0?void 0:trace.setSpan(context.active(),m);if(_===void 0&&d!==void 0){let e=r.session.state?.[TURN_TRACE_STATE_KEY];e!==void 0&&(_=trace.setSpan(context.active(),trace.wrapSpanContext({...e,isRemote:!0})))}let v=readSessionContext(),y=snapshotInstrumentationRuntimeContext(v.context),b=v.instrumentation,x=normalizeChannelAudience(b?.metadata.audience),S=shouldCaptureInstrumentationContent(x),C=l===void 0?void 0:applyAudienceCeiling(l,x),w=l?.action===`drop`,T={recordInputs:!w&&(C?.action===`record`?C.recordInputs:S)&&(c?.recordInputs??!1),recordOutputs:!w&&(C?.action===`record`?C.recordOutputs:S)&&(c?.recordOutputs??!1)},telemetry=e=>{if(c===void 0&&e.bridgeIntegration===void 0)return;let t={};for(let n of Object.keys(e.runtimeContext??{}))t[n]=!0;let
|
|
1
|
+
import{recordErrorOnSpan}from"#internal/logging.js";import{normalizeChannelAudience}from"#shared/channel-audience.js";import{contextStorage}from"#context/container.js";import{ChannelInstrumentationKey,OtelTraceEnabledKey,ParentSessionKey,ParentTraceContextKey,SessionTraceSeedKey}from"#context/keys.js";import{ChannelKey}from"#runtime/sessions/runtime-context-keys.js";import{readSessionTraceDecision}from"#tracing/agent-trace-context-store.js";import{applyAudienceCeiling,shouldCaptureInstrumentationContent}from"#shared/instrumentation-content.js";import{isSampledTrace,resolveTracePolicy,resolveTracePolicyDecision}from"#tracing/sampled-trace.js";import{context,trace}from"#compiled/@opentelemetry/api/index.js";import{attemptIdempotencyKey}from"#instrumentation/lifecycle.js";import{instrumentChannelDelivery}from"#instrumentation/channel-delivery.js";import{buildTelemetryRuntimeContext,snapshotInstrumentationRuntimeContext}from"#instrumentation/runtime-context.js";import{ensureOtelIntegration,getRegisteredTelemetryIntegrations}from"#instrumentation/ai-sdk-telemetry.js";import{createAiSdkHookBridge}from"#instrumentation/ai-sdk-hook-bridge.js";import{createInstrumentationHandleEvent,publishInputResolutions}from"#instrumentation/native-events.js";import{prepareTurnTraceContext}from"#instrumentation/prepare-trace-context.js";import{resolveParentLineage}from"#instrumentation/parent-lineage.js";const INSTRUMENTATION_RUNTIME_KEY=Symbol.for(`eve.instrumentation-runtime`),TURN_TRACE_STATE_KEY=`eve.harness.turnTrace`;function bindInstrumentationRuntime(i,l,u){if(i===void 0)return;let d=i.hooks,readSessionContext=()=>{let e=contextStorage.getStore()??l;return{channel:e.get(ChannelKey),context:e,instrumentation:e.get(ChannelInstrumentationKey),parent:e.get(ParentSessionKey),parentTraceContext:e.get(ParentTraceContextKey),traceSeed:e.get(SessionTraceSeedKey)}},bindHooks=e=>{let n=e.instrumentation;return d.forTrace?.({agentName:u.agentName,audience:normalizeChannelAudience(n?.metadata.audience),channelType:n?.channelType})??d},captureExecutionRuntime=()=>{let e=i.otelSettings,t=i.ownsAgentSpans===!0;return e!==void 0&&!t&&ensureOtelIntegration(),{ownsAgentSpans:t,otelSettings:e,runtimeContextResolvers:i.runtimeContextResolvers,stepStartedRuntimeContextResolver:i.stepStartedRuntimeContextResolver,tracer:e===void 0?void 0:trace.getTracer(`eve`)}},preparePreamble=(e,n)=>{let r=n.instrumentation,a=normalizeChannelAudience(r?.metadata.audience);return prepareTurnTraceContext({...e,agentName:u.agentName,channelAudience:a,channelType:r?.channelType,instrumentation:i,parentLineage:resolveParentLineage(n.parent,n.channel),parentTraceContext:n.parentTraceContext,rootSessionId:n.parent?.rootSessionId??u.rootSessionId,sessionId:u.sessionId,traceSeed:n.traceSeed})};return{createCancellationHandleEvent:e=>{let t=readSessionContext();return createInstrumentationHandleEvent({agentName:u.agentName,channelKind:t.instrumentation?.kind,handleEvent:e.handleEvent,hooks:bindHooks(t),sessionId:u.sessionId,turnId:e.turnId})},flush:i.forceFlush,instrumentChannelDelivery:e=>instrumentChannelDelivery({...e,hooks:d,policyAgentName:u.agentName}),prepareExecution:()=>{let n=captureExecutionRuntime();return{runStep:async(r,a)=>{let o=readSessionContext(),s=bindHooks(o),c=n.otelSettings,l=resolveStepInstrumentationDecision(c,u.agentName,o.instrumentation,o.traceSeed,readSessionTraceDecision(o.context,u.sessionId)),d=n.tracer,f={"eve.environment":r.environment,"eve.session.id":r.session.sessionId,"eve.version":r.eveVersion},p=c?.functionId??u.agentName;p&&(f[`ai.telemetry.functionId`]=p);let m=d!==void 0&&!n.ownsAgentSpans&&l?.action!==`drop`&&r.hasInput?d.startSpan(`ai.eve.turn`,{attributes:f}):void 0,h=m?.spanContext(),g=h===void 0?r.session:{...r.session,state:{...r.session.state,[TURN_TRACE_STATE_KEY]:{spanId:h.spanId,traceFlags:h.traceFlags,traceId:h.traceId}}},_=m===void 0?void 0:trace.setSpan(context.active(),m);if(_===void 0&&d!==void 0){let e=r.session.state?.[TURN_TRACE_STATE_KEY];e!==void 0&&(_=trace.setSpan(context.active(),trace.wrapSpanContext({...e,isRemote:!0})))}let v=readSessionContext(),y=snapshotInstrumentationRuntimeContext(v.context),b=v.instrumentation,x=normalizeChannelAudience(b?.metadata.audience),S=shouldCaptureInstrumentationContent(x),C=l===void 0?void 0:applyAudienceCeiling(l,x),w=l?.action===`drop`,T={recordInputs:!w&&(C?.action===`record`?C.recordInputs:S)&&(c?.recordInputs??!1),recordOutputs:!w&&(C?.action===`record`?C.recordOutputs:S)&&(c?.recordOutputs??!1)},telemetry=e=>{if(c===void 0&&e.bridgeIntegration===void 0)return;let t={};for(let n of Object.keys(e.runtimeContext??{}))t[n]=!0;let r=c!==void 0&&!(T.recordInputs&&T.recordOutputs),integrations=()=>getRegisteredTelemetryIntegrations({...n.ownsAgentSpans?{excludeEveOtelIntegration:!0}:void 0,sanitizeEveOtelErrors:r});return{functionId:c?.functionId??u.agentName,includeRuntimeContext:t,integrations:e.bridgeIntegration===void 0?r?[...integrations()]:void 0:[e.bridgeIntegration,...integrations()],isEnabled:!0,recordInputs:T.recordInputs,recordOutputs:T.recordOutputs}},run=()=>a({createHandleEvent:e=>createInstrumentationHandleEvent({...e,agentName:u.agentName,channelAudience:x,channelKind:b?.kind,hooks:s,parentLineage:resolveParentLineage(v.parent,v.channel),parentTraceContext:v.parentTraceContext,rootSessionId:v.parent?.rootSessionId,sessionId:u.sessionId}),prepareAttempt:e=>{let t={attemptId:`${u.sessionId}:${e.turnId}:${e.stepIndex}:${e.attemptIndex}`,attemptIndex:e.attemptIndex,channelAudience:x,functionId:c?.functionId??u.agentName,rootSessionId:v.parent?.rootSessionId??u.sessionId,sessionId:u.sessionId,stepIndex:e.stepIndex,turnId:e.turnId},n=createAiSdkHookBridge(t,s,i.runInContext,e.runtimeContext);return{complete:()=>s.publish({idempotencyKey:attemptIdempotencyKey(t),scope:t,type:`step.attempt.completed`}),fail:e=>s.publish({error:e,idempotencyKey:attemptIdempotencyKey(t),scope:t,type:`step.attempt.failed`}),scope:t,telemetry:telemetry({bridgeIntegration:n,runtimeContext:e.runtimeContext})}},preparePreamble:e=>preparePreamble(e,v),publishInputResolutions:e=>publishInputResolutions({...e,hooks:s}),recordError:t=>{m!==void 0&&recordErrorOnSpan(m,t)},resolveRuntimeContext:e=>{let r=normalizeChannelAudience(y.channel?.metadata.audience);return buildTelemetryRuntimeContext({...e,capturesContent:shouldCaptureInstrumentationContent(r),context:y,providerResolvers:n.runtimeContextResolvers,stepStartedResolver:n.stepStartedRuntimeContextResolver})},session:g,setTurnId:e=>m?.setAttribute(`eve.turn.id`,e),telemetry:()=>telemetry({}),traceContext:h===void 0||!isValidSpanContext(h)?void 0:{spanId:h.spanId,traceFlags:h.traceFlags,traceId:h.traceId}});try{return _===void 0?await run():await context.with(_,run)}finally{m?.end(),m=void 0}}}},preparePreamble:e=>preparePreamble(e,readSessionContext())}}function bindSessionInstrumentation(e){return bindInstrumentationRuntime(getInstrumentationRuntime(),e.ctx,{agentName:e.agentName,rootSessionId:e.rootSessionId,sessionId:e.sessionId})}function initializeSessionInstrumentation(e){let n=getInstrumentationRuntime(),a=e.ctx.get(ChannelInstrumentationKey),o=normalizeChannelAudience(a?.metadata.audience),c=allocateSessionTraceSeed({agentName:e.agentName,audience:o,channelType:a?.channelType,parentTraceContext:e.parentTraceContext,runtime:n});c!==void 0&&e.ctx.set(SessionTraceSeedKey,c),e.ctx.set(OtelTraceEnabledKey,n?.prepareSessionTrace!==void 0)}function allocateSessionTraceSeed(e){if(e.parentTraceContext!==void 0)return{decision:e.parentTraceContext.decision??resolveTracePolicyDecision(isSampledTrace(e.parentTraceContext),e.audience),spanId:e.parentTraceContext.spanId,traceFlags:e.parentTraceContext.traceFlags,traceId:e.parentTraceContext.traceId};if(e.runtime?.prepareSessionTrace===void 0||e.runtime.idGenerator===void 0)return;let t=resolveTracePolicy(e.runtime.otelSettings?.tracePolicy,{agentName:e.agentName,audience:e.audience,channelType:e.channelType}),n=e.runtime.idGenerator.generateTraceId(),r=t.action===`record`&&(e.runtime.samplesTrace?.(n)??!0);return{decision:t,spanId:e.runtime.idGenerator.allocateSpanId(),traceFlags:+!!r,traceId:n}}function resolveStepInstrumentationDecision(e,n,r,i,a){if(e===void 0)return;if(i?.decision!==void 0)return i.decision;if(a!==void 0)return a;let o=normalizeChannelAudience(r?.metadata.audience);return i===void 0?resolveTracePolicy(e.tracePolicy,{agentName:n,audience:o,channelType:r?.channelType}):resolveTracePolicyDecision(isSampledTrace(i),o)}function isValidSpanContext(e){return/^[0-9a-f]{32}$/u.test(e.traceId)&&e.traceId!==`00000000000000000000000000000000`&&/^[0-9a-f]{16}$/u.test(e.spanId)&&e.spanId!==`0000000000000000`}const globalRuntime=globalThis;function registerInstrumentationRuntime(e){let t=globalRuntime[INSTRUMENTATION_RUNTIME_KEY];return t===void 0?(globalRuntime[INSTRUMENTATION_RUNTIME_KEY]=e,e):(t.otelSettings=e.otelSettings,t)}function getInstrumentationRuntime(){return globalRuntime[INSTRUMENTATION_RUNTIME_KEY]}export{bindInstrumentationRuntime,bindSessionInstrumentation,getInstrumentationRuntime,initializeSessionInstrumentation,registerInstrumentationRuntime};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const EVE_INTERNAL_BUILD_OUTPUT_DIRECTORY_ENV=`EVE_INTERNAL_BUILD_OUTPUT_DIRECTORY`,EVE_INTERNAL_HOST_BUILD_OUTPUT_DIRECTORY_ENV=`EVE_INTERNAL_HOST_BUILD_OUTPUT_DIRECTORY`;export{EVE_INTERNAL_BUILD_OUTPUT_DIRECTORY_ENV,EVE_INTERNAL_HOST_BUILD_OUTPUT_DIRECTORY_ENV};
|