eve 0.47.7 → 0.48.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +20 -0
- package/dist/src/channel/delivery-metadata.d.ts +1 -0
- package/dist/src/channel/delivery-metadata.js +1 -1
- package/dist/src/channel/types.d.ts +10 -8
- package/dist/src/chunks/{use-eve-agent-Dg5S44kG.js → use-eve-agent-BZnOzAVd.js} +25 -5
- package/dist/src/chunks/{use-eve-agent-B5zw1dwj.js → use-eve-agent-Bgp6INfi.js} +25 -5
- package/dist/src/cli/commands/init.js +1 -1
- package/dist/src/cli/commands/integration-connect.d.ts +2 -1
- package/dist/src/cli/commands/integration-connect.js +1 -1
- package/dist/src/cli/commands/register-integration-commands.d.ts +3 -1
- package/dist/src/cli/commands/register-integration-commands.js +1 -1
- package/dist/src/cli/dev/command-options.d.ts +2 -0
- package/dist/src/cli/dev/run-interactive-ui.js +1 -1
- package/dist/src/cli/dev/tui/blocks.js +1 -1
- package/dist/src/cli/dev/tui/prompt-command-handler.js +1 -1
- package/dist/src/cli/dev/tui/registry-result-message.d.ts +17 -0
- package/dist/src/cli/dev/tui/registry-result-message.js +3 -0
- package/dist/src/cli/dev/tui/runner.d.ts +11 -4
- package/dist/src/cli/dev/tui/runner.js +1 -1
- package/dist/src/cli/dev/tui/setup-commands.d.ts +9 -3
- package/dist/src/cli/dev/tui/setup-commands.js +2 -3
- package/dist/src/cli/dev/tui/setup-flow.d.ts +15 -5
- package/dist/src/cli/dev/tui/setup-panel.d.ts +6 -1
- package/dist/src/cli/dev/tui/setup-panel.js +4 -4
- package/dist/src/cli/dev/tui/setup-selection-input.d.ts +1 -0
- package/dist/src/cli/dev/tui/setup-selection-input.js +1 -1
- package/dist/src/cli/dev/tui/terminal-renderer.js +12 -12
- package/dist/src/cli/dev/tui/tui-prompter.js +1 -1
- package/dist/src/cli/dev/tui/tui.d.ts +3 -4
- package/dist/src/cli/dev/tui/tui.js +1 -1
- package/dist/src/cli/run.js +2 -2
- package/dist/src/client/agent-info-schema.d.ts +1 -0
- package/dist/src/client/agent-info-schema.js +1 -1
- package/dist/src/client/open-stream.d.ts +1 -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/@opentelemetry/api/index.d.ts +6 -0
- package/dist/src/compiled/@workflow/builders/LICENSE.md +201 -0
- package/dist/src/compiled/@workflow/builders/index.d.ts +62 -0
- package/dist/src/compiled/@workflow/builders/index.js +1 -0
- package/dist/src/compiler/extension-compatibility.d.ts +2 -2
- package/dist/src/compiler/extension-compatibility.js +1 -1
- package/dist/src/compiler/manifest.d.ts +2 -2
- package/dist/src/compiler/manifest.js +1 -1
- package/dist/src/compiler/normalize-tool.js +1 -1
- package/dist/src/context/keys.d.ts +3 -8
- package/dist/src/eve-channel/index.js +1 -1
- package/dist/src/eve-channel/types.d.ts +7 -7
- package/dist/src/execution/accepted-delivery-deployment.d.ts +7 -0
- package/dist/src/execution/accepted-delivery-deployment.js +1 -0
- package/dist/src/execution/cancel-descendant-turns-step.d.ts +4 -1
- package/dist/src/execution/cancel-descendant-turns-step.js +1 -1
- package/dist/src/execution/delegation-tool.js +1 -1
- package/dist/src/execution/dispatch-runtime-actions-shared.d.ts +7 -2
- package/dist/src/execution/dispatch-runtime-actions-shared.js +1 -1
- package/dist/src/execution/dispatch-runtime-actions-step.js +1 -1
- package/dist/src/execution/dispatch-turn-step.js +1 -1
- package/dist/src/execution/durable-session-migrations/turn-workflow-v1-to-v2.d.ts +2 -0
- package/dist/src/execution/durable-session-migrations/turn-workflow-v1-to-v2.js +1 -0
- package/dist/src/execution/durable-session-migrations/turn-workflow.d.ts +25 -3
- package/dist/src/execution/durable-session-migrations/turn-workflow.js +1 -1
- package/dist/src/execution/eve-workflow-attributes.js +1 -1
- package/dist/src/execution/finalize-terminal-session.d.ts +17 -0
- package/dist/src/execution/finalize-terminal-session.js +1 -0
- package/dist/src/execution/inline-turn.d.ts +29 -0
- package/dist/src/execution/inline-turn.js +1 -0
- package/dist/src/execution/next-driver-action.d.ts +4 -0
- package/dist/src/execution/node-step.js +1 -1
- package/dist/src/execution/parked-delivery-wait.js +1 -1
- package/dist/src/execution/pending-turn-state.d.ts +1 -0
- package/dist/src/execution/pending-turn-state.js +1 -1
- package/dist/src/execution/proxied-deliver-step.js +1 -1
- package/dist/src/execution/remote-agent-dispatch.d.ts +2 -0
- package/dist/src/execution/remote-agent-dispatch.js +1 -1
- package/dist/src/execution/session-command-token.d.ts +2 -0
- package/dist/src/execution/session-command-token.js +1 -1
- package/dist/src/execution/settle-cancelled-turn-step.js +1 -1
- package/dist/src/execution/stable-workflow-names.d.ts +12 -0
- package/dist/src/execution/stable-workflow-names.js +1 -0
- package/dist/src/execution/subagent-event-proxy-step.d.ts +3 -0
- package/dist/src/execution/subagent-event-proxy-step.js +1 -1
- package/dist/src/execution/subagent-hitl-proxy.d.ts +2 -1
- package/dist/src/execution/subagent-hitl-proxy.js +1 -1
- package/dist/src/execution/subagent-start-remote.d.ts +2 -0
- package/dist/src/execution/subagent-start-remote.js +1 -1
- package/dist/src/execution/tasks/child/steps.d.ts +2 -0
- package/dist/src/execution/tasks/child/steps.js +1 -1
- package/dist/src/execution/tasks/child/workflow.js +1 -1
- package/dist/src/execution/tasks/parent/dispatch-task-step.js +1 -1
- package/dist/src/execution/tasks/parent/dispatch.js +1 -1
- package/dist/src/execution/tasks/parent/hitl-proxy-steps.js +1 -1
- package/dist/src/execution/tasks/parent/tool-execution.js +1 -1
- package/dist/src/execution/terminal-session-completion-step.js +1 -1
- package/dist/src/execution/terminal-session-event.d.ts +13 -0
- package/dist/src/execution/terminal-session-event.js +1 -0
- package/dist/src/execution/terminal-session-failure-step.d.ts +1 -0
- package/dist/src/execution/terminal-session-failure-step.js +1 -1
- package/dist/src/execution/tool-run/answer.d.ts +3 -0
- package/dist/src/execution/tool-run/answer.js +1 -0
- package/dist/src/execution/tool-run/background.d.ts +14 -0
- package/dist/src/execution/tool-run/background.js +1 -0
- package/dist/src/execution/tool-run/cancel.d.ts +7 -0
- package/dist/src/execution/tool-run/cancel.js +1 -0
- package/dist/src/execution/tool-run/dispatch.d.ts +24 -0
- package/dist/src/execution/tool-run/dispatch.js +1 -0
- package/dist/src/execution/tool-run/emit-run-report-step.d.ts +7 -0
- package/dist/src/execution/tool-run/emit-run-report-step.js +1 -0
- package/dist/src/execution/tool-run/messages.d.ts +70 -0
- package/dist/src/execution/tool-run/messages.js +1 -0
- package/dist/src/execution/tool-run/owner-channels.d.ts +29 -0
- package/dist/src/execution/tool-run/owner-channels.js +1 -0
- package/dist/src/execution/tool-run/owner-inbox.d.ts +11 -0
- package/dist/src/execution/tool-run/owner-inbox.js +1 -0
- package/dist/src/execution/tool-run/owner.d.ts +13 -0
- package/dist/src/execution/tool-run/owner.js +1 -0
- package/dist/src/execution/tool-run/resume-hook-step.d.ts +4 -0
- package/dist/src/execution/tool-run/resume-hook-step.js +1 -0
- package/dist/src/execution/tool-run/run-control.d.ts +18 -0
- package/dist/src/execution/tool-run/run-control.js +1 -0
- package/dist/src/execution/tool-run/start.d.ts +11 -0
- package/dist/src/execution/tool-run/start.js +1 -0
- package/dist/src/execution/tool-run/types.d.ts +21 -0
- package/dist/src/execution/tool-run/types.js +1 -0
- package/dist/src/execution/tool-run/workflow.d.ts +9 -0
- package/dist/src/execution/tool-run/workflow.js +1 -0
- package/dist/src/execution/tools/subagent/local.js +1 -1
- package/dist/src/execution/turn-cancellation-control.d.ts +2 -0
- package/dist/src/execution/turn-cancellation-control.js +1 -1
- package/dist/src/execution/turn-control-receiver.js +1 -1
- package/dist/src/execution/turn-dispatch.d.ts +4 -2
- package/dist/src/execution/turn-dispatch.js +1 -1
- package/dist/src/execution/turn-execution-cursor.js +1 -1
- package/dist/src/execution/turn-workflow.js +1 -1
- package/dist/src/execution/wire/session-inbox-contract.d.ts +2 -2
- package/dist/src/execution/wire/session-inbox-contract.js +1 -1
- package/dist/src/execution/wire/session-inbox-encoder.d.ts +6 -2
- package/dist/src/execution/wire/session-inbox-encoder.js +1 -1
- package/dist/src/execution/wire/session-inbox-resume.js +1 -1
- package/dist/src/execution/wire/session-inbox-wire.js +1 -1
- package/dist/src/execution/wire/session-inbox-wire.v1.js +1 -1
- package/dist/src/execution/wire/session-inbox-wire.v2-migration.d.ts +0 -2
- package/dist/src/execution/wire/session-inbox-wire.v2-migration.js +1 -1
- package/dist/src/execution/wire/session-inbox-wire.v2.migration.d.ts +3 -0
- package/dist/src/execution/wire/session-inbox-wire.v2.migration.js +1 -0
- package/dist/src/execution/wire/session-inbox-wire.v3.d.ts +480 -0
- package/dist/src/execution/wire/session-inbox-wire.v3.js +1 -0
- package/dist/src/execution/wire/session-inbox-wire.v3.migration.d.ts +3 -0
- package/dist/src/execution/wire/session-inbox-wire.v3.migration.js +1 -0
- package/dist/src/execution/workflow-entry-finalization.js +1 -1
- package/dist/src/execution/workflow-entry.js +1 -1
- package/dist/src/execution/workflow-registry.d.ts +5 -0
- package/dist/src/execution/workflow-registry.js +1 -0
- package/dist/src/execution/workflow-runtime.d.ts +9 -11
- package/dist/src/execution/workflow-runtime.js +1 -1
- package/dist/src/execution/workflow-steps.js +1 -1
- package/dist/src/execution/workflow-webhook-route.d.ts +4 -0
- package/dist/src/execution/workflow-webhook-route.js +1 -0
- package/dist/src/harness/attachment-staging.js +1 -1
- package/dist/src/harness/emission.js +1 -1
- package/dist/src/harness/proxy-input-requests.d.ts +10 -0
- 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/tool-runs.d.ts +21 -0
- package/dist/src/harness/tool-runs.js +1 -0
- package/dist/src/harness/tools.js +1 -1
- package/dist/src/instrumentation/content-policy.d.ts +3 -1
- package/dist/src/instrumentation/content-policy.js +1 -1
- package/dist/src/instrumentation/runtime.d.ts +2 -2
- package/dist/src/instrumentation/runtime.js +1 -1
- package/dist/src/internal/application/package.js +1 -1
- package/dist/src/internal/attachments/errors.d.ts +3 -0
- package/dist/src/internal/authored-module-loader.d.ts +7 -1
- package/dist/src/internal/authored-module-loader.js +3 -3
- package/dist/src/internal/authored-package-boundary.js +1 -1
- package/dist/src/internal/authored-runtime-modules.d.ts +2 -0
- package/dist/src/internal/authored-runtime-modules.js +1 -1
- package/dist/src/internal/nitro/development-generation.d.ts +2 -0
- package/dist/src/internal/nitro/development-generation.js +1 -1
- package/dist/src/internal/nitro/host/create-application-nitro.js +1 -1
- package/dist/src/internal/nitro/host/dev-host-fingerprint.js +1 -1
- package/dist/src/internal/nitro/routes/agent-info/build-agent-info-response.js +1 -1
- package/dist/src/internal/nitro/routes/channel-dispatch.js +1 -1
- package/dist/src/internal/workflow-bundle/authored-workflow-directives.d.ts +17 -0
- package/dist/src/internal/workflow-bundle/authored-workflow-directives.js +1 -0
- package/dist/src/internal/workflow-bundle/authored-workflow-modules.d.ts +19 -0
- package/dist/src/internal/workflow-bundle/authored-workflow-modules.js +1 -0
- package/dist/src/internal/workflow-bundle/builder-support.d.ts +17 -2
- package/dist/src/internal/workflow-bundle/builder-support.js +4 -3
- package/dist/src/internal/workflow-bundle/builder.d.ts +2 -2
- package/dist/src/internal/workflow-bundle/builder.js +2 -2
- package/dist/src/internal/workflow-bundle/dynamic-capability-transform-plugin.d.ts +2 -0
- package/dist/src/internal/workflow-bundle/dynamic-capability-transform-plugin.js +1 -1
- package/dist/src/internal/workflow-bundle/dynamic-tool-ast-references.d.ts +3 -0
- package/dist/src/internal/workflow-bundle/dynamic-tool-transform.d.ts +1 -1
- package/dist/src/internal/workflow-bundle/dynamic-tool-transform.js +1 -1
- package/dist/src/internal/workflow-bundle/workflow-builders.d.ts +6 -2
- package/dist/src/internal/workflow-bundle/workflow-builders.js +1 -1
- package/dist/src/internal/workflow-bundle/workflow-core-shim.d.ts +3 -0
- package/dist/src/internal/workflow-bundle/workflow-core-shim.js +1 -1
- package/dist/src/internal/workflow-bundle/workflow-directive-ast.d.ts +7 -0
- package/dist/src/internal/workflow-bundle/workflow-directive-ast.js +1 -0
- package/dist/src/internal/workflow-bundle/workflow-transformer.d.ts +15 -1
- package/dist/src/internal/workflow-bundle/workflow-transformer.js +4 -4
- package/dist/src/packages/eve-catalog/src/index.js +1 -1
- package/dist/src/protocol/baggage.d.ts +6 -0
- package/dist/src/protocol/baggage.js +1 -0
- package/dist/src/public/channels/slack/attachments.js +1 -1
- package/dist/src/public/channels/teams/attachments.d.ts +2 -2
- package/dist/src/public/channels/teams/attachments.js +1 -1
- package/dist/src/public/channels/teams/teamsChannel.js +1 -1
- package/dist/src/public/channels/telegram/attachments.js +1 -1
- package/dist/src/public/definitions/remote-agent.d.ts +6 -3
- package/dist/src/public/workflow/index.d.ts +3 -0
- package/dist/src/public/workflow/index.js +1 -0
- package/dist/src/public/workflow-modules.d.js +1 -0
- package/dist/src/public/workflow-modules.d.ts +11 -0
- package/dist/src/runtime/actions/keys.js +1 -1
- package/dist/src/runtime/tools/registry.js +1 -1
- package/dist/src/setup/connection-connector.d.ts +4 -2
- package/dist/src/setup/connection-connector.js +2 -2
- package/dist/src/setup/flows/login.js +1 -1
- package/dist/src/setup/flows/model.js +1 -1
- package/dist/src/setup/flows/provider.d.ts +5 -0
- package/dist/src/setup/flows/provider.js +4 -4
- package/dist/src/setup/flows/registry-session.d.ts +24 -7
- package/dist/src/setup/flows/registry-session.js +1 -1
- package/dist/src/setup/flows/registry.d.ts +35 -29
- package/dist/src/setup/flows/registry.js +2 -1
- package/dist/src/setup/integrations/web/setup.d.ts +0 -2
- package/dist/src/setup/integrations/web/setup.js +1 -1
- package/dist/src/setup/prompter.d.ts +24 -4
- package/dist/src/setup/prompter.js +1 -1
- package/dist/src/setup/scaffold/create/project.js +2 -2
- package/dist/src/setup/vercel-project.js +0 -0
- package/dist/src/shared/dispatch-action.d.ts +6 -0
- package/dist/src/shared/forwarded-trace-policy.d.ts +28 -0
- package/dist/src/shared/forwarded-trace-policy.js +1 -0
- package/dist/src/shared/instrumentation-decision.d.ts +3 -0
- package/dist/src/shared/instrumentation-decision.js +1 -1
- package/dist/src/svelte/index.js +1 -1
- package/dist/src/svelte/use-eve-agent.js +1 -1
- package/dist/src/tools/behavior.d.ts +6 -0
- package/dist/src/tools/definition.d.ts +39 -3
- package/dist/src/tracing/agent-otel-provider.js +2 -2
- package/dist/src/tracing/agent-otel-session-context.js +1 -1
- package/dist/src/tracing/agent-trace-context-store.d.ts +1 -1
- package/dist/src/tracing/agent-trace-context-store.js +1 -1
- package/dist/src/tracing/otel-declaration.d.ts +5 -3
- package/dist/src/tracing/otel-registration.d.ts +1 -1
- package/dist/src/tracing/otel-registration.js +1 -1
- package/dist/src/vue/index.js +1 -1
- package/dist/src/vue/use-eve-agent.js +1 -1
- package/docs/channels/custom.mdx +2 -0
- package/docs/channels/eve.mdx +5 -1
- package/docs/channels/teams.mdx +6 -1
- package/docs/concepts/sessions-runs-and-streaming.md +4 -2
- package/docs/guides/auth-and-route-protection.md +5 -1
- package/docs/guides/client/messages.mdx +6 -0
- package/docs/guides/dev-tui.md +30 -18
- package/docs/guides/remote-agents.md +25 -0
- package/docs/reference/cli.md +2 -2
- package/docs/tools/meta.json +1 -1
- package/docs/tools/overview.mdx +7 -0
- package/docs/tools/workflows.mdx +288 -0
- package/package.json +12 -1
- package/dist/src/internal/authored-directive-prologue.d.ts +0 -4
- package/dist/src/internal/authored-directive-prologue.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{randomBytes}from"node:crypto";import{createEveActivityRoutePath}from"#protocol/routes.js";import{createLogger,logError}from"#internal/logging.js";import{getChannelActivityPresentation}from"#channel/activity-renderer.js";import{RuntimeSessionOwnershipConflictError}from"#execution/runtime-errors.js";import{sessionCommandHookToken}from"#execution/session-command-token.js";import{ActivityObserverKey}from"#context/keys.js";import{resolveInstalledPackageInfo}from"#internal/application/package.js";import{walkCauseChain}from"#shared/errors.js";import{isEveDevEnvironment}from"#internal/application/dev-environment.js";import{cancelRun,getHookByToken,getRun,getWorld,start}from"#internal/workflow/runtime.js";import{createWorkflowCallbackUrl,resolveWorkflowCallbackBaseUrl}from"#execution/workflow-callback-url.js";import{serializeContext}from"#context/serialize.js";import{getCompiledRuntimeAgentBundle}from"#runtime/sessions/compiled-agent-cache.js";import{resolveEffectiveAgentRuntime}from"#execution/effective-agent-config.js";import{EntityConflictError,HookNotFoundError,RunExpiredError,WorkflowRunNotFoundError}from"#compiled/@workflow/errors/index.js";import{buildSessionAttributes,buildSubagentRootAttributes,readParentLineage}from"#execution/eve-workflow-attributes.js";import{normalizeEveAttributes}from"#runtime/attributes/normalize.js";import{resumeSessionInbox}from"#execution/wire/session-inbox-resume.js";import{ROOT_RUNTIME_AGENT_NODE_ID}from"#runtime/graph.js";import{initializeSessionInstrumentation}from"#instrumentation/runtime.js";import{context,trace}from"#compiled/@opentelemetry/api/index.js";import{buildRunContext}from"#execution/runtime-context.js";import{parseNdjsonStream}from"#execution/ndjson-stream.js";import{buildInvocationAttributes}from"#internal/invocation/metadata.js";import{isAgentTraceContext}from"#tracing/agent-trace-context.js";const
|
|
1
|
+
import{randomBytes}from"node:crypto";import{createEveActivityRoutePath}from"#protocol/routes.js";import{createLogger,logError}from"#internal/logging.js";import{getChannelActivityPresentation}from"#channel/activity-renderer.js";import{RuntimeSessionOwnershipConflictError}from"#execution/runtime-errors.js";import{sessionCommandHookToken}from"#execution/session-command-token.js";import{ActivityObserverKey}from"#context/keys.js";import{resolveInstalledPackageInfo}from"#internal/application/package.js";import{walkCauseChain}from"#shared/errors.js";import{isEveDevEnvironment}from"#internal/application/dev-environment.js";import{cancelRun,getHookByToken,getRun,getWorld,start}from"#internal/workflow/runtime.js";import{createWorkflowCallbackUrl,resolveWorkflowCallbackBaseUrl}from"#execution/workflow-callback-url.js";import{serializeContext}from"#context/serialize.js";import{getCompiledRuntimeAgentBundle}from"#runtime/sessions/compiled-agent-cache.js";import{resolveEffectiveAgentRuntime}from"#execution/effective-agent-config.js";import{EntityConflictError,HookNotFoundError,RunExpiredError,WorkflowRunNotFoundError}from"#compiled/@workflow/errors/index.js";import{buildSessionAttributes,buildSubagentRootAttributes,readParentLineage}from"#execution/eve-workflow-attributes.js";import{normalizeEveAttributes}from"#runtime/attributes/normalize.js";import{resumeSessionInbox}from"#execution/wire/session-inbox-resume.js";import{ROOT_RUNTIME_AGENT_NODE_ID}from"#runtime/graph.js";import{initializeSessionInstrumentation}from"#instrumentation/runtime.js";import{context,trace}from"#compiled/@opentelemetry/api/index.js";import{buildRunContext}from"#execution/runtime-context.js";import{parseNdjsonStream}from"#execution/ndjson-stream.js";import{buildInvocationAttributes}from"#internal/invocation/metadata.js";import{isAgentTraceContext}from"#tracing/agent-trace-context.js";import{ACTIVITY_COLLECTOR_WORKFLOW_NAME,SESSION_TIMEOUT_WORKFLOW_NAME,TASK_RUN_WORKFLOW_NAME,TOOL_RUN_WORKFLOW_NAME,TURN_WORKFLOW_NAME,WORKFLOW_ENTRY_NAME}from"#execution/stable-workflow-names.js";const EVE_PACKAGE_INFO=resolveInstalledPackageInfo(),COMMAND_HOOK_READY_TIMEOUT_MS=3e4,LATEST_DEPLOYMENT_UNSUPPORTED_MESSAGE=`deploymentId 'latest' requires a World that implements resolveLatestDeploymentId()`,STABLE_ID_BASE=EVE_PACKAGE_INFO.name,log=createLogger(`execution.workflow-runtime`),workflowEntryReference={workflowId:`workflow//${STABLE_ID_BASE}//${WORKFLOW_ENTRY_NAME}`},turnWorkflowReference={workflowId:`workflow//${STABLE_ID_BASE}//${TURN_WORKFLOW_NAME}`},sessionTimeoutWorkflowReference={workflowId:`workflow//${STABLE_ID_BASE}//${SESSION_TIMEOUT_WORKFLOW_NAME}`},taskRunWorkflowReference={workflowId:`workflow//${STABLE_ID_BASE}//${TASK_RUN_WORKFLOW_NAME}`},activityCollectorWorkflowReference={workflowId:`workflow//${STABLE_ID_BASE}//${ACTIVITY_COLLECTOR_WORKFLOW_NAME}`},toolRunWorkflowReference={workflowId:`workflow//${STABLE_ID_BASE}//${TOOL_RUN_WORKFLOW_NAME}`};function createWorkflowRuntime(n){return{async createSession(a){let o=await getCompiledRuntimeAgentBundle({compiledArtifactsSource:n.compiledArtifactsSource,nodeId:n.nodeId}),s=buildRunContext({bundle:o,dynamicSubagentAgentConfig:n.dynamicSubagentAgentConfig,run:a}),c=resolveEffectiveAgentRuntime(o,s);initializeSessionInstrumentation({agentName:c.turnAgent.id,ctx:s,parentTraceContext:a.parentTraceContext});let l=c.limits?.sessionTimeoutMs,u,d=a.activityObserver;if(a.parent===void 0&&d===void 0&&(getChannelActivityPresentation(a.adapter)?.renderers.length??0)>0){let n=serializeContext(s),r=randomBytes(32).toString(`base64url`),i={expiresAt:new Date(Date.now()+(typeof l==`number`?l:864e5)).toISOString(),serializedContext:n,token:r};try{u=(await startWorkflowPreferLatest(activityCollectorWorkflowReference,[i])).runId,d={sink:{url:createWorkflowCallbackUrl(resolveWorkflowCallbackBaseUrl(process.env.VERCEL_URL?`https://${process.env.VERCEL_URL}`:`http://localhost:3000`),createEveActivityRoutePath(r)),version:1}},s.set(ActivityObserverKey,d)}catch{await cancelActivityCollector(u),u=void 0,log.warn(`failed to start activity collector`)}}let f=serializeContext(s),p=readParentLineage(f),m={input:a.input,limits:a.limits,serializedContext:f};l!==void 0&&(m.sessionTimeoutMs=l);let h={...p.sessionId===void 0?buildSessionAttributes({inputMessage:a.title??a.input.message,serializedContext:f}):buildSubagentRootAttributes({identity:{nodeId:o.nodeId??ROOT_RUNTIME_AGENT_NODE_ID},parentCallId:p.callId,parentSessionId:p.sessionId,parentTurnId:p.turnId,rootSessionId:p.rootSessionId??p.sessionId,serializedContext:f}),...a.externalInvocation===void 0?{}:buildInvocationAttributes(a.externalInvocation)},g;try{g=await startWorkflowPreferLatest(workflowEntryReference,[m],{allowReservedAttributes:!0,attributes:normalizeEveAttributes(h)})}catch(e){throw await cancelActivityCollector(u),logError(log,`failed to start workflow run`,e,{continuationToken:a.continuationToken}),e}if(a.continuationToken)try{let e=await waitForCommandHookOwner(a.continuationToken);if(e.runId!==g.runId)throw new RuntimeSessionOwnershipConflictError({continuationToken:a.continuationToken,ownerSessionId:e.runId,sessionId:g.runId})}catch(e){throw await cancelActivityCollector(u),e}let _,getEvents=()=>(_??=parseNdjsonStream(()=>getRun(g.runId).getReadable()),_);return{get events(){return getEvents()},sessionId:g.runId}},async dispatchContinuation(e){return await dispatchWorkflowCommand(e.continuationToken,e.command)},async dispatchSession(e){return await dispatchWorkflowCommand(sessionCommandHookToken(e.sessionId),e.command)},async getEventStream(e,t){return parseNdjsonStream(()=>getRun(e).getReadable({startIndex:t?.startIndex}))},async getStreamTailIndex(e){let t=getRun(e).getReadable();try{return await t.getTailIndex()}finally{await t.cancel().catch(()=>{})}},async resolveContinuation(e){try{return{sessionId:(await getHookByToken(e)).runId}}catch(t){if(HookNotFoundError.is(t))return;throw logError(log,`failed to resolve session by continuation token`,t,{continuationToken:e}),t}}}}async function cancelActivityCollector(e){if(e!==void 0)try{await cancelRun(await getWorld(),e,{cancelReason:`Root session creation did not complete`})}catch{log.warn(`failed to cancel unowned activity collector`)}}async function dispatchWorkflowCommand(e,t){let n;try{n=normalizeWorkflowHook(await resumeSessionInbox(e,t))}catch(n){if(isInactiveCommandTarget(n))return inactiveCommandResult(t);throw logError(log,`failed to dispatch session command`,n,{command:t.kind,token:e}),n}return t.kind===`reset`&&await waitForCommandHookRelease(sessionCommandHookToken(n.runId),n.runId),activeCommandResult(t,n.runId)}function activeCommandResult(e,t){return e.kind===`reset`?{previousSessionId:t,status:`reset`}:(e.kind,{sessionId:t,status:`accepted`})}function inactiveCommandResult(e){return e.kind===`send`?{status:`session_not_active`}:e.kind===`cancel`?{status:`no_active_turn`}:{status:`no_active_session`}}async function requestWorkflowTurnCancellation(e){let t={kind:`cancel`};return e.taskId!==void 0&&(t.taskId=e.taskId),e.turnId!==void 0&&(t.turnId=e.turnId),await dispatchWorkflowCommand(sessionCommandHookToken(e.sessionId),t)}function isInactiveCommandTarget(e){if(HookNotFoundError.is(e))return!0;for(let t of walkCauseChain(e))if(WorkflowRunNotFoundError.is(t)||RunExpiredError.is(t)||EntityConflictError.is(t))return!0;return!1}async function waitForCommandHookOwner(e){let t=Date.now()+COMMAND_HOOK_READY_TIMEOUT_MS;for(;;)try{return normalizeWorkflowHook(await getHookByToken(e))}catch(e){if(!HookNotFoundError.is(e)||Date.now()>=t)throw e;await new Promise(e=>setTimeout(e,20))}}async function waitForCommandHookRelease(e,t){let n=Date.now()+COMMAND_HOOK_READY_TIMEOUT_MS;for(;;){try{if(normalizeWorkflowHook(await getHookByToken(e)).runId!==t)return}catch(e){if(HookNotFoundError.is(e))return;throw e}if(Date.now()>=n)throw Error(`Timed out waiting for session "${t}" to release its command inbox.`);await new Promise(e=>setTimeout(e,20))}}async function startWorkflowPreferLatest(e,t,n){return await withWorkflowStartContext(async()=>{if(!shouldRouteToLatestDeployment())return n===void 0?await start(e,t):await start(e,t,n);try{return await start(e,t,{...n,deploymentId:`latest`})}catch(r){if(!isLatestDeploymentUnsupportedError(r))throw r;return n===void 0?await start(e,t):await start(e,t,n)}})}async function startWorkflowPreferAcceptedDeployment(e,t,n,r){let i=process.env.VERCEL_DEPLOYMENT_ID?.trim();return n===void 0||i===void 0||n!==i?await startWorkflowPreferLatest(e,t,r):await withWorkflowStartContext(async()=>await start(e,t,{...r,deploymentId:n}))}async function withWorkflowStartContext(e){let t=context.active(),n=isAgentTraceContext(t)?trace.deleteSpan(t):t;return await context.with(n,e)}function shouldRouteToLatestDeployment(){return process.env.VERCEL_ENV===`production`||isEveDevEnvironment()}function isLatestDeploymentUnsupportedError(e){return e instanceof Error&&e.message.includes(`deploymentId 'latest' requires a World that implements resolveLatestDeploymentId()`)}function normalizeWorkflowHook(e){if(typeof e!=`object`||!e||!(`runId`in e))throw Error(`Workflow hook did not include a run id.`);let t=e.runId;if(typeof t!=`string`||t.length===0)throw Error(`Workflow hook did not include a run id.`);return{runId:t}}export{LATEST_DEPLOYMENT_UNSUPPORTED_MESSAGE,activityCollectorWorkflowReference,createWorkflowRuntime,requestWorkflowTurnCancellation,sessionTimeoutWorkflowReference,startWorkflowPreferAcceptedDeployment,startWorkflowPreferLatest,taskRunWorkflowReference,toolRunWorkflowReference,turnWorkflowReference,waitForCommandHookOwner,workflowEntryReference};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{callAdapterEventHandler,defaultDeliverResult}from"#channel/adapter.js";import{contextStorage}from"#context/container.js";import{AuthKey,CapabilitiesKey,HandleEventKey,ModeKey,SessionDynamicSubagentRuntimeRevisionKey,SessionDynamicToolRuntimeRevisionKey,TasksEnabledKey,TurnTaskDeliveryKey,TurnTaskStateKey}from"#context/keys.js";import{createAuthorizationCompletedEvent,createSessionStartedEvent,createTurnStartedEvent,encodeMessageStreamEvent,stampMessageStreamEvent}from"#protocol/message.js";import{BundleKey,ChannelKey}from"#runtime/sessions/runtime-context-keys.js";import{emitTurnPreamble,getHarnessEmissionState,isHarnessBetweenTurns,setHarnessEmissionState}from"#harness/emission.js";import{createWorkflowRuntime}from"#execution/workflow-runtime.js";import{resolveWorkflowCallbackBaseUrl}from"#execution/workflow-callback-url.js";import{deserializeContext,serializeContext}from"#context/serialize.js";import{createDurableSessionState,readDurableSession}from"#execution/durable-session-store.js";import{dispatchDynamicSubagentEvent,refreshDynamicSessionSubagentsForRuntimeRevision}from"#context/dynamic-subagent-lifecycle.js";import{coalesceTurnInputs}from"#harness/messages.js";import{hydrateDurableSession,refreshSessionFromTurnAgent}from"#execution/session.js";import{resolveEffectiveAgentRuntime}from"#execution/effective-agent-config.js";import{TASK_UPDATE_SESSION_INSTRUCTION,isTaskOwnedSerializedContext}from"#execution/tasks/child/instructions.js";import{buildAdapterContext}from"#channel/adapter-context.js";import{preserveSerializedAgentTraceState}from"#tracing/agent-trace-context-store.js";import{getPendingWorkflowInterrupt}from"#harness/workflow-interrupt-state.js";import{getRuntimeActionKeysFromWorkflowInterrupt,isWorkflowRuntimeActionInterrupt}from"#harness/workflow-runtime-action-state.js";import{activeTurnId}from"#harness/active-turn-id.js";import{dispatchDynamicModelEvent}from"#context/dynamic-model-lifecycle.js";import{dispatchDynamicToolEvent,rebindMissingCompiledDynamicToolCallbacks,refreshDynamicSessionToolsForRuntimeRevision}from"#context/dynamic-tool-lifecycle.js";import{CallbackBaseUrlKey,PendingAuthorizationResultKey,clearPendingAuthorization,getPendingAuthorization}from"#harness/authorization.js";import{hasPendingInputBatch}from"#harness/input-requests.js";import{setChannelContext}from"#execution/channel-context.js";import{dispatchStreamEventHooks}from"#context/hook-lifecycle.js";import{observeSessionActivity}from"#execution/session-activity-projection.js";import{reconcileSessionContinuationToken}from"#execution/reconcile-session-continuation-token.js";import{bindSessionInstrumentation}from"#instrumentation/runtime.js";import{getTurnUsageState,takeSessionUsageDelta,toUsage}from"#harness/turn-tag-state.js";import{isTurnCancellation,throwIfTurnAborted}from"#harness/turn-cancellation.js";import{readTurnSleepDurationMs}from"#harness/turn-sleep.js";import{preserveSerializedSessionDynamicModelSelection}from"#context/serialized-dynamic-model-selection.js";import{dispatchDynamicInstructionEvent,drainDynamicInstructionUserMessages,prepareDynamicInstructionPreamble}from"#context/dynamic-instruction-lifecycle.js";import{dispatchDynamicSkillEvent}from"#context/dynamic-skill-lifecycle.js";import{dispatchMemoryLifecycleEvent}from"#context/memory-event-lifecycle.js";import{preserveSerializedInstrumentationState}from"#instrumentation/state.js";import{RuntimeActionSettlementTimesKey}from"#harness/runtime-action-settlement-state.js";import{matchAuthorizationCallbacks}from"#execution/authorization-callback-match.js";import{derivePendingState}from"#execution/pending-turn-state.js";import{forwardTaskEventToSessionCallback}from"#execution/task-event-callback.js";import{resolveEffectiveOutputSchema}from"#execution/effective-output-schema.js";import{buildRuntimeIdentity,createExecutionNodeStep}from"#execution/node-step.js";import{appendTaskAgentAnnouncement}from"#execution/tasks/parent/agent-views.js";import{resolveInitiatingTaskContext,resolveTaskDeliveryContext}from"#tasks/delivery-context.js";import{readRetainedBackgroundToolResult,runBackgroundStep}from"#execution/tasks/parent/tool-execution.js";import{prepareWorkflowPreambleTrace}from"#execution/workflow-trace-context.js";import{createExecutionHistoryView}from"#execution/history-view.js";import{resolveRuntimeCompiledArtifactsVersionedCacheKey}from"#runtime/cache-key.js";import{bindDynamicConnections}from"#execution/dynamic-connections.js";import{preserveCancelledTurnMessage}from"#execution/cancelled-turn-message.js";function channelDeliveryErrorCode(e){if(typeof e==`object`&&e&&`code`in e){let t=e.code;if(typeof t==`string`&&t.length>0)return t}return`CHANNEL_DELIVERY_FAILED`}async function turnStep(a){"use step";let o=a,s=await readDurableSession(o.sessionState),c=await deserializeContext(o.serializedContext);a.input?.kind===`deliver`&&(c.set(TurnTaskDeliveryKey,`none`),c.delete(TurnTaskStateKey));let l=c.require(ChannelKey),u=c.require(BundleKey),d=u.resolvedAgent.config?.experimental?.tasks===!0;c.set(TasksEnabledKey,d);let f=resolveEffectiveAgentRuntime(u,c),p=isTaskOwnedSerializedContext(o.serializedContext)&&d&&f.turnAgent.tools.some(e=>e.kind===`authored-tool`&&e.behavior?.handling?.kind===`dispatch`&&e.behavior.handling.target.kind===`task-update`);try{let{getWorkflowMetadata:e}=await import(`#compiled/@workflow/core/index.js`),t=e();typeof t.url==`string`&&c.set(CallbackBaseUrlKey,resolveWorkflowCallbackBaseUrl(t.url))}catch{}let m=getPendingAuthorization(s.state),h;if(m&&o.input?.kind===`deliver`){let{matches:e,remainingPayloads:t}=matchAuthorizationCallbacks(m,o.input.payloads);if(o={...o,input:{...o.input,payloads:t}},e.length>0){let n=e.map(e=>e.result);c.set(PendingAuthorizationResultKey,n),s={...s,state:clearPendingAuthorization(s.state,n.map(e=>e.attemptId??e.name))},h=e,t.length===0&&(o={...o,input:void 0})}}o.input?.kind===`deliver`&&o.input.auth!==void 0&&c.set(AuthKey,o.input.auth??null);let g=hydrateDurableSession({compactionOverrides:{thresholdPercent:f.thresholdPercent},durable:s,turnAgent:f.turnAgent}),_=createExecutionHistoryView(g),v=bindSessionInstrumentation({agentName:f.turnAgent.id,ctx:c,rootSessionId:g.rootSessionId??g.sessionId,sessionId:g.sessionId}),y=getHarnessEmissionState(g.state);a.input?.kind===`deliver`&&await contextStorage.run(c,()=>v?.instrumentChannelDelivery({agentName:u.turnAgent.id,ctx:c,delivery:a.input,rootSessionId:g.rootSessionId??g.sessionId,sequence:y.sequence,sessionId:g.sessionId,turnId:activeTurnId(y)}));let failChannelDeliveries=async e=>{await contextStorage.run(c,()=>v?.instrumentChannelDelivery({ctx:c,error:e,errorCode:channelDeliveryErrorCode(e),includeTurn:!1,outcome:`failed`})),await v?.flush()},b=buildAdapterContext(l,c),x;if(o.input?.kind===`deliver`){let e=[];try{for(let n of o.input.payloads){let r=l.deliver?await l.deliver(n,b):defaultDeliverResult(n);r!=null&&e.push(r)}}catch(e){throw await failChannelDeliveries(e),e}x=e.length===0?void 0:e.reduce(coalesceTurnInputs)}else o.input?.kind===`runtime-action-result`&&(o.input.acceptedAtMsByCallId!==void 0&&c.set(RuntimeActionSettlementTimesKey,o.input.acceptedAtMsByCallId),x={runtimeActionResults:o.input.results});if(x!==void 0&&a.input?.kind===`deliver`&&a.input.taskDeliveryId!==void 0){let e=resolveTaskDeliveryContext({state:s.state,taskDeliveryId:a.input.taskDeliveryId});e!==void 0&&(c.set(TurnTaskDeliveryKey,e.phase),x={...x,context:[...x.context??[],e.context]})}if(d&&c.get(TurnTaskDeliveryKey)===`none`){let e=resolveInitiatingTaskContext({state:s.state,turnId:activeTurnId(y)});e!==void 0&&(c.set(TurnTaskDeliveryKey,e.phase),c.set(TurnTaskStateKey,e.context))}if(o.input?.kind===`deliver`&&setChannelContext(c,{...l,state:{...b.state}}),o.input?.kind===`deliver`&&x===void 0){await contextStorage.run(c,()=>v?.instrumentChannelDelivery({ctx:c,includeTurn:!1,outcome:`completed`})),await v?.flush();let e=reconcileSessionContinuationToken(c,g),t=serializeContext(c),r=e===g?o.sessionState:createDurableSessionState({session:e});return{action:`park`,...derivePendingState(e),serializedContext:t,sessionState:r,tasksEnabled:d}}let S=u.hookRegistry,C=bindDynamicConnections(c,u.resolvedAgent),w=u.resolvedAgent.dynamicInstructionsResolvers??[],T=u.resolvedAgent.dynamicSkillResolvers??[],E=u.subagentRegistry.dynamicResolvers??[],D=u.resolvedAgent.dynamicToolResolvers??[],O={...u.graph.root,turnAgent:f.turnAgent},k=buildRuntimeIdentity(O);try{let e=process.env.VERCEL_DEPLOYMENT_ID?.trim(),t=e?`deployment:${e}`:await resolveRuntimeCompiledArtifactsVersionedCacheKey(u.compiledArtifactsSource);if(!y.sessionStarted)c.set(SessionDynamicSubagentRuntimeRevisionKey,t),c.set(SessionDynamicToolRuntimeRevisionKey,t);else{let e=createSessionStartedEvent({runtime:k});await Promise.all([refreshDynamicSessionSubagentsForRuntimeRevision({ctx:c,resolvers:E,event:e,messages:_.initial.messages,runtimeRevision:t}),refreshDynamicSessionToolsForRuntimeRevision({ctx:c,resolvers:D,event:e,messages:_.initial.messages,runtimeRevision:t})]),await rebindMissingCompiledDynamicToolCallbacks({ctx:c,event:createTurnStartedEvent({sequence:y.sequence,turnId:activeTurnId(y)}),messages:_.initial.messages,resolvers:D})}}catch(e){throw await failChannelDeliveries(e),e}let A=o.parentWritable.getWriter(),emit=async t=>{let n=await callAdapterEventHandler(l,t,b);setChannelContext(c,{...l,state:{...b.state}});let r=stampMessageStreamEvent(n);return await A.write(encodeMessageStreamEvent(r)),r},handleEvent=async(e,t)=>{let n=await forwardTaskEventToSessionCallback(c,e)?stampMessageStreamEvent(e):await emit(e),r=await dispatchMemoryLifecycleEvent({abortSignal:o.abortSignal,appRoot:O.agent?.metadata?.appRoot??``,ctx:c,event:e,memories:O.agent?.memories??[],messages:t,nodeId:u.nodeId??`__root__`});observeSessionActivity({ctx:c,event:n,sessionId:g.sessionId}),await dispatchStreamEventHooks({ctx:c,registry:S,event:n}),n.type!==`step.started`&&await dispatchDynamicModelEvent({ctx:c,dynamicModel:f.turnAgent.dynamicModel,event:n,messages:r,scope:{moduleMap:u.moduleMap,nodeId:u.nodeId}}),await C.dispatch(n),await dispatchDynamicSubagentEvent({ctx:c,resolvers:E,event:n,messages:r}),await dispatchDynamicToolEvent({ctx:c,resolvers:D,event:n,messages:r}),await dispatchDynamicSkillEvent({ctx:c,resolvers:T,event:n,messages:r}),await dispatchDynamicInstructionEvent({ctx:c,resolvers:w,event:n,messages:r})},j=c.require(ModeKey),M;try{throwIfTurnAborted(o.abortSignal),M=await runBackgroundStep(c,g,async e=>{c.setVirtualContext(HandleEventKey,handleEvent);let t=resolveEffectiveOutputSchema({agentOutputSchema:f.turnAgent.outputSchema,input:x,mode:j,session:e});if(await C.rehydrate(y,k,isHarnessBetweenTurns(t)),h){let e=getHarnessEmissionState(t.state);if(isHarnessBetweenTurns(t)){prepareDynamicInstructionPreamble(c,_.messages(t));let n=[],r=await prepareWorkflowPreambleTrace({emissionState:e,instrumentation:v});try{e=await emitTurnPreamble(handleEvent,{},e,k,r)}finally{n=drainDynamicInstructionUserMessages(c),t={...t,history:[...t.history,...n]}}t=setHarnessEmissionState(t,e)}for(let{authorization:t,result:n}of h){let r=m?.challenges.find(e=>e.attemptId===n.attemptId)?.candidateId;await handleEvent(createAuthorizationCompletedEvent({attemptId:n.attemptId,authorization:t,candidateId:r,name:n.name,outcome:`authorized`,sequence:e.sequence,stepIndex:e.stepIndex,turnId:e.turnId}))}}let n=c.get(CapabilitiesKey);return(async(e,t)=>{let r=refreshSessionFromTurnAgent({compactionOverrides:{thresholdPercent:f.thresholdPercent},session:e,systemPromptAdditions:p?[TASK_UPDATE_SESSION_INSTRUCTION]:void 0,turnAgent:f.turnAgent}),i=d?await appendTaskAgentAnnouncement(r,_.messages(r)):r;return createExecutionNodeStep({abortSignal:o.abortSignal,capabilities:n,clearOnly:o.input?.kind===`clear`,compactOnly:o.input?.kind===`compact`,createRuntime:createWorkflowRuntime,handleEvent,historyProjector:_.projector,historyView:_.prepare(i),instrumentation:v,mode:j,modelResolutionScope:{moduleMap:u.moduleMap,nodeId:u.nodeId},node:O,workflowMaxSubagents:r.workflowMaxSubagents})(i,t)})(t,x)})}catch(e){if(!isTurnCancellation(e))throw await failChannelDeliveries(e),e;A.releaseLock();let t=serializeContext(c),n=readRetainedBackgroundToolResult(c),r=await preserveCancelledTurnMessage(n?.backgroundTaskSession??g,x);return{action:`cancelled`,...n===void 0?{}:{backgroundTaskState:createDurableSessionState({session:r}),backgroundTasks:n.backgroundTasks},serializedContext:preserveSerializedInstrumentationState(preserveSerializedAgentTraceState(preserveSerializedSessionDynamicModelSelection(o.serializedContext,t),t),t),sessionState:createDurableSessionState({session:r})}}let N=reconcileSessionContinuationToken(c,M.session),P=serializeContext(c);M={...M,session:N};let F=createDurableSessionState({session:M.session}),I=readTurnSleepDurationMs(c),L=I===void 0?{}:{sleepDurationMs:I},R=M.backgroundTasks===void 0||M.backgroundTaskSession===void 0?{}:{backgroundTaskState:createDurableSessionState({session:M.backgroundTaskSession}),backgroundTasks:M.backgroundTasks};if(M.next!==null&&typeof M.next==`object`&&`done`in M.next){if(j===`task`&&hasPendingInputBatch(M.session.state))throw A.releaseLock(),Error(`Task mode cannot complete while input requests remain pending.`);await A.close();let e=getTurnUsageState(M.session.state)?.session;return{action:`done`,...R,output:M.next.output,isError:M.next.isError,...L,serializedContext:P,sessionState:F,usage:e===void 0?void 0:toUsage(e),usageDelta:takeSessionUsageDelta(M.session).delta}}if(M.next===null){A.releaseLock();let e=getPendingWorkflowInterrupt(M.session.state);if(e!==void 0&&isWorkflowRuntimeActionInterrupt(e.interrupt))return{action:`dispatch-workflow-runtime-actions`,...R,pendingRuntimeActionKeys:getRuntimeActionKeysFromWorkflowInterrupt(e.interrupt),...L,serializedContext:P,sessionState:F};let t=derivePendingState(M.session);if(M.settledTurn!==void 0){let{delta:e,session:n}=takeSessionUsageDelta(M.session);return{action:`park`,...R,...t,...L,serializedContext:P,sessionState:createDurableSessionState({session:n}),settled:{output:M.settledTurn.output,isError:M.settledTurn.isError,usage:e},tasksEnabled:d}}return{action:`park`,...R,...t,...L,serializedContext:P,sessionState:F,tasksEnabled:d}}return A.releaseLock(),{action:`continue`,...R,...L,serializedContext:P,sessionState:F}}export{turnStep};
|
|
1
|
+
import{callAdapterEventHandler,defaultDeliverResult}from"#channel/adapter.js";import{contextStorage}from"#context/container.js";import{AuthKey,CapabilitiesKey,HandleEventKey,ModeKey,SessionDynamicSubagentRuntimeRevisionKey,SessionDynamicToolRuntimeRevisionKey,TasksEnabledKey,TurnTaskDeliveryKey,TurnTaskStateKey}from"#context/keys.js";import{createAuthorizationCompletedEvent,createSessionStartedEvent,createTurnStartedEvent,encodeMessageStreamEvent,stampMessageStreamEvent}from"#protocol/message.js";import{BundleKey,ChannelKey}from"#runtime/sessions/runtime-context-keys.js";import{emitTurnPreamble,getHarnessEmissionState,isHarnessBetweenTurns,setHarnessEmissionState}from"#harness/emission.js";import{createWorkflowRuntime}from"#execution/workflow-runtime.js";import{resolveWorkflowCallbackBaseUrl}from"#execution/workflow-callback-url.js";import{deserializeContext,serializeContext}from"#context/serialize.js";import{createDurableSessionState,readDurableSession}from"#execution/durable-session-store.js";import{dispatchDynamicSubagentEvent,refreshDynamicSessionSubagentsForRuntimeRevision}from"#context/dynamic-subagent-lifecycle.js";import{coalesceTurnInputs}from"#harness/messages.js";import{hydrateDurableSession,refreshSessionFromTurnAgent}from"#execution/session.js";import{resolveEffectiveAgentRuntime}from"#execution/effective-agent-config.js";import{TASK_UPDATE_SESSION_INSTRUCTION,isTaskOwnedSerializedContext}from"#execution/tasks/child/instructions.js";import{buildAdapterContext}from"#channel/adapter-context.js";import{preserveSerializedAgentTraceState}from"#tracing/agent-trace-context-store.js";import{deferMismatchedInlineTurnStep}from"#execution/accepted-delivery-deployment.js";import{getPendingWorkflowInterrupt}from"#harness/workflow-interrupt-state.js";import{getRuntimeActionKeysFromWorkflowInterrupt,isWorkflowRuntimeActionInterrupt}from"#harness/workflow-runtime-action-state.js";import{activeTurnId}from"#harness/active-turn-id.js";import{isTurnCancellation,throwIfTurnAborted}from"#harness/turn-cancellation.js";import{dispatchDynamicModelEvent}from"#context/dynamic-model-lifecycle.js";import{dispatchDynamicToolEvent,rebindMissingCompiledDynamicToolCallbacks,refreshDynamicSessionToolsForRuntimeRevision}from"#context/dynamic-tool-lifecycle.js";import{CallbackBaseUrlKey,PendingAuthorizationResultKey,clearPendingAuthorization,getPendingAuthorization}from"#harness/authorization.js";import{hasPendingInputBatch}from"#harness/input-requests.js";import{setChannelContext}from"#execution/channel-context.js";import{dispatchStreamEventHooks}from"#context/hook-lifecycle.js";import{observeSessionActivity}from"#execution/session-activity-projection.js";import{reconcileSessionContinuationToken}from"#execution/reconcile-session-continuation-token.js";import{bindSessionInstrumentation}from"#instrumentation/runtime.js";import{getTurnUsageState,takeSessionUsageDelta,toUsage}from"#harness/turn-tag-state.js";import{readTurnSleepDurationMs}from"#harness/turn-sleep.js";import{preserveSerializedSessionDynamicModelSelection}from"#context/serialized-dynamic-model-selection.js";import{dispatchDynamicInstructionEvent,drainDynamicInstructionUserMessages,prepareDynamicInstructionPreamble}from"#context/dynamic-instruction-lifecycle.js";import{dispatchDynamicSkillEvent}from"#context/dynamic-skill-lifecycle.js";import{dispatchMemoryLifecycleEvent}from"#context/memory-event-lifecycle.js";import{preserveSerializedInstrumentationState}from"#instrumentation/state.js";import{RuntimeActionSettlementTimesKey}from"#harness/runtime-action-settlement-state.js";import{matchAuthorizationCallbacks}from"#execution/authorization-callback-match.js";import{derivePendingState}from"#execution/pending-turn-state.js";import{forwardTaskEventToSessionCallback}from"#execution/task-event-callback.js";import{resolveEffectiveOutputSchema}from"#execution/effective-output-schema.js";import{buildRuntimeIdentity,createExecutionNodeStep}from"#execution/node-step.js";import{appendTaskAgentAnnouncement}from"#execution/tasks/parent/agent-views.js";import{resolveInitiatingTaskContext,resolveTaskDeliveryContext}from"#tasks/delivery-context.js";import{readRetainedBackgroundToolResult,runBackgroundStep}from"#execution/tasks/parent/tool-execution.js";import{prepareWorkflowPreambleTrace}from"#execution/workflow-trace-context.js";import{createExecutionHistoryView}from"#execution/history-view.js";import{resolveRuntimeCompiledArtifactsVersionedCacheKey}from"#runtime/cache-key.js";import{bindDynamicConnections}from"#execution/dynamic-connections.js";import{preserveCancelledTurnMessage}from"#execution/cancelled-turn-message.js";function channelDeliveryErrorCode(e){if(typeof e==`object`&&e&&`code`in e){let t=e.code;if(typeof t==`string`&&t.length>0)return t}return`CHANNEL_DELIVERY_FAILED`}async function turnStep(a){"use step";let o=deferMismatchedInlineTurnStep(a);if(o!==void 0)return o;let s=a,c=await readDurableSession(s.sessionState),l=await deserializeContext(s.serializedContext);a.input?.kind===`deliver`&&(l.set(TurnTaskDeliveryKey,`none`),l.delete(TurnTaskStateKey));let u=l.require(ChannelKey),d=l.require(BundleKey),f=d.resolvedAgent.config?.experimental?.tasks===!0;l.set(TasksEnabledKey,f);let p=resolveEffectiveAgentRuntime(d,l),m=isTaskOwnedSerializedContext(s.serializedContext)&&f&&p.turnAgent.tools.some(e=>e.kind===`authored-tool`&&e.behavior?.handling?.kind===`dispatch`&&e.behavior.handling.target.kind===`task-update`);try{let{getWorkflowMetadata:e}=await import(`#compiled/@workflow/core/index.js`),t=e();typeof t.url==`string`&&l.set(CallbackBaseUrlKey,resolveWorkflowCallbackBaseUrl(t.url))}catch{}let h=getPendingAuthorization(c.state),g;if(h&&s.input?.kind===`deliver`){let{matches:e,remainingPayloads:t}=matchAuthorizationCallbacks(h,s.input.payloads);if(s={...s,input:{...s.input,payloads:t}},e.length>0){let n=e.map(e=>e.result);l.set(PendingAuthorizationResultKey,n),c={...c,state:clearPendingAuthorization(c.state,n.map(e=>e.attemptId??e.name))},g=e,t.length===0&&(s={...s,input:void 0})}}s.input?.kind===`deliver`&&s.input.auth!==void 0&&l.set(AuthKey,s.input.auth??null);let _=hydrateDurableSession({compactionOverrides:{thresholdPercent:p.thresholdPercent},durable:c,turnAgent:p.turnAgent}),v=createExecutionHistoryView(_),y=bindSessionInstrumentation({agentName:p.turnAgent.id,ctx:l,rootSessionId:_.rootSessionId??_.sessionId,sessionId:_.sessionId}),b=getHarnessEmissionState(_.state);a.input?.kind===`deliver`&&await contextStorage.run(l,()=>y?.instrumentChannelDelivery({agentName:d.turnAgent.id,ctx:l,delivery:a.input,rootSessionId:_.rootSessionId??_.sessionId,sequence:b.sequence,sessionId:_.sessionId,turnId:activeTurnId(b)}));let failChannelDeliveries=async e=>{await contextStorage.run(l,()=>y?.instrumentChannelDelivery({ctx:l,error:e,errorCode:channelDeliveryErrorCode(e),includeTurn:!1,outcome:`failed`})),await y?.flush()},x=buildAdapterContext(u,l),S;if(s.input?.kind===`deliver`){let e=[];try{for(let n of s.input.payloads){let r=u.deliver?await u.deliver(n,x):defaultDeliverResult(n);r!=null&&e.push(r)}}catch(e){throw await failChannelDeliveries(e),e}S=e.length===0?void 0:e.reduce(coalesceTurnInputs)}else s.input?.kind===`runtime-action-result`&&(s.input.acceptedAtMsByCallId!==void 0&&l.set(RuntimeActionSettlementTimesKey,s.input.acceptedAtMsByCallId),S={runtimeActionResults:s.input.results});if(S!==void 0&&a.input?.kind===`deliver`&&a.input.taskDeliveryId!==void 0){let e=resolveTaskDeliveryContext({state:c.state,taskDeliveryId:a.input.taskDeliveryId});e!==void 0&&(l.set(TurnTaskDeliveryKey,e.phase),S={...S,context:[...S.context??[],e.context]})}if(f&&l.get(TurnTaskDeliveryKey)===`none`){let e=resolveInitiatingTaskContext({state:c.state,turnId:activeTurnId(b)});e!==void 0&&(l.set(TurnTaskDeliveryKey,e.phase),l.set(TurnTaskStateKey,e.context))}if(s.input?.kind===`deliver`&&setChannelContext(l,{...u,state:{...x.state}}),s.input?.kind===`deliver`&&S===void 0){await contextStorage.run(l,()=>y?.instrumentChannelDelivery({ctx:l,includeTurn:!1,outcome:`completed`})),await y?.flush();let e=reconcileSessionContinuationToken(l,_),t=serializeContext(l),r=e===_?s.sessionState:createDurableSessionState({session:e});return{action:`park`,...derivePendingState(e),serializedContext:t,sessionState:r,tasksEnabled:f}}let C=d.hookRegistry,w=bindDynamicConnections(l,d.resolvedAgent),T=d.resolvedAgent.dynamicInstructionsResolvers??[],E=d.resolvedAgent.dynamicSkillResolvers??[],D=d.subagentRegistry.dynamicResolvers??[],O=d.resolvedAgent.dynamicToolResolvers??[],k={...d.graph.root,turnAgent:p.turnAgent},A=buildRuntimeIdentity(k);try{let e=process.env.VERCEL_DEPLOYMENT_ID?.trim(),t=e?`deployment:${e}`:await resolveRuntimeCompiledArtifactsVersionedCacheKey(d.compiledArtifactsSource);if(!b.sessionStarted)l.set(SessionDynamicSubagentRuntimeRevisionKey,t),l.set(SessionDynamicToolRuntimeRevisionKey,t);else{let e=createSessionStartedEvent({runtime:A});await Promise.all([refreshDynamicSessionSubagentsForRuntimeRevision({ctx:l,resolvers:D,event:e,messages:v.initial.messages,runtimeRevision:t}),refreshDynamicSessionToolsForRuntimeRevision({ctx:l,resolvers:O,event:e,messages:v.initial.messages,runtimeRevision:t})]),await rebindMissingCompiledDynamicToolCallbacks({ctx:l,event:createTurnStartedEvent({sequence:b.sequence,turnId:activeTurnId(b)}),messages:v.initial.messages,resolvers:O})}}catch(e){throw await failChannelDeliveries(e),e}let j=s.parentWritable.getWriter(),emit=async t=>{let n=await callAdapterEventHandler(u,t,x);setChannelContext(l,{...u,state:{...x.state}});let r=stampMessageStreamEvent(n);return await j.write(encodeMessageStreamEvent(r)),r},handleEvent=async(e,t)=>{let n=await forwardTaskEventToSessionCallback(l,e)?stampMessageStreamEvent(e):await emit(e),r=await dispatchMemoryLifecycleEvent({abortSignal:s.abortSignal,appRoot:k.agent?.metadata?.appRoot??``,ctx:l,event:e,memories:k.agent?.memories??[],messages:t,nodeId:d.nodeId??`__root__`});observeSessionActivity({ctx:l,event:n,sessionId:_.sessionId}),await dispatchStreamEventHooks({ctx:l,registry:C,event:n}),n.type!==`step.started`&&await dispatchDynamicModelEvent({ctx:l,dynamicModel:p.turnAgent.dynamicModel,event:n,messages:r,scope:{moduleMap:d.moduleMap,nodeId:d.nodeId}}),await w.dispatch(n),await dispatchDynamicSubagentEvent({ctx:l,resolvers:D,event:n,messages:r}),await dispatchDynamicToolEvent({ctx:l,resolvers:O,event:n,messages:r}),await dispatchDynamicSkillEvent({ctx:l,resolvers:E,event:n,messages:r}),await dispatchDynamicInstructionEvent({ctx:l,resolvers:T,event:n,messages:r})},M=l.require(ModeKey),N;try{throwIfTurnAborted(s.abortSignal),N=await runBackgroundStep(l,_,async e=>{l.setVirtualContext(HandleEventKey,handleEvent);let t=resolveEffectiveOutputSchema({agentOutputSchema:p.turnAgent.outputSchema,input:S,mode:M,session:e});if(await w.rehydrate(b,A,isHarnessBetweenTurns(t)),g){let e=getHarnessEmissionState(t.state);if(isHarnessBetweenTurns(t)){prepareDynamicInstructionPreamble(l,v.messages(t));let n=[],r=await prepareWorkflowPreambleTrace({emissionState:e,instrumentation:y});try{e=await emitTurnPreamble(handleEvent,{},e,A,r)}finally{n=drainDynamicInstructionUserMessages(l),t={...t,history:[...t.history,...n]}}t=setHarnessEmissionState(t,e)}for(let{authorization:t,result:n}of g){let r=h?.challenges.find(e=>e.attemptId===n.attemptId)?.candidateId;await handleEvent(createAuthorizationCompletedEvent({attemptId:n.attemptId,authorization:t,candidateId:r,name:n.name,outcome:`authorized`,sequence:e.sequence,stepIndex:e.stepIndex,turnId:e.turnId}))}}let n=l.get(CapabilitiesKey);return(async(e,t)=>{let r=refreshSessionFromTurnAgent({compactionOverrides:{thresholdPercent:p.thresholdPercent},session:e,systemPromptAdditions:m?[TASK_UPDATE_SESSION_INSTRUCTION]:void 0,turnAgent:p.turnAgent}),i=f?await appendTaskAgentAnnouncement(r,v.messages(r)):r;return createExecutionNodeStep({abortSignal:s.abortSignal,capabilities:n,clearOnly:s.input?.kind===`clear`,compactOnly:s.input?.kind===`compact`,createRuntime:createWorkflowRuntime,handleEvent,historyProjector:v.projector,historyView:v.prepare(i),instrumentation:y,mode:M,modelResolutionScope:{moduleMap:d.moduleMap,nodeId:d.nodeId},node:k,workflowMaxSubagents:r.workflowMaxSubagents})(i,t)})(t,S)})}catch(e){if(!isTurnCancellation(e))throw await failChannelDeliveries(e),e;j.releaseLock();let t=serializeContext(l),n=readRetainedBackgroundToolResult(l),r=await preserveCancelledTurnMessage(n?.backgroundTaskSession??_,S);return{action:`cancelled`,...n===void 0?{}:{backgroundTaskState:createDurableSessionState({session:r}),backgroundTasks:n.backgroundTasks},serializedContext:preserveSerializedInstrumentationState(preserveSerializedAgentTraceState(preserveSerializedSessionDynamicModelSelection(s.serializedContext,t),t),t),sessionState:createDurableSessionState({session:r})}}let P=reconcileSessionContinuationToken(l,N.session),F=serializeContext(l);N={...N,session:P};let I=createDurableSessionState({session:N.session}),L=readTurnSleepDurationMs(l),R=L===void 0?{}:{sleepDurationMs:L},z=N.backgroundTasks===void 0||N.backgroundTaskSession===void 0?{}:{backgroundTaskState:createDurableSessionState({session:N.backgroundTaskSession}),backgroundTasks:N.backgroundTasks};if(N.next!==null&&typeof N.next==`object`&&`done`in N.next){if(M===`task`&&hasPendingInputBatch(N.session.state))throw j.releaseLock(),Error(`Task mode cannot complete while input requests remain pending.`);await j.close();let e=getTurnUsageState(N.session.state)?.session;return{action:`done`,...z,output:N.next.output,isError:N.next.isError,...R,serializedContext:F,sessionState:I,usage:e===void 0?void 0:toUsage(e),usageDelta:takeSessionUsageDelta(N.session).delta}}if(N.next===null){j.releaseLock();let e=getPendingWorkflowInterrupt(N.session.state);if(e!==void 0&&isWorkflowRuntimeActionInterrupt(e.interrupt))return{action:`dispatch-workflow-runtime-actions`,...z,pendingRuntimeActionKeys:getRuntimeActionKeysFromWorkflowInterrupt(e.interrupt),...R,serializedContext:F,sessionState:I};let t=derivePendingState(N.session);if(N.settledTurn!==void 0){let{delta:e,session:n}=takeSessionUsageDelta(N.session);return{action:`park`,...z,...t,...R,serializedContext:F,sessionState:createDurableSessionState({session:n}),settled:{output:N.settledTurn.output,isError:N.settledTurn.isError,usage:e},tasksEnabled:f}}return{action:`park`,...z,...t,...R,serializedContext:F,sessionState:I,tasksEnabled:f}}return j.releaseLock(),{action:`continue`,...z,...R,serializedContext:F,sessionState:I}}export{turnStep};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { RouteContext } from "#public/definitions/channel.js";
|
|
2
|
+
/** The path `createWebhook()` mints, so external systems call back without knowing eve. */
|
|
3
|
+
export declare const WORKFLOW_WEBHOOK_ROUTE_PATTERN = "/.well-known/workflow/v1/webhook/:token";
|
|
4
|
+
export declare function handleWorkflowWebhookRequest(request: Request, ctx: RouteContext): Promise<Response>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{walkCauseChain}from"#shared/errors.js";import{resumeWebhook}from"#internal/workflow/runtime.js";import{HookNotFoundError}from"#compiled/@workflow/errors/index.js";const WORKFLOW_WEBHOOK_ROUTE_PATTERN=`/.well-known/workflow/v1/webhook/:token`;async function handleWorkflowWebhookRequest(t,n){let r=n.params.token;if(typeof r!=`string`||r.length===0)return Response.json({error:`Missing webhook token.`,ok:!1},{status:400});try{return await resumeWebhook(r,t)}catch(e){for(let t of walkCauseChain(e))if(HookNotFoundError.is(t))return Response.json({error:`Webhook not pending.`,ok:!1},{status:404});throw e}}export{WORKFLOW_WEBHOOK_ROUTE_PATTERN,handleWorkflowWebhookRequest};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createHash}from"node:crypto";import{buildSessionHandle}from"#channel/session.js";import{createLogger}from"#internal/logging.js";import{getAdapterKind}from"#channel/adapter.js";import{loadContext}from"#context/container.js";import{SandboxKey}from"#context/keys.js";import{deserializeUrlFilePart,isSerializedUrlFilePart}from"#internal/attachments/url-refs.js";import{basename}from"node:path";import{
|
|
1
|
+
import{createHash}from"node:crypto";import{buildSessionHandle}from"#channel/session.js";import{createLogger}from"#internal/logging.js";import{getAdapterKind}from"#channel/adapter.js";import{loadContext}from"#context/container.js";import{SandboxKey}from"#context/keys.js";import{deserializeUrlFilePart,isSerializedUrlFilePart}from"#internal/attachments/url-refs.js";import{basename}from"node:path";import{ChannelKey}from"#runtime/sessions/runtime-context-keys.js";import{buildAdapterContext}from"#channel/adapter-context.js";import{fileDataToBytes}from"#internal/attachments/data.js";import{EveAttachmentError}from"#internal/attachments/errors.js";import{decodeSandboxRef,encodeSandboxRef,isSandboxRefUrl}from"#internal/attachments/sandbox-refs.js";const ATTACHMENTS_ROOT=`/workspace/attachments`,log=createLogger(`harness.attachment-staging`),UNSAFE_FILENAME_CHARS=/[^\w.-]+/g;async function stageAttachmentsForAdapter(e,t,n){if(typeof e==`string`)return e;let r=reconstitueFilePartUrls(e);return Promise.all(r.map(async e=>e.type===`file`?stageFilePart(e,t,n):e))}async function stageAttachmentsToSandbox(e){if(typeof e==`string`||!Array.isArray(e)||!hasFileParts(e))return e;let n=loadContext(),r=n.get(SandboxKey);if(r===void 0)return e;let o=await r.get();if(o===null)return e;let s=n.get(ChannelKey);return stageAttachmentsForAdapter(e,o,s?buildAdapterContext(s,n):{ctx:n,state:{},session:buildSessionHandle(n)})}async function hydrateSandboxAttachments(e){if(!messagesContainSandboxRef(e))return e;let t=loadContext().get(SandboxKey);if(t===void 0)throw Error(`Cannot hydrate sandbox-ref FilePart: no SandboxKey is bound on the active eve context. Hydration must run inside a step scope with the framework sandbox provider installed.`);let n=await t.get();if(n===null)throw Error(`Cannot hydrate sandbox-ref FilePart: SandboxKey is bound but no active sandbox session is available.`);return Promise.all(e.map(async e=>{if(!messageContainsSandboxRef(e))return e;let t=await hydrateMessageContent(e.content,n);return{...e,content:t}}))}function hasFileParts(e){for(let t of e)if(t.type===`file`)return!0;return!1}function messagesContainSandboxRef(e){for(let t of e)if(messageContainsSandboxRef(t))return!0;return!1}function messageContainsSandboxRef(e){let t=e.content;if(!Array.isArray(t))return!1;for(let e of t)if(isSandboxRefFilePart(e))return!0;return!1}function isSandboxRefFilePart(e){return typeof e==`object`&&!!e&&e.type===`file`&&isSandboxRefUrl(e.data)}async function hydrateMessageContent(e,t){return Array.isArray(e)?Promise.all(e.map(async e=>{if(!isSandboxRefFilePart(e))return e;let n=e,r=decodeSandboxRef(n.data);if(!shouldInlineSandboxRefAsBytes(r))return renderSandboxRefAsTextPart(r);let i=await t.readBinaryFile({path:r.path});return i===null?(log.warn(`sandbox-ref attachment bytes missing on hydration — degrading to text reference`,{mediaType:r.mediaType,path:r.path,size:r.size}),{text:`FileNotFound: Current snapshot may be newer and does not contain ${r.path}.`,type:`text`}):{...n,data:i,mediaType:r.mediaType}})):e}function shouldInlineSandboxRefAsBytes(e){return e.mediaType.startsWith(`image/`)?e.size<=3145728:e.mediaType===`application/pdf`&&e.size<=20971520}function renderSandboxRefAsTextPart(e){return{text:`Attached file ${e.path} (${e.mediaType})`,type:`text`}}async function stageFilePart(e,t,n){if(isSandboxRefUrl(e.data))return e;if(e.data instanceof URL&&e.data.protocol!==`data:`){let r;try{r=await tryFetchFile(e.data.href,n)}catch(t){if(!(t instanceof EveAttachmentError))throw t;let n=e.filename?.trim()||`file`;return log.warn(`attachment resolver failed — degrading to text part`,{adapterKind:t.adapterKind,error:t.cause,filename:n,kind:t.kind}),{text:`Attachment ${n} could not be retrieved: ${t.message}`,type:`text`}}return r===null?e:stageResolvedBytes(e,r,t)}let r=await fileDataToBytes(e.data);return r===null?e:stageResolvedBytes(e,{bytes:r},t)}async function stageResolvedBytes(e,t,n){let r=t.bytes,i=sha256Prefix(r),a=t.mediaType??e.mediaType??`application/octet-stream`,o=safeFilename(t.filename??e.filename,i),s=`${ATTACHMENTS_ROOT}/${i}/${o}`;await n.writeBinaryFile({content:r,path:s});let c=n.resolvePath(s);return{...e,data:encodeSandboxRef({mediaType:a,path:c,size:r.byteLength}),filename:c,mediaType:a}}async function tryFetchFile(e,t){let n=t.ctx.get(ChannelKey);if(n?.fetchFile===void 0)return null;let i=getAdapterKind(n);try{let r=await n.fetchFile(e,t);return r===null?null:Buffer.isBuffer(r)?{bytes:r}:r}catch(e){throw e instanceof EveAttachmentError?e:new EveAttachmentError({adapterKind:i,cause:e,kind:`resolver-threw`,message:`Attachment retrieval failed in the "${i}" channel.`})}}function reconstitueFilePartUrls(e){let t=!1,n=e.map(e=>e.type===`file`&&isSerializedUrlFilePart(e.data)?(t=!0,{...e,data:deserializeUrlFilePart(e.data)}):e);return t?n:e}function sha256Prefix(t){return createHash(`sha256`).update(t).digest(`hex`).slice(0,16)}function safeFilename(e,t){if(e===void 0)return`file-${t}`;let n=basename(e).replace(UNSAFE_FILENAME_CHARS,`_`);return n.length>0?n:`file-${t}`}export{ATTACHMENTS_ROOT,hydrateSandboxAttachments,stageAttachmentsForAdapter,stageAttachmentsToSandbox};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createActionInputAppendedEvent,createActionPartialEvent,createActionResultEvent,createActionsRequestedEvent,createMessageAppendedEvent,createMessageCompletedEvent,createMessageReceivedEvent,createReasoningAppendedEvent,createReasoningCompletedEvent,createSessionCompletedEvent,createSessionFailedEvent,createSessionStartedEvent,createSessionWaitingEvent,createStepFailedEvent,createStepStartedEvent,createTurnCompletedEvent,createTurnFailedEvent,createTurnStartedEvent}from"#protocol/message.js";import{createRuntimeActionRequestFromToolCall}from"#harness/runtime-actions.js";import{
|
|
1
|
+
import{createActionInputAppendedEvent,createActionPartialEvent,createActionResultEvent,createActionsRequestedEvent,createMessageAppendedEvent,createMessageCompletedEvent,createMessageReceivedEvent,createReasoningAppendedEvent,createReasoningCompletedEvent,createSessionCompletedEvent,createSessionFailedEvent,createSessionStartedEvent,createSessionWaitingEvent,createStepFailedEvent,createStepStartedEvent,createTurnCompletedEvent,createTurnFailedEvent,createTurnStartedEvent}from"#protocol/message.js";import{createRuntimeActionRequestFromToolCall}from"#harness/runtime-actions.js";import{createRuntimeToolResultFromStepResult,createRuntimeToolResultFromToolError,createToolResultMessagePartFromToolError}from"#harness/action-result-helpers.js";import{hasEmptyDeliverySentinel}from"#shared/empty-delivery.js";import{createInvalidToolCallInputError,isInvalidToolCall,resolveProviderToolCallRequest}from"#harness/tool-call-input-errors.js";import{createProviderStreamActionBatch}from"#harness/stream-actions.js";import{normalizeModelStreamError}from"#harness/model-call-error.js";import{createOrderedStreamEmitter}from"#harness/ordered-stream-emitter.js";import{interruptStreamOnFailure}from"#harness/interruptible-stream.js";import{isInlineAuthorizationToolResult}from"#harness/inline-tool-authorization.js";import{getHarnessEmissionState,isHarnessBetweenTurns,setHarnessEmissionState}from"#harness/emission-state.js";async function emitTurnPreamble(e,t,n,r,i){let a=`turn_${n.sequence}`;return n.sessionStarted||await e(createSessionStartedEvent({runtime:r,trace:i})),await e(createTurnStartedEvent({sequence:n.sequence,trace:i,turnId:a})),t.message!==void 0&&await e(createMessageReceivedEvent({message:t.message,sequence:n.sequence,turnId:a})),{sessionStarted:!0,sequence:n.sequence,stepIndex:0,turnId:a}}async function emitStepStarted(e,t,n,r){await e(createStepStartedEvent({modelId:n,sequence:t.sequence,stepIndex:t.stepIndex,turnId:t.turnId}),r)}async function emitStepAndTurnFailed(e,t,n){await e(createStepFailedEvent({...n,sequence:t.sequence,stepIndex:t.stepIndex,turnId:t.turnId})),await e(createTurnFailedEvent({...n,sequence:t.sequence,turnId:t.turnId}))}async function emitFailedStep(e,t,n){await emitStepAndTurnFailed(e,t,n),await e(createSessionFailedEvent(n))}async function emitRecoverableFailedTurn(e,t,n){return await emitStepAndTurnFailed(e,t,n),await e(createSessionWaitingEvent()),{sessionStarted:t.sessionStarted,sequence:t.sequence+1,stepIndex:0,turnId:``}}function advanceStep(e){return{...e,stepIndex:e.stepIndex+1}}async function emitTurnEpilogue(e,t,n,r){return await e(createTurnCompletedEvent({sequence:t.sequence,turnId:t.turnId}),r),n===`conversation`?await e(createSessionWaitingEvent()):await e(createSessionCompletedEvent()),{sessionStarted:t.sessionStarted,sequence:t.sequence+1,stepIndex:0,turnId:``}}function normalizeAssistantStepFinishReason(e){switch(e){case`content-filter`:case`error`:case`length`:case`stop`:case`tool-calls`:return e;default:return`other`}}async function emitStreamContent(e,t,n,r){let i=createOrderedStreamEmitter(e),a=createProviderStreamActionBatch({emitFn:i.emit,state:t});try{return await consumeStreamContent(i.emit,t,interruptStreamOnFailure(n,i.failureSignal),a,r)}finally{try{await a.cancel()}finally{await i.closeAndDrain()}}}async function consumeStreamContent(o,s,c,l,u){let d=``,f=``,p=`stop`,m,h=new Set,g=new Set,_=new Set,v=new Set,y=new Set,b=new Set,x=[],S=[],C=new Map,flushCurrentMessage=async()=>{f.length!==0&&(await o(createMessageCompletedEvent({finishReason:`tool-calls`,message:f,sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId})),f=``)},emitActionInput=async(t,n,r,i)=>o(createActionInputAppendedEvent({callId:t,inputTextDelta:r,inputTextOffset:i,sequence:s.sequence,stepIndex:s.stepIndex,toolName:n,turnId:s.turnId})),emitActionRequest=async e=>{g.has(e.callId)||(f.trim().length>0&&await flushCurrentMessage(),g.add(e.callId),await o(createActionsRequestedEvent({actions:[e],sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId})))},collectProviderToolCall=async e=>{if(v.has(e.toolCallId)||(v.add(e.toolCallId),g.has(e.toolCallId)))return;g.add(e.toolCallId),f.trim().length>0&&await flushCurrentMessage();let t=resolveProviderToolCallRequest(e);if(t.toolError!==void 0){b.add(e.toolCallId),await emitActionResult(createRuntimeToolResultFromToolError(t.toolError)),y.add(e.toolCallId),S.push(createToolResultMessagePartFromToolError(t.toolError));return}l.observe(t.request)},emitActionResult=async e=>{_.has(e.callId)||(_.add(e.callId),await o(createActionResultEvent({result:e,sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId})))},emitActionPartial=async e=>{await o(createActionPartialEvent({result:e,sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId}))},emitToolCall=async e=>{if(isInvalidToolCall(e)){b.add(e.toolCallId);return}if(!(u===void 0||u.excludedActionToolNames.has(e.toolName)))try{await emitActionRequest(createRuntimeActionRequestFromToolCall({toolCall:e,tools:u.tools}))}catch(t){if(t instanceof TypeError){let n=createInvalidToolCallInputError({error:t,toolCall:e});b.add(e.toolCallId),f.trim().length>0&&await flushCurrentMessage(),await emitActionResult(createRuntimeToolResultFromToolError(n)),y.add(e.toolCallId),S.push(createToolResultMessagePartFromToolError(n));return}throw t}};for await(let e of c)if(m===void 0)switch(e.type){case`reasoning-delta`:await l.flush(),d+=e.text,await o(createReasoningAppendedEvent({reasoningDelta:e.text,reasoningSoFar:d,sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId}));break;case`text-delta`:await l.flush(),d.trim().length>0&&(await o(createReasoningCompletedEvent({reasoning:d,sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId})),d=``),f+=e.text,await o(createMessageAppendedEvent({messageDelta:e.text,messageSoFar:f,sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId}));break;case`tool-input-start`:if(u===void 0||e.providerExecuted===!0||u.excludedActionToolNames.has(e.toolName)){C.delete(e.id);break}await l.flush(),f.trim().length>0&&await flushCurrentMessage(),C.set(e.id,{offset:0,toolName:e.toolName}),await emitActionInput(e.id,e.toolName,``,0);break;case`tool-input-delta`:{let t=C.get(e.id);if(t===void 0)break;await l.flush();let n=t.offset;t.offset+=e.delta.length,await emitActionInput(e.id,t.toolName,e.delta,n);break}case`tool-input-end`:C.delete(e.id);break;case`tool-call`:{let t=e;C.delete(t.toolCallId),h.add(t.toolCallId),t.providerExecuted===!0?await collectProviderToolCall(t):(await l.flush(),await emitToolCall(t));break}case`tool-result`:{let t=e;if(t.preliminary===!0){t.providerExecuted!==!0&&await emitActionPartial(createRuntimeToolResultFromStepResult(t));break}if(t.providerExecuted===!0){await collectProviderToolCall({input:`input`in t?t.input:void 0,toolCallId:t.toolCallId,toolName:t.toolName}),await l.flush(),await emitActionResult(createRuntimeToolResultFromStepResult(t));break}if(h.has(e.toolCallId)){if(isInlineAuthorizationToolResult(t))break;g.has(e.toolCallId)&&(await emitActionResult(createRuntimeToolResultFromStepResult(t)),y.add(e.toolCallId));break}if(await l.flush(),await flushCurrentMessage(),isInlineAuthorizationToolResult(t)){y.add(e.toolCallId),x.push(t);break}await emitActionResult(createRuntimeToolResultFromStepResult(t)),y.add(e.toolCallId);break}case`tool-error`:{let t=e;t.providerExecuted===!0?(await collectProviderToolCall(t),await l.flush(),await emitActionResult(createRuntimeToolResultFromToolError(t))):g.has(t.toolCallId)&&(await emitActionResult(createRuntimeToolResultFromToolError(t)),y.add(t.toolCallId),S.push(createToolResultMessagePartFromToolError(t)));break}case`finish-step`:p=normalizeAssistantStepFinishReason(e.finishReason),await l.flush();break;case`error`:m=normalizeModelStreamError(e.error);break;case`abort`:throw new DOMException(e.reason??`The model stream was aborted.`,`AbortError`);default:break}if(await l.flush(),m!==void 0)throw m;return d.trim().length>0&&await o(createReasoningCompletedEvent({reasoning:d,sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId})),p!==`tool-calls`&&hasEmptyDeliverySentinel(f)?await o(createMessageCompletedEvent({finishReason:p,message:null,sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId})):f.trim().length>0&&await o(createMessageCompletedEvent({finishReason:p,message:f,sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId})),{emittedActionCallIds:g,handledInlineToolResultCallIds:y,invalidInputToolCallIds:b,inlineAuthorizationResults:x,trailingInlineToolResultParts:S}}export{advanceStep,emitFailedStep,emitRecoverableFailedTurn,emitStepStarted,emitStreamContent,emitTurnEpilogue,emitTurnPreamble,getHarnessEmissionState,isHarnessBetweenTurns,normalizeAssistantStepFinishReason,setHarnessEmissionState};
|
|
@@ -1,8 +1,16 @@
|
|
|
1
1
|
import type { SubagentInputRequestHookPayload } from "#channel/types.js";
|
|
2
2
|
import type { HarnessSession, SessionStateMap } from "#harness/types.js";
|
|
3
3
|
import type { InputRequestKind } from "#shared/input.js";
|
|
4
|
+
/**
|
|
5
|
+
* Marks a continuation token as a bare hook a workflow tool run created for one
|
|
6
|
+
* request, resumed with the plain response, rather than a child session inbox.
|
|
7
|
+
*/
|
|
8
|
+
export interface AnswerHookRoute {
|
|
9
|
+
readonly runId: string;
|
|
10
|
+
}
|
|
4
11
|
/** Routing and control metadata for one descendant-owned input request. */
|
|
5
12
|
export interface ProxyInputRequest {
|
|
13
|
+
readonly answerHook?: AnswerHookRoute;
|
|
6
14
|
/** Batch semantics are optional so sessions written before this field remain routable. */
|
|
7
15
|
readonly batch?: ProxyInputRequestBatch;
|
|
8
16
|
readonly childContinuationToken: string;
|
|
@@ -52,6 +60,8 @@ export declare function upsertProxyInputRequestState(input: {
|
|
|
52
60
|
* child subagent finishes so stale clicks no longer route to it.
|
|
53
61
|
*/
|
|
54
62
|
export declare function clearProxyInputRequestsForChild(session: HarnessSession, childContinuationToken: string): HarnessSession;
|
|
63
|
+
/** Removes every proxy route the predicate selects. */
|
|
64
|
+
export declare function clearProxyInputRequestsWhere(session: HarnessSession, select: (route: ProxyInputRequest) => boolean): HarnessSession;
|
|
55
65
|
/** Removes only the request IDs whose responses were successfully forwarded. */
|
|
56
66
|
export declare function retireProxyInputRequests<T extends {
|
|
57
67
|
readonly state?: SessionStateMap;
|
|
@@ -1 +1 @@
|
|
|
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
|
|
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){return clearProxyInputRequestsWhere(e,e=>e.childContinuationToken===t)}function clearProxyInputRequestsWhere(e,t){let n=readMap(e.state),r={},i=!1;for(let[e,a]of Object.entries(n)){if(t(a)){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){return clearProxyInputRequestsWhere(e,e=>e.taskId===t)}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=`answerHook`in e?parseAnswerHookRoute(e.answerHook):void 0;if(`answerHook`in e&&o===void 0)return;let s={childContinuationToken:e.childContinuationToken,kind:e.kind};return o!==void 0&&(s.answerHook=o),a!==void 0&&a.requestIds.includes(t)&&(s.batch=a),typeof r==`string`&&(s.childRequestId=r),typeof i==`string`&&(s.childResponseUrl=i),typeof n==`string`&&(s.taskId=n),s}function parseAnswerHookRoute(e){if(!(typeof e!=`object`||!e||!(`runId`in e)))return typeof e.runId==`string`&&e.runId.length>0?{runId:e.runId}:void 0}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,clearProxyInputRequestsWhere,createTaskInputRequestId,getProxyInputRequests,hasProxyInputRequests,retireProxyInputRequests,toProxyInputRequestEntries,upsertProxyInputRequestState,upsertProxyInputRequests};
|
|
@@ -64,6 +64,8 @@ export declare function resolvePendingRuntimeActions(input: {
|
|
|
64
64
|
readonly emit?: HarnessEmitFn;
|
|
65
65
|
readonly session: HarnessSession;
|
|
66
66
|
readonly stepInput?: StepInput;
|
|
67
|
+
/** Definitions whose `toModelOutput` projects a workflow tool's result for the model. */
|
|
68
|
+
readonly tools?: HarnessToolMap;
|
|
67
69
|
}): Promise<ResolvePendingRuntimeActionsResult>;
|
|
68
70
|
/**
|
|
69
71
|
* Projects one AI SDK tool call into the eve runtime-action contract.
|
|
@@ -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{getPendingDispatchActionKey}from"#runtime/actions/keys.js";import{accumulateSessionUsage,getTurnUsageState,setTurnUsageState}from"#harness/turn-tag-state.js";import{findRunningAgentHandle,isResultBoundToRunningHandle}from"#harness/handles/query.js";import{resolveRuntimeActionResultsForKeys}from"#runtime/actions/results.js";const PENDING_RUNTIME_ACTION_BATCH_KEY=`eve.runtime.pendingActionBatch`;function readSubagentResultOutcome(e){return e.origin===`child`?e.outcome:void 0}function getPendingRuntimeActionBatch(e){let t=e?.[PENDING_RUNTIME_ACTION_BATCH_KEY];if(typeof t!=`object`||!t)return;let n=t;if(!(!Array.isArray(n.actions)||!Array.isArray(n.responseMessages)||typeof n.event!=`object`||n.event===null))return n}function hasPendingRuntimeActionBatch(e){return getPendingRuntimeActionBatch(e)!==void 0}function clearPendingRuntimeActionBatch(e){if(e.state?.[PENDING_RUNTIME_ACTION_BATCH_KEY]===void 0)return e;let t={...e.state};return delete t[PENDING_RUNTIME_ACTION_BATCH_KEY],{...e,state:Object.keys(t).length>0?t:void 0}}function setPendingRuntimeActionBatch(e){assertUniqueRuntimeActionCallIds(e.actions);let t={...e.session.state};return t[PENDING_RUNTIME_ACTION_BATCH_KEY]={actions:[...e.actions],event:e.event,responseMessages:[...e.responseMessages]},{...e.session,state:t}}function assertUniqueRuntimeActionCallIds(e){let t=new Set;for(let n of e){if(t.has(n.callId))throw Error(`Runtime action batch contains duplicate callId "${n.callId}".`);t.add(n.callId)}}function resolveReadyRuntimeActionResults(e){let t=getPendingRuntimeActionBatch(e.session.state);if(t!==void 0)return resolveRuntimeActionResultsForBatch({batch:t,results:e.results,state:e.session.state})}function resolveRuntimeActionResultsForBatch(e){return resolveRuntimeActionResultsForKeys({pendingKeys:e.batch.actions.map(e=>getPendingDispatchActionKey(e)),results:e.results.filter(t=>isResultBoundToRunningHandle(e.state,t))})}async function resolvePendingRuntimeActions(t){let
|
|
1
|
+
import{createActionResultEvent}from"#protocol/message.js";import{parseJsonObject}from"#shared/json.js";import{settleAgentTurn}from"#harness/handles/transitions.js";import{findToolRun,removeToolRun}from"#harness/tool-runs.js";import{clearProxyInputRequestsForChild,clearProxyInputRequestsWhere}from"#harness/proxy-input-requests.js";import{getPendingDispatchActionKey}from"#runtime/actions/keys.js";import{accumulateSessionUsage,getTurnUsageState,setTurnUsageState}from"#harness/turn-tag-state.js";import{findRunningAgentHandle,isResultBoundToRunningHandle}from"#harness/handles/query.js";import{resolveRuntimeActionResultsForKeys}from"#runtime/actions/results.js";import{normalizeToolModelOutput}from"#harness/tool-model-output.js";const PENDING_RUNTIME_ACTION_BATCH_KEY=`eve.runtime.pendingActionBatch`;function readSubagentResultOutcome(e){return e.origin===`child`?e.outcome:void 0}function getPendingRuntimeActionBatch(e){let t=e?.[PENDING_RUNTIME_ACTION_BATCH_KEY];if(typeof t!=`object`||!t)return;let n=t;if(!(!Array.isArray(n.actions)||!Array.isArray(n.responseMessages)||typeof n.event!=`object`||n.event===null))return n}function hasPendingRuntimeActionBatch(e){return getPendingRuntimeActionBatch(e)!==void 0}function clearPendingRuntimeActionBatch(e){if(e.state?.[PENDING_RUNTIME_ACTION_BATCH_KEY]===void 0)return e;let t={...e.state};return delete t[PENDING_RUNTIME_ACTION_BATCH_KEY],{...e,state:Object.keys(t).length>0?t:void 0}}function setPendingRuntimeActionBatch(e){assertUniqueRuntimeActionCallIds(e.actions);let t={...e.session.state};return t[PENDING_RUNTIME_ACTION_BATCH_KEY]={actions:[...e.actions],event:e.event,responseMessages:[...e.responseMessages]},{...e.session,state:t}}function assertUniqueRuntimeActionCallIds(e){let t=new Set;for(let n of e){if(t.has(n.callId))throw Error(`Runtime action batch contains duplicate callId "${n.callId}".`);t.add(n.callId)}}function resolveReadyRuntimeActionResults(e){let t=getPendingRuntimeActionBatch(e.session.state);if(t!==void 0)return resolveRuntimeActionResultsForBatch({batch:t,results:e.results,state:e.session.state})}function resolveRuntimeActionResultsForBatch(e){return resolveRuntimeActionResultsForKeys({pendingKeys:e.batch.actions.map(e=>getPendingDispatchActionKey(e)),results:e.results.filter(t=>isResultBoundToRunningHandle(e.state,t))})}async function resolvePendingRuntimeActions(t){let a=getPendingRuntimeActionBatch(t.session.state);if(a===void 0)return{messages:[...t.session.history],outcome:`continue`,session:t.session};let o=resolveReadyRuntimeActionResults({results:t.stepInput?.runtimeActionResults??[],session:t.session});if(o===void 0)return{messages:[...t.session.history],outcome:`unresolved`,session:t.session};if(t.emit!==void 0)for(let n of o){if(n.kind===`subagent-result`&&n.isError!==!0){let e=readBackgroundTaskReceipt(n),r={callId:n.callId,output:typeof n.output==`string`?n.output:JSON.stringify(n.output),subagentName:n.subagentName};await t.emit({data:e===void 0?r:{...r,backgroundTask:e},type:`subagent.completed`})}await t.emit(createActionResultEvent({result:n,sequence:a.event.sequence,stepIndex:a.event.stepIndex,turnId:a.event.turnId}))}let s=t.session;for(let e of o){if(e.kind!==`subagent-result`||e.origin!==`child`||readBackgroundTaskReceipt(e)!==void 0)continue;let t=findRunningAgentHandle(s.state,{callId:e.callId});if(t===void 0)continue;let r=readSubagentResultOutcome(e);if(r===void 0)continue;r.kind===`terminal`&&`continuationToken`in t.address&&(s=clearProxyInputRequestsForChild(s,t.address.continuationToken));let i=settleAgentTurn(s,{operationId:t.operation.id,outcome:r});i.kind===`settled`&&(s=i.session)}for(let e of o){if(e.kind!==`tool-result`)continue;let t=findToolRun(s.state,e.callId);t!==void 0&&(s=removeToolRun(clearProxyInputRequestsWhere(s,e=>e.answerHook?.runId===t.runId),t.callId))}let c={...s.state};delete c[PENDING_RUNTIME_ACTION_BATCH_KEY],s={...s,state:Object.keys(c).length>0?c:void 0};for(let e of o){if(e.kind!==`subagent-result`)continue;let t=readSubagentResultOutcome(e);t!==void 0&&(s=setTurnUsageState(s,accumulateSessionUsage({previous:getTurnUsageState(s.state),usage:t.usageDelta})))}let l=[];for(let e of o){switch(e.kind){case`load-skill-result`:l.push({output:toToolResultOutput(e),toolCallId:e.callId,toolName:`load_skill`,type:`tool-result`});continue;case`subagent-result`:l.push({output:toToolResultOutput(e),toolCallId:e.callId,toolName:e.subagentName,type:`tool-result`});continue;case`tool-result`:l.push({output:await projectToolResultOutput(e,t.tools?.get(e.toolName)),toolCallId:e.callId,toolName:e.toolName,type:`tool-result`});continue}throw Error(`Unsupported runtime action result kind "${String(e)}".`)}let u=[...s.history,...a.responseMessages];return l.length>0&&u.push({content:l,role:`tool`}),{messages:u,outcome:`resolved`,session:s}}function readBackgroundTaskReceipt(e){return`backgroundTask`in e?e.backgroundTask:void 0}function createRuntimeActionRequestFromToolCall(e){let t=e.tools.get(e.toolCall.toolName),n=resolveToolCallInputObject(e.toolCall.input,{callId:e.toolCall.toolCallId,toolName:e.toolCall.toolName});if(t?.behavior?.presentation===`load-skill`)return{callId:e.toolCall.toolCallId,input:n,kind:`load-skill`};let r=t?.execution===`background`||t?.behavior?.handling?.kind!==`dispatch`?void 0:t.behavior.handling.target;return t!==void 0&&(r?.kind===`self-agent-call`||r?.kind===`subagent-call`)?{callId:e.toolCall.toolCallId,description:t.description,input:n,kind:`subagent-call`,name:t.name,nodeId:r.nodeId,subagentName:r.subagentName}:t!==void 0&&r?.kind===`remote-agent-call`?{callId:e.toolCall.toolCallId,description:t.description,input:n,kind:`remote-agent-call`,name:t.name,nodeId:r.nodeId,remoteAgentName:r.remoteAgentName}:{callId:e.toolCall.toolCallId,input:n,kind:`tool-call`,toolName:e.toolCall.toolName}}function createPendingDispatchActionFromToolCall(e){let t=e.tools.get(e.toolCall.toolName);if(t===void 0)throw Error(`Unknown tool "${e.toolCall.toolName}" in dispatch projection.`);let n=t.behavior?.handling;if(n?.kind!==`dispatch`||t.execution===`background`)throw Error(`Tool "${e.toolCall.toolName}" is not a durable dispatch tool.`);return{callId:e.toolCall.toolCallId,description:t.description,input:resolveToolCallInputObject(e.toolCall.input,{callId:e.toolCall.toolCallId,toolName:e.toolCall.toolName}),target:n.target,toolName:t.name}}function resolveToolCallInputObject(e,n){if(e==null||typeof e==`string`&&e.trim()===``)return{};try{return parseJsonObject(typeof e==`string`?parseJsonStringInput(e):e)}catch(e){let t=e instanceof Error?e.message:String(e);throw TypeError(`Failed to parse tool-call arguments for "${n.toolName}" (${n.callId}): ${t}`,{cause:e})}}function parseJsonStringInput(e){return JSON.parse(e)}async function projectToolResultOutput(e,t){return e.isError===!0||t?.toModelOutput===void 0?toToolResultOutput(e):normalizeToolModelOutput({output:await t.toModelOutput(e.output),toolCallId:e.callId,toolName:e.toolName})}function toToolResultOutput(e){return typeof e.output==`string`?e.isError===!0?{type:`error-text`,value:e.output}:{type:`text`,value:e.output}:e.isError===!0?{type:`error-json`,value:toMutableJsonValue(e.output)}:{type:`json`,value:toMutableJsonValue(e.output)}}function toMutableJsonValue(e){if(e===null||typeof e==`string`||typeof e==`number`||typeof e==`boolean`)return e;if(Array.isArray(e))return e.map(e=>toMutableJsonValue(e));let t={};for(let[n,r]of Object.entries(e))t[n]=toMutableJsonValue(r);return t}export{assertUniqueRuntimeActionCallIds,clearPendingRuntimeActionBatch,createPendingDispatchActionFromToolCall,createRuntimeActionRequestFromToolCall,getPendingRuntimeActionBatch,hasPendingRuntimeActionBatch,resolvePendingRuntimeActions,resolveToolCallInputObject,setPendingRuntimeActionBatch};
|
|
@@ -1 +1 @@
|
|
|
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";
|
|
1
|
+
import{createInputRequestedEvent}from"#protocol/message.js";import{emitFailedStep,emitTurnEpilogue,setHarnessEmissionState}from"#harness/emission.js";import{SessionLimitDeclinedError}from"#harness/turn-cancellation.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";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 i=createSessionLimitContinuationRequest({sessionId:t.session.sessionId,violation:t.violation}),a=t.emissionState,o=appendPendingInputBatch({event:{sequence:a.sequence,stepIndex:a.stepIndex,turnId:a.turnId},requests:[i],responseMessages:[],session:{...t.session,history:[...t.messages]}});return await t.emit(createInputRequestedEvent({requests:[i],sequence:a.sequence,stepIndex:a.stepIndex,turnId:a.turnId})),t.config.mode===`conversation`&&(a=await emitTurnEpilogue(t.emit,a,t.config.mode)),{next:null,session:setHarnessEmissionState(o,a)}}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{readClientContext}from"#internal/client-context.js";import{createErrorId,createLogger,formatError,logError}from"#internal/logging.js";import{contextStorage}from"#context/container.js";import{AuthKey,ParentSessionKey,ScheduleIdKey,SessionCallbackKey,TurnTaskDeliveryKey,TurnTaskStateKey}from"#context/keys.js";import{resolveInstalledPackageInfo}from"#internal/application/package.js";import{toErrorMessage}from"#shared/errors.js";import{createActionResultEvent,createApprovalCandidateEvent,createApprovalSettledEvent,createAuthorizationCompletedEvent,createAuthorizationRequiredEvent,createCompactionCompletedEvent,createCompactionRequestedEvent,createContextClearedEvent,createInputRequestedEvent,createInputResolvedEvent,createMessageCompletedEvent,createResultCompletedEvent,createSessionWaitingEvent,createStepStartedEvent}from"#protocol/message.js";import{summarizeKnownError}from"#harness/semantic-errors/index.js";import{resolveProviderHeaders}from"#internal/gateway.js";import{formatLanguageModelGatewayId}from"#internal/runtime-model.js";import{ChannelKey}from"#runtime/sessions/runtime-context-keys.js";import{buildDynamicTools,buildResponseAuthorizationTools}from"#context/build-dynamic-tools.js";import{drainMemoryCommit,prepareMemoryCompaction,prepareMemoryPreamble}from"#context/memory-lifecycle.js";import{canonicalizeMemoryRecords,clearMemorySessionState,shouldCanonicalizeMemory}from"#shared/memory-state.js";import{advanceStep,emitFailedStep,emitRecoverableFailedTurn,emitStepStarted,emitStreamContent,emitTurnEpilogue,emitTurnPreamble,getHarnessEmissionState,setHarnessEmissionState}from"#harness/emission.js";import{ToolLoopAgent,isStepCount}from"ai";import{resolveAgentsAnnouncement}from"#harness/handles/prompt.js";import{renderPendingApprovalsInstruction,renderPendingApprovalsSnippet}from"#harness/hitl/approval-prompt.js";import{getAgentHandleStore}from"#harness/handles/store.js";import{readTaskIdFromInboxToken}from"#tasks/task-inbox-token.js";import{buildDynamicSubagentTools}from"#context/dynamic-subagent-lifecycle.js";import{hydrateSandboxAttachments,stageAttachmentsToSandbox}from"#harness/attachment-staging.js";import{normalizeModelMessages,normalizeUserContent,resolveAssistantStepText}from"#harness/messages.js";import{createPendingDispatchActionFromToolCall,resolvePendingRuntimeActions,setPendingRuntimeActionBatch}from"#harness/runtime-actions.js";import{clearPendingWorkflowInterrupt,getPendingWorkflowInterrupt,setPendingWorkflowInterrupt}from"#harness/workflow-interrupt-state.js";import{getWorkflowRuntimeActionInterrupts,isWorkflowRuntimeActionInterrupt}from"#harness/workflow-runtime-action-state.js";import{activeTurnId}from"#harness/active-turn-id.js";import{createHistoryViewPreparer}from"#shared/history-view.js";import{getActiveDynamicModelSelection,isDynamicModelSelectionError}from"#context/dynamic-model-lifecycle.js";import{getSupersededAuthorizationChallenges,setPendingAuthorization}from"#harness/authorization.js";import{appendPendingInputBatch,consumeDeferredStepInput,getApprovedTools,getPendingInputRequestIds,hasDeferredStepInput,hasPendingApprovalBatch,hasStepInput,resolvePendingInput}from"#harness/input-requests.js";import{accumulateTurnUsage,getTurnUsageState,setTurnUsageState}from"#harness/turn-tag-state.js";import{
|
|
1
|
+
import{readClientContext}from"#internal/client-context.js";import{createErrorId,createLogger,formatError,logError}from"#internal/logging.js";import{contextStorage}from"#context/container.js";import{AuthKey,ParentSessionKey,ScheduleIdKey,SessionCallbackKey,TurnTaskDeliveryKey,TurnTaskStateKey}from"#context/keys.js";import{resolveInstalledPackageInfo}from"#internal/application/package.js";import{toErrorMessage}from"#shared/errors.js";import{createActionResultEvent,createApprovalCandidateEvent,createApprovalSettledEvent,createAuthorizationCompletedEvent,createAuthorizationRequiredEvent,createCompactionCompletedEvent,createCompactionRequestedEvent,createContextClearedEvent,createInputRequestedEvent,createInputResolvedEvent,createMessageCompletedEvent,createResultCompletedEvent,createSessionWaitingEvent,createStepStartedEvent}from"#protocol/message.js";import{summarizeKnownError}from"#harness/semantic-errors/index.js";import{resolveProviderHeaders}from"#internal/gateway.js";import{formatLanguageModelGatewayId}from"#internal/runtime-model.js";import{ChannelKey}from"#runtime/sessions/runtime-context-keys.js";import{buildDynamicTools,buildResponseAuthorizationTools}from"#context/build-dynamic-tools.js";import{drainMemoryCommit,prepareMemoryCompaction,prepareMemoryPreamble}from"#context/memory-lifecycle.js";import{canonicalizeMemoryRecords,clearMemorySessionState,shouldCanonicalizeMemory}from"#shared/memory-state.js";import{advanceStep,emitFailedStep,emitRecoverableFailedTurn,emitStepStarted,emitStreamContent,emitTurnEpilogue,emitTurnPreamble,getHarnessEmissionState,setHarnessEmissionState}from"#harness/emission.js";import{ToolLoopAgent,isStepCount}from"ai";import{resolveAgentsAnnouncement}from"#harness/handles/prompt.js";import{renderPendingApprovalsInstruction,renderPendingApprovalsSnippet}from"#harness/hitl/approval-prompt.js";import{getAgentHandleStore}from"#harness/handles/store.js";import{readTaskIdFromInboxToken}from"#tasks/task-inbox-token.js";import{buildDynamicSubagentTools}from"#context/dynamic-subagent-lifecycle.js";import{hydrateSandboxAttachments,stageAttachmentsToSandbox}from"#harness/attachment-staging.js";import{normalizeModelMessages,normalizeUserContent,resolveAssistantStepText}from"#harness/messages.js";import{createPendingDispatchActionFromToolCall,resolvePendingRuntimeActions,setPendingRuntimeActionBatch}from"#harness/runtime-actions.js";import{clearPendingWorkflowInterrupt,getPendingWorkflowInterrupt,setPendingWorkflowInterrupt}from"#harness/workflow-interrupt-state.js";import{getWorkflowRuntimeActionInterrupts,isWorkflowRuntimeActionInterrupt}from"#harness/workflow-runtime-action-state.js";import{activeTurnId}from"#harness/active-turn-id.js";import{createHistoryViewPreparer}from"#shared/history-view.js";import{throwIfTurnAborted}from"#harness/turn-cancellation.js";import{getActiveDynamicModelSelection,isDynamicModelSelectionError}from"#context/dynamic-model-lifecycle.js";import{getSupersededAuthorizationChallenges,setPendingAuthorization}from"#harness/authorization.js";import{appendPendingInputBatch,consumeDeferredStepInput,getApprovedTools,getPendingInputRequestIds,hasDeferredStepInput,hasPendingApprovalBatch,hasStepInput,resolvePendingInput}from"#harness/input-requests.js";import{accumulateTurnUsage,getTurnUsageState,setTurnUsageState}from"#harness/turn-tag-state.js";import{createBackgroundToolCallBatch}from"#harness/background-tools.js";import{createToolResultMessagePartFromToolError}from"#harness/action-result-helpers.js";import{buildDynamicInstructionMessages,drainDynamicInstructionUserMessages,prepareDynamicInstructionPreamble}from"#context/dynamic-instruction-lifecycle.js";import{PendingSkillAnnouncementKey}from"#context/dynamic-skill-lifecycle.js";import{getWorkflowContinuationSecurity,readWorkflowContinuationSecurity}from"#harness/workflow-continuation-security.js";import{buildWorkflowHostTools,resolveWorkflowSandboxBridgeRequestLimit}from"#harness/workflow-sandbox.js";import{getApprovalAuditState,markApprovalCandidateHistoryEventEmitted,markApprovalCandidatePendingEventEmitted,markApprovalSettlementEventEmitted}from"#harness/approval-candidates.js";import{getPendingInputBatches,queueDeferredStepInput}from"#harness/pending-input-batches.js";import{EMPTY_DELIVERY_SENTINEL,hasEmptyDeliverySentinel}from"#shared/empty-delivery.js";import{getInvalidToolCallInputError,isInvalidToolCall}from"#harness/tool-call-input-errors.js";import{EmptyModelResponseError,classifyModelCallError,extractModelCallErrorDetails,extractUnsupportedProviderToolTypes,extractUpstreamRejectionMessage,isNoOutputGeneratedError}from"#harness/model-call-error.js";import{resolveInlineAuthorizationInterrupt}from"#harness/inline-tool-authorization.js";import{extractQuestionInputRequests,extractToolApprovalInputRequests}from"#harness/input-extraction.js";import{applyLastToolCacheBreakpoint,applySystemCacheBreakpoint,detectPromptCachePath,getAnthropicCacheMarker}from"#harness/prompt-cache.js";import{mergeProviderSafetyIdentifier}from"#harness/provider-safety.js";import{requireSessionModelReference}from"#harness/types.js";import{emitWorkflowActionResults,emitWorkflowActionsRequested}from"#harness/workflow-lifecycle.js";import{compactMessages,getInputTokenCount,resolveCompactionModel,shouldCompact}from"#harness/compaction.js";import{createCurrentMessages}from"#harness/current-messages.js";import{applySessionLimitContinuation,enforceSessionTokenLimit}from"#harness/session-limit-enforcement.js";import{setEveAttributes}from"#runtime/attributes/emit.js";import{coordinateApprovalDelivery,shouldPrepareApprovalPolicyTools,shouldPrepareApprovalReplayTools}from"#harness/approval-delivery-coordinator.js";import{convertStaleResponsesToUserMessage,dropStaleSessionLimitContinuationResponses}from"#harness/stale-input-responses.js";import{normalizeProviderToolHistory}from"#harness/provider-tool-history.js";import{resolveDeliveryPolicy}from"#tasks/delivery-policy.js";import{extractWorkflowStreamWriteErrorDetails}from"#harness/workflow-stream-error.js";import{getAdvertisedTools}from"#harness/advertised-tools.js";import{resolveFrameworkToolFromUpstreamType}from"#harness/provider-tools.js";import{buildStepHooks,emitStepActions}from"#harness/step-hooks.js";import{buildToolApproval,buildToolSetFromDefinitions,buildToolSetWithProviderTools}from"#harness/tools.js";import{continueWorkflowSandboxInterrupt,getWorkflowSandboxInterrupt,unwrapWorkflowSandboxResult}from"#shared/workflow-sandbox.js";import{FINAL_OUTPUT_TOOL_NAME,buildFinalOutputTool}from"#harness/final-output.js";const environment=process.env.NODE_ENV??`unknown`,eveVersion=resolveInstalledPackageInfo().version,log=createLogger(`harness.tool-loop`);function logToolExecutionError(e){e.toolOutput.type===`tool-error`&&logError(log,`tool execution failed`,e.toolOutput.error,{toolName:e.toolCall.toolName,toolCallId:e.toolCall.toolCallId})}function mergeSystemInstructions(e){if(e.length===0)return;if(e.length===1)return{...e[0]};let t;for(let n of e)n.providerOptions!==void 0&&(t={...t,...n.providerOptions});let n={role:`system`,content:e.map(e=>e.content).join(`
|
|
2
2
|
|
|
3
|
-
`)};return t!==void 0&&(n.providerOptions=t),n}function buildGatewayAttributionHeaders(e,t){let n=resolveProviderHeaders(e);if(n===void 0)return;let r=t?.agentName??t?.agentId,i=process.env.VERCEL_PROJECT_PRODUCTION_URL||process.env.VERCEL_URL,a=i?`https://${i}`:void 0,o={...n};return r&&(o[`x-title`]=r),a&&(o[`http-referer`]=a),o}async function resolveActiveRuntimeModel(e){if(e.ctx===void 0){let t=e.session.agent.modelReference;if(t===void 0)throw Error(`Dynamic model selection is unavailable outside an eve runtime context.`);return{model:await e.config.resolveModel(t),session:e.session}}let t=getActiveDynamicModelSelection(e.ctx);if(t===null){let t=e.session.agent.modelReference;if(e.session.agent.dynamicModel===!0||t===void 0)throw Error(`Dynamic model selection is required before model-dependent work begins. Add a matching resolver handler that returns a concrete model.`);return{model:await e.config.resolveModel(t),session:e.session}}return{model:t.model===void 0?await e.config.resolveModel(t.reference):t.model,session:updateSessionModelReference(e.session,t.reference)}}function updateSessionModelReference(e,t){return{...e,agent:{...e.agent,modelReference:t},compaction:updateCompactionThresholdForModelReference({compaction:e.compaction,modelReference:t})}}function updateCompactionThresholdForModelReference(e){return e.modelReference.contextWindowTokens===void 0?e.compaction:{...e.compaction,threshold:Math.max(1,Math.floor(e.modelReference.contextWindowTokens*(e.compaction.thresholdPercent??.9)))}}function buildHarnessToolsWithDynamicSubagents(e,t){let n=new Map(e);if(t===void 0)return n;for(let e of buildDynamicSubagentTools(t)){if(n.has(e.name))throw Error(`Dynamic subagent "${e.name}" collides with another runtime-visible tool name.`);n.set(e.name,e)}return n}function hasDispatchTarget(e,t){return[...e.values()].some(e=>e.behavior?.handling?.kind===`dispatch`&&e.behavior.handling.target.kind===t)}function createToolLoopHarness(n){let r=n.handleEvent;async function runStep(e,t){return n.instrumentation?.runStep({environment,eveVersion,hasInput:hasStepInput(t),session:e},e=>executeStepBody(e.session,t,e))??executeStepBody(e,t)}async function executeStepBody(f,g,v){let y=f,te=createHistoryViewPreparer({previous:n.historyView,projector:n.historyProjector});te(y.history,y.state);let projectHistory=(e,t)=>te(e,t).messages,S=getHarnessEmissionState(y.state),w=contextStorage.getStore(),D=w?.get(ParentSessionKey),ce=w?.get(ChannelKey),le=w?.get(SessionCallbackKey),ue=D!==void 0||le!==void 0,k=(le?.taskId!==void 0||readTaskIdFromInboxToken(String(ce?.state?.parentContinuationToken??``))!==void 0)&&hasDispatchTarget(n.tools,`task-update`),de,A=v?.createHandleEvent({getAttemptScope:()=>de,handleEvent:r,turnId:activeTurnId(S)})??r,failModelSelection=async(e,r)=>{if(throwIfTurnAborted(n.abortSignal),v?.recordError(e),!A)throw e;let i=createErrorId(),a=toErrorMessage(e);return log.error(`model selection failed terminally`,{error:e,errorId:i,sessionId:y.sessionId,turnId:r.turnId}),await emitFailedStep(A,r,{code:`MODEL_SELECTION_FAILED`,details:{errorId:i},message:a,sessionId:y.sessionId}),{next:n.mode===`task`||ue?{done:!0,isError:!0,output:a}:{done:!0,output:``},session:y}},preparePreambleTrace=async()=>await v?.preparePreamble({sequence:S.sequence,sessionStarted:S.sessionStarted,traceContext:v?.traceContext,turnId:`turn_${S.sequence}`});if(n.clearOnly===!0)return y={...y,compaction:{recentWindowSize:y.compaction.recentWindowSize,threshold:y.compaction.threshold,thresholdPercent:y.compaction.thresholdPercent},history:[],state:clearMemorySessionState(y.state)},await A?.(createContextClearedEvent({sequence:S.sequence,sessionId:y.sessionId,turnId:activeTurnId(S)})),await A?.(createSessionWaitingEvent()),{next:null,session:y};if(n.compactOnly===!0){if(y.history.length>0)try{let e=contextStorage.getStore(),t=await resolveActiveRuntimeModel({config:n,ctx:e,session:y});y=t.session;let r=await maybeCompact({abortSignal:n.abortSignal,auth:e?.get(AuthKey)??null,emit:A,emissionState:{...S,turnId:activeTurnId(S)},force:!0,historyProjector:n.historyProjector,messages:[...y.history],model:t.model,onCompaction:n.onCompaction,resolveModel:n.resolveModel,runtimeIdentity:n.runtimeIdentity,session:y,telemetry:v?.telemetry()});y={...r.session,compaction:{recentWindowSize:r.session.compaction.recentWindowSize,threshold:r.session.compaction.threshold,thresholdPercent:r.session.compaction.thresholdPercent},history:r.messages}}catch(e){logError(log,`manual session compaction failed`,e,{sessionId:y.sessionId})}return await A?.(createSessionWaitingEvent()),{next:null,session:y}}let j=consumeDeferredStepInput({input:g,preferCurrentInput:n.mode!==`conversation`&&g!==void 0&&hasPendingApprovalBatch(y),session:y});y=j.session;let M=await resolvePendingRuntimeActions({emit:A,session:y,stepInput:j.input});if(M.outcome===`unresolved`)return{next:null,session:M.session};y=M.session;let fe=getPendingInputRequestIds(y.state),pe=convertStaleResponsesToUserMessage({history:M.messages,pendingRequestIds:fe,stepInput:dropStaleSessionLimitContinuationResponses({pendingRequestIds:fe,stepInput:j.input}),tools:n.tools}),N=pe.stepInput,me=pe.kind===`converted`?{...N,message:pe.displayMessage}:N,P=contextStorage.getStore();shouldPrepareApprovalReplayTools({session:y,stepInput:N})&&P!==void 0&&n.prepareStepDynamicTools!==void 0&&await n.prepareStepDynamicTools({ctx:P,event:createStepStartedEvent({modelId:y.agent.modelReference?.id??`dynamic`,sequence:S.sequence,stepIndex:S.stepIndex,turnId:S.turnId}),messages:projectHistory(M.messages,y.state)});let he=shouldPrepareApprovalPolicyTools({session:y,stepInput:N})?buildResponseAuthorizationTools({authoredTools:n.tools,context:P}):n.tools,F=await coordinateApprovalDelivery({session:y,stepInput:N,tools:he});if(y=F.session,A){for(let e of F.feedback)await A(createMessageCompletedEvent({message:e,sequence:S.sequence,stepIndex:S.stepIndex,turnId:S.turnId}));let e=getApprovalAuditState(y.state);for(let t of e.activeCandidates.filter(e=>e.pendingEventEmitted!==!0))await A(createApprovalCandidateEvent({candidateId:t.candidateId,outcome:`pending`,requestId:t.requestId,responderPrincipalId:t.responder.principalId,sequence:S.sequence,stepIndex:S.stepIndex,turnId:S.turnId})),y={...y,state:markApprovalCandidatePendingEventEmitted({candidateId:t.candidateId,state:y.state})};for(let t of e.candidateHistory.filter(e=>e.eventEmitted!==!0&&e.status!==`allowed`))await A(createApprovalCandidateEvent({candidateId:t.candidateId,outcome:t.status,requestId:t.requestId,responderPrincipalId:t.responder.principalId,reason:t.reason,sequence:S.sequence,stepIndex:S.stepIndex,turnId:S.turnId})),y={...y,state:markApprovalCandidateHistoryEventEmitted({candidateId:t.candidateId,state:y.state})};for(let t of e.settlements.filter(e=>e.eventEmitted!==!0))await A(createApprovalSettledEvent({outcome:t.outcome===`allowed`?`approved`:`cancelled`,requestId:t.requestId,responderPrincipalId:t.actor.principalId,sequence:S.sequence,stepIndex:S.stepIndex,turnId:S.turnId})),y={...y,state:markApprovalSettlementEventEmitted({requestId:t.requestId,state:y.state})}}if(F.kind===`park`)return{next:null,session:y};if(F.kind===`continue-coordination`)return{next:runStep,session:F.stepInput===void 0?y:queueDeferredStepInput(y,F.stepInput)};if(F.challenges.length>0){if(A)for(let e of F.challenges)await A(createAuthorizationRequiredEvent({authorization:e.challenge,candidateId:e.candidateId,description:e.challenge.instructions??`Authorization required for ${e.name}`,name:e.name,sequence:S.sequence,stepIndex:S.stepIndex,turnId:S.turnId,webhookUrl:e.hookUrl}));let e=F.stepInput===void 0?y:queueDeferredStepInput(y,F.stepInput);return{next:null,session:{...e,state:setPendingAuthorization(e.state,{challenges:F.challenges})}}}let I=resolvePendingInput({deferMessagesWhileApprovalsPending:n.mode!==`conversation`,history:M.messages,resolveApprovalKey:resolveApprovalKeyFromTools(n.tools),session:y,stepInput:F.stepInput});if(I.outcome===`unresolved`){let e=M.outcome===`resolved`?{...I.session,history:[...M.messages]}:I.session;if(A&&n.mode===`conversation`&&I.deferredMessage===!0&&hasStepInput(g)){w!==void 0&&prepareDynamicInstructionPreamble(w,projectHistory(e.history,e.state));let t=[];try{let e=await preparePreambleTrace();S=await emitTurnPreamble(A,me??{},S,n.runtimeIdentity,e)}catch(n){if(t=w===void 0?[]:drainDynamicInstructionUserMessages(w),e={...e,history:[...e.history,...t]},y=e,!isDynamicModelSelectionError(n))throw n;return failModelSelection(n,{sessionStarted:!0,sequence:S.sequence,stepIndex:0,turnId:`turn_${S.sequence}`})}return t=w===void 0?[]:drainDynamicInstructionUserMessages(w),e={...e,history:[...e.history,...t]},S=await emitTurnEpilogue(A,S,n.mode),{next:null,session:setHarnessEmissionState(e,S)}}return M.outcome===`resolved`?(A&&n.mode===`conversation`&&(S=await emitTurnEpilogue(A,S,n.mode),e=setHarnessEmissionState(e,S)),{next:null,session:e}):{next:null,session:I.session}}if(I.resolvedInputs!==void 0)for(let e of I.resolvedInputs)await v?.publishInputResolutions({batch:e,sessionId:y.sessionId}),A&&await A(createInputResolvedEvent({resolutions:e.inputs.map(e=>{let t={kind:e.request.kind,outcome:e.outcome,requestId:e.request.requestId};return e.response===void 0?t:{...t,response:e.response}}),sequence:e.event.sequence,stepIndex:e.event.stepIndex,turnId:e.event.turnId}));if(A&&I.rejectedActions)for(let e of I.rejectedActions)for(let t of e.results)await A(createActionResultEvent({rejected:!0,result:t,sequence:e.event.sequence,stepIndex:e.event.stepIndex,turnId:e.event.turnId}));let ge=readClientContext(N),L=ge===void 0||I.deferredContext===!0?[]:ge.map(e=>({content:e,role:`user`})),R=[];if(N?.context!==void 0&&I.deferredContext!==!0)for(let e of N.context)R.push({content:e,role:`user`});let _e=normalizeUserContent(N?.message),ve=_e!==void 0&&!I.deferredMessage&&!I.consumedMessage?await stageAttachmentsToSandbox(_e):void 0;ve!==void 0&&R.push({content:ve,role:`user`});let z=[],B;if(A&&hasStepInput(g)){w!==void 0&&(prepareDynamicInstructionPreamble(w,projectHistory(I.session.history,I.session.state)),prepareMemoryPreamble(w,{history:I.messages,input:[...L,...R],state:I.session.state}));try{let e=await preparePreambleTrace();S=await emitTurnPreamble(A,me??{},S,n.runtimeIdentity,e)}catch(e){if(z=w===void 0?[]:drainDynamicInstructionUserMessages(w),B=w===void 0?void 0:drainMemoryCommit(w),y={...I.session,history:[...B?.history??I.session.history,...z],state:B?.state??I.session.state},!isDynamicModelSelectionError(e))throw e;return failModelSelection(e,{sessionStarted:!0,sequence:S.sequence,stepIndex:0,turnId:`turn_${S.sequence}`})}z=w===void 0?[]:drainDynamicInstructionUserMessages(w),B=w===void 0?void 0:drainMemoryCommit(w),v?.setTurnId(S.turnId)}let ye=B?.history??I.session.history,be=I.session.history.length;y=setHarnessEmissionState({...I.session,history:[...ye,...z],state:B?.state??I.session.state},S);let V=[...B?.history??I.messages.slice(0,be),...z,...B===void 0?I.messages.slice(be):[]],H=await applySessionLimitContinuation({config:n,emit:A,emissionState:S,limitContinuation:I.limitContinuation,session:y});if(H.result!==null)return H.result;y=H.session;let U=getAgentHandleStore(y.state);if(U!==void 0&&!hasUnansweredToolCall(V)&&U.handles.some(e=>e.phase===`addressed`)!==!0){let e=resolveAgentsAnnouncement({messages:projectHistory(V,y.state),store:U});e!==void 0&&V.push({content:e,role:`user`})}V=[...V,...R];let createModelMessages=e=>{if(L.length===0)return[...e];let t=Math.max(0,e.length-R.length);return[...e.slice(0,t),...L,...e.slice(t)]},W=projectHistory(createModelMessages(V),y.state),G=w,K;try{G!==void 0&&n.dispatchDynamicModelEvent!==void 0&&await n.dispatchDynamicModelEvent({ctx:G,event:{data:{sequence:S.sequence,stepIndex:S.stepIndex,turnId:S.turnId},type:`step.started`},messages:W}),K=await resolveActiveRuntimeModel({config:n,ctx:G,session:y})}catch(e){return failModelSelection(e,S)}y=K.session;let q=K.model,xe=detectPromptCachePath(q),J=xe.kind===`anthropic-direct`?getAnthropicCacheMarker():void 0,Se=buildGatewayAttributionHeaders(q,n.runtimeIdentity),Y=await maybeCompact({abortSignal:n.abortSignal,auth:G?.get(AuthKey)??null,emit:A,emissionState:S,historyProjector:n.historyProjector,messages:[...V],model:q,onCompaction:n.onCompaction,promptMessages:createModelMessages(V),resolveModel:n.resolveModel,runtimeIdentity:n.runtimeIdentity,session:y,telemetry:v?.telemetry()});y=Y.session,Y.compacted&&(V=Y.messages),W=normalizeModelMessages(projectHistory(createModelMessages(V),y.state)),A&&await emitStepStarted(A,S,requireSessionModelReference(y).id,W);let Ce=getApprovedTools(y),we=S.sequence===0,X=resolveDeliveryPolicy({hasScheduleProvenance:we&&G?.get(ScheduleIdKey)!==void 0,hasOutputSchema:y.outputSchema!==void 0,isChild:G?.get(ParentSessionKey)!==void 0,isFirstTurn:we,taskDeliveryPhase:G?.get(TurnTaskDeliveryKey)}),Z=createCurrentMessages(W,{currentTurnMessages:R});if(G!==void 0){Z.addSystem(buildDynamicInstructionMessages(G));let e=G.get(PendingSkillAnnouncementKey);e!==void 0&&e.length>0&&Z.add(S.sequence,e);let t=G.get(TurnTaskStateKey);t!==void 0&&Z.add(S.sequence,t)}X.instruction!==void 0&&Z.add(S.sequence,X.instruction);let Te=renderPendingApprovalsInstruction(getPendingInputBatches(y.state).flatMap(e=>e.requests));Te!==void 0&&Z.add(S.sequence,Te,{cacheFriendly:!1});let Ee=await hydrateSandboxAttachments(Z.nonSystemMessages),prepareModelCallInput=e=>{let t=e?[{role:`system`,content:e}]:[],n=y.agent.system?[{role:`system`,content:y.agent.system}]:[],r=Z.systemMessages.length>0||t.length>0?[...t,...n,...Z.systemMessages]:void 0,i=r!==void 0&&J?applySystemCacheBreakpoint(r,J):r,a=i===void 0?y.agent.system??void 0:mergeSystemInstructions(i);return{instructions:a,telemetryRuntimeContext:v?.resolveRuntimeContext({eveVersion,emissionState:S,environment,modelInput:{instructions:a,messages:Ee},session:y})}},De=n.tools,runSingleModelCall=async e=>{let{instructions:t,telemetryRuntimeContext:r={}}=e.preparedInput??prepareModelCallInput(e.extraSystemNote);e.retryReason&&(r[`eve.retry.reason`]=e.retryReason);let a=e.trailingUserNote?[...Ee,{role:`user`,content:e.trailingUserNote}]:[...Ee],s=buildHarnessToolsWithDynamicSubagents(n.tools,G),c=createBackgroundToolCallBatch(),l=getAdvertisedTools({canRequestInput:n.capabilities?.requestInput===!0,delegatedCaller:k,session:y,tools:s}),u=new Map(l),d=await buildToolSetWithProviderTools({approvedTools:Ce,backgroundBatch:c,capabilities:n.capabilities,disabledProviderTools:e.disabledProviderTools,modelReference:requireSessionModelReference(y),tools:l});if(G!==void 0){let t=getAdvertisedTools({canRequestInput:n.capabilities?.requestInput===!0,delegatedCaller:k,session:y,tools:buildDynamicTools(G)}),r=buildToolSetFromDefinitions({approvedTools:Ce,backgroundBatch:c,capabilities:n.capabilities,disabledProviderTools:e.disabledProviderTools,tools:t}),i=new Map;for(let e of t)i.has(e.name)||i.set(e.name,e);for(let[e,t]of Object.entries(r)){if(l.get(e)?.behavior?.handling?.kind===`dispatch`)throw Error(`Dynamic tool "${e}" collides with a runtime-visible subagent.`);let n=i.get(e);if(n===void 0)throw Error(`Dynamic tool "${e}" has no effective harness definition.`);u.set(e,n),d[e]=t}}y.outputSchema!==void 0&&(d[FINAL_OUTPUT_TOOL_NAME]=buildFinalOutputTool(y.outputSchema));let f=n.workflow===!0?{maxSubagents:n.workflowMaxSubagents}:void 0,p=await getAdvertisedTools({canRequestInput:n.capabilities?.requestInput===!0,delegatedCaller:k,modelTools:d,session:y,tools:u,workflow:f});y=p.session,De=p.harnessTools;let m=p.modelTools,h=J?applyLastToolCacheBreakpoint(m,J):m,ee=activeTurnId(S),g=v?.prepareAttempt({attemptIndex:e.attemptIndex,runtimeContext:r,stepIndex:S.stepIndex,turnId:ee});de=g?.scope;let _=buildStepHooks({auth:G?.get(AuthKey)??null,cachePath:xe,emit:A,emissionState:S,emitStepStarted:e.suppressStepStartedEmission!==!0,marker:J,session:y}),b=new ToolLoopAgent({headers:Se,instructions:t,model:q,onLanguageModelCallEnd(e){for(let t of e.content)t.type!==`tool-call`||t.providerExecuted===!0||isInvalidToolCall(t)||c.register({callId:t.toolCallId,input:t.input,toolName:t.toolName})},onToolExecutionEnd:logToolExecutionError,onError(e){summarizeKnownError(e.error)?.tags.includes(`config`)!==!0&&logError(log,`tool-loop stream error`,e.error)},onStepFinish:_.onStepFinish,prepareStep:_.prepareStep,reasoning:y.agent.reasoning,runtimeContext:r,stopWhen:isStepCount(1),telemetry:g?.telemetry,toolApproval:buildToolApproval(m),tools:h}),executeModelCall=async()=>{if(A){let e=[...n.tools].filter(([e,t])=>t.behavior?.handling?.kind===`dispatch`&&u.get(e)===void 0).map(([e])=>e),t=[...u.values()].filter(e=>e.behavior?.handling?.kind===`request-input`).map(e=>e.name),r=new Set([FINAL_OUTPUT_TOOL_NAME,...e,...t]),i=await b.stream({abortSignal:n.abortSignal,messages:a}),{emittedActionCallIds:o,handledInlineToolResultCallIds:s,invalidInputToolCallIds:c,inlineAuthorizationResults:l,trailingInlineToolResultParts:d}=await emitStreamContent(A,S,i.fullStream,{excludedActionToolNames:r,tools:u});throwIfTurnAborted(n.abortSignal);let[f,p]=await Promise.all([_.stepResult,i.responseMessages]);if(isEmptyModelResponse(f)&&extractToolResultCallIds(p).size===0&&l.length===0&&d.length===0)throw new EmptyModelResponseError;await emitStepActions(A,S,f,{emittedActionCallIds:o,excludedActionCallIds:c,excludedActionToolNames:r,handledInlineToolResultCallIds:s,tools:u});let m=f.toolResults,h=new Map(m.map(e=>[e.toolCallId,e]));for(let e of l)h.set(e.toolCallId,e);return withAccumulatedResponseMessages({invalidInputToolCallIds:c,responseMessages:appendMissingToolResultMessages({append:d,responseMessages:p}),stepResult:f,toolResults:[...h.values()]})}let e=await b.generate({abortSignal:n.abortSignal,messages:a});throwIfTurnAborted(n.abortSignal);let t=await _.stepResult;if(isEmptyModelResponse(t)&&extractToolResultCallIds(e.responseMessages).size===0)throw new EmptyModelResponseError;return withAccumulatedResponseMessages({responseMessages:e.responseMessages,stepResult:t})};try{let e=await executeModelCall();return await g?.complete(),e}catch(e){return await g?.fail(e),rethrowNoOutputAsEmptyResponse(e)}},Oe=0,runOneModelCall=async e=>runModelCallWithRetries(t=>runSingleModelCall({...e,attemptIndex:Oe++,preparedInput:t===1?e.preparedInput:void 0,suppressStepStartedEmission:t!==1||e.suppressStepStartedEmission}),{sessionId:y.sessionId,turnId:S.turnId},n.abortSignal),ke=prepareModelCallInput(),Ae=await continuePendingWorkflowInterrupt({childResults:N?.runtimeActionResults,config:n,emit:A,emissionState:S,runStep,session:y,tools:buildHarnessToolsWithDynamicSubagents(n.tools,G)});if(Ae!==null)return Ae;let je=await enforceSessionTokenLimit({config:n,emit:A,emissionState:S,messages:W,session:y});if(je!==null)return je;let Q;try{Q=await runOneModelCall({preparedInput:ke,suppressStepStartedEmission:!0})}catch(e){throwIfTurnAborted(n.abortSignal);let r=await runModelCallRecoveryPipeline({error:e,stages:[e=>attemptUnsupportedProviderToolRecovery({error:e.error,runOneModelCall,sessionId:y.sessionId,turnId:S.turnId}),e=>attemptEmptyResponseRecovery({emptyDeliveryEnabled:X.allowsEmptyDelivery,error:e.error,retryCallOptions:e.retryCallOptions,runOneModelCall,sessionId:y.sessionId,turnId:S.turnId})]});if(throwIfTurnAborted(n.abortSignal),r.outcome===`recovered`)Q=r.result;else{let e=r.error;if(v?.recordError(e),!A)throw e;let i=extractWorkflowStreamWriteErrorDetails(e);if(i!==null){let n=createErrorId();return log.error(`workflow stream write failed — parking session for retry by the user`,{...i,errorId:n,error:e,sessionId:y.sessionId,turnId:S.turnId}),S=await emitRecoverableFailedTurn(A,S,{code:`WORKFLOW_STREAM_WRITE_FAILED`,continuationToken:y.continuationToken,details:{...i,errorId:n},message:toErrorMessage(e)}),{next:null,session:setHarnessEmissionState(y,S)}}let a=classifyModelCallError(e),o=createErrorId(),s=summarizeKnownError(e),c=s===null?extractUpstreamRejectionMessage(e):null,l=s?.message??c?.message??toErrorMessage(e),u=s?.hint===void 0?l:`${l} ${s.hint}`,d=extractModelCallErrorDetails(e),f=buildModelCallFailureDetails({catalogSummary:s,error:e,errorId:o,modelCallDetails:d,upstreamRejection:c}),m=buildModelCallFailureLogFields({error:e,errorId:o,modelCallDetails:d,recognized:s!==null||c!==null,sessionId:y.sessionId,turnId:S.turnId});if(a===`terminal`)return s===null?log.error(c?.message??`model call failed terminally`,m):log.error(`${s.name}: ${s.message}`,{errorId:o,hint:s.hint,sessionId:y.sessionId,turnId:S.turnId}),await emitFailedStep(A,S,{code:`MODEL_CALL_FAILED`,details:f,message:l,sessionId:y.sessionId}),{next:n.mode===`task`||ue?{done:!0,isError:!0,output:u}:{done:!0,output:``},session:y};if(n.mode===`task`){if(a===`recoverable`&&!(e instanceof EmptyModelResponseError))throw log.warn(c?.message??`model call failed recoverably in task mode — rethrowing for durable step retry`,m),e;return log.error(c?.message??`model call failed; failing the task run`,m),await emitFailedStep(A,S,{code:`MODEL_CALL_FAILED`,details:f,message:l,sessionId:y.sessionId}),{next:{done:!0,isError:!0,output:u},session:y}}log.error(c?.message??`model call failed — parking session for retry by the user`,m),S=await emitRecoverableFailedTurn(A,S,{code:`MODEL_CALL_FAILED`,continuationToken:y.continuationToken,details:f,message:l});let h={isError:!0,output:u};return y={...y,outputSchema:void 0},{next:null,session:setHarnessEmissionState(y,S),settledTurn:h}}}let $=accumulateTurnUsage({previous:getTurnUsageState(y.state),turnId:S.turnId,usage:extractTokenUsageDelta({costUsd:extractGatewayCostUsd(Q.providerMetadata),usage:Q.usage})});y=setTurnUsageState(y,$);let Me;try{Me=formatLanguageModelGatewayId(q)}catch{Me=void 0}let Ne=setEveAttributes({"$eve.model":Me,"$eve.input_tokens":$.inputTokens,"$eve.output_tokens":$.outputTokens,"$eve.cache_read_tokens":$.cacheReadTokens,"$eve.cache_write_tokens":$.cacheWriteTokens,"$eve.cost_usd":$.sawCost?$.costUsd:void 0,"$eve.tool_count":n.tools.size}).catch(e=>{logError(log,`Workflow attribute write failed unexpectedly`,e,{sessionId:y.sessionId,turnId:S.turnId})}),Pe;try{Pe=await handleStepResult({config:n,emit:A,emissionState:S,delegatedCaller:k,durableModelPromptMessageCount:L.length===0?W.length:void 0,promptMessages:V,result:Q,runStep,session:y,runtimeActionTools:De})}finally{await Ne}return Pe}return runStep}function extractTokenUsageDelta(e){let t=e.usage;if(!(t===void 0&&e.costUsd===void 0))return{cacheReadTokens:t?.inputTokenDetails?.cacheReadTokens,cacheWriteTokens:t?.inputTokenDetails?.cacheWriteTokens,costUsd:e.costUsd,inputTokens:t?.inputTokens,outputTokens:t?.outputTokens}}function extractGatewayCostUsd(e){let t=readGatewayMetadata(e)?.cost;if(typeof t==`number`&&Number.isFinite(t))return t;if(typeof t==`string`){let e=Number(t);return Number.isFinite(e)?e:void 0}}function readGatewayMetadata(e){let t=e?.gateway;return t&&typeof t==`object`&&!Array.isArray(t)?t:void 0}function buildModelCallFailureDetails(e){let{catalogSummary:t,error:n,errorId:i,modelCallDetails:a,upstreamRejection:o}=e;if(t!==null){let e={errorId:i,message:t.message,name:t.name,semanticErrorId:t.id,...a};return t.hint!==void 0&&(e.hint=t.hint),e}return o===null?{...formatError(n,i),...a}:{errorId:i,message:toErrorMessage(n),name:o.name,...a}}function buildModelCallFailureLogFields(e){let t={errorId:e.errorId,sessionId:e.sessionId,turnId:e.turnId};return e.recognized?{...t,details:e.modelCallDetails}:{...t,error:e.error}}async function runModelCallRecoveryPipeline(e){let t=e.error,n;for(let r of e.stages){let e=await r({error:t,retryCallOptions:n});if(e.outcome===`recovered`)return e;e.outcome===`failed`&&(t=e.error,n=e.retryCallOptions)}return{outcome:`failed`,error:t}}function withAccumulatedResponseMessages(e){let{stepResult:t}=e;return{content:t.content,finishReason:t.finishReason,...e.invalidInputToolCallIds===void 0?{}:{invalidInputToolCallIds:e.invalidInputToolCallIds},providerMetadata:t.providerMetadata,response:{...t.response,messages:[...e.responseMessages]},text:t.text,toolCalls:t.toolCalls,toolResults:e.toolResults===void 0?t.toolResults:[...e.toolResults],usage:t.usage}}function appendMissingToolResultMessages(e){let t=extractToolResultCallIds(e.responseMessages),n=e.append.filter(e=>!t.has(e.toolCallId));return[...e.responseMessages,...n.length>0?[{role:`tool`,content:[...n]}]:[]]}function getInvalidToolCallInputErrors(e){let t=[];for(let n of e.toolCalls){if(n.toolName===FINAL_OUTPUT_TOOL_NAME)continue;let e=getInvalidToolCallInputError({toolCall:n});e!==void 0&&t.push(e)}return t}function extractToolResultCallIds(e){let t=new Set;for(let n of e)if(Array.isArray(n.content))for(let e of n.content)typeof e==`object`&&e&&e.type===`tool-result`&&t.add(e.toolCallId);return t}function hasUnansweredToolCall(e){let t=new Set,n=new Set;for(let r of e)if(Array.isArray(r.content))for(let e of r.content)typeof e!=`object`||!e||(e.type===`tool-call`&&t.add(e.toolCallId),e.type===`tool-result`&&n.add(e.toolCallId));for(let e of t)if(!n.has(e))return!0;return!1}async function attemptUnsupportedProviderToolRecovery(e){let t=extractUnsupportedProviderToolTypes(e.error);if(t.length===0)return{outcome:`skipped`};let n=[];for(let e of t){let t=resolveFrameworkToolFromUpstreamType(e);t!==null&&!n.includes(t)&&n.push(t)}if(n.length===0)return{outcome:`skipped`};log.warn(`disabling unsupported provider tool(s); retrying step once`,{disabled:n,sessionId:e.sessionId,turnId:e.turnId,upstreamTypes:t});let r={disabledProviderTools:new Set(n),extraSystemNote:buildDisabledToolNote(n)};try{return{outcome:`recovered`,result:await e.runOneModelCall({...r,suppressStepStartedEmission:!0})}}catch(e){return{outcome:`failed`,error:e,retryCallOptions:r}}}function buildDisabledToolNote(e){let t=e.join(`, `);return`The following ${e.length===1?`tool is`:`tools are`} not available with the current model and has been removed: ${t}. Proceed using the remaining tools or your training knowledge.`}function isEmptyModelResponse(e){return e.toolCalls.length===0&&e.toolResults.length===0&&resolveAssistantStepText(e.response.messages,e.text)===null}function rethrowNoOutputAsEmptyResponse(e){throw isNoOutputGeneratedError(e)?new EmptyModelResponseError({cause:e}):e}const EMPTY_RESPONSE_NUDGE=`Your previous reply was empty and was not delivered. Answer now from the tool results above; do not re-run tools or mention this notice.`;function buildEmptyResponseNudge(e){return e?`${EMPTY_RESPONSE_NUDGE} If the current task explicitly requires conditional delivery and there is nothing to report, reply with exactly ${EMPTY_DELIVERY_SENTINEL}.`:EMPTY_RESPONSE_NUDGE}async function attemptEmptyResponseRecovery(e){if(!(e.error instanceof EmptyModelResponseError))return{outcome:`skipped`};log.warn(`empty model response; reissuing the model call once`,{sessionId:e.sessionId,turnId:e.turnId});try{return{outcome:`recovered`,result:await e.runOneModelCall({...e.retryCallOptions,retryReason:`empty-response`,suppressStepStartedEmission:!0,trailingUserNote:buildEmptyResponseNudge(e.emptyDeliveryEnabled)})}}catch(t){return{outcome:`failed`,error:t,retryCallOptions:e.retryCallOptions}}}async function handleStepResult(e){let{config:t,emit:n,promptMessages:r,result:i,runStep:o}=e,{emissionState:s,session:c}=e,l=resolveAssistantStepText(i.response.messages,i.text),u=i.finishReason!==`tool-calls`&&i.toolCalls.length===0&&hasEmptyDeliverySentinel(l),d=getInvalidToolCallInputErrors({toolCalls:i.toolCalls}),f=new Set([...i.invalidInputToolCallIds??[],...i.toolCalls.filter(isInvalidToolCall).map(e=>e.toolCallId),...d.map(e=>e.toolCallId)]),p=u?[]:appendMissingToolResultMessages({append:d.map(e=>createToolResultMessagePartFromToolError(e)),responseMessages:i.response.messages}),m=u?null:l,h=new Set;for(let e of[...i.content??[],...i.toolResults??[]])(e.type===`tool-result`||e.type===`tool-error`)&&e.providerExecuted===!0&&h.add(e.toolCallId);let ee=normalizeProviderToolHistory({messages:p,providerExecutedOutcomeIds:h}),v=ee.messages,y={...c,compaction:createNextCompactionConfig(c.compaction,e.durableModelPromptMessageCount,i)},b=t.workflow===!0?readWorkflowContinuationSecurity(y):void 0;if(b!==void 0){let t=await getWorkflowSandboxInterrupt(i,b);if(t!==void 0){if(!isWorkflowRuntimeActionInterrupt(t))throw Error(`Unsupported Workflow interrupt kind "${t.payload.kind}".`);return await parkOnWorkflowInterrupt({baseSession:y,emit:n,emissionState:s,interrupt:t,promptMessages:r,responseMessages:v,tools:e.runtimeActionTools,usedCalls:0})}}let x=extractToolApprovalInputRequests({content:i.content??[],excludedCallIds:f}),ne=new Set(x.map(e=>e.action.callId)),S=extractQuestionInputRequests({toolCalls:i.toolCalls,tools:e.runtimeActionTools,excludedCallIds:new Set([...f,...ne])}),C=[...x,...S],re=renderPendingApprovalsSnippet(x),ie=v.findIndex(e=>e.role!==`tool`),w=ie===-1?v:v.slice(0,ie),ae=v.slice(w.length),oe=[...r,...w,...re===void 0?[]:[{content:re,role:`user`}]],T=getAdvertisedTools({canRequestInput:e.config.capabilities?.requestInput===!0,delegatedCaller:e.delegatedCaller,session:y,tools:e.runtimeActionTools}),E=(i.toolCalls??[]).filter(e=>!f.has(e.toolCallId)).filter(t=>e.runtimeActionTools.get(t.toolName)?.behavior?.handling?.kind===`dispatch`&&e.runtimeActionTools.get(t.toolName)?.execution!==`background`).filter(e=>T.get(e.toolName)?.behavior?.handling?.kind===`dispatch`&&T.get(e.toolName)?.execution!==`background`?!0:(log.warn(`runtime action tool call blocked because tool is not advertised`,{callId:e.toolCallId,sessionId:y.sessionId,toolName:e.toolName}),!1)).map(e=>createPendingDispatchActionFromToolCall({toolCall:e,tools:T}));if(E.length>0){if(C.length===0)return{next:null,session:setHarnessEmissionState(setPendingRuntimeActionBatch({actions:E,event:{sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId},responseMessages:v,session:{...y,history:[...r]}}),advanceStep(s))};let e=setPendingRuntimeActionBatch({actions:E,event:{sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId},responseMessages:ae,session:{...y,history:oe}});return e=appendPendingInputBatch({event:{sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId},requests:C,responseMessages:[],session:e}),n&&await n(createInputRequestedEvent({requests:C,sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId})),{next:null,session:setHarnessEmissionState(e,advanceStep(s))}}if(C.length>0){let e=buildResponseAuthorizationTools({authoredTools:t.tools,context:contextStorage.getStore()}),r=appendPendingInputBatch({event:{sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId},requests:C,responseAuthRequiredRequestIds:x.filter(t=>{let n=e.get(t.action.toolName)?.approval;return n!==void 0&&typeof n!=`function`&&n.response!==void 0}).map(e=>e.requestId),responseMessages:ae,session:{...y,history:oe}});return n&&(await n(createInputRequestedEvent({requests:C,sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId})),t.mode===`conversation`&&(s=await emitTurnEpilogue(n,s,t.mode),r=setHarnessEmissionState(r,s))),{next:hasDeferredStepInput(r)?o:null,session:r}}let D=resolveInlineAuthorizationInterrupt({messages:[...r,...v],toolResults:i.toolResults});if(D){let{challenges:e,history:r}=D;if(n){for(let t of getSupersededAuthorizationChallenges(y.state,e))await n(createAuthorizationCompletedEvent({attemptId:t.attemptId,authorization:t.challenge,name:t.name,outcome:`failed`,reason:`Superseded by a newer authorization attempt.`,sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId}));for(let t of e)await n(createAuthorizationRequiredEvent({attemptId:t.attemptId,authorization:t.challenge,name:t.name,description:t.challenge.instructions??`Authorization required for ${t.name}`,webhookUrl:t.hookUrl,sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId}));t.mode===`conversation`&&(s=await emitTurnEpilogue(n,s,t.mode))}return{next:null,session:setHarnessEmissionState({...y,history:r,state:setPendingAuthorization(y.state,{challenges:e})},s)}}let se=v,ce=[...r,...se],O={...y,history:ce};return!(O.outputSchema!==void 0&&extractFinalOutput(i)!==void 0)&&(se.at(-1)?.role===`tool`||ee.outcomeEndsResponse||hasDeferredStepInput(O))?(n&&(s=advanceStep(s),O=setHarnessEmissionState(O,s)),{next:o,session:O}):t.mode===`task`?finishTaskTurn({emissionState:s,emit:n,history:r,result:i,schema:O.outputSchema,session:O,stepOutput:m}):finishConversationTurn({emissionState:s,emit:n,history:r,result:i,schema:O.outputSchema,session:O,stepOutput:m})}const OUTPUT_SCHEMA_NOT_FULFILLED={code:`OUTPUT_SCHEMA_NOT_FULFILLED`,message:`The agent could not produce a result matching the requested schema.`};function extractFinalOutput(e){return(e.toolCalls??[]).find(e=>e.toolName===FINAL_OUTPUT_TOOL_NAME&&!isInvalidToolCall(e))?.input}function persistStructuredAssistantTurn(e,t,n){return{...e,history:[...t,{content:JSON.stringify(n),role:`assistant`}],outputSchema:void 0}}async function emitStructuredResult(e,t,n,r,i){return await e(createResultCompletedEvent({result:n,sequence:t.sequence,stepIndex:t.stepIndex,turnId:t.turnId})),emitTurnEpilogue(e,t,r,i)}async function finishTaskTurn(e){let{emit:t,history:n,result:r,schema:i,stepOutput:a}=e,{emissionState:o,session:s}=e;if(i===void 0)return t&&(o=await emitTurnEpilogue(t,o,`task`,s.history),s=setHarnessEmissionState(s,o)),{next:{done:!0,output:a??``},session:s};let c=extractFinalOutput(r);return c===void 0?(s={...s,outputSchema:void 0},t&&await emitFailedStep(t,o,{...OUTPUT_SCHEMA_NOT_FULFILLED,sessionId:s.sessionId}),{next:{done:!0,isError:!0,output:OUTPUT_SCHEMA_NOT_FULFILLED.message},session:s}):(s=persistStructuredAssistantTurn(s,n,c),t&&(o=await emitStructuredResult(t,o,c,`task`,s.history),s=setHarnessEmissionState(s,o)),{next:{done:!0,output:c},session:s})}async function finishConversationTurn(e){let{emit:t,history:n,result:r,schema:i,stepOutput:a}=e,{emissionState:o,session:s}=e;if(i===void 0)return t&&(o=await emitTurnEpilogue(t,o,`conversation`,s.history),s=setHarnessEmissionState(s,o)),{next:null,session:s,settledTurn:{output:a??``}};let c=extractFinalOutput(r);if(c===void 0){s={...s,outputSchema:void 0},t&&(o=await emitRecoverableFailedTurn(t,o,{...OUTPUT_SCHEMA_NOT_FULFILLED,continuationToken:s.continuationToken}),s=setHarnessEmissionState(s,o));let e={isError:!0,output:OUTPUT_SCHEMA_NOT_FULFILLED.message};return{next:null,session:s,settledTurn:e}}return s=persistStructuredAssistantTurn(s,n,c),t&&(o=await emitStructuredResult(t,o,c,`conversation`,s.history),s=setHarnessEmissionState(s,o)),{next:null,session:s,settledTurn:{output:c}}}async function continuePendingWorkflowInterrupt(e){let t=getPendingWorkflowInterrupt(e.session.state);if(t===void 0)return null;let n=t.interrupt;if(!isWorkflowRuntimeActionInterrupt(n))throw Error(`Unsupported Workflow interrupt kind "${n.payload.kind}".`);let r=e.childResults??[],a=getWorkflowRuntimeActionInterrupts(n);e.emit!==void 0&&r.length>0&&await emitWorkflowActionResults({emit:e.emit,emissionState:e.emissionState,interrupts:a,results:r});let o=getWorkflowContinuationSecurity(e.session),s;try{let t=buildWorkflowHostTools({tools:e.tools}),i=n,a=0;for(;;){s=await continueWorkflowSandboxInterrupt({bridgeRequestLimit:resolveWorkflowSandboxBridgeRequestLimit(e.config.workflowMaxSubagents),continuationSecurity:o,interrupt:i,resolution:r[a]?.output,tools:t});let n=await unwrapWorkflowSandboxResult(s,o);if(n.status!==`interrupted`||!isWorkflowRuntimeActionInterrupt(n.interrupt)||a+1>=r.length)break;let c=getWorkflowRuntimeActionInterrupts(n.interrupt)[0];if(c===void 0)throw Error(`Workflow continuation contains no pending runtime-action interrupt.`);a++,i=c}}catch(e){logError(log,`Workflow interrupt continuation failed`,e),s={error:`workflow_continuation_failed`,message:toErrorMessage(e),retryable:!1}}let c=await unwrapWorkflowSandboxResult(s,o),l=c.status===`interrupted`?c.interrupt:c.output,u=replaceWorkflowToolResult([...e.session.history,...t.responseMessages],n.outerToolCallId,l),d=clearPendingWorkflowInterrupt({...e.session,history:u});if(c.status===`interrupted`){if(!isWorkflowRuntimeActionInterrupt(c.interrupt))throw Error(`Unsupported Workflow interrupt kind "${c.interrupt.payload.kind}".`);let n=e.session.history.length,r=u.slice(0,n),i=u.slice(n);return d={...d,history:r},await parkOnWorkflowInterrupt({baseSession:d,emit:e.emit,emissionState:e.emissionState,interrupt:c.interrupt,promptMessages:r,responseMessages:i,tools:e.tools,usedCalls:t.usedCalls})}return{next:e.runStep,session:d}}function replaceWorkflowToolResult(e,t,n){if(t===void 0)return[...e];let r=typeof n==`string`?{type:`text`,value:n}:{type:`json`,value:n};return e.map(e=>{if(e.role!==`tool`)return e;let n=e.content.map(e=>e.type!==`tool-result`||e.toolCallId!==t?e:{...e,output:r});return{...e,content:n}})}async function parkOnWorkflowInterrupt(e){let t=getWorkflowRuntimeActionInterrupts(e.interrupt),n=t[0];if(n===void 0)throw Error(`Workflow continuation contains no pending runtime-action interrupt.`);e.emit!==void 0&&await emitWorkflowActionsRequested({emit:e.emit,emissionState:e.emissionState,interrupts:t,tools:e.tools});let r={...e.baseSession,history:[...e.promptMessages]};return{next:null,session:setHarnessEmissionState(setPendingWorkflowInterrupt({interrupt:n,responseMessages:e.responseMessages,session:r,usedCalls:e.usedCalls}),e.emissionState)}}function createNextCompactionConfig(e,t,n){let r={recentWindowSize:e.recentWindowSize,threshold:e.threshold,thresholdPercent:e.thresholdPercent};return n.usage?.inputTokens!==void 0&&t!==void 0&&(r.lastKnownInputTokens=n.usage.inputTokens,r.lastKnownPromptMessageCount=t),r}async function maybeCompact(e){let{emit:t,emissionState:n}=e,r=e.messages,i=e.session,o=e.promptMessages??r,s=e.historyProjector?.({messages:o,state:i.state})??o,c=e.force===!0||shouldCompact(s,i.compaction),l=shouldCanonicalizeMemory(r);if(!c&&!l)return{compacted:!1,messages:r,session:i};let u=await resolveCompactionModel({compactionModelReference:i.agent.compactionModelReference,model:e.model,modelReference:requireSessionModelReference(i),resolveModel:e.resolveModel}),d=mergeProviderSafetyIdentifier(i.agent.compactionModelReference??requireSessionModelReference(i),u.providerOptions,e.auth);if(t){let e=contextStorage.getStore();e!==void 0&&prepareMemoryCompaction(e,{history:r,state:i.state}),await t(createCompactionRequestedEvent({modelId:formatLanguageModelGatewayId(u.model),sequence:n.sequence,sessionId:i.sessionId,turnId:n.turnId,usageInputTokens:getInputTokenCount(s,i.compaction)}),s)}let f=canonicalizeMemoryRecords(r),p=e.historyProjector?.({messages:f.ordinary,state:i.state})??f.ordinary,m=c?await compactMessages([...p],u.model,i.compaction,d,e.telemetry,buildGatewayAttributionHeaders(u.model,e.runtimeIdentity),e.abortSignal,e.force===!0):[...p];if(r=[...f.memory,...m],e.onCompaction)for(let t of e.onCompaction())r.push(t);if(t){let o=contextStorage.getStore();if(o!==void 0&&prepareMemoryCompaction(o,{history:r,state:i.state}),await t(createCompactionCompletedEvent({modelId:formatLanguageModelGatewayId(u.model),sequence:n.sequence,sessionId:i.sessionId,turnId:n.turnId}),e.historyProjector?.({messages:r,state:i.state})??r),o!==void 0){let e=drainMemoryCommit(o);e!==void 0&&(r=[...e.history],i={...i,state:e.state})}}return{compacted:!0,messages:r,session:i}}function resolveApprovalKeyFromTools(e){return t=>{let n=e.get(t.action.toolName);if(n?.approvalKey!==void 0)return n.approvalKey(t.action.input)}}async function runModelCallWithRetries(e,t,n){for(let r=1;;r++){throwIfTurnAborted(n);try{return await e(r)}catch(e){if(throwIfTurnAborted(n),r===3||classifyModelCallError(e)!==`retry`)throw e;let i=500*2**(r-1)+Math.floor(Math.random()*250);log.warn(`model call failed transiently — retrying`,{attempt:r,delayMs:i,sessionId:t.sessionId,turnId:t.turnId,error:e}),await new Promise(e=>setTimeout(e,i))}}}export{appendMissingToolResultMessages,createToolLoopHarness};
|
|
3
|
+
`)};return t!==void 0&&(n.providerOptions=t),n}function buildGatewayAttributionHeaders(e,t){let n=resolveProviderHeaders(e);if(n===void 0)return;let r=t?.agentName??t?.agentId,i=process.env.VERCEL_PROJECT_PRODUCTION_URL||process.env.VERCEL_URL,a=i?`https://${i}`:void 0,o={...n};return r&&(o[`x-title`]=r),a&&(o[`http-referer`]=a),o}async function resolveActiveRuntimeModel(e){if(e.ctx===void 0){let t=e.session.agent.modelReference;if(t===void 0)throw Error(`Dynamic model selection is unavailable outside an eve runtime context.`);return{model:await e.config.resolveModel(t),session:e.session}}let t=getActiveDynamicModelSelection(e.ctx);if(t===null){let t=e.session.agent.modelReference;if(e.session.agent.dynamicModel===!0||t===void 0)throw Error(`Dynamic model selection is required before model-dependent work begins. Add a matching resolver handler that returns a concrete model.`);return{model:await e.config.resolveModel(t),session:e.session}}return{model:t.model===void 0?await e.config.resolveModel(t.reference):t.model,session:updateSessionModelReference(e.session,t.reference)}}function updateSessionModelReference(e,t){return{...e,agent:{...e.agent,modelReference:t},compaction:updateCompactionThresholdForModelReference({compaction:e.compaction,modelReference:t})}}function updateCompactionThresholdForModelReference(e){return e.modelReference.contextWindowTokens===void 0?e.compaction:{...e.compaction,threshold:Math.max(1,Math.floor(e.modelReference.contextWindowTokens*(e.compaction.thresholdPercent??.9)))}}function buildHarnessToolsWithDynamicSubagents(e,t){let n=new Map(e);if(t===void 0)return n;for(let e of buildDynamicSubagentTools(t)){if(n.has(e.name))throw Error(`Dynamic subagent "${e.name}" collides with another runtime-visible tool name.`);n.set(e.name,e)}return n}function hasDispatchTarget(e,t){return[...e.values()].some(e=>e.behavior?.handling?.kind===`dispatch`&&e.behavior.handling.target.kind===t)}function createToolLoopHarness(n){let r=n.handleEvent;async function runStep(e,t){return n.instrumentation?.runStep({environment,eveVersion,hasInput:hasStepInput(t),session:e},e=>executeStepBody(e.session,t,e))??executeStepBody(e,t)}async function executeStepBody(f,g,v){let y=f,te=createHistoryViewPreparer({previous:n.historyView,projector:n.historyProjector});te(y.history,y.state);let projectHistory=(e,t)=>te(e,t).messages,S=getHarnessEmissionState(y.state),w=contextStorage.getStore(),D=w?.get(ParentSessionKey),ce=w?.get(ChannelKey),le=w?.get(SessionCallbackKey),ue=D!==void 0||le!==void 0,k=(le?.taskId!==void 0||readTaskIdFromInboxToken(String(ce?.state?.parentContinuationToken??``))!==void 0)&&hasDispatchTarget(n.tools,`task-update`),de,A=v?.createHandleEvent({getAttemptScope:()=>de,handleEvent:r,turnId:activeTurnId(S)})??r,failModelSelection=async(e,r)=>{if(throwIfTurnAborted(n.abortSignal),v?.recordError(e),!A)throw e;let i=createErrorId(),a=toErrorMessage(e);return log.error(`model selection failed terminally`,{error:e,errorId:i,sessionId:y.sessionId,turnId:r.turnId}),await emitFailedStep(A,r,{code:`MODEL_SELECTION_FAILED`,details:{errorId:i},message:a,sessionId:y.sessionId}),{next:n.mode===`task`||ue?{done:!0,isError:!0,output:a}:{done:!0,output:``},session:y}},preparePreambleTrace=async()=>await v?.preparePreamble({sequence:S.sequence,sessionStarted:S.sessionStarted,traceContext:v?.traceContext,turnId:`turn_${S.sequence}`});if(n.clearOnly===!0)return y={...y,compaction:{recentWindowSize:y.compaction.recentWindowSize,threshold:y.compaction.threshold,thresholdPercent:y.compaction.thresholdPercent},history:[],state:clearMemorySessionState(y.state)},await A?.(createContextClearedEvent({sequence:S.sequence,sessionId:y.sessionId,turnId:activeTurnId(S)})),await A?.(createSessionWaitingEvent()),{next:null,session:y};if(n.compactOnly===!0){if(y.history.length>0)try{let e=contextStorage.getStore(),t=await resolveActiveRuntimeModel({config:n,ctx:e,session:y});y=t.session;let r=await maybeCompact({abortSignal:n.abortSignal,auth:e?.get(AuthKey)??null,emit:A,emissionState:{...S,turnId:activeTurnId(S)},force:!0,historyProjector:n.historyProjector,messages:[...y.history],model:t.model,onCompaction:n.onCompaction,resolveModel:n.resolveModel,runtimeIdentity:n.runtimeIdentity,session:y,telemetry:v?.telemetry()});y={...r.session,compaction:{recentWindowSize:r.session.compaction.recentWindowSize,threshold:r.session.compaction.threshold,thresholdPercent:r.session.compaction.thresholdPercent},history:r.messages}}catch(e){logError(log,`manual session compaction failed`,e,{sessionId:y.sessionId})}return await A?.(createSessionWaitingEvent()),{next:null,session:y}}let j=consumeDeferredStepInput({input:g,preferCurrentInput:n.mode!==`conversation`&&g!==void 0&&hasPendingApprovalBatch(y),session:y});y=j.session;let M=await resolvePendingRuntimeActions({emit:A,session:y,stepInput:j.input,tools:n.tools});if(M.outcome===`unresolved`)return{next:null,session:M.session};y=M.session;let fe=getPendingInputRequestIds(y.state),pe=convertStaleResponsesToUserMessage({history:M.messages,pendingRequestIds:fe,stepInput:dropStaleSessionLimitContinuationResponses({pendingRequestIds:fe,stepInput:j.input}),tools:n.tools}),N=pe.stepInput,me=pe.kind===`converted`?{...N,message:pe.displayMessage}:N,P=contextStorage.getStore();shouldPrepareApprovalReplayTools({session:y,stepInput:N})&&P!==void 0&&n.prepareStepDynamicTools!==void 0&&await n.prepareStepDynamicTools({ctx:P,event:createStepStartedEvent({modelId:y.agent.modelReference?.id??`dynamic`,sequence:S.sequence,stepIndex:S.stepIndex,turnId:S.turnId}),messages:projectHistory(M.messages,y.state)});let he=shouldPrepareApprovalPolicyTools({session:y,stepInput:N})?buildResponseAuthorizationTools({authoredTools:n.tools,context:P}):n.tools,F=await coordinateApprovalDelivery({session:y,stepInput:N,tools:he});if(y=F.session,A){for(let e of F.feedback)await A(createMessageCompletedEvent({message:e,sequence:S.sequence,stepIndex:S.stepIndex,turnId:S.turnId}));let e=getApprovalAuditState(y.state);for(let t of e.activeCandidates.filter(e=>e.pendingEventEmitted!==!0))await A(createApprovalCandidateEvent({candidateId:t.candidateId,outcome:`pending`,requestId:t.requestId,responderPrincipalId:t.responder.principalId,sequence:S.sequence,stepIndex:S.stepIndex,turnId:S.turnId})),y={...y,state:markApprovalCandidatePendingEventEmitted({candidateId:t.candidateId,state:y.state})};for(let t of e.candidateHistory.filter(e=>e.eventEmitted!==!0&&e.status!==`allowed`))await A(createApprovalCandidateEvent({candidateId:t.candidateId,outcome:t.status,requestId:t.requestId,responderPrincipalId:t.responder.principalId,reason:t.reason,sequence:S.sequence,stepIndex:S.stepIndex,turnId:S.turnId})),y={...y,state:markApprovalCandidateHistoryEventEmitted({candidateId:t.candidateId,state:y.state})};for(let t of e.settlements.filter(e=>e.eventEmitted!==!0))await A(createApprovalSettledEvent({outcome:t.outcome===`allowed`?`approved`:`cancelled`,requestId:t.requestId,responderPrincipalId:t.actor.principalId,sequence:S.sequence,stepIndex:S.stepIndex,turnId:S.turnId})),y={...y,state:markApprovalSettlementEventEmitted({requestId:t.requestId,state:y.state})}}if(F.kind===`park`)return{next:null,session:y};if(F.kind===`continue-coordination`)return{next:runStep,session:F.stepInput===void 0?y:queueDeferredStepInput(y,F.stepInput)};if(F.challenges.length>0){if(A)for(let e of F.challenges)await A(createAuthorizationRequiredEvent({authorization:e.challenge,candidateId:e.candidateId,description:e.challenge.instructions??`Authorization required for ${e.name}`,name:e.name,sequence:S.sequence,stepIndex:S.stepIndex,turnId:S.turnId,webhookUrl:e.hookUrl}));let e=F.stepInput===void 0?y:queueDeferredStepInput(y,F.stepInput);return{next:null,session:{...e,state:setPendingAuthorization(e.state,{challenges:F.challenges})}}}let I=resolvePendingInput({deferMessagesWhileApprovalsPending:n.mode!==`conversation`,history:M.messages,resolveApprovalKey:resolveApprovalKeyFromTools(n.tools),session:y,stepInput:F.stepInput});if(I.outcome===`unresolved`){let e=M.outcome===`resolved`?{...I.session,history:[...M.messages]}:I.session;if(A&&n.mode===`conversation`&&I.deferredMessage===!0&&hasStepInput(g)){w!==void 0&&prepareDynamicInstructionPreamble(w,projectHistory(e.history,e.state));let t=[];try{let e=await preparePreambleTrace();S=await emitTurnPreamble(A,me??{},S,n.runtimeIdentity,e)}catch(n){if(t=w===void 0?[]:drainDynamicInstructionUserMessages(w),e={...e,history:[...e.history,...t]},y=e,!isDynamicModelSelectionError(n))throw n;return failModelSelection(n,{sessionStarted:!0,sequence:S.sequence,stepIndex:0,turnId:`turn_${S.sequence}`})}return t=w===void 0?[]:drainDynamicInstructionUserMessages(w),e={...e,history:[...e.history,...t]},S=await emitTurnEpilogue(A,S,n.mode),{next:null,session:setHarnessEmissionState(e,S)}}return M.outcome===`resolved`?(A&&n.mode===`conversation`&&(S=await emitTurnEpilogue(A,S,n.mode),e=setHarnessEmissionState(e,S)),{next:null,session:e}):{next:null,session:I.session}}if(I.resolvedInputs!==void 0)for(let e of I.resolvedInputs)await v?.publishInputResolutions({batch:e,sessionId:y.sessionId}),A&&await A(createInputResolvedEvent({resolutions:e.inputs.map(e=>{let t={kind:e.request.kind,outcome:e.outcome,requestId:e.request.requestId};return e.response===void 0?t:{...t,response:e.response}}),sequence:e.event.sequence,stepIndex:e.event.stepIndex,turnId:e.event.turnId}));if(A&&I.rejectedActions)for(let e of I.rejectedActions)for(let t of e.results)await A(createActionResultEvent({rejected:!0,result:t,sequence:e.event.sequence,stepIndex:e.event.stepIndex,turnId:e.event.turnId}));let ge=readClientContext(N),L=ge===void 0||I.deferredContext===!0?[]:ge.map(e=>({content:e,role:`user`})),R=[];if(N?.context!==void 0&&I.deferredContext!==!0)for(let e of N.context)R.push({content:e,role:`user`});let _e=normalizeUserContent(N?.message),ve=_e!==void 0&&!I.deferredMessage&&!I.consumedMessage?await stageAttachmentsToSandbox(_e):void 0;ve!==void 0&&R.push({content:ve,role:`user`});let z=[],B;if(A&&hasStepInput(g)){w!==void 0&&(prepareDynamicInstructionPreamble(w,projectHistory(I.session.history,I.session.state)),prepareMemoryPreamble(w,{history:I.messages,input:[...L,...R],state:I.session.state}));try{let e=await preparePreambleTrace();S=await emitTurnPreamble(A,me??{},S,n.runtimeIdentity,e)}catch(e){if(z=w===void 0?[]:drainDynamicInstructionUserMessages(w),B=w===void 0?void 0:drainMemoryCommit(w),y={...I.session,history:[...B?.history??I.session.history,...z],state:B?.state??I.session.state},!isDynamicModelSelectionError(e))throw e;return failModelSelection(e,{sessionStarted:!0,sequence:S.sequence,stepIndex:0,turnId:`turn_${S.sequence}`})}z=w===void 0?[]:drainDynamicInstructionUserMessages(w),B=w===void 0?void 0:drainMemoryCommit(w),v?.setTurnId(S.turnId)}let ye=B?.history??I.session.history,be=I.session.history.length;y=setHarnessEmissionState({...I.session,history:[...ye,...z],state:B?.state??I.session.state},S);let V=[...B?.history??I.messages.slice(0,be),...z,...B===void 0?I.messages.slice(be):[]],H=await applySessionLimitContinuation({config:n,emit:A,emissionState:S,limitContinuation:I.limitContinuation,session:y});if(H.result!==null)return H.result;y=H.session;let U=getAgentHandleStore(y.state);if(U!==void 0&&!hasUnansweredToolCall(V)&&U.handles.some(e=>e.phase===`addressed`)!==!0){let e=resolveAgentsAnnouncement({messages:projectHistory(V,y.state),store:U});e!==void 0&&V.push({content:e,role:`user`})}V=[...V,...R];let createModelMessages=e=>{if(L.length===0)return[...e];let t=Math.max(0,e.length-R.length);return[...e.slice(0,t),...L,...e.slice(t)]},W=projectHistory(createModelMessages(V),y.state),G=w,K;try{G!==void 0&&n.dispatchDynamicModelEvent!==void 0&&await n.dispatchDynamicModelEvent({ctx:G,event:{data:{sequence:S.sequence,stepIndex:S.stepIndex,turnId:S.turnId},type:`step.started`},messages:W}),K=await resolveActiveRuntimeModel({config:n,ctx:G,session:y})}catch(e){return failModelSelection(e,S)}y=K.session;let q=K.model,xe=detectPromptCachePath(q),J=xe.kind===`anthropic-direct`?getAnthropicCacheMarker():void 0,Se=buildGatewayAttributionHeaders(q,n.runtimeIdentity),Y=await maybeCompact({abortSignal:n.abortSignal,auth:G?.get(AuthKey)??null,emit:A,emissionState:S,historyProjector:n.historyProjector,messages:[...V],model:q,onCompaction:n.onCompaction,promptMessages:createModelMessages(V),resolveModel:n.resolveModel,runtimeIdentity:n.runtimeIdentity,session:y,telemetry:v?.telemetry()});y=Y.session,Y.compacted&&(V=Y.messages),W=normalizeModelMessages(projectHistory(createModelMessages(V),y.state)),A&&await emitStepStarted(A,S,requireSessionModelReference(y).id,W);let Ce=getApprovedTools(y),we=S.sequence===0,X=resolveDeliveryPolicy({hasScheduleProvenance:we&&G?.get(ScheduleIdKey)!==void 0,hasOutputSchema:y.outputSchema!==void 0,isChild:G?.get(ParentSessionKey)!==void 0,isFirstTurn:we,taskDeliveryPhase:G?.get(TurnTaskDeliveryKey)}),Z=createCurrentMessages(W,{currentTurnMessages:R});if(G!==void 0){Z.addSystem(buildDynamicInstructionMessages(G));let e=G.get(PendingSkillAnnouncementKey);e!==void 0&&e.length>0&&Z.add(S.sequence,e);let t=G.get(TurnTaskStateKey);t!==void 0&&Z.add(S.sequence,t)}X.instruction!==void 0&&Z.add(S.sequence,X.instruction);let Te=renderPendingApprovalsInstruction(getPendingInputBatches(y.state).flatMap(e=>e.requests));Te!==void 0&&Z.add(S.sequence,Te,{cacheFriendly:!1});let Ee=await hydrateSandboxAttachments(Z.nonSystemMessages),prepareModelCallInput=e=>{let t=e?[{role:`system`,content:e}]:[],n=y.agent.system?[{role:`system`,content:y.agent.system}]:[],r=Z.systemMessages.length>0||t.length>0?[...t,...n,...Z.systemMessages]:void 0,i=r!==void 0&&J?applySystemCacheBreakpoint(r,J):r,a=i===void 0?y.agent.system??void 0:mergeSystemInstructions(i);return{instructions:a,telemetryRuntimeContext:v?.resolveRuntimeContext({eveVersion,emissionState:S,environment,modelInput:{instructions:a,messages:Ee},session:y})}},De=n.tools,runSingleModelCall=async e=>{let{instructions:t,telemetryRuntimeContext:r={}}=e.preparedInput??prepareModelCallInput(e.extraSystemNote);e.retryReason&&(r[`eve.retry.reason`]=e.retryReason);let a=e.trailingUserNote?[...Ee,{role:`user`,content:e.trailingUserNote}]:[...Ee],s=buildHarnessToolsWithDynamicSubagents(n.tools,G),c=createBackgroundToolCallBatch(),l=getAdvertisedTools({canRequestInput:n.capabilities?.requestInput===!0,delegatedCaller:k,session:y,tools:s}),u=new Map(l),d=await buildToolSetWithProviderTools({approvedTools:Ce,backgroundBatch:c,capabilities:n.capabilities,disabledProviderTools:e.disabledProviderTools,modelReference:requireSessionModelReference(y),tools:l});if(G!==void 0){let t=getAdvertisedTools({canRequestInput:n.capabilities?.requestInput===!0,delegatedCaller:k,session:y,tools:buildDynamicTools(G)}),r=buildToolSetFromDefinitions({approvedTools:Ce,backgroundBatch:c,capabilities:n.capabilities,disabledProviderTools:e.disabledProviderTools,tools:t}),i=new Map;for(let e of t)i.has(e.name)||i.set(e.name,e);for(let[e,t]of Object.entries(r)){if(l.get(e)?.behavior?.handling?.kind===`dispatch`)throw Error(`Dynamic tool "${e}" collides with a runtime-visible subagent.`);let n=i.get(e);if(n===void 0)throw Error(`Dynamic tool "${e}" has no effective harness definition.`);u.set(e,n),d[e]=t}}y.outputSchema!==void 0&&(d[FINAL_OUTPUT_TOOL_NAME]=buildFinalOutputTool(y.outputSchema));let f=n.workflow===!0?{maxSubagents:n.workflowMaxSubagents}:void 0,p=await getAdvertisedTools({canRequestInput:n.capabilities?.requestInput===!0,delegatedCaller:k,modelTools:d,session:y,tools:u,workflow:f});y=p.session,De=p.harnessTools;let m=p.modelTools,h=J?applyLastToolCacheBreakpoint(m,J):m,ee=activeTurnId(S),g=v?.prepareAttempt({attemptIndex:e.attemptIndex,runtimeContext:r,stepIndex:S.stepIndex,turnId:ee});de=g?.scope;let _=buildStepHooks({auth:G?.get(AuthKey)??null,cachePath:xe,emit:A,emissionState:S,emitStepStarted:e.suppressStepStartedEmission!==!0,marker:J,session:y}),b=new ToolLoopAgent({headers:Se,instructions:t,model:q,onLanguageModelCallEnd(e){for(let t of e.content)t.type!==`tool-call`||t.providerExecuted===!0||isInvalidToolCall(t)||c.register({callId:t.toolCallId,input:t.input,toolName:t.toolName})},onToolExecutionEnd:logToolExecutionError,onError(e){summarizeKnownError(e.error)?.tags.includes(`config`)!==!0&&logError(log,`tool-loop stream error`,e.error)},onStepFinish:_.onStepFinish,prepareStep:_.prepareStep,reasoning:y.agent.reasoning,runtimeContext:r,stopWhen:isStepCount(1),telemetry:g?.telemetry,toolApproval:buildToolApproval(m),tools:h}),executeModelCall=async()=>{if(A){let e=[...n.tools].filter(([e,t])=>t.behavior?.handling?.kind===`dispatch`&&u.get(e)===void 0).map(([e])=>e),t=[...u.values()].filter(e=>e.behavior?.handling?.kind===`request-input`).map(e=>e.name),r=new Set([FINAL_OUTPUT_TOOL_NAME,...e,...t]),i=await b.stream({abortSignal:n.abortSignal,messages:a}),{emittedActionCallIds:o,handledInlineToolResultCallIds:s,invalidInputToolCallIds:c,inlineAuthorizationResults:l,trailingInlineToolResultParts:d}=await emitStreamContent(A,S,i.fullStream,{excludedActionToolNames:r,tools:u});throwIfTurnAborted(n.abortSignal);let[f,p]=await Promise.all([_.stepResult,i.responseMessages]);if(isEmptyModelResponse(f)&&extractToolResultCallIds(p).size===0&&l.length===0&&d.length===0)throw new EmptyModelResponseError;await emitStepActions(A,S,f,{emittedActionCallIds:o,excludedActionCallIds:c,excludedActionToolNames:r,handledInlineToolResultCallIds:s,tools:u});let m=f.toolResults,h=new Map(m.map(e=>[e.toolCallId,e]));for(let e of l)h.set(e.toolCallId,e);return withAccumulatedResponseMessages({invalidInputToolCallIds:c,responseMessages:appendMissingToolResultMessages({append:d,responseMessages:p}),stepResult:f,toolResults:[...h.values()]})}let e=await b.generate({abortSignal:n.abortSignal,messages:a});throwIfTurnAborted(n.abortSignal);let t=await _.stepResult;if(isEmptyModelResponse(t)&&extractToolResultCallIds(e.responseMessages).size===0)throw new EmptyModelResponseError;return withAccumulatedResponseMessages({responseMessages:e.responseMessages,stepResult:t})};try{let e=await executeModelCall();return await g?.complete(),e}catch(e){return await g?.fail(e),rethrowNoOutputAsEmptyResponse(e)}},Oe=0,runOneModelCall=async e=>runModelCallWithRetries(t=>runSingleModelCall({...e,attemptIndex:Oe++,preparedInput:t===1?e.preparedInput:void 0,suppressStepStartedEmission:t!==1||e.suppressStepStartedEmission}),{sessionId:y.sessionId,turnId:S.turnId},n.abortSignal),ke=prepareModelCallInput(),Ae=await continuePendingWorkflowInterrupt({childResults:N?.runtimeActionResults,config:n,emit:A,emissionState:S,runStep,session:y,tools:buildHarnessToolsWithDynamicSubagents(n.tools,G)});if(Ae!==null)return Ae;let je=await enforceSessionTokenLimit({config:n,emit:A,emissionState:S,messages:W,session:y});if(je!==null)return je;let Q;try{Q=await runOneModelCall({preparedInput:ke,suppressStepStartedEmission:!0})}catch(e){throwIfTurnAborted(n.abortSignal);let r=await runModelCallRecoveryPipeline({error:e,stages:[e=>attemptUnsupportedProviderToolRecovery({error:e.error,runOneModelCall,sessionId:y.sessionId,turnId:S.turnId}),e=>attemptEmptyResponseRecovery({emptyDeliveryEnabled:X.allowsEmptyDelivery,error:e.error,retryCallOptions:e.retryCallOptions,runOneModelCall,sessionId:y.sessionId,turnId:S.turnId})]});if(throwIfTurnAborted(n.abortSignal),r.outcome===`recovered`)Q=r.result;else{let e=r.error;if(v?.recordError(e),!A)throw e;let i=extractWorkflowStreamWriteErrorDetails(e);if(i!==null){let n=createErrorId();return log.error(`workflow stream write failed — parking session for retry by the user`,{...i,errorId:n,error:e,sessionId:y.sessionId,turnId:S.turnId}),S=await emitRecoverableFailedTurn(A,S,{code:`WORKFLOW_STREAM_WRITE_FAILED`,continuationToken:y.continuationToken,details:{...i,errorId:n},message:toErrorMessage(e)}),{next:null,session:setHarnessEmissionState(y,S)}}let a=classifyModelCallError(e),o=createErrorId(),s=summarizeKnownError(e),c=s===null?extractUpstreamRejectionMessage(e):null,l=s?.message??c?.message??toErrorMessage(e),u=s?.hint===void 0?l:`${l} ${s.hint}`,d=extractModelCallErrorDetails(e),f=buildModelCallFailureDetails({catalogSummary:s,error:e,errorId:o,modelCallDetails:d,upstreamRejection:c}),m=buildModelCallFailureLogFields({error:e,errorId:o,modelCallDetails:d,recognized:s!==null||c!==null,sessionId:y.sessionId,turnId:S.turnId});if(a===`terminal`)return s===null?log.error(c?.message??`model call failed terminally`,m):log.error(`${s.name}: ${s.message}`,{errorId:o,hint:s.hint,sessionId:y.sessionId,turnId:S.turnId}),await emitFailedStep(A,S,{code:`MODEL_CALL_FAILED`,details:f,message:l,sessionId:y.sessionId}),{next:n.mode===`task`||ue?{done:!0,isError:!0,output:u}:{done:!0,output:``},session:y};if(n.mode===`task`){if(a===`recoverable`&&!(e instanceof EmptyModelResponseError))throw log.warn(c?.message??`model call failed recoverably in task mode — rethrowing for durable step retry`,m),e;return log.error(c?.message??`model call failed; failing the task run`,m),await emitFailedStep(A,S,{code:`MODEL_CALL_FAILED`,details:f,message:l,sessionId:y.sessionId}),{next:{done:!0,isError:!0,output:u},session:y}}log.error(c?.message??`model call failed — parking session for retry by the user`,m),S=await emitRecoverableFailedTurn(A,S,{code:`MODEL_CALL_FAILED`,continuationToken:y.continuationToken,details:f,message:l});let h={isError:!0,output:u};return y={...y,outputSchema:void 0},{next:null,session:setHarnessEmissionState(y,S),settledTurn:h}}}let $=accumulateTurnUsage({previous:getTurnUsageState(y.state),turnId:S.turnId,usage:extractTokenUsageDelta({costUsd:extractGatewayCostUsd(Q.providerMetadata),usage:Q.usage})});y=setTurnUsageState(y,$);let Me;try{Me=formatLanguageModelGatewayId(q)}catch{Me=void 0}let Ne=setEveAttributes({"$eve.model":Me,"$eve.input_tokens":$.inputTokens,"$eve.output_tokens":$.outputTokens,"$eve.cache_read_tokens":$.cacheReadTokens,"$eve.cache_write_tokens":$.cacheWriteTokens,"$eve.cost_usd":$.sawCost?$.costUsd:void 0,"$eve.tool_count":n.tools.size}).catch(e=>{logError(log,`Workflow attribute write failed unexpectedly`,e,{sessionId:y.sessionId,turnId:S.turnId})}),Pe;try{Pe=await handleStepResult({config:n,emit:A,emissionState:S,delegatedCaller:k,durableModelPromptMessageCount:L.length===0?W.length:void 0,promptMessages:V,result:Q,runStep,session:y,runtimeActionTools:De})}finally{await Ne}return Pe}return runStep}function extractTokenUsageDelta(e){let t=e.usage;if(!(t===void 0&&e.costUsd===void 0))return{cacheReadTokens:t?.inputTokenDetails?.cacheReadTokens,cacheWriteTokens:t?.inputTokenDetails?.cacheWriteTokens,costUsd:e.costUsd,inputTokens:t?.inputTokens,outputTokens:t?.outputTokens}}function extractGatewayCostUsd(e){let t=readGatewayMetadata(e)?.cost;if(typeof t==`number`&&Number.isFinite(t))return t;if(typeof t==`string`){let e=Number(t);return Number.isFinite(e)?e:void 0}}function readGatewayMetadata(e){let t=e?.gateway;return t&&typeof t==`object`&&!Array.isArray(t)?t:void 0}function buildModelCallFailureDetails(e){let{catalogSummary:t,error:n,errorId:i,modelCallDetails:a,upstreamRejection:o}=e;if(t!==null){let e={errorId:i,message:t.message,name:t.name,semanticErrorId:t.id,...a};return t.hint!==void 0&&(e.hint=t.hint),e}return o===null?{...formatError(n,i),...a}:{errorId:i,message:toErrorMessage(n),name:o.name,...a}}function buildModelCallFailureLogFields(e){let t={errorId:e.errorId,sessionId:e.sessionId,turnId:e.turnId};return e.recognized?{...t,details:e.modelCallDetails}:{...t,error:e.error}}async function runModelCallRecoveryPipeline(e){let t=e.error,n;for(let r of e.stages){let e=await r({error:t,retryCallOptions:n});if(e.outcome===`recovered`)return e;e.outcome===`failed`&&(t=e.error,n=e.retryCallOptions)}return{outcome:`failed`,error:t}}function withAccumulatedResponseMessages(e){let{stepResult:t}=e;return{content:t.content,finishReason:t.finishReason,...e.invalidInputToolCallIds===void 0?{}:{invalidInputToolCallIds:e.invalidInputToolCallIds},providerMetadata:t.providerMetadata,response:{...t.response,messages:[...e.responseMessages]},text:t.text,toolCalls:t.toolCalls,toolResults:e.toolResults===void 0?t.toolResults:[...e.toolResults],usage:t.usage}}function appendMissingToolResultMessages(e){let t=extractToolResultCallIds(e.responseMessages),n=e.append.filter(e=>!t.has(e.toolCallId));return[...e.responseMessages,...n.length>0?[{role:`tool`,content:[...n]}]:[]]}function getInvalidToolCallInputErrors(e){let t=[];for(let n of e.toolCalls){if(n.toolName===FINAL_OUTPUT_TOOL_NAME)continue;let e=getInvalidToolCallInputError({toolCall:n});e!==void 0&&t.push(e)}return t}function extractToolResultCallIds(e){let t=new Set;for(let n of e)if(Array.isArray(n.content))for(let e of n.content)typeof e==`object`&&e&&e.type===`tool-result`&&t.add(e.toolCallId);return t}function hasUnansweredToolCall(e){let t=new Set,n=new Set;for(let r of e)if(Array.isArray(r.content))for(let e of r.content)typeof e!=`object`||!e||(e.type===`tool-call`&&t.add(e.toolCallId),e.type===`tool-result`&&n.add(e.toolCallId));for(let e of t)if(!n.has(e))return!0;return!1}async function attemptUnsupportedProviderToolRecovery(e){let t=extractUnsupportedProviderToolTypes(e.error);if(t.length===0)return{outcome:`skipped`};let n=[];for(let e of t){let t=resolveFrameworkToolFromUpstreamType(e);t!==null&&!n.includes(t)&&n.push(t)}if(n.length===0)return{outcome:`skipped`};log.warn(`disabling unsupported provider tool(s); retrying step once`,{disabled:n,sessionId:e.sessionId,turnId:e.turnId,upstreamTypes:t});let r={disabledProviderTools:new Set(n),extraSystemNote:buildDisabledToolNote(n)};try{return{outcome:`recovered`,result:await e.runOneModelCall({...r,suppressStepStartedEmission:!0})}}catch(e){return{outcome:`failed`,error:e,retryCallOptions:r}}}function buildDisabledToolNote(e){let t=e.join(`, `);return`The following ${e.length===1?`tool is`:`tools are`} not available with the current model and has been removed: ${t}. Proceed using the remaining tools or your training knowledge.`}function isEmptyModelResponse(e){return e.toolCalls.length===0&&e.toolResults.length===0&&resolveAssistantStepText(e.response.messages,e.text)===null}function rethrowNoOutputAsEmptyResponse(e){throw isNoOutputGeneratedError(e)?new EmptyModelResponseError({cause:e}):e}const EMPTY_RESPONSE_NUDGE=`Your previous reply was empty and was not delivered. Answer now from the tool results above; do not re-run tools or mention this notice.`;function buildEmptyResponseNudge(e){return e?`${EMPTY_RESPONSE_NUDGE} If the current task explicitly requires conditional delivery and there is nothing to report, reply with exactly ${EMPTY_DELIVERY_SENTINEL}.`:EMPTY_RESPONSE_NUDGE}async function attemptEmptyResponseRecovery(e){if(!(e.error instanceof EmptyModelResponseError))return{outcome:`skipped`};log.warn(`empty model response; reissuing the model call once`,{sessionId:e.sessionId,turnId:e.turnId});try{return{outcome:`recovered`,result:await e.runOneModelCall({...e.retryCallOptions,retryReason:`empty-response`,suppressStepStartedEmission:!0,trailingUserNote:buildEmptyResponseNudge(e.emptyDeliveryEnabled)})}}catch(t){return{outcome:`failed`,error:t,retryCallOptions:e.retryCallOptions}}}async function handleStepResult(e){let{config:t,emit:n,promptMessages:r,result:i,runStep:o}=e,{emissionState:s,session:c}=e,l=resolveAssistantStepText(i.response.messages,i.text),u=i.finishReason!==`tool-calls`&&i.toolCalls.length===0&&hasEmptyDeliverySentinel(l),d=getInvalidToolCallInputErrors({toolCalls:i.toolCalls}),f=new Set([...i.invalidInputToolCallIds??[],...i.toolCalls.filter(isInvalidToolCall).map(e=>e.toolCallId),...d.map(e=>e.toolCallId)]),p=u?[]:appendMissingToolResultMessages({append:d.map(e=>createToolResultMessagePartFromToolError(e)),responseMessages:i.response.messages}),m=u?null:l,h=new Set;for(let e of[...i.content??[],...i.toolResults??[]])(e.type===`tool-result`||e.type===`tool-error`)&&e.providerExecuted===!0&&h.add(e.toolCallId);let ee=normalizeProviderToolHistory({messages:p,providerExecutedOutcomeIds:h}),v=ee.messages,y={...c,compaction:createNextCompactionConfig(c.compaction,e.durableModelPromptMessageCount,i)},b=t.workflow===!0?readWorkflowContinuationSecurity(y):void 0;if(b!==void 0){let t=await getWorkflowSandboxInterrupt(i,b);if(t!==void 0){if(!isWorkflowRuntimeActionInterrupt(t))throw Error(`Unsupported Workflow interrupt kind "${t.payload.kind}".`);return await parkOnWorkflowInterrupt({baseSession:y,emit:n,emissionState:s,interrupt:t,promptMessages:r,responseMessages:v,tools:e.runtimeActionTools,usedCalls:0})}}let x=extractToolApprovalInputRequests({content:i.content??[],excludedCallIds:f}),ne=new Set(x.map(e=>e.action.callId)),S=extractQuestionInputRequests({toolCalls:i.toolCalls,tools:e.runtimeActionTools,excludedCallIds:new Set([...f,...ne])}),C=[...x,...S],re=renderPendingApprovalsSnippet(x),ie=v.findIndex(e=>e.role!==`tool`),w=ie===-1?v:v.slice(0,ie),ae=v.slice(w.length),oe=[...r,...w,...re===void 0?[]:[{content:re,role:`user`}]],T=getAdvertisedTools({canRequestInput:e.config.capabilities?.requestInput===!0,delegatedCaller:e.delegatedCaller,session:y,tools:e.runtimeActionTools}),E=(i.toolCalls??[]).filter(e=>!f.has(e.toolCallId)).filter(t=>e.runtimeActionTools.get(t.toolName)?.behavior?.handling?.kind===`dispatch`&&e.runtimeActionTools.get(t.toolName)?.execution!==`background`).filter(e=>T.get(e.toolName)?.behavior?.handling?.kind===`dispatch`&&T.get(e.toolName)?.execution!==`background`?!0:(log.warn(`runtime action tool call blocked because tool is not advertised`,{callId:e.toolCallId,sessionId:y.sessionId,toolName:e.toolName}),!1)).map(e=>createPendingDispatchActionFromToolCall({toolCall:e,tools:T}));if(E.length>0){if(C.length===0)return{next:null,session:setHarnessEmissionState(setPendingRuntimeActionBatch({actions:E,event:{sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId},responseMessages:v,session:{...y,history:[...r]}}),advanceStep(s))};let e=setPendingRuntimeActionBatch({actions:E,event:{sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId},responseMessages:ae,session:{...y,history:oe}});return e=appendPendingInputBatch({event:{sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId},requests:C,responseMessages:[],session:e}),n&&await n(createInputRequestedEvent({requests:C,sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId})),{next:null,session:setHarnessEmissionState(e,advanceStep(s))}}if(C.length>0){let e=buildResponseAuthorizationTools({authoredTools:t.tools,context:contextStorage.getStore()}),r=appendPendingInputBatch({event:{sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId},requests:C,responseAuthRequiredRequestIds:x.filter(t=>{let n=e.get(t.action.toolName)?.approval;return n!==void 0&&typeof n!=`function`&&n.response!==void 0}).map(e=>e.requestId),responseMessages:ae,session:{...y,history:oe}});return n&&(await n(createInputRequestedEvent({requests:C,sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId})),t.mode===`conversation`&&(s=await emitTurnEpilogue(n,s,t.mode),r=setHarnessEmissionState(r,s))),{next:hasDeferredStepInput(r)?o:null,session:r}}let D=resolveInlineAuthorizationInterrupt({messages:[...r,...v],toolResults:i.toolResults});if(D){let{challenges:e,history:r}=D;if(n){for(let t of getSupersededAuthorizationChallenges(y.state,e))await n(createAuthorizationCompletedEvent({attemptId:t.attemptId,authorization:t.challenge,name:t.name,outcome:`failed`,reason:`Superseded by a newer authorization attempt.`,sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId}));for(let t of e)await n(createAuthorizationRequiredEvent({attemptId:t.attemptId,authorization:t.challenge,name:t.name,description:t.challenge.instructions??`Authorization required for ${t.name}`,webhookUrl:t.hookUrl,sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId}));t.mode===`conversation`&&(s=await emitTurnEpilogue(n,s,t.mode))}return{next:null,session:setHarnessEmissionState({...y,history:r,state:setPendingAuthorization(y.state,{challenges:e})},s)}}let se=v,ce=[...r,...se],O={...y,history:ce};return!(O.outputSchema!==void 0&&extractFinalOutput(i)!==void 0)&&(se.at(-1)?.role===`tool`||ee.outcomeEndsResponse||hasDeferredStepInput(O))?(n&&(s=advanceStep(s),O=setHarnessEmissionState(O,s)),{next:o,session:O}):t.mode===`task`?finishTaskTurn({emissionState:s,emit:n,history:r,result:i,schema:O.outputSchema,session:O,stepOutput:m}):finishConversationTurn({emissionState:s,emit:n,history:r,result:i,schema:O.outputSchema,session:O,stepOutput:m})}const OUTPUT_SCHEMA_NOT_FULFILLED={code:`OUTPUT_SCHEMA_NOT_FULFILLED`,message:`The agent could not produce a result matching the requested schema.`};function extractFinalOutput(e){return(e.toolCalls??[]).find(e=>e.toolName===FINAL_OUTPUT_TOOL_NAME&&!isInvalidToolCall(e))?.input}function persistStructuredAssistantTurn(e,t,n){return{...e,history:[...t,{content:JSON.stringify(n),role:`assistant`}],outputSchema:void 0}}async function emitStructuredResult(e,t,n,r,i){return await e(createResultCompletedEvent({result:n,sequence:t.sequence,stepIndex:t.stepIndex,turnId:t.turnId})),emitTurnEpilogue(e,t,r,i)}async function finishTaskTurn(e){let{emit:t,history:n,result:r,schema:i,stepOutput:a}=e,{emissionState:o,session:s}=e;if(i===void 0)return t&&(o=await emitTurnEpilogue(t,o,`task`,s.history),s=setHarnessEmissionState(s,o)),{next:{done:!0,output:a??``},session:s};let c=extractFinalOutput(r);return c===void 0?(s={...s,outputSchema:void 0},t&&await emitFailedStep(t,o,{...OUTPUT_SCHEMA_NOT_FULFILLED,sessionId:s.sessionId}),{next:{done:!0,isError:!0,output:OUTPUT_SCHEMA_NOT_FULFILLED.message},session:s}):(s=persistStructuredAssistantTurn(s,n,c),t&&(o=await emitStructuredResult(t,o,c,`task`,s.history),s=setHarnessEmissionState(s,o)),{next:{done:!0,output:c},session:s})}async function finishConversationTurn(e){let{emit:t,history:n,result:r,schema:i,stepOutput:a}=e,{emissionState:o,session:s}=e;if(i===void 0)return t&&(o=await emitTurnEpilogue(t,o,`conversation`,s.history),s=setHarnessEmissionState(s,o)),{next:null,session:s,settledTurn:{output:a??``}};let c=extractFinalOutput(r);if(c===void 0){s={...s,outputSchema:void 0},t&&(o=await emitRecoverableFailedTurn(t,o,{...OUTPUT_SCHEMA_NOT_FULFILLED,continuationToken:s.continuationToken}),s=setHarnessEmissionState(s,o));let e={isError:!0,output:OUTPUT_SCHEMA_NOT_FULFILLED.message};return{next:null,session:s,settledTurn:e}}return s=persistStructuredAssistantTurn(s,n,c),t&&(o=await emitStructuredResult(t,o,c,`conversation`,s.history),s=setHarnessEmissionState(s,o)),{next:null,session:s,settledTurn:{output:c}}}async function continuePendingWorkflowInterrupt(e){let t=getPendingWorkflowInterrupt(e.session.state);if(t===void 0)return null;let n=t.interrupt;if(!isWorkflowRuntimeActionInterrupt(n))throw Error(`Unsupported Workflow interrupt kind "${n.payload.kind}".`);let r=e.childResults??[],a=getWorkflowRuntimeActionInterrupts(n);e.emit!==void 0&&r.length>0&&await emitWorkflowActionResults({emit:e.emit,emissionState:e.emissionState,interrupts:a,results:r});let o=getWorkflowContinuationSecurity(e.session),s;try{let t=buildWorkflowHostTools({tools:e.tools}),i=n,a=0;for(;;){s=await continueWorkflowSandboxInterrupt({bridgeRequestLimit:resolveWorkflowSandboxBridgeRequestLimit(e.config.workflowMaxSubagents),continuationSecurity:o,interrupt:i,resolution:r[a]?.output,tools:t});let n=await unwrapWorkflowSandboxResult(s,o);if(n.status!==`interrupted`||!isWorkflowRuntimeActionInterrupt(n.interrupt)||a+1>=r.length)break;let c=getWorkflowRuntimeActionInterrupts(n.interrupt)[0];if(c===void 0)throw Error(`Workflow continuation contains no pending runtime-action interrupt.`);a++,i=c}}catch(e){logError(log,`Workflow interrupt continuation failed`,e),s={error:`workflow_continuation_failed`,message:toErrorMessage(e),retryable:!1}}let c=await unwrapWorkflowSandboxResult(s,o),l=c.status===`interrupted`?c.interrupt:c.output,u=replaceWorkflowToolResult([...e.session.history,...t.responseMessages],n.outerToolCallId,l),d=clearPendingWorkflowInterrupt({...e.session,history:u});if(c.status===`interrupted`){if(!isWorkflowRuntimeActionInterrupt(c.interrupt))throw Error(`Unsupported Workflow interrupt kind "${c.interrupt.payload.kind}".`);let n=e.session.history.length,r=u.slice(0,n),i=u.slice(n);return d={...d,history:r},await parkOnWorkflowInterrupt({baseSession:d,emit:e.emit,emissionState:e.emissionState,interrupt:c.interrupt,promptMessages:r,responseMessages:i,tools:e.tools,usedCalls:t.usedCalls})}return{next:e.runStep,session:d}}function replaceWorkflowToolResult(e,t,n){if(t===void 0)return[...e];let r=typeof n==`string`?{type:`text`,value:n}:{type:`json`,value:n};return e.map(e=>{if(e.role!==`tool`)return e;let n=e.content.map(e=>e.type!==`tool-result`||e.toolCallId!==t?e:{...e,output:r});return{...e,content:n}})}async function parkOnWorkflowInterrupt(e){let t=getWorkflowRuntimeActionInterrupts(e.interrupt),n=t[0];if(n===void 0)throw Error(`Workflow continuation contains no pending runtime-action interrupt.`);e.emit!==void 0&&await emitWorkflowActionsRequested({emit:e.emit,emissionState:e.emissionState,interrupts:t,tools:e.tools});let r={...e.baseSession,history:[...e.promptMessages]};return{next:null,session:setHarnessEmissionState(setPendingWorkflowInterrupt({interrupt:n,responseMessages:e.responseMessages,session:r,usedCalls:e.usedCalls}),e.emissionState)}}function createNextCompactionConfig(e,t,n){let r={recentWindowSize:e.recentWindowSize,threshold:e.threshold,thresholdPercent:e.thresholdPercent};return n.usage?.inputTokens!==void 0&&t!==void 0&&(r.lastKnownInputTokens=n.usage.inputTokens,r.lastKnownPromptMessageCount=t),r}async function maybeCompact(e){let{emit:t,emissionState:n}=e,r=e.messages,i=e.session,o=e.promptMessages??r,s=e.historyProjector?.({messages:o,state:i.state})??o,c=e.force===!0||shouldCompact(s,i.compaction),l=shouldCanonicalizeMemory(r);if(!c&&!l)return{compacted:!1,messages:r,session:i};let u=await resolveCompactionModel({compactionModelReference:i.agent.compactionModelReference,model:e.model,modelReference:requireSessionModelReference(i),resolveModel:e.resolveModel}),d=mergeProviderSafetyIdentifier(i.agent.compactionModelReference??requireSessionModelReference(i),u.providerOptions,e.auth);if(t){let e=contextStorage.getStore();e!==void 0&&prepareMemoryCompaction(e,{history:r,state:i.state}),await t(createCompactionRequestedEvent({modelId:formatLanguageModelGatewayId(u.model),sequence:n.sequence,sessionId:i.sessionId,turnId:n.turnId,usageInputTokens:getInputTokenCount(s,i.compaction)}),s)}let f=canonicalizeMemoryRecords(r),p=e.historyProjector?.({messages:f.ordinary,state:i.state})??f.ordinary,m=c?await compactMessages([...p],u.model,i.compaction,d,e.telemetry,buildGatewayAttributionHeaders(u.model,e.runtimeIdentity),e.abortSignal,e.force===!0):[...p];if(r=[...f.memory,...m],e.onCompaction)for(let t of e.onCompaction())r.push(t);if(t){let o=contextStorage.getStore();if(o!==void 0&&prepareMemoryCompaction(o,{history:r,state:i.state}),await t(createCompactionCompletedEvent({modelId:formatLanguageModelGatewayId(u.model),sequence:n.sequence,sessionId:i.sessionId,turnId:n.turnId}),e.historyProjector?.({messages:r,state:i.state})??r),o!==void 0){let e=drainMemoryCommit(o);e!==void 0&&(r=[...e.history],i={...i,state:e.state})}}return{compacted:!0,messages:r,session:i}}function resolveApprovalKeyFromTools(e){return t=>{let n=e.get(t.action.toolName);if(n?.approvalKey!==void 0)return n.approvalKey(t.action.input)}}async function runModelCallWithRetries(e,t,n){for(let r=1;;r++){throwIfTurnAborted(n);try{return await e(r)}catch(e){if(throwIfTurnAborted(n),r===3||classifyModelCallError(e)!==`retry`)throw e;let i=500*2**(r-1)+Math.floor(Math.random()*250);log.warn(`model call failed transiently — retrying`,{attempt:r,delayMs:i,sessionId:t.sessionId,turnId:t.turnId,error:e}),await new Promise(e=>setTimeout(e,i))}}}export{appendMissingToolResultMessages,createToolLoopHarness};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { HarnessSession, SessionStateMap } from "#harness/types.js";
|
|
2
|
+
import type { RuntimeToolResultActionResult } from "#shared/action-types.js";
|
|
3
|
+
export declare function toolRunAnswerToken(runId: string, seq: number): string;
|
|
4
|
+
/** A workflow tool run the active turn waits on. Background runs live in the task index. */
|
|
5
|
+
export interface ToolRunRecord {
|
|
6
|
+
readonly callId: string;
|
|
7
|
+
readonly hookToken: string;
|
|
8
|
+
readonly runId: string;
|
|
9
|
+
readonly toolName: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function getToolRuns(state: SessionStateMap | undefined): readonly ToolRunRecord[];
|
|
12
|
+
export declare function findToolRun(state: SessionStateMap | undefined, callId: string): ToolRunRecord | undefined;
|
|
13
|
+
export declare function recordToolRun<T extends {
|
|
14
|
+
readonly state?: SessionStateMap;
|
|
15
|
+
}>(session: T, record: ToolRunRecord): T;
|
|
16
|
+
export declare function removeToolRun<T extends {
|
|
17
|
+
readonly state?: SessionStateMap;
|
|
18
|
+
}>(session: T, callId: string): T;
|
|
19
|
+
export declare function clearToolRuns(session: HarnessSession): HarnessSession;
|
|
20
|
+
/** The turn inbox is shared; a result settles a call only if the turn recorded that run. */
|
|
21
|
+
export declare function isInboxToolResultFromRecordedRun(state: SessionStateMap | undefined, result: RuntimeToolResultActionResult): boolean;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const TOOL_RUNS_STATE_KEY=`eve.runtime.toolRuns`;function toolRunAnswerToken(e,t){return`eve:tool-run-answer:${e}:${t}`}function getToolRuns(t){let n=t?.[TOOL_RUNS_STATE_KEY];return Array.isArray(n)?n:[]}function findToolRun(e,t){return getToolRuns(e).find(e=>e.callId===t)}function recordToolRun(e,t){return writeToolRuns(e,[...getToolRuns(e.state).filter(e=>e.callId!==t.callId),t])}function removeToolRun(e,t){let n=getToolRuns(e.state),r=n.filter(e=>e.callId!==t);return r.length===n.length?e:writeToolRuns(e,r)}function clearToolRuns(e){return getToolRuns(e.state).length===0?e:writeToolRuns(e,[])}function isInboxToolResultFromRecordedRun(e,t){let n=findToolRun(e,t.callId);return n!==void 0&&n.toolName===t.toolName}function writeToolRuns(t,n){let r={...t.state};return n.length===0?delete r[TOOL_RUNS_STATE_KEY]:r[TOOL_RUNS_STATE_KEY]=n,{...t,state:Object.keys(r).length>0?r:void 0}}export{clearToolRuns,findToolRun,getToolRuns,isInboxToolResultFromRecordedRun,recordToolRun,removeToolRun,toolRunAnswerToken};
|