windows-development-sandbox 1.5.0 → 1.9.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 -0
- package/config.example.json +27 -1
- package/dist/app/context.d.ts +8 -0
- package/dist/app/context.js +12 -0
- package/dist/app/features/defs.d.ts +322 -0
- package/dist/app/features/defs.js +28 -0
- package/dist/app/features/sandbox/index.d.ts +2 -0
- package/dist/app/features/sandbox/index.js +3 -0
- package/dist/app/features/sandbox/sandbox.def.d.ts +193 -0
- package/dist/app/features/sandbox/sandbox.def.js +245 -0
- package/dist/app/features/sandbox/sandbox.run.d.ts +72 -0
- package/dist/app/features/sandbox/sandbox.run.js +98 -0
- package/dist/app/features/sessions/index.d.ts +2 -0
- package/dist/app/features/sessions/index.js +3 -0
- package/dist/app/features/sessions/sessions.def.d.ts +141 -0
- package/dist/app/features/sessions/sessions.def.js +176 -0
- package/dist/app/features/sessions/sessions.run.d.ts +39 -0
- package/dist/app/features/sessions/sessions.run.js +58 -0
- package/dist/{cli/menu/settings/categories.d.ts → app/features/settings/categories.def.d.ts} +4 -0
- package/dist/{cli/menu/settings/categories.js → app/features/settings/categories.def.js} +40 -46
- package/dist/app/features/settings/index.d.ts +5 -0
- package/dist/app/features/settings/index.js +6 -0
- package/dist/{cli/menu/settings/config-file.d.ts → app/features/settings/settings-file.d.ts} +1 -1
- package/dist/{cli/menu/settings/config-file.js → app/features/settings/settings-file.js} +1 -1
- package/dist/app/features/settings/settings-rows.d.ts +35 -0
- package/dist/app/features/settings/settings-rows.js +94 -0
- package/dist/app/features/settings/settings.def.d.ts +157 -0
- package/dist/app/features/settings/settings.def.js +179 -0
- package/dist/app/features/settings/settings.run.d.ts +67 -0
- package/dist/app/features/settings/settings.run.js +84 -0
- package/dist/app/kernel/define.d.ts +143 -0
- package/dist/app/kernel/define.js +42 -0
- package/dist/app/kernel/errors.d.ts +34 -0
- package/dist/app/kernel/errors.js +45 -0
- package/dist/app/kernel/fields.d.ts +70 -0
- package/dist/app/kernel/fields.js +243 -0
- package/dist/app/kernel/index.d.ts +8 -0
- package/dist/app/kernel/index.js +10 -0
- package/dist/app/kernel/io.d.ts +193 -0
- package/dist/app/kernel/io.js +126 -0
- package/dist/app/kernel/rpc.d.ts +156 -0
- package/dist/app/kernel/rpc.js +47 -0
- package/dist/{cli/menu/settings → app/kernel}/schema-node.d.ts +9 -0
- package/dist/{cli/menu/settings → app/kernel}/schema-node.js +26 -0
- package/dist/app/kernel/text.d.ts +6 -0
- package/dist/app/kernel/text.js +57 -0
- package/dist/app/kernel/view.d.ts +146 -0
- package/dist/app/kernel/view.js +28 -0
- package/dist/app/registry.d.ts +10 -0
- package/dist/app/registry.js +50 -0
- package/dist/cli/args.d.ts +18 -2
- package/dist/cli/args.js +101 -24
- package/dist/cli/commands/accounts.js +45 -17
- package/dist/cli/commands/context.d.ts +2 -0
- package/dist/cli/commands/context.js +9 -2
- package/dist/cli/commands/data/clean.js +32 -9
- package/dist/cli/commands/engine.d.ts +2 -0
- package/dist/cli/commands/engine.js +60 -0
- package/dist/cli/commands/index.d.ts +2 -1
- package/dist/cli/commands/index.js +2 -1
- package/dist/cli/commands/launch/add-root.d.ts +3 -2
- package/dist/cli/commands/launch/add-root.js +11 -10
- package/dist/cli/commands/launch/launch.js +102 -9
- package/dist/cli/commands/launch/prepare.js +6 -4
- package/dist/cli/commands/launch/running.js +2 -1
- package/dist/cli/commands/launch/summary.d.ts +2 -0
- package/dist/cli/commands/maintenance/audit.js +1 -1
- package/dist/cli/commands/maintenance/clean.d.ts +1 -1
- package/dist/cli/commands/maintenance/clean.js +17 -3
- package/dist/cli/commands/maintenance/config-share.d.ts +12 -0
- package/dist/cli/commands/maintenance/config-share.js +80 -0
- package/dist/cli/commands/maintenance/config.d.ts +1 -1
- package/dist/cli/commands/maintenance/config.js +38 -10
- package/dist/cli/commands/maintenance/doctor.d.ts +1 -1
- package/dist/cli/commands/maintenance/doctor.js +2 -4
- package/dist/cli/commands/maintenance/logs.js +14 -0
- package/dist/cli/commands/maintenance/migrate.d.ts +2 -1
- package/dist/cli/commands/maintenance/migrate.js +19 -4
- package/dist/cli/commands/maintenance/sync.js +2 -0
- package/dist/cli/commands/maintenance/update.d.ts +2 -0
- package/dist/cli/commands/maintenance/update.js +27 -4
- package/dist/cli/commands/projects/here.js +12 -7
- package/dist/cli/commands/projects/projects.js +26 -17
- package/dist/cli/commands/registry.js +10 -7
- package/dist/cli/commands/repair/checks/agents.d.ts +2 -0
- package/dist/cli/commands/repair/checks/agents.js +70 -0
- package/dist/cli/commands/repair/checks/common.d.ts +8 -0
- package/dist/cli/commands/repair/checks/common.js +22 -0
- package/dist/cli/commands/repair/checks/contained.d.ts +2 -0
- package/dist/cli/commands/repair/checks/contained.js +139 -0
- package/dist/cli/commands/repair/checks/data.d.ts +2 -0
- package/dist/cli/commands/repair/checks/data.js +241 -0
- package/dist/cli/commands/repair/checks/hcs.d.ts +7 -0
- package/dist/cli/commands/repair/checks/hcs.js +28 -0
- package/dist/cli/commands/repair/checks/index.d.ts +2 -0
- package/dist/cli/commands/repair/checks/index.js +24 -0
- package/dist/cli/commands/repair/checks/install.d.ts +5 -0
- package/dist/cli/commands/repair/checks/install.js +318 -0
- package/dist/cli/commands/repair/checks/machine.d.ts +2 -0
- package/dist/cli/commands/repair/checks/machine.js +232 -0
- package/dist/cli/commands/repair/checks/network.d.ts +6 -0
- package/dist/cli/commands/repair/checks/network.js +60 -0
- package/dist/cli/commands/repair/checks/pc.d.ts +4 -0
- package/dist/cli/commands/repair/checks/pc.js +86 -0
- package/dist/cli/commands/repair/checks/sandbox.d.ts +2 -0
- package/dist/cli/commands/repair/checks/sandbox.js +282 -0
- package/dist/cli/commands/repair/checks/settings.d.ts +2 -0
- package/dist/cli/commands/repair/checks/settings.js +169 -0
- package/dist/cli/commands/repair/checks/vpn.d.ts +2 -0
- package/dist/cli/commands/repair/checks/vpn.js +78 -0
- package/dist/cli/commands/repair/engine.d.ts +32 -0
- package/dist/cli/commands/repair/engine.js +127 -0
- package/dist/cli/commands/repair/env.d.ts +7 -0
- package/dist/cli/commands/repair/env.js +50 -0
- package/dist/cli/commands/repair/index.d.ts +1 -9
- package/dist/cli/commands/repair/index.js +2 -54
- package/dist/cli/commands/repair/log.d.ts +17 -0
- package/dist/cli/commands/repair/log.js +82 -0
- package/dist/cli/commands/repair/printer.d.ts +32 -0
- package/dist/cli/commands/repair/printer.js +132 -0
- package/dist/cli/commands/repair/run.d.ts +33 -0
- package/dist/cli/commands/repair/run.js +133 -0
- package/dist/cli/commands/repair/types.d.ts +97 -9
- package/dist/cli/commands/repair/types.js +11 -7
- package/dist/cli/commands/resume.js +2 -2
- package/dist/cli/commands/sessions/index.d.ts +0 -4
- package/dist/cli/commands/sessions/index.js +3 -7
- package/dist/cli/commands/setup/index.d.ts +5 -0
- package/dist/cli/commands/setup/index.js +25 -1
- package/dist/cli/commands/shared-use.d.ts +5 -2
- package/dist/cli/commands/shared-use.js +11 -8
- package/dist/cli/commands/storage/contained.d.ts +3 -0
- package/dist/cli/commands/storage/contained.js +179 -0
- package/dist/cli/commands/storage/index.d.ts +2 -0
- package/dist/cli/commands/storage/index.js +2 -0
- package/dist/cli/commands/storage/offer.d.ts +3 -0
- package/dist/cli/commands/storage/offer.js +91 -0
- package/dist/cli/commands/storage/storage.d.ts +8 -0
- package/dist/cli/commands/storage/storage.js +179 -0
- package/dist/cli/commands/user-config.js +2 -2
- package/dist/cli/commands/vpn.d.ts +4 -0
- package/dist/cli/commands/vpn.js +91 -0
- package/dist/cli/commands/web.d.ts +4 -0
- package/dist/cli/commands/web.js +97 -0
- package/dist/cli/history.js +1 -1
- package/dist/cli/index.js +48 -4
- package/dist/cli/manifest.d.ts +339 -97
- package/dist/cli/manifest.js +222 -67
- package/dist/cli/menu/add-agent.d.ts +47 -0
- package/dist/cli/menu/add-agent.js +168 -0
- package/dist/cli/menu/apps.d.ts +38 -3
- package/dist/cli/menu/apps.js +80 -5
- package/dist/cli/menu/command-fields.d.ts +18 -0
- package/dist/cli/menu/command-fields.js +61 -0
- package/dist/cli/menu/command-form.d.ts +22 -0
- package/dist/cli/menu/command-form.js +169 -46
- package/dist/cli/menu/data-folder.d.ts +18 -0
- package/dist/cli/menu/data-folder.js +99 -0
- package/dist/cli/menu/io-menu.d.ts +29 -0
- package/dist/cli/menu/io-menu.js +126 -0
- package/dist/cli/menu/live.d.ts +27 -0
- package/dist/cli/menu/live.js +69 -0
- package/dist/cli/menu/memory.d.ts +19 -0
- package/dist/cli/menu/memory.js +53 -0
- package/dist/cli/menu/menu.d.ts +11 -2
- package/dist/cli/menu/menu.js +36 -15
- package/dist/cli/menu/pages/accounts-page.js +55 -24
- package/dist/cli/menu/pages/agents-page.d.ts +68 -0
- package/dist/cli/menu/pages/agents-page.js +345 -0
- package/dist/cli/menu/pages/apps-page.d.ts +3 -1
- package/dist/cli/menu/pages/apps-page.js +20 -4
- package/dist/cli/menu/pages/list-page.d.ts +43 -3
- package/dist/cli/menu/pages/list-page.js +146 -12
- package/dist/cli/menu/pages/maintenance-page.d.ts +9 -5
- package/dist/cli/menu/pages/maintenance-page.js +172 -85
- package/dist/cli/menu/pages/sandbox-page.d.ts +7 -6
- package/dist/cli/menu/pages/sandbox-page.js +117 -120
- package/dist/cli/menu/pages/scopes.d.ts +1 -1
- package/dist/cli/menu/pages/sessions-page.d.ts +6 -8
- package/dist/cli/menu/pages/sessions-page.js +22 -75
- package/dist/cli/menu/pages/settings-page.d.ts +10 -14
- package/dist/cli/menu/pages/settings-page.js +95 -102
- package/dist/cli/menu/render-view.d.ts +28 -0
- package/dist/cli/menu/render-view.js +112 -0
- package/dist/cli/menu/settings/ask-path.d.ts +14 -0
- package/dist/cli/menu/settings/ask-path.js +14 -0
- package/dist/cli/menu/settings/collections/collection-editor.d.ts +8 -2
- package/dist/cli/menu/settings/collections/collection-editor.js +12 -8
- package/dist/cli/menu/settings/collections/map-editor.js +5 -1
- package/dist/cli/menu/settings/collections/object-list-editor.js +2 -2
- package/dist/cli/menu/settings/collections/object-map-editor.js +2 -2
- package/dist/cli/menu/settings/collections/string-list-editor.d.ts +10 -1
- package/dist/cli/menu/settings/collections/string-list-editor.js +23 -0
- package/dist/cli/menu/settings/draft.d.ts +1 -1
- package/dist/cli/menu/settings/format.d.ts +1 -3
- package/dist/cli/menu/settings/format.js +6 -36
- package/dist/cli/menu/settings/index.d.ts +1 -3
- package/dist/cli/menu/settings/index.js +3 -3
- package/dist/cli/menu/settings/object-editor.d.ts +6 -2
- package/dist/cli/menu/settings/object-editor.js +15 -4
- package/dist/cli/menu/settings/share.d.ts +36 -0
- package/dist/cli/menu/settings/share.js +131 -0
- package/dist/cli/menu/settings/value-editor.d.ts +10 -1
- package/dist/cli/menu/settings/value-editor.js +99 -63
- package/dist/cli/menu/several.js +7 -5
- package/dist/cli/menu/share-settings.d.ts +21 -0
- package/dist/cli/menu/share-settings.js +112 -0
- package/dist/cli/menu/shell.d.ts +53 -10
- package/dist/cli/menu/shell.js +115 -10
- package/dist/cli/menu/views.d.ts +7 -0
- package/dist/cli/menu/views.js +11 -0
- package/dist/cli/menu/vpn-login.d.ts +16 -0
- package/dist/cli/menu/vpn-login.js +74 -0
- package/dist/cli/operations/handler.d.ts +6 -0
- package/dist/cli/operations/handler.js +61 -0
- package/dist/cli/operations/index.d.ts +4 -0
- package/dist/cli/operations/index.js +5 -0
- package/dist/cli/operations/input.d.ts +6 -0
- package/dist/cli/operations/input.js +37 -0
- package/dist/cli/operations/io-cli.d.ts +7 -0
- package/dist/cli/operations/io-cli.js +62 -0
- package/dist/cli/operations/spec.d.ts +18 -0
- package/dist/cli/operations/spec.js +108 -0
- package/dist/cli/output/colors.d.ts +2 -2
- package/dist/cli/output/colors.js +2 -11
- package/dist/cli/output/index.d.ts +1 -0
- package/dist/cli/output/index.js +1 -0
- package/dist/cli/output/print.d.ts +5 -1
- package/dist/cli/output/print.js +15 -4
- package/dist/cli/output/progress.d.ts +15 -0
- package/dist/cli/output/progress.js +44 -0
- package/dist/cli/output/render-view.d.ts +4 -0
- package/dist/cli/output/render-view.js +63 -0
- package/dist/cli/services/accounts-service.d.ts +2 -0
- package/dist/cli/services/accounts-service.js +2 -2
- package/dist/cli/services/agent-commands-service.d.ts +2 -0
- package/dist/cli/services/agent-commands-service.js +11 -2
- package/dist/cli/services/health-service.d.ts +0 -6
- package/dist/cli/services/health-service.js +5 -42
- package/dist/cli/services/index.d.ts +3 -1
- package/dist/cli/services/index.js +3 -1
- package/dist/cli/services/logs-service.js +4 -3
- package/dist/cli/services/migrate-service.js +1 -1
- package/dist/cli/services/update-service.d.ts +2 -0
- package/dist/cli/services/update-service.js +13 -6
- package/dist/cli/services/vpn-service.d.ts +28 -0
- package/dist/cli/services/vpn-service.js +46 -0
- package/dist/cli/services/web-service.d.ts +22 -0
- package/dist/cli/services/web-service.js +111 -0
- package/dist/cli/tui/app.d.ts +12 -4
- package/dist/cli/tui/app.js +38 -9
- package/dist/cli/tui/dialogs/path-listing.d.ts +43 -0
- package/dist/cli/tui/dialogs/path-listing.js +127 -0
- package/dist/cli/tui/dialogs/path-picker.d.ts +67 -0
- package/dist/cli/tui/dialogs/path-picker.js +423 -0
- package/dist/cli/tui/dialogs/text-screen.d.ts +6 -0
- package/dist/cli/tui/dialogs/text-screen.js +10 -3
- package/dist/cli/tui/frame.d.ts +7 -10
- package/dist/cli/tui/frame.js +19 -10
- package/dist/cli/tui/index.d.ts +4 -3
- package/dist/cli/tui/index.js +2 -1
- package/dist/cli/tui/list/list-screen.d.ts +28 -2
- package/dist/cli/tui/list/list-screen.js +130 -66
- package/dist/cli/tui/list/list-types.d.ts +10 -4
- package/dist/cli/tui/nav.d.ts +29 -0
- package/dist/cli/tui/nav.js +67 -0
- package/dist/cli/tui/terminal.d.ts +7 -0
- package/dist/cli/tui/terminal.js +30 -10
- package/dist/cli/validate.d.ts +1 -1
- package/dist/cli/validate.js +3 -3
- package/dist/cli/version.d.ts +2 -0
- package/dist/cli/version.js +11 -0
- package/dist/core/config/defaults.js +13 -1
- package/dist/core/config/loader.js +12 -2
- package/dist/core/local-config/overrides.js +1 -0
- package/dist/core/prompt.d.ts +19 -0
- package/dist/core/prompt.js +43 -3
- package/dist/core/schema/common.d.ts +6 -0
- package/dist/core/schema/common.js +8 -0
- package/dist/core/schema/config.d.ts +36 -0
- package/dist/core/schema/config.js +26 -2
- package/dist/core/schema/harness.d.ts +2 -0
- package/dist/core/schema/harness.js +13 -2
- package/dist/core/schema/index.d.ts +3 -1
- package/dist/core/schema/index.js +3 -1
- package/dist/core/schema/profile.d.ts +1 -0
- package/dist/core/schema/profile.js +3 -0
- package/dist/core/schema/redact.d.ts +13 -0
- package/dist/core/schema/redact.js +75 -0
- package/dist/core/schema/sandbox.d.ts +6 -0
- package/dist/core/schema/sandbox.js +21 -3
- package/dist/core/schema/vpn.d.ts +18 -0
- package/dist/core/schema/vpn.js +22 -0
- package/dist/core/schema/web.d.ts +6 -0
- package/dist/core/schema/web.js +14 -0
- package/dist/core/types.d.ts +44 -0
- package/dist/core/util/fs.d.ts +2 -0
- package/dist/core/util/fs.js +9 -0
- package/dist/core/util/index.d.ts +1 -1
- package/dist/core/util/index.js +1 -1
- package/dist/guest/agents/agent-files.d.ts +54 -0
- package/dist/guest/agents/agent-files.js +67 -0
- package/dist/guest/agents/agent-installer.js +2 -9
- package/dist/guest/agents/local-state.d.ts +14 -0
- package/dist/guest/agents/local-state.js +218 -0
- package/dist/guest/agents/sbx-agent.d.ts +2 -0
- package/dist/guest/agents/sbx-agent.js +35 -0
- package/dist/guest/boot/boot.d.ts +4 -0
- package/dist/guest/boot/boot.js +51 -11
- package/dist/guest/daemon/daemon.js +8 -1
- package/dist/guest/daemon/exec.js +2 -1
- package/dist/guest/daemon/idle-shutdown.js +2 -0
- package/dist/guest/daemon/sessions.d.ts +5 -0
- package/dist/guest/daemon/sessions.js +20 -3
- package/dist/guest/entries/agent.d.ts +1 -0
- package/dist/guest/entries/agent.js +10 -0
- package/dist/guest/entries/daemon.js +5 -0
- package/dist/guest/governor/decide.d.ts +61 -0
- package/dist/guest/governor/decide.js +182 -0
- package/dist/guest/governor/governor.d.ts +42 -0
- package/dist/guest/governor/governor.js +214 -0
- package/dist/guest/governor/index.d.ts +2 -0
- package/dist/guest/governor/index.js +2 -0
- package/dist/guest/runtime/csc.d.ts +2 -0
- package/dist/guest/runtime/csc.js +2 -0
- package/dist/guest/runtime/secrets.d.ts +12 -0
- package/dist/guest/runtime/secrets.js +63 -0
- package/dist/guest/sessions/viewer.js +3 -1
- package/dist/guest/setup/claude-profile.d.ts +2 -1
- package/dist/guest/setup/claude-profile.js +12 -1
- package/dist/guest/setup/environment.d.ts +6 -0
- package/dist/guest/setup/environment.js +56 -6
- package/dist/guest/setup/path-plan.d.ts +32 -0
- package/dist/guest/setup/path-plan.js +67 -0
- package/dist/guest/setup/shell-path.d.ts +1 -0
- package/dist/guest/setup/shell-path.js +22 -0
- package/dist/guest/toolchains/languages/python.js +1 -1
- package/dist/guest/toolchains/native/rust-extras.js +4 -2
- package/dist/guest/toolchains/runtimes.js +2 -2
- package/dist/guest/vpn/index.d.ts +1 -0
- package/dist/guest/vpn/index.js +1 -0
- package/dist/guest/vpn/openvpn.d.ts +9 -0
- package/dist/guest/vpn/openvpn.js +47 -0
- package/dist/guest/vpn/tunnel.d.ts +17 -0
- package/dist/guest/vpn/tunnel.js +78 -0
- package/dist/guest/vpn/vpn.d.ts +6 -0
- package/dist/guest/vpn/vpn.js +174 -0
- package/dist/guest/vpn/wireguard.d.ts +32 -0
- package/dist/guest/vpn/wireguard.js +132 -0
- package/dist/host/agent-commands/commands.d.ts +4 -0
- package/dist/host/agent-commands/commands.js +31 -7
- package/dist/host/audit/log.d.ts +1 -1
- package/dist/host/channel/attach.d.ts +6 -2
- package/dist/host/channel/attach.js +6 -3
- package/dist/host/channel/channel.d.ts +9 -0
- package/dist/host/channel/channel.js +30 -2
- package/dist/host/engines/engine.d.ts +12 -0
- package/dist/host/engines/engine.js +1 -0
- package/dist/host/engines/hcs/check.d.ts +25 -0
- package/dist/host/engines/hcs/check.js +95 -0
- package/dist/host/engines/hcs/documents.d.ts +44 -0
- package/dist/host/engines/hcs/documents.js +155 -0
- package/dist/host/engines/hcs/engine.d.ts +39 -0
- package/dist/host/engines/hcs/engine.js +171 -0
- package/dist/host/engines/hcs/helper.d.ts +43 -0
- package/dist/host/engines/hcs/helper.js +173 -0
- package/dist/host/engines/hcs/images.d.ts +37 -0
- package/dist/host/engines/hcs/images.js +152 -0
- package/dist/host/engines/index.d.ts +7 -0
- package/dist/host/engines/index.js +5 -0
- package/dist/host/engines/registry.d.ts +16 -0
- package/dist/host/engines/registry.js +30 -0
- package/dist/host/engines/types.d.ts +58 -0
- package/dist/host/engines/types.js +1 -0
- package/dist/host/engines/windows-sandbox/engine.d.ts +16 -0
- package/dist/host/engines/windows-sandbox/engine.js +63 -0
- package/dist/host/engines/windows-sandbox/wsb-text.d.ts +2 -0
- package/dist/host/engines/windows-sandbox/wsb-text.js +29 -0
- package/dist/host/health/acl-read.d.ts +17 -0
- package/dist/host/health/acl-read.js +45 -0
- package/dist/host/health/config-backup.d.ts +11 -0
- package/dist/host/health/config-backup.js +73 -0
- package/dist/host/health/index.d.ts +6 -0
- package/dist/host/health/index.js +7 -0
- package/dist/host/health/install-state.d.ts +33 -0
- package/dist/host/health/install-state.js +110 -0
- package/dist/host/health/path-copies.d.ts +32 -0
- package/dist/host/health/path-copies.js +82 -0
- package/dist/host/health/stale.d.ts +45 -0
- package/dist/host/health/stale.js +120 -0
- package/dist/host/health/system.d.ts +37 -0
- package/dist/host/health/system.js +87 -0
- package/dist/host/install/copies.d.ts +13 -0
- package/dist/host/install/copies.js +63 -0
- package/dist/host/install/index.d.ts +1 -0
- package/dist/host/install/index.js +1 -0
- package/dist/host/launch/generate.d.ts +5 -1
- package/dist/host/launch/generate.js +73 -7
- package/dist/host/launch/index.d.ts +3 -1
- package/dist/host/launch/index.js +3 -1
- package/dist/host/launch/launch-plan.d.ts +13 -0
- package/dist/host/launch/launch-plan.js +26 -0
- package/dist/host/launch/mappings.js +2 -1
- package/dist/host/launch/risk-notes.d.ts +10 -0
- package/dist/host/launch/risk-notes.js +18 -0
- package/dist/host/launch/session-file.d.ts +2 -0
- package/dist/host/launch/session-file.js +11 -2
- package/dist/host/launch/stage.js +1 -1
- package/dist/host/launch/wsb-file.d.ts +28 -4
- package/dist/host/launch/wsb-file.js +61 -42
- package/dist/host/life/crash-report.d.ts +27 -1
- package/dist/host/life/crash-report.js +173 -7
- package/dist/host/life/host-memory.d.ts +40 -0
- package/dist/host/life/host-memory.js +137 -0
- package/dist/host/life/index.d.ts +2 -0
- package/dist/host/life/index.js +2 -0
- package/dist/host/life/stop-events.d.ts +2 -0
- package/dist/host/life/stop-events.js +20 -3
- package/dist/host/life/stop-warning.js +1 -1
- package/dist/host/life/watchdog.d.ts +54 -0
- package/dist/host/life/watchdog.js +108 -0
- package/dist/host/migrate/backup.js +3 -0
- package/dist/host/migrate/migrations/config-file.d.ts +2 -0
- package/dist/host/migrate/migrations/config-file.js +7 -0
- package/dist/host/migrate/migrations/follow-machine-storage.js +9 -1
- package/dist/host/migrate/migrations/pin-storage-root.d.ts +4 -0
- package/dist/host/migrate/migrations/pin-storage-root.js +46 -0
- package/dist/host/migrate/migrations/unpin-config-defaults.js +4 -1
- package/dist/host/migrate/registry.js +2 -1
- package/dist/host/native.d.ts +3 -2
- package/dist/host/native.js +22 -3
- package/dist/host/profile/accounts.d.ts +25 -1
- package/dist/host/profile/accounts.js +96 -13
- package/dist/host/profile/agent-accounts.d.ts +5 -1
- package/dist/host/profile/agent-accounts.js +35 -5
- package/dist/host/profile/claude-login.js +3 -2
- package/dist/host/profile/index.d.ts +2 -1
- package/dist/host/profile/index.js +1 -0
- package/dist/host/profile/plugin-share.d.ts +26 -0
- package/dist/host/profile/plugin-share.js +146 -0
- package/dist/host/projects/join.d.ts +7 -1
- package/dist/host/projects/join.js +21 -4
- package/dist/host/projects/registry.d.ts +16 -10
- package/dist/host/projects/registry.js +74 -6
- package/dist/host/sandbox/contained-deps.d.ts +2 -0
- package/dist/host/sandbox/contained-deps.js +17 -0
- package/dist/host/sandbox/index.d.ts +2 -0
- package/dist/host/sandbox/index.js +2 -0
- package/dist/host/sandbox/platform.d.ts +4 -0
- package/dist/host/sandbox/platform.js +23 -4
- package/dist/host/sandbox/tasklist.d.ts +13 -0
- package/dist/host/sandbox/tasklist.js +47 -0
- package/dist/host/secrets/index.d.ts +2 -0
- package/dist/host/secrets/index.js +2 -0
- package/dist/host/secrets/launch-secrets.d.ts +17 -0
- package/dist/host/secrets/launch-secrets.js +94 -0
- package/dist/host/secrets/secret-store.d.ts +25 -0
- package/dist/host/secrets/secret-store.js +89 -0
- package/dist/host/sharing/acl.d.ts +16 -2
- package/dist/host/sharing/acl.js +35 -10
- package/dist/host/sharing/current.js +8 -3
- package/dist/host/sharing/doctor.d.ts +2 -0
- package/dist/host/sharing/doctor.js +44 -0
- package/dist/host/sharing/group-access.d.ts +6 -0
- package/dist/host/sharing/group-access.js +24 -0
- package/dist/host/sharing/index.d.ts +2 -1
- package/dist/host/sharing/index.js +2 -1
- package/dist/host/sharing/lifecycle.d.ts +8 -2
- package/dist/host/sharing/lifecycle.js +16 -7
- package/dist/host/storage/cleanup.d.ts +2 -0
- package/dist/host/storage/cleanup.js +2 -1
- package/dist/host/storage/contained/check.d.ts +9 -0
- package/dist/host/storage/contained/check.js +37 -0
- package/dist/host/storage/contained/contained-storage.d.ts +66 -0
- package/dist/host/storage/contained/contained-storage.js +168 -0
- package/dist/host/storage/contained/disk-port.d.ts +43 -0
- package/dist/host/storage/contained/disk-port.js +122 -0
- package/dist/host/storage/contained/index.d.ts +9 -0
- package/dist/host/storage/contained/index.js +8 -0
- package/dist/host/storage/contained/layout.d.ts +28 -0
- package/dist/host/storage/contained/layout.js +45 -0
- package/dist/host/storage/contained/resolve.d.ts +4 -0
- package/dist/host/storage/contained/resolve.js +30 -0
- package/dist/host/storage/contained/setting.d.ts +1 -0
- package/dist/host/storage/contained/setting.js +5 -0
- package/dist/host/storage/contained/state.d.ts +89 -0
- package/dist/host/storage/contained/state.js +166 -0
- package/dist/host/storage/contained/transfer.d.ts +24 -0
- package/dist/host/storage/contained/transfer.js +121 -0
- package/dist/host/storage/history.d.ts +21 -0
- package/dist/host/storage/history.js +49 -0
- package/dist/host/storage/index.d.ts +6 -0
- package/dist/host/storage/index.js +6 -0
- package/dist/host/storage/move.d.ts +95 -0
- package/dist/host/storage/move.js +384 -0
- package/dist/host/storage/offer.d.ts +11 -0
- package/dist/host/storage/offer.js +36 -0
- package/dist/host/storage/providers/contained.d.ts +15 -0
- package/dist/host/storage/providers/contained.js +39 -0
- package/dist/host/storage/providers/folder.d.ts +12 -0
- package/dist/host/storage/providers/folder.js +20 -0
- package/dist/host/storage/providers/index.d.ts +4 -0
- package/dist/host/storage/providers/index.js +3 -0
- package/dist/host/storage/providers/registry.d.ts +9 -0
- package/dist/host/storage/providers/registry.js +14 -0
- package/dist/host/storage/providers/types.d.ts +33 -0
- package/dist/host/storage/providers/types.js +1 -0
- package/dist/host/storage/root.d.ts +18 -0
- package/dist/host/storage/root.js +77 -0
- package/dist/host/tools/conpty.js +3 -2
- package/dist/host/tools/windows-terminal.d.ts +2 -0
- package/dist/host/tools/windows-terminal.js +31 -12
- package/dist/host/update/index.d.ts +1 -1
- package/dist/host/update/index.js +1 -1
- package/dist/host/update/notice.d.ts +2 -0
- package/dist/host/update/notice.js +13 -1
- package/dist/host/update/update-state.d.ts +6 -0
- package/dist/host/update/update-state.js +2 -0
- package/dist/host/update/updater.d.ts +19 -0
- package/dist/host/update/updater.js +88 -12
- package/dist/host/vpn/index.d.ts +4 -0
- package/dist/host/vpn/index.js +4 -0
- package/dist/host/vpn/login.d.ts +24 -0
- package/dist/host/vpn/login.js +79 -0
- package/dist/host/vpn/nordvpn.d.ts +21 -0
- package/dist/host/vpn/nordvpn.js +77 -0
- package/dist/host/vpn/prepare.d.ts +19 -0
- package/dist/host/vpn/prepare.js +138 -0
- package/dist/host/vpn/status.d.ts +12 -0
- package/dist/host/vpn/status.js +53 -0
- package/dist/host/web/auth.d.ts +38 -0
- package/dist/host/web/auth.js +96 -0
- package/dist/host/web/backend.d.ts +14 -0
- package/dist/host/web/backend.js +1 -0
- package/dist/host/web/bridge.d.ts +27 -0
- package/dist/host/web/bridge.js +144 -0
- package/dist/host/web/browser.d.ts +3 -0
- package/dist/host/web/browser.js +23 -0
- package/dist/host/web/control.d.ts +17 -0
- package/dist/host/web/control.js +67 -0
- package/dist/host/web/index.d.ts +10 -0
- package/dist/host/web/index.js +9 -0
- package/dist/host/web/rpc.d.ts +24 -0
- package/dist/host/web/rpc.js +149 -0
- package/dist/host/web/runner.d.ts +16 -0
- package/dist/host/web/runner.js +44 -0
- package/dist/host/web/server.d.ts +47 -0
- package/dist/host/web/server.js +238 -0
- package/dist/host/web/state.d.ts +20 -0
- package/dist/host/web/state.js +41 -0
- package/dist/host/web/static-files.d.ts +13 -0
- package/dist/host/web/static-files.js +57 -0
- package/dist/runtime/agent.js +27675 -0
- package/dist/runtime/daemon.js +1950 -1122
- package/dist/runtime/db.js +302 -111
- package/dist/runtime/main.js +1560 -275
- package/dist/runtime/netproxy.js +168 -8
- package/dist/runtime/view.js +186 -13
- package/dist/selftest/accounts.test.js +40 -0
- package/dist/selftest/agent-paths.test.d.ts +2 -0
- package/dist/selftest/agent-paths.test.js +125 -0
- package/dist/selftest/app.test.d.ts +2 -0
- package/dist/selftest/app.test.js +324 -0
- package/dist/selftest/channel.test.js +18 -0
- package/dist/selftest/cli.test.js +35 -4
- package/dist/selftest/config.test.js +59 -0
- package/dist/selftest/contained.test.d.ts +2 -0
- package/dist/selftest/contained.test.js +544 -0
- package/dist/selftest/credentials.test.d.ts +2 -0
- package/dist/selftest/credentials.test.js +198 -0
- package/dist/selftest/engine.test.d.ts +2 -0
- package/dist/selftest/engine.test.js +127 -0
- package/dist/selftest/generate.test.js +1 -1
- package/dist/selftest/hcs.test.d.ts +2 -0
- package/dist/selftest/hcs.test.js +482 -0
- package/dist/selftest/health.test.d.ts +2 -0
- package/dist/selftest/health.test.js +470 -0
- package/dist/selftest/heavy-load.test.d.ts +2 -0
- package/dist/selftest/heavy-load.test.js +329 -0
- package/dist/selftest/host-sim.test.js +2 -0
- package/dist/selftest/index.js +31 -0
- package/dist/selftest/layout.test.js +14 -0
- package/dist/selftest/menu-perf.test.d.ts +2 -0
- package/dist/selftest/menu-perf.test.js +248 -0
- package/dist/selftest/menu-screens.d.ts +7 -0
- package/dist/selftest/menu-screens.js +68 -17
- package/dist/selftest/menu.test.js +603 -22
- package/dist/selftest/migrate.test.js +1 -1
- package/dist/selftest/personalization.test.js +3 -1
- package/dist/selftest/projects.test.js +39 -1
- package/dist/selftest/shared-use.test.js +64 -2
- package/dist/selftest/sharing.test.js +50 -1
- package/dist/selftest/storage.test.d.ts +2 -0
- package/dist/selftest/storage.test.js +363 -0
- package/dist/selftest/support/engine-cases.d.ts +8 -0
- package/dist/selftest/support/engine-cases.js +65 -0
- package/dist/selftest/support/engine-golden.d.ts +3 -0
- package/dist/selftest/support/engine-golden.js +66 -0
- package/dist/selftest/support/fixtures.d.ts +20 -0
- package/dist/selftest/support/hcs-probes.d.ts +17 -0
- package/dist/selftest/support/hcs-probes.js +41 -0
- package/dist/selftest/support/releases.js +1 -1
- package/dist/selftest/toolchains.test.js +21 -0
- package/dist/selftest/update-service.test.js +87 -3
- package/dist/selftest/vpn.test.d.ts +2 -0
- package/dist/selftest/vpn.test.js +412 -0
- package/dist/selftest/web.test.d.ts +2 -0
- package/dist/selftest/web.test.js +402 -0
- package/dist/shared/apps/catalogue.js +31 -0
- package/dist/shared/channel/index.d.ts +1 -0
- package/dist/shared/channel/index.js +1 -0
- package/dist/shared/channel/run-dir.d.ts +9 -1
- package/dist/shared/channel/run-dir.js +18 -1
- package/dist/shared/channel/schema.d.ts +53 -0
- package/dist/shared/channel/schema.js +38 -0
- package/dist/shared/channel/secrets.d.ts +29 -0
- package/dist/shared/channel/secrets.js +50 -0
- package/dist/shared/memory/index.d.ts +1 -0
- package/dist/shared/memory/index.js +1 -0
- package/dist/shared/memory/policy.d.ts +33 -0
- package/dist/shared/memory/policy.js +55 -0
- package/dist/shared/pty/output-filter.d.ts +14 -1
- package/dist/shared/pty/output-filter.js +22 -4
- package/dist/shared/pty/terminal.d.ts +4 -1
- package/dist/shared/pty/terminal.js +4 -2
- package/dist/shared/system.d.ts +1 -0
- package/dist/shared/system.js +1 -0
- package/dist/shared/vpn/download.d.ts +29 -0
- package/dist/shared/vpn/download.js +30 -0
- package/dist/shared/vpn/kill-switch.d.ts +18 -0
- package/dist/shared/vpn/kill-switch.js +81 -0
- package/dist/shared/vpn/ovpn.d.ts +23 -0
- package/dist/shared/vpn/ovpn.js +244 -0
- package/dist/shared/vpn/wireguard.d.ts +51 -0
- package/dist/shared/vpn/wireguard.js +227 -0
- package/dist/shared/web/index.d.ts +1 -0
- package/dist/shared/web/index.js +1 -0
- package/dist/shared/web/protocol.d.ts +61 -0
- package/dist/shared/web/protocol.js +35 -0
- package/dist/sync/sync-cycle.js +9 -5
- package/dist/sync/sync-state.d.ts +1 -0
- package/dist/sync/sync-state.js +1 -0
- package/dist/sync/watcher.d.ts +13 -0
- package/dist/sync/watcher.js +102 -3
- package/dist/web/index.html +14 -0
- package/dist/web/main-NRRS5O6Z.js +157 -0
- package/dist/web/main-T5DMCHYV.css +1 -0
- package/native/csharp/FolderSecurity.cs +29 -0
- package/native/csharp/HcsHost/AssemblyInfo.cs +14 -0
- package/native/csharp/HcsHost/Guard.cs +100 -0
- package/native/csharp/HcsHost/Hcs.cs +256 -0
- package/native/csharp/HcsHost/Json.cs +78 -0
- package/native/csharp/HcsHost/Program.cs +185 -0
- package/native/csharp/HcsHost/VirtualDisk.cs +95 -0
- package/native/csharp/HostTools/AssemblyInfo.cs +14 -0
- package/native/csharp/HostTools/MemoryStatus.cs +107 -0
- package/native/csharp/HostTools/Program.cs +58 -17
- package/native/scripts/check-contained.ps1 +28 -0
- package/native/scripts/contained-common.ps1 +241 -0
- package/native/scripts/dismount-contained.ps1 +66 -0
- package/native/scripts/memory-status.ps1 +34 -0
- package/native/scripts/mount-contained.ps1 +139 -0
- package/native/scripts/protect-data.ps1 +29 -0
- package/native/scripts/read-folder-sddl.ps1 +10 -0
- package/native/scripts/run-elevated.ps1 +17 -4
- package/native/scripts/set-folder-access.ps1 +49 -7
- package/native/scripts/stop-events.ps1 +23 -8
- package/node_modules/ws/LICENSE +20 -0
- package/node_modules/ws/README.md +548 -0
- package/node_modules/ws/browser.js +8 -0
- package/node_modules/ws/index.js +22 -0
- package/node_modules/ws/lib/buffer-util.js +131 -0
- package/node_modules/ws/lib/constants.js +19 -0
- package/node_modules/ws/lib/event-target.js +292 -0
- package/node_modules/ws/lib/extension.js +203 -0
- package/node_modules/ws/lib/limiter.js +55 -0
- package/node_modules/ws/lib/permessage-deflate.js +530 -0
- package/node_modules/ws/lib/receiver.js +743 -0
- package/node_modules/ws/lib/sender.js +607 -0
- package/node_modules/ws/lib/stream.js +161 -0
- package/node_modules/ws/lib/subprotocol.js +62 -0
- package/node_modules/ws/lib/validation.js +152 -0
- package/node_modules/ws/lib/websocket-server.js +562 -0
- package/node_modules/ws/lib/websocket.js +1421 -0
- package/node_modules/ws/package.json +74 -0
- package/node_modules/ws/wrapper.mjs +21 -0
- package/package.json +22 -5
- package/sandbox/csharp/EnvBroadcast.cs +33 -0
- package/sandbox/csharp/MemGov.cs +398 -0
- package/sandbox/csharp/PathSync.cs +90 -0
- package/sandbox/csharp/PtyHost.cs +111 -5
- package/sandbox/scripts/install-shell-path.ps1 +73 -0
- package/sandbox/scripts/set-machine-environment.ps1 +37 -4
- package/schemas/config.schema.json +136 -7
- package/schemas/sandbox-config.schema.json +17 -4
- package/dist/cli/commands/repair/checks.d.ts +0 -2
- package/dist/cli/commands/repair/checks.js +0 -246
- package/dist/cli/commands/sessions/control.d.ts +0 -4
- package/dist/cli/commands/sessions/control.js +0 -66
- package/dist/cli/commands/sessions/list.d.ts +0 -2
- package/dist/cli/commands/sessions/list.js +0 -45
- package/dist/cli/commands/sessions/status.d.ts +0 -2
- package/dist/cli/commands/sessions/status.js +0 -93
- package/dist/cli/commands/sessions/window.d.ts +0 -3
- package/dist/cli/commands/sessions/window.js +0 -18
- package/dist/cli/menu/pages/start-page.d.ts +0 -43
- package/dist/cli/menu/pages/start-page.js +0 -192
- package/dist/cli/tui/tab-bar.d.ts +0 -9
- package/dist/cli/tui/tab-bar.js +0 -33
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { invoke, NO_QUESTIONS, onSurface, } from './kernel/index.js';
|
|
2
|
+
import { hideWindowRun, sandboxStatusRun, showWindowRun, stopSandboxRun } from './features/sandbox/index.js';
|
|
3
|
+
import { listSessionsRun, restartSessionsRun } from './features/sessions/index.js';
|
|
4
|
+
import { getSettingRun, listSettingsRun, resetSettingRun, setSettingRun } from './features/settings/index.js';
|
|
5
|
+
export const IMPLEMENTATIONS = [
|
|
6
|
+
sandboxStatusRun,
|
|
7
|
+
showWindowRun,
|
|
8
|
+
hideWindowRun,
|
|
9
|
+
stopSandboxRun,
|
|
10
|
+
listSessionsRun,
|
|
11
|
+
restartSessionsRun,
|
|
12
|
+
listSettingsRun,
|
|
13
|
+
getSettingRun,
|
|
14
|
+
setSettingRun,
|
|
15
|
+
resetSettingRun,
|
|
16
|
+
];
|
|
17
|
+
export function implementationOf(id) {
|
|
18
|
+
return IMPLEMENTATIONS.find((i) => i.def.id === id);
|
|
19
|
+
}
|
|
20
|
+
/** Runs a definition by id: input checked before, output checked after. */
|
|
21
|
+
export function runDefinition(id, ctx, input, io) {
|
|
22
|
+
const impl = implementationOf(id);
|
|
23
|
+
if (!impl)
|
|
24
|
+
throw new Error('No implementation for ' + id);
|
|
25
|
+
return invoke(impl, ctx, input, io);
|
|
26
|
+
}
|
|
27
|
+
/** Reads a query in-process (the menu): typed output, and no questions. */
|
|
28
|
+
export async function readQuery(def, ctx, input = {}) {
|
|
29
|
+
return (await runDefinition(def.id, ctx, input, NO_QUESTIONS));
|
|
30
|
+
}
|
|
31
|
+
/** What the web server may run: the registered definitions whose surfaces include the web. */
|
|
32
|
+
export function createRpcHost(ctx) {
|
|
33
|
+
const allowed = (id) => {
|
|
34
|
+
const impl = implementationOf(id);
|
|
35
|
+
return impl && onSurface(impl.def, 'web') ? impl : undefined;
|
|
36
|
+
};
|
|
37
|
+
return {
|
|
38
|
+
kind: (id) => allowed(id)?.def.kind,
|
|
39
|
+
liveMs: (id) => {
|
|
40
|
+
const def = allowed(id)?.def;
|
|
41
|
+
return def?.kind === 'query' ? def.live?.everyMs : undefined;
|
|
42
|
+
},
|
|
43
|
+
run: (id, input, io) => {
|
|
44
|
+
const impl = allowed(id);
|
|
45
|
+
if (!impl)
|
|
46
|
+
throw new Error('Not allowed on the web: ' + id);
|
|
47
|
+
return invoke(impl, ctx, input, io);
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
}
|
package/dist/cli/args.d.ts
CHANGED
|
@@ -3,6 +3,8 @@ export interface CliOptions {
|
|
|
3
3
|
command: string;
|
|
4
4
|
positionals: string[];
|
|
5
5
|
passthrough: string[];
|
|
6
|
+
/** The options as commander parsed them, by attribute name (operation commands build their input from these). */
|
|
7
|
+
raw: Readonly<Record<string, unknown>>;
|
|
6
8
|
config?: string;
|
|
7
9
|
workspace?: string;
|
|
8
10
|
harness?: string;
|
|
@@ -25,8 +27,15 @@ export interface CliOptions {
|
|
|
25
27
|
accountTo?: string;
|
|
26
28
|
noRestart: boolean;
|
|
27
29
|
follow: boolean;
|
|
30
|
+
crash: boolean;
|
|
28
31
|
json: boolean;
|
|
29
32
|
yes: boolean;
|
|
33
|
+
/** sessions --wide: also the folder column. */
|
|
34
|
+
wide: boolean;
|
|
35
|
+
/** storage move: keep the old folder (copy instead of rename). */
|
|
36
|
+
keepOld: boolean;
|
|
37
|
+
/** config export: keep folders and files of this PC in the file. */
|
|
38
|
+
withPaths: boolean;
|
|
30
39
|
timeout: number;
|
|
31
40
|
days: number;
|
|
32
41
|
/** restart: every session, not only this folder's project's. */
|
|
@@ -38,6 +47,8 @@ export interface CliOptions {
|
|
|
38
47
|
grep?: string;
|
|
39
48
|
/** migrate --dry-run, and --restore <backup folder>. */
|
|
40
49
|
dryRun: boolean;
|
|
50
|
+
/** doctor --fix: repair what it finds without asking. */
|
|
51
|
+
fix: boolean;
|
|
41
52
|
restore?: string;
|
|
42
53
|
/** resume --auto: called by the background watcher after a crash. */
|
|
43
54
|
auto: boolean;
|
|
@@ -62,7 +73,12 @@ export declare function splitArgs(text: string): string[];
|
|
|
62
73
|
* `cwd`. Pure; validate.ts checks that the agent and folder exist.
|
|
63
74
|
*/
|
|
64
75
|
export declare function parseSessionWant(input: string, cwd?: string): SessionWant;
|
|
65
|
-
/**
|
|
66
|
-
export declare function
|
|
76
|
+
/** "Unknown command" with the suggestion in our words; other commander errors only lose the lower-case start. */
|
|
77
|
+
export declare function friendlyError(text: string): string;
|
|
78
|
+
/**
|
|
79
|
+
* Every command, its options and help text, from manifest.ts. Actions only record what was parsed. `wrapper` = the
|
|
80
|
+
* sandbox <agent> spelling: --agent stays the agent's own flag there (Claude has one), only --harness is ours.
|
|
81
|
+
*/
|
|
82
|
+
export declare function buildProgram(record: (name: string, cmd: Command) => void, wrapper?: boolean): Command;
|
|
67
83
|
/** Parses argv into the command name and options. Throws commander errors for unknown commands/options. */
|
|
68
84
|
export declare function parseCli(argv: string[], wrapper?: boolean): CliOptions;
|
package/dist/cli/args.js
CHANGED
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
// dispatches the result. sandbox claude & co parse as `launch`: every option launch does not own goes to the agent, in
|
|
3
3
|
// order.
|
|
4
4
|
import path from 'node:path';
|
|
5
|
-
import { Command, InvalidArgumentError, Option } from 'commander';
|
|
5
|
+
import { Argument, Command, InvalidArgumentError, Option } from 'commander';
|
|
6
6
|
import { fail } from '../core/util/index.js';
|
|
7
7
|
import { c } from './output/index.js';
|
|
8
|
+
import { insideSandbox } from '../host/sandbox/index.js';
|
|
8
9
|
import { COMMANDS } from './manifest.js';
|
|
9
10
|
import { packageVersion } from '../core/package-info.js';
|
|
10
11
|
/** Splits a command line like a shell: "quoted words" and 'quoted words' stay together. */
|
|
@@ -38,45 +39,109 @@ function positiveNumber(value) {
|
|
|
38
39
|
function collect(value, previous = []) {
|
|
39
40
|
return [...previous, value];
|
|
40
41
|
}
|
|
41
|
-
/**
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
42
|
+
/** Commands in --help, group by group, in this order (a command not listed comes last in its group). */
|
|
43
|
+
const HELP_ORDER = [
|
|
44
|
+
['Agents', ['launch', 'start', 'resume', 'restart', 'stop', 'host']],
|
|
45
|
+
['Sessions', ['sessions', 'attach', 'status', 'exec', 'show', 'hide', 'db']],
|
|
46
|
+
['Projects & accounts', ['projects', 'account']],
|
|
47
|
+
['Data', ['data', 'storage', 'clean', 'sync']],
|
|
48
|
+
['Web', ['web']],
|
|
49
|
+
['Health', ['setup', 'doctor', 'repair', 'logs', 'audit', 'update', 'migrate', 'config']],
|
|
50
|
+
['Advanced', ['generate', 'agent-commands', 'vpn']],
|
|
51
|
+
];
|
|
52
|
+
/** The commands in the order --help lists them. */
|
|
53
|
+
function helpOrdered() {
|
|
54
|
+
const flat = HELP_ORDER.flatMap(([, names]) => names);
|
|
55
|
+
const rank = (name) => {
|
|
56
|
+
const i = flat.indexOf(name);
|
|
57
|
+
return i < 0 ? flat.length : i;
|
|
58
|
+
};
|
|
59
|
+
return [...COMMANDS].sort((x, y) => rank(x.name) - rank(y.name));
|
|
60
|
+
}
|
|
61
|
+
/** The options of one manifest entry: the visible one, and a hidden old spelling when `shownAs` renames it. */
|
|
62
|
+
function toOptions(o, wrapper) {
|
|
63
|
+
const shown = o.shownAs && !wrapper ? o.shownAs : o.flag;
|
|
64
|
+
const placeholder = o.type === 'boolean' ? '' : ' <' + (o.value ?? 'value') + '>';
|
|
65
|
+
const make = (flag) => {
|
|
66
|
+
const option = new Option((o.short ? o.short + ', ' : '') + flag + placeholder, o.description);
|
|
67
|
+
if (o.type === 'number')
|
|
68
|
+
option.argParser(positiveNumber);
|
|
69
|
+
if (o.type === 'list')
|
|
70
|
+
option.argParser(collect);
|
|
71
|
+
if (o.default !== undefined)
|
|
72
|
+
option.default(o.default);
|
|
73
|
+
if (o.group)
|
|
74
|
+
option.helpGroup(o.group + ':');
|
|
75
|
+
return option;
|
|
76
|
+
};
|
|
77
|
+
const visible = make(shown);
|
|
78
|
+
return shown === o.flag ? [visible] : [visible, make(o.flag).hideHelp()];
|
|
52
79
|
}
|
|
53
|
-
/**
|
|
54
|
-
|
|
80
|
+
/** A positional argument; fixed choices are checked by the parser and listed in --help. */
|
|
81
|
+
function toArgument(arg) {
|
|
82
|
+
const name = (arg.required ? '<' : '[') + arg.name + (arg.variadic ? '...' : '') + (arg.required ? '>' : ']');
|
|
83
|
+
const argument = new Argument(name, arg.description);
|
|
84
|
+
if (Array.isArray(arg.choices)) {
|
|
85
|
+
argument.choices(arg.choices);
|
|
86
|
+
const aliases = arg.aliases ?? [];
|
|
87
|
+
const check = argument.parseArg;
|
|
88
|
+
if (aliases.length && check)
|
|
89
|
+
argument.argParser((value, previous) => aliases.includes(value) ? value : check(value, previous));
|
|
90
|
+
}
|
|
91
|
+
return argument;
|
|
92
|
+
}
|
|
93
|
+
/** "Unknown command" with the suggestion in our words; other commander errors only lose the lower-case start. */
|
|
94
|
+
export function friendlyError(text) {
|
|
95
|
+
const m = /^error: unknown command '(.*)'\n\(Did you mean (.*)\?\)\n?$/.exec(text);
|
|
96
|
+
if (m) {
|
|
97
|
+
const names = m[2].replace(/^one of /, '').split(', ');
|
|
98
|
+
return 'Unknown command "' + m[1] + '". Did you mean: ' + names.map((n) => 'sandbox ' + n).join(' or ') + '?\n';
|
|
99
|
+
}
|
|
100
|
+
return text.replace(/^error: /, '').replace(/^./, (ch) => ch.toUpperCase());
|
|
101
|
+
}
|
|
102
|
+
function rootHelp() {
|
|
103
|
+
const lines = [
|
|
104
|
+
'',
|
|
105
|
+
'Start an agent by name: sandbox claude, sandbox codex ... (the same as sandbox launch --agent <name>).',
|
|
106
|
+
'Put --config <file> before or after the command to use another settings file.',
|
|
107
|
+
];
|
|
108
|
+
if (insideSandbox())
|
|
109
|
+
lines.push('You are inside a sandbox: launch, resume, attach, restart, stop, exec, show, hide, storage and web control it from your PC and do not work here.');
|
|
110
|
+
lines.push('', 'Examples:', ' sandbox the menu', ' sandbox claude -t start Claude and attach this terminal', ' sandbox data clean logs delete the saved logs', ' sandbox exec -- npm test run a command in the running sandbox');
|
|
111
|
+
return lines.join('\n');
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Every command, its options and help text, from manifest.ts. Actions only record what was parsed. `wrapper` = the
|
|
115
|
+
* sandbox <agent> spelling: --agent stays the agent's own flag there (Claude has one), only --harness is ours.
|
|
116
|
+
*/
|
|
117
|
+
export function buildProgram(record, wrapper = false) {
|
|
55
118
|
const program = new Command('sandbox')
|
|
56
119
|
.description('A disposable Windows Sandbox for development, with or without an AI agent, for the folder you are in. Run it with no arguments for the menu.')
|
|
57
120
|
.version(packageVersion(), '-v, --version', 'show the version')
|
|
58
121
|
.enablePositionalOptions()
|
|
59
122
|
.showHelpAfterError(' Fix: run the command with --help to see how to use it.')
|
|
60
|
-
.configureOutput({
|
|
61
|
-
|
|
62
|
-
})
|
|
63
|
-
.addHelpText('after', '\nPut --config <file> before or after the command to use another settings file.\nExamples:\n sandbox the menu\n sandbox claude -t start Claude and attach this terminal\n sandbox data clean logs delete the saved logs\n sandbox exec -- npm test run a command in the running sandbox')
|
|
123
|
+
.configureOutput({ outputError: (text, write) => write(c.red('Error: ') + friendlyError(text)) })
|
|
124
|
+
.addHelpText('after', rootHelp)
|
|
64
125
|
.exitOverride();
|
|
65
|
-
for (const spec of
|
|
126
|
+
for (const spec of helpOrdered()) {
|
|
66
127
|
const cmd = program
|
|
67
128
|
.command(spec.name, { hidden: spec.hidden })
|
|
68
129
|
.description(spec.summary)
|
|
69
|
-
.
|
|
130
|
+
.helpGroup(spec.group + ':')
|
|
131
|
+
.addOption(new Option('--config <file>', 'config file (default: ~/.agent-sandbox/config.json)').hideHelp());
|
|
70
132
|
for (const option of spec.options)
|
|
71
|
-
|
|
133
|
+
for (const o of toOptions(option, wrapper))
|
|
134
|
+
cmd.addOption(o);
|
|
72
135
|
if (spec.json)
|
|
73
136
|
cmd.option('--json', 'machine-readable output');
|
|
74
137
|
for (const arg of spec.args)
|
|
75
|
-
cmd.
|
|
138
|
+
cmd.addArgument(toArgument(arg));
|
|
76
139
|
if (spec.passthrough === 'agent')
|
|
77
140
|
cmd.argument('[agentArgs...]', 'passed to the agent').allowUnknownOption().allowExcessArguments();
|
|
78
141
|
if (spec.passthrough === 'command')
|
|
79
142
|
cmd.passThroughOptions();
|
|
143
|
+
if (spec.examples?.length)
|
|
144
|
+
cmd.addHelpText('after', '\nExamples:\n' + spec.examples.map((l) => ' ' + l).join('\n'));
|
|
80
145
|
cmd.action((...args) => record(spec.name, args[args.length - 1]));
|
|
81
146
|
}
|
|
82
147
|
return program;
|
|
@@ -99,7 +164,7 @@ export function parseCli(argv, wrapper = false) {
|
|
|
99
164
|
let parsed = null;
|
|
100
165
|
const program = buildProgram((name, cmd) => {
|
|
101
166
|
parsed = { name, cmd };
|
|
102
|
-
});
|
|
167
|
+
}, wrapper);
|
|
103
168
|
const launchFlags = new Set(program.commands
|
|
104
169
|
.find((c) => c.name() === 'launch')
|
|
105
170
|
.options.map((o) => o.long)
|
|
@@ -121,9 +186,10 @@ export function parseCli(argv, wrapper = false) {
|
|
|
121
186
|
command: name === 'start' ? 'launch' : name,
|
|
122
187
|
positionals: forAgent || name === 'exec' ? [] : operands,
|
|
123
188
|
passthrough: forAgent || name === 'exec' ? operands : [],
|
|
189
|
+
raw: o,
|
|
124
190
|
config: o.config,
|
|
125
191
|
workspace: o.workspace,
|
|
126
|
-
harness: o.harness,
|
|
192
|
+
harness: o.harness ?? (name !== 'account' && typeof o.agent === 'string' ? o.agent : undefined),
|
|
127
193
|
account: o.account,
|
|
128
194
|
node: o.node,
|
|
129
195
|
python: o.python,
|
|
@@ -144,8 +210,12 @@ export function parseCli(argv, wrapper = false) {
|
|
|
144
210
|
accountTo: name === 'account' && typeof o.to === 'string' ? o.to : undefined,
|
|
145
211
|
noRestart: o.restart === false,
|
|
146
212
|
follow: Boolean(o.follow),
|
|
213
|
+
crash: Boolean(o.crash),
|
|
147
214
|
json: Boolean(o.json),
|
|
148
215
|
yes: Boolean(o.yes),
|
|
216
|
+
wide: Boolean(o.wide),
|
|
217
|
+
keepOld: Boolean(o.keepOld),
|
|
218
|
+
withPaths: Boolean(o.withPaths),
|
|
149
219
|
all: Boolean(o.all),
|
|
150
220
|
sessions: (o.session ?? []).map((s) => parseSessionWant(s)),
|
|
151
221
|
timeout: o.timeout ?? 600,
|
|
@@ -153,6 +223,7 @@ export function parseCli(argv, wrapper = false) {
|
|
|
153
223
|
kind: o.kind,
|
|
154
224
|
grep: o.grep,
|
|
155
225
|
dryRun: Boolean(o.dryRun),
|
|
226
|
+
fix: Boolean(o.fix),
|
|
156
227
|
auto: o.auto === true,
|
|
157
228
|
restore: o.restore,
|
|
158
229
|
check: Boolean(o.check),
|
|
@@ -175,6 +246,7 @@ function defaults() {
|
|
|
175
246
|
command: '',
|
|
176
247
|
positionals: [],
|
|
177
248
|
passthrough: [],
|
|
249
|
+
raw: {},
|
|
178
250
|
scripts: [],
|
|
179
251
|
databases: [],
|
|
180
252
|
terminal: false,
|
|
@@ -186,13 +258,18 @@ function defaults() {
|
|
|
186
258
|
fromHost: false,
|
|
187
259
|
noRestart: false,
|
|
188
260
|
follow: false,
|
|
261
|
+
crash: false,
|
|
189
262
|
dryRun: false,
|
|
263
|
+
fix: false,
|
|
190
264
|
auto: false,
|
|
191
265
|
check: false,
|
|
192
266
|
rollback: false,
|
|
193
267
|
unattended: false,
|
|
194
268
|
json: false,
|
|
195
269
|
yes: false,
|
|
270
|
+
wide: false,
|
|
271
|
+
keepOld: false,
|
|
272
|
+
withPaths: false,
|
|
196
273
|
all: false,
|
|
197
274
|
sessions: [],
|
|
198
275
|
timeout: 600,
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// `account list | save | use | default | rename | remove [--agent <name>]`
|
|
2
|
+
import { askChoice, askName, askRequired } from '../../core/prompt.js';
|
|
2
3
|
import { fail, safeText } from '../../core/util/index.js';
|
|
3
|
-
import { printJson, table } from '../output/index.js';
|
|
4
|
+
import { nextStep, printJson, table } from '../output/index.js';
|
|
4
5
|
import { AccountsService } from '../services/index.js';
|
|
5
6
|
function label(a) {
|
|
6
7
|
return '"' + a.name + '"' + (a.email ? ' (' + a.email + ')' : '');
|
|
@@ -31,38 +32,65 @@ function list(ctx, accounts, agent) {
|
|
|
31
32
|
return 0;
|
|
32
33
|
}
|
|
33
34
|
async function use(ctx, accounts, name, agent) {
|
|
34
|
-
|
|
35
|
+
const used = accounts.activate(name, agent);
|
|
36
|
+
console.log('Sandbox now uses ' + label(used) + '.');
|
|
37
|
+
if (used.note)
|
|
38
|
+
console.log(safeText(used.note));
|
|
35
39
|
if (accounts.hasRunningSessions(agent) && !ctx.options.noRestart)
|
|
36
40
|
console.log(safeText(await accounts.restart(agent)) + ' with --continue; the conversation carries on under the new account.');
|
|
37
41
|
return 0;
|
|
38
42
|
}
|
|
43
|
+
/** The account the command is about: the one typed, or one picked from the saved accounts. */
|
|
44
|
+
async function accountName(accounts, action, agent, given) {
|
|
45
|
+
if (given)
|
|
46
|
+
return given;
|
|
47
|
+
const usage = 'Usage: sandbox account ' + action + ' <name>';
|
|
48
|
+
if (action === 'save')
|
|
49
|
+
return askName('Name for this login:', usage, (v) => v.length > 0 || 'Type a name.');
|
|
50
|
+
const rows = accounts.list(agent);
|
|
51
|
+
if (!rows.length)
|
|
52
|
+
fail('No saved accounts.', 'Sign in inside the sandbox, then run: sandbox account save <name>');
|
|
53
|
+
return askChoice('Which account?', rows.map((a) => ({ name: safeText(label(a)), value: a.name })), usage);
|
|
54
|
+
}
|
|
55
|
+
async function remove(ctx, accounts, name, agent) {
|
|
56
|
+
const sure = ctx.options.yes ||
|
|
57
|
+
(await askRequired('Remove the saved account "' + name + '"? Its login cannot be recovered; you would sign in again.', 'Add --yes to remove it without asking.'));
|
|
58
|
+
if (!sure) {
|
|
59
|
+
console.log('Nothing removed.');
|
|
60
|
+
return 1;
|
|
61
|
+
}
|
|
62
|
+
accounts.remove(name, agent);
|
|
63
|
+
console.log('Removed account ' + name + '.');
|
|
64
|
+
return 0;
|
|
65
|
+
}
|
|
39
66
|
export async function account(ctx) {
|
|
40
|
-
const [action = 'list',
|
|
41
|
-
const newName = ctx.options.accountTo;
|
|
67
|
+
const [action = 'list', given] = ctx.options.positionals;
|
|
42
68
|
const agent = ctx.options.accountAgent ?? 'claude';
|
|
43
69
|
const accounts = new AccountsService(ctx);
|
|
44
|
-
|
|
70
|
+
if (action === 'list')
|
|
71
|
+
return list(ctx, accounts, agent);
|
|
72
|
+
const name = await accountName(accounts, action, agent, given);
|
|
45
73
|
switch (action) {
|
|
46
|
-
case 'list':
|
|
47
|
-
return list(ctx, accounts, agent);
|
|
48
74
|
case 'save':
|
|
49
|
-
console.log('Saved account ' + label(accounts.save(
|
|
75
|
+
console.log('Saved account ' + label(accounts.save(name, Boolean(ctx.options.fromHost), agent)) + '.');
|
|
76
|
+
nextStep('sandbox account use ' + name + ' (the sandbox uses it)');
|
|
50
77
|
return 0;
|
|
51
78
|
case 'use':
|
|
52
|
-
return use(ctx, accounts,
|
|
79
|
+
return use(ctx, accounts, name, agent);
|
|
53
80
|
case 'default':
|
|
54
|
-
accounts.setDefault(
|
|
81
|
+
accounts.setDefault(name, agent);
|
|
55
82
|
console.log('Default account: ' + name);
|
|
56
83
|
return 0;
|
|
57
|
-
case 'rename':
|
|
58
|
-
|
|
59
|
-
|
|
84
|
+
case 'rename': {
|
|
85
|
+
const to = ctx.options.accountTo ??
|
|
86
|
+
(await askName('New name for "' + name + '":', 'Usage: sandbox account rename <name> --to <new-name>', (v) => v.length > 0 || 'Type a name.'));
|
|
87
|
+
accounts.rename(name, to, agent);
|
|
88
|
+
console.log('Renamed account ' + name + ' to ' + to + '.');
|
|
60
89
|
return 0;
|
|
90
|
+
}
|
|
61
91
|
case 'remove':
|
|
62
|
-
|
|
63
|
-
console.log('Removed account ' + name);
|
|
64
|
-
return 0;
|
|
92
|
+
return remove(ctx, accounts, name, agent);
|
|
65
93
|
default:
|
|
66
|
-
fail('Unknown account action "' + action + '".', 'Use one of: sandbox account list | save <name> | use <name> | default <name> | rename <name> --to <new-name> | remove <name>');
|
|
94
|
+
return fail('Unknown account action "' + action + '".', 'Use one of: sandbox account list | save <name> | use <name> | default <name> | rename <name> --to <new-name> | remove <name>');
|
|
67
95
|
}
|
|
68
96
|
}
|
|
@@ -15,6 +15,8 @@ export interface Context {
|
|
|
15
15
|
borrowed?: Borrowed;
|
|
16
16
|
}
|
|
17
17
|
export declare function createContext(packageRoot: string, entry: string, options: CliOptions): Context;
|
|
18
|
+
/** Reads the config again and takes the storage folder from it (after a migration or a move changed it). */
|
|
19
|
+
export declare function refreshStorage(ctx: Context): void;
|
|
18
20
|
/** For commands that control the sandbox from your PC: inside the sandbox they make no sense. */
|
|
19
21
|
export declare function requireOnPc(what: string): void;
|
|
20
22
|
export declare function requireRunning(hint?: string): void;
|
|
@@ -36,14 +36,21 @@ export function createContext(packageRoot, entry, options) {
|
|
|
36
36
|
dataPath: insideSandbox() ? GUEST_DATA_DIR : path.join(storageRoot, 'data', loaded.config.storage.dataName),
|
|
37
37
|
};
|
|
38
38
|
}
|
|
39
|
+
/** Reads the config again and takes the storage folder from it (after a migration or a move changed it). */
|
|
40
|
+
export function refreshStorage(ctx) {
|
|
41
|
+
ctx.loaded = loadConfig(ctx.options.config);
|
|
42
|
+
ctx.storageRoot = expandPath(ctx.loaded.config.storage.root, ctx.loaded.base);
|
|
43
|
+
if (!insideSandbox())
|
|
44
|
+
ctx.dataPath = path.join(ctx.storageRoot, 'data', ctx.loaded.config.storage.dataName);
|
|
45
|
+
}
|
|
39
46
|
/** For commands that control the sandbox from your PC: inside the sandbox they make no sense. */
|
|
40
47
|
export function requireOnPc(what) {
|
|
41
48
|
if (insideSandbox())
|
|
42
|
-
fail('You are inside the sandbox already, so "sandbox ' + what + '" has nothing to control.', 'Run it from a terminal on your PC.');
|
|
49
|
+
fail('You are inside the sandbox already, so "sandbox ' + what + '" has nothing to control.', 'Run it from a terminal on your PC. Inside the sandbox these work: sandbox status, sessions, config, data, db, doctor, logs.');
|
|
43
50
|
}
|
|
44
51
|
export function requireRunning(hint = '') {
|
|
45
52
|
if (!isSandboxRunning())
|
|
46
|
-
fail('No Windows Sandbox is running.', hint || 'Start one
|
|
53
|
+
fail('No Windows Sandbox is running.', hint || 'Start one: sandbox start (no agent) or sandbox claude.');
|
|
47
54
|
}
|
|
48
55
|
/**
|
|
49
56
|
* Maps a folder on this PC to its path inside the running sandbox (only folders inside the mapped workspace exist
|
|
@@ -1,13 +1,34 @@
|
|
|
1
1
|
// `sandbox data clean`: asks, then removes the folders the targets name (DataService does the work).
|
|
2
2
|
import { humanBytes } from '../../../core/disk.js';
|
|
3
|
-
import {
|
|
3
|
+
import { askChoices, askRequired, askTyped } from '../../../core/prompt.js';
|
|
4
4
|
import { fail } from '../../../core/util/index.js';
|
|
5
|
-
import { table } from '../../output/index.js';
|
|
5
|
+
import { nextStep, table, working } from '../../output/index.js';
|
|
6
6
|
import { DataService } from '../../services/index.js';
|
|
7
|
+
import { cleanTargetOf } from './collect.js';
|
|
7
8
|
export { resolveCleanTargets } from '../../services/index.js';
|
|
9
|
+
/** No target typed: a list of what can be cleaned, with sizes, to tick from (a terminal is needed). */
|
|
10
|
+
async function pickTargets(service) {
|
|
11
|
+
const fix = 'Name them: sandbox data clean logs tools/go (what exists: sandbox data)';
|
|
12
|
+
if (!process.stdin.isTTY)
|
|
13
|
+
fail('Which data should be cleaned?', fix);
|
|
14
|
+
const rows = await working('Measuring the saved data (big folders take a moment)', () => service.entries());
|
|
15
|
+
const choices = rows.flatMap((e) => {
|
|
16
|
+
const target = cleanTargetOf(e);
|
|
17
|
+
return target ? [{ name: target.padEnd(28) + humanBytes(e.bytes), value: target }] : [];
|
|
18
|
+
});
|
|
19
|
+
if (!choices.length)
|
|
20
|
+
return [];
|
|
21
|
+
return askChoices('What do you want to delete? (space ticks, enter confirms)', choices, fix);
|
|
22
|
+
}
|
|
8
23
|
export async function dataClean(ctx) {
|
|
9
24
|
const service = new DataService(ctx);
|
|
10
|
-
const
|
|
25
|
+
const typed = ctx.options.positionals.slice(1);
|
|
26
|
+
const inputs = typed.length ? typed : await pickTargets(service);
|
|
27
|
+
if (!inputs.length) {
|
|
28
|
+
console.log('Nothing chosen, nothing removed.');
|
|
29
|
+
return 0;
|
|
30
|
+
}
|
|
31
|
+
const { targets, present: sized, totalBytes: total } = service.plan(inputs);
|
|
11
32
|
if (!sized.length) {
|
|
12
33
|
console.log('Nothing to remove: ' + targets.map((t) => t.target).join(', ') + ' do(es) not exist.');
|
|
13
34
|
return 0;
|
|
@@ -20,18 +41,20 @@ export async function dataClean(ctx) {
|
|
|
20
41
|
if (!yes) {
|
|
21
42
|
const ok = sized.some((t) => t.target === 'all')
|
|
22
43
|
? await askTyped('This cannot be undone; the next sandbox starts from scratch and reinstalls everything.', 'all')
|
|
23
|
-
: await
|
|
44
|
+
: await askRequired('Delete ' + sized.map((t) => t.target).join(', ') + ' (' + humanBytes(total) + ')? This cannot be undone.', 'Add --yes to delete without asking.');
|
|
24
45
|
if (!ok) {
|
|
25
|
-
console.log('Nothing removed.'
|
|
46
|
+
console.log('Nothing removed.');
|
|
26
47
|
return 1;
|
|
27
48
|
}
|
|
28
49
|
}
|
|
29
50
|
const outcome = service.clean({ targets, present: sized, totalBytes: total });
|
|
30
|
-
console.log('Freed ' +
|
|
31
|
-
humanBytes(outcome.freedBytes) +
|
|
32
|
-
'. ' +
|
|
33
|
-
(outcome.touchedData ? 'The next sandbox reinstalls what it needs.' : ''));
|
|
34
51
|
if (outcome.failed.length)
|
|
35
52
|
fail('Could not remove everything: ' + outcome.failed.join('; '), 'Close programs using those folders and run the same command again.');
|
|
53
|
+
console.log('Removed ' +
|
|
54
|
+
sized.map((t) => t.target).join(', ') +
|
|
55
|
+
' and freed ' +
|
|
56
|
+
humanBytes(outcome.freedBytes) +
|
|
57
|
+
(outcome.touchedData ? '; the next sandbox reinstalls what it needs.' : '.'));
|
|
58
|
+
nextStep('sandbox data (see what is left)');
|
|
36
59
|
return 0;
|
|
37
60
|
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
// `sandbox engine`: the engine in use and, for each engine, what it can do and whether this PC can run it.
|
|
2
|
+
import { fail } from '../../core/util/index.js';
|
|
3
|
+
import { engineReports } from '../../host/engines/index.js';
|
|
4
|
+
import { c, printJson, table } from '../output/index.js';
|
|
5
|
+
const CAPABILITY_NAMES = {
|
|
6
|
+
desktop: 'desktop window',
|
|
7
|
+
gpu: 'GPU',
|
|
8
|
+
clipboard: 'clipboard',
|
|
9
|
+
audio: 'audio',
|
|
10
|
+
video: 'camera',
|
|
11
|
+
printers: 'printers',
|
|
12
|
+
liveFolderAdd: 'add folders while running',
|
|
13
|
+
attachedDisks: 'attached disks',
|
|
14
|
+
multipleInstances: 'several at once',
|
|
15
|
+
hvsocket: 'Hyper-V sockets',
|
|
16
|
+
};
|
|
17
|
+
/** sandbox engine check <engine>: the reasons and the exact commands, in plain words. Nothing is run or changed. */
|
|
18
|
+
async function checkEngine(ctx, name) {
|
|
19
|
+
const report = (await engineReports(ctx.loaded.config)).find((r) => r.id === name);
|
|
20
|
+
if (!report)
|
|
21
|
+
return fail('Unknown engine: ' + name, 'Use windows-sandbox or hcs.');
|
|
22
|
+
if (printJson(ctx, report))
|
|
23
|
+
return report.check.available ? 0 : 1;
|
|
24
|
+
if (report.check.available) {
|
|
25
|
+
console.log(c.green(name + ' can be used on this PC.'));
|
|
26
|
+
if (name === 'hcs')
|
|
27
|
+
console.log('HCS is in alpha: starting it is not enabled yet (docs/design/engines.md).');
|
|
28
|
+
return 0;
|
|
29
|
+
}
|
|
30
|
+
console.log(c.yellow(name + ' cannot be used on this PC yet:'));
|
|
31
|
+
report.check.reasons.forEach((reason, i) => {
|
|
32
|
+
console.log('\n ' + (i + 1) + '. ' + reason);
|
|
33
|
+
console.log(' To fix: ' + (report.check.fixes[i] ?? 'see docs/design/engines.md'));
|
|
34
|
+
});
|
|
35
|
+
console.log('\nNothing was changed. These commands change Windows, so they are yours to run (or not).');
|
|
36
|
+
return 1;
|
|
37
|
+
}
|
|
38
|
+
export async function engine(ctx) {
|
|
39
|
+
const [action = 'show', name = 'hcs'] = ctx.options.positionals;
|
|
40
|
+
if (action === 'check')
|
|
41
|
+
return checkEngine(ctx, name);
|
|
42
|
+
const reports = await engineReports(ctx.loaded.config);
|
|
43
|
+
const using = reports.find((r) => r.inUse);
|
|
44
|
+
if (printJson(ctx, { engine: using?.id, engines: reports }))
|
|
45
|
+
return 0;
|
|
46
|
+
console.log('Engine in use: ' + (using?.id ?? ctx.loaded.config.sandbox.engine) + ' (setting: sandbox.engine)');
|
|
47
|
+
for (const report of reports) {
|
|
48
|
+
console.log('\n' + report.id + (report.inUse ? ' (in use)' : ''));
|
|
49
|
+
console.log(' ' + (report.check.available ? c.green('can be used on this PC') : c.yellow('cannot be used yet')));
|
|
50
|
+
for (const reason of report.check.reasons)
|
|
51
|
+
console.log(' ' + reason);
|
|
52
|
+
for (const fix of report.check.fixes)
|
|
53
|
+
console.log(' Fix: ' + fix);
|
|
54
|
+
table(Object.entries(CAPABILITY_NAMES).map(([key, name]) => [
|
|
55
|
+
' ' + name,
|
|
56
|
+
report.capabilities[key] ? 'yes' : 'no',
|
|
57
|
+
]));
|
|
58
|
+
}
|
|
59
|
+
return 0;
|
|
60
|
+
}
|
|
@@ -2,8 +2,9 @@ export { createContext, type Context } from './context.js';
|
|
|
2
2
|
export { launch } from './launch/index.js';
|
|
3
3
|
export { setup } from './setup/index.js';
|
|
4
4
|
export { data } from './data/index.js';
|
|
5
|
+
export { storage, storageBeforeCommand } from './storage/index.js';
|
|
5
6
|
export { repairCommand } from './repair/index.js';
|
|
6
|
-
export { attach, db, exec
|
|
7
|
+
export { attach, db, exec } from './sessions/index.js';
|
|
7
8
|
export { account } from './accounts.js';
|
|
8
9
|
export { resume } from './resume.js';
|
|
9
10
|
export { projects } from './projects/index.js';
|
|
@@ -2,8 +2,9 @@ export { createContext } from './context.js';
|
|
|
2
2
|
export { launch } from './launch/index.js';
|
|
3
3
|
export { setup } from './setup/index.js';
|
|
4
4
|
export { data } from './data/index.js';
|
|
5
|
+
export { storage, storageBeforeCommand } from './storage/index.js';
|
|
5
6
|
export { repairCommand } from './repair/index.js';
|
|
6
|
-
export { attach, db, exec
|
|
7
|
+
export { attach, db, exec } from './sessions/index.js';
|
|
7
8
|
export { account } from './accounts.js';
|
|
8
9
|
export { resume } from './resume.js';
|
|
9
10
|
export { projects } from './projects/index.js';
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { ResolvedRun } from '../../../core/types.js';
|
|
2
2
|
import { type Context } from '../context.js';
|
|
3
3
|
/**
|
|
4
|
-
* Asked
|
|
5
|
-
* running sandbox without a restart. The answer is
|
|
4
|
+
* Asked at a start from a folder whose parent is not shared yet ("Not now" asks again next time): map it at every
|
|
5
|
+
* start (a project root), so the projects next to this one open in the running sandbox without a restart. The answer is
|
|
6
|
+
* saved to your config.
|
|
6
7
|
*/
|
|
7
8
|
export declare function maybeAddRoot(ctx: Context, run: ResolvedRun): Promise<void>;
|