windows-development-sandbox 1.18.4 → 1.23.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/README.md +1 -1
- package/config.example.json +17 -1
- package/dist/app/features/access/access.def.js +5 -2
- package/dist/app/features/access/access.run.js +7 -3
- package/dist/app/features/accounts/accounts.def.d.ts +33 -1
- package/dist/app/features/accounts/accounts.def.js +10 -4
- package/dist/app/features/accounts/accounts.run.d.ts +2 -0
- package/dist/app/features/accounts/accounts.run.js +7 -2
- package/dist/app/features/accounts/services.def.d.ts +7 -1
- package/dist/app/features/accounts/services.def.js +19 -16
- package/dist/app/features/accounts/services.run.d.ts +2 -0
- package/dist/app/features/accounts/services.run.js +44 -16
- package/dist/app/features/agent-commands/agent-commands.def.d.ts +37 -0
- package/dist/app/features/agent-commands/agent-commands.def.js +91 -0
- package/dist/app/features/agent-commands/agent-commands.run.d.ts +28 -0
- package/dist/app/features/agent-commands/agent-commands.run.js +35 -0
- package/dist/app/features/agent-commands/index.d.ts +2 -0
- package/dist/app/features/agent-commands/index.js +3 -0
- package/dist/app/features/agents/agents.def.d.ts +14 -1
- package/dist/app/features/agents/agents.def.js +61 -6
- package/dist/app/features/agents/agents.run.d.ts +1 -0
- package/dist/app/features/agents/agents.run.js +8 -1
- package/dist/app/features/agents/claude-env.def.d.ts +36 -0
- package/dist/app/features/agents/claude-env.def.js +305 -0
- package/dist/app/features/agents/env.def.d.ts +163 -0
- package/dist/app/features/agents/env.def.js +184 -0
- package/dist/app/features/agents/env.run.d.ts +43 -0
- package/dist/app/features/agents/env.run.js +86 -0
- package/dist/app/features/agents/index.d.ts +2 -0
- package/dist/app/features/agents/index.js +2 -0
- package/dist/app/features/defs.d.ts +171 -3
- package/dist/app/features/defs.js +9 -0
- package/dist/app/features/engine/engine.run.js +1 -1
- package/dist/app/features/github/github.def.d.ts +44 -3
- package/dist/app/features/github/github.def.js +145 -63
- package/dist/app/features/github/github.run.d.ts +9 -2
- package/dist/app/features/github/github.run.js +43 -5
- package/dist/app/features/health/health.def.js +8 -2
- package/dist/app/features/logs/logs.def.js +0 -8
- package/dist/app/features/projects/projects.def.js +2 -2
- package/dist/app/features/projects/projects.run.js +5 -5
- package/dist/app/features/sandbox/sandbox.def.js +7 -3
- package/dist/app/features/sessions/sessions.def.d.ts +4 -4
- package/dist/app/features/sessions/sessions.def.js +0 -5
- package/dist/app/features/sessions/sessions.run.d.ts +1 -1
- package/dist/app/features/sessions/sessions.run.js +2 -2
- package/dist/app/features/settings/categories.def.js +7 -2
- package/dist/app/features/settings/settings-rows.js +6 -2
- package/dist/app/features/settings/settings.def.js +1 -1
- package/dist/app/features/settings/settings.run.d.ts +8 -0
- package/dist/app/features/settings/settings.run.js +12 -3
- package/dist/app/features/storage/storage.run.js +18 -9
- package/dist/app/features/updates/update-lines.js +2 -2
- package/dist/app/features/updates/updates.def.js +1 -1
- package/dist/app/features/updates/updates.run.js +13 -3
- package/dist/app/features/vpn/vpn.def.d.ts +33 -0
- package/dist/app/features/vpn/vpn.def.js +30 -6
- package/dist/app/features/vpn/vpn.run.d.ts +11 -0
- package/dist/app/features/vpn/vpn.run.js +4 -1
- package/dist/app/features/web/web.def.js +2 -2
- package/dist/app/features/web/web.run.js +12 -4
- package/dist/app/kernel/errors.d.ts +7 -0
- package/dist/app/kernel/errors.js +18 -3
- package/dist/app/kernel/rpc.d.ts +6 -1
- package/dist/app/kernel/view.d.ts +11 -1
- package/dist/app/registry.js +7 -1
- package/dist/bin/agent-sandbox.js +2 -2
- package/dist/bin/{chunk-N4GXYTLV.js → chunk-JETGP2C3.js} +239 -72
- package/dist/bin/{chunk-MY7NLQQY.js → chunk-XZKOPGNH.js} +1 -1
- package/dist/bin/{chunk-FRPLQLSY.js → chunk-ZTTOF5V3.js} +6566 -4964
- package/dist/bin/claude-host.js +2 -2
- package/dist/bin/claude-sbx.js +2 -2
- package/dist/bin/codex-sbx.js +2 -2
- package/dist/bin/gemini-sbx.js +2 -2
- package/dist/bin/sandbox.js +2 -2
- package/dist/bin/sbx-hide.js +2 -2
- package/dist/bin/sbx-show.js +2 -2
- package/dist/cli/commands/agent-commands.d.ts +0 -1
- package/dist/cli/commands/agent-commands.js +2 -32
- package/dist/cli/commands/index.d.ts +1 -1
- package/dist/cli/commands/index.js +1 -1
- package/dist/cli/commands/launch/launch.js +2 -2
- package/dist/cli/commands/registry.js +3 -2
- package/dist/cli/manifest.d.ts +3 -3
- package/dist/cli/manifest.js +3 -2
- package/dist/cli/menu/coverage-exempt.d.ts +17 -0
- package/dist/cli/menu/coverage-exempt.js +61 -0
- package/dist/cli/menu/io-menu.d.ts +2 -0
- package/dist/cli/menu/io-menu.js +50 -5
- package/dist/cli/menu/menu.d.ts +1 -1
- package/dist/cli/menu/menu.js +3 -3
- package/dist/cli/menu/pages/accounts-page.js +1 -1
- package/dist/cli/menu/pages/agents-page.d.ts +7 -2
- package/dist/cli/menu/pages/agents-page.js +75 -13
- package/dist/cli/menu/pages/maintenance-page.d.ts +6 -0
- package/dist/cli/menu/pages/maintenance-page.js +10 -4
- package/dist/cli/menu/pages/sessions-page.d.ts +2 -0
- package/dist/cli/menu/pages/sessions-page.js +12 -4
- package/dist/cli/menu/pages/settings-page.js +13 -1
- package/dist/cli/menu/remote-menu.js +1 -1
- package/dist/cli/menu/shell.d.ts +5 -0
- package/dist/cli/menu/shell.js +13 -0
- package/dist/cli/menu/views.js +2 -1
- package/dist/cli/report.js +2 -0
- package/dist/cli/services/agent-commands-service.d.ts +2 -0
- package/dist/cli/services/agent-commands-service.js +13 -7
- package/dist/cli/services/vpn-service.d.ts +5 -1
- package/dist/cli/services/vpn-service.js +6 -1
- package/dist/cli/tui/app.d.ts +5 -0
- package/dist/cli/tui/app.js +2 -0
- package/dist/cli/tui/dialogs/text-screen.js +2 -1
- package/dist/cli/tui/terminal.js +3 -1
- package/dist/core/config/defaults.js +12 -1
- package/dist/core/detect/toolchains.js +9 -0
- package/dist/core/disk.d.ts +1 -5
- package/dist/core/disk.js +1 -16
- package/dist/core/schema/accounts.d.ts +6 -0
- package/dist/core/schema/accounts.js +13 -11
- package/dist/core/schema/codex.d.ts +29 -0
- package/dist/core/schema/codex.js +24 -0
- package/dist/core/schema/config.d.ts +58 -14
- package/dist/core/schema/config.js +6 -4
- package/dist/core/schema/github.js +1 -1
- package/dist/core/schema/index.d.ts +1 -0
- package/dist/core/schema/index.js +1 -0
- package/dist/core/schema/profile.js +8 -4
- package/dist/core/schema/resume.js +1 -1
- package/dist/core/schema/sandbox.js +3 -3
- package/dist/core/schema/toolchains.d.ts +4 -0
- package/dist/core/schema/toolchains.js +3 -0
- package/dist/core/schema/vpn.js +1 -1
- package/dist/core/schema/web.js +3 -3
- package/dist/core/types.d.ts +8 -0
- package/dist/core/util/errors.d.ts +11 -1
- package/dist/core/util/errors.js +7 -1
- package/dist/core/util/index.d.ts +1 -1
- package/dist/core/util/index.js +1 -1
- package/dist/guest/accounts/adapter.d.ts +2 -0
- package/dist/guest/accounts/adapters.js +4 -0
- package/dist/guest/accounts/apply.d.ts +10 -6
- package/dist/guest/accounts/kinds/cfx.d.ts +7 -0
- package/dist/guest/accounts/kinds/cfx.js +33 -3
- package/dist/guest/accounts/kinds/comet.d.ts +7 -0
- package/dist/guest/accounts/kinds/comet.js +50 -0
- package/dist/guest/accounts/kinds/perplexity.d.ts +2 -0
- package/dist/guest/accounts/kinds/perplexity.js +12 -0
- package/dist/guest/accounts/watch.d.ts +2 -0
- package/dist/guest/accounts/watch.js +12 -2
- package/dist/guest/agents/agent-files.d.ts +26 -6
- package/dist/guest/agents/agent-files.js +84 -14
- package/dist/guest/agents/agent-installer.js +1 -1
- package/dist/guest/agents/local-state.d.ts +5 -2
- package/dist/guest/agents/local-state.js +24 -10
- package/dist/guest/agents/profile-links.d.ts +2 -0
- package/dist/guest/agents/profile-links.js +18 -4
- package/dist/guest/apps/after-install.js +19 -0
- package/dist/guest/apps/app-installer.d.ts +11 -0
- package/dist/guest/apps/app-installer.js +69 -6
- package/dist/guest/apps/comet-unpack.d.ts +20 -0
- package/dist/guest/apps/comet-unpack.js +127 -0
- package/dist/guest/apps/index.d.ts +1 -1
- package/dist/guest/apps/index.js +1 -1
- package/dist/guest/apps/resolvers-agents-web.d.ts +2 -0
- package/dist/guest/apps/resolvers-agents-web.js +7 -0
- package/dist/guest/apps/resolvers.js +2 -0
- package/dist/guest/apps/shortcuts.d.ts +2 -0
- package/dist/guest/apps/shortcuts.js +1 -0
- package/dist/guest/apps/unpack.js +14 -4
- package/dist/guest/boot/boot.d.ts +45 -16
- package/dist/guest/boot/boot.js +325 -149
- package/dist/guest/boot/graph.d.ts +252 -0
- package/dist/guest/boot/graph.js +257 -0
- package/dist/guest/boot/guide-lines.d.ts +25 -0
- package/dist/guest/boot/guide-lines.js +41 -0
- package/dist/guest/boot/guide.d.ts +1 -4
- package/dist/guest/boot/guide.js +6 -8
- package/dist/guest/boot/runner.d.ts +77 -0
- package/dist/guest/boot/runner.js +215 -0
- package/dist/guest/browser/cdp.d.ts +71 -0
- package/dist/guest/browser/cdp.js +306 -0
- package/dist/guest/browser/comet.d.ts +28 -0
- package/dist/guest/browser/comet.js +155 -0
- package/dist/guest/daemon/project-provisioner.js +6 -1
- package/dist/guest/daemon/sessions.js +2 -1
- package/dist/guest/devtools/fivem.d.ts +1 -1
- package/dist/guest/devtools/fivem.js +243 -3
- package/dist/guest/entries/daemon.js +2 -0
- package/dist/guest/runtime/log.d.ts +12 -0
- package/dist/guest/runtime/log.js +29 -5
- package/dist/guest/runtime/pools.d.ts +24 -0
- package/dist/guest/runtime/pools.js +60 -0
- package/dist/guest/runtime/process.d.ts +4 -0
- package/dist/guest/runtime/process.js +38 -1
- package/dist/guest/runtime/status.d.ts +5 -1
- package/dist/guest/runtime/status.js +19 -0
- package/dist/guest/setup/addon-mcp.d.ts +1 -1
- package/dist/guest/setup/addon-mcp.js +52 -12
- package/dist/guest/setup/agent-addons.d.ts +3 -2
- package/dist/guest/setup/agent-addons.js +12 -3
- package/dist/guest/setup/environment.d.ts +1 -1
- package/dist/guest/setup/environment.js +25 -12
- package/dist/guest/setup/headroom.d.ts +8 -3
- package/dist/guest/setup/headroom.js +44 -15
- package/dist/guest/setup/path-plan.d.ts +28 -0
- package/dist/guest/setup/path-plan.js +69 -2
- package/dist/guest/setup/shell-path.d.ts +1 -1
- package/dist/guest/setup/shell-path.js +3 -3
- package/dist/guest/toolchains/fivem/artifacts.d.ts +48 -1
- package/dist/guest/toolchains/fivem/artifacts.js +97 -4
- package/dist/guest/toolchains/fivem/fivem.d.ts +32 -1
- package/dist/guest/toolchains/fivem/fivem.js +168 -3
- package/dist/guest/toolchains/fivem/scaffold.d.ts +35 -0
- package/dist/guest/toolchains/fivem/scaffold.js +105 -0
- package/dist/guest/toolchains/fivem/serve-plan.d.ts +34 -0
- package/dist/guest/toolchains/fivem/serve-plan.js +61 -0
- package/dist/guest/toolchains/installers.d.ts +6 -10
- package/dist/guest/toolchains/installers.js +4 -12
- package/dist/guest/toolchains/languages/go.js +1 -1
- package/dist/guest/toolchains/languages/node.js +2 -1
- package/dist/guest/toolchains/languages/php.d.ts +2 -0
- package/dist/guest/toolchains/languages/php.js +13 -1
- package/dist/guest/toolchains/languages/python-tools.js +1 -1
- package/dist/guest/toolchains/languages/ruby.js +1 -1
- package/dist/guest/toolchains/native/autosdk.d.ts +3 -0
- package/dist/guest/toolchains/native/autosdk.js +50 -0
- package/dist/guest/toolchains/native/binstall.js +1 -1
- package/dist/guest/toolchains/native/msvc/packages.js +10 -4
- package/dist/guest/toolchains/native/rust.d.ts +2 -0
- package/dist/guest/toolchains/native/rust.js +11 -4
- package/dist/guest/toolchains/native/unreal.d.ts +2 -0
- package/dist/guest/toolchains/native/unreal.js +19 -6
- package/dist/guest/toolchains/native/vcruntime.d.ts +2 -3
- package/dist/guest/toolchains/native/vcruntime.js +12 -7
- package/dist/guest/toolchains/native/visual-studio.d.ts +5 -2
- package/dist/guest/toolchains/native/visual-studio.js +127 -25
- package/dist/guest/toolchains/native/vs-request.d.ts +23 -0
- package/dist/guest/toolchains/native/vs-request.js +62 -1
- package/dist/guest/toolchains/not-yet.d.ts +1 -1
- package/dist/guest/toolchains/not-yet.js +3 -3
- package/dist/guest/toolchains/persisted.js +2 -7
- package/dist/guest/toolchains/plan.js +27 -11
- package/dist/guest/toolchains/scheduler.d.ts +2 -21
- package/dist/guest/toolchains/scheduler.js +7 -121
- package/dist/guest/toolchains/setup.d.ts +15 -2
- package/dist/guest/toolchains/setup.js +39 -20
- package/dist/guest/toolchains/signature.d.ts +5 -0
- package/dist/guest/toolchains/signature.js +22 -0
- package/dist/guest/toolchains/split.d.ts +28 -0
- package/dist/guest/toolchains/split.js +60 -0
- package/dist/guest/toolchains/steam/client.js +2 -1
- package/dist/guest/toolchains/step-scheduler.d.ts +51 -0
- package/dist/guest/toolchains/step-scheduler.js +147 -0
- package/dist/guest/toolchains/step.d.ts +13 -0
- package/dist/guest/toolchains/tools/git.js +18 -0
- package/dist/guest/vpn/openvpn.js +3 -4
- package/dist/guest/vpn/tunnel.d.ts +3 -0
- package/dist/guest/vpn/tunnel.js +10 -12
- package/dist/guest/vpn/vpn.js +6 -1
- package/dist/guest/vpn/wireguard.js +11 -4
- package/dist/host/accounts/deliver.js +7 -0
- package/dist/host/accounts/handoff.js +2 -6
- package/dist/host/accounts/index.d.ts +1 -1
- package/dist/host/accounts/index.js +1 -1
- package/dist/host/accounts/kinds/cfx.d.ts +1 -1
- package/dist/host/accounts/kinds/cfx.js +47 -4
- package/dist/host/accounts/kinds/comet.d.ts +2 -0
- package/dist/host/accounts/kinds/comet.js +6 -0
- package/dist/host/accounts/kinds/perplexity.d.ts +2 -0
- package/dist/host/accounts/kinds/perplexity.js +30 -0
- package/dist/host/accounts/leases.d.ts +9 -3
- package/dist/host/accounts/leases.js +13 -2
- package/dist/host/accounts/source.d.ts +7 -1
- package/dist/host/accounts/source.js +28 -1
- package/dist/host/accounts/sources.js +4 -0
- package/dist/host/agent-commands/commands.js +1 -1
- package/dist/host/agent-commands/forwarders.d.ts +14 -2
- package/dist/host/agent-commands/forwarders.js +31 -13
- package/dist/host/agent-commands/reconcile.d.ts +2 -1
- package/dist/host/agent-commands/reconcile.js +7 -8
- package/dist/host/agent-commands/user-path.d.ts +5 -0
- package/dist/host/agent-commands/user-path.js +13 -0
- package/dist/host/github/deliver.d.ts +1 -1
- package/dist/host/github/deliver.js +20 -1
- package/dist/host/github/index.d.ts +2 -1
- package/dist/host/github/index.js +1 -0
- package/dist/host/github/token.d.ts +13 -1
- package/dist/host/github/token.js +19 -2
- package/dist/host/github/verify.d.ts +27 -0
- package/dist/host/github/verify.js +61 -0
- package/dist/host/launch/hints/fivem.d.ts +3 -1
- package/dist/host/launch/hints/fivem.js +68 -2
- package/dist/host/launch/session-file.js +5 -0
- package/dist/host/launch/toolchains.d.ts +2 -1
- package/dist/host/launch/toolchains.js +5 -3
- package/dist/host/profile/accounts.js +2 -4
- package/dist/host/profile/claude-login.d.ts +3 -2
- package/dist/host/profile/claude-login.js +3 -13
- package/dist/host/vpn/index.d.ts +2 -1
- package/dist/host/vpn/index.js +2 -1
- package/dist/host/vpn/last.d.ts +28 -0
- package/dist/host/vpn/last.js +43 -0
- package/dist/host/vpn/login.d.ts +3 -1
- package/dist/host/vpn/login.js +17 -3
- package/dist/host/vpn/nordvpn.d.ts +2 -4
- package/dist/host/vpn/nordvpn.js +2 -24
- package/dist/runtime/agent.js +433 -90
- package/dist/runtime/daemon.js +3378 -1546
- package/dist/runtime/db.js +363 -90
- package/dist/runtime/main.js +5134 -2096
- package/dist/runtime/netproxy.js +308 -69
- package/dist/runtime/tool.js +2867 -1765
- package/dist/runtime/view.js +308 -69
- package/dist/selftest/agent-commands.test.js +45 -7
- package/dist/selftest/agent-paths.test.js +40 -13
- package/dist/selftest/agent-settings.test.d.ts +2 -0
- package/dist/selftest/agent-settings.test.js +94 -0
- package/dist/selftest/agents-web.test.d.ts +2 -0
- package/dist/selftest/agents-web.test.js +647 -0
- package/dist/selftest/app.test.js +7 -3
- package/dist/selftest/boot-runner.test.d.ts +2 -0
- package/dist/selftest/boot-runner.test.js +456 -0
- package/dist/selftest/channel.test.js +15 -0
- package/dist/selftest/cli.test.js +4 -0
- package/dist/selftest/fivem.test.js +249 -3
- package/dist/selftest/github.test.js +94 -9
- package/dist/selftest/guest-boot.test.js +3 -0
- package/dist/selftest/health.test.js +1 -1
- package/dist/selftest/index.js +10 -0
- package/dist/selftest/layout.test.js +5 -0
- package/dist/selftest/menu-coverage.test.d.ts +2 -0
- package/dist/selftest/menu-coverage.test.js +46 -0
- package/dist/selftest/menu-screens.js +37 -1
- package/dist/selftest/menu.test.js +5 -3
- package/dist/selftest/pc-installs.test.js +5 -0
- package/dist/selftest/persisted-installs.test.js +72 -0
- package/dist/selftest/service-accounts.test.js +3 -2
- package/dist/selftest/support/engine-golden.js +28 -1
- package/dist/selftest/support/fixtures.d.ts +15 -0
- package/dist/selftest/support/web-preview.d.ts +34 -1
- package/dist/selftest/support/web-preview.js +21 -18
- package/dist/selftest/toolchains.test.js +23 -1
- package/dist/selftest/ui-text.test.d.ts +7 -0
- package/dist/selftest/ui-text.test.js +300 -0
- package/dist/selftest/vpn.test.js +51 -3
- package/dist/shared/accounts/anthropic.d.ts +5 -0
- package/dist/shared/accounts/anthropic.js +15 -0
- package/dist/shared/accounts/index.d.ts +3 -0
- package/dist/shared/accounts/index.js +3 -0
- package/dist/shared/accounts/kinds/comet.d.ts +12 -0
- package/dist/shared/accounts/kinds/comet.js +64 -0
- package/dist/shared/accounts/kinds/perplexity.d.ts +8 -0
- package/dist/shared/accounts/kinds/perplexity.js +37 -0
- package/dist/shared/accounts/kinds.d.ts +24 -5
- package/dist/shared/accounts/kinds.js +86 -4
- package/dist/shared/accounts/payloads.d.ts +81 -0
- package/dist/shared/accounts/payloads.js +39 -1
- package/dist/shared/apps/agent-addons.d.ts +33 -5
- package/dist/shared/apps/agent-addons.js +95 -3
- package/dist/shared/apps/catalogue-agents-web.d.ts +14 -0
- package/dist/shared/apps/catalogue-agents-web.js +112 -0
- package/dist/shared/apps/catalogue-modding.js +32 -1
- package/dist/shared/apps/catalogue.d.ts +27 -3
- package/dist/shared/apps/catalogue.js +2 -1
- package/dist/shared/apps/index.d.ts +3 -1
- package/dist/shared/apps/index.js +3 -1
- package/dist/shared/channel/schema.d.ts +40 -3
- package/dist/shared/channel/schema.js +9 -0
- package/dist/shared/channel/secrets.d.ts +19 -0
- package/dist/shared/concurrency/index.d.ts +3 -0
- package/dist/shared/concurrency/index.js +3 -0
- package/dist/shared/concurrency/installer-retry.d.ts +6 -0
- package/dist/shared/concurrency/installer-retry.js +10 -0
- package/dist/shared/concurrency/limiter.d.ts +19 -0
- package/dist/shared/concurrency/limiter.js +67 -0
- package/dist/shared/concurrency/pools.d.ts +7 -0
- package/dist/shared/concurrency/pools.js +9 -0
- package/dist/shared/download/archive.d.ts +2 -0
- package/dist/shared/download/archive.js +11 -1
- package/dist/shared/download/bounded-fetch.d.ts +13 -0
- package/dist/shared/download/bounded-fetch.js +40 -0
- package/dist/shared/download/downloader.d.ts +5 -0
- package/dist/shared/download/downloader.js +50 -38
- package/dist/shared/download/index.d.ts +2 -1
- package/dist/shared/download/index.js +2 -1
- package/dist/shared/io/disk.d.ts +9 -0
- package/dist/shared/io/disk.js +19 -0
- package/dist/shared/io/index.d.ts +1 -0
- package/dist/shared/io/index.js +1 -0
- package/dist/shared/readiness.d.ts +9 -0
- package/dist/shared/readiness.js +11 -0
- package/dist/shared/signer.d.ts +24 -0
- package/dist/shared/signer.js +15 -0
- package/dist/shared/vpn/failure.d.ts +10 -0
- package/dist/shared/vpn/failure.js +28 -0
- package/dist/sync/watcher.js +2 -0
- package/dist/web/index.html +1 -1
- package/dist/web/{main-GVZWWP4I.js → main-CCILLX2M.js} +75 -74
- package/native/csharp/HcsHost/AssemblyInfo.cs +3 -3
- package/native/csharp/HostTools/AssemblyInfo.cs +3 -3
- package/native/csharp/HostTools/Program.cs +14 -1
- package/native/csharp/HostTools/UserPath.cs +17 -0
- package/native/csharp/StorageHelper/AssemblyInfo.cs +3 -3
- package/native/scripts/edit-user-path.ps1 +6 -2
- package/package.json +1 -1
- package/sandbox/addons/browser-use-mcp/requirements.in +1 -0
- package/sandbox/addons/browser-use-mcp/requirements.txt +2350 -0
- package/sandbox/addons/chrome-devtools-mcp/package-lock.json +38 -0
- package/sandbox/addons/chrome-devtools-mcp/package.json +7 -0
- package/sandbox/addons/comet-mcp/package-lock.json +1277 -0
- package/sandbox/addons/comet-mcp/package.json +7 -0
- package/sandbox/addons/perplexity-mcp/package-lock.json +1655 -0
- package/sandbox/addons/perplexity-mcp/package.json +7 -0
- package/sandbox/scripts/add-firewall-port.ps1 +18 -4
- package/sandbox/scripts/get-signature.ps1 +13 -0
- package/sandbox/scripts/set-machine-environment.ps1 +30 -15
- package/sandbox/templates/fivem/README.txt +6 -2
- package/sandbox/templates/fivem/cs/Client/Client.csproj +15 -0
- package/sandbox/templates/fivem/cs/Client/ClientMain.cs +20 -0
- package/sandbox/templates/fivem/cs/Server/Server.csproj +14 -0
- package/sandbox/templates/fivem/cs/Server/ServerMain.cs +20 -0
- package/sandbox/templates/fivem/cs/fxmanifest.lua +11 -0
- package/sandbox/templates/fivem/js/client.js +12 -0
- package/sandbox/templates/fivem/js/fxmanifest.lua +9 -0
- package/sandbox/templates/fivem/js/server.js +6 -0
- package/sandbox/templates/fivem/lua/client.lua +8 -0
- package/sandbox/templates/fivem/lua/fxmanifest.lua +10 -0
- package/sandbox/templates/fivem/lua/server.lua +6 -0
- package/sandbox/templates/fivem/server.cfg +37 -0
- package/sandbox/templates/fivem/ts/build.js +17 -0
- package/sandbox/templates/fivem/ts/fxmanifest.lua +9 -0
- package/sandbox/templates/fivem/ts/package.json +16 -0
- package/sandbox/templates/fivem/ts/src/client/client.ts +12 -0
- package/sandbox/templates/fivem/ts/src/client/tsconfig.json +13 -0
- package/sandbox/templates/fivem/ts/src/server/server.ts +6 -0
- package/sandbox/templates/fivem/ts/src/server/tsconfig.json +13 -0
- package/schemas/config.schema.json +120 -27
- package/schemas/sandbox-config.schema.json +45 -14
- package/sandbox/scripts/get-signer.ps1 +0 -8
|
@@ -33,6 +33,7 @@ import {
|
|
|
33
33
|
REQUEST_APP,
|
|
34
34
|
RunDir,
|
|
35
35
|
SAVED,
|
|
36
|
+
SYSTEM,
|
|
36
37
|
SandboxChannel,
|
|
37
38
|
SchemaNode,
|
|
38
39
|
ServerMessageSchema,
|
|
@@ -44,10 +45,16 @@ import {
|
|
|
44
45
|
__commonJS,
|
|
45
46
|
__require,
|
|
46
47
|
__toESM,
|
|
48
|
+
accessView,
|
|
49
|
+
accountsView,
|
|
47
50
|
action,
|
|
48
|
-
|
|
51
|
+
agentCommandsStatus,
|
|
52
|
+
agentEnv,
|
|
53
|
+
agentEnvPage,
|
|
54
|
+
agentEnvView,
|
|
49
55
|
agentPage,
|
|
50
56
|
agentsPage,
|
|
57
|
+
agentsView,
|
|
51
58
|
allowStorePath,
|
|
52
59
|
allowedAnswer,
|
|
53
60
|
allows,
|
|
@@ -55,11 +62,13 @@ import {
|
|
|
55
62
|
appIsOn,
|
|
56
63
|
appRows,
|
|
57
64
|
applyOverrides,
|
|
65
|
+
appsView,
|
|
58
66
|
askChoice,
|
|
59
67
|
assertSafeWorkspace,
|
|
60
68
|
attach,
|
|
61
69
|
auditArgv,
|
|
62
70
|
auditPage,
|
|
71
|
+
auditView,
|
|
63
72
|
autoMigrates,
|
|
64
73
|
c,
|
|
65
74
|
canAnimate,
|
|
@@ -76,6 +85,7 @@ import {
|
|
|
76
85
|
currentUserName,
|
|
77
86
|
customRows,
|
|
78
87
|
dataPage,
|
|
88
|
+
dataView,
|
|
79
89
|
defaultsContext,
|
|
80
90
|
definitionHandler,
|
|
81
91
|
describeCopy,
|
|
@@ -89,6 +99,7 @@ import {
|
|
|
89
99
|
engineLeftovers,
|
|
90
100
|
enginePage,
|
|
91
101
|
engineStatus,
|
|
102
|
+
engineView,
|
|
92
103
|
ensureStorageRoot,
|
|
93
104
|
entriesOf,
|
|
94
105
|
errMsg,
|
|
@@ -106,8 +117,10 @@ import {
|
|
|
106
117
|
githubLogout,
|
|
107
118
|
githubStatus,
|
|
108
119
|
githubTokenRowOf,
|
|
120
|
+
githubView,
|
|
109
121
|
guestWorkspaceOf,
|
|
110
122
|
healthPage,
|
|
123
|
+
healthView,
|
|
111
124
|
healthWith,
|
|
112
125
|
hereDir,
|
|
113
126
|
hostAgent,
|
|
@@ -125,6 +138,7 @@ import {
|
|
|
125
138
|
lastHealth,
|
|
126
139
|
launch,
|
|
127
140
|
ledgerToReopen,
|
|
141
|
+
link,
|
|
128
142
|
listAccounts,
|
|
129
143
|
listAgents,
|
|
130
144
|
listAudit,
|
|
@@ -134,6 +148,7 @@ import {
|
|
|
134
148
|
listSettings,
|
|
135
149
|
loadConfig,
|
|
136
150
|
logsPage,
|
|
151
|
+
logsView,
|
|
137
152
|
lookAtSandbox,
|
|
138
153
|
loosenedRequests,
|
|
139
154
|
measureFolder,
|
|
@@ -157,6 +172,7 @@ import {
|
|
|
157
172
|
previewGuest,
|
|
158
173
|
printJson,
|
|
159
174
|
projectsPage,
|
|
175
|
+
projectsView,
|
|
160
176
|
protectPrivateFolder,
|
|
161
177
|
provisionJoined,
|
|
162
178
|
readLocalConfig,
|
|
@@ -179,13 +195,16 @@ import {
|
|
|
179
195
|
sandboxPage,
|
|
180
196
|
sandboxPids,
|
|
181
197
|
sandboxStatus,
|
|
198
|
+
sandboxView,
|
|
182
199
|
serviceCategory,
|
|
183
200
|
servicePage,
|
|
184
201
|
sessionsPage,
|
|
185
202
|
sessionsToReopen,
|
|
203
|
+
sessionsView,
|
|
186
204
|
settingRow,
|
|
187
205
|
settingsOf,
|
|
188
206
|
settingsPage,
|
|
207
|
+
settingsView,
|
|
189
208
|
setup,
|
|
190
209
|
shouldReopen,
|
|
191
210
|
showData,
|
|
@@ -194,6 +213,7 @@ import {
|
|
|
194
213
|
spawnDetached,
|
|
195
214
|
staleMountNote,
|
|
196
215
|
storagePage,
|
|
216
|
+
storageView,
|
|
197
217
|
summary,
|
|
198
218
|
summaryText,
|
|
199
219
|
syncBack,
|
|
@@ -205,6 +225,7 @@ import {
|
|
|
205
225
|
trustStorePath,
|
|
206
226
|
updatesPage,
|
|
207
227
|
updatesStatus,
|
|
228
|
+
updatesView,
|
|
208
229
|
useSharedSandbox,
|
|
209
230
|
useTasklistCache,
|
|
210
231
|
userConfigPath,
|
|
@@ -219,16 +240,18 @@ import {
|
|
|
219
240
|
vpnLoginRowOf,
|
|
220
241
|
vpnLogout,
|
|
221
242
|
vpnStatus,
|
|
243
|
+
vpnView,
|
|
222
244
|
watch,
|
|
223
245
|
web,
|
|
224
246
|
webPage,
|
|
225
247
|
webServer,
|
|
226
248
|
webStatus,
|
|
249
|
+
webView,
|
|
227
250
|
whereOf,
|
|
228
251
|
withOperationCommands,
|
|
229
252
|
working,
|
|
230
253
|
writeJson
|
|
231
|
-
} from "./chunk-
|
|
254
|
+
} from "./chunk-ZTTOF5V3.js";
|
|
232
255
|
|
|
233
256
|
// node_modules/commander/lib/error.js
|
|
234
257
|
var require_error = __commonJS({
|
|
@@ -3948,6 +3971,7 @@ var COMMAND_LIST = [
|
|
|
3948
3971
|
"sandbox account status the service sign-ins (Epic, Steam, Unity, signing keys ...)",
|
|
3949
3972
|
"sandbox account import epic take this PC's Epic Games Launcher sign-in for sandboxes",
|
|
3950
3973
|
"sandbox account login cfx type a FiveM server key to keep for sandboxes",
|
|
3974
|
+
"sandbox account login perplexity type a Perplexity API key (or: import perplexity --from .env)",
|
|
3951
3975
|
"sandbox account logout steam forget a service sign-in",
|
|
3952
3976
|
"sandbox account save free --api-key save an Anthropic API key you paste in (not shown)"
|
|
3953
3977
|
],
|
|
@@ -3960,7 +3984,7 @@ var COMMAND_LIST = [
|
|
|
3960
3984
|
},
|
|
3961
3985
|
{
|
|
3962
3986
|
name: "name",
|
|
3963
|
-
description: "account name, or the service (status, import, login, logout): epic, steam, unity, cfx, keystore, play, expo or
|
|
3987
|
+
description: "account name, or the service (status, import, login, logout): epic, steam, unity, cfx, keystore, play, expo, appstore, perplexity or comet",
|
|
3964
3988
|
required: false,
|
|
3965
3989
|
choices: "accounts"
|
|
3966
3990
|
}
|
|
@@ -4153,7 +4177,7 @@ var COMMAND_LIST = [
|
|
|
4153
4177
|
},
|
|
4154
4178
|
{
|
|
4155
4179
|
name: "agent-commands",
|
|
4156
|
-
summary: "
|
|
4180
|
+
summary: "make claude, codex ... on this PC start in a hidden sandbox and attach",
|
|
4157
4181
|
group: "Advanced",
|
|
4158
4182
|
args: [{ name: "action", description: "on, off or status", required: false, choices: ["status", "on", "off"] }],
|
|
4159
4183
|
options: []
|
|
@@ -4887,7 +4911,9 @@ var TextScreen = class {
|
|
|
4887
4911
|
}
|
|
4888
4912
|
if (key.text) {
|
|
4889
4913
|
const accept = this.o.accept;
|
|
4890
|
-
const add = [...key.text.replace(/[\r\n]/g, "")].filter(
|
|
4914
|
+
const add = [...key.text.replace(/\x1b?\[20[01]~/g, "").replace(/[\r\n]/g, "")].filter(
|
|
4915
|
+
(c2) => !accept || accept.test(c2)
|
|
4916
|
+
);
|
|
4891
4917
|
if (!add.length) return;
|
|
4892
4918
|
set([...chars.slice(0, this.cursor), ...add, ...chars.slice(this.cursor)], this.cursor + add.length);
|
|
4893
4919
|
}
|
|
@@ -6054,9 +6080,10 @@ var Terminal = class {
|
|
|
6054
6080
|
});
|
|
6055
6081
|
}
|
|
6056
6082
|
push(str, key) {
|
|
6083
|
+
const marker = key?.name === "paste-start" || key?.name === "paste-end";
|
|
6057
6084
|
const event = {
|
|
6058
6085
|
name: key?.name ?? "",
|
|
6059
|
-
text: str && !key?.ctrl && !key?.meta && str.length >= 1 && str >= " " && str !== "\x7F" ? str : "",
|
|
6086
|
+
text: str && !marker && !key?.ctrl && !key?.meta && str.length >= 1 && str >= " " && str !== "\x7F" ? str : "",
|
|
6060
6087
|
ctrl: Boolean(key?.ctrl),
|
|
6061
6088
|
meta: Boolean(key?.meta),
|
|
6062
6089
|
shift: Boolean(key?.shift)
|
|
@@ -6091,6 +6118,8 @@ var App = class {
|
|
|
6091
6118
|
onKey = () => void 0;
|
|
6092
6119
|
/** The navigation on the left of every screen (none: no navigation column). */
|
|
6093
6120
|
nav = () => void 0;
|
|
6121
|
+
/** Opens another section of the menu (the shell sets it): what a link to a setting or a view does. */
|
|
6122
|
+
goTo = () => Promise.resolve();
|
|
6094
6123
|
/** The screens being shown, innermost last: a dialog is drawn over the one below it. */
|
|
6095
6124
|
shown = [];
|
|
6096
6125
|
redrawNow = null;
|
|
@@ -6200,6 +6229,9 @@ var App = class {
|
|
|
6200
6229
|
}
|
|
6201
6230
|
};
|
|
6202
6231
|
|
|
6232
|
+
// src/cli/menu/io-menu.ts
|
|
6233
|
+
import { spawn } from "node:child_process";
|
|
6234
|
+
|
|
6203
6235
|
// src/cli/menu/settings/ask-path.ts
|
|
6204
6236
|
function askPath(app, o) {
|
|
6205
6237
|
return app.pickPath({
|
|
@@ -6696,6 +6728,31 @@ var ValueEditor = class {
|
|
|
6696
6728
|
}
|
|
6697
6729
|
};
|
|
6698
6730
|
|
|
6731
|
+
// src/cli/menu/views.ts
|
|
6732
|
+
var MENU_VIEWS = [
|
|
6733
|
+
{ view: agentsView, section: "Agents" },
|
|
6734
|
+
{ view: agentEnvView, section: "Agents" },
|
|
6735
|
+
{ view: sessionsView, section: "Sessions" },
|
|
6736
|
+
{ view: sandboxView, section: "Sandbox" },
|
|
6737
|
+
{ view: settingsView, section: "Settings" },
|
|
6738
|
+
{ view: accountsView, section: "Accounts" },
|
|
6739
|
+
{ view: appsView, section: "Apps" },
|
|
6740
|
+
{ view: projectsView, section: "Sandbox" },
|
|
6741
|
+
{ view: healthView, section: "Maintenance" },
|
|
6742
|
+
{ view: dataView, section: "Maintenance" },
|
|
6743
|
+
{ view: storageView, section: "Maintenance" },
|
|
6744
|
+
{ view: logsView, section: "Maintenance" },
|
|
6745
|
+
{ view: auditView, section: "Maintenance" },
|
|
6746
|
+
{ view: updatesView, section: "Maintenance" },
|
|
6747
|
+
{ view: engineView, section: "Maintenance" },
|
|
6748
|
+
{ view: webView, section: "Maintenance" },
|
|
6749
|
+
{ view: accessView, section: "Maintenance" },
|
|
6750
|
+
// The Settings page draws the VPN row itself (its login is staged with the settings); the view lists its operations.
|
|
6751
|
+
{ view: vpnView, section: "Settings" },
|
|
6752
|
+
// The same for the GitHub token row.
|
|
6753
|
+
{ view: githubView, section: "Settings" }
|
|
6754
|
+
];
|
|
6755
|
+
|
|
6699
6756
|
// src/cli/menu/io-menu.ts
|
|
6700
6757
|
async function ask(app, where, q, said) {
|
|
6701
6758
|
const lines = [...said, ...q.lines ?? [], ..."problem" in q && q.problem ? [Theme.warn(q.problem)] : []];
|
|
@@ -6738,7 +6795,22 @@ async function ask(app, where, q, said) {
|
|
|
6738
6795
|
});
|
|
6739
6796
|
}
|
|
6740
6797
|
}
|
|
6741
|
-
function
|
|
6798
|
+
function placeOf(view) {
|
|
6799
|
+
const place = MENU_VIEWS.find((m) => m.view.id === view);
|
|
6800
|
+
if (!place) return void 0;
|
|
6801
|
+
return { section: place.section, ...view === "agentEnv" ? { category: "env" } : {} };
|
|
6802
|
+
}
|
|
6803
|
+
function openUrl(href) {
|
|
6804
|
+
if (!/^https:\/\/github\.com\//.test(href)) return;
|
|
6805
|
+
const child = spawn(SYSTEM.cmd(), ["/c", "start", '""', href.replace(/&/g, "^&")], {
|
|
6806
|
+
stdio: "ignore",
|
|
6807
|
+
detached: true,
|
|
6808
|
+
windowsHide: true
|
|
6809
|
+
});
|
|
6810
|
+
child.on("error", () => void 0);
|
|
6811
|
+
child.unref();
|
|
6812
|
+
}
|
|
6813
|
+
function follow(target, app) {
|
|
6742
6814
|
switch (target.kind) {
|
|
6743
6815
|
case "terminal":
|
|
6744
6816
|
return { exit: { kind: "run", argv: ["attach", target.session] } };
|
|
@@ -6746,8 +6818,17 @@ function follow(target) {
|
|
|
6746
6818
|
return { exit: { kind: "run", argv: ["launch", "--harness", target.agent] } };
|
|
6747
6819
|
case "command":
|
|
6748
6820
|
return { exit: { kind: "run", argv: [...target.argv] } };
|
|
6749
|
-
case "view":
|
|
6750
|
-
|
|
6821
|
+
case "view": {
|
|
6822
|
+
const place = placeOf(target.view);
|
|
6823
|
+
if (!place || !app) return {};
|
|
6824
|
+
return app.goTo(place.section, { category: place.category }).then(() => ({}));
|
|
6825
|
+
}
|
|
6826
|
+
case "setting":
|
|
6827
|
+
if (!app) return {};
|
|
6828
|
+
return app.goTo("Settings", { search: target.key }).then(() => ({}));
|
|
6829
|
+
case "url":
|
|
6830
|
+
openUrl(target.href);
|
|
6831
|
+
return { notice: Theme.muted("Opened " + target.href + " in your browser.") };
|
|
6751
6832
|
}
|
|
6752
6833
|
}
|
|
6753
6834
|
var MenuOperations = class {
|
|
@@ -6759,7 +6840,7 @@ var MenuOperations = class {
|
|
|
6759
6840
|
runner;
|
|
6760
6841
|
/** Does what an action of a page says: follows a link, or asks for its fields and runs its operation. */
|
|
6761
6842
|
async perform(action2, where, busy, onOutput) {
|
|
6762
|
-
if (action2.kind === "link") return follow(action2.target);
|
|
6843
|
+
if (action2.kind === "link") return follow(action2.target, this.app);
|
|
6763
6844
|
const def = operationById(action2.op);
|
|
6764
6845
|
if (!def) return { notice: Theme.error(Theme.glyph.cross + " Unknown operation " + action2.op + ".") };
|
|
6765
6846
|
const answers = await this.fields(action2, def, where);
|
|
@@ -6785,6 +6866,15 @@ var MenuOperations = class {
|
|
|
6785
6866
|
}
|
|
6786
6867
|
return answers;
|
|
6787
6868
|
}
|
|
6869
|
+
/** A failure that names a fix: a dialog with the fix as a button; its result replaces the failure notice. */
|
|
6870
|
+
async offerFix(problem, where, busy) {
|
|
6871
|
+
const fix = problem.action;
|
|
6872
|
+
const def = fix ? operationById(fix.op) : void 0;
|
|
6873
|
+
if (!fix || !def) return void 0;
|
|
6874
|
+
const yes = await this.app.ask(problem.message, problem.fix ? [problem.fix] : [], fix.label);
|
|
6875
|
+
if (!yes) return void 0;
|
|
6876
|
+
return await this.run(def, fix.input ?? {}, where, busy) ?? Theme.ok(Theme.glyph.ok + " Done.");
|
|
6877
|
+
}
|
|
6788
6878
|
/**
|
|
6789
6879
|
* Runs a definition with this input and returns the notice to show: its text (✓), the problem and its fix (✘), or
|
|
6790
6880
|
* undefined when a question was declined (nothing changed, nothing to say).
|
|
@@ -6805,7 +6895,8 @@ var MenuOperations = class {
|
|
|
6805
6895
|
if (e instanceof Cancelled) return void 0;
|
|
6806
6896
|
const problem = toWireError(e);
|
|
6807
6897
|
if (problem.kind === "bug") return Theme.error(Theme.glyph.cross + " " + errMsg(e));
|
|
6808
|
-
|
|
6898
|
+
const notice = Theme.error(Theme.glyph.cross + " " + problem.message) + (problem.fix ? Theme.muted(" " + problem.fix) : "");
|
|
6899
|
+
return await this.offerFix(problem, where, busy) ?? notice;
|
|
6809
6900
|
}
|
|
6810
6901
|
}
|
|
6811
6902
|
};
|
|
@@ -7130,7 +7221,7 @@ function accountsOptions(m) {
|
|
|
7130
7221
|
...m.services.map((s) => ({
|
|
7131
7222
|
id: serviceCategory(s.kind),
|
|
7132
7223
|
label: s.label,
|
|
7133
|
-
description: "Your " + s.label + " sign-in for sandboxes that use " + s.
|
|
7224
|
+
description: "Your " + s.label + " sign-in for sandboxes that use " + s.usedFor + "."
|
|
7134
7225
|
}))
|
|
7135
7226
|
],
|
|
7136
7227
|
items: [
|
|
@@ -7714,6 +7805,9 @@ var SeveralAgents = class {
|
|
|
7714
7805
|
};
|
|
7715
7806
|
|
|
7716
7807
|
// src/cli/menu/pages/agents-page.ts
|
|
7808
|
+
function commandsOf(m) {
|
|
7809
|
+
return m.agentCommands ?? { enabled: m.hostAgents.length > 0, dir: "", found: [] };
|
|
7810
|
+
}
|
|
7717
7811
|
function agentsList(m) {
|
|
7718
7812
|
const removable = m.removable ?? [];
|
|
7719
7813
|
return {
|
|
@@ -7728,7 +7822,12 @@ function agentsList(m) {
|
|
|
7728
7822
|
};
|
|
7729
7823
|
}
|
|
7730
7824
|
function startView(m) {
|
|
7731
|
-
|
|
7825
|
+
const page = agentsPage(agentsList(m), commandsOf(m));
|
|
7826
|
+
return menuView({ ...page, sections: page.sections.slice(0, 1) }, { category: "start", refresh: false });
|
|
7827
|
+
}
|
|
7828
|
+
function commandsView(m) {
|
|
7829
|
+
const page = agentsPage(agentsList(m), commandsOf(m));
|
|
7830
|
+
return menuView({ ...page, sections: page.sections.slice(1) }, { category: "host", refresh: false });
|
|
7732
7831
|
}
|
|
7733
7832
|
function hostAgentsToShow(enabled, found) {
|
|
7734
7833
|
return enabled ? found.map((a) => a.harness) : [];
|
|
@@ -7754,14 +7853,19 @@ function agentCategories(m) {
|
|
|
7754
7853
|
label: "Start",
|
|
7755
7854
|
description: "Agents you can start in " + m.folder + ". Add an agent at the end of the list."
|
|
7756
7855
|
},
|
|
7757
|
-
|
|
7758
|
-
...m.hostAgents.length ? [
|
|
7856
|
+
...m.claudeEnv ? [
|
|
7759
7857
|
{
|
|
7760
|
-
id: "
|
|
7761
|
-
label: "
|
|
7762
|
-
description: "
|
|
7858
|
+
id: "env",
|
|
7859
|
+
label: "Claude environment",
|
|
7860
|
+
description: "Models, limits, how many subagents run at once, and other variables of Claude."
|
|
7763
7861
|
}
|
|
7764
|
-
] : []
|
|
7862
|
+
] : [],
|
|
7863
|
+
{ id: "options", label: "Options", description: "How a start goes, and the other ways to start." },
|
|
7864
|
+
{
|
|
7865
|
+
id: "host",
|
|
7866
|
+
label: "On this PC",
|
|
7867
|
+
description: "Agent commands: typing claude, codex ... here starts them in a sandbox. The real agents are listed too."
|
|
7868
|
+
}
|
|
7765
7869
|
];
|
|
7766
7870
|
}
|
|
7767
7871
|
function startRow(item2, m, cwd) {
|
|
@@ -7773,8 +7877,18 @@ function startRow(item2, m, cwd) {
|
|
|
7773
7877
|
details: [Theme.muted("Command ") + commandLine(startArgv(m, name, cwd))]
|
|
7774
7878
|
};
|
|
7775
7879
|
}
|
|
7880
|
+
function envView(m) {
|
|
7881
|
+
return m.claudeEnv ? menuView(agentEnvPage(m.claudeEnv), { category: "env", refresh: false }) : void 0;
|
|
7882
|
+
}
|
|
7883
|
+
function lastStart(argv) {
|
|
7884
|
+
const at = argv.indexOf("--harness");
|
|
7885
|
+
const agent = at >= 0 ? argv[at + 1] : argv[0];
|
|
7886
|
+
return agent ?? "last start";
|
|
7887
|
+
}
|
|
7776
7888
|
function agentsOptions(m, cwd = process.cwd()) {
|
|
7777
|
-
const
|
|
7889
|
+
const view = startView(m);
|
|
7890
|
+
const env = envView(m);
|
|
7891
|
+
const commands = commandsView(m);
|
|
7778
7892
|
return {
|
|
7779
7893
|
path: [],
|
|
7780
7894
|
categories: agentCategories(m),
|
|
@@ -7785,11 +7899,13 @@ function agentsOptions(m, cwd = process.cwd()) {
|
|
|
7785
7899
|
label: "Repeat last",
|
|
7786
7900
|
category: "start",
|
|
7787
7901
|
section: "Quick start",
|
|
7788
|
-
hint: Theme.muted(Text.truncate(
|
|
7789
|
-
description: "
|
|
7902
|
+
hint: Theme.muted(Text.truncate(lastStart(m.last), 50)),
|
|
7903
|
+
description: "Starts the same agent again with the same options."
|
|
7790
7904
|
}
|
|
7791
7905
|
] : [],
|
|
7792
|
-
...
|
|
7906
|
+
...view.items.map((item2) => startRow(item2, m, cwd)),
|
|
7907
|
+
...env?.items ?? [],
|
|
7908
|
+
...commands.items,
|
|
7793
7909
|
{
|
|
7794
7910
|
value: "opt:attach",
|
|
7795
7911
|
label: "Attach this terminal",
|
|
@@ -7843,8 +7959,8 @@ function agentsOptions(m, cwd = process.cwd()) {
|
|
|
7843
7959
|
description: "Runs the real " + agent + " on this PC, with no sandbox around it."
|
|
7844
7960
|
}))
|
|
7845
7961
|
],
|
|
7846
|
-
enterLabel: (
|
|
7847
|
-
actions: (category) => category === "start" ?
|
|
7962
|
+
enterLabel: (category, id) => ENTER[id ?? ""] ?? (id?.startsWith("agent:") ? "start" : id?.startsWith("host:") ? "run" : category === "host" ? commands.enterLabel(category, id) : "open"),
|
|
7963
|
+
actions: (category) => category === "start" ? view.actions : category === "env" ? env?.actions ?? [] : category === "host" ? commands.actions : []
|
|
7848
7964
|
};
|
|
7849
7965
|
}
|
|
7850
7966
|
var ENTER = {
|
|
@@ -7875,7 +7991,7 @@ var AgentsPage = class extends ListPage {
|
|
|
7875
7991
|
facts;
|
|
7876
7992
|
current() {
|
|
7877
7993
|
if (!this.facts) throw new Error("The agents tab was not loaded");
|
|
7878
|
-
const { agents, commands, last } = this.facts;
|
|
7994
|
+
const { agents, commands, last, env } = this.facts;
|
|
7879
7995
|
return {
|
|
7880
7996
|
folder: this.folder,
|
|
7881
7997
|
defaultAgent: agents.defaultAgent,
|
|
@@ -7884,7 +8000,13 @@ var AgentsPage = class extends ListPage {
|
|
|
7884
8000
|
attach: this.attach,
|
|
7885
8001
|
window: this.window,
|
|
7886
8002
|
hostAgents: hostAgentsToShow(commands.enabled, commands.found),
|
|
7887
|
-
|
|
8003
|
+
agentCommands: {
|
|
8004
|
+
enabled: commands.enabled,
|
|
8005
|
+
dir: commands.dir,
|
|
8006
|
+
found: commands.found.map((a) => ({ command: a.command, harness: a.harness, real: a.real }))
|
|
8007
|
+
},
|
|
8008
|
+
removable: agents.agents.filter((a) => a.removable).map((a) => a.name),
|
|
8009
|
+
...env ? { claudeEnv: env } : {}
|
|
7888
8010
|
};
|
|
7889
8011
|
}
|
|
7890
8012
|
/** The cursor starts on the default agent. */
|
|
@@ -7895,7 +8017,8 @@ var AgentsPage = class extends ListPage {
|
|
|
7895
8017
|
this.facts = {
|
|
7896
8018
|
agents: await readQuery(listAgents, this.ctx),
|
|
7897
8019
|
commands: await new AgentCommandsService(this.ctx).statusAsync(),
|
|
7898
|
-
last: readHistory()[0]?.argv
|
|
8020
|
+
last: readHistory()[0]?.argv,
|
|
8021
|
+
env: "claude" in this.ctx.loaded.config.harnesses ? await readQuery(agentEnv, this.ctx, { agent: "claude" }) : void 0
|
|
7899
8022
|
};
|
|
7900
8023
|
this.model = this.current();
|
|
7901
8024
|
}
|
|
@@ -7905,9 +8028,19 @@ var AgentsPage = class extends ListPage {
|
|
|
7905
8028
|
}
|
|
7906
8029
|
async act(result) {
|
|
7907
8030
|
const model = this.current();
|
|
7908
|
-
const
|
|
8031
|
+
const env = this.category === "env" ? envView(model) : void 0;
|
|
8032
|
+
if (env) {
|
|
8033
|
+
const picked = env.resolve(result);
|
|
8034
|
+
if (picked?.kind === "action") return this.operate(picked.action);
|
|
8035
|
+
return {};
|
|
8036
|
+
}
|
|
8037
|
+
const chosen = startView(model).resolve(result) ?? commandsView(model).resolve(result);
|
|
7909
8038
|
if (chosen?.kind === "action") {
|
|
7910
8039
|
const { action: action2 } = chosen;
|
|
8040
|
+
if (action2.kind === "link" && action2.target.kind === "view") {
|
|
8041
|
+
await this.selectCategory("env");
|
|
8042
|
+
return {};
|
|
8043
|
+
}
|
|
7911
8044
|
if (action2.kind === "link" && action2.target.kind === "start-agent")
|
|
7912
8045
|
return { exit: { kind: "run", argv: startArgv(model, action2.target.agent, process.cwd()) } };
|
|
7913
8046
|
return this.operate(action2);
|
|
@@ -8158,15 +8291,14 @@ var CATEGORIES2 = [
|
|
|
8158
8291
|
},
|
|
8159
8292
|
{ id: "more", label: "More commands", description: "Less common commands." }
|
|
8160
8293
|
];
|
|
8161
|
-
var MORE_COMMANDS = ["sync", "config", "generate", "exec"
|
|
8294
|
+
var MORE_COMMANDS = ["sync", "config", "generate", "exec"];
|
|
8162
8295
|
var NO_LOGS = { folder: "", files: [], crash: false };
|
|
8163
8296
|
var NO_WEB = { running: false, port: null, address: null };
|
|
8164
8297
|
var MORE_LABELS = {
|
|
8165
8298
|
sync: "Copy history back now",
|
|
8166
8299
|
config: "Your settings file",
|
|
8167
8300
|
generate: "Preview a start",
|
|
8168
|
-
exec: "Run a command in the sandbox"
|
|
8169
|
-
"agent-commands": "Agent commands (Beta)"
|
|
8301
|
+
exec: "Run a command in the sandbox"
|
|
8170
8302
|
};
|
|
8171
8303
|
function dataMenuView(data) {
|
|
8172
8304
|
return data ? menuView(dataPage(data), { category: "data", prefix: "data:", refresh: false }) : void 0;
|
|
@@ -8205,7 +8337,12 @@ var NO_UPDATES = {
|
|
|
8205
8337
|
settings: { pending: [], error: null }
|
|
8206
8338
|
};
|
|
8207
8339
|
function logsMenu(files) {
|
|
8208
|
-
|
|
8340
|
+
const follow2 = link({ kind: "command", argv: ["logs", "--follow"] }, "Follow the newest log", {
|
|
8341
|
+
key: "f",
|
|
8342
|
+
verb: "follow in the terminal",
|
|
8343
|
+
importance: 2
|
|
8344
|
+
});
|
|
8345
|
+
return menuView({ ...logsPage(files), empty: void 0, actions: [follow2] }, { category: "logs", refresh: false });
|
|
8209
8346
|
}
|
|
8210
8347
|
function auditMenu(m) {
|
|
8211
8348
|
return m.audit ? menuView(auditPage(m.audit), { category: "activity", prefix: "audit:", refresh: false }) : void 0;
|
|
@@ -8482,18 +8619,18 @@ var CATEGORIES3 = [
|
|
|
8482
8619
|
function statusView(m) {
|
|
8483
8620
|
return menuView(sandboxPage(m.report), { category: "status", prefix: "status:", refresh: false });
|
|
8484
8621
|
}
|
|
8485
|
-
function
|
|
8622
|
+
function projectsView2(m) {
|
|
8486
8623
|
return menuView(projectsPage(m.projects), { category: "projects", refresh: false });
|
|
8487
8624
|
}
|
|
8488
8625
|
function viewFor(m, category) {
|
|
8489
|
-
if (category === "projects") return
|
|
8626
|
+
if (category === "projects") return projectsView2(m);
|
|
8490
8627
|
if (category === "status" || category === void 0) return statusView(m);
|
|
8491
8628
|
return void 0;
|
|
8492
8629
|
}
|
|
8493
8630
|
function sandboxOptions(m) {
|
|
8494
8631
|
const running = m.report.sandbox.running;
|
|
8495
8632
|
const status = statusView(m);
|
|
8496
|
-
const projects =
|
|
8633
|
+
const projects = projectsView2(m);
|
|
8497
8634
|
const statusItems = [...running ? [] : startRows(m.defaultAgent, "status"), ...status.items];
|
|
8498
8635
|
const noDatabases = m.databases ? [] : running ? [
|
|
8499
8636
|
{
|
|
@@ -8623,11 +8760,17 @@ var SandboxPage = class extends ListPage {
|
|
|
8623
8760
|
};
|
|
8624
8761
|
|
|
8625
8762
|
// src/cli/menu/pages/sessions-page.ts
|
|
8626
|
-
function
|
|
8627
|
-
|
|
8763
|
+
function sessionsMenu(m) {
|
|
8764
|
+
const resume2 = link({ kind: "command", argv: ["resume"] }, "Reopen last sessions", {
|
|
8765
|
+
key: "o",
|
|
8766
|
+
verb: "reopen last sessions",
|
|
8767
|
+
importance: 2
|
|
8768
|
+
});
|
|
8769
|
+
const page = sessionsPage({ ...m, wide: false });
|
|
8770
|
+
return menuView({ ...page, actions: [...page.actions ?? [], resume2] });
|
|
8628
8771
|
}
|
|
8629
8772
|
function sessionsOptions(m) {
|
|
8630
|
-
const v =
|
|
8773
|
+
const v = sessionsMenu(m);
|
|
8631
8774
|
return { path: [], items: v.items, actions: v.actions, enterLabel: v.enterLabel };
|
|
8632
8775
|
}
|
|
8633
8776
|
var SessionsPage = class extends ListPage {
|
|
@@ -8648,7 +8791,7 @@ var SessionsPage = class extends ListPage {
|
|
|
8648
8791
|
return sessionsOptions(this.model);
|
|
8649
8792
|
}
|
|
8650
8793
|
async act(result) {
|
|
8651
|
-
const chosen =
|
|
8794
|
+
const chosen = sessionsMenu(this.model).resolve(result);
|
|
8652
8795
|
if (!chosen) return {};
|
|
8653
8796
|
if (chosen.kind === "refresh") return { reload: true };
|
|
8654
8797
|
return this.operations.perform(chosen.action, [this.label], (text2) => this.busy(text2));
|
|
@@ -8781,10 +8924,22 @@ var SettingsPage = class extends ListPage {
|
|
|
8781
8924
|
killSwitch: true,
|
|
8782
8925
|
login: "none",
|
|
8783
8926
|
loginSavedAt: null,
|
|
8784
|
-
running: null
|
|
8927
|
+
running: null,
|
|
8928
|
+
lastFailure: null
|
|
8785
8929
|
};
|
|
8786
8930
|
/** Whether a GitHub token is saved (never the token): the token row needs only its state. */
|
|
8787
|
-
github = {
|
|
8931
|
+
github = {
|
|
8932
|
+
shareToken: false,
|
|
8933
|
+
gitAccess: "full",
|
|
8934
|
+
token: "none",
|
|
8935
|
+
kind: null,
|
|
8936
|
+
savedAt: null,
|
|
8937
|
+
login: null,
|
|
8938
|
+
expiresAt: null,
|
|
8939
|
+
repoCount: null,
|
|
8940
|
+
checkedAt: null,
|
|
8941
|
+
tokenUrl: ""
|
|
8942
|
+
};
|
|
8788
8943
|
get file() {
|
|
8789
8944
|
return this.files[this.scope];
|
|
8790
8945
|
}
|
|
@@ -9057,11 +9212,11 @@ var MenuStateSchema = external_exports.strictObject({
|
|
|
9057
9212
|
function stateFile(dir) {
|
|
9058
9213
|
return new JsonFile(MenuStateSchema, path8.join(dir, "menu-state.json"));
|
|
9059
9214
|
}
|
|
9060
|
-
function viewToState(
|
|
9215
|
+
function viewToState(view, labels) {
|
|
9061
9216
|
const screens = {};
|
|
9062
|
-
for (const [label, screen] of Object.entries(
|
|
9217
|
+
for (const [label, screen] of Object.entries(view.screens))
|
|
9063
9218
|
if (labels.includes(label) && (screen.category || screen.search)) screens[label] = screen;
|
|
9064
|
-
return { section: labels[
|
|
9219
|
+
return { section: labels[view.section] ?? labels[0] ?? "", screens };
|
|
9065
9220
|
}
|
|
9066
9221
|
function stateToView(state, labels) {
|
|
9067
9222
|
const section = labels.indexOf(state.section);
|
|
@@ -9078,9 +9233,9 @@ function readMenuView(labels, dir = userDir()) {
|
|
|
9078
9233
|
return void 0;
|
|
9079
9234
|
}
|
|
9080
9235
|
}
|
|
9081
|
-
function saveMenuView(
|
|
9236
|
+
function saveMenuView(view, labels, dir = userDir()) {
|
|
9082
9237
|
try {
|
|
9083
|
-
stateFile(dir).write(viewToState(
|
|
9238
|
+
stateFile(dir).write(viewToState(view, labels));
|
|
9084
9239
|
} catch {
|
|
9085
9240
|
}
|
|
9086
9241
|
}
|
|
@@ -9101,6 +9256,7 @@ var Shell = class {
|
|
|
9101
9256
|
this.draft = draft;
|
|
9102
9257
|
this.afterSave = afterSave;
|
|
9103
9258
|
app.nav = () => this.nav();
|
|
9259
|
+
app.goTo = (section, where) => this.goTo(section, where);
|
|
9104
9260
|
}
|
|
9105
9261
|
app;
|
|
9106
9262
|
pages;
|
|
@@ -9145,10 +9301,10 @@ var Shell = class {
|
|
|
9145
9301
|
return { section: this.active, screens: Object.fromEntries(this.screens) };
|
|
9146
9302
|
}
|
|
9147
9303
|
/** Opens the section a view names and puts each section back where it was (what is gone is ignored). */
|
|
9148
|
-
async restore(
|
|
9304
|
+
async restore(view) {
|
|
9149
9305
|
this.restored.clear();
|
|
9150
|
-
for (const [label, screen] of Object.entries(
|
|
9151
|
-
await this.openTab(
|
|
9306
|
+
for (const [label, screen] of Object.entries(view.screens)) this.screens.set(label, screen);
|
|
9307
|
+
await this.openTab(view.section);
|
|
9152
9308
|
}
|
|
9153
9309
|
/** Opens a section by index (loads its data); the first time, it goes back to the category and search it had. */
|
|
9154
9310
|
async openTab(index) {
|
|
@@ -9163,6 +9319,15 @@ var Shell = class {
|
|
|
9163
9319
|
await this.page.selectCategory(wanted.category);
|
|
9164
9320
|
if (wanted?.search) this.page.restoreSearch?.(wanted.search);
|
|
9165
9321
|
}
|
|
9322
|
+
/** Opens a section by name, on a category and/or with a search typed (a link from another page). */
|
|
9323
|
+
async goTo(section, where = {}) {
|
|
9324
|
+
const index = this.pages.findIndex((p) => p.label === section);
|
|
9325
|
+
if (index < 0) return;
|
|
9326
|
+
await this.openTab(index);
|
|
9327
|
+
if (where.category) await this.page.selectCategory(where.category);
|
|
9328
|
+
if (where.search) this.page.restoreSearch?.(where.search);
|
|
9329
|
+
this.setFocus("list");
|
|
9330
|
+
}
|
|
9166
9331
|
/** Puts the keyboard in the navigation or in the list. */
|
|
9167
9332
|
setFocus(focus) {
|
|
9168
9333
|
this.focus = focus;
|
|
@@ -9311,10 +9476,10 @@ var Menu = class {
|
|
|
9311
9476
|
status() {
|
|
9312
9477
|
const folder = Theme.muted(Text.middle(process.cwd(), 70));
|
|
9313
9478
|
if (!isSandboxRunning()) return Theme.muted(Theme.glyph.off + " No sandbox running") + " " + folder;
|
|
9314
|
-
const
|
|
9315
|
-
if (
|
|
9316
|
-
return Theme.ok(Theme.glyph.on + " " +
|
|
9317
|
-
|
|
9479
|
+
const view = lookAtSandbox(this.ctx);
|
|
9480
|
+
if (view.line)
|
|
9481
|
+
return Theme.ok(Theme.glyph.on + " " + view.line) + Theme.muted(
|
|
9482
|
+
view.limited ? ". You can use it when they share it, or start your own after it stops." : ". Its window is on their desktop; use its agents here."
|
|
9318
9483
|
);
|
|
9319
9484
|
const n = new SandboxChannel(this.ctx.dataPath).runningSessions().length;
|
|
9320
9485
|
return Theme.ok(Theme.glyph.on + " Sandbox running") + Theme.muted(" \xB7 " + n + " session" + (n === 1 ? "" : "s")) + " " + folder;
|
|
@@ -9400,7 +9565,7 @@ var Menu = class {
|
|
|
9400
9565
|
await pressAnyKey(Theme.muted("Press any key for the menu\u2026"));
|
|
9401
9566
|
});
|
|
9402
9567
|
}
|
|
9403
|
-
/** After a save: agent commands
|
|
9568
|
+
/** After a save: agent commands may have been switched, which changes this PC. */
|
|
9404
9569
|
applyAgentCommands(saved) {
|
|
9405
9570
|
if (!saved.files.some((f) => !f.isProject)) return void 0;
|
|
9406
9571
|
try {
|
|
@@ -9408,9 +9573,9 @@ var Menu = class {
|
|
|
9408
9573
|
loadConfig(this.ctx.loaded.configPath ?? void 0).config
|
|
9409
9574
|
);
|
|
9410
9575
|
if (!result?.changed) return void 0;
|
|
9411
|
-
return result.on ? "Agent commands
|
|
9576
|
+
return result.on ? "Agent commands are on: open a new terminal." : "Agent commands are off: claude, codex ... run on this PC again (open a new terminal).";
|
|
9412
9577
|
} catch (e) {
|
|
9413
|
-
return "Agent commands
|
|
9578
|
+
return "Agent commands: " + errMsg(e);
|
|
9414
9579
|
}
|
|
9415
9580
|
}
|
|
9416
9581
|
};
|
|
@@ -9800,7 +9965,7 @@ async function logs(ctx) {
|
|
|
9800
9965
|
}
|
|
9801
9966
|
|
|
9802
9967
|
// src/cli/commands/maintenance/config.ts
|
|
9803
|
-
import { spawn } from "node:child_process";
|
|
9968
|
+
import { spawn as spawn2 } from "node:child_process";
|
|
9804
9969
|
import fs7 from "node:fs";
|
|
9805
9970
|
import path11 from "node:path";
|
|
9806
9971
|
import { pathToFileURL } from "node:url";
|
|
@@ -9822,7 +9987,7 @@ async function initConfig() {
|
|
|
9822
9987
|
if (answer === "cancel") return 0;
|
|
9823
9988
|
if (answer === "open") {
|
|
9824
9989
|
refuseInSelfTest("open files");
|
|
9825
|
-
|
|
9990
|
+
spawn2(system32("notepad.exe"), [file], { detached: true, stdio: "ignore" }).unref();
|
|
9826
9991
|
console.log("Opened " + file + ".");
|
|
9827
9992
|
return 0;
|
|
9828
9993
|
}
|
|
@@ -10055,30 +10220,30 @@ var RemoteMenu = class {
|
|
|
10055
10220
|
});
|
|
10056
10221
|
if (picked.kind !== "pick") return;
|
|
10057
10222
|
at = picked.value;
|
|
10058
|
-
const
|
|
10059
|
-
if (
|
|
10223
|
+
const view = views.find((v) => v.id === picked.value);
|
|
10224
|
+
if (view) await this.showView(view);
|
|
10060
10225
|
}
|
|
10061
10226
|
}
|
|
10062
|
-
async page(
|
|
10063
|
-
const inputs = viewInputs(
|
|
10227
|
+
async page(view) {
|
|
10228
|
+
const inputs = viewInputs(view, {});
|
|
10064
10229
|
const data = {};
|
|
10065
|
-
for (const [name, query] of Object.entries(
|
|
10230
|
+
for (const [name, query] of Object.entries(view.queries))
|
|
10066
10231
|
data[name] = await this.client.run(query.id, inputs[name], NO_QUESTIONS);
|
|
10067
|
-
return
|
|
10232
|
+
return view.build(data, {});
|
|
10068
10233
|
}
|
|
10069
|
-
async showView(
|
|
10234
|
+
async showView(view) {
|
|
10070
10235
|
let notice;
|
|
10071
10236
|
for (; ; ) {
|
|
10072
10237
|
let page;
|
|
10073
10238
|
try {
|
|
10074
|
-
page = await this.page(
|
|
10239
|
+
page = await this.page(view);
|
|
10075
10240
|
} catch (e) {
|
|
10076
|
-
await this.app.message({ path: [this.title(),
|
|
10241
|
+
await this.app.message({ path: [this.title(), view.title], lines: [safeText(errMsg(e))], tone: "error" });
|
|
10077
10242
|
return;
|
|
10078
10243
|
}
|
|
10079
10244
|
const mv = menuView(page);
|
|
10080
10245
|
const result = await this.app.list({
|
|
10081
|
-
path: [this.title(),
|
|
10246
|
+
path: [this.title(), view.title],
|
|
10082
10247
|
intro: page.notice ? [safeText(page.notice.text)] : void 0,
|
|
10083
10248
|
items: mv.items,
|
|
10084
10249
|
actions: mv.actions,
|
|
@@ -10092,10 +10257,10 @@ var RemoteMenu = class {
|
|
|
10092
10257
|
if (!chosen || chosen.kind === "refresh") continue;
|
|
10093
10258
|
const action2 = chosen.action;
|
|
10094
10259
|
if (action2.kind === "link") {
|
|
10095
|
-
notice = action2.target.kind === "terminal" ? Theme.muted("Attach to it from your own terminal
|
|
10260
|
+
notice = action2.target.kind === "terminal" ? Theme.muted("Attach to it from your own terminal (session " + safeText(action2.target.session) + ").") : Theme.muted("That opens on " + safeText(this.owner) + "'s side only.");
|
|
10096
10261
|
continue;
|
|
10097
10262
|
}
|
|
10098
|
-
const done = await this.operations.perform(action2, [this.title(),
|
|
10263
|
+
const done = await this.operations.perform(action2, [this.title(), view.title], (text2) => {
|
|
10099
10264
|
notice = text2;
|
|
10100
10265
|
this.app.redraw();
|
|
10101
10266
|
});
|
|
@@ -10282,7 +10447,6 @@ var HANDLERS = {
|
|
|
10282
10447
|
generate: (ctx) => launch(ctx, true),
|
|
10283
10448
|
attach,
|
|
10284
10449
|
exec,
|
|
10285
|
-
"agent-commands": agentCommandsCommand,
|
|
10286
10450
|
db,
|
|
10287
10451
|
resume,
|
|
10288
10452
|
// The bare command lists; its actions (save, use ...) are the operations' hints.
|
|
@@ -10317,6 +10481,8 @@ var HANDLERS = {
|
|
|
10317
10481
|
"host-claude": claudeHost,
|
|
10318
10482
|
host: hostCommand,
|
|
10319
10483
|
_watch: watcher,
|
|
10484
|
+
// The bare command shows the status; on and off are the operations' hints (src/app/features/agent-commands).
|
|
10485
|
+
"agent-commands": definitionHandler(agentCommandsStatus),
|
|
10320
10486
|
vpn,
|
|
10321
10487
|
github,
|
|
10322
10488
|
web,
|
|
@@ -10364,6 +10530,7 @@ function report(e) {
|
|
|
10364
10530
|
if (e instanceof UserError) {
|
|
10365
10531
|
console.error(c.red("Error: ") + plainText(e.message));
|
|
10366
10532
|
if (e.fix) console.error(" Fix: " + plainText(e.fix));
|
|
10533
|
+
if (e.action?.cli) console.error(" Run: " + plainText(e.action.cli));
|
|
10367
10534
|
return 1;
|
|
10368
10535
|
}
|
|
10369
10536
|
console.error(c.red("Unexpected error: ") + errMsg(e));
|