windows-development-sandbox 1.4.1 → 1.4.3
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/config.example.json +3 -1
- package/dist/api.js +27 -16
- package/dist/cli/args.d.ts +4 -6
- package/dist/cli/args.js +67 -34
- package/dist/cli/argv.d.ts +9 -0
- package/dist/cli/argv.js +22 -0
- package/dist/cli/commands/accounts.d.ts +1 -1
- package/dist/cli/commands/accounts.js +42 -27
- package/dist/cli/commands/agent-commands.d.ts +3 -3
- package/dist/cli/commands/agent-commands.js +27 -18
- package/dist/cli/commands/context.d.ts +9 -11
- package/dist/cli/commands/context.js +35 -32
- package/dist/cli/commands/data/clean.d.ts +2 -2
- package/dist/cli/commands/data/clean.js +27 -11
- package/dist/cli/commands/data/collect.d.ts +6 -3
- package/dist/cli/commands/data/collect.js +46 -15
- package/dist/cli/commands/data/index.d.ts +2 -2
- package/dist/cli/commands/data/index.js +30 -12
- package/dist/cli/commands/data/remove.d.ts +1 -1
- package/dist/cli/commands/data/remove.js +4 -4
- package/dist/cli/commands/index.d.ts +5 -4
- package/dist/cli/commands/index.js +5 -4
- package/dist/cli/commands/launch/add-root.d.ts +7 -0
- package/dist/cli/commands/launch/add-root.js +64 -0
- package/dist/cli/commands/launch/boot-progress.d.ts +7 -0
- package/dist/cli/commands/launch/boot-progress.js +48 -0
- package/dist/cli/commands/launch/boot-wants.d.ts +11 -0
- package/dist/cli/commands/launch/boot-wants.js +48 -0
- package/dist/cli/commands/launch/first-start.d.ts +10 -0
- package/dist/cli/commands/launch/first-start.js +53 -0
- package/dist/cli/commands/launch/index.d.ts +6 -0
- package/dist/cli/commands/launch/index.js +6 -0
- package/dist/cli/commands/launch/launch.d.ts +8 -0
- package/dist/cli/commands/launch/launch.js +211 -0
- package/dist/cli/commands/launch/prepare.d.ts +23 -0
- package/dist/cli/commands/launch/prepare.js +109 -0
- package/dist/cli/commands/launch/running.d.ts +45 -0
- package/dist/cli/commands/launch/running.js +218 -0
- package/dist/cli/commands/launch/summary.d.ts +8 -0
- package/dist/cli/commands/launch/summary.js +98 -0
- package/dist/cli/commands/maintenance/audit.d.ts +3 -0
- package/dist/cli/commands/maintenance/audit.js +58 -0
- package/dist/cli/commands/maintenance/clean.d.ts +2 -0
- package/dist/cli/commands/maintenance/clean.js +10 -0
- package/dist/cli/commands/maintenance/config.d.ts +2 -0
- package/dist/cli/commands/maintenance/config.js +145 -0
- package/dist/cli/commands/maintenance/doctor.d.ts +2 -0
- package/dist/cli/commands/maintenance/doctor.js +52 -0
- package/dist/cli/commands/maintenance/host-claude.d.ts +2 -0
- package/dist/cli/commands/maintenance/host-claude.js +4 -0
- package/dist/cli/commands/maintenance/index.d.ts +8 -0
- package/dist/cli/commands/maintenance/index.js +9 -0
- package/dist/cli/commands/maintenance/logs.d.ts +2 -0
- package/dist/cli/commands/maintenance/logs.js +44 -0
- package/dist/cli/commands/maintenance/sync.d.ts +2 -0
- package/dist/cli/commands/maintenance/sync.js +12 -0
- package/dist/cli/commands/maintenance/watch.d.ts +3 -0
- package/dist/cli/commands/maintenance/watch.js +6 -0
- package/dist/cli/commands/projects/describe-sessions.d.ts +3 -0
- package/dist/cli/commands/projects/describe-sessions.js +15 -0
- package/dist/cli/commands/projects/here.d.ts +38 -0
- package/dist/cli/commands/projects/here.js +145 -0
- package/dist/cli/commands/projects/index.d.ts +4 -0
- package/dist/cli/commands/projects/index.js +4 -0
- package/dist/cli/commands/projects/projects.d.ts +14 -0
- package/dist/cli/commands/projects/projects.js +213 -0
- package/dist/cli/commands/projects/restart.d.ts +15 -0
- package/dist/cli/commands/projects/restart.js +149 -0
- package/dist/cli/commands/registry.d.ts +3 -0
- package/dist/cli/commands/registry.js +34 -0
- package/dist/cli/commands/repair/checks.js +105 -29
- package/dist/cli/commands/repair/finders.d.ts +13 -10
- package/dist/cli/commands/repair/finders.js +63 -43
- package/dist/cli/commands/repair/index.d.ts +4 -4
- package/dist/cli/commands/repair/index.js +47 -21
- package/dist/cli/commands/repair/types.d.ts +2 -2
- package/dist/cli/commands/repair/types.js +7 -2
- package/dist/cli/commands/sessions/attach.d.ts +2 -0
- package/dist/cli/commands/sessions/attach.js +45 -0
- package/dist/cli/commands/sessions/control.d.ts +4 -0
- package/dist/cli/commands/sessions/control.js +62 -0
- package/dist/cli/commands/sessions/exec.d.ts +6 -0
- package/dist/cli/commands/sessions/exec.js +72 -0
- package/dist/cli/commands/sessions/index.d.ts +6 -0
- package/dist/cli/commands/sessions/index.js +9 -0
- package/dist/cli/commands/sessions/list.d.ts +15 -0
- package/dist/cli/commands/sessions/list.js +65 -0
- package/dist/cli/commands/sessions/status.d.ts +2 -0
- package/dist/cli/commands/sessions/status.js +153 -0
- package/dist/cli/commands/sessions/window.d.ts +3 -0
- package/dist/cli/commands/sessions/window.js +18 -0
- package/dist/cli/commands/setup/checks.d.ts +4 -4
- package/dist/cli/commands/setup/checks.js +36 -19
- package/dist/cli/commands/setup/facts.d.ts +6 -6
- package/dist/cli/commands/setup/facts.js +23 -11
- package/dist/cli/commands/setup/index.d.ts +1 -1
- package/dist/cli/commands/setup/index.js +25 -12
- package/dist/cli/commands/user-config.d.ts +5 -5
- package/dist/cli/commands/user-config.js +14 -12
- package/dist/cli/history.d.ts +5 -4
- package/dist/cli/history.js +23 -11
- package/dist/cli/index.d.ts +4 -14
- package/dist/cli/index.js +27 -77
- package/dist/cli/manifest.d.ts +464 -10
- package/dist/cli/manifest.js +327 -53
- package/dist/cli/menu/apps.d.ts +7 -5
- package/dist/cli/menu/apps.js +64 -16
- package/dist/cli/menu/command-fields.d.ts +15 -0
- package/dist/cli/menu/command-fields.js +23 -0
- package/dist/cli/menu/command-form.d.ts +3 -5
- package/dist/cli/menu/command-form.js +116 -48
- package/dist/cli/menu/home.d.ts +22 -0
- package/dist/cli/menu/home.js +72 -0
- package/dist/cli/menu/index.d.ts +2 -24
- package/dist/cli/menu/index.js +4 -178
- package/dist/cli/menu/menu.d.ts +23 -0
- package/dist/cli/menu/menu.js +185 -0
- package/dist/cli/menu/settings/categories.d.ts +2 -2
- package/dist/cli/menu/settings/categories.js +123 -20
- package/dist/cli/menu/settings/collections/collection-editor.d.ts +23 -0
- package/dist/cli/menu/settings/collections/collection-editor.js +89 -0
- package/dist/cli/menu/settings/collections/map-editor.d.ts +10 -0
- package/dist/cli/menu/settings/collections/map-editor.js +34 -0
- package/dist/cli/menu/settings/collections/object-list-editor.d.ts +10 -0
- package/dist/cli/menu/settings/collections/object-list-editor.js +23 -0
- package/dist/cli/menu/settings/collections/object-map-editor.d.ts +10 -0
- package/dist/cli/menu/settings/collections/object-map-editor.js +35 -0
- package/dist/cli/menu/settings/collections/string-list-editor.d.ts +12 -0
- package/dist/cli/menu/settings/collections/string-list-editor.js +39 -0
- package/dist/cli/menu/settings/config-file.d.ts +2 -2
- package/dist/cli/menu/settings/config-file.js +42 -19
- package/dist/cli/menu/settings/editor-actions.d.ts +2 -0
- package/dist/cli/menu/settings/editor-actions.js +2 -0
- package/dist/cli/menu/settings/format.d.ts +5 -0
- package/dist/cli/menu/settings/format.js +39 -0
- package/dist/cli/menu/settings/index.d.ts +1 -29
- package/dist/cli/menu/settings/index.js +1 -133
- package/dist/cli/menu/settings/object-editor.d.ts +12 -0
- package/dist/cli/menu/settings/object-editor.js +86 -0
- package/dist/cli/menu/settings/schema-node.d.ts +3 -1
- package/dist/cli/menu/settings/schema-node.js +71 -24
- package/dist/cli/menu/settings/settings-editor.d.ts +30 -0
- package/dist/cli/menu/settings/settings-editor.js +176 -0
- package/dist/cli/menu/settings/{editors.d.ts → value-editor.d.ts} +2 -13
- package/dist/cli/menu/settings/value-editor.js +137 -0
- package/dist/cli/menu/several.d.ts +4 -4
- package/dist/cli/menu/several.js +61 -20
- package/dist/cli/{colors.d.ts → output/colors.d.ts} +8 -8
- package/dist/cli/{colors.js → output/colors.js} +32 -14
- package/dist/cli/output/index.d.ts +3 -0
- package/dist/cli/output/index.js +3 -0
- package/dist/cli/output/print.d.ts +5 -0
- package/dist/cli/output/print.js +14 -0
- package/dist/cli/{progress.d.ts → output/progress.d.ts} +5 -5
- package/dist/cli/{progress.js → output/progress.js} +42 -19
- package/dist/cli/report.d.ts +2 -0
- package/dist/cli/report.js +20 -0
- package/dist/cli/tui/app.d.ts +6 -16
- package/dist/cli/tui/app.js +28 -8
- package/dist/cli/tui/dialogs/confirm-screen.d.ts +20 -0
- package/dist/cli/tui/dialogs/confirm-screen.js +50 -0
- package/dist/cli/tui/dialogs/message-screen.d.ts +17 -0
- package/dist/cli/tui/dialogs/message-screen.js +55 -0
- package/dist/cli/tui/dialogs/paragraphs.d.ts +2 -0
- package/dist/cli/tui/dialogs/paragraphs.js +5 -0
- package/dist/cli/tui/dialogs/text-screen.d.ts +26 -0
- package/dist/cli/tui/dialogs/text-screen.js +107 -0
- package/dist/cli/tui/frame.js +3 -1
- package/dist/cli/tui/index.d.ts +7 -3
- package/dist/cli/tui/index.js +4 -2
- package/dist/cli/tui/list/list-screen.d.ts +29 -0
- package/dist/cli/tui/{list-screen.js → list/list-screen.js} +86 -23
- package/dist/cli/tui/{list-screen.d.ts → list/list-types.d.ts} +0 -28
- package/dist/cli/tui/screen.d.ts +14 -0
- package/dist/cli/tui/terminal.js +34 -10
- package/dist/cli/tui/text.d.ts +2 -1
- package/dist/cli/tui/text.js +37 -7
- package/dist/cli/tui/theme.js +27 -9
- package/dist/cli/validate.d.ts +8 -8
- package/dist/cli/validate.js +32 -21
- package/dist/core/config/defaults.d.ts +2 -0
- package/dist/core/config/defaults.js +203 -0
- package/dist/core/config/index.d.ts +2 -0
- package/dist/core/config/index.js +3 -0
- package/dist/core/{config.d.ts → config/loader.d.ts} +1 -2
- package/dist/core/config/loader.js +47 -0
- package/dist/core/{detect-databases.js → detect/databases.js} +111 -23
- package/dist/core/detect/index.d.ts +4 -0
- package/dist/core/detect/index.js +4 -0
- package/dist/core/{detect-pwsh.d.ts → detect/pwsh.d.ts} +1 -1
- package/dist/core/{detect-pwsh.js → detect/pwsh.js} +25 -11
- package/dist/core/{detect-toolchains.d.ts → detect/toolchains.d.ts} +1 -1
- package/dist/core/{detect-toolchains.js → detect/toolchains.js} +42 -5
- package/dist/{guest/toolchains → core/detect}/versions.js +28 -12
- package/dist/core/disk.d.ts +2 -0
- package/dist/core/disk.js +46 -3
- package/dist/core/local-config/boot-wants.d.ts +45 -0
- package/dist/core/local-config/boot-wants.js +120 -0
- package/dist/core/local-config/file.d.ts +3 -0
- package/dist/core/local-config/file.js +16 -0
- package/dist/core/local-config/index.d.ts +5 -0
- package/dist/core/local-config/index.js +7 -0
- package/dist/core/{local-config.d.ts → local-config/overrides.d.ts} +3 -18
- package/dist/core/{local-config.js → local-config/overrides.js} +45 -52
- package/dist/core/local-config/policy.d.ts +19 -0
- package/dist/core/local-config/policy.js +45 -0
- package/dist/core/local-config/trust.d.ts +13 -0
- package/dist/core/local-config/trust.js +43 -0
- package/dist/core/package-info.d.ts +4 -0
- package/dist/core/package-info.js +13 -0
- package/dist/core/run/guest-workspace.d.ts +23 -0
- package/dist/core/run/guest-workspace.js +47 -0
- package/dist/core/run/index.d.ts +3 -0
- package/dist/core/run/index.js +3 -0
- package/dist/core/run/resolve-run.d.ts +3 -0
- package/dist/core/run/resolve-run.js +202 -0
- package/dist/core/run/versions.d.ts +13 -0
- package/dist/core/run/versions.js +65 -0
- package/dist/core/safe-paths.js +17 -5
- package/dist/core/schema/apps.d.ts +4 -4
- package/dist/core/schema/apps.js +55 -21
- package/dist/core/schema/common.d.ts +13 -10
- package/dist/core/schema/common.js +16 -10
- package/dist/core/schema/config.d.ts +15 -10
- package/dist/core/schema/config.js +78 -53
- package/dist/core/schema/databases.d.ts +4 -3
- package/dist/core/schema/databases.js +16 -12
- package/dist/core/schema/harness.d.ts +1 -1
- package/dist/core/schema/harness.js +17 -7
- package/dist/core/schema/index.d.ts +6 -0
- package/dist/core/schema/index.js +8 -0
- package/dist/core/schema/json-schema.js +10 -5
- package/dist/core/schema/profile.d.ts +4 -4
- package/dist/core/schema/profile.js +37 -17
- package/dist/core/schema/projects.d.ts +1 -1
- package/dist/core/schema/projects.js +16 -6
- package/dist/core/schema/sandbox.d.ts +11 -11
- package/dist/core/schema/sandbox.js +101 -37
- package/dist/core/schema/toolchains.d.ts +6 -1
- package/dist/core/schema/toolchains.js +84 -34
- package/dist/core/types.d.ts +19 -9
- package/dist/core/util/errors.d.ts +8 -0
- package/dist/core/util/errors.js +14 -0
- package/dist/core/util/fs.d.ts +8 -0
- package/dist/core/util/fs.js +40 -0
- package/dist/core/util/index.d.ts +7 -0
- package/dist/core/util/index.js +7 -0
- package/dist/core/util/jsonc.d.ts +6 -0
- package/dist/core/util/jsonc.js +25 -0
- package/dist/core/util/links.d.ts +10 -0
- package/dist/core/util/links.js +39 -0
- package/dist/core/util/paths.d.ts +7 -0
- package/dist/core/util/paths.js +33 -0
- package/dist/core/util/process.d.ts +15 -0
- package/dist/core/util/process.js +54 -0
- package/dist/core/util/text.d.ts +8 -0
- package/dist/core/util/text.js +8 -0
- package/dist/guest/{setup/agents.js → agents/agent-installer.js} +24 -4
- package/dist/guest/apps/after-install.d.ts +3 -0
- package/dist/guest/apps/after-install.js +47 -0
- package/dist/guest/apps/app-installer.d.ts +22 -0
- package/dist/guest/apps/app-installer.js +116 -0
- package/dist/guest/apps/find-exe.d.ts +5 -0
- package/dist/guest/apps/find-exe.js +41 -0
- package/dist/guest/apps/index.d.ts +3 -10
- package/dist/guest/apps/index.js +6 -206
- package/dist/guest/apps/resolvers.js +37 -9
- package/dist/guest/apps/shortcuts.d.ts +6 -0
- package/dist/guest/apps/shortcuts.js +28 -0
- package/dist/guest/apps/sources.d.ts +4 -0
- package/dist/guest/apps/sources.js +17 -0
- package/dist/guest/apps/unpack.d.ts +3 -0
- package/dist/guest/apps/unpack.js +47 -0
- package/dist/guest/{audit-parse.js → audit/parse.js} +39 -3
- package/dist/guest/{audit.d.ts → audit/process-audit.d.ts} +3 -1
- package/dist/guest/{audit.js → audit/process-audit.js} +33 -8
- package/dist/guest/boot/boot-env.d.ts +4 -0
- package/dist/guest/{boot-env.js → boot/boot-env.js} +7 -5
- package/dist/guest/boot/boot.d.ts +1 -0
- package/dist/guest/{main.js → boot/boot.js} +96 -50
- package/dist/guest/{guide.js → boot/guide.js} +32 -7
- package/dist/guest/{project-env.d.ts → boot/project-env.d.ts} +3 -3
- package/dist/guest/{project-env.js → boot/project-env.js} +12 -4
- package/dist/guest/boot/project-status.d.ts +5 -0
- package/dist/guest/boot/project-status.js +28 -0
- package/dist/guest/daemon/daemon.d.ts +1 -0
- package/dist/guest/daemon/daemon.js +51 -0
- package/dist/guest/daemon/exec.js +18 -6
- package/dist/guest/daemon/{shutdown.js → idle-shutdown.js} +5 -4
- package/dist/guest/daemon/{project.d.ts → project-provisioner.d.ts} +3 -3
- package/dist/guest/daemon/{project.js → project-provisioner.js} +60 -22
- package/dist/guest/daemon/relays.js +5 -3
- package/dist/guest/daemon/{session.js → sessions.js} +84 -24
- package/dist/guest/daemon/state.d.ts +4 -1
- package/dist/guest/daemon/state.js +34 -20
- package/dist/guest/databases/database-server.d.ts +13 -0
- package/dist/guest/databases/database-server.js +35 -0
- package/dist/guest/databases/dynamodb.d.ts +12 -0
- package/dist/guest/databases/dynamodb.js +81 -0
- package/dist/guest/databases/index.d.ts +2 -0
- package/dist/guest/databases/index.js +2 -0
- package/dist/guest/databases/mongodb.d.ts +7 -0
- package/dist/guest/databases/mongodb.js +46 -0
- package/dist/guest/databases/mysql.d.ts +7 -0
- package/dist/guest/databases/mysql.js +59 -0
- package/dist/guest/databases/names.d.ts +5 -0
- package/dist/guest/databases/names.js +8 -0
- package/dist/guest/databases/postgres.d.ts +9 -0
- package/dist/guest/databases/postgres.js +85 -0
- package/dist/guest/databases/redis.d.ts +7 -0
- package/dist/guest/databases/redis.js +25 -0
- package/dist/guest/databases/registry.d.ts +5 -0
- package/dist/guest/databases/registry.js +51 -0
- package/dist/guest/databases/sbx-db.d.ts +1 -0
- package/dist/guest/{db.js → databases/sbx-db.js} +13 -13
- package/dist/guest/{toolchains/databases → databases}/server.d.ts +5 -5
- package/dist/guest/{toolchains/databases → databases}/server.js +18 -13
- package/dist/guest/entries/daemon.js +16 -0
- package/dist/guest/entries/db.js +10 -0
- package/dist/guest/entries/gitguard.js +20 -0
- package/dist/guest/entries/main.d.ts +1 -0
- package/dist/guest/entries/main.js +24 -0
- package/dist/guest/entries/netproxy.d.ts +1 -0
- package/dist/guest/entries/netproxy.js +7 -0
- package/dist/guest/entries/view.d.ts +1 -0
- package/dist/guest/entries/view.js +11 -0
- package/dist/guest/{gitguard.js → git/decision.js} +49 -26
- package/dist/guest/network/addresses.d.ts +2 -0
- package/dist/guest/network/addresses.js +6 -0
- package/dist/guest/{setup/network.d.ts → network/allow-only.d.ts} +0 -10
- package/dist/guest/network/allow-only.js +84 -0
- package/dist/guest/network/firewall.d.ts +9 -0
- package/dist/guest/{setup/network.js → network/firewall.js} +58 -63
- package/dist/guest/network/proxy-server.d.ts +2 -0
- package/dist/guest/{netproxy.js → network/proxy-server.js} +37 -18
- package/dist/guest/{helpers.d.ts → runtime/csc.d.ts} +1 -1
- package/dist/guest/{helpers.js → runtime/csc.js} +7 -2
- package/dist/guest/runtime/fs.d.ts +2 -0
- package/dist/guest/runtime/fs.js +6 -0
- package/dist/guest/runtime/log.d.ts +3 -0
- package/dist/guest/runtime/log.js +22 -0
- package/dist/guest/runtime/paths.d.ts +13 -0
- package/dist/guest/runtime/paths.js +14 -0
- package/dist/guest/{ports.js → runtime/ports.js} +8 -2
- package/dist/guest/runtime/process.d.ts +15 -0
- package/dist/guest/runtime/process.js +59 -0
- package/dist/guest/{project-context.js → runtime/project-context.js} +1 -1
- package/dist/guest/runtime/session.d.ts +5 -0
- package/dist/guest/runtime/session.js +10 -0
- package/dist/guest/runtime/status.d.ts +7 -0
- package/dist/guest/runtime/status.js +57 -0
- package/dist/guest/{cmdline.js → sessions/cmdline.js} +10 -4
- package/dist/guest/{ptyhost.js → sessions/pty-host.js} +12 -5
- package/dist/guest/{view.js → sessions/viewer.js} +8 -11
- package/dist/guest/setup/claude-mem.d.ts +10 -0
- package/dist/guest/setup/{claude.js → claude-mem.js} +18 -78
- package/dist/guest/setup/{claude.d.ts → claude-profile.d.ts} +0 -10
- package/dist/guest/setup/claude-profile.js +89 -0
- package/dist/guest/setup/desktop.d.ts +2 -0
- package/dist/guest/setup/desktop.js +32 -0
- package/dist/guest/setup/environment.js +28 -5
- package/dist/guest/setup/{user.d.ts → git-identity.d.ts} +0 -2
- package/dist/guest/setup/git-identity.js +34 -0
- package/dist/guest/{gitrules.d.ts → setup/git-rules.d.ts} +1 -1
- package/dist/guest/setup/git-rules.js +50 -0
- package/dist/guest/setup/hooks.js +22 -5
- package/dist/guest/setup/{policy.js → managed-policy.js} +2 -2
- package/dist/guest/toolchains/catalogue.d.ts +4 -4
- package/dist/guest/toolchains/catalogue.js +30 -7
- package/dist/guest/toolchains/detect.d.ts +12 -0
- package/dist/guest/toolchains/detect.js +54 -0
- package/dist/guest/toolchains/index.d.ts +3 -17
- package/dist/guest/toolchains/index.js +1 -106
- package/dist/guest/toolchains/install.d.ts +20 -0
- package/dist/guest/toolchains/install.js +29 -0
- package/dist/guest/toolchains/languages/go.d.ts +3 -0
- package/dist/guest/toolchains/{go.js → languages/go.js} +27 -9
- package/dist/guest/toolchains/languages/java.d.ts +8 -0
- package/dist/guest/toolchains/{java.js → languages/java.js} +57 -18
- package/dist/guest/toolchains/languages/node.d.ts +3 -0
- package/dist/guest/toolchains/{node.js → languages/node.js} +51 -18
- package/dist/guest/toolchains/languages/php.d.ts +3 -0
- package/dist/guest/toolchains/{scripting → languages}/php.js +36 -11
- package/dist/guest/toolchains/languages/python-tools.d.ts +3 -0
- package/dist/guest/toolchains/languages/python-tools.js +12 -0
- package/dist/guest/toolchains/languages/python.d.ts +3 -0
- package/dist/guest/toolchains/{python.js → languages/python.js} +29 -16
- package/dist/guest/toolchains/languages/ruby.d.ts +3 -0
- package/dist/guest/toolchains/{scripting → languages}/ruby.js +28 -10
- package/dist/guest/toolchains/leftovers.d.ts +1 -1
- package/dist/guest/toolchains/leftovers.js +13 -11
- package/dist/guest/toolchains/managers.d.ts +6 -6
- package/dist/guest/toolchains/managers.js +38 -17
- package/dist/guest/toolchains/native/binstall.d.ts +3 -2
- package/dist/guest/toolchains/native/binstall.js +20 -8
- package/dist/guest/toolchains/native/cpp.d.ts +2 -2
- package/dist/guest/toolchains/native/cpp.js +23 -8
- package/dist/guest/toolchains/native/dotnet.d.ts +5 -3
- package/dist/guest/toolchains/native/dotnet.js +72 -24
- package/dist/guest/toolchains/native/mesa.d.ts +2 -2
- package/dist/guest/toolchains/native/mesa.js +27 -10
- package/dist/guest/toolchains/native/msvc/environment.d.ts +4 -4
- package/dist/guest/toolchains/native/msvc/environment.js +30 -16
- package/dist/guest/toolchains/native/msvc/index.d.ts +3 -3
- package/dist/guest/toolchains/native/msvc/index.js +10 -8
- package/dist/guest/toolchains/native/msvc/packages.d.ts +1 -1
- package/dist/guest/toolchains/native/msvc/packages.js +69 -23
- package/dist/guest/toolchains/native/msvc/tree.d.ts +6 -6
- package/dist/guest/toolchains/native/msvc/tree.js +15 -9
- package/dist/guest/toolchains/native/rust-extras.d.ts +23 -0
- package/dist/guest/toolchains/native/rust-extras.js +100 -0
- package/dist/guest/toolchains/native/rust.d.ts +2 -2
- package/dist/guest/toolchains/native/rust.js +41 -10
- package/dist/guest/toolchains/{scripting → native}/vcruntime.d.ts +2 -2
- package/dist/guest/toolchains/{scripting → native}/vcruntime.js +17 -7
- package/dist/guest/toolchains/package-ledger.d.ts +17 -0
- package/dist/guest/toolchains/package-ledger.js +54 -0
- package/dist/guest/toolchains/plan.d.ts +3 -24
- package/dist/guest/toolchains/plan.js +99 -111
- package/dist/guest/toolchains/runtimes.d.ts +6 -6
- package/dist/guest/toolchains/runtimes.js +31 -13
- package/dist/guest/toolchains/scheduler.d.ts +22 -0
- package/dist/guest/toolchains/scheduler.js +123 -0
- package/dist/guest/toolchains/setup.d.ts +10 -0
- package/dist/guest/toolchains/setup.js +22 -0
- package/dist/guest/toolchains/state-file.d.ts +3 -0
- package/dist/guest/toolchains/state-file.js +10 -0
- package/dist/guest/toolchains/step.d.ts +24 -0
- package/dist/guest/toolchains/step.js +1 -0
- package/dist/guest/toolchains/tool-env.d.ts +12 -0
- package/dist/guest/toolchains/tool-env.js +16 -0
- package/dist/guest/toolchains/tools/cli.d.ts +10 -0
- package/dist/guest/toolchains/{cli.js → tools/cli.js} +35 -15
- package/dist/guest/toolchains/tools/git.d.ts +3 -0
- package/dist/guest/toolchains/{git.js → tools/git.js} +38 -15
- package/dist/guest/toolchains/tools/pwsh.d.ts +4 -0
- package/dist/guest/toolchains/{pwsh.js → tools/pwsh.js} +14 -7
- package/dist/guest/toolchains/{vscode-profile.d.ts → tools/vscode-profile.d.ts} +6 -6
- package/dist/guest/toolchains/{vscode-profile.js → tools/vscode-profile.js} +28 -12
- package/dist/guest/toolchains/{vscode.d.ts → tools/vscode.d.ts} +6 -6
- package/dist/guest/toolchains/{vscode.js → tools/vscode.js} +67 -21
- package/dist/guest/toolchains/version-cache.d.ts +16 -0
- package/dist/guest/toolchains/version-cache.js +67 -0
- package/dist/host/agent-commands/commands.d.ts +13 -0
- package/dist/host/agent-commands/commands.js +33 -0
- package/dist/host/agent-commands/forwarders.d.ts +7 -0
- package/dist/host/agent-commands/forwarders.js +31 -0
- package/dist/host/agent-commands/index.d.ts +4 -0
- package/dist/host/agent-commands/index.js +4 -0
- package/dist/host/agent-commands/reconcile.d.ts +12 -0
- package/dist/host/agent-commands/reconcile.js +69 -0
- package/dist/host/agent-commands/user-path.d.ts +2 -0
- package/dist/host/agent-commands/user-path.js +33 -0
- package/dist/host/audit/collect.d.ts +2 -2
- package/dist/host/audit/collect.js +59 -22
- package/dist/host/audit/log.d.ts +2 -2
- package/dist/host/audit/log.js +24 -8
- package/dist/host/{attach.d.ts → channel/attach.d.ts} +2 -2
- package/dist/host/{attach.js → channel/attach.js} +33 -15
- package/dist/host/channel/channel.d.ts +51 -0
- package/dist/host/channel/channel.js +196 -0
- package/dist/host/channel/index.d.ts +2 -0
- package/dist/host/channel/index.js +2 -0
- package/dist/host/guard/agent-files.d.ts +7 -0
- package/dist/host/guard/agent-files.js +103 -0
- package/dist/host/guard/commands.d.ts +10 -0
- package/dist/host/guard/commands.js +123 -0
- package/dist/host/guard/file-hash.d.ts +4 -0
- package/dist/host/guard/file-hash.js +37 -0
- package/dist/host/guard/git-config.d.ts +5 -0
- package/dist/host/guard/git-config.js +62 -0
- package/dist/host/guard/git-dirs.d.ts +12 -0
- package/dist/host/guard/git-dirs.js +53 -0
- package/dist/host/guard/index.d.ts +5 -0
- package/dist/host/guard/index.js +4 -0
- package/dist/host/guard/mark-of-the-web.d.ts +8 -0
- package/dist/host/guard/mark-of-the-web.js +74 -0
- package/dist/host/guard/nested-repos.d.ts +14 -0
- package/dist/host/guard/nested-repos.js +88 -0
- package/dist/host/guard/quarantine.d.ts +3 -0
- package/dist/host/guard/quarantine.js +24 -0
- package/dist/host/guard/repo-guard.d.ts +10 -0
- package/dist/host/guard/repo-guard.js +36 -0
- package/dist/host/guard/store.d.ts +40 -0
- package/dist/host/guard/store.js +145 -0
- package/dist/host/guard/types.d.ts +27 -0
- package/dist/host/guard/types.js +3 -0
- package/dist/host/guard/watch-state.d.ts +9 -0
- package/dist/host/guard/watch-state.js +26 -0
- package/dist/host/launch/boot-projects.d.ts +17 -0
- package/dist/host/launch/{projects.js → boot-projects.js} +22 -13
- package/dist/host/{database-plan.d.ts → launch/database-plan.d.ts} +5 -5
- package/dist/host/{database-plan.js → launch/database-plan.js} +24 -13
- package/dist/host/launch/generate.d.ts +4 -0
- package/dist/host/launch/generate.js +77 -0
- package/dist/host/launch/index.d.ts +10 -0
- package/dist/host/launch/index.js +10 -0
- package/dist/host/launch/mappings.d.ts +5 -5
- package/dist/host/launch/mappings.js +37 -24
- package/dist/host/launch/pc-scan.d.ts +5 -0
- package/dist/host/{pc-scan.js → launch/pc-scan.js} +20 -13
- package/dist/host/launch/project-scan.d.ts +7 -0
- package/dist/host/{project-scan.js → launch/project-scan.js} +29 -21
- package/dist/host/launch/session-file.d.ts +23 -0
- package/dist/host/launch/session-file.js +73 -0
- package/dist/host/launch/stage.d.ts +5 -5
- package/dist/host/launch/stage.js +14 -13
- package/dist/host/launch/toolchains.d.ts +4 -0
- package/dist/host/launch/toolchains.js +11 -0
- package/dist/host/launch/{wsb.d.ts → wsb-file.d.ts} +4 -2
- package/dist/host/launch/wsb-file.js +56 -0
- package/dist/host/life/crash-report.d.ts +8 -0
- package/dist/host/life/crash-report.js +87 -0
- package/dist/host/life/index.d.ts +6 -0
- package/dist/host/life/index.js +6 -0
- package/dist/host/life/keep-awake.d.ts +10 -0
- package/dist/host/life/keep-awake.js +29 -0
- package/dist/host/life/life-record.d.ts +48 -0
- package/dist/host/life/life-record.js +76 -0
- package/dist/host/life/stop-events.d.ts +27 -0
- package/dist/host/life/stop-events.js +96 -0
- package/dist/host/life/stop-warning.d.ts +4 -0
- package/dist/host/life/stop-warning.js +25 -0
- package/dist/host/life/windows-update.d.ts +3 -0
- package/dist/host/life/windows-update.js +11 -0
- package/dist/host/native.d.ts +4 -0
- package/dist/host/native.js +11 -0
- package/dist/host/network/index.d.ts +1 -0
- package/dist/host/network/index.js +1 -0
- package/dist/host/{port-forward.d.ts → network/port-forward.d.ts} +1 -1
- package/dist/host/{port-forward.js → network/port-forward.js} +16 -10
- package/dist/host/profile/accounts.d.ts +37 -0
- package/dist/host/profile/accounts.js +146 -0
- package/dist/host/profile/claude-login.d.ts +22 -0
- package/dist/host/profile/claude-login.js +57 -0
- package/dist/host/{claude-profile.d.ts → profile/claude-profile.d.ts} +9 -9
- package/dist/host/{claude-profile.js → profile/claude-profile.js} +32 -22
- package/dist/host/profile/index.d.ts +7 -0
- package/dist/host/profile/index.js +7 -0
- package/dist/host/profile/personalize.d.ts +2 -0
- package/dist/host/profile/personalize.js +127 -0
- package/dist/host/profile/reg-file.d.ts +8 -0
- package/dist/host/profile/reg-file.js +45 -0
- package/dist/host/profile/secret-files.d.ts +2 -0
- package/dist/host/profile/secret-files.js +25 -0
- package/dist/host/profile/secret-patterns.d.ts +6 -0
- package/dist/host/profile/secret-patterns.js +128 -0
- package/dist/host/profile/secrets.d.ts +12 -0
- package/dist/host/profile/secrets.js +100 -0
- package/dist/host/projects/index.d.ts +4 -0
- package/dist/host/projects/index.js +4 -0
- package/dist/host/{join.d.ts → projects/join.d.ts} +12 -9
- package/dist/host/{join.js → projects/join.js} +62 -33
- package/dist/host/projects/known.d.ts +28 -0
- package/dist/host/projects/known.js +55 -0
- package/dist/host/projects/mapper.d.ts +29 -0
- package/dist/host/projects/mapper.js +88 -0
- package/dist/host/projects/registry.d.ts +83 -0
- package/dist/host/projects/registry.js +136 -0
- package/dist/host/sandbox/doctor.d.ts +2 -0
- package/dist/host/sandbox/doctor.js +42 -0
- package/dist/host/sandbox/host-claude.d.ts +1 -0
- package/dist/host/sandbox/host-claude.js +26 -0
- package/dist/host/sandbox/index.d.ts +6 -0
- package/dist/host/sandbox/index.js +6 -0
- package/dist/host/{platform.d.ts → sandbox/platform.d.ts} +0 -5
- package/dist/host/sandbox/platform.js +60 -0
- package/dist/host/sandbox/probe.d.ts +3 -0
- package/dist/host/sandbox/probe.js +47 -0
- package/dist/host/{window.js → sandbox/window.js} +7 -5
- package/dist/host/{wsb.js → sandbox/wsb-cli.js} +31 -8
- package/dist/host/{cleanup.js → storage/cleanup.js} +27 -12
- package/dist/host/storage/index.d.ts +2 -0
- package/dist/host/storage/index.js +2 -0
- package/dist/host/storage/state-files.d.ts +4 -0
- package/dist/host/storage/state-files.js +10 -0
- package/dist/host/test-guard.js +1 -1
- package/dist/host/tools/conpty.d.ts +8 -0
- package/dist/host/tools/conpty.js +58 -0
- package/dist/host/tools/index.d.ts +2 -0
- package/dist/host/tools/index.js +2 -0
- package/dist/host/{terminal.d.ts → tools/windows-terminal.d.ts} +2 -10
- package/dist/host/{terminal.js → tools/windows-terminal.js} +33 -57
- package/dist/host/workspace-view/active-views.d.ts +3 -0
- package/dist/host/workspace-view/active-views.js +22 -0
- package/dist/host/workspace-view/index.d.ts +2 -18
- package/dist/host/workspace-view/index.js +2 -49
- package/dist/host/workspace-view/plan.d.ts +16 -0
- package/dist/host/workspace-view/plan.js +50 -0
- package/dist/host/workspace-view/rules.js +10 -3
- package/dist/host/workspace-view/view-state.d.ts +10 -0
- package/dist/host/workspace-view/view-state.js +31 -0
- package/dist/host/workspace-view/view.d.ts +1 -0
- package/dist/host/workspace-view/view.js +51 -55
- package/dist/runtime/daemon.js +4220 -1968
- package/dist/runtime/db.js +2134 -849
- package/dist/runtime/gitguard.js +29 -11
- package/dist/runtime/main.js +4687 -2243
- package/dist/runtime/netproxy.js +1644 -420
- package/dist/runtime/view.js +1356 -428
- package/dist/selftest/accounts.test.d.ts +1 -1
- package/dist/selftest/accounts.test.js +20 -17
- package/dist/selftest/agent-commands.test.d.ts +1 -1
- package/dist/selftest/agent-commands.test.js +9 -5
- package/dist/selftest/audit.test.d.ts +1 -1
- package/dist/selftest/audit.test.js +46 -13
- package/dist/selftest/channel.test.d.ts +1 -1
- package/dist/selftest/channel.test.js +63 -16
- package/dist/selftest/cli.test.d.ts +1 -1
- package/dist/selftest/cli.test.js +68 -16
- package/dist/selftest/cmdline.test.d.ts +1 -1
- package/dist/selftest/cmdline.test.js +36 -7
- package/dist/selftest/config.test.d.ts +1 -1
- package/dist/selftest/config.test.js +12 -5
- package/dist/selftest/data.test.d.ts +1 -1
- package/dist/selftest/data.test.js +35 -6
- package/dist/selftest/detect.test.d.ts +1 -1
- package/dist/selftest/detect.test.js +22 -9
- package/dist/selftest/generate.test.d.ts +1 -1
- package/dist/selftest/generate.test.js +33 -9
- package/dist/selftest/git-access.test.d.ts +1 -1
- package/dist/selftest/git-access.test.js +42 -4
- package/dist/selftest/guest-boot.test.d.ts +1 -1
- package/dist/selftest/guest-boot.test.js +25 -7
- package/dist/selftest/host-sim.test.d.ts +1 -1
- package/dist/selftest/host-sim.test.js +27 -3
- package/dist/selftest/hostile-input.test.d.ts +1 -1
- package/dist/selftest/hostile-input.test.js +5 -5
- package/dist/selftest/index.d.ts +1 -1
- package/dist/selftest/index.js +72 -16
- package/dist/selftest/layout.test.d.ts +2 -0
- package/dist/selftest/layout.test.js +131 -0
- package/dist/selftest/links.test.d.ts +1 -1
- package/dist/selftest/links.test.js +16 -11
- package/dist/selftest/live-daemon.test.d.ts +1 -1
- package/dist/selftest/live-daemon.test.js +20 -8
- package/dist/selftest/live-git.test.d.ts +1 -1
- package/dist/selftest/live-git.test.js +13 -4
- package/dist/selftest/live-network.test.d.ts +1 -1
- package/dist/selftest/live-network.test.js +24 -9
- package/dist/selftest/live-projects.test.d.ts +1 -1
- package/dist/selftest/live-projects.test.js +47 -20
- package/dist/selftest/live-terminal.test.d.ts +1 -1
- package/dist/selftest/live-terminal.test.js +41 -15
- package/dist/selftest/local-config.test.d.ts +1 -1
- package/dist/selftest/local-config.test.js +64 -16
- package/dist/selftest/mirror.test.d.ts +1 -1
- package/dist/selftest/mirror.test.js +102 -32
- package/dist/selftest/network.test.d.ts +1 -1
- package/dist/selftest/network.test.js +17 -8
- package/dist/selftest/personalization.test.d.ts +1 -1
- package/dist/selftest/personalization.test.js +12 -5
- package/dist/selftest/projects.test.d.ts +1 -1
- package/dist/selftest/projects.test.js +280 -85
- package/dist/selftest/repair.test.d.ts +1 -1
- package/dist/selftest/repair.test.js +17 -5
- package/dist/selftest/repo-guard.test.d.ts +1 -1
- package/dist/selftest/repo-guard.test.js +21 -20
- package/dist/selftest/secrets.test.d.ts +1 -1
- package/dist/selftest/secrets.test.js +57 -13
- package/dist/selftest/setup.test.d.ts +1 -1
- package/dist/selftest/setup.test.js +25 -5
- package/dist/selftest/{fixtures.d.ts → support/fixtures.d.ts} +5 -3
- package/dist/selftest/{fixtures.js → support/fixtures.js} +95 -17
- package/dist/selftest/{harness.js → support/harness.js} +24 -7
- package/dist/selftest/{live.d.ts → support/live.d.ts} +2 -2
- package/dist/selftest/{live.js → support/live.js} +34 -10
- package/dist/selftest/support/suite.js +1 -0
- package/dist/selftest/sync.test.d.ts +1 -1
- package/dist/selftest/sync.test.js +64 -26
- package/dist/selftest/test-guard.test.d.ts +1 -1
- package/dist/selftest/test-guard.test.js +43 -15
- package/dist/selftest/toolchains.test.d.ts +1 -1
- package/dist/selftest/toolchains.test.js +135 -36
- package/dist/selftest/workspace-view.test.d.ts +1 -1
- package/dist/selftest/workspace-view.test.js +48 -11
- package/dist/selftest/workspace.test.d.ts +1 -1
- package/dist/selftest/workspace.test.js +13 -4
- package/dist/shared/{apps.d.ts → apps/catalogue.d.ts} +1 -11
- package/dist/shared/apps/catalogue.js +768 -0
- package/dist/shared/apps/index.d.ts +2 -0
- package/dist/shared/apps/index.js +2 -0
- package/dist/shared/apps/selection.d.ts +11 -0
- package/dist/shared/apps/selection.js +40 -0
- package/dist/shared/channel/index.d.ts +2 -0
- package/dist/shared/channel/index.js +2 -0
- package/dist/shared/channel/run-dir.d.ts +30 -0
- package/dist/shared/channel/run-dir.js +84 -0
- package/dist/shared/{schema.d.ts → channel/schema.d.ts} +38 -21
- package/dist/shared/{schema.js → channel/schema.js} +62 -35
- package/dist/shared/download/archive.d.ts +13 -0
- package/dist/shared/download/archive.js +57 -0
- package/dist/shared/download/downloader.d.ts +35 -0
- package/dist/shared/download/downloader.js +110 -0
- package/dist/shared/download/github.d.ts +16 -0
- package/dist/shared/download/github.js +74 -0
- package/dist/shared/download/http.d.ts +5 -0
- package/dist/shared/download/http.js +30 -0
- package/dist/shared/download/index.d.ts +5 -0
- package/dist/shared/download/index.js +5 -0
- package/dist/shared/download/spawn.d.ts +2 -0
- package/dist/shared/download/spawn.js +7 -0
- package/dist/shared/io/index.d.ts +3 -0
- package/dist/shared/io/index.js +3 -0
- package/dist/shared/io/json-file.d.ts +10 -0
- package/dist/shared/io/json-file.js +21 -0
- package/dist/shared/io/json.d.ts +13 -0
- package/dist/shared/io/json.js +49 -0
- package/dist/shared/{safe-remove.js → io/safe-remove.js} +32 -7
- package/dist/shared/{netrules.js → network/firewall-rules.js} +36 -5
- package/dist/shared/network/index.d.ts +2 -0
- package/dist/shared/network/index.js +2 -0
- package/dist/shared/{netpolicy.js → network/policy.js} +66 -11
- package/dist/shared/{paths.js → paths/claude-paths.js} +12 -2
- package/dist/shared/{guest-paths.d.ts → paths/guest-paths.d.ts} +6 -12
- package/dist/shared/{guest-paths.js → paths/guest-paths.js} +53 -36
- package/dist/shared/paths/index.d.ts +3 -0
- package/dist/shared/paths/index.js +3 -0
- package/dist/shared/{projects.js → paths/projects.js} +13 -3
- package/dist/shared/pty/client.d.ts +21 -0
- package/dist/shared/pty/client.js +79 -0
- package/dist/shared/{console-input.js → pty/console-input.js} +26 -6
- package/dist/shared/pty/index.d.ts +6 -0
- package/dist/shared/pty/index.js +6 -0
- package/dist/shared/pty/input-joiner.d.ts +15 -0
- package/dist/shared/pty/input-joiner.js +44 -0
- package/dist/shared/pty/output-filter.d.ts +13 -0
- package/dist/shared/pty/output-filter.js +140 -0
- package/dist/shared/pty/protocol.d.ts +36 -0
- package/dist/shared/pty/protocol.js +60 -0
- package/dist/shared/pty/terminal.d.ts +24 -0
- package/dist/shared/pty/terminal.js +147 -0
- package/dist/shared/test-guard.js +3 -1
- package/dist/sync/claude-mem.d.ts +1 -1
- package/dist/sync/claude-mem.js +9 -4
- package/dist/sync/history.d.ts +1 -29
- package/dist/sync/history.js +57 -45
- package/dist/sync/index.d.ts +5 -0
- package/dist/sync/index.js +5 -0
- package/dist/sync/sync-cycle.d.ts +18 -0
- package/dist/sync/sync-cycle.js +85 -0
- package/dist/sync/sync-state.d.ts +32 -0
- package/dist/sync/sync-state.js +37 -0
- package/dist/sync/watcher.d.ts +0 -18
- package/dist/sync/watcher.js +66 -100
- package/native/keep-awake.ps1 +8 -0
- package/native/power.cs +23 -0
- package/native/stop-events.ps1 +38 -0
- package/package.json +11 -3
- package/sandbox/linkgate.cs +98 -0
- package/sandbox/memlog.ps1 +15 -6
- package/schemas/config.schema.json +34 -1
- package/schemas/sandbox-config.schema.json +34 -1
- package/dist/cli/boot-progress.d.ts +0 -22
- package/dist/cli/boot-progress.js +0 -59
- package/dist/cli/commands/launch.d.ts +0 -32
- package/dist/cli/commands/launch.js +0 -421
- package/dist/cli/commands/maintenance.d.ts +0 -10
- package/dist/cli/commands/maintenance.js +0 -220
- package/dist/cli/commands/project.d.ts +0 -33
- package/dist/cli/commands/project.js +0 -102
- package/dist/cli/commands/projects.d.ts +0 -14
- package/dist/cli/commands/projects.js +0 -146
- package/dist/cli/commands/restart.d.ts +0 -6
- package/dist/cli/commands/restart.js +0 -95
- package/dist/cli/commands/sessions.d.ts +0 -12
- package/dist/cli/commands/sessions.js +0 -258
- package/dist/cli/menu/settings/editors.js +0 -305
- package/dist/cli/tui/dialogs.d.ts +0 -57
- package/dist/cli/tui/dialogs.js +0 -162
- package/dist/core/config.js +0 -109
- package/dist/core/project-policy.d.ts +0 -62
- package/dist/core/project-policy.js +0 -121
- package/dist/core/schema.d.ts +0 -6
- package/dist/core/schema.js +0 -8
- package/dist/core/util.d.ts +0 -62
- package/dist/core/util.js +0 -156
- package/dist/core/workspace.d.ts +0 -35
- package/dist/core/workspace.js +0 -206
- package/dist/guest/boot-env.d.ts +0 -4
- package/dist/guest/daemon.js +0 -57
- package/dist/guest/env.d.ts +0 -56
- package/dist/guest/env.js +0 -115
- package/dist/guest/gitrules.js +0 -11
- package/dist/guest/project-status.d.ts +0 -5
- package/dist/guest/project-status.js +0 -17
- package/dist/guest/setup/user.js +0 -51
- package/dist/guest/toolchains/cli.d.ts +0 -10
- package/dist/guest/toolchains/common.d.ts +0 -54
- package/dist/guest/toolchains/common.js +0 -147
- package/dist/guest/toolchains/databases/dynamodb.d.ts +0 -8
- package/dist/guest/toolchains/databases/dynamodb.js +0 -52
- package/dist/guest/toolchains/databases/index.d.ts +0 -6
- package/dist/guest/toolchains/databases/index.js +0 -62
- package/dist/guest/toolchains/databases/mongodb.d.ts +0 -3
- package/dist/guest/toolchains/databases/mongodb.js +0 -31
- package/dist/guest/toolchains/databases/mysql.d.ts +0 -3
- package/dist/guest/toolchains/databases/mysql.js +0 -38
- package/dist/guest/toolchains/databases/postgres.d.ts +0 -5
- package/dist/guest/toolchains/databases/postgres.js +0 -38
- package/dist/guest/toolchains/databases/redis.d.ts +0 -3
- package/dist/guest/toolchains/databases/redis.js +0 -16
- package/dist/guest/toolchains/git.d.ts +0 -3
- package/dist/guest/toolchains/go.d.ts +0 -3
- package/dist/guest/toolchains/java.d.ts +0 -8
- package/dist/guest/toolchains/node.d.ts +0 -3
- package/dist/guest/toolchains/pwsh.d.ts +0 -4
- package/dist/guest/toolchains/python.d.ts +0 -3
- package/dist/guest/toolchains/scripting/php.d.ts +0 -3
- package/dist/guest/toolchains/scripting/ruby.d.ts +0 -3
- package/dist/host/accounts.d.ts +0 -32
- package/dist/host/accounts.js +0 -128
- package/dist/host/agent-commands.d.ts +0 -25
- package/dist/host/agent-commands.js +0 -145
- package/dist/host/channel.d.ts +0 -38
- package/dist/host/channel.js +0 -163
- package/dist/host/generate.d.ts +0 -13
- package/dist/host/generate.js +0 -115
- package/dist/host/launch/projects.d.ts +0 -17
- package/dist/host/launch/wsb.js +0 -34
- package/dist/host/motw.d.ts +0 -17
- package/dist/host/motw.js +0 -74
- package/dist/host/pc-scan.d.ts +0 -6
- package/dist/host/personalize.d.ts +0 -10
- package/dist/host/personalize.js +0 -97
- package/dist/host/platform.js +0 -129
- package/dist/host/project-scan.d.ts +0 -7
- package/dist/host/projects.d.ts +0 -123
- package/dist/host/projects.js +0 -196
- package/dist/host/repo-guard.d.ts +0 -43
- package/dist/host/repo-guard.js +0 -347
- package/dist/host/secrets.d.ts +0 -14
- package/dist/host/secrets.js +0 -133
- package/dist/host/stops.d.ts +0 -67
- package/dist/host/stops.js +0 -126
- package/dist/shared/apps.js +0 -114
- package/dist/shared/download.d.ts +0 -63
- package/dist/shared/download.js +0 -238
- package/dist/shared/pty-client.d.ts +0 -108
- package/dist/shared/pty-client.js +0 -406
- package/dist/shared/rundir.d.ts +0 -41
- package/dist/shared/rundir.js +0 -96
- /package/dist/{guest/daemon.d.ts → cli/tui/list/list-types.js} +0 -0
- /package/dist/{guest/db.d.ts → cli/tui/screen.js} +0 -0
- /package/dist/core/{detect-databases.d.ts → detect/databases.d.ts} +0 -0
- /package/dist/{guest/toolchains → core/detect}/versions.d.ts +0 -0
- /package/dist/guest/{setup/agents.d.ts → agents/agent-installer.d.ts} +0 -0
- /package/dist/guest/{audit-parse.d.ts → audit/parse.d.ts} +0 -0
- /package/dist/guest/{guide.d.ts → boot/guide.d.ts} +0 -0
- /package/dist/guest/daemon/{shutdown.d.ts → idle-shutdown.d.ts} +0 -0
- /package/dist/guest/daemon/{session.d.ts → sessions.d.ts} +0 -0
- /package/dist/guest/{main.d.ts → entries/daemon.d.ts} +0 -0
- /package/dist/guest/{netproxy.d.ts → entries/db.d.ts} +0 -0
- /package/dist/{selftest/suite.js → guest/entries/gitguard.d.ts} +0 -0
- /package/dist/guest/{gitguard.d.ts → git/decision.d.ts} +0 -0
- /package/dist/guest/{ports.d.ts → runtime/ports.d.ts} +0 -0
- /package/dist/guest/{project-context.d.ts → runtime/project-context.d.ts} +0 -0
- /package/dist/guest/{cmdline.d.ts → sessions/cmdline.d.ts} +0 -0
- /package/dist/guest/{ptyhost.d.ts → sessions/pty-host.d.ts} +0 -0
- /package/dist/guest/{view.d.ts → sessions/viewer.d.ts} +0 -0
- /package/dist/guest/setup/{policy.d.ts → managed-policy.d.ts} +0 -0
- /package/dist/host/{window.d.ts → sandbox/window.d.ts} +0 -0
- /package/dist/host/{wsb.d.ts → sandbox/wsb-cli.d.ts} +0 -0
- /package/dist/host/{cleanup.d.ts → storage/cleanup.d.ts} +0 -0
- /package/dist/selftest/{harness.d.ts → support/harness.d.ts} +0 -0
- /package/dist/selftest/{suite.d.ts → support/suite.d.ts} +0 -0
- /package/dist/shared/{safe-remove.d.ts → io/safe-remove.d.ts} +0 -0
- /package/dist/shared/{netrules.d.ts → network/firewall-rules.d.ts} +0 -0
- /package/dist/shared/{netpolicy.d.ts → network/policy.d.ts} +0 -0
- /package/dist/shared/{paths.d.ts → paths/claude-paths.d.ts} +0 -0
- /package/dist/shared/{projects.d.ts → paths/projects.d.ts} +0 -0
- /package/dist/shared/{console-input.d.ts → pty/console-input.d.ts} +0 -0
|
@@ -4,9 +4,9 @@ import path from 'node:path';
|
|
|
4
4
|
import _ from 'lodash';
|
|
5
5
|
import { humanBytes, sizeOf } from '../../../core/disk.js';
|
|
6
6
|
import { askTyped, askYesNo } from '../../../core/prompt.js';
|
|
7
|
-
import { assertNoLinks, fail, isInsideOrEqual, isLink } from '../../../core/util.js';
|
|
8
|
-
import { isSandboxRunning } from '../../../host/
|
|
9
|
-
import { table } from '
|
|
7
|
+
import { assertNoLinks, fail, isInsideOrEqual, isLink } from '../../../core/util/index.js';
|
|
8
|
+
import { isSandboxRunning } from '../../../host/sandbox/index.js';
|
|
9
|
+
import { table } from '../../output/index.js';
|
|
10
10
|
import { removeTree } from './remove.js';
|
|
11
11
|
const DATA_AREAS = ['tools', 'databases', 'state', 'logs'];
|
|
12
12
|
const SEGMENT = /^[A-Za-z0-9][A-Za-z0-9._ +@-]*$/;
|
|
@@ -16,7 +16,7 @@ const ALL_WARNING = 'removes EVERYTHING the sandbox keeps: toolchains, databases
|
|
|
16
16
|
* Turns `sandbox data clean` arguments into folders. Pure (no disk access); throws a UserError for anything that is
|
|
17
17
|
* not a plain relative target inside the data folder: absolute paths, drive letters, `..`, wildcards, unknown areas.
|
|
18
18
|
*/
|
|
19
|
-
export
|
|
19
|
+
export function resolveCleanTargets(inputs, dataPath, storageRoot) {
|
|
20
20
|
const usage = 'Targets: all | tools | tools/<name> | tools/agents/<name> | databases | databases/<name> | state | state/<agent> | logs | launches | views. See them with: sandbox data';
|
|
21
21
|
if (!inputs.length)
|
|
22
22
|
fail('Say what to remove.', usage);
|
|
@@ -42,7 +42,12 @@ export const resolveCleanTargets = (inputs, dataPath, storageRoot) => {
|
|
|
42
42
|
if (area === 'views') {
|
|
43
43
|
if (rest.length)
|
|
44
44
|
fail('Remove all views ("views"), not single ones.', usage);
|
|
45
|
-
return {
|
|
45
|
+
return {
|
|
46
|
+
target,
|
|
47
|
+
path: path.join(storageRoot, 'views'),
|
|
48
|
+
root: storageRoot,
|
|
49
|
+
warning: 'Views are the copies of your projects without their git-ignored files (workspaceFilter). Your projects are not touched; what the sandbox built or installed in them (node_modules, build output) goes, and the next start copies the projects again.',
|
|
50
|
+
};
|
|
46
51
|
}
|
|
47
52
|
if (area === 'accounts' || area === 'sync')
|
|
48
53
|
fail('"' + area + '" is kept on this PC on purpose and is not removed here.', area === 'accounts' ? 'Remove a saved login with: sandbox account remove <name>' : usage);
|
|
@@ -52,7 +57,12 @@ export const resolveCleanTargets = (inputs, dataPath, storageRoot) => {
|
|
|
52
57
|
fail('Remove all logs ("logs"), not single files.', usage);
|
|
53
58
|
if (rest.length > (area === 'tools' && rest[0]?.toLowerCase() === 'agents' ? 2 : 1))
|
|
54
59
|
fail('Refusing "' + raw + '": too deep.', usage);
|
|
55
|
-
return {
|
|
60
|
+
return {
|
|
61
|
+
target,
|
|
62
|
+
path: path.join(dataPath, area, ...rest),
|
|
63
|
+
root: dataPath,
|
|
64
|
+
...(area === 'state' ? { warning: LOGIN_WARNING } : {}),
|
|
65
|
+
};
|
|
56
66
|
});
|
|
57
67
|
// "all" covers everything; otherwise drop targets inside another target (tools + tools/go = tools).
|
|
58
68
|
const all = resolved.find((t) => t.target === 'all');
|
|
@@ -60,12 +70,13 @@ export const resolveCleanTargets = (inputs, dataPath, storageRoot) => {
|
|
|
60
70
|
return [all, { target: 'launches', path: path.join(storageRoot, 'launches'), root: storageRoot }];
|
|
61
71
|
const unique = _.uniqBy(resolved, (t) => t.path.toLowerCase());
|
|
62
72
|
return unique.filter((t) => !unique.some((o) => o !== t && isInsideOrEqual(o.path, t.path)));
|
|
63
|
-
}
|
|
64
|
-
export
|
|
73
|
+
}
|
|
74
|
+
export async function dataClean(ctx) {
|
|
65
75
|
const targets = resolveCleanTargets(ctx.options.positionals.slice(1), ctx.dataPath, ctx.storageRoot);
|
|
66
76
|
if (isSandboxRunning())
|
|
67
77
|
fail('A Windows Sandbox is running, and it uses these folders.', 'Close it first (sandbox stop), then run this again.');
|
|
68
|
-
// Every folder from the root down to the target's parent must be real; a link in place of the target is removed
|
|
78
|
+
// Every folder from the root down to the target's parent must be real; a link in place of the target is removed
|
|
79
|
+
// itself.
|
|
69
80
|
for (const t of targets)
|
|
70
81
|
assertNoLinks(t.root, path.dirname(t.path));
|
|
71
82
|
const present = targets.filter((t) => fs.existsSync(t.path) || isLink(t.path));
|
|
@@ -99,8 +110,13 @@ export const dataClean = async (ctx) => {
|
|
|
99
110
|
}
|
|
100
111
|
}
|
|
101
112
|
const freed = total - _.sumBy(sized, (t) => sizeOf(t.path));
|
|
102
|
-
console.log('Freed ' +
|
|
113
|
+
console.log('Freed ' +
|
|
114
|
+
humanBytes(freed) +
|
|
115
|
+
'. ' +
|
|
116
|
+
(sized.some((t) => t.root === ctx.dataPath || t.target === 'all')
|
|
117
|
+
? 'The next sandbox reinstalls what it needs.'
|
|
118
|
+
: ''));
|
|
103
119
|
if (failed.length)
|
|
104
120
|
fail('Could not remove everything: ' + failed.join('; '), 'Close programs using those folders and run the same command again.');
|
|
105
121
|
return 0;
|
|
106
|
-
}
|
|
122
|
+
}
|
|
@@ -6,6 +6,9 @@ export interface DataEntry {
|
|
|
6
6
|
bytes: number;
|
|
7
7
|
}
|
|
8
8
|
/** Every row of `sandbox data`: the sandbox's data folder by area, then what this PC keeps for it. */
|
|
9
|
-
export declare
|
|
10
|
-
/**
|
|
11
|
-
|
|
9
|
+
export declare function collectDataEntries(dataPath: string, storageRoot: string): DataEntry[];
|
|
10
|
+
/**
|
|
11
|
+
* The `sandbox data clean` target for a listed row, or null when that row is not removable (kept on this PC on
|
|
12
|
+
* purpose).
|
|
13
|
+
*/
|
|
14
|
+
export declare function cleanTargetOf(entry: DataEntry): string | null;
|
|
@@ -3,26 +3,39 @@ import fs from 'node:fs';
|
|
|
3
3
|
import path from 'node:path';
|
|
4
4
|
import _ from 'lodash';
|
|
5
5
|
import { sizeOf } from '../../../core/disk.js';
|
|
6
|
-
import { dirExists, isLink } from '../../../core/util.js';
|
|
6
|
+
import { dirExists, isLink } from '../../../core/util/index.js';
|
|
7
7
|
const AREA_ORDER = ['tools', 'databases', 'state', 'logs', 'data', 'host'];
|
|
8
8
|
/** Folders of the data folder that get one row per child; anything else at the top level is listed as itself. */
|
|
9
9
|
const PER_CHILD = ['tools', 'databases', 'state'];
|
|
10
10
|
/** Real (non-link) children of a real folder; a link in place of the folder yields nothing. */
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
function entriesOf(dir) {
|
|
12
|
+
return dirExists(dir) && !isLink(dir)
|
|
13
|
+
? fs.readdirSync(dir, { withFileTypes: true }).filter((d) => !d.isSymbolicLink())
|
|
14
|
+
: [];
|
|
15
|
+
}
|
|
16
|
+
function toolRows(toolsDir) {
|
|
13
17
|
const entries = entriesOf(toolsDir);
|
|
14
18
|
const folders = entries.filter((d) => d.isDirectory());
|
|
15
19
|
const files = entries.filter((d) => !d.isDirectory());
|
|
16
20
|
const row = (name, p) => ({ area: 'tools', name, path: p, bytes: sizeOf(p) });
|
|
17
21
|
return [
|
|
18
|
-
...folders.flatMap((d) =>
|
|
22
|
+
...folders.flatMap((d) => d.name.toLowerCase() === 'agents'
|
|
19
23
|
? entriesOf(path.join(toolsDir, d.name)).map((a) => row('agents/' + a.name, path.join(toolsDir, d.name, a.name)))
|
|
20
|
-
: [row(d.name, path.join(toolsDir, d.name))])
|
|
21
|
-
...(files.length
|
|
24
|
+
: [row(d.name, path.join(toolsDir, d.name))]),
|
|
25
|
+
...(files.length
|
|
26
|
+
? [
|
|
27
|
+
{
|
|
28
|
+
area: 'tools',
|
|
29
|
+
name: '(files in tools)',
|
|
30
|
+
path: toolsDir,
|
|
31
|
+
bytes: _.sumBy(files, (f) => sizeOf(path.join(toolsDir, f.name))),
|
|
32
|
+
},
|
|
33
|
+
]
|
|
34
|
+
: []),
|
|
22
35
|
];
|
|
23
|
-
}
|
|
36
|
+
}
|
|
24
37
|
/** Every row of `sandbox data`: the sandbox's data folder by area, then what this PC keeps for it. */
|
|
25
|
-
export
|
|
38
|
+
export function collectDataEntries(dataPath, storageRoot) {
|
|
26
39
|
const inData = entriesOf(dataPath);
|
|
27
40
|
const rows = inData.flatMap((d) => {
|
|
28
41
|
const p = path.join(dataPath, d.name);
|
|
@@ -30,18 +43,36 @@ export const collectDataEntries = (dataPath, storageRoot) => {
|
|
|
30
43
|
if (area === 'tools')
|
|
31
44
|
return toolRows(p);
|
|
32
45
|
if (PER_CHILD.includes(area))
|
|
33
|
-
return entriesOf(p).map((c) => ({
|
|
46
|
+
return entriesOf(p).map((c) => ({
|
|
47
|
+
area,
|
|
48
|
+
name: area + '/' + c.name,
|
|
49
|
+
path: path.join(p, c.name),
|
|
50
|
+
bytes: sizeOf(path.join(p, c.name)),
|
|
51
|
+
}));
|
|
34
52
|
return [{ area: area === 'logs' ? 'logs' : 'data', name: d.name, path: p, bytes: sizeOf(p) }];
|
|
35
53
|
});
|
|
36
54
|
const otherData = entriesOf(path.join(storageRoot, 'data')).filter((d) => d.isDirectory() && path.join(storageRoot, 'data', d.name).toLowerCase() !== path.resolve(dataPath).toLowerCase());
|
|
37
55
|
const host = [
|
|
38
|
-
...['launches', 'views', 'accounts', 'sync', 'logs', 'run', 'host'].map((name) => ({
|
|
39
|
-
|
|
56
|
+
...['launches', 'views', 'accounts', 'sync', 'logs', 'run', 'host'].map((name) => ({
|
|
57
|
+
area: 'host',
|
|
58
|
+
name,
|
|
59
|
+
path: path.join(storageRoot, name),
|
|
60
|
+
bytes: sizeOf(path.join(storageRoot, name)),
|
|
61
|
+
})),
|
|
62
|
+
...otherData.map((d) => ({
|
|
63
|
+
area: 'host',
|
|
64
|
+
name: 'other data folder: ' + d.name,
|
|
65
|
+
path: path.join(storageRoot, 'data', d.name),
|
|
66
|
+
bytes: sizeOf(path.join(storageRoot, 'data', d.name)),
|
|
67
|
+
})),
|
|
40
68
|
].filter((r) => fs.existsSync(r.path));
|
|
41
69
|
return _.sortBy([...rows, ...host], (r) => AREA_ORDER.indexOf(r.area), (r) => -r.bytes, (r) => r.name.toLowerCase());
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* The `sandbox data clean` target for a listed row, or null when that row is not removable (kept on this PC on
|
|
73
|
+
* purpose).
|
|
74
|
+
*/
|
|
75
|
+
export function cleanTargetOf(entry) {
|
|
45
76
|
if (entry.area === 'tools')
|
|
46
77
|
return entry.name.startsWith('(') ? null : 'tools/' + entry.name;
|
|
47
78
|
if (entry.area === 'databases' || entry.area === 'state')
|
|
@@ -51,4 +82,4 @@ export const cleanTargetOf = (entry) => {
|
|
|
51
82
|
if (entry.area === 'host' && (entry.name === 'launches' || entry.name === 'views'))
|
|
52
83
|
return entry.name;
|
|
53
84
|
return null;
|
|
54
|
-
}
|
|
85
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { type Context } from '../context.js';
|
|
2
|
-
export declare
|
|
2
|
+
export declare function dataInfo(ctx: Context): Promise<number>;
|
|
3
3
|
/** `sandbox data [info|clean] [targets...]`. */
|
|
4
|
-
export declare
|
|
4
|
+
export declare function data(ctx: Context): number | Promise<number>;
|
|
@@ -3,20 +3,35 @@
|
|
|
3
3
|
// links, and targets resolve strictly inside the data folder.
|
|
4
4
|
import _ from 'lodash';
|
|
5
5
|
import { diskUsage, humanBytes } from '../../../core/disk.js';
|
|
6
|
-
import { fail } from '../../../core/util.js';
|
|
7
|
-
import { printJson, table } from '
|
|
8
|
-
import { working } from '../../progress.js';
|
|
6
|
+
import { fail } from '../../../core/util/index.js';
|
|
7
|
+
import { printJson, table, working } from '../../output/index.js';
|
|
9
8
|
import { dataClean } from './clean.js';
|
|
10
9
|
import { collectDataEntries } from './collect.js';
|
|
11
|
-
const AREA_LABEL = {
|
|
12
|
-
|
|
10
|
+
const AREA_LABEL = {
|
|
11
|
+
tools: 'Toolchains',
|
|
12
|
+
databases: 'Databases',
|
|
13
|
+
state: 'Agent state',
|
|
14
|
+
logs: 'Logs',
|
|
15
|
+
data: 'Other',
|
|
16
|
+
host: 'On this PC',
|
|
17
|
+
};
|
|
18
|
+
export async function dataInfo(ctx) {
|
|
13
19
|
const entries = await working('Measuring the saved data (big folders take a moment)', () => collectDataEntries(ctx.dataPath, ctx.storageRoot), !ctx.options.json);
|
|
14
20
|
const total = _.sumBy(entries, 'bytes');
|
|
15
21
|
const disks = diskUsage(ctx.storageRoot);
|
|
16
22
|
if (printJson(ctx, { dataPath: ctx.dataPath, storageRoot: ctx.storageRoot, totalBytes: total, entries, disks }))
|
|
17
23
|
return 0;
|
|
18
24
|
console.log('Disks\n');
|
|
19
|
-
table([
|
|
25
|
+
table([
|
|
26
|
+
['DRIVE', 'USED', 'FREE', 'SIZE', ''],
|
|
27
|
+
...disks.map((d) => [
|
|
28
|
+
d.drive,
|
|
29
|
+
humanBytes(d.usedBytes) + ' (' + Math.round((d.usedBytes / d.totalBytes) * 100) + '%)',
|
|
30
|
+
humanBytes(d.freeBytes),
|
|
31
|
+
humanBytes(d.totalBytes),
|
|
32
|
+
d.holdsStorage ? '<- sandbox storage (' + humanBytes(total) + ' of it)' : '',
|
|
33
|
+
]),
|
|
34
|
+
]);
|
|
20
35
|
console.log('');
|
|
21
36
|
console.log('Persistent data for the sandbox: ' + ctx.dataPath + ' (C:\\AgentData inside)\n');
|
|
22
37
|
if (!entries.length) {
|
|
@@ -30,16 +45,19 @@ export const dataInfo = async (ctx) => {
|
|
|
30
45
|
table([...rows, ['', '', ''], ['Total', humanBytes(total), '']]);
|
|
31
46
|
console.log('\nFree space with: sandbox data clean <target...> (e.g. tools/go, databases/postgres-18, logs, launches)');
|
|
32
47
|
return 0;
|
|
33
|
-
}
|
|
48
|
+
}
|
|
34
49
|
/** `sandbox data [info|clean] [targets...]`. */
|
|
35
|
-
export
|
|
50
|
+
export function data(ctx) {
|
|
36
51
|
const [action = 'info'] = ctx.options.positionals;
|
|
37
52
|
switch (action) {
|
|
38
53
|
case 'info':
|
|
39
54
|
case 'show':
|
|
40
|
-
case 'list':
|
|
55
|
+
case 'list':
|
|
56
|
+
return dataInfo(ctx);
|
|
41
57
|
case 'clean':
|
|
42
|
-
case 'remove':
|
|
43
|
-
|
|
58
|
+
case 'remove':
|
|
59
|
+
return dataClean(ctx);
|
|
60
|
+
default:
|
|
61
|
+
return fail('Unknown data action "' + action + '".', 'Use: sandbox data (what is stored) or sandbox data clean <target...>');
|
|
44
62
|
}
|
|
45
|
-
}
|
|
63
|
+
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/** Deletes p (strictly inside root): links inside are removed first and never followed; see shared/safe-remove.ts. */
|
|
2
|
-
export declare
|
|
2
|
+
export declare function removeTree(p: string, root: string): void;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
// Deleting inside the data folder. The sandbox can write there, so links are removed themselves and never followed.
|
|
2
2
|
import fs from 'node:fs';
|
|
3
3
|
import path from 'node:path';
|
|
4
|
-
import { dirExists, isLink, removeLink } from '../../../core/util.js';
|
|
5
|
-
import { removeRefusal, safeRemove } from '../../../shared/
|
|
4
|
+
import { dirExists, isLink, removeLink } from '../../../core/util/index.js';
|
|
5
|
+
import { removeRefusal, safeRemove } from '../../../shared/io/index.js';
|
|
6
6
|
/** Deletes p (strictly inside root): links inside are removed first and never followed; see shared/safe-remove.ts. */
|
|
7
|
-
export
|
|
7
|
+
export function removeTree(p, root) {
|
|
8
8
|
const unlinkInside = (dir) => {
|
|
9
9
|
for (const d of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
10
10
|
const child = path.join(dir, d.name);
|
|
@@ -27,4 +27,4 @@ export const removeTree = (p, root) => {
|
|
|
27
27
|
if (dirExists(p))
|
|
28
28
|
unlinkInside(p);
|
|
29
29
|
safeRemove(p, root);
|
|
30
|
-
}
|
|
30
|
+
}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
export { createContext, type Context } from './context.js';
|
|
2
|
-
export { launch } from './launch.js';
|
|
2
|
+
export { launch } from './launch/index.js';
|
|
3
3
|
export { setup } from './setup/index.js';
|
|
4
4
|
export { data } from './data/index.js';
|
|
5
5
|
export { repairCommand } from './repair/index.js';
|
|
6
|
-
export { attach, db, exec, hide, restart,
|
|
6
|
+
export { attach, db, exec, hide, show, restart, stop, sessions, status } from './sessions/index.js';
|
|
7
7
|
export { account } from './accounts.js';
|
|
8
|
-
export { projects } from './projects.js';
|
|
9
|
-
export { audit, claudeHost, clean, config, doctor, logs, sync, watcher } from './maintenance.js';
|
|
8
|
+
export { projects } from './projects/index.js';
|
|
9
|
+
export { audit, claudeHost, clean, config, doctor, logs, sync, watcher } from './maintenance/index.js';
|
|
10
10
|
export { agentCommandsCommand, syncAgentCommands } from './agent-commands.js';
|
|
11
|
+
export { HANDLERS, type Handler } from './registry.js';
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
export { createContext } from './context.js';
|
|
2
|
-
export { launch } from './launch.js';
|
|
2
|
+
export { launch } from './launch/index.js';
|
|
3
3
|
export { setup } from './setup/index.js';
|
|
4
4
|
export { data } from './data/index.js';
|
|
5
5
|
export { repairCommand } from './repair/index.js';
|
|
6
|
-
export { attach, db, exec, hide, restart,
|
|
6
|
+
export { attach, db, exec, hide, show, restart, stop, sessions, status } from './sessions/index.js';
|
|
7
7
|
export { account } from './accounts.js';
|
|
8
|
-
export { projects } from './projects.js';
|
|
9
|
-
export { audit, claudeHost, clean, config, doctor, logs, sync, watcher } from './maintenance.js';
|
|
8
|
+
export { projects } from './projects/index.js';
|
|
9
|
+
export { audit, claudeHost, clean, config, doctor, logs, sync, watcher } from './maintenance/index.js';
|
|
10
10
|
export { agentCommandsCommand, syncAgentCommands } from './agent-commands.js';
|
|
11
|
+
export { HANDLERS } from './registry.js';
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ResolvedRun } from '../../../core/types.js';
|
|
2
|
+
import { type Context } from '../context.js';
|
|
3
|
+
/**
|
|
4
|
+
* Asked once per parent folder: map it at every start (a project root), so the projects next to this one open in the
|
|
5
|
+
* running sandbox without a restart. The answer is saved to your config.
|
|
6
|
+
*/
|
|
7
|
+
export declare function maybeAddRoot(ctx: Context, run: ResolvedRun): Promise<void>;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { select } from '@inquirer/prompts';
|
|
3
|
+
import { isWithin, planMirrorWorkspace } from '../../../shared/paths/index.js';
|
|
4
|
+
import { assertSafeMapping, assertSafeWorkspace } from '../../../core/safe-paths.js';
|
|
5
|
+
import { isRootPath } from '../../../core/util/index.js';
|
|
6
|
+
import { autoGuestWorkspace, placeInRoot } from '../../../core/run/index.js';
|
|
7
|
+
import { addToList, setSetting } from '../user-config.js';
|
|
8
|
+
/**
|
|
9
|
+
* Asked once per parent folder: map it at every start (a project root), so the projects next to this one open in the
|
|
10
|
+
* running sandbox without a restart. The answer is saved to your config.
|
|
11
|
+
*/
|
|
12
|
+
export async function maybeAddRoot(ctx, run) {
|
|
13
|
+
const { projects } = run.config;
|
|
14
|
+
const parent = path.dirname(run.workspaceHost);
|
|
15
|
+
if (!projects.askToAddRoot || ctx.options.yes || !process.stdin.isTTY || !process.stdout.isTTY)
|
|
16
|
+
return;
|
|
17
|
+
if (projects.roots.some((r) => isWithin(r, run.workspaceHost)) ||
|
|
18
|
+
projects.declinedRoots.some((d) => isWithin(d, parent) && isWithin(parent, d)))
|
|
19
|
+
return;
|
|
20
|
+
if (isRootPath(parent))
|
|
21
|
+
return;
|
|
22
|
+
try {
|
|
23
|
+
assertSafeWorkspace(parent, ctx.packageRoot, run.storageRoot);
|
|
24
|
+
assertSafeMapping(parent, ctx.packageRoot, run.storageRoot);
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
const answer = await select({
|
|
30
|
+
message: 'Map ' +
|
|
31
|
+
parent +
|
|
32
|
+
' at every start, so other projects there (also new ones) open in the running sandbox without a restart? Agents in the sandbox can then see every project in it.',
|
|
33
|
+
choices: [
|
|
34
|
+
{ name: 'Yes, from now on', value: 'yes' },
|
|
35
|
+
{ name: 'No (and do not ask again for this folder)', value: 'no' },
|
|
36
|
+
{ name: 'Never ask this again', value: 'never' },
|
|
37
|
+
],
|
|
38
|
+
});
|
|
39
|
+
if (answer === 'yes') {
|
|
40
|
+
addToList(ctx, ['projects', 'roots'], parent);
|
|
41
|
+
run.config.projects.roots.push(parent);
|
|
42
|
+
console.log('Added ' + parent + ' to projects.roots (sandbox projects roots remove ' + parent + ' undoes it).');
|
|
43
|
+
moveUnderRoot(run);
|
|
44
|
+
}
|
|
45
|
+
if (answer === 'no')
|
|
46
|
+
addToList(ctx, ['projects', 'declinedRoots'], parent);
|
|
47
|
+
if (answer === 'never')
|
|
48
|
+
setSetting(ctx, ['projects', 'askToAddRoot'], false);
|
|
49
|
+
}
|
|
50
|
+
/** From now on this project is under the root's folder inside the sandbox, from this start on (one move, not two). */
|
|
51
|
+
function moveUnderRoot(run) {
|
|
52
|
+
const before = run.config.guestWorkspace;
|
|
53
|
+
const auto = autoGuestWorkspace(run.workspaceHost);
|
|
54
|
+
const derived = [auto, planMirrorWorkspace(run.workspaceHost, auto).guest];
|
|
55
|
+
// In place: the caller holds run.config already.
|
|
56
|
+
if (derived.some((g) => g.toLowerCase() === before.toLowerCase()))
|
|
57
|
+
run.config.guestWorkspace = placeInRoot(run.config, run.workspaceHost, Boolean(run.mirror), run.notes).guestWorkspace;
|
|
58
|
+
if (run.config.guestWorkspace !== before)
|
|
59
|
+
console.log('Inside the sandbox this project is now at ' +
|
|
60
|
+
run.config.guestWorkspace +
|
|
61
|
+
' (was ' +
|
|
62
|
+
before +
|
|
63
|
+
'): git worktrees made at the old place need `git worktree repair` once.');
|
|
64
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { SandboxStatus } from '../../../core/types.js';
|
|
2
|
+
import { type Progressing } from '../../output/index.js';
|
|
3
|
+
/** "[3/8] Developer tools: downloading rust 40%, setting up go (2 of 6 done)". */
|
|
4
|
+
export declare function bootLine(status: SandboxStatus | null, fallback?: string): Progressing;
|
|
5
|
+
/** Nothing new for a while: say so, and where the details are. */
|
|
6
|
+
export declare function stillWorking(what: string, ms: number): string;
|
|
7
|
+
export declare function readyIn(ms: number): string;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
// One line of progress from the guest's status while a sandbox starts. Pure: the status is guest-written, so every
|
|
2
|
+
// bit of it is made safe and short here.
|
|
3
|
+
import { plainText } from '../../../core/util/index.js';
|
|
4
|
+
import { elapsed } from '../../output/index.js';
|
|
5
|
+
function clean(text, max) {
|
|
6
|
+
return plainText(text).replace(/\s+/g, ' ').trim().slice(0, max);
|
|
7
|
+
}
|
|
8
|
+
/** "[3/8] Developer tools: downloading rust 40%, setting up go (2 of 6 done)". */
|
|
9
|
+
export function bootLine(status, fallback = 'Starting Windows Sandbox') {
|
|
10
|
+
if (!status)
|
|
11
|
+
return { line: fallback, key: fallback, what: fallback.toLowerCase() };
|
|
12
|
+
const p = status.progress;
|
|
13
|
+
if (!p) {
|
|
14
|
+
const line = clean(status.message, 200) || fallback;
|
|
15
|
+
return { line, key: line, what: line };
|
|
16
|
+
}
|
|
17
|
+
const title = clean(p.title, 60);
|
|
18
|
+
const items = p.active.slice(0, 8).map((a) => ({ name: clean(a.name, 40), percent: a.percent }));
|
|
19
|
+
const loading = items.filter((a) => a.percent !== undefined && a.percent < 100);
|
|
20
|
+
const others = items.filter((a) => !loading.includes(a));
|
|
21
|
+
const parts = [
|
|
22
|
+
...(loading.length ? ['downloading ' + loading.map((a) => a.name + ' ' + a.percent + '%').join(', ')] : []),
|
|
23
|
+
...(others.length ? ['setting up ' + others.map((a) => a.name).join(', ')] : []),
|
|
24
|
+
];
|
|
25
|
+
const count = p.total > 0 && items.length ? ' (' + Math.min(p.done, p.total) + ' of ' + p.total + ' done)' : '';
|
|
26
|
+
const head = '[' + p.step + '/' + p.steps + '] ' + title;
|
|
27
|
+
return {
|
|
28
|
+
line: (head + (parts.length ? ': ' + parts.join('; ') : '') + count).slice(0, 240),
|
|
29
|
+
key: head +
|
|
30
|
+
'|' +
|
|
31
|
+
items
|
|
32
|
+
.map((a) => a.name)
|
|
33
|
+
.sort()
|
|
34
|
+
.join(','),
|
|
35
|
+
what: items.length ? items.map((a) => a.name).join(', ') : title,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
/** Nothing new for a while: say so, and where the details are. */
|
|
39
|
+
export function stillWorking(what, ms) {
|
|
40
|
+
return ('Still working on ' +
|
|
41
|
+
clean(what, 80) +
|
|
42
|
+
' (' +
|
|
43
|
+
Math.max(1, Math.round(ms / 60000)) +
|
|
44
|
+
' min). Full log: sandbox logs -f');
|
|
45
|
+
}
|
|
46
|
+
export function readyIn(ms) {
|
|
47
|
+
return 'Ready in ' + elapsed(ms) + '.';
|
|
48
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { GenerateOptions, ResolvedRun } from '../../../core/types.js';
|
|
2
|
+
import type { Context } from '../context.js';
|
|
3
|
+
/**
|
|
4
|
+
* The other projects mapped at boot (a restart's, --session's, projects.all's, and the known projects in your roots),
|
|
5
|
+
* with their effective configs: only approved .sandbox-config.json files and the looser values you allowed for each
|
|
6
|
+
* (nothing is asked here). The sandbox boots with what they want too (host/launch/generate.ts).
|
|
7
|
+
*/
|
|
8
|
+
export declare function bootWantsFor(ctx: Context, run: ResolvedRun, extraProjects: string[] | undefined): Promise<{
|
|
9
|
+
wants: NonNullable<GenerateOptions['bootWants']>;
|
|
10
|
+
notes: string[];
|
|
11
|
+
}>;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
// What the other projects mapped at boot want from the sandbox (a .wsb device, memory, their mappings).
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import _ from 'lodash';
|
|
4
|
+
import { planBootProjects } from '../../../host/launch/index.js';
|
|
5
|
+
import { KnownProjects } from '../../../host/projects/index.js';
|
|
6
|
+
import { isWithin } from '../../../shared/paths/index.js';
|
|
7
|
+
import { BOOT_SETTINGS, LOCAL_CONFIG_NAME } from '../../../core/local-config/index.js';
|
|
8
|
+
import { resolveRun } from '../../../core/run/index.js';
|
|
9
|
+
import { dirExists, errMsg, fileExists } from '../../../core/util/index.js';
|
|
10
|
+
/**
|
|
11
|
+
* The other projects mapped at boot (a restart's, --session's, projects.all's, and the known projects in your roots),
|
|
12
|
+
* with their effective configs: only approved .sandbox-config.json files and the looser values you allowed for each
|
|
13
|
+
* (nothing is asked here). The sandbox boots with what they want too (host/launch/generate.ts).
|
|
14
|
+
*/
|
|
15
|
+
export async function bootWantsFor(ctx, run, extraProjects) {
|
|
16
|
+
const { roots } = run.config.projects;
|
|
17
|
+
const planned = planBootProjects({ run, packageRoot: ctx.packageRoot, extraProjects }).projects.map((p) => p.host);
|
|
18
|
+
const inRoots = new KnownProjects(run.storageRoot)
|
|
19
|
+
.list()
|
|
20
|
+
.map((k) => k.host)
|
|
21
|
+
.filter((h) => roots.some((r) => isWithin(path.resolve(r), h)));
|
|
22
|
+
const folders = _.uniqBy([...(extraProjects ?? []).map((p) => path.resolve(p)), ...planned, ...inRoots], (f) => f.toLowerCase())
|
|
23
|
+
.filter((f) => !isWithin(run.workspaceHost, f) && dirExists(f))
|
|
24
|
+
.slice(0, 200);
|
|
25
|
+
const projects = [];
|
|
26
|
+
const notes = [];
|
|
27
|
+
for (const folder of folders) {
|
|
28
|
+
try {
|
|
29
|
+
const other = await resolveRun({
|
|
30
|
+
packageRoot: ctx.packageRoot,
|
|
31
|
+
loaded: ctx.loaded,
|
|
32
|
+
cwd: folder,
|
|
33
|
+
workspace: folder,
|
|
34
|
+
noAgent: true,
|
|
35
|
+
noLocalConfig: false,
|
|
36
|
+
trustConfig: false,
|
|
37
|
+
scripts: [],
|
|
38
|
+
});
|
|
39
|
+
projects.push({ name: path.basename(folder), config: other.config });
|
|
40
|
+
}
|
|
41
|
+
catch (e) {
|
|
42
|
+
if (fileExists(path.join(folder, LOCAL_CONFIG_NAME)))
|
|
43
|
+
notes.push('What ' + path.basename(folder) + ' asks for at boot is not included: ' + errMsg(e).split('\n')[0]);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
const keepOff = BOOT_SETTINGS.filter((s) => _.get(ctx.loaded.config, s) === true && _.get(run.config, s) === false);
|
|
47
|
+
return { wants: { projects, keepOff }, notes };
|
|
48
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** The wanted tools that are not downloaded yet (`has` says whether a folder in <data>\tools exists), with their rough size. */
|
|
2
|
+
export declare function pendingDownloads(wanted: readonly string[], has: (dir: string) => boolean): {
|
|
3
|
+
names: string[];
|
|
4
|
+
mb: number;
|
|
5
|
+
};
|
|
6
|
+
/** The heads-up before the wait, or null when everything is already downloaded. first: nothing was ever installed. */
|
|
7
|
+
export declare function firstStartNotice(first: boolean, pending: {
|
|
8
|
+
names: string[];
|
|
9
|
+
mb: number;
|
|
10
|
+
}): string | null;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
// The first-start heads-up: what a start downloads once (the tools this project needs) and roughly how much.
|
|
2
|
+
/** What a first start downloads, by setting name: its folder in <data>\tools, rough size and a readable name. */
|
|
3
|
+
const DOWNLOADS = {
|
|
4
|
+
node: { dir: 'nvm', mb: 30 },
|
|
5
|
+
python: { dir: 'python', mb: 30 },
|
|
6
|
+
rust: { dir: 'rust', mb: 300 },
|
|
7
|
+
msvc: { dir: 'msvc', mb: 1500, label: 'MSVC' },
|
|
8
|
+
cpp: { dir: 'mingw', mb: 270, label: 'C/C++' },
|
|
9
|
+
dotnet: { dir: 'dotnet', mb: 250, label: '.NET' },
|
|
10
|
+
go: { dir: 'go', mb: 80 },
|
|
11
|
+
java: { dir: 'java', mb: 200 },
|
|
12
|
+
ruby: { dir: 'ruby', mb: 100 },
|
|
13
|
+
php: { dir: 'php', mb: 30 },
|
|
14
|
+
deno: { dir: 'deno', mb: 40 },
|
|
15
|
+
pwsh: { dir: 'pwsh', mb: 100, label: 'PowerShell 7' },
|
|
16
|
+
vscode: { dir: 'vscode', mb: 150, label: 'VS Code' },
|
|
17
|
+
postgres: { dir: 'postgres', mb: 330, label: 'PostgreSQL' },
|
|
18
|
+
mysql: { dir: 'mariadb', mb: 90, label: 'MariaDB' },
|
|
19
|
+
mongodb: { dir: 'mongodb', mb: 450, label: 'MongoDB' },
|
|
20
|
+
redis: { dir: 'redis', mb: 10 },
|
|
21
|
+
dynamodb: { dir: 'dynamodb-local', mb: 80, label: 'DynamoDB Local' },
|
|
22
|
+
};
|
|
23
|
+
/** The wanted tools that are not downloaded yet (`has` says whether a folder in <data>\tools exists), with their rough size. */
|
|
24
|
+
export function pendingDownloads(wanted, has) {
|
|
25
|
+
const missing = [...new Set(wanted)].filter((w) => Object.hasOwn(DOWNLOADS, w) && !has(DOWNLOADS[w].dir));
|
|
26
|
+
return {
|
|
27
|
+
names: missing.map((w) => DOWNLOADS[w].label ?? w),
|
|
28
|
+
mb: missing.reduce((sum, w) => sum + DOWNLOADS[w].mb, 0),
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
function roughSize(mb) {
|
|
32
|
+
return mb >= 950 ? Math.round(mb / 100) / 10 + ' GB' : Math.max(10, Math.round(mb / 10) * 10) + ' MB';
|
|
33
|
+
}
|
|
34
|
+
/** The heads-up before the wait, or null when everything is already downloaded. first: nothing was ever installed. */
|
|
35
|
+
export function firstStartNotice(first, pending) {
|
|
36
|
+
if (!first && !pending.names.length)
|
|
37
|
+
return null;
|
|
38
|
+
const what = pending.names.length
|
|
39
|
+
? ' (about ' +
|
|
40
|
+
roughSize(pending.mb) +
|
|
41
|
+
': ' +
|
|
42
|
+
pending.names.slice(0, 8).join(', ') +
|
|
43
|
+
(pending.names.length > 8 ? ', ...' : '') +
|
|
44
|
+
')'
|
|
45
|
+
: '';
|
|
46
|
+
return first
|
|
47
|
+
? 'First start: the sandbox downloads the tools this project needs once' +
|
|
48
|
+
what +
|
|
49
|
+
'. This can take 5-20 minutes depending on your connection; later starts take about a minute.'
|
|
50
|
+
: 'New tools for this project: the sandbox downloads them once' +
|
|
51
|
+
what +
|
|
52
|
+
'. This can take a few minutes; later starts skip it.';
|
|
53
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export * from './launch.js';
|
|
2
|
+
export * from './running.js';
|
|
3
|
+
export * from './prepare.js';
|
|
4
|
+
export * from './add-root.js';
|
|
5
|
+
export { bootLine, readyIn, stillWorking } from './boot-progress.js';
|
|
6
|
+
export { firstStartNotice, pendingDownloads } from './first-start.js';
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export * from './launch.js';
|
|
2
|
+
export * from './running.js';
|
|
3
|
+
export * from './prepare.js';
|
|
4
|
+
export * from './add-root.js';
|
|
5
|
+
export { bootLine, readyIn, stillWorking } from './boot-progress.js';
|
|
6
|
+
export { firstStartNotice, pendingDownloads } from './first-start.js';
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type Context } from '../context.js';
|
|
2
|
+
/** A restart that adds a project: map these too, start no session at boot (restart.ts opens them), wait until ready. */
|
|
3
|
+
export interface LaunchExtras {
|
|
4
|
+
readonly extraProjects?: string[];
|
|
5
|
+
readonly autoSession?: boolean;
|
|
6
|
+
readonly waitUntilReady?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare function launch(ctx: Context, generateOnly?: boolean, extras?: LaunchExtras): Promise<number>;
|