windows-development-sandbox 1.4.0 → 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/.sandbox-config.example.json +2 -1
- package/config.example.json +4 -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 +328 -54
- 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/output/progress.d.ts +24 -0
- package/dist/cli/output/progress.js +124 -0
- 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} +11 -11
- package/dist/core/{local-config.js → local-config/overrides.js} +53 -54
- package/dist/core/{project-policy.d.ts → local-config/policy.d.ts} +7 -3
- package/dist/core/{project-policy.js → local-config/policy.js} +16 -6
- 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 +18 -12
- 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 +2 -1
- package/dist/core/schema/projects.js +16 -5
- package/dist/core/schema/sandbox.d.ts +12 -12
- 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 +36 -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} +100 -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 -80
- 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} +27 -12
- 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 +7 -2
- package/dist/host/launch/mappings.js +83 -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/projects/join.d.ts +38 -0
- package/dist/host/projects/join.js +119 -0
- 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 +4232 -1918
- package/dist/runtime/db.js +2145 -830
- package/dist/runtime/gitguard.js +29 -11
- package/dist/runtime/main.js +4760 -2155
- package/dist/runtime/netproxy.js +1654 -418
- package/dist/runtime/view.js +1515 -453
- 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 +91 -8
- 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 +73 -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 +2 -0
- package/dist/selftest/live-terminal.test.js +195 -0
- package/dist/selftest/local-config.test.d.ts +1 -1
- package/dist/selftest/local-config.test.js +88 -15
- package/dist/selftest/mirror.test.d.ts +1 -1
- package/dist/selftest/mirror.test.js +118 -19
- 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 +336 -72
- 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} +7 -4
- 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} +60 -19
- package/dist/shared/channel/schema.js +131 -0
- 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} +21 -0
- package/dist/shared/paths/guest-paths.js +146 -0
- package/dist/shared/paths/index.d.ts +3 -0
- package/dist/shared/paths/index.js +3 -0
- package/dist/shared/{projects.d.ts → paths/projects.d.ts} +27 -4
- package/dist/shared/paths/projects.js +136 -0
- package/dist/shared/pty/client.d.ts +21 -0
- package/dist/shared/pty/client.js +79 -0
- package/dist/shared/pty/console-input.d.ts +11 -0
- package/dist/shared/pty/console-input.js +81 -0
- 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/sandbox/ptyhost.cs +60 -3
- package/schemas/config.schema.json +48 -1
- package/schemas/sandbox-config.schema.json +37 -3
- package/dist/cli/commands/launch.d.ts +0 -29
- package/dist/cli/commands/launch.js +0 -366
- package/dist/cli/commands/maintenance.d.ts +0 -10
- package/dist/cli/commands/maintenance.js +0 -187
- package/dist/cli/commands/project.d.ts +0 -29
- package/dist/cli/commands/project.js +0 -63
- 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 -85
- package/dist/cli/commands/sessions.d.ts +0 -12
- package/dist/cli/commands/sessions.js +0 -257
- package/dist/cli/menu/settings/editors.js +0 -305
- package/dist/cli/progress.d.ts +0 -9
- package/dist/cli/progress.js +0 -49
- 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/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 -18
- package/dist/core/workspace.js +0 -145
- package/dist/guest/boot-env.d.ts +0 -4
- package/dist/guest/daemon.js +0 -57
- package/dist/guest/env.d.ts +0 -52
- package/dist/guest/env.js +0 -103
- 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 -162
- package/dist/host/generate.d.ts +0 -13
- package/dist/host/generate.js +0 -108
- package/dist/host/join.d.ts +0 -28
- package/dist/host/join.js +0 -76
- package/dist/host/launch/projects.d.ts +0 -15
- 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 -100
- package/dist/host/projects.js +0 -147
- 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 -60
- package/dist/shared/download.js +0 -215
- package/dist/shared/guest-paths.js +0 -61
- package/dist/shared/projects.js +0 -67
- package/dist/shared/pty-client.d.ts +0 -91
- package/dist/shared/pty-client.js +0 -349
- package/dist/shared/rundir.d.ts +0 -41
- package/dist/shared/rundir.js +0 -96
- package/dist/shared/schema.js +0 -92
- /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
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
// The last way in for a folder the running sandbox cannot show (not in a project root, no `wsb share`): restart it
|
|
2
|
+
// with that folder mapped as well. Only ever with your consent (a prompt, or --yes): it lists what will end, stops
|
|
3
|
+
// the sandbox cleanly (history and claude-mem sync back as on any close), starts it again from the same launch
|
|
4
|
+
// folder with the projects it had plus the new one, reopens the sessions it ended (continuing their conversations
|
|
5
|
+
// where the agent supports it) and then starts the new project's session.
|
|
6
|
+
import path from 'node:path';
|
|
7
|
+
import _ from 'lodash';
|
|
8
|
+
import { askYesNo } from '../../../core/prompt.js';
|
|
9
|
+
import { missingTip } from '../../../core/local-config/index.js';
|
|
10
|
+
import { fail, sleep } from '../../../core/util/index.js';
|
|
11
|
+
import { SandboxChannel } from '../../../host/channel/index.js';
|
|
12
|
+
import { isSandboxRunning } from '../../../host/sandbox/index.js';
|
|
13
|
+
import { ProjectRegistry } from '../../../host/projects/index.js';
|
|
14
|
+
import { hostDirFor, projectForGuestDir } from '../../../shared/paths/index.js';
|
|
15
|
+
import { RunDir } from '../../../shared/channel/index.js';
|
|
16
|
+
import { watcherRunning } from '../../../sync/index.js';
|
|
17
|
+
import { c, working } from '../../output/index.js';
|
|
18
|
+
import { markRestarted } from './here.js';
|
|
19
|
+
import { describeSessions } from './describe-sessions.js';
|
|
20
|
+
/** The command to run again with consent, for a non-interactive terminal. */
|
|
21
|
+
function againWithYes(ctx) {
|
|
22
|
+
return ('sandbox ' +
|
|
23
|
+
(ctx.options.noAgent ? 'start' : (ctx.options.harness ?? ctx.loaded.config.defaultHarness)) +
|
|
24
|
+
(ctx.options.terminal ? ' -t' : '') +
|
|
25
|
+
' --yes');
|
|
26
|
+
}
|
|
27
|
+
/** Where each running session is on this PC, so it can be reopened after the restart. */
|
|
28
|
+
function sessionsToReopen(registry, sessions) {
|
|
29
|
+
return sessions.flatMap((s) => {
|
|
30
|
+
const project = projectForGuestDir([...registry.projects, ...registry.roots.map((r) => ({ ...r }))], s.cwd);
|
|
31
|
+
return project ? [{ harness: s.harness, hostDir: hostDirFor(project, s.cwd) }] : [];
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
/** Shuts the sandbox down and waits until it (and the background sync's final pass) is gone. */
|
|
35
|
+
async function stopAndWait(ctx) {
|
|
36
|
+
const status = new RunDir(ctx.dataPath).readSandboxStatus();
|
|
37
|
+
await working('Stopping the sandbox (history syncs back)', async () => {
|
|
38
|
+
await new SandboxChannel(ctx.dataPath)
|
|
39
|
+
.exec(['C:\\Windows\\System32\\shutdown.exe', '/s', '/t', '0'], status?.guestWorkspace ?? 'C:\\', 30)
|
|
40
|
+
.catch(() => null);
|
|
41
|
+
for (let i = 0; i < 180 && isSandboxRunning(); i++)
|
|
42
|
+
await sleep(1000);
|
|
43
|
+
if (isSandboxRunning())
|
|
44
|
+
fail('The sandbox did not shut down within 3 minutes.', 'Close its window yourself, then run the command again.');
|
|
45
|
+
// The watcher syncs history back a few seconds after the window closes; the next start needs it gone.
|
|
46
|
+
for (let i = 0; i < 60 && watcherRunning(ctx.dataPath); i++)
|
|
47
|
+
await sleep(1000);
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
/** The same command for another folder, as a plain new session (nothing attached, no agent arguments). */
|
|
51
|
+
function freshContext(ctx, workspace, harness, more = {}) {
|
|
52
|
+
return {
|
|
53
|
+
...ctx,
|
|
54
|
+
options: {
|
|
55
|
+
...ctx.options,
|
|
56
|
+
workspace,
|
|
57
|
+
harness,
|
|
58
|
+
terminal: false,
|
|
59
|
+
newSession: true,
|
|
60
|
+
passthrough: [],
|
|
61
|
+
sessions: [],
|
|
62
|
+
...more,
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Says what a restart maps, keeps and ends. `hidden`: the folders the running sandbox cannot show; a project that only
|
|
68
|
+
* wants boot settings or folders is not among them (you already chose the restart, or gave --yes, when asked).
|
|
69
|
+
*/
|
|
70
|
+
function explain(needs, hidden, registry, sessions) {
|
|
71
|
+
for (const need of hidden)
|
|
72
|
+
console.log(c.yellow('Windows Sandbox cannot add ' + need.hostDir + ' while it runs: ' + need.reason + '.'));
|
|
73
|
+
console.log((hidden.length
|
|
74
|
+
? 'A restart maps ' + (hidden.length === 1 ? 'it' : 'them') + ' as well'
|
|
75
|
+
: 'Restarting with what ' + needs.map((n) => path.basename(n.hostDir)).join(', ') + ' wants') +
|
|
76
|
+
' (and keeps ' +
|
|
77
|
+
registry.projects.map((p) => p.host).join(', ') +
|
|
78
|
+
'). ' +
|
|
79
|
+
(sessions.length ? describeSessions(sessions) + ' will end' : 'No session is running') +
|
|
80
|
+
'; your files, tools, databases and logins are kept. It takes about a minute.');
|
|
81
|
+
for (const parent of _.uniq(hidden.map((n) => path.dirname(n.hostDir))))
|
|
82
|
+
console.log(c.dim('No restart next time for folders in ' + parent + ': sandbox projects roots add "' + parent + '"'));
|
|
83
|
+
for (const need of needs)
|
|
84
|
+
if (need.missing)
|
|
85
|
+
console.log(c.dim(missingTip(need.missing)));
|
|
86
|
+
}
|
|
87
|
+
/** --yes, or a yes at the prompt; without a terminal to ask in, it fails with the command to run. */
|
|
88
|
+
async function consented(ctx) {
|
|
89
|
+
if (ctx.options.yes)
|
|
90
|
+
return true;
|
|
91
|
+
const interactive = Boolean(process.stdin.isTTY && process.stdout.isTTY);
|
|
92
|
+
if (!interactive)
|
|
93
|
+
fail('Not restarting without your consent.', 'Run it again with --yes to restart: ' + againWithYes(ctx));
|
|
94
|
+
return askYesNo('Restart the sandbox now?');
|
|
95
|
+
}
|
|
96
|
+
/** Reopens each session the restart ended, continuing its conversation where the agent supports it. */
|
|
97
|
+
async function reopenSessions(ctx, ready, reopen, relauncher) {
|
|
98
|
+
for (const s of reopen) {
|
|
99
|
+
const at = freshContext(ctx, s.hostDir, s.harness);
|
|
100
|
+
try {
|
|
101
|
+
const joined = await relauncher.joinHere(at, ready, { noRestart: true });
|
|
102
|
+
for (const note of joined.notes)
|
|
103
|
+
console.log(note);
|
|
104
|
+
await relauncher.openSession(at, ready, joined, {
|
|
105
|
+
attach: false,
|
|
106
|
+
harness: s.harness,
|
|
107
|
+
args: ctx.loaded.config.harnesses[s.harness]?.resumeArguments ?? [],
|
|
108
|
+
reuse: false,
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
catch (e) {
|
|
112
|
+
console.warn(c.yellow('Could not reopen ' + s.harness + ' in ' + s.hostDir + ': ' + (e instanceof Error ? e.message : String(e))));
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
export async function offerRestart(ctx, needs, then, relauncher) {
|
|
117
|
+
const folders = needs.map((n) => n.hostDir);
|
|
118
|
+
const registry = new ProjectRegistry(ctx.storageRoot).read() ??
|
|
119
|
+
fail('The running sandbox was started by an older version, so it cannot take another folder.', 'Stop it (sandbox stop) and start it again from ' + folders[0] + '.');
|
|
120
|
+
const primary = registry.projects.find((p) => p.primary) ??
|
|
121
|
+
fail('The running sandbox has no launch folder on record.', 'Stop it (sandbox stop) and start it again.');
|
|
122
|
+
const sessions = new SandboxChannel(ctx.dataPath).currentSessions();
|
|
123
|
+
const hidden = needs.filter((n) => !n.missing);
|
|
124
|
+
explain(needs, hidden, registry, sessions);
|
|
125
|
+
if (hidden.length && !(await consented(ctx))) {
|
|
126
|
+
console.log('Nothing changed.');
|
|
127
|
+
return 1;
|
|
128
|
+
}
|
|
129
|
+
const reopen = sessionsToReopen(registry, sessions);
|
|
130
|
+
const resume = reopen.length > 0 &&
|
|
131
|
+
(ctx.options.yes ||
|
|
132
|
+
(await askYesNo('Reopen the ' +
|
|
133
|
+
reopen.length +
|
|
134
|
+
' session(s) afterwards (continuing their conversations where the agent supports it)?', true)));
|
|
135
|
+
await stopAndWait(ctx);
|
|
136
|
+
markRestarted();
|
|
137
|
+
const keep = registry.projects.filter((p) => !p.primary && p.mechanism !== 'root').map((p) => p.host);
|
|
138
|
+
const harness = ctx.options.harness ?? ctx.options.sessions[0]?.harness;
|
|
139
|
+
const relaunch = freshContext(ctx, primary.host, harness, { noAgent: false });
|
|
140
|
+
await relauncher.launch(relaunch, false, {
|
|
141
|
+
extraProjects: [...keep, ...folders],
|
|
142
|
+
autoSession: false,
|
|
143
|
+
waitUntilReady: true,
|
|
144
|
+
});
|
|
145
|
+
const ready = await relauncher.readySandbox(ctx.dataPath);
|
|
146
|
+
if (resume)
|
|
147
|
+
await reopenSessions(ctx, ready, reopen, relauncher);
|
|
148
|
+
return then();
|
|
149
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { launch } from './launch/index.js';
|
|
2
|
+
import { setup } from './setup/index.js';
|
|
3
|
+
import { data } from './data/index.js';
|
|
4
|
+
import { attach, db, exec, hide, restart, sessions, show, status, stop } from './sessions/index.js';
|
|
5
|
+
import { account } from './accounts.js';
|
|
6
|
+
import { projects } from './projects/index.js';
|
|
7
|
+
import { audit, claudeHost, clean, config, doctor, logs, sync, watcher } from './maintenance/index.js';
|
|
8
|
+
import { agentCommandsCommand } from './agent-commands.js';
|
|
9
|
+
export const HANDLERS = {
|
|
10
|
+
launch: (ctx) => launch(ctx),
|
|
11
|
+
generate: (ctx) => launch(ctx, true),
|
|
12
|
+
attach: attach,
|
|
13
|
+
sessions: sessions,
|
|
14
|
+
status: status,
|
|
15
|
+
exec: exec,
|
|
16
|
+
'agent-commands': agentCommandsCommand,
|
|
17
|
+
db: db,
|
|
18
|
+
restart: restart,
|
|
19
|
+
stop: stop,
|
|
20
|
+
show: show,
|
|
21
|
+
hide: hide,
|
|
22
|
+
account: account,
|
|
23
|
+
projects: projects,
|
|
24
|
+
sync: sync,
|
|
25
|
+
logs: logs,
|
|
26
|
+
audit: audit,
|
|
27
|
+
clean: clean,
|
|
28
|
+
config: config,
|
|
29
|
+
doctor: doctor,
|
|
30
|
+
setup: setup,
|
|
31
|
+
data: data,
|
|
32
|
+
'host-claude': claudeHost,
|
|
33
|
+
_watch: watcher,
|
|
34
|
+
};
|
|
@@ -6,32 +6,51 @@ import { spawnSync } from 'node:child_process';
|
|
|
6
6
|
import _ from 'lodash';
|
|
7
7
|
import { GB, freeBytesAt, humanBytes } from '../../../core/disk.js';
|
|
8
8
|
import { assertTestWritable } from '../../../shared/test-guard.js';
|
|
9
|
-
import { assertNoLinks, fileExists, isLink, isWin, removeLink } from '../../../core/util.js';
|
|
10
|
-
import {
|
|
11
|
-
import { sandboxFeatureInstalled } from '../../../host/
|
|
12
|
-
import {
|
|
9
|
+
import { assertNoLinks, fileExists, isLink, isWin, removeLink } from '../../../core/util/index.js';
|
|
10
|
+
import { SandboxChannel } from '../../../host/channel/index.js';
|
|
11
|
+
import { sandboxFeatureInstalled } from '../../../host/sandbox/index.js';
|
|
12
|
+
import { RunDir } from '../../../shared/channel/index.js';
|
|
13
13
|
import { removeTree } from '../data/remove.js';
|
|
14
|
-
import { deadPidFiles, findHalfInstalled, findLinks, findStagingLeftovers, globalPackages, resolvedVersionsValid } from './finders.js';
|
|
14
|
+
import { deadPidFiles, findHalfInstalled, findLinks, findStagingLeftovers, globalPackages, resolvedVersionsValid, } from './finders.js';
|
|
15
15
|
import { ok, whileRunning } from './types.js';
|
|
16
|
-
|
|
16
|
+
function rel(root, p) {
|
|
17
|
+
return path.relative(root, p) || '.';
|
|
18
|
+
}
|
|
17
19
|
/** Fails (throws) unless every folder from the data folder to `p` is real. */
|
|
18
|
-
|
|
20
|
+
function guard(env, p) {
|
|
21
|
+
assertNoLinks(path.dirname(env.dataPath), p);
|
|
22
|
+
}
|
|
19
23
|
export const CHECKS = [
|
|
20
24
|
{
|
|
21
25
|
name: 'Config file',
|
|
22
|
-
run: (env) =>
|
|
23
|
-
? {
|
|
24
|
-
|
|
26
|
+
run: (env) => env.configError
|
|
27
|
+
? {
|
|
28
|
+
status: 'needs-you',
|
|
29
|
+
detail: env.configError.message +
|
|
30
|
+
(env.configError.fix ? ' ' + env.configError.fix : '') +
|
|
31
|
+
' (repair never rewrites your config; built-in defaults were used for the other checks.)',
|
|
32
|
+
}
|
|
33
|
+
: ok(env.ctx.loaded.configPath ? env.ctx.loaded.configPath + ' is valid.' : 'none; using the built-in defaults.'),
|
|
25
34
|
},
|
|
26
35
|
{
|
|
27
36
|
name: 'Windows Sandbox feature',
|
|
28
|
-
run: () =>
|
|
37
|
+
run: () => sandboxFeatureInstalled()
|
|
38
|
+
? ok('enabled.')
|
|
39
|
+
: {
|
|
40
|
+
status: 'needs-you',
|
|
41
|
+
detail: (isWin ? 'Windows Sandbox is not turned on.' : 'This is not Windows.') +
|
|
42
|
+
' Run: sandbox setup (it checks this PC and offers to turn it on).',
|
|
43
|
+
},
|
|
29
44
|
},
|
|
30
45
|
{
|
|
31
46
|
name: 'Links in the data folder',
|
|
32
47
|
run: (env) => {
|
|
33
48
|
if (isLink(env.dataPath))
|
|
34
|
-
return {
|
|
49
|
+
return {
|
|
50
|
+
status: 'needs-you',
|
|
51
|
+
detail: env.dataPath +
|
|
52
|
+
' itself is a link or junction. agent-sandbox refuses to work through links; point storage.root at the real folder instead (sandbox config path).',
|
|
53
|
+
};
|
|
35
54
|
// A running sandbox can swap folders for links while we look; only check a stopped one.
|
|
36
55
|
if (env.running)
|
|
37
56
|
return whileRunning;
|
|
@@ -44,7 +63,13 @@ export const CHECKS = [
|
|
|
44
63
|
guard(env, path.dirname(link));
|
|
45
64
|
removeLink(link);
|
|
46
65
|
}
|
|
47
|
-
return {
|
|
66
|
+
return {
|
|
67
|
+
status: 'fixed',
|
|
68
|
+
detail: 'removed ' +
|
|
69
|
+
links.length +
|
|
70
|
+
' link(s)/junction(s) the sandbox created, without following them: ' +
|
|
71
|
+
links.map((l) => rel(env.dataPath, l)).join(', '),
|
|
72
|
+
};
|
|
48
73
|
},
|
|
49
74
|
},
|
|
50
75
|
{
|
|
@@ -52,18 +77,29 @@ export const CHECKS = [
|
|
|
52
77
|
run: (env) => {
|
|
53
78
|
if (env.running)
|
|
54
79
|
return ok('a sandbox is running; its state is in use.');
|
|
55
|
-
if (isLink(
|
|
56
|
-
|
|
80
|
+
if (isLink(new RunDir(env.dataPath).root)) {
|
|
81
|
+
new SandboxChannel(env.dataPath).reset();
|
|
57
82
|
return { status: 'fixed', detail: 'the run folder was a link; removed the link itself.' };
|
|
58
83
|
}
|
|
59
|
-
// The last sandbox's status file is normal after it closes; sessions still marked running or unanswered requests
|
|
60
|
-
|
|
61
|
-
const
|
|
84
|
+
// The last sandbox's status file is normal after it closes; sessions still marked running or unanswered requests
|
|
85
|
+
// are not.
|
|
86
|
+
const ghosts = new RunDir(env.dataPath)
|
|
87
|
+
.listSessions()
|
|
88
|
+
.filter((s) => s.phase === 'running' || s.phase === 'starting').length;
|
|
89
|
+
const requests = new RunDir(env.dataPath).scanRequests();
|
|
62
90
|
const pending = requests.valid.length + requests.invalid.length;
|
|
63
91
|
if (!ghosts && !pending)
|
|
64
92
|
return ok('clean.');
|
|
65
|
-
|
|
66
|
-
return {
|
|
93
|
+
new SandboxChannel(env.dataPath).reset();
|
|
94
|
+
return {
|
|
95
|
+
status: 'fixed',
|
|
96
|
+
detail: 'no sandbox is running, but ' +
|
|
97
|
+
_.compact([
|
|
98
|
+
ghosts && ghosts + ' session(s) were still marked running',
|
|
99
|
+
pending && pending + ' request(s) were never answered',
|
|
100
|
+
]).join(' and ') +
|
|
101
|
+
'; cleared the run state so status/attach do not show ghosts.',
|
|
102
|
+
};
|
|
67
103
|
},
|
|
68
104
|
},
|
|
69
105
|
{
|
|
@@ -76,7 +112,10 @@ export const CHECKS = [
|
|
|
76
112
|
return ok('a sandbox is running; kept.');
|
|
77
113
|
assertTestWritable(file);
|
|
78
114
|
fs.rmSync(file, { force: true });
|
|
79
|
-
return {
|
|
115
|
+
return {
|
|
116
|
+
status: 'fixed',
|
|
117
|
+
detail: 'removed the saved hidden-window list from a sandbox that is no longer running.',
|
|
118
|
+
};
|
|
80
119
|
},
|
|
81
120
|
},
|
|
82
121
|
{
|
|
@@ -89,7 +128,12 @@ export const CHECKS = [
|
|
|
89
128
|
assertTestWritable(f);
|
|
90
129
|
fs.rmSync(f, { force: true });
|
|
91
130
|
}
|
|
92
|
-
return {
|
|
131
|
+
return {
|
|
132
|
+
status: 'fixed',
|
|
133
|
+
detail: 'removed ' +
|
|
134
|
+
dead.length +
|
|
135
|
+
' record(s) of a history sync watcher that is no longer running (the next launch starts a new one).',
|
|
136
|
+
};
|
|
93
137
|
},
|
|
94
138
|
},
|
|
95
139
|
{
|
|
@@ -103,7 +147,13 @@ export const CHECKS = [
|
|
|
103
147
|
return ok('none.');
|
|
104
148
|
for (const p of found)
|
|
105
149
|
removeTree(p, env.dataPath);
|
|
106
|
-
return {
|
|
150
|
+
return {
|
|
151
|
+
status: 'fixed',
|
|
152
|
+
detail: 'removed ' +
|
|
153
|
+
found.length +
|
|
154
|
+
' half-finished download/copy folder(s): ' +
|
|
155
|
+
found.map((p) => rel(env.toolsDir, p)).join(', '),
|
|
156
|
+
};
|
|
107
157
|
},
|
|
108
158
|
},
|
|
109
159
|
{
|
|
@@ -117,7 +167,12 @@ export const CHECKS = [
|
|
|
117
167
|
return ok('every toolchain folder has its program.');
|
|
118
168
|
for (const f of found)
|
|
119
169
|
removeTree(f.path, env.dataPath);
|
|
120
|
-
return {
|
|
170
|
+
return {
|
|
171
|
+
status: 'fixed',
|
|
172
|
+
detail: 'removed ' +
|
|
173
|
+
found.map((f) => rel(env.toolsDir, f.path) + ' (no ' + f.missing + ')').join(', ') +
|
|
174
|
+
'; the next sandbox reinstalls them.',
|
|
175
|
+
};
|
|
121
176
|
},
|
|
122
177
|
},
|
|
123
178
|
{
|
|
@@ -137,7 +192,10 @@ export const CHECKS = [
|
|
|
137
192
|
return ok('valid.');
|
|
138
193
|
assertTestWritable(file);
|
|
139
194
|
fs.rmSync(file, { force: true });
|
|
140
|
-
return {
|
|
195
|
+
return {
|
|
196
|
+
status: 'fixed',
|
|
197
|
+
detail: 'tools\\resolved-versions.json was damaged; removed it (versions are looked up again on the next start).',
|
|
198
|
+
};
|
|
141
199
|
},
|
|
142
200
|
},
|
|
143
201
|
{
|
|
@@ -147,13 +205,24 @@ export const CHECKS = [
|
|
|
147
205
|
if (!fileExists(npmCli))
|
|
148
206
|
return { status: 'skipped', detail: 'npm not found next to this Node (' + npmCli + ').' };
|
|
149
207
|
// cwd = Node's own folder: npm reads .npmrc from the current folder, which could be a sandbox-writable workspace.
|
|
150
|
-
const result = spawnSync(process.execPath, [npmCli, 'ls', '-g', '--json', '--depth=0'], {
|
|
208
|
+
const result = spawnSync(process.execPath, [npmCli, 'ls', '-g', '--json', '--depth=0'], {
|
|
209
|
+
cwd: path.dirname(process.execPath),
|
|
210
|
+
encoding: 'utf8',
|
|
211
|
+
windowsHide: true,
|
|
212
|
+
timeout: 60000,
|
|
213
|
+
maxBuffer: 16 * 1024 * 1024,
|
|
214
|
+
});
|
|
151
215
|
const names = globalPackages(result.stdout ?? '');
|
|
152
216
|
if (!names.length)
|
|
153
217
|
return { status: 'skipped', detail: 'could not read the global npm packages.' };
|
|
154
218
|
if (names.includes('agent-sandbox') && names.includes('windows-development-sandbox'))
|
|
155
|
-
return {
|
|
156
|
-
|
|
219
|
+
return {
|
|
220
|
+
status: 'needs-you',
|
|
221
|
+
detail: 'the old agent-sandbox package is still installed next to windows-development-sandbox, and their commands clash. Run: npm uninstall -g agent-sandbox',
|
|
222
|
+
};
|
|
223
|
+
return ok(names.includes('agent-sandbox')
|
|
224
|
+
? 'agent-sandbox installed (the old name; fine on its own).'
|
|
225
|
+
: 'no old agent-sandbox package.');
|
|
157
226
|
},
|
|
158
227
|
},
|
|
159
228
|
{
|
|
@@ -164,7 +233,14 @@ export const CHECKS = [
|
|
|
164
233
|
return { status: 'skipped', detail: 'could not check the drive of ' + env.storageRoot };
|
|
165
234
|
if (free >= 20 * GB)
|
|
166
235
|
return ok(humanBytes(free) + ' free.');
|
|
167
|
-
return {
|
|
236
|
+
return {
|
|
237
|
+
status: 'warn',
|
|
238
|
+
detail: humanBytes(free) +
|
|
239
|
+
' free on the drive of ' +
|
|
240
|
+
env.storageRoot +
|
|
241
|
+
(free < 5 * GB ? ': toolchains need several GB.' : ': getting low.') +
|
|
242
|
+
' See what is stored with: sandbox data, and free space with: sandbox data clean <target>',
|
|
243
|
+
};
|
|
168
244
|
},
|
|
169
245
|
},
|
|
170
246
|
];
|
|
@@ -1,8 +1,11 @@
|
|
|
1
|
-
/** Interrupted downloads and copies: `<name>.staging-<hex>` and `node-staging`, in tools\ and one folder down (tools\go\1.23.staging-ab12). */
|
|
2
|
-
export declare const findStagingLeftovers: (toolsDir: string) => string[];
|
|
3
1
|
/**
|
|
4
|
-
*
|
|
5
|
-
*
|
|
2
|
+
* Interrupted downloads and copies: `<name>.staging-<hex>` and `node-staging`, in tools\ and one folder down
|
|
3
|
+
* (tools\go\1.23.staging-ab12).
|
|
4
|
+
*/
|
|
5
|
+
export declare function findStagingLeftovers(toolsDir: string): string[];
|
|
6
|
+
/**
|
|
7
|
+
* A toolchain folder and the program it must contain. `versions` means one folder per installed version
|
|
8
|
+
* (tools\go\1.23.2); `match` limits which version folders count (tools\nvm also holds settings and nvm.exe).
|
|
6
9
|
*/
|
|
7
10
|
export interface ToolRule {
|
|
8
11
|
folder: string;
|
|
@@ -12,7 +15,7 @@ export interface ToolRule {
|
|
|
12
15
|
}
|
|
13
16
|
export declare const TOOL_RULES: ToolRule[];
|
|
14
17
|
/** Toolchain folders that exist but lack their main program (an install that stopped half way). Never enters links. */
|
|
15
|
-
export declare
|
|
18
|
+
export declare function findHalfInstalled(toolsDir: string, rules?: ToolRule[]): {
|
|
16
19
|
path: string;
|
|
17
20
|
missing: string;
|
|
18
21
|
}[];
|
|
@@ -20,11 +23,11 @@ export declare const findHalfInstalled: (toolsDir: string, rules?: ToolRule[]) =
|
|
|
20
23
|
* Every link or junction under `root` (the links themselves; nothing behind them is visited). Before descending into
|
|
21
24
|
* a folder its real path must still be inside root: a folder swapped for a junction between two looks is not followed.
|
|
22
25
|
*/
|
|
23
|
-
export declare
|
|
26
|
+
export declare function findLinks(root: string): string[];
|
|
24
27
|
/** tools\resolved-versions.json is a JSON object (anything else makes the guest stumble). */
|
|
25
|
-
export declare
|
|
28
|
+
export declare function resolvedVersionsValid(text: string): boolean;
|
|
26
29
|
/** Package names from `npm ls -g --json`; [] when the output is not what npm prints. */
|
|
27
|
-
export declare
|
|
28
|
-
export declare
|
|
30
|
+
export declare function globalPackages(json: string): string[];
|
|
31
|
+
export declare function pidAlive(pid: number): boolean;
|
|
29
32
|
/** Sync-watcher pid files (storage\run\watcher-*.pid) whose process is gone (or whose content is not a pid). */
|
|
30
|
-
export declare
|
|
33
|
+
export declare function deadPidFiles(runDir: string, alive?: (pid: number) => boolean): string[];
|
|
@@ -2,13 +2,16 @@
|
|
|
2
2
|
import fs from 'node:fs';
|
|
3
3
|
import path from 'node:path';
|
|
4
4
|
import { z } from 'zod';
|
|
5
|
-
import { dirExists, fileExists, isLink } from '../../../core/util.js';
|
|
6
|
-
/**
|
|
7
|
-
|
|
5
|
+
import { dirExists, fileExists, isLink } from '../../../core/util/index.js';
|
|
6
|
+
/**
|
|
7
|
+
* Interrupted downloads and copies: `<name>.staging-<hex>` and `node-staging`, in tools\ and one folder down
|
|
8
|
+
* (tools\go\1.23.staging-ab12).
|
|
9
|
+
*/
|
|
10
|
+
export function findStagingLeftovers(toolsDir) {
|
|
8
11
|
const isStaging = (name) => /\.staging-[0-9a-f]+$/i.test(name) || name.toLowerCase() === 'node-staging';
|
|
9
|
-
const realChildren = (dir) =>
|
|
10
|
-
return realChildren(toolsDir).flatMap((p) =>
|
|
11
|
-
}
|
|
12
|
+
const realChildren = (dir) => dirExists(dir) && !isLink(dir) ? fs.readdirSync(dir).map((n) => path.join(dir, n)) : [];
|
|
13
|
+
return realChildren(toolsDir).flatMap((p) => isStaging(path.basename(p)) ? [p] : isLink(p) ? [] : realChildren(p).filter((c) => isStaging(path.basename(c))));
|
|
14
|
+
}
|
|
12
15
|
export const TOOL_RULES = [
|
|
13
16
|
{ folder: 'nvm', exe: ['nvm.exe'] },
|
|
14
17
|
{ folder: 'nvm', exe: ['node.exe'], versions: true, match: /^v\d+\.\d+\.\d+$/ },
|
|
@@ -20,7 +23,7 @@ export const TOOL_RULES = [
|
|
|
20
23
|
{ folder: 'python', exe: ['python.exe'], versions: true },
|
|
21
24
|
];
|
|
22
25
|
/** Toolchain folders that exist but lack their main program (an install that stopped half way). Never enters links. */
|
|
23
|
-
export
|
|
26
|
+
export function findHalfInstalled(toolsDir, rules = TOOL_RULES) {
|
|
24
27
|
const realDir = (p) => dirExists(p) && !isLink(p);
|
|
25
28
|
const staging = (name) => /\.staging-[0-9a-f]+$/i.test(name) || name.toLowerCase() === 'node-staging';
|
|
26
29
|
return rules.flatMap((rule) => {
|
|
@@ -28,26 +31,37 @@ export const findHalfInstalled = (toolsDir, rules = TOOL_RULES) => {
|
|
|
28
31
|
if (!realDir(base))
|
|
29
32
|
return [];
|
|
30
33
|
const folders = rule.versions
|
|
31
|
-
? fs
|
|
34
|
+
? fs
|
|
35
|
+
.readdirSync(base)
|
|
36
|
+
.filter((n) => !staging(n) && (!rule.match || rule.match.test(n)))
|
|
37
|
+
.map((n) => path.join(base, n))
|
|
38
|
+
.filter(realDir)
|
|
32
39
|
: [base];
|
|
33
|
-
return folders
|
|
40
|
+
return folders
|
|
41
|
+
.filter((f) => !fileExists(path.join(f, ...rule.exe)))
|
|
42
|
+
.map((f) => ({ path: f, missing: path.join(...rule.exe) }));
|
|
34
43
|
});
|
|
35
|
-
}
|
|
44
|
+
}
|
|
36
45
|
/**
|
|
37
46
|
* Every link or junction under `root` (the links themselves; nothing behind them is visited). Before descending into
|
|
38
47
|
* a folder its real path must still be inside root: a folder swapped for a junction between two looks is not followed.
|
|
39
48
|
*/
|
|
40
|
-
export
|
|
49
|
+
export function findLinks(root) {
|
|
41
50
|
if (isLink(root))
|
|
42
51
|
return [root];
|
|
43
|
-
const real = (p) => {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
52
|
+
const real = (p) => {
|
|
53
|
+
try {
|
|
54
|
+
return fs.realpathSync.native(p).toLowerCase();
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
return '';
|
|
58
|
+
}
|
|
59
|
+
};
|
|
49
60
|
const top = real(root);
|
|
50
|
-
const inside = (p) => {
|
|
61
|
+
const inside = (p) => {
|
|
62
|
+
const r = real(p);
|
|
63
|
+
return r !== '' && (r === top || r.startsWith(top + path.sep));
|
|
64
|
+
};
|
|
51
65
|
const walk = (dir) => {
|
|
52
66
|
if (!inside(dir))
|
|
53
67
|
return [];
|
|
@@ -66,43 +80,49 @@ export const findLinks = (root) => {
|
|
|
66
80
|
});
|
|
67
81
|
};
|
|
68
82
|
return dirExists(root) ? walk(root) : [];
|
|
69
|
-
}
|
|
70
|
-
const
|
|
83
|
+
}
|
|
84
|
+
const ResolvedVersionsSchema = z.record(z.string(), z.unknown());
|
|
71
85
|
/** tools\resolved-versions.json is a JSON object (anything else makes the guest stumble). */
|
|
72
|
-
export
|
|
86
|
+
export function resolvedVersionsValid(text) {
|
|
73
87
|
try {
|
|
74
|
-
return
|
|
88
|
+
return ResolvedVersionsSchema.safeParse(JSON.parse(text.replace(/^\uFEFF/, ''))).success;
|
|
75
89
|
}
|
|
76
90
|
catch {
|
|
77
91
|
return false;
|
|
78
92
|
}
|
|
79
|
-
}
|
|
80
|
-
const
|
|
93
|
+
}
|
|
94
|
+
const NpmListSchema = z.object({ dependencies: z.record(z.string(), z.unknown()).optional() });
|
|
81
95
|
/** Package names from `npm ls -g --json`; [] when the output is not what npm prints. */
|
|
82
|
-
export
|
|
96
|
+
export function globalPackages(json) {
|
|
83
97
|
try {
|
|
84
|
-
return Object.keys(
|
|
98
|
+
return Object.keys(NpmListSchema.parse(JSON.parse(json)).dependencies ?? {});
|
|
85
99
|
}
|
|
86
100
|
catch {
|
|
87
101
|
return [];
|
|
88
102
|
}
|
|
89
|
-
};
|
|
90
|
-
const Pid = z.coerce.number().int().positive();
|
|
91
|
-
export const pidAlive = (pid) => { try {
|
|
92
|
-
process.kill(pid, 0);
|
|
93
|
-
return true;
|
|
94
103
|
}
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
104
|
+
const PidSchema = z.coerce.number().int().positive();
|
|
105
|
+
export function pidAlive(pid) {
|
|
106
|
+
try {
|
|
107
|
+
process.kill(pid, 0);
|
|
108
|
+
return true;
|
|
109
|
+
}
|
|
110
|
+
catch (e) {
|
|
111
|
+
return e.code === 'EPERM';
|
|
112
|
+
}
|
|
113
|
+
}
|
|
98
114
|
/** Sync-watcher pid files (storage\run\watcher-*.pid) whose process is gone (or whose content is not a pid). */
|
|
99
|
-
export
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
115
|
+
export function deadPidFiles(runDir, alive = pidAlive) {
|
|
116
|
+
return (dirExists(runDir) ? fs.readdirSync(runDir) : [])
|
|
117
|
+
.filter((n) => /^watcher-.*\.pid$/i.test(n))
|
|
118
|
+
.map((n) => path.join(runDir, n))
|
|
119
|
+
.filter((f) => {
|
|
120
|
+
try {
|
|
121
|
+
const pid = PidSchema.safeParse(fs.readFileSync(f, 'utf8').trim());
|
|
122
|
+
return !pid.success || !alive(pid.data);
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
});
|
|
105
128
|
}
|
|
106
|
-
catch {
|
|
107
|
-
return false;
|
|
108
|
-
} });
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { UserError } from '../../../core/util.js';
|
|
1
|
+
import { UserError } from '../../../core/util/index.js';
|
|
2
2
|
import type { CliOptions } from '../../args.js';
|
|
3
3
|
import { type Context } from '../context.js';
|
|
4
4
|
import type { RepairCheck, RepairEnv, RepairResult } from './types.js';
|
|
5
5
|
/** Runs every check in order; a check that throws is reported, never stops the rest. */
|
|
6
|
-
export declare
|
|
7
|
-
export declare
|
|
6
|
+
export declare function runChecks(env: RepairEnv, checks?: RepairCheck[]): RepairResult[];
|
|
7
|
+
export declare function repair(ctx: Context, configError?: UserError | null): number;
|
|
8
8
|
/**
|
|
9
9
|
* Entry point that works even when the config file is broken (createContext would throw): falls back to the built-in
|
|
10
10
|
* defaults so the other checks still run, and reports the config problem as the first check.
|
|
11
11
|
*/
|
|
12
|
-
export declare
|
|
12
|
+
export declare function repairCommand(packageRoot: string, entry: string, options: CliOptions): number;
|