eve 0.51.0 → 0.52.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 +46 -0
- package/dist/src/channel/session.d.ts +2 -1
- package/dist/src/channel/session.js +1 -1
- package/dist/src/channel/types.d.ts +4 -1
- package/dist/src/chunks/{use-eve-agent-C3vUG5g2.js → use-eve-agent-3DZuvuWE.js} +17 -6
- package/dist/src/chunks/{use-eve-agent-B4xN7-fK.js → use-eve-agent-D7apPojZ.js} +17 -6
- package/dist/src/cli/agent-command.js +1 -1
- package/dist/src/cli/commands/agent-instructions.d.ts +3 -1
- package/dist/src/cli/commands/agent-instructions.js +1 -1
- package/dist/src/cli/commands/build.js +1 -1
- package/dist/src/cli/commands/deploy.js +1 -1
- package/dist/src/cli/commands/init-agent-workspace.js +1 -1
- package/dist/src/cli/commands/init-repl.js +1 -1
- package/dist/src/cli/commands/init.js +1 -1
- package/dist/src/cli/commands/integration-connect.js +1 -1
- package/dist/src/cli/commands/link.js +1 -1
- package/dist/src/cli/commands/preconditions.js +1 -1
- package/dist/src/cli/commands/register-project-commands.d.ts +1 -1
- package/dist/src/cli/commands/register-project-commands.js +1 -1
- package/dist/src/cli/commands/registry.js +1 -1
- package/dist/src/cli/dev/boot-progress.d.ts +3 -0
- package/dist/src/cli/dev/boot-progress.js +1 -0
- package/dist/src/cli/dev/environment.js +1 -1
- package/dist/src/cli/dev/run-interactive-ui.js +1 -1
- package/dist/src/cli/dev/tui/prompt-command-handler.js +1 -1
- package/dist/src/cli/dev/tui/setup-commands.d.ts +3 -1
- package/dist/src/cli/dev/tui/setup-commands.js +1 -1
- package/dist/src/cli/run.d.ts +4 -0
- package/dist/src/cli/run.js +3 -3
- package/dist/src/cli/telemetry/command.d.ts +9 -0
- package/dist/src/cli/telemetry/command.js +1 -0
- package/dist/src/cli/telemetry/flush.d.ts +2 -0
- package/dist/src/cli/telemetry/flush.js +1 -0
- package/dist/src/cli/telemetry/identity.d.ts +13 -0
- package/dist/src/cli/telemetry/identity.js +1 -0
- package/dist/src/cli/telemetry/index.d.ts +25 -0
- package/dist/src/cli/telemetry/index.js +3 -0
- package/dist/src/cli/telemetry/preference.d.ts +9 -0
- package/dist/src/cli/telemetry/preference.js +1 -0
- package/dist/src/client/open-stream.js +1 -1
- package/dist/src/client/session-controls.d.ts +3 -0
- package/dist/src/client/session-controls.js +1 -1
- package/dist/src/client/session.d.ts +4 -1
- package/dist/src/client/types.d.ts +3 -2
- package/dist/src/compiled/.vendor-stamp.json +11 -11
- package/dist/src/compiled/@clack/core/LICENSE +9 -0
- package/dist/src/compiled/@clack/core/index.d.ts +363 -0
- package/dist/src/compiled/@clack/core/index.js +20 -0
- package/dist/src/compiled/@eve/catalog/index.js +1 -1
- package/dist/src/compiled/@modelcontextprotocol/server/index.d.ts +1 -0
- package/dist/src/compiled/@vercel/sandbox/api-client/api-client.d.ts +34 -92
- package/dist/src/compiled/@vercel/sandbox/api-client/base-client.d.ts +1 -1
- package/dist/src/compiled/@vercel/sandbox/api-client/index.d.ts +1 -1
- package/dist/src/compiled/@vercel/sandbox/api-client/validators.d.ts +13 -29
- package/dist/src/compiled/@vercel/sandbox/constants.d.ts +11 -1
- package/dist/src/compiled/@vercel/sandbox/index.d.ts +3 -3
- package/dist/src/compiled/@vercel/sandbox/index.js +9 -9
- package/dist/src/compiled/@vercel/sandbox/sandbox-user.d.ts +5 -6
- package/dist/src/compiled/@vercel/sandbox/sandbox.d.ts +79 -67
- package/dist/src/compiled/@vercel/sandbox/session.d.ts +5 -3
- package/dist/src/compiled/@vercel/sandbox/snapshot.d.ts +9 -0
- package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/api-client/api-client.d.ts +86 -1
- package/dist/src/compiled/@vercel/sandbox-drives/api-client/index.d.ts +2 -0
- package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/api-client/validators.d.ts +26 -1
- package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/constants.d.ts +2 -2
- package/dist/src/compiled/@vercel/{sandbox → sandbox-drives}/drive.d.ts +10 -0
- package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/index.d.ts +3 -2
- package/dist/src/compiled/@vercel/sandbox-drives/index.js +9 -0
- package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/sandbox.d.ts +35 -6
- package/dist/src/compiled/@workflow/core/index.js +1 -1
- package/dist/src/compiled/@workflow/core/private.d.ts +2 -4
- package/dist/src/compiled/@workflow/core/private.js +1 -1
- package/dist/src/compiled/@workflow/core/runtime/constants.d.ts +9 -7
- package/dist/src/compiled/@workflow/core/runtime/helpers.d.ts +13 -0
- package/dist/src/compiled/@workflow/core/runtime/suspension-handler.d.ts +54 -1
- package/dist/src/compiled/@workflow/core/runtime.js +3 -3
- package/dist/src/compiled/@workflow/core/serialization/types.d.ts +7 -0
- package/dist/src/compiled/@workflow/core/serialization.d.ts +24 -2
- package/dist/src/compiled/@workflow/core/version.d.ts +1 -1
- package/dist/src/compiled/@workflow/core/workflow.js +1 -1
- package/dist/src/compiled/@workflow/errors/error-codes.d.ts +2 -0
- package/dist/src/compiled/@workflow/errors/index.d.ts +19 -0
- package/dist/src/compiled/@workflow/errors/index.js +1 -1
- package/dist/src/compiled/@workflow/world/analytics.d.ts +46 -2
- package/dist/src/compiled/@workflow/world/events.d.ts +26 -1
- package/dist/src/compiled/@workflow/world/index.d.ts +1 -1
- package/dist/src/compiled/@workflow/world/runs.d.ts +2 -2
- package/dist/src/compiled/@workflow/world-local/index.js +3 -3
- package/dist/src/compiled/@workflow/world-vercel/index.js +12 -12
- package/dist/src/compiled/_chunks/node/{auth-BSKyPAEP.js → auth-Bx1Aoyfo.js} +1 -1
- package/dist/src/compiled/_chunks/node/{auth-YpKlwhP1.js → auth-CA8ZMfB8.js} +1 -1
- package/dist/src/compiled/_chunks/node/esm-CE0tAvRh.js +7 -0
- package/dist/src/compiled/_chunks/node/version-BC6t2Txc.js +1 -0
- package/dist/src/compiled/_chunks/node/version-DSQqVZ5T.js +1 -0
- package/dist/src/compiled/_chunks/workflow/{attribute-changes-BwAadFfB.js → attribute-changes-03lzo29R.js} +1 -1
- package/dist/src/compiled/_chunks/workflow/dist-BIdMK5N8.js +40 -0
- package/dist/src/compiled/_chunks/workflow/dist-DMQ3CtWt.js +3 -0
- package/dist/src/compiled/_chunks/workflow/frames-Boesh7kU.js +3 -0
- package/dist/src/compiled/_chunks/workflow/{private-CZFMABEf.js → private-CKx3PkSS.js} +1 -1
- package/dist/src/compiled/_chunks/workflow/{resume-hook-BToMtPbH.js → resume-hook-C6eL-S_T.js} +1 -1
- package/dist/src/compiled/_chunks/workflow/run-BV0S6Zc2.js +1 -0
- package/dist/src/compiled/_chunks/workflow/sleep-Bh3jP9ii.js +1 -0
- package/dist/src/compiled/_chunks/workflow/wait-until-l-cwfJvm.js +15 -0
- package/dist/src/compiled/_chunks/workflow/{ws-transport-PnVVxT0R.js → ws-transport-BagXNxCE.js} +1 -1
- package/dist/src/compiler/compile-from-memory.d.ts +1 -0
- package/dist/src/compiler/extension-compatibility.d.ts +38 -20
- 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-agent-config.js +1 -1
- package/dist/src/compiler/normalize-channel.js +1 -1
- package/dist/src/compiler/normalize-schedule.js +1 -1
- package/dist/src/compiler/normalize-tool.js +1 -1
- package/dist/src/context/dynamic-tool-lifecycle.js +1 -1
- package/dist/src/discover/extensions.d.ts +2 -0
- package/dist/src/discover/extensions.js +1 -1
- package/dist/src/discover/filesystem.d.ts +1 -0
- package/dist/src/discover/filesystem.js +1 -1
- package/dist/src/discover/project.js +1 -1
- package/dist/src/evals/runner/execute-task.js +1 -1
- package/dist/src/evals/session-cleanup.d.ts +7 -0
- package/dist/src/evals/session-cleanup.js +1 -0
- package/dist/src/evals/session.d.ts +4 -0
- package/dist/src/evals/session.js +1 -1
- package/dist/src/eve-channel/index.js +1 -1
- package/dist/src/eve-channel/request.d.ts +1 -0
- package/dist/src/eve-channel/request.js +1 -1
- package/dist/src/execution/activity-collector.js +1 -1
- package/dist/src/execution/activity-work.d.ts +8 -0
- package/dist/src/execution/activity-work.js +1 -1
- package/dist/src/execution/cancel-indexed-session-tasks-step.d.ts +6 -0
- package/dist/src/execution/cancel-indexed-session-tasks-step.js +1 -0
- package/dist/src/execution/continuation-conflict-step.js +1 -1
- package/dist/src/execution/coordination-dispatch-shared.d.ts +2 -2
- package/dist/src/execution/coordination-dispatch-shared.js +1 -1
- package/dist/src/execution/coordination-dispatch-step.js +1 -1
- package/dist/src/execution/create-session-step.js +1 -1
- package/dist/src/execution/durable-session-migrations/turn-workflow.d.ts +1 -1
- package/dist/src/execution/inline-turn.d.ts +4 -2
- package/dist/src/execution/inline-turn.js +1 -1
- package/dist/src/execution/next-driver-action.d.ts +0 -3
- package/dist/src/execution/parked-delivery-wait.js +1 -1
- package/dist/src/execution/proxied-deliver-step.js +1 -1
- package/dist/src/execution/run-session-limits.d.ts +5 -5
- package/dist/src/execution/sandbox/bindings/vercel-create-sdk.js +1 -1
- package/dist/src/execution/sandbox/bindings/vercel-sdk-types.d.ts +4 -4
- package/dist/src/execution/sandbox/bindings/vercel.js +1 -1
- package/dist/src/execution/session-activity-projection.js +1 -1
- package/dist/src/execution/session-activity.js +1 -1
- package/dist/src/execution/session-timeout-workflow.js +1 -1
- package/dist/src/execution/session.d.ts +1 -0
- package/dist/src/execution/session.js +1 -1
- package/dist/src/execution/settle-cancelled-turn-step.js +1 -1
- package/dist/src/execution/tasks/child/steps.d.ts +19 -1
- package/dist/src/execution/tasks/child/steps.js +1 -1
- package/dist/src/execution/tasks/child/workflow.d.ts +2 -0
- package/dist/src/execution/tasks/child/workflow.js +1 -1
- package/dist/src/execution/tasks/parent/control-shared.js +1 -1
- package/dist/src/execution/tasks/parent/delegate.d.ts +2 -0
- package/dist/src/execution/tasks/parent/delegate.js +1 -1
- package/dist/src/execution/tasks/parent/hitl-proxy-steps.js +1 -1
- package/dist/src/execution/tasks/parent/subagent-task-projection.d.ts +26 -0
- package/dist/src/execution/tasks/parent/subagent-task-projection.js +1 -0
- package/dist/src/execution/tasks/parent/tool-execution.js +1 -1
- package/dist/src/execution/terminate-child-sessions-step.js +1 -1
- package/dist/src/execution/tools/sleep-workflow.d.ts +3 -0
- package/dist/src/execution/tools/sleep-workflow.js +1 -0
- package/dist/src/execution/tools/sleep.d.ts +1 -5
- package/dist/src/execution/tools/sleep.js +1 -1
- package/dist/src/execution/tools/subagent/accept-event-step.js +1 -1
- package/dist/src/execution/tools/subagent/invoke-agent.d.ts +1 -7
- package/dist/src/execution/tools/subagent/invoke-agent.js +1 -1
- package/dist/src/execution/tools/subagent/invoke-step.js +1 -1
- package/dist/src/execution/tools/workflow/ask.d.ts +1 -2
- package/dist/src/execution/tools/workflow/ask.js +1 -1
- package/dist/src/execution/tools/workflow/body.d.ts +6 -1
- package/dist/src/execution/tools/workflow/body.js +1 -1
- package/dist/src/execution/tools/workflow/cancel.js +1 -1
- package/dist/src/execution/tools/workflow/messages.d.ts +9 -8
- package/dist/src/execution/tools/workflow/messages.js +1 -1
- package/dist/src/execution/tools/workflow/owner-inbox.d.ts +2 -2
- package/dist/src/execution/tools/workflow/owner-inbox.js +1 -1
- package/dist/src/execution/tools/workflow/owner.d.ts +5 -11
- package/dist/src/execution/tools/workflow/owner.js +1 -1
- package/dist/src/execution/tools/workflow/run-control.d.ts +0 -4
- package/dist/src/execution/tools/workflow/run-control.js +1 -1
- package/dist/src/execution/tools/workflow/start.d.ts +5 -14
- package/dist/src/execution/tools/workflow/start.js +1 -1
- package/dist/src/execution/tools/workflow/workflow.d.ts +1 -1
- package/dist/src/execution/tools/workflow/workflow.js +1 -1
- package/dist/src/execution/turn-cancellation-control.d.ts +1 -0
- package/dist/src/execution/turn-cancellation-control.js +1 -1
- package/dist/src/execution/turn-cancellation-token.d.ts +1 -0
- package/dist/src/execution/turn-control-receiver.d.ts +3 -0
- package/dist/src/execution/turn-control-receiver.js +1 -1
- package/dist/src/execution/turn-dispatch.d.ts +2 -0
- package/dist/src/execution/turn-dispatch.js +1 -1
- package/dist/src/execution/turn-workflow-tool-run.d.ts +2 -8
- package/dist/src/execution/turn-workflow-tool-run.js +1 -1
- package/dist/src/execution/turn-workflow.d.ts +1 -0
- 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 +10 -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.v5.d.ts +341 -0
- package/dist/src/execution/wire/session-inbox-wire.v5.js +1 -0
- package/dist/src/execution/wire/session-inbox-wire.v5.migration.d.ts +3 -0
- package/dist/src/execution/wire/session-inbox-wire.v5.migration.js +1 -0
- package/dist/src/execution/wire/session-inbox-wire.v6.d.ts +341 -0
- package/dist/src/execution/wire/session-inbox-wire.v6.js +1 -0
- package/dist/src/execution/workflow-entry.js +1 -1
- package/dist/src/execution/workflow-runtime.js +1 -1
- package/dist/src/execution/workflow-steps.js +1 -1
- package/dist/src/harness/emission-state.js +1 -1
- package/dist/src/harness/session-limit-continuation.d.ts +5 -5
- package/dist/src/harness/session-limit-continuation.js +1 -1
- package/dist/src/harness/session-limit-enforcement.d.ts +4 -4
- package/dist/src/harness/session-limit-enforcement.js +1 -1
- package/dist/src/harness/session-usage-limits.d.ts +48 -0
- package/dist/src/harness/session-usage-limits.js +1 -0
- package/dist/src/harness/tool-loop.js +2 -2
- package/dist/src/harness/turn-client-context.d.ts +9 -0
- package/dist/src/harness/turn-client-context.js +1 -0
- package/dist/src/harness/turn-tag-state.d.ts +17 -20
- package/dist/src/harness/turn-tag-state.js +1 -1
- package/dist/src/harness/types.d.ts +5 -0
- package/dist/src/harness/workflow-tool-runs.d.ts +0 -1
- package/dist/src/harness/workflow-tool-runs.js +1 -1
- package/dist/src/internal/application/build-output-environment.d.ts +1 -0
- package/dist/src/internal/application/build-output-environment.js +1 -1
- package/dist/src/internal/application/package.js +1 -1
- package/dist/src/internal/application/paths.js +1 -1
- package/dist/src/internal/authored-definition/core.js +1 -1
- package/dist/src/internal/authored-definition/schema-backed.js +1 -1
- package/dist/src/internal/eve-project-root.d.ts +8 -0
- package/dist/src/internal/eve-project-root.js +1 -0
- package/dist/src/internal/invocation/workflow-execution.js +1 -1
- package/dist/src/internal/mcp/streamable-http-server.d.ts +29 -1
- package/dist/src/internal/mcp/streamable-http-server.js +1 -1
- package/dist/src/internal/nitro/host/build-application.js +1 -1
- package/dist/src/internal/nitro/host/create-application-nitro.d.ts +1 -0
- package/dist/src/internal/nitro/host/create-application-nitro.js +1 -1
- package/dist/src/internal/nitro/host/types.d.ts +2 -0
- package/dist/src/internal/nitro/host/vercel-build-output-config.d.ts +1 -0
- package/dist/src/internal/nitro/host/vercel-build-output-config.js +1 -1
- package/dist/src/internal/project-context.d.ts +13 -8
- package/dist/src/internal/project-context.js +1 -1
- package/dist/src/internal/vercel/build-agent-workspace.d.ts +1 -1
- package/dist/src/internal/vercel/build-agent-workspace.js +1 -1
- package/dist/src/internal/vercel/eve-service-contribution.d.ts +1 -0
- package/dist/src/internal/vercel/eve-service-contribution.js +1 -1
- package/dist/src/internal/workflow/reference.d.ts +2 -0
- package/dist/src/internal/workflow/reference.js +1 -0
- package/dist/src/internal/workflow/runtime.d.ts +6 -0
- package/dist/src/internal/workflow/runtime.js +1 -1
- package/dist/src/internal/workflow-bundle/authored-workflow-directives.d.ts +1 -3
- package/dist/src/internal/workflow-bundle/authored-workflow-directives.js +1 -1
- package/dist/src/internal/workflow-bundle/authored-workflow-modules.d.ts +1 -11
- package/dist/src/internal/workflow-bundle/authored-workflow-modules.js +1 -1
- package/dist/src/internal/workflow-bundle/builder.js +1 -1
- package/dist/src/internal/workflow-bundle/dynamic-tool-transform.js +1 -1
- package/dist/src/internal/workflow-bundle/workflow-builders.d.ts +1 -3
- package/dist/src/internal/workflow-bundle/workflow-builders.js +1 -1
- package/dist/src/internal/workflow-bundle/workflow-transformer.d.ts +1 -1
- package/dist/src/internal/workflow-bundle/workflow-transformer.js +2 -2
- package/dist/src/protocol/message.d.ts +3 -2
- package/dist/src/public/channels/mcp.js +1 -1
- package/dist/src/public/channels/slack/activity-plan.d.ts +4 -0
- package/dist/src/public/channels/slack/activity-plan.js +1 -0
- package/dist/src/public/channels/slack/activity.d.ts +45 -2
- package/dist/src/public/channels/slack/activity.js +2 -1
- package/dist/src/public/channels/slack/index.d.ts +1 -1
- package/dist/src/public/channels/slack/index.js +1 -1
- package/dist/src/public/channels/slack/slackChannel.js +1 -1
- package/dist/src/public/memory/index.js +1 -1
- package/dist/src/public/models/openai/chatgpt/model.js +2 -2
- package/dist/src/public/models/openai/chatgpt/transport.js +1 -1
- package/dist/src/public/nuxt/index.js +1 -1
- package/dist/src/public/nuxt/module.d.ts +3 -2
- package/dist/src/public/nuxt/module.js +1 -1
- package/dist/src/public/sandbox/vercel-sandbox.d.ts +9 -5
- package/dist/src/public/sandbox/vercel.d.ts +1 -1
- package/dist/src/public/sandbox/vercel.js +1 -1
- package/dist/src/public/tools/index.d.ts +3 -1
- package/dist/src/public/tools/index.js +1 -1
- package/dist/src/runtime/resolve-agent.js +1 -1
- package/dist/src/runtime/subagents/workflow.js +1 -1
- package/dist/src/self-modification/agent.d.ts +22 -0
- package/dist/src/self-modification/agent.js +1 -0
- package/dist/src/self-modification/extension/classify-registry-item.d.ts +19 -0
- package/dist/src/self-modification/extension/classify-registry-item.js +1 -0
- package/dist/src/self-modification/extension/eve-add.d.ts +56 -0
- package/dist/src/self-modification/extension/eve-add.js +2 -0
- package/dist/src/self-modification/extension/extension.d.ts +2 -0
- package/dist/src/self-modification/extension/extension.js +1 -0
- package/dist/src/self-modification/extension/instructions.d.ts +4 -0
- package/dist/src/self-modification/extension/instructions.js +23 -0
- package/dist/src/self-modification/extension/source-lock.d.ts +2 -0
- package/dist/src/self-modification/extension/source-lock.js +1 -0
- package/dist/src/self-modification/extension/tools/edit_file.d.ts +16 -0
- package/dist/src/self-modification/extension/tools/edit_file.js +1 -0
- package/dist/src/self-modification/extension/tools/registry_add.d.ts +52 -0
- package/dist/src/self-modification/extension/tools/registry_add.js +1 -0
- package/dist/src/self-modification/extension/tools/search_models.d.ts +22 -0
- package/dist/src/self-modification/extension/tools/search_models.js +1 -0
- package/dist/src/self-modification/extension/tools/search_registry.d.ts +103 -0
- package/dist/src/self-modification/extension/tools/search_registry.js +1 -0
- package/dist/src/self-modification/filesystem.d.ts +6 -0
- package/dist/src/self-modification/filesystem.js +1 -0
- package/dist/src/self-modification/sandbox.d.ts +2 -0
- package/dist/src/self-modification/sandbox.js +1 -0
- package/dist/src/services/dev-client/target.d.ts +3 -1
- package/dist/src/setup/boxes/select-model.d.ts +3 -21
- package/dist/src/setup/boxes/select-model.js +1 -1
- package/dist/src/setup/cli/prompt-ui.js +4 -4
- package/dist/src/setup/cli/select-component.d.ts +1 -1
- package/dist/src/setup/cli/select-component.js +1 -1
- package/dist/src/setup/flows/model.d.ts +3 -0
- package/dist/src/setup/flows/model.js +1 -1
- package/dist/src/setup/prompter.js +1 -1
- package/dist/src/setup/scaffold/create/project.js +1 -1
- package/dist/src/setup/scaffold/update/web-options.js +1 -1
- package/dist/src/shared/action-types.d.ts +35 -22
- package/dist/src/shared/action-types.js +1 -1
- package/dist/src/shared/agent-definition.d.ts +13 -0
- package/dist/src/shared/agent-turn-outcome.d.ts +2 -0
- package/dist/src/shared/agent-turn-outcome.js +1 -1
- package/dist/src/shared/extension-package-contract.d.ts +2 -0
- package/dist/src/shared/extension-package-contract.js +1 -1
- package/dist/src/shared/gateway-model-catalog.d.ts +21 -0
- package/dist/src/shared/gateway-model-catalog.js +1 -0
- package/dist/src/shared/sandbox-network-policy.d.ts +1 -1
- package/dist/src/shared/token-usage.d.ts +11 -15
- package/dist/src/shared/token-usage.js +1 -1
- package/dist/src/shared/workflow-tool-context.d.ts +2 -0
- package/dist/src/shared/workflow-tool-context.js +1 -0
- package/dist/src/subagents/callback-route.js +1 -1
- package/dist/src/subagents/event-proxy-step.js +1 -1
- package/dist/src/subagents/start-remote.js +1 -1
- package/dist/src/subagents/token-budget.js +1 -1
- package/dist/src/svelte/index.js +1 -1
- package/dist/src/svelte/use-eve-agent.js +1 -1
- package/dist/src/tasks/types.d.ts +18 -1
- package/dist/src/tasks/types.js +1 -1
- package/dist/src/tools/behavior.d.ts +5 -0
- package/dist/src/tools/definition.d.ts +16 -12
- package/dist/src/tools/definition.js +1 -1
- package/dist/src/tools/dynamic.d.ts +2 -2
- package/dist/src/tools/provided/sleep.d.ts +4 -4
- package/dist/src/tools/provided/sleep.js +1 -1
- package/dist/src/tools/task.d.ts +28 -80
- package/dist/src/tools/task.js +1 -1
- package/dist/src/tools/workflow-definition.d.ts +60 -0
- package/dist/src/tools/workflow-definition.js +1 -0
- package/dist/src/vue/index.js +1 -1
- package/dist/src/vue/use-eve-agent.js +1 -1
- package/docs/agent-config.md +24 -19
- package/docs/channels/eve.mdx +1 -1
- package/docs/channels/mcp.mdx +25 -3
- package/docs/concepts/built-in-tools.md +1 -1
- package/docs/concepts/execution-model-and-durability.mdx +13 -2
- package/docs/concepts/sessions-runs-and-streaming.md +9 -1
- package/docs/guides/client/messages.mdx +1 -1
- package/docs/guides/client/streaming.mdx +1 -1
- package/docs/guides/deployment/vercel.mdx +3 -1
- package/docs/guides/frontend/overview.mdx +1 -1
- package/docs/memory/overview.mdx +41 -12
- package/docs/reference/cli.md +31 -33
- package/docs/reference/meta.json +1 -4
- package/docs/reference/telemetry.md +56 -0
- package/docs/reference/typescript-api.md +38 -35
- package/docs/sandbox.mdx +1 -1
- package/docs/tools/overview.mdx +59 -18
- package/docs/tools/workflows.mdx +146 -70
- package/package.json +38 -19
- package/dist/src/compiled/@vercel/sandbox-delete/api-client/index.d.ts +0 -2
- package/dist/src/compiled/@vercel/sandbox-delete/index.js +0 -9
- package/dist/src/compiled/@vercel/sandbox-stable/LICENSE +0 -201
- package/dist/src/compiled/@vercel/sandbox-stable/_async-retry.d.ts +0 -8
- package/dist/src/compiled/@vercel/sandbox-stable/_workflow-serde.d.ts +0 -5
- package/dist/src/compiled/@vercel/sandbox-stable/api-client/api-client.d.ts +0 -1456
- package/dist/src/compiled/@vercel/sandbox-stable/api-client/api-error.d.ts +0 -29
- package/dist/src/compiled/@vercel/sandbox-stable/api-client/base-client.d.ts +0 -39
- package/dist/src/compiled/@vercel/sandbox-stable/api-client/file-writer.d.ts +0 -66
- package/dist/src/compiled/@vercel/sandbox-stable/api-client/index.d.ts +0 -2
- package/dist/src/compiled/@vercel/sandbox-stable/api-client/validators.d.ts +0 -899
- package/dist/src/compiled/@vercel/sandbox-stable/api-client/with-retry.d.ts +0 -10
- package/dist/src/compiled/@vercel/sandbox-stable/auth/error.d.ts +0 -15
- package/dist/src/compiled/@vercel/sandbox-stable/auth/file.d.ts +0 -18
- package/dist/src/compiled/@vercel/sandbox-stable/auth/index.d.ts +0 -6
- package/dist/src/compiled/@vercel/sandbox-stable/auth/oauth.d.ts +0 -111
- package/dist/src/compiled/@vercel/sandbox-stable/auth/poll-for-token.d.ts +0 -28
- package/dist/src/compiled/@vercel/sandbox-stable/auth/project.d.ts +0 -40
- package/dist/src/compiled/@vercel/sandbox-stable/command.d.ts +0 -292
- package/dist/src/compiled/@vercel/sandbox-stable/constants.d.ts +0 -5
- package/dist/src/compiled/@vercel/sandbox-stable/execution-context.d.ts +0 -116
- package/dist/src/compiled/@vercel/sandbox-stable/filesystem.d.ts +0 -258
- package/dist/src/compiled/@vercel/sandbox-stable/index.d.ts +0 -12
- package/dist/src/compiled/@vercel/sandbox-stable/index.js +0 -1
- package/dist/src/compiled/@vercel/sandbox-stable/network-policy.d.ts +0 -169
- package/dist/src/compiled/@vercel/sandbox-stable/proxy.d.ts +0 -55
- package/dist/src/compiled/@vercel/sandbox-stable/sandbox-user.d.ts +0 -212
- package/dist/src/compiled/@vercel/sandbox-stable/sandbox.d.ts +0 -1216
- package/dist/src/compiled/@vercel/sandbox-stable/session.d.ts +0 -433
- package/dist/src/compiled/@vercel/sandbox-stable/snapshot.d.ts +0 -229
- package/dist/src/compiled/@vercel/sandbox-stable/utils/get-credentials.d.ts +0 -21
- package/dist/src/compiled/@vercel/sandbox-stable/utils/paginator.d.ts +0 -16
- package/dist/src/compiled/@vercel/sandbox-stable/utils/resolveSignal.d.ts +0 -15
- package/dist/src/compiled/@vercel/sandbox-stable/utils/sandbox-snapshot.d.ts +0 -11
- package/dist/src/compiled/@vercel/sandbox-stable/utils/types.d.ts +0 -11
- package/dist/src/compiled/_chunks/node/decode_jwt-Col8JOnf.js +0 -7
- package/dist/src/compiled/_chunks/node/version-BYHw-SDY.js +0 -1
- package/dist/src/compiled/_chunks/node/version-DH6yRy-M.js +0 -1
- package/dist/src/compiled/_chunks/workflow/dist-CgbVZs5l.js +0 -40
- package/dist/src/compiled/_chunks/workflow/dist-DjojkP5e.js +0 -3
- package/dist/src/compiled/_chunks/workflow/frames-CZ9eHShe.js +0 -3
- package/dist/src/compiled/_chunks/workflow/run-DzyAoGh4.js +0 -1
- package/dist/src/compiled/_chunks/workflow/sleep-3_A5uOp-.js +0 -1
- package/dist/src/compiled/_chunks/workflow/wait-until-BtySPYD0.js +0 -15
- package/dist/src/harness/session-token-limits.d.ts +0 -41
- package/dist/src/harness/session-token-limits.js +0 -1
- package/dist/src/harness/turn-sleep.d.ts +0 -12
- package/dist/src/harness/turn-sleep.js +0 -1
- package/dist/src/internal/agent-workspace.d.ts +0 -15
- package/dist/src/internal/agent-workspace.js +0 -1
- package/dist/src/node_modules/.pnpm/@clack_core@1.3.1/node_modules/@clack/core/dist/index.js +0 -16
- package/dist/src/node_modules/.pnpm/fast-string-truncated-width@3.0.3/node_modules/fast-string-truncated-width/dist/index.js +0 -1
- package/dist/src/node_modules/.pnpm/fast-string-truncated-width@3.0.3/node_modules/fast-string-truncated-width/dist/utils.js +0 -1
- package/dist/src/node_modules/.pnpm/fast-string-width@3.0.2/node_modules/fast-string-width/dist/index.js +0 -1
- package/dist/src/node_modules/.pnpm/fast-wrap-ansi@0.2.2/node_modules/fast-wrap-ansi/lib/main.js +0 -5
- package/dist/src/node_modules/.pnpm/sisteransi@1.0.5/node_modules/sisteransi/src/index.js +0 -1
- package/dist/src/public/workflow/index.d.ts +0 -5
- package/dist/src/public/workflow/index.js +0 -1
- /package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/LICENSE +0 -0
- /package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/_async-retry.d.ts +0 -0
- /package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/_workflow-serde.d.ts +0 -0
- /package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/api-client/api-error.d.ts +0 -0
- /package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/api-client/base-client.d.ts +0 -0
- /package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/api-client/file-writer.d.ts +0 -0
- /package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/api-client/with-retry.d.ts +0 -0
- /package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/auth/error.d.ts +0 -0
- /package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/auth/file.d.ts +0 -0
- /package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/auth/index.d.ts +0 -0
- /package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/auth/oauth.d.ts +0 -0
- /package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/auth/poll-for-token.d.ts +0 -0
- /package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/auth/project.d.ts +0 -0
- /package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/command.d.ts +0 -0
- /package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/execution-context.d.ts +0 -0
- /package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/filesystem.d.ts +0 -0
- /package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/network-policy.d.ts +0 -0
- /package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/proxy.d.ts +0 -0
- /package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/sandbox-user.d.ts +0 -0
- /package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/session.d.ts +0 -0
- /package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/snapshot.d.ts +0 -0
- /package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/utils/get-credentials.d.ts +0 -0
- /package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/utils/paginator.d.ts +0 -0
- /package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/utils/resolveSignal.d.ts +0 -0
- /package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/utils/sandbox-snapshot.d.ts +0 -0
- /package/dist/src/compiled/@vercel/{sandbox-delete → sandbox-drives}/utils/types.d.ts +0 -0
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Session token limit policy for the tool-loop harness.
|
|
2
|
+
* Session token and token-cost limit policy for the tool-loop harness.
|
|
3
3
|
*
|
|
4
4
|
* Two seams into the harness step:
|
|
5
5
|
*
|
|
6
6
|
* 1. {@link applySessionLimitContinuation} runs after pending-input
|
|
7
7
|
* resolution and acts on the user's answer to a continuation prompt —
|
|
8
8
|
* grant a fresh budget window, or cancel the in-flight turn tree.
|
|
9
|
-
* 2. {@link
|
|
9
|
+
* 2. {@link enforceSessionUsageLimit} runs before each model call and, when
|
|
10
10
|
* the session is over budget, parks it on the deterministic continuation
|
|
11
11
|
* prompt (sessions that can reach a human) or fails it (task-mode sessions
|
|
12
12
|
* without HITL — nobody can answer the prompt).
|
|
@@ -24,7 +24,7 @@ interface SessionLimitPolicyInput {
|
|
|
24
24
|
* Acts on a resolved session-limit continuation answer.
|
|
25
25
|
*
|
|
26
26
|
* Granted: bumps the runtime token limits via
|
|
27
|
-
* {@link
|
|
27
|
+
* {@link bumpSessionRuntimeUsageLimits} and lets the step continue
|
|
28
28
|
* transparently.
|
|
29
29
|
* Declined: a user decision, not an error — the decline cancels the
|
|
30
30
|
* in-flight turn tree through the standard cancellation path, settling as
|
|
@@ -53,7 +53,7 @@ export declare function applySessionLimitContinuation(input: SessionLimitPolicyI
|
|
|
53
53
|
* task-mode sessions without HITL fail fast with
|
|
54
54
|
* `SESSION_TOKEN_LIMIT_REACHED`.
|
|
55
55
|
*/
|
|
56
|
-
export declare function
|
|
56
|
+
export declare function enforceSessionUsageLimit(input: SessionLimitPolicyInput & {
|
|
57
57
|
readonly messages: readonly ModelMessage[];
|
|
58
58
|
}): Promise<StepResult | null>;
|
|
59
59
|
export {};
|
|
@@ -1 +1 @@
|
|
|
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{
|
|
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{bumpSessionRuntimeUsageLimits,getSessionTokenUsage,getSessionUsageLimitViolation}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:bumpSessionRuntimeUsageLimits(e.session)};if(!(e.config.mode===`conversation`||e.session.continuationToken!==``)){let t=getSessionUsageLimitViolation(e.session);return{result:t===null?{next:{done:!0,output:``},session:e.session}:await failSessionUsageLimit({...e,violation:t}),session:e.session}}throw new SessionLimitDeclinedError}async function enforceSessionUsageLimit(e){let t=getSessionUsageLimitViolation(e.session);if(t===null)return null;let{emit:n}=e;return violationWindow(t)>0&&n!==void 0&&(e.config.mode===`conversation`||e.config.capabilities?.requestInput===!0)?parkOnSessionUsageLimit({...e,emit:n,violation:t}):failSessionUsageLimit({...e,violation:t})}async function parkOnSessionUsageLimit(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 violationWindow(e){return e.kind===`token-cost`?e.limitUsd:e.limit}function formatSessionLimitMessage(e){return e===`token-cost`?`The session reached its configured model token-cost limit.`:`The session reached its configured ${e} token limit.`}async function failSessionUsageLimit(e){let n=getSessionTokenUsage(e.session),r=formatSessionLimitMessage(e.violation.kind),i=e.violation.kind===`token-cost`?{costUsd:n.costUsd,kind:e.violation.kind,limitUsd:e.violation.limitUsd,usedCostUsd:e.violation.usedCostUsd}:{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:e.violation.kind===`token-cost`?`SESSION_TOKEN_COST_LIMIT_REACHED`:`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,enforceSessionUsageLimit};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
export interface SessionUsageAmounts {
|
|
2
|
+
readonly costUsd?: number;
|
|
3
|
+
readonly inputTokens: number;
|
|
4
|
+
readonly outputTokens: number;
|
|
5
|
+
}
|
|
6
|
+
export interface SessionRuntimeUsageLimits {
|
|
7
|
+
readonly costUsd?: number;
|
|
8
|
+
readonly inputTokens?: number;
|
|
9
|
+
readonly outputTokens?: number;
|
|
10
|
+
}
|
|
11
|
+
export type SessionUsageLimitViolation = {
|
|
12
|
+
readonly kind: "input";
|
|
13
|
+
readonly limit: number;
|
|
14
|
+
readonly usedTokens: number;
|
|
15
|
+
} | {
|
|
16
|
+
readonly kind: "output";
|
|
17
|
+
readonly limit: number;
|
|
18
|
+
readonly usedTokens: number;
|
|
19
|
+
} | {
|
|
20
|
+
readonly kind: "token-cost";
|
|
21
|
+
readonly limitUsd: number;
|
|
22
|
+
readonly usedCostUsd: number;
|
|
23
|
+
};
|
|
24
|
+
/** Resolves per-axis lifetime ceilings, preferring a previously granted ceiling. */
|
|
25
|
+
export declare function resolveRuntimeUsageLimits(input: {
|
|
26
|
+
readonly configured: SessionRuntimeUsageLimits;
|
|
27
|
+
readonly stored?: SessionRuntimeUsageLimits;
|
|
28
|
+
}): SessionRuntimeUsageLimits;
|
|
29
|
+
/** Grants one full configured window from the current lifetime usage. */
|
|
30
|
+
export declare function grantRuntimeUsageLimits(input: {
|
|
31
|
+
readonly configured: SessionRuntimeUsageLimits;
|
|
32
|
+
readonly usage: SessionUsageAmounts;
|
|
33
|
+
}): SessionRuntimeUsageLimits;
|
|
34
|
+
/** Returns the unspent quota for each capped axis. */
|
|
35
|
+
export declare function remainingRuntimeUsageQuota(input: {
|
|
36
|
+
readonly runtime: SessionRuntimeUsageLimits;
|
|
37
|
+
readonly usage: SessionUsageAmounts;
|
|
38
|
+
}): {
|
|
39
|
+
readonly costUsd: number | false;
|
|
40
|
+
readonly inputTokens: number | false;
|
|
41
|
+
readonly outputTokens: number | false;
|
|
42
|
+
};
|
|
43
|
+
/** Returns the first exhausted axis: input tokens, output tokens, then token cost. */
|
|
44
|
+
export declare function findRuntimeUsageLimitViolation(input: {
|
|
45
|
+
readonly configured: SessionRuntimeUsageLimits;
|
|
46
|
+
readonly runtime: SessionRuntimeUsageLimits;
|
|
47
|
+
readonly usage: SessionUsageAmounts;
|
|
48
|
+
}): SessionUsageLimitViolation | null;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function resolveRuntimeUsageLimits(e){let t={},n=e.stored?.inputTokens??e.configured.inputTokens;n!==void 0&&(t.inputTokens=n);let r=e.stored?.outputTokens??e.configured.outputTokens;r!==void 0&&(t.outputTokens=r);let i=e.stored?.costUsd??e.configured.costUsd;return i!==void 0&&(t.costUsd=i),t}function grantRuntimeUsageLimits(e){let t={};return e.configured.inputTokens!==void 0&&(t.inputTokens=e.usage.inputTokens+e.configured.inputTokens),e.configured.outputTokens!==void 0&&(t.outputTokens=e.usage.outputTokens+e.configured.outputTokens),e.configured.costUsd!==void 0&&(t.costUsd=(e.usage.costUsd??0)+e.configured.costUsd),t}function remainingRuntimeUsageQuota(e){return{costUsd:e.runtime.costUsd!==void 0&&Math.max(0,e.runtime.costUsd-(e.usage.costUsd??0)),inputTokens:e.runtime.inputTokens!==void 0&&Math.max(0,e.runtime.inputTokens-e.usage.inputTokens),outputTokens:e.runtime.outputTokens!==void 0&&Math.max(0,e.runtime.outputTokens-e.usage.outputTokens)}}function findRuntimeUsageLimitViolation(e){return e.runtime.inputTokens!==void 0&&e.configured.inputTokens!==void 0&&e.usage.inputTokens>=e.runtime.inputTokens?{kind:`input`,limit:e.configured.inputTokens,usedTokens:e.usage.inputTokens}:e.runtime.outputTokens!==void 0&&e.configured.outputTokens!==void 0&&e.usage.outputTokens>=e.runtime.outputTokens?{kind:`output`,limit:e.configured.outputTokens,usedTokens:e.usage.outputTokens}:e.runtime.costUsd!==void 0&&e.configured.costUsd!==void 0&&(e.usage.costUsd??0)>=e.runtime.costUsd?{kind:`token-cost`,limitUsd:e.configured.costUsd,usedCostUsd:e.usage.costUsd??0}:null}export{findRuntimeUsageLimitViolation,grantRuntimeUsageLimits,remainingRuntimeUsageQuota,resolveRuntimeUsageLimits};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{readClientContext}from"#internal/client-context.js";import{createErrorId,createLogger,formatError,logError}from"#internal/logging.js";import{contextStorage}from"#context/container.js";import{AuthKey,ParentSessionKey,ScheduleIdKey,SessionCallbackKey,TurnTaskDeliveryKey,TurnTaskStateKey}from"#context/keys.js";import{resolveInstalledPackageInfo}from"#internal/application/package.js";import{toErrorMessage}from"#shared/errors.js";import{createActionResultEvent,createApprovalCandidateEvent,createApprovalSettledEvent,createAuthorizationCompletedEvent,createAuthorizationRequiredEvent,createCompactionCompletedEvent,createCompactionRequestedEvent,createContextClearedEvent,createInputRequestedEvent,createInputResolvedEvent,createMessageCompletedEvent,createResultCompletedEvent,createSessionWaitingEvent,createStepStartedEvent}from"#protocol/message.js";import{summarizeKnownError}from"#harness/semantic-errors/index.js";import{resolveProviderHeaders}from"#internal/gateway.js";import{formatLanguageModelGatewayId}from"#internal/runtime-model.js";import{buildDynamicTools,buildResponseAuthorizationTools}from"#context/build-dynamic-tools.js";import{drainMemoryCommit,prepareMemoryCompaction,prepareMemoryPreamble}from"#context/memory-lifecycle.js";import{canonicalizeMemoryRecords,clearMemorySessionState,shouldCanonicalizeMemory}from"#shared/memory-state.js";import{advanceStep,emitFailedStep,emitRecoverableFailedTurn,emitStepStarted,emitStreamContent,emitTurnEpilogue,emitTurnPreamble,getHarnessEmissionState,setHarnessEmissionState}from"#harness/emission.js";import{ToolLoopAgent,isStepCount}from"ai";import{projectParkedAgentHandles,resolveAgentsAnnouncement}from"#subagents/handles/prompt.js";import{renderPendingApprovalsInstruction,renderPendingApprovalsSnippet}from"#harness/hitl/approval-prompt.js";import{getAgentHandleStore}from"#subagents/handles/store.js";import{buildDynamicSubagentTools}from"#context/dynamic-subagent-lifecycle.js";import{hydrateSandboxAttachments,stageAttachmentsToSandbox}from"#harness/attachment-staging.js";import{normalizeModelMessages,normalizeUserContent,resolveAssistantStepText}from"#harness/messages.js";import{createCoordinationRequestFromToolCall,resolvePendingCoordination,setPendingCoordinationBatch}from"#harness/coordination.js";import{activeTurnId}from"#harness/active-turn-id.js";import{clearPendingWorkflowInterrupt,getPendingWorkflowInterrupt,setPendingWorkflowInterrupt}from"#harness/workflow-interrupt-state.js";import{getWorkflowTaskInterrupts,isWorkflowTaskInterrupt}from"#harness/workflow-task-state.js";import{createHistoryViewPreparer}from"#shared/history-view.js";import{throwIfTurnAborted}from"#harness/turn-cancellation.js";import{getActiveDynamicModelSelection,isDynamicModelSelectionError}from"#context/dynamic-model-lifecycle.js";import{ASK_QUESTION_TOOL_NAME}from"#harness/request-input-tool.js";import{getSupersededAuthorizationChallenges,setPendingAuthorization}from"#harness/authorization.js";import{appendPendingInputBatch,consumeDeferredStepInput,getApprovedTools,getPendingInputRequestIds,hasDeferredStepInput,hasPendingApprovalBatch,hasStepInput,resolvePendingInput}from"#harness/input-requests.js";import{accumulateTurnUsage,getTurnUsageState,setTurnUsageState}from"#harness/turn-tag-state.js";import{BackgroundToolExecutorKey,createBackgroundToolCallBatch}from"#harness/background-tools.js";import{createToolResultMessagePartFromToolError}from"#harness/action-result-helpers.js";import{buildDynamicInstructionMessages,drainDynamicInstructionUserMessages,prepareDynamicInstructionPreamble}from"#context/dynamic-instruction-lifecycle.js";import{PendingSkillAnnouncementKey}from"#context/dynamic-skill-lifecycle.js";import{getWorkflowContinuationSecurity,readWorkflowContinuationSecurity}from"#harness/workflow-continuation-security.js";import{buildWorkflowHostTools,resolveWorkflowSandboxBridgeRequestLimit}from"#harness/workflow-sandbox.js";import{getApprovalAuditState,markApprovalCandidateHistoryEventEmitted,markApprovalCandidatePendingEventEmitted,markApprovalSettlementEventEmitted}from"#harness/approval-candidates.js";import{getPendingInputBatches,queueDeferredStepInput}from"#harness/pending-input-batches.js";import{EMPTY_DELIVERY_SENTINEL,hasEmptyDeliverySentinel}from"#shared/empty-delivery.js";import{getInvalidToolCallInputError,isInvalidToolCall}from"#harness/tool-call-input-errors.js";import{EmptyModelResponseError,classifyModelCallError,extractModelCallErrorDetails,extractUnsupportedProviderToolTypes,extractUpstreamRejectionMessage,isNoOutputGeneratedError}from"#harness/model-call-error.js";import{resolveInlineAuthorizationInterrupt}from"#harness/inline-tool-authorization.js";import{createCurrentMessages}from"#harness/current-messages.js";import{extractQuestionInputRequests,extractToolApprovalInputRequests}from"#harness/input-extraction.js";import{applyLastToolCacheBreakpoint,applySystemCacheBreakpoint,detectPromptCachePath,getAnthropicCacheMarker}from"#harness/prompt-cache.js";import{requireSessionModelReference}from"#harness/types.js";import{mergeProviderSafetyIdentifier}from"#harness/provider-safety.js";import{emitWorkflowActionResults,emitWorkflowActionsRequested}from"#harness/workflow-lifecycle.js";import{compactMessages,getInputTokenCount,resolveCompactionModel,shouldCompact}from"#harness/compaction.js";import{applySessionLimitContinuation,
|
|
1
|
+
import{readClientContext}from"#internal/client-context.js";import{createErrorId,createLogger,formatError,logError}from"#internal/logging.js";import{contextStorage}from"#context/container.js";import{AuthKey,ParentSessionKey,ScheduleIdKey,SessionCallbackKey,TurnTaskDeliveryKey,TurnTaskStateKey}from"#context/keys.js";import{resolveInstalledPackageInfo}from"#internal/application/package.js";import{toErrorMessage}from"#shared/errors.js";import{createActionResultEvent,createApprovalCandidateEvent,createApprovalSettledEvent,createAuthorizationCompletedEvent,createAuthorizationRequiredEvent,createCompactionCompletedEvent,createCompactionRequestedEvent,createContextClearedEvent,createInputRequestedEvent,createInputResolvedEvent,createMessageCompletedEvent,createResultCompletedEvent,createSessionWaitingEvent,createStepStartedEvent}from"#protocol/message.js";import{summarizeKnownError}from"#harness/semantic-errors/index.js";import{resolveProviderHeaders}from"#internal/gateway.js";import{formatLanguageModelGatewayId}from"#internal/runtime-model.js";import{buildDynamicTools,buildResponseAuthorizationTools}from"#context/build-dynamic-tools.js";import{drainMemoryCommit,prepareMemoryCompaction,prepareMemoryPreamble}from"#context/memory-lifecycle.js";import{canonicalizeMemoryRecords,clearMemorySessionState,shouldCanonicalizeMemory}from"#shared/memory-state.js";import{advanceStep,emitFailedStep,emitRecoverableFailedTurn,emitStepStarted,emitStreamContent,emitTurnEpilogue,emitTurnPreamble,getHarnessEmissionState,setHarnessEmissionState}from"#harness/emission.js";import{ToolLoopAgent,isStepCount}from"ai";import{projectParkedAgentHandles,resolveAgentsAnnouncement}from"#subagents/handles/prompt.js";import{renderPendingApprovalsInstruction,renderPendingApprovalsSnippet}from"#harness/hitl/approval-prompt.js";import{getAgentHandleStore}from"#subagents/handles/store.js";import{buildDynamicSubagentTools}from"#context/dynamic-subagent-lifecycle.js";import{hydrateSandboxAttachments,stageAttachmentsToSandbox}from"#harness/attachment-staging.js";import{normalizeModelMessages,normalizeUserContent,resolveAssistantStepText}from"#harness/messages.js";import{createCoordinationRequestFromToolCall,resolvePendingCoordination,setPendingCoordinationBatch}from"#harness/coordination.js";import{activeTurnId}from"#harness/active-turn-id.js";import{clearPendingWorkflowInterrupt,getPendingWorkflowInterrupt,setPendingWorkflowInterrupt}from"#harness/workflow-interrupt-state.js";import{getWorkflowTaskInterrupts,isWorkflowTaskInterrupt}from"#harness/workflow-task-state.js";import{createHistoryViewPreparer}from"#shared/history-view.js";import{throwIfTurnAborted}from"#harness/turn-cancellation.js";import{getActiveDynamicModelSelection,isDynamicModelSelectionError}from"#context/dynamic-model-lifecycle.js";import{ASK_QUESTION_TOOL_NAME}from"#harness/request-input-tool.js";import{getSupersededAuthorizationChallenges,setPendingAuthorization}from"#harness/authorization.js";import{appendPendingInputBatch,consumeDeferredStepInput,getApprovedTools,getPendingInputRequestIds,hasDeferredStepInput,hasPendingApprovalBatch,hasStepInput,resolvePendingInput}from"#harness/input-requests.js";import{accumulateTurnUsage,getTurnUsageState,setTurnUsageState}from"#harness/turn-tag-state.js";import{BackgroundToolExecutorKey,createBackgroundToolCallBatch}from"#harness/background-tools.js";import{createToolResultMessagePartFromToolError}from"#harness/action-result-helpers.js";import{buildDynamicInstructionMessages,drainDynamicInstructionUserMessages,prepareDynamicInstructionPreamble}from"#context/dynamic-instruction-lifecycle.js";import{PendingSkillAnnouncementKey}from"#context/dynamic-skill-lifecycle.js";import{getWorkflowContinuationSecurity,readWorkflowContinuationSecurity}from"#harness/workflow-continuation-security.js";import{buildWorkflowHostTools,resolveWorkflowSandboxBridgeRequestLimit}from"#harness/workflow-sandbox.js";import{getApprovalAuditState,markApprovalCandidateHistoryEventEmitted,markApprovalCandidatePendingEventEmitted,markApprovalSettlementEventEmitted}from"#harness/approval-candidates.js";import{getPendingInputBatches,queueDeferredStepInput}from"#harness/pending-input-batches.js";import{clearTurnClientContextState,getTurnClientContextState,setTurnClientContextState}from"#harness/turn-client-context.js";import{EMPTY_DELIVERY_SENTINEL,hasEmptyDeliverySentinel}from"#shared/empty-delivery.js";import{getInvalidToolCallInputError,isInvalidToolCall}from"#harness/tool-call-input-errors.js";import{EmptyModelResponseError,classifyModelCallError,extractModelCallErrorDetails,extractUnsupportedProviderToolTypes,extractUpstreamRejectionMessage,isNoOutputGeneratedError}from"#harness/model-call-error.js";import{resolveInlineAuthorizationInterrupt}from"#harness/inline-tool-authorization.js";import{createCurrentMessages}from"#harness/current-messages.js";import{extractQuestionInputRequests,extractToolApprovalInputRequests}from"#harness/input-extraction.js";import{applyLastToolCacheBreakpoint,applySystemCacheBreakpoint,detectPromptCachePath,getAnthropicCacheMarker}from"#harness/prompt-cache.js";import{requireSessionModelReference}from"#harness/types.js";import{mergeProviderSafetyIdentifier}from"#harness/provider-safety.js";import{emitWorkflowActionResults,emitWorkflowActionsRequested}from"#harness/workflow-lifecycle.js";import{compactMessages,getInputTokenCount,resolveCompactionModel,shouldCompact}from"#harness/compaction.js";import{applySessionLimitContinuation,enforceSessionUsageLimit}from"#harness/session-limit-enforcement.js";import{setEveAttributes}from"#runtime/attributes/emit.js";import{coordinateApprovalDelivery,shouldPrepareApprovalPolicyTools,shouldPrepareApprovalReplayTools}from"#harness/approval-delivery-coordinator.js";import{convertStaleResponsesToUserMessage,dropStaleSessionLimitContinuationResponses}from"#harness/stale-input-responses.js";import{normalizeProviderToolHistory}from"#harness/provider-tool-history.js";import{resolveDeliveryPolicy}from"#tasks/delivery-policy.js";import{extractWorkflowStreamWriteErrorDetails}from"#harness/workflow-stream-error.js";import{getAdvertisedTools}from"#harness/advertised-tools.js";import{resolveFrameworkToolFromUpstreamType}from"#harness/provider-tools.js";import{buildStepHooks,emitStepActions}from"#harness/step-hooks.js";import{buildToolApproval,buildToolSetFromDefinitions,buildToolSetWithProviderTools}from"#harness/tools.js";import{continueWorkflowSandboxInterrupt,getWorkflowSandboxInterrupt,unwrapWorkflowSandboxResult}from"#shared/workflow-sandbox.js";import{FINAL_OUTPUT_TOOL_NAME,buildFinalOutputTool}from"#harness/final-output.js";const environment=process.env.NODE_ENV??`unknown`,eveVersion=resolveInstalledPackageInfo().version,log=createLogger(`harness.tool-loop`);function logToolExecutionError(e){e.toolOutput.type===`tool-error`&&logError(log,`tool execution failed`,e.toolOutput.error,{toolName:e.toolCall.toolName,toolCallId:e.toolCall.toolCallId})}function mergeSystemInstructions(e){if(e.length===0)return;if(e.length===1)return{...e[0]};let t;for(let n of e)n.providerOptions!==void 0&&(t={...t,...n.providerOptions});let n={role:`system`,content:e.map(e=>e.content).join(`
|
|
2
2
|
|
|
3
|
-
`)};return t!==void 0&&(n.providerOptions=t),n}function buildGatewayAttributionHeaders(e,t){let n=resolveProviderHeaders(e);if(n===void 0)return;let r=t?.agentName??t?.agentId,i=process.env.VERCEL_PROJECT_PRODUCTION_URL||process.env.VERCEL_URL,a=i?`https://${i}`:void 0,o={...n};return r&&(o[`x-title`]=r),a&&(o[`http-referer`]=a),o}async function resolveActiveRuntimeModel(e){if(e.ctx===void 0){let t=e.session.agent.modelReference;if(t===void 0)throw Error(`Dynamic model selection is unavailable outside an eve runtime context.`);return{model:await e.config.resolveModel(t),session:e.session}}let t=getActiveDynamicModelSelection(e.ctx);if(t===null){let t=e.session.agent.modelReference;if(e.session.agent.dynamicModel===!0||t===void 0)throw Error(`Dynamic model selection is required before model-dependent work begins. Add a matching resolver handler that returns a concrete model.`);return{model:await e.config.resolveModel(t),session:e.session}}return{model:t.model===void 0?await e.config.resolveModel(t.reference):t.model,session:updateSessionModelReference(e.session,t.reference)}}function updateSessionModelReference(e,t){return{...e,agent:{...e.agent,modelReference:t},compaction:updateCompactionThresholdForModelReference({compaction:e.compaction,modelReference:t})}}function updateCompactionThresholdForModelReference(e){return e.modelReference.contextWindowTokens===void 0?e.compaction:{...e.compaction,threshold:Math.max(1,Math.floor(e.modelReference.contextWindowTokens*(e.compaction.thresholdPercent??.9)))}}function buildHarnessToolsWithDynamicSubagents(e,t){let n=new Map(e);if(t===void 0)return n;for(let e of buildDynamicSubagentTools(t)){if(n.has(e.name))throw Error(`Dynamic subagent "${e.name}" collides with another runtime-visible tool name.`);n.set(e.name,e)}return n}function createToolLoopHarness(n){let r=n.handleEvent,f=resolveApprovalKeyFromTools(n.tools);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(_,v,y){let b=_,S=createHistoryViewPreparer({previous:n.historyView,projector:n.historyProjector});S(b.history,b.state);let projectHistory=(e,t)=>S(e,t).messages,w=getHarnessEmissionState(b.state),T=contextStorage.getStore(),E=T?.get(ParentSessionKey),D=T?.get(SessionCallbackKey),ue=E!==void 0||D!==void 0,de,O=y?.createHandleEvent({getAttemptScope:()=>de,handleEvent:r,turnId:activeTurnId(w)})??r,failModelSelection=async(e,r)=>{if(throwIfTurnAborted(n.abortSignal),y?.recordError(e),!O)throw e;let i=createErrorId(),a=toErrorMessage(e);return log.error(`model selection failed terminally`,{error:e,errorId:i,sessionId:b.sessionId,turnId:r.turnId}),await emitFailedStep(O,r,{code:`MODEL_SELECTION_FAILED`,details:{errorId:i},message:a,sessionId:b.sessionId}),{next:n.mode===`task`||ue?{done:!0,isError:!0,output:a}:{done:!0,output:``},session:b}},preparePreambleTrace=async()=>await y?.preparePreamble({sequence:w.sequence,sessionStarted:w.sessionStarted,traceContext:y?.traceContext,turnId:`turn_${w.sequence}`});if(n.clearOnly===!0)return b={...b,compaction:{recentWindowSize:b.compaction.recentWindowSize,threshold:b.compaction.threshold,thresholdPercent:b.compaction.thresholdPercent},history:[],state:clearMemorySessionState(b.state)},await O?.(createContextClearedEvent({sequence:w.sequence,sessionId:b.sessionId,turnId:activeTurnId(w)})),await O?.(createSessionWaitingEvent()),{next:null,session:b};if(n.compactOnly===!0){if(b.history.length>0)try{let e=contextStorage.getStore(),t=await resolveActiveRuntimeModel({config:n,ctx:e,session:b});b=t.session;let r=await maybeCompact({abortSignal:n.abortSignal,auth:e?.get(AuthKey)??null,emit:O,emissionState:{...w,turnId:activeTurnId(w)},force:!0,historyProjector:n.historyProjector,messages:[...b.history],model:t.model,onCompaction:n.onCompaction,resolveModel:n.resolveModel,runtimeIdentity:n.runtimeIdentity,session:b,telemetry:y?.telemetry()});b={...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:b.sessionId})}return await O?.(createSessionWaitingEvent()),{next:null,session:b}}let k=consumeDeferredStepInput({input:v,preferCurrentInput:n.mode!==`conversation`&&v!==void 0&&hasPendingApprovalBatch(b),session:b});b=k.session;let A=await resolvePendingCoordination({emit:O,session:b,stepInput:k.input,tools:n.tools});if(A.outcome===`unresolved`)return{next:null,session:A.session};b=A.session;let fe=getPendingInputRequestIds(b.state),j=convertStaleResponsesToUserMessage({history:A.messages,pendingRequestIds:fe,stepInput:dropStaleSessionLimitContinuationResponses({pendingRequestIds:fe,stepInput:k.input}),tools:n.tools}),M=j.stepInput,pe=j.kind===`converted`?{...M,message:j.displayMessage}:M,N=contextStorage.getStore();N!==void 0&&n.resolveStepDynamicTools!==void 0&&shouldPrepareApprovalReplayTools({session:b,stepInput:M})&&await n.resolveStepDynamicTools({ctx:N,event:createStepStartedEvent({modelId:b.agent.modelReference?.id??`dynamic`,sequence:w.sequence,stepIndex:w.stepIndex,turnId:w.turnId}),messages:projectHistory(A.messages,b.state)});let me=shouldPrepareApprovalPolicyTools({session:b,stepInput:M})?buildResponseAuthorizationTools({authoredTools:n.tools,context:N}):n.tools,P=await coordinateApprovalDelivery({session:b,stepInput:M,tools:me});if(b=P.session,O){for(let e of P.feedback)await O(createMessageCompletedEvent({message:e,sequence:w.sequence,stepIndex:w.stepIndex,turnId:w.turnId}));let e=getApprovalAuditState(b.state);for(let t of e.activeCandidates.filter(e=>e.pendingEventEmitted!==!0))await O(createApprovalCandidateEvent({candidateId:t.candidateId,outcome:`pending`,requestId:t.requestId,responderPrincipalId:t.responder.principalId,sequence:w.sequence,stepIndex:w.stepIndex,turnId:w.turnId})),b={...b,state:markApprovalCandidatePendingEventEmitted({candidateId:t.candidateId,state:b.state})};for(let t of e.candidateHistory.filter(e=>e.eventEmitted!==!0&&e.status!==`allowed`))await O(createApprovalCandidateEvent({candidateId:t.candidateId,outcome:t.status,requestId:t.requestId,responderPrincipalId:t.responder.principalId,reason:t.reason,sequence:w.sequence,stepIndex:w.stepIndex,turnId:w.turnId})),b={...b,state:markApprovalCandidateHistoryEventEmitted({candidateId:t.candidateId,state:b.state})};for(let t of e.settlements.filter(e=>e.eventEmitted!==!0))await O(createApprovalSettledEvent({outcome:t.outcome===`allowed`?`approved`:`cancelled`,requestId:t.requestId,responderPrincipalId:t.actor.principalId,sequence:w.sequence,stepIndex:w.stepIndex,turnId:w.turnId})),b={...b,state:markApprovalSettlementEventEmitted({requestId:t.requestId,state:b.state})}}if(P.kind===`park`)return{next:null,session:b};if(P.kind===`continue-coordination`)return{next:runStep,session:P.stepInput===void 0?b:queueDeferredStepInput(b,P.stepInput)};if(P.challenges.length>0){if(O)for(let e of P.challenges)await O(createAuthorizationRequiredEvent({authorization:e.challenge,candidateId:e.candidateId,description:e.challenge.instructions??`Authorization required for ${e.name}`,name:e.name,sequence:w.sequence,stepIndex:w.stepIndex,turnId:w.turnId,webhookUrl:e.hookUrl}));let e=P.stepInput===void 0?b:queueDeferredStepInput(b,P.stepInput);return{next:null,session:{...e,state:setPendingAuthorization(e.state,{challenges:P.challenges})}}}let F=resolvePendingInput({deferMessagesWhileApprovalsPending:n.mode!==`conversation`,history:A.messages,resolveApprovalKey:f,session:b,stepInput:P.stepInput});if(F.outcome===`unresolved`){let e=A.outcome===`resolved`?{...F.session,history:[...A.messages]}:F.session;if(O&&n.mode===`conversation`&&F.deferredMessage===!0&&hasStepInput(v)){T!==void 0&&prepareDynamicInstructionPreamble(T,projectHistory(e.history,e.state));let t=[];try{let e=await preparePreambleTrace();w=await emitTurnPreamble(O,pe??{},w,n.runtimeIdentity,e)}catch(n){if(t=T===void 0?[]:drainDynamicInstructionUserMessages(T),e={...e,history:[...e.history,...t]},b=e,!isDynamicModelSelectionError(n))throw n;return failModelSelection(n,{sessionStarted:!0,sequence:w.sequence,stepIndex:0,turnId:`turn_${w.sequence}`})}return t=T===void 0?[]:drainDynamicInstructionUserMessages(T),e={...e,history:[...e.history,...t]},w=await emitTurnEpilogue(O,w,n.mode),{next:null,session:setHarnessEmissionState(e,w)}}return A.outcome===`resolved`?(O&&n.mode===`conversation`&&(w=await emitTurnEpilogue(O,w,n.mode),e=setHarnessEmissionState(e,w)),{next:null,session:e}):{next:null,session:F.session}}if(F.resolvedInputs!==void 0)for(let e of F.resolvedInputs)await y?.publishInputResolutions({batch:e,sessionId:b.sessionId}),O&&await O(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(O&&F.rejectedActions)for(let e of F.rejectedActions)for(let t of e.results)await O(createActionResultEvent({rejected:!0,result:t,sequence:e.event.sequence,stepIndex:e.event.stepIndex,turnId:e.event.turnId}));let he=readClientContext(M),I=he===void 0||F.deferredContext===!0?[]:he.map(e=>({content:e,role:`user`})),L=[];if(M?.context!==void 0&&F.deferredContext!==!0)for(let e of M.context)L.push({content:e,role:`user`});let ge=normalizeUserContent(M?.message),_e=ge!==void 0&&!F.deferredMessage&&!F.consumedMessage?await stageAttachmentsToSandbox(ge):void 0;_e!==void 0&&L.push({content:_e,role:`user`});let R=[],z;if(O&&hasStepInput(v)){T!==void 0&&(prepareDynamicInstructionPreamble(T,projectHistory(F.session.history,F.session.state)),prepareMemoryPreamble(T,{history:F.messages,input:[...I,...L],state:F.session.state}));try{let e=await preparePreambleTrace();w=await emitTurnPreamble(O,pe??{},w,n.runtimeIdentity,e)}catch(e){if(R=T===void 0?[]:drainDynamicInstructionUserMessages(T),z=T===void 0?void 0:drainMemoryCommit(T),b={...F.session,history:[...z?.history??F.session.history,...R],state:z?.state??F.session.state},!isDynamicModelSelectionError(e))throw e;return failModelSelection(e,{sessionStarted:!0,sequence:w.sequence,stepIndex:0,turnId:`turn_${w.sequence}`})}R=T===void 0?[]:drainDynamicInstructionUserMessages(T),z=T===void 0?void 0:drainMemoryCommit(T),y?.setTurnId(w.turnId)}let ve=z?.history??F.session.history,ye=F.session.history.length;b=setHarnessEmissionState({...F.session,history:[...ve,...R],state:z?.state??F.session.state},w);let B=[...z?.history??F.messages.slice(0,ye),...R,...z===void 0?F.messages.slice(ye):[]],V=await applySessionLimitContinuation({config:n,emit:O,emissionState:w,limitContinuation:F.limitContinuation,session:b});if(V.result!==null)return V.result;b=V.session;let be=getAgentHandleStore(b.state);if(!hasUnansweredToolCall(B)){let e=await T?.get(BackgroundToolExecutorKey)?.readAgentViews?.(),t=resolveAgentsAnnouncement({agentViews:e===void 0||e.length===0?void 0:[...projectParkedAgentHandles(be??{handles:[]}).map(e=>({availability:`available`,id:e.identity.id,name:e.identity.name,statusLine:e.phase===`parked`?e.lastStatus:void 0})),...e],messages:projectHistory(B,b.state),store:be});t!==void 0&&B.push({content:t,role:`user`})}B=[...B,...L];let createModelMessages=e=>{if(I.length===0)return[...e];let t=Math.max(0,e.length-L.length);return[...e.slice(0,t),...I,...e.slice(t)]},H=projectHistory(createModelMessages(B),b.state),U=T,W;try{U!==void 0&&n.dispatchDynamicModelEvent!==void 0&&await n.dispatchDynamicModelEvent({ctx:U,event:{data:{sequence:w.sequence,stepIndex:w.stepIndex,turnId:w.turnId},type:`step.started`},messages:H}),W=await resolveActiveRuntimeModel({config:n,ctx:U,session:b})}catch(e){return failModelSelection(e,w)}b=W.session;let G=W.model,xe=detectPromptCachePath(G),K=xe.kind===`anthropic-direct`?getAnthropicCacheMarker():void 0,Se=buildGatewayAttributionHeaders(G,n.runtimeIdentity),q=await maybeCompact({abortSignal:n.abortSignal,auth:U?.get(AuthKey)??null,emit:O,emissionState:w,historyProjector:n.historyProjector,messages:[...B],model:G,onCompaction:n.onCompaction,promptMessages:createModelMessages(B),resolveModel:n.resolveModel,runtimeIdentity:n.runtimeIdentity,session:b,telemetry:y?.telemetry()});b=q.session,q.compacted&&(B=q.messages),H=normalizeModelMessages(projectHistory(createModelMessages(B),b.state)),O&&await emitStepStarted(O,w,requireSessionModelReference(b).id,H);let Ce=getApprovedTools(b,f),we=w.sequence===0,J=resolveDeliveryPolicy({hasScheduleProvenance:we&&U?.get(ScheduleIdKey)!==void 0,hasOutputSchema:b.outputSchema!==void 0,isChild:U?.get(ParentSessionKey)!==void 0,isFirstTurn:we,taskDeliveryPhase:U?.get(TurnTaskDeliveryKey)}),Y=createCurrentMessages(H,{currentTurnMessages:L});if(U!==void 0){Y.addSystem(buildDynamicInstructionMessages(U));let e=U.get(PendingSkillAnnouncementKey);e!==void 0&&e.length>0&&Y.add(w.sequence,e);let t=U.get(TurnTaskStateKey);t!==void 0&&Y.add(w.sequence,t)}J.instruction!==void 0&&Y.add(w.sequence,J.instruction);let Te=renderPendingApprovalsInstruction(getPendingInputBatches(b.state).flatMap(e=>e.requests));Te!==void 0&&Y.add(w.sequence,Te,{cacheFriendly:!1});let X=await hydrateSandboxAttachments(Y.nonSystemMessages),prepareModelCallInput=e=>{let t=e?[{role:`system`,content:e}]:[],n=b.agent.system?[{role:`system`,content:b.agent.system}]:[],r=Y.systemMessages.length>0||t.length>0?[...t,...n,...Y.systemMessages]:void 0,i=r!==void 0&&K?applySystemCacheBreakpoint(r,K):r,a=i===void 0?b.agent.system??void 0:mergeSystemInstructions(i);return{instructions:a,telemetryRuntimeContext:y?.resolveRuntimeContext({eveVersion,emissionState:w,environment,modelInput:{instructions:a,messages:X},session:b})}},Ee=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?[...X,{role:`user`,content:e.trailingUserNote}]:[...X],s=buildHarnessToolsWithDynamicSubagents(n.tools,U),c=createBackgroundToolCallBatch(),l=getAdvertisedTools({session:b,tools:s});Ee=l;let u=await buildToolSetWithProviderTools({approvedTools:Ce,backgroundBatch:c,capabilities:n.capabilities,disabledProviderTools:e.disabledProviderTools,modelReference:requireSessionModelReference(b),tools:l});if(U!==void 0){let t=getAdvertisedTools({session:b,tools:buildDynamicTools(U)}),r=buildToolSetFromDefinitions({approvedTools:Ce,backgroundBatch:c,capabilities:n.capabilities,disabledProviderTools:e.disabledProviderTools,tools:t});for(let[e,t]of Object.entries(r)){let n=l.get(e);if(n?.runtimeAction!==void 0||n?.workflowId!==void 0)throw Error(`Dynamic tool "${e}" collides with a coordination-visible deferred tool.`);u[e]=t}}b.outputSchema!==void 0&&(u[FINAL_OUTPUT_TOOL_NAME]=buildFinalOutputTool(b.outputSchema));let d=n.workflow===!0?{maxSubagents:n.workflowMaxSubagents}:void 0,f=await getAdvertisedTools({modelTools:u,session:b,tools:l,workflow:d});b=f.session;let p=f.modelTools,m=K?applyLastToolCacheBreakpoint(p,K):p,h=activeTurnId(w),g=y?.prepareAttempt({attemptIndex:e.attemptIndex,runtimeContext:r,stepIndex:w.stepIndex,turnId:h});de=g?.scope;let _=buildStepHooks({auth:U?.get(AuthKey)??null,cachePath:xe,emit:O,emissionState:w,emitStepStarted:e.suppressStepStartedEmission!==!0,marker:K,session:b}),ee=new ToolLoopAgent({headers:Se,instructions:t,model:G,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:b.agent.reasoning,runtimeContext:r,stopWhen:isStepCount(1),telemetry:g?.telemetry,toolApproval:buildToolApproval(p),tools:m}),executeModelCall=async()=>{if(O){let e=[...n.tools].filter(([e,t])=>t.runtimeAction!==void 0&&l.get(e)===void 0).map(([e])=>e),t=new Set([ASK_QUESTION_TOOL_NAME,FINAL_OUTPUT_TOOL_NAME,...e]),r=await ee.stream({abortSignal:n.abortSignal,messages:a}),{emittedActionCallIds:i,handledInlineToolResultCallIds:o,invalidInputToolCallIds:s,inlineAuthorizationResults:c,trailingInlineToolResultParts:u}=await emitStreamContent(O,w,r.fullStream,{excludedActionToolNames:t,tools:l});throwIfTurnAborted(n.abortSignal);let[d,f]=await Promise.all([_.stepResult,r.responseMessages]);if(isEmptyModelResponse(d)&&extractToolResultCallIds(f).size===0&&c.length===0&&u.length===0)throw new EmptyModelResponseError;await emitStepActions(O,w,d,{emittedActionCallIds:i,excludedActionCallIds:s,excludedActionToolNames:t,handledInlineToolResultCallIds:o,tools:l});let p=d.toolResults,m=new Map(p.map(e=>[e.toolCallId,e]));for(let e of c)m.set(e.toolCallId,e);return withAccumulatedResponseMessages({invalidInputToolCallIds:s,responseMessages:appendMissingToolResultMessages({append:u,responseMessages:f}),stepResult:d,toolResults:[...m.values()]})}let e=await ee.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)}},De=0,runOneModelCall=async e=>runModelCallWithRetries(t=>runSingleModelCall({...e,attemptIndex:De++,preparedInput:t===1?e.preparedInput:void 0,suppressStepStartedEmission:t!==1||e.suppressStepStartedEmission}),{sessionId:b.sessionId,turnId:w.turnId},n.abortSignal),Oe=prepareModelCallInput(),ke=await continuePendingWorkflowInterrupt({childResults:M?.runtimeActionResults,config:n,emit:O,emissionState:w,runStep,session:b,tools:buildHarnessToolsWithDynamicSubagents(n.tools,U)});if(ke!==null)return ke;let Ae=await enforceSessionTokenLimit({config:n,emit:O,emissionState:w,messages:H,session:b});if(Ae!==null)return Ae;let Z;try{Z=await runOneModelCall({preparedInput:Oe,suppressStepStartedEmission:!0})}catch(e){throwIfTurnAborted(n.abortSignal);let r=await runModelCallRecoveryPipeline({error:e,stages:[e=>attemptUnsupportedProviderToolRecovery({error:e.error,runOneModelCall,sessionId:b.sessionId,turnId:w.turnId}),e=>attemptEmptyResponseRecovery({emptyDeliveryEnabled:J.allowsEmptyDelivery,error:e.error,retryCallOptions:e.retryCallOptions,runOneModelCall,sessionId:b.sessionId,turnId:w.turnId})]});if(throwIfTurnAborted(n.abortSignal),r.outcome===`recovered`)Z=r.result;else{let e=r.error;if(y?.recordError(e),!O)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:b.sessionId,turnId:w.turnId}),w=await emitRecoverableFailedTurn(O,w,{code:`WORKFLOW_STREAM_WRITE_FAILED`,continuationToken:b.continuationToken,details:{...i,errorId:n},message:toErrorMessage(e)}),{next:null,session:setHarnessEmissionState(b,w)}}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:b.sessionId,turnId:w.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:b.sessionId,turnId:w.turnId}),await emitFailedStep(O,w,{code:`MODEL_CALL_FAILED`,details:f,message:l,sessionId:b.sessionId}),{next:n.mode===`task`||ue?{done:!0,isError:!0,output:u}:{done:!0,output:``},session:b};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(O,w,{code:`MODEL_CALL_FAILED`,details:f,message:l,sessionId:b.sessionId}),{next:{done:!0,isError:!0,output:u},session:b}}log.error(c?.message??`model call failed — parking session for retry by the user`,m),w=await emitRecoverableFailedTurn(O,w,{code:`MODEL_CALL_FAILED`,continuationToken:b.continuationToken,details:f,message:l});let h={isError:!0,output:u};return b={...b,outputSchema:void 0},{next:null,session:setHarnessEmissionState(b,w),settledTurn:h}}}let Q=accumulateTurnUsage({previous:getTurnUsageState(b.state),turnId:w.turnId,usage:extractTokenUsageDelta({costUsd:extractGatewayCostUsd(Z.providerMetadata),usage:Z.usage})});b=setTurnUsageState(b,Q);let $;try{$=formatLanguageModelGatewayId(G)}catch{$=void 0}return await setEveAttributes({"$eve.model":$,"$eve.input_tokens":Q.inputTokens,"$eve.output_tokens":Q.outputTokens,"$eve.cache_read_tokens":Q.cacheReadTokens,"$eve.cache_write_tokens":Q.cacheWriteTokens,"$eve.cost_usd":Q.sawCost?Q.costUsd:void 0,"$eve.tool_count":n.tools.size}),handleStepResult({config:n,emit:O,emissionState:w,durableModelPromptMessageCount:I.length===0?H.length:void 0,promptMessages:B,result:Z,runStep,session:b,coordinationTools:Ee})}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 g=normalizeProviderToolHistory({messages:p,providerExecutedOutcomeIds:h}),v=g.messages,y={...c,compaction:createNextCompactionConfig(c.compaction,e.durableModelPromptMessageCount,i)},te=t.workflow===!0?readWorkflowContinuationSecurity(y):void 0;if(te!==void 0){let t=await getWorkflowSandboxInterrupt(i,te);if(t!==void 0){if(!isWorkflowTaskInterrupt(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.coordinationTools,usedCalls:0})}}let x=extractToolApprovalInputRequests({content:i.content??[],excludedCallIds:f}),ne=new Set(x.map(e=>e.action.callId)),S=extractQuestionInputRequests({toolCalls:i.toolCalls,excludedCallIds:new Set([...f,...ne]),tools:e.coordinationTools}),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`}]],se=getAdvertisedTools({session:y,tools:e.coordinationTools}),T=(i.toolCalls??[]).filter(e=>!f.has(e.toolCallId)).filter(t=>isDeferredHarnessTool(e.coordinationTools.get(t.toolName))).filter(e=>isDeferredHarnessTool(se.get(e.toolName))?!0:(log.warn(`deferred tool call blocked because tool is not advertised`,{callId:e.toolCallId,sessionId:y.sessionId,toolName:e.toolName}),!1)).map(e=>createCoordinationRequestFromToolCall({toolCall:e,tools:se}));if(T.length>0){let e=T.flatMap(e=>e.kind===`runtime-action`?[e.request]:[]),t=T.flatMap(e=>e.kind===`task`?[e.request]:[]);if(C.length===0)return{next:null,session:setHarnessEmissionState(setPendingCoordinationBatch({runtimeActions:e,tasks:t,event:{sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId},responseMessages:v,session:{...y,history:[...r]}}),advanceStep(s))};let i=setPendingCoordinationBatch({runtimeActions:e,tasks:t,event:{sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId},responseMessages:ae,session:{...y,history:oe}});return i=appendPendingInputBatch({event:{sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId},requests:C,responseMessages:[],session:i}),n&&await n(createInputRequestedEvent({requests:C,sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId})),{next:null,session:setHarnessEmissionState(i,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 ce=resolveInlineAuthorizationInterrupt({messages:[...r,...v],toolResults:i.toolResults});if(ce){let{challenges:e,history:r}=ce;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 E=v,le=[...r,...E],D={...y,history:le};return!(D.outputSchema!==void 0&&extractFinalOutput(i)!==void 0)&&(E.at(-1)?.role===`tool`||g.outcomeEndsResponse||hasDeferredStepInput(D))?(n&&(s=advanceStep(s),D=setHarnessEmissionState(D,s)),{next:o,session:D}):t.mode===`task`?finishTaskTurn({emissionState:s,emit:n,history:r,result:i,schema:D.outputSchema,session:D,stepOutput:m}):finishConversationTurn({emissionState:s,emit:n,history:r,result:i,schema:D.outputSchema,session:D,stepOutput:m})}function isDeferredHarnessTool(e){return e?.runtimeAction!==void 0||e?.workflowId!==void 0&&e.execution!==`background`}const OUTPUT_SCHEMA_NOT_FULFILLED={code:`OUTPUT_SCHEMA_NOT_FULFILLED`,message:`The agent could not produce a result matching the requested schema.`};function extractFinalOutput(e){return(e.toolCalls??[]).find(e=>e.toolName===FINAL_OUTPUT_TOOL_NAME&&!isInvalidToolCall(e))?.input}function persistStructuredAssistantTurn(e,t,n){return{...e,history:[...t,{content:JSON.stringify(n),role:`assistant`}],outputSchema:void 0}}async function emitStructuredResult(e,t,n,r){return await e(createResultCompletedEvent({result:n,sequence:t.sequence,stepIndex:t.stepIndex,turnId:t.turnId})),emitTurnEpilogue(e,t,r)}async function finishTaskTurn(e){let{emit:t,history:n,result:r,schema:i,stepOutput:a}=e,{emissionState:o,session:s}=e;if(i===void 0)return t&&(o=await emitTurnEpilogue(t,o,`task`),s=setHarnessEmissionState(s,o)),{next:{done:!0,output:a??``},session:s};let c=extractFinalOutput(r);return c===void 0?(s={...s,outputSchema:void 0},t&&await emitFailedStep(t,o,{...OUTPUT_SCHEMA_NOT_FULFILLED,sessionId:s.sessionId}),{next:{done:!0,isError:!0,output:OUTPUT_SCHEMA_NOT_FULFILLED.message},session:s}):(s=persistStructuredAssistantTurn(s,n,c),t&&(o=await emitStructuredResult(t,o,c,`task`),s=setHarnessEmissionState(s,o)),{next:{done:!0,output:c},session:s})}async function finishConversationTurn(e){let{emit:t,history:n,result:r,schema:i,stepOutput:a}=e,{emissionState:o,session:s}=e;if(i===void 0)return t&&(o=await emitTurnEpilogue(t,o,`conversation`),s=setHarnessEmissionState(s,o)),{next:null,session:s,settledTurn:{output:a??``}};let c=extractFinalOutput(r);if(c===void 0){s={...s,outputSchema:void 0},t&&(o=await emitRecoverableFailedTurn(t,o,{...OUTPUT_SCHEMA_NOT_FULFILLED,continuationToken:s.continuationToken}),s=setHarnessEmissionState(s,o));let e={isError:!0,output:OUTPUT_SCHEMA_NOT_FULFILLED.message};return{next:null,session:s,settledTurn:e}}return s=persistStructuredAssistantTurn(s,n,c),t&&(o=await emitStructuredResult(t,o,c,`conversation`),s=setHarnessEmissionState(s,o)),{next:null,session:s,settledTurn:{output:c}}}async function continuePendingWorkflowInterrupt(e){let t=getPendingWorkflowInterrupt(e.session.state);if(t===void 0)return null;let n=t.interrupt;if(!isWorkflowTaskInterrupt(n))throw Error(`Unsupported Workflow interrupt kind "${n.payload.kind}".`);let r=e.childResults??[],a=getWorkflowTaskInterrupts(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`||!isWorkflowTaskInterrupt(n.interrupt)||a+1>=r.length)break;let c=getWorkflowTaskInterrupts(n.interrupt)[0];if(c===void 0)throw Error(`Workflow continuation contains no pending workflow-task 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(!isWorkflowTaskInterrupt(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=getWorkflowTaskInterrupts(e.interrupt),n=t[0];if(n===void 0)throw Error(`Workflow continuation contains no pending workflow-task interrupt.`);e.emit!==void 0&&await emitWorkflowActionsRequested({emit:e.emit,emissionState:e.emissionState,interrupts:t,tools:e.tools});let r={...e.baseSession,history:[...e.promptMessages]};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 createToolLoopHarness(n){let r=n.handleEvent,f=resolveApprovalKeyFromTools(n.tools);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(_,v,y){let b=_,S=createHistoryViewPreparer({previous:n.historyView,projector:n.historyProjector});S(b.history,b.state);let projectHistory=(e,t)=>S(e,t).messages,w=getHarnessEmissionState(b.state),T=contextStorage.getStore(),E=T?.get(ParentSessionKey),D=T?.get(SessionCallbackKey),ue=E!==void 0||D!==void 0,de,O=y?.createHandleEvent({getAttemptScope:()=>de,handleEvent:r,turnId:activeTurnId(w)})??r,failModelSelection=async(e,r)=>{if(throwIfTurnAborted(n.abortSignal),y?.recordError(e),!O)throw e;let i=createErrorId(),a=toErrorMessage(e);return log.error(`model selection failed terminally`,{error:e,errorId:i,sessionId:b.sessionId,turnId:r.turnId}),await emitFailedStep(O,r,{code:`MODEL_SELECTION_FAILED`,details:{errorId:i},message:a,sessionId:b.sessionId}),{next:n.mode===`task`||ue?{done:!0,isError:!0,output:a}:{done:!0,output:``},session:b}},preparePreambleTrace=async()=>await y?.preparePreamble({sequence:w.sequence,sessionStarted:w.sessionStarted,traceContext:y?.traceContext,turnId:`turn_${w.sequence}`});if(n.clearOnly===!0)return b={...b,compaction:{recentWindowSize:b.compaction.recentWindowSize,threshold:b.compaction.threshold,thresholdPercent:b.compaction.thresholdPercent},history:[],state:clearMemorySessionState(b.state)},await O?.(createContextClearedEvent({sequence:w.sequence,sessionId:b.sessionId,turnId:activeTurnId(w)})),await O?.(createSessionWaitingEvent()),{next:null,session:b};if(n.compactOnly===!0){if(b.history.length>0)try{let e=contextStorage.getStore(),t=await resolveActiveRuntimeModel({config:n,ctx:e,session:b});b=t.session;let r=await maybeCompact({abortSignal:n.abortSignal,auth:e?.get(AuthKey)??null,emit:O,emissionState:{...w,turnId:activeTurnId(w)},force:!0,historyProjector:n.historyProjector,messages:[...b.history],model:t.model,onCompaction:n.onCompaction,resolveModel:n.resolveModel,runtimeIdentity:n.runtimeIdentity,session:b,telemetry:y?.telemetry()});b={...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:b.sessionId})}return await O?.(createSessionWaitingEvent()),{next:null,session:b}}let k=consumeDeferredStepInput({input:v,preferCurrentInput:n.mode!==`conversation`&&v!==void 0&&hasPendingApprovalBatch(b),session:b});b=k.session;let A=await resolvePendingCoordination({emit:O,session:b,stepInput:k.input,tools:n.tools});if(A.outcome===`unresolved`)return{next:null,session:A.session};b=A.session;let fe=getPendingInputRequestIds(b.state),j=convertStaleResponsesToUserMessage({history:A.messages,pendingRequestIds:fe,stepInput:dropStaleSessionLimitContinuationResponses({pendingRequestIds:fe,stepInput:k.input}),tools:n.tools}),M=j.stepInput,pe=j.kind===`converted`?{...M,message:j.displayMessage}:M,N=contextStorage.getStore();N!==void 0&&n.resolveStepDynamicTools!==void 0&&shouldPrepareApprovalReplayTools({session:b,stepInput:M})&&await n.resolveStepDynamicTools({ctx:N,event:createStepStartedEvent({modelId:b.agent.modelReference?.id??`dynamic`,sequence:w.sequence,stepIndex:w.stepIndex,turnId:w.turnId}),messages:projectHistory(A.messages,b.state)});let me=shouldPrepareApprovalPolicyTools({session:b,stepInput:M})?buildResponseAuthorizationTools({authoredTools:n.tools,context:N}):n.tools,P=await coordinateApprovalDelivery({session:b,stepInput:M,tools:me});if(b=P.session,O){for(let e of P.feedback)await O(createMessageCompletedEvent({message:e,sequence:w.sequence,stepIndex:w.stepIndex,turnId:w.turnId}));let e=getApprovalAuditState(b.state);for(let t of e.activeCandidates.filter(e=>e.pendingEventEmitted!==!0))await O(createApprovalCandidateEvent({candidateId:t.candidateId,outcome:`pending`,requestId:t.requestId,responderPrincipalId:t.responder.principalId,sequence:w.sequence,stepIndex:w.stepIndex,turnId:w.turnId})),b={...b,state:markApprovalCandidatePendingEventEmitted({candidateId:t.candidateId,state:b.state})};for(let t of e.candidateHistory.filter(e=>e.eventEmitted!==!0&&e.status!==`allowed`))await O(createApprovalCandidateEvent({candidateId:t.candidateId,outcome:t.status,requestId:t.requestId,responderPrincipalId:t.responder.principalId,reason:t.reason,sequence:w.sequence,stepIndex:w.stepIndex,turnId:w.turnId})),b={...b,state:markApprovalCandidateHistoryEventEmitted({candidateId:t.candidateId,state:b.state})};for(let t of e.settlements.filter(e=>e.eventEmitted!==!0))await O(createApprovalSettledEvent({outcome:t.outcome===`allowed`?`approved`:`cancelled`,requestId:t.requestId,responderPrincipalId:t.actor.principalId,sequence:w.sequence,stepIndex:w.stepIndex,turnId:w.turnId})),b={...b,state:markApprovalSettlementEventEmitted({requestId:t.requestId,state:b.state})}}if(P.kind===`park`)return{next:null,session:b};if(P.kind===`continue-coordination`)return{next:runStep,session:P.stepInput===void 0?b:queueDeferredStepInput(b,P.stepInput)};if(P.challenges.length>0){if(O)for(let e of P.challenges)await O(createAuthorizationRequiredEvent({authorization:e.challenge,candidateId:e.candidateId,description:e.challenge.instructions??`Authorization required for ${e.name}`,name:e.name,sequence:w.sequence,stepIndex:w.stepIndex,turnId:w.turnId,webhookUrl:e.hookUrl}));let e=P.stepInput===void 0?b:queueDeferredStepInput(b,P.stepInput);return{next:null,session:{...e,state:setPendingAuthorization(e.state,{challenges:P.challenges})}}}let F=resolvePendingInput({deferMessagesWhileApprovalsPending:n.mode!==`conversation`,history:A.messages,resolveApprovalKey:f,session:b,stepInput:P.stepInput});if(F.outcome===`unresolved`){let e=A.outcome===`resolved`?{...F.session,history:[...A.messages]}:F.session;if(O&&n.mode===`conversation`&&F.deferredMessage===!0&&hasStepInput(v)){T!==void 0&&prepareDynamicInstructionPreamble(T,projectHistory(e.history,e.state));let t=[];try{let e=await preparePreambleTrace();w=await emitTurnPreamble(O,pe??{},w,n.runtimeIdentity,e)}catch(n){if(t=T===void 0?[]:drainDynamicInstructionUserMessages(T),e={...e,history:[...e.history,...t]},b=e,!isDynamicModelSelectionError(n))throw n;return failModelSelection(n,{sessionStarted:!0,sequence:w.sequence,stepIndex:0,turnId:`turn_${w.sequence}`})}return t=T===void 0?[]:drainDynamicInstructionUserMessages(T),e={...e,history:[...e.history,...t]},w=await emitTurnEpilogue(O,w,n.mode),{next:null,session:setHarnessEmissionState(e,w)}}return A.outcome===`resolved`?(O&&n.mode===`conversation`&&(w=await emitTurnEpilogue(O,w,n.mode),e=setHarnessEmissionState(e,w)),{next:null,session:e}):{next:null,session:F.session}}if(F.resolvedInputs!==void 0)for(let e of F.resolvedInputs)await y?.publishInputResolutions({batch:e,sessionId:b.sessionId}),O&&await O(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(O&&F.rejectedActions)for(let e of F.rejectedActions)for(let t of e.results)await O(createActionResultEvent({rejected:!0,result:t,sequence:e.event.sequence,stepIndex:e.event.stepIndex,turnId:e.event.turnId}));let he=activeTurnId(w),ge=getTurnClientContextState(F.session.state,he),I=F.deferredContext===!0?void 0:readClientContext(M),_e=(I??ge?.messages)?.map(e=>({content:e,role:`user`}))??[],L=[];if(M?.context!==void 0&&F.deferredContext!==!0)for(let e of M.context)L.push({content:e,role:`user`});let ve=normalizeUserContent(M?.message),ye=ve!==void 0&&!F.deferredMessage&&!F.consumedMessage?await stageAttachmentsToSandbox(ve):void 0;ye!==void 0&&L.push({content:ye,role:`user`});let R=[],z;if(O&&hasStepInput(v)){T!==void 0&&(prepareDynamicInstructionPreamble(T,projectHistory(F.session.history,F.session.state)),prepareMemoryPreamble(T,{history:F.messages,input:[..._e,...L],state:F.session.state}));try{let e=await preparePreambleTrace();w=await emitTurnPreamble(O,pe??{},w,n.runtimeIdentity,e)}catch(e){if(R=T===void 0?[]:drainDynamicInstructionUserMessages(T),z=T===void 0?void 0:drainMemoryCommit(T),b={...F.session,history:[...z?.history??F.session.history,...R],state:z?.state??F.session.state},!isDynamicModelSelectionError(e))throw e;return failModelSelection(e,{sessionStarted:!0,sequence:w.sequence,stepIndex:0,turnId:`turn_${w.sequence}`})}R=T===void 0?[]:drainDynamicInstructionUserMessages(T),z=T===void 0?void 0:drainMemoryCommit(T),y?.setTurnId(w.turnId)}let be=z?.history??F.session.history,xe=F.session.history.length;b=setHarnessEmissionState({...F.session,history:[...be,...R],state:z?.state??F.session.state},w);let B=[...z?.history??F.messages.slice(0,xe),...R,...z===void 0?F.messages.slice(xe):[]],V=await applySessionLimitContinuation({config:n,emit:O,emissionState:w,limitContinuation:F.limitContinuation,session:b});if(V.result!==null)return V.result;b=V.session;let Se=getAgentHandleStore(b.state);if(!hasUnansweredToolCall(B)){let e=await T?.get(BackgroundToolExecutorKey)?.readAgentViews?.(),t=resolveAgentsAnnouncement({agentViews:e===void 0||e.length===0?void 0:[...projectParkedAgentHandles(Se??{handles:[]}).map(e=>({availability:`available`,id:e.identity.id,name:e.identity.name,statusLine:e.phase===`parked`?e.lastStatus:void 0})),...e],messages:projectHistory(B,b.state),store:Se});t!==void 0&&B.push({content:t,role:`user`})}let H=ge;I!==void 0&&(H={insertionIndex:ge?.insertionIndex??B.length,messages:[...I],turnId:he}),H!==void 0&&(b=setTurnClientContextState(b,H)),B=[...B,...L];let createModelMessages=e=>{if(H===void 0||H.messages.length===0)return[...e];let t=Math.min(Math.max(0,H.insertionIndex),e.length);return[...e.slice(0,t),...H.messages.map(e=>({content:e,role:`user`})),...e.slice(t)]},U=projectHistory(createModelMessages(B),b.state),W=T,G;try{W!==void 0&&n.dispatchDynamicModelEvent!==void 0&&await n.dispatchDynamicModelEvent({ctx:W,event:{data:{sequence:w.sequence,stepIndex:w.stepIndex,turnId:w.turnId},type:`step.started`},messages:U}),G=await resolveActiveRuntimeModel({config:n,ctx:W,session:b})}catch(e){return failModelSelection(e,w)}b=G.session;let K=G.model,Ce=detectPromptCachePath(K),q=Ce.kind===`anthropic-direct`?getAnthropicCacheMarker():void 0,we=buildGatewayAttributionHeaders(K,n.runtimeIdentity),Te=H===void 0?void 0:Math.max(0,B.length-H.insertionIndex),J=await maybeCompact({abortSignal:n.abortSignal,auth:W?.get(AuthKey)??null,emit:O,emissionState:w,historyProjector:n.historyProjector,messages:[...B],model:K,onCompaction:n.onCompaction,promptMessages:createModelMessages(B),resolveModel:n.resolveModel,runtimeIdentity:n.runtimeIdentity,session:b,telemetry:y?.telemetry()});b=J.session,J.compacted&&(B=J.messages,H!==void 0&&Te!==void 0&&(H={...H,insertionIndex:Math.max(0,B.length-Te)},b=setTurnClientContextState(b,H))),U=normalizeModelMessages(projectHistory(createModelMessages(B),b.state)),O&&await emitStepStarted(O,w,requireSessionModelReference(b).id,U);let Ee=getApprovedTools(b,f),De=w.sequence===0,Y=resolveDeliveryPolicy({hasScheduleProvenance:De&&W?.get(ScheduleIdKey)!==void 0,hasOutputSchema:b.outputSchema!==void 0,isChild:W?.get(ParentSessionKey)!==void 0,isFirstTurn:De,taskDeliveryPhase:W?.get(TurnTaskDeliveryKey)}),X=createCurrentMessages(U,{currentTurnMessages:L});if(W!==void 0){X.addSystem(buildDynamicInstructionMessages(W));let e=W.get(PendingSkillAnnouncementKey);e!==void 0&&e.length>0&&X.add(w.sequence,e);let t=W.get(TurnTaskStateKey);t!==void 0&&X.add(w.sequence,t)}Y.instruction!==void 0&&X.add(w.sequence,Y.instruction);let Oe=renderPendingApprovalsInstruction(getPendingInputBatches(b.state).flatMap(e=>e.requests));Oe!==void 0&&X.add(w.sequence,Oe,{cacheFriendly:!1});let Z=await hydrateSandboxAttachments(X.nonSystemMessages),prepareModelCallInput=e=>{let t=e?[{role:`system`,content:e}]:[],n=b.agent.system?[{role:`system`,content:b.agent.system}]:[],r=X.systemMessages.length>0||t.length>0?[...t,...n,...X.systemMessages]:void 0,i=r!==void 0&&q?applySystemCacheBreakpoint(r,q):r,a=i===void 0?b.agent.system??void 0:mergeSystemInstructions(i);return{instructions:a,telemetryRuntimeContext:y?.resolveRuntimeContext({eveVersion,emissionState:w,environment,modelInput:{instructions:a,messages:Z},session:b})}},ke=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?[...Z,{role:`user`,content:e.trailingUserNote}]:[...Z],s=buildHarnessToolsWithDynamicSubagents(n.tools,W),c=createBackgroundToolCallBatch(),l=getAdvertisedTools({session:b,tools:s});ke=l;let u=await buildToolSetWithProviderTools({approvedTools:Ee,backgroundBatch:c,capabilities:n.capabilities,disabledProviderTools:e.disabledProviderTools,modelReference:requireSessionModelReference(b),tools:l});if(W!==void 0){let t=getAdvertisedTools({session:b,tools:buildDynamicTools(W)}),r=buildToolSetFromDefinitions({approvedTools:Ee,backgroundBatch:c,capabilities:n.capabilities,disabledProviderTools:e.disabledProviderTools,tools:t});for(let[e,t]of Object.entries(r)){let n=l.get(e);if(n?.runtimeAction!==void 0||n?.workflowId!==void 0)throw Error(`Dynamic tool "${e}" collides with a coordination-visible deferred tool.`);u[e]=t}}b.outputSchema!==void 0&&(u[FINAL_OUTPUT_TOOL_NAME]=buildFinalOutputTool(b.outputSchema));let d=n.workflow===!0?{maxSubagents:n.workflowMaxSubagents}:void 0,f=await getAdvertisedTools({modelTools:u,session:b,tools:l,workflow:d});b=f.session;let p=f.modelTools,m=q?applyLastToolCacheBreakpoint(p,q):p,h=activeTurnId(w),g=y?.prepareAttempt({attemptIndex:e.attemptIndex,runtimeContext:r,stepIndex:w.stepIndex,turnId:h});de=g?.scope;let _=buildStepHooks({auth:W?.get(AuthKey)??null,cachePath:Ce,emit:O,emissionState:w,emitStepStarted:e.suppressStepStartedEmission!==!0,marker:q,session:b}),ee=new ToolLoopAgent({headers:we,instructions:t,model:K,onLanguageModelCallEnd(e){for(let t of e.content)t.type!==`tool-call`||t.providerExecuted===!0||isInvalidToolCall(t)||c.register({callId:t.toolCallId,input:t.input,toolName:t.toolName})},onToolExecutionEnd:logToolExecutionError,onError(e){summarizeKnownError(e.error)?.tags.includes(`config`)!==!0&&logError(log,`tool-loop stream error`,e.error)},onStepFinish:_.onStepFinish,prepareStep:_.prepareStep,reasoning:b.agent.reasoning,runtimeContext:r,stopWhen:isStepCount(1),telemetry:g?.telemetry,toolApproval:buildToolApproval(p),tools:m}),executeModelCall=async()=>{if(O){let e=[...n.tools].filter(([e,t])=>t.runtimeAction!==void 0&&l.get(e)===void 0).map(([e])=>e),t=new Set([ASK_QUESTION_TOOL_NAME,FINAL_OUTPUT_TOOL_NAME,...e]),r=await ee.stream({abortSignal:n.abortSignal,messages:a}),{emittedActionCallIds:i,handledInlineToolResultCallIds:o,invalidInputToolCallIds:s,inlineAuthorizationResults:c,trailingInlineToolResultParts:u}=await emitStreamContent(O,w,r.fullStream,{excludedActionToolNames:t,tools:l});throwIfTurnAborted(n.abortSignal);let[d,f]=await Promise.all([_.stepResult,r.responseMessages]);if(isEmptyModelResponse(d)&&extractToolResultCallIds(f).size===0&&c.length===0&&u.length===0)throw new EmptyModelResponseError;await emitStepActions(O,w,d,{emittedActionCallIds:i,excludedActionCallIds:s,excludedActionToolNames:t,handledInlineToolResultCallIds:o,tools:l});let p=d.toolResults,m=new Map(p.map(e=>[e.toolCallId,e]));for(let e of c)m.set(e.toolCallId,e);return withAccumulatedResponseMessages({invalidInputToolCallIds:s,responseMessages:appendMissingToolResultMessages({append:u,responseMessages:f}),stepResult:d,toolResults:[...m.values()]})}let e=await ee.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)}},Ae=0,runOneModelCall=async e=>runModelCallWithRetries(t=>runSingleModelCall({...e,attemptIndex:Ae++,preparedInput:t===1?e.preparedInput:void 0,suppressStepStartedEmission:t!==1||e.suppressStepStartedEmission}),{sessionId:b.sessionId,turnId:w.turnId},n.abortSignal),je=prepareModelCallInput(),Me=await continuePendingWorkflowInterrupt({childResults:M?.runtimeActionResults,config:n,emit:O,emissionState:w,runStep,session:b,tools:buildHarnessToolsWithDynamicSubagents(n.tools,W)});if(Me!==null)return Me;let Ne=await enforceSessionUsageLimit({config:n,emit:O,emissionState:w,messages:U,session:b});if(Ne!==null)return Ne;let Q;try{Q=await runOneModelCall({preparedInput:je,suppressStepStartedEmission:!0})}catch(e){throwIfTurnAborted(n.abortSignal);let r=await runModelCallRecoveryPipeline({error:e,stages:[e=>attemptUnsupportedProviderToolRecovery({error:e.error,runOneModelCall,sessionId:b.sessionId,turnId:w.turnId}),e=>attemptEmptyResponseRecovery({emptyDeliveryEnabled:Y.allowsEmptyDelivery,error:e.error,retryCallOptions:e.retryCallOptions,runOneModelCall,sessionId:b.sessionId,turnId:w.turnId})]});if(throwIfTurnAborted(n.abortSignal),r.outcome===`recovered`)Q=r.result;else{let e=r.error;if(y?.recordError(e),!O)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:b.sessionId,turnId:w.turnId}),w=await emitRecoverableFailedTurn(O,w,{code:`WORKFLOW_STREAM_WRITE_FAILED`,continuationToken:b.continuationToken,details:{...i,errorId:n},message:toErrorMessage(e)}),{next:null,session:setHarnessEmissionState(b,w)}}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:b.sessionId,turnId:w.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:b.sessionId,turnId:w.turnId}),await emitFailedStep(O,w,{code:`MODEL_CALL_FAILED`,details:f,message:l,sessionId:b.sessionId}),{next:n.mode===`task`||ue?{done:!0,isError:!0,output:u}:{done:!0,output:``},session:b};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(O,w,{code:`MODEL_CALL_FAILED`,details:f,message:l,sessionId:b.sessionId}),{next:{done:!0,isError:!0,output:u},session:b}}log.error(c?.message??`model call failed — parking session for retry by the user`,m),w=await emitRecoverableFailedTurn(O,w,{code:`MODEL_CALL_FAILED`,continuationToken:b.continuationToken,details:f,message:l});let h={isError:!0,output:u};return b={...b,outputSchema:void 0},{next:null,session:setHarnessEmissionState(b,w),settledTurn:h}}}let $=accumulateTurnUsage({previous:getTurnUsageState(b.state),turnId:w.turnId,usage:extractTokenUsageDelta({costUsd:extractGatewayCostUsd(Q.providerMetadata),usage:Q.usage})});b=setTurnUsageState(b,$);let Pe;try{Pe=formatLanguageModelGatewayId(K)}catch{Pe=void 0}return await setEveAttributes({"$eve.model":Pe,"$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}),handleStepResult({config:n,emit:O,emissionState:w,durableModelPromptMessageCount:H===void 0||H.messages.length===0?U.length:void 0,promptMessages:B,result:Q,runStep,session:b,coordinationTools:ke})}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 g=normalizeProviderToolHistory({messages:p,providerExecutedOutcomeIds:h}),v=g.messages,y={...c,compaction:createNextCompactionConfig(c.compaction,e.durableModelPromptMessageCount,i)},te=t.workflow===!0?readWorkflowContinuationSecurity(y):void 0;if(te!==void 0){let t=await getWorkflowSandboxInterrupt(i,te);if(t!==void 0){if(!isWorkflowTaskInterrupt(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.coordinationTools,usedCalls:0})}}let x=extractToolApprovalInputRequests({content:i.content??[],excludedCallIds:f}),ne=new Set(x.map(e=>e.action.callId)),S=extractQuestionInputRequests({toolCalls:i.toolCalls,excludedCallIds:new Set([...f,...ne]),tools:e.coordinationTools}),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`}]],se=getAdvertisedTools({session:y,tools:e.coordinationTools}),T=(i.toolCalls??[]).filter(e=>!f.has(e.toolCallId)).filter(t=>isDeferredHarnessTool(e.coordinationTools.get(t.toolName))).filter(e=>isDeferredHarnessTool(se.get(e.toolName))?!0:(log.warn(`deferred tool call blocked because tool is not advertised`,{callId:e.toolCallId,sessionId:y.sessionId,toolName:e.toolName}),!1)).map(e=>createCoordinationRequestFromToolCall({toolCall:e,tools:se}));if(T.length>0){let e=T.flatMap(e=>e.kind===`runtime-action`?[e.request]:[]),t=T.flatMap(e=>e.kind===`task`?[e.request]:[]);if(C.length===0)return{next:null,session:setHarnessEmissionState(setPendingCoordinationBatch({runtimeActions:e,tasks:t,event:{sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId},responseMessages:v,session:{...y,history:[...r]}}),advanceStep(s))};let i=setPendingCoordinationBatch({runtimeActions:e,tasks:t,event:{sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId},responseMessages:ae,session:{...y,history:oe}});return i=appendPendingInputBatch({event:{sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId},requests:C,responseMessages:[],session:i}),n&&await n(createInputRequestedEvent({requests:C,sequence:s.sequence,stepIndex:s.stepIndex,turnId:s.turnId})),{next:null,session:setHarnessEmissionState(i,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 ce=resolveInlineAuthorizationInterrupt({messages:[...r,...v],toolResults:i.toolResults});if(ce){let{challenges:e,history:r}=ce;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 E=v,le=[...r,...E],D={...y,history:le};return!(D.outputSchema!==void 0&&extractFinalOutput(i)!==void 0)&&(E.at(-1)?.role===`tool`||g.outcomeEndsResponse||hasDeferredStepInput(D))?(n&&(s=advanceStep(s),D=setHarnessEmissionState(D,s)),{next:o,session:D}):t.mode===`task`?finishTaskTurn({emissionState:s,emit:n,history:r,result:i,schema:D.outputSchema,session:D,stepOutput:m}):finishConversationTurn({emissionState:s,emit:n,history:r,result:i,schema:D.outputSchema,session:D,stepOutput:m})}function isDeferredHarnessTool(e){return e?.runtimeAction!==void 0||e?.workflowId!==void 0&&e.execution!==`background`}const OUTPUT_SCHEMA_NOT_FULFILLED={code:`OUTPUT_SCHEMA_NOT_FULFILLED`,message:`The agent could not produce a result matching the requested schema.`};function extractFinalOutput(e){return(e.toolCalls??[]).find(e=>e.toolName===FINAL_OUTPUT_TOOL_NAME&&!isInvalidToolCall(e))?.input}function persistStructuredAssistantTurn(e,t,n){return{...e,history:[...t,{content:JSON.stringify(n),role:`assistant`}],outputSchema:void 0}}async function emitStructuredResult(e,t,n,r){return await e(createResultCompletedEvent({result:n,sequence:t.sequence,stepIndex:t.stepIndex,turnId:t.turnId})),emitTurnEpilogue(e,t,r)}async function finishTaskTurn(e){let{emit:t,history:n,result:r,schema:i,stepOutput:a}=e,{emissionState:o,session:s}=e;if(s=clearTurnClientContextState(s),i===void 0)return t&&(o=await emitTurnEpilogue(t,o,`task`),s=setHarnessEmissionState(s,o)),{next:{done:!0,output:a??``},session:s};let c=extractFinalOutput(r);return c===void 0?(s={...s,outputSchema:void 0},t&&await emitFailedStep(t,o,{...OUTPUT_SCHEMA_NOT_FULFILLED,sessionId:s.sessionId}),{next:{done:!0,isError:!0,output:OUTPUT_SCHEMA_NOT_FULFILLED.message},session:s}):(s=persistStructuredAssistantTurn(s,n,c),t&&(o=await emitStructuredResult(t,o,c,`task`),s=setHarnessEmissionState(s,o)),{next:{done:!0,output:c},session:s})}async function finishConversationTurn(e){let{emit:t,history:n,result:r,schema:i,stepOutput:a}=e,{emissionState:o,session:s}=e;if(s=clearTurnClientContextState(s),i===void 0)return t&&(o=await emitTurnEpilogue(t,o,`conversation`),s=setHarnessEmissionState(s,o)),{next:null,session:s,settledTurn:{output:a??``}};let c=extractFinalOutput(r);if(c===void 0){s={...s,outputSchema:void 0},t&&(o=await emitRecoverableFailedTurn(t,o,{...OUTPUT_SCHEMA_NOT_FULFILLED,continuationToken:s.continuationToken}),s=setHarnessEmissionState(s,o));let e={isError:!0,output:OUTPUT_SCHEMA_NOT_FULFILLED.message};return{next:null,session:s,settledTurn:e}}return s=persistStructuredAssistantTurn(s,n,c),t&&(o=await emitStructuredResult(t,o,c,`conversation`),s=setHarnessEmissionState(s,o)),{next:null,session:s,settledTurn:{output:c}}}async function continuePendingWorkflowInterrupt(e){let t=getPendingWorkflowInterrupt(e.session.state);if(t===void 0)return null;let n=t.interrupt;if(!isWorkflowTaskInterrupt(n))throw Error(`Unsupported Workflow interrupt kind "${n.payload.kind}".`);let r=e.childResults??[],a=getWorkflowTaskInterrupts(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`||!isWorkflowTaskInterrupt(n.interrupt)||a+1>=r.length)break;let c=getWorkflowTaskInterrupts(n.interrupt)[0];if(c===void 0)throw Error(`Workflow continuation contains no pending workflow-task 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(!isWorkflowTaskInterrupt(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=getWorkflowTaskInterrupts(e.interrupt),n=t[0];if(n===void 0)throw Error(`Workflow continuation contains no pending workflow-task interrupt.`);e.emit!==void 0&&await emitWorkflowActionsRequested({emit:e.emit,emissionState:e.emissionState,interrupts:t,tools:e.tools});let r={...e.baseSession,history:[...e.promptMessages]};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,9 @@
|
|
|
1
|
+
import type { HarnessSession, SessionStateMap } from "#harness/types.js";
|
|
2
|
+
export interface TurnClientContextState {
|
|
3
|
+
readonly insertionIndex: number;
|
|
4
|
+
readonly messages: readonly string[];
|
|
5
|
+
readonly turnId: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function getTurnClientContextState(state: SessionStateMap | undefined, turnId: string): TurnClientContextState | undefined;
|
|
8
|
+
export declare function setTurnClientContextState(session: HarnessSession, clientContext: TurnClientContextState): HarnessSession;
|
|
9
|
+
export declare function clearTurnClientContextState(session: HarnessSession): HarnessSession;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const TURN_CLIENT_CONTEXT_STATE_KEY=`eve.harness.turnClientContext`;function getTurnClientContextState(e,t){let n=e?.[TURN_CLIENT_CONTEXT_STATE_KEY];return n?.turnId===t?n:void 0}function setTurnClientContextState(e,t){return{...e,state:{...e.state,[TURN_CLIENT_CONTEXT_STATE_KEY]:t}}}function clearTurnClientContextState(e){if(e.state?.[TURN_CLIENT_CONTEXT_STATE_KEY]===void 0)return e;let{[TURN_CLIENT_CONTEXT_STATE_KEY]:t,...n}=e.state;return{...e,state:n}}export{clearTurnClientContextState,getTurnClientContextState,setTurnClientContextState};
|
|
@@ -15,17 +15,15 @@
|
|
|
15
15
|
* on a separate "reset" code path. Session totals stay in the same state record
|
|
16
16
|
* and keep accumulating until the durable session ends.
|
|
17
17
|
*
|
|
18
|
-
* `TokenUsageTotals` carries `
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
* to that shared shape at the one site (the driver's `done` action) where a
|
|
23
|
-
* session total crosses into it.
|
|
18
|
+
* `TokenUsageTotals` carries `sawCost` alongside the shared token and token-cost
|
|
19
|
+
* fields so observability can distinguish an unreported cost from a reported
|
|
20
|
+
* zero. {@link toUsage} drops that internal marker when a total crosses into
|
|
21
|
+
* the shared {@link TokenUsage} contract.
|
|
24
22
|
*/
|
|
25
23
|
import type { HarnessSession, SessionStateMap } from "#harness/types.js";
|
|
26
|
-
import { type
|
|
24
|
+
import { type SessionRuntimeUsageLimits, type SessionUsageLimitViolation } from "#harness/session-usage-limits.js";
|
|
27
25
|
import type { TokenUsage } from "#shared/token-usage.js";
|
|
28
|
-
export type {
|
|
26
|
+
export type { SessionRuntimeUsageLimits, SessionUsageLimitViolation };
|
|
29
27
|
export interface TokenUsageTotals {
|
|
30
28
|
readonly cacheReadTokens: number;
|
|
31
29
|
readonly cacheWriteTokens: number;
|
|
@@ -56,28 +54,27 @@ export declare function toUsage(totals: TokenUsageTotals): TokenUsage;
|
|
|
56
54
|
* absent when the configured limit leaves it uncapped. Before any granted
|
|
57
55
|
* continuation the runtime limit equals the configured limit; each grant
|
|
58
56
|
* re-anchors it to `usage + configured limit` via
|
|
59
|
-
* {@link
|
|
57
|
+
* {@link bumpSessionRuntimeUsageLimits}.
|
|
60
58
|
*/
|
|
61
|
-
export declare function
|
|
59
|
+
export declare function getSessionRuntimeUsageLimits(session: Pick<HarnessSession, "limits" | "state">): SessionRuntimeUsageLimits;
|
|
62
60
|
/**
|
|
63
|
-
* Bumps the runtime
|
|
64
|
-
*
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
* Both axes bump together so a session near two limits gets one prompt, not
|
|
68
|
-
* two back-to-back. The configured limits never change.
|
|
61
|
+
* Bumps the runtime usage limits after the user grants a continuation. Each
|
|
62
|
+
* capped axis is re-anchored to `current usage + configured limit`, so one
|
|
63
|
+
* approval buys one full configured window even after an overshoot. All axes
|
|
64
|
+
* bump together to avoid back-to-back prompts. Configured limits never change.
|
|
69
65
|
*/
|
|
70
|
-
export declare function
|
|
66
|
+
export declare function bumpSessionRuntimeUsageLimits(session: HarnessSession): HarnessSession;
|
|
71
67
|
/**
|
|
72
|
-
* Remaining lifetime
|
|
68
|
+
* Remaining lifetime usage quota under the runtime limits, per axis.
|
|
73
69
|
* `false` marks an uncapped axis. This is the pool a delegated child's
|
|
74
70
|
* budget is granted from.
|
|
75
71
|
*/
|
|
76
|
-
export declare function
|
|
72
|
+
export declare function getSessionRemainingUsageQuota(session: Pick<HarnessSession, "limits" | "state">): {
|
|
73
|
+
costUsd: number | false;
|
|
77
74
|
inputTokens: number | false;
|
|
78
75
|
outputTokens: number | false;
|
|
79
76
|
};
|
|
80
|
-
export declare function
|
|
77
|
+
export declare function getSessionUsageLimitViolation(session: Pick<HarnessSession, "limits" | "state">): SessionUsageLimitViolation | null;
|
|
81
78
|
/**
|
|
82
79
|
* Takes the session-usage delta accumulated since the previous take and
|
|
83
80
|
* marks it reported.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{findRuntimeUsageLimitViolation,grantRuntimeUsageLimits,remainingRuntimeUsageQuota,resolveRuntimeUsageLimits}from"#harness/session-usage-limits.js";const HARNESS_TURN_USAGE_STATE_KEY=`eve.harness.turnUsage`,REPORTED_SESSION_USAGE_STATE_KEY=`eve.harness.reportedSessionUsage`,SESSION_RUNTIME_USAGE_LIMIT_KEY=`eve.harness.sessionRuntimeTokenLimit`,ZERO_TOKEN_USAGE={cacheReadTokens:0,cacheWriteTokens:0,costUsd:0,inputTokens:0,outputTokens:0,sawCost:!1};function getTurnUsageState(e){return e?.[HARNESS_TURN_USAGE_STATE_KEY]}function getSessionTokenUsage(e){return getTurnUsageState(e.state)?.session??ZERO_TOKEN_USAGE}function toUsage(e){return{cacheReadTokens:e.cacheReadTokens,cacheWriteTokens:e.cacheWriteTokens,costUsd:e.sawCost?e.costUsd:void 0,inputTokens:e.inputTokens,outputTokens:e.outputTokens}}function getSessionRuntimeUsageLimits(e){let t=e.state?.[SESSION_RUNTIME_USAGE_LIMIT_KEY];return resolveRuntimeUsageLimits({configured:configuredSessionUsageLimits(e),stored:t})}function bumpSessionRuntimeUsageLimits(e){let n=getSessionTokenUsage(e),r=grantRuntimeUsageLimits({configured:configuredSessionUsageLimits(e),usage:n});return{...e,state:{...e.state,[SESSION_RUNTIME_USAGE_LIMIT_KEY]:r}}}function getSessionRemainingUsageQuota(e){let t=getSessionTokenUsage(e);return remainingRuntimeUsageQuota({runtime:getSessionRuntimeUsageLimits(e),usage:t})}function getSessionUsageLimitViolation(t){let n=getSessionTokenUsage(t),r=getSessionRuntimeUsageLimits(t);return findRuntimeUsageLimitViolation({configured:configuredSessionUsageLimits(t),runtime:r,usage:n})}function configuredSessionUsageLimits(e){return{costUsd:e.limits?.maxTokenCostUsdPerSession,inputTokens:e.limits?.maxInputTokensPerSession,outputTokens:e.limits?.maxOutputTokensPerSession}}function takeSessionUsageDelta(e){let t=getSessionTokenUsage(e),n=e.state?.[REPORTED_SESSION_USAGE_STATE_KEY]??ZERO_TOKEN_USAGE;return{delta:{cacheReadTokens:t.cacheReadTokens-n.cacheReadTokens,cacheWriteTokens:t.cacheWriteTokens-n.cacheWriteTokens,costUsd:t.sawCost||n.sawCost?t.costUsd-n.costUsd:void 0,inputTokens:t.inputTokens-n.inputTokens,outputTokens:t.outputTokens-n.outputTokens},session:{...e,state:{...e.state,[REPORTED_SESSION_USAGE_STATE_KEY]:t}}}}function setTurnUsageState(e,t){return{...e,state:{...e.state,[HARNESS_TURN_USAGE_STATE_KEY]:t}}}function accumulateTurnUsage(e){let t=toTokenUsageDelta(e.usage),n=e.previous?.session??ZERO_TOKEN_USAGE;return{...addTokenUsage(e.previous!==void 0&&e.previous.turnId===e.turnId?e.previous:ZERO_TOKEN_USAGE,t),turnId:e.turnId,session:addTokenUsage(n,t)}}function accumulateSessionUsage(e){let t=toTokenUsageDelta(e.usage),n=e.previous??{...ZERO_TOKEN_USAGE,session:ZERO_TOKEN_USAGE,turnId:``};return{...n,session:addTokenUsage(n.session,t)}}function addTokenUsage(e,t){return{cacheReadTokens:e.cacheReadTokens+t.cacheReadTokens,cacheWriteTokens:e.cacheWriteTokens+t.cacheWriteTokens,costUsd:e.costUsd+t.costUsd,inputTokens:e.inputTokens+t.inputTokens,outputTokens:e.outputTokens+t.outputTokens,sawCost:e.sawCost||t.sawCost}}function toTokenUsageDelta(e){if(e===void 0)return ZERO_TOKEN_USAGE;let t=e.inputTokens??0,n=e.outputTokens??0;return{cacheReadTokens:e.cacheReadTokens??0,cacheWriteTokens:e.cacheWriteTokens??0,costUsd:e.costUsd??0,inputTokens:t,outputTokens:n,sawCost:e.costUsd!==void 0}}export{accumulateSessionUsage,accumulateTurnUsage,bumpSessionRuntimeUsageLimits,getSessionRemainingUsageQuota,getSessionRuntimeUsageLimits,getSessionTokenUsage,getSessionUsageLimitViolation,getTurnUsageState,setTurnUsageState,takeSessionUsageDelta,toUsage};
|
|
@@ -106,6 +106,11 @@ export interface SessionLimits {
|
|
|
106
106
|
* eve refuses to start another model call.
|
|
107
107
|
*/
|
|
108
108
|
readonly maxOutputTokensPerSession?: number;
|
|
109
|
+
/**
|
|
110
|
+
* Maximum provider-reported model token cost this durable session may spend,
|
|
111
|
+
* in US dollars, before eve refuses to start another model call.
|
|
112
|
+
*/
|
|
113
|
+
readonly maxTokenCostUsdPerSession?: number;
|
|
109
114
|
}
|
|
110
115
|
/**
|
|
111
116
|
* Input payload for a harness turn.
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import type { HarnessSession, SessionStateMap } from "#harness/types.js";
|
|
2
2
|
import type { RuntimeToolResultActionResult } from "#shared/action-types.js";
|
|
3
|
-
export declare function workflowToolRunAnswerToken(runId: string, seq: number): string;
|
|
4
3
|
/** A workflow tool run the active turn waits on. Background runs live in the task index. */
|
|
5
4
|
export interface WorkflowToolRunRecord {
|
|
6
5
|
readonly callId: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const WORKFLOW_TOOL_RUNS_STATE_KEY=`eve.runtime.workflowToolRuns`;function
|
|
1
|
+
const WORKFLOW_TOOL_RUNS_STATE_KEY=`eve.runtime.workflowToolRuns`;function getWorkflowToolRuns(t){let n=t?.[WORKFLOW_TOOL_RUNS_STATE_KEY];return Array.isArray(n)?n:[]}function findWorkflowToolRun(e,t){return getWorkflowToolRuns(e).find(e=>e.callId===t)}function recordWorkflowToolRun(e,t){return writeWorkflowToolRuns(e,[...getWorkflowToolRuns(e.state).filter(e=>e.callId!==t.callId),t])}function removeWorkflowToolRun(e,t){let n=getWorkflowToolRuns(e.state),r=n.filter(e=>e.callId!==t);return r.length===n.length?e:writeWorkflowToolRuns(e,r)}function clearWorkflowToolRuns(e){return getWorkflowToolRuns(e.state).length===0?e:writeWorkflowToolRuns(e,[])}function isInboxToolResultFromRecordedWorkflowToolRun(e,t){let n=findWorkflowToolRun(e,t.callId);return n!==void 0&&n.resultKind!==`subagent`&&n.toolName===t.toolName}function isInboxSubagentResultFromRecordedWorkflowToolRun(e,t){let n=findWorkflowToolRun(e,t.callId);return n?.resultKind===`subagent`&&n.toolName===t.subagentName}function writeWorkflowToolRuns(t,n){let r={...t.state};return n.length===0?delete r[WORKFLOW_TOOL_RUNS_STATE_KEY]:r[WORKFLOW_TOOL_RUNS_STATE_KEY]=n,{...t,state:Object.keys(r).length>0?r:void 0}}export{clearWorkflowToolRuns,findWorkflowToolRun,getWorkflowToolRuns,isInboxSubagentResultFromRecordedWorkflowToolRun,isInboxToolResultFromRecordedWorkflowToolRun,recordWorkflowToolRun,removeWorkflowToolRun};
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
+
export declare const EVE_INTERNAL_AGENT_WORKSPACE_MEMBER_ENV = "EVE_INTERNAL_AGENT_WORKSPACE_MEMBER";
|
|
1
2
|
export declare const EVE_INTERNAL_BUILD_OUTPUT_DIRECTORY_ENV = "EVE_INTERNAL_BUILD_OUTPUT_DIRECTORY";
|
|
2
3
|
export declare const EVE_INTERNAL_HOST_BUILD_OUTPUT_DIRECTORY_ENV = "EVE_INTERNAL_HOST_BUILD_OUTPUT_DIRECTORY";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const EVE_INTERNAL_BUILD_OUTPUT_DIRECTORY_ENV=`EVE_INTERNAL_BUILD_OUTPUT_DIRECTORY`,EVE_INTERNAL_HOST_BUILD_OUTPUT_DIRECTORY_ENV=`EVE_INTERNAL_HOST_BUILD_OUTPUT_DIRECTORY`;export{EVE_INTERNAL_BUILD_OUTPUT_DIRECTORY_ENV,EVE_INTERNAL_HOST_BUILD_OUTPUT_DIRECTORY_ENV};
|
|
1
|
+
const EVE_INTERNAL_AGENT_WORKSPACE_MEMBER_ENV=`EVE_INTERNAL_AGENT_WORKSPACE_MEMBER`,EVE_INTERNAL_BUILD_OUTPUT_DIRECTORY_ENV=`EVE_INTERNAL_BUILD_OUTPUT_DIRECTORY`,EVE_INTERNAL_HOST_BUILD_OUTPUT_DIRECTORY_ENV=`EVE_INTERNAL_HOST_BUILD_OUTPUT_DIRECTORY`;export{EVE_INTERNAL_AGENT_WORKSPACE_MEMBER_ENV,EVE_INTERNAL_BUILD_OUTPUT_DIRECTORY_ENV,EVE_INTERNAL_HOST_BUILD_OUTPUT_DIRECTORY_ENV};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createRequire}from"node:module";import{basename,dirname,join}from"node:path";import{existsSync,readFileSync,realpathSync}from"node:fs";import{fileURLToPath}from"node:url";import{EVE_PACKAGE_NAME}from"#internal/package-name.js";let cachedPackageInfo,cachedPackageLocation;const BUNDLED_FALLBACK_PACKAGE_VERSION=`0.
|
|
1
|
+
import{createRequire}from"node:module";import{basename,dirname,join}from"node:path";import{existsSync,readFileSync,realpathSync}from"node:fs";import{fileURLToPath}from"node:url";import{EVE_PACKAGE_NAME}from"#internal/package-name.js";let cachedPackageInfo,cachedPackageLocation;const BUNDLED_FALLBACK_PACKAGE_VERSION=`0.52.0`,WORKFLOW_MODULE_ALIASES={"workflow/errors":`src/compiled/@workflow/errors/index.js`,"workflow/internal/private":`src/compiled/@workflow/core/private.js`};function resolveFallbackPackageVersion(){return BUNDLED_FALLBACK_PACKAGE_VERSION.startsWith(`__`)?`0.0.0`:BUNDLED_FALLBACK_PACKAGE_VERSION}const FALLBACK_PACKAGE_INFO={name:EVE_PACKAGE_NAME,version:resolveFallbackPackageVersion()};function resolveCurrentModulePath(){return typeof __filename==`string`?__filename:resolveCurrentModulePathFromStack()}function resolveCurrentModulePathFromStack(){let e=Error.prepareStackTrace;try{Error.prepareStackTrace=(e,t)=>t;let e=Error().stack?.[0]?.getFileName();if(typeof e!=`string`||e.length===0)throw Error(`Failed to resolve the current module path from the stack trace.`);return e.startsWith(`file:`)?fileURLToPath(e):e}finally{Error.prepareStackTrace=e}}const require=createRequire(resolveCurrentModulePath());function tryResolveVerifiedPackageRoot(e){try{let t=realpathSync.native(e);return tryReadInstalledPackageInfo(t,EVE_PACKAGE_NAME)===void 0?void 0:dirname(t)}catch{return}}function findNearestVerifiedPackageRoot(e){let t=e;for(;;){let e=tryResolveVerifiedPackageRoot(join(t,`package.json`));if(e!==void 0)return e;let i=dirname(t);if(i===t)return;t=i}}function tryResolveDirectBuildLocation(e){let i=dirname(e);for(;;){if(basename(i)===`dist`){let e=tryResolveVerifiedPackageRoot(join(dirname(i),`package.json`));if(e!==void 0)return{packageBuildRoot:i,packageRoot:e}}let e=dirname(i);if(e===i)return;i=e}}function isSourceCheckout(e){return existsSync(join(e,`src`,`internal`,`application`,`package.ts`))}function tryCreatePackageLocation(e){if(isSourceCheckout(e))return{packageBuildRoot:null,packageRoot:e};let t=join(e,`dist`);if(existsSync(t))return{packageBuildRoot:t,packageRoot:e}}function resolveSelfPackageJsonPath(t){return createRequire(t).resolve(`${EVE_PACKAGE_NAME}/package.json`)}function resolvePackageLocationFromModulePath(e,t=resolveSelfPackageJsonPath){let r=realpathSync.native(e),i=tryResolveDirectBuildLocation(r);if(i!==void 0)return i;let a=findNearestVerifiedPackageRoot(dirname(r));if(a!==void 0&&isSourceCheckout(a))return{packageBuildRoot:null,packageRoot:a};try{let e=tryResolveVerifiedPackageRoot(t(r)),n=e===void 0?void 0:tryCreatePackageLocation(e);if(n!==void 0)return n}catch{}let o=a===void 0?void 0:tryCreatePackageLocation(a);if(o!==void 0)return o;throw Error(`Failed to resolve the eve package root from "${e}".`)}function resolvePackageLocation(){return cachedPackageLocation??=resolvePackageLocationFromModulePath(resolveCurrentModulePath()),cachedPackageLocation}function resolvePackageBuildRoot(){return resolvePackageLocation().packageBuildRoot}function resolvePackageRoot(){return resolvePackageLocation().packageRoot}function tryResolvePackageRoot(){try{return resolvePackageRoot()}catch{return}}function rewriteSourceFilePathForBuild(e){return e.replace(/\.[cm]?tsx?$/,`.js`)}function resolvePackageSourceFilePath(e){let t=resolvePackageBuildRoot();return t===null?join(resolvePackageRoot(),e):join(t,rewriteSourceFilePathForBuild(e))}function resolvePackageSourceDirectoryPath(e){let t=resolvePackageBuildRoot();return join(t===null?resolvePackageRoot():t,e)}function resolvePackageDependencyPath(e){return require.resolve(e)}function resolvePackageCompiledFilePath(e){let t=resolvePackageBuildRoot();return t===null?join(resolvePackageRoot(),`.generated`,`compiled`,e.replace(/^src\/compiled\//,``)):join(t,e)}function normalizeInstalledPackageInfo(e){let t=e;if(!(typeof t.name!=`string`||typeof t.version!=`string`))return{name:t.name,version:t.version}}function tryReadInstalledPackageInfo(e,t){let n=normalizeInstalledPackageInfo(JSON.parse(readFileSync(e,`utf8`)));if(n?.name===t)return n}function resolveInstalledPackageInfo(){if(cachedPackageInfo)return cachedPackageInfo;let e=tryResolvePackageRoot(),t=e===void 0?void 0:tryReadInstalledPackageInfo(join(e,`package.json`),EVE_PACKAGE_NAME);if(t)return cachedPackageInfo=t,cachedPackageInfo;try{let e=tryReadInstalledPackageInfo(require.resolve(`${EVE_PACKAGE_NAME}/package.json`),EVE_PACKAGE_NAME);if(e)return cachedPackageInfo=e,cachedPackageInfo}catch{}return cachedPackageInfo={...FALLBACK_PACKAGE_INFO},cachedPackageInfo}function readWorkflowVersionFromManifest(e){let t=e;for(let e of[t.devDependencies,t.dependencies,t.peerDependencies]){let t=e?.[`@workflow/core`];if(typeof t==`string`&&t.trim().length>0)return t}}function resolveExpectedWorkflowVersion(){let e=tryResolvePackageRoot();if(e!==void 0)try{return readWorkflowVersionFromManifest(JSON.parse(readFileSync(join(e,`package.json`),`utf8`)))}catch{}try{return readWorkflowVersionFromManifest(JSON.parse(readFileSync(require.resolve(`${EVE_PACKAGE_NAME}/package.json`),`utf8`)))}catch{return}}function resolveWorkflowModulePath(e){if(e===`workflow`)return resolvePackageSourceFilePath(`src/internal/workflow/index.ts`);if(e===`workflow/api`||e===`workflow/runtime`)return resolvePackageSourceFilePath(`src/internal/workflow/runtime.ts`);if(e===`workflow/internal/builtins`)return resolvePackageSourceFilePath(`src/internal/workflow/builtins.ts`);let t=WORKFLOW_MODULE_ALIASES[e];return t===void 0?require.resolve(e):resolvePackageCompiledFilePath(t)}export{resolveExpectedWorkflowVersion,resolveInstalledPackageInfo,resolvePackageCompiledFilePath,resolvePackageDependencyPath,resolvePackageLocationFromModulePath,resolvePackageRoot,resolvePackageSourceDirectoryPath,resolvePackageSourceFilePath,resolveWorkflowModulePath};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createHash}from"node:crypto";import{join,resolve}from"node:path";import{resolveInstalledPackageInfo,resolvePackageRoot,resolvePackageSourceDirectoryPath}from"#internal/application/package.js";import{existsSync,readFileSync,readdirSync,rmSync}from"node:fs";import{
|
|
1
|
+
import{createHash}from"node:crypto";import{join,resolve}from"node:path";import{resolveInstalledPackageInfo,resolvePackageRoot,resolvePackageSourceDirectoryPath}from"#internal/application/package.js";import{existsSync,readFileSync,readdirSync,rmSync}from"node:fs";import{EVE_INTERNAL_BUILD_OUTPUT_DIRECTORY_ENV,EVE_INTERNAL_HOST_BUILD_OUTPUT_DIRECTORY_ENV}from"#internal/application/build-output-environment.js";import{workflowEntryReference}from"#execution/workflow-runtime.js";function resolveApplicationRoot(e=process.cwd()){return resolve(e)}function getWorkflowBuildCacheKey(t){return createHash(`sha256`).update(t).digest(`hex`).slice(0,12)}function isVercelBuildEnvironment(){return!!process.env.VERCEL}function resolveNitroBuildDirectory(e){return join(e,`.eve`,`nitro`)}function resolveApplicationHostArtifactsDirectory(e){return join(e,`.eve`,`host`)}function resolveWorkflowBuildDirectory(e){let n=join(resolvePackageRoot(),`.eve`,`workflow-cache`);return pruneStaleWorkflowCacheSiblings(n),join(n,getWorkflowBuildCacheKey(e))}function pruneStaleWorkflowCacheSiblings(e){if(!existsSync(e))return;let n=resolveInstalledPackageInfo().version,i;try{i=readdirSync(e)}catch{return}for(let r of i){let i=join(e,r),a=join(i,`eve-cache.json`);if(existsSync(a))try{let e=JSON.parse(readFileSync(a,`utf8`));typeof e.eveVersion==`string`&&e.eveVersion!==n&&rmSync(i,{force:!0,recursive:!0})}catch{}}}function resolveSandboxCacheDirectory(e){return join(e,`.eve`,`sandbox-cache`)}function resolveOutputDirectory(e){return isVercelBuildEnvironment()?join(e,`.vercel`,`output`):join(e,`.output`)}function getApplicationInfo(e){return{appRoot:e,outputDir:resolveOutputDirectory(e),workflowId:workflowEntryReference.workflowId,workflowBuildDir:resolveWorkflowBuildDirectory(e),workflowSourceDir:resolvePackageSourceDirectoryPath(`src/execution`)}}export{EVE_INTERNAL_BUILD_OUTPUT_DIRECTORY_ENV,EVE_INTERNAL_HOST_BUILD_OUTPUT_DIRECTORY_ENV,getApplicationInfo,isVercelBuildEnvironment,resolveApplicationHostArtifactsDirectory,resolveApplicationRoot,resolveNitroBuildDirectory,resolveOutputDirectory,resolveSandboxCacheDirectory,resolveWorkflowBuildDirectory};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{expectFunction,expectObjectRecord,expectOnlyKnownKeys,expectPositiveInteger,expectProviderOptions,expectString,getOptionalStringRecordProperty}from"#internal/authored-module.js";import{isDynamicSentinel}from"#dynamic/definition.js";function normalizeAgentDefinition(e,i){let o=expectObjectRecord(e,i);if(expectOnlyKnownKeys(o,[`build`,`compaction`,`description`,`experimental`,`limits`,`model`,`modelContextWindowTokens`,`modelOptions`,`outputSchema`,`reasoning`],i),o.model===void 0)throw Error(`${i} The "model" field is required.`);let c={model:normalizeAgentModelDefinition(o.model,i)};if(isDynamicSentinel(c.model)&&(o.modelContextWindowTokens!==void 0||o.modelOptions!==void 0))throw Error(`${i} Dynamic model definitions do not support sibling "modelContextWindowTokens" or "modelOptions" fields. Return those overrides from the resolver selection instead.`);return o.description!==void 0&&(c.description=expectString(o.description,i)),o.compaction!==void 0&&(c.compaction=normalizeAgentCompactionDefinition(o.compaction,i)),o.build!==void 0&&(c.build=normalizeAgentBuildDefinition(o.build,i)),o.experimental!==void 0&&(c.experimental=normalizeAgentExperimentalDefinition(o.experimental,i)),o.modelOptions!==void 0&&(c.modelOptions=normalizeAgentModelOptions(o.modelOptions,i)),o.modelContextWindowTokens!==void 0&&(c.modelContextWindowTokens=expectPositiveInteger(o.modelContextWindowTokens,i)),o.outputSchema!==void 0&&(c.outputSchema=o.outputSchema),o.reasoning!==void 0&&(c.reasoning=normalizeAgentReasoningDefinition(o.reasoning,i)),o.limits!==void 0&&(c.limits=normalizeAgentLimitsDefinition(o.limits,i)),c}function normalizeAgentReasoningDefinition(e,t){let n=expectString(e,t);switch(n){case`provider-default`:case`none`:case`minimal`:case`low`:case`medium`:case`high`:case`xhigh`:return n;default:throw Error(t)}}function normalizeAgentModelDefinition(r,i){if(!isDynamicSentinel(r))return r;let a=expectObjectRecord(r,i);expectOnlyKnownKeys(a,[`events`,`kind`],i);let o=expectObjectRecord(a.events,i),c={};for(let[t,n]of Object.entries(o))c[t]=expectFunction(n,i);return{events:c,kind:a.kind}}function expectPositiveIntegerOrFalse(e,t){return e!==!1&&expectPositiveInteger(e,t)}function normalizeAgentLimitsDefinition(e,r){let i=expectObjectRecord(e,r);expectOnlyKnownKeys(i,[`maxInputTokensPerSession`,`maxOutputTokensPerSession`,`sessionTimeoutMs`],r);let a={};return i.sessionTimeoutMs!==void 0&&(a.sessionTimeoutMs=expectPositiveIntegerOrFalse(i.sessionTimeoutMs,r)),i.maxInputTokensPerSession!==void 0&&(a.maxInputTokensPerSession=expectPositiveIntegerOrFalse(i.maxInputTokensPerSession,r)),i.maxOutputTokensPerSession!==void 0&&(a.maxOutputTokensPerSession=expectPositiveIntegerOrFalse(i.maxOutputTokensPerSession,r)),a}function normalizeAgentBuildDefinition(e,r){let i=expectObjectRecord(e,r);expectOnlyKnownKeys(i,[`externalDependencies`],r);let o={};if(i.externalDependencies!==void 0){if(!Array.isArray(i.externalDependencies))throw Error(r);o.externalDependencies=Object.freeze(i.externalDependencies.map(e=>expectString(e,r)))}return o}function normalizeAgentWorkflowDefinition(e,r){let i=expectObjectRecord(e,r);expectOnlyKnownKeys(i,[`world`],r);let a={};return i.world!==void 0&&(a.world=normalizeAgentWorkflowWorldDefinition(i.world,r)),a}function normalizeAgentWorkflowWorldDefinition(e,t){let n=expectString(e,t);if(n.trim()===``)throw Error(`${t} "experimental.workflow.world" must be a non-empty package name.`);return n}function normalizeAgentExperimentalDefinition(e,r){let i=expectObjectRecord(e,r);expectOnlyKnownKeys(i,[`instrumentationProviders`,`workflow`],r);let a={};if(i.instrumentationProviders!==void 0){if(typeof i.instrumentationProviders!=`boolean`)throw Error(`${r} "experimental.instrumentationProviders" must be a boolean.`);a.instrumentationProviders=i.instrumentationProviders}return i.workflow!==void 0&&(a.workflow=normalizeAgentWorkflowDefinition(i.workflow,r)),a}function normalizeAgentModelOptions(e,r){let a=expectObjectRecord(e,r);expectOnlyKnownKeys(a,[`providerOptions`],r);let o=a.providerOptions;return o===void 0?{}:{providerOptions:expectProviderOptions(o,r)}}function normalizeAgentCompactionDefinition(e,i){let a=expectObjectRecord(e,i);expectOnlyKnownKeys(a,[`model`,`modelContextWindowTokens`,`thresholdPercent`],i);let o={};if(a.model!==void 0){if(isDynamicSentinel(a.model))throw Error(`${i} "compaction.model" does not support defineDynamic — provide a static model.`);o.model=a.model}if(a.modelContextWindowTokens!==void 0&&(o.modelContextWindowTokens=expectPositiveInteger(a.modelContextWindowTokens,i)),a.thresholdPercent!==void 0){let e=a.thresholdPercent;if(typeof e!=`number`||!Number.isFinite(e)||e<0||e>1)throw Error(i);o.thresholdPercent=e}return o}function normalizeInstructionsDefinition(e,r){let i=expectObjectRecord(e,r);expectOnlyKnownKeys(i,[`content`,`markdown`,`role`],r);let o=Object.hasOwn(i,`content`),s=Object.hasOwn(i,`markdown`);if(o===s)throw Error(`${r} Provide exactly one of "content" or "markdown".`);if(s){if(Object.hasOwn(i,`role`))throw Error(`${r} The deprecated "markdown" shape does not support "role".`);return{content:expectString(i.markdown,r),role:`system`}}let c=i.role===void 0?`system`:expectString(i.role,r);if(c!==`system`&&c!==`user`)throw Error(`${r} Expected "role" to be one of: system, user.`);return{content:expectString(i.content,r),role:c}}function normalizeSkillDefinition(e,r){let i=expectObjectRecord(e,r);expectOnlyKnownKeys(i,[`description`,`files`,`license`,`markdown`,`metadata`],r);let s={description:expectString(i.description,r),markdown:expectString(i.markdown,r)},c=i.license,l=getOptionalStringRecordProperty(i,`metadata`,r);return c!==void 0&&(s.license=expectString(c,r)),l!==void 0&&(s.metadata=l),i.files!==void 0&&(s.files=normalizeSkillFiles(i.files,r)),s}function normalizeSkillFiles(e,n){let r=expectObjectRecord(e,n),i={};for(let[e,t]of Object.entries(r)){if(typeof t==`string`||t instanceof Uint8Array){i[e]=t;continue}throw Error(`${n} Expected skill file "${e}" to be a string or Uint8Array.`)}return i}function normalizeScheduleDefinition(r,i){let o=expectObjectRecord(r,i);expectOnlyKnownKeys(o,[`cron`,`markdown`,`run`],i);let s=expectString(o.cron,i),c=o.markdown!==void 0,l=o.run!==void 0;if(c&&l)throw Error(`${i} Pass either "markdown" (fire-and-forget) or "run" (handler) — not both.`);if(!c&&!l)throw Error(`${i} Must provide either "markdown" (fire-and-forget) or "run" (handler).`);let u={cron:s};return c?u.markdown=expectString(o.markdown,i):u.run=expectFunction(o.run,i),u}export{normalizeAgentDefinition,normalizeInstructionsDefinition,normalizeScheduleDefinition,normalizeSkillDefinition};
|
|
1
|
+
import{expectFunction,expectObjectRecord,expectOnlyKnownKeys,expectPositiveInteger,expectProviderOptions,expectString,getOptionalStringRecordProperty}from"#internal/authored-module.js";import{isDynamicSentinel}from"#dynamic/definition.js";function normalizeAgentDefinition(e,i){let o=expectObjectRecord(e,i);if(expectOnlyKnownKeys(o,[`build`,`compaction`,`description`,`experimental`,`limits`,`model`,`modelContextWindowTokens`,`modelOptions`,`outputSchema`,`reasoning`],i),o.model===void 0)throw Error(`${i} The "model" field is required.`);let c={model:normalizeAgentModelDefinition(o.model,i)};if(isDynamicSentinel(c.model)&&(o.modelContextWindowTokens!==void 0||o.modelOptions!==void 0))throw Error(`${i} Dynamic model definitions do not support sibling "modelContextWindowTokens" or "modelOptions" fields. Return those overrides from the resolver selection instead.`);return o.description!==void 0&&(c.description=expectString(o.description,i)),o.compaction!==void 0&&(c.compaction=normalizeAgentCompactionDefinition(o.compaction,i)),o.build!==void 0&&(c.build=normalizeAgentBuildDefinition(o.build,i)),o.experimental!==void 0&&(c.experimental=normalizeAgentExperimentalDefinition(o.experimental,i)),o.modelOptions!==void 0&&(c.modelOptions=normalizeAgentModelOptions(o.modelOptions,i)),o.modelContextWindowTokens!==void 0&&(c.modelContextWindowTokens=expectPositiveInteger(o.modelContextWindowTokens,i)),o.outputSchema!==void 0&&(c.outputSchema=o.outputSchema),o.reasoning!==void 0&&(c.reasoning=normalizeAgentReasoningDefinition(o.reasoning,i)),o.limits!==void 0&&(c.limits=normalizeAgentLimitsDefinition(o.limits,i)),c}function normalizeAgentReasoningDefinition(e,t){let n=expectString(e,t);switch(n){case`provider-default`:case`none`:case`minimal`:case`low`:case`medium`:case`high`:case`xhigh`:return n;default:throw Error(t)}}function normalizeAgentModelDefinition(r,i){if(!isDynamicSentinel(r))return r;let a=expectObjectRecord(r,i);expectOnlyKnownKeys(a,[`events`,`kind`],i);let o=expectObjectRecord(a.events,i),c={};for(let[t,n]of Object.entries(o))c[t]=expectFunction(n,i);return{events:c,kind:a.kind}}function expectPositiveIntegerOrFalse(e,t){return e!==!1&&expectPositiveInteger(e,t)}function expectPositiveNumberOrFalse(e,t){if(e===!1)return!1;if(typeof e!=`number`||!Number.isFinite(e)||e<=0)throw Error(t);return e}function normalizeAgentLimitsDefinition(e,r){let i=expectObjectRecord(e,r);expectOnlyKnownKeys(i,[`maxInputTokensPerSession`,`maxOutputTokensPerSession`,`maxTokenCostUsdPerSession`,`sessionTimeoutMs`],r);let a={};return i.sessionTimeoutMs!==void 0&&(a.sessionTimeoutMs=expectPositiveIntegerOrFalse(i.sessionTimeoutMs,r)),i.maxInputTokensPerSession!==void 0&&(a.maxInputTokensPerSession=expectPositiveIntegerOrFalse(i.maxInputTokensPerSession,r)),i.maxOutputTokensPerSession!==void 0&&(a.maxOutputTokensPerSession=expectPositiveIntegerOrFalse(i.maxOutputTokensPerSession,r)),i.maxTokenCostUsdPerSession!==void 0&&(a.maxTokenCostUsdPerSession=expectPositiveNumberOrFalse(i.maxTokenCostUsdPerSession,r)),a}function normalizeAgentBuildDefinition(e,r){let i=expectObjectRecord(e,r);expectOnlyKnownKeys(i,[`externalDependencies`],r);let o={};if(i.externalDependencies!==void 0){if(!Array.isArray(i.externalDependencies))throw Error(r);o.externalDependencies=Object.freeze(i.externalDependencies.map(e=>expectString(e,r)))}return o}function normalizeAgentWorkflowDefinition(e,r){let i=expectObjectRecord(e,r);expectOnlyKnownKeys(i,[`world`],r);let a={};return i.world!==void 0&&(a.world=normalizeAgentWorkflowWorldDefinition(i.world,r)),a}function normalizeAgentWorkflowWorldDefinition(e,t){let n=expectString(e,t);if(n.trim()===``)throw Error(`${t} "experimental.workflow.world" must be a non-empty package name.`);return n}function normalizeAgentExperimentalDefinition(e,r){let i=expectObjectRecord(e,r);expectOnlyKnownKeys(i,[`instrumentationProviders`,`workflow`],r);let a={};if(i.instrumentationProviders!==void 0){if(typeof i.instrumentationProviders!=`boolean`)throw Error(`${r} "experimental.instrumentationProviders" must be a boolean.`);a.instrumentationProviders=i.instrumentationProviders}return i.workflow!==void 0&&(a.workflow=normalizeAgentWorkflowDefinition(i.workflow,r)),a}function normalizeAgentModelOptions(e,r){let a=expectObjectRecord(e,r);expectOnlyKnownKeys(a,[`providerOptions`],r);let o=a.providerOptions;return o===void 0?{}:{providerOptions:expectProviderOptions(o,r)}}function normalizeAgentCompactionDefinition(e,i){let a=expectObjectRecord(e,i);expectOnlyKnownKeys(a,[`model`,`modelContextWindowTokens`,`thresholdPercent`],i);let o={};if(a.model!==void 0){if(isDynamicSentinel(a.model))throw Error(`${i} "compaction.model" does not support defineDynamic — provide a static model.`);o.model=a.model}if(a.modelContextWindowTokens!==void 0&&(o.modelContextWindowTokens=expectPositiveInteger(a.modelContextWindowTokens,i)),a.thresholdPercent!==void 0){let e=a.thresholdPercent;if(typeof e!=`number`||!Number.isFinite(e)||e<0||e>1)throw Error(i);o.thresholdPercent=e}return o}function normalizeInstructionsDefinition(e,r){let i=expectObjectRecord(e,r);expectOnlyKnownKeys(i,[`content`,`markdown`,`role`],r);let o=Object.hasOwn(i,`content`),s=Object.hasOwn(i,`markdown`);if(o===s)throw Error(`${r} Provide exactly one of "content" or "markdown".`);if(s){if(Object.hasOwn(i,`role`))throw Error(`${r} The deprecated "markdown" shape does not support "role".`);return{content:expectString(i.markdown,r),role:`system`}}let c=i.role===void 0?`system`:expectString(i.role,r);if(c!==`system`&&c!==`user`)throw Error(`${r} Expected "role" to be one of: system, user.`);return{content:expectString(i.content,r),role:c}}function normalizeSkillDefinition(e,r){let i=expectObjectRecord(e,r);expectOnlyKnownKeys(i,[`description`,`files`,`license`,`markdown`,`metadata`],r);let s={description:expectString(i.description,r),markdown:expectString(i.markdown,r)},c=i.license,l=getOptionalStringRecordProperty(i,`metadata`,r);return c!==void 0&&(s.license=expectString(c,r)),l!==void 0&&(s.metadata=l),i.files!==void 0&&(s.files=normalizeSkillFiles(i.files,r)),s}function normalizeSkillFiles(e,n){let r=expectObjectRecord(e,n),i={};for(let[e,t]of Object.entries(r)){if(typeof t==`string`||t instanceof Uint8Array){i[e]=t;continue}throw Error(`${n} Expected skill file "${e}" to be a string or Uint8Array.`)}return i}function normalizeScheduleDefinition(r,i){let o=expectObjectRecord(r,i);expectOnlyKnownKeys(o,[`cron`,`markdown`,`run`],i);let s=expectString(o.cron,i),c=o.markdown!==void 0,l=o.run!==void 0;if(c&&l)throw Error(`${i} Pass either "markdown" (fire-and-forget) or "run" (handler) — not both.`);if(!c&&!l)throw Error(`${i} Must provide either "markdown" (fire-and-forget) or "run" (handler).`);let u={cron:s};return c?u.markdown=expectString(o.markdown,i):u.run=expectFunction(o.run,i),u}export{normalizeAgentDefinition,normalizeInstructionsDefinition,normalizeScheduleDefinition,normalizeSkillDefinition};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{expectFunction,expectObjectRecord,expectOnlyKnownKeys,expectPositiveInteger,expectString}from"#internal/authored-module.js";import{serializeInputSchema,serializeOutputSchema}from"#tools/schema.js";import{isDisabledToolSentinel}from"#tools/definition.js";import{assertResolverOnlyDynamicSentinel,isDynamicSentinel}from"#dynamic/definition.js";import{shouldRebindDynamicCallbacks}from"#internal/dynamic-tool-rebind.js";import{normalizeApproval}from"#internal/authored-definition/approval.js";import{isExperimentalWorkflowToolDefinition}from"#tools/workflow.js";import{isWebSearchToolDefinition}from"#tools/provided/web-search.js";import{readToolBehavior}from"#tools/behavior.js";function normalizeToolDefinition(n,r){if(isDynamicSentinel(n))return assertResolverOnlyDynamicSentinel(n,r),{kind:`dynamic-tool`,eventNames:Object.keys(n.events),rebindMissingCallbacks:shouldRebindDynamicCallbacks(n)};if(isDisabledToolSentinel(n))return{kind:`disabled`};if(isExperimentalWorkflowToolDefinition(n)){let e=expectObjectRecord(n,r);return expectOnlyKnownKeys(e,[`kind`,`maxSubagents`],r),{kind:`workflow-tool`,maxSubagents:e.maxSubagents===void 0?void 0:expectPositiveInteger(e.maxSubagents,r)}}if(isWebSearchToolDefinition(n)){let e=expectObjectRecord(n,r);expectOnlyKnownKeys(e,[`kind`,`provider`],r);let t=expectString(e.provider,r);if(t!==`exa`&&t!==`parallel`)throw Error(`${r} Expected "provider" to be one of: exa, parallel.`);return{kind:`web-search-tool`,provider:t}}let i=expectObjectRecord(n,r);expectOnlyKnownKeys(i,[`auth`,`description`,`execute`,`execution`,`inputSchema`,`approval`,`outputSchema`,`toModelOutput`],r);let
|
|
1
|
+
import{expectFunction,expectObjectRecord,expectOnlyKnownKeys,expectPositiveInteger,expectString}from"#internal/authored-module.js";import{serializeInputSchema,serializeOutputSchema}from"#tools/schema.js";import{isDisabledToolSentinel}from"#tools/definition.js";import{readWorkflowFunctionId}from"#internal/workflow/reference.js";import{assertResolverOnlyDynamicSentinel,isDynamicSentinel}from"#dynamic/definition.js";import{isWorkflowToolDefinition}from"#tools/workflow-definition.js";import{shouldRebindDynamicCallbacks}from"#internal/dynamic-tool-rebind.js";import{normalizeApproval}from"#internal/authored-definition/approval.js";import{isExperimentalWorkflowToolDefinition}from"#tools/workflow.js";import{isWebSearchToolDefinition}from"#tools/provided/web-search.js";import{readToolBehavior}from"#tools/behavior.js";function normalizeToolDefinition(n,r){if(isDynamicSentinel(n))return assertResolverOnlyDynamicSentinel(n,r),{kind:`dynamic-tool`,eventNames:Object.keys(n.events),rebindMissingCallbacks:shouldRebindDynamicCallbacks(n)};if(isDisabledToolSentinel(n))return{kind:`disabled`};if(isExperimentalWorkflowToolDefinition(n)){let e=expectObjectRecord(n,r);return expectOnlyKnownKeys(e,[`kind`,`maxSubagents`],r),{kind:`workflow-tool`,maxSubagents:e.maxSubagents===void 0?void 0:expectPositiveInteger(e.maxSubagents,r)}}if(isWebSearchToolDefinition(n)){let e=expectObjectRecord(n,r);expectOnlyKnownKeys(e,[`kind`,`provider`],r);let t=expectString(e.provider,r);if(t!==`exa`&&t!==`parallel`)throw Error(`${r} Expected "provider" to be one of: exa, parallel.`);return{kind:`web-search-tool`,provider:t}}let i=expectObjectRecord(n,r),a=readWorkflowFunctionId(i.execute);if(isWorkflowToolDefinition(n)){if(a===void 0)throw Error(`${r} defineWorkflowTool() requires a compiled workflow executor. Start execute with "use workflow" and export defineWorkflowTool() as the default export of a static tool module.`)}else if(a!==void 0)throw Error(`${r} Workflow executors require defineWorkflowTool() from "eve/tools". Replace defineTool() or the bare tool object with defineWorkflowTool().`);expectOnlyKnownKeys(i,[`auth`,`description`,`execute`,`execution`,`inputSchema`,`approval`,`outputSchema`,`toModelOutput`],r);let o=i.inputSchema===void 0?null:serializeInputSchema(i.inputSchema),s=serializeOutputSchema(i.outputSchema),c=readToolBehavior(n),l=i.execute!==void 0;!l&&c?.handling?.kind!==`dispatch`&&c?.handling?.kind!==`request-input`&&expectFunction(i.execute,r);let u={description:expectString(i.description,r),hasApproval:i.approval!==void 0,hasExecute:l,hasModelOutputProjection:i.toModelOutput!==void 0,inputSchema:o};if(c!==void 0&&(u.behavior=c),l&&(u.execute=expectFunction(i.execute,r)),i.execution!==void 0){if(!l)throw Error(`${r} Execute-less native tools cannot use background execution.`);let e=expectString(i.execution,r);if(e!==`background`)throw Error(`${r} Expected "execution" to be "background".`);u.execution=e}return s!==void 0&&(u.outputSchema=s),i.approval!==void 0&&normalizeApproval(i.approval,r),i.toModelOutput!==void 0&&expectFunction(i.toModelOutput,r),i.auth!==void 0&&expectFunction(expectObjectRecord(i.auth,r).getToken,r),{kind:`tool`,definition:u}}export{normalizeToolDefinition};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type ProjectSource } from "#discover/project-source.js";
|
|
2
|
+
export declare function isEveProjectRoot(root: string, options?: {
|
|
3
|
+
readonly source?: ProjectSource;
|
|
4
|
+
}): Promise<boolean>;
|
|
5
|
+
/** Find the nearest package boundary and return it only when it owns an eve project. */
|
|
6
|
+
export declare function findEveProjectRoot(startPath: string, options?: {
|
|
7
|
+
readonly source?: ProjectSource;
|
|
8
|
+
}): Promise<string | undefined>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{dirname,join,resolve}from"node:path";import{createDiskProjectSource}from"#discover/project-source.js";function isJsonObject(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}async function packageDeclaresEve(e,t){let n;try{n=JSON.parse(await t.readTextFile(e))}catch(t){throw Error(`The package.json at ${e} is not valid JSON.`,{cause:t})}if(!isJsonObject(n))return!1;let r=n.dependencies;return isJsonObject(r)&&typeof r.eve==`string`}async function isEveProjectRoot(e,i={}){let a=i.source??createDiskProjectSource(),o=join(resolve(e),`package.json`);return await a.stat(o)===`file`&&packageDeclaresEve(o,a)}async function findEveProjectRoot(i,a={}){let o=a.source??createDiskProjectSource(),s=resolve(i),c=await o.stat(s)===`directory`?s:dirname(s);for(;;){let n=join(c,`package.json`);if(await o.stat(n)===`file`)return await packageDeclaresEve(n,o)?c:void 0;let r=dirname(c);if(r===c)return;c=r}}export{findEveProjectRoot,isEveProjectRoot};
|