eve 0.47.6 → 0.48.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +54 -0
- package/dist/src/channel/adapter.js +1 -1
- package/dist/src/channel/delivery-metadata.d.ts +1 -0
- package/dist/src/channel/delivery-metadata.js +1 -1
- package/dist/src/channel/session.js +1 -1
- package/dist/src/channel/types.d.ts +10 -8
- package/dist/src/chunks/{use-eve-agent-DkUB0Ok4.js → use-eve-agent-BZnOzAVd.js} +25 -6
- package/dist/src/chunks/{use-eve-agent-DjYwFJF7.js → use-eve-agent-Bgp6INfi.js} +25 -6
- package/dist/src/cli/commands/init.js +1 -1
- package/dist/src/cli/commands/integration-connect.d.ts +2 -1
- package/dist/src/cli/commands/integration-connect.js +1 -1
- package/dist/src/cli/commands/register-integration-commands.d.ts +3 -1
- package/dist/src/cli/commands/register-integration-commands.js +1 -1
- package/dist/src/cli/commands/registry-declared-setups.js +1 -1
- package/dist/src/cli/commands/registry-install-transaction.d.ts +23 -0
- package/dist/src/cli/commands/registry-install-transaction.js +1 -0
- package/dist/src/cli/commands/registry-package.js +1 -1
- package/dist/src/cli/commands/registry.js +1 -1
- package/dist/src/cli/commands/setup-headless.d.ts +6 -0
- package/dist/src/cli/commands/setup-headless.js +1 -1
- package/dist/src/cli/dev/command-options.d.ts +2 -0
- package/dist/src/cli/dev/run-interactive-ui.js +1 -1
- package/dist/src/cli/dev/tui/blocks.js +1 -1
- package/dist/src/cli/dev/tui/line-editor.d.ts +4 -0
- package/dist/src/cli/dev/tui/line-editor.js +3 -3
- package/dist/src/cli/dev/tui/prompt-command-handler.js +1 -1
- package/dist/src/cli/dev/tui/registry-result-message.d.ts +17 -0
- package/dist/src/cli/dev/tui/registry-result-message.js +3 -0
- package/dist/src/cli/dev/tui/runner.d.ts +13 -4
- package/dist/src/cli/dev/tui/runner.js +1 -1
- package/dist/src/cli/dev/tui/setup-commands.d.ts +9 -3
- package/dist/src/cli/dev/tui/setup-commands.js +2 -3
- package/dist/src/cli/dev/tui/setup-flow.d.ts +15 -5
- package/dist/src/cli/dev/tui/setup-panel.d.ts +6 -1
- package/dist/src/cli/dev/tui/setup-panel.js +4 -4
- package/dist/src/cli/dev/tui/setup-selection-input.d.ts +1 -0
- package/dist/src/cli/dev/tui/setup-selection-input.js +1 -1
- package/dist/src/cli/dev/tui/stream-format.d.ts +8 -0
- package/dist/src/cli/dev/tui/stream-format.js +2 -2
- package/dist/src/cli/dev/tui/subagent-pump.d.ts +3 -0
- package/dist/src/cli/dev/tui/subagent-pump.js +1 -1
- package/dist/src/cli/dev/tui/terminal-renderer.js +12 -12
- package/dist/src/cli/dev/tui/tui-prompter.js +1 -1
- package/dist/src/cli/dev/tui/tui.d.ts +3 -4
- package/dist/src/cli/dev/tui/tui.js +1 -1
- package/dist/src/cli/run.js +2 -2
- package/dist/src/client/agent-info-schema.d.ts +1 -1
- package/dist/src/client/agent-info-schema.js +1 -1
- package/dist/src/client/open-stream.d.ts +1 -0
- package/dist/src/client/open-stream.js +1 -1
- package/dist/src/client/session.js +1 -1
- package/dist/src/compiled/.vendor-stamp.json +2 -1
- package/dist/src/compiled/@opentelemetry/api/index.d.ts +6 -0
- package/dist/src/compiled/@workflow/builders/LICENSE.md +201 -0
- package/dist/src/compiled/@workflow/builders/index.d.ts +62 -0
- package/dist/src/compiled/@workflow/builders/index.js +1 -0
- package/dist/src/compiler/extension-compatibility.d.ts +2 -2
- package/dist/src/compiler/extension-compatibility.js +1 -1
- package/dist/src/compiler/manifest.d.ts +7 -17
- package/dist/src/compiler/manifest.js +1 -1
- package/dist/src/compiler/normalize-manifest.js +1 -1
- package/dist/src/compiler/normalize-tool.d.ts +0 -1
- package/dist/src/compiler/normalize-tool.js +1 -1
- package/dist/src/context/build-dynamic-tools.d.ts +2 -2
- package/dist/src/context/build-dynamic-tools.js +1 -1
- package/dist/src/context/container.d.ts +7 -0
- package/dist/src/context/container.js +1 -1
- package/dist/src/context/dynamic-tool-lifecycle.d.ts +16 -9
- package/dist/src/context/dynamic-tool-lifecycle.js +1 -1
- package/dist/src/context/dynamic-tool-metadata.d.ts +44 -0
- package/dist/src/context/dynamic-tool-metadata.js +1 -0
- package/dist/src/context/keys.d.ts +14 -22
- package/dist/src/context/keys.js +1 -1
- package/dist/src/eve-channel/index.js +1 -1
- package/dist/src/eve-channel/request.d.ts +0 -1
- package/dist/src/eve-channel/request.js +2 -2
- package/dist/src/eve-channel/types.d.ts +7 -7
- package/dist/src/execution/accepted-delivery-deployment.d.ts +7 -0
- package/dist/src/execution/accepted-delivery-deployment.js +1 -0
- package/dist/src/execution/cancel-descendant-turns-step.d.ts +4 -1
- package/dist/src/execution/cancel-descendant-turns-step.js +1 -1
- package/dist/src/execution/create-session-step.js +1 -1
- package/dist/src/execution/delegation-tool.d.ts +1 -2
- package/dist/src/execution/delegation-tool.js +1 -1
- package/dist/src/execution/dispatch-runtime-actions-shared.d.ts +14 -4
- package/dist/src/execution/dispatch-runtime-actions-shared.js +1 -1
- package/dist/src/execution/dispatch-runtime-actions-step.js +1 -1
- package/dist/src/execution/dispatch-turn-step.js +1 -1
- package/dist/src/execution/dispatch-workflow-runtime-actions-step.js +1 -1
- package/dist/src/execution/durable-session-migrations/turn-workflow-v1-to-v2.d.ts +2 -0
- package/dist/src/execution/durable-session-migrations/turn-workflow-v1-to-v2.js +1 -0
- package/dist/src/execution/durable-session-migrations/turn-workflow.d.ts +25 -3
- package/dist/src/execution/durable-session-migrations/turn-workflow.js +1 -1
- package/dist/src/execution/eve-workflow-attributes.js +1 -1
- package/dist/src/execution/finalize-terminal-session.d.ts +17 -0
- package/dist/src/execution/finalize-terminal-session.js +1 -0
- package/dist/src/execution/inline-turn.d.ts +29 -0
- package/dist/src/execution/inline-turn.js +1 -0
- package/dist/src/execution/next-driver-action.d.ts +4 -0
- package/dist/src/execution/node-step.js +1 -1
- package/dist/src/execution/parked-delivery-wait.js +1 -1
- package/dist/src/execution/pending-turn-state.d.ts +1 -0
- package/dist/src/execution/pending-turn-state.js +1 -1
- package/dist/src/execution/prepared-agent-action.d.ts +7 -0
- package/dist/src/execution/prepared-agent-action.js +1 -0
- package/dist/src/execution/proxied-deliver-step.js +1 -1
- package/dist/src/execution/remote-agent-dispatch.d.ts +2 -0
- package/dist/src/execution/remote-agent-dispatch.js +1 -1
- package/dist/src/execution/session-command-token.d.ts +2 -0
- package/dist/src/execution/session-command-token.js +1 -1
- package/dist/src/execution/settle-cancelled-turn-step.js +1 -1
- package/dist/src/execution/stable-workflow-names.d.ts +12 -0
- package/dist/src/execution/stable-workflow-names.js +1 -0
- package/dist/src/execution/subagent-event-proxy-step.d.ts +3 -0
- package/dist/src/execution/subagent-event-proxy-step.js +1 -1
- package/dist/src/execution/subagent-hitl-proxy.d.ts +2 -1
- package/dist/src/execution/subagent-hitl-proxy.js +1 -1
- package/dist/src/execution/subagent-start-local.d.ts +3 -0
- package/dist/src/execution/subagent-start-local.js +1 -1
- package/dist/src/execution/subagent-start-remote.d.ts +2 -0
- package/dist/src/execution/subagent-start-remote.js +1 -1
- package/dist/src/execution/subagent-tool.d.ts +1 -0
- package/dist/src/execution/subagent-tool.js +1 -1
- package/dist/src/execution/tasks/child/steps.d.ts +2 -0
- package/dist/src/execution/tasks/child/steps.js +1 -1
- package/dist/src/execution/tasks/child/update.d.ts +3 -2
- package/dist/src/execution/tasks/child/workflow.js +1 -1
- package/dist/src/execution/tasks/parent/control-shared.d.ts +5 -4
- package/dist/src/execution/tasks/parent/dispatch-task-step.js +1 -1
- package/dist/src/execution/tasks/parent/dispatch.d.ts +4 -3
- package/dist/src/execution/tasks/parent/dispatch.js +1 -1
- package/dist/src/execution/tasks/parent/hitl-proxy-steps.js +1 -1
- package/dist/src/execution/tasks/parent/tool-execution.js +1 -1
- package/dist/src/execution/terminal-session-completion-step.js +1 -1
- package/dist/src/execution/terminal-session-event.d.ts +13 -0
- package/dist/src/execution/terminal-session-event.js +1 -0
- package/dist/src/execution/terminal-session-failure-step.d.ts +1 -0
- package/dist/src/execution/terminal-session-failure-step.js +1 -1
- package/dist/src/execution/tool-run/answer.d.ts +3 -0
- package/dist/src/execution/tool-run/answer.js +1 -0
- package/dist/src/execution/tool-run/background.d.ts +14 -0
- package/dist/src/execution/tool-run/background.js +1 -0
- package/dist/src/execution/tool-run/cancel.d.ts +7 -0
- package/dist/src/execution/tool-run/cancel.js +1 -0
- package/dist/src/execution/tool-run/dispatch.d.ts +24 -0
- package/dist/src/execution/tool-run/dispatch.js +1 -0
- package/dist/src/execution/tool-run/emit-run-report-step.d.ts +7 -0
- package/dist/src/execution/tool-run/emit-run-report-step.js +1 -0
- package/dist/src/execution/tool-run/messages.d.ts +70 -0
- package/dist/src/execution/tool-run/messages.js +1 -0
- package/dist/src/execution/tool-run/owner-channels.d.ts +29 -0
- package/dist/src/execution/tool-run/owner-channels.js +1 -0
- package/dist/src/execution/tool-run/owner-inbox.d.ts +11 -0
- package/dist/src/execution/tool-run/owner-inbox.js +1 -0
- package/dist/src/execution/tool-run/owner.d.ts +13 -0
- package/dist/src/execution/tool-run/owner.js +1 -0
- package/dist/src/execution/tool-run/resume-hook-step.d.ts +4 -0
- package/dist/src/execution/tool-run/resume-hook-step.js +1 -0
- package/dist/src/execution/tool-run/run-control.d.ts +18 -0
- package/dist/src/execution/tool-run/run-control.js +1 -0
- package/dist/src/execution/tool-run/start.d.ts +11 -0
- package/dist/src/execution/tool-run/start.js +1 -0
- package/dist/src/execution/tool-run/types.d.ts +21 -0
- package/dist/src/execution/tool-run/types.js +1 -0
- package/dist/src/execution/tool-run/workflow.d.ts +9 -0
- package/dist/src/execution/tool-run/workflow.js +1 -0
- package/dist/src/execution/tools/subagent/local.d.ts +3 -4
- package/dist/src/execution/tools/subagent/local.js +1 -1
- package/dist/src/execution/tools/subagent/remote.d.ts +4 -1
- package/dist/src/execution/tools/subagent/remote.js +1 -1
- package/dist/src/execution/turn-cancellation-control.d.ts +2 -0
- package/dist/src/execution/turn-cancellation-control.js +1 -1
- package/dist/src/execution/turn-control-receiver.js +1 -1
- package/dist/src/execution/turn-dispatch.d.ts +4 -2
- package/dist/src/execution/turn-dispatch.js +1 -1
- package/dist/src/execution/turn-execution-cursor.js +1 -1
- package/dist/src/execution/turn-workflow.js +1 -1
- package/dist/src/execution/wire/session-inbox-contract.d.ts +2 -2
- package/dist/src/execution/wire/session-inbox-contract.js +1 -1
- package/dist/src/execution/wire/session-inbox-encoder.d.ts +6 -2
- package/dist/src/execution/wire/session-inbox-encoder.js +1 -1
- package/dist/src/execution/wire/session-inbox-resume.js +1 -1
- package/dist/src/execution/wire/session-inbox-wire.js +1 -1
- package/dist/src/execution/wire/session-inbox-wire.v1.js +1 -1
- package/dist/src/execution/wire/session-inbox-wire.v2-migration.d.ts +0 -2
- package/dist/src/execution/wire/session-inbox-wire.v2-migration.js +1 -1
- package/dist/src/execution/wire/session-inbox-wire.v2.migration.d.ts +3 -0
- package/dist/src/execution/wire/session-inbox-wire.v2.migration.js +1 -0
- package/dist/src/execution/wire/session-inbox-wire.v3.d.ts +480 -0
- package/dist/src/execution/wire/session-inbox-wire.v3.js +1 -0
- package/dist/src/execution/wire/session-inbox-wire.v3.migration.d.ts +3 -0
- package/dist/src/execution/wire/session-inbox-wire.v3.migration.js +1 -0
- package/dist/src/execution/workflow-entry-finalization.d.ts +22 -0
- package/dist/src/execution/workflow-entry-finalization.js +1 -0
- package/dist/src/execution/workflow-entry.d.ts +1 -1
- package/dist/src/execution/workflow-entry.js +1 -1
- package/dist/src/execution/workflow-registry.d.ts +5 -0
- package/dist/src/execution/workflow-registry.js +1 -0
- package/dist/src/execution/workflow-runtime.d.ts +9 -11
- package/dist/src/execution/workflow-runtime.js +1 -1
- package/dist/src/execution/workflow-steps.js +1 -1
- package/dist/src/execution/workflow-webhook-route.d.ts +4 -0
- package/dist/src/execution/workflow-webhook-route.js +1 -0
- package/dist/src/framework/sources/registry.js +1 -1
- package/dist/src/harness/advertised-tools.d.ts +3 -0
- package/dist/src/harness/advertised-tools.js +1 -1
- package/dist/src/harness/approval-delivery-coordinator.d.ts +6 -0
- package/dist/src/harness/approval-delivery-coordinator.js +1 -1
- package/dist/src/harness/attachment-staging.js +1 -1
- package/dist/src/harness/background-tools.d.ts +2 -0
- package/dist/src/harness/emission.js +1 -1
- package/dist/src/harness/execute-tool.d.ts +2 -28
- package/dist/src/harness/hitl/pending-input-resolution.js +1 -1
- package/dist/src/harness/input-extraction.d.ts +3 -0
- package/dist/src/harness/input-extraction.js +1 -1
- package/dist/src/harness/input-requests.js +1 -1
- package/dist/src/harness/messages.js +1 -1
- package/dist/src/harness/proxy-input-requests.d.ts +10 -0
- package/dist/src/harness/proxy-input-requests.js +1 -1
- package/dist/src/harness/runtime-actions.d.ts +11 -3
- package/dist/src/harness/runtime-actions.js +1 -1
- package/dist/src/harness/session-limit-enforcement.js +1 -1
- package/dist/src/harness/stale-input-responses.d.ts +2 -1
- package/dist/src/harness/stale-input-responses.js +1 -1
- package/dist/src/harness/subagent-depth.d.ts +3 -4
- package/dist/src/harness/subagent-depth.js +1 -1
- package/dist/src/harness/tool-loop.js +2 -2
- package/dist/src/harness/tool-runs.d.ts +21 -0
- package/dist/src/harness/tool-runs.js +1 -0
- package/dist/src/harness/tools.d.ts +0 -2
- package/dist/src/harness/tools.js +1 -1
- package/dist/src/harness/types.d.ts +6 -7
- package/dist/src/harness/workflow-runtime-action-state.d.ts +3 -3
- package/dist/src/harness/workflow-runtime-action-state.js +1 -1
- package/dist/src/harness/workflow-sandbox.js +1 -1
- package/dist/src/harness/workflow-subagent-limit.d.ts +4 -4
- package/dist/src/instrumentation/ai-sdk-telemetry.d.ts +1 -0
- package/dist/src/instrumentation/ai-sdk-telemetry.js +1 -1
- package/dist/src/instrumentation/content-policy.d.ts +3 -1
- package/dist/src/instrumentation/content-policy.js +1 -1
- package/dist/src/instrumentation/runtime.d.ts +5 -2
- package/dist/src/instrumentation/runtime.js +1 -1
- package/dist/src/internal/application/build-output-environment.d.ts +2 -0
- package/dist/src/internal/application/build-output-environment.js +1 -0
- package/dist/src/internal/application/package.js +1 -1
- package/dist/src/internal/application/paths.d.ts +1 -2
- package/dist/src/internal/application/paths.js +1 -1
- package/dist/src/internal/attachments/errors.d.ts +3 -0
- package/dist/src/internal/authored-definition/schema-backed.d.ts +6 -2
- package/dist/src/internal/authored-definition/schema-backed.js +1 -1
- package/dist/src/internal/authored-module-loader.d.ts +7 -1
- package/dist/src/internal/authored-module-loader.js +3 -3
- package/dist/src/internal/authored-package-boundary.js +1 -1
- package/dist/src/internal/authored-runtime-modules.d.ts +2 -0
- package/dist/src/internal/authored-runtime-modules.js +1 -1
- package/dist/src/internal/client-context.d.ts +2 -0
- package/dist/src/internal/client-context.js +1 -0
- package/dist/src/internal/nitro/dev-client-address.d.ts +2 -0
- package/dist/src/internal/nitro/dev-client-address.js +1 -1
- package/dist/src/internal/nitro/development-generation.d.ts +2 -0
- package/dist/src/internal/nitro/development-generation.js +1 -1
- package/dist/src/internal/nitro/host/create-application-nitro.js +1 -1
- package/dist/src/internal/nitro/host/dev-authored-source-watcher.d.ts +2 -2
- package/dist/src/internal/nitro/host/dev-authored-source-watcher.js +1 -1
- package/dist/src/internal/nitro/host/dev-host-fingerprint.js +1 -1
- package/dist/src/internal/nitro/host/start-development-server.js +2 -2
- package/dist/src/internal/nitro/routes/agent-info/build-agent-info-response.js +1 -1
- package/dist/src/internal/nitro/routes/channel-dispatch.js +1 -1
- package/dist/src/internal/workflow-bundle/authored-workflow-directives.d.ts +17 -0
- package/dist/src/internal/workflow-bundle/authored-workflow-directives.js +1 -0
- package/dist/src/internal/workflow-bundle/authored-workflow-modules.d.ts +19 -0
- package/dist/src/internal/workflow-bundle/authored-workflow-modules.js +1 -0
- package/dist/src/internal/workflow-bundle/builder-support.d.ts +17 -2
- package/dist/src/internal/workflow-bundle/builder-support.js +4 -3
- package/dist/src/internal/workflow-bundle/builder.d.ts +2 -2
- package/dist/src/internal/workflow-bundle/builder.js +2 -2
- package/dist/src/internal/workflow-bundle/dynamic-capability-transform-plugin.d.ts +2 -0
- package/dist/src/internal/workflow-bundle/dynamic-capability-transform-plugin.js +1 -1
- package/dist/src/internal/workflow-bundle/dynamic-tool-ast-references.d.ts +3 -0
- package/dist/src/internal/workflow-bundle/dynamic-tool-transform.d.ts +1 -1
- package/dist/src/internal/workflow-bundle/dynamic-tool-transform.js +1 -1
- package/dist/src/internal/workflow-bundle/workflow-builders.d.ts +6 -2
- package/dist/src/internal/workflow-bundle/workflow-builders.js +1 -1
- package/dist/src/internal/workflow-bundle/workflow-core-shim.d.ts +3 -0
- package/dist/src/internal/workflow-bundle/workflow-core-shim.js +1 -1
- package/dist/src/internal/workflow-bundle/workflow-directive-ast.d.ts +7 -0
- package/dist/src/internal/workflow-bundle/workflow-directive-ast.js +1 -0
- package/dist/src/internal/workflow-bundle/workflow-transformer.d.ts +15 -1
- package/dist/src/internal/workflow-bundle/workflow-transformer.js +4 -4
- package/dist/src/packages/eve-catalog/src/index.js +1 -1
- package/dist/src/protocol/baggage.d.ts +6 -0
- package/dist/src/protocol/baggage.js +1 -0
- package/dist/src/protocol/routes.d.ts +2 -2
- package/dist/src/public/channels/slack/attachments.js +1 -1
- package/dist/src/public/channels/teams/attachments.d.ts +2 -2
- package/dist/src/public/channels/teams/attachments.js +1 -1
- package/dist/src/public/channels/teams/teamsChannel.js +1 -1
- package/dist/src/public/channels/telegram/attachments.js +1 -1
- package/dist/src/public/definitions/remote-agent.d.ts +6 -3
- package/dist/src/public/local-dev.d.ts +9 -0
- package/dist/src/public/local-dev.js +1 -0
- package/dist/src/public/next/vercel-output-config.js +1 -1
- package/dist/src/public/workflow/index.d.ts +3 -0
- package/dist/src/public/workflow/index.js +1 -0
- package/dist/src/public/workflow-modules.d.js +1 -0
- package/dist/src/public/workflow-modules.d.ts +11 -0
- package/dist/src/runtime/actions/keys.d.ts +3 -0
- package/dist/src/runtime/actions/keys.js +1 -1
- package/dist/src/runtime/agent/bootstrap.js +1 -1
- package/dist/src/runtime/loaders/bundled-artifacts.js +1 -1
- package/dist/src/runtime/local-dev-capability.d.ts +55 -0
- package/dist/src/runtime/local-dev-capability.js +1 -0
- package/dist/src/runtime/resolve-agent-graph.js +1 -1
- package/dist/src/runtime/resolve-agent.js +1 -1
- package/dist/src/runtime/resolve-tool.js +1 -1
- package/dist/src/runtime/sessions/runtime-session.d.ts +1 -0
- package/dist/src/runtime/sessions/runtime-session.js +1 -1
- package/dist/src/runtime/sessions/turn.d.ts +3 -0
- package/dist/src/runtime/subagents/registry.js +1 -1
- package/dist/src/runtime/tools/registry.d.ts +1 -0
- package/dist/src/runtime/tools/registry.js +1 -1
- package/dist/src/runtime/types.d.ts +2 -2
- package/dist/src/services/dev-client/client-options.d.ts +1 -0
- package/dist/src/services/dev-client/client-options.js +1 -1
- package/dist/src/services/dev-client/runtime-artifacts.d.ts +2 -0
- package/dist/src/services/dev-client/runtime-artifacts.js +1 -1
- package/dist/src/setup/connection-connector.d.ts +4 -2
- package/dist/src/setup/connection-connector.js +2 -2
- package/dist/src/setup/flows/login.js +1 -1
- package/dist/src/setup/flows/model.js +1 -1
- package/dist/src/setup/flows/provider.d.ts +5 -0
- package/dist/src/setup/flows/provider.js +4 -4
- package/dist/src/setup/flows/registry-session.d.ts +24 -7
- package/dist/src/setup/flows/registry-session.js +1 -1
- package/dist/src/setup/flows/registry.d.ts +35 -29
- package/dist/src/setup/flows/registry.js +2 -1
- package/dist/src/setup/integrations/web/setup.d.ts +0 -2
- package/dist/src/setup/integrations/web/setup.js +1 -1
- package/dist/src/setup/prompter.d.ts +24 -4
- package/dist/src/setup/prompter.js +1 -1
- package/dist/src/setup/scaffold/create/project.js +2 -2
- package/dist/src/setup/vercel-project.js +0 -0
- package/dist/src/shared/dispatch-action.d.ts +30 -0
- package/dist/src/shared/dispatch-action.js +1 -0
- package/dist/src/shared/forwarded-trace-policy.d.ts +28 -0
- package/dist/src/shared/forwarded-trace-policy.js +1 -0
- package/dist/src/shared/instrumentation-decision.d.ts +3 -0
- package/dist/src/shared/instrumentation-decision.js +1 -1
- package/dist/src/shared/workflow-sandbox.d.ts +1 -1
- package/dist/src/svelte/index.js +1 -1
- package/dist/src/svelte/use-eve-agent.js +1 -1
- package/dist/src/tasks/json.js +1 -1
- package/dist/src/tools/behavior.d.ts +61 -0
- package/dist/src/tools/behavior.js +1 -0
- package/dist/src/tools/definition.d.ts +39 -3
- package/dist/src/tools/durable-callbacks.d.ts +1 -0
- package/dist/src/tools/framework/agent.d.ts +2 -11
- package/dist/src/tools/framework/agent.js +1 -1
- package/dist/src/tools/framework/ask-question.d.ts +2 -14
- package/dist/src/tools/framework/ask-question.js +1 -1
- package/dist/src/tools/framework/task-cancel.d.ts +2 -7
- package/dist/src/tools/framework/task-cancel.js +1 -1
- package/dist/src/tools/framework/task-contract.d.ts +0 -2
- package/dist/src/tools/framework/task-contract.js +1 -1
- package/dist/src/tools/framework/task-update.d.ts +2 -7
- package/dist/src/tools/framework/task-update.js +1 -1
- package/dist/src/tools/native-definition.d.ts +6 -0
- package/dist/src/tools/native-definition.js +1 -0
- package/dist/src/tools/provided/load-skill.js +1 -1
- package/dist/src/tracing/agent-approval-instrumentation.js +1 -1
- package/dist/src/tracing/agent-channel-delivery-instrumentation.js +1 -1
- package/dist/src/tracing/agent-otel-provider.js +2 -2
- package/dist/src/tracing/agent-otel-session-context.js +1 -1
- package/dist/src/tracing/agent-tool-instrumentation.js +1 -1
- package/dist/src/tracing/agent-trace-context-store.d.ts +1 -1
- package/dist/src/tracing/agent-trace-context-store.js +1 -1
- package/dist/src/tracing/install-instrumentation-runtime.js +1 -1
- package/dist/src/tracing/otel-declaration.d.ts +5 -3
- package/dist/src/tracing/otel-registration.d.ts +3 -1
- package/dist/src/tracing/otel-registration.js +1 -1
- package/dist/src/vue/index.js +1 -1
- package/dist/src/vue/use-eve-agent.js +1 -1
- package/docs/channels/custom.mdx +2 -0
- package/docs/channels/eve.mdx +5 -1
- package/docs/channels/teams.mdx +6 -1
- package/docs/concepts/sessions-runs-and-streaming.md +4 -2
- package/docs/guides/auth-and-route-protection.md +5 -1
- package/docs/guides/client/messages.mdx +6 -0
- package/docs/guides/dev-tui.md +30 -18
- package/docs/guides/remote-agents.md +25 -0
- package/docs/reference/cli.md +2 -2
- package/docs/reference/typescript-api.md +24 -0
- package/docs/tools/meta.json +1 -1
- package/docs/tools/overview.mdx +7 -0
- package/docs/tools/workflows.mdx +288 -0
- package/package.json +17 -1
- package/dist/src/execution/tools/tasks.d.ts +0 -18
- package/dist/src/execution/tools/tasks.js +0 -1
- package/dist/src/internal/authored-directive-prologue.d.ts +0 -4
- package/dist/src/internal/authored-directive-prologue.js +0 -1
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{isInputResponse}from"#shared/input.js";import{hasInternalRefScheme}from"#internal/attachments/url-refs.js";import{EVE_MESSAGE_STREAM_CONTENT_TYPE,EVE_MESSAGE_STREAM_FORMAT,EVE_MESSAGE_STREAM_VERSION,EVE_SESSION_ID_HEADER,EVE_STREAM_FORMAT_HEADER,EVE_STREAM_TAIL_INDEX_HEADER,EVE_STREAM_VERSION_HEADER}from"#protocol/message.js";import{parseJsonObject}from"#shared/json.js";import{collectUploadPolicyViolations,formatUploadPolicyViolation}from"#public/channels/upload-policy.js";import{parseSessionCallback}from"#channel/session-callback.js";import{parseActivityObserverField,validateActivityObserverBinding}from"#eve-channel/activity-observer-request.js";async function deriveOperationContinuationToken(e){let t=JSON.stringify([`eve:create-session:v1`,e.auth.authenticator,e.auth.issuer??null,e.auth.principalType,e.auth.principalId,e.operationId]),n=await crypto.subtle.digest(`SHA-256`,new TextEncoder().encode(t));return`eve:op:${Array.from(new Uint8Array(n),e=>e.toString(16).padStart(2,`0`)).join(``).slice(0,32)}`}function parseCreateBody(e){if(e.inputResponses!==void 0)return Response.json({error:`'inputResponses' is only accepted for an existing session.`,ok:!1},{status:400});let t=parseMessageField(e.message);if(t instanceof Response)return t;let n=parseClientContextField(e.clientContext);if(n instanceof Response)return n;let r=parseCallbackField(e.callback);if(r instanceof Response)return r;let i=parseCapabilitiesField(e.capabilities);if(i instanceof Response)return i;let a=parseActivityObserverField(e.activityObserver);if(a instanceof Response)return a;if(a!==void 0){let e=validateActivityObserverBinding(a,r);if(e!==void 0)return e}let o=parseModeField(e.mode);if(o instanceof Response)return o;let s=parseOutputSchemaField(e.outputSchema);if(s instanceof Response)return s;if(t===void 0)return Response.json({error:`Missing or empty 'message' field.`,ok:!1},{status:400});let c=e.operationId;if(c!==void 0&&(typeof c!=`string`||!c))return Response.json({error:`Expected 'operationId' to be a non-empty string.`,ok:!1},{status:400});let l={activityObserver:a,callback:r,capabilities:i,message:t,mode:o,context:n,outputSchema:s};return typeof c==`string`&&(l.operationId=c),l}function parseSessionMessageBody(e){let t=rejectSessionContinuationToken(e);if(t!==null)return t;let n=parseMessageField(e.message);if(n instanceof Response)return n;let r=parseCallbackField(e.callback);if(r instanceof Response)return r;let i=parseActivityObserverField(e.activityObserver);if(i instanceof Response)return i;if(i!==void 0){let e=validateActivityObserverBinding(i,r);if(e!==void 0)return e}let a=parseInputResponses$1(e.inputResponses);if(a instanceof Response)return a;let o=parseClientContextField(e.clientContext);if(o instanceof Response)return o;let s=parseOutputSchemaField(e.outputSchema);if(s instanceof Response)return s;let c=parseTurnPolicyField(e.turnPolicy);return c instanceof Response?c:n===void 0&&a===void 0?Response.json({error:`Expected a non-empty 'message' or a non-empty 'inputResponses' array.`,ok:!1},{status:400}):n!==void 0&&a!==void 0?Response.json({error:`'message' and 'inputResponses' are mutually exclusive.`,ok:!1},{status:400}):{activityObserver:i,callback:r,message:n,inputResponses:a,context:o,outputSchema:s,turnPolicy:c}}async function parseCancelTurnBody(e){let t=await parseOptionalJsonRequest(e);if(t instanceof Response)return t;let n=rejectSessionContinuationToken(t);if(n!==null)return n;let r=t.turnId,i=t.taskId;if(r!==void 0&&(typeof r!=`string`||r.length===0))return Response.json({error:`Expected 'turnId' to be a non-empty string.`,ok:!1},{status:400});if(i!==void 0&&(typeof i!=`string`||i.length===0))return Response.json({error:`Expected 'taskId' to be a non-empty string.`,ok:!1},{status:400});let a={};return typeof i==`string`&&(a.taskId=i),typeof r==`string`&&(a.turnId=r),a}async function parseJsonRequest(e){let t;try{t=await e.json()}catch{return Response.json({error:`Invalid JSON body.`,ok:!1},{status:400})}return typeof t!=`object`||!t||Array.isArray(t)?Response.json({error:`Expected a JSON object.`,ok:!1},{status:400}):t}async function parseResetBody(e){let t=await parseOptionalJsonRequest(e);if(t instanceof Response)return t;let n=rejectSessionContinuationToken(t);if(n!==null)return n;let r=t.reason;return r!==void 0&&(typeof r!=`string`||r.length===0)?Response.json({error:`Expected 'reason' to be a non-empty string.`,ok:!1},{status:400}):r===void 0?{}:{reason:r}}async function parseSessionControlBody(e){let t=await parseOptionalJsonRequest(e);return t instanceof Response?t:rejectSessionContinuationToken(t)??t}async function parseOptionalJsonRequest(e){let t;try{t=await e.text()}catch{return Response.json({error:`Unreadable request body.`,ok:!1},{status:400})}if(t.trim().length===0)return{};let n;try{n=JSON.parse(t)}catch{return Response.json({error:`Invalid JSON body.`,ok:!1},{status:400})}return typeof n!=`object`||!n||Array.isArray(n)?Response.json({error:`Expected a JSON object.`,ok:!1},{status:400}):n}function rejectSessionContinuationToken(e){return`continuationToken`in e?Response.json({error:`Session-ID routes do not accept 'continuationToken'.`,ok:!1},{status:400}):null}function requireSessionId(e){return e.sessionId||Response.json({error:`Missing session id.`,ok:!1},{status:400})}async function createSessionStreamResponse(e,t){let l=parseStartIndex(e);if(l instanceof Response)return l;let u=parseIncludeTailIndex(e);try{let d=u?await t.getStreamTailIndex():void 0,f=await t.getEventStream({startIndex:l}),p=new Headers({"cache-control":`no-store, no-transform`,"content-type":EVE_MESSAGE_STREAM_CONTENT_TYPE,"x-accel-buffering":`no`,[EVE_SESSION_ID_HEADER]:t.id,[EVE_STREAM_FORMAT_HEADER]:EVE_MESSAGE_STREAM_FORMAT,[EVE_STREAM_VERSION_HEADER]:EVE_MESSAGE_STREAM_VERSION});return d!==void 0&&p.set(EVE_STREAM_TAIL_INDEX_HEADER,String(d)),new Response(serializeAsNdjson(f,e.signal,streamEventLimit(l,d)),{headers:p})}catch{return Response.json({error:`Session not found.`,ok:!1},{status:404})}}function parseOutputSchemaField(e){if(e!==void 0)try{return parseJsonObject(e)}catch{return Response.json({error:`Expected 'outputSchema' to be a JSON-serializable object.`,ok:!1},{status:400})}}function parseCallbackField(e){if(e===void 0)return;let t=parseSessionCallback(e);return t.ok?t.callback:Response.json({error:t.message,ok:!1},{status:400})}function parseCapabilitiesField(e){if(e===void 0)return;if(typeof e!=`object`||!e||Array.isArray(e))return Response.json({error:`Expected 'capabilities' to be an object.`,ok:!1},{status:400});let t=Object.keys(e),n=Reflect.get(e,`requestInput`);return t.some(e=>e!==`requestInput`)||n!==void 0&&typeof n!=`boolean`?Response.json({error:`Expected 'capabilities.requestInput' to be a boolean when provided.`,ok:!1},{status:400}):n===void 0?{}:{requestInput:n}}function parseModeField(e){if(e!==void 0)return e===`conversation`||e===`task`?e:Response.json({error:`Expected 'mode' to be either 'conversation' or 'task'.`,ok:!1},{status:400})}function parseTurnPolicyField(e){if(e!==void 0)return e===`queue`||e===`steer`?e:Response.json({error:`Expected 'turnPolicy' to be either 'queue' or 'steer'.`,ok:!1},{status:400})}function parseMessageField(e){if(e===void 0)return;if(typeof e==`string`)return e.length>0?e:void 0;if(!Array.isArray(e))return Response.json({error:`Expected 'message' to be a string or an array of text/file parts.`,ok:!1},{status:400});if(e.length===0)return;let t=[];for(let n of e){let e=parseMessagePart(n);if(e instanceof Response)return e;t.push(e)}return t}function parseMessagePart(e){if(typeof e!=`object`||!e)return Response.json({error:`Expected each message part to be an object.`,ok:!1},{status:400});let n=e;if(n.type===`text`)return typeof n.text!=`string`||n.text.length===0?Response.json({error:`Text parts require a non-empty 'text' string.`,ok:!1},{status:400}):{type:`text`,text:n.text};if(n.type===`file`){if(typeof n.mediaType!=`string`||n.mediaType.length===0)return Response.json({error:`File parts require a non-empty 'mediaType' string.`,ok:!1},{status:400});if(typeof n.data!=`string`)return Response.json({error:`File parts require a 'data' string (base64, data URL, or URL).`,ok:!1},{status:400});if(hasInternalRefScheme(n.data))return Response.json({error:`File part 'data' must not use a framework-internal ref scheme.`,ok:!1},{status:400});let e={type:`file`,mediaType:n.mediaType,data:n.data};return typeof n.filename==`string`&&n.filename.length>0&&(e.filename=n.filename),e}return Response.json({error:`Unsupported message part type "${String(n.type)}". Use 'text' or 'file'.`,ok:!1},{status:400})}function checkUploadPolicy(e,t){if(!e.message)return null;let n=collectUploadPolicyViolations(e.message,t);if(n.length===0)return null;let[r]=n;if(!r)return null;let i=r.kind===`too-large`?413:415;return Response.json({error:formatUploadPolicyViolation(r),ok:!1,violations:n.map(e=>e.kind===`too-large`?{byteLength:e.byteLength,filename:e.filename,kind:e.kind,limit:e.limit,mediaType:e.mediaType}:{allowedMediaTypes:e.allowedMediaTypes,filename:e.filename,kind:e.kind,mediaType:e.mediaType})},{status:i})}function parseInputResponses$1(t){if(t===void 0)return;if(!Array.isArray(t)||t.length===0)return Response.json({error:`Expected 'inputResponses' to be a non-empty array.`,ok:!1},{status:400});let n=t.filter(isInputResponse);return n.length===t.length?n:Response.json({error:`Expected every 'inputResponses' entry to match the HITL response schema.`,ok:!1},{status:400})}function mergeContext(e,t){return e===void 0?t:t===void 0?e:[...e,...t]}function parseClientContextField(e){if(e!==void 0){if(typeof e==`string`)return e.length>0?[toClientContextMessage(e)]:void 0;if(Array.isArray(e))return e.length===0?void 0:e.every(e=>typeof e==`string`&&e.length>0)?e.map(e=>toClientContextMessage(e)):Response.json({error:`Expected 'clientContext' array entries to be non-empty strings.`,ok:!1},{status:400});if(typeof e!=`object`||!e)return Response.json({error:`Expected 'clientContext' to be a string, string array, or JSON object.`,ok:!1},{status:400});try{let t=parseJsonObject(e);return[toClientContextMessage(JSON.stringify(t))]}catch{return Response.json({error:`Expected 'clientContext' to be a JSON-serializable object.`,ok:!1},{status:400})}}}function toClientContextMessage(e){return`Client context:
|
|
1
|
+
import{isInputResponse}from"#shared/input.js";import{hasInternalRefScheme}from"#internal/attachments/url-refs.js";import{EVE_MESSAGE_STREAM_CONTENT_TYPE,EVE_MESSAGE_STREAM_FORMAT,EVE_MESSAGE_STREAM_VERSION,EVE_SESSION_ID_HEADER,EVE_STREAM_FORMAT_HEADER,EVE_STREAM_TAIL_INDEX_HEADER,EVE_STREAM_VERSION_HEADER}from"#protocol/message.js";import{parseJsonObject}from"#shared/json.js";import{collectUploadPolicyViolations,formatUploadPolicyViolation}from"#public/channels/upload-policy.js";import{parseSessionCallback}from"#channel/session-callback.js";import{parseActivityObserverField,validateActivityObserverBinding}from"#eve-channel/activity-observer-request.js";async function deriveOperationContinuationToken(e){let t=JSON.stringify([`eve:create-session:v1`,e.auth.authenticator,e.auth.issuer??null,e.auth.principalType,e.auth.principalId,e.operationId]),n=await crypto.subtle.digest(`SHA-256`,new TextEncoder().encode(t));return`eve:op:${Array.from(new Uint8Array(n),e=>e.toString(16).padStart(2,`0`)).join(``).slice(0,32)}`}function parseCreateBody(e){if(e.inputResponses!==void 0)return Response.json({error:`'inputResponses' is only accepted for an existing session.`,ok:!1},{status:400});let t=parseMessageField(e.message);if(t instanceof Response)return t;let n=parseClientContextField(e.clientContext);if(n instanceof Response)return n;let r=parseCallbackField(e.callback);if(r instanceof Response)return r;let i=parseCapabilitiesField(e.capabilities);if(i instanceof Response)return i;let a=parseActivityObserverField(e.activityObserver);if(a instanceof Response)return a;if(a!==void 0){let e=validateActivityObserverBinding(a,r);if(e!==void 0)return e}let o=parseModeField(e.mode);if(o instanceof Response)return o;let s=parseOutputSchemaField(e.outputSchema);if(s instanceof Response)return s;if(t===void 0)return Response.json({error:`Missing or empty 'message' field.`,ok:!1},{status:400});let c=e.operationId;if(c!==void 0&&(typeof c!=`string`||!c))return Response.json({error:`Expected 'operationId' to be a non-empty string.`,ok:!1},{status:400});let l={activityObserver:a,callback:r,capabilities:i,message:t,mode:o,context:n,outputSchema:s};return typeof c==`string`&&(l.operationId=c),l}function parseSessionMessageBody(e){let t=rejectSessionContinuationToken(e);if(t!==null)return t;let n=parseMessageField(e.message);if(n instanceof Response)return n;let r=parseCallbackField(e.callback);if(r instanceof Response)return r;let i=parseActivityObserverField(e.activityObserver);if(i instanceof Response)return i;if(i!==void 0){let e=validateActivityObserverBinding(i,r);if(e!==void 0)return e}let a=parseInputResponses$1(e.inputResponses);if(a instanceof Response)return a;let o=parseClientContextField(e.clientContext);if(o instanceof Response)return o;let s=parseOutputSchemaField(e.outputSchema);if(s instanceof Response)return s;let c=parseTurnPolicyField(e.turnPolicy);return c instanceof Response?c:n===void 0&&a===void 0?Response.json({error:`Expected a non-empty 'message' or a non-empty 'inputResponses' array.`,ok:!1},{status:400}):n!==void 0&&a!==void 0?Response.json({error:`'message' and 'inputResponses' are mutually exclusive.`,ok:!1},{status:400}):{activityObserver:i,callback:r,message:n,inputResponses:a,context:o,outputSchema:s,turnPolicy:c}}async function parseCancelTurnBody(e){let t=await parseOptionalJsonRequest(e);if(t instanceof Response)return t;let n=rejectSessionContinuationToken(t);if(n!==null)return n;let r=t.turnId,i=t.taskId;if(r!==void 0&&(typeof r!=`string`||r.length===0))return Response.json({error:`Expected 'turnId' to be a non-empty string.`,ok:!1},{status:400});if(i!==void 0&&(typeof i!=`string`||i.length===0))return Response.json({error:`Expected 'taskId' to be a non-empty string.`,ok:!1},{status:400});let a={};return typeof i==`string`&&(a.taskId=i),typeof r==`string`&&(a.turnId=r),a}async function parseJsonRequest(e){let t;try{t=await e.json()}catch{return Response.json({error:`Invalid JSON body.`,ok:!1},{status:400})}return typeof t!=`object`||!t||Array.isArray(t)?Response.json({error:`Expected a JSON object.`,ok:!1},{status:400}):t}async function parseResetBody(e){let t=await parseOptionalJsonRequest(e);if(t instanceof Response)return t;let n=rejectSessionContinuationToken(t);if(n!==null)return n;let r=t.reason;return r!==void 0&&(typeof r!=`string`||r.length===0)?Response.json({error:`Expected 'reason' to be a non-empty string.`,ok:!1},{status:400}):r===void 0?{}:{reason:r}}async function parseSessionControlBody(e){let t=await parseOptionalJsonRequest(e);return t instanceof Response?t:rejectSessionContinuationToken(t)??t}async function parseOptionalJsonRequest(e){let t;try{t=await e.text()}catch{return Response.json({error:`Unreadable request body.`,ok:!1},{status:400})}if(t.trim().length===0)return{};let n;try{n=JSON.parse(t)}catch{return Response.json({error:`Invalid JSON body.`,ok:!1},{status:400})}return typeof n!=`object`||!n||Array.isArray(n)?Response.json({error:`Expected a JSON object.`,ok:!1},{status:400}):n}function rejectSessionContinuationToken(e){return`continuationToken`in e?Response.json({error:`Session-ID routes do not accept 'continuationToken'.`,ok:!1},{status:400}):null}function requireSessionId(e){return e.sessionId||Response.json({error:`Missing session id.`,ok:!1},{status:400})}async function createSessionStreamResponse(e,t){let l=parseStartIndex(e);if(l instanceof Response)return l;let u=parseIncludeTailIndex(e);try{let d=u?await t.getStreamTailIndex():void 0,f=await t.getEventStream({startIndex:l}),p=new Headers({"cache-control":`no-store, no-transform`,"content-type":EVE_MESSAGE_STREAM_CONTENT_TYPE,"x-accel-buffering":`no`,[EVE_SESSION_ID_HEADER]:t.id,[EVE_STREAM_FORMAT_HEADER]:EVE_MESSAGE_STREAM_FORMAT,[EVE_STREAM_VERSION_HEADER]:EVE_MESSAGE_STREAM_VERSION});return d!==void 0&&p.set(EVE_STREAM_TAIL_INDEX_HEADER,String(d)),new Response(serializeAsNdjson(f,e.signal,streamEventLimit(l,d)),{headers:p})}catch{return Response.json({error:`Session not found.`,ok:!1},{status:404})}}function parseOutputSchemaField(e){if(e!==void 0)try{return parseJsonObject(e)}catch{return Response.json({error:`Expected 'outputSchema' to be a JSON-serializable object.`,ok:!1},{status:400})}}function parseCallbackField(e){if(e===void 0)return;let t=parseSessionCallback(e);return t.ok?t.callback:Response.json({error:t.message,ok:!1},{status:400})}function parseCapabilitiesField(e){if(e===void 0)return;if(typeof e!=`object`||!e||Array.isArray(e))return Response.json({error:`Expected 'capabilities' to be an object.`,ok:!1},{status:400});let t=Object.keys(e),n=Reflect.get(e,`requestInput`);return t.some(e=>e!==`requestInput`)||n!==void 0&&typeof n!=`boolean`?Response.json({error:`Expected 'capabilities.requestInput' to be a boolean when provided.`,ok:!1},{status:400}):n===void 0?{}:{requestInput:n}}function parseModeField(e){if(e!==void 0)return e===`conversation`||e===`task`?e:Response.json({error:`Expected 'mode' to be either 'conversation' or 'task'.`,ok:!1},{status:400})}function parseTurnPolicyField(e){if(e!==void 0)return e===`queue`||e===`steer`?e:Response.json({error:`Expected 'turnPolicy' to be either 'queue' or 'steer'.`,ok:!1},{status:400})}function parseMessageField(e){if(e===void 0)return;if(typeof e==`string`)return e.length>0?e:void 0;if(!Array.isArray(e))return Response.json({error:`Expected 'message' to be a string or an array of text/file parts.`,ok:!1},{status:400});if(e.length===0)return;let t=[];for(let n of e){let e=parseMessagePart(n);if(e instanceof Response)return e;t.push(e)}return t}function parseMessagePart(e){if(typeof e!=`object`||!e)return Response.json({error:`Expected each message part to be an object.`,ok:!1},{status:400});let n=e;if(n.type===`text`)return typeof n.text!=`string`||n.text.length===0?Response.json({error:`Text parts require a non-empty 'text' string.`,ok:!1},{status:400}):{type:`text`,text:n.text};if(n.type===`file`){if(typeof n.mediaType!=`string`||n.mediaType.length===0)return Response.json({error:`File parts require a non-empty 'mediaType' string.`,ok:!1},{status:400});if(typeof n.data!=`string`)return Response.json({error:`File parts require a 'data' string (base64, data URL, or URL).`,ok:!1},{status:400});if(hasInternalRefScheme(n.data))return Response.json({error:`File part 'data' must not use a framework-internal ref scheme.`,ok:!1},{status:400});let e={type:`file`,mediaType:n.mediaType,data:n.data};return typeof n.filename==`string`&&n.filename.length>0&&(e.filename=n.filename),e}return Response.json({error:`Unsupported message part type "${String(n.type)}". Use 'text' or 'file'.`,ok:!1},{status:400})}function checkUploadPolicy(e,t){if(!e.message)return null;let n=collectUploadPolicyViolations(e.message,t);if(n.length===0)return null;let[r]=n;if(!r)return null;let i=r.kind===`too-large`?413:415;return Response.json({error:formatUploadPolicyViolation(r),ok:!1,violations:n.map(e=>e.kind===`too-large`?{byteLength:e.byteLength,filename:e.filename,kind:e.kind,limit:e.limit,mediaType:e.mediaType}:{allowedMediaTypes:e.allowedMediaTypes,filename:e.filename,kind:e.kind,mediaType:e.mediaType})},{status:i})}function parseInputResponses$1(t){if(t===void 0)return;if(!Array.isArray(t)||t.length===0)return Response.json({error:`Expected 'inputResponses' to be a non-empty array.`,ok:!1},{status:400});let n=t.filter(isInputResponse);return n.length===t.length?n:Response.json({error:`Expected every 'inputResponses' entry to match the HITL response schema.`,ok:!1},{status:400})}function parseClientContextField(e){if(e!==void 0){if(typeof e==`string`)return e.length>0?[toClientContextMessage(e)]:void 0;if(Array.isArray(e))return e.length===0?void 0:e.every(e=>typeof e==`string`&&e.length>0)?e.map(e=>toClientContextMessage(e)):Response.json({error:`Expected 'clientContext' array entries to be non-empty strings.`,ok:!1},{status:400});if(typeof e!=`object`||!e)return Response.json({error:`Expected 'clientContext' to be a string, string array, or JSON object.`,ok:!1},{status:400});try{let t=parseJsonObject(e);return[toClientContextMessage(JSON.stringify(t))]}catch{return Response.json({error:`Expected 'clientContext' to be a JSON-serializable object.`,ok:!1},{status:400})}}}function toClientContextMessage(e){return`Client context:
|
|
2
2
|
${e}`}function parseIncludeTailIndex(e){let t=new URL(e.url).searchParams.get(`includeTailIndex`);return t===`1`||t===`true`}function parseStartIndex(e){let t=new URL(e.url).searchParams.get(`startIndex`);if(t===null)return;let n=Number(t);return!/^-?\d+$/.test(t)||!Number.isSafeInteger(n)?Response.json({error:`Expected startIndex to be an integer.`,ok:!1},{status:400}):n}function streamEventLimit(e,t){if(t===void 0)return;let n=e===void 0?0:e<0?Math.max(0,t+1+e):e;return Math.max(0,t-n+1)}function serializeAsNdjson(e,t,n){let r=new TextEncoder,i=0,a=new TransformStream({start(e){e.enqueue(r.encode(`
|
|
3
|
-
`)),n===0&&e.terminate()},transform(e,t){t.enqueue(r.encode(`${JSON.stringify(e)}\n`)),i+=1,i===n&&t.terminate()}});return e.pipeTo(a.writable,{signal:t}).catch(()=>{}),a.readable}export{checkUploadPolicy,createSessionStreamResponse,deriveOperationContinuationToken,
|
|
3
|
+
`)),n===0&&e.terminate()},transform(e,t){t.enqueue(r.encode(`${JSON.stringify(e)}\n`)),i+=1,i===n&&t.terminate()}});return e.pipeTo(a.writable,{signal:t}).catch(()=>{}),a.readable}export{checkUploadPolicy,createSessionStreamResponse,deriveOperationContinuationToken,parseCancelTurnBody,parseCreateBody,parseIncludeTailIndex,parseJsonRequest,parseResetBody,parseSessionControlBody,parseSessionMessageBody,parseStartIndex,rejectSessionContinuationToken,requireSessionId};
|
|
@@ -78,21 +78,21 @@ export interface EveChannelInput {
|
|
|
78
78
|
readonly auth: AuthFn<Request> | readonly AuthFn<Request>[];
|
|
79
79
|
/**
|
|
80
80
|
* The trusted-forwarders policy: which transport-authenticated callers may
|
|
81
|
-
* assert a forwarded principal
|
|
82
|
-
*
|
|
83
|
-
*
|
|
84
|
-
* principal of the forwarder — who is asserting, never what is asserted —
|
|
85
|
-
* and must match it precisely (for example
|
|
81
|
+
* assert a forwarded principal or callback-marked public trace audience. The predicate
|
|
82
|
+
* receives the *verified* route-auth principal of the forwarder — who is
|
|
83
|
+
* asserting, never what is asserted — and must match it precisely (for example
|
|
86
84
|
* `(forwarder) => forwarder.subject === vercelSubject({ teamSlug, projectName })`).
|
|
87
85
|
* A permissive predicate lets any authenticated forwarder assert any
|
|
88
|
-
* principal.
|
|
86
|
+
* principal and public trace audience.
|
|
89
87
|
*
|
|
90
88
|
* When a trusted forwarder's assertion is accepted on session creation, the
|
|
91
89
|
* forwarded principal replaces `session.auth.current` and
|
|
92
90
|
* `session.auth.initiator`. On continuation, only `session.auth.current`
|
|
93
91
|
* changes; the initiator remains pinned to the session's creator. The
|
|
94
92
|
* forwarder is recorded on accepted contexts as the `eve:forwarded-by`
|
|
95
|
-
* attribute.
|
|
93
|
+
* attribute. An accepted public audience is evaluated by this deployment's
|
|
94
|
+
* trace policies; the default records model and tool content. Omit the option
|
|
95
|
+
* to reject forwarded principals with 403 and ignore forwarded audience.
|
|
96
96
|
*/
|
|
97
97
|
readonly trustedForwarders?: TrustedForwarders;
|
|
98
98
|
/**
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { HookPayload } from "#channel/types.js";
|
|
2
|
+
import type { TurnStepInput } from "#execution/durable-session-migrations/turn-workflow.js";
|
|
3
|
+
import type { DurableStepResult } from "#execution/next-driver-action.js";
|
|
4
|
+
/** Returns one trusted accepting deployment only when every delivery agrees. */
|
|
5
|
+
export declare function readAcceptedDeploymentId(input: HookPayload): string | undefined;
|
|
6
|
+
/** Defers a speculative inline step before mutation when it reached another deployment. */
|
|
7
|
+
export declare function deferMismatchedInlineTurnStep(input: TurnStepInput): DurableStepResult | undefined;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function readAcceptedDeploymentId(e){if(e.kind!==`deliver`||e.deliveryMetadata?.length===0)return;let t=e.deliveryMetadata?.[0]?.acceptedDeploymentId;if(!(t===void 0||t.length===0))return e.deliveryMetadata?.every(e=>e.acceptedDeploymentId===t)?t:void 0}function deferMismatchedInlineTurnStep(e){if(!(e.acceptedDeploymentId===void 0||process.env.VERCEL_DEPLOYMENT_ID?.trim()===e.acceptedDeploymentId))return{action:`continue`,requiresChildDispatch:!0,serializedContext:e.serializedContext,sessionState:e.sessionState}}export{deferMismatchedInlineTurnStep,readAcceptedDeploymentId};
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { type DurableSessionState } from "#execution/durable-session-store.js";
|
|
2
|
-
/**
|
|
2
|
+
/**
|
|
3
|
+
* Cancels every running delegated child recorded in the agent handle store
|
|
4
|
+
* and every workflow tool run the turn is waiting on.
|
|
5
|
+
*/
|
|
3
6
|
export declare function cancelDescendantTurnsStep(input: {
|
|
4
7
|
readonly serializedContext: Record<string, unknown>;
|
|
5
8
|
readonly sessionState: DurableSessionState;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createLogger,logError}from"#internal/logging.js";import{BundleKey}from"#runtime/sessions/runtime-context-keys.js";import{requestWorkflowTurnCancellation}from"#execution/workflow-runtime.js";import{cancelRemoteAgentTurn,isRetryableRemoteAgentCancelError,resolveRemoteAgentForAction}from"#execution/remote-agent-dispatch.js";import{getAgentHandleStore}from"#harness/handles/store.js";import{deserializeContext}from"#context/serialize.js";import{readDurableSession}from"#execution/durable-session-store.js";import{getDynamicSubagentSelection}from"#context/dynamic-subagent-lifecycle.js";const log=createLogger(`execution.cancel-descendant-turns`);async function cancelDescendantTurnsStep(e){"use step";let r;try{
|
|
1
|
+
import{createLogger,logError}from"#internal/logging.js";import{BundleKey}from"#runtime/sessions/runtime-context-keys.js";import{requestWorkflowTurnCancellation}from"#execution/workflow-runtime.js";import{cancelRemoteAgentTurn,isRetryableRemoteAgentCancelError,resolveRemoteAgentForAction}from"#execution/remote-agent-dispatch.js";import{getAgentHandleStore}from"#harness/handles/store.js";import{deserializeContext}from"#context/serialize.js";import{readDurableSession}from"#execution/durable-session-store.js";import{cancelToolRun}from"#execution/tool-run/cancel.js";import{getToolRuns}from"#harness/tool-runs.js";import{getDynamicSubagentSelection}from"#context/dynamic-subagent-lifecycle.js";const log=createLogger(`execution.cancel-descendant-turns`);async function cancelDescendantTurnsStep(e){"use step";let r,i;try{let t=await readDurableSession(e.sessionState);r=(getAgentHandleStore(t.state)?.handles??[]).filter(e=>e.phase===`running`),i=getToolRuns(t.state)}catch(n){logError(log,`failed to read pending descendants during cancellation`,n,{sessionId:e.sessionState.sessionId});return}if(await Promise.all(i.map(e=>cancelToolRun(e,`The turn that called the tool was cancelled.`))),r.length===0)return;let a,getRemoteContext=()=>a??=deserializeContext(e.serializedContext).then(e=>({ctx:e,registry:e.require(BundleKey).subagentRegistry.subagentsByNodeId}));await Promise.all(r.map(e=>e.address.kind===`agent/remote`?cancelRemoteDescendant({handle:e,remoteContext:getRemoteContext()}):cancelLocalDescendant({handle:e})))}async function cancelLocalDescendant(e){let{handle:n}=e;try{let e=await requestCancellationWithRetry({request:()=>requestWorkflowTurnCancellation({sessionId:n.address.sessionId}),shouldRetryError:()=>!1});e.status!==`accepted`&&log.warn(`descendant cancel was never accepted; the child may run to completion`,{callId:n.operation.callId,childSessionId:n.address.sessionId,finalStatus:e.status,subagentName:n.identity.name})}catch(e){logError(log,`failed to cancel local descendant turn`,e,{callId:n.operation.callId,childSessionId:n.address.sessionId,subagentName:n.identity.name})}}async function cancelRemoteDescendant(e){let{handle:n}=e;if(n.address.kind!==`agent/remote`)return;let r=n.address.url;try{let{ctx:t,registry:o}=await e.remoteContext,s=getDynamicSubagentSelection(t,n.identity.nodeId),c={...await resolveRemoteAgentForAction({dynamicRemoteAgent:s?.kind===`remote`?s.remoteAgent:void 0,nodeId:n.identity.nodeId,remoteAgentName:n.identity.name,registry:o}),url:r},l=await requestCancellationWithRetry({request:()=>cancelRemoteAgentTurn({remote:c,sessionId:n.address.sessionId}),shouldRetryError:isRetryableRemoteAgentCancelError});l.status!==`accepted`&&log.warn(`remote descendant cancel was never accepted; the child may run to completion`,{callId:n.operation.callId,childSessionId:n.address.sessionId,finalStatus:l.status,remoteAgentName:n.identity.name})}catch(e){logError(log,`failed to cancel remote descendant turn`,e,{callId:n.operation.callId,childSessionId:n.address.sessionId,remoteAgentName:n.identity.name})}}async function requestCancellationWithRetry(e){let t=250,n={status:`no_active_turn`};for(let r=1;r<=8;r+=1){try{if(n=await e.request(),n.status===`accepted`||r===8)return n}catch(t){if(!e.shouldRetryError(t)||r===8)throw t}await new Promise(e=>setTimeout(e,t)),t=Math.min(t*2,1500)}return n}export{cancelDescendantTurnsStep};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createDurableSessionState}from"#execution/durable-session-store.js";import{getCompiledRuntimeAgentBundle}from"#runtime/sessions/compiled-agent-cache.js";import{resolveDurableCompiledArtifactsSource}from"#runtime/durable-compiled-artifacts-source.js";import{createSession}from"#execution/session.js";import{resolveInheritedTokenLimit}from"#execution/run-session-limits.js";import{resolveEffectiveAgentRuntimeFromConfig}from"#execution/effective-agent-config.js";import{TASK_UPDATE_SESSION_INSTRUCTION}from"#execution/tasks/child/instructions.js";
|
|
1
|
+
import{createDurableSessionState}from"#execution/durable-session-store.js";import{getCompiledRuntimeAgentBundle}from"#runtime/sessions/compiled-agent-cache.js";import{resolveDurableCompiledArtifactsSource}from"#runtime/durable-compiled-artifacts-source.js";import{createSession}from"#execution/session.js";import{resolveInheritedTokenLimit}from"#execution/run-session-limits.js";import{resolveEffectiveAgentRuntimeFromConfig}from"#execution/effective-agent-config.js";import{TASK_UPDATE_SESSION_INSTRUCTION}from"#execution/tasks/child/instructions.js";async function createSessionStep(t){"use step";let n=await getCompiledRuntimeAgentBundle({compiledArtifactsSource:resolveDurableCompiledArtifactsSource(t.compiledArtifactsSource),nodeId:t.nodeId}),r=resolveEffectiveAgentRuntimeFromConfig(n,t.dynamicSubagentAgentConfig),i=t.taskOwned===!0&&n.resolvedAgent.config?.experimental?.tasks===!0&&r.turnAgent.tools.some(e=>e.kind===`authored-tool`&&e.behavior?.handling?.kind===`dispatch`&&e.behavior.handling.target.kind===`task-update`);return{state:createDurableSessionState({session:createSession({compactionOverrides:{thresholdPercent:r.thresholdPercent},continuationToken:t.continuationToken,limits:{maxInputTokensPerSession:resolveInheritedTokenLimit({configured:r.limits?.maxInputTokensPerSession,inherited:t.inheritedLimits?.maxInputTokensPerSession}),maxOutputTokensPerSession:resolveInheritedTokenLimit({configured:r.limits?.maxOutputTokensPerSession,inherited:t.inheritedLimits?.maxOutputTokensPerSession})},outputSchema:t.outputSchema,rootSessionId:t.rootSessionId,sessionId:t.sessionId,subagentDepth:t.subagentDepth,systemPromptAdditions:i?[TASK_UPDATE_SESSION_INSTRUCTION]:void 0,turnAgent:r.turnAgent,workflowMaxSubagents:n.resolvedAgent.workflowTool?.maxSubagents})})}}export{createSessionStep};
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import type { HarnessToolDefinition } from "#harness/execute-tool.js";
|
|
2
2
|
import type { PreparedRuntimeDelegationTool } from "#runtime/sessions/turn.js";
|
|
3
3
|
import { type ToolSchemaSource } from "#tools/schema.js";
|
|
4
|
-
type HarnessDelegationTool = Pick<PreparedRuntimeDelegationTool, "
|
|
4
|
+
type HarnessDelegationTool = Pick<PreparedRuntimeDelegationTool, "behavior" | "description" | "name"> & {
|
|
5
5
|
readonly inputSchema?: ToolSchemaSource | null;
|
|
6
6
|
readonly outputSchema?: ToolSchemaSource | null;
|
|
7
|
-
readonly rootOnly?: boolean;
|
|
8
7
|
};
|
|
9
8
|
export declare function createHarnessDelegationToolDefinition(tool: HarnessDelegationTool): HarnessToolDefinition;
|
|
10
9
|
export declare function createBackgroundSubagentHarnessDefinition(tool: HarnessDelegationTool): HarnessToolDefinition;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{UNSPECIFIED_INPUT_SCHEMA,toInputSchema,toOutputSchema}from"#tools/schema.js";import{createToolExecuteWithAuth}from"#execution/tool-auth.js";import{defineSubagent
|
|
1
|
+
import{UNSPECIFIED_INPUT_SCHEMA,toInputSchema,toOutputSchema}from"#tools/schema.js";import{createToolExecuteWithAuth}from"#execution/tool-auth.js";import{defineSubagent}from"#execution/tools/subagent/local.js";import{defineRemoteSubagent}from"#execution/tools/subagent/remote.js";function createHarnessDelegationToolDefinition(t){return{behavior:t.behavior,description:t.description??``,inputSchema:toInputSchema(t.inputSchema)??UNSPECIFIED_INPUT_SCHEMA,name:t.name,outputSchema:toOutputSchema(t.outputSchema)??void 0}}function createBackgroundSubagentHarnessDefinition(n){let r=n.behavior?.handling;if(r?.kind!==`dispatch`)throw Error(`Background subagent tool "${n.name}" has no prepared dispatch target.`);if(r.target.kind===`task-cancel`||r.target.kind===`task-update`||r.target.kind===`workflow-tool-call`)throw Error(`Background subagent tool "${n.name}" cannot dispatch ${r.target.kind}.`);let i=createBackgroundSubagentDefinition({description:n.description??``,name:n.name,target:r.target}),a=createToolExecuteWithAuth({execute:i.execute,execution:i.execution,scope:n.name});return{behavior:n.behavior,description:i.description,execute:a,execution:i.execution,inputSchema:toInputSchema(i.inputSchema)??UNSPECIFIED_INPUT_SCHEMA,name:n.name,outputSchema:toOutputSchema(i.outputSchema)??void 0}}function createBackgroundSubagentDefinition(e){switch(e.target.kind){case`remote-agent-call`:return defineRemoteSubagent({description:e.description,name:e.name,target:e.target});case`self-agent-call`:case`subagent-call`:return defineSubagent({description:e.description,name:e.name,target:e.target})}}export{createBackgroundSubagentHarnessDefinition,createHarnessDelegationToolDefinition};
|
|
@@ -6,14 +6,16 @@
|
|
|
6
6
|
* delegation lifecycle, so planning, subagent starts, and the
|
|
7
7
|
* replay-safe `subagent.called` emission tail live here.
|
|
8
8
|
*/
|
|
9
|
-
import type { ActivityObserverConfig } from "#channel/types.js";
|
|
9
|
+
import type { ActivityObserverConfig, SessionParent } from "#channel/types.js";
|
|
10
10
|
import { type ChannelAdapter, type ChannelAdapterContext } from "#channel/adapter.js";
|
|
11
|
+
import { type LocalDevRequestProvenance } from "#context/keys.js";
|
|
11
12
|
import { type AlsContext } from "#context/container.js";
|
|
12
13
|
import { type CompiledBundle } from "#runtime/sessions/runtime-context-keys.js";
|
|
13
14
|
import { type DispatchOutcome, type RuntimeAgentHandleAction, type RuntimeSession } from "#execution/agent-handle-dispatch.js";
|
|
14
15
|
import { getPendingRuntimeActionBatch } from "#harness/runtime-actions.js";
|
|
15
16
|
import type { ActivityWorkIdentityV1 } from "#protocol/activity.js";
|
|
16
|
-
import type {
|
|
17
|
+
import type { RuntimeActionResult, RuntimeRemoteAgentCallActionRequest, RuntimeSubagentCallActionRequest, RuntimeSubagentDispatchFailure } from "#shared/action-types.js";
|
|
18
|
+
import type { PendingAgentDispatchAction, PendingTaskControlAction, PendingWorkflowToolAction } from "#shared/dispatch-action.js";
|
|
17
19
|
import { type DurableSessionState } from "#execution/durable-session-store.js";
|
|
18
20
|
import { buildSubagentRunInput, type SubagentInputSource } from "#execution/subagent-tool.js";
|
|
19
21
|
import { getDynamicSubagentSelection } from "#context/dynamic-subagent-lifecycle.js";
|
|
@@ -36,12 +38,16 @@ export type DispatchPlanEntry = {
|
|
|
36
38
|
readonly target: DispatchStartTarget;
|
|
37
39
|
} | {
|
|
38
40
|
readonly kind: "task-control";
|
|
39
|
-
readonly action:
|
|
41
|
+
readonly action: PendingTaskControlAction;
|
|
42
|
+
} | {
|
|
43
|
+
readonly kind: "workflow-tool";
|
|
44
|
+
readonly action: PendingWorkflowToolAction;
|
|
40
45
|
};
|
|
41
46
|
export type DispatchStartTarget = {
|
|
42
47
|
readonly kind: "local";
|
|
43
48
|
readonly action: RuntimeSubagentCallActionRequest;
|
|
44
49
|
readonly dynamicSubagentAgentConfig?: DynamicSubagentAgentConfig;
|
|
50
|
+
readonly selfAgent: boolean;
|
|
45
51
|
readonly source: SubagentInputSource;
|
|
46
52
|
} | {
|
|
47
53
|
readonly kind: "remote";
|
|
@@ -89,6 +95,9 @@ export interface PreparedRuntimeActionDispatch {
|
|
|
89
95
|
*/
|
|
90
96
|
readonly fanoutSize: number;
|
|
91
97
|
readonly initiatorAuth: Parameters<typeof buildSubagentRunInput>[0]["initiatorAuth"];
|
|
98
|
+
readonly localDevRequest?: LocalDevRequestProvenance;
|
|
99
|
+
/** Lineage of the session running this dispatch, when it is itself a delegated child. */
|
|
100
|
+
readonly parentSession: SessionParent | undefined;
|
|
92
101
|
readonly parentTraceContext: Parameters<typeof buildSubagentRunInput>[0]["parentTraceContext"];
|
|
93
102
|
readonly activityObserver?: ActivityObserverConfig & {
|
|
94
103
|
readonly workIdentity: ActivityWorkIdentityV1;
|
|
@@ -116,7 +125,7 @@ export declare function prepareRuntimeActionDispatch(input: {
|
|
|
116
125
|
readonly taskControls: boolean;
|
|
117
126
|
}): Promise<PreparedRuntimeActionDispatch | undefined>;
|
|
118
127
|
export declare function prepareAgentActionDispatch(input: {
|
|
119
|
-
readonly action:
|
|
128
|
+
readonly action: PendingAgentDispatchAction;
|
|
120
129
|
readonly ctx: AlsContext;
|
|
121
130
|
readonly event: {
|
|
122
131
|
readonly sequence: number;
|
|
@@ -163,6 +172,7 @@ export declare function startSubagent(input: {
|
|
|
163
172
|
readonly currentSession: RuntimeSession;
|
|
164
173
|
readonly fanoutSize: number;
|
|
165
174
|
readonly initiatorAuth: Parameters<typeof buildSubagentRunInput>[0]["initiatorAuth"];
|
|
175
|
+
readonly localDevRequest?: LocalDevRequestProvenance;
|
|
166
176
|
readonly parentContinuationToken: string | undefined;
|
|
167
177
|
readonly parentTraceContext: Parameters<typeof buildSubagentRunInput>[0]["parentTraceContext"];
|
|
168
178
|
readonly activityObserver?: ActivityObserverConfig & {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createLogger,logError}from"#internal/logging.js";import{callAdapterEventHandler}from"#channel/adapter.js";import{ContextContainer}from"#context/container.js";import{ActivityObserverKey,AuthKey,CapabilitiesKey,ChannelInstrumentationKey,InitiatorAuthKey,SandboxKey}from"#context/keys.js";import{createSubagentCalledEvent,encodeMessageStreamEvent,stampMessageStreamEvent}from"#protocol/message.js";import{BundleKey,ChannelKey}from"#runtime/sessions/runtime-context-keys.js";import{workflowEntryReference}from"#execution/workflow-runtime.js";import{deriveRootTurnActivityWorkId}from"#execution/activity-work-id.js";import{getAgentHandleStore}from"#harness/handles/store.js";import{deserializeContext}from"#context/serialize.js";import{readDurableSession}from"#execution/durable-session-store.js";import{getDynamicSubagentSelection}from"#context/dynamic-subagent-lifecycle.js";import{hydrateDurableSession}from"#execution/session.js";import{resolveEffectiveAgentRuntime}from"#execution/effective-agent-config.js";import{buildAdapterContext}from"#channel/adapter-context.js";import{withContextScope}from"#context/run-step.js";import{isAgentHandleAction}from"#execution/agent-handle-dispatch.js";import{readActionTraceContext,readSessionTraceContext}from"#tracing/agent-trace-context-store.js";import{assertUniqueRuntimeActionCallIds,getPendingRuntimeActionBatch}from"#harness/runtime-actions.js";import{createRecursiveAgentRootOnlyResult,createUnavailableDynamicSubagentResult,getSubagentName}from"#execution/dispatch-action-failures.js";import{startLocalSubagent}from"#execution/subagent-start-local.js";import{startRemoteSubagent}from"#execution/subagent-start-remote.js";import"#execution/subagent-tool.js";import{resolveSubagentDepth}from"#harness/subagent-depth.js";import{isTaskControlAction}from"#execution/tasks/parent/dispatch.js";const log=createLogger(`execution.dispatch-runtime-actions`);async function prepareRuntimeActionDispatch(e){let t=await readDurableSession(e.sessionState),n=getPendingRuntimeActionBatch(t.state);return n===void 0||n.actions.length===0?void 0:await prepareActionDispatch({batch:n,ctx:await deserializeContext(e.serializedContext),durableSession:t,serializedContext:e.serializedContext,taskControls:e.taskControls})}async function prepareAgentActionDispatch(e){let t=await readDurableSession(e.sessionState);return await prepareActionDispatch({batch:{actions:[e.action],event:e.event,responseMessages:[]},ctx:copyDurableContext(e.ctx),durableSession:t,fanoutSize:e.localFanoutSize,serializedContext:e.serializedContext,taskControls:!1})}function copyDurableContext(e){let t=new ContextContainer;for(let[n,r]of e.entries())t.set(n,r);return t}async function prepareActionDispatch(e){let{batch:t,durableSession:n}=e;assertUniqueRuntimeActionCallIds(t.actions);let r=e.ctx,s=r.require(BundleKey),c=resolveEffectiveAgentRuntime(s,r),l=hydrateDurableSession({compactionOverrides:{thresholdPercent:c.thresholdPercent},durable:n,turnAgent:c.turnAgent}),u=r.require(ChannelKey);getAgentHandleStore(n.state);let d=planDispatch({actions:t.actions,bundle:s,ctx:r,session:l,taskControls:e.taskControls}),f=resolveActiveSandboxSessionId(u.state,l.sessionId);if(planSharesSandbox({bundle:s,plan:d}))try{l=(await withContextScope(r,l,async e=>(await r.require(SandboxKey).get(),{result:void 0,session:e}))).session}finally{r.clearVirtualContext()}return{adapter:u,adapterCtx:buildAdapterContext(u,r),auth:r.get(AuthKey)??null,batch:t,bundle:s,capabilities:r.get(CapabilitiesKey),channelMetadata:r.get(ChannelInstrumentationKey),fanoutSize:e.fanoutSize??d.filter(e=>e.kind===`start`&&e.target.kind===`local`).length,initiatorAuth:r.get(InitiatorAuthKey)??null,parentTraceContext:readSessionTraceContext(e.serializedContext,l.sessionId),plan:d,activityObserver:resolvePreparedActivity(r.get(ActivityObserverKey),l,t.event.turnId),sandboxSessionId:f,serializedContext:e.serializedContext,session:l}}function resolvePreparedActivity(e,t,n){if(e!==void 0)return{sink:e.sink,workIdentity:e.workIdentity??{id:deriveRootTurnActivityWorkId({sessionId:t.sessionId,turnId:n}),kind:`root-turn`,rootSessionId:t.rootSessionId??t.sessionId,rootTurnId:n,sessionId:t.sessionId,turnId:n}}}function planSharesSandbox(e){let t=e.bundle.graph;return e.plan.some(n=>{if(n.kind!==`start`||n.target.kind!==`local`)return!1;let r=n.target.action;return r.subagentName===`agent`&&!e.bundle.subagentRegistry.subagentsByNodeId.has(r.nodeId)||t?.nodesByNodeId.get(r.nodeId)?.sandboxRegistry.sandbox.definition.inheritsParent===!0})}function resolveActiveSandboxSessionId(e,t){if(typeof e!=`object`||!e)return t;let n=e.sandboxSessionId;return typeof n==`string`&&n.length>0?n:t}async function emitSubagentCalled(e){let{entry:r,outcome:i}=e;try{let t=r.kind===`resume`?r.action:r.target.action,a=r.kind===`resume`?r.dynamicRemoteAgent:r.target.kind===`remote`?r.target.dynamicRemoteAgent:void 0,o=await callAdapterEventHandler(e.adapter,createSubagentCalledEvent({callId:i.callId,childSessionId:i.address.sessionId,name:i.name,remote:i.address.kind===`agent/remote`?{resolverId:a===void 0?t.nodeId:a.credentialsStepId,url:i.address.url}:void 0,sequence:e.batchEvent.sequence,sessionId:e.sessionId,toolName:i.toolName,turnId:e.batchEvent.turnId,workflowId:workflowEntryReference.workflowId}),e.adapterCtx);await e.writer.write(encodeMessageStreamEvent(stampMessageStreamEvent(o)))}catch(e){logError(log,`subagent.called emission failed`,e,{callId:i.callId,childSessionId:i.address.sessionId,toolName:i.toolName})}}function planDispatch(e){let t=getAgentHandleStore(e.session.state)?.handles??[];return e.actions.map(n=>{if(e.taskControls&&isTaskControlAction(n))return{action:n,kind:`task-control`};let r=n.input.agentId,i=typeof r==`string`&&r.trim()!==``?r:void 0;if(i!==void 0&&isAgentHandleAction(n)){if(t.some(e=>e.identity.id===i)){let t=e.bundle.subagentRegistry.dynamicNodeIds?.has(n.nodeId)===!0?getDynamicSubagentSelection(e.ctx,n.nodeId):void 0;return{action:n,agentId:i,dynamicRemoteAgent:n.kind===`remote-agent-call`&&t?.kind===`remote`?t.remoteAgent:void 0,kind:`resume`}}log.warn(`unknown agentId on subagent call; starting a new agent`,{agentId:i,callId:n.callId})}return classifyFreshStart({action:n,bundle:e.bundle,ctx:e.ctx,session:e.session})})}function classifyFreshStart(e){let{action:t}=e,n=e.bundle.subagentRegistry.subagentsByNodeId,r=resolveSubagentDepth(e.session),i=e.session.rootSessionId!==void 0||r.currentDepth>0,a=(t.kind===`subagent-call`||t.kind===`remote-agent-call`)&&e.bundle.subagentRegistry.dynamicNodeIds?.has(t.nodeId)===!0,o=a?getDynamicSubagentSelection(e.ctx,t.nodeId):void 0;if(a&&(o===void 0||t.kind===`subagent-call`&&o.kind!==`subagent`||t.kind===`remote-agent-call`&&o.kind!==`remote`)){let e=getSubagentName(t);return log.warn(`dynamic subagent call blocked after availability changed`,{callId:t.callId,nodeId:t.nodeId,subagentName:e}),{kind:`reject`,result:createUnavailableDynamicSubagentResult(t)}}if(isRecursiveAgentAction(t,n)&&i)return log.warn(`recursive agent call blocked outside the root session`,{callId:t.callId,currentDepth:r.currentDepth,nodeId:t.nodeId,subagentName:t.subagentName}),{kind:`reject`,result:createRecursiveAgentRootOnlyResult(t)};switch(t.kind){case`subagent-call`:{let r=o?.kind===`subagent`?o.agentConfig:void 0,i=n.get(t.nodeId),a=r?.description??(i?.definition.kind===`subagent`?i.definition.description:void 0);return{kind:`start`,target:{action:t,dynamicSubagentAgentConfig:r,kind:`local`,source:a===void 0?{outputSchema:e.bundle.turnAgent.outputSchema,type:`runtime`}:{description:a,outputSchema:r?.outputSchema??e.bundle.graph?.nodesByNodeId.get(t.nodeId)?.turnAgent?.outputSchema,type:`local`}}}}case`remote-agent-call`:return{kind:`start`,target:{action:t,dynamicRemoteAgent:o?.kind===`remote`?o.remoteAgent:void 0,kind:`remote`}};default:throw Error(`Unsupported runtime action kind "${t.kind}" in workflow runtime.`)}}async function startSubagent(e){let t=readActionTraceContext(e.serializedContext,e.session.sessionId,e.batchEvent.turnId,e.target.action.callId)??e.parentTraceContext;switch(e.target.kind){case`local`:return startLocalSubagent({action:e.target.action,auth:e.auth,batchEvent:e.batchEvent,bundle:e.bundle,capabilities:e.capabilities,channelMetadata:e.channelMetadata,currentSession:e.currentSession,dynamicSubagentAgentConfig:e.target.dynamicSubagentAgentConfig,fanoutSize:e.fanoutSize,initiatorAuth:e.initiatorAuth,parentContinuationToken:e.parentContinuationToken,parentTraceContext:t,activityObserver:e.activityObserver,sandboxSessionId:e.sandboxSessionId,session:e.session,source:e.target.source,taskOwned:e.taskOwned});case`remote`:return startRemoteSubagent({action:e.target.action,auth:e.auth,batchEvent:e.batchEvent,bundle:e.bundle,callbackBaseUrl:e.callbackBaseUrl,currentSession:e.currentSession,dynamicRemoteAgent:e.target.dynamicRemoteAgent,initiatorAuth:e.initiatorAuth,parentContinuationToken:e.parentContinuationToken,parentTraceContext:t,activityObserver:e.activityObserver,session:e.session,taskOwned:e.taskOwned});default:return e.target}}function isRecursiveAgentAction(e,t){return e.kind===`subagent-call`&&e.subagentName===`agent`&&!t.has(e.nodeId)}export{emitSubagentCalled,prepareAgentActionDispatch,prepareRuntimeActionDispatch,startSubagent};
|
|
1
|
+
import{createLogger,logError}from"#internal/logging.js";import{callAdapterEventHandler}from"#channel/adapter.js";import{normalizeChannelAudience}from"#shared/channel-audience.js";import{ContextContainer}from"#context/container.js";import{ActivityObserverKey,AuthKey,CapabilitiesKey,ChannelInstrumentationKey,InitiatorAuthKey,ParentSessionKey,SandboxKey}from"#context/keys.js";import{createSubagentCalledEvent,encodeMessageStreamEvent,stampMessageStreamEvent}from"#protocol/message.js";import{BundleKey,ChannelKey}from"#runtime/sessions/runtime-context-keys.js";import{applyLiveDeliveryAudienceCeiling,readForwardedTraceAssertion}from"#shared/forwarded-trace-policy.js";import{workflowEntryReference}from"#execution/workflow-runtime.js";import{deriveRootTurnActivityWorkId}from"#execution/activity-work-id.js";import{getAgentHandleStore}from"#harness/handles/store.js";import{deserializeContext}from"#context/serialize.js";import{readDurableSession}from"#execution/durable-session-store.js";import{getDynamicSubagentSelection}from"#context/dynamic-subagent-lifecycle.js";import{hydrateDurableSession}from"#execution/session.js";import{resolveEffectiveAgentRuntime}from"#execution/effective-agent-config.js";import{buildAdapterContext}from"#channel/adapter-context.js";import{withContextScope}from"#context/run-step.js";import"#execution/agent-handle-dispatch.js";import{readActionTraceContext,readSessionTraceContext}from"#tracing/agent-trace-context-store.js";import{assertUniqueRuntimeActionCallIds,getPendingRuntimeActionBatch}from"#harness/runtime-actions.js";import{createRecursiveAgentRootOnlyResult,createUnavailableDynamicSubagentResult,getSubagentName}from"#execution/dispatch-action-failures.js";import{startLocalSubagent}from"#execution/subagent-start-local.js";import{startRemoteSubagent}from"#execution/subagent-start-remote.js";import"#execution/subagent-tool.js";import{isSubagentDelegationAction,resolveSubagentDepth}from"#harness/subagent-depth.js";import{isTaskControlAction}from"#execution/tasks/parent/dispatch.js";import{isWorkflowToolAction}from"#execution/tool-run/dispatch.js";import{resolvePreparedAgentAction}from"#execution/prepared-agent-action.js";const log=createLogger(`execution.dispatch-runtime-actions`);async function prepareRuntimeActionDispatch(e){let t=await readDurableSession(e.sessionState),n=getPendingRuntimeActionBatch(t.state);return n===void 0||n.actions.length===0?void 0:await prepareActionDispatch({batch:n,ctx:await deserializeContext(e.serializedContext),durableSession:t,serializedContext:e.serializedContext,taskControls:e.taskControls})}async function prepareAgentActionDispatch(e){let t=await readDurableSession(e.sessionState);return await prepareActionDispatch({batch:{actions:[e.action],event:e.event,responseMessages:[]},ctx:copyDurableContext(e.ctx),durableSession:t,fanoutSize:e.localFanoutSize,serializedContext:e.serializedContext,taskControls:!1})}function copyDurableContext(e){let t=new ContextContainer;for(let[n,r]of e.entries())t.set(n,r);return t}async function prepareActionDispatch(e){let{batch:t,durableSession:n}=e;assertUniqueRuntimeActionCallIds(t.actions);let r=e.ctx,i=r.require(BundleKey),c=resolveEffectiveAgentRuntime(i,r),l=hydrateDurableSession({compactionOverrides:{thresholdPercent:c.thresholdPercent},durable:n,turnAgent:c.turnAgent}),u=r.require(ChannelKey);getAgentHandleStore(n.state);let d=planDispatch({actions:t.actions,bundle:i,ctx:r,session:l,taskControls:e.taskControls}),f=resolveActiveSandboxSessionId(u.state,l.sessionId);if(planSharesSandbox({bundle:i,plan:d}))try{l=(await withContextScope(r,l,async e=>(await r.require(SandboxKey).get(),{result:void 0,session:e}))).session}finally{r.clearVirtualContext()}return{adapter:u,adapterCtx:buildAdapterContext(u,r),auth:r.get(AuthKey)??null,batch:t,bundle:i,capabilities:r.get(CapabilitiesKey),channelMetadata:r.get(ChannelInstrumentationKey),fanoutSize:e.fanoutSize??d.filter(e=>e.kind===`start`&&e.target.kind===`local`).length,initiatorAuth:r.get(InitiatorAuthKey)??null,localDevRequest:r.localDevRequest,parentSession:r.get(ParentSessionKey),parentTraceContext:readSessionTraceContext(e.serializedContext,l.sessionId),plan:d,activityObserver:resolvePreparedActivity(r.get(ActivityObserverKey),l,t.event.turnId),sandboxSessionId:f,serializedContext:e.serializedContext,session:l}}function resolvePreparedActivity(e,t,n){if(e!==void 0)return{sink:e.sink,workIdentity:e.workIdentity??{id:deriveRootTurnActivityWorkId({sessionId:t.sessionId,turnId:n}),kind:`root-turn`,rootSessionId:t.rootSessionId??t.sessionId,rootTurnId:n,sessionId:t.sessionId,turnId:n}}}function planSharesSandbox(e){let t=e.bundle.graph;return e.plan.some(e=>e.kind!==`start`||e.target.kind!==`local`?!1:e.target.selfAgent||t?.nodesByNodeId.get(e.target.action.nodeId)?.sandboxRegistry.sandbox.definition.inheritsParent===!0)}function resolveActiveSandboxSessionId(e,t){if(typeof e!=`object`||!e)return t;let n=e.sandboxSessionId;return typeof n==`string`&&n.length>0?n:t}async function emitSubagentCalled(e){let{entry:r,outcome:i}=e;try{let t=r.kind===`resume`?r.action:r.target.action,a=r.kind===`resume`?r.dynamicRemoteAgent:r.target.kind===`remote`?r.target.dynamicRemoteAgent:void 0,o=await callAdapterEventHandler(e.adapter,createSubagentCalledEvent({callId:i.callId,childSessionId:i.address.sessionId,name:i.name,remote:i.address.kind===`agent/remote`?{resolverId:a===void 0?t.nodeId:a.credentialsStepId,url:i.address.url}:void 0,sequence:e.batchEvent.sequence,sessionId:e.sessionId,toolName:i.toolName,turnId:e.batchEvent.turnId,workflowId:workflowEntryReference.workflowId}),e.adapterCtx);await e.writer.write(encodeMessageStreamEvent(stampMessageStreamEvent(o)))}catch(e){logError(log,`subagent.called emission failed`,e,{callId:i.callId,childSessionId:i.address.sessionId,toolName:i.toolName})}}function planDispatch(e){let t=getAgentHandleStore(e.session.state)?.handles??[];return e.actions.map(n=>{if(e.taskControls&&isTaskControlAction(n))return{action:n,kind:`task-control`};if(isWorkflowToolAction(n))return{action:n,kind:`workflow-tool`};if(!isSubagentDelegationAction(n))throw Error(`Unsupported prepared dispatch target "${n.target.kind}" in workflow runtime.`);let r=resolvePreparedAgentAction(n),i=n.input.agentId,a=typeof i==`string`&&i.trim()!==``?i:void 0;if(a!==void 0){if(t.some(e=>e.identity.id===a)){let t=e.bundle.subagentRegistry.dynamicNodeIds?.has(r.action.nodeId)===!0?getDynamicSubagentSelection(e.ctx,r.action.nodeId):void 0;return{action:r.action,agentId:a,dynamicRemoteAgent:r.action.kind===`remote-agent-call`&&t?.kind===`remote`?t.remoteAgent:void 0,kind:`resume`}}log.warn(`unknown agentId on subagent call; starting a new agent`,{agentId:a,callId:n.callId})}return classifyFreshStart({action:r.action,bundle:e.bundle,ctx:e.ctx,selfAgent:r.selfAgent,session:e.session})})}function classifyFreshStart(e){let{action:t}=e,n=e.bundle.subagentRegistry.subagentsByNodeId,r=resolveSubagentDepth(e.session),i=e.session.rootSessionId!==void 0||r.currentDepth>0,a=(t.kind===`subagent-call`||t.kind===`remote-agent-call`)&&e.bundle.subagentRegistry.dynamicNodeIds?.has(t.nodeId)===!0,o=a?getDynamicSubagentSelection(e.ctx,t.nodeId):void 0;if(a&&(o===void 0||t.kind===`subagent-call`&&o.kind!==`subagent`||t.kind===`remote-agent-call`&&o.kind!==`remote`)){let e=getSubagentName(t);return log.warn(`dynamic subagent call blocked after availability changed`,{callId:t.callId,nodeId:t.nodeId,subagentName:e}),{kind:`reject`,result:createUnavailableDynamicSubagentResult(t)}}if(e.selfAgent&&t.kind!==`subagent-call`)throw Error(`A self-agent dispatch target must resolve to a local subagent action.`);if(e.selfAgent&&i&&t.kind===`subagent-call`)return log.warn(`recursive agent call blocked outside the root session`,{callId:t.callId,currentDepth:r.currentDepth,nodeId:t.nodeId,subagentName:t.subagentName}),{kind:`reject`,result:createRecursiveAgentRootOnlyResult(t)};switch(t.kind){case`subagent-call`:{let r=o?.kind===`subagent`?o.agentConfig:void 0,i=n.get(t.nodeId),a=r?.description??(i?.definition.kind===`subagent`?i.definition.description:void 0),s=a===void 0?{outputSchema:e.bundle.turnAgent.outputSchema,type:`runtime`}:{description:a,outputSchema:r?.outputSchema??e.bundle.graph?.nodesByNodeId.get(t.nodeId)?.turnAgent?.outputSchema,type:`local`};return{kind:`start`,target:{action:t,dynamicSubagentAgentConfig:r,kind:`local`,selfAgent:e.selfAgent,source:s}}}case`remote-agent-call`:return{kind:`start`,target:{action:t,dynamicRemoteAgent:o?.kind===`remote`?o.remoteAgent:void 0,kind:`remote`}};default:return t}}async function startSubagent(e){let t=readActionTraceContext(e.serializedContext,e.session.sessionId,e.batchEvent.turnId,e.target.action.callId)??e.parentTraceContext,n=readForwardedTraceAssertion(t?.forwardedTracePolicy),i=normalizeChannelAudience(e.channelMetadata?.metadata.audience),a=t?.decision===void 0?t:{...t,decision:applyLiveDeliveryAudienceCeiling(t.decision,i,n)};switch(e.target.kind){case`local`:return startLocalSubagent({action:e.target.action,auth:e.auth,batchEvent:e.batchEvent,bundle:e.bundle,capabilities:e.capabilities,channelMetadata:e.channelMetadata,currentSession:e.currentSession,dynamicSubagentAgentConfig:e.target.dynamicSubagentAgentConfig,fanoutSize:e.fanoutSize,initiatorAuth:e.initiatorAuth,localDevRequest:e.localDevRequest,parentContinuationToken:e.parentContinuationToken,parentTraceContext:a,activityObserver:e.activityObserver,sandboxSessionId:e.sandboxSessionId,selfAgent:e.target.selfAgent,session:e.session,source:e.target.source,taskOwned:e.taskOwned});case`remote`:return startRemoteSubagent({action:e.target.action,auth:e.auth,batchEvent:e.batchEvent,bundle:e.bundle,callbackBaseUrl:e.callbackBaseUrl,originAudience:n?.originAudience??i,currentSession:e.currentSession,dynamicRemoteAgent:e.target.dynamicRemoteAgent,initiatorAuth:e.initiatorAuth,parentContinuationToken:e.parentContinuationToken,parentTraceContext:a,activityObserver:e.activityObserver,session:e.session,taskOwned:e.taskOwned});default:return e.target}}export{emitSubagentCalled,prepareAgentActionDispatch,prepareRuntimeActionDispatch,startSubagent};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createDurableSessionState}from"#execution/durable-session-store.js";import{dispatchToAgentHandle}from"#execution/agent-handle-dispatch.js";import{createAgentContinuationBundle}from"#execution/agent-continuation-bundle.js";import{emitSubagentCalled,prepareRuntimeActionDispatch,startSubagent}from"#execution/dispatch-runtime-actions-shared.js";import{deriveChildActivityObserverConfig}from"#execution/activity-work.js";async function dispatchRuntimeActionsStep(
|
|
1
|
+
import{createDurableSessionState}from"#execution/durable-session-store.js";import{dispatchToAgentHandle}from"#execution/agent-handle-dispatch.js";import{startWorkflowTool}from"#execution/tool-run/dispatch.js";import{createAgentContinuationBundle}from"#execution/agent-continuation-bundle.js";import{emitSubagentCalled,prepareRuntimeActionDispatch,startSubagent}from"#execution/dispatch-runtime-actions-shared.js";import{deriveChildActivityObserverConfig}from"#execution/activity-work.js";async function dispatchRuntimeActionsStep(r){"use step";let i=await prepareRuntimeActionDispatch({serializedContext:r.serializedContext,sessionState:r.sessionState,taskControls:!1});if(i===void 0)return{results:[],sessionState:r.sessionState,pendingTasks:[]};let{batch:a,bundle:o,session:s}=i,c=r.parentWritable.getWriter(),l=s,u=[];try{for(let e of i.plan){if(e.kind===`reject`){u.push(e.result);continue}if(e.kind===`workflow-tool`){let t=await startWorkflowTool({action:e.action,batchEvent:a.event,ownerInboxToken:r.parentContinuationToken,prepared:i,session:l});l=t.session,t.result!==void 0&&u.push(t.result);continue}if(e.kind===`task-control`)throw Error(`Task-control actions require the task dispatch step.`);let n;switch(e.kind){case`resume`:n=await dispatchToAgentHandle({action:e.action,activityObserver:i.activityObserver===void 0?void 0:deriveChildActivityObserverConfig({activityObserver:i.activityObserver,callId:e.action.callId,kind:e.action.kind===`remote-agent-call`?`remote-agent`:`subagent`,name:e.action.kind===`remote-agent-call`?e.action.remoteAgentName:e.action.subagentName,parentSessionId:s.sessionId,parentTurnId:a.event.turnId}),agentId:e.agentId,auth:i.auth,bundle:createAgentContinuationBundle({action:e.action,bundle:o,dynamicRemoteAgent:e.dynamicRemoteAgent}),currentSession:l,parentToken:r.parentContinuationToken??s.continuationToken,parentTurnId:a.event.turnId});break;case`start`:n=await startSubagent({auth:i.auth,batchEvent:a.event,bundle:o,callbackBaseUrl:r.callbackBaseUrl,capabilities:i.capabilities,channelMetadata:i.channelMetadata,currentSession:l,fanoutSize:i.fanoutSize,initiatorAuth:i.initiatorAuth,localDevRequest:i.localDevRequest,parentContinuationToken:r.parentContinuationToken,parentTraceContext:i.parentTraceContext,activityObserver:i.activityObserver,sandboxSessionId:i.sandboxSessionId,serializedContext:i.serializedContext,session:s,taskOwned:!1,target:e.target});break}if(l=n.session,n.kind===`error`){u.push(n.result);continue}await emitSubagentCalled({adapter:i.adapter,adapterCtx:i.adapterCtx,batchEvent:a.event,entry:e,outcome:n,sessionId:s.sessionId,writer:c})}}finally{c.releaseLock()}return{results:u,sessionState:l===s?r.sessionState:createDurableSessionState({session:l}),pendingTasks:[]}}export{dispatchRuntimeActionsStep};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{startWorkflowPreferAcceptedDeployment,turnWorkflowReference}from"#execution/workflow-runtime.js";import{createTurnWorkflowInput}from"#execution/durable-session-migrations/turn-workflow.js";import{readAcceptedDeploymentId}from"#execution/accepted-delivery-deployment.js";import{buildTurnAttributes,readRootSessionId}from"#execution/eve-workflow-attributes.js";import{normalizeEveAttributes}from"#runtime/attributes/normalize.js";async function dispatchTurnStep(e){"use step";return{runId:(await startWorkflowPreferAcceptedDeployment(turnWorkflowReference,[createTurnWorkflowInput(e)],readAcceptedDeploymentId(e.delivery),{allowReservedAttributes:!0,attributes:normalizeEveAttributes(buildTurnAttributes({parentSessionId:e.sessionState.sessionId,requestId:e.delivery.kind===`deliver`?e.delivery.requestId:void 0,rootSessionId:readRootSessionId(e.serializedContext)??e.sessionState.sessionId,serializedContext:e.serializedContext}))})).runId}}export{dispatchTurnStep};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createLogger}from"#internal/logging.js";import{BundleKey}from"#runtime/sessions/runtime-context-keys.js";import{deserializeContext}from"#context/serialize.js";import{createDurableSessionState,readDurableSession}from"#execution/durable-session-store.js";import{hydrateDurableSession}from"#execution/session.js";import{resolveEffectiveAgentRuntime}from"#execution/effective-agent-config.js";import{setPendingRuntimeActionBatch}from"#harness/runtime-actions.js";import{getSubagentDelegationName,isSubagentDelegationAction}from"#harness/subagent-depth.js";import{dispatchRuntimeActionsStep}from"#execution/dispatch-runtime-actions-step.js";import{dispatchTaskStep}from"#execution/tasks/parent/dispatch-task-step.js";import{getPendingWorkflowInterrupt,setPendingWorkflowUsedCalls}from"#harness/workflow-interrupt-state.js";import{buildRuntimeActionsFromWorkflowInterrupt}from"#harness/workflow-runtime-action-state.js";import{planWorkflowSubagentDispatch}from"#harness/workflow-subagent-limit.js";const log=createLogger(`execution.dispatch-workflow-runtime-actions`);async function dispatchWorkflowRuntimeActionsStep(e){"use step";let n=await readDurableSession(e.sessionState),r=getPendingWorkflowInterrupt(n.state);if(r===void 0)return{results:[],sessionState:e.sessionState,pendingTasks:[]};let i=buildRuntimeActionsFromWorkflowInterrupt(r.interrupt);if(i.length===0)return{results:[],sessionState:e.sessionState,pendingTasks:[]};let a=await deserializeContext(e.serializedContext),o=a.require(BundleKey),s=resolveEffectiveAgentRuntime(o,a),c=planWorkflowSubagentDispatch({actions:i,maxSubagents:n.workflowMaxSubagents,usedCalls:r.usedCalls}),l=c.blocked.map(e=>(log.warn(`workflow subagent limit reached; blocking delegated call`,{callId:e.callId,maxSubagents:c.maxSubagents,subagentName:isSubagentDelegationAction(e)?getSubagentDelegationName(e):e.kind,usedCalls:c.usedCalls}),createWorkflowSubagentLimitResult({action:e,plan:c})));if(c.allowed.length===0)return{results:l,sessionState:e.sessionState,pendingTasks:[]};let u=setPendingWorkflowUsedCalls({session:hydrateDurableSession({compactionOverrides:{thresholdPercent:s.thresholdPercent},durable:n,turnAgent:s.turnAgent}),usedCalls:r.usedCalls+c.allowed.length}),d=setPendingRuntimeActionBatch({actions:c.allowed,event:{sequence:0,stepIndex:0,turnId:`workflow-dispatch`},responseMessages:[],session:u}),f=await(o.resolvedAgent.config?.experimental?.tasks===!0?dispatchTaskStep:dispatchRuntimeActionsStep)({callbackBaseUrl:e.callbackBaseUrl,parentContinuationToken:e.parentContinuationToken,parentWritable:e.parentWritable,serializedContext:e.serializedContext,sessionState:createDurableSessionState({session:d})});return l.length===0?f:{results:[...f.results,...l],sessionState:f.sessionState,pendingTasks:f.pendingTasks}}function createWorkflowSubagentLimitResult(e){let t=isSubagentDelegationAction(e.action)?getSubagentDelegationName(e.action):e.action.kind;return{callId:e.action.callId,isError:!0,kind:`subagent-result`,origin:`dispatch`,output:{code:`WORKFLOW_SUBAGENT_LIMIT_REACHED`,maxSubagents:e.plan.maxSubagents,message:`Workflow subagent limit reached (${String(e.plan.maxSubagents)}); "${t}" was not called.`},subagentName:t}}export{dispatchWorkflowRuntimeActionsStep};
|
|
1
|
+
import{createLogger}from"#internal/logging.js";import{BundleKey}from"#runtime/sessions/runtime-context-keys.js";import{deserializeContext}from"#context/serialize.js";import{createDurableSessionState,readDurableSession}from"#execution/durable-session-store.js";import{hydrateDurableSession}from"#execution/session.js";import{resolveEffectiveAgentRuntime}from"#execution/effective-agent-config.js";import{setPendingRuntimeActionBatch}from"#harness/runtime-actions.js";import{getSubagentDelegationName,isSubagentDelegationAction}from"#harness/subagent-depth.js";import{dispatchRuntimeActionsStep}from"#execution/dispatch-runtime-actions-step.js";import{dispatchTaskStep}from"#execution/tasks/parent/dispatch-task-step.js";import{getPendingWorkflowInterrupt,setPendingWorkflowUsedCalls}from"#harness/workflow-interrupt-state.js";import{buildRuntimeActionsFromWorkflowInterrupt}from"#harness/workflow-runtime-action-state.js";import{planWorkflowSubagentDispatch}from"#harness/workflow-subagent-limit.js";const log=createLogger(`execution.dispatch-workflow-runtime-actions`);async function dispatchWorkflowRuntimeActionsStep(e){"use step";let n=await readDurableSession(e.sessionState),r=getPendingWorkflowInterrupt(n.state);if(r===void 0)return{results:[],sessionState:e.sessionState,pendingTasks:[]};let i=buildRuntimeActionsFromWorkflowInterrupt(r.interrupt);if(i.length===0)return{results:[],sessionState:e.sessionState,pendingTasks:[]};let a=await deserializeContext(e.serializedContext),o=a.require(BundleKey),s=resolveEffectiveAgentRuntime(o,a),c=planWorkflowSubagentDispatch({actions:i,maxSubagents:n.workflowMaxSubagents,usedCalls:r.usedCalls}),l=c.blocked.map(e=>(log.warn(`workflow subagent limit reached; blocking delegated call`,{callId:e.callId,maxSubagents:c.maxSubagents,subagentName:isSubagentDelegationAction(e)?getSubagentDelegationName(e):e.target.kind,usedCalls:c.usedCalls}),createWorkflowSubagentLimitResult({action:e,plan:c})));if(c.allowed.length===0)return{results:l,sessionState:e.sessionState,pendingTasks:[]};let u=setPendingWorkflowUsedCalls({session:hydrateDurableSession({compactionOverrides:{thresholdPercent:s.thresholdPercent},durable:n,turnAgent:s.turnAgent}),usedCalls:r.usedCalls+c.allowed.length}),d=setPendingRuntimeActionBatch({actions:c.allowed,event:{sequence:0,stepIndex:0,turnId:`workflow-dispatch`},responseMessages:[],session:u}),f=await(o.resolvedAgent.config?.experimental?.tasks===!0?dispatchTaskStep:dispatchRuntimeActionsStep)({callbackBaseUrl:e.callbackBaseUrl,parentContinuationToken:e.parentContinuationToken,parentWritable:e.parentWritable,serializedContext:e.serializedContext,sessionState:createDurableSessionState({session:d})});return l.length===0?f:{results:[...f.results,...l],sessionState:f.sessionState,pendingTasks:f.pendingTasks}}function createWorkflowSubagentLimitResult(e){let t=isSubagentDelegationAction(e.action)?getSubagentDelegationName(e.action):e.action.target.kind;return{callId:e.action.callId,isError:!0,kind:`subagent-result`,origin:`dispatch`,output:{code:`WORKFLOW_SUBAGENT_LIMIT_REACHED`,maxSubagents:e.plan.maxSubagents,message:`Workflow subagent limit reached (${String(e.plan.maxSubagents)}); "${t}" was not called.`},subagentName:t}}export{dispatchWorkflowRuntimeActionsStep};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const turnWorkflowInputV1ToV2={from:1,migrate(e){return{...e,version:2}},to:2};export{turnWorkflowInputV1ToV2};
|
|
@@ -14,7 +14,9 @@ import type { HookPayload, RuntimeActionResultHookPayload, SessionCapabilities }
|
|
|
14
14
|
import type { DurableSessionState } from "#execution/durable-session-store.js";
|
|
15
15
|
import type { RuntimeActionResult } from "#shared/action-types.js";
|
|
16
16
|
import type { RunMode } from "#shared/run-mode.js";
|
|
17
|
-
|
|
17
|
+
import type { DurableStepResult } from "#execution/next-driver-action.js";
|
|
18
|
+
import type { TurnCancelPayload } from "#execution/turn-cancellation-token.js";
|
|
19
|
+
export declare const TURN_WORKFLOW_INPUT_VERSION = 2;
|
|
18
20
|
/** Trusted runtime-action results collected by the parent turn driver. */
|
|
19
21
|
interface RuntimeActionResultStepInput {
|
|
20
22
|
readonly acceptedAtMsByCallId?: Readonly<Record<string, number>>;
|
|
@@ -25,13 +27,14 @@ export type TurnStepPayload = Exclude<HookPayload, RuntimeActionResultHookPayloa
|
|
|
25
27
|
export interface TurnStepInput {
|
|
26
28
|
/** Cancellation signal forwarded into the turn step. */
|
|
27
29
|
readonly abortSignal?: AbortSignal;
|
|
30
|
+
/** Executes only on this Vercel deployment; mismatches defer before mutation. */
|
|
31
|
+
readonly acceptedDeploymentId?: string;
|
|
28
32
|
readonly input: TurnStepPayload | undefined;
|
|
29
33
|
readonly parentWritable: WritableStream<Uint8Array>;
|
|
30
34
|
readonly serializedContext: Record<string, unknown>;
|
|
31
35
|
readonly sessionState: DurableSessionState;
|
|
32
36
|
}
|
|
33
|
-
|
|
34
|
-
readonly version: typeof TURN_WORKFLOW_INPUT_VERSION;
|
|
37
|
+
interface TurnWorkflowInputBase {
|
|
35
38
|
readonly capabilities: SessionCapabilities | undefined;
|
|
36
39
|
readonly completionToken: string;
|
|
37
40
|
/**
|
|
@@ -45,11 +48,30 @@ export interface TurnWorkflowInput {
|
|
|
45
48
|
readonly mode: RunMode;
|
|
46
49
|
readonly stepInput: TurnStepInput;
|
|
47
50
|
}
|
|
51
|
+
/** A step completed inline before the turn needed its child workflow. */
|
|
52
|
+
export interface InitialTurnStep {
|
|
53
|
+
readonly beforeStep: {
|
|
54
|
+
readonly serializedContext: Record<string, unknown>;
|
|
55
|
+
readonly sessionState: DurableSessionState;
|
|
56
|
+
};
|
|
57
|
+
readonly result: DurableStepResult;
|
|
58
|
+
}
|
|
59
|
+
export type TurnWorkflowInput = TurnWorkflowInputBase & ({
|
|
60
|
+
readonly initialCancellation?: undefined;
|
|
61
|
+
readonly initialStep?: undefined;
|
|
62
|
+
readonly version: 1;
|
|
63
|
+
} | {
|
|
64
|
+
readonly initialCancellation?: TurnCancelPayload;
|
|
65
|
+
readonly initialStep?: InitialTurnStep;
|
|
66
|
+
readonly version: typeof TURN_WORKFLOW_INPUT_VERSION;
|
|
67
|
+
});
|
|
48
68
|
export interface TurnWorkflowDispatchInput {
|
|
49
69
|
readonly capabilities: SessionCapabilities | undefined;
|
|
50
70
|
readonly completionToken: string;
|
|
51
71
|
readonly delivery: HookPayload;
|
|
52
72
|
readonly mode: RunMode;
|
|
73
|
+
readonly initialStep?: InitialTurnStep;
|
|
74
|
+
readonly initialCancellation?: TurnCancelPayload;
|
|
53
75
|
readonly parentWritable: WritableStream<Uint8Array>;
|
|
54
76
|
readonly serializedContext: Record<string, unknown>;
|
|
55
77
|
readonly sessionState: DurableSessionState;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{runMigrationChain}from"./chain.js";import{turnWorkflowInputV0ToV1}from"./turn-workflow-v0-to-v1.js";const TURN_WORKFLOW_INPUT_VERSION=
|
|
1
|
+
import{runMigrationChain}from"./chain.js";import{turnWorkflowInputV0ToV1}from"./turn-workflow-v0-to-v1.js";import{turnWorkflowInputV1ToV2}from"./turn-workflow-v1-to-v2.js";const TURN_WORKFLOW_INPUT_VERSION=2,turnWorkflowInputMigrations=[turnWorkflowInputV0ToV1,turnWorkflowInputV1ToV2];function createTurnWorkflowInput(e){return{capabilities:e.capabilities,completionToken:e.completionToken,driverCapabilities:{cancelledTurnSettle:!0,turnInbox:!0},initialCancellation:e.initialCancellation,initialStep:e.initialStep,mode:e.mode,stepInput:{input:e.delivery,parentWritable:e.parentWritable,serializedContext:e.serializedContext,sessionState:e.sessionState},version:2}}function migrateTurnWorkflowInput(t){return runMigrationChain({initialVersion:0,label:`turn workflow input`,migrations:turnWorkflowInputMigrations,targetVersion:2,value:t})}export{TURN_WORKFLOW_INPUT_VERSION,createTurnWorkflowInput,migrateTurnWorkflowInput};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{normalizeChannelAudience}from"#shared/channel-audience.js";import{ChannelRequestIdKey,OtelTraceEnabledKey,ScheduleIdKey,SessionTraceSeedKey}from"#context/keys.js";import{isNonEmptyString}from"#shared/guards.js";import{CHANNEL_CONTEXT_KEY_NAME}from"#context/key-names.js";import{shouldCaptureInstrumentationContent}from"#shared/instrumentation-content.js";import{isSampledTrace}from"#tracing/sampled-trace.js";function readChannelKind(e){let t=e[CHANNEL_CONTEXT_KEY_NAME]?.kind;return isNonEmptyString(t)?t:void 0}function isWorkflowTraceContentVisible(t){let n=t[CHANNEL_CONTEXT_KEY_NAME];return shouldCaptureInstrumentationContent(normalizeChannelAudience(
|
|
1
|
+
import{normalizeChannelAudience}from"#shared/channel-audience.js";import{ChannelRequestIdKey,OtelTraceEnabledKey,ScheduleIdKey,SessionTraceSeedKey}from"#context/keys.js";import{isNonEmptyString}from"#shared/guards.js";import{CHANNEL_CONTEXT_KEY_NAME}from"#context/key-names.js";import{resolveForwardedTraceSeed}from"#shared/forwarded-trace-policy.js";import{shouldCaptureInstrumentationContent}from"#shared/instrumentation-content.js";import{isSampledTrace}from"#tracing/sampled-trace.js";function readChannelKind(e){let t=e[CHANNEL_CONTEXT_KEY_NAME]?.kind;return isNonEmptyString(t)?t:void 0}function isWorkflowTraceContentVisible(t){let n=t[SessionTraceSeedKey.name];if(n!==void 0){let e=resolveForwardedTraceSeed(n);if(e.forwardedTracePolicy!==void 0){let t=e.decision;return t?.action===`record`&&t.recordInputs&&t.recordOutputs}}let r=t[CHANNEL_CONTEXT_KEY_NAME];return shouldCaptureInstrumentationContent(normalizeChannelAudience(r?.audience))}function isWorkflowOtelTraceEnabled(e){return e[OtelTraceEnabledKey.name]===!0}function readSessionTraceId(e){let t=e[SessionTraceSeedKey.name];if(!(t===void 0||!isSampledTrace(resolveForwardedTraceSeed(t))))return isNonEmptyString(t.traceId)?t.traceId:void 0}function readParentLineage(e){let t=e[`eve.parentSession`],n=t?.callId,r=t?.rootSessionId,i=t?.sessionId,a=t?.turn?.id;return{callId:isNonEmptyString(n)?n:void 0,rootSessionId:isNonEmptyString(r)?r:void 0,sessionId:isNonEmptyString(i)?i:void 0,turnId:isNonEmptyString(a)?a:void 0}}function readParentSessionId(e){return readParentLineage(e).sessionId}function readRootSessionId(e){return readParentLineage(e).rootSessionId}function readChannelRequestId(e){let n=e[ChannelRequestIdKey.name];return isNonEmptyString(n)?n:void 0}function readScheduleId(e){let t=e[ScheduleIdKey.name];return isNonEmptyString(t)?t:void 0}const EVE_SESSION_TITLE_MAX_CHARS=125;function deriveSessionTitle(e){let t=collectMessageText(e);if(t===void 0||t.length===0)return;let n=t.replace(/\s+/gu,` `).trim();if(n.length===0)return;let r=Array.from(n);return r.length<=125?n:`${r.slice(0,124).join(``)}…`}function collectMessageText(e){if(typeof e==`string`)return e;if(!Array.isArray(e))return;let t=[];for(let n of e)n&&typeof n==`object`&&n.type===`text`&&typeof n.text==`string`&&t.push(n.text);return t.length>0?t.join(` `):void 0}function buildSessionAttributes(e){let t=isWorkflowTraceContentVisible(e.serializedContext),n=isWorkflowOtelTraceEnabled(e.serializedContext);return{"$eve.channel_request_id":readChannelRequestId(e.serializedContext),"$eve.schedule":readScheduleId(e.serializedContext),"$eve.is_otel_trace_enabled":n,"$eve.is_trace_content_visible":t,"$eve.trace_id":readSessionTraceId(e.serializedContext),"$eve.type":`session`,"$eve.trigger":readChannelKind(e.serializedContext),"$eve.title":deriveSessionTitle(e.inputMessage)}}function buildSubagentRootAttributes(e){return{"$eve.channel_request_id":readChannelRequestId(e.serializedContext),"$eve.is_otel_trace_enabled":isWorkflowOtelTraceEnabled(e.serializedContext),"$eve.is_trace_content_visible":isWorkflowTraceContentVisible(e.serializedContext),"$eve.trace_id":readSessionTraceId(e.serializedContext),"$eve.type":`subagent`,"$eve.parent":e.parentSessionId,"$eve.parent_call":e.parentCallId,"$eve.parent_turn":e.parentTurnId,"$eve.root":e.rootSessionId,"$eve.subagent":e.identity.nodeId,"$eve.trigger":readChannelKind(e.serializedContext)}}function buildTurnAttributes(e){return{"$eve.channel_request_id":e.requestId,"$eve.is_otel_trace_enabled":isWorkflowOtelTraceEnabled(e.serializedContext),"$eve.is_trace_content_visible":isWorkflowTraceContentVisible(e.serializedContext),"$eve.trace_id":readSessionTraceId(e.serializedContext),"$eve.type":`turn`,"$eve.parent":e.parentSessionId,"$eve.root":e.rootSessionId}}export{EVE_SESSION_TITLE_MAX_CHARS,buildSessionAttributes,buildSubagentRootAttributes,buildTurnAttributes,deriveSessionTitle,isWorkflowOtelTraceEnabled,isWorkflowTraceContentVisible,readChannelKind,readChannelRequestId,readParentLineage,readParentSessionId,readRootSessionId,readScheduleId,readSessionTraceId};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { TurnCaller } from "#channel/types.js";
|
|
2
|
+
import type { DurableSessionState } from "#execution/durable-session-store.js";
|
|
3
|
+
import type { RunMode } from "#shared/run-mode.js";
|
|
4
|
+
/** Completes a session that terminates outside a turn. */
|
|
5
|
+
export declare function finalizeTerminalSession(input: {
|
|
6
|
+
readonly caller: TurnCaller | undefined;
|
|
7
|
+
readonly driverWritable: WritableStream<Uint8Array>;
|
|
8
|
+
readonly mode: RunMode;
|
|
9
|
+
readonly notifyCaller: boolean;
|
|
10
|
+
readonly serializedContext: Record<string, unknown>;
|
|
11
|
+
readonly sessionState: DurableSessionState;
|
|
12
|
+
readonly terminalState: {
|
|
13
|
+
terminalEmitted: boolean;
|
|
14
|
+
};
|
|
15
|
+
}): Promise<{
|
|
16
|
+
readonly output: unknown;
|
|
17
|
+
}>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{notifyDelegatedParentStep,notifyTurnCallerStep}from"#execution/delegated-parent-notification.js";import{createDelegatedSubagentSuccessResult}from"#execution/delegated-parent-result.js";import{fireSessionCallbackStep}from"#execution/session-callback-step.js";import{emitTerminalSessionCompletionStep}from"#execution/terminal-session-completion-step.js";import{terminateChildSessionsStep}from"#execution/terminate-child-sessions-step.js";async function finalizeTerminalSession(e){return await terminateChildSessionsStep({serializedContext:e.serializedContext,sessionState:e.sessionState}),await emitTerminalSessionCompletionStep({parentWritable:e.driverWritable,serializedContext:e.serializedContext}),e.terminalState.terminalEmitted=!0,e.notifyCaller&&(e.mode===`task`?(await fireSessionCallbackStep({output:``,serializedContext:e.serializedContext,status:`completed`}),await notifyDelegatedParentStep({result:createDelegatedSubagentSuccessResult(e.serializedContext,``),serializedContext:e.serializedContext})):e.caller!==void 0&&await notifyTurnCallerStep({caller:e.caller,lifecycle:`terminal`,sessionId:e.sessionState.sessionId,settled:{output:``}})),{output:``}}export{finalizeTerminalSession};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { DeliverHookPayload, HookPayload, SessionCapabilities } from "#channel/types.js";
|
|
2
|
+
import type { InitialTurnStep } from "#execution/durable-session-migrations/turn-workflow.js";
|
|
3
|
+
import type { DurableSessionState } from "#execution/durable-session-store.js";
|
|
4
|
+
import type { NextDriverAction } from "#execution/next-driver-action.js";
|
|
5
|
+
import type { SessionCommandInbox } from "#execution/session-command-inbox.js";
|
|
6
|
+
import type { TurnCancelPayload } from "#execution/turn-cancellation-token.js";
|
|
7
|
+
import type { RunMode } from "#shared/run-mode.js";
|
|
8
|
+
export type InlineTurnOutcome = {
|
|
9
|
+
readonly initialCancellation?: TurnCancelPayload;
|
|
10
|
+
readonly initialStep?: InitialTurnStep;
|
|
11
|
+
readonly kind: "child";
|
|
12
|
+
} | {
|
|
13
|
+
readonly action: NextDriverAction;
|
|
14
|
+
readonly kind: "result";
|
|
15
|
+
};
|
|
16
|
+
/** Runs ordinary same-deployment turn steps inline and hands complex work to the child path. */
|
|
17
|
+
export declare function runInlineTurn(input: {
|
|
18
|
+
readonly bufferedDeliveries: DeliverHookPayload[];
|
|
19
|
+
readonly bufferedSessionControls: Array<"clear" | "compact" | "expired" | "reset">;
|
|
20
|
+
readonly cancelledTaskIds?: Set<string>;
|
|
21
|
+
readonly capabilities?: SessionCapabilities;
|
|
22
|
+
readonly commandInbox: SessionCommandInbox;
|
|
23
|
+
readonly delivery: HookPayload;
|
|
24
|
+
readonly mode: RunMode;
|
|
25
|
+
readonly parentWritable: WritableStream<Uint8Array>;
|
|
26
|
+
readonly seenTaskDeliveries?: Set<string>;
|
|
27
|
+
readonly serializedContext: Record<string, unknown>;
|
|
28
|
+
readonly sessionState: DurableSessionState;
|
|
29
|
+
}): Promise<InlineTurnOutcome>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{readAcceptedDeploymentId}from"#execution/accepted-delivery-deployment.js";import{activeTurnId}from"#harness/active-turn-id.js";import{reportDroppedWirePayloadStep}from"#execution/report-dropped-wire-payload-step.js";import{SessionStateCursor}from"#execution/session-state-cursor.js";import{SessionInboxWireError,sessionInboxWire}from"#execution/wire/session-inbox-wire.js";import{turnStep}from"#execution/workflow-steps.js";import{TurnCancelledError}from"#harness/turn-cancellation.js";async function runInlineTurn(n){let i=readAcceptedDeploymentId(n.delivery);if(i===void 0)return{kind:`child`};let a=new InlineTurnControl({bufferedDeliveries:n.bufferedDeliveries,bufferedSessionControls:n.bufferedSessionControls,cancelledTaskIds:n.cancelledTaskIds,commandInbox:n.commandInbox,expectedTurnId:activeTurnId(n.sessionState.emissionState),seenTaskDeliveries:n.seenTaskDeliveries}),o=new SessionStateCursor({serializedContext:n.serializedContext,sessionState:n.sessionState}),s=n.delivery;for(;;){let e={serializedContext:o.serializedContext,sessionState:o.sessionState},t=await a.waitForStep(turnStep({abortSignal:a.signal,acceptedDeploymentId:i,input:s,parentWritable:n.parentWritable,serializedContext:o.serializedContext,sessionState:o.sessionState}));if(t.requiresChildDispatch===!0)return childOutcome(a);let r={beforeStep:e,result:t};if(a.initialCancellation!==void 0||t.action===`cancelled`||t.sleepDurationMs!==void 0||(t.backgroundTasks?.length??0)>0)return childOutcome(a,r);if(t.action===`done`)return{action:{isError:t.isError,kind:`done`,output:t.output??``,serializedContext:t.serializedContext,sessionState:t.sessionState,usage:t.usage,usageDelta:t.usageDelta},kind:`result`};if(t.action===`dispatch-workflow-runtime-actions`||t.action===`park`&&t.pendingRuntimeActionKeys!==void 0)return childOutcome(a,r);if(t.action===`park`)return t.hasPendingAuthorization||t.hasPendingInputBatch&&n.capabilities?.requestInput===!0||n.mode===`conversation`?{action:{authorizationAttemptIds:t.authorizationAttemptIds,authorizationNames:t.authorizationNames,kind:`park`,serializedContext:t.serializedContext,sessionState:t.sessionState,settled:t.settled},kind:`result`}:childOutcome(a,r);let c=o.sessionState.continuationToken;o.adoptState(t),o.sessionState.continuationToken!==``&&o.sessionState.continuationToken!==c&&await n.commandInbox.rekeyContinuation(o.sessionState.continuationToken),s=void 0}}function childOutcome(e,t){return{initialCancellation:e.initialCancellation,initialStep:t,kind:`child`}}var InlineTurnControl=class{bufferedDeliveries;bufferedSessionControls;cancelledTaskIds;commandInbox;controller=new AbortController;expectedTurnId;seenTaskDeliveries;cancellation;constructor(e){this.bufferedDeliveries=e.bufferedDeliveries,this.bufferedSessionControls=e.bufferedSessionControls,this.cancelledTaskIds=e.cancelledTaskIds??new Set,this.commandInbox=e.commandInbox,this.expectedTurnId=e.expectedTurnId,this.seenTaskDeliveries=e.seenTaskDeliveries??new Set}get initialCancellation(){return this.cancellation}get signal(){return this.controller.signal}async waitForStep(e){let t=e.then(e=>({kind:`step`,result:e}));for(;;){let e=await Promise.race([t,this.commandInbox.next().then(e=>({kind:`command`,result:e}))]);if(e.kind===`step`)return e.result;if(e.result.done)throw Error(`Session command inbox closed before the inline turn step settled.`);this.commandInbox.consumeNext(),await this.handle(e.result.value)}}abort(e){this.controller.signal.aborted||(this.cancellation=e,this.controller.abort(new TurnCancelledError))}acceptTaskDelivery(e){let t=e.taskDeliveryId??e.caller?.taskId;return t===void 0?!0:this.originatesFromCancelledTask(t)||this.seenTaskDeliveries.has(t)?!1:(this.seenTaskDeliveries.add(t),!0)}async handle(e){if(e.kind===`runtime-action-result`)return;let t;try{t=sessionInboxWire.decode(e)}catch(e){if(!(e instanceof SessionInboxWireError))throw e;await reportDroppedWirePayloadStep({detail:e.message,family:`session-inbox`});return}if(t.kind===`deliver`){if(!this.acceptTaskDelivery(t))return;this.bufferedDeliveries.push(t),t.turnPolicy===`steer`&&deliveryHasMessage(t)&&this.abort({});return}if(t.kind===`clear`||t.kind===`compact`){this.bufferedSessionControls.push(t.kind);return}if(t.kind===`session-timeout`){this.bufferedSessionControls.push(`expired`);return}if(t.kind===`reset`){this.bufferedSessionControls.push(`reset`),this.abort({});return}if(t.kind===`cancel`){t.taskId!==void 0&&this.discardTaskDeliveries(t.taskId);let e=t.taskId!==void 0&&t.turnId!==void 0&&t.turnId!==this.expectedTurnId?void 0:t.turnId;(e===void 0||e===this.expectedTurnId)&&this.abort(e===void 0?{}:{turnId:e})}}discardTaskDeliveries(e){this.cancelledTaskIds.add(e);let t=this.bufferedDeliveries.filter(e=>!this.shouldDiscard(e));this.bufferedDeliveries.splice(0,this.bufferedDeliveries.length,...t)}originatesFromCancelledTask(e){return[...this.cancelledTaskIds].some(t=>e===t||e.startsWith(`${t}:`))}shouldDiscard(e){let t=e.taskDeliveryId??e.caller?.taskId;return t!==void 0&&this.originatesFromCancelledTask(t)}};function deliveryHasMessage(e){return e.payloads.some(e=>e.message!==void 0)}export{runInlineTurn};
|
|
@@ -17,6 +17,8 @@ import type { TokenUsage } from "#shared/token-usage.js";
|
|
|
17
17
|
interface DurableStepResultFields {
|
|
18
18
|
readonly backgroundTaskState?: DurableSessionState;
|
|
19
19
|
readonly backgroundTasks?: StepResult["backgroundTasks"];
|
|
20
|
+
/** The guarded inline step deferred before mutating state. */
|
|
21
|
+
readonly requiresChildDispatch?: true;
|
|
20
22
|
readonly serializedContext: Record<string, unknown>;
|
|
21
23
|
readonly sessionState: DurableSessionState;
|
|
22
24
|
}
|
|
@@ -37,6 +39,8 @@ export type DurableStepResult = ({
|
|
|
37
39
|
readonly hasPendingAuthorization: boolean;
|
|
38
40
|
readonly hasPendingInputBatch: boolean;
|
|
39
41
|
readonly pendingRuntimeActionKeys?: readonly string[];
|
|
42
|
+
/** The batch starts workflow tool runs, which report to the turn's run channels. */
|
|
43
|
+
readonly startsWorkflowToolRuns?: boolean;
|
|
40
44
|
readonly tasksEnabled?: boolean;
|
|
41
45
|
readonly sleepDurationMs?: number;
|
|
42
46
|
readonly settled?: SettledTurn;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createLogger}from"#internal/logging.js";import{resolveInstalledPackageInfo}from"#internal/application/package.js";import{UNSPECIFIED_INPUT_SCHEMA}from"#tools/schema.js";import{createToolExecuteWithAuth}from"#execution/tool-auth.js";import{resolveRuntimeModelReference}from"#runtime/agent/resolve-model.js";import{createBackgroundSubagentHarnessDefinition,createHarnessDelegationToolDefinition}from"#execution/delegation-tool.js";import{
|
|
1
|
+
import{createLogger}from"#internal/logging.js";import{resolveInstalledPackageInfo}from"#internal/application/package.js";import{UNSPECIFIED_INPUT_SCHEMA}from"#tools/schema.js";import{createToolExecuteWithAuth}from"#execution/tool-auth.js";import{resolveRuntimeModelReference}from"#runtime/agent/resolve-model.js";import{createBackgroundSubagentHarnessDefinition,createHarnessDelegationToolDefinition}from"#execution/delegation-tool.js";import{dispatchDynamicModelEvent}from"#context/dynamic-model-lifecycle.js";import{preparePersistedStepDynamicToolMetadata}from"#context/dynamic-tool-lifecycle.js";import{createToolLoopHarness}from"#harness/tool-loop.js";import{findRegisteredRuntimeTool}from"#runtime/tools/registry.js";import{preserveFrameworkStateOnCompaction}from"#execution/compaction.js";import{createWorkflowToolBackgroundExecute}from"#execution/tool-run/background.js";const log=createLogger(`execution.node-step`);function createExecutionNodeStep(e){let t=createRuntimeModelResolver(e.modelResolutionScope),n=e.node.turnAgent.dynamicModel===void 0?void 0:createRuntimeDynamicModelEventDispatcher(e.modelResolutionScope,e.node.turnAgent.dynamicModel),r=createNodeHarnessTools({node:e.node}),i=e.instrumentation,a=i?.prepareExecution(),o=createToolLoopHarness({abortSignal:e.abortSignal,capabilities:e.capabilities,clearOnly:e.clearOnly,compactOnly:e.compactOnly,workflow:e.node.agent.workflowTool!==void 0,workflowMaxSubagents:e.workflowMaxSubagents,handleEvent:e.handleEvent,historyProjector:e.historyProjector,historyView:e.historyView,instrumentation:a,mode:e.mode,tasksEnabled:e.node.agent.config?.experimental?.tasks===!0,onCompaction:preserveFrameworkStateOnCompaction,prepareStepDynamicTools:t=>preparePersistedStepDynamicToolMetadata({...t,resolvers:e.node.agent.dynamicToolResolvers??[]}),dispatchDynamicModelEvent:n,resolveModel:t,runtimeIdentity:buildRuntimeIdentity(e.node),tools:r});return i===void 0?o:async(e,t)=>{try{return await o(e,t)}finally{await i.flush()}}}function buildRuntimeIdentity(e){let n=resolveInstalledPackageInfo(),r={agentId:e.turnAgent.id,agentName:e.agent.config?.name,eveVersion:n.version},i=process.env.VERCEL_GIT_COMMIT_SHA?.trim(),a=process.env.VERCEL_GIT_COMMIT_REF?.trim(),o=process.env.VERCEL_DEPLOYMENT_CREATED_AT?.trim();return i||a||o?{...r,build:{deployedAt:o||void 0,gitBranch:a||void 0,gitSha:i||void 0}}:r}function createRuntimeModelResolver(e){return t=>resolveRuntimeModelReference(t,e)}function createRuntimeDynamicModelEventDispatcher(e,t){return n=>dispatchDynamicModelEvent({ctx:n.ctx,dynamicModel:t,event:n.event,messages:n.messages,scope:e})}function createNodeHarnessTools(e){let t=new Map,n=e.node.agent.config?.experimental?.tasks===!0;for(let r of e.node.turnAgent.tools){let i=resolveHarnessToolDefinition({node:e.node,tasksEnabled:n,tool:r});i!==null&&t.set(r.name,i)}return t}function resolveHarnessToolDefinition(e){if(e.tool.kind===`subagent`||e.tool.kind===`remote`)return e.tasksEnabled?createBackgroundSubagentHarnessDefinition(e.tool):createHarnessDelegationToolDefinition(e.tool);let t=findRegisteredRuntimeTool(e.node.toolRegistry,e.tool.name);if(t===null)return log.warn(`declared tool is not registered — omitting from toolset`,{toolName:e.tool.name,nodeId:e.node.nodeId}),null;let r=t.definition,i=e.tool.behavior?.handling?.kind===`dispatch`?e.tool.behavior.handling.target:void 0;if(!e.tasksEnabled&&(i?.kind===`task-cancel`||i?.kind===`task-update`))return null;if(i?.kind===`self-agent-call`&&e.tasksEnabled){let t=e.tool.behavior;if(t===void 0)throw Error(`Self-agent tool "${e.tool.name}" has no prepared behavior.`);return createBackgroundSubagentHarnessDefinition({behavior:t,description:e.tool.description,inputSchema:e.tool.inputSchema,name:e.tool.name,outputSchema:e.tool.outputSchema})}let s=r.execute;return{behavior:e.tool.behavior,approvalKey:r.approvalKey,description:r.description,execution:r.execution,execute:resolveAuthoredExecute({dispatchTarget:i,execution:r.execution,rawExecute:s,scope:r.name}),inputSchema:r.inputSchema??UNSPECIFIED_INPUT_SCHEMA,name:r.name,approval:r.approval,outputSchema:r.outputSchema,toModelOutput:r.toModelOutput}}function resolveAuthoredExecute(e){let{rawExecute:t,scope:n}=e;return e.dispatchTarget?.kind===`workflow-tool-call`?e.execution===`background`?createWorkflowToolBackgroundExecute({toolName:n,workflowId:e.dispatchTarget.workflowId}):void 0:t===void 0?void 0:createToolExecuteWithAuth({execute:t,scope:n})}export{buildRuntimeIdentity,createExecutionNodeStep,createNodeHarnessTools};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{coalesceDeliveries}from"#harness/messages.js";import{
|
|
1
|
+
import{coalesceDeliveries}from"#harness/messages.js";import{reportDroppedWirePayloadStep}from"#execution/report-dropped-wire-payload-step.js";import{SessionInboxWireError,sessionInboxWire}from"#execution/wire/session-inbox-wire.js";import{routeDeliverToChildren}from"#execution/route-child-delivery.js";async function nextTurnDelivery(e){if(e.awaitAuthorizationCallbacks!==!0)return await awaitNextTurnDelivery(e);e.commandInbox.setAuthorizationWindow(!0);try{return await awaitNextTurnDelivery(e)}finally{e.commandInbox.setAuthorizationWindow(!1)}}async function awaitNextTurnDelivery(e){let t=e.cancelledTaskIds??new Set,n=e.seenTaskDeliveries??new Set;for(;;){let r=await waitForNextSessionAction({bufferedDeliveries:e.bufferedDeliveries,bufferedSessionControls:e.bufferedSessionControls,cancelledTaskIds:t,commandInbox:e.commandInbox,deferDeliveries:e.deferDeliveries,seenTaskDeliveries:n});if(r.kind===`authorization`)return r;if(r.kind!==`delivery`)return{kind:r.kind};let a=r.delivery;if(a===null)return{kind:`closed`};let o=await routeDeliverToChildren({delivery:a,parentWritable:e.driverWritable,serializedContext:e.stateCursor.serializedContext,sessionState:e.stateCursor.sessionState});if(e.stateCursor.adoptState(o),o.kind===`cancel-turn`)return{kind:`cancel-turn`};if(o.remainder!==void 0)return{delivery:o.remainder,kind:`turn`}}}async function waitForNextSessionAction(e){let i=e.bufferedSessionControls.shift();if(i!==void 0)return{kind:i};for(;e.bufferedDeliveries[0]!==void 0&&isCancelledTaskDelivery(e.bufferedDeliveries[0],e.cancelledTaskIds);)e.bufferedDeliveries.shift();if(e.deferDeliveries!==!0&&!e.commandInbox.hasReadyAuthorization()&&e.bufferedDeliveries.length>0)return{delivery:takeBufferedTurnDelivery(e.bufferedDeliveries),kind:`delivery`};for(;;){let{result:i,source:a}=await e.commandInbox.nextWithSource();if(e.commandInbox.consumeNext(),a===`authorization`)return i.done?{closed:!0,kind:`authorization`,payloads:[]}:{closed:!1,kind:`authorization`,payloads:i.value.kind===`deliver`?i.value.payloads:[]};if(i.done)return{delivery:null,kind:`delivery`};if(i.value.kind===`runtime-action-result`)continue;let o;try{o=sessionInboxWire.decode(i.value)}catch(e){if(!(e instanceof SessionInboxWireError))throw e;await reportDroppedWirePayloadStep({detail:e.message,family:`session-inbox`});continue}if(o.kind===`session-timeout`)return{kind:`expired`};if(o.kind===`clear`||o.kind===`compact`||o.kind===`reset`)return{kind:o.kind};if(o.kind===`cancel`){if(o.taskId!==void 0){e.cancelledTaskIds.add(o.taskId);let t=e.bufferedDeliveries.filter(t=>!isCancelledTaskDelivery(t,e.cancelledTaskIds));e.bufferedDeliveries.splice(0,e.bufferedDeliveries.length,...t)}continue}let s=o.taskDeliveryId??o.caller?.taskId;if(!(s!==void 0&&isCancelledTaskDeliveryId(s,e.cancelledTaskIds))){if(s!==void 0){if(e.seenTaskDeliveries.has(s))continue;e.seenTaskDeliveries.add(s)}if(e.deferDeliveries===!0){e.bufferedDeliveries.push(o);continue}return{delivery:o,kind:`delivery`}}}}function isCancelledTaskDelivery(e,t){let n=e.taskDeliveryId??e.caller?.taskId;return n!==void 0&&isCancelledTaskDeliveryId(n,t)}function isCancelledTaskDeliveryId(e,t){return[...t].some(t=>e===t||e.startsWith(`${t}:`))}function takeBufferedTurnDelivery(t){let n=t.shift();if(n===void 0)throw Error(`Cannot take a turn delivery from an empty buffer.`);let r=[n],i=n.caller;for(;t.length>0;){let e=t[0];if(e===void 0||n.taskDeliveryId!==void 0||e.taskDeliveryId!==void 0||i!==void 0&&e.caller!==void 0)break;let a=t.shift();if(a===void 0)throw Error(`Buffered turn delivery disappeared while partitioning.`);r.push(a),i??=a.caller}return coalesceDeliveries(r)}export{nextTurnDelivery};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{getPendingRuntimeActionBatch}from"#harness/runtime-actions.js";import{getPendingAuthorization}from"#harness/authorization.js";import{hasPendingInputBatch}from"#harness/input-requests.js";import{
|
|
1
|
+
import{getPendingRuntimeActionBatch}from"#harness/runtime-actions.js";import{getPendingAuthorization}from"#harness/authorization.js";import{hasPendingInputBatch}from"#harness/input-requests.js";import{getPendingDispatchActionKey}from"#runtime/actions/keys.js";function derivePendingState(t){let n=getPendingRuntimeActionBatch(t.state),r=getPendingAuthorization(t.state),i={authorizationAttemptIds:r?.challenges.flatMap(e=>e.attemptId===void 0?[]:[e.attemptId]),authorizationNames:r?.challenges.map(e=>e.name),hasPendingAuthorization:r!==void 0,hasPendingInputBatch:hasPendingInputBatch(t.state)};return n===void 0?i:{...i,pendingRuntimeActionKeys:n.actions.map(e=>getPendingDispatchActionKey(e)),startsWorkflowToolRuns:n.actions.some(e=>e.target.kind===`workflow-tool-call`)}}export{derivePendingState};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { RuntimeAgentHandleAction } from "#execution/agent-handle-dispatch.js";
|
|
2
|
+
import type { PendingAgentDispatchAction } from "#shared/dispatch-action.js";
|
|
3
|
+
/** Converts a prepared dispatch identity into the existing agent transport contract. */
|
|
4
|
+
export declare function resolvePreparedAgentAction(action: PendingAgentDispatchAction): {
|
|
5
|
+
readonly action: RuntimeAgentHandleAction;
|
|
6
|
+
readonly selfAgent: boolean;
|
|
7
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function resolvePreparedAgentAction(e){let t={callId:e.callId,description:e.description,input:e.input,name:e.toolName,nodeId:e.target.nodeId};switch(e.target.kind){case`remote-agent-call`:return{action:{...t,kind:`remote-agent-call`,remoteAgentName:e.target.remoteAgentName},selfAgent:!1};case`self-agent-call`:return{action:{...t,kind:`subagent-call`,subagentName:e.target.subagentName},selfAgent:!0};case`subagent-call`:return{action:{...t,kind:`subagent-call`,subagentName:e.target.subagentName},selfAgent:!1}}}export{resolvePreparedAgentAction};
|