eve 0.65.0 → 0.66.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +23 -0
- package/README.md +1 -2
- package/dist/src/_virtual/_rolldown/runtime.js +1 -1
- package/dist/src/chunks/{use-eve-agent-BIouJCii.js → use-eve-agent-BUeSjwIk.js} +242 -1
- package/dist/src/chunks/{use-eve-agent-BRvEh9sO.js → use-eve-agent-ydPlURM4.js} +242 -1
- package/dist/src/cli/dev/tui/argument-typeahead.d.ts +36 -0
- package/dist/src/cli/dev/tui/argument-typeahead.js +2 -0
- package/dist/src/cli/dev/tui/blocks.js +1 -1
- package/dist/src/cli/dev/tui/prompt-command-handler.js +1 -1
- package/dist/src/cli/dev/tui/runner.d.ts +3 -0
- package/dist/src/cli/dev/tui/runner.js +1 -1
- package/dist/src/cli/dev/tui/setup-commands.d.ts +2 -8
- package/dist/src/cli/dev/tui/setup-commands.js +1 -2
- package/dist/src/cli/dev/tui/setup-flow.d.ts +0 -3
- package/dist/src/cli/dev/tui/terminal-renderer.d.ts +3 -0
- package/dist/src/cli/dev/tui/terminal-renderer.js +10 -11
- package/dist/src/cli/dev/tui/test/fake-setup-flow-renderer.js +1 -1
- package/dist/src/cli/dev/tui/tui.js +1 -1
- package/dist/src/cli/dev/tui/vercel-trusted-sources-policy.d.ts +1 -1
- package/dist/src/cli/dev/tui/vercel-trusted-sources.js +1 -1
- package/dist/src/cli/invoke/result.d.ts +1 -1
- package/dist/src/cli/invoke/result.js +1 -1
- package/dist/src/cli/telemetry/preference.js +1 -1
- package/dist/src/client/index.d.ts +1 -3
- package/dist/src/client/index.js +1 -1
- package/dist/src/compiled/.vendor-stamp.json +4 -2
- package/dist/src/compiled/@agentclientprotocol/sdk/index.js +2 -51
- package/dist/src/compiled/@ai-sdk/anthropic/index.js +2 -2
- package/dist/src/compiled/@ai-sdk/google/index.js +7 -7
- package/dist/src/compiled/@ai-sdk/mcp/index.js +1 -1
- package/dist/src/compiled/@ai-sdk/openai/index.js +4 -4
- package/dist/src/compiled/@ai-sdk/otel/index.js +1 -1
- package/dist/src/compiled/@cfworker/json-schema/index.d.ts +18 -0
- package/dist/src/compiled/@cfworker/json-schema/index.js +2 -0
- package/dist/src/compiled/@modelcontextprotocol/server/index.js +9 -58
- package/dist/src/compiled/@opentelemetry/api/index.js +1 -1
- package/dist/src/compiled/@opentelemetry/otlp-transformer/index.js +1 -1
- package/dist/src/compiled/@photon-ai/chat-adapter-imessage/index.js +55 -55
- package/dist/src/compiled/@vercel/blob/index.js +14 -36
- package/dist/src/compiled/@vercel/oidc/index.js +6 -28
- package/dist/src/compiled/@vercel/otel/index.js +1 -1
- package/dist/src/compiled/@vercel/sandbox/index.js +13 -13
- package/dist/src/compiled/@vercel/sdk/LICENSE +201 -0
- package/dist/src/compiled/@vercel/sdk/index.d.ts +41 -0
- package/dist/src/compiled/@vercel/sdk/index.js +1 -0
- package/dist/src/compiled/@workflow/core/index.js +1 -1
- package/dist/src/compiled/@workflow/core/private.js +1 -1
- package/dist/src/compiled/@workflow/core/runtime/helpers.js +1 -1
- package/dist/src/compiled/@workflow/core/runtime.js +2 -2
- package/dist/src/compiled/@workflow/core/serialization.js +1 -1
- package/dist/src/compiled/@workflow/core/workflow.js +1 -1
- package/dist/src/compiled/@workflow/errors/index.js +1 -1
- package/dist/src/compiled/@workflow/world-local/index.js +5 -5
- package/dist/src/compiled/@workflow/world-vercel/index.js +16 -16
- package/dist/src/compiled/_chunks/client/core-CspsxXR-.js +52 -0
- package/dist/src/compiled/_chunks/client/rolldown-runtime-DK3Fl9T5.js +1 -0
- package/dist/src/compiled/_chunks/node/auth-Dztlx9pE.js +2 -0
- package/dist/src/compiled/_chunks/workflow/{attribute-changes-DFx4eluc.js → attribute-changes-89Nwz7XW.js} +1 -1
- package/dist/src/compiled/_chunks/workflow/{chunk-5MU5Z6L3-CrYztnvh.js → chunk-5MU5Z6L3-z9-dfnHp.js} +1 -1
- package/dist/src/compiled/_chunks/workflow/{chunk-NWCAEW5Y-ClfmNvkQ.js → chunk-NWCAEW5Y-8afLJrun.js} +1 -1
- package/dist/src/compiled/_chunks/workflow/{dist-C3919PVU.js → dist-C3ZE62yI.js} +3 -3
- package/dist/src/compiled/_chunks/workflow/dist-CNT2vjZ4.js +1 -0
- package/dist/src/compiled/_chunks/workflow/{dist-xTushGCp.js → dist-DtXwQbZr.js} +1 -1
- package/dist/src/compiled/_chunks/workflow/{esm-DyLz8Egm.js → esm-DtrPCf49.js} +1 -1
- package/dist/src/compiled/_chunks/workflow/{experimental-evaluation-D8_K_Pe9.js → experimental-evaluation-Dm32egEG.js} +2 -2
- package/dist/src/compiled/_chunks/workflow/frames-DnrfSd1P.js +3 -0
- package/dist/src/compiled/_chunks/workflow/{functions-C06vHfWP.js → functions-DpZiBxgQ.js} +1 -1
- package/dist/src/compiled/_chunks/workflow/{getMachineId-bsd-WEBNKY2R-DcIEvZzd.js → getMachineId-bsd-WEBNKY2R-D5OkV-EY.js} +1 -1
- package/dist/src/compiled/_chunks/workflow/{getMachineId-darwin-LT47KAXP-C4nRhfn9.js → getMachineId-darwin-LT47KAXP-BqwKrkSO.js} +1 -1
- package/dist/src/compiled/_chunks/workflow/{getMachineId-linux-LTVQO6VW-BqQf2T4W.js → getMachineId-linux-LTVQO6VW-CJlbJ4KP.js} +1 -1
- package/dist/src/compiled/_chunks/workflow/{getMachineId-unsupported-UKWBA27G-oYffWhib.js → getMachineId-unsupported-UKWBA27G-C4Y3-LZG.js} +1 -1
- package/dist/src/compiled/_chunks/workflow/{getMachineId-win-NLJKOPY6-CpL96LtN.js → getMachineId-win-NLJKOPY6-CsPs71SE.js} +1 -1
- package/dist/src/compiled/_chunks/workflow/{global-DFW-hO6M.js → global-DIlFoH2w.js} +1 -1
- package/dist/src/compiled/_chunks/workflow/{helpers-Bw52uyzw.js → helpers-k3zcudWr.js} +1 -1
- package/dist/src/compiled/_chunks/workflow/{logger-DFNCa8Nl.js → logger-Bzc8jWWj.js} +1 -1
- package/dist/src/compiled/_chunks/workflow/resume-hook-BmJ263ZR.js +1 -0
- package/dist/src/compiled/_chunks/workflow/{rolldown-runtime-DPpTSio4.js → rolldown-runtime-B_knIduE.js} +1 -1
- package/dist/src/compiled/_chunks/workflow/{run-BT6SQv5f.js → run-NLvREued.js} +1 -1
- package/dist/src/compiled/_chunks/workflow/{serialization-Cl0SYU0I.js → serialization-HCDeQWcR.js} +2 -2
- package/dist/src/compiled/_chunks/workflow/{signal-exit-B9U6kH7R.js → signal-exit-DZKTacNU.js} +1 -1
- package/dist/src/compiled/_chunks/workflow/sleep-Bi508qmg.js +1 -0
- package/dist/src/compiled/_chunks/workflow/{token-CrFhCmWs.js → token-1wSBbi5N.js} +1 -1
- package/dist/src/compiled/_chunks/workflow/{token-U5XEWlVM.js → token-BhlnqoHM.js} +1 -1
- package/dist/src/compiled/_chunks/workflow/{token-util-BkqzD0OM.js → token-util-Cm4Ec1Bg.js} +1 -1
- package/dist/src/compiled/_chunks/workflow/token-util-DaeRTzDa.js +5 -0
- package/dist/src/compiled/_chunks/workflow/{wait-until-Dzhr6tzf.js → wait-until-DXLZx3tU.js} +1 -1
- package/dist/src/compiled/_chunks/workflow/{wrapper-CKui_eTd.js → wrapper-CzrF_dmI.js} +3 -3
- package/dist/src/compiled/_chunks/workflow/ws-transport-BSM_Cl7a.js +1 -0
- package/dist/src/compiled/jose/index.js +1 -1
- package/dist/src/compiled/zod/index.js +1 -51
- package/dist/src/compiled/zod/v3.js +1 -0
- package/dist/src/compiled/zod/v4/core.js +1 -0
- package/dist/src/compiled/zod-validation-error/index.js +1 -1
- package/dist/src/compiler/extension-compatibility.d.ts +20 -14
- package/dist/src/compiler/extension-compatibility.js +1 -1
- package/dist/src/context/build-base-tool-context.js +1 -1
- package/dist/src/context/build-callback-context.js +1 -1
- package/dist/src/context/dynamic-skill-lifecycle.d.ts +3 -3
- package/dist/src/context/dynamic-skill-lifecycle.js +1 -1
- package/dist/src/context/keys.d.ts +18 -4
- package/dist/src/context/keys.js +1 -1
- package/dist/src/context/session-context.d.ts +5 -4
- package/dist/src/execution/dynamic-workflow/tool.js +1 -1
- package/dist/src/execution/route-child-delivery.js +1 -1
- package/dist/src/execution/sandbox/bindings/docker-templates.d.ts +6 -0
- package/dist/src/execution/sandbox/bindings/docker-templates.js +1 -1
- package/dist/src/execution/sandbox/bindings/docker.d.ts +6 -2
- package/dist/src/execution/sandbox/bindings/docker.js +1 -1
- package/dist/src/execution/sandbox/bindings/just-bash-runtime.d.ts +2 -2
- package/dist/src/execution/sandbox/bindings/just-bash.d.ts +2 -2
- package/dist/src/execution/sandbox/bindings/local-provider-utils.js +1 -1
- package/dist/src/execution/sandbox/bindings/microsandbox-lifecycle.d.ts +7 -2
- package/dist/src/execution/sandbox/bindings/microsandbox.d.ts +6 -2
- package/dist/src/execution/sandbox/bindings/vercel.d.ts +6 -3
- package/dist/src/execution/sandbox/bindings/vercel.js +1 -1
- package/dist/src/execution/sandbox/ensure.js +1 -1
- package/dist/src/execution/sandbox/logging-session.js +2 -2
- package/dist/src/execution/sandbox/provider-host.js +1 -1
- package/dist/src/execution/sandbox/session.d.ts +5 -2
- package/dist/src/execution/sandbox/session.js +1 -1
- package/dist/src/execution/session/event-sink.d.ts +7 -13
- package/dist/src/execution/session/event-sink.js +1 -1
- package/dist/src/execution/session/handoff.d.ts +2 -2
- package/dist/src/execution/session/handoff.js +1 -1
- package/dist/src/execution/session/turn-step.js +1 -1
- package/dist/src/execution/settle-cancelled-turn-step.js +1 -1
- package/dist/src/execution/skills/instructions.d.ts +6 -8
- package/dist/src/execution/skills/instructions.js +2 -2
- package/dist/src/execution/tools/agent-router-workflow.js +1 -1
- package/dist/src/execution/tools/agent-router.d.ts +1 -2
- package/dist/src/execution/tools/agent-router.js +1 -1
- package/dist/src/execution/tools/ask-question-workflow.js +1 -1
- package/dist/src/execution/tools/ask-question.d.ts +17 -18
- package/dist/src/execution/tools/ask-question.js +2 -2
- package/dist/src/execution/tools/connection-search.js +1 -1
- package/dist/src/execution/tools/load-skill.d.ts +9 -5
- package/dist/src/execution/tools/load-skill.js +1 -1
- package/dist/src/execution/tools/sleep-workflow.js +1 -1
- package/dist/src/execution/tools/sleep.d.ts +8 -9
- package/dist/src/execution/tools/sleep.js +1 -1
- package/dist/src/execution/tools/subagent/emit-event-step.d.ts +2 -1
- package/dist/src/execution/tools/subagent/emit-event-step.js +1 -1
- package/dist/src/execution/tools/subagent/task-agent-requests.js +1 -1
- package/dist/src/execution/tools/workflow/body.js +1 -1
- package/dist/src/extensions/code/extension/extension.d.ts +57 -0
- package/dist/src/extensions/code/extension/extension.js +1 -0
- package/dist/src/extensions/code/extension/hooks/authenticate.d.ts +2 -0
- package/dist/src/extensions/code/extension/hooks/authenticate.js +1 -0
- package/dist/src/extensions/code/extension/instructions.md +87 -0
- package/dist/src/extensions/code/extension/lib/command-failure.d.ts +7 -0
- package/dist/src/extensions/code/extension/lib/command-failure.js +2 -0
- package/dist/src/extensions/code/extension/lib/computer-use-driver-source.d.ts +14 -0
- package/dist/src/extensions/code/extension/lib/computer-use-driver-source.js +1309 -0
- package/dist/src/extensions/code/extension/lib/computer-use-sandbox.d.ts +9 -0
- package/dist/src/extensions/code/extension/lib/computer-use-sandbox.js +120 -0
- package/dist/src/extensions/code/extension/lib/computer-use.d.ts +36 -0
- package/dist/src/extensions/code/extension/lib/computer-use.js +78 -0
- package/dist/src/extensions/code/extension/lib/connect-authentication.d.ts +7 -0
- package/dist/src/extensions/code/extension/lib/connect-authentication.js +1 -0
- package/dist/src/extensions/code/extension/lib/credentials.d.ts +13 -0
- package/dist/src/extensions/code/extension/lib/credentials.js +3 -0
- package/dist/src/extensions/code/extension/lib/diagnostics.d.ts +30 -0
- package/dist/src/extensions/code/extension/lib/diagnostics.js +6 -0
- package/dist/src/extensions/code/extension/lib/generated-paths.d.ts +18 -0
- package/dist/src/extensions/code/extension/lib/generated-paths.js +2 -0
- package/dist/src/extensions/code/extension/lib/github-shell-schema.d.ts +11 -0
- package/dist/src/extensions/code/extension/lib/github-shell-schema.js +1 -0
- package/dist/src/extensions/code/extension/lib/github-shell.d.ts +53 -0
- package/dist/src/extensions/code/extension/lib/github-shell.js +1 -0
- package/dist/src/extensions/code/extension/lib/grep-search.d.ts +61 -0
- package/dist/src/extensions/code/extension/lib/grep-search.js +6 -0
- package/dist/src/extensions/code/extension/lib/guidelines.d.ts +25 -0
- package/dist/src/extensions/code/extension/lib/guidelines.js +2 -0
- package/dist/src/extensions/code/extension/lib/patch.d.ts +35 -0
- package/dist/src/extensions/code/extension/lib/patch.js +20 -0
- package/dist/src/extensions/code/extension/lib/prwatch-github.d.ts +70 -0
- package/dist/src/extensions/code/extension/lib/prwatch-github.js +1 -0
- package/dist/src/extensions/code/extension/lib/prwatch-registry.d.ts +27 -0
- package/dist/src/extensions/code/extension/lib/prwatch-registry.js +1 -0
- package/dist/src/extensions/code/extension/lib/prwatch.d.ts +2 -0
- package/dist/src/extensions/code/extension/lib/prwatch.js +1 -0
- package/dist/src/extensions/code/extension/lib/repository-root.d.ts +4 -0
- package/dist/src/extensions/code/extension/lib/repository-root.js +1 -0
- package/dist/src/extensions/code/extension/lib/sandbox.d.ts +12 -0
- package/dist/src/extensions/code/extension/lib/sandbox.js +2 -0
- package/dist/src/extensions/code/extension/lib/shell.d.ts +1 -0
- package/dist/src/extensions/code/extension/lib/shell.js +1 -0
- package/dist/src/extensions/code/extension/lib/signed-commit.d.ts +2 -0
- package/dist/src/extensions/code/extension/lib/signed-commit.js +130 -0
- package/dist/src/extensions/code/extension/lib/tooling.d.ts +27 -0
- package/dist/src/extensions/code/extension/lib/tooling.js +92 -0
- package/dist/src/extensions/code/extension/skills/investigate/SKILL.md +30 -0
- package/dist/src/extensions/code/extension/skills/lookup-agent-run/SKILL.md +29 -0
- package/dist/src/extensions/code/extension/skills/pr/SKILL.md +53 -0
- package/dist/src/extensions/code/extension/skills/review/SKILL.md +21 -0
- package/dist/src/extensions/code/extension/subagents/worker/agent.d.ts +17 -0
- package/dist/src/extensions/code/extension/subagents/worker/agent.js +1 -0
- package/dist/src/extensions/code/extension/subagents/worker/instructions.md +20 -0
- package/dist/src/extensions/code/extension/subagents/worker/sandbox.d.ts +2 -0
- package/dist/src/extensions/code/extension/subagents/worker/sandbox.js +1 -0
- package/dist/src/extensions/code/extension/subagents/worker/tools/glob.d.ts +1 -0
- package/dist/src/extensions/code/extension/subagents/worker/tools/glob.js +1 -0
- package/dist/src/extensions/code/extension/subagents/worker/tools/grep.d.ts +1 -0
- package/dist/src/extensions/code/extension/subagents/worker/tools/grep.js +1 -0
- package/dist/src/extensions/code/extension/subagents/worker/tools/load_skill.d.ts +2 -0
- package/dist/src/extensions/code/extension/subagents/worker/tools/load_skill.js +1 -0
- package/dist/src/extensions/code/extension/subagents/worker/tools/read_file.d.ts +1 -0
- package/dist/src/extensions/code/extension/subagents/worker/tools/read_file.js +1 -0
- package/dist/src/extensions/code/extension/subagents/worker/tools/web_fetch.d.ts +2 -0
- package/dist/src/extensions/code/extension/subagents/worker/tools/web_fetch.js +1 -0
- package/dist/src/extensions/code/extension/subagents/worker/tools/web_search.d.ts +2 -0
- package/dist/src/extensions/code/extension/subagents/worker/tools/web_search.js +1 -0
- package/dist/src/extensions/code/extension/subagents/worker/tools/write_file.d.ts +2 -0
- package/dist/src/extensions/code/extension/subagents/worker/tools/write_file.js +1 -0
- package/dist/src/extensions/code/extension/tools/apply_patch.d.ts +28 -0
- package/dist/src/extensions/code/extension/tools/apply_patch.js +2 -0
- package/dist/src/extensions/code/extension/tools/computer_use.d.ts +400 -0
- package/dist/src/extensions/code/extension/tools/computer_use.js +1 -0
- package/dist/src/extensions/code/extension/tools/gh.d.ts +27 -0
- package/dist/src/extensions/code/extension/tools/gh.js +1 -0
- package/dist/src/extensions/code/extension/tools/grep.d.ts +28 -0
- package/dist/src/extensions/code/extension/tools/grep.js +1 -0
- package/dist/src/extensions/code/tools.d.ts +4 -0
- package/dist/src/extensions/code/tools.js +1 -0
- package/dist/src/harness/compaction.js +1 -1
- package/dist/src/harness/final-output.js +1 -1
- package/dist/src/harness/input-extraction.js +1 -1
- package/dist/src/harness/tool-loop.js +2 -2
- package/dist/src/harness/tools.js +1 -1
- package/dist/src/internal/application/optional-package-import.d.ts +9 -0
- package/dist/src/internal/application/optional-package-import.js +1 -0
- package/dist/src/internal/application/optional-package-install.d.ts +1 -5
- package/dist/src/internal/application/optional-package-install.js +2 -2
- package/dist/src/internal/application/package.js +1 -1
- package/dist/src/node_modules/.pnpm/@vercel_cli-config@0.2.7/node_modules/@vercel/cli-config/dist/index.js +21 -0
- package/dist/src/node_modules/.pnpm/@vercel_cli-exec@1.0.1/node_modules/@vercel/cli-exec/dist/envpath.js +1 -0
- package/dist/src/node_modules/.pnpm/@vercel_cli-exec@1.0.1/node_modules/@vercel/cli-exec/dist/errors.js +2 -0
- package/dist/src/node_modules/.pnpm/@vercel_cli-exec@1.0.1/node_modules/@vercel/cli-exec/dist/errutils.js +1 -0
- package/dist/src/node_modules/.pnpm/@vercel_cli-exec@1.0.1/node_modules/@vercel/cli-exec/dist/exec.js +1 -0
- package/dist/src/node_modules/.pnpm/@vercel_cli-exec@1.0.1/node_modules/@vercel/cli-exec/dist/fsutils.js +1 -0
- package/dist/src/node_modules/.pnpm/@vercel_cli-exec@1.0.1/node_modules/@vercel/cli-exec/dist/index.js +1 -0
- package/dist/src/node_modules/.pnpm/@vercel_cli-exec@1.0.1/node_modules/@vercel/cli-exec/dist/lookup.js +1 -0
- package/dist/src/node_modules/.pnpm/@vercel_cli-exec@1.0.1/node_modules/@vercel/cli-exec/dist/safety.js +1 -0
- package/dist/src/node_modules/.pnpm/@vercel_connect@2.2.0_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_37d5e4f23f0f03cba2e0819e67e81b38/node_modules/@vercel/connect/dist/authorization.js +1 -0
- package/dist/src/node_modules/.pnpm/@vercel_connect@2.2.0_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_37d5e4f23f0f03cba2e0819e67e81b38/node_modules/@vercel/connect/dist/connector.js +1 -0
- package/dist/src/node_modules/.pnpm/@vercel_connect@2.2.0_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_37d5e4f23f0f03cba2e0819e67e81b38/node_modules/@vercel/connect/dist/index.js +1 -0
- package/dist/src/node_modules/.pnpm/@vercel_connect@2.2.0_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_37d5e4f23f0f03cba2e0819e67e81b38/node_modules/@vercel/connect/dist/installation.js +1 -0
- package/dist/src/node_modules/.pnpm/@vercel_connect@2.2.0_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_37d5e4f23f0f03cba2e0819e67e81b38/node_modules/@vercel/connect/dist/internal/base-url.js +1 -0
- package/dist/src/node_modules/.pnpm/@vercel_connect@2.2.0_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_37d5e4f23f0f03cba2e0819e67e81b38/node_modules/@vercel/connect/dist/internal/default-scopes.js +1 -0
- package/dist/src/node_modules/.pnpm/@vercel_connect@2.2.0_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_37d5e4f23f0f03cba2e0819e67e81b38/node_modules/@vercel/connect/dist/internal/env.js +1 -0
- package/dist/src/node_modules/.pnpm/@vercel_connect@2.2.0_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_37d5e4f23f0f03cba2e0819e67e81b38/node_modules/@vercel/connect/dist/internal/url-validation.js +1 -0
- package/dist/src/node_modules/.pnpm/@vercel_connect@2.2.0_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_37d5e4f23f0f03cba2e0819e67e81b38/node_modules/@vercel/connect/dist/token.js +1 -0
- package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.8/node_modules/@vercel/oidc/dist/auth-errors.js +1 -0
- package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.8/node_modules/@vercel/oidc/dist/exchange-vercel-oidc-token.js +1 -0
- package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.8/node_modules/@vercel/oidc/dist/get-context.js +1 -0
- package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.8/node_modules/@vercel/oidc/dist/get-vercel-oidc-token-sync.js +1 -0
- package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.8/node_modules/@vercel/oidc/dist/get-vercel-oidc-token-with-refresh.js +2 -0
- package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.8/node_modules/@vercel/oidc/dist/index.js +1 -0
- package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.8/node_modules/@vercel/oidc/dist/oauth.js +1 -0
- package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.8/node_modules/@vercel/oidc/dist/token-error.js +1 -0
- package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.8/node_modules/@vercel/oidc/dist/token-io.js +1 -0
- package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.8/node_modules/@vercel/oidc/dist/token-util.js +2 -0
- package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.8/node_modules/@vercel/oidc/dist/token.js +1 -0
- package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.8/node_modules/@vercel/oidc/dist/verify-vercel-oidc-token.js +1 -0
- package/dist/src/node_modules/.pnpm/@vercel_oidc@3.8.8/node_modules/@vercel/oidc/dist/version.js +1 -0
- package/dist/src/node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/index.js +1 -0
- package/dist/src/node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/lib/enoent.js +1 -0
- package/dist/src/node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/lib/parse.js +1 -0
- package/dist/src/node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/lib/util/escape.js +1 -0
- package/dist/src/node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/lib/util/readShebang.js +1 -0
- package/dist/src/node_modules/.pnpm/cross-spawn@7.0.6/node_modules/cross-spawn/lib/util/resolveCommand.js +1 -0
- package/dist/src/node_modules/.pnpm/execa@5.1.1/node_modules/execa/index.js +1 -0
- package/dist/src/node_modules/.pnpm/execa@5.1.1/node_modules/execa/lib/command.js +1 -0
- package/dist/src/node_modules/.pnpm/execa@5.1.1/node_modules/execa/lib/error.js +2 -0
- package/dist/src/node_modules/.pnpm/execa@5.1.1/node_modules/execa/lib/kill.js +1 -0
- package/dist/src/node_modules/.pnpm/execa@5.1.1/node_modules/execa/lib/promise.js +1 -0
- package/dist/src/node_modules/.pnpm/execa@5.1.1/node_modules/execa/lib/stdio.js +1 -0
- package/dist/src/node_modules/.pnpm/execa@5.1.1/node_modules/execa/lib/stream.js +1 -0
- package/dist/src/node_modules/.pnpm/get-stream@6.0.1/node_modules/get-stream/buffer-stream.js +1 -0
- package/dist/src/node_modules/.pnpm/get-stream@6.0.1/node_modules/get-stream/index.js +1 -0
- package/dist/src/node_modules/.pnpm/human-signals@2.1.0/node_modules/human-signals/build/src/core.js +1 -0
- package/dist/src/node_modules/.pnpm/human-signals@2.1.0/node_modules/human-signals/build/src/main.js +1 -0
- package/dist/src/node_modules/.pnpm/human-signals@2.1.0/node_modules/human-signals/build/src/realtime.js +1 -0
- package/dist/src/node_modules/.pnpm/human-signals@2.1.0/node_modules/human-signals/build/src/signals.js +1 -0
- package/dist/src/node_modules/.pnpm/is-stream@2.0.1/node_modules/is-stream/index.js +1 -0
- package/dist/src/node_modules/.pnpm/isexe@2.0.0/node_modules/isexe/index.js +1 -0
- package/dist/src/node_modules/.pnpm/isexe@2.0.0/node_modules/isexe/mode.js +1 -0
- package/dist/src/node_modules/.pnpm/isexe@2.0.0/node_modules/isexe/windows.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/index.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwe/compact/decrypt.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwe/compact/encrypt.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwe/flattened/decrypt.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwe/flattened/encrypt.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwe/general/decrypt.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwe/general/encrypt.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwk/embedded.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwk/thumbprint.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwks/local.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwks/remote.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jws/compact/sign.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jws/compact/verify.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jws/flattened/sign.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jws/flattened/verify.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jws/general/sign.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jws/general/verify.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwt/decrypt.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwt/encrypt.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwt/produce.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwt/sign.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwt/unsecured.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/jwt/verify.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/key/export.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/key/generate_key_pair.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/key/generate_secret.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/key/import.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/aesgcmkw.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/buffer_utils.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/cek.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/check_iv_length.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/check_key_type.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/check_p2s.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/crypto_key.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/decrypt_key_management.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/encrypt_key_management.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/epoch.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/invalid_key_input.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/is_disjoint.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/is_jwk.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/is_object.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/iv.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/jwt_claims_set.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/private_symbols.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/secs.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/validate_algorithms.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/lib/validate_crit.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/aeskw.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/asn1.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/base64url.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/cbc_tag.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/check_cek_length.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/check_key_length.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/ciphers.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/decrypt.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/digest.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/dsa_digest.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/ecdhes.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/encrypt.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/fetch_jwks.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/generate.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/get_named_curve.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/get_sign_verify_key.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/hmac_digest.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/is_key_like.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/is_key_object.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/jwk_to_key.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/key_to_jwk.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/node_key.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/normalize_key.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/pbes2kw.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/random.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/rsaes.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/runtime.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/sign.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/timing_safe_equal.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/verify.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/runtime/webcrypto.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/util/base64url.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/util/decode_jwt.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/util/decode_protected_header.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/util/errors.js +1 -0
- package/dist/src/node_modules/.pnpm/jose@5.10.0/node_modules/jose/dist/node/cjs/util/runtime.js +1 -0
- package/dist/src/node_modules/.pnpm/merge-stream@2.0.0/node_modules/merge-stream/index.js +1 -0
- package/dist/src/node_modules/.pnpm/mimic-fn@2.1.0/node_modules/mimic-fn/index.js +1 -0
- package/dist/src/node_modules/.pnpm/npm-run-path@4.0.1/node_modules/npm-run-path/index.js +1 -0
- package/dist/src/node_modules/.pnpm/onetime@5.1.2/node_modules/onetime/index.js +1 -0
- package/dist/src/node_modules/.pnpm/path-key@3.1.1/node_modules/path-key/index.js +1 -0
- package/dist/src/node_modules/.pnpm/shebang-command@2.0.0/node_modules/shebang-command/index.js +1 -0
- package/dist/src/node_modules/.pnpm/shebang-regex@3.0.0/node_modules/shebang-regex/index.js +1 -0
- package/dist/src/node_modules/.pnpm/signal-exit@3.0.7/node_modules/signal-exit/index.js +1 -0
- package/dist/src/node_modules/.pnpm/signal-exit@3.0.7/node_modules/signal-exit/signals.js +1 -0
- package/dist/src/node_modules/.pnpm/strip-final-newline@2.0.0/node_modules/strip-final-newline/index.js +2 -0
- package/dist/src/node_modules/.pnpm/which@2.0.2/node_modules/which/which.js +1 -0
- package/dist/src/public/channels/github/checkout.d.ts +7 -2
- package/dist/src/public/channels/github/checkout.js +1 -1
- package/dist/src/public/channels/github/defaults.js +1 -1
- package/dist/src/public/channels/slack/api-errors.d.ts +33 -0
- package/dist/src/public/channels/slack/api-errors.js +1 -0
- package/dist/src/public/channels/slack/api.js +1 -1
- package/dist/src/public/channels/slack/interaction-cards.js +1 -1
- package/dist/src/public/channels/slack/interactions.js +1 -1
- package/dist/src/public/definitions/sandbox.d.ts +1 -1
- package/dist/src/public/memory/file/provider.js +1 -1
- package/dist/src/public/sandbox/docker.d.ts +7 -0
- package/dist/src/public/sandbox/index.d.ts +1 -1
- package/dist/src/public/sandbox/microsandbox.d.ts +7 -0
- package/dist/src/public/sandbox/vercel.d.ts +7 -0
- package/dist/src/public/skills/index.d.ts +1 -2
- package/dist/src/runtime/connections/mcp-client.d.ts +0 -7
- package/dist/src/runtime/connections/mcp-client.js +1 -1
- package/dist/src/runtime/connections/openapi-client.d.ts +0 -3
- package/dist/src/runtime/connections/openapi-client.js +1 -1
- package/dist/src/runtime/workspace/seed-files.js +1 -1
- package/dist/src/sandbox/providers/docker.d.ts +4 -4
- package/dist/src/sandbox/providers/just-bash.d.ts +2 -2
- package/dist/src/sandbox/providers/microsandbox.d.ts +4 -4
- package/dist/src/sandbox/providers/vercel.d.ts +4 -3
- package/dist/src/sandbox/state.d.ts +2 -0
- package/dist/src/self-modification/config.d.ts +6 -0
- package/dist/src/self-modification/extension/config-schema.d.ts +25 -0
- package/dist/src/self-modification/extension/config-schema.js +1 -0
- package/dist/src/self-modification/extension/extension.d.ts +3 -47
- package/dist/src/self-modification/extension/extension.js +1 -1
- package/dist/src/self-modification/extension/subagents/agent/tools/registry_add.js +1 -1
- package/dist/src/self-modification/git-workspace.d.ts +5 -1
- package/dist/src/self-modification/git.d.ts +5 -1
- package/dist/src/services/dev-client/request-headers.d.ts +1 -1
- package/dist/src/services/dev-client/request-headers.js +1 -1
- package/dist/src/setup/flows/model.d.ts +0 -108
- package/dist/src/setup/flows/model.js +1 -1
- package/dist/src/setup/integrations/discord/api.js +1 -1
- package/dist/src/setup/integrations/discord/connect.js +1 -1
- package/dist/src/setup/integrations/github/connect.js +1 -1
- package/dist/src/setup/integrations/linear/connect.js +1 -1
- package/dist/src/setup/integrations/linq/connect.js +1 -1
- package/dist/src/setup/integrations/photon/connect.js +1 -1
- package/dist/src/setup/integrations/teams/connect.js +1 -1
- package/dist/src/setup/project-resolution.js +1 -1
- package/dist/src/setup/scaffold/create/project.js +1 -1
- package/dist/src/setup/slack-connect.d.ts +1 -1
- package/dist/src/setup/slack-connect.js +1 -1
- package/dist/src/setup/vercel-api-failure.js +1 -1
- package/dist/src/setup/vercel-deployment.js +1 -1
- package/dist/src/setup/vercel-project-api.d.ts +1 -1
- package/dist/src/setup/vercel-project-api.js +1 -1
- package/dist/src/setup/vercel-project-framework.js +1 -1
- package/dist/src/setup/vercel-project.js +0 -0
- package/dist/src/shared/connection-types.d.ts +0 -2
- package/dist/src/shared/sandbox-network-policy.d.ts +5 -4
- package/dist/src/shared/sandbox-session.d.ts +0 -15
- package/dist/src/shared/skill-package.d.ts +3 -0
- package/dist/src/shared/skill-package.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/json.d.ts +72 -2
- package/dist/src/tasks/json.js +1 -1
- package/dist/src/tools/framework/agent-contract.d.ts +7 -6
- package/dist/src/tools/framework/agent-contract.js +1 -1
- package/dist/src/tools/framework/agent.d.ts +4 -13
- package/dist/src/tools/framework/task-cancel.d.ts +1 -17
- package/dist/src/tools/framework/task-contract.d.ts +16 -137
- package/dist/src/tools/framework/task-contract.js +1 -1
- package/dist/src/tools/provided/bash.d.ts +11 -12
- package/dist/src/tools/provided/bash.js +1 -1
- package/dist/src/tools/provided/glob.d.ts +13 -14
- package/dist/src/tools/provided/glob.js +1 -1
- package/dist/src/tools/provided/grep.d.ts +17 -18
- package/dist/src/tools/provided/grep.js +1 -1
- package/dist/src/tools/provided/read-file.d.ts +14 -15
- package/dist/src/tools/provided/read-file.js +1 -1
- package/dist/src/tools/provided/web-fetch.d.ts +13 -18
- package/dist/src/tools/provided/web-fetch.js +1 -1
- package/dist/src/tools/provided/workflow.js +1 -1
- package/dist/src/tools/provided/write-file.d.ts +10 -11
- package/dist/src/tools/provided/write-file.js +1 -1
- package/dist/src/tools/schema.d.ts +40 -10
- package/dist/src/tools/schema.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 +1 -1
- package/docs/channels/slack.mdx +1 -1
- package/docs/connections/overview.mdx +1 -1
- package/docs/extensions.md +4 -0
- package/docs/getting-started.mdx +1 -1
- package/docs/guides/deployment/vercel.mdx +6 -0
- package/docs/guides/dev-tui.md +1 -1
- package/docs/guides/dynamic-capabilities.md +2 -0
- package/docs/guides/hooks.md +6 -3
- package/docs/guides/instrumentation/agent-runs.mdx +101 -0
- package/docs/guides/instrumentation/instrumentation.mdx +2 -1
- package/docs/guides/instrumentation/meta.json +1 -1
- package/docs/guides/instrumentation/migration.md +5 -1
- package/docs/guides/instrumentation/otel.mdx +8 -27
- package/docs/guides/self-modification.md +37 -0
- package/docs/guides/session-context.md +11 -13
- package/docs/install-integrations.mdx +1 -1
- package/docs/meta.json +1 -0
- package/docs/reference/cli.md +1 -1
- package/docs/reference/typescript-api.md +1 -2
- package/docs/sandbox/index.mdx +11 -0
- package/docs/skills.mdx +3 -10
- package/docs/subagents/index.mdx +1 -1
- package/docs/tools/overview.mdx +7 -1
- package/docs/tools/workflows.mdx +1 -1
- package/package.json +30 -1
- package/dist/src/cli/dev/tui/model-picker.d.ts +0 -50
- package/dist/src/cli/dev/tui/model-picker.js +0 -1
- package/dist/src/compiled/_chunks/client/errors-Cd0_QQdM.js +0 -2
- package/dist/src/compiled/_chunks/node/auth-DDrvYko5.js +0 -2
- package/dist/src/compiled/_chunks/node/schemas-g-rLPCNX.js +0 -50
- package/dist/src/compiled/_chunks/workflow/coerce-D0oqvQ_w.js +0 -1
- package/dist/src/compiled/_chunks/workflow/dist-DjECvUyK.js +0 -2
- package/dist/src/compiled/_chunks/workflow/frames-D_Q-7A1N.js +0 -3
- package/dist/src/compiled/_chunks/workflow/resume-hook-BhA_nDEV.js +0 -1
- package/dist/src/compiled/_chunks/workflow/schemas-4CmFgxN_.js +0 -50
- package/dist/src/compiled/_chunks/workflow/sleep-DB4AH9-A.js +0 -1
- package/dist/src/compiled/_chunks/workflow/token-util-pP4KRRl0.js +0 -27
- package/dist/src/compiled/_chunks/workflow/ws-transport-BpTMh40s.js +0 -1
- package/dist/src/node_modules/.pnpm/@vercel_sdk@1.28.8/node_modules/@vercel/sdk/esm/lib/primitives.js +0 -1
- package/dist/src/node_modules/.pnpm/@vercel_sdk@1.28.8/node_modules/@vercel/sdk/esm/lib/schemas.js +0 -1
- package/dist/src/node_modules/.pnpm/@vercel_sdk@1.28.8/node_modules/@vercel/sdk/esm/models/aclaction.js +0 -1
- package/dist/src/node_modules/.pnpm/@vercel_sdk@1.28.8/node_modules/@vercel/sdk/esm/models/sdkvalidationerror.js +0 -1
- package/dist/src/node_modules/.pnpm/@vercel_sdk@1.28.8/node_modules/@vercel/sdk/esm/models/updateprojectblock.js +0 -1
- package/dist/src/node_modules/.pnpm/@vercel_sdk@1.28.8/node_modules/@vercel/sdk/esm/models/updateprojectprojectsbranchmatcher.js +0 -1
- package/dist/src/node_modules/.pnpm/@vercel_sdk@1.28.8/node_modules/@vercel/sdk/esm/types/defaultToZeroValue.js +0 -1
- package/dist/src/node_modules/.pnpm/@vercel_sdk@1.28.8/node_modules/@vercel/sdk/esm/types/fp.js +0 -1
- package/dist/src/node_modules/.pnpm/@vercel_sdk@1.28.8/node_modules/@vercel/sdk/esm/types/primitives.js +0 -1
- package/dist/src/node_modules/.pnpm/@vercel_sdk@1.28.8/node_modules/@vercel/sdk/esm/types/rfcdate.js +0 -1
- package/dist/src/node_modules/.pnpm/@vercel_sdk@1.28.8/node_modules/@vercel/sdk/esm/types/smartUnion.js +0 -1
- package/dist/src/node_modules/.pnpm/@vercel_sdk@1.28.8/node_modules/@vercel/sdk/esm/types/unrecognized.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/index.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v3/ZodError.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v3/errors.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v3/external.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v3/helpers/errorUtil.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v3/helpers/parseUtil.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v3/helpers/typeAliases.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v3/helpers/util.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v3/index.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v3/locales/en.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v3/types.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/classic/checks.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/classic/coerce.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/classic/compat.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/classic/deep-partial.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/classic/errors.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/classic/external.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/classic/from-json-schema.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/classic/in-out.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/classic/iso.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/classic/parse.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/classic/schemas.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/core/api.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/core/checks.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/core/compile.js +0 -2
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/core/core.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/core/doc.js +0 -3
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/core/errors.js +0 -2
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/core/index.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/core/json-schema-generator.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/core/json-schema-processors.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/core/json-schema.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/core/memoizer.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/core/parse.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/core/regexes.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/core/registries.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/core/schemas.js +0 -46
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/core/to-json-schema.js +0 -3
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/core/util.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/core/versions.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/core/visit.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/ar.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/az.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/be.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/bg.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/bn.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/ca.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/ckb.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/cs.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/da.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/de.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/el.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/en.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/eo.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/es.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/fa.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/fi.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/fr-CA.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/fr.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/gu.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/he.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/hi.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/hr.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/hu.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/hy.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/id.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/index.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/is.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/it.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/ja.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/ka.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/kh.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/km.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/kn.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/ko.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/lt.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/mk.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/ms.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/ne.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/nl.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/nn.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/no.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/ota.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/pl.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/ps.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/pt-BR.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/pt.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/ro.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/ru.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/sk.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/sl.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/sv.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/ta.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/th.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/tk.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/tr.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/ua.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/uk.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/ur.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/uz.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/vi.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/yo.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/zh-CN.js +0 -1
- package/dist/src/node_modules/.pnpm/zod@4.5.4/node_modules/zod/v4/locales/zh-TW.js +0 -1
- package/dist/src/runtime/skills/sandbox-access.d.ts +0 -22
- package/dist/src/runtime/skills/sandbox-access.js +0 -1
- package/dist/src/shared/skill-types.d.ts +0 -22
- package/dist/src/shared/skill-types.js +0 -1
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { SandboxSession } from "eve/sandbox";
|
|
2
|
+
type ComputerUseSandbox = Pick<SandboxSession, "resolvePath" | "run" | "writeTextFile">;
|
|
3
|
+
/** Include this in the consumer sandbox revalidation key so cached templates rebuild when computer use changes. */
|
|
4
|
+
export declare const COMPUTER_USE_REVALIDATION_KEY = "computer-use:0.12.5:2026-09-17.1";
|
|
5
|
+
/** Install the desktop packages and embedded driver required by computer use. */
|
|
6
|
+
export declare function installComputerUse(sandbox: ComputerUseSandbox): Promise<void>;
|
|
7
|
+
/** Start the managed display and driver for one consumer sandbox session. */
|
|
8
|
+
export declare function startComputerUse(sandbox: Pick<SandboxSession, "resolvePath" | "run">): Promise<void>;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import{shellQuote}from"./shell.js";import{commandFailureDetail}from"./command-failure.js";import{COMPUTER_USE_DRIVER_SOURCES}from"./computer-use-driver-source.js";import{computerUseDisplayCommand,computerUseDriverStartCommand,computerUsePaths}from"./computer-use.js";const COMPUTER_USE_REVALIDATION_KEY=`computer-use:0.12.5:2026-09-17.1`;async function installComputerUse(e){let t=computerUsePaths(e),n=e.resolvePath(`.eve-code/install-computer-use.sh`);await e.run({command:`mkdir -p ${shellQuote(t.driverRoot)}`}),await Promise.all([...Object.entries(COMPUTER_USE_DRIVER_SOURCES).map(([n,r])=>e.writeTextFile({path:`${t.driverRoot}/${n}`,content:r})),e.writeTextFile({path:n,content:computerUseInstallScript(e)})]);let r=await e.run({command:[`set -e`,`if [ "$(id -u)" = 0 ]; then`,` bash ${shellQuote(n)}`,`elif command -v sudo >/dev/null 2>&1; then`,` sudo -n bash ${shellQuote(n)}`,`else`,` echo 'computer-use requires an apt-based sandbox image with root or passwordless sudo' >&2`,` exit 1`,`fi`].join(`
|
|
2
|
+
`)});if(r.exitCode!==0)throw Error(`computer-use installation failed (exit ${r.exitCode}): ${commandFailureDetail(r)}`)}async function startComputerUse(e){let t={TERM:`xterm-256color`},n=await e.run({command:computerUseDisplayCommand(e),env:t});if(n.exitCode!==0)throw Error(`computer-use display startup failed (exit ${n.exitCode}): ${commandFailureDetail(n)}`);let r=await e.run({command:computerUseDriverStartCommand(e),env:t});if(r.exitCode!==0)throw Error(`computer-use driver startup failed (exit ${r.exitCode}): ${commandFailureDetail(r)}`)}function computerUseInstallScript(e){let t=computerUsePaths(e);return`#!/usr/bin/env bash
|
|
3
|
+
set -euo pipefail
|
|
4
|
+
|
|
5
|
+
command -v apt-get >/dev/null || {
|
|
6
|
+
echo "computer-use requires an apt-based sandbox image" >&2
|
|
7
|
+
exit 1
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
apt-get update
|
|
11
|
+
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends ca-certificates curl
|
|
12
|
+
apt-get clean
|
|
13
|
+
|
|
14
|
+
install -d -m 0755 /etc/apt/keyrings
|
|
15
|
+
curl -fsSL https://packages.mozilla.org/apt/repo-signing-key.gpg \\
|
|
16
|
+
-o /etc/apt/keyrings/packages.mozilla.org.asc
|
|
17
|
+
printf '%s\\n' \\
|
|
18
|
+
'Types: deb' \\
|
|
19
|
+
'URIs: https://packages.mozilla.org/apt' \\
|
|
20
|
+
'Suites: mozilla' \\
|
|
21
|
+
'Components: main' \\
|
|
22
|
+
'Architectures: amd64 arm64' \\
|
|
23
|
+
'Signed-By: /etc/apt/keyrings/packages.mozilla.org.asc' \\
|
|
24
|
+
> /etc/apt/sources.list.d/mozilla.sources
|
|
25
|
+
printf '%s\\n' \\
|
|
26
|
+
'Package: *' \\
|
|
27
|
+
'Pin: origin packages.mozilla.org' \\
|
|
28
|
+
'Pin-Priority: 1000' \\
|
|
29
|
+
> /etc/apt/preferences.d/mozilla
|
|
30
|
+
|
|
31
|
+
apt-get update
|
|
32
|
+
FIREFOX_ESR_VERSION="$(apt-cache madison firefox-esr | awk '$3 ~ /^140\\./ { print $3; exit }')"
|
|
33
|
+
if [[ -z "\${FIREFOX_ESR_VERSION}" ]]; then
|
|
34
|
+
echo "Mozilla's repository does not offer the Firefox ESR 140 line" >&2
|
|
35
|
+
exit 1
|
|
36
|
+
fi
|
|
37
|
+
|
|
38
|
+
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \\
|
|
39
|
+
at-spi2-core \\
|
|
40
|
+
ca-certificates \\
|
|
41
|
+
curl \\
|
|
42
|
+
dbus-x11 \\
|
|
43
|
+
ffmpeg \\
|
|
44
|
+
fontconfig \\
|
|
45
|
+
gnome-themes-extra \\
|
|
46
|
+
gtk2-engines-murrine \\
|
|
47
|
+
libxi6 \\
|
|
48
|
+
libxkbcommon0 \\
|
|
49
|
+
sassc \\
|
|
50
|
+
x11-utils \\
|
|
51
|
+
xclip \\
|
|
52
|
+
xdotool \\
|
|
53
|
+
xfce4 \\
|
|
54
|
+
xterm \\
|
|
55
|
+
xvfb \\
|
|
56
|
+
xz-utils
|
|
57
|
+
apt-get clean
|
|
58
|
+
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \\
|
|
59
|
+
"firefox-esr=\${FIREFOX_ESR_VERSION}"
|
|
60
|
+
apt-get clean
|
|
61
|
+
|
|
62
|
+
GEIST_MONO_VERSION=3.4.0
|
|
63
|
+
GEIST_MONO_SHA256=43ef3d73cadddea5be746e20c9f27fbaa59ceb106b8b26f7245ba2de2e46b1f6
|
|
64
|
+
COLLOID_COMMIT=fd805dbeeacb12f7971b98408c415c3f472e5aef
|
|
65
|
+
COLLOID_SHA256=0f19442b9bd1\
|
|
66
|
+
e08e93a223518ce70cd2e47e05ed530fd3345c7e79ea75ea5f83
|
|
67
|
+
TEMP_DIR="$(mktemp -d)"
|
|
68
|
+
trap 'rm -rf "\${TEMP_DIR}"' EXIT
|
|
69
|
+
|
|
70
|
+
curl -fsSL \\
|
|
71
|
+
"https://github.com/ryanoasis/nerd-fonts/releases/download/v\${GEIST_MONO_VERSION}/GeistMono.tar.xz" \\
|
|
72
|
+
-o "\${TEMP_DIR}/geist-mono.tar.xz"
|
|
73
|
+
echo "\${GEIST_MONO_SHA256} \${TEMP_DIR}/geist-mono.tar.xz" | sha256sum --check --status
|
|
74
|
+
install -d -m 0755 /usr/local/share/fonts/geist-mono
|
|
75
|
+
tar -xJf "\${TEMP_DIR}/geist-mono.tar.xz" -C /usr/local/share/fonts/geist-mono \\
|
|
76
|
+
GeistMonoNerdFont-Regular.otf GeistMonoNerdFont-Bold.otf
|
|
77
|
+
fc-cache -f
|
|
78
|
+
|
|
79
|
+
curl -fsSL \\
|
|
80
|
+
"https://github.com/vinceliuice/Colloid-gtk-theme/archive/\${COLLOID_COMMIT}.tar.gz" \\
|
|
81
|
+
-o "\${TEMP_DIR}/colloid.tar.gz"
|
|
82
|
+
echo "\${COLLOID_SHA256} \${TEMP_DIR}/colloid.tar.gz" | sha256sum --check --status
|
|
83
|
+
mkdir -p "\${TEMP_DIR}/colloid"
|
|
84
|
+
tar -xzf "\${TEMP_DIR}/colloid.tar.gz" -C "\${TEMP_DIR}/colloid" --strip-components=1
|
|
85
|
+
(
|
|
86
|
+
cd "\${TEMP_DIR}/colloid"
|
|
87
|
+
./install.sh -d /usr/share/themes -n Colloid -t default -c dark --tweaks black
|
|
88
|
+
SRC_DIR="$(pwd)/src"
|
|
89
|
+
source ./assets.sh
|
|
90
|
+
blackness=true
|
|
91
|
+
colorscheme=false
|
|
92
|
+
normal=false
|
|
93
|
+
make_assets /usr/share/themes Colloid '' -Dark '' '' ''
|
|
94
|
+
test -f /usr/share/themes/Colloid-Dark/xfwm4/close-active.svg
|
|
95
|
+
test -f /usr/share/themes/Colloid-Dark/xfwm4/hide-active.svg
|
|
96
|
+
test -f /usr/share/themes/Colloid-Dark/xfwm4/maximize-active.svg
|
|
97
|
+
)
|
|
98
|
+
|
|
99
|
+
install -d -m 0755 ${shellQuote(t.managedBrowserRoot)}
|
|
100
|
+
cat >${shellQuote(`${t.managedBrowserRoot}/xdg-open`)} <<'EOF'
|
|
101
|
+
#!/usr/bin/env bash
|
|
102
|
+
set -euo pipefail
|
|
103
|
+
url="\${1:-}"
|
|
104
|
+
[[ "\${url}" =~ ^https?:// ]] || { echo "managed xdg-open accepts HTTP(S) URLs only" >&2; exit 2; }
|
|
105
|
+
export DISPLAY=:99
|
|
106
|
+
window="$(xdotool search --onlyvisible --class firefox-esr | head -n 1)"
|
|
107
|
+
[[ -n "\${window}" ]] || { echo "managed Firefox is not running" >&2; exit 1; }
|
|
108
|
+
xdotool windowactivate --sync "\${window}"
|
|
109
|
+
xdotool key --clearmodifiers ctrl+l
|
|
110
|
+
xdotool type --clearmodifiers --delay 1 "\${url}"
|
|
111
|
+
xdotool key --clearmodifiers Return
|
|
112
|
+
EOF
|
|
113
|
+
chmod 0755 ${shellQuote(`${t.managedBrowserRoot}/xdg-open`)}
|
|
114
|
+
ln -sfn xdg-open ${shellQuote(`${t.managedBrowserRoot}/x-www-browser`)}
|
|
115
|
+
ln -sfn xdg-open ${shellQuote(`${t.managedBrowserRoot}/sensible-browser`)}
|
|
116
|
+
|
|
117
|
+
npm install --prefix ${shellQuote(t.driverRoot)} --ignore-scripts --no-audit --no-fund
|
|
118
|
+
apt-get clean
|
|
119
|
+
rm -rf /var/lib/apt/lists/*
|
|
120
|
+
`}export{COMPUTER_USE_REVALIDATION_KEY,installComputerUse,startComputerUse};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { SandboxSession } from "eve/sandbox";
|
|
2
|
+
type PathSandbox = Pick<SandboxSession, "resolvePath">;
|
|
3
|
+
export declare function computerUsePaths(sandbox: PathSandbox): {
|
|
4
|
+
root: string;
|
|
5
|
+
driverRoot: string;
|
|
6
|
+
driverSocket: string;
|
|
7
|
+
latestScreenshot: string;
|
|
8
|
+
managedBrowserRoot: string;
|
|
9
|
+
};
|
|
10
|
+
type LaunchAction = {
|
|
11
|
+
action: "launch";
|
|
12
|
+
app: "xterm";
|
|
13
|
+
instance?: "primary" | "secondary";
|
|
14
|
+
} | {
|
|
15
|
+
action: "launch";
|
|
16
|
+
app: "firefox";
|
|
17
|
+
url?: string;
|
|
18
|
+
};
|
|
19
|
+
type DriverAction = {
|
|
20
|
+
action: string;
|
|
21
|
+
} & Record<string, unknown>;
|
|
22
|
+
export interface ComputerUseDriverRequest {
|
|
23
|
+
action: DriverAction;
|
|
24
|
+
screenshotPath: string;
|
|
25
|
+
}
|
|
26
|
+
export declare function screenshotPath(sandbox: PathSandbox, path?: string): string;
|
|
27
|
+
export declare function recordingPath(sandbox: PathSandbox, path?: string): string;
|
|
28
|
+
export declare function computerUseDriverRequest(action: DriverAction, screenshot: string): ComputerUseDriverRequest;
|
|
29
|
+
export declare function computerUseDriverCommand(sandbox: PathSandbox): string;
|
|
30
|
+
export declare function computerUseDriverStartCommand(sandbox: PathSandbox): string;
|
|
31
|
+
export declare function computerUseDisplayCommand(sandbox: PathSandbox): string;
|
|
32
|
+
export declare function computerUseDesktopSizeCommand(sandbox: PathSandbox, size: "full_hd" | "large_16_9" | "social_16_9"): string;
|
|
33
|
+
export declare function computerUseLaunchCommand(sandbox: PathSandbox, action: LaunchAction): string;
|
|
34
|
+
export declare function computerUseFocusCommand(sandbox: PathSandbox, app: "firefox" | "xterm", instance?: "primary" | "secondary"): string;
|
|
35
|
+
export declare function computerUseWindowLayoutCommand(sandbox: PathSandbox, layout: "maximized" | "left" | "right", window?: string): string;
|
|
36
|
+
export {};
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import{shellQuote}from"./shell.js";function computerUsePaths(e){let t=e.resolvePath(`computer-use`);return{root:t,driverRoot:e.resolvePath(`.eve-code/computer-use-driver`),driverSocket:`${t}/cua-driver.sock`,latestScreenshot:`${t}/latest.png`,managedBrowserRoot:e.resolvePath(`.eve-code/managed-browser`)}}const FIREFOX_USER_JS=[`user_pref("toolkit.legacyUserProfileCustomizations.stylesheets", true);`,`user_pref("ui.systemUsesDarkTheme", 1);`,`user_pref("browser.theme.toolbar-theme", 0);`,`user_pref("browser.theme.content-theme", 0);`,`user_pref("layout.css.prefers-color-scheme.content-override", 0);`,`user_pref("privacy.resistFingerprinting", false);`,`user_pref("browser.tabs.inTitlebar", 0);`,`user_pref("browser.toolbars.bookmarks.visibility", "never");`,`user_pref("browser.urlbar.quicksuggest.enabled", false);`,`user_pref("browser.urlbar.suggest.quicksuggest.nonsponsored", false);`,`user_pref("browser.urlbar.suggest.quicksuggest.sponsored", false);`,`user_pref("browser.urlbar.suggest.searches", false);`,`user_pref("browser.urlbar.suggest.topsites", false);`,`user_pref("browser.urlbar.suggest.trending", false);`,`user_pref("browser.urlbar.suggest.history", false);`,`user_pref("browser.urlbar.suggest.bookmark", false);`,`user_pref("browser.urlbar.suggest.openpage", false);`,`user_pref("browser.urlbar.maxRichResults", 0);`,`user_pref("browser.newtabpage.activity-stream.feeds.topsites", false);`,`user_pref("browser.newtabpage.activity-stream.feeds.section.topstories", false);`].join(`
|
|
2
|
+
`),TERMINAL_XRESOURCES=`XTerm*background: #0A0A0A.XTerm*foreground: #bbbbbb.XTerm*cursorColor: #bbbbbb.XTerm*pointerColor: #bbbbbb.XTerm*highlightColorMode: true.XTerm*highlightReverse: false.XTerm*highlightColor: #ffffff.XTerm*highlightTextColor: #000000.XTerm*scrollBar: false.XTerm*toolBar: false.XTerm*color0: #000000.XTerm*color1: #e52222.XTerm*color2: #a6e32d.XTerm*color3: #fc951e.XTerm*color4: #c48dff.XTerm*color5: #fa2573.XTerm*color6: #67d9f0.XTerm*color7: #f2f2f2.XTerm*color8: #555555.XTerm*color9: #ff5555.XTerm*color10: #55ff55.XTerm*color11: #ffff55.XTerm*color12: #5555ff.XTerm*color13: #ff55ff.XTerm*color14: #55ffff.XTerm*color15: #ffffff`.split(`.`).join(`
|
|
3
|
+
`);function screenshotPath(e,t){let n=computerUsePaths(e);return t===void 0?n.latestScreenshot:`${n.root}/${t}`}function recordingPath(e,t){return`${computerUsePaths(e).root}/${t??`recording-${crypto.randomUUID()}.mp4`}`}function computerUseDriverRequest(e,t){return{action:e,screenshotPath:t}}function computerUseDriverCommand(e){return`node ${shellQuote(`${computerUsePaths(e).driverRoot}/client.mjs`)}`}function computerUseDriverStartCommand(e){let t=computerUsePaths(e),n=`COMPUTER_USE_SOCKET_PATH=${shellQuote(t.driverSocket)}`,r=`COMPUTER_USE_ROOT=${shellQuote(t.root)}`,i=`COMPUTER_USE_REQUEST='{"action":"health"}' ${n} ${`node ${shellQuote(`${t.driverRoot}/client.mjs`)}`}`;return[`set -euo pipefail`,`mkdir -p ${shellQuote(t.root)}`,`if ! ${i} >/dev/null 2>&1; then`,` rm -f ${shellQuote(t.driverSocket)}`,` setsid -f env DISPLAY=:99 XCURSOR_SIZE=32 CUA_DRIVER_RS_TELEMETRY_ENABLED=false CUA_DRIVER_RS_UPDATE_CHECK=false ${n} ${r} node ${shellQuote(`${t.driverRoot}/server.mjs`)} </dev/null > ${shellQuote(`${t.root}/cua-driver.log`)} 2>&1`,`fi`,`for _ in $(seq 1 100); do`,` ${i} >/dev/null 2>&1 && exit 0`,` sleep 0.1`,`done`,`tail -n 200 ${shellQuote(`${t.root}/cua-driver.log`)} >&2 || true`,`exit 1`].join(`
|
|
4
|
+
`)}function computerUseDisplayCommand(e){let{root:t}=computerUsePaths(e),n=[xfconfSetCommand(`xsettings`,`/Net/ThemeName`,`string`,`Colloid-Dark`),xfconfSetCommand(`xsettings`,`/Net/PreferDarkTheme`,`bool`,`true`),xfconfSetCommand(`xsettings`,`/Net/IconThemeName`,`string`,`Adwaita`),xfconfSetCommand(`xsettings`,`/Gtk/CursorThemeSize`,`int`,`32`),xfconfSetCommand(`xfwm4`,`/general/theme`,`string`,`Colloid-Dark`),xfconfSetCommand(`xsettings`,`/Gtk/FontName`,`string`,`Geist 10`),xfconfSetCommand(`xsettings`,`/Gtk/MonospaceFontName`,`string`,`GeistMono Nerd Font 10`),xfconfSetCommand(`xfwm4`,`/general/button_layout`,`string`,`CHM|`),xfconfSetCommand(`xfwm4`,`/general/title_alignment`,`string`,`center`),xfconfSetCommand(`xfwm4`,`/general/title_font`,`string`,`Geist Medium 11`),xfconfSetCommand(`xfwm4`,`/general/show_dock_shadow`,`bool`,`false`),xfconfSetCommand(`xfwm4`,`/general/shadow_opacity`,`int`,`35`)];return[`set -euo pipefail`,`command -v Xvfb >/dev/null && command -v xfwm4 >/dev/null || exit 0`,`mkdir -p ${t}`,`if ! xdpyinfo -display :99 >/dev/null 2>&1; then`,` setsid -f Xvfb :99 -screen 0 1920x1080x24 -ac +extension RANDR > ${t}/xvfb.log 2>&1`,`fi`,`for _ in $(seq 1 50); do`,` xdpyinfo -display :99 >/dev/null 2>&1 && break`,` sleep 0.1`,`done`,`xdpyinfo -display :99 >/dev/null`,`dbus_output=$(dbus-launch --sh-syntax)`,`eval "$dbus_output"`,...n,`printf '%s' "$DBUS_SESSION_BUS_ADDRESS" > ${t}/dbus-session-address`,`chmod 0600 ${t}/dbus-session-address`,`setsid -f env DISPLAY=:99 DBUS_SESSION_BUS_ADDRESS="$DBUS_SESSION_BUS_ADDRESS" XCURSOR_SIZE=32 xfsettingsd --replace > ${t}/xfsettingsd.log 2>&1`,`for _ in $(seq 1 50); do`,` pgrep -f '[x]fsettingsd' >/dev/null && break`,` sleep 0.1`,`done`,`if ! pgrep -f '[x]fsettingsd' >/dev/null; then cat ${t}/xfsettingsd.log >&2 || true; echo 'xfsettingsd did not start' >&2; exit 1; fi`,`setsid -f env DISPLAY=:99 DBUS_SESSION_BUS_ADDRESS="$DBUS_SESSION_BUS_ADDRESS" XCURSOR_SIZE=32 xfwm4 --replace --compositor=on > ${t}/xfwm4.log 2>&1`,`for _ in $(seq 1 100); do`,` DISPLAY=:99 xprop -root _NET_SUPPORTING_WM_CHECK 2>/dev/null | grep -Eq 'window id # 0x[1-9a-f]' && break`,` sleep 0.1`,`done`,`if ! DISPLAY=:99 xprop -root _NET_SUPPORTING_WM_CHECK 2>/dev/null | grep -Eq 'window id # 0x[1-9a-f]'; then`,` cat ${t}/xfwm4.log >&2 || true`,` echo 'xfwm4 did not claim the X11 display' >&2`,` exit 1`,`fi`,`DISPLAY=:99 xsetroot -solid '#000000'`].join(`
|
|
5
|
+
`)}function desktopEnvironmentPrefix(e){let{root:t}=computerUsePaths(e);return`export DISPLAY=:99; export DBUS_SESSION_BUS_ADDRESS="$(cat ${t}/dbus-session-address)"; export XCURSOR_SIZE=32`}function xfconfSetCommand(e,t,n,r){return`DISPLAY=:99 xfconf-query -c ${e} -p ${t} --create -t ${n} -s ${shellQuote(r)}`}function computerUseDesktopSizeCommand(e,t){let n={full_hd:`1920x1080`,large_16_9:`1600x900`,social_16_9:`1280x720`}[t];return[desktopEnvironmentPrefix(e),`if xdotool search --onlyvisible --class firefox-esr >/dev/null 2>&1 || xdotool search --onlyvisible --classname ComputerUseTerminalPrimary >/dev/null 2>&1 || xdotool search --onlyvisible --classname ComputerUseTerminalSecondary >/dev/null 2>&1; then`,` echo 'desktop size must be selected before launching managed windows' >&2`,` exit 1`,`fi`,`xrandr --fb ${n}`,`xdpyinfo -display :99 | grep -q 'dimensions: *${n} pixels'`,"xdotool mousemove $(( ${dimensions%x*} / 2 )) $(( ${dimensions#*x} / 2 ))",`xsetroot -solid '#000000'`].join(`
|
|
6
|
+
`)}function computerUseLaunchCommand(e,t){let n=computerUsePaths(e),r=n.root;switch(t.app){case`xterm`:{let i=t.instance??`primary`,a=i===`primary`?`ComputerUseTerminalPrimary`:`ComputerUseTerminalSecondary`,o=i===`primary`?`Terminal 1`:`Terminal 2`,s=`DISPLAY=:99 xdotool search --onlyvisible --classname ${a}`;return[`mkdir -p ${r}`,`printf '%s\\n' ${shellQuote(TERMINAL_XRESOURCES)} > ${r}/Xresources`,`printf '%s\\n' ${shellQuote(`unset PROMPT_COMMAND; unset CI; export TERM=xterm-256color; export PATH='${n.managedBrowserRoot}:'"$PATH"; export PS1='▲ \\W/ '`)} > ${r}/terminal-rc`,desktopEnvironmentPrefix(e),`xrdb -merge ${r}/Xresources`,`if ! ${s} >/dev/null 2>&1; then`,` setsid -f env DISPLAY=:99 DBUS_SESSION_BUS_ADDRESS="$DBUS_SESSION_BUS_ADDRESS" xterm -name ${a} -title ${shellQuote(o)} -xrm '${a}*background: #0A0A0A' -xrm '${a}*foreground: #bbbbbb' -xrm '${a}*cursorColor: #bbbbbb' -xrm '${a}*highlightColorMode: true' -xrm '${a}*highlightReverse: false' -xrm '${a}*highlightColor: #ffffff' -xrm '${a}*highlightTextColor: #000000' -fa ${shellQuote(`GeistMono Nerd Font`)} -fs 18 -hm -selbg '#ffffff' -selfg '#000000' +bc +sb -e bash --noprofile --rcfile ${r}/terminal-rc -i </dev/null > ${r}/xterm-${i}.log 2>&1`,`fi`,`for _ in $(seq 1 50); do`,` ${s} >/dev/null 2>&1 && break`,` sleep 0.1`,`done`,`window=$(${s} | head -n 1)`,`xdotool windowactivate --sync "$window"`,requireWindowDecorationCommand(`"$window"`,`xterm ${i}`),computerUseWindowLayoutCommand(e,`maximized`,`"$window"`)].join(`
|
|
7
|
+
`)}case`firefox`:{let n=`${r}/firefox-profile`,i=`DISPLAY=:99 xdotool search --onlyvisible --class firefox-esr`,a=t.url?[` window=$(${i} | head -n 1)`,` previous_title=$(DISPLAY=:99 xdotool getwindowname "$window" 2>/dev/null || true)`,` DISPLAY=:99 xdotool windowactivate --sync "$window"`,` DISPLAY=:99 xdotool key --clearmodifiers ctrl+l`,` DISPLAY=:99 xdotool type --clearmodifiers ${shellQuote(t.url)}`,` DISPLAY=:99 xdotool key --clearmodifiers Return`]:[],o=t.url?[`window=$(${i} | head -n 1)`,`for _ in $(seq 1 50); do`,` title=$(DISPLAY=:99 xdotool getwindowname "$window" 2>/dev/null || true)`,' [[ -n "${title}" && "${title}" != "${previous_title}" ]] && break',` sleep 0.1`,`done`]:[];return[`mkdir -p ${r} ${n}/chrome`,`printf '%s\n' ${shellQuote(FIREFOX_USER_JS)} > ${n}/user.js`,`printf '%s\n' ${shellQuote(`
|
|
8
|
+
@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
|
|
9
|
+
|
|
10
|
+
/* Demo chrome: native title bar, then back/forward and the address bar. */
|
|
11
|
+
#TabsToolbar,
|
|
12
|
+
#toolbar-menubar,
|
|
13
|
+
#PersonalToolbar,
|
|
14
|
+
#PanelUI-button,
|
|
15
|
+
#fxa-toolbar-menu-button,
|
|
16
|
+
#firefox-view-button,
|
|
17
|
+
#unified-extensions-button,
|
|
18
|
+
#downloads-button,
|
|
19
|
+
#home-button,
|
|
20
|
+
#library-button,
|
|
21
|
+
#nav-bar-overflow-button,
|
|
22
|
+
#identity-box,
|
|
23
|
+
#tracking-protection-icon-container,
|
|
24
|
+
#page-action-buttons {
|
|
25
|
+
display: none !important;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
#main-window {
|
|
29
|
+
background: #000 !important;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
#navigator-toolbox {
|
|
33
|
+
background: #111 !important;
|
|
34
|
+
border-radius: 8px 8px 0 0 !important;
|
|
35
|
+
overflow: hidden !important;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
#nav-bar {
|
|
39
|
+
background: #111 !important;
|
|
40
|
+
border: 0 !important;
|
|
41
|
+
box-shadow: none !important;
|
|
42
|
+
min-height: 42px !important;
|
|
43
|
+
padding: 4px 8px !important;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/* Firefox paints its rectangular client surface over XFWM's lower corners.
|
|
47
|
+
Clip the browser content so the black window background forms the radius. */
|
|
48
|
+
#browser,
|
|
49
|
+
#appcontent,
|
|
50
|
+
#tabbrowser-tabbox,
|
|
51
|
+
#tabbrowser-tabpanels {
|
|
52
|
+
background: #000 !important;
|
|
53
|
+
border-radius: 0 0 8px 8px !important;
|
|
54
|
+
overflow: hidden !important;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
#urlbar-background {
|
|
58
|
+
background: #1a1a1a !important;
|
|
59
|
+
border: 1px solid #333 !important;
|
|
60
|
+
border-radius: 6px !important;
|
|
61
|
+
box-shadow: none !important;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
#urlbar-input,
|
|
65
|
+
#urlbar-scheme {
|
|
66
|
+
color: #ededed !important;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
#back-button,
|
|
70
|
+
#forward-button {
|
|
71
|
+
display: flex !important;
|
|
72
|
+
color: #ededed !important;
|
|
73
|
+
}
|
|
74
|
+
`)} > ${n}/chrome/userChrome.css`,desktopEnvironmentPrefix(e),`if ! ${i} >/dev/null 2>&1; then`,...t.url?[` previous_title='Mozilla Firefox'`]:[],` setsid -f env DISPLAY=:99 DBUS_SESSION_BUS_ADDRESS="$DBUS_SESSION_BUS_ADDRESS" GTK_THEME=Colloid-Dark firefox-esr --no-remote --new-instance --profile ${n} ${shellQuote(t.url??`about:blank`)} </dev/null > ${r}/firefox.log 2>&1`,...a.length>0?[`else`,...a]:[],`fi`,`for _ in $(seq 1 100); do`,` ${i} >/dev/null 2>&1 && break`,` sleep 0.1`,`done`,`${i} >/dev/null`,...o,`window=$(${i} | head -n 1)`,`DISPLAY=:99 xdotool windowactivate --sync "$window"`,requireWindowDecorationCommand(`"$window"`,`Firefox`),computerUseWindowLayoutCommand(e,`maximized`,`"$window"`)].join(`
|
|
75
|
+
`)}}}function requireWindowDecorationCommand(e,t){return[`for _ in $(seq 1 50); do`,` DISPLAY=:99 xprop -id ${e} _NET_FRAME_EXTENTS 2>/dev/null | grep -q '=.*,' && break`,` sleep 0.1`,`done`,`DISPLAY=:99 xprop -id ${e} _NET_FRAME_EXTENTS 2>/dev/null | grep -q '=.*,' || { echo ${shellQuote(`${t} opened without window-manager decorations`)} >&2; exit 1; }`].join(`
|
|
76
|
+
`)}function computerUseFocusCommand(e,t,n=`primary`){let r=t===`firefox`?`xdotool search --onlyvisible --class firefox-esr`:`xdotool search --onlyvisible --classname ${n===`primary`?`ComputerUseTerminalPrimary`:`ComputerUseTerminalSecondary`}`;return[desktopEnvironmentPrefix(e),`window=$(${r} | head -n 1)`,`test -n "$window" || { echo ${shellQuote(`${t} ${n} window is not running`)} >&2; exit 1; }`,`xdotool windowactivate --sync "$window"`].join(`
|
|
77
|
+
`)}function computerUseWindowLayoutCommand(e,t,n=`"$(DISPLAY=:99 xdotool getactivewindow)"`){let r={maximized:{height:`"$usable_height"`,width:`"$usable_width"`,x:`24`,y:`24`},left:{height:`"$usable_height"`,width:`"$left_width"`,x:`24`,y:`24`},right:{height:`"$usable_height"`,width:`"$right_width"`,x:`"$right_x"`,y:`24`}}[t];return[desktopEnvironmentPrefix(e),`dimensions=$(xdpyinfo -display :99 | awk '/dimensions:/{print $2; exit}')`,'screen_width="${dimensions%x*}"','screen_height="${dimensions#*x}"',`usable_width=$((screen_width - 48))`,`usable_height=$((screen_height - 48))`,`left_width=$(((usable_width - 12) / 2))`,`right_x=$((24 + left_width + 12))`,`right_width=$((usable_width - left_width - 12))`,`xdotool windowactivate --sync ${n}`,`xdotool windowmove ${n} ${r.x} ${r.y}`,`xdotool windowsize ${n} ${r.width} ${r.height}`].join(`
|
|
78
|
+
`)}export{computerUseDesktopSizeCommand,computerUseDisplayCommand,computerUseDriverCommand,computerUseDriverRequest,computerUseDriverStartCommand,computerUseFocusCommand,computerUseLaunchCommand,computerUsePaths,computerUseWindowLayoutCommand,recordingPath,screenshotPath};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { getToken } from "@vercel/connect";
|
|
2
|
+
import type { SandboxSession } from "eve/sandbox";
|
|
3
|
+
import extension from "../extension.ts";
|
|
4
|
+
type ExtensionConfig = typeof extension.config;
|
|
5
|
+
type GetToken = typeof getToken;
|
|
6
|
+
export declare function authenticateTurn(config: ExtensionConfig, getSandbox: () => Promise<SandboxSession>, getConnectToken?: GetToken): Promise<void>;
|
|
7
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"../extension.js";import{ConnectError,ConnectorInstallationRequiredError,getToken}from"../../../../node_modules/.pnpm/@vercel_connect@2.2.0_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_37d5e4f23f0f03cba2e0819e67e81b38/node_modules/@vercel/connect/dist/token.js";import"../../../../node_modules/.pnpm/@vercel_connect@2.2.0_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_37d5e4f23f0f03cba2e0819e67e81b38/node_modules/@vercel/connect/dist/index.js";import{authenticateVercel}from"./credentials.js";async function authenticateTurn(e,t,n=getToken){if(e.vercel===void 0)return;let r=await t(),i=await resolveToken(e.vercel.connector,{subject:{type:`app`}},n);await authenticateVercel(r,{token:i,delivery:e.vercel.delivery,broker:e.broker})}async function resolveToken(e,t,n){try{let r=await n(e,t);if(r.length===0)throw Error(`Connect returned an empty token`);return r}catch(t){let n=t instanceof ConnectorInstallationRequiredError?`connector installation is required`:t instanceof ConnectError?`Connect rejected the token request`:`Connect token request failed`,r=t instanceof Error?t.message:String(t);throw Error(`${n} for ${JSON.stringify(e)}: ${r}`,{cause:t})}}export{authenticateTurn};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { SandboxSession } from "eve/sandbox";
|
|
2
|
+
export interface BrokeredCredentialOptions {
|
|
3
|
+
readonly token: string;
|
|
4
|
+
/**
|
|
5
|
+
* `firewall` keeps the token outside the sandbox. `command` writes it into
|
|
6
|
+
* git config or the CLI environment for backends without network policies.
|
|
7
|
+
*/
|
|
8
|
+
readonly delivery?: "firewall" | "command";
|
|
9
|
+
/** Consumer-owned network-policy merge for hosts and their injected headers. */
|
|
10
|
+
readonly broker?: (sandbox: SandboxSession, rules: Record<string, Record<string, string>>) => Promise<void>;
|
|
11
|
+
}
|
|
12
|
+
export declare function authenticateGitHub(sandbox: SandboxSession, options: BrokeredCredentialOptions): Promise<void>;
|
|
13
|
+
export declare function authenticateVercel(sandbox: SandboxSession, options: BrokeredCredentialOptions): Promise<void>;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{toolingPaths}from"./tooling.js";const headersBySandbox=new WeakMap,policyQueues=new WeakMap,environmentQueues=new WeakMap;async function authenticateGitHub(e,t){let n=`Basic ${Buffer.from(`x-access-token:${t.token}`).toString(`base64`)}`;if(t.delivery===`command`){let r=await e.run({command:`git config --global http.https://github.com/.extraheader ${shellQuote(`Authorization: ${n}`)}`});if(r.exitCode!==0)throw Error(`Failed to configure GitHub authentication for git: ${r.stderr}`);await writeToolEnvironment(e,`GH_TOKEN`,t.token);return}await brokerRules(e,{"github.com":{authorization:n},"api.github.com":{authorization:n}},t.broker)}async function authenticateVercel(e,t){if(t.delivery===`command`){await writeToolEnvironment(e,`VERCEL_TOKEN`,t.token);return}let n={authorization:`Bearer ${t.token}`};await brokerRules(e,{"api.vercel.com":n,"vercel.com":n},t.broker)}async function brokerRules(e,t,n){if(n!==void 0){await n(e,t);return}if(!hasMutableNetworkPolicy(e))throw Error(`eve-code firewall credential delivery requires a sandbox provider with mutable network policy (setNetworkPolicy). Use delivery: "command" or pass a broker callback.`);let r=headersBySandbox.get(e)??new Map;for(let[e,n]of Object.entries(t))r.set(e,{...r.get(e),...n});headersBySandbox.set(e,r);let i=(policyQueues.get(e)??Promise.resolve()).then(async()=>{let t={"*":[]};for(let[e,n]of r)t[e]=[{transform:[{headers:n}]}];await e.setNetworkPolicy({allow:t})});policyQueues.set(e,i);try{await i}finally{policyQueues.get(e)===i&&policyQueues.delete(e)}}async function writeToolEnvironment(e,t,n){let r=(environmentQueues.get(e)??Promise.resolve()).then(async()=>{let r=toolingPaths(e).env,i=(await e.readTextFile({path:r})??``).split(`
|
|
2
|
+
`).filter(e=>e.length>0&&!e.startsWith(`export ${t}=`));i.push(`export ${t}=${shellQuote(n)}`),await e.writeTextFile({path:r,content:`${i.join(`
|
|
3
|
+
`)}\n`});let a=await e.run({command:`chmod 600 ${shellQuote(r)}`});if(a.exitCode!==0)throw Error(`Failed to secure eve-code CLI environment: ${a.stderr}`)});environmentQueues.set(e,r);try{await r}finally{environmentQueues.get(e)===r&&environmentQueues.delete(e)}}function hasMutableNetworkPolicy(e){return`setNetworkPolicy`in e}function shellQuote(e){return`'${e.replaceAll(`'`,`'"'"'`)}'`}export{authenticateGitHub,authenticateVercel};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { SandboxSession } from "eve/sandbox";
|
|
2
|
+
export interface PostEditDiagnostic {
|
|
3
|
+
readonly check: "git-diff" | "syntax" | "typescript" | "whitespace";
|
|
4
|
+
readonly code?: number;
|
|
5
|
+
readonly column?: number;
|
|
6
|
+
readonly line?: number;
|
|
7
|
+
readonly message: string;
|
|
8
|
+
readonly path?: string;
|
|
9
|
+
}
|
|
10
|
+
type DiagnosticsSandbox = Pick<SandboxSession, "readTextFile" | "resolvePath" | "run">;
|
|
11
|
+
export declare function runPostEditDiagnostics(input: {
|
|
12
|
+
readonly addedPaths?: readonly string[];
|
|
13
|
+
readonly changedPaths: readonly string[];
|
|
14
|
+
readonly deletedPaths: readonly string[];
|
|
15
|
+
readonly repoRoot: string;
|
|
16
|
+
readonly sandbox: DiagnosticsSandbox;
|
|
17
|
+
}): Promise<PostEditDiagnostic[]>;
|
|
18
|
+
/**
|
|
19
|
+
* Type diagnostics through the worker installed by `installCodeTooling`.
|
|
20
|
+
* Silently contributes nothing when the worker is absent, so consumers that
|
|
21
|
+
* skip the tooling still get every other check.
|
|
22
|
+
*/
|
|
23
|
+
export declare function runTypeScriptDiagnostics(input: {
|
|
24
|
+
readonly paths: readonly string[];
|
|
25
|
+
readonly repoRoot: string;
|
|
26
|
+
readonly sandbox: DiagnosticsSandbox;
|
|
27
|
+
}): Promise<PostEditDiagnostic[]>;
|
|
28
|
+
/** Drop type diagnostics that already existed before the patch, matched by path, code, and message. */
|
|
29
|
+
export declare function onlyNewTypeDiagnostics(diagnostics: readonly PostEditDiagnostic[], baseline: readonly PostEditDiagnostic[]): PostEditDiagnostic[];
|
|
30
|
+
export {};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import{shellQuote}from"./shell.js";import{toolingPaths}from"./tooling.js";import{extname}from"node:path";async function runPostEditDiagnostics(e){let t=[...new Set([...e.changedPaths,...e.deletedPaths])],n=[];if(t.length>0)try{let r=await e.sandbox.run({command:`git -C ${shellQuote(e.repoRoot)} diff --check -- ${t.map(shellQuote).join(` `)}`});r.exitCode!==0&&n.push({check:`git-diff`,message:boundedDiagnostic(r.stderr||r.stdout||`git diff --check failed`)})}catch(e){n.push({check:`git-diff`,message:`Could not run git diff --check: ${errorMessage(e)}`})}for(let t of e.addedPaths??[])try{let r=await e.sandbox.readTextFile({path:`${e.repoRoot}/${t}`});if(r===null)continue;let i=whitespaceIssues(r);i.length>0&&n.push({check:`whitespace`,path:t,message:i.join(`
|
|
2
|
+
`)})}catch(e){n.push({check:`whitespace`,path:t,message:`Could not inspect added file: ${errorMessage(e)}`})}for(let t=0;t<e.changedPaths.length;t+=8){let r=await Promise.all(e.changedPaths.slice(t,t+8).map(async t=>{let n=syntaxCommand(e.repoRoot,t);if(n===null)return null;try{let r=await e.sandbox.run({command:n});if(r.exitCode===0)return null;let i=r.stderr||r.stdout||`syntax check failed`;return i.includes(`ERR_UNSUPPORTED_TYPESCRIPT_SYNTAX`)?null:{check:`syntax`,path:t,message:boundedDiagnostic(i)}}catch(e){return{check:`syntax`,path:t,message:`Could not run syntax check: ${errorMessage(e)}`}}}));for(let e of r)e!==null&&n.push(e)}return n.push(...await runTypeScriptDiagnostics({paths:e.changedPaths,repoRoot:e.repoRoot,sandbox:e.sandbox})),n}async function runTypeScriptDiagnostics(e){let t=e.paths.filter(isTypeScriptPath);if(t.length===0)return[];let n=toolingPaths(e.sandbox);if(await e.sandbox.readTextFile({path:n.worker})===null)return[];let r=[];for(let i=0;i<t.length;i+=4){let a=await Promise.all(t.slice(i,i+4).map(async t=>{let r=Buffer.from(JSON.stringify({filePath:t,repoRoot:e.repoRoot,typescriptPath:n.typescriptModule}),`utf8`).toString(`base64`);try{let i=await e.sandbox.run({command:`node ${shellQuote(n.worker)}`,env:{EVE_CODE_DIAGNOSTICS_REQUEST:r}});return i.exitCode===0?(JSON.parse(i.stdout).diagnostics??[]).map(e=>({check:`typescript`,code:e.code,column:e.column,line:e.line,message:e.message,path:t})):[{check:`typescript`,path:t,message:boundedDiagnostic(i.stderr||i.stdout||`TypeScript diagnostics failed`)}]}catch(e){return[{check:`typescript`,path:t,message:`Could not run TypeScript diagnostics: ${errorMessage(e)}`}]}}));r.push(...a.flat())}return r}function onlyNewTypeDiagnostics(e,t){let n=new Map;for(let e of t){if(e.check!==`typescript`||e.code===void 0)continue;let t=typeDiagnosticKey(e);n.set(t,(n.get(t)??0)+1)}return e.filter(e=>{if(e.check!==`typescript`||e.code===void 0)return!0;let t=typeDiagnosticKey(e),r=n.get(t)??0;return r===0||(n.set(t,r-1),!1)})}function typeDiagnosticKey(e){return`${e.path??``}\0${e.code??``}\0${e.message}`}function isTypeScriptPath(e){return/\.(?:cts|mts|ts|tsx)$/u.test(e)}function syntaxCommand(e,t){let n=shellQuote(`${e}/${t}`);switch(extname(t).toLowerCase()){case`.cjs`:case`.js`:case`.mjs`:return`node --check ${n}`;case`.cts`:case`.mts`:case`.ts`:return`node --experimental-strip-types --check ${n}`;case`.json`:return`node -e ${shellQuote(`JSON.parse(require('node:fs').readFileSync(process.argv[1], 'utf8'))`)} ${n}`;case`.bash`:case`.sh`:return`bash -n ${n}`;case`.py`:return`if command -v python3 >/dev/null 2>&1; then python3 -c ${shellQuote(`import ast,pathlib,sys; ast.parse(pathlib.Path(sys.argv[1]).read_text())`)} ${n}; fi`;default:return null}}function boundedDiagnostic(e){let t=e.trim().split(`
|
|
3
|
+
`),n=t.slice(-100);for(;n.length>1&&Buffer.byteLength(n.join(`
|
|
4
|
+
`),`utf8`)>8192;)n=n.slice(1);let r=t.length-n.length;return r>0?`[${r} earlier lines omitted]\n${n.join(`
|
|
5
|
+
`)}`:n.join(`
|
|
6
|
+
`)}function whitespaceIssues(e){let t=[];for(let[n,r]of e.split(/\r?\n/u).entries())if(/^(?:<<<<<<<|=======|>>>>>>>)(?: |$)/u.test(r)?t.push(`line ${n+1}: unresolved conflict marker`):/[\t ]+$/u.test(r)&&t.push(`line ${n+1}: trailing whitespace`),t.length===20)break;return t}function errorMessage(e){return e instanceof Error?e.message:String(e)}export{onlyNewTypeDiagnostics,runPostEditDiagnostics,runTypeScriptDiagnostics};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated-file detection for repository edit tools.
|
|
3
|
+
*
|
|
4
|
+
* Models otherwise spend minutes generating lockfile hunks token by token.
|
|
5
|
+
* Generated files must change through the deterministic command that
|
|
6
|
+
* generates them, never through model-authored patches.
|
|
7
|
+
*/
|
|
8
|
+
export interface GeneratedPathMatch {
|
|
9
|
+
readonly path: string;
|
|
10
|
+
readonly label: string;
|
|
11
|
+
readonly remedy: string;
|
|
12
|
+
}
|
|
13
|
+
/** Paths named by `*** Add File:` / `*** Update File:` / `*** Delete File:` / `*** Move to:` headers. */
|
|
14
|
+
export declare function patchTargetPaths(patchText: string): readonly string[];
|
|
15
|
+
/** Generated files targeted by the patch, with the deterministic remedy for each. */
|
|
16
|
+
export declare function findGeneratedPatchTargets(patchText: string): readonly GeneratedPathMatch[];
|
|
17
|
+
/** One actionable error message covering every generated target in the patch. */
|
|
18
|
+
export declare function generatedPatchTargetsError(matches: readonly GeneratedPathMatch[]): string;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const GENERATED_PATH_RULES=[{test:e=>/(^|\/)(pnpm-lock\.yaml|package-lock\.json|yarn\.lock|bun\.lockb?)$/u.test(e),label:`package manager lockfile`,remedy:"run the package manager in the sandbox (for example `pnpm install`) so it regenerates the lockfile"},{test:e=>/(^|\/)(dist|\.next|\.eve|coverage)\//u.test(e),label:`build output`,remedy:`run the build command that produces this directory`},{test:e=>/(^|\/)vendor-compiled\//u.test(e),label:`vendored compiled asset`,remedy:`run the repository's vendoring script that regenerates this directory`},{test:e=>/(^|\/)node_modules\//u.test(e),label:`installed dependency`,remedy:`change the dependency declaration and reinstall instead`}];function patchTargetPaths(e){let t=[];for(let n of e.matchAll(/^\*\*\* (?:Add File|Update File|Delete File|Move to): (.+)$/gmu)){let e=n[1]?.trim();e!==void 0&&e.length>0&&t.push(e)}return t}function findGeneratedPatchTargets(e){let t=[];for(let n of patchTargetPaths(e)){let e=GENERATED_PATH_RULES.find(e=>e.test(n));e!==void 0&&t.push({label:e.label,path:n,remedy:e.remedy})}return t}function generatedPatchTargetsError(e){return[`This patch targets generated files, which must not be edited through model-authored patches:`,...e.map(e=>`- ${e.path} (${e.label}): ${e.remedy}`),`Use the deterministic operation instead. Preserve existing user changes; if regeneration would overwrite them, stop and ask for explicit authorization.`].join(`
|
|
2
|
+
`)}export{findGeneratedPatchTargets,generatedPatchTargetsError,patchTargetPaths};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const githubShellInputSchema: z.ZodObject<{
|
|
3
|
+
command: z.ZodString;
|
|
4
|
+
permissions: z.ZodArray<z.ZodObject<{
|
|
5
|
+
provider: z.ZodLiteral<"github">;
|
|
6
|
+
repositories: z.ZodArray<z.ZodString>;
|
|
7
|
+
access: z.ZodLiteral<"write">;
|
|
8
|
+
}, z.core.$strip>>;
|
|
9
|
+
description: z.ZodString;
|
|
10
|
+
workingDirectory: z.ZodOptional<z.ZodString>;
|
|
11
|
+
}, z.core.$strip>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{z}from"#compiled/zod/index.js";const permissionSchema=z.object({provider:z.literal(`github`),repositories:z.array(z.string().regex(/^[A-Za-z0-9-]+\/[A-Za-z0-9._-]+$/u)).length(1),access:z.literal(`write`)}),githubShellInputSchema=z.object({command:z.string().trim().min(1).max(2e4),permissions:z.array(permissionSchema).length(1),description:z.string().trim().min(1).max(500).describe(`the concrete GitHub-side result expected from this command`),workingDirectory:z.string().trim().min(1).max(1e3).optional().describe(`sandbox workspace directory; defaults to /workspace`)});export{githubShellInputSchema};
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { getToken } from "@vercel/connect";
|
|
2
|
+
import type { SandboxSession } from "eve/sandbox";
|
|
3
|
+
export interface GitHubPermission {
|
|
4
|
+
readonly access: "write";
|
|
5
|
+
readonly provider: "github";
|
|
6
|
+
readonly repositories: readonly string[];
|
|
7
|
+
}
|
|
8
|
+
export interface GitHubShellInput {
|
|
9
|
+
readonly command: string;
|
|
10
|
+
readonly description: string;
|
|
11
|
+
readonly permissions: readonly GitHubPermission[];
|
|
12
|
+
readonly workingDirectory?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface GitHubShellOutput {
|
|
15
|
+
readonly exitCode: number;
|
|
16
|
+
readonly stderr: string;
|
|
17
|
+
readonly stdout: string;
|
|
18
|
+
readonly truncated: boolean;
|
|
19
|
+
}
|
|
20
|
+
interface GitHubConfig {
|
|
21
|
+
readonly broker: (sandbox: SandboxSession, rules: Readonly<Record<string, readonly GitHubLeaseRule[]>> | null) => Promise<void>;
|
|
22
|
+
readonly connector: string;
|
|
23
|
+
readonly org: string;
|
|
24
|
+
}
|
|
25
|
+
export interface GitHubLeaseRule {
|
|
26
|
+
readonly match?: {
|
|
27
|
+
readonly headers?: readonly {
|
|
28
|
+
readonly key?: {
|
|
29
|
+
readonly exact: string;
|
|
30
|
+
};
|
|
31
|
+
readonly value?: {
|
|
32
|
+
readonly exact?: string;
|
|
33
|
+
readonly regex?: string;
|
|
34
|
+
};
|
|
35
|
+
}[];
|
|
36
|
+
};
|
|
37
|
+
readonly transform: readonly {
|
|
38
|
+
readonly headers: Readonly<Record<string, string>>;
|
|
39
|
+
}[];
|
|
40
|
+
}
|
|
41
|
+
interface GitHubShellDependencies {
|
|
42
|
+
readonly getConnectToken?: typeof getToken;
|
|
43
|
+
readonly getSandbox: () => Promise<SandboxSession>;
|
|
44
|
+
/** Serializes credential leases per eve session; every `ctx.getSandbox()` call returns a new handle. */
|
|
45
|
+
readonly sessionId: string;
|
|
46
|
+
}
|
|
47
|
+
export declare function githubShellApproval(input: GitHubShellInput | undefined): "not-applicable" | {
|
|
48
|
+
type: "denied";
|
|
49
|
+
reason: string;
|
|
50
|
+
};
|
|
51
|
+
export declare function executeGitHubShell(input: GitHubShellInput, config: GitHubConfig | undefined, dependencies: GitHubShellDependencies): Promise<GitHubShellOutput>;
|
|
52
|
+
export declare function parseCommand(command: string): string[];
|
|
53
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{getToken}from"../../../../node_modules/.pnpm/@vercel_connect@2.2.0_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_37d5e4f23f0f03cba2e0819e67e81b38/node_modules/@vercel/connect/dist/token.js";import"../../../../node_modules/.pnpm/@vercel_connect@2.2.0_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_37d5e4f23f0f03cba2e0819e67e81b38/node_modules/@vercel/connect/dist/index.js";import{shellQuote}from"./shell.js";import{toolingPaths}from"./tooling.js";import{validateRepositoryRoot}from"./repository-root.js";import{posix}from"node:path";const MAX_OUTPUT_BYTES=1e5,leaseQueues=new Map,ALLOWED_GIT_REMOTE_COMMANDS=new Set([`fetch`,`ls-remote`,`pull`,`push`]);function githubShellApproval(e){if(!e)return`not-applicable`;try{return validateGitHubShellInput(e),`not-applicable`}catch(e){return{type:`denied`,reason:e instanceof Error?e.message:`Invalid GitHub command.`}}}async function executeGitHubShell(e,t,n){if(!t)throw Error(`GitHub command access is not configured for this agent.`);let r=validateGitHubShellInput(e),i=await n.getSandbox(),a=resolveWorkingDirectory(i,e.workingDirectory);(r[0]===`git`||r[0]===`gh-signed-commit`)&&(a=await validateRepositoryRoot(i,a));let o=e.permissions[0].repositories,s=await assertCommandTargets(r,o,a,i),c=repositoryNames(o,t.org),l={authorizationDetails:[{type:`github_app_installation`,org:t.org,repositories:c}],subject:{type:`app`}},u=await(n.getConnectToken??getToken)(t.connector,l);if(!u)throw Error(`Connect returned an empty token for ${JSON.stringify(t.connector)}.`);let d=executablePath(r[0],i),f=s?[`-c`,`protocol.allow=never`,`-c`,`protocol.https.allow=always`,r[1],`https://github.com/${s}.git`,...r.slice(3)]:r.slice(1),p=`cd ${shellQuote(a)} && exec ${shellQuote(d)} ${f.map(shellQuote).join(` `)}`,m=`Basic ${Buffer.from(`x-access-token:${u}`).toString(`base64`)}`,h=crypto.randomUUID(),g=`eve-github-${h}`,_=`/tmp/eve-code-gh-${h}`,v=`Basic ${Buffer.from(`x-access-token:${g}`).toString(`base64`)}`,y;try{y=await withGitHubCredentialLease(i,n.sessionId,{authorization:m,placeholder:g,placeholderAuthorization:v,token:u},()=>{let e={GH_CONFIG_DIR:_,GH_PROMPT_DISABLED:`1`};return r[0]!==`git`&&(e.GH_TOKEN=g),e.GIT_CONFIG_COUNT=`2`,e.GIT_CONFIG_KEY_0=`http.https://github.com/.extraheader`,e.GIT_CONFIG_VALUE_0=`Authorization: ${v}`,e.GIT_CONFIG_KEY_1=`core.hooksPath`,e.GIT_CONFIG_VALUE_1=`/dev/null`,e.GIT_TERMINAL_PROMPT=`0`,e.PATH=`/usr/local/bin:/usr/bin:/bin`,i.run({command:p,env:e})},t.broker)}finally{await i.removePath({path:_,recursive:!0,force:!0})}let b=sanitizeOutput(y.stdout,u,m),x=sanitizeOutput(y.stderr,u,m);return{exitCode:y.exitCode,stdout:b.value,stderr:x.value,truncated:b.truncated||x.truncated}}async function withGitHubCredentialLease(e,t,n,r,i){let a=leaseQueues.get(t)??Promise.resolve(),o,s=new Promise(e=>{o=e}),c=a.then(()=>s);leaseQueues.set(t,c),await a;try{return await i(e,{"api.github.com":[{match:{headers:[{key:{exact:`authorization`},value:{regex:`^(?:token|Bearer) ${n.placeholder}$`}}]},transform:[{headers:{authorization:`Bearer ${n.token}`}}]}],"github.com":[{match:{headers:[{key:{exact:`authorization`},value:{exact:n.placeholderAuthorization}}]},transform:[{headers:{authorization:n.authorization}}]}]}),await r()}finally{try{await i(e,null)}finally{o(),leaseQueues.get(t)===c&&leaseQueues.delete(t)}}}function parseCommand(e){let t=e.trim();if(!t)throw Error(`GitHub command must not be empty.`);let n=[],r=``,i=null,a=!1,o=!1;for(let e of t){if(a){r+=e,a=!1,o=!0;continue}if(e===`\\`&&i!==`single`){a=!0,o=!0;continue}if(i===`single`){e===`'`?i=null:r+=e;continue}if(i===`double`){if(e===`"`)i=null;else if(e===`$`||e==="`")throw unsupportedSyntax();else r+=e;continue}if(e===`'`)i=`single`,o=!0;else if(e===`"`)i=`double`,o=!0;else if(/\s/u.test(e))o&&=(n.push(r),r=``,!1);else if(";&|<>$`(){}".includes(e))throw unsupportedSyntax();else r+=e,o=!0}if(a||i)throw Error(`GitHub command contains an unfinished quote or escape.`);if(o&&n.push(r),n.length===0)throw Error(`GitHub command must not be empty.`);return n}function validateGitHubShellInput(e){let t=parseCommand(e.command),n=e.permissions[0];if(e.permissions.length!==1||n?.provider!==`github`)throw Error(`Exactly one GitHub permission is required.`);if(n.access!==`write`)throw Error(`GitHub App commands require explicit write-capable access.`);if(!e.description.trim())throw Error(`description must describe the intended result.`);let[r,i]=t;if(r===`gh`){if(!i)throw Error(`A gh subcommand is required.`)}else if(r===`git`){if(!i||!ALLOWED_GIT_REMOTE_COMMANDS.has(i))throw Error(`Authenticated git supports only fetch, ls-remote, pull, and push; clone with gh repo clone.`)}else if(r!==`gh-signed-commit`)throw Error(`GitHub commands must use gh, an authenticated git remote command, or gh-signed-commit.`);return t}async function assertCommandTargets(e,t,n,r){let i=new Set(t.map(e=>e.toLowerCase())),a,o;if(e[0]===`git`){if(e[2]!==`origin`)throw Error(`Authenticated git commands must use the validated origin remote.`);let t=e[1]===`push`,i=await r.run({command:`cd ${shellQuote(n)} && git remote get-url ${t?`--push `:``}origin`,env:{GIT_TERMINAL_PROMPT:`0`,PATH:`/usr/bin:/bin`}});if(i.exitCode!==0)throw Error(`Could not resolve the origin GitHub repository.`);a=repositoryFromRemote(i.stdout.trim()),o=[a]}else if(e[0]===`gh-signed-commit`){if(o=repoFlagTargets(e.slice(1)),o.length===0)throw Error(`gh-signed-commit requires an explicit --repo owner/repository target.`)}else o=repoFlagTargets(e.slice(1)),e[1]===`repo`&&(e[2]===`clone`||e[2]===`view`||e[2]===`fork`)&&e[3]&&!e[3].startsWith(`-`)&&o.push(canonicalRepository(e[3]));for(let e of o)if(!i.has(e.toLowerCase()))throw Error(`Command target ${JSON.stringify(e)} is not in the declared repositories.`);return a}function repoFlagTargets(e){let t=[];for(let n=0;n<e.length;n+=1){let r=e[n];if(r===`--repo`||r===`-R`){let i=e[n+1];if(!i)throw Error(`${r} requires an owner/repository value.`);t.push(canonicalRepository(i)),n+=1}else r?.startsWith(`--repo=`)&&t.push(canonicalRepository(r.slice(7)))}return t}function repositoryFromRemote(e){let t=/^https:\/\/github\.com\/([^/]+\/[^/]+?)(?:\.git)?$/iu.exec(e);if(t?.[1])return canonicalRepository(t[1]);let n=/^git@github\.com:([^/]+\/[^/]+?)(?:\.git)?$/iu.exec(e);if(n?.[1])return canonicalRepository(n[1]);throw Error(`The origin remote is not a canonical GitHub repository URL.`)}function canonicalRepository(e){let t=e.replace(/\.git$/iu,``);if(!/^[A-Za-z0-9-]+\/[A-Za-z0-9._-]+$/u.test(t))throw Error(`Invalid GitHub repository ${JSON.stringify(e)}.`);return t}function repositoryNames(e,t){if(e.length!==1)throw Error(`Exactly one GitHub repository is required.`);let n=new Set;for(let r of e){let e=/^([A-Za-z0-9-]+)\/([A-Za-z0-9._-]+)$/u.exec(r);if(!e)throw Error(`Invalid GitHub repository ${JSON.stringify(r)}.`);if(e[1]?.toLowerCase()!==t.toLowerCase())throw Error(`Repository ${JSON.stringify(r)} is outside ${t}.`);n.add(e[2])}if(n.size!==1)throw Error(`Exactly one GitHub repository is required.`);return[...n]}function executablePath(e,t){return e===`gh`?toolingPaths(t).ghReal:e===`gh-signed-commit`?toolingPaths(t).trustedSignedCommit:`git`}function resolveWorkingDirectory(e,t){let n=posix.resolve(`/`,e.resolvePath(``)),r=posix.resolve(`/`,e.resolvePath(t?.trim()||``));if(r!==n&&!r.startsWith(`${n}/`))throw Error(`GitHub command workingDirectory must stay inside the sandbox workspace.`);return r}function sanitizeOutput(e,t,n){let r=e.replaceAll(t,`[redacted]`).replaceAll(n,`[redacted]`);return Buffer.byteLength(r)<=MAX_OUTPUT_BYTES?{value:r,truncated:!1}:{value:`[output truncated: showing final ${MAX_OUTPUT_BYTES} bytes]\n${Buffer.from(r).subarray(-1e5).toString()}`,truncated:!0}}function unsupportedSyntax(){return Error(`GitHub commands support argv syntax only, not pipes, redirects, substitutions, or shell operators.`)}export{executeGitHubShell,githubShellApproval,parseCommand};
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
export declare const DEFAULT_GREP_LIMIT = 50;
|
|
2
|
+
export declare const MAX_GREP_LIMIT = 200;
|
|
3
|
+
export declare const MAX_GREP_COMMAND_BYTES: number;
|
|
4
|
+
export declare const MAX_GREP_LINE_BYTES: number;
|
|
5
|
+
export declare const MAX_GREP_RETURN_BYTES: number;
|
|
6
|
+
export declare const GREP_OUTPUT_MODES: readonly ["files_with_matches", "content", "count"];
|
|
7
|
+
export type GrepOutputMode = (typeof GREP_OUTPUT_MODES)[number];
|
|
8
|
+
export interface GrepCommandInput {
|
|
9
|
+
readonly contextLines: number;
|
|
10
|
+
readonly glob: string | undefined;
|
|
11
|
+
readonly ignoreCase: boolean;
|
|
12
|
+
readonly limit: number;
|
|
13
|
+
readonly literal: boolean;
|
|
14
|
+
readonly outputMode: GrepOutputMode;
|
|
15
|
+
readonly path: string;
|
|
16
|
+
readonly pattern: string;
|
|
17
|
+
}
|
|
18
|
+
export interface GrepSearchResult {
|
|
19
|
+
readonly content: string;
|
|
20
|
+
readonly matchCount: number;
|
|
21
|
+
readonly outputMode: GrepOutputMode;
|
|
22
|
+
readonly path: string;
|
|
23
|
+
readonly truncated: boolean;
|
|
24
|
+
}
|
|
25
|
+
export interface GrepSandbox {
|
|
26
|
+
resolvePath(path: string): string;
|
|
27
|
+
run(input: {
|
|
28
|
+
abortSignal?: AbortSignal;
|
|
29
|
+
command: string;
|
|
30
|
+
}): PromiseLike<{
|
|
31
|
+
exitCode: number;
|
|
32
|
+
stderr: string;
|
|
33
|
+
stdout: string;
|
|
34
|
+
}>;
|
|
35
|
+
}
|
|
36
|
+
export interface GrepToolInput {
|
|
37
|
+
readonly context?: number;
|
|
38
|
+
readonly glob?: string;
|
|
39
|
+
readonly ignoreCase?: boolean;
|
|
40
|
+
readonly limit?: number;
|
|
41
|
+
readonly literal?: boolean;
|
|
42
|
+
readonly outputMode?: GrepOutputMode;
|
|
43
|
+
readonly path?: string;
|
|
44
|
+
readonly pattern: string;
|
|
45
|
+
}
|
|
46
|
+
/** Identifiers are faster as fixed strings. Regex syntax keeps the regex engine. */
|
|
47
|
+
export declare function shouldUseFixedStrings(pattern: string, literal: boolean | undefined): boolean;
|
|
48
|
+
export declare function effectiveOutputMode(outputMode: GrepOutputMode | undefined): GrepOutputMode;
|
|
49
|
+
export declare function effectiveLimit(limit: number | undefined): number;
|
|
50
|
+
export declare function assertWorkspacePath(resolved: string, requested?: string): string;
|
|
51
|
+
export declare function executeGrepSearch(input: GrepToolInput, sandbox: GrepSandbox, abortSignal?: AbortSignal): Promise<GrepSearchResult>;
|
|
52
|
+
export declare function buildSearchCommand(input: GrepCommandInput): string;
|
|
53
|
+
export declare function buildRipgrepCommand(input: GrepCommandInput): string;
|
|
54
|
+
export declare function buildPosixGrepCommand(input: GrepCommandInput): string;
|
|
55
|
+
export declare function processGrepOutput(input: {
|
|
56
|
+
readonly commandTruncated?: boolean;
|
|
57
|
+
readonly limit: number;
|
|
58
|
+
readonly outputMode: GrepOutputMode;
|
|
59
|
+
readonly path: string;
|
|
60
|
+
readonly stdout: string;
|
|
61
|
+
}): GrepSearchResult;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import{shellQuote}from"./shell.js";const DEFAULT_GREP_LIMIT=50,MAX_GREP_LIMIT=200,MAX_GREP_COMMAND_BYTES=262144,MAX_GREP_LINE_BYTES=8192,MAX_GREP_RETURN_BYTES=65536,REGEX_META=/[\\^$.*+?()[\]{}|]/u,GREP_OUTPUT_MODES=[`files_with_matches`,`content`,`count`];function shouldUseFixedStrings(e,t){return t===!0||t!==!1&&!REGEX_META.test(e)}function effectiveOutputMode(e){return e??`files_with_matches`}function effectiveLimit(e){return Math.min(Math.max(1,e??50),200)}function assertWorkspacePath(e,t){if(t!==void 0&&t.split(/[\\/]/u).includes(`..`))throw Error(`grep path must not contain '..'`);if(e!==`/workspace`&&!e.startsWith(`/workspace/`))throw Error(`grep path must stay under /workspace: ${e}`);if(e.split(`/`).includes(`..`))throw Error(`grep path must not contain '..'`);return e}async function executeGrepSearch(e,t,n){let r=assertWorkspacePath(t.resolvePath(e.path??`/workspace`),e.path),i=await sandboxRealPath(t,t.resolvePath(``),`sandbox workspace`,n),a=await sandboxRealPath(t,r,`grep path`,n);assertRealPathWithinWorkspace(a,i);let o=effectiveOutputMode(e.outputMode),s=effectiveLimit(e.limit),c=buildSearchCommand({contextLines:e.context??0,glob:e.glob,ignoreCase:e.ignoreCase===!0,limit:s,literal:shouldUseFixedStrings(e.pattern,e.literal),outputMode:o,path:a,pattern:e.pattern}),l=await t.run({abortSignal:n,command:c}),u=truncateUtf8(l.stdout,MAX_GREP_COMMAND_BYTES),d=u.truncated;if(l.exitCode!==0&&l.exitCode!==1||l.exitCode===1&&l.stderr.trim().length>0){let e=l.stderr.trim()||u.value.trim()||`no command output`;throw Error(`grep failed (exit ${l.exitCode}): ${truncateUtf8(e,MAX_GREP_LINE_BYTES).value}`)}return processGrepOutput({commandTruncated:d,limit:s,outputMode:o,path:r,stdout:u.value})}async function sandboxRealPath(e,t,n,r){let i=await e.run({abortSignal:r,command:`realpath -z -- ${shellQuote(t)}`});if(i.exitCode!==0){let e=i.stderr.trim()||i.stdout.trim()||`no command output`;throw Error(`${n} could not be resolved: ${truncateUtf8(e,MAX_GREP_LINE_BYTES).value}`)}let a=i.stdout.endsWith(`\0`)?i.stdout.slice(0,-1):i.stdout;if(a.length===0||a.includes(`\0`))throw Error(`${n} returned an invalid realpath`);return a}function assertRealPathWithinWorkspace(e,t){if(e!==t&&!e.startsWith(`${t}/`))throw Error(`grep path resolves outside /workspace: ${e}`)}function buildSearchCommand(e){return[`set -o pipefail`,`{`,` if command -v rg >/dev/null 2>&1; then`,` ${buildRipgrepCommand(e)}`,` else`,` ${buildPosixGrepCommand(e)}`,` fi`,`} 2>&1 | head -c 262145`,"search_status=${PIPESTATUS[0]}",`if [ "$search_status" -eq 141 ]; then exit 0; fi`,`exit "$search_status"`].join(`
|
|
2
|
+
`)}function buildRipgrepCommand(e){let t=[`rg`,`--color=never`,`--hidden`,`--glob`,shellQuote(`!.git/*`)];switch(e.ignoreCase&&t.push(`--ignore-case`),e.literal&&t.push(`--fixed-strings`),e.glob!==void 0&&t.push(`--glob`,shellQuote(e.glob)),e.outputMode){case`files_with_matches`:t.push(`--files-with-matches`,`--max-count`,`1`);break;case`count`:t.push(`--count`);break;case`content`:t.push(`--line-number`,`--with-filename`,`--null`),e.contextLines>0&&t.push(`--context`,String(e.contextLines)),t.push(`--max-count`,String(e.limit))}return t.push(`--`,shellQuote(e.pattern),shellQuote(e.path)),t.join(` `)}function buildPosixGrepCommand(e){let t=[`grep`,`-r`,`--exclude-dir=.git`];switch(e.ignoreCase&&t.push(`-i`),e.literal?t.push(`-F`):t.push(`-E`),e.glob!==void 0&&t.push(`--include=${shellQuote(e.glob)}`),e.outputMode){case`files_with_matches`:t.push(`-l`);break;case`count`:t.push(`-c`);break;case`content`:t.push(`-n`,`-H`,`-Z`),e.contextLines>0&&t.push(`-C`,String(e.contextLines)),t.push(`-m`,String(e.limit))}return t.push(`-e`,shellQuote(e.pattern),shellQuote(e.path)),t.join(` `)}function processGrepOutput(e){let t=e.stdout.split(`
|
|
3
|
+
`),n=[],r=`
|
|
4
|
+
|
|
5
|
+
[Output truncated. Narrow path or glob, or lower context.]`,i=MAX_GREP_RETURN_BYTES-Buffer.byteLength(r),a=0,o=0,s=0,c=e.commandTruncated===!0,appendLine=e=>{let t=Buffer.byteLength(e)+(n.length===0?0:1);return a+t>i?!1:(n.push(e),a+=t,!0)};for(let r=0;r<t.length;r+=1){let i=t[r]??``;if(i.length===0&&r===t.length-1)continue;if(i===`--`){if(n.length>0&&!appendLine(i)){c=!0;break}continue}let a=i,l=e.outputMode!==`content`;if(e.outputMode===`content`){let e=normalizeContentLine(i);a=e.line,l=e.isMatch}let u=0;if(e.outputMode===`count`&&(u=parseCountLine(a),u===0))continue;if(s>=e.limit){c=!0;break}let d=truncateUtf8(a,MAX_GREP_LINE_BYTES);if(d.truncated&&(c=!0),!appendLine(d.value)){c=!0;break}s+=1,e.outputMode===`count`?o+=u:l&&(o+=1)}if(n.length===0)return{content:c?`[Output truncated. Narrow path or glob, or lower context.]`:`No matches found`,matchCount:0,outputMode:e.outputMode,path:e.path,truncated:c};let l=n.join(`
|
|
6
|
+
`);return c&&(l+=r),{content:l,matchCount:o,outputMode:e.outputMode,path:e.path,truncated:c}}function normalizeContentLine(e){let t=e.lastIndexOf(`\0`);if(t===-1)return{isMatch:!1,line:e};let n=e.slice(0,t),r=e.slice(t+1),i=/^(\d+)([:-])(.*)$/u.exec(r);if(i===null)return{isMatch:!1,line:`${n}:${r}`};let[,a,o,s]=i;return{isMatch:o===`:`,line:`${n}${o}${a}${o}${s}`}}function parseCountLine(e){let t=e.lastIndexOf(`:`);if(t===-1)return 0;let n=Number(e.slice(t+1));return Number.isFinite(n)&&n>0?n:0}function truncateUtf8(e,t){if(Buffer.byteLength(e)<=t)return{truncated:!1,value:e};let n=0,r=``;for(let i of e){let e=Buffer.byteLength(i);if(n+e>t)break;r+=i,n+=e}return{truncated:!0,value:r}}export{DEFAULT_GREP_LIMIT,GREP_OUTPUT_MODES,MAX_GREP_COMMAND_BYTES,MAX_GREP_LIMIT,MAX_GREP_LINE_BYTES,MAX_GREP_RETURN_BYTES,assertWorkspacePath,buildPosixGrepCommand,buildRipgrepCommand,buildSearchCommand,effectiveLimit,effectiveOutputMode,executeGrepSearch,processGrepOutput,shouldUseFixedStrings};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/** Minimal sandbox surface this tool needs. */
|
|
2
|
+
export interface SandboxLike {
|
|
3
|
+
run(options: {
|
|
4
|
+
command: string;
|
|
5
|
+
}): PromiseLike<{
|
|
6
|
+
exitCode: number;
|
|
7
|
+
stdout: string;
|
|
8
|
+
stderr: string;
|
|
9
|
+
}>;
|
|
10
|
+
}
|
|
11
|
+
export interface RepoGuidelines {
|
|
12
|
+
/** Repo-relative path of the root guideline file, or null when absent. */
|
|
13
|
+
rootPath: string | null;
|
|
14
|
+
/** Root guideline content (capped at {@link MAX_GUIDELINE_BYTES}). */
|
|
15
|
+
root: string | null;
|
|
16
|
+
/** True when the root content hit the cap; read rootPath for the rest. */
|
|
17
|
+
rootTruncated: boolean;
|
|
18
|
+
/** Repo-relative paths of nested guideline files, shallowest first. */
|
|
19
|
+
nested: string[];
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Find the repo's agent guideline files. One winner per directory:
|
|
23
|
+
* AGENTS.md beats CLAUDE.md (CLAUDE.md is often just a pointer at it).
|
|
24
|
+
*/
|
|
25
|
+
export declare function discoverGuidelines(sandbox: SandboxLike, dir: string): Promise<RepoGuidelines>;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const MAX_GUIDELINE_BYTES=12e3;async function discoverGuidelines(e,t){let n={rootPath:null,root:null,rootTruncated:!1,nested:[]},r=await e.run({command:`git -C ${t} ls-files | grep -E '(^|/)(AGENTS|CLAUDE)\\.md$' || true`});if(r.exitCode!==0)return n;let i=new Map;for(let e of r.stdout.split(`
|
|
2
|
+
`)){let t=e.trim();if(t.length===0)continue;let n=t.lastIndexOf(`/`),r=n===-1?``:t.slice(0,n),a=n===-1?t:t.slice(n+1);(!i.has(r)||a===`AGENTS.md`)&&i.set(r,t)}let a=i.get(``)??null,o=null,s=!1;if(a!==null){let n=await e.run({command:`head -c 12001 ${JSON.stringify(`${t}/${a}`)}`});n.exitCode===0&&n.stdout.trim().length>0&&(s=Buffer.byteLength(n.stdout,`utf8`)>MAX_GUIDELINE_BYTES,o=s?`${n.stdout.slice(0,MAX_GUIDELINE_BYTES)}\n\n[truncated: read ${a} for the full guidelines]`:n.stdout)}let c=[...i.entries()].filter(([e])=>e!==``).map(([,e])=>e).sort((e,t)=>e.split(`/`).length-t.split(`/`).length).slice(0,50);return{rootPath:a,root:o,rootTruncated:s,nested:c}}export{discoverGuidelines};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { SandboxSession } from "eve/sandbox";
|
|
2
|
+
export type PatchHunk = {
|
|
3
|
+
readonly type: "add";
|
|
4
|
+
readonly path: string;
|
|
5
|
+
readonly contents: string;
|
|
6
|
+
} | {
|
|
7
|
+
readonly type: "delete";
|
|
8
|
+
readonly path: string;
|
|
9
|
+
} | {
|
|
10
|
+
readonly type: "update";
|
|
11
|
+
readonly path: string;
|
|
12
|
+
readonly movePath?: string;
|
|
13
|
+
readonly chunks: readonly UpdateChunk[];
|
|
14
|
+
};
|
|
15
|
+
export interface UpdateChunk {
|
|
16
|
+
readonly oldLines: readonly string[];
|
|
17
|
+
readonly newLines: readonly string[];
|
|
18
|
+
readonly changeContext?: string;
|
|
19
|
+
readonly endOfFile?: boolean;
|
|
20
|
+
}
|
|
21
|
+
export interface AppliedPatchFile {
|
|
22
|
+
readonly operation: "add" | "delete" | "move" | "update";
|
|
23
|
+
readonly path: string;
|
|
24
|
+
readonly previousPath?: string;
|
|
25
|
+
}
|
|
26
|
+
export declare function applyPatchToSandbox(input: {
|
|
27
|
+
readonly beforeCommit?: (files: readonly AppliedPatchFile[]) => Promise<void>;
|
|
28
|
+
readonly patchText: string;
|
|
29
|
+
readonly repoRoot: string;
|
|
30
|
+
readonly sandbox: SandboxSession;
|
|
31
|
+
/** Serializes patches per eve session; every `ctx.getSandbox()` call returns a new handle. */
|
|
32
|
+
readonly sessionId: string;
|
|
33
|
+
}): Promise<AppliedPatchFile[]>;
|
|
34
|
+
export declare function parsePatch(patchText: string): readonly PatchHunk[];
|
|
35
|
+
export declare function deriveUpdatedContent(path: string, chunks: readonly UpdateChunk[], original: string): string;
|