eve 0.63.0 → 0.64.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +44 -0
- package/dist/src/ai/evaluate.js +1 -1
- package/dist/src/channel/channel-address.d.ts +4 -1
- package/dist/src/channel/channel-address.js +1 -1
- package/dist/src/channel/channel-operations.d.ts +4 -1
- package/dist/src/channel/cross-channel-receive.d.ts +4 -1
- package/dist/src/channel/cross-channel-receive.js +1 -1
- package/dist/src/channel/session.d.ts +3 -1
- package/dist/src/channel/session.js +1 -1
- package/dist/src/channel/types.d.ts +7 -0
- package/dist/src/chunks/{use-eve-agent-C5-yqRuq.js → use-eve-agent-BdKlQF32.js} +8 -8
- package/dist/src/chunks/{use-eve-agent-CVWk5KKy.js → use-eve-agent-IIuxkn6y.js} +8 -8
- package/dist/src/cli/commands/build.js +1 -1
- package/dist/src/cli/commands/init-agent-workspace.d.ts +2 -0
- package/dist/src/cli/commands/init.js +1 -1
- package/dist/src/cli/commands/registry-pnpm-build-policy-flow.d.ts +1 -1
- package/dist/src/cli/commands/registry-pnpm-build-policy-flow.js +1 -1
- package/dist/src/cli/dev/tui/line-editor.d.ts +11 -1
- package/dist/src/cli/dev/tui/line-editor.js +3 -3
- package/dist/src/cli/dev/tui/model-picker.d.ts +2 -0
- package/dist/src/cli/dev/tui/model-picker.js +1 -1
- package/dist/src/cli/dev/tui/runner.d.ts +0 -1
- package/dist/src/cli/dev/tui/runner.js +2 -2
- package/dist/src/cli/dev/tui/setup-panel.js +1 -1
- package/dist/src/cli/dev/tui/setup-selection-input.js +1 -1
- package/dist/src/cli/dev/tui/stream-format.d.ts +6 -0
- package/dist/src/cli/dev/tui/stream-format.js +2 -2
- package/dist/src/cli/dev/tui/terminal-renderer.d.ts +0 -1
- package/dist/src/cli/dev/tui/terminal-renderer.js +12 -12
- package/dist/src/cli/run.js +1 -1
- package/dist/src/client/agent-info-schema.d.ts +8 -14
- package/dist/src/client/agent-info-schema.js +1 -1
- package/dist/src/client/eve-agent-store.js +1 -1
- package/dist/src/client/session.js +1 -1
- package/dist/src/client/types.d.ts +4 -2
- package/dist/src/compiled/.vendor-stamp.json +11 -11
- package/dist/src/compiled/@chat-adapter/slack/_chat-adapter-shared.d.ts +1 -0
- package/dist/src/compiled/@chat-adapter/slack/api.d.ts +3 -2
- package/dist/src/compiled/@chat-adapter/slack/api.js +1 -1
- package/dist/src/compiled/@chat-adapter/slack/blocks.js +1 -1
- package/dist/src/compiled/@chat-adapter/slack/format.js +1 -1
- package/dist/src/compiled/@chat-adapter/slack/index.d.ts +410 -63
- package/dist/src/compiled/@chat-adapter/slack/index.js +47 -25
- package/dist/src/compiled/@chat-adapter/twilio/api.d.ts +5 -1
- package/dist/src/compiled/@chat-adapter/twilio/api.js +1 -1
- package/dist/src/compiled/@chat-adapter/twilio/index.d.ts +37 -3
- package/dist/src/compiled/@chat-adapter/twilio/index.js +5 -1
- package/dist/src/compiled/@chat-adapter/twilio/webhook.d.ts +2 -2
- package/dist/src/compiled/@chat-adapter/twilio/webhook.js +1 -1
- package/dist/src/compiled/@linqapp/chat-sdk-adapter/index.js +6 -6
- package/dist/src/compiled/@photon-ai/chat-adapter-imessage/index.js +50 -50
- package/dist/src/compiled/@vercel/sandbox/index.js +4 -4
- package/dist/src/compiled/@workflow/core/attribute-changes.d.ts +2 -1
- package/dist/src/compiled/@workflow/core/events-consumer.d.ts +6 -3
- package/dist/src/compiled/@workflow/core/index.js +2 -2
- package/dist/src/compiled/@workflow/core/private.d.ts +37 -5
- package/dist/src/compiled/@workflow/core/private.js +1 -1
- package/dist/src/compiled/@workflow/core/runtime/deployment-guard.d.ts +2 -1
- package/dist/src/compiled/@workflow/core/runtime/helpers.js +1 -1
- package/dist/src/compiled/@workflow/core/runtime/invocations.d.ts +35 -0
- package/dist/src/compiled/@workflow/core/runtime/lifecycle-hooks.d.ts +90 -0
- package/dist/src/compiled/@workflow/core/runtime/quickjs-runtime.d.ts +2 -1
- package/dist/src/compiled/@workflow/core/runtime/resume-hook.d.ts +8 -6
- package/dist/src/compiled/@workflow/core/runtime/step-single-flight.d.ts +1 -1
- package/dist/src/compiled/@workflow/core/runtime.js +4 -4
- package/dist/src/compiled/@workflow/core/serialization.d.ts +5 -1
- package/dist/src/compiled/@workflow/core/serialization.js +1 -1
- package/dist/src/compiled/@workflow/core/version.d.ts +1 -1
- package/dist/src/compiled/@workflow/core/workflow/set-attributes.d.ts +4 -0
- package/dist/src/compiled/@workflow/core/workflow.js +1 -1
- package/dist/src/compiled/@workflow/world/analytics.d.ts +1 -1
- package/dist/src/compiled/@workflow/world/attributes-validation.d.ts +5 -0
- package/dist/src/compiled/@workflow/world/events.d.ts +2 -2
- package/dist/src/compiled/@workflow/world/index.d.ts +2 -1
- package/dist/src/compiled/@workflow/world/interfaces.d.ts +12 -1
- package/dist/src/compiled/@workflow/world/invocation.d.ts +19 -0
- package/dist/src/compiled/@workflow/world/queue.d.ts +24 -3
- package/dist/src/compiled/@workflow/world-local/index.js +3 -3
- package/dist/src/compiled/@workflow/world-vercel/index.js +16 -16
- package/dist/src/compiled/_chunks/node/chunk-6QHBXN7B-gl4n6nmi.js +12 -0
- package/dist/src/compiled/_chunks/node/chunk-7WDLOIRP-B_IWkVtZ.js +1 -0
- package/dist/src/compiled/_chunks/node/chunk-KBOOTKHF-DJqFk2r1.js +1 -0
- package/dist/src/compiled/_chunks/node/chunk-TREVQR3E-CLsTAn-O.js +1 -0
- package/dist/src/compiled/_chunks/node/dist-DYDVZ-FS.js +98 -0
- package/dist/src/compiled/_chunks/node/dist-iEFkK9qw.js +6 -0
- package/dist/src/compiled/_chunks/workflow/attribute-changes-DFx4eluc.js +6 -0
- package/dist/src/compiled/_chunks/workflow/{dist-D38gP7YF.js → dist-DjECvUyK.js} +1 -1
- package/dist/src/compiled/_chunks/workflow/{frames-QcJfYHmh.js → frames-D_Q-7A1N.js} +2 -2
- package/dist/src/compiled/_chunks/workflow/{helpers-6kObVbfS.js → helpers-Bw52uyzw.js} +1 -1
- package/dist/src/compiled/_chunks/workflow/{logger-NN5YHpYy.js → logger-DFNCa8Nl.js} +1 -1
- package/dist/src/compiled/_chunks/workflow/resume-hook-BhA_nDEV.js +1 -0
- package/dist/src/compiled/_chunks/workflow/{run-DJevv8zz.js → run-BT6SQv5f.js} +1 -1
- package/dist/src/compiled/_chunks/workflow/{serialization-C5KgPESk.js → serialization-Cl0SYU0I.js} +3 -3
- package/dist/src/compiled/_chunks/workflow/sleep-DB4AH9-A.js +1 -0
- package/dist/src/compiled/_chunks/workflow/{wait-until-BMY_tOr-.js → wait-until-Dzhr6tzf.js} +1 -1
- package/dist/src/compiled/_chunks/workflow/{ws-transport-DSDcKH08.js → ws-transport-BpTMh40s.js} +1 -1
- package/dist/src/compiled/chat/index.d.ts +1 -725
- package/dist/src/compiled/chat/index.js +1 -1
- package/dist/src/compiler/artifacts.d.ts +1 -0
- package/dist/src/compiler/artifacts.js +1 -1
- package/dist/src/compiler/extension-compatibility.d.ts +23 -15
- package/dist/src/compiler/extension-compatibility.js +1 -1
- package/dist/src/compiler/manifest.d.ts +14 -18
- package/dist/src/compiler/manifest.js +1 -1
- package/dist/src/compiler/normalize-helpers.js +1 -1
- package/dist/src/compiler/normalize-sandbox.d.ts +2 -7
- package/dist/src/compiler/normalize-sandbox.js +1 -1
- package/dist/src/compiler/workspace-resources.js +1 -1
- package/dist/src/context/build-callback-context.d.ts +2 -0
- package/dist/src/context/build-callback-context.js +1 -1
- package/dist/src/context/container.d.ts +1 -1
- package/dist/src/context/container.js +1 -1
- package/dist/src/context/key-names.d.ts +1 -0
- package/dist/src/context/key-names.js +1 -1
- package/dist/src/context/keys.d.ts +7 -2
- package/dist/src/context/keys.js +1 -1
- package/dist/src/context/providers/sandbox.js +1 -1
- package/dist/src/context/providers/session.d.ts +19 -2
- package/dist/src/context/session-context.d.ts +1 -1
- package/dist/src/discover/sandbox.js +1 -1
- package/dist/src/evals/cli/eval.js +1 -1
- package/dist/src/evals/context.d.ts +1 -0
- package/dist/src/evals/context.js +1 -1
- package/dist/src/evals/define-eval-config.d.ts +7 -7
- package/dist/src/evals/define-eval-config.js +1 -1
- package/dist/src/evals/define-eval.d.ts +5 -2
- package/dist/src/evals/index.d.ts +1 -1
- package/dist/src/evals/runner/execute-eval.d.ts +2 -0
- package/dist/src/evals/runner/execute-eval.js +1 -1
- package/dist/src/evals/runner/execute-task.d.ts +2 -0
- package/dist/src/evals/runner/execute-task.js +1 -1
- package/dist/src/evals/runner/run-evals.d.ts +2 -0
- package/dist/src/evals/runner/run-evals.js +1 -1
- package/dist/src/evals/target.js +1 -1
- package/dist/src/evals/types.d.ts +22 -6
- package/dist/src/eve-channel/create-request.d.ts +2 -1
- package/dist/src/eve-channel/delivery-policy-request.d.ts +4 -0
- package/dist/src/eve-channel/delivery-policy-request.js +1 -0
- package/dist/src/eve-channel/index.js +1 -1
- package/dist/src/eve-channel/request.d.ts +2 -1
- package/dist/src/eve-channel/request.js +1 -1
- package/dist/src/execution/coordination-dispatch-shared.d.ts +2 -1
- package/dist/src/execution/coordination-dispatch-shared.js +1 -1
- package/dist/src/execution/dynamic-workflow/tool.js +1 -1
- package/dist/src/execution/runtime-context.js +1 -1
- package/dist/src/execution/sandbox/active-handles.d.ts +7 -8
- package/dist/src/execution/sandbox/active-handles.js +1 -1
- package/dist/src/execution/sandbox/bash.js +1 -1
- package/dist/src/execution/sandbox/bindings/docker-cli.d.ts +1 -1
- package/dist/src/execution/sandbox/bindings/docker-cli.js +1 -1
- package/dist/src/execution/sandbox/bindings/docker-container.d.ts +2 -2
- package/dist/src/execution/sandbox/bindings/docker-container.js +1 -1
- package/dist/src/execution/sandbox/bindings/docker-network.d.ts +1 -1
- package/dist/src/execution/sandbox/bindings/docker-network.js +1 -1
- package/dist/src/execution/sandbox/bindings/docker-options.d.ts +4 -5
- package/dist/src/execution/sandbox/bindings/docker-options.js +1 -1
- package/dist/src/execution/sandbox/bindings/docker-session.d.ts +0 -1
- package/dist/src/execution/sandbox/bindings/docker-session.js +2 -2
- package/dist/src/execution/sandbox/bindings/docker.d.ts +16 -18
- package/dist/src/execution/sandbox/bindings/docker.js +1 -1
- package/dist/src/execution/sandbox/bindings/immutable-resources.d.ts +21 -0
- package/dist/src/execution/sandbox/bindings/immutable-resources.js +2 -0
- package/dist/src/execution/sandbox/bindings/just-bash-runtime.d.ts +9 -5
- package/dist/src/execution/sandbox/bindings/just-bash-runtime.js +1 -1
- package/dist/src/execution/sandbox/bindings/just-bash.d.ts +13 -26
- package/dist/src/execution/sandbox/bindings/just-bash.js +1 -1
- package/dist/src/execution/sandbox/bindings/{local-backend-utils.d.ts → local-provider-utils.d.ts} +7 -5
- package/dist/src/execution/sandbox/bindings/local-provider-utils.js +1 -0
- package/dist/src/execution/sandbox/bindings/local.d.ts +3 -3
- package/dist/src/execution/sandbox/bindings/local.js +1 -1
- package/dist/src/execution/sandbox/bindings/microsandbox-create.js +1 -1
- package/dist/src/execution/sandbox/bindings/microsandbox-lifecycle.d.ts +30 -8
- package/dist/src/execution/sandbox/bindings/microsandbox-lifecycle.js +1 -1
- package/dist/src/execution/sandbox/bindings/microsandbox-metadata.d.ts +9 -1
- package/dist/src/execution/sandbox/bindings/microsandbox-metadata.js +1 -1
- package/dist/src/execution/sandbox/bindings/microsandbox-network.js +1 -1
- package/dist/src/execution/sandbox/bindings/microsandbox-options.d.ts +10 -4
- package/dist/src/execution/sandbox/bindings/microsandbox-options.js +1 -1
- package/dist/src/execution/sandbox/bindings/microsandbox-platform.js +1 -1
- package/dist/src/execution/sandbox/bindings/microsandbox-runtime.d.ts +7 -5
- package/dist/src/execution/sandbox/bindings/microsandbox-runtime.js +1 -1
- package/dist/src/execution/sandbox/bindings/microsandbox-templates.js +1 -1
- package/dist/src/execution/sandbox/bindings/microsandbox.d.ts +11 -21
- package/dist/src/execution/sandbox/bindings/microsandbox.js +1 -1
- package/dist/src/execution/sandbox/bindings/vercel-base-runtime.js +2 -2
- package/dist/src/execution/sandbox/bindings/vercel-credentials.js +1 -1
- package/dist/src/execution/sandbox/bindings/vercel-errors.js +1 -1
- package/dist/src/execution/sandbox/bindings/vercel-lifecycle.d.ts +2 -2
- package/dist/src/execution/sandbox/bindings/vercel-lifecycle.js +1 -1
- package/dist/src/execution/sandbox/bindings/vercel-lookup.js +1 -1
- package/dist/src/execution/sandbox/bindings/vercel-options.d.ts +1 -2
- package/dist/src/execution/sandbox/bindings/vercel-options.js +1 -1
- package/dist/src/execution/sandbox/bindings/vercel.d.ts +20 -12
- package/dist/src/execution/sandbox/bindings/vercel.js +2 -2
- package/dist/src/execution/sandbox/development-cleanup.js +1 -1
- package/dist/src/execution/sandbox/development-lazy-prewarm.d.ts +7 -0
- package/dist/src/execution/sandbox/development-lazy-prewarm.js +1 -0
- package/dist/src/execution/sandbox/development-run.d.ts +2 -3
- package/dist/src/execution/sandbox/dockerfile.d.ts +25 -0
- package/dist/src/execution/sandbox/dockerfile.js +1 -0
- package/dist/src/execution/sandbox/ensure.d.ts +0 -17
- package/dist/src/execution/sandbox/ensure.js +1 -1
- package/dist/src/execution/sandbox/logging-session.js +1 -1
- package/dist/src/execution/sandbox/prewarm.d.ts +23 -27
- package/dist/src/execution/sandbox/prewarm.js +1 -2
- package/dist/src/execution/sandbox/provider-files.d.ts +2 -0
- package/dist/src/execution/sandbox/provider-files.js +1 -0
- package/dist/src/execution/sandbox/provider-host-development.d.ts +2 -0
- package/dist/src/execution/sandbox/provider-host-development.js +1 -0
- package/dist/src/execution/sandbox/provider-host.d.ts +2 -0
- package/dist/src/execution/sandbox/provider-host.js +1 -0
- package/dist/src/execution/sandbox/provider-identity.d.ts +1 -0
- package/dist/src/execution/sandbox/provider-identity.js +1 -0
- package/dist/src/execution/sandbox/ripgrep-probe.d.ts +0 -7
- package/dist/src/execution/sandbox/ripgrep-probe.js +1 -1
- package/dist/src/execution/sandbox/session.d.ts +8 -8
- package/dist/src/execution/sandbox/session.js +1 -1
- package/dist/src/execution/session/handoff-steps.js +1 -1
- package/dist/src/execution/session/handoff.d.ts +1 -1
- package/dist/src/execution/session/handoff.js +1 -1
- package/dist/src/execution/session/input-queue.d.ts +2 -1
- package/dist/src/execution/session/input-queue.js +1 -1
- package/dist/src/execution/session/next-input.js +1 -1
- package/dist/src/execution/session/program.js +1 -1
- package/dist/src/execution/session/turn-step.js +1 -1
- package/dist/src/execution/session-inbox/protocol.js +1 -1
- package/dist/src/execution/tasks/parent/tool-execution.js +1 -1
- package/dist/src/execution/tools/agent-router-workflow.js +1 -1
- package/dist/src/execution/tools/sleep-workflow.js +1 -1
- package/dist/src/execution/tools/subagent/emit-event-step.js +1 -1
- package/dist/src/execution/tools/subagent/invoke-preparation.js +1 -1
- package/dist/src/execution/tools/subagent/start.d.ts +1 -0
- package/dist/src/framework/sources/modules/sandbox.d.ts +2 -1
- package/dist/src/framework/sources/modules/sandbox.js +1 -1
- package/dist/src/harness/approval-delivery-coordinator.js +1 -1
- package/dist/src/harness/hitl/approval-input-requests.d.ts +1 -1
- package/dist/src/harness/hitl/approval-input-requests.js +1 -1
- package/dist/src/harness/input-requests.d.ts +6 -0
- package/dist/src/harness/input-requests.js +1 -1
- package/dist/src/harness/messages.d.ts +2 -1
- package/dist/src/harness/messages.js +1 -1
- package/dist/src/harness/pending-input-batches.d.ts +1 -0
- package/dist/src/harness/pending-input-batches.js +1 -1
- package/dist/src/harness/tool-loop.js +2 -2
- package/dist/src/instrumentation/ai-sdk-warnings.d.ts +6 -0
- package/dist/src/instrumentation/ai-sdk-warnings.js +1 -0
- package/dist/src/instrumentation/runtime.d.ts +1 -0
- package/dist/src/instrumentation/runtime.js +1 -1
- package/dist/src/internal/application/compiled-artifacts.d.ts +2 -0
- package/dist/src/internal/application/compiled-artifacts.js +2 -2
- package/dist/src/internal/application/optional-package-install.d.ts +3 -0
- package/dist/src/internal/application/optional-package-install.js +2 -2
- package/dist/src/internal/application/output-publication-lock.d.ts +6 -0
- package/dist/src/internal/application/output-publication-lock.js +1 -1
- package/dist/src/internal/application/output-publication.js +1 -1
- package/dist/src/internal/application/package.js +1 -1
- package/dist/src/internal/authored-module-loader.d.ts +1 -0
- package/dist/src/internal/authored-module-loader.js +1 -1
- package/dist/src/internal/authored-runtime-modules.d.ts +1 -0
- package/dist/src/internal/nitro/development-generation.js +1 -1
- package/dist/src/internal/nitro/host/artifacts-config.d.ts +6 -1
- package/dist/src/internal/nitro/host/artifacts-config.js +1 -1
- package/dist/src/internal/nitro/host/build-application.js +1 -1
- package/dist/src/internal/nitro/host/compiled-sandbox-provider-prune-plugin.d.ts +16 -0
- package/dist/src/internal/nitro/host/compiled-sandbox-provider-prune-plugin.js +5 -0
- package/dist/src/internal/nitro/host/configure-nitro-routes.js +2 -2
- package/dist/src/internal/nitro/host/create-application-nitro.d.ts +3 -3
- package/dist/src/internal/nitro/host/create-application-nitro.js +1 -1
- package/dist/src/internal/nitro/host/dev-authored-rebuild-coordinator.js +1 -1
- package/dist/src/internal/nitro/host/dev-host-fingerprint.js +1 -1
- package/dist/src/internal/nitro/host/development-runtime-prune-plugin.d.ts +9 -0
- package/dist/src/internal/nitro/host/development-runtime-prune-plugin.js +2 -0
- package/dist/src/internal/nitro/host/prepare-application-host.d.ts +1 -0
- package/dist/src/internal/nitro/host/prepare-application-host.js +1 -1
- package/dist/src/internal/nitro/host/sandbox-shutdown-plugin.js +1 -1
- package/dist/src/internal/nitro/host/start-development-server.js +2 -2
- package/dist/src/internal/nitro/host/start-production-server.js +2 -2
- package/dist/src/internal/nitro/host/types.d.ts +1 -1
- package/dist/src/internal/nitro/routes/agent-info/build-agent-info-response.js +1 -1
- package/dist/src/internal/nitro/routes/runtime-artifacts.d.ts +1 -0
- package/dist/src/internal/nitro/routes/runtime-artifacts.js +1 -1
- package/dist/src/internal/runtime-registry.d.ts +2 -2
- package/dist/src/internal/vercel/build-agent-workspace.d.ts +3 -1
- package/dist/src/internal/vercel/build-agent-workspace.js +1 -1
- package/dist/src/public/channels/chat-sdk/chatSdkChannel.d.ts +4 -5
- package/dist/src/public/channels/chat-sdk/chatSdkChannel.js +2 -2
- package/dist/src/public/channels/github/checkout.js +1 -1
- package/dist/src/public/channels/index.d.ts +1 -1
- package/dist/src/public/channels/slack/slackChannel.d.ts +3 -1
- package/dist/src/public/channels/slack/slackChannel.js +1 -1
- package/dist/src/public/definitions/channel.d.ts +1 -1
- package/dist/src/public/definitions/sandbox.d.ts +5 -43
- package/dist/src/public/definitions/sandbox.js +1 -1
- package/dist/src/public/local-dev.d.ts +4 -5
- package/dist/src/public/next/vercel-output-config.js +1 -1
- package/dist/src/public/sandbox/docker-sandbox.d.ts +16 -40
- package/dist/src/public/sandbox/docker.d.ts +2 -2
- package/dist/src/public/sandbox/docker.js +1 -1
- package/dist/src/public/sandbox/index.d.ts +4 -9
- package/dist/src/public/sandbox/index.js +1 -1
- package/dist/src/public/sandbox/just-bash-sandbox.d.ts +11 -6
- package/dist/src/public/sandbox/just-bash.d.ts +2 -2
- package/dist/src/public/sandbox/just-bash.js +1 -1
- package/dist/src/public/sandbox/microsandbox-sandbox.d.ts +11 -17
- package/dist/src/public/sandbox/microsandbox.d.ts +2 -2
- package/dist/src/public/sandbox/microsandbox.js +1 -1
- package/dist/src/public/sandbox/provider.d.ts +1 -0
- package/dist/src/public/sandbox/provider.js +1 -0
- package/dist/src/public/sandbox/vercel-sandbox.d.ts +10 -41
- package/dist/src/public/sandbox/vercel.d.ts +2 -2
- package/dist/src/public/sandbox/vercel.js +1 -1
- package/dist/src/runtime/cache-key.js +1 -1
- package/dist/src/runtime/compiled-artifacts-source.d.ts +6 -1
- package/dist/src/runtime/compiled-artifacts-source.js +1 -1
- package/dist/src/runtime/loaders/artifact-paths.d.ts +1 -0
- package/dist/src/runtime/loaders/artifact-paths.js +1 -1
- package/dist/src/runtime/loaders/bundled-artifacts.d.ts +3 -0
- package/dist/src/runtime/loaders/bundled-artifacts.js +1 -1
- package/dist/src/runtime/loaders/compile-metadata.js +1 -1
- package/dist/src/runtime/loaders/manifest.js +1 -1
- package/dist/src/runtime/loaders/module-map.js +1 -1
- package/dist/src/runtime/local-dev-capability.d.ts +14 -12
- package/dist/src/runtime/local-dev-capability.js +1 -1
- package/dist/src/runtime/resolve-agent-graph.js +1 -1
- package/dist/src/runtime/resolve-sandbox.d.ts +1 -10
- package/dist/src/runtime/resolve-sandbox.js +1 -1
- package/dist/src/runtime/sandbox/prepared-artifacts.d.ts +13 -0
- package/dist/src/runtime/sandbox/prepared-artifacts.js +1 -0
- package/dist/src/runtime/sandbox/registry.d.ts +2 -9
- package/dist/src/runtime/sandbox/registry.js +1 -1
- package/dist/src/runtime/sessions/runtime-session.js +1 -1
- package/dist/src/runtime/types.d.ts +13 -26
- package/dist/src/runtime/workspace/types.d.ts +1 -1
- package/dist/src/sandbox/providers/default.d.ts +27 -0
- package/dist/src/sandbox/providers/default.js +1 -0
- package/dist/src/sandbox/providers/docker.d.ts +11 -0
- package/dist/src/sandbox/providers/docker.js +1 -0
- package/dist/src/sandbox/providers/just-bash.d.ts +4 -0
- package/dist/src/sandbox/providers/just-bash.js +1 -0
- package/dist/src/sandbox/providers/microsandbox.d.ts +12 -0
- package/dist/src/sandbox/providers/microsandbox.js +1 -0
- package/dist/src/sandbox/providers/vercel.d.ts +12 -0
- package/dist/src/sandbox/providers/vercel.js +1 -0
- package/dist/src/sandbox/providers.d.ts +5 -0
- package/dist/src/sandbox/providers.js +1 -0
- package/dist/src/sandbox/state.d.ts +6 -25
- package/dist/src/self-modification/extension/subagents/agent/agent.d.ts +1 -1
- package/dist/src/self-modification/extension/subagents/agent/agent.js +1 -1
- package/dist/src/self-modification/extension/subagents/agent/sandbox.d.ts +2 -25
- package/dist/src/self-modification/extension/subagents/agent/sandbox.js +1 -1
- package/dist/src/self-modification/extension/subagents/agent/tools/publish.js +1 -1
- package/dist/src/self-modification/extension/subagents/agent/tools/registry_add.js +1 -1
- package/dist/src/self-modification/filesystem.d.ts +3 -1
- package/dist/src/self-modification/filesystem.js +1 -1
- package/dist/src/self-modification/git-workspace.d.ts +1 -1
- package/dist/src/self-modification/git.d.ts +1 -1
- package/dist/src/self-modification/sandbox.d.ts +14 -9
- package/dist/src/self-modification/sandbox.js +1 -1
- package/dist/src/setup/boxes/select-model.js +1 -1
- package/dist/src/setup/cli/select-state.d.ts +4 -2
- package/dist/src/setup/cli/select-state.js +1 -1
- package/dist/src/setup/flows/model-login.js +1 -1
- package/dist/src/{cli/commands/registry-pnpm-build-policy.d.ts → setup/primitives/pm/pnpm-build-policy.d.ts} +4 -0
- package/dist/src/setup/primitives/pm/pnpm-build-policy.js +8 -0
- package/dist/src/setup/primitives/pm/pnpm.js +3 -2
- package/dist/src/setup/scaffold/create/project.js +1 -1
- package/dist/src/shared/default-agent-model.d.ts +1 -1
- package/dist/src/shared/default-agent-model.js +1 -1
- package/dist/src/shared/sandbox-environment.d.ts +45 -0
- package/dist/src/shared/sandbox-environment.js +1 -0
- package/dist/src/shared/sandbox-network-policy.d.ts +8 -3
- package/dist/src/shared/sandbox-network-policy.js +1 -1
- package/dist/src/shared/sandbox-prepared-artifacts.d.ts +16 -0
- package/dist/src/shared/sandbox-prepared-artifacts.js +1 -0
- package/dist/src/shared/sandbox-provider.d.ts +112 -0
- package/dist/src/shared/sandbox-provider.js +1 -0
- package/dist/src/shared/sandbox-session.d.ts +18 -41
- package/dist/src/shared/sandbox-template-error.d.ts +9 -0
- package/dist/src/shared/sandbox-template-error.js +1 -0
- package/dist/src/subagents/tool.d.ts +1 -1
- package/dist/src/subagents/tool.js +1 -1
- package/dist/src/svelte/index.js +1 -1
- package/dist/src/svelte/use-eve-agent.js +1 -1
- package/dist/src/tasks/delivery-context.d.ts +6 -4
- package/dist/src/tasks/delivery-context.js +1 -1
- package/dist/src/tasks/delivery-policy.d.ts +2 -0
- package/dist/src/tasks/delivery-policy.js +1 -1
- package/dist/src/tools/framework/agent-contract.js +1 -1
- package/dist/src/vue/index.js +1 -1
- package/dist/src/vue/use-eve-agent.js +1 -1
- package/docs/README.md +40 -45
- package/docs/agent-config.md +2 -2
- package/docs/channels/eve.mdx +1 -1
- package/docs/channels/overview.mdx +48 -0
- package/docs/channels/slack.mdx +1 -1
- package/docs/concepts/execution-model-and-durability.mdx +1 -1
- package/docs/concepts/sessions-runs-and-streaming.md +3 -3
- package/docs/dynamic-configuration/meta.json +5 -0
- package/docs/evals/overview.mdx +43 -0
- package/docs/getting-started.mdx +1 -1
- package/docs/guides/client/overview.mdx +1 -1
- package/docs/guides/deployment/overview.md +1 -1
- package/docs/guides/deployment/self-hosting.md +5 -5
- package/docs/guides/deployment/vercel.mdx +10 -18
- package/docs/guides/dev-tui.md +1 -1
- package/docs/guides/hooks.md +4 -0
- package/docs/guides/instrumentation/instrumentation.mdx +1 -1
- package/docs/guides/instrumentation/migration.md +1 -6
- package/docs/guides/instrumentation/otel.mdx +15 -47
- package/docs/memory/meta.json +1 -1
- package/docs/memory/overview.mdx +4 -0
- package/docs/meta.json +13 -16
- package/docs/patterns/meta.json +2 -2
- package/docs/protocols/acp.md +1 -1
- package/docs/protocols/ucp.mdx +1 -1
- package/docs/reference/cli.md +10 -9
- package/docs/reference/meta.json +4 -1
- package/docs/reference/typescript-api.md +2 -25
- package/docs/sandbox/default.mdx +17 -0
- package/docs/sandbox/docker.mdx +29 -0
- package/docs/sandbox/index.mdx +218 -0
- package/docs/sandbox/just-bash.mdx +24 -0
- package/docs/sandbox/meta.json +5 -0
- package/docs/sandbox/microsandbox.mdx +31 -0
- package/docs/sandbox/vercel.mdx +106 -0
- package/docs/schedules.mdx +35 -1
- package/docs/subagents/index.mdx +31 -13
- package/docs/subagents/meta.json +1 -1
- package/docs/tools/overview.mdx +14 -6
- package/docs/tutorial/run-analysis.mdx +6 -5
- package/package.json +20 -11
- package/dist/src/cli/commands/registry-pnpm-build-policy.js +0 -6
- package/dist/src/compiled/_chunks/node/chunk-5OX2R7AJ-CxVV-owP.js +0 -1
- package/dist/src/compiled/_chunks/node/chunk-AYN7QRWH-B__hKQV7.js +0 -1
- package/dist/src/compiled/_chunks/node/chunk-QZV7YRVM-Dzw4WEBv.js +0 -1
- package/dist/src/compiled/_chunks/node/dist-CweJdVFE.js +0 -6
- package/dist/src/compiled/_chunks/node/dist-Da54NuK8.js +0 -96
- package/dist/src/compiled/_chunks/workflow/attribute-changes-A6HfMNG3.js +0 -6
- package/dist/src/compiled/_chunks/workflow/resume-hook-CAqlhwic.js +0 -1
- package/dist/src/compiled/_chunks/workflow/sleep-CbUwdv6O.js +0 -1
- package/dist/src/compiled/chat/_mdast.d.ts +0 -24
- package/dist/src/compiled/chat/_workflow-serde.d.ts +0 -3
- package/dist/src/compiled/chat/jsx-runtime-_JEEAotp.d.ts +0 -907
- package/dist/src/execution/sandbox/bindings/local-backend-utils.js +0 -1
- package/dist/src/execution/sandbox/development-prewarm.d.ts +0 -15
- package/dist/src/execution/sandbox/development-prewarm.js +0 -1
- package/dist/src/execution/sandbox/lazy-backend.d.ts +0 -15
- package/dist/src/execution/sandbox/lazy-backend.js +0 -1
- package/dist/src/execution/sandbox/template-prewarm-lock.d.ts +0 -8
- package/dist/src/execution/sandbox/template-prewarm-lock.js +0 -1
- package/dist/src/internal/authored-definition/sandbox.d.ts +0 -17
- package/dist/src/internal/authored-definition/sandbox.js +0 -1
- package/dist/src/internal/nitro/host/compiled-sandbox-backend-prune-plugin.d.ts +0 -16
- package/dist/src/internal/nitro/host/compiled-sandbox-backend-prune-plugin.js +0 -2
- package/dist/src/public/definitions/sandbox-backend.d.ts +0 -17
- package/dist/src/public/definitions/sandbox-backend.js +0 -1
- package/dist/src/public/sandbox/backends/default.d.ts +0 -1
- package/dist/src/public/sandbox/backends/default.js +0 -1
- package/dist/src/public/sandbox/backends/docker.d.ts +0 -1
- package/dist/src/public/sandbox/backends/docker.js +0 -1
- package/dist/src/public/sandbox/backends/just-bash.d.ts +0 -1
- package/dist/src/public/sandbox/backends/just-bash.js +0 -1
- package/dist/src/public/sandbox/backends/microsandbox.d.ts +0 -1
- package/dist/src/public/sandbox/backends/microsandbox.js +0 -1
- package/dist/src/public/sandbox/backends/vercel.d.ts +0 -1
- package/dist/src/public/sandbox/backends/vercel.js +0 -1
- package/dist/src/runtime/sandbox/keys.d.ts +0 -42
- package/dist/src/runtime/sandbox/keys.js +0 -1
- package/dist/src/runtime/sandbox/template-plan.d.ts +0 -24
- package/dist/src/runtime/sandbox/template-plan.js +0 -1
- package/dist/src/sandbox/backends/default.d.ts +0 -42
- package/dist/src/sandbox/backends/default.js +0 -1
- package/dist/src/sandbox/backends/docker.d.ts +0 -14
- package/dist/src/sandbox/backends/docker.js +0 -1
- package/dist/src/sandbox/backends/just-bash.d.ts +0 -17
- package/dist/src/sandbox/backends/just-bash.js +0 -1
- package/dist/src/sandbox/backends/microsandbox.d.ts +0 -17
- package/dist/src/sandbox/backends/microsandbox.js +0 -1
- package/dist/src/sandbox/backends/vercel.d.ts +0 -30
- package/dist/src/sandbox/backends/vercel.js +0 -1
- package/dist/src/shared/sandbox-backend.d.ts +0 -176
- package/dist/src/shared/sandbox-backend.js +0 -1
- package/dist/src/shared/sandbox-definition.d.ts +0 -112
- package/dist/src/shared/sandbox-definition.js +0 -1
- package/docs/sandbox.mdx +0 -342
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,49 @@
|
|
|
1
1
|
# eve
|
|
2
2
|
|
|
3
|
+
## 0.64.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- b49a598: Restore the active eve context while session-scoped dynamic tools are recovered, so resolvers that read durable state keep their callbacks after a resumed session.
|
|
8
|
+
- 867a6ad: Prepare pnpm's optional-dependency policy before automatically installing just-bash during development, avoiding startup failures on unapproved native codec builds. Existing package-specific build decisions are preserved.
|
|
9
|
+
- 867a6ad: Pin automatic microsandbox installs and manual installation guidance to the supported version so a new development server does not install an incompatible release.
|
|
10
|
+
- 3e2bf95: Fix background workflow tools in workspace agents to use app-relative workflow IDs so dispatch matches the registered workflow.
|
|
11
|
+
- 070525e: Defer sandbox environment preparation during development until the first sandbox access, so startup and rebuilds no longer wait for optional engine installation. First access prepares all environments in that compiled generation, with heartbeat-backed coordination that recovers after a development worker crash; production builds still prepare eagerly.
|
|
12
|
+
- 867a6ad: Serialize automatic sandbox dependency installations that share a package-manager root, preventing concurrent providers or workspace apps from racing on dependency files. Waiting installations recheck their own package and can proceed after another installation fails.
|
|
13
|
+
- 1a6cb88: Write fallback Vercel service configuration under the Next.js app directory in linked monorepos. This keeps generated eve services discoverable when no active build output directory is found, preventing deployments that omit the agent endpoints.
|
|
14
|
+
|
|
15
|
+
## 0.64.0
|
|
16
|
+
|
|
17
|
+
### Minor Changes
|
|
18
|
+
|
|
19
|
+
- 3be0b74: Add `taskDeliveryPolicy: "auto" | "cohort"` to message sends. New channel sessions default to `"auto"`, allowing independently useful reports or silence until related work settles; schedules default to `"cohort"`, and explicit sends can select or update the session's policy.
|
|
20
|
+
- 49971b7: Replace object-form sandbox definitions with exported provider environments whose `open()` method starts and returns the current eve session's persistent live sandbox. After successful selector initialization, durable boundaries resume directly from immutable provider state without rerunning `defineSandbox()`; provider-specific session capabilities remain precisely typed.
|
|
21
|
+
|
|
22
|
+
### Patch Changes
|
|
23
|
+
|
|
24
|
+
- fa92e5e: Route AI SDK provider warnings to eve's diagnostics instead of presenting successful compatibility fallbacks as stderr errors. Existing custom warning handlers and `AI_SDK_LOG_WARNINGS=false` remain respected.
|
|
25
|
+
- 3be0b74: Align the bundled Chat SDK and adapters with version 4.41.0. Chat SDK channel types now reference the installed `chat` package so external adapters and handlers share the same type identity; `chat` is an optional peer for this integration.
|
|
26
|
+
- 3e5ff9f: Fix a Vercel Workflow race where a rejected inline-step preclaim could skip the owner's body, leaving the durable step to fail after exhausting its retry limit without running user code.
|
|
27
|
+
- aceb298: Local self-modification now depends on `eve dev` host facilities instead of request provenance.
|
|
28
|
+
- f2b8792: Pre-approve esbuild install scripts in newly initialized pnpm projects so registry additions that install the Vercel CLI no longer require a separate `pnpm approve-builds` step.
|
|
29
|
+
- b174a62: Remove the redundant Enter badge from searchable setup pickers; the selected-row cursor already indicates the active choice.
|
|
30
|
+
- 9f17453: Clarify that `eve build --skip-sandbox-prewarm` skips sandbox preparation for local and hosted builds. Workspace fixture typechecks now use this mode instead of provisioning sandbox infrastructure.
|
|
31
|
+
- d98edb2: Add `eve init --non-interactive` to scaffold and install an agent without opening the development TUI.
|
|
32
|
+
|
|
33
|
+
## 0.63.1
|
|
34
|
+
|
|
35
|
+
### Patch Changes
|
|
36
|
+
|
|
37
|
+
- de29d28: In the eve TUI, press `Ctrl+Y` to paste text you removed with `Ctrl+K`, `Ctrl+U`, or `Ctrl+W`. Press `Alt+Y` immediately afterward to cycle through earlier removals.
|
|
38
|
+
- 7cfaa6f: Option+Delete on macOS and Alt+Backspace now delete to the previous word boundary in editable eve TUI fields.
|
|
39
|
+
- e110eb2: Allow an active turn to finish its tool-result continuation when an earlier turn's HITL request remains unanswered, while preserving current-turn HITL parking. Partial approval responses remain saved until their batch can resolve; they do not cause an extra model call after an unrelated answer.
|
|
40
|
+
- 56e3510: Keep sessions on their original stream across consecutive deployment handoffs. Intermediate handoffs no longer end the session before the final owner completes it, preventing later handoffs from failing with a fatal Workflow SDK `Hook not found` error.
|
|
41
|
+
- b333e7d: Fix saved-session resume in browsers without `Symbol.dispose`.
|
|
42
|
+
- 3d96b69: Use `spacexai/grok-4.7` as the default model for new projects, agents without an `agent.ts`, and Gateway setup.
|
|
43
|
+
- d88aede: Add eval setup and teardown callbacks with typed context shared by reference across evals and cleanup. Setup returns the context directly before the local agent starts, and teardown runs after shutdown even when setup or the run fails.
|
|
44
|
+
- dea2ced: Upgrade the Workflow runtime and quiet expected inline-step contention while preserving protection against duplicate execution.
|
|
45
|
+
- ffb1276: Fix background subagent calls failing the parent session when typed or wildcard hooks subscribe to subagent events. These hooks now receive the parent session context after workflow step boundaries.
|
|
46
|
+
|
|
3
47
|
## 0.63.0
|
|
4
48
|
|
|
5
49
|
### Minor Changes
|
package/dist/src/ai/evaluate.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{experimental_evaluate}from"ai";import{localGatewayEvaluationModel}from"#internal/model-auth/transport.js";const DEFAULT_EVALUATION_MODEL=`typesafe-ai/jev`;function evaluate({model:e=DEFAULT_EVALUATION_MODEL,...t}){return experimental_evaluate({...t,model:typeof e==`string`&&Reflect.get(globalThis,`AI_SDK_DEFAULT_PROVIDER`)==null?localGatewayEvaluationModel(e)??e:e})}export{DEFAULT_EVALUATION_MODEL,evaluate};
|
|
1
|
+
import{experimental_evaluate}from"ai";import{ensureAiSdkWarningLogger}from"#instrumentation/ai-sdk-warnings.js";import{localGatewayEvaluationModel}from"#internal/model-auth/transport.js";const DEFAULT_EVALUATION_MODEL=`typesafe-ai/jev`;function evaluate({model:e=DEFAULT_EVALUATION_MODEL,...t}){return ensureAiSdkWarningLogger(),experimental_evaluate({...t,model:typeof e==`string`&&Reflect.get(globalThis,`AI_SDK_DEFAULT_PROVIDER`)==null?localGatewayEvaluationModel(e)??e:e})}export{DEFAULT_EVALUATION_MODEL,evaluate};
|
|
@@ -3,7 +3,7 @@ import type { ChannelAdapter } from "#channel/adapter.js";
|
|
|
3
3
|
import { type ChannelDeliverySource } from "#channel/delivery-metadata.js";
|
|
4
4
|
import type { SendPayload } from "#channel/routes.js";
|
|
5
5
|
import { type Session } from "#channel/session.js";
|
|
6
|
-
import type { CancelTurnResult, ClearSessionResult, CompactSessionResult, ResetSessionResult, Runtime, SessionAuthContext, SessionCallback, TurnPolicy } from "#channel/types.js";
|
|
6
|
+
import type { CancelTurnResult, ClearSessionResult, CompactSessionResult, ResetSessionResult, Runtime, SessionAuthContext, SessionCallback, TurnPolicy, TaskDeliveryPolicy } from "#channel/types.js";
|
|
7
7
|
import type { RunMode } from "#shared/run-mode.js";
|
|
8
8
|
interface BaseChannelAddressDeliveryOptions {
|
|
9
9
|
readonly auth: SessionAuthContext | null;
|
|
@@ -12,6 +12,7 @@ interface BaseChannelAddressDeliveryOptions {
|
|
|
12
12
|
readonly mode?: RunMode;
|
|
13
13
|
readonly title?: string;
|
|
14
14
|
readonly turnPolicy?: TurnPolicy;
|
|
15
|
+
readonly taskDeliveryPolicy?: TaskDeliveryPolicy;
|
|
15
16
|
}
|
|
16
17
|
/** Delivery options for a channel address whose continuation token is already bound. */
|
|
17
18
|
export type ChannelAddressDeliveryOptions<TState = undefined> = [TState] extends [undefined] ? BaseChannelAddressDeliveryOptions : BaseChannelAddressDeliveryOptions & {
|
|
@@ -46,6 +47,7 @@ export declare function createChannelAddress<TState = undefined>(input: {
|
|
|
46
47
|
readonly metadata?: ChannelDeliverySource;
|
|
47
48
|
readonly runtime: Runtime;
|
|
48
49
|
readonly turnPolicy?: TurnPolicy;
|
|
50
|
+
readonly taskDeliveryPolicy?: TaskDeliveryPolicy;
|
|
49
51
|
}): ChannelAddress<TState>;
|
|
50
52
|
/** Builds a request-scoped factory for channel addresses on one authored channel. */
|
|
51
53
|
export declare function createChannelAddressFn<TState = undefined>(input: {
|
|
@@ -54,5 +56,6 @@ export declare function createChannelAddressFn<TState = undefined>(input: {
|
|
|
54
56
|
readonly metadata?: ChannelDeliverySource;
|
|
55
57
|
readonly runtime: Runtime;
|
|
56
58
|
readonly turnPolicy?: TurnPolicy;
|
|
59
|
+
readonly taskDeliveryPolicy?: TaskDeliveryPolicy;
|
|
57
60
|
}): ChannelAddressFn<TState>;
|
|
58
61
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createSession,sessionCallbackToTurnCaller}from"#channel/session.js";import{copyChannelActivityPresentation}from"#channel/activity-renderer.js";import{createChannelDeliveryMetadata}from"#channel/delivery-metadata.js";import{normalizeSendInput,serializeUrlFilePartsInMessage}from"#channel/send-input.js";import{DEFAULT_TURN_POLICY}from"#channel/types.js";import{isReservedSessionCommandToken}from"#execution/session-inbox/address.js";function createChannelAddress(e){let t=e.metadata??{},n=`${e.channelName}:${e.continuationToken}`;if(isReservedSessionCommandToken(n))throw Error(`Channel address "${n}" uses eve's reserved session namespace.`);return{continuationToken:e.continuationToken,async deliver(r,i){let a=t.channelKind!==void 0&&t.channelName!==void 0?createChannelDeliveryMetadata(t):void 0,o=normalizeSendInput(r),s=sessionCallbackToTurnCaller(i.callback),c={auth:i.auth,delivery:a,kind:`send`,payload:{...o,message:serializeUrlFilePartsInMessage(o.message)},requestId:t.requestId,turnPolicy:o.message===void 0?void 0:i.turnPolicy??e.turnPolicy??DEFAULT_TURN_POLICY},
|
|
1
|
+
import{createSession,sessionCallbackToTurnCaller}from"#channel/session.js";import{copyChannelActivityPresentation}from"#channel/activity-renderer.js";import{createChannelDeliveryMetadata}from"#channel/delivery-metadata.js";import{normalizeSendInput,serializeUrlFilePartsInMessage}from"#channel/send-input.js";import{DEFAULT_TURN_POLICY}from"#channel/types.js";import{isReservedSessionCommandToken}from"#execution/session-inbox/address.js";function createChannelAddress(e){let t=e.metadata??{},n=`${e.channelName}:${e.continuationToken}`;if(isReservedSessionCommandToken(n))throw Error(`Channel address "${n}" uses eve's reserved session namespace.`);return{continuationToken:e.continuationToken,async deliver(r,i){let a=t.channelKind!==void 0&&t.channelName!==void 0?createChannelDeliveryMetadata(t):void 0,o=normalizeSendInput(r),s=sessionCallbackToTurnCaller(i.callback),c=i.taskDeliveryPolicy??e.taskDeliveryPolicy,l={taskDeliveryPolicy:c,auth:i.auth,delivery:a,kind:`send`,payload:{...o,message:serializeUrlFilePartsInMessage(o.message)},requestId:t.requestId,turnPolicy:o.message===void 0?void 0:i.turnPolicy??e.turnPolicy??DEFAULT_TURN_POLICY},u=s===void 0?l:{...l,caller:s},d=await(async()=>{let r=await e.runtime.dispatchContinuation({command:u,continuationToken:n});return r.status===`accepted`?createSession(r.sessionId,e.runtime,{...t,turnPolicy:e.turnPolicy}):void 0})();if(d!==void 0)return d;if(o.inputResponses&&o.inputResponses.length>0)throw Error(`Cannot deliver inputResponses — the target session was not found via continuation token.`);let f=i.state,p=f===void 0?e.adapter:{...e.adapter,state:{...e.adapter.state,...f}};p!==e.adapter&©ChannelActivityPresentation(e.adapter,p);let m=i.mode===`task`?void 0:{requestInput:!0},h={taskDeliveryPolicy:c,adapter:p,auth:i.auth,capabilities:m,callback:i.callback,channelName:e.channelName,continuationConflictCommand:u,continuationToken:n,delivery:a,initiatorAuth:i.initiatorAuth,input:{context:o.context,message:serializeUrlFilePartsInMessage(o.message)??``,outputSchema:o.outputSchema},mode:i.mode??`conversation`,requestId:t.requestId,title:i.title},g=await e.runtime.createSession(h);return createSession(g.sessionId,e.runtime,{...t,turnPolicy:e.turnPolicy})},async send(e,t){return await this.deliver({message:e},t)},async respond(e,t){if(e===void 0||e.length===0)throw Error(`respond() requires at least one input response.`);return await this.deliver({inputResponses:e},t)},async cancel(t){return await e.runtime.dispatchContinuation({command:{kind:`cancel`,turnId:t?.turnId},continuationToken:n})},async compact(){return await e.runtime.dispatchContinuation({command:{kind:`compact`},continuationToken:n})},async clear(){return await e.runtime.dispatchContinuation({command:{kind:`clear`},continuationToken:n})},async reset(t){return await e.runtime.dispatchContinuation({command:{kind:`reset`,reason:t?.reason},continuationToken:n})},async resolveSession(){let r=await e.runtime.resolveContinuation(n);return r===void 0?void 0:createSession(r.sessionId,e.runtime,{...t,turnPolicy:e.turnPolicy})}}}function createChannelAddressFn(e){return t=>createChannelAddress({...e,continuationToken:t})}export{createChannelAddress,createChannelAddressFn};
|
|
@@ -4,7 +4,7 @@ import type { ChannelDeliverySource } from "#channel/delivery-metadata.js";
|
|
|
4
4
|
import { type ChannelAddressDeliveryOptions } from "#channel/channel-address.js";
|
|
5
5
|
import type { SendPayload } from "#channel/routes.js";
|
|
6
6
|
import type { Session } from "#channel/session.js";
|
|
7
|
-
import type { CancelTurnResult, ClearSessionResult, CompactSessionResult, ResetSessionResult, Runtime, SessionAuthContext, SessionCallback, TurnPolicy } from "#channel/types.js";
|
|
7
|
+
import type { CancelTurnResult, ClearSessionResult, CompactSessionResult, ResetSessionResult, Runtime, SessionAuthContext, SessionCallback, TurnPolicy, TaskDeliveryPolicy } from "#channel/types.js";
|
|
8
8
|
import { type InputResponse, type StrictInputResponses } from "#shared/input.js";
|
|
9
9
|
import type { JsonObject } from "#shared/json.js";
|
|
10
10
|
import type { RunMode } from "#shared/run-mode.js";
|
|
@@ -17,6 +17,8 @@ interface BaseChannelSendOptions {
|
|
|
17
17
|
readonly outputSchema?: JsonObject;
|
|
18
18
|
readonly title?: string;
|
|
19
19
|
readonly turnPolicy?: TurnPolicy;
|
|
20
|
+
/** Updates the session policy; omission preserves it. New sessions default to auto, schedules to cohort. */
|
|
21
|
+
readonly taskDeliveryPolicy?: TaskDeliveryPolicy;
|
|
20
22
|
}
|
|
21
23
|
/** Options for sending a message from a channel-local continuation address. */
|
|
22
24
|
export type ChannelSendOptions<TState = undefined> = [TState] extends [undefined] ? BaseChannelSendOptions : BaseChannelSendOptions & {
|
|
@@ -70,5 +72,6 @@ export declare function createChannelOperations<TState = undefined>(input: {
|
|
|
70
72
|
readonly metadata?: ChannelDeliverySource;
|
|
71
73
|
readonly runtime: Runtime;
|
|
72
74
|
readonly turnPolicy?: TurnPolicy;
|
|
75
|
+
readonly taskDeliveryPolicy?: TaskDeliveryPolicy;
|
|
73
76
|
}): ChannelReceiveContext<TState>;
|
|
74
77
|
export {};
|
|
@@ -3,7 +3,7 @@ import type { ChannelAdapter } from "#channel/adapter.js";
|
|
|
3
3
|
import { type ChannelReference, type CompiledChannel } from "#channel/compiled-channel.js";
|
|
4
4
|
import type { InferReceiveTarget } from "#channel/receive-target.js";
|
|
5
5
|
import type { Session } from "#channel/session.js";
|
|
6
|
-
import type { Runtime, SessionAuthContext, TurnPolicy } from "#channel/types.js";
|
|
6
|
+
import type { Runtime, SessionAuthContext, TurnPolicy, TaskDeliveryPolicy } from "#channel/types.js";
|
|
7
7
|
import type { ResolvedChannelDefinition } from "#runtime/types.js";
|
|
8
8
|
/**
|
|
9
9
|
* Options for sending a message to a channel selected with `ctx.to(...)`.
|
|
@@ -11,6 +11,8 @@ import type { ResolvedChannelDefinition } from "#runtime/types.js";
|
|
|
11
11
|
export interface CrossChannelSendOptions {
|
|
12
12
|
readonly auth: SessionAuthContext | null;
|
|
13
13
|
readonly turnPolicy?: TurnPolicy;
|
|
14
|
+
/** Updates the session policy; omission preserves it. New sessions default to auto, schedules to cohort. */
|
|
15
|
+
readonly taskDeliveryPolicy?: TaskDeliveryPolicy;
|
|
14
16
|
}
|
|
15
17
|
/** Message delivery bound to one channel-specific proactive target. */
|
|
16
18
|
export interface CrossChannelTargetHandle {
|
|
@@ -51,6 +53,7 @@ interface InvokeChannelReceiveInput {
|
|
|
51
53
|
readonly auth: SessionAuthContext | null;
|
|
52
54
|
};
|
|
53
55
|
readonly turnPolicy?: TurnPolicy;
|
|
56
|
+
readonly taskDeliveryPolicy?: TaskDeliveryPolicy;
|
|
54
57
|
readonly describeMissingReceive: () => string;
|
|
55
58
|
readonly describeMissingAdapter: () => string;
|
|
56
59
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{createChannelOperations}from"#channel/channel-operations.js";import{isCompiledChannel}from"#channel/compiled-channel.js";function toCrossChannelTargets(e){return e.flatMap(e=>e.definition===void 0?[]:[{name:e.name,definition:e.definition,receive:e.receive,adapter:e.adapter,turnPolicy:e.turnPolicy}])}function createCrossChannelToFn(e,t){return(n,r)=>{let i=resolveTargetByReference(n,t);return{async send(t,n){return await invokeChannelReceive({runtime:e,target:i,input:{message:t,target:r,auth:n.auth},turnPolicy:n.turnPolicy,describeMissingReceive:()=>`ctx.to(): channel "${i.name}" does not implement receive(). Declare a receive hook on the channel to accept cross-channel sessions.`,describeMissingAdapter:()=>`ctx.to(): channel "${i.name}" has no adapter — cannot build ctx.from().`})}}}}async function invokeChannelReceive(e){if(!e.target.receive)throw Error(e.describeMissingReceive());if(!e.target.adapter)throw Error(e.describeMissingAdapter());let t=createChannelOperations({adapter:e.target.adapter,channelName:e.target.name,runtime:e.runtime,turnPolicy:e.turnPolicy??e.target.turnPolicy});return await e.target.receive(e.input,t)}function resolveTargetByReference(e,t){for(let n of t)if(n.definition===e)return n;let n=resolveTargetByRouteFingerprint(e,t);if(n!==null)return n;throw Error(`ctx.to(): the channel passed as the first argument is not registered in this agent's channels/. Import the channel module's default export from agent/channels/<name>.ts and pass that value.`)}function resolveTargetByRouteFingerprint(e,t){if(!isCompiledChannel(e))return null;let n=createRouteFingerprint(e);if(n===null)return null;let r=new Map;for(let e of t)createRouteFingerprint(e.definition)===n&&r.set(e.name,e);if(r.size===1)return[...r.values()][0];if(r.size>1)throw Error(`ctx.to(): the channel passed as the first argument matches multiple registered channels by route shape. Import a channel with a unique route set from agent/channels/<name>.ts before passing it to ctx.to().`);return null}function createRouteFingerprint(e){return e.routes.length===0?null:e.routes.map(e=>`${e.method.toUpperCase()} ${e.path}`).sort().join(`
|
|
1
|
+
import{createChannelOperations}from"#channel/channel-operations.js";import{isCompiledChannel}from"#channel/compiled-channel.js";function toCrossChannelTargets(e){return e.flatMap(e=>e.definition===void 0?[]:[{name:e.name,definition:e.definition,receive:e.receive,adapter:e.adapter,turnPolicy:e.turnPolicy}])}function createCrossChannelToFn(e,t){return(n,r)=>{let i=resolveTargetByReference(n,t);return{async send(t,n){return await invokeChannelReceive({runtime:e,target:i,input:{message:t,target:r,auth:n.auth},turnPolicy:n.turnPolicy,taskDeliveryPolicy:n.taskDeliveryPolicy,describeMissingReceive:()=>`ctx.to(): channel "${i.name}" does not implement receive(). Declare a receive hook on the channel to accept cross-channel sessions.`,describeMissingAdapter:()=>`ctx.to(): channel "${i.name}" has no adapter — cannot build ctx.from().`})}}}}async function invokeChannelReceive(e){if(!e.target.receive)throw Error(e.describeMissingReceive());if(!e.target.adapter)throw Error(e.describeMissingAdapter());let t=createChannelOperations({adapter:e.target.adapter,channelName:e.target.name,runtime:e.runtime,turnPolicy:e.turnPolicy??e.target.turnPolicy,taskDeliveryPolicy:e.taskDeliveryPolicy});return await e.target.receive(e.input,t)}function resolveTargetByReference(e,t){for(let n of t)if(n.definition===e)return n;let n=resolveTargetByRouteFingerprint(e,t);if(n!==null)return n;throw Error(`ctx.to(): the channel passed as the first argument is not registered in this agent's channels/. Import the channel module's default export from agent/channels/<name>.ts and pass that value.`)}function resolveTargetByRouteFingerprint(e,t){if(!isCompiledChannel(e))return null;let n=createRouteFingerprint(e);if(n===null)return null;let r=new Map;for(let e of t)createRouteFingerprint(e.definition)===n&&r.set(e.name,e);if(r.size===1)return[...r.values()][0];if(r.size>1)throw Error(`ctx.to(): the channel passed as the first argument matches multiple registered channels by route shape. Import a channel with a unique route set from agent/channels/<name>.ts before passing it to ctx.to().`);return null}function createRouteFingerprint(e){return e.routes.length===0?null:e.routes.map(e=>`${e.method.toUpperCase()} ${e.path}`).sort().join(`
|
|
2
2
|
`)}export{createCrossChannelToFn,invokeChannelReceive,toCrossChannelTargets};
|
|
@@ -2,7 +2,7 @@ import type { ContextAccessor } from "#context/key.js";
|
|
|
2
2
|
import { type ChannelDeliverySource } from "#channel/delivery-metadata.js";
|
|
3
3
|
import type { MessageStreamEvent } from "#protocol/message.js";
|
|
4
4
|
import type { UserContent } from "ai";
|
|
5
|
-
import type { ActivityObserverConfig, CancelTurnResult, ClearSessionResult, CompactSessionResult, ResetSessionResult, Runtime, SessionAuthContext, SessionCallback, SessionSendCommandResult, TurnPolicy, TurnCaller } from "#channel/types.js";
|
|
5
|
+
import type { ActivityObserverConfig, CancelTurnResult, ClearSessionResult, CompactSessionResult, ResetSessionResult, Runtime, SessionAuthContext, SessionCallback, SessionSendCommandResult, TurnPolicy, TaskDeliveryPolicy, TurnCaller } from "#channel/types.js";
|
|
6
6
|
import type { SessionAuth } from "#context/keys.js";
|
|
7
7
|
import { type InputResponse, type StrictInputResponses } from "#shared/input.js";
|
|
8
8
|
import type { JsonObject } from "#shared/json.js";
|
|
@@ -45,6 +45,8 @@ export type SessionSendOptions = SessionDeliveryOptions & {
|
|
|
45
45
|
/** Initial workflow title for a prewarmed session. */
|
|
46
46
|
readonly title?: string;
|
|
47
47
|
readonly turnPolicy?: TurnPolicy;
|
|
48
|
+
/** Updates the session policy; omission preserves it. New sessions default to auto, schedules to cohort. */
|
|
49
|
+
readonly taskDeliveryPolicy?: TaskDeliveryPolicy;
|
|
48
50
|
};
|
|
49
51
|
/** Options for answering pending input requests through a fixed session handle. */
|
|
50
52
|
export type SessionRespondOptions = SessionDeliveryOptions;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{attachClientContext,readClientContext}from"#internal/client-context.js";import{createChannelDeliveryMetadata}from"#channel/delivery-metadata.js";import{serializeUrlFilePartsInMessage}from"#channel/send-input.js";import{DEFAULT_TURN_POLICY}from"#channel/types.js";import{parseInputResponses}from"#shared/input.js";import{AuthKey,ContinuationHookTokensKey,ContinuationTokenKey,InitiatorAuthKey,SessionIdKey}from"#context/keys.js";import{toChannelLocalContinuationToken}from"#shared/continuation-token.js";function createSession(e,t,n={}){return{id:e,async send(r,i){let a=createDelivery(n),o=sessionCallbackToTurnCaller(i.callback,i.activityObserver),s=attachClientContext({message:serializeUrlFilePartsInMessage(r)},readClientContext(i));i.context!==void 0&&(s.context=i.context),i.outputSchema!==void 0&&(s.outputSchema=i.outputSchema);let c={auth:i.auth,delivery:a,kind:`send`,payload:s,requestId:n.requestId,turnPolicy:i.turnPolicy??n.turnPolicy??DEFAULT_TURN_POLICY,title:i.title};return await t.dispatchSession({command:o===void 0?c:{...c,caller:o},sessionId:e})},async respond(r,i){if(r.length===0)throw Error(`respond() requires at least one input response.`);let a=parseInputResponses(r),o=sessionCallbackToTurnCaller(i.callback,i.activityObserver),s=createDelivery(n),c=attachClientContext({inputResponses:a},readClientContext(i));i.context!==void 0&&(c.context=i.context),i.outputSchema!==void 0&&(c.outputSchema=i.outputSchema);let l={auth:i.auth,delivery:s,kind:`send`,payload:c,requestId:n.requestId};return await t.dispatchSession({command:o===void 0?l:{...l,caller:o},sessionId:e})},async cancel(n){let r={kind:`cancel`};return n?.taskId!==void 0&&(r.taskId=n.taskId),n?.tasks!==void 0&&(r.tasks=n.tasks),n?.turnId!==void 0&&(r.turnId=n.turnId),await t.dispatchSession({command:r,sessionId:e})},async compact(){return await t.dispatchSession({command:{kind:`compact`},sessionId:e})},async clear(){return await t.dispatchSession({command:{kind:`clear`},sessionId:e})},async reset(n){return await t.dispatchSession({command:{kind:`reset`,reason:n?.reason},sessionId:e})},async getEventStream(n){return t.getEventStream(e,n)},async getStreamTailIndex(){return t.getStreamTailIndex(e)}}}function createAttachSessionFn(e,t={}){return n=>createSession(n,e,t)}function createDelivery(e){return e.channelKind!==void 0&&e.channelName!==void 0?createChannelDeliveryMetadata(e):void 0}function buildSessionHandle(e){return{get id(){return e.get(SessionIdKey)??``},get auth(){return{current:e.get(AuthKey)??null,initiator:e.get(InitiatorAuthKey)??null}},get continuation(){let t=e.get(ContinuationTokenKey);if(t!==void 0&&t.length!==0)return{token:toChannelLocalContinuationToken(t),alias(n){if(n.length===0)throw Error(`A session alias requires a nonempty token.`);let r=namespaceContinuationToken(t,n);t!==r&&(e.set(ContinuationHookTokensKey,e=>{let n=e??[t];return n.includes(r)?n:[...n,r]}),e.set(ContinuationTokenKey,r))}}}}}function namespaceContinuationToken(e,t){let n=e.indexOf(`:`);if(n<=0)throw Error(`Cannot set session continuation token without an existing namespaced continuation token. Start the session with a placeholder continuationToken.`);return`${e.slice(0,n+1)}${t}`}function sessionCallbackToTurnCaller(e,t){return e===void 0?void 0:{activityObserver:t,callId:e.callId,replyTo:{kind:`callback`,token:e.token,url:e.url},subagentName:e.subagentName,taskId:e.taskId}}export{buildSessionHandle,createAttachSessionFn,createSession,sessionCallbackToTurnCaller};
|
|
1
|
+
import{attachClientContext,readClientContext}from"#internal/client-context.js";import{createChannelDeliveryMetadata}from"#channel/delivery-metadata.js";import{serializeUrlFilePartsInMessage}from"#channel/send-input.js";import{DEFAULT_TURN_POLICY}from"#channel/types.js";import{parseInputResponses}from"#shared/input.js";import{AuthKey,ContinuationHookTokensKey,ContinuationTokenKey,InitiatorAuthKey,SessionIdKey}from"#context/keys.js";import{toChannelLocalContinuationToken}from"#shared/continuation-token.js";function createSession(e,t,n={}){return{id:e,async send(r,i){let a=createDelivery(n),o=sessionCallbackToTurnCaller(i.callback,i.activityObserver),s=attachClientContext({message:serializeUrlFilePartsInMessage(r)},readClientContext(i));i.context!==void 0&&(s.context=i.context),i.outputSchema!==void 0&&(s.outputSchema=i.outputSchema);let c={auth:i.auth,delivery:a,kind:`send`,payload:s,requestId:n.requestId,turnPolicy:i.turnPolicy??n.turnPolicy??DEFAULT_TURN_POLICY,taskDeliveryPolicy:i.taskDeliveryPolicy,title:i.title};return await t.dispatchSession({command:o===void 0?c:{...c,caller:o},sessionId:e})},async respond(r,i){if(r.length===0)throw Error(`respond() requires at least one input response.`);let a=parseInputResponses(r),o=sessionCallbackToTurnCaller(i.callback,i.activityObserver),s=createDelivery(n),c=attachClientContext({inputResponses:a},readClientContext(i));i.context!==void 0&&(c.context=i.context),i.outputSchema!==void 0&&(c.outputSchema=i.outputSchema);let l={auth:i.auth,delivery:s,kind:`send`,payload:c,requestId:n.requestId};return await t.dispatchSession({command:o===void 0?l:{...l,caller:o},sessionId:e})},async cancel(n){let r={kind:`cancel`};return n?.taskId!==void 0&&(r.taskId=n.taskId),n?.tasks!==void 0&&(r.tasks=n.tasks),n?.turnId!==void 0&&(r.turnId=n.turnId),await t.dispatchSession({command:r,sessionId:e})},async compact(){return await t.dispatchSession({command:{kind:`compact`},sessionId:e})},async clear(){return await t.dispatchSession({command:{kind:`clear`},sessionId:e})},async reset(n){return await t.dispatchSession({command:{kind:`reset`,reason:n?.reason},sessionId:e})},async getEventStream(n){return t.getEventStream(e,n)},async getStreamTailIndex(){return t.getStreamTailIndex(e)}}}function createAttachSessionFn(e,t={}){return n=>createSession(n,e,t)}function createDelivery(e){return e.channelKind!==void 0&&e.channelName!==void 0?createChannelDeliveryMetadata(e):void 0}function buildSessionHandle(e){return{get id(){return e.get(SessionIdKey)??``},get auth(){return{current:e.get(AuthKey)??null,initiator:e.get(InitiatorAuthKey)??null}},get continuation(){let t=e.get(ContinuationTokenKey);if(t!==void 0&&t.length!==0)return{token:toChannelLocalContinuationToken(t),alias(n){if(n.length===0)throw Error(`A session alias requires a nonempty token.`);let r=namespaceContinuationToken(t,n);t!==r&&(e.set(ContinuationHookTokensKey,e=>{let n=e??[t];return n.includes(r)?n:[...n,r]}),e.set(ContinuationTokenKey,r))}}}}}function namespaceContinuationToken(e,t){let n=e.indexOf(`:`);if(n<=0)throw Error(`Cannot set session continuation token without an existing namespaced continuation token. Start the session with a placeholder continuationToken.`);return`${e.slice(0,n+1)}${t}`}function sessionCallbackToTurnCaller(e,t){return e===void 0?void 0:{activityObserver:t,callId:e.callId,replyTo:{kind:`callback`,token:e.token,url:e.url},subagentName:e.subagentName,taskId:e.taskId}}export{buildSessionHandle,createAttachSessionFn,createSession,sessionCallbackToTurnCaller};
|
|
@@ -164,6 +164,8 @@ export interface DeliverPayload {
|
|
|
164
164
|
};
|
|
165
165
|
readonly [key: string]: unknown;
|
|
166
166
|
}
|
|
167
|
+
/** Controls background task wake timing and whether partial results require a report. */
|
|
168
|
+
export type TaskDeliveryPolicy = "cohort" | "auto";
|
|
167
169
|
/** Controls how a channel message interacts with an active turn. */
|
|
168
170
|
export type TurnPolicy = "steer" | "queue";
|
|
169
171
|
/** Default policy for message sends produced by current channel surfaces. */
|
|
@@ -185,6 +187,7 @@ export type SessionCommand = {
|
|
|
185
187
|
*/
|
|
186
188
|
readonly taskDeliveryId?: string;
|
|
187
189
|
readonly turnPolicy?: TurnPolicy;
|
|
190
|
+
readonly taskDeliveryPolicy?: TaskDeliveryPolicy;
|
|
188
191
|
} | {
|
|
189
192
|
readonly kind: "cancel";
|
|
190
193
|
readonly taskId?: string;
|
|
@@ -254,9 +257,12 @@ export interface DeliverHookPayload {
|
|
|
254
257
|
* `resumeHook` already succeeded.
|
|
255
258
|
*/
|
|
256
259
|
readonly taskDeliveryId?: string;
|
|
260
|
+
/** All source notifications when the session queue combines task results. */
|
|
261
|
+
readonly taskDeliveryIds?: readonly string[];
|
|
257
262
|
readonly kind: "deliver";
|
|
258
263
|
readonly payloads: readonly DeliverPayload[];
|
|
259
264
|
readonly turnPolicy?: TurnPolicy;
|
|
265
|
+
readonly taskDeliveryPolicy?: TaskDeliveryPolicy;
|
|
260
266
|
}
|
|
261
267
|
/** Internal deadline signal sent through the stable session command inbox. */
|
|
262
268
|
export interface SessionTimeoutHookPayload {
|
|
@@ -387,6 +393,7 @@ export interface SessionCapabilities {
|
|
|
387
393
|
* subagent tool wrapper).
|
|
388
394
|
*/
|
|
389
395
|
export interface RunInput {
|
|
396
|
+
readonly taskDeliveryPolicy?: TaskDeliveryPolicy;
|
|
390
397
|
readonly adapter: ChannelAdapter<any>;
|
|
391
398
|
/** Framework task that owns this run, when the run is a task executor. */
|
|
392
399
|
readonly taskId?: string;
|
|
@@ -285,12 +285,9 @@ const memory = source.extend({
|
|
|
285
285
|
visibility: z.enum(["scope", "session"])
|
|
286
286
|
}).strict();
|
|
287
287
|
const sandbox = source.extend({
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
hasOnSession: z.boolean(),
|
|
292
|
-
revalidationKey: z.string().optional(),
|
|
293
|
-
sourceHash: z.string().optional()
|
|
288
|
+
provider: z.string().optional(),
|
|
289
|
+
environmentExportName: z.string().optional(),
|
|
290
|
+
revisionHash: z.string()
|
|
294
291
|
}).strict();
|
|
295
292
|
const subagent = entry.extend({
|
|
296
293
|
configResolver: dynamicResolver.optional(),
|
|
@@ -394,7 +391,7 @@ const AgentInfoResultSchema = z.object({
|
|
|
394
391
|
dynamic: z.array(dynamicResolver),
|
|
395
392
|
static: z.array(tool)
|
|
396
393
|
}).strict(),
|
|
397
|
-
version: z.literal(
|
|
394
|
+
version: z.literal(5),
|
|
398
395
|
workspace: z.object({
|
|
399
396
|
resourceRoot: z.unknown(),
|
|
400
397
|
rootEntries: z.array(z.string())
|
|
@@ -1735,6 +1732,7 @@ function createMessageBody(input, requireMessage) {
|
|
|
1735
1732
|
if (input.message !== void 0) body.message = input.message;
|
|
1736
1733
|
if (input.inputResponses !== void 0 && input.inputResponses.length > 0) body.inputResponses = input.inputResponses;
|
|
1737
1734
|
if (!requireMessage && input.message !== void 0 && input.turnPolicy !== void 0) body.turnPolicy = input.turnPolicy;
|
|
1735
|
+
if (input.message !== void 0 && input.taskDeliveryPolicy !== void 0) body.taskDeliveryPolicy = input.taskDeliveryPolicy;
|
|
1738
1736
|
if (input.clientContext !== void 0) body.clientContext = input.clientContext;
|
|
1739
1737
|
const outputSchema = serializeOutputSchema(input.outputSchema);
|
|
1740
1738
|
if (outputSchema !== void 0) body.outputSchema = outputSchema;
|
|
@@ -2411,12 +2409,13 @@ var EveAgentStore = class {
|
|
|
2411
2409
|
this.#error = void 0;
|
|
2412
2410
|
this.#status = "resuming";
|
|
2413
2411
|
this.#publish();
|
|
2412
|
+
let reader;
|
|
2414
2413
|
try {
|
|
2415
2414
|
const stream = this.#ensureStream({
|
|
2416
2415
|
catchUp: true,
|
|
2417
2416
|
startIndex: this.#events.length === session.state.streamIndex ? session.state.streamIndex : 0
|
|
2418
2417
|
});
|
|
2419
|
-
|
|
2418
|
+
reader = stream.subscribe(turn.abortController.signal);
|
|
2420
2419
|
await stream.caughtUp;
|
|
2421
2420
|
if (!this.#isActiveTurn(turn)) return;
|
|
2422
2421
|
reader.discard();
|
|
@@ -2443,6 +2442,7 @@ var EveAgentStore = class {
|
|
|
2443
2442
|
this.#callbacks.onError?.(this.#error);
|
|
2444
2443
|
}
|
|
2445
2444
|
} finally {
|
|
2445
|
+
reader?.[Symbol.dispose]();
|
|
2446
2446
|
this.#finishTurn(turn);
|
|
2447
2447
|
}
|
|
2448
2448
|
}
|
|
@@ -286,12 +286,9 @@ const memory = source.extend({
|
|
|
286
286
|
visibility: z.enum(["scope", "session"])
|
|
287
287
|
}).strict();
|
|
288
288
|
const sandbox = source.extend({
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
hasOnSession: z.boolean(),
|
|
293
|
-
revalidationKey: z.string().optional(),
|
|
294
|
-
sourceHash: z.string().optional()
|
|
289
|
+
provider: z.string().optional(),
|
|
290
|
+
environmentExportName: z.string().optional(),
|
|
291
|
+
revisionHash: z.string()
|
|
295
292
|
}).strict();
|
|
296
293
|
const subagent = entry.extend({
|
|
297
294
|
configResolver: dynamicResolver.optional(),
|
|
@@ -395,7 +392,7 @@ const AgentInfoResultSchema = z.object({
|
|
|
395
392
|
dynamic: z.array(dynamicResolver),
|
|
396
393
|
static: z.array(tool)
|
|
397
394
|
}).strict(),
|
|
398
|
-
version: z.literal(
|
|
395
|
+
version: z.literal(5),
|
|
399
396
|
workspace: z.object({
|
|
400
397
|
resourceRoot: z.unknown(),
|
|
401
398
|
rootEntries: z.array(z.string())
|
|
@@ -1736,6 +1733,7 @@ function createMessageBody(input, requireMessage) {
|
|
|
1736
1733
|
if (input.message !== void 0) body.message = input.message;
|
|
1737
1734
|
if (input.inputResponses !== void 0 && input.inputResponses.length > 0) body.inputResponses = input.inputResponses;
|
|
1738
1735
|
if (!requireMessage && input.message !== void 0 && input.turnPolicy !== void 0) body.turnPolicy = input.turnPolicy;
|
|
1736
|
+
if (input.message !== void 0 && input.taskDeliveryPolicy !== void 0) body.taskDeliveryPolicy = input.taskDeliveryPolicy;
|
|
1739
1737
|
if (input.clientContext !== void 0) body.clientContext = input.clientContext;
|
|
1740
1738
|
const outputSchema = serializeOutputSchema(input.outputSchema);
|
|
1741
1739
|
if (outputSchema !== void 0) body.outputSchema = outputSchema;
|
|
@@ -2412,12 +2410,13 @@ var EveAgentStore = class {
|
|
|
2412
2410
|
this.#error = void 0;
|
|
2413
2411
|
this.#status = "resuming";
|
|
2414
2412
|
this.#publish();
|
|
2413
|
+
let reader;
|
|
2415
2414
|
try {
|
|
2416
2415
|
const stream = this.#ensureStream({
|
|
2417
2416
|
catchUp: true,
|
|
2418
2417
|
startIndex: this.#events.length === session.state.streamIndex ? session.state.streamIndex : 0
|
|
2419
2418
|
});
|
|
2420
|
-
|
|
2419
|
+
reader = stream.subscribe(turn.abortController.signal);
|
|
2421
2420
|
await stream.caughtUp;
|
|
2422
2421
|
if (!this.#isActiveTurn(turn)) return;
|
|
2423
2422
|
reader.discard();
|
|
@@ -2444,6 +2443,7 @@ var EveAgentStore = class {
|
|
|
2444
2443
|
this.#callbacks.onError?.(this.#error);
|
|
2445
2444
|
}
|
|
2446
2445
|
} finally {
|
|
2446
|
+
reader?.[Symbol.dispose]();
|
|
2447
2447
|
this.#finishTurn(turn);
|
|
2448
2448
|
}
|
|
2449
2449
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{resolve}from"node:path";import{resolveInternalVercelServiceOutput}from"#cli/vercel-service-output.js";import{createCliTheme,renderCliTaggedLine}from"#cli/ui/output.js";import{EVE_INTERNAL_AGENT_WORKSPACE_MEMBER_ENV}from"#internal/application/build-output-environment.js";import{EVE_PUBLIC_ROUTE_PREFIX_ENV,normalizePublicRoutePrefix}from"#shared/public-route-prefix.js";function registerBuildCommand(e){let t=createCliTheme();e.program.command(`build`).hook(`preAction`,async()=>{(await e.applicationContext.resolveAgent()).kind!==`workspace`&&await e.applicationContext.resolve()}).description(`Build the current eve application.`).option(`--profile <path>`,`Write best-effort timing and output-size profile JSON to a file`).option(`--skip-sandbox-prewarm`,`Skip sandbox
|
|
1
|
+
import{resolve}from"node:path";import{resolveInternalVercelServiceOutput}from"#cli/vercel-service-output.js";import{createCliTheme,renderCliTaggedLine}from"#cli/ui/output.js";import{EVE_INTERNAL_AGENT_WORKSPACE_MEMBER_ENV}from"#internal/application/build-output-environment.js";import{EVE_PUBLIC_ROUTE_PREFIX_ENV,normalizePublicRoutePrefix}from"#shared/public-route-prefix.js";function registerBuildCommand(e){let t=createCliTheme();e.program.command(`build`).hook(`preAction`,async()=>{(await e.applicationContext.resolveAgent()).kind!==`workspace`&&await e.applicationContext.resolve()}).description(`Build the current eve application.`).option(`--profile <path>`,`Write best-effort timing and output-size profile JSON to a file`).option(`--skip-sandbox-prewarm`,`Skip sandbox preparation; output may not be deployable`).action(async n=>{let{loadDevelopmentEnvironmentFiles:r}=await import(`#cli/dev/environment.js`);await r(e.applicationContext.root);let i=await e.applicationContext.resolveAgent();if(i.kind===`workspace`){if(n.profile!==void 0)throw Error(`Workspace builds do not support --profile. Run it from an individual agent directory.`);let{buildAgentWorkspace:r}=await import(`#internal/vercel/build-agent-workspace.js`),a=await r(i.workspace,{skipSandboxPrewarm:n.skipSandboxPrewarm});e.logger.log(renderCliTaggedLine(t,{message:`built output at ${a}`,tag:`build`,tone:`success`}));return}let a=e.buildHost??(await import(`#internal/nitro/host.js`)).buildApplication,o=n.profile===void 0?void 0:resolve(e.applicationContext.root,n.profile),s={publicRoutePrefix:normalizePublicRoutePrefix(process.env[EVE_PUBLIC_ROUTE_PREFIX_ENV]),skipSandboxPrewarm:n.skipSandboxPrewarm===!0,vercelServiceOutput:resolveInternalVercelServiceOutput(e.applicationContext.root),workspaceMember:i.kind===`workspace-member`||process.env[EVE_INTERNAL_AGENT_WORKSPACE_MEMBER_ENV]===`1`};o!==void 0&&(s.profileOutputPath=o);let c=await a(e.applicationContext.root,s);e.logger.log(renderCliTaggedLine(t,{message:`built output at ${c}`,tag:`build`,tone:`success`}))})}export{registerBuildCommand};
|
|
@@ -6,6 +6,8 @@ export interface InitCommandOptions {
|
|
|
6
6
|
channelWebNextjs?: boolean;
|
|
7
7
|
model?: string;
|
|
8
8
|
reasoning?: AgentReasoningDefinition;
|
|
9
|
+
/** Do not start development after initialization. */
|
|
10
|
+
nonInteractive?: boolean;
|
|
9
11
|
}
|
|
10
12
|
export interface InitCliLogger {
|
|
11
13
|
error(message: string): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{initAgentDevHandoff,initAgentReadySummary}from"./agent-instructions.js";import{hasInteractiveTerminal}from"./preconditions.js";import{tryInitializeGit}from"./init-git.js";import{InitTargetError}from"./init-telemetry.js";import{addAgentsToWorkspace,convertScaffoldToAgentWorkspace,formatWorkspaceRootMutationWarning}from"./init-agent-workspace.js";import{createInstallDiagnostics,packageManagerInstallFailureCode}from"./init-install.js";import{reportExistingProjectChanges}from"./init-project.js";import{cleanupFreshInitTarget,workspaceFailureNote}from"./init-recovery.js";import{resolveInitTarget}from"./init-target.js";import{mkdtemp,readdir,rename,rm}from"node:fs/promises";import{createLogger,isLogLevelEnabled}from"#internal/logging.js";import{basename,join,resolve}from"node:path";import pc from"#compiled/picocolors/index.js";import{DEFAULT_AGENT_MODEL_ID}from"#shared/default-agent-model.js";import{ensureChannel,scaffoldBaseProject}from"#setup/scaffold/index.js";import{eveDevArguments,packageManagerInstallFailureMessage,packageManagerInstallSucceeded,resultSucceeded,runPackageManagerInstall,spawnPackageManager}from"#setup/primitives/index.js";import{performance}from"node:perf_hooks";import{isCodingAgentLaunch}from"#cli/agent-detection.js";import{EVE_WORDMARK,eveCliBanner}from"#cli/banner.js";import{formatElapsed}from"#cli/format-elapsed.js";import{startCliLiveRow}from"#cli/ui/live-row.js";import{detectInvokingPackageManager,detectPackageManager}from"#setup/package-manager.js";import{pathExists}from"#setup/path-exists.js";import{DEFAULT_EVE_PACKAGE_CONTRACT}from"#setup/scaffold/create/project.js";import{validateModelSlug}from"#setup/flows/model-source-change.js";import{addAgentToProject}from"#setup/scaffold/create/add-to-project.js";import{WizardCancelledError}from"#setup/step.js";import{isPackageManagerWorkspaceMember}from"#setup/scaffold/workspace-root.js";const defaultDependencies={addAgentToProject,detectInvokingPackageManager,detectPackageManager,ensureChannel,isCodingAgentLaunch,now:()=>performance.now(),runPackageManagerInstall,scaffoldBaseProject,hasInteractiveTerminal,spawnPackageManager,tryInitializeGit,validateModelSlug},EVE_INIT_PACKAGE_SPEC_ENV=`EVE_INIT_PACKAGE_SPEC`,initLog=createLogger(`init`);async function moveDirectoryContents(e,t){for(let n of await readdir(e))await rename(join(e,n),join(t,n))}function uniqueWorkspaceRootMutations(e){let t=new Map;for(let n of e){let e=`${n.kind}:${n.path}`,r=t.get(e);t.set(e,{...n,nodeEngineOverride:n.nodeEngineOverride??r?.nodeEngineOverride})}return[...t.values()]}async function addToExistingProject(e,t,n,r){if(t.channelWebNextjs===!0)throw Error("`--channel-web-nextjs` is not supported when adding an agent to an existing project. Run `eve add channel/web` from the project afterwards instead.");if(t.model!==void 0){let r=await n.validateModelSlug(e,t.model);if(r!==null)throw Error(r)}let i=await n.detectPackageManager(e),a=await n.addAgentToProject({projectRoot:e,model:t.model??DEFAULT_AGENT_MODEL_ID,reasoning:t.reasoning,packageManager:i.kind,evePackage:r});return{configurationFilesChanged:a.configurationFilesChanged,dependenciesAdded:a.dependenciesAdded,filesWritten:a.filesWritten,packageManager:i.kind,nodeEngineOverride:a.nodeEngineOverride}}async function resolveScaffoldPackageManager(e,t){let n=await t.detectPackageManager(e);return n.source==="default"?t.detectInvokingPackageManager()??`pnpm`:n.kind}async function scaffoldProject(e,t,n,r,i,a,o,s){let c=resolve(e,`..`),l=!n&&await pathExists(e)&&(await readdir(e)).length===0;if(!n&&await pathExists(e)&&!l)throw Error(`Cannot create project because "${e}" already exists.`);let u=n&&s?void 0:await mkdtemp(join(c,`.eve-init-`)),d=[];try{let c=u??e;if(i.model!==void 0){let e=await a.validateModelSlug(c,i.model);if(e!==null)throw Error(e)}let f={projectName:u===void 0?`.`:n?basename(e):t,model:i.model??DEFAULT_AGENT_MODEL_ID,reasoning:i.reasoning,evePackage:o,targetDirectory:c,overwriteExisting:s,workspaceProbeDirectory:e,packageManager:r,onWorkspaceRootMutation:e=>{d.push(e)}},p=await a.scaffoldBaseProject(f);return i.agents!==void 0&&await convertScaffoldToAgentWorkspace(p,i.agents,i),i.channelWebNextjs===!0&&await a.ensureChannel({projectRoot:p,kind:`web`,packageManager:r,force:s,workspaceProbeDirectory:e,configureVercelServices:!1,onWorkspaceRootMutation:e=>{d.push(e)}}),u!==void 0&&(n||l?await moveDirectoryContents(p,e):await rename(p,e)),{projectPath:e,workspaceRootMutations:uniqueWorkspaceRootMutations(d)}}finally{u!==void 0&&await rm(u,{recursive:!0,force:!0})}}async function runInitSteps(e){let{agentLaunched:t,dependencies:n,interactive:r,logger:i,options:a,parentDirectory:o,target:s,trackStep:c,trackTerminal:l}=e,u=isLogLevelEnabled(`debug`),d=await resolveInitTarget({parentDirectory:o,target:s}),f=resolveInitEvePackageOverride(),p=n.now(),m={animate:r&&!t&&!process.env.CI&&process.env.TERM!==`dumb`,elapsed:!0,logPhases:!0},h=startCliLiveRow(i,m),g=`scaffold`,_;try{let e=d.kind===`fresh`?`creating agent`:`adding agent`;c?.(g),h.update(d.kind===`fresh`?`Creating agent`:`Adding agent`),initLog.debug(e);let r=n.now(),o;if(d.kind===`fresh`){let e=await resolveScaffoldPackageManager(d.projectPath,n),t=isPackageManagerWorkspaceMember(e,d.projectPath),r;try{r=await scaffoldProject(d.projectPath,d.projectName,d.createInPlace,e,a,n,f,d.overwriteExisting)}catch(e){if(d.failurePolicy===`clear`){let n=await cleanupFreshInitTarget(d.projectPath,d.failurePolicy,d.preservedEntries),r=e instanceof Error?e.message:String(e),i=n?`eve restored "${d.projectPath}" to its original state.`:`eve could not completely clean "${d.projectPath}".`;throw Error(`${r}\n\n${i}${workspaceFailureNote(t)}`)}if(d.failurePolicy===`remove`&&t){let t=e instanceof Error?e.message:String(e);throw Error(`${t}${workspaceFailureNote(!0)}`)}throw e}o={failurePolicy:d.failurePolicy,kind:`created`,packageManager:e,preservedTargetEntries:d.preservedEntries,projectPath:r.projectPath,retryCommand:`eve init ${d.projectPath}`,workspaceMember:t,workspaceRootMutations:r.workspaceRootMutations}}else{let e=await addToExistingProject(d.projectPath,a,n,f);o=e.nodeEngineOverride===void 0?{configurationFilesChanged:e.configurationFilesChanged,dependenciesAdded:e.dependenciesAdded,failurePolicy:`preserve`,filesWritten:e.filesWritten,kind:`added`,packageManager:e.packageManager,projectPath:d.projectPath}:{configurationFilesChanged:e.configurationFilesChanged,dependenciesAdded:e.dependenciesAdded,failurePolicy:`preserve`,filesWritten:e.filesWritten,kind:`added`,nodeEngineOverride:e.nodeEngineOverride,packageManager:e.packageManager,projectPath:d.projectPath}}let s=n.now()-r;initLog.debug(`${e} done`,{ms:s}),o.kind===`added`&&(h.stop(),reportExistingProjectChanges(i,o),h=startCliLiveRow(i,m)),g=`install_dependencies`,c?.(g),h.update(`Installing dependencies`,o.packageManager),initLog.debug(`installing dependencies with ${o.packageManager}`);let l=n.now(),v=createInstallDiagnostics(),y=await n.runPackageManagerInstall(o.packageManager,o.projectPath,{autoApprove:!0,bypassMinimumReleaseAge:!0,progressDetails:!1,onOutput:e=>{v.append(e.text),u&&initLog.debug(e.text)}}),b=n.now()-l;if(!packageManagerInstallSucceeded(y)){_=packageManagerInstallFailureCode(y),initLog.debug(`dependency installation failed`,{ms:b}),h.stop();let{lines:e,truncated:t}=v.result();t&&i.error(`Earlier install output omitted; showing the final diagnostics.`);for(let t of e)i.error(t);if(e.length===0){let e=packageManagerInstallFailureMessage(y);e!==void 0&&i.error(e)}if(o.failurePolicy!==`preserve`){if(await cleanupFreshInitTarget(o.projectPath,o.failurePolicy,o.preservedTargetEntries)){let e=o.failurePolicy===`remove`?`eve removed the incomplete project at "${o.projectPath}".`:`eve restored "${o.projectPath}" to its original state.`,t=o.workspaceMember||o.workspaceRootMutations.length>0;throw Error(`Failed to install dependencies.\n\n${e}\n\nResolve the package-manager error above, then retry:\n ${o.retryCommand}${workspaceFailureNote(t)}`)}let e=o.workspaceMember||o.workspaceRootMutations.length>0;throw Error(`Failed to install dependencies, and eve could not completely clean "${o.projectPath}".\n\nResolve the package-manager error above, then install dependencies with ${o.packageManager} in that directory. Or clean the target manually before rerunning eve init.${workspaceFailureNote(e)}`)}throw Error(`The eve agent was added, but dependency installation failed.\n\nResolve the package-manager error above, then install dependencies with ${o.packageManager} in "${o.projectPath}".\n\nDo not rerun eve init; the agent is already configured.`)}if(initLog.debug(`dependencies installed`,{ms:b}),o.kind===`created`){g=`initialize_git`,c?.(g),h.update(`Initializing Git`),initLog.debug(`initializing git repository`);let e=await n.tryInitializeGit(o.projectPath);return{...o,elapsedMs:n.now()-p,agentLaunched:t,gitResult:e,selfModificationEnabled:!1}}return{...o,elapsedMs:n.now()-p,agentLaunched:t,selfModificationEnabled:!1}}catch(e){throw l?.(g,`error`,g===`install_dependencies`?_:void 0),e}finally{h.stop()}}async function runInitCommand(e,t,n,r,i=defaultDependencies,a,o){let s=await i.isCodingAgentLaunch(),c=i.hasInteractiveTerminal();c&&!s&&e.log(``),e.log(eveCliBanner()),a?.(`resolve_target`);let l;try{if(await addAgentsToWorkspace(e,t,n,r,i.validateModelSlug)){a?.(`handoff`),o?.(`handoff`,`completed`);return}l=await runInitSteps({agentLaunched:s,interactive:c,dependencies:i,logger:e,options:r,parentDirectory:t,target:n,trackStep:a,trackTerminal:o})}catch(e){if(e instanceof WizardCancelledError){o?.(`resolve_target`,`cancelled`);return}throw e instanceof InitTargetError&&o?.(`resolve_target`,`error`,e.failureCode),e}if(a?.(`handoff`),l.kind===`created`){e.log(`${pc.green(`✓`)} Created an ${EVE_WORDMARK} agent in ${pc.bold(l.projectPath)} ${pc.dim(`in ${formatElapsed(l.elapsedMs)}`)}`);for(let t of l.workspaceRootMutations)e.log(pc.yellow(`⚠ ${formatWorkspaceRootMutationWarning(t)}`))}else e.log(`${pc.green(`✓`)} Added an ${EVE_WORDMARK} agent to ${pc.bold(l.projectPath)} ${pc.dim(`in ${formatElapsed(l.elapsedMs)}`)}`);l.selfModificationEnabled&&e.log(`${pc.green(`✓`)} Enabled self-modification`),l.kind===`created`&&l.gitResult.kind===`failed`&&(e.error(pc.yellow(`Git initialization failed during ${l.gitResult.stage}: ${l.gitResult.reason}`)),l.gitResult.stage===`commit`&&e.error(pc.yellow(`The eve agent was created successfully. Git repository metadata and staged files were preserved at "${l.projectPath}"; the initial commit is optional.\n\nTo create it later, configure Git identity and run:\n git -C ${JSON.stringify(l.projectPath)} commit -m "Initial commit from eve"`)));let u=eveDevArguments(l.packageManager),d=[l.packageManager,...u].join(` `),f=initAgentDevHandoff({projectPath:l.projectPath,devCommand:d});if(l.agentLaunched){e.log(initAgentReadySummary(r.model,l.projectPath,{workspace:r.agents!==void 0})),e.log(f);return}if(!c){e.log(f);return}let p=l.kind===`created`,m=[...l.packageManager===`pnpm`?[`--reporter=silent`]:[],...u,...p?[`--onboard`]:[]];if(e.log(``),!resultSucceeded(await i.spawnPackageManager(l.packageManager,l.projectPath,m)))throw Error(`Development server exited unsuccessfully in "${l.projectPath}".`)}function resolveInitEvePackageOverride(){let e=process.env[EVE_INIT_PACKAGE_SPEC_ENV]?.trim();if(e!==void 0&&e.length!==0)return{nodeEngine:DEFAULT_EVE_PACKAGE_CONTRACT.nodeEngine,version:e}}export{EVE_INIT_PACKAGE_SPEC_ENV,runInitCommand};
|
|
1
|
+
import{initAgentDevHandoff,initAgentReadySummary}from"./agent-instructions.js";import{hasInteractiveTerminal}from"./preconditions.js";import{tryInitializeGit}from"./init-git.js";import{InitTargetError}from"./init-telemetry.js";import{addAgentsToWorkspace,convertScaffoldToAgentWorkspace,formatWorkspaceRootMutationWarning}from"./init-agent-workspace.js";import{createInstallDiagnostics,packageManagerInstallFailureCode}from"./init-install.js";import{reportExistingProjectChanges}from"./init-project.js";import{cleanupFreshInitTarget,workspaceFailureNote}from"./init-recovery.js";import{resolveInitTarget}from"./init-target.js";import{mkdtemp,readdir,rename,rm}from"node:fs/promises";import{createLogger,isLogLevelEnabled}from"#internal/logging.js";import{basename,join,resolve}from"node:path";import pc from"#compiled/picocolors/index.js";import{DEFAULT_AGENT_MODEL_ID}from"#shared/default-agent-model.js";import{ensureChannel,scaffoldBaseProject}from"#setup/scaffold/index.js";import{eveDevArguments,packageManagerInstallFailureMessage,packageManagerInstallSucceeded,resultSucceeded,runPackageManagerInstall,spawnPackageManager}from"#setup/primitives/index.js";import{performance}from"node:perf_hooks";import{isCodingAgentLaunch}from"#cli/agent-detection.js";import{EVE_WORDMARK,eveCliBanner}from"#cli/banner.js";import{formatElapsed}from"#cli/format-elapsed.js";import{startCliLiveRow}from"#cli/ui/live-row.js";import{detectInvokingPackageManager,detectPackageManager}from"#setup/package-manager.js";import{pathExists}from"#setup/path-exists.js";import{DEFAULT_EVE_PACKAGE_CONTRACT}from"#setup/scaffold/create/project.js";import{validateModelSlug}from"#setup/flows/model-source-change.js";import{addAgentToProject}from"#setup/scaffold/create/add-to-project.js";import{WizardCancelledError}from"#setup/step.js";import{isPackageManagerWorkspaceMember}from"#setup/scaffold/workspace-root.js";const defaultDependencies={addAgentToProject,detectInvokingPackageManager,detectPackageManager,ensureChannel,isCodingAgentLaunch,now:()=>performance.now(),runPackageManagerInstall,scaffoldBaseProject,hasInteractiveTerminal,spawnPackageManager,tryInitializeGit,validateModelSlug},EVE_INIT_PACKAGE_SPEC_ENV=`EVE_INIT_PACKAGE_SPEC`,initLog=createLogger(`init`);async function moveDirectoryContents(e,t){for(let n of await readdir(e))await rename(join(e,n),join(t,n))}function uniqueWorkspaceRootMutations(e){let t=new Map;for(let n of e){let e=`${n.kind}:${n.path}`,r=t.get(e);t.set(e,{...n,nodeEngineOverride:n.nodeEngineOverride??r?.nodeEngineOverride})}return[...t.values()]}async function addToExistingProject(e,t,n,r){if(t.channelWebNextjs===!0)throw Error("`--channel-web-nextjs` is not supported when adding an agent to an existing project. Run `eve add channel/web` from the project afterwards instead.");if(t.model!==void 0){let r=await n.validateModelSlug(e,t.model);if(r!==null)throw Error(r)}let i=await n.detectPackageManager(e),a=await n.addAgentToProject({projectRoot:e,model:t.model??DEFAULT_AGENT_MODEL_ID,reasoning:t.reasoning,packageManager:i.kind,evePackage:r});return{configurationFilesChanged:a.configurationFilesChanged,dependenciesAdded:a.dependenciesAdded,filesWritten:a.filesWritten,packageManager:i.kind,nodeEngineOverride:a.nodeEngineOverride}}async function resolveScaffoldPackageManager(e,t){let n=await t.detectPackageManager(e);return n.source==="default"?t.detectInvokingPackageManager()??`pnpm`:n.kind}async function scaffoldProject(e,t,n,r,i,a,o,s){let c=resolve(e,`..`),l=!n&&await pathExists(e)&&(await readdir(e)).length===0;if(!n&&await pathExists(e)&&!l)throw Error(`Cannot create project because "${e}" already exists.`);let u=n&&s?void 0:await mkdtemp(join(c,`.eve-init-`)),d=[];try{let c=u??e;if(i.model!==void 0){let e=await a.validateModelSlug(c,i.model);if(e!==null)throw Error(e)}let f={projectName:u===void 0?`.`:n?basename(e):t,model:i.model??DEFAULT_AGENT_MODEL_ID,reasoning:i.reasoning,evePackage:o,targetDirectory:c,overwriteExisting:s,workspaceProbeDirectory:e,packageManager:r,onWorkspaceRootMutation:e=>{d.push(e)}},p=await a.scaffoldBaseProject(f);return i.agents!==void 0&&await convertScaffoldToAgentWorkspace(p,i.agents,i),i.channelWebNextjs===!0&&await a.ensureChannel({projectRoot:p,kind:`web`,packageManager:r,force:s,workspaceProbeDirectory:e,configureVercelServices:!1,onWorkspaceRootMutation:e=>{d.push(e)}}),u!==void 0&&(n||l?await moveDirectoryContents(p,e):await rename(p,e)),{projectPath:e,workspaceRootMutations:uniqueWorkspaceRootMutations(d)}}finally{u!==void 0&&await rm(u,{recursive:!0,force:!0})}}async function runInitSteps(e){let{agentLaunched:t,dependencies:n,interactive:r,logger:i,options:a,parentDirectory:o,target:s,trackStep:c,trackTerminal:l}=e,u=isLogLevelEnabled(`debug`),d=await resolveInitTarget({parentDirectory:o,target:s}),f=resolveInitEvePackageOverride(),p=n.now(),m={animate:r&&!t&&!process.env.CI&&process.env.TERM!==`dumb`,elapsed:!0,logPhases:!0},h=startCliLiveRow(i,m),g=`scaffold`,_;try{let e=d.kind===`fresh`?`creating agent`:`adding agent`;c?.(g),h.update(d.kind===`fresh`?`Creating agent`:`Adding agent`),initLog.debug(e);let r=n.now(),o;if(d.kind===`fresh`){let e=await resolveScaffoldPackageManager(d.projectPath,n),t=isPackageManagerWorkspaceMember(e,d.projectPath),r;try{r=await scaffoldProject(d.projectPath,d.projectName,d.createInPlace,e,a,n,f,d.overwriteExisting)}catch(e){if(d.failurePolicy===`clear`){let n=await cleanupFreshInitTarget(d.projectPath,d.failurePolicy,d.preservedEntries),r=e instanceof Error?e.message:String(e),i=n?`eve restored "${d.projectPath}" to its original state.`:`eve could not completely clean "${d.projectPath}".`;throw Error(`${r}\n\n${i}${workspaceFailureNote(t)}`)}if(d.failurePolicy===`remove`&&t){let t=e instanceof Error?e.message:String(e);throw Error(`${t}${workspaceFailureNote(!0)}`)}throw e}o={failurePolicy:d.failurePolicy,kind:`created`,packageManager:e,preservedTargetEntries:d.preservedEntries,projectPath:r.projectPath,retryCommand:`eve init ${d.projectPath}`,workspaceMember:t,workspaceRootMutations:r.workspaceRootMutations}}else{let e=await addToExistingProject(d.projectPath,a,n,f);o=e.nodeEngineOverride===void 0?{configurationFilesChanged:e.configurationFilesChanged,dependenciesAdded:e.dependenciesAdded,failurePolicy:`preserve`,filesWritten:e.filesWritten,kind:`added`,packageManager:e.packageManager,projectPath:d.projectPath}:{configurationFilesChanged:e.configurationFilesChanged,dependenciesAdded:e.dependenciesAdded,failurePolicy:`preserve`,filesWritten:e.filesWritten,kind:`added`,nodeEngineOverride:e.nodeEngineOverride,packageManager:e.packageManager,projectPath:d.projectPath}}let s=n.now()-r;initLog.debug(`${e} done`,{ms:s}),o.kind===`added`&&(h.stop(),reportExistingProjectChanges(i,o),h=startCliLiveRow(i,m)),g=`install_dependencies`,c?.(g),h.update(`Installing dependencies`,o.packageManager),initLog.debug(`installing dependencies with ${o.packageManager}`);let l=n.now(),v=createInstallDiagnostics(),y=await n.runPackageManagerInstall(o.packageManager,o.projectPath,{autoApprove:!0,bypassMinimumReleaseAge:!0,progressDetails:!1,onOutput:e=>{v.append(e.text),u&&initLog.debug(e.text)}}),b=n.now()-l;if(!packageManagerInstallSucceeded(y)){_=packageManagerInstallFailureCode(y),initLog.debug(`dependency installation failed`,{ms:b}),h.stop();let{lines:e,truncated:t}=v.result();t&&i.error(`Earlier install output omitted; showing the final diagnostics.`);for(let t of e)i.error(t);if(e.length===0){let e=packageManagerInstallFailureMessage(y);e!==void 0&&i.error(e)}if(o.failurePolicy!==`preserve`){if(await cleanupFreshInitTarget(o.projectPath,o.failurePolicy,o.preservedTargetEntries)){let e=o.failurePolicy===`remove`?`eve removed the incomplete project at "${o.projectPath}".`:`eve restored "${o.projectPath}" to its original state.`,t=o.workspaceMember||o.workspaceRootMutations.length>0;throw Error(`Failed to install dependencies.\n\n${e}\n\nResolve the package-manager error above, then retry:\n ${o.retryCommand}${workspaceFailureNote(t)}`)}let e=o.workspaceMember||o.workspaceRootMutations.length>0;throw Error(`Failed to install dependencies, and eve could not completely clean "${o.projectPath}".\n\nResolve the package-manager error above, then install dependencies with ${o.packageManager} in that directory. Or clean the target manually before rerunning eve init.${workspaceFailureNote(e)}`)}throw Error(`The eve agent was added, but dependency installation failed.\n\nResolve the package-manager error above, then install dependencies with ${o.packageManager} in "${o.projectPath}".\n\nDo not rerun eve init; the agent is already configured.`)}if(initLog.debug(`dependencies installed`,{ms:b}),o.kind===`created`){g=`initialize_git`,c?.(g),h.update(`Initializing Git`),initLog.debug(`initializing git repository`);let e=await n.tryInitializeGit(o.projectPath);return{...o,elapsedMs:n.now()-p,agentLaunched:t,gitResult:e,selfModificationEnabled:!1}}return{...o,elapsedMs:n.now()-p,agentLaunched:t,selfModificationEnabled:!1}}catch(e){throw l?.(g,`error`,g===`install_dependencies`?_:void 0),e}finally{h.stop()}}async function runInitCommand(e,t,n,r,i=defaultDependencies,a,o){let s=await i.isCodingAgentLaunch(),c=i.hasInteractiveTerminal();c&&!s&&e.log(``),e.log(eveCliBanner()),a?.(`resolve_target`);let l;try{if(await addAgentsToWorkspace(e,t,n,r,i.validateModelSlug)){a?.(`handoff`),o?.(`handoff`,`completed`);return}l=await runInitSteps({agentLaunched:s,interactive:c,dependencies:i,logger:e,options:r,parentDirectory:t,target:n,trackStep:a,trackTerminal:o})}catch(e){if(e instanceof WizardCancelledError){o?.(`resolve_target`,`cancelled`);return}throw e instanceof InitTargetError&&o?.(`resolve_target`,`error`,e.failureCode),e}if(a?.(`handoff`),l.kind===`created`){e.log(`${pc.green(`✓`)} Created an ${EVE_WORDMARK} agent in ${pc.bold(l.projectPath)} ${pc.dim(`in ${formatElapsed(l.elapsedMs)}`)}`);for(let t of l.workspaceRootMutations)e.log(pc.yellow(`⚠ ${formatWorkspaceRootMutationWarning(t)}`))}else e.log(`${pc.green(`✓`)} Added an ${EVE_WORDMARK} agent to ${pc.bold(l.projectPath)} ${pc.dim(`in ${formatElapsed(l.elapsedMs)}`)}`);l.selfModificationEnabled&&e.log(`${pc.green(`✓`)} Enabled self-modification`),l.kind===`created`&&l.gitResult.kind===`failed`&&(e.error(pc.yellow(`Git initialization failed during ${l.gitResult.stage}: ${l.gitResult.reason}`)),l.gitResult.stage===`commit`&&e.error(pc.yellow(`The eve agent was created successfully. Git repository metadata and staged files were preserved at "${l.projectPath}"; the initial commit is optional.\n\nTo create it later, configure Git identity and run:\n git -C ${JSON.stringify(l.projectPath)} commit -m "Initial commit from eve"`)));let u=eveDevArguments(l.packageManager),d=[l.packageManager,...u].join(` `),f=initAgentDevHandoff({projectPath:l.projectPath,devCommand:d});if(l.agentLaunched){e.log(initAgentReadySummary(r.model,l.projectPath,{workspace:r.agents!==void 0})),e.log(f);return}if(r.nonInteractive||!c){e.log(f);return}let p=l.kind===`created`,m=[...l.packageManager===`pnpm`?[`--reporter=silent`]:[],...u,...p?[`--onboard`]:[]];if(e.log(``),!resultSucceeded(await i.spawnPackageManager(l.packageManager,l.projectPath,m)))throw Error(`Development server exited unsuccessfully in "${l.projectPath}".`)}function resolveInitEvePackageOverride(){let e=process.env[EVE_INIT_PACKAGE_SPEC_ENV]?.trim();if(e!==void 0&&e.length!==0)return{nodeEngine:DEFAULT_EVE_PACKAGE_CONTRACT.nodeEngine,version:e}}export{EVE_INIT_PACKAGE_SPEC_ENV,runInitCommand};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { detectPackageManager } from "#setup/package-manager.js";
|
|
2
2
|
import { type Prompter } from "#setup/prompter.js";
|
|
3
|
+
import { applyPnpmBuildPolicy, inspectPnpmBuildPolicy } from "#setup/primitives/pm/pnpm-build-policy.js";
|
|
3
4
|
import type { RegistryCommandLogger } from "./registry-recovery.js";
|
|
4
|
-
import { applyPnpmBuildPolicy, inspectPnpmBuildPolicy } from "./registry-pnpm-build-policy.js";
|
|
5
5
|
export interface DeclaredPnpmBuildPolicy {
|
|
6
6
|
readonly packages: readonly string[];
|
|
7
7
|
readonly optional: true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{headlessSetupContinuation,serializeHeadlessSetupEvent}from"./setup-headless.js";import{
|
|
1
|
+
import{headlessSetupContinuation,serializeHeadlessSetupEvent}from"./setup-headless.js";import{createPrompter}from"#setup/prompter.js";import{detectPackageManager}from"#setup/package-manager.js";import{WizardCancelledError}from"#setup/step.js";import{applyPnpmBuildPolicy,inspectPnpmBuildPolicy}from"#setup/primitives/pm/pnpm-build-policy.js";const PNPM_BUILD_POLICY_ANSWER_KEY=`install.pnpm.buildScripts`,AUTO_ACCEPT_RECOMMENDED_ITEMS=new Set([`eve/self-modification`]);function pnpmBuildPolicyChoice(e){return e===`ignore-optional`||e===`allow-builds`||e===`abort`?e:void 0}async function prepareDeclaredPnpmBuildPolicy(e,t={}){if(e.policies===void 0||e.policies.length===0)return!0;let n={detectPackageManager:t.detectPackageManager??detectPackageManager,inspectPnpmBuildPolicy:t.inspectPnpmBuildPolicy??inspectPnpmBuildPolicy,applyPnpmBuildPolicy:t.applyPnpmBuildPolicy??applyPnpmBuildPolicy,createPrompter:t.createPrompter??createPrompter};if((await n.detectPackageManager(e.appRoot)).kind!==`pnpm`)return!0;for(let t of e.policies){let r=await n.inspectPnpmBuildPolicy(e.appRoot,t.packages);if(r.satisfied)continue;let i=e.options.answers?.[PNPM_BUILD_POLICY_ANSWER_KEY],a=pnpmBuildPolicyChoice(i);if(i!==void 0&&a===void 0)throw Error(`${PNPM_BUILD_POLICY_ANSWER_KEY} must be "ignore-optional", "allow-builds", or "abort".`);if(a===void 0&&AUTO_ACCEPT_RECOMMENDED_ITEMS.has(e.item)&&(a=t.recommendedAction),e.options.nonInteractive&&a===void 0&&e.options.yes!==!0){let n={key:PNPM_BUILD_POLICY_ANSWER_KEY,kind:`select`,message:`How should pnpm handle these optional packages?`,required:!0,recommended:t.recommendedAction,options:[{id:`ignore-optional`,label:`Ignore optional packages`},{id:`allow-builds`,label:`Allow build scripts`},{id:`abort`,label:`Abort add`}]};return e.logger.error(serializeHeadlessSetupEvent({version:1,type:`blocked`,item:e.item,installed:!1,completedItems:[],status:`input_required`,question:n,next:headlessSetupContinuation({item:e.item,installed:!1,question:n})})),process.exitCode=2,!1}if(a===void 0&&e.options.yes===!0&&(a=t.recommendedAction),a===void 0){let i=e.options.prompter??n.createPrompter();try{a=await i.select({message:`How should pnpm handle these optional packages?`,description:t.reason,metadata:[{label:`Packages`,value:t.packages.join(`, `)},{label:`Policy file`,value:r.filePath}],hintLayout:`inline`,initialValue:t.recommendedAction,options:[{value:`ignore-optional`,label:`Ignore optional packages (recommended)`,hint:`Add the item without installing these packages or running their build scripts.`},{value:`allow-builds`,label:`Allow build scripts`,hint:`Install these packages and allow their third-party build scripts to run.`},{value:`abort`,label:`Abort add`,hint:`Do not add this registry item.`}]})}catch(e){if(!(e instanceof WizardCancelledError))throw e;return!1}}if(a===`abort`)return e.options.nonInteractive&&e.logger.log(serializeHeadlessSetupEvent({version:1,type:`cancelled`,item:e.item,completedItems:[]})),!1;if(a===void 0)throw Error(`pnpm build policy selection is required.`);await n.applyPnpmBuildPolicy(r,a)}return!0}export{prepareDeclaredPnpmBuildPolicy};
|
|
@@ -46,10 +46,12 @@ export declare function moveEnd(state: LineState): LineState;
|
|
|
46
46
|
export declare function killToEnd(state: LineState): LineState;
|
|
47
47
|
/** Deletes from the start of the line to the caret (Ctrl+U). */
|
|
48
48
|
export declare function killToStart(state: LineState): LineState;
|
|
49
|
+
/** Deletes to the previous readline-style word boundary (Alt+Backspace). */
|
|
50
|
+
export declare function deleteWordBackward(state: LineState): LineState;
|
|
49
51
|
/** Deletes the whitespace-delimited word before the caret (Ctrl+W). */
|
|
50
52
|
export declare function deleteWord(state: LineState): LineState;
|
|
51
53
|
/** Options for {@link applyLineEditorKey}. */
|
|
52
|
-
interface LineEditorOptions {
|
|
54
|
+
export interface LineEditorOptions {
|
|
53
55
|
/** Single-line inputs flatten pasted newlines and ignore Shift+Enter. */
|
|
54
56
|
readonly multiline?: boolean;
|
|
55
57
|
}
|
|
@@ -59,6 +61,14 @@ interface LineEditorOptions {
|
|
|
59
61
|
* on a single-line input includes Shift+Enter.
|
|
60
62
|
*/
|
|
61
63
|
export declare function applyLineEditorKey(state: LineState, key: TerminalKey, options?: LineEditorOptions): LineState | undefined;
|
|
64
|
+
/** Session-local killed text shared by the TUI's line editors. */
|
|
65
|
+
export declare class KillRing {
|
|
66
|
+
#private;
|
|
67
|
+
constructor(capacity?: number);
|
|
68
|
+
clear(): void;
|
|
69
|
+
interruptYank(key: TerminalKey): void;
|
|
70
|
+
apply(state: LineState, key: TerminalKey, options?: LineEditorOptions): LineState | undefined;
|
|
71
|
+
}
|
|
62
72
|
/**
|
|
63
73
|
* The portion of `state.text` to draw within `budget` columns, split at the
|
|
64
74
|
* caret so the renderer can highlight `under` without slicing a grapheme.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import{inputTextWidth,offsetAtVisibleColumn}from"#cli/ui/terminal-text.js";import{graphemeBoundaryAtOrAfter,graphemes,nextGraphemeBoundary,previousGraphemeBoundary}from"#shared/text-boundaries.js";const EMPTY_LINE={text:``,cursor:0};function lineOf(e){return{text:e,cursor:e.length}}function maskLine(e){return{text:`•`.repeat(graphemes(e.text).length),cursor:graphemes(e.text.slice(0,e.cursor)).length}}function insert(e,t){if(t.length===0)return e;let n=e.text.slice(0,e.cursor)+t+e.text.slice(e.cursor);return{text:n,cursor:graphemeBoundaryAtOrAfter(n,e.cursor+t.length)}}function backspace(e){if(e.cursor===0)return e;let t=previousGraphemeBoundary(e.text,e.cursor),n=e.text.slice(0,t)+e.text.slice(e.cursor);return{text:n,cursor:graphemeBoundaryAtOrAfter(n,t)}}function deleteForward(e){if(e.cursor>=e.text.length)return e;let t=nextGraphemeBoundary(e.text,e.cursor),n=e.text.slice(0,e.cursor)+e.text.slice(t);return{text:n,cursor:graphemeBoundaryAtOrAfter(n,e.cursor)}}function moveLeft(e){return e.cursor===0?e:{text:e.text,cursor:previousGraphemeBoundary(e.text,e.cursor)}}function moveRight(e){return e.cursor>=e.text.length?e:{text:e.text,cursor:nextGraphemeBoundary(e.text,e.cursor)}}function moveWordBackward(e){let t=e.cursor;for(;t>0;){let n=previousGraphemeBoundary(e.text,t);if(isWordCharacter(e.text.slice(n,t)))break;t=n}for(;t>0;){let n=previousGraphemeBoundary(e.text,t);if(!isWordCharacter(e.text.slice(n,t)))break;t=n}return t===e.cursor?e:{text:e.text,cursor:t}}function moveWordForward(e){let t=e.cursor;for(;t<e.text.length;){let n=nextGraphemeBoundary(e.text,t);if(isWordCharacter(e.text.slice(t,n)))break;t=n}for(;t<e.text.length;){let n=nextGraphemeBoundary(e.text,t);if(!isWordCharacter(e.text.slice(t,n)))break;t=n}return t===e.cursor?e:{text:e.text,cursor:t}}function moveHome(e){let t=logicalLineStart(e.text,e.cursor);return e.cursor===t?e:{text:e.text,cursor:t}}function moveEnd(e){let t=logicalLineEnd(e.text,e.cursor);return e.cursor===t?e:{text:e.text,cursor:t}}function killToEnd(e){let t=logicalLineEnd(e.text,e.cursor);return e.cursor>=t?e:{text:e.text.slice(0,e.cursor)+e.text.slice(t),cursor:e.cursor}}function killToStart(e){let t=logicalLineStart(e.text,e.cursor);return e.cursor<=t?e:{text:e.text.slice(0,t)+e.text.slice(e.cursor),cursor:t}}function deleteWord(e){if(e.cursor===0)return e;let t=logicalLineStart(e.text,e.cursor),n=e.cursor;for(;n>t;){let t=previousGraphemeBoundary(e.text,n);if(!isWhitespace(e.text.slice(t,n)))break;n=t}for(;n>t;){let t=previousGraphemeBoundary(e.text,n);if(isWhitespace(e.text.slice(t,n)))break;n=t}let r=e.text.slice(0,n)+e.text.slice(e.cursor);return{text:r,cursor:graphemeBoundaryAtOrAfter(r,n)}}function logicalLineStart(e,t){return t===0?0:e.lastIndexOf(`
|
|
1
|
+
import{inputTextWidth,offsetAtVisibleColumn}from"#cli/ui/terminal-text.js";import{graphemeBoundaryAtOrAfter,graphemes,nextGraphemeBoundary,previousGraphemeBoundary}from"#shared/text-boundaries.js";const EMPTY_LINE={text:``,cursor:0};function lineOf(e){return{text:e,cursor:e.length}}function maskLine(e){return{text:`•`.repeat(graphemes(e.text).length),cursor:graphemes(e.text.slice(0,e.cursor)).length}}function insert(e,t){if(t.length===0)return e;let n=e.text.slice(0,e.cursor)+t+e.text.slice(e.cursor);return{text:n,cursor:graphemeBoundaryAtOrAfter(n,e.cursor+t.length)}}function backspace(e){if(e.cursor===0)return e;let t=previousGraphemeBoundary(e.text,e.cursor),n=e.text.slice(0,t)+e.text.slice(e.cursor);return{text:n,cursor:graphemeBoundaryAtOrAfter(n,t)}}function deleteForward(e){if(e.cursor>=e.text.length)return e;let t=nextGraphemeBoundary(e.text,e.cursor),n=e.text.slice(0,e.cursor)+e.text.slice(t);return{text:n,cursor:graphemeBoundaryAtOrAfter(n,e.cursor)}}function moveLeft(e){return e.cursor===0?e:{text:e.text,cursor:previousGraphemeBoundary(e.text,e.cursor)}}function moveRight(e){return e.cursor>=e.text.length?e:{text:e.text,cursor:nextGraphemeBoundary(e.text,e.cursor)}}function moveWordBackward(e){let t=e.cursor;for(;t>0;){let n=previousGraphemeBoundary(e.text,t);if(isWordCharacter(e.text.slice(n,t)))break;t=n}for(;t>0;){let n=previousGraphemeBoundary(e.text,t);if(!isWordCharacter(e.text.slice(n,t)))break;t=n}return t===e.cursor?e:{text:e.text,cursor:t}}function moveWordForward(e){let t=e.cursor;for(;t<e.text.length;){let n=nextGraphemeBoundary(e.text,t);if(isWordCharacter(e.text.slice(t,n)))break;t=n}for(;t<e.text.length;){let n=nextGraphemeBoundary(e.text,t);if(!isWordCharacter(e.text.slice(t,n)))break;t=n}return t===e.cursor?e:{text:e.text,cursor:t}}function moveHome(e){let t=logicalLineStart(e.text,e.cursor);return e.cursor===t?e:{text:e.text,cursor:t}}function moveEnd(e){let t=logicalLineEnd(e.text,e.cursor);return e.cursor===t?e:{text:e.text,cursor:t}}function killToEnd(e){let t=logicalLineEnd(e.text,e.cursor);return e.cursor>=t?e:{text:e.text.slice(0,e.cursor)+e.text.slice(t),cursor:e.cursor}}function killToStart(e){let t=logicalLineStart(e.text,e.cursor);return e.cursor<=t?e:{text:e.text.slice(0,t)+e.text.slice(e.cursor),cursor:t}}function deleteWordBackward(e){let t=moveWordBackward(e).cursor;if(t===e.cursor)return e;let n=e.text.slice(0,t)+e.text.slice(e.cursor);return{text:n,cursor:graphemeBoundaryAtOrAfter(n,t)}}function deleteWord(e){if(e.cursor===0)return e;let t=logicalLineStart(e.text,e.cursor),n=e.cursor;for(;n>t;){let t=previousGraphemeBoundary(e.text,n);if(!isWhitespace(e.text.slice(t,n)))break;n=t}for(;n>t;){let t=previousGraphemeBoundary(e.text,n);if(isWhitespace(e.text.slice(t,n)))break;n=t}let r=e.text.slice(0,n)+e.text.slice(e.cursor);return{text:r,cursor:graphemeBoundaryAtOrAfter(r,n)}}function logicalLineStart(e,t){return t===0?0:e.lastIndexOf(`
|
|
2
2
|
`,t-1)+1}function logicalLineEnd(e,t){let n=e.indexOf(`
|
|
3
3
|
`,t);return n===-1?e.length:n}function applyLineEditorKey(e,t,n){let r=n?.multiline??!1;switch(t.type){case`text`:return insert(e,r?t.value:t.value.replaceAll(`
|
|
4
4
|
`,` `));case`newline`:return r?insert(e,`
|
|
5
|
-
`):void 0;case`backspace`:return backspace(e);case`delete`:return deleteForward(e);case`left`:case`ctrl-b`:return moveLeft(e);case`right`:case`ctrl-f`:return moveRight(e);case`alt-b`:return moveWordBackward(e);case`alt-f`:return moveWordForward(e);case`home`:case`ctrl-a`:return moveHome(e);case`end`:case`ctrl-e`:return moveEnd(e);case`ctrl-k`:return killToEnd(e);case`ctrl-u`:return killToStart(e);case`ctrl-w`:return deleteWord(e);default:return}}function isWhitespace(e){return/^\s+$/u.test(e)}function isWordCharacter(e){return/^[\p{L}\p{M}\p{N}_]/u.test(e)}function visibleLine(e,t,n=`…`){let r=Math.max(1,t),{text:i,cursor:a}=e,o=graphemes(i),s=o.findIndex(e=>e.start===a),c=s===-1?o.length:s,l=o[c]?.text??``;if(inputTextWidth(i)<=r)return{before:i.slice(0,a),under:l,after:i.slice(a+l.length)};let u=c,d=c+ +(l.length>0),windowWidth=(e,t)=>{let r=o[e]?.start??i.length,a=o[t]?.start??i.length;return inputTextWidth(i.slice(r,a))+(e>0?inputTextWidth(n):0)+(t<o.length?inputTextWidth(n):0)},f=!0;for(;;){let e=u>0&&windowWidth(u-1,d)<=r,t=d<o.length&&windowWidth(u,d+1)<=r;if(!e&&!t)break;f&&e||!t?--u:d+=1,f=!f}let p=o[u]?.start??i.length,m=o[d]?.start??i.length;return{before:`${u>0?n:``}${i.slice(p,a)}`,under:l,after:`${i.slice(a+l.length,m)}${d<o.length?n:``}`}}function layoutPromptInput(e){let t=[],n=0,r=0,i=0;for(let a of e.text.split(`
|
|
6
|
-
`))e.cursor>=i&&e.cursor<=i+a.length&&(n=t.length,r=e.cursor-i),t.push({text:a,start:i}),i+=a.length+1;return{rows:t,caretRow:n,caretOffset:r}}function movePromptLine(e,t){let n=layoutPromptInput(e),r=t===`up`?n.caretRow-1:n.caretRow+1;if(r<0||r>=n.rows.length)return;let i=n.rows[n.caretRow],a=n.rows[r],o=inputTextWidth(i.text.slice(0,n.caretOffset));return{text:e.text,cursor:a.start+offsetAtVisibleColumn(a.text,o)}}var PromptHistory=class{#e=[];#t=0;#n=``;add(e){if(e.trim().length!==0){if(this.#e.at(-1)===e){this.#r();return}this.#e.push(e),this.#r()}}begin(e){this.#t=this.#e.length,this.#n=e}previous(e){if(this.#e.length!==0&&(this.#t===this.#e.length&&(this.#n=e),this.#t!==0))return--this.#t,this.#e[this.#t]}next(){if(!(this.#t>=this.#e.length))return this.#t+=1,this.#t===this.#e.length?this.#n:this.#e[this.#t]}#r(){this.#t=this.#e.length,this.#n=``}};export{EMPTY_LINE,PromptHistory,applyLineEditorKey,backspace,deleteForward,deleteWord,insert,killToEnd,killToStart,layoutPromptInput,lineOf,maskLine,moveEnd,moveHome,moveLeft,movePromptLine,moveRight,moveWordBackward,moveWordForward,visibleLine};
|
|
5
|
+
`):void 0;case`backspace`:return backspace(e);case`delete`:return deleteForward(e);case`left`:case`ctrl-b`:return moveLeft(e);case`right`:case`ctrl-f`:return moveRight(e);case`alt-b`:return moveWordBackward(e);case`alt-f`:return moveWordForward(e);case`alt-backspace`:return deleteWordBackward(e);case`home`:case`ctrl-a`:return moveHome(e);case`end`:case`ctrl-e`:return moveEnd(e);case`ctrl-k`:return killToEnd(e);case`ctrl-u`:return killToStart(e);case`ctrl-w`:return deleteWord(e);default:return}}var KillRing=class{#e=[];#t;#n;constructor(e=20){this.#t=e}clear(){this.#e.length=0,this.#n=void 0}interruptYank(e){e.type!==`ctrl-y`&&e.type!==`alt-y`&&(this.#n=void 0)}apply(e,t,n){if(t.type===`ctrl-y`)return this.#i(e);if(t.type===`alt-y`)return this.#a(e);this.#n=void 0;let r=applyLineEditorKey(e,t,n);return r!==void 0&&this.#r(killedText(e,r,t)),r}#r(e){e.length===0||this.#t<=0||(this.#e.unshift(e),this.#e.length>this.#t&&(this.#e.length=this.#t))}#i(e){let t=this.#e[0];if(t===void 0)return this.#n=void 0,e;let n=insert(e,t);return this.#n={state:n,start:e.cursor,replacementEnd:e.cursor+t.length,ringIndex:0},n}#a(e){let t=this.#n;if(t===void 0||this.#e.length<2||e!==t.state)return e;let n=(t.ringIndex+1)%this.#e.length,r=this.#e[n],i=t.start+r.length,a=e.text.slice(0,t.start)+r+e.text.slice(t.replacementEnd),o={text:a,cursor:graphemeBoundaryAtOrAfter(a,i)};return this.#n={state:o,start:t.start,replacementEnd:i,ringIndex:n},o}};function killedText(e,t,n){switch(n.type){case`ctrl-k`:return e.text.slice(e.cursor,logicalLineEnd(e.text,e.cursor));case`ctrl-u`:case`ctrl-w`:return e.text.slice(t.cursor,e.cursor);default:return``}}function isWhitespace(e){return/^\s+$/u.test(e)}function isWordCharacter(e){return/^[\p{L}\p{M}\p{N}_]/u.test(e)}function visibleLine(e,t,n=`…`){let r=Math.max(1,t),{text:i,cursor:a}=e,o=graphemes(i),s=o.findIndex(e=>e.start===a),c=s===-1?o.length:s,l=o[c]?.text??``;if(inputTextWidth(i)<=r)return{before:i.slice(0,a),under:l,after:i.slice(a+l.length)};let u=c,d=c+ +(l.length>0),windowWidth=(e,t)=>{let r=o[e]?.start??i.length,a=o[t]?.start??i.length;return inputTextWidth(i.slice(r,a))+(e>0?inputTextWidth(n):0)+(t<o.length?inputTextWidth(n):0)},f=!0;for(;;){let e=u>0&&windowWidth(u-1,d)<=r,t=d<o.length&&windowWidth(u,d+1)<=r;if(!e&&!t)break;f&&e||!t?--u:d+=1,f=!f}let p=o[u]?.start??i.length,m=o[d]?.start??i.length;return{before:`${u>0?n:``}${i.slice(p,a)}`,under:l,after:`${i.slice(a+l.length,m)}${d<o.length?n:``}`}}function layoutPromptInput(e){let t=[],n=0,r=0,i=0;for(let a of e.text.split(`
|
|
6
|
+
`))e.cursor>=i&&e.cursor<=i+a.length&&(n=t.length,r=e.cursor-i),t.push({text:a,start:i}),i+=a.length+1;return{rows:t,caretRow:n,caretOffset:r}}function movePromptLine(e,t){let n=layoutPromptInput(e),r=t===`up`?n.caretRow-1:n.caretRow+1;if(r<0||r>=n.rows.length)return;let i=n.rows[n.caretRow],a=n.rows[r],o=inputTextWidth(i.text.slice(0,n.caretOffset));return{text:e.text,cursor:a.start+offsetAtVisibleColumn(a.text,o)}}var PromptHistory=class{#e=[];#t=0;#n=``;add(e){if(e.trim().length!==0){if(this.#e.at(-1)===e){this.#r();return}this.#e.push(e),this.#r()}}begin(e){this.#t=this.#e.length,this.#n=e}previous(e){if(this.#e.length!==0&&(this.#t===this.#e.length&&(this.#n=e),this.#t!==0))return--this.#t,this.#e[this.#t]}next(){if(!(this.#t>=this.#e.length))return this.#t+=1,this.#t===this.#e.length?this.#n:this.#e[this.#t]}#r(){this.#t=this.#e.length,this.#n=``}};export{EMPTY_LINE,KillRing,PromptHistory,applyLineEditorKey,backspace,deleteForward,deleteWord,deleteWordBackward,insert,killToEnd,killToStart,layoutPromptInput,lineOf,maskLine,moveEnd,moveHome,moveLeft,movePromptLine,moveRight,moveWordBackward,moveWordForward,visibleLine};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{renderSelectQuestion}from"./setup-panel.js";import{ALL_REASONING_LEVELS}from"#setup/boxes/model-capabilities.js";import{filterOptions,initialSelectState,reduceSelect,selectValueAtCursor}from"#setup/cli/select-state.js";const SPEED_OPTIONS=[{value:`standard`,label:`Standard`,hint:`Normal speed and pricing`},{value:`priority`,label:`Fast`,hint:`Priority processing, higher cost`}],REASONING_COPY={none:{label:`None`,hint:`No reasoning`},minimal:{label:`Minimal`,hint:`The least thinking`},low:{label:`Low`,hint:`Less thinking, quicker answers`},medium:{label:`Medium`,hint:`Balance thinking and response time`},high:{label:`High`,hint:`More thinking for harder tasks`},xhigh:{label:`Extra high`,hint:`The most thinking, slower answers`}},REASONING_OPTIONS=[{value:`default`,label:`Provider default`,hint:`Use the model's default reasoning`},...ALL_REASONING_LEVELS.map(e=>({value:e,...REASONING_COPY[e]}))];function modelOptions(e){if(e.model.kind===`fixed`)return[{value:`fixed`,label:e.model.current??`Configured in agent.ts`}];let{options:t,current:n}=e.model;return n===null||t.some(e=>e.value===n)?t:[{value:n,label:n,hint:`Current model`},...t]}function stepOptions(e,t,n){switch(n){case`model`:return modelOptions(e);case`speed`:return SPEED_OPTIONS;case`reasoning`:{let n=reasoningLevels(e,t);return REASONING_OPTIONS.filter(e=>e.value==="default"||n.includes(e.value))}}}function reasoningLevels(e,t){let n=e.capabilitiesFor(t.model);return n===void 0?t.model===e.model.current&&e.reasoning!==null?[e.reasoning]:[]:n.reasoning?n.reasoningLevels:[]}function nextStep(e,t,n){if(!e.settingsEditable)return;let r=e.capabilitiesFor(t.model);if(n===`model`&&!e.externalRouting&&e.serviceTier.kind!==`custom`&&(r?.fastMode||r===void 0&&t.model===e.model.current&&e.serviceTier.kind===`priority`))return`speed`;if(n!==`reasoning`&&reasoningLevels(e,t).length>0)return`reasoning`}function initialModelPickerState(e){let t={model:e.model.current,speed:e.serviceTier.kind===`priority`?`priority`:`standard`,reasoning:e.reasoning??`default`};return{step:`model`,draft:t,select:initialSelectState({options:modelOptions(e),defaultValue:t.model??void 0}),history:[]}}function selectionDraft(e,t,n){let r={...t.draft};switch(t.step){case`model`:{if(e.model.kind===`fixed`)return r;r.model=n;let t=e.capabilitiesFor(n);return t!==void 0&&(t.fastMode||(r.speed=`standard`),r.reasoning!=="default"&&(!t.reasoning||!t.reasoningLevels.includes(r.reasoning))&&(r.reasoning=`default`)),r}case`speed`:return r.speed=SPEED_OPTIONS.find(e=>e.value===n).value,r;case`reasoning`:return r.reasoning=REASONING_OPTIONS.find(e=>e.value===n).value,r}}function selectionResult(e,t){let n={};if(e.model.kind===`pick`&&t.model!==null&&t.model!==e.model.current&&(n.model=t.model),e.settingsEditable){t.reasoning!==(e.reasoning??`default`)&&(n.reasoning=t.reasoning);let r=e.serviceTier.kind===`priority`?`priority`:`standard`;!e.externalRouting&&e.serviceTier.kind!==`custom`&&t.speed!==r&&(n.serviceTier=t.speed)}return n}function transitionModelPicker(e,t,n){if(t.type===`cancel`)return{kind:`cancel`};if(t.type===`back`){let t=e.history.at(-1);return t===void 0?{kind:`cancel`}:{kind:`render`,state:{...t,draft:e.draft,history:e.history.slice(0,-1)}}}let r=stepOptions(n,e.draft,e.step);if(t.type!==`submit`)return(e.step!==`model`||n.model.kind!==`pick`)&&(t.type===`char`||t.type===`backspace`)?{kind:`render`,state:e}:{kind:`render`,state:{...e,select:reduceSelect(e.select,t,{options:r})}};let i=selectValueAtCursor(filterOptions(r,e.select.filter),e.select.cursor);if(i===void 0)return{kind:`render`,state:e};let a=selectionDraft(n,e,i),o=nextStep(n,a,e.step);return o===void 0?{kind:`settle`,result:selectionResult(n,a)}:{kind:`render`,state:{step:o,draft:a,select:initialSelectState({options:stepOptions(n,a,o),defaultValue:a[o]}),history:[...e.history,{step:e.step,select:e.select}]}}}function modelPickerTitle(e){return{model:`Select model`,speed:`Select speed`,reasoning:`Select reasoning`}[e.step]}function renderModelPicker(e,t,n,r){let i=stepOptions(e,t.draft,t.step),a=selectValueAtCursor(filterOptions(i,t.select.filter),t.select.cursor),o=nextStep(e,a===void 0?t.draft:selectionDraft(e,t,a),t.step)===void 0,s=modelOptions(e).find(e=>e.value===t.draft.model)?.label??t.draft.model,c=t.step===`model`?e.model.kind===`fixed`?e.model.reason:void 0:[s,...t.step===`reasoning`&&t.history.some(e=>e.step===`speed`)?[t.draft.speed===`priority`?`Fast`:`Standard`]:[]].filter(Boolean).join(` · `);return renderSelectQuestion({kind:t.step===`model`&&e.model.kind===`pick`?`search`:`single`,message:``,description:c,options:i,select:t.select,footerHints:[`↑/↓ move`,o?`Enter apply`:`Enter next`,t.history.length>0?`Esc/← back`:`Esc cancel`]},n,r)}export{initialModelPickerState,modelPickerTitle,renderModelPicker,transitionModelPicker};
|
|
1
|
+
import{renderSelectQuestion}from"./setup-panel.js";import{ALL_REASONING_LEVELS}from"#setup/boxes/model-capabilities.js";import{filterOptions,initialSelectState,reduceSelect,selectValueAtCursor}from"#setup/cli/select-state.js";const SPEED_OPTIONS=[{value:`standard`,label:`Standard`,hint:`Normal speed and pricing`},{value:`priority`,label:`Fast`,hint:`Priority processing, higher cost`}],REASONING_COPY={none:{label:`None`,hint:`No reasoning`},minimal:{label:`Minimal`,hint:`The least thinking`},low:{label:`Low`,hint:`Less thinking, quicker answers`},medium:{label:`Medium`,hint:`Balance thinking and response time`},high:{label:`High`,hint:`More thinking for harder tasks`},xhigh:{label:`Extra high`,hint:`The most thinking, slower answers`}},REASONING_OPTIONS=[{value:`default`,label:`Provider default`,hint:`Use the model's default reasoning`},...ALL_REASONING_LEVELS.map(e=>({value:e,...REASONING_COPY[e]}))];function modelOptions(e){if(e.model.kind===`fixed`)return[{value:`fixed`,label:e.model.current??`Configured in agent.ts`}];let{options:t,current:n}=e.model;return n===null||t.some(e=>e.value===n)?t:[{value:n,label:n,hint:`Current model`},...t]}function stepOptions(e,t,n){switch(n){case`model`:return modelOptions(e);case`speed`:return SPEED_OPTIONS;case`reasoning`:{let n=reasoningLevels(e,t);return REASONING_OPTIONS.filter(e=>e.value==="default"||n.includes(e.value))}}}function reasoningLevels(e,t){let n=e.capabilitiesFor(t.model);return n===void 0?t.model===e.model.current&&e.reasoning!==null?[e.reasoning]:[]:n.reasoning?n.reasoningLevels:[]}function nextStep(e,t,n){if(!e.settingsEditable)return;let r=e.capabilitiesFor(t.model);if(n===`model`&&!e.externalRouting&&e.serviceTier.kind!==`custom`&&(r?.fastMode||r===void 0&&t.model===e.model.current&&e.serviceTier.kind===`priority`))return`speed`;if(n!==`reasoning`&&reasoningLevels(e,t).length>0)return`reasoning`}function initialModelPickerState(e){let t={model:e.model.current,speed:e.serviceTier.kind===`priority`?`priority`:`standard`,reasoning:e.reasoning??`default`};return{step:`model`,draft:t,select:initialSelectState({options:modelOptions(e),defaultValue:t.model??void 0}),history:[]}}function selectionDraft(e,t,n){let r={...t.draft};switch(t.step){case`model`:{if(e.model.kind===`fixed`)return r;r.model=n;let t=e.capabilitiesFor(n);return t!==void 0&&(t.fastMode||(r.speed=`standard`),r.reasoning!=="default"&&(!t.reasoning||!t.reasoningLevels.includes(r.reasoning))&&(r.reasoning=`default`)),r}case`speed`:return r.speed=SPEED_OPTIONS.find(e=>e.value===n).value,r;case`reasoning`:return r.reasoning=REASONING_OPTIONS.find(e=>e.value===n).value,r}}function selectionResult(e,t){let n={};if(e.model.kind===`pick`&&t.model!==null&&t.model!==e.model.current&&(n.model=t.model),e.settingsEditable){t.reasoning!==(e.reasoning??`default`)&&(n.reasoning=t.reasoning);let r=e.serviceTier.kind===`priority`?`priority`:`standard`;!e.externalRouting&&e.serviceTier.kind!==`custom`&&t.speed!==r&&(n.serviceTier=t.speed)}return n}function transitionModelPicker(e,t,n){if(t.type===`cancel`)return{kind:`cancel`};if(t.type===`back`){let t=e.history.at(-1);return t===void 0?{kind:`cancel`}:{kind:`render`,state:{...t,draft:e.draft,history:e.history.slice(0,-1)}}}let r=stepOptions(n,e.draft,e.step);if(t.type!==`submit`)return(e.step!==`model`||n.model.kind!==`pick`)&&(t.type===`char`||t.type===`backspace`||t.type===`delete-word-backward`)?{kind:`render`,state:e}:{kind:`render`,state:{...e,select:reduceSelect(e.select,t,{options:r})}};let i=selectValueAtCursor(filterOptions(r,e.select.filter),e.select.cursor);if(i===void 0)return{kind:`render`,state:e};let a=selectionDraft(n,e,i),o=nextStep(n,a,e.step);return o===void 0?{kind:`settle`,result:selectionResult(n,a)}:{kind:`render`,state:{step:o,draft:a,select:initialSelectState({options:stepOptions(n,a,o),defaultValue:a[o]}),history:[...e.history,{step:e.step,select:e.select}]}}}function modelPickerTitle(e){return{model:`Select model`,speed:`Select speed`,reasoning:`Select reasoning`}[e.step]}function renderModelPicker(e,t,n,r){let i=stepOptions(e,t.draft,t.step),a=selectValueAtCursor(filterOptions(i,t.select.filter),t.select.cursor),o=nextStep(e,a===void 0?t.draft:selectionDraft(e,t,a),t.step)===void 0,s=modelOptions(e).find(e=>e.value===t.draft.model)?.label??t.draft.model,c=t.step===`model`?e.model.kind===`fixed`?e.model.reason:void 0:[s,...t.step===`reasoning`&&t.history.some(e=>e.step===`speed`)?[t.draft.speed===`priority`?`Fast`:`Standard`]:[]].filter(Boolean).join(` · `);return renderSelectQuestion({kind:t.step===`model`&&e.model.kind===`pick`?`search`:`single`,message:``,description:c,options:i,select:t.select,footerHints:[`↑/↓ move`,o?`Enter apply`:`Enter next`,t.history.length>0?`Esc/← back`:`Esc cancel`]},n,r)}export{initialModelPickerState,modelPickerTitle,renderModelPicker,transitionModelPicker};
|
|
@@ -186,7 +186,6 @@ export type AgentTUIRenderer = {
|
|
|
186
186
|
* Commits one development sandbox lifecycle line to the transcript.
|
|
187
187
|
* Optional so non-terminal renderers can ignore local prewarm progress.
|
|
188
188
|
*/
|
|
189
|
-
renderSandboxLog?(text: string): void;
|
|
190
189
|
renderSetupWarning?(text: string): void;
|
|
191
190
|
/** Clears the setup attention line once its issue is resolved. */
|
|
192
191
|
clearSetupWarning?(): void;
|