eve 0.37.0 → 0.37.1
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 +16 -0
- package/dist/src/channel/routes.d.ts +13 -3
- package/dist/src/channel/routes.js +1 -1
- package/dist/src/channel/session-callback.js +1 -1
- package/dist/src/channel/session.d.ts +2 -1
- package/dist/src/channel/session.js +1 -1
- package/dist/src/channel/types.d.ts +41 -0
- package/dist/src/chunks/{use-eve-agent-CnppTEFk.js → use-eve-agent-Bi5fRxcZ.js} +9 -1
- package/dist/src/chunks/{use-eve-agent-COmP-H8R.js → use-eve-agent-DbKUBhl-.js} +9 -1
- package/dist/src/cli/commands/init-git.js +1 -1
- package/dist/src/cli/commands/init-recovery.d.ts +3 -0
- package/dist/src/cli/commands/init-recovery.js +3 -0
- package/dist/src/cli/commands/init-target.d.ts +21 -0
- package/dist/src/cli/commands/init-target.js +1 -0
- package/dist/src/cli/commands/init.js +1 -1
- package/dist/src/cli/dev/tui/runner.d.ts +8 -0
- package/dist/src/cli/dev/tui/runner.js +1 -1
- package/dist/src/cli/dev/tui/subagent-pump.d.ts +27 -22
- package/dist/src/cli/dev/tui/subagent-pump.js +1 -1
- package/dist/src/cli/dev/tui/terminal-renderer.d.ts +16 -0
- package/dist/src/cli/dev/tui/terminal-renderer.js +12 -12
- package/dist/src/cli/dev/tui/tool-presentation.js +1 -1
- package/dist/src/client/open-stream.d.ts +2 -0
- package/dist/src/client/open-stream.js +1 -1
- package/dist/src/client/session.js +1 -1
- package/dist/src/compiled/.vendor-stamp.json +2 -1
- package/dist/src/compiled/@modelcontextprotocol/server/LICENSE +216 -0
- package/dist/src/compiled/@modelcontextprotocol/server/index.d.ts +98 -0
- package/dist/src/compiled/@modelcontextprotocol/server/index.js +80 -0
- package/dist/src/compiler/extension-compatibility.d.ts +10 -10
- package/dist/src/compiler/extension-compatibility.js +1 -1
- package/dist/src/compiler/manifest.js +1 -1
- package/dist/src/compiler/normalize-agent-config.js +1 -1
- package/dist/src/compiler/normalize-manifest.js +1 -1
- package/dist/src/compiler/normalize-subagent.d.ts +1 -1
- package/dist/src/compiler/normalize-subagent.js +1 -1
- package/dist/src/context/serialized-dynamic-model-selection.d.ts +2 -0
- package/dist/src/context/serialized-dynamic-model-selection.js +1 -0
- package/dist/src/execution/agent-handle-dispatch.d.ts +15 -1
- package/dist/src/execution/agent-handle-dispatch.js +1 -1
- package/dist/src/execution/cancel-descendant-turns-step.js +1 -1
- package/dist/src/execution/delegated-parent-notification.d.ts +17 -0
- package/dist/src/execution/delegated-parent-notification.js +1 -1
- package/dist/src/execution/deliver-payloads.js +1 -1
- package/dist/src/execution/dispatch-runtime-actions-shared.d.ts +155 -0
- package/dist/src/execution/dispatch-runtime-actions-shared.js +1 -0
- package/dist/src/execution/dispatch-runtime-actions-step.d.ts +18 -14
- package/dist/src/execution/dispatch-runtime-actions-step.js +1 -1
- package/dist/src/execution/dispatch-workflow-runtime-actions-step.d.ts +7 -2
- package/dist/src/execution/dispatch-workflow-runtime-actions-step.js +1 -1
- package/dist/src/execution/effective-output-schema.d.ts +21 -0
- package/dist/src/execution/effective-output-schema.js +1 -0
- package/dist/src/execution/eve-workflow-attributes.d.ts +2 -0
- package/dist/src/execution/node-step.js +1 -1
- package/dist/src/execution/parked-delivery-wait.d.ts +8 -12
- package/dist/src/execution/parked-delivery-wait.js +1 -1
- package/dist/src/execution/{route-proxied-deliver-step.d.ts → proxied-deliver-step.d.ts} +7 -4
- package/dist/src/execution/proxied-deliver-step.js +1 -0
- package/dist/src/execution/remote-agent-dispatch.d.ts +32 -0
- package/dist/src/execution/remote-agent-dispatch.js +1 -1
- package/dist/src/execution/remote-agent-route-url.d.ts +2 -0
- package/dist/src/execution/remote-agent-route-url.js +1 -0
- package/dist/src/execution/route-child-delivery.d.ts +2 -1
- package/dist/src/execution/route-child-delivery.js +1 -1
- package/dist/src/execution/session-callback-step.d.ts +11 -0
- package/dist/src/execution/session-callback-step.js +1 -1
- package/dist/src/execution/session-command-wire.js +1 -1
- package/dist/src/execution/session-state-cursor.d.ts +25 -0
- package/dist/src/execution/session-state-cursor.js +1 -0
- package/dist/src/execution/settle-cancelled-turn-step.d.ts +2 -0
- package/dist/src/execution/settle-cancelled-turn-step.js +1 -1
- package/dist/src/execution/subagent-event-proxy-step.d.ts +15 -0
- package/dist/src/execution/subagent-event-proxy-step.js +1 -1
- package/dist/src/execution/subagent-hitl-proxy.d.ts +14 -7
- package/dist/src/execution/subagent-hitl-proxy.js +1 -1
- package/dist/src/execution/subagent-start-local.d.ts +29 -0
- package/dist/src/execution/subagent-start-local.js +1 -0
- package/dist/src/execution/subagent-start-remote.d.ts +23 -0
- package/dist/src/execution/subagent-start-remote.js +1 -0
- package/dist/src/execution/task-event-callback.d.ts +13 -0
- package/dist/src/execution/task-event-callback.js +1 -0
- package/dist/src/execution/task-input-capability.d.ts +4 -0
- package/dist/src/execution/task-input-capability.js +1 -0
- package/dist/src/execution/tasks/child/steps.d.ts +46 -0
- package/dist/src/execution/tasks/child/steps.js +1 -0
- package/dist/src/execution/tasks/child/workflow.d.ts +31 -0
- package/dist/src/execution/tasks/child/workflow.js +1 -0
- package/dist/src/execution/tasks/parent/agent-identity.d.ts +13 -0
- package/dist/src/execution/tasks/parent/agent-identity.js +1 -0
- package/dist/src/execution/tasks/parent/agent-views.d.ts +6 -0
- package/dist/src/execution/tasks/parent/agent-views.js +1 -0
- package/dist/src/execution/tasks/parent/continuation-dispatch.d.ts +37 -0
- package/dist/src/execution/tasks/parent/continuation-dispatch.js +1 -0
- package/dist/src/execution/tasks/parent/control-shared.d.ts +36 -0
- package/dist/src/execution/tasks/parent/control-shared.js +1 -0
- package/dist/src/execution/tasks/parent/delegate.d.ts +70 -0
- package/dist/src/execution/tasks/parent/delegate.js +1 -0
- package/dist/src/execution/tasks/parent/dispatch-task-step.d.ts +19 -0
- package/dist/src/execution/tasks/parent/dispatch-task-step.js +1 -0
- package/dist/src/execution/tasks/parent/dispatch.d.ts +33 -0
- package/dist/src/execution/tasks/parent/dispatch.js +1 -0
- package/dist/src/execution/tasks/parent/hitl-proxy-steps.d.ts +29 -0
- package/dist/src/execution/tasks/parent/hitl-proxy-steps.js +1 -0
- package/dist/src/execution/tasks/parent/run-parent.d.ts +72 -0
- package/dist/src/execution/tasks/parent/run-parent.js +1 -0
- package/dist/src/execution/tasks/parent/send.d.ts +25 -0
- package/dist/src/execution/tasks/parent/send.js +1 -0
- package/dist/src/execution/tasks/workflow-target.d.ts +2 -0
- package/dist/src/execution/tasks/workflow-target.js +1 -0
- package/dist/src/execution/terminate-child-sessions-step.d.ts +1 -0
- package/dist/src/execution/terminate-child-sessions-step.js +1 -1
- package/dist/src/execution/turn-control-receiver.d.ts +10 -0
- package/dist/src/execution/turn-control-receiver.js +1 -1
- package/dist/src/execution/turn-dispatch.d.ts +2 -0
- package/dist/src/execution/turn-dispatch.js +1 -1
- package/dist/src/execution/turn-execution-cursor.d.ts +2 -8
- package/dist/src/execution/turn-execution-cursor.js +1 -1
- package/dist/src/execution/turn-workflow.js +1 -1
- package/dist/src/execution/workflow-callback-url.d.ts +5 -0
- package/dist/src/execution/workflow-callback-url.js +1 -1
- package/dist/src/execution/workflow-entry.js +1 -1
- package/dist/src/execution/workflow-runtime.d.ts +9 -0
- package/dist/src/execution/workflow-runtime.js +1 -1
- package/dist/src/execution/workflow-steps.d.ts +7 -21
- package/dist/src/execution/workflow-steps.js +1 -1
- package/dist/src/harness/advertised-tools.js +1 -1
- package/dist/src/harness/authorization.js +1 -1
- package/dist/src/harness/execute-tool.d.ts +7 -0
- package/dist/src/harness/handles/prompt.d.ts +12 -0
- package/dist/src/harness/handles/prompt.js +2 -1
- package/dist/src/harness/handles/query.js +1 -1
- package/dist/src/harness/handles/store.d.ts +9 -2
- package/dist/src/harness/handles/store.js +1 -1
- package/dist/src/harness/handles/transitions.d.ts +10 -1
- package/dist/src/harness/handles/transitions.js +1 -1
- package/dist/src/harness/proxy-input-requests.d.ts +21 -4
- package/dist/src/harness/proxy-input-requests.js +1 -1
- package/dist/src/harness/runtime-actions.d.ts +2 -0
- package/dist/src/harness/runtime-actions.js +1 -1
- package/dist/src/harness/session-limit-enforcement.js +1 -1
- package/dist/src/harness/tool-loop.js +2 -2
- package/dist/src/harness/workflow-runtime-action-state.js +1 -1
- package/dist/src/internal/application/package.js +1 -1
- package/dist/src/internal/authored-definition/core.js +1 -1
- package/dist/src/internal/invocation/agent-invocation.d.ts +54 -0
- package/dist/src/internal/invocation/agent-invocation.js +1 -0
- package/dist/src/internal/invocation/attributes.d.ts +2 -0
- package/dist/src/internal/invocation/attributes.js +1 -0
- package/dist/src/internal/invocation/metadata.d.ts +9 -0
- package/dist/src/internal/invocation/metadata.js +1 -0
- package/dist/src/internal/invocation/workflow-execution.d.ts +32 -0
- package/dist/src/internal/invocation/workflow-execution.js +1 -0
- package/dist/src/internal/mcp/http-security.d.ts +12 -0
- package/dist/src/internal/mcp/http-security.js +1 -0
- package/dist/src/internal/mcp/protected-resource.d.ts +9 -0
- package/dist/src/internal/mcp/protected-resource.js +1 -0
- package/dist/src/internal/mcp/streamable-http-server.d.ts +51 -0
- package/dist/src/internal/mcp/streamable-http-server.js +1 -0
- package/dist/src/internal/nitro/routes/channel-dispatch.js +1 -1
- package/dist/src/internal/nitro/routes/channel-route-context.d.ts +14 -0
- package/dist/src/internal/nitro/routes/channel-route-context.js +1 -1
- package/dist/src/internal/nitro/routes/runtime-stack.d.ts +2 -0
- package/dist/src/internal/nitro/routes/runtime-stack.js +1 -1
- package/dist/src/internal/vercel-agent-summary.d.ts +1 -1
- package/dist/src/protocol/message.d.ts +28 -0
- package/dist/src/protocol/message.js +2 -2
- package/dist/src/protocol/routes.d.ts +14 -0
- package/dist/src/protocol/routes.js +1 -1
- package/dist/src/public/channels/auth.d.ts +36 -0
- package/dist/src/public/channels/auth.js +1 -1
- package/dist/src/public/channels/eve.js +1 -1
- package/dist/src/public/channels/mcp.d.ts +19 -0
- package/dist/src/public/channels/mcp.js +1 -0
- package/dist/src/public/definitions/channel.d.ts +2 -2
- package/dist/src/public/definitions/channel.js +1 -1
- package/dist/src/react/use-eve-agent.js +1 -1
- package/dist/src/runtime/actions/types.d.ts +9 -0
- package/dist/src/runtime/actions/types.js +1 -1
- package/dist/src/runtime/agent/bootstrap.js +1 -1
- package/dist/src/runtime/connections/authorization-complete-page.js +70 -28
- package/dist/src/runtime/framework-channels/index.js +1 -1
- package/dist/src/runtime/framework-tools/index.js +1 -1
- package/dist/src/runtime/framework-tools/tasks.d.ts +95 -0
- package/dist/src/runtime/framework-tools/tasks.js +1 -0
- package/dist/src/runtime/prompt/compose.d.ts +1 -0
- package/dist/src/runtime/prompt/compose.js +1 -1
- package/dist/src/runtime/resolve-agent-graph.js +1 -1
- package/dist/src/runtime/resolve-agent.js +1 -1
- package/dist/src/runtime/session-callback-route.js +1 -1
- package/dist/src/runtime/task-input-response-route.d.ts +5 -0
- package/dist/src/runtime/task-input-response-route.js +1 -0
- package/dist/src/setup/scaffold/create/add-to-project.js +1 -1
- package/dist/src/setup/scaffold/create/project.js +1 -1
- package/dist/src/shared/agent-definition.d.ts +7 -0
- package/dist/src/svelte/index.js +1 -1
- package/dist/src/svelte/use-eve-agent.js +1 -1
- package/dist/src/tasks/json.d.ts +88 -0
- package/dist/src/tasks/json.js +1 -0
- package/dist/src/tasks/session-index.d.ts +48 -0
- package/dist/src/tasks/session-index.js +1 -0
- package/dist/src/tasks/task-id.d.ts +34 -0
- package/dist/src/tasks/task-id.js +1 -0
- package/dist/src/tasks/transitions.d.ts +23 -0
- package/dist/src/tasks/transitions.js +1 -0
- package/dist/src/tasks/types.d.ts +295 -0
- package/dist/src/tasks/types.js +1 -0
- package/dist/src/tasks/wire.d.ts +26 -0
- package/dist/src/tasks/wire.js +1 -0
- package/dist/src/vue/index.js +1 -1
- package/dist/src/vue/use-eve-agent.js +1 -1
- package/docs/channels/eve.mdx +14 -0
- package/docs/guides/client/streaming.mdx +1 -1
- package/docs/tools/human-in-the-loop.md +3 -1
- package/package.json +7 -1
- package/dist/src/execution/route-proxied-deliver-step.js +0 -1
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
const AGENTS_SNIPPET_LABEL=`[Agents]`;function projectParkedAgentHandles(e){return e.handles.filter(e=>e.phase===`parked`)}function renderAgentsSnippet(t){let n=projectParkedAgentHandles(t).map(e=>`<agent id="${escapeXml(e.identity.id)}" name="${escapeXml(e.identity.name)}">${escapeXml(e.lastStatus===``?`(no status)`:e.lastStatus)}</agent>`);return[AGENTS_SNIPPET_LABEL,`<agents>`,...n,`</agents>`].join(`
|
|
2
|
-
`)}function
|
|
2
|
+
`)}function renderAgentViewsSnippet(t){let n=t.map(e=>{let t=e.taskId===void 0||e.taskStatus===void 0?``:` taskId="${escapeXml(e.taskId)}" taskStatus="${e.taskStatus}"`,n=e.statusLine??(e.availability===`busy`?`(busy)`:`(available)`);return`<agent id="${escapeXml(e.id)}" name="${escapeXml(e.name)}" availability="${e.availability}"${t}>${escapeXml(n)}</agent>`});return[AGENTS_SNIPPET_LABEL,`<agents>`,...n,`</agents>`].join(`
|
|
3
|
+
`)}function resolveAgentsAnnouncement(e){let t=e.messages.findLast(e=>e.role===`user`&&typeof e.content==`string`&&e.content.startsWith(`[Agents]`)),n=e.store??{handles:[]},r=e.agentViews?.length??projectParkedAgentHandles(n).length;if(t===void 0&&r===0)return;let i=e.agentViews===void 0?renderAgentsSnippet(n):renderAgentViewsSnippet(e.agentViews);return t?.content===i?void 0:i}function escapeXml(e){return e.replaceAll(`&`,`&`).replaceAll(`"`,`"`).replaceAll(`<`,`<`).replaceAll(`>`,`>`)}export{AGENTS_SNIPPET_LABEL,projectParkedAgentHandles,renderAgentViewsSnippet,renderAgentsSnippet,resolveAgentsAnnouncement};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{AGENT_HANDLES_STATE_KEY}from"#harness/handles/state-key.js";function readAgentHandles(t){let n=t?.[AGENT_HANDLES_STATE_KEY];if(n===void 0)return[];let r=n.handles;return Array.isArray(r)?r:[]}function findRunningAgentHandle(e,t){return readAgentHandles(e).find(e=>e.phase===`running`&&e.operation.callId===t.callId)}function isResultBoundToRunningHandle(e,t){return t.kind!==`subagent-result`||t.origin===`dispatch`||findRunningAgentHandle(e,{callId:t.callId})!==void 0}function isInboxSubagentResultFromRunningHandle(e,t){return findRunningAgentHandle(e,{callId:t.callId})!==void 0}export{findRunningAgentHandle,isInboxSubagentResultFromRunningHandle,isResultBoundToRunningHandle};
|
|
1
|
+
import{AGENT_HANDLES_STATE_KEY}from"#harness/handles/state-key.js";function readAgentHandles(t){let n=t?.[AGENT_HANDLES_STATE_KEY];if(n===void 0)return[];let r=n.handles;return Array.isArray(r)?r:[]}function findRunningAgentHandle(e,t){return readAgentHandles(e).find(e=>e.phase===`running`&&e.operation.callId===t.callId)}function isResultBoundToRunningHandle(e,t){return t.kind!==`subagent-result`||t.origin===`dispatch`||t.backgroundTask!==void 0||findRunningAgentHandle(e,{callId:t.callId})!==void 0}function isInboxSubagentResultFromRunningHandle(e,t){return findRunningAgentHandle(e,{callId:t.callId})!==void 0}export{findRunningAgentHandle,isInboxSubagentResultFromRunningHandle,isResultBoundToRunningHandle};
|
|
@@ -74,7 +74,7 @@ export type AgentAddress = {
|
|
|
74
74
|
/**
|
|
75
75
|
* Durable ownership record for one delegated child.
|
|
76
76
|
*
|
|
77
|
-
*
|
|
77
|
+
* Outside tasks mode, the store owns the full nonterminal lifecycle:
|
|
78
78
|
*
|
|
79
79
|
* - `starting` — the parent committed intent to start; the child may or
|
|
80
80
|
* may not exist yet.
|
|
@@ -82,7 +82,9 @@ export type AgentAddress = {
|
|
|
82
82
|
* - `parked` — the child is idle and resumable; only this phase is
|
|
83
83
|
* model-visible.
|
|
84
84
|
*
|
|
85
|
-
* A terminal child has no handle: settlement deletes it.
|
|
85
|
+
* A terminal child has no legacy handle: settlement deletes it. Tasks mode
|
|
86
|
+
* instead keeps an `addressed` record whose availability is derived from the
|
|
87
|
+
* tasks bound to its persistent child session.
|
|
86
88
|
*/
|
|
87
89
|
export type AgentHandle = {
|
|
88
90
|
readonly phase: "starting";
|
|
@@ -99,6 +101,11 @@ export type AgentHandle = {
|
|
|
99
101
|
readonly identity: AgentIdentity;
|
|
100
102
|
readonly address: AgentAddress;
|
|
101
103
|
readonly lastStatus: string;
|
|
104
|
+
} | {
|
|
105
|
+
/** Persistent task-mode identity and routing, with no execution claim. */
|
|
106
|
+
readonly phase: "addressed";
|
|
107
|
+
readonly identity: AgentIdentity;
|
|
108
|
+
readonly address: AgentAddress;
|
|
102
109
|
};
|
|
103
110
|
/** Lifecycle phase of a delegated agent handle. */
|
|
104
111
|
export type AgentHandlePhase = AgentHandle["phase"];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{AGENT_HANDLES_STATE_KEY}from"./state-key.js";import{z}from"#compiled/zod/index.js";const nonEmptyString=z.string().min(1),identitySchema=z.strictObject({id:nonEmptyString,name:nonEmptyString,nodeId:nonEmptyString}),startOperationSchema=z.strictObject({callId:nonEmptyString,id:nonEmptyString,kind:z.literal(`start`),parentTurnId:nonEmptyString}),continueOperationSchema=z.strictObject({callId:nonEmptyString,id:nonEmptyString,kind:z.literal(`continue`),parentTurnId:nonEmptyString,previousStatus:z.string().max(120)}),startTargetSchema=z.discriminatedUnion(`kind`,[z.strictObject({continuationToken:nonEmptyString,kind:z.literal(`agent/local`)}),z.strictObject({continuationToken:nonEmptyString,kind:z.literal(`agent/self`)}),z.strictObject({callbackBaseUrl:z.url(),kind:z.literal(`agent/remote`),url:z.url()})]),addressSchema=z.discriminatedUnion(`kind`,[z.strictObject({continuationToken:nonEmptyString,kind:z.literal(`agent/local`),sessionId:nonEmptyString}),z.strictObject({continuationToken:nonEmptyString,kind:z.literal(`agent/self`),sessionId:nonEmptyString}),z.strictObject({callbackBaseUrl:z.url(),kind:z.literal(`agent/remote`),sessionId:nonEmptyString,url:z.url()})]),agentHandleSchema=z.discriminatedUnion(`phase`,[z.strictObject({identity:identitySchema,operation:startOperationSchema,phase:z.literal(`starting`),target:startTargetSchema}),z.strictObject({address:addressSchema,identity:identitySchema,operation:z.discriminatedUnion(`kind`,[startOperationSchema,continueOperationSchema]),phase:z.literal(`running`)}),z.strictObject({address:addressSchema,identity:identitySchema,lastStatus:z.string().max(120),phase:z.literal(`parked`)})]),agentHandleStoreSchema=z.strictObject({handles:z.array(agentHandleSchema)}).refine(e=>new Set(e.handles.map(e=>e.identity.id)).size===e.handles.length,{message:`Agent handle ids must be unique.`});function deriveAgentId(e,t){return`ag_${e}:${t.slice(0,12)}`}function formatAgentStatus(e){return(typeof e==`string`?e:JSON.stringify(e)??``).replaceAll(/\s+/g,` `).trim().slice(0,120)}function assertPersistableAgentHandleStore(e){let t=agentHandleStoreSchema.safeParse(e);if(!t.success)throw Error(`Refusing to persist a corrupt agent handle store: ${t.error.message}`);return t.data}function getAgentHandleStore(t){let n=t?.[AGENT_HANDLES_STATE_KEY];if(n===void 0)return;let r=agentHandleStoreSchema.safeParse(n);if(!r.success)throw Error(`Corrupt agent handle store under session state key "${AGENT_HANDLES_STATE_KEY}": ${r.error.message}`);return r.data}export{AGENT_HANDLES_STATE_KEY,assertPersistableAgentHandleStore,deriveAgentId,formatAgentStatus,getAgentHandleStore};
|
|
1
|
+
import{AGENT_HANDLES_STATE_KEY}from"./state-key.js";import{z}from"#compiled/zod/index.js";const nonEmptyString=z.string().min(1),identitySchema=z.strictObject({id:nonEmptyString,name:nonEmptyString,nodeId:nonEmptyString}),startOperationSchema=z.strictObject({callId:nonEmptyString,id:nonEmptyString,kind:z.literal(`start`),parentTurnId:nonEmptyString}),continueOperationSchema=z.strictObject({callId:nonEmptyString,id:nonEmptyString,kind:z.literal(`continue`),parentTurnId:nonEmptyString,previousStatus:z.string().max(120)}),startTargetSchema=z.discriminatedUnion(`kind`,[z.strictObject({continuationToken:nonEmptyString,kind:z.literal(`agent/local`)}),z.strictObject({continuationToken:nonEmptyString,kind:z.literal(`agent/self`)}),z.strictObject({callbackBaseUrl:z.url(),kind:z.literal(`agent/remote`),url:z.url()})]),addressSchema=z.discriminatedUnion(`kind`,[z.strictObject({continuationToken:nonEmptyString,kind:z.literal(`agent/local`),sessionId:nonEmptyString}),z.strictObject({continuationToken:nonEmptyString,kind:z.literal(`agent/self`),sessionId:nonEmptyString}),z.strictObject({callbackBaseUrl:z.url(),kind:z.literal(`agent/remote`),sessionId:nonEmptyString,url:z.url()})]),agentHandleSchema=z.discriminatedUnion(`phase`,[z.strictObject({identity:identitySchema,operation:startOperationSchema,phase:z.literal(`starting`),target:startTargetSchema}),z.strictObject({address:addressSchema,identity:identitySchema,operation:z.discriminatedUnion(`kind`,[startOperationSchema,continueOperationSchema]),phase:z.literal(`running`)}),z.strictObject({address:addressSchema,identity:identitySchema,lastStatus:z.string().max(120),phase:z.literal(`parked`)}),z.strictObject({address:addressSchema,identity:identitySchema,phase:z.literal(`addressed`)})]),agentHandleStoreSchema=z.strictObject({handles:z.array(agentHandleSchema)}).refine(e=>new Set(e.handles.map(e=>e.identity.id)).size===e.handles.length,{message:`Agent handle ids must be unique.`});function deriveAgentId(e,t){return`ag_${e}:${t.slice(0,12)}`}function formatAgentStatus(e){return(typeof e==`string`?e:JSON.stringify(e)??``).replaceAll(/\s+/g,` `).trim().slice(0,120)}function assertPersistableAgentHandleStore(e){let t=agentHandleStoreSchema.safeParse(e);if(!t.success)throw Error(`Refusing to persist a corrupt agent handle store: ${t.error.message}`);return t.data}function getAgentHandleStore(t){let n=t?.[AGENT_HANDLES_STATE_KEY];if(n===void 0)return;let r=agentHandleStoreSchema.safeParse(n);if(!r.success)throw Error(`Corrupt agent handle store under session state key "${AGENT_HANDLES_STATE_KEY}": ${r.error.message}`);return r.data}export{AGENT_HANDLES_STATE_KEY,assertPersistableAgentHandleStore,deriveAgentId,formatAgentStatus,getAgentHandleStore};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type AgentAddress, type AgentHandle, type AgentIdentity, type ContinueOperation, type StartOperation } from "#harness/handles/store.js";
|
|
2
|
-
import type { HarnessSession } from "#harness/types.js";
|
|
2
|
+
import type { HarnessSession, SessionStateMap } from "#harness/types.js";
|
|
3
3
|
import type { AgentTurnOutcome } from "#shared/agent-turn-outcome.js";
|
|
4
4
|
/**
|
|
5
5
|
* Records intent to start a fresh child. Must be applied to the step's
|
|
@@ -68,6 +68,15 @@ export declare function confirmAgentStarted(session: HarnessSession, input: {
|
|
|
68
68
|
readonly operationId: string;
|
|
69
69
|
readonly address: AgentAddress;
|
|
70
70
|
}): HarnessSession;
|
|
71
|
+
/** Confirms a task-mode child as a persistent identity/address record. */
|
|
72
|
+
export declare function confirmTaskAgentAddress(session: HarnessSession, input: {
|
|
73
|
+
readonly operationId: string;
|
|
74
|
+
readonly address: AgentAddress;
|
|
75
|
+
}): HarnessSession;
|
|
76
|
+
/** Removes a task-mode address after permanent delivery failure. */
|
|
77
|
+
export declare function removeTaskAgentAddress(session: HarnessSession, agentId: string): HarnessSession;
|
|
78
|
+
/** State-only variant used while consuming a terminal task wake. */
|
|
79
|
+
export declare function removeTaskAgentAddressFromState(state: SessionStateMap | undefined, agentId: string): SessionStateMap;
|
|
71
80
|
/**
|
|
72
81
|
* Resolves a dispatch that definitively failed.
|
|
73
82
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{AGENT_HANDLES_STATE_KEY,assertPersistableAgentHandleStore,formatAgentStatus,getAgentHandleStore}from"#harness/handles/store.js";function prepareAgentStart(e,t){let n=getAgentHandleStore(e.state)?.handles??[];if(n.some(e=>e.identity.id===t.identity.id))throw Error(`Agent handle "${t.identity.id}" already exists.`);return writeHandles(e,[...n,{identity:t.identity,operation:t.operation,phase:`starting`,target:t.target}])}function prepareAgentContinuation(e,t){let n=getAgentHandleStore(e.state)?.handles??[],i=n.find(e=>e.identity.id===t.agentId);if(i===void 0)return{kind:`unknown`};if(i.identity.name!==t.invokedName)return{kind:`mismatch`};if(i.phase===`running`&&i.operation.id===t.operation.id)return{handle:i,kind:`ready`,session:e};if(i.phase!==`parked`)return{kind:`busy`};let a={address:i.address,identity:i.identity,operation:{...t.operation,previousStatus:i.lastStatus},phase:`running`};return{handle:a,kind:`ready`,session:writeHandles(e,n.map(e=>e.identity.id===t.agentId?a:e))}}function findActiveHandle(e,t){return e.find(e=>e.phase
|
|
1
|
+
import{AGENT_HANDLES_STATE_KEY,assertPersistableAgentHandleStore,formatAgentStatus,getAgentHandleStore}from"#harness/handles/store.js";function prepareAgentStart(e,t){let n=getAgentHandleStore(e.state)?.handles??[];if(n.some(e=>e.identity.id===t.identity.id))throw Error(`Agent handle "${t.identity.id}" already exists.`);return writeHandles(e,[...n,{identity:t.identity,operation:t.operation,phase:`starting`,target:t.target}])}function prepareAgentContinuation(e,t){let n=getAgentHandleStore(e.state)?.handles??[],i=n.find(e=>e.identity.id===t.agentId);if(i===void 0)return{kind:`unknown`};if(i.identity.name!==t.invokedName)return{kind:`mismatch`};if(i.phase===`running`&&i.operation.id===t.operation.id)return{handle:i,kind:`ready`,session:e};if(i.phase!==`parked`)return{kind:`busy`};let a={address:i.address,identity:i.identity,operation:{...t.operation,previousStatus:i.lastStatus},phase:`running`};return{handle:a,kind:`ready`,session:writeHandles(e,n.map(e=>e.identity.id===t.agentId?a:e))}}function findActiveHandle(e,t){return e.find(e=>(e.phase===`starting`||e.phase===`running`)&&e.operation.id===t)}function confirmAgentStarted(e,t){let n=getAgentHandleStore(e.state)?.handles??[],i=findActiveHandle(n,t.operationId);if(i===void 0)throw Error(`No prepared agent handle for operation "${t.operationId}".`);return i.phase===`running`?e:writeHandles(e,n.map(e=>e===i?{address:t.address,identity:i.identity,operation:i.operation,phase:`running`}:e))}function confirmTaskAgentAddress(e,t){let n=getAgentHandleStore(e.state)?.handles??[],i=findActiveHandle(n,t.operationId);if(i===void 0)throw Error(`No prepared agent handle for operation "${t.operationId}".`);if(i.phase===`running`)throw Error(`Task agent operation "${t.operationId}" was confirmed as a running handle.`);return writeHandles(e,n.map(e=>e===i?{address:t.address,identity:i.identity,phase:`addressed`}:e))}function removeTaskAgentAddress(e,t){return{...e,state:removeTaskAgentAddressFromState(e.state,t)}}function removeTaskAgentAddressFromState(n,i){let a=getAgentHandleStore(n)?.handles??[];return{...n,[AGENT_HANDLES_STATE_KEY]:assertPersistableAgentHandleStore({handles:a.filter(e=>!(e.phase===`addressed`&&e.identity.id===i))})}}function rejectAgentEffect(e,t){let n=getAgentHandleStore(e.state)?.handles??[],i=findActiveHandle(n,t.operationId);if(i===void 0)return e;if(t.disposition===`retryable`&&i.phase===`running`){let{operation:t}=i;if(t.kind===`continue`)return writeHandles(e,n.map(e=>e===i?{address:i.address,identity:i.identity,lastStatus:t.previousStatus,phase:`parked`}:e))}return writeHandles(e,n.filter(e=>e!==i))}function abandonRunningAgentTurns(e){let t=getAgentHandleStore(e.state)?.handles??[];return t.some(e=>e.phase===`running`)?writeHandles(e,t.map(e=>e.phase===`running`?{address:e.address,identity:e.identity,lastStatus:`(cancelled)`,phase:`parked`}:e)):e}function settleAgentTurn(e,t){let i=getAgentHandleStore(e.state)?.handles??[],a=i.find(e=>e.phase===`running`&&e.operation.id===t.operationId);if(a===void 0||a.phase!==`running`)return{kind:`ignored`,reason:`unknown-operation`};if(t.outcome.kind===`terminal`)return{kind:`settled`,session:writeHandles(e,i.filter(e=>e!==a))};let{result:o}=t.outcome,s=o.kind===`succeeded`?formatAgentStatus(o.output):o.kind===`failed`?formatAgentStatus(o.error):`(cancelled)`;return{kind:`settled`,session:writeHandles(e,i.map(e=>e===a?{address:a.address,identity:a.identity,lastStatus:s,phase:`parked`}:e))}}function writeHandles(n,r){return{...n,state:{...n.state,[AGENT_HANDLES_STATE_KEY]:assertPersistableAgentHandleStore({handles:r})}}}export{abandonRunningAgentTurns,confirmAgentStarted,confirmTaskAgentAddress,prepareAgentContinuation,prepareAgentStart,rejectAgentEffect,removeTaskAgentAddress,removeTaskAgentAddressFromState,settleAgentTurn};
|
|
@@ -6,12 +6,20 @@ export interface ProxyInputRequest {
|
|
|
6
6
|
/** Batch semantics are optional so sessions written before this field remain routable. */
|
|
7
7
|
readonly batch?: ProxyInputRequestBatch;
|
|
8
8
|
readonly childContinuationToken: string;
|
|
9
|
+
/** Child-local id restored before forwarding a namespaced task response. */
|
|
10
|
+
readonly childRequestId?: string;
|
|
11
|
+
/** Trusted parent-derived capability URL for a remote task child. */
|
|
12
|
+
readonly childResponseUrl?: string;
|
|
9
13
|
readonly kind: InputRequestKind;
|
|
14
|
+
/** Present when the route is authorized by a parent-owned durable task. */
|
|
15
|
+
readonly taskId?: string;
|
|
10
16
|
}
|
|
11
17
|
export interface ProxyInputRequestBatch {
|
|
12
18
|
readonly approvalRequestIds: readonly string[];
|
|
13
19
|
readonly requestIds: readonly string[];
|
|
14
20
|
}
|
|
21
|
+
/** Parent-visible id for one task-owned child-local input request. */
|
|
22
|
+
export declare function createTaskInputRequestId(taskId: string, childRequestId: string): string;
|
|
15
23
|
/**
|
|
16
24
|
* Returns the proxy-routing map as a fresh `Map`. Never returns a live
|
|
17
25
|
* reference so accidental mutation cannot corrupt session state.
|
|
@@ -23,15 +31,22 @@ export declare function getProxyInputRequests(state: SessionStateMap | undefined
|
|
|
23
31
|
*/
|
|
24
32
|
export declare function hasProxyInputRequests(state: SessionStateMap | undefined): boolean;
|
|
25
33
|
/**
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
34
|
+
* Replaces prior entries for `forChildContinuationToken` with the provided
|
|
35
|
+
* ones. A child raising a fresh batch overwrites its prior batch so the
|
|
36
|
+
* parent never keeps stale request metadata. Other children's routes stay
|
|
37
|
+
* independently answerable.
|
|
29
38
|
*/
|
|
30
39
|
export declare function upsertProxyInputRequests(input: {
|
|
31
40
|
readonly entries: readonly (readonly [requestId: string, route: ProxyInputRequest])[];
|
|
32
41
|
readonly forChildContinuationToken: string;
|
|
33
42
|
readonly session: HarnessSession;
|
|
34
43
|
}): HarnessSession;
|
|
44
|
+
/** State-only variant for control-plane steps that already hold a durable projection. */
|
|
45
|
+
export declare function upsertProxyInputRequestState(input: {
|
|
46
|
+
readonly entries: readonly (readonly [requestId: string, route: ProxyInputRequest])[];
|
|
47
|
+
readonly forChildContinuationToken: string;
|
|
48
|
+
readonly state: SessionStateMap | undefined;
|
|
49
|
+
}): SessionStateMap | undefined;
|
|
35
50
|
/**
|
|
36
51
|
* Removes every entry for `childContinuationToken`. Called when a
|
|
37
52
|
* child subagent finishes so stale clicks no longer route to it.
|
|
@@ -41,6 +56,8 @@ export declare function clearProxyInputRequestsForChild(session: HarnessSession,
|
|
|
41
56
|
export declare function retireProxyInputRequests<T extends {
|
|
42
57
|
readonly state?: SessionStateMap;
|
|
43
58
|
}>(session: T, requestIds: readonly string[]): T;
|
|
59
|
+
/** Removes every proxy route owned by one durable task. */
|
|
60
|
+
export declare function clearProxyInputRequestsForTask(session: HarnessSession, taskId: string): HarnessSession;
|
|
44
61
|
/**
|
|
45
62
|
* Removes every proxy entry. Called when a cancelled turn orphans its
|
|
46
63
|
* descendants so stale HITL responses no longer route to them.
|
|
@@ -50,4 +67,4 @@ export declare function clearAllProxyInputRequests(session: HarnessSession): Har
|
|
|
50
67
|
* Projects a {@link SubagentInputRequestHookPayload} into the
|
|
51
68
|
* `(requestId, route)` tuples the session stores.
|
|
52
69
|
*/
|
|
53
|
-
export declare function toProxyInputRequestEntries(payload: SubagentInputRequestHookPayload): readonly (readonly [requestId: string, route: ProxyInputRequest])[];
|
|
70
|
+
export declare function toProxyInputRequestEntries(payload: SubagentInputRequestHookPayload, taskId?: string): readonly (readonly [requestId: string, route: ProxyInputRequest])[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const PROXY_INPUT_REQUESTS_KEY=`eve.runtime.proxyInputRequests`,PROXY_INPUT_REQUEST_KINDS={question:!0,"session-limit":!0,"tool-approval":!0};function getProxyInputRequests(e){return new Map(Object.entries(readMap(e)))}function hasProxyInputRequests(e){for(let t of Object.keys(readMap(e)))return!0;return!1}function upsertProxyInputRequests(e){
|
|
1
|
+
import{isLoopbackHostname}from"#shared/network-address.js";const PROXY_INPUT_REQUESTS_KEY=`eve.runtime.proxyInputRequests`,PROXY_INPUT_REQUEST_KINDS={question:!0,"session-limit":!0,"tool-approval":!0};function createTaskInputRequestId(e,t){return`${e}:${t}`}function getProxyInputRequests(e){return new Map(Object.entries(readMap(e)))}function hasProxyInputRequests(e){for(let t of Object.keys(readMap(e)))return!0;return!1}function upsertProxyInputRequests(e){return{...e.session,state:upsertProxyInputRequestState({entries:e.entries,forChildContinuationToken:e.forChildContinuationToken,state:e.session.state})}}function upsertProxyInputRequestState(e){let n={};for(let[t,r]of Object.entries(readMap(e.state)))r.childContinuationToken!==e.forChildContinuationToken&&(n[t]=r);for(let[t,r]of e.entries)n[t]=r;let r={...e.state};return Object.keys(n).length===0?delete r[PROXY_INPUT_REQUESTS_KEY]:r[PROXY_INPUT_REQUESTS_KEY]=n,Object.keys(r).length>0?r:void 0}function clearProxyInputRequestsForChild(e,t){let n=readMap(e.state),r={},i=!1;for(let[e,a]of Object.entries(n)){if(a.childContinuationToken===t){i=!0;continue}r[e]=a}return i?writeMap(e,r):e}function retireProxyInputRequests(e,t){let n={...readMap(e.state)},r=!1;for(let e of t)Object.hasOwn(n,e)&&(delete n[e],r=!0);return r?writeMap(e,n):e}function clearProxyInputRequestsForTask(e,t){let n=readMap(e.state),r={},i=!1;for(let[e,a]of Object.entries(n))a.taskId===t?i=!0:r[e]=a;return i?writeMap(e,r):e}function clearAllProxyInputRequests(e){return hasProxyInputRequests(e.state)?writeMap(e,{}):e}function toProxyInputRequestEntries(e,t){let n={approvalRequestIds:e.event.requests.flatMap(e=>e.kind===`tool-approval`?[e.requestId]:[]),requestIds:e.event.requests.map(e=>e.requestId)};return e.event.requests.map(r=>{let i={batch:n,childContinuationToken:e.childContinuationToken,kind:r.kind};return t!==void 0&&(i.taskId=t),[r.requestId,i]})}function readMap(e){let n=e?.[PROXY_INPUT_REQUESTS_KEY];if(typeof n!=`object`||!n||Array.isArray(n))return{};let r={};for(let[e,t]of Object.entries(n)){let n=parseProxyInputRequest(t,e);n!==void 0&&(r[e]=n)}return r}function writeMap(e,n){let r={...e.state};return Object.keys(n).length===0?(delete r[PROXY_INPUT_REQUESTS_KEY],{...e,state:Object.keys(r).length>0?r:void 0}):(r[PROXY_INPUT_REQUESTS_KEY]=n,{...e,state:r})}function parseProxyInputRequest(e,t){if(typeof e!=`object`||!e||Array.isArray(e)||!(`childContinuationToken`in e)||!(`kind`in e)||typeof e.childContinuationToken!=`string`||!isInputRequestKind(e.kind))return;let n=`taskId`in e?e.taskId:void 0,r=`childRequestId`in e?e.childRequestId:void 0,i=`childResponseUrl`in e?e.childResponseUrl:void 0;if(n!==void 0&&(typeof n!=`string`||n.length===0)||r!==void 0&&(typeof r!=`string`||r.length===0)||n===void 0!=(r===void 0)||i!==void 0&&(typeof i!=`string`||!isAllowedChildResponseUrl(i)))return;let a=`batch`in e?parseProxyInputRequestBatch(e.batch):void 0,o={childContinuationToken:e.childContinuationToken,kind:e.kind};return a!==void 0&&a.requestIds.includes(t)&&(o.batch=a),typeof r==`string`&&(o.childRequestId=r),typeof i==`string`&&(o.childResponseUrl=i),typeof n==`string`&&(o.taskId=n),o}function parseProxyInputRequestBatch(e){if(typeof e!=`object`||!e||Array.isArray(e)||!(`approvalRequestIds`in e)||!(`requestIds`in e)||!isStringArray(e.approvalRequestIds)||!isStringArray(e.requestIds))return;let t=new Set(e.requestIds);if(!(t.size!==e.requestIds.length||e.approvalRequestIds.some(e=>!t.has(e))))return{approvalRequestIds:e.approvalRequestIds,requestIds:e.requestIds}}function isStringArray(e){return Array.isArray(e)&&e.every(e=>typeof e==`string`)}function isAllowedChildResponseUrl(t){let n;try{n=new URL(t)}catch{return!1}return n.protocol===`https:`||n.protocol===`http:`&&isLoopbackHostname(n.hostname)}function isInputRequestKind(e){return typeof e==`string`&&Object.hasOwn(PROXY_INPUT_REQUEST_KINDS,e)}export{clearAllProxyInputRequests,clearProxyInputRequestsForChild,clearProxyInputRequestsForTask,createTaskInputRequestId,getProxyInputRequests,hasProxyInputRequests,retireProxyInputRequests,toProxyInputRequestEntries,upsertProxyInputRequestState,upsertProxyInputRequests};
|
|
@@ -49,6 +49,8 @@ export declare function setPendingRuntimeActionBatch(input: {
|
|
|
49
49
|
readonly responseMessages: readonly ModelMessage[];
|
|
50
50
|
readonly session: HarnessSession;
|
|
51
51
|
}): HarnessSession;
|
|
52
|
+
/** Rejects an ambiguous action batch before any result or side effect can bind by call id. */
|
|
53
|
+
export declare function assertUniqueRuntimeActionCallIds(actions: readonly RuntimeActionRequest[]): void;
|
|
52
54
|
/**
|
|
53
55
|
* Resolves one pending runtime-action batch back into model history.
|
|
54
56
|
*
|
|
@@ -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{findRunningAgentHandle,isResultBoundToRunningHandle}from"#harness/handles/query.js";import{getRuntimeActionRequestKey}from"#runtime/actions/keys.js";import{resolveRuntimeActionResultsForKeys}from"#runtime/actions/results.js";
|
|
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{accumulateSessionUsage,getTurnUsageState,setTurnUsageState}from"#harness/turn-tag-state.js";import{findRunningAgentHandle,isResultBoundToRunningHandle}from"#harness/handles/query.js";import{getRuntimeActionRequestKey}from"#runtime/actions/keys.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=>getRuntimeActionRequestKey(e)),results:e.results.filter(t=>isResultBoundToRunningHandle(e.state,t))})}async function resolvePendingRuntimeActions(t){let o=getPendingRuntimeActionBatch(t.session.state);if(o===void 0)return{messages:[...t.session.history],outcome:`continue`,session:t.session};let s=resolveReadyRuntimeActionResults({results:t.stepInput?.runtimeActionResults??[],session:t.session});if(s===void 0)return{messages:[...t.session.history],outcome:`unresolved`,session:t.session};if(t.emit!==void 0)for(let n of s){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:o.event.sequence,stepIndex:o.event.stepIndex,turnId:o.event.turnId}))}let c=t.session;for(let e of s){if(e.kind!==`subagent-result`||e.origin!==`child`||readBackgroundTaskReceipt(e)!==void 0)continue;let t=findRunningAgentHandle(c.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&&(c=clearProxyInputRequestsForChild(c,t.address.continuationToken));let a=settleAgentTurn(c,{operationId:t.operation.id,outcome:i});a.kind===`settled`&&(c=a.session)}let l={...c.state};delete l[PENDING_RUNTIME_ACTION_BATCH_KEY],c={...c,state:Object.keys(l).length>0?l:void 0};for(let e of s){if(e.kind!==`subagent-result`)continue;let t=readSubagentResultOutcome(e);t!==void 0&&(c=setTurnUsageState(c,accumulateSessionUsage({previous:getTurnUsageState(c.state),usage:t.usageDelta})))}let u=s.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)}".`)}),d=[...c.history,...o.responseMessages];return u.length>0&&d.push({content:u,role:`tool`}),{messages:d,outcome:`resolved`,session:c}}function readBackgroundTaskReceipt(e){return`backgroundTask`in e?e.backgroundTask:void 0}function createRuntimeActionRequestFromToolCall(e){let t=e.tools.get(e.toolCall.toolName);return t?.frameworkAction===`load-skill`?{callId:e.toolCall.toolCallId,input:resolveToolCallInputObject(e.toolCall.input,{callId:e.toolCall.toolCallId,toolName:e.toolCall.toolName}),kind:`load-skill`}:t?.runtimeAction?.kind===`subagent-call`?{callId:e.toolCall.toolCallId,description:t.description,input:resolveToolCallInputObject(e.toolCall.input,{callId:e.toolCall.toolCallId,toolName:e.toolCall.toolName}),kind:`subagent-call`,name:t.name,nodeId:t.runtimeAction.nodeId,subagentName:t.runtimeAction.subagentName}:t?.runtimeAction?.kind===`remote-agent-call`?{callId:e.toolCall.toolCallId,description:t.description,input:resolveToolCallInputObject(e.toolCall.input,{callId:e.toolCall.toolCallId,toolName:e.toolCall.toolName}),kind:`remote-agent-call`,name:t.name,nodeId:t.runtimeAction.nodeId,remoteAgentName:t.runtimeAction.remoteAgentName??t.name}:{callId:e.toolCall.toolCallId,input:resolveToolCallInputObject(e.toolCall.input,{callId:e.toolCall.toolCallId,toolName:e.toolCall.toolName}),kind:`tool-call`,toolName:e.toolCall.toolName}}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,createRuntimeActionRequestFromToolCall,getPendingRuntimeActionBatch,hasPendingRuntimeActionBatch,resolvePendingRuntimeActions,resolveToolCallInputObject,setPendingRuntimeActionBatch};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createInputRequestedEvent}from"#protocol/message.js";import{emitFailedStep,emitTurnEpilogue,setHarnessEmissionState}from"#harness/emission.js";import{appendPendingInputBatch}from"#harness/input-requests.js";import{
|
|
1
|
+
import{createInputRequestedEvent}from"#protocol/message.js";import{emitFailedStep,emitTurnEpilogue,setHarnessEmissionState}from"#harness/emission.js";import{appendPendingInputBatch}from"#harness/input-requests.js";import{bumpSessionRuntimeTokenLimits,getSessionTokenLimitViolation,getSessionTokenUsage}from"#harness/turn-tag-state.js";import{createSessionLimitContinuationRequest}from"#harness/session-limit-continuation.js";import{SessionLimitDeclinedError}from"#harness/turn-cancellation.js";async function applySessionLimitContinuation(e){if(e.limitContinuation===void 0)return{result:null,session:e.session};if(e.limitContinuation.granted)return{result:null,session:bumpSessionRuntimeTokenLimits(e.session)};if(!(e.config.mode===`conversation`||e.session.continuationToken!==``)){let t=getSessionTokenLimitViolation(e.session);return{result:t===null?{next:{done:!0,output:``},session:e.session}:await failSessionTokenLimit({...e,violation:t}),session:e.session}}throw new SessionLimitDeclinedError}async function enforceSessionTokenLimit(e){let t=getSessionTokenLimitViolation(e.session);if(t===null)return null;let{emit:n}=e;return t.limit>0&&n!==void 0&&(e.config.mode===`conversation`||e.config.capabilities?.requestInput===!0)?parkOnSessionTokenLimit({...e,emit:n,violation:t}):failSessionTokenLimit({...e,violation:t})}async function parkOnSessionTokenLimit(t){let a=createSessionLimitContinuationRequest({sessionId:t.session.sessionId,violation:t.violation}),o=t.emissionState,s=appendPendingInputBatch({event:{sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId},requests:[a],responseMessages:[],session:{...t.session,history:[...t.messages]}});return await t.emit(createInputRequestedEvent({requests:[a],sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId})),t.config.mode===`conversation`&&(o=await emitTurnEpilogue(t.emit,o,t.config.mode)),{next:null,session:setHarnessEmissionState(s,o)}}function formatSessionTokenLimitMessage(e){return`The session reached its configured ${e} token limit.`}async function failSessionTokenLimit(e){let n=getSessionTokenUsage(e.session),r=formatSessionTokenLimitMessage(e.violation.kind),i={inputTokens:n.inputTokens,kind:e.violation.kind,limit:e.violation.limit,outputTokens:n.outputTokens,usedTokens:e.violation.usedTokens};return e.emit&&await emitFailedStep(e.emit,e.emissionState,{code:`SESSION_TOKEN_LIMIT_REACHED`,details:i,message:r,sessionId:e.session.sessionId}),{next:{done:!0,isError:e.config.mode===`task`||void 0,output:e.config.mode===`task`?r:``},session:e.session}}export{applySessionLimitContinuation,enforceSessionTokenLimit};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{createErrorId,createLogger,formatError,logError,recordErrorOnSpan}from"#internal/logging.js";import{isScheduleAppAuth}from"#channel/schedule-auth.js";import{AuthKey,ChannelInstrumentationKey,ParentSessionKey,ParentTraceContextKey,SessionCallbackKey}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,createMessageCompletedEvent,createResultCompletedEvent,createSessionWaitingEvent,createStepStartedEvent}from"#protocol/message.js";import{summarizeKnownError}from"#harness/semantic-errors/index.js";import{resolveProviderHeaders}from"#internal/gateway.js";import{formatLanguageModelGatewayId}from"#internal/runtime-model.js";import{contextStorage}from"#context/container.js";import{ChannelKey}from"#runtime/sessions/runtime-context-keys.js";import{advanceStep,emitFailedStep,emitRecoverableFailedTurn,emitStepStarted,emitStreamContent,emitTurnEpilogue,emitTurnPreamble,getHarnessEmissionState,setHarnessEmissionState}from"#harness/emission.js";import{ToolLoopAgent,isStepCount}from"ai";import{getAgentHandleStore}from"#harness/handles/store.js";import{buildDynamicSubagentTools}from"#context/dynamic-subagent-lifecycle.js";import{normalizeUserContent,resolveAssistantStepText}from"#harness/messages.js";import{createRuntimeActionRequestFromToolCall,resolvePendingRuntimeActions,setPendingRuntimeActionBatch}from"#harness/runtime-actions.js";import{
|
|
1
|
+
import{createErrorId,createLogger,formatError,logError,recordErrorOnSpan}from"#internal/logging.js";import{isScheduleAppAuth}from"#channel/schedule-auth.js";import{AuthKey,ChannelInstrumentationKey,ParentSessionKey,ParentTraceContextKey,SessionCallbackKey}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,createMessageCompletedEvent,createResultCompletedEvent,createSessionWaitingEvent,createStepStartedEvent}from"#protocol/message.js";import{summarizeKnownError}from"#harness/semantic-errors/index.js";import{resolveProviderHeaders}from"#internal/gateway.js";import{formatLanguageModelGatewayId}from"#internal/runtime-model.js";import{contextStorage}from"#context/container.js";import{ChannelKey}from"#runtime/sessions/runtime-context-keys.js";import{advanceStep,emitFailedStep,emitRecoverableFailedTurn,emitStepStarted,emitStreamContent,emitTurnEpilogue,emitTurnPreamble,getHarnessEmissionState,setHarnessEmissionState}from"#harness/emission.js";import{ToolLoopAgent,isStepCount}from"ai";import{getAgentHandleStore}from"#harness/handles/store.js";import{buildDynamicSubagentTools}from"#context/dynamic-subagent-lifecycle.js";import{normalizeUserContent,resolveAssistantStepText}from"#harness/messages.js";import{createRuntimeActionRequestFromToolCall,resolvePendingRuntimeActions,setPendingRuntimeActionBatch}from"#harness/runtime-actions.js";import{clearPendingWorkflowInterrupt,getPendingWorkflowInterrupt,setPendingWorkflowInterrupt}from"#harness/workflow-interrupt-state.js";import{getWorkflowRuntimeActionInterrupts,isWorkflowRuntimeActionInterrupt}from"#harness/workflow-runtime-action-state.js";import{getActiveDynamicModelSelection,isDynamicModelSelectionError}from"#context/dynamic-model-lifecycle.js";import{getInstrumentationRuntime}from"#harness/instrumentation/runtime.js";import{activeTurnId}from"#harness/active-turn-id.js";import{appendPendingInputBatch,consumeDeferredStepInput,getApprovedTools,getPendingInputRequestIds,hasDeferredStepInput,hasPendingApprovalBatch,hasStepInput,resolvePendingInput}from"#harness/input-requests.js";import{createInstrumentationHandleEvent,publishInputResolutions}from"#harness/instrumentation/native-events.js";import{accumulateTurnUsage,getTurnUsageState,setTurnUsageState}from"#harness/turn-tag-state.js";import{context,trace}from"#compiled/@opentelemetry/api/index.js";import{resolveAgentsAnnouncement}from"#harness/handles/prompt.js";import{getSupersededAuthorizationChallenges,isAuthorizationSignal,setPendingAuthorization}from"#harness/authorization.js";import{throwIfTurnAborted}from"#harness/turn-cancellation.js";import{buildDynamicInstructionMessages,drainDynamicInstructionUserMessages,prepareDynamicInstructionPreamble}from"#context/dynamic-instruction-lifecycle.js";import{PendingSkillAnnouncementKey}from"#context/dynamic-skill-lifecycle.js";import{resolveParentLineage}from"#harness/parent-lineage.js";import{prepareTurnTraceContext}from"#harness/prepare-trace-context.js";import{getWorkflowContinuationSecurity,readWorkflowContinuationSecurity}from"#harness/workflow-continuation-security.js";import{buildWorkflowHostTools,resolveWorkflowSandboxBridgeRequestLimit}from"#harness/workflow-sandbox.js";import{attemptIdempotencyKey}from"#harness/instrumentation/lifecycle.js";import{getApprovalAuditState,markApprovalCandidateHistoryEventEmitted,markApprovalCandidatePendingEventEmitted,markApprovalSettlementEventEmitted}from"#harness/approval-candidates.js";import{queueDeferredStepInput}from"#harness/pending-input-batches.js";import{CONDITIONAL_DELIVERY_INSTRUCTION,EMPTY_DELIVERY_SENTINEL,hasEmptyDeliverySentinel}from"#shared/empty-delivery.js";import{createToolResultMessagePartFromToolError}from"#harness/action-result-helpers.js";import{getInvalidToolCallInputError,isInvalidToolCall}from"#harness/tool-call-input-errors.js";import{EmptyModelResponseError,classifyModelCallError,extractModelCallErrorDetails,extractUnsupportedProviderToolTypes,extractUpstreamRejectionMessage,isNoOutputGeneratedError}from"#harness/model-call-error.js";import{readToolInterrupt}from"#harness/tool-interrupts.js";import{ASK_QUESTION_TOOL_NAME}from"#runtime/framework-tools/ask-question.js";import{extractQuestionInputRequests,extractToolApprovalInputRequests}from"#harness/input-extraction.js";import{applyLastToolCacheBreakpoint,applySystemCacheBreakpoint,detectPromptCachePath,getAnthropicCacheMarker}from"#harness/prompt-cache.js";import{requireSessionModelReference}from"#harness/types.js";import{buildDynamicTools,buildResponseAuthorizationTools}from"#context/build-dynamic-tools.js";import{hydrateSandboxAttachments,stageAttachmentsToSandbox}from"#harness/attachment-staging.js";import{createWorkflowLifecycle}from"#harness/workflow-lifecycle.js";import{compactMessages,getInputTokenCount,resolveCompactionModel,shouldCompact}from"#harness/compaction.js";import{applySessionLimitContinuation,enforceSessionTokenLimit}from"#harness/session-limit-enforcement.js";import{setEveAttributes}from"#runtime/attributes/emit.js";import{coordinateApprovalDelivery,shouldPrepareApprovalPolicyTools}from"#harness/approval-delivery-coordinator.js";import{buildTelemetryRuntimeContext}from"#harness/instrumentation/runtime-context.js";import{createAiSdkHookBridge}from"#harness/ai-sdk-hook-bridge.js";import{convertStaleResponsesToUserMessage,dropStaleSessionLimitContinuationResponses}from"#harness/stale-input-responses.js";import{getInstrumentationConfig}from"#harness/instrumentation/config.js";import{normalizeProviderToolHistory}from"#harness/provider-tool-history.js";import{extractWorkflowStreamWriteErrorDetails}from"#harness/workflow-stream-error.js";import{ensureOtelIntegration,getRegisteredTelemetryIntegrations}from"#harness/ai-sdk-telemetry.js";import{getAdvertisedTools}from"#harness/advertised-tools.js";import{resolveFrameworkToolFromUpstreamType}from"#harness/provider-tools.js";import{buildStepHooks,emitStepActions}from"#harness/step-hooks.js";import{buildToolApproval,buildToolSetFromDefinitions,buildToolSetWithProviderTools}from"#harness/tools.js";import{continueWorkflowSandboxInterrupt,getWorkflowSandboxInterrupt,unwrapWorkflowSandboxResult}from"#shared/workflow-sandbox.js";import{FINAL_OUTPUT_TOOL_NAME,buildFinalOutputTool}from"#runtime/framework-tools/final-output.js";const environment=process.env.NODE_ENV??`unknown`,eveVersion=resolveInstalledPackageInfo().version,log=createLogger(`harness.tool-loop`);function logToolExecutionError(e){e.toolOutput.type===`tool-error`&&logError(log,`tool execution failed`,e.toolOutput.error,{toolName:e.toolCall.toolName,toolCallId:e.toolCall.toolCallId})}function enrichTelemetry(e,t,n,r){if(e===void 0&&r===void 0)return;let i={};for(let e of Object.keys(n??{}))i[e]=!0;return{functionId:e?.functionId??t,includeRuntimeContext:i,integrations:r===void 0?void 0:[r,...getRegisteredTelemetryIntegrations()],isEnabled:!0,recordInputs:e?.recordInputs??!1,recordOutputs:e?.recordOutputs??!1}}function mergeSystemInstructions(e){if(e.length===0)return;if(e.length===1)return{...e[0]};let t;for(let n of e)n.providerOptions!==void 0&&(t={...t,...n.providerOptions});let n={role:`system`,content:e.map(e=>e.content).join(`
|
|
2
2
|
|
|
3
|
-
`)};return t!==void 0&&(n.providerOptions=t),n}function buildGatewayAttributionHeaders(e,t){let n=resolveProviderHeaders(e);if(n===void 0)return;let r=t?.agentName??t?.agentId,i=process.env.VERCEL_PROJECT_PRODUCTION_URL||process.env.VERCEL_URL,a=i?`https://${i}`:void 0,o={...n};return r&&(o[`x-title`]=r),a&&(o[`http-referer`]=a),o}async function resolveActiveRuntimeModel(e){if(e.ctx===void 0){let t=e.session.agent.modelReference;if(t===void 0)throw Error(`Dynamic model selection is unavailable outside an eve runtime context.`);return{model:await e.config.resolveModel(t),session:e.session}}let t=getActiveDynamicModelSelection(e.ctx);if(t===null){let t=e.session.agent.modelReference;if(e.session.agent.dynamicModel===!0||t===void 0)throw Error(`Dynamic model selection is required before model-dependent work begins. Add a matching resolver handler that returns a concrete model.`);return{model:await e.config.resolveModel(t),session:e.session}}return{model:t.model===void 0?await e.config.resolveModel(t.reference):t.model,session:updateSessionModelReference(e.session,t.reference)}}function updateSessionModelReference(e,t){return{...e,agent:{...e.agent,modelReference:t},compaction:updateCompactionThresholdForModelReference({compaction:e.compaction,modelReference:t})}}function updateCompactionThresholdForModelReference(e){return e.modelReference.contextWindowTokens===void 0?e.compaction:{...e.compaction,threshold:Math.max(1,Math.floor(e.modelReference.contextWindowTokens*(e.compaction.thresholdPercent??.9)))}}const TURN_TRACE_STATE_KEY=`eve.harness.turnTrace`;function getTurnTraceState(e){return e.state?.[TURN_TRACE_STATE_KEY]}function setTurnTraceState(e,t){let n={traceId:t.traceId,spanId:t.spanId,traceFlags:t.traceFlags};return{...e,state:{...e.state,[TURN_TRACE_STATE_KEY]:n}}}function resolveStepOtelContext(e,t,n){if(t)return trace.setSpan(context.active(),t);if(e){let e=getTurnTraceState(n);if(e){let t=trace.wrapSpanContext({isRemote:!0,traceId:e.traceId,spanId:e.spanId,traceFlags:e.traceFlags});return trace.setSpan(context.active(),t)}}}function buildHarnessToolsWithDynamicSubagents(e,t){let n=new Map(e);if(t===void 0)return n;for(let e of buildDynamicSubagentTools(t)){if(n.has(e.name))throw Error(`Dynamic subagent "${e.name}" collides with another runtime-visible tool name.`);n.set(e.name,e)}return n}function createToolLoopHarness(t){let n=t.handleEvent,d=getInstrumentationRuntime()?.otelSettings,g=getInstrumentationConfig();d!==void 0&&ensureOtelIntegration();let v=d===void 0?void 0:trace.getTracer(`eve`),y=t.runtimeIdentity?.agentName;async function runStep(e,t){let n;if(v&&hasStepInput(t)){let t=d?.functionId??y,r={"eve.version":eveVersion,"eve.environment":environment,"eve.session.id":e.sessionId};t&&(r[`ai.telemetry.functionId`]=t),n=v.startSpan(`ai.eve.turn`,{attributes:r})}let r=resolveStepOtelContext(v,n,e),executeStep=()=>executeStepBody(e,t,n);try{return r?await context.with(r,executeStep):await executeStep()}finally{n?.end()}}async function executeStepBody(v,x,C){let E=v;C&&(E=setTurnTraceState(E,C.spanContext()));let O=getHarnessEmissionState(E.state),A=contextStorage.getStore(),j=A?.get(ParentSessionKey),M=j!==void 0||A?.get(SessionCallbackKey)!==void 0,re=resolveParentLineage(j,A?.get(ChannelKey)),ie=A?.get(ParentTraceContextKey),ae,N=createInstrumentationHandleEvent({agentName:t.runtimeIdentity?.agentName,channelKind:A?.get(ChannelInstrumentationKey)?.kind,getAttemptScope:()=>ae,handleEvent:n,hooks:t.instrumentation?.hooks,parentLineage:re,parentTraceContext:ie,rootSessionId:j?.rootSessionId,sessionId:E.sessionId,turnId:activeTurnId(O)}),failModelSelection=async(n,r)=>{if(throwIfTurnAborted(t.abortSignal),C&&recordErrorOnSpan(C,n),!N)throw n;let a=createErrorId(),o=toErrorMessage(n);return log.error(`model selection failed terminally`,{error:n,errorId:a,sessionId:E.sessionId,turnId:r.turnId}),await emitFailedStep(N,r,{code:`MODEL_SELECTION_FAILED`,details:{errorId:a},message:o,sessionId:E.sessionId}),{next:t.mode===`task`||M?{done:!0,isError:!0,output:o}:{done:!0,output:``},session:E}},preparePreambleTrace=async()=>{let e=C?.spanContext(),n=e!==void 0&&isValidSpanContext(e)?{spanId:e.spanId,traceFlags:e.traceFlags,traceId:e.traceId}:void 0;return await prepareTurnTraceContext({agentName:t.runtimeIdentity?.agentName,instrumentation:t.instrumentation,parentLineage:re,parentTraceContext:ie,rootSessionId:j?.rootSessionId??E.rootSessionId??E.sessionId,sequence:O.sequence,sessionId:E.sessionId,sessionStarted:O.sessionStarted,traceContext:n,turnId:`turn_${O.sequence}`})};if(t.clearOnly===!0)return E={...E,compaction:{recentWindowSize:E.compaction.recentWindowSize,threshold:E.compaction.threshold,thresholdPercent:E.compaction.thresholdPercent},history:[]},await N?.(createContextClearedEvent({sequence:O.sequence,sessionId:E.sessionId,turnId:activeTurnId(O)})),await N?.(createSessionWaitingEvent()),{next:null,session:E};if(t.compactOnly===!0){if(E.history.length>0)try{let e=await resolveActiveRuntimeModel({config:t,ctx:contextStorage.getStore(),session:E});E=e.session;let n=await maybeCompact({abortSignal:t.abortSignal,emit:N,emissionState:{...O,turnId:activeTurnId(O)},force:!0,messages:[...E.history],model:e.model,onCompaction:t.onCompaction,resolveModel:t.resolveModel,runtimeIdentity:t.runtimeIdentity,session:E,telemetry:enrichTelemetry(d,y)??void 0});E={...n.session,compaction:{recentWindowSize:n.session.compaction.recentWindowSize,threshold:n.session.compaction.threshold,thresholdPercent:n.session.compaction.thresholdPercent},history:n.messages}}catch(e){logError(log,`manual session compaction failed`,e,{sessionId:E.sessionId})}return await N?.(createSessionWaitingEvent()),{next:null,session:E}}let P=consumeDeferredStepInput({input:x,preferCurrentInput:t.mode!==`conversation`&&x!==void 0&&hasPendingApprovalBatch(E),session:E});E=P.session;let F=await resolvePendingRuntimeActions({emit:N,session:E,stepInput:P.input});if(F.outcome===`unresolved`)return{next:null,session:F.session};E=F.session;let oe=getPendingInputRequestIds(E.state),I=convertStaleResponsesToUserMessage({history:F.messages,pendingRequestIds:oe,stepInput:dropStaleSessionLimitContinuationResponses({pendingRequestIds:oe,stepInput:P.input})}),L=I.stepInput,R=I.kind===`converted`?{...L,message:I.displayMessage}:L,z=contextStorage.getStore();z!==void 0&&t.resolveStepDynamicTools!==void 0&&shouldPrepareApprovalPolicyTools({session:E,stepInput:L})&&await t.resolveStepDynamicTools({ctx:z,event:createStepStartedEvent({modelId:E.agent.modelReference?.id??`dynamic`,sequence:O.sequence,stepIndex:O.stepIndex,turnId:O.turnId}),messages:F.messages});let B=await coordinateApprovalDelivery({session:E,stepInput:L,tools:buildResponseAuthorizationTools({authoredTools:t.tools,context:z})});if(E=B.session,N){for(let e of B.feedback)await N(createMessageCompletedEvent({message:e,sequence:O.sequence,stepIndex:O.stepIndex,turnId:O.turnId}));let e=getApprovalAuditState(E.state);for(let t of e.activeCandidates.filter(e=>e.pendingEventEmitted!==!0))await N(createApprovalCandidateEvent({candidateId:t.candidateId,outcome:`pending`,requestId:t.requestId,responderPrincipalId:t.responder.principalId,sequence:O.sequence,stepIndex:O.stepIndex,turnId:O.turnId})),E={...E,state:markApprovalCandidatePendingEventEmitted({candidateId:t.candidateId,state:E.state})};for(let t of e.candidateHistory.filter(e=>e.eventEmitted!==!0&&e.status!==`allowed`))await N(createApprovalCandidateEvent({candidateId:t.candidateId,outcome:t.status,requestId:t.requestId,responderPrincipalId:t.responder.principalId,reason:t.reason,sequence:O.sequence,stepIndex:O.stepIndex,turnId:O.turnId})),E={...E,state:markApprovalCandidateHistoryEventEmitted({candidateId:t.candidateId,state:E.state})};for(let t of e.settlements.filter(e=>e.eventEmitted!==!0))await N(createApprovalSettledEvent({outcome:t.outcome===`allowed`?`approved`:`cancelled`,requestId:t.requestId,responderPrincipalId:t.actor.principalId,sequence:O.sequence,stepIndex:O.stepIndex,turnId:O.turnId})),E={...E,state:markApprovalSettlementEventEmitted({requestId:t.requestId,state:E.state})}}if(B.kind===`park`)return{next:null,session:E};if(B.kind===`continue-coordination`)return{next:runStep,session:B.stepInput===void 0?E:queueDeferredStepInput(E,B.stepInput)};if(B.challenges.length>0){if(N)for(let e of B.challenges)await N(createAuthorizationRequiredEvent({authorization:e.challenge,candidateId:e.candidateId,description:e.challenge.instructions??`Authorization required for ${e.name}`,name:e.name,sequence:O.sequence,stepIndex:O.stepIndex,turnId:O.turnId,webhookUrl:e.hookUrl}));let e=B.stepInput===void 0?E:queueDeferredStepInput(E,B.stepInput);return{next:null,session:{...e,state:setPendingAuthorization(e.state,{challenges:B.challenges})}}}let V=resolvePendingInput({deferMessagesWhileApprovalsPending:t.mode!==`conversation`,history:F.messages,resolveApprovalKey:resolveApprovalKeyFromTools(t.tools),session:E,stepInput:B.stepInput});if(V.outcome===`unresolved`){let e=F.outcome===`resolved`?{...V.session,history:[...F.messages]}:V.session;if(N&&t.mode===`conversation`&&V.deferredMessage===!0&&hasStepInput(x)){A!==void 0&&prepareDynamicInstructionPreamble(A,e.history);let n=[];try{let e=await preparePreambleTrace();O=await emitTurnPreamble(N,R??{},O,t.runtimeIdentity,e)}catch(t){if(n=A===void 0?[]:drainDynamicInstructionUserMessages(A),e={...e,history:[...e.history,...n]},E=e,!isDynamicModelSelectionError(t))throw t;return failModelSelection(t,{sessionStarted:!0,sequence:O.sequence,stepIndex:0,turnId:`turn_${O.sequence}`})}return n=A===void 0?[]:drainDynamicInstructionUserMessages(A),e={...e,history:[...e.history,...n]},O=await emitTurnEpilogue(N,O,t.mode),{next:null,session:setHarnessEmissionState(e,O)}}return F.outcome===`resolved`?(N&&t.mode===`conversation`&&(O=await emitTurnEpilogue(N,O,t.mode),e=setHarnessEmissionState(e,O)),{next:null,session:e}):{next:null,session:V.session}}if(t.instrumentation?.hooks!==void 0&&V.resolvedInputs!==void 0)for(let e of V.resolvedInputs)await publishInputResolutions({batch:e,hooks:t.instrumentation.hooks,sessionId:E.sessionId});if(N&&V.rejectedActions)for(let e of V.rejectedActions)for(let t of e.results)await N(createActionResultEvent({rejected:!0,result:t,sequence:e.event.sequence,stepIndex:e.event.stepIndex,turnId:e.event.turnId}));let H=[];if(N&&hasStepInput(x)){A!==void 0&&prepareDynamicInstructionPreamble(A,V.session.history);try{let e=await preparePreambleTrace();O=await emitTurnPreamble(N,R??{},O,t.runtimeIdentity,e)}catch(e){if(H=A===void 0?[]:drainDynamicInstructionUserMessages(A),E={...V.session,history:[...V.session.history,...H]},!isDynamicModelSelectionError(e))throw e;return failModelSelection(e,{sessionStarted:!0,sequence:O.sequence,stepIndex:0,turnId:`turn_${O.sequence}`})}H=A===void 0?[]:drainDynamicInstructionUserMessages(A),C&&C.setAttribute(`eve.turn.id`,O.turnId)}let se=V.session.history.length;E=setHarnessEmissionState({...V.session,history:[...V.session.history,...H]},O);let U=[...V.messages.slice(0,se),...H,...V.messages.slice(se)],W=await applySessionLimitContinuation({config:t,emit:N,emissionState:O,limitContinuation:V.limitContinuation,session:E});if(W.result!==null)return W.result;if(E=W.session,t.persistentSubagentSessions===!0){let e=resolveAgentsAnnouncement({messages:U,store:getAgentHandleStore(E.state)});e!==void 0&&U.push({content:e,role:`user`})}if(L?.context!==void 0&&V.deferredContext!==!0)for(let e of L.context)U.push({content:e,role:`user`});let ce=normalizeUserContent(L?.message);if(ce!==void 0&&!V.deferredMessage&&!V.consumedMessage){let e=await stageAttachmentsToSandbox(ce);U.push({content:e,role:`user`})}let G=A,K;try{G!==void 0&&t.dispatchDynamicModelEvent!==void 0&&await t.dispatchDynamicModelEvent({ctx:G,event:{data:{sequence:O.sequence,stepIndex:O.stepIndex,turnId:O.turnId},type:`step.started`},messages:U}),K=await resolveActiveRuntimeModel({config:t,ctx:G,session:E})}catch(e){return failModelSelection(e,O)}E=K.session;let q=K.model;N&&await emitStepStarted(N,O,requireSessionModelReference(E).id,U);let le=detectPromptCachePath(q),J=le.kind===`anthropic-direct`?getAnthropicCacheMarker():void 0,ue=buildGatewayAttributionHeaders(q,t.runtimeIdentity);({messages:U,session:E}=await maybeCompact({abortSignal:t.abortSignal,emit:N,emissionState:O,messages:U,model:q,onCompaction:t.onCompaction,resolveModel:t.resolveModel,runtimeIdentity:t.runtimeIdentity,session:E,telemetry:enrichTelemetry(d,y)??void 0}));let de=getApprovedTools(E),fe=E.outputSchema===void 0&&G!==void 0&&isScheduleAppAuth(G.get(AuthKey))&&G.get(ParentSessionKey)===void 0,pe=await hydrateSandboxAttachments(U),Y=[],me=[];for(let e of pe)e.role===`system`?Y.push(e):me.push(e);if(G!==void 0){Y.push(...buildDynamicInstructionMessages(G));let e=G.get(PendingSkillAnnouncementKey);e!==void 0&&e.length>0&&Y.push({role:`system`,content:e})}fe&&Y.push({role:`system`,content:CONDITIONAL_DELIVERY_INSTRUCTION});let X=me,prepareModelCallInput=e=>{let t=e?[{role:`system`,content:e}]:[],n=E.agent.system?[{role:`system`,content:E.agent.system}]:[],r=Y.length>0||t.length>0?[...t,...n,...Y]:void 0,i=r!==void 0&&J?applySystemCacheBreakpoint(r,J):r,a=i===void 0?E.agent.system??void 0:mergeSystemInstructions(i);return{instructions:a,telemetryRuntimeContext:buildTelemetryRuntimeContext({eveVersion,authored:g,emissionState:O,environment,modelInput:{instructions:a,messages:X},session:E})}},he=t.tools,runSingleModelCall=async e=>{let{instructions:n,telemetryRuntimeContext:i={}}=e.preparedInput??prepareModelCallInput(e.extraSystemNote);e.retryReason&&(i[`eve.retry.reason`]=e.retryReason);let a=e.trailingUserNote?[...X,{role:`user`,content:e.trailingUserNote}]:X,o=buildHarnessToolsWithDynamicSubagents(t.tools,G),s=getAdvertisedTools({session:E,tools:o});he=s;let c=await buildToolSetWithProviderTools({approvedTools:de,capabilities:t.capabilities,disabledProviderTools:e.disabledProviderTools,modelReference:requireSessionModelReference(E),tools:s,webSearchProvider:t.webSearchProvider});if(G!==void 0){let n=getAdvertisedTools({session:E,tools:buildDynamicTools(G)}),r=buildToolSetFromDefinitions({approvedTools:de,capabilities:t.capabilities,disabledProviderTools:e.disabledProviderTools,tools:n});for(let[e,t]of Object.entries(r)){if(s.get(e)?.runtimeAction!==void 0)throw Error(`Dynamic tool "${e}" collides with a runtime-visible subagent.`);c[e]=t}}E.outputSchema!==void 0&&(c[FINAL_OUTPUT_TOOL_NAME]=buildFinalOutputTool(E.outputSchema));let l=N===void 0?void 0:({tools:e})=>createWorkflowLifecycle({emit:N,emissionState:O,tools:e}),u=t.workflow===!0?{lifecycle:l,maxSubagents:t.workflowMaxSubagents}:void 0,f=await getAdvertisedTools({modelTools:c,session:E,tools:s,workflow:u});E=f.session;let p=f.modelTools,m=J?applyLastToolCacheBreakpoint(p,J):p,h=t.instrumentation?.hooks,g=activeTurnId(O),_=h===void 0?void 0:{attemptId:`${E.sessionId}:${g}:${O.stepIndex}:${e.attemptIndex}`,attemptIndex:e.attemptIndex,functionId:d?.functionId??y,rootSessionId:j?.rootSessionId??E.sessionId,sessionId:E.sessionId,stepIndex:O.stepIndex,turnId:g};ae=_;let v=_===void 0||h===void 0?void 0:createAiSdkHookBridge(_,h,t.instrumentation?.runInContext),b=buildStepHooks({cachePath:le,emit:N,emissionState:O,emitStepStarted:e.suppressStepStartedEmission!==!0,marker:J,session:E}),x=new ToolLoopAgent({headers:ue,instructions:n,model:q,onToolExecutionEnd:logToolExecutionError,onError(e){summarizeKnownError(e.error)?.tags.includes(`config`)!==!0&&logError(log,`tool-loop stream error`,e.error)},onStepFinish:b.onStepFinish,prepareStep:b.prepareStep,reasoning:E.agent.reasoning,runtimeContext:i,stopWhen:isStepCount(1),telemetry:enrichTelemetry(d,y,i,v),toolApproval:buildToolApproval(p),tools:m}),executeModelCall=async()=>{if(N){let e=[...t.tools].filter(([e,t])=>t.runtimeAction!==void 0&&s.get(e)===void 0).map(([e])=>e),n=new Set([ASK_QUESTION_TOOL_NAME,FINAL_OUTPUT_TOOL_NAME,...e]),r=await x.stream({abortSignal:t.abortSignal,messages:a}),{emittedActionCallIds:i,handledInlineToolResultCallIds:o,invalidInputToolCallIds:c,inlineAuthorizationResults:l,trailingInlineToolResultParts:u}=await emitStreamContent(N,O,r.fullStream,{excludedActionToolNames:n,tools:s});throwIfTurnAborted(t.abortSignal);let[d,f]=await Promise.all([b.stepResult,r.responseMessages]);if(isEmptyModelResponse(d)&&extractToolResultCallIds(f).size===0&&l.length===0&&u.length===0)throw new EmptyModelResponseError;await emitStepActions(N,O,d,{emittedActionCallIds:i,excludedActionCallIds:c,excludedActionToolNames:n,handledInlineToolResultCallIds:o,tools:s});let p=d.toolResults,m=new Map(p.map(e=>[e.toolCallId,e]));for(let e of l)m.set(e.toolCallId,e);return withAccumulatedResponseMessages({invalidInputToolCallIds:c,responseMessages:appendMissingToolResultMessages({append:u,responseMessages:f}),stepResult:d,toolResults:[...m.values()]})}let e=await x.generate({abortSignal:t.abortSignal,messages:a});throwIfTurnAborted(t.abortSignal);let n=await b.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 _!==void 0&&await h?.publish({idempotencyKey:attemptIdempotencyKey(_),scope:_,type:`step.attempt.completed`}),e}catch(e){return _!==void 0&&await h?.publish({error:e,idempotencyKey:attemptIdempotencyKey(_),scope:_,type:`step.attempt.failed`}),rethrowNoOutputAsEmptyResponse(e)}},ge=0,runOneModelCall=async e=>runModelCallWithRetries(t=>runSingleModelCall({...e,attemptIndex:ge++,preparedInput:t===1?e.preparedInput:void 0,suppressStepStartedEmission:t!==1||e.suppressStepStartedEmission}),{sessionId:E.sessionId,turnId:O.turnId},t.abortSignal),_e=prepareModelCallInput(),ve=await continuePendingWorkflowInterrupt({childResults:L?.runtimeActionResults,config:t,emit:N,emissionState:O,runStep,session:E,tools:buildHarnessToolsWithDynamicSubagents(t.tools,G)});if(ve!==null)return ve;let ye=await enforceSessionTokenLimit({config:t,emit:N,emissionState:O,messages:U,session:E});if(ye!==null)return ye;let Z;try{Z=await runOneModelCall({preparedInput:_e,suppressStepStartedEmission:!0})}catch(n){throwIfTurnAborted(t.abortSignal);let r=await runModelCallRecoveryPipeline({error:n,stages:[e=>attemptUnsupportedProviderToolRecovery({error:e.error,runOneModelCall,sessionId:E.sessionId,turnId:O.turnId}),e=>attemptEmptyResponseRecovery({emptyDeliveryEnabled:fe,error:e.error,retryCallOptions:e.retryCallOptions,runOneModelCall,sessionId:E.sessionId,turnId:O.turnId})]});if(throwIfTurnAborted(t.abortSignal),r.outcome===`recovered`)Z=r.result;else{let n=r.error;if(C&&recordErrorOnSpan(C,n),!N)throw n;let a=extractWorkflowStreamWriteErrorDetails(n);if(a!==null){let t=createErrorId();return log.error(`workflow stream write failed — parking session for retry by the user`,{...a,errorId:t,error:n,sessionId:E.sessionId,turnId:O.turnId}),O=await emitRecoverableFailedTurn(N,O,{code:`WORKFLOW_STREAM_WRITE_FAILED`,continuationToken:E.continuationToken,details:{...a,errorId:t},message:toErrorMessage(n)}),{next:null,session:setHarnessEmissionState(E,O)}}let o=classifyModelCallError(n),s=createErrorId(),c=summarizeKnownError(n),l=c===null?extractUpstreamRejectionMessage(n):null,u=c?.message??l?.message??toErrorMessage(n),d=c?.hint===void 0?u:`${u} ${c.hint}`,p=extractModelCallErrorDetails(n),m=buildModelCallFailureDetails({catalogSummary:c,error:n,errorId:s,modelCallDetails:p,upstreamRejection:l}),h=buildModelCallFailureLogFields({error:n,errorId:s,modelCallDetails:p,recognized:c!==null||l!==null,sessionId:E.sessionId,turnId:O.turnId});if(o===`terminal`)return c===null?log.error(l?.message??`model call failed terminally`,h):log.error(`${c.name}: ${c.message}`,{errorId:s,hint:c.hint,sessionId:E.sessionId,turnId:O.turnId}),await emitFailedStep(N,O,{code:`MODEL_CALL_FAILED`,details:m,message:u,sessionId:E.sessionId}),{next:t.mode===`task`||M?{done:!0,isError:!0,output:d}:{done:!0,output:``},session:E};if(t.mode===`task`){if(o===`recoverable`&&!(n instanceof EmptyModelResponseError))throw log.warn(l?.message??`model call failed recoverably in task mode — rethrowing for durable step retry`,h),n;return log.error(l?.message??`model call failed; failing the task run`,h),await emitFailedStep(N,O,{code:`MODEL_CALL_FAILED`,details:m,message:u,sessionId:E.sessionId}),{next:{done:!0,isError:!0,output:d},session:E}}log.error(l?.message??`model call failed — parking session for retry by the user`,h),O=await emitRecoverableFailedTurn(N,O,{code:`MODEL_CALL_FAILED`,continuationToken:E.continuationToken,details:m,message:u});let g={isError:!0,output:d};return{next:null,session:setHarnessEmissionState(E,O),settledTurn:g}}}let Q=accumulateTurnUsage({previous:getTurnUsageState(E.state),turnId:O.turnId,usage:extractTokenUsageDelta({costUsd:extractGatewayCostUsd(Z.providerMetadata),usage:Z.usage})});E=setTurnUsageState(E,Q);let $;try{$=formatLanguageModelGatewayId(q)}catch{$=void 0}return await setEveAttributes({"$eve.model":$,"$eve.input_tokens":Q.inputTokens,"$eve.output_tokens":Q.outputTokens,"$eve.cache_read_tokens":Q.cacheReadTokens,"$eve.cache_write_tokens":Q.cacheWriteTokens,"$eve.cost_usd":Q.sawCost?Q.costUsd:void 0,"$eve.tool_count":t.tools.size}),handleStepResult({config:t,emit:N,emissionState:O,promptMessages:U,result:Z,runStep,session:E,runtimeActionTools:he})}return runStep}function isValidSpanContext(e){return/^[0-9a-f]{32}$/u.test(e.traceId)&&e.traceId!==`00000000000000000000000000000000`&&/^[0-9a-f]{16}$/u.test(e.spanId)&&e.spanId!==`0000000000000000`}function extractTokenUsageDelta(e){let t=e.usage;if(!(t===void 0&&e.costUsd===void 0))return{cacheReadTokens:t?.inputTokenDetails?.cacheReadTokens,cacheWriteTokens:t?.inputTokenDetails?.cacheWriteTokens,costUsd:e.costUsd,inputTokens:t?.inputTokens,outputTokens:t?.outputTokens}}function extractGatewayCostUsd(e){let t=readGatewayMetadata(e)?.cost;if(typeof t==`number`&&Number.isFinite(t))return t;if(typeof t==`string`){let e=Number(t);return Number.isFinite(e)?e:void 0}}function readGatewayMetadata(e){let t=e?.gateway;return t&&typeof t==`object`&&!Array.isArray(t)?t:void 0}function buildModelCallFailureDetails(e){let{catalogSummary:t,error:r,errorId:i,modelCallDetails:a,upstreamRejection:o}=e;if(t!==null){let e={errorId:i,message:t.message,name:t.name,semanticErrorId:t.id,...a};return t.hint!==void 0&&(e.hint=t.hint),e}return o===null?{...formatError(r,i),...a}:{errorId:i,message:toErrorMessage(r),name:o.name,...a}}function buildModelCallFailureLogFields(e){let t={errorId:e.errorId,sessionId:e.sessionId,turnId:e.turnId};return e.recognized?{...t,details:e.modelCallDetails}:{...t,error:e.error}}async function runModelCallRecoveryPipeline(e){let t=e.error,n;for(let r of e.stages){let e=await r({error:t,retryCallOptions:n});if(e.outcome===`recovered`)return e;e.outcome===`failed`&&(t=e.error,n=e.retryCallOptions)}return{outcome:`failed`,error:t}}function withAccumulatedResponseMessages(e){let{stepResult:t}=e;return{content:t.content,finishReason:t.finishReason,...e.invalidInputToolCallIds===void 0?{}:{invalidInputToolCallIds:e.invalidInputToolCallIds},providerMetadata:t.providerMetadata,response:{...t.response,messages:[...e.responseMessages]},text:t.text,toolCalls:t.toolCalls,toolResults:e.toolResults===void 0?t.toolResults:[...e.toolResults],usage:t.usage}}function appendMissingToolResultMessages(e){let t=extractToolResultCallIds(e.responseMessages),n=e.append.filter(e=>!t.has(e.toolCallId));return[...e.responseMessages,...n.length>0?[{role:`tool`,content:[...n]}]:[]]}function getInvalidToolCallInputErrors(e){let t=[];for(let n of e.toolCalls){if(n.toolName===FINAL_OUTPUT_TOOL_NAME)continue;let e=getInvalidToolCallInputError({toolCall:n});e!==void 0&&t.push(e)}return t}function extractToolResultCallIds(e){let t=new Set;for(let n of e)if(Array.isArray(n.content))for(let e of n.content)typeof e==`object`&&e&&e.type===`tool-result`&&t.add(e.toolCallId);return t}async function attemptUnsupportedProviderToolRecovery(e){let t=extractUnsupportedProviderToolTypes(e.error);if(t.length===0)return{outcome:`skipped`};let n=[];for(let e of t){let t=resolveFrameworkToolFromUpstreamType(e);t!==null&&!n.includes(t)&&n.push(t)}if(n.length===0)return{outcome:`skipped`};log.warn(`disabling unsupported provider tool(s); retrying step once`,{disabled:n,sessionId:e.sessionId,turnId:e.turnId,upstreamTypes:t});let r={disabledProviderTools:new Set(n),extraSystemNote:buildDisabledToolNote(n)};try{return{outcome:`recovered`,result:await e.runOneModelCall({...r,suppressStepStartedEmission:!0})}}catch(e){return{outcome:`failed`,error:e,retryCallOptions:r}}}function buildDisabledToolNote(e){let t=e.join(`, `);return`The following ${e.length===1?`tool is`:`tools are`} not available with the current model and has been removed: ${t}. Proceed using the remaining tools or your training knowledge.`}function isEmptyModelResponse(e){return e.toolCalls.length===0&&e.toolResults.length===0&&resolveAssistantStepText(e.response.messages,e.text)===null}function rethrowNoOutputAsEmptyResponse(e){throw isNoOutputGeneratedError(e)?new EmptyModelResponseError({cause:e}):e}const EMPTY_RESPONSE_NUDGE=`Your previous reply was empty and was not delivered. Answer now from the tool results above; do not re-run tools or mention this notice.`;function buildEmptyResponseNudge(e){return e?`${EMPTY_RESPONSE_NUDGE} If the current task explicitly requires conditional delivery and there is nothing to report, reply with exactly ${EMPTY_DELIVERY_SENTINEL}.`:EMPTY_RESPONSE_NUDGE}async function attemptEmptyResponseRecovery(e){if(!(e.error instanceof EmptyModelResponseError))return{outcome:`skipped`};log.warn(`empty model response; reissuing the model call once`,{sessionId:e.sessionId,turnId:e.turnId});try{return{outcome:`recovered`,result:await e.runOneModelCall({...e.retryCallOptions,retryReason:`empty-response`,suppressStepStartedEmission:!0,trailingUserNote:buildEmptyResponseNudge(e.emptyDeliveryEnabled)})}}catch(t){return{outcome:`failed`,error:t,retryCallOptions:e.retryCallOptions}}}async function handleStepResult(e){let{config:t,emit:n,promptMessages:r,result:i,runStep:a}=e,{emissionState:o,session:s}=e,c=resolveAssistantStepText(i.response.messages,i.text),l=i.finishReason!==`tool-calls`&&i.toolCalls.length===0&&hasEmptyDeliverySentinel(c),u=getInvalidToolCallInputErrors({toolCalls:i.toolCalls}),d=new Set([...i.invalidInputToolCallIds??[],...i.toolCalls.filter(isInvalidToolCall).map(e=>e.toolCallId),...u.map(e=>e.toolCallId)]),f=l?[]:appendMissingToolResultMessages({append:u.map(e=>createToolResultMessagePartFromToolError(e)),responseMessages:i.response.messages}),p=l?null:c,m=new Set;for(let e of[...i.content??[],...i.toolResults??[]])(e.type===`tool-result`||e.type===`tool-error`)&&e.providerExecuted===!0&&m.add(e.toolCallId);let h=normalizeProviderToolHistory({messages:f,providerExecutedOutcomeIds:m}),v=h.messages,y={...s,compaction:createNextCompactionConfig(s.compaction,r,i)},b=t.workflow===!0?readWorkflowContinuationSecurity(y):void 0;if(b!==void 0){let e=await getWorkflowSandboxInterrupt(i,b);if(e!==void 0){if(!isWorkflowRuntimeActionInterrupt(e))throw Error(`Unsupported Workflow interrupt kind "${e.payload.kind}".`);return parkOnWorkflowInterrupt({baseSession:y,emissionState:o,interrupt:e,promptMessages:r,responseMessages:v})}}let S=extractToolApprovalInputRequests({content:i.content??[],excludedCallIds:d}),C=new Set(S.map(e=>e.action.callId)),ee=extractQuestionInputRequests({toolCalls:i.toolCalls,excludedCallIds:new Set([...d,...C])}),w=[...S,...ee],T=getAdvertisedTools({session:y,tools:e.runtimeActionTools}),E=(i.toolCalls??[]).filter(e=>!d.has(e.toolCallId)).filter(t=>e.runtimeActionTools.get(t.toolName)?.runtimeAction!==void 0).filter(e=>T.get(e.toolName)?.runtimeAction===void 0?(log.warn(`runtime action tool call blocked because tool is not advertised`,{callId:e.toolCallId,sessionId:y.sessionId,toolName:e.toolName}),!1):!0).map(e=>createRuntimeActionRequestFromToolCall({toolCall:e,tools:T}));if(E.length>0){if(w.length===0)return{next:null,session:setHarnessEmissionState(setPendingRuntimeActionBatch({actions:E,event:{sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId},responseMessages:v,session:{...y,history:[...r]}}),advanceStep(o))};let e=setPendingRuntimeActionBatch({actions:E,event:{sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId},responseMessages:v,session:{...y,history:[...r]}});return e=appendPendingInputBatch({event:{sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId},requests:w,responseMessages:[],session:e}),n&&await n(createInputRequestedEvent({requests:w,sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId})),{next:null,session:setHarnessEmissionState(e,advanceStep(o))}}if(w.length>0){let e=buildResponseAuthorizationTools({authoredTools:t.tools,context:contextStorage.getStore()}),i=appendPendingInputBatch({event:{sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId},requests:w,responseAuthRequiredRequestIds:S.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:v,session:{...y,history:[...r]}});return n&&(await n(createInputRequestedEvent({requests:w,sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId})),t.mode===`conversation`&&(o=await emitTurnEpilogue(n,o,t.mode),i=setHarnessEmissionState(i,o))),{next:hasDeferredStepInput(i)?a:null,session:i}}let D=findAuthorizationSignalFromToolResults(i.toolResults);if(D){let{challenges:e}=D;if(n){for(let t of getSupersededAuthorizationChallenges(y.state,e))await n(createAuthorizationCompletedEvent({authorization:t.challenge,name:t.name,outcome:`failed`,reason:`Superseded by a newer authorization attempt.`,sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId}));for(let t of e)await n(createAuthorizationRequiredEvent({authorization:t.challenge,name:t.name,description:t.challenge.instructions??`Authorization required for ${t.name}`,webhookUrl:t.hookUrl,sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId}));t.mode===`conversation`&&(o=await emitTurnEpilogue(n,o,t.mode))}return{next:null,session:setHarnessEmissionState({...y,history:[...r],state:setPendingAuthorization(y.state,{challenges:e})},o)}}let te=v,ne=[...r,...te],k={...y,history:ne};return!(k.outputSchema!==void 0&&extractFinalOutput(i)!==void 0)&&(te.at(-1)?.role===`tool`||h.outcomeEndsResponse||hasDeferredStepInput(k))?(n&&(o=advanceStep(o),k=setHarnessEmissionState(k,o)),{next:a,session:k}):t.mode===`task`?finishTaskTurn({emissionState:o,emit:n,history:r,result:i,schema:k.outputSchema,session:k,stepOutput:p}):finishConversationTurn({emissionState:o,emit:n,history:r,result:i,schema:k.outputSchema,session:k,stepOutput:p})}const OUTPUT_SCHEMA_NOT_FULFILLED={code:`OUTPUT_SCHEMA_NOT_FULFILLED`,message:`The agent could not produce a result matching the requested schema.`};function extractFinalOutput(e){return(e.toolCalls??[]).find(e=>e.toolName===FINAL_OUTPUT_TOOL_NAME&&!isInvalidToolCall(e))?.input}function persistStructuredAssistantTurn(e,t,n){return{...e,history:[...t,{content:JSON.stringify(n),role:`assistant`}],outputSchema:void 0}}async function emitStructuredResult(e,t,n,r){return await e(createResultCompletedEvent({result:n,sequence:t.sequence,stepIndex:t.stepIndex,turnId:t.turnId})),emitTurnEpilogue(e,t,r)}async function finishTaskTurn(e){let{emit:t,history:n,result:r,schema:i,stepOutput:a}=e,{emissionState:o,session:s}=e;if(i===void 0)return t&&(o=await emitTurnEpilogue(t,o,`task`),s=setHarnessEmissionState(s,o)),{next:{done:!0,output:a??``},session:s};let c=extractFinalOutput(r);return c===void 0?(t&&await emitFailedStep(t,o,{...OUTPUT_SCHEMA_NOT_FULFILLED,sessionId:s.sessionId}),{next:{done:!0,isError:!0,output:OUTPUT_SCHEMA_NOT_FULFILLED.message},session:s}):(s=persistStructuredAssistantTurn(s,n,c),t&&(o=await emitStructuredResult(t,o,c,`task`),s=setHarnessEmissionState(s,o)),{next:{done:!0,output:c},session:s})}async function finishConversationTurn(e){let{emit:t,history:n,result:r,schema:i,stepOutput:a}=e,{emissionState:o,session:s}=e;if(i===void 0)return t&&(o=await emitTurnEpilogue(t,o,`conversation`),s=setHarnessEmissionState(s,o)),{next:null,session:s,settledTurn:{output:a??``}};let c=extractFinalOutput(r);if(c===void 0){t&&(o=await emitRecoverableFailedTurn(t,o,{...OUTPUT_SCHEMA_NOT_FULFILLED,continuationToken:s.continuationToken}),s=setHarnessEmissionState(s,o));let e={isError:!0,output:OUTPUT_SCHEMA_NOT_FULFILLED.message};return{next:null,session:s,settledTurn:e}}return s=persistStructuredAssistantTurn(s,n,c),t&&(o=await emitStructuredResult(t,o,c,`conversation`),s=setHarnessEmissionState(s,o)),{next:null,session:s,settledTurn:{output:c}}}async function continuePendingWorkflowInterrupt(e){let t=getPendingWorkflowInterrupt(e.session.state);if(t===void 0)return null;let n=t.interrupt;if(!isWorkflowRuntimeActionInterrupt(n))throw Error(`Unsupported Workflow interrupt kind "${n.payload.kind}".`);let i=e.emit===void 0?void 0:createWorkflowLifecycle({emit:e.emit,emissionState:e.emissionState,skipReplayed:!0,tools:e.tools}),a=getWorkflowContinuationSecurity(e.session),o;try{let t=buildWorkflowHostTools({tools:e.tools}),r=e.childResults??[],s=n,c=0;for(;;){o=await continueWorkflowSandboxInterrupt({bridgeRequestLimit:resolveWorkflowSandboxBridgeRequestLimit(e.config.workflowMaxSubagents),continuationSecurity:a,interrupt:s,lifecycle:i,resolution:r[c]?.output,tools:t});let n=await unwrapWorkflowSandboxResult(o,a);if(n.status!==`interrupted`||!isWorkflowRuntimeActionInterrupt(n.interrupt)||c+1>=r.length)break;let l=getWorkflowRuntimeActionInterrupts(n.interrupt)[0];if(l===void 0)throw Error(`Workflow continuation contains no pending runtime-action interrupt.`);c++,s=l}}catch(e){logError(log,`Workflow interrupt continuation failed`,e),o={error:`workflow_continuation_failed`,message:toErrorMessage(e),retryable:!1}}let s=await unwrapWorkflowSandboxResult(o,a),c=s.status===`interrupted`?s.interrupt:s.output,l=replaceWorkflowToolResult([...e.session.history,...t.responseMessages],n.outerToolCallId,c),u=clearPendingWorkflowInterrupt({...e.session,history:l});if(s.status===`interrupted`){if(!isWorkflowRuntimeActionInterrupt(s.interrupt))throw Error(`Unsupported Workflow interrupt kind "${s.interrupt.payload.kind}".`);let t=e.session.history.length,n=l.slice(0,t),r=l.slice(t);return u={...u,history:n},parkOnWorkflowInterrupt({baseSession:u,emissionState:e.emissionState,interrupt:s.interrupt,promptMessages:n,responseMessages:r})}return{next:e.runStep,session:u}}function replaceWorkflowToolResult(e,t,n){if(t===void 0)return[...e];let r=typeof n==`string`?{type:`text`,value:n}:{type:`json`,value:n};return e.map(e=>{if(e.role!==`tool`)return e;let n=e.content.map(e=>e.type!==`tool-result`||e.toolCallId!==t?e:{...e,output:r});return{...e,content:n}})}function parkOnWorkflowInterrupt(e){let t=getWorkflowRuntimeActionInterrupts(e.interrupt)[0];if(t===void 0)throw Error(`Workflow continuation contains no pending runtime-action interrupt.`);let n={...e.baseSession,history:[...e.promptMessages]};return{next:null,session:setHarnessEmissionState(setPendingWorkflowInterrupt({interrupt:t,responseMessages:e.responseMessages,session:n}),e.emissionState)}}function createNextCompactionConfig(e,t,n){let r={recentWindowSize:e.recentWindowSize,threshold:e.threshold,thresholdPercent:e.thresholdPercent};return n.usage?.inputTokens!==void 0&&(r.lastKnownInputTokens=n.usage.inputTokens,r.lastKnownPromptMessageCount=t.length),r}async function maybeCompact(e){let{emit:t,emissionState:n}=e,r=e.messages,i=e.session;if(e.force!==!0&&!shouldCompact(r,i.compaction))return{messages:r,session:i};let a=await resolveCompactionModel({compactionModelReference:i.agent.compactionModelReference,model:e.model,modelReference:requireSessionModelReference(i),resolveModel:e.resolveModel});if(t&&await t(createCompactionRequestedEvent({modelId:formatLanguageModelGatewayId(a.model),sequence:n.sequence,sessionId:i.sessionId,turnId:n.turnId,usageInputTokens:getInputTokenCount(r,i.compaction)})),r=await compactMessages(r,a.model,i.compaction,a.providerOptions,e.telemetry,buildGatewayAttributionHeaders(a.model,e.runtimeIdentity),e.abortSignal,e.force===!0),e.onCompaction)for(let t of e.onCompaction())r.push(t);return t&&await t(createCompactionCompletedEvent({modelId:formatLanguageModelGatewayId(a.model),sequence:n.sequence,sessionId:i.sessionId,turnId:n.turnId})),{messages:r,session:i}}function resolveApprovalKeyFromTools(e){return t=>{let n=e.get(t.action.toolName);if(n?.approvalKey!==void 0)return n.approvalKey(t.action.input)}}async function runModelCallWithRetries(e,t,n){for(let r=1;;r++){throwIfTurnAborted(n);try{return await e(r)}catch(e){if(throwIfTurnAborted(n),r===3||classifyModelCallError(e)!==`retry`)throw e;let i=500*2**(r-1)+Math.floor(Math.random()*250);log.warn(`model call failed transiently — retrying`,{attempt:r,delayMs:i,sessionId:t.sessionId,turnId:t.turnId,error:e}),await new Promise(e=>setTimeout(e,i))}}}function findAuthorizationSignalFromToolResults(e){let t=contextStorage.getStore();if(t!==void 0)for(let n of e??[]){let e=readToolInterrupt(t,n.toolCallId);if(e!==void 0&&isAuthorizationSignal(e))return e}for(let t of e??[])if(isAuthorizationSignal(t.output))return t.output}export{appendMissingToolResultMessages,createToolLoopHarness};
|
|
3
|
+
`)};return t!==void 0&&(n.providerOptions=t),n}function buildGatewayAttributionHeaders(e,t){let n=resolveProviderHeaders(e);if(n===void 0)return;let r=t?.agentName??t?.agentId,i=process.env.VERCEL_PROJECT_PRODUCTION_URL||process.env.VERCEL_URL,a=i?`https://${i}`:void 0,o={...n};return r&&(o[`x-title`]=r),a&&(o[`http-referer`]=a),o}async function resolveActiveRuntimeModel(e){if(e.ctx===void 0){let t=e.session.agent.modelReference;if(t===void 0)throw Error(`Dynamic model selection is unavailable outside an eve runtime context.`);return{model:await e.config.resolveModel(t),session:e.session}}let t=getActiveDynamicModelSelection(e.ctx);if(t===null){let t=e.session.agent.modelReference;if(e.session.agent.dynamicModel===!0||t===void 0)throw Error(`Dynamic model selection is required before model-dependent work begins. Add a matching resolver handler that returns a concrete model.`);return{model:await e.config.resolveModel(t),session:e.session}}return{model:t.model===void 0?await e.config.resolveModel(t.reference):t.model,session:updateSessionModelReference(e.session,t.reference)}}function updateSessionModelReference(e,t){return{...e,agent:{...e.agent,modelReference:t},compaction:updateCompactionThresholdForModelReference({compaction:e.compaction,modelReference:t})}}function updateCompactionThresholdForModelReference(e){return e.modelReference.contextWindowTokens===void 0?e.compaction:{...e.compaction,threshold:Math.max(1,Math.floor(e.modelReference.contextWindowTokens*(e.compaction.thresholdPercent??.9)))}}const TURN_TRACE_STATE_KEY=`eve.harness.turnTrace`;function getTurnTraceState(e){return e.state?.[TURN_TRACE_STATE_KEY]}function setTurnTraceState(e,t){let n={traceId:t.traceId,spanId:t.spanId,traceFlags:t.traceFlags};return{...e,state:{...e.state,[TURN_TRACE_STATE_KEY]:n}}}function resolveStepOtelContext(e,t,n){if(t)return trace.setSpan(context.active(),t);if(e){let e=getTurnTraceState(n);if(e){let t=trace.wrapSpanContext({isRemote:!0,traceId:e.traceId,spanId:e.spanId,traceFlags:e.traceFlags});return trace.setSpan(context.active(),t)}}}function buildHarnessToolsWithDynamicSubagents(e,t){let n=new Map(e);if(t===void 0)return n;for(let e of buildDynamicSubagentTools(t)){if(n.has(e.name))throw Error(`Dynamic subagent "${e.name}" collides with another runtime-visible tool name.`);n.set(e.name,e)}return n}function createToolLoopHarness(t){let n=t.handleEvent,d=getInstrumentationRuntime()?.otelSettings,g=getInstrumentationConfig();d!==void 0&&ensureOtelIntegration();let v=d===void 0?void 0:trace.getTracer(`eve`),y=t.runtimeIdentity?.agentName;async function runStep(e,t){let n;if(v&&hasStepInput(t)){let t=d?.functionId??y,r={"eve.version":eveVersion,"eve.environment":environment,"eve.session.id":e.sessionId};t&&(r[`ai.telemetry.functionId`]=t),n=v.startSpan(`ai.eve.turn`,{attributes:r})}let r=resolveStepOtelContext(v,n,e),executeStep=()=>executeStepBody(e,t,n);try{return r?await context.with(r,executeStep):await executeStep()}finally{n?.end()}}async function executeStepBody(v,x,C){let E=v;C&&(E=setTurnTraceState(E,C.spanContext()));let O=getHarnessEmissionState(E.state),A=contextStorage.getStore(),j=A?.get(ParentSessionKey),M=j!==void 0||A?.get(SessionCallbackKey)!==void 0,re=resolveParentLineage(j,A?.get(ChannelKey)),ie=A?.get(ParentTraceContextKey),ae,N=createInstrumentationHandleEvent({agentName:t.runtimeIdentity?.agentName,channelKind:A?.get(ChannelInstrumentationKey)?.kind,getAttemptScope:()=>ae,handleEvent:n,hooks:t.instrumentation?.hooks,parentLineage:re,parentTraceContext:ie,rootSessionId:j?.rootSessionId,sessionId:E.sessionId,turnId:activeTurnId(O)}),failModelSelection=async(n,r)=>{if(throwIfTurnAborted(t.abortSignal),C&&recordErrorOnSpan(C,n),!N)throw n;let a=createErrorId(),o=toErrorMessage(n);return log.error(`model selection failed terminally`,{error:n,errorId:a,sessionId:E.sessionId,turnId:r.turnId}),await emitFailedStep(N,r,{code:`MODEL_SELECTION_FAILED`,details:{errorId:a},message:o,sessionId:E.sessionId}),{next:t.mode===`task`||M?{done:!0,isError:!0,output:o}:{done:!0,output:``},session:E}},preparePreambleTrace=async()=>{let e=C?.spanContext(),n=e!==void 0&&isValidSpanContext(e)?{spanId:e.spanId,traceFlags:e.traceFlags,traceId:e.traceId}:void 0;return await prepareTurnTraceContext({agentName:t.runtimeIdentity?.agentName,instrumentation:t.instrumentation,parentLineage:re,parentTraceContext:ie,rootSessionId:j?.rootSessionId??E.rootSessionId??E.sessionId,sequence:O.sequence,sessionId:E.sessionId,sessionStarted:O.sessionStarted,traceContext:n,turnId:`turn_${O.sequence}`})};if(t.clearOnly===!0)return E={...E,compaction:{recentWindowSize:E.compaction.recentWindowSize,threshold:E.compaction.threshold,thresholdPercent:E.compaction.thresholdPercent},history:[]},await N?.(createContextClearedEvent({sequence:O.sequence,sessionId:E.sessionId,turnId:activeTurnId(O)})),await N?.(createSessionWaitingEvent()),{next:null,session:E};if(t.compactOnly===!0){if(E.history.length>0)try{let e=await resolveActiveRuntimeModel({config:t,ctx:contextStorage.getStore(),session:E});E=e.session;let n=await maybeCompact({abortSignal:t.abortSignal,emit:N,emissionState:{...O,turnId:activeTurnId(O)},force:!0,messages:[...E.history],model:e.model,onCompaction:t.onCompaction,resolveModel:t.resolveModel,runtimeIdentity:t.runtimeIdentity,session:E,telemetry:enrichTelemetry(d,y)??void 0});E={...n.session,compaction:{recentWindowSize:n.session.compaction.recentWindowSize,threshold:n.session.compaction.threshold,thresholdPercent:n.session.compaction.thresholdPercent},history:n.messages}}catch(e){logError(log,`manual session compaction failed`,e,{sessionId:E.sessionId})}return await N?.(createSessionWaitingEvent()),{next:null,session:E}}let P=consumeDeferredStepInput({input:x,preferCurrentInput:t.mode!==`conversation`&&x!==void 0&&hasPendingApprovalBatch(E),session:E});E=P.session;let F=await resolvePendingRuntimeActions({emit:N,session:E,stepInput:P.input});if(F.outcome===`unresolved`)return{next:null,session:F.session};E=F.session;let oe=getPendingInputRequestIds(E.state),I=convertStaleResponsesToUserMessage({history:F.messages,pendingRequestIds:oe,stepInput:dropStaleSessionLimitContinuationResponses({pendingRequestIds:oe,stepInput:P.input})}),L=I.stepInput,R=I.kind===`converted`?{...L,message:I.displayMessage}:L,z=contextStorage.getStore();z!==void 0&&t.resolveStepDynamicTools!==void 0&&shouldPrepareApprovalPolicyTools({session:E,stepInput:L})&&await t.resolveStepDynamicTools({ctx:z,event:createStepStartedEvent({modelId:E.agent.modelReference?.id??`dynamic`,sequence:O.sequence,stepIndex:O.stepIndex,turnId:O.turnId}),messages:F.messages});let B=await coordinateApprovalDelivery({session:E,stepInput:L,tools:buildResponseAuthorizationTools({authoredTools:t.tools,context:z})});if(E=B.session,N){for(let e of B.feedback)await N(createMessageCompletedEvent({message:e,sequence:O.sequence,stepIndex:O.stepIndex,turnId:O.turnId}));let e=getApprovalAuditState(E.state);for(let t of e.activeCandidates.filter(e=>e.pendingEventEmitted!==!0))await N(createApprovalCandidateEvent({candidateId:t.candidateId,outcome:`pending`,requestId:t.requestId,responderPrincipalId:t.responder.principalId,sequence:O.sequence,stepIndex:O.stepIndex,turnId:O.turnId})),E={...E,state:markApprovalCandidatePendingEventEmitted({candidateId:t.candidateId,state:E.state})};for(let t of e.candidateHistory.filter(e=>e.eventEmitted!==!0&&e.status!==`allowed`))await N(createApprovalCandidateEvent({candidateId:t.candidateId,outcome:t.status,requestId:t.requestId,responderPrincipalId:t.responder.principalId,reason:t.reason,sequence:O.sequence,stepIndex:O.stepIndex,turnId:O.turnId})),E={...E,state:markApprovalCandidateHistoryEventEmitted({candidateId:t.candidateId,state:E.state})};for(let t of e.settlements.filter(e=>e.eventEmitted!==!0))await N(createApprovalSettledEvent({outcome:t.outcome===`allowed`?`approved`:`cancelled`,requestId:t.requestId,responderPrincipalId:t.actor.principalId,sequence:O.sequence,stepIndex:O.stepIndex,turnId:O.turnId})),E={...E,state:markApprovalSettlementEventEmitted({requestId:t.requestId,state:E.state})}}if(B.kind===`park`)return{next:null,session:E};if(B.kind===`continue-coordination`)return{next:runStep,session:B.stepInput===void 0?E:queueDeferredStepInput(E,B.stepInput)};if(B.challenges.length>0){if(N)for(let e of B.challenges)await N(createAuthorizationRequiredEvent({authorization:e.challenge,candidateId:e.candidateId,description:e.challenge.instructions??`Authorization required for ${e.name}`,name:e.name,sequence:O.sequence,stepIndex:O.stepIndex,turnId:O.turnId,webhookUrl:e.hookUrl}));let e=B.stepInput===void 0?E:queueDeferredStepInput(E,B.stepInput);return{next:null,session:{...e,state:setPendingAuthorization(e.state,{challenges:B.challenges})}}}let V=resolvePendingInput({deferMessagesWhileApprovalsPending:t.mode!==`conversation`,history:F.messages,resolveApprovalKey:resolveApprovalKeyFromTools(t.tools),session:E,stepInput:B.stepInput});if(V.outcome===`unresolved`){let e=F.outcome===`resolved`?{...V.session,history:[...F.messages]}:V.session;if(N&&t.mode===`conversation`&&V.deferredMessage===!0&&hasStepInput(x)){A!==void 0&&prepareDynamicInstructionPreamble(A,e.history);let n=[];try{let e=await preparePreambleTrace();O=await emitTurnPreamble(N,R??{},O,t.runtimeIdentity,e)}catch(t){if(n=A===void 0?[]:drainDynamicInstructionUserMessages(A),e={...e,history:[...e.history,...n]},E=e,!isDynamicModelSelectionError(t))throw t;return failModelSelection(t,{sessionStarted:!0,sequence:O.sequence,stepIndex:0,turnId:`turn_${O.sequence}`})}return n=A===void 0?[]:drainDynamicInstructionUserMessages(A),e={...e,history:[...e.history,...n]},O=await emitTurnEpilogue(N,O,t.mode),{next:null,session:setHarnessEmissionState(e,O)}}return F.outcome===`resolved`?(N&&t.mode===`conversation`&&(O=await emitTurnEpilogue(N,O,t.mode),e=setHarnessEmissionState(e,O)),{next:null,session:e}):{next:null,session:V.session}}if(t.instrumentation?.hooks!==void 0&&V.resolvedInputs!==void 0)for(let e of V.resolvedInputs)await publishInputResolutions({batch:e,hooks:t.instrumentation.hooks,sessionId:E.sessionId});if(N&&V.rejectedActions)for(let e of V.rejectedActions)for(let t of e.results)await N(createActionResultEvent({rejected:!0,result:t,sequence:e.event.sequence,stepIndex:e.event.stepIndex,turnId:e.event.turnId}));let H=[];if(N&&hasStepInput(x)){A!==void 0&&prepareDynamicInstructionPreamble(A,V.session.history);try{let e=await preparePreambleTrace();O=await emitTurnPreamble(N,R??{},O,t.runtimeIdentity,e)}catch(e){if(H=A===void 0?[]:drainDynamicInstructionUserMessages(A),E={...V.session,history:[...V.session.history,...H]},!isDynamicModelSelectionError(e))throw e;return failModelSelection(e,{sessionStarted:!0,sequence:O.sequence,stepIndex:0,turnId:`turn_${O.sequence}`})}H=A===void 0?[]:drainDynamicInstructionUserMessages(A),C&&C.setAttribute(`eve.turn.id`,O.turnId)}let se=V.session.history.length;E=setHarnessEmissionState({...V.session,history:[...V.session.history,...H]},O);let U=[...V.messages.slice(0,se),...H,...V.messages.slice(se)],W=await applySessionLimitContinuation({config:t,emit:N,emissionState:O,limitContinuation:V.limitContinuation,session:E});if(W.result!==null)return W.result;if(E=W.session,t.persistentSubagentSessions===!0){let e=getAgentHandleStore(E.state);if(e?.handles.some(e=>e.phase===`addressed`)!==!0){let t=resolveAgentsAnnouncement({messages:U,store:e});t!==void 0&&U.push({content:t,role:`user`})}}if(L?.context!==void 0&&V.deferredContext!==!0)for(let e of L.context)U.push({content:e,role:`user`});let ce=normalizeUserContent(L?.message);if(ce!==void 0&&!V.deferredMessage&&!V.consumedMessage){let e=await stageAttachmentsToSandbox(ce);U.push({content:e,role:`user`})}let G=A,K;try{G!==void 0&&t.dispatchDynamicModelEvent!==void 0&&await t.dispatchDynamicModelEvent({ctx:G,event:{data:{sequence:O.sequence,stepIndex:O.stepIndex,turnId:O.turnId},type:`step.started`},messages:U}),K=await resolveActiveRuntimeModel({config:t,ctx:G,session:E})}catch(e){return failModelSelection(e,O)}E=K.session;let q=K.model;N&&await emitStepStarted(N,O,requireSessionModelReference(E).id,U);let le=detectPromptCachePath(q),J=le.kind===`anthropic-direct`?getAnthropicCacheMarker():void 0,ue=buildGatewayAttributionHeaders(q,t.runtimeIdentity);({messages:U,session:E}=await maybeCompact({abortSignal:t.abortSignal,emit:N,emissionState:O,messages:U,model:q,onCompaction:t.onCompaction,resolveModel:t.resolveModel,runtimeIdentity:t.runtimeIdentity,session:E,telemetry:enrichTelemetry(d,y)??void 0}));let de=getApprovedTools(E),fe=E.outputSchema===void 0&&G!==void 0&&isScheduleAppAuth(G.get(AuthKey))&&G.get(ParentSessionKey)===void 0,pe=await hydrateSandboxAttachments(U),Y=[],me=[];for(let e of pe)e.role===`system`?Y.push(e):me.push(e);if(G!==void 0){Y.push(...buildDynamicInstructionMessages(G));let e=G.get(PendingSkillAnnouncementKey);e!==void 0&&e.length>0&&Y.push({role:`system`,content:e})}fe&&Y.push({role:`system`,content:CONDITIONAL_DELIVERY_INSTRUCTION});let X=me,prepareModelCallInput=e=>{let t=e?[{role:`system`,content:e}]:[],n=E.agent.system?[{role:`system`,content:E.agent.system}]:[],r=Y.length>0||t.length>0?[...t,...n,...Y]:void 0,i=r!==void 0&&J?applySystemCacheBreakpoint(r,J):r,a=i===void 0?E.agent.system??void 0:mergeSystemInstructions(i);return{instructions:a,telemetryRuntimeContext:buildTelemetryRuntimeContext({eveVersion,authored:g,emissionState:O,environment,modelInput:{instructions:a,messages:X},session:E})}},he=t.tools,runSingleModelCall=async e=>{let{instructions:n,telemetryRuntimeContext:i={}}=e.preparedInput??prepareModelCallInput(e.extraSystemNote);e.retryReason&&(i[`eve.retry.reason`]=e.retryReason);let a=e.trailingUserNote?[...X,{role:`user`,content:e.trailingUserNote}]:X,o=buildHarnessToolsWithDynamicSubagents(t.tools,G),s=getAdvertisedTools({session:E,tools:o});he=s;let c=await buildToolSetWithProviderTools({approvedTools:de,capabilities:t.capabilities,disabledProviderTools:e.disabledProviderTools,modelReference:requireSessionModelReference(E),tools:s,webSearchProvider:t.webSearchProvider});if(G!==void 0){let n=getAdvertisedTools({session:E,tools:buildDynamicTools(G)}),r=buildToolSetFromDefinitions({approvedTools:de,capabilities:t.capabilities,disabledProviderTools:e.disabledProviderTools,tools:n});for(let[e,t]of Object.entries(r)){if(s.get(e)?.runtimeAction!==void 0)throw Error(`Dynamic tool "${e}" collides with a runtime-visible subagent.`);c[e]=t}}E.outputSchema!==void 0&&(c[FINAL_OUTPUT_TOOL_NAME]=buildFinalOutputTool(E.outputSchema));let l=N===void 0?void 0:({tools:e})=>createWorkflowLifecycle({emit:N,emissionState:O,tools:e}),u=t.workflow===!0?{lifecycle:l,maxSubagents:t.workflowMaxSubagents}:void 0,f=await getAdvertisedTools({modelTools:c,session:E,tools:s,workflow:u});E=f.session;let p=f.modelTools,m=J?applyLastToolCacheBreakpoint(p,J):p,h=t.instrumentation?.hooks,g=activeTurnId(O),_=h===void 0?void 0:{attemptId:`${E.sessionId}:${g}:${O.stepIndex}:${e.attemptIndex}`,attemptIndex:e.attemptIndex,functionId:d?.functionId??y,rootSessionId:j?.rootSessionId??E.sessionId,sessionId:E.sessionId,stepIndex:O.stepIndex,turnId:g};ae=_;let v=_===void 0||h===void 0?void 0:createAiSdkHookBridge(_,h,t.instrumentation?.runInContext),b=buildStepHooks({cachePath:le,emit:N,emissionState:O,emitStepStarted:e.suppressStepStartedEmission!==!0,marker:J,session:E}),x=new ToolLoopAgent({headers:ue,instructions:n,model:q,onToolExecutionEnd:logToolExecutionError,onError(e){summarizeKnownError(e.error)?.tags.includes(`config`)!==!0&&logError(log,`tool-loop stream error`,e.error)},onStepFinish:b.onStepFinish,prepareStep:b.prepareStep,reasoning:E.agent.reasoning,runtimeContext:i,stopWhen:isStepCount(1),telemetry:enrichTelemetry(d,y,i,v),toolApproval:buildToolApproval(p),tools:m}),executeModelCall=async()=>{if(N){let e=[...t.tools].filter(([e,t])=>t.runtimeAction!==void 0&&s.get(e)===void 0).map(([e])=>e),n=new Set([ASK_QUESTION_TOOL_NAME,FINAL_OUTPUT_TOOL_NAME,...e]),r=await x.stream({abortSignal:t.abortSignal,messages:a}),{emittedActionCallIds:i,handledInlineToolResultCallIds:o,invalidInputToolCallIds:c,inlineAuthorizationResults:l,trailingInlineToolResultParts:u}=await emitStreamContent(N,O,r.fullStream,{excludedActionToolNames:n,tools:s});throwIfTurnAborted(t.abortSignal);let[d,f]=await Promise.all([b.stepResult,r.responseMessages]);if(isEmptyModelResponse(d)&&extractToolResultCallIds(f).size===0&&l.length===0&&u.length===0)throw new EmptyModelResponseError;await emitStepActions(N,O,d,{emittedActionCallIds:i,excludedActionCallIds:c,excludedActionToolNames:n,handledInlineToolResultCallIds:o,tools:s});let p=d.toolResults,m=new Map(p.map(e=>[e.toolCallId,e]));for(let e of l)m.set(e.toolCallId,e);return withAccumulatedResponseMessages({invalidInputToolCallIds:c,responseMessages:appendMissingToolResultMessages({append:u,responseMessages:f}),stepResult:d,toolResults:[...m.values()]})}let e=await x.generate({abortSignal:t.abortSignal,messages:a});throwIfTurnAborted(t.abortSignal);let n=await b.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 _!==void 0&&await h?.publish({idempotencyKey:attemptIdempotencyKey(_),scope:_,type:`step.attempt.completed`}),e}catch(e){return _!==void 0&&await h?.publish({error:e,idempotencyKey:attemptIdempotencyKey(_),scope:_,type:`step.attempt.failed`}),rethrowNoOutputAsEmptyResponse(e)}},ge=0,runOneModelCall=async e=>runModelCallWithRetries(t=>runSingleModelCall({...e,attemptIndex:ge++,preparedInput:t===1?e.preparedInput:void 0,suppressStepStartedEmission:t!==1||e.suppressStepStartedEmission}),{sessionId:E.sessionId,turnId:O.turnId},t.abortSignal),_e=prepareModelCallInput(),ve=await continuePendingWorkflowInterrupt({childResults:L?.runtimeActionResults,config:t,emit:N,emissionState:O,runStep,session:E,tools:buildHarnessToolsWithDynamicSubagents(t.tools,G)});if(ve!==null)return ve;let ye=await enforceSessionTokenLimit({config:t,emit:N,emissionState:O,messages:U,session:E});if(ye!==null)return ye;let Z;try{Z=await runOneModelCall({preparedInput:_e,suppressStepStartedEmission:!0})}catch(n){throwIfTurnAborted(t.abortSignal);let r=await runModelCallRecoveryPipeline({error:n,stages:[e=>attemptUnsupportedProviderToolRecovery({error:e.error,runOneModelCall,sessionId:E.sessionId,turnId:O.turnId}),e=>attemptEmptyResponseRecovery({emptyDeliveryEnabled:fe,error:e.error,retryCallOptions:e.retryCallOptions,runOneModelCall,sessionId:E.sessionId,turnId:O.turnId})]});if(throwIfTurnAborted(t.abortSignal),r.outcome===`recovered`)Z=r.result;else{let n=r.error;if(C&&recordErrorOnSpan(C,n),!N)throw n;let a=extractWorkflowStreamWriteErrorDetails(n);if(a!==null){let t=createErrorId();return log.error(`workflow stream write failed — parking session for retry by the user`,{...a,errorId:t,error:n,sessionId:E.sessionId,turnId:O.turnId}),O=await emitRecoverableFailedTurn(N,O,{code:`WORKFLOW_STREAM_WRITE_FAILED`,continuationToken:E.continuationToken,details:{...a,errorId:t},message:toErrorMessage(n)}),{next:null,session:setHarnessEmissionState(E,O)}}let o=classifyModelCallError(n),s=createErrorId(),c=summarizeKnownError(n),l=c===null?extractUpstreamRejectionMessage(n):null,u=c?.message??l?.message??toErrorMessage(n),d=c?.hint===void 0?u:`${u} ${c.hint}`,p=extractModelCallErrorDetails(n),m=buildModelCallFailureDetails({catalogSummary:c,error:n,errorId:s,modelCallDetails:p,upstreamRejection:l}),h=buildModelCallFailureLogFields({error:n,errorId:s,modelCallDetails:p,recognized:c!==null||l!==null,sessionId:E.sessionId,turnId:O.turnId});if(o===`terminal`)return c===null?log.error(l?.message??`model call failed terminally`,h):log.error(`${c.name}: ${c.message}`,{errorId:s,hint:c.hint,sessionId:E.sessionId,turnId:O.turnId}),await emitFailedStep(N,O,{code:`MODEL_CALL_FAILED`,details:m,message:u,sessionId:E.sessionId}),{next:t.mode===`task`||M?{done:!0,isError:!0,output:d}:{done:!0,output:``},session:E};if(t.mode===`task`){if(o===`recoverable`&&!(n instanceof EmptyModelResponseError))throw log.warn(l?.message??`model call failed recoverably in task mode — rethrowing for durable step retry`,h),n;return log.error(l?.message??`model call failed; failing the task run`,h),await emitFailedStep(N,O,{code:`MODEL_CALL_FAILED`,details:m,message:u,sessionId:E.sessionId}),{next:{done:!0,isError:!0,output:d},session:E}}log.error(l?.message??`model call failed — parking session for retry by the user`,h),O=await emitRecoverableFailedTurn(N,O,{code:`MODEL_CALL_FAILED`,continuationToken:E.continuationToken,details:m,message:u});let g={isError:!0,output:d};return{next:null,session:setHarnessEmissionState(E,O),settledTurn:g}}}let Q=accumulateTurnUsage({previous:getTurnUsageState(E.state),turnId:O.turnId,usage:extractTokenUsageDelta({costUsd:extractGatewayCostUsd(Z.providerMetadata),usage:Z.usage})});E=setTurnUsageState(E,Q);let $;try{$=formatLanguageModelGatewayId(q)}catch{$=void 0}return await setEveAttributes({"$eve.model":$,"$eve.input_tokens":Q.inputTokens,"$eve.output_tokens":Q.outputTokens,"$eve.cache_read_tokens":Q.cacheReadTokens,"$eve.cache_write_tokens":Q.cacheWriteTokens,"$eve.cost_usd":Q.sawCost?Q.costUsd:void 0,"$eve.tool_count":t.tools.size}),handleStepResult({config:t,emit:N,emissionState:O,promptMessages:U,result:Z,runStep,session:E,runtimeActionTools:he})}return runStep}function isValidSpanContext(e){return/^[0-9a-f]{32}$/u.test(e.traceId)&&e.traceId!==`00000000000000000000000000000000`&&/^[0-9a-f]{16}$/u.test(e.spanId)&&e.spanId!==`0000000000000000`}function extractTokenUsageDelta(e){let t=e.usage;if(!(t===void 0&&e.costUsd===void 0))return{cacheReadTokens:t?.inputTokenDetails?.cacheReadTokens,cacheWriteTokens:t?.inputTokenDetails?.cacheWriteTokens,costUsd:e.costUsd,inputTokens:t?.inputTokens,outputTokens:t?.outputTokens}}function extractGatewayCostUsd(e){let t=readGatewayMetadata(e)?.cost;if(typeof t==`number`&&Number.isFinite(t))return t;if(typeof t==`string`){let e=Number(t);return Number.isFinite(e)?e:void 0}}function readGatewayMetadata(e){let t=e?.gateway;return t&&typeof t==`object`&&!Array.isArray(t)?t:void 0}function buildModelCallFailureDetails(e){let{catalogSummary:t,error:r,errorId:i,modelCallDetails:a,upstreamRejection:o}=e;if(t!==null){let e={errorId:i,message:t.message,name:t.name,semanticErrorId:t.id,...a};return t.hint!==void 0&&(e.hint=t.hint),e}return o===null?{...formatError(r,i),...a}:{errorId:i,message:toErrorMessage(r),name:o.name,...a}}function buildModelCallFailureLogFields(e){let t={errorId:e.errorId,sessionId:e.sessionId,turnId:e.turnId};return e.recognized?{...t,details:e.modelCallDetails}:{...t,error:e.error}}async function runModelCallRecoveryPipeline(e){let t=e.error,n;for(let r of e.stages){let e=await r({error:t,retryCallOptions:n});if(e.outcome===`recovered`)return e;e.outcome===`failed`&&(t=e.error,n=e.retryCallOptions)}return{outcome:`failed`,error:t}}function withAccumulatedResponseMessages(e){let{stepResult:t}=e;return{content:t.content,finishReason:t.finishReason,...e.invalidInputToolCallIds===void 0?{}:{invalidInputToolCallIds:e.invalidInputToolCallIds},providerMetadata:t.providerMetadata,response:{...t.response,messages:[...e.responseMessages]},text:t.text,toolCalls:t.toolCalls,toolResults:e.toolResults===void 0?t.toolResults:[...e.toolResults],usage:t.usage}}function appendMissingToolResultMessages(e){let t=extractToolResultCallIds(e.responseMessages),n=e.append.filter(e=>!t.has(e.toolCallId));return[...e.responseMessages,...n.length>0?[{role:`tool`,content:[...n]}]:[]]}function getInvalidToolCallInputErrors(e){let t=[];for(let n of e.toolCalls){if(n.toolName===FINAL_OUTPUT_TOOL_NAME)continue;let e=getInvalidToolCallInputError({toolCall:n});e!==void 0&&t.push(e)}return t}function extractToolResultCallIds(e){let t=new Set;for(let n of e)if(Array.isArray(n.content))for(let e of n.content)typeof e==`object`&&e&&e.type===`tool-result`&&t.add(e.toolCallId);return t}async function attemptUnsupportedProviderToolRecovery(e){let t=extractUnsupportedProviderToolTypes(e.error);if(t.length===0)return{outcome:`skipped`};let n=[];for(let e of t){let t=resolveFrameworkToolFromUpstreamType(e);t!==null&&!n.includes(t)&&n.push(t)}if(n.length===0)return{outcome:`skipped`};log.warn(`disabling unsupported provider tool(s); retrying step once`,{disabled:n,sessionId:e.sessionId,turnId:e.turnId,upstreamTypes:t});let r={disabledProviderTools:new Set(n),extraSystemNote:buildDisabledToolNote(n)};try{return{outcome:`recovered`,result:await e.runOneModelCall({...r,suppressStepStartedEmission:!0})}}catch(e){return{outcome:`failed`,error:e,retryCallOptions:r}}}function buildDisabledToolNote(e){let t=e.join(`, `);return`The following ${e.length===1?`tool is`:`tools are`} not available with the current model and has been removed: ${t}. Proceed using the remaining tools or your training knowledge.`}function isEmptyModelResponse(e){return e.toolCalls.length===0&&e.toolResults.length===0&&resolveAssistantStepText(e.response.messages,e.text)===null}function rethrowNoOutputAsEmptyResponse(e){throw isNoOutputGeneratedError(e)?new EmptyModelResponseError({cause:e}):e}const EMPTY_RESPONSE_NUDGE=`Your previous reply was empty and was not delivered. Answer now from the tool results above; do not re-run tools or mention this notice.`;function buildEmptyResponseNudge(e){return e?`${EMPTY_RESPONSE_NUDGE} If the current task explicitly requires conditional delivery and there is nothing to report, reply with exactly ${EMPTY_DELIVERY_SENTINEL}.`:EMPTY_RESPONSE_NUDGE}async function attemptEmptyResponseRecovery(e){if(!(e.error instanceof EmptyModelResponseError))return{outcome:`skipped`};log.warn(`empty model response; reissuing the model call once`,{sessionId:e.sessionId,turnId:e.turnId});try{return{outcome:`recovered`,result:await e.runOneModelCall({...e.retryCallOptions,retryReason:`empty-response`,suppressStepStartedEmission:!0,trailingUserNote:buildEmptyResponseNudge(e.emptyDeliveryEnabled)})}}catch(t){return{outcome:`failed`,error:t,retryCallOptions:e.retryCallOptions}}}async function handleStepResult(e){let{config:t,emit:n,promptMessages:r,result:i,runStep:a}=e,{emissionState:o,session:s}=e,c=resolveAssistantStepText(i.response.messages,i.text),l=i.finishReason!==`tool-calls`&&i.toolCalls.length===0&&hasEmptyDeliverySentinel(c),u=getInvalidToolCallInputErrors({toolCalls:i.toolCalls}),d=new Set([...i.invalidInputToolCallIds??[],...i.toolCalls.filter(isInvalidToolCall).map(e=>e.toolCallId),...u.map(e=>e.toolCallId)]),f=l?[]:appendMissingToolResultMessages({append:u.map(e=>createToolResultMessagePartFromToolError(e)),responseMessages:i.response.messages}),p=l?null:c,m=new Set;for(let e of[...i.content??[],...i.toolResults??[]])(e.type===`tool-result`||e.type===`tool-error`)&&e.providerExecuted===!0&&m.add(e.toolCallId);let h=normalizeProviderToolHistory({messages:f,providerExecutedOutcomeIds:m}),v=h.messages,y={...s,compaction:createNextCompactionConfig(s.compaction,r,i)},b=t.workflow===!0?readWorkflowContinuationSecurity(y):void 0;if(b!==void 0){let e=await getWorkflowSandboxInterrupt(i,b);if(e!==void 0){if(!isWorkflowRuntimeActionInterrupt(e))throw Error(`Unsupported Workflow interrupt kind "${e.payload.kind}".`);return parkOnWorkflowInterrupt({baseSession:y,emissionState:o,interrupt:e,promptMessages:r,responseMessages:v})}}let S=extractToolApprovalInputRequests({content:i.content??[],excludedCallIds:d}),C=new Set(S.map(e=>e.action.callId)),ee=extractQuestionInputRequests({toolCalls:i.toolCalls,excludedCallIds:new Set([...d,...C])}),w=[...S,...ee],T=getAdvertisedTools({session:y,tools:e.runtimeActionTools}),E=(i.toolCalls??[]).filter(e=>!d.has(e.toolCallId)).filter(t=>e.runtimeActionTools.get(t.toolName)?.runtimeAction!==void 0).filter(e=>T.get(e.toolName)?.runtimeAction===void 0?(log.warn(`runtime action tool call blocked because tool is not advertised`,{callId:e.toolCallId,sessionId:y.sessionId,toolName:e.toolName}),!1):!0).map(e=>createRuntimeActionRequestFromToolCall({toolCall:e,tools:T}));if(E.length>0){if(w.length===0)return{next:null,session:setHarnessEmissionState(setPendingRuntimeActionBatch({actions:E,event:{sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId},responseMessages:v,session:{...y,history:[...r]}}),advanceStep(o))};let e=setPendingRuntimeActionBatch({actions:E,event:{sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId},responseMessages:v,session:{...y,history:[...r]}});return e=appendPendingInputBatch({event:{sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId},requests:w,responseMessages:[],session:e}),n&&await n(createInputRequestedEvent({requests:w,sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId})),{next:null,session:setHarnessEmissionState(e,advanceStep(o))}}if(w.length>0){let e=buildResponseAuthorizationTools({authoredTools:t.tools,context:contextStorage.getStore()}),i=appendPendingInputBatch({event:{sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId},requests:w,responseAuthRequiredRequestIds:S.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:v,session:{...y,history:[...r]}});return n&&(await n(createInputRequestedEvent({requests:w,sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId})),t.mode===`conversation`&&(o=await emitTurnEpilogue(n,o,t.mode),i=setHarnessEmissionState(i,o))),{next:hasDeferredStepInput(i)?a:null,session:i}}let D=findAuthorizationSignalFromToolResults(i.toolResults);if(D){let{challenges:e}=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:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId}));for(let t of e)await n(createAuthorizationRequiredEvent({attemptId:t.attemptId,authorization:t.challenge,name:t.name,description:t.challenge.instructions??`Authorization required for ${t.name}`,webhookUrl:t.hookUrl,sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId}));t.mode===`conversation`&&(o=await emitTurnEpilogue(n,o,t.mode))}return{next:null,session:setHarnessEmissionState({...y,history:[...r],state:setPendingAuthorization(y.state,{challenges:e})},o)}}let te=v,ne=[...r,...te],k={...y,history:ne};return!(k.outputSchema!==void 0&&extractFinalOutput(i)!==void 0)&&(te.at(-1)?.role===`tool`||h.outcomeEndsResponse||hasDeferredStepInput(k))?(n&&(o=advanceStep(o),k=setHarnessEmissionState(k,o)),{next:a,session:k}):t.mode===`task`?finishTaskTurn({emissionState:o,emit:n,history:r,result:i,schema:k.outputSchema,session:k,stepOutput:p}):finishConversationTurn({emissionState:o,emit:n,history:r,result:i,schema:k.outputSchema,session:k,stepOutput:p})}const OUTPUT_SCHEMA_NOT_FULFILLED={code:`OUTPUT_SCHEMA_NOT_FULFILLED`,message:`The agent could not produce a result matching the requested schema.`};function extractFinalOutput(e){return(e.toolCalls??[]).find(e=>e.toolName===FINAL_OUTPUT_TOOL_NAME&&!isInvalidToolCall(e))?.input}function persistStructuredAssistantTurn(e,t,n){return{...e,history:[...t,{content:JSON.stringify(n),role:`assistant`}],outputSchema:void 0}}async function emitStructuredResult(e,t,n,r){return await e(createResultCompletedEvent({result:n,sequence:t.sequence,stepIndex:t.stepIndex,turnId:t.turnId})),emitTurnEpilogue(e,t,r)}async function finishTaskTurn(e){let{emit:t,history:n,result:r,schema:i,stepOutput:a}=e,{emissionState:o,session:s}=e;if(i===void 0)return t&&(o=await emitTurnEpilogue(t,o,`task`),s=setHarnessEmissionState(s,o)),{next:{done:!0,output:a??``},session:s};let c=extractFinalOutput(r);return c===void 0?(t&&await emitFailedStep(t,o,{...OUTPUT_SCHEMA_NOT_FULFILLED,sessionId:s.sessionId}),{next:{done:!0,isError:!0,output:OUTPUT_SCHEMA_NOT_FULFILLED.message},session:s}):(s=persistStructuredAssistantTurn(s,n,c),t&&(o=await emitStructuredResult(t,o,c,`task`),s=setHarnessEmissionState(s,o)),{next:{done:!0,output:c},session:s})}async function finishConversationTurn(e){let{emit:t,history:n,result:r,schema:i,stepOutput:a}=e,{emissionState:o,session:s}=e;if(i===void 0)return t&&(o=await emitTurnEpilogue(t,o,`conversation`),s=setHarnessEmissionState(s,o)),{next:null,session:s,settledTurn:{output:a??``}};let c=extractFinalOutput(r);if(c===void 0){t&&(o=await emitRecoverableFailedTurn(t,o,{...OUTPUT_SCHEMA_NOT_FULFILLED,continuationToken:s.continuationToken}),s=setHarnessEmissionState(s,o));let e={isError:!0,output:OUTPUT_SCHEMA_NOT_FULFILLED.message};return{next:null,session:s,settledTurn:e}}return s=persistStructuredAssistantTurn(s,n,c),t&&(o=await emitStructuredResult(t,o,c,`conversation`),s=setHarnessEmissionState(s,o)),{next:null,session:s,settledTurn:{output:c}}}async function continuePendingWorkflowInterrupt(e){let t=getPendingWorkflowInterrupt(e.session.state);if(t===void 0)return null;let n=t.interrupt;if(!isWorkflowRuntimeActionInterrupt(n))throw Error(`Unsupported Workflow interrupt kind "${n.payload.kind}".`);let i=e.emit===void 0?void 0:createWorkflowLifecycle({emit:e.emit,emissionState:e.emissionState,skipReplayed:!0,tools:e.tools}),a=getWorkflowContinuationSecurity(e.session),o;try{let t=buildWorkflowHostTools({tools:e.tools}),r=e.childResults??[],s=n,c=0;for(;;){o=await continueWorkflowSandboxInterrupt({bridgeRequestLimit:resolveWorkflowSandboxBridgeRequestLimit(e.config.workflowMaxSubagents),continuationSecurity:a,interrupt:s,lifecycle:i,resolution:r[c]?.output,tools:t});let n=await unwrapWorkflowSandboxResult(o,a);if(n.status!==`interrupted`||!isWorkflowRuntimeActionInterrupt(n.interrupt)||c+1>=r.length)break;let l=getWorkflowRuntimeActionInterrupts(n.interrupt)[0];if(l===void 0)throw Error(`Workflow continuation contains no pending runtime-action interrupt.`);c++,s=l}}catch(e){logError(log,`Workflow interrupt continuation failed`,e),o={error:`workflow_continuation_failed`,message:toErrorMessage(e),retryable:!1}}let s=await unwrapWorkflowSandboxResult(o,a),c=s.status===`interrupted`?s.interrupt:s.output,l=replaceWorkflowToolResult([...e.session.history,...t.responseMessages],n.outerToolCallId,c),u=clearPendingWorkflowInterrupt({...e.session,history:l});if(s.status===`interrupted`){if(!isWorkflowRuntimeActionInterrupt(s.interrupt))throw Error(`Unsupported Workflow interrupt kind "${s.interrupt.payload.kind}".`);let t=e.session.history.length,n=l.slice(0,t),r=l.slice(t);return u={...u,history:n},parkOnWorkflowInterrupt({baseSession:u,emissionState:e.emissionState,interrupt:s.interrupt,promptMessages:n,responseMessages:r})}return{next:e.runStep,session:u}}function replaceWorkflowToolResult(e,t,n){if(t===void 0)return[...e];let r=typeof n==`string`?{type:`text`,value:n}:{type:`json`,value:n};return e.map(e=>{if(e.role!==`tool`)return e;let n=e.content.map(e=>e.type!==`tool-result`||e.toolCallId!==t?e:{...e,output:r});return{...e,content:n}})}function parkOnWorkflowInterrupt(e){let t=getWorkflowRuntimeActionInterrupts(e.interrupt)[0];if(t===void 0)throw Error(`Workflow continuation contains no pending runtime-action interrupt.`);let n={...e.baseSession,history:[...e.promptMessages]};return{next:null,session:setHarnessEmissionState(setPendingWorkflowInterrupt({interrupt:t,responseMessages:e.responseMessages,session:n}),e.emissionState)}}function createNextCompactionConfig(e,t,n){let r={recentWindowSize:e.recentWindowSize,threshold:e.threshold,thresholdPercent:e.thresholdPercent};return n.usage?.inputTokens!==void 0&&(r.lastKnownInputTokens=n.usage.inputTokens,r.lastKnownPromptMessageCount=t.length),r}async function maybeCompact(e){let{emit:t,emissionState:n}=e,r=e.messages,i=e.session;if(e.force!==!0&&!shouldCompact(r,i.compaction))return{messages:r,session:i};let a=await resolveCompactionModel({compactionModelReference:i.agent.compactionModelReference,model:e.model,modelReference:requireSessionModelReference(i),resolveModel:e.resolveModel});if(t&&await t(createCompactionRequestedEvent({modelId:formatLanguageModelGatewayId(a.model),sequence:n.sequence,sessionId:i.sessionId,turnId:n.turnId,usageInputTokens:getInputTokenCount(r,i.compaction)})),r=await compactMessages(r,a.model,i.compaction,a.providerOptions,e.telemetry,buildGatewayAttributionHeaders(a.model,e.runtimeIdentity),e.abortSignal,e.force===!0),e.onCompaction)for(let t of e.onCompaction())r.push(t);return t&&await t(createCompactionCompletedEvent({modelId:formatLanguageModelGatewayId(a.model),sequence:n.sequence,sessionId:i.sessionId,turnId:n.turnId})),{messages:r,session:i}}function resolveApprovalKeyFromTools(e){return t=>{let n=e.get(t.action.toolName);if(n?.approvalKey!==void 0)return n.approvalKey(t.action.input)}}async function runModelCallWithRetries(e,t,n){for(let r=1;;r++){throwIfTurnAborted(n);try{return await e(r)}catch(e){if(throwIfTurnAborted(n),r===3||classifyModelCallError(e)!==`retry`)throw e;let i=500*2**(r-1)+Math.floor(Math.random()*250);log.warn(`model call failed transiently — retrying`,{attempt:r,delayMs:i,sessionId:t.sessionId,turnId:t.turnId,error:e}),await new Promise(e=>setTimeout(e,i))}}}function findAuthorizationSignalFromToolResults(e){let t=contextStorage.getStore();if(t!==void 0)for(let n of e??[]){let e=readToolInterrupt(t,n.toolCallId);if(e!==void 0&&isAuthorizationSignal(e))return e}for(let t of e??[])if(isAuthorizationSignal(t.output))return t.output}export{appendMissingToolResultMessages,createToolLoopHarness};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{getRuntimeActionRequestKey}from"#runtime/actions/keys.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.runtimeAction,r=t.toolInput,i=t.toolName,a=sanitizeCallId(`${i}_${`interruptId`in e?String(e.interruptId):``}`);
|
|
1
|
+
import{getRuntimeActionRequestKey}from"#runtime/actions/keys.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.runtimeAction,r=t.toolInput,i=t.toolName,a=sanitizeCallId(`${i}_${`interruptId`in e?String(e.interruptId):``}`);if(n.kind===`remote-agent-call`)return{callId:a,description:``,input:r,kind:`remote-agent-call`,name:i,nodeId:n.nodeId,remoteAgentName:n.remoteAgentName??i};if(n.kind===`subagent-call`)return{callId:a,description:``,input:r,kind:`subagent-call`,name:i,nodeId:n.nodeId,subagentName:n.subagentName};throw Error(`Workflow runtime actions cannot carry "${n.kind}" tools.`)}function getWorkflowRuntimeActionInterrupts(e){return e.continuation.ledger.flatMap(t=>t.kind!==`tool`||t.status!==`interrupted`||t.interruptPayload.kind!==`eve.workflow-runtime-action`?[]:[{continuation:e.continuation,input:t.inputJson===``?void 0:JSON.parse(t.inputJson),interruptId:t.interruptId,outerToolCallId:e.continuation.outerToolCallId,payload:t.interruptPayload,toolCallId:t.toolCallId,toolName:t.name,type:`code-mode-interrupt`}])}function buildRuntimeActionsFromWorkflowInterrupt(e){return getWorkflowRuntimeActionInterrupts(e).map(e=>buildRuntimeActionFromWorkflowInterrupt(e))}function getRuntimeActionKeysFromWorkflowInterrupt(t){return buildRuntimeActionsFromWorkflowInterrupt(t).map(getRuntimeActionRequestKey)}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 +1 @@
|
|
|
1
|
-
import{createRequire}from"node:module";import{existsSync,readFileSync,realpathSync}from"node:fs";import{basename,dirname,join}from"node:path";import{fileURLToPath}from"node:url";import{EVE_PACKAGE_NAME}from"#internal/package-name.js";let cachedPackageInfo,cachedPackageLocation;const BUNDLED_FALLBACK_PACKAGE_VERSION=`0.37.
|
|
1
|
+
import{createRequire}from"node:module";import{existsSync,readFileSync,realpathSync}from"node:fs";import{basename,dirname,join}from"node:path";import{fileURLToPath}from"node:url";import{EVE_PACKAGE_NAME}from"#internal/package-name.js";let cachedPackageInfo,cachedPackageLocation;const BUNDLED_FALLBACK_PACKAGE_VERSION=`0.37.1`,WORKFLOW_MODULE_ALIASES={"workflow/errors":`src/compiled/@workflow/errors/index.js`,"workflow/internal/private":`src/compiled/@workflow/core/private.js`};function resolveFallbackPackageVersion(){return BUNDLED_FALLBACK_PACKAGE_VERSION.startsWith(`__`)?`0.0.0`:BUNDLED_FALLBACK_PACKAGE_VERSION}const FALLBACK_PACKAGE_INFO={name:EVE_PACKAGE_NAME,version:resolveFallbackPackageVersion()};function resolveCurrentModulePath(){return typeof __filename==`string`?__filename:resolveCurrentModulePathFromStack()}function resolveCurrentModulePathFromStack(){let e=Error.prepareStackTrace;try{Error.prepareStackTrace=(e,t)=>t;let e=Error().stack?.[0]?.getFileName();if(typeof e!=`string`||e.length===0)throw Error(`Failed to resolve the current module path from the stack trace.`);return e.startsWith(`file:`)?fileURLToPath(e):e}finally{Error.prepareStackTrace=e}}const require=createRequire(resolveCurrentModulePath());function tryResolveVerifiedPackageRoot(e){try{let t=realpathSync.native(e);return tryReadInstalledPackageInfo(t,EVE_PACKAGE_NAME)===void 0?void 0:dirname(t)}catch{return}}function findNearestVerifiedPackageRoot(e){let t=e;for(;;){let e=tryResolveVerifiedPackageRoot(join(t,`package.json`));if(e!==void 0)return e;let n=dirname(t);if(n===t)return;t=n}}function tryResolveDirectBuildLocation(e){let t=dirname(e);for(;;){if(basename(t)===`dist`){let e=tryResolveVerifiedPackageRoot(join(dirname(t),`package.json`));if(e!==void 0)return{packageBuildRoot:t,packageRoot:e}}let e=dirname(t);if(e===t)return;t=e}}function isSourceCheckout(e){return existsSync(join(e,`src`,`internal`,`application`,`package.ts`))}function tryCreatePackageLocation(e){if(isSourceCheckout(e))return{packageBuildRoot:null,packageRoot:e};let n=join(e,`dist`);if(existsSync(n))return{packageBuildRoot:n,packageRoot:e}}function resolveSelfPackageJsonPath(t){return createRequire(t).resolve(`${EVE_PACKAGE_NAME}/package.json`)}function resolvePackageLocationFromModulePath(e,t=resolveSelfPackageJsonPath){let n=realpathSync.native(e),i=tryResolveDirectBuildLocation(n);if(i!==void 0)return i;let a=findNearestVerifiedPackageRoot(dirname(n));if(a!==void 0&&isSourceCheckout(a))return{packageBuildRoot:null,packageRoot:a};try{let e=tryResolveVerifiedPackageRoot(t(n)),r=e===void 0?void 0:tryCreatePackageLocation(e);if(r!==void 0)return r}catch{}let o=a===void 0?void 0:tryCreatePackageLocation(a);if(o!==void 0)return o;throw Error(`Failed to resolve the eve package root from "${e}".`)}function resolvePackageLocation(){return cachedPackageLocation??=resolvePackageLocationFromModulePath(resolveCurrentModulePath()),cachedPackageLocation}function resolvePackageBuildRoot(){return resolvePackageLocation().packageBuildRoot}function resolvePackageRoot(){return resolvePackageLocation().packageRoot}function tryResolvePackageRoot(){try{return resolvePackageRoot()}catch{return}}function rewriteSourceFilePathForBuild(e){return e.replace(/\.[cm]?tsx?$/,`.js`)}function resolvePackageSourceFilePath(e){let t=resolvePackageBuildRoot();return t===null?join(resolvePackageRoot(),e):join(t,rewriteSourceFilePathForBuild(e))}function resolvePackageSourceDirectoryPath(e){let t=resolvePackageBuildRoot();return join(t===null?resolvePackageRoot():t,e)}function resolvePackageDependencyPath(e){return require.resolve(e)}function resolvePackageCompiledFilePath(e){let t=resolvePackageBuildRoot();return t===null?join(resolvePackageRoot(),`.generated`,`compiled`,e.replace(/^src\/compiled\//,``)):join(t,e)}function normalizeInstalledPackageInfo(e){let t=e;if(!(typeof t.name!=`string`||typeof t.version!=`string`))return{name:t.name,version:t.version}}function tryReadInstalledPackageInfo(e,t){let r=normalizeInstalledPackageInfo(JSON.parse(readFileSync(e,`utf8`)));if(r?.name===t)return r}function resolveInstalledPackageInfo(){if(cachedPackageInfo)return cachedPackageInfo;let e=tryResolvePackageRoot(),t=e===void 0?void 0:tryReadInstalledPackageInfo(join(e,`package.json`),EVE_PACKAGE_NAME);if(t)return cachedPackageInfo=t,cachedPackageInfo;try{let e=tryReadInstalledPackageInfo(require.resolve(`${EVE_PACKAGE_NAME}/package.json`),EVE_PACKAGE_NAME);if(e)return cachedPackageInfo=e,cachedPackageInfo}catch{}return cachedPackageInfo={...FALLBACK_PACKAGE_INFO},cachedPackageInfo}function readWorkflowVersionFromManifest(e){let t=e;for(let e of[t.devDependencies,t.dependencies,t.peerDependencies]){let t=e?.[`@workflow/core`];if(typeof t==`string`&&t.trim().length>0)return t}}function resolveExpectedWorkflowVersion(){let e=tryResolvePackageRoot();if(e!==void 0)try{return readWorkflowVersionFromManifest(JSON.parse(readFileSync(join(e,`package.json`),`utf8`)))}catch{}try{return readWorkflowVersionFromManifest(JSON.parse(readFileSync(require.resolve(`${EVE_PACKAGE_NAME}/package.json`),`utf8`)))}catch{return}}function resolveWorkflowModulePath(e){if(e===`workflow`)return resolvePackageSourceFilePath(`src/internal/workflow/index.ts`);if(e===`workflow/api`||e===`workflow/runtime`)return resolvePackageSourceFilePath(`src/internal/workflow/runtime.ts`);if(e===`workflow/internal/builtins`)return resolvePackageSourceFilePath(`src/internal/workflow/builtins.ts`);let t=WORKFLOW_MODULE_ALIASES[e];return t===void 0?require.resolve(e):resolvePackageCompiledFilePath(t)}export{resolveExpectedWorkflowVersion,resolveInstalledPackageInfo,resolvePackageCompiledFilePath,resolvePackageDependencyPath,resolvePackageLocationFromModulePath,resolvePackageRoot,resolvePackageSourceDirectoryPath,resolvePackageSourceFilePath,resolveWorkflowModulePath};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{expectFunction,expectObjectRecord,expectOnlyKnownKeys,expectPositiveInteger,expectProviderOptions,expectString,getOptionalStringRecordProperty}from"#internal/authored-module.js";import{isDynamicSentinel}from"#shared/dynamic-tool-definition.js";function normalizeAgentDefinition(e,i){let o=expectObjectRecord(e,i);if(expectOnlyKnownKeys(o,[`build`,`compaction`,`description`,`experimental`,`limits`,`model`,`modelContextWindowTokens`,`modelOptions`,`outputSchema`,`reasoning`],i),o.model===void 0)throw Error(`${i} The "model" field is required.`);let c={model:normalizeAgentModelDefinition(o.model,i)};if(isDynamicSentinel(c.model)&&(o.modelContextWindowTokens!==void 0||o.modelOptions!==void 0))throw Error(`${i} Dynamic model definitions do not support sibling "modelContextWindowTokens" or "modelOptions" fields. Return those overrides from the resolver selection instead.`);return o.description!==void 0&&(c.description=expectString(o.description,i)),o.compaction!==void 0&&(c.compaction=normalizeAgentCompactionDefinition(o.compaction,i)),o.build!==void 0&&(c.build=normalizeAgentBuildDefinition(o.build,i)),o.experimental!==void 0&&(c.experimental=normalizeAgentExperimentalDefinition(o.experimental,i)),o.modelOptions!==void 0&&(c.modelOptions=normalizeAgentModelOptions(o.modelOptions,i)),o.modelContextWindowTokens!==void 0&&(c.modelContextWindowTokens=expectPositiveInteger(o.modelContextWindowTokens,i)),o.outputSchema!==void 0&&(c.outputSchema=o.outputSchema),o.reasoning!==void 0&&(c.reasoning=normalizeAgentReasoningDefinition(o.reasoning,i)),o.limits!==void 0&&(c.limits=normalizeAgentLimitsDefinition(o.limits,i)),c}function normalizeAgentReasoningDefinition(e,t){let n=expectString(e,t);switch(n){case`provider-default`:case`none`:case`minimal`:case`low`:case`medium`:case`high`:case`xhigh`:return n;default:throw Error(t)}}function normalizeAgentModelDefinition(r,i){if(!isDynamicSentinel(r))return r;let a=expectObjectRecord(r,i);expectOnlyKnownKeys(a,[`events`,`kind`],i);let o=expectObjectRecord(a.events,i),c={};for(let[t,n]of Object.entries(o))c[t]=expectFunction(n,i);return{events:c,kind:a.kind}}function expectPositiveIntegerOrFalse(e,t){return e!==!1&&expectPositiveInteger(e,t)}function normalizeAgentLimitsDefinition(e,r){let i=expectObjectRecord(e,r);expectOnlyKnownKeys(i,[`maxInputTokensPerSession`,`maxOutputTokensPerSession`,`sessionTimeoutMs`],r);let a={};return i.sessionTimeoutMs!==void 0&&(a.sessionTimeoutMs=expectPositiveIntegerOrFalse(i.sessionTimeoutMs,r)),i.maxInputTokensPerSession!==void 0&&(a.maxInputTokensPerSession=expectPositiveIntegerOrFalse(i.maxInputTokensPerSession,r)),i.maxOutputTokensPerSession!==void 0&&(a.maxOutputTokensPerSession=expectPositiveIntegerOrFalse(i.maxOutputTokensPerSession,r)),a}function normalizeAgentBuildDefinition(e,r){let i=expectObjectRecord(e,r);expectOnlyKnownKeys(i,[`externalDependencies`],r);let o={};if(i.externalDependencies!==void 0){if(!Array.isArray(i.externalDependencies))throw Error(r);o.externalDependencies=Object.freeze(i.externalDependencies.map(e=>expectString(e,r)))}return o}function normalizeAgentWorkflowDefinition(e,r){let i=expectObjectRecord(e,r);expectOnlyKnownKeys(i,[`world`],r);let a={};return i.world!==void 0&&(a.world=normalizeAgentWorkflowWorldDefinition(i.world,r)),a}function normalizeAgentWorkflowWorldDefinition(e,t){let n=expectString(e,t);if(n.trim()===``)throw Error(`${t} "experimental.workflow.world" must be a non-empty package name.`);return n}function normalizeAgentExperimentalDefinition(e,r){let i=expectObjectRecord(e,r);expectOnlyKnownKeys(i,[`instrumentationProviders`,`subagentPersistentSessions`,`workflow`],r);let a={};if(i.instrumentationProviders!==void 0){if(typeof i.instrumentationProviders!=`boolean`)throw Error(`${r} "experimental.instrumentationProviders" must be a boolean.`);a.instrumentationProviders=i.instrumentationProviders}if(i.subagentPersistentSessions!==void 0){if(typeof i.subagentPersistentSessions!=`boolean`)throw Error(`${r} "experimental.subagentPersistentSessions" must be a boolean.`);a.subagentPersistentSessions=i.subagentPersistentSessions}return i.workflow!==void 0&&(a.workflow=normalizeAgentWorkflowDefinition(i.workflow,r)),a}function normalizeAgentModelOptions(e,r){let a=expectObjectRecord(e,r);expectOnlyKnownKeys(a,[`providerOptions`],r);let o=a.providerOptions;return o===void 0?{}:{providerOptions:expectProviderOptions(o,r)}}function normalizeAgentCompactionDefinition(e,i){let a=expectObjectRecord(e,i);expectOnlyKnownKeys(a,[`model`,`modelContextWindowTokens`,`thresholdPercent`],i);let o={};if(a.model!==void 0){if(isDynamicSentinel(a.model))throw Error(`${i} "compaction.model" does not support defineDynamic — provide a static model.`);o.model=a.model}if(a.modelContextWindowTokens!==void 0&&(o.modelContextWindowTokens=expectPositiveInteger(a.modelContextWindowTokens,i)),a.thresholdPercent!==void 0){let e=a.thresholdPercent;if(typeof e!=`number`||!Number.isFinite(e)||e<0||e>1)throw Error(i);o.thresholdPercent=e}return o}function normalizeInstructionsDefinition(e,r){let i=expectObjectRecord(e,r);expectOnlyKnownKeys(i,[`content`,`markdown`,`role`],r);let o=Object.hasOwn(i,`content`),s=Object.hasOwn(i,`markdown`);if(o===s)throw Error(`${r} Provide exactly one of "content" or "markdown".`);if(s){if(Object.hasOwn(i,`role`))throw Error(`${r} The deprecated "markdown" shape does not support "role".`);return{content:expectString(i.markdown,r),role:`system`}}let c=i.role===void 0?`system`:expectString(i.role,r);if(c!==`system`&&c!==`user`)throw Error(`${r} Expected "role" to be one of: system, user.`);return{content:expectString(i.content,r),role:c}}function normalizeSkillDefinition(e,r){let i=expectObjectRecord(e,r);expectOnlyKnownKeys(i,[`description`,`files`,`license`,`markdown`,`metadata`],r);let s={description:expectString(i.description,r),markdown:expectString(i.markdown,r)},c=i.license,l=getOptionalStringRecordProperty(i,`metadata`,r);return c!==void 0&&(s.license=expectString(c,r)),l!==void 0&&(s.metadata=l),i.files!==void 0&&(s.files=normalizeSkillFiles(i.files,r)),s}function normalizeSkillFiles(e,n){let r=expectObjectRecord(e,n),i={};for(let[e,t]of Object.entries(r)){if(typeof t==`string`||t instanceof Uint8Array){i[e]=t;continue}throw Error(`${n} Expected skill file "${e}" to be a string or Uint8Array.`)}return i}function normalizeScheduleDefinition(r,i){let o=expectObjectRecord(r,i);expectOnlyKnownKeys(o,[`cron`,`markdown`,`run`],i);let s=expectString(o.cron,i),c=o.markdown!==void 0,l=o.run!==void 0;if(c&&l)throw Error(`${i} Pass either "markdown" (fire-and-forget) or "run" (handler) — not both.`);if(!c&&!l)throw Error(`${i} Must provide either "markdown" (fire-and-forget) or "run" (handler).`);let u={cron:s};return c?u.markdown=expectString(o.markdown,i):u.run=expectFunction(o.run,i),u}export{normalizeAgentDefinition,normalizeInstructionsDefinition,normalizeScheduleDefinition,normalizeSkillDefinition};
|
|
1
|
+
import{expectFunction,expectObjectRecord,expectOnlyKnownKeys,expectPositiveInteger,expectProviderOptions,expectString,getOptionalStringRecordProperty}from"#internal/authored-module.js";import{isDynamicSentinel}from"#shared/dynamic-tool-definition.js";function normalizeAgentDefinition(e,i){let o=expectObjectRecord(e,i);if(expectOnlyKnownKeys(o,[`build`,`compaction`,`description`,`experimental`,`limits`,`model`,`modelContextWindowTokens`,`modelOptions`,`outputSchema`,`reasoning`],i),o.model===void 0)throw Error(`${i} The "model" field is required.`);let c={model:normalizeAgentModelDefinition(o.model,i)};if(isDynamicSentinel(c.model)&&(o.modelContextWindowTokens!==void 0||o.modelOptions!==void 0))throw Error(`${i} Dynamic model definitions do not support sibling "modelContextWindowTokens" or "modelOptions" fields. Return those overrides from the resolver selection instead.`);return o.description!==void 0&&(c.description=expectString(o.description,i)),o.compaction!==void 0&&(c.compaction=normalizeAgentCompactionDefinition(o.compaction,i)),o.build!==void 0&&(c.build=normalizeAgentBuildDefinition(o.build,i)),o.experimental!==void 0&&(c.experimental=normalizeAgentExperimentalDefinition(o.experimental,i)),o.modelOptions!==void 0&&(c.modelOptions=normalizeAgentModelOptions(o.modelOptions,i)),o.modelContextWindowTokens!==void 0&&(c.modelContextWindowTokens=expectPositiveInteger(o.modelContextWindowTokens,i)),o.outputSchema!==void 0&&(c.outputSchema=o.outputSchema),o.reasoning!==void 0&&(c.reasoning=normalizeAgentReasoningDefinition(o.reasoning,i)),o.limits!==void 0&&(c.limits=normalizeAgentLimitsDefinition(o.limits,i)),c}function normalizeAgentReasoningDefinition(e,t){let n=expectString(e,t);switch(n){case`provider-default`:case`none`:case`minimal`:case`low`:case`medium`:case`high`:case`xhigh`:return n;default:throw Error(t)}}function normalizeAgentModelDefinition(r,i){if(!isDynamicSentinel(r))return r;let a=expectObjectRecord(r,i);expectOnlyKnownKeys(a,[`events`,`kind`],i);let o=expectObjectRecord(a.events,i),c={};for(let[t,n]of Object.entries(o))c[t]=expectFunction(n,i);return{events:c,kind:a.kind}}function expectPositiveIntegerOrFalse(e,t){return e!==!1&&expectPositiveInteger(e,t)}function normalizeAgentLimitsDefinition(e,r){let i=expectObjectRecord(e,r);expectOnlyKnownKeys(i,[`maxInputTokensPerSession`,`maxOutputTokensPerSession`,`sessionTimeoutMs`],r);let a={};return i.sessionTimeoutMs!==void 0&&(a.sessionTimeoutMs=expectPositiveIntegerOrFalse(i.sessionTimeoutMs,r)),i.maxInputTokensPerSession!==void 0&&(a.maxInputTokensPerSession=expectPositiveIntegerOrFalse(i.maxInputTokensPerSession,r)),i.maxOutputTokensPerSession!==void 0&&(a.maxOutputTokensPerSession=expectPositiveIntegerOrFalse(i.maxOutputTokensPerSession,r)),a}function normalizeAgentBuildDefinition(e,r){let i=expectObjectRecord(e,r);expectOnlyKnownKeys(i,[`externalDependencies`],r);let o={};if(i.externalDependencies!==void 0){if(!Array.isArray(i.externalDependencies))throw Error(r);o.externalDependencies=Object.freeze(i.externalDependencies.map(e=>expectString(e,r)))}return o}function normalizeAgentWorkflowDefinition(e,r){let i=expectObjectRecord(e,r);expectOnlyKnownKeys(i,[`world`],r);let a={};return i.world!==void 0&&(a.world=normalizeAgentWorkflowWorldDefinition(i.world,r)),a}function normalizeAgentWorkflowWorldDefinition(e,t){let n=expectString(e,t);if(n.trim()===``)throw Error(`${t} "experimental.workflow.world" must be a non-empty package name.`);return n}function normalizeAgentExperimentalDefinition(e,r){let i=expectObjectRecord(e,r);expectOnlyKnownKeys(i,[`instrumentationProviders`,`subagentPersistentSessions`,`tasks`,`workflow`],r);let a={};if(i.instrumentationProviders!==void 0){if(typeof i.instrumentationProviders!=`boolean`)throw Error(`${r} "experimental.instrumentationProviders" must be a boolean.`);a.instrumentationProviders=i.instrumentationProviders}if(i.subagentPersistentSessions!==void 0){if(typeof i.subagentPersistentSessions!=`boolean`)throw Error(`${r} "experimental.subagentPersistentSessions" must be a boolean.`);a.subagentPersistentSessions=i.subagentPersistentSessions}if(i.tasks!==void 0){if(typeof i.tasks!=`boolean`)throw Error(`${r} "experimental.tasks" must be a boolean.`);a.tasks=i.tasks}return i.workflow!==void 0&&(a.workflow=normalizeAgentWorkflowDefinition(i.workflow,r)),a}function normalizeAgentModelOptions(e,r){let a=expectObjectRecord(e,r);expectOnlyKnownKeys(a,[`providerOptions`],r);let o=a.providerOptions;return o===void 0?{}:{providerOptions:expectProviderOptions(o,r)}}function normalizeAgentCompactionDefinition(e,i){let a=expectObjectRecord(e,i);expectOnlyKnownKeys(a,[`model`,`modelContextWindowTokens`,`thresholdPercent`],i);let o={};if(a.model!==void 0){if(isDynamicSentinel(a.model))throw Error(`${i} "compaction.model" does not support defineDynamic — provide a static model.`);o.model=a.model}if(a.modelContextWindowTokens!==void 0&&(o.modelContextWindowTokens=expectPositiveInteger(a.modelContextWindowTokens,i)),a.thresholdPercent!==void 0){let e=a.thresholdPercent;if(typeof e!=`number`||!Number.isFinite(e)||e<0||e>1)throw Error(i);o.thresholdPercent=e}return o}function normalizeInstructionsDefinition(e,r){let i=expectObjectRecord(e,r);expectOnlyKnownKeys(i,[`content`,`markdown`,`role`],r);let o=Object.hasOwn(i,`content`),s=Object.hasOwn(i,`markdown`);if(o===s)throw Error(`${r} Provide exactly one of "content" or "markdown".`);if(s){if(Object.hasOwn(i,`role`))throw Error(`${r} The deprecated "markdown" shape does not support "role".`);return{content:expectString(i.markdown,r),role:`system`}}let c=i.role===void 0?`system`:expectString(i.role,r);if(c!==`system`&&c!==`user`)throw Error(`${r} Expected "role" to be one of: system, user.`);return{content:expectString(i.content,r),role:c}}function normalizeSkillDefinition(e,r){let i=expectObjectRecord(e,r);expectOnlyKnownKeys(i,[`description`,`files`,`license`,`markdown`,`metadata`],r);let s={description:expectString(i.description,r),markdown:expectString(i.markdown,r)},c=i.license,l=getOptionalStringRecordProperty(i,`metadata`,r);return c!==void 0&&(s.license=expectString(c,r)),l!==void 0&&(s.metadata=l),i.files!==void 0&&(s.files=normalizeSkillFiles(i.files,r)),s}function normalizeSkillFiles(e,n){let r=expectObjectRecord(e,n),i={};for(let[e,t]of Object.entries(r)){if(typeof t==`string`||t instanceof Uint8Array){i[e]=t;continue}throw Error(`${n} Expected skill file "${e}" to be a string or Uint8Array.`)}return i}function normalizeScheduleDefinition(r,i){let o=expectObjectRecord(r,i);expectOnlyKnownKeys(o,[`cron`,`markdown`,`run`],i);let s=expectString(o.cron,i),c=o.markdown!==void 0,l=o.run!==void 0;if(c&&l)throw Error(`${i} Pass either "markdown" (fire-and-forget) or "run" (handler) — not both.`);if(!c&&!l)throw Error(`${i} Must provide either "markdown" (fire-and-forget) or "run" (handler).`);let u={cron:s};return c?u.markdown=expectString(o.markdown,i):u.run=expectFunction(o.run,i),u}export{normalizeAgentDefinition,normalizeInstructionsDefinition,normalizeScheduleDefinition,normalizeSkillDefinition};
|