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
package/dist/host/generate.js
DELETED
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
// Writes a launch folder for one sandbox: session.json (what the guest needs to know), the bundled runtime, hooks, the
|
|
2
|
-
// staged Claude settings and the .wsb file that starts Windows Sandbox. The pieces live in launch/.
|
|
3
|
-
import fs from 'node:fs';
|
|
4
|
-
import path from 'node:path';
|
|
5
|
-
import crypto from 'node:crypto';
|
|
6
|
-
import { decideToolchains, resolveToolchains } from '../core/detect-toolchains.js';
|
|
7
|
-
import { readPwshScripts, usesPwsh } from '../core/detect-pwsh.js';
|
|
8
|
-
import { widenForProjects } from '../core/project-policy.js';
|
|
9
|
-
import { dirExists, ensureDir, fail, writeJson } from '../core/util.js';
|
|
10
|
-
import { substDrives } from '../shared/guest-paths.js';
|
|
11
|
-
import { PROJECTS_GUEST, hubName } from '../shared/projects.js';
|
|
12
|
-
import { planBootProjects } from './launch/projects.js';
|
|
13
|
-
import { hostClaudeDir, stageClaudeProfile } from './claude-profile.js';
|
|
14
|
-
import { databaseCatalog, planDatabases } from './database-plan.js';
|
|
15
|
-
import { collectMappings } from './launch/mappings.js';
|
|
16
|
-
import { copyRuntime, stageGitIdentity, stageHooks } from './launch/stage.js';
|
|
17
|
-
import { buildWsb, resolveMemoryMb } from './launch/wsb.js';
|
|
18
|
-
import { capturePersonalization } from './personalize.js';
|
|
19
|
-
import { pcLanguages } from './pc-scan.js';
|
|
20
|
-
import { msvcHint, projectEntries } from './project-scan.js';
|
|
21
|
-
import { assertTestWritable } from './test-guard.js';
|
|
22
|
-
const NO_PROFILE = { hostDir: null, staged: [], skipped: [], credentials: false, secretsRemoved: [] };
|
|
23
|
-
/** Which toolchains the project needs ("auto" settings follow the project's files and what this PC has). */
|
|
24
|
-
export const decideProjectToolchains = (o) => {
|
|
25
|
-
const { config, workspaceHost } = o.run;
|
|
26
|
-
const msvcScript = config.toolchains.msvc.enabled === 'auto' ? msvcHint(workspaceHost) : undefined;
|
|
27
|
-
const pwshScript = config.toolchains.pwsh.enabled === 'auto' ? usesPwsh(readPwshScripts(workspaceHost)) : null;
|
|
28
|
-
const hints = { ...(msvcScript ? { msvc: msvcScript } : {}), ...(pwshScript ? { pwsh: pwshScript } : {}) };
|
|
29
|
-
return decideToolchains(config.toolchains, projectEntries(workspaceHost), o.pcLanguages ?? pcLanguages(), hints);
|
|
30
|
-
};
|
|
31
|
-
/** What was found on this PC to copy instead of download. */
|
|
32
|
-
const hostToolsOf = (probe) => ({
|
|
33
|
-
node: Boolean(probe.nodeDir),
|
|
34
|
-
nodeVersion: probe.nodeDir || probe.nvmNode ? probe.hostNodeVersion.replace(/^v/, '') : null,
|
|
35
|
-
harnessExecutable: probe.harnessExe?.file ?? null,
|
|
36
|
-
git: Boolean(probe.gitDir),
|
|
37
|
-
nvm: Boolean(probe.nvmDir),
|
|
38
|
-
volta: Boolean(probe.volta),
|
|
39
|
-
pyenv: Boolean(probe.pyenv),
|
|
40
|
-
});
|
|
41
|
-
/**
|
|
42
|
-
* env.cmd, which logon.cmd calls before it opens Windows Terminal: Terminal expands "%AGENT_WORKSPACE%" (the starting
|
|
43
|
-
* folder of new tabs) from its own environment, and the runtime only sets the variable machine-wide after Terminal
|
|
44
|
-
* started. `%` is doubled for cmd; a Windows path holds no quotes.
|
|
45
|
-
*/
|
|
46
|
-
export const logonEnv = (workspace) => '@set "AGENT_WORKSPACE=' + workspace.replace(/[\r\n"]/g, '').replace(/%/g, '%%') + '"\r\n';
|
|
47
|
-
export const generateSandbox = (given) => {
|
|
48
|
-
// Several projects at boot: the sandbox also gets what the others want and you allowed (core/project-policy.ts).
|
|
49
|
-
const others = given.bootWants?.projects ?? [];
|
|
50
|
-
const boot = planBootProjects({ run: given.run, packageRoot: given.packageRoot, extraProjects: given.extraProjects, knownProjects: given.knownProjects });
|
|
51
|
-
const wide = widenForProjects(given.run.config, others, { keepOff: given.bootWants?.keepOff, exists: dirExists });
|
|
52
|
-
const o = { ...given, run: { ...given.run, config: wide.config } };
|
|
53
|
-
const { config, dataPath, workspaceHost, harnessName, storageRoot } = o.run;
|
|
54
|
-
const harness = harnessName === 'none' ? null : config.harnesses[harnessName] ?? fail('Unknown agent: ' + harnessName, 'Configured agents: ' + Object.keys(config.harnesses).join(', '));
|
|
55
|
-
if (!dirExists(workspaceHost))
|
|
56
|
-
fail('The workspace folder does not exist: ' + workspaceHost, 'cd into the project first.');
|
|
57
|
-
assertTestWritable(storageRoot);
|
|
58
|
-
assertTestWritable(dataPath);
|
|
59
|
-
// Checked before anything is written, so a refusal leaves nothing behind.
|
|
60
|
-
const memoryMb = Math.max(resolveMemoryMb(config.sandbox, o.freeMemoryBytes), ...others.map((p) => typeof p.config.sandbox.memoryMb === 'number' ? p.config.sandbox.memoryMb : 0));
|
|
61
|
-
const launchId = Date.now() + '-' + crypto.randomBytes(3).toString('hex');
|
|
62
|
-
const launchPath = path.join(storageRoot, 'launches', launchId);
|
|
63
|
-
ensureDir(launchPath);
|
|
64
|
-
ensureDir(dataPath);
|
|
65
|
-
const mappingNotes = [];
|
|
66
|
-
const mappings = collectMappings(o, launchPath, boot, mappingNotes);
|
|
67
|
-
const profile = harnessName === 'claude' ? stageClaudeProfile(config.claudeProfile, launchPath, workspaceHost, config.secrets) : NO_PROFILE;
|
|
68
|
-
stageGitIdentity(launchPath);
|
|
69
|
-
const personalization = config.personalization.enabled ? capturePersonalization(launchPath) : 'disabled';
|
|
70
|
-
const databases = o.databases ?? planDatabases(config.databases, workspaceHost);
|
|
71
|
-
const toolchainDecisions = decideProjectToolchains(o);
|
|
72
|
-
const session = {
|
|
73
|
-
launchId,
|
|
74
|
-
project: path.basename(workspaceHost),
|
|
75
|
-
projectId: hubName(workspaceHost, []),
|
|
76
|
-
workspace: config.guestWorkspace,
|
|
77
|
-
workspaceHost,
|
|
78
|
-
projectsDir: PROJECTS_GUEST,
|
|
79
|
-
// Every folder mapped for other projects (roots and projects mapped at boot): the guest accepts projects in them.
|
|
80
|
-
roots: [...boot.roots, ...boot.projects].map((r) => r.guest),
|
|
81
|
-
...(o.autoSession === false ? { autoSession: false } : {}),
|
|
82
|
-
harnessName,
|
|
83
|
-
harness,
|
|
84
|
-
harnessArguments: o.harnessArgs,
|
|
85
|
-
persistAgentState: config.storage.persistAgentState,
|
|
86
|
-
networking: config.sandbox.networking,
|
|
87
|
-
headless: config.sandbox.headless,
|
|
88
|
-
network: config.network,
|
|
89
|
-
provisioning: config.provisioning,
|
|
90
|
-
// "auto" is decided here, so the guest and the launch table agree.
|
|
91
|
-
toolchains: resolveToolchains(config.toolchains, toolchainDecisions),
|
|
92
|
-
databases,
|
|
93
|
-
databaseCatalog: databaseCatalog(config.databases),
|
|
94
|
-
versions: o.run.versions,
|
|
95
|
-
attach: config.attach,
|
|
96
|
-
hooks: config.hooks,
|
|
97
|
-
downloads: config.downloads,
|
|
98
|
-
hostTools: hostToolsOf(o.probe),
|
|
99
|
-
claudeProfile: { overwrite: config.claudeProfile.overwrite, items: profile.staged, credentials: profile.credentials, hostConfigDir: profile.hostDir ?? hostClaudeDir(config.claudeProfile), syncClaudeMem: config.claudeProfile.syncClaudeMem },
|
|
100
|
-
personalization: fs.existsSync(path.join(launchPath, 'personalize', 'personalize.reg')),
|
|
101
|
-
substDrives: substDrives(mappings.map((m) => m.guest)),
|
|
102
|
-
cpuLimitPercent: config.sandbox.cpuLimit === 'none' ? null : config.sandbox.cpuLimit,
|
|
103
|
-
pageFileMb: config.sandbox.pageFileMb,
|
|
104
|
-
apps: config.apps,
|
|
105
|
-
auditProcesses: config.audit.enabled && config.audit.processes,
|
|
106
|
-
};
|
|
107
|
-
const sessionPath = path.join(launchPath, 'session.json');
|
|
108
|
-
writeJson(sessionPath, session);
|
|
109
|
-
fs.writeFileSync(path.join(launchPath, 'env.cmd'), logonEnv(session.workspace), 'utf8');
|
|
110
|
-
copyRuntime(o.packageRoot, launchPath);
|
|
111
|
-
stageHooks(o.packageRoot, launchPath, o.run.scripts);
|
|
112
|
-
const wsbPath = path.join(launchPath, 'agent.wsb');
|
|
113
|
-
fs.writeFileSync(wsbPath, buildWsb(config, memoryMb, mappings), 'utf8');
|
|
114
|
-
return { wsbPath, launchPath, launchId, sessionPath, memoryMb, bootConfig: config, widened: wide.widened, mappings, profile, personalization, databases, toolchains: toolchainDecisions, projects: { ...boot, notes: [...boot.notes, ...wide.notes] }, mappingNotes };
|
|
115
|
-
};
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import type { ResolvedRun } from '../../core/types.js';
|
|
2
|
-
import { type RootMapping } from '../../shared/projects.js';
|
|
3
|
-
/** More folders than this would make the .wsb (and every boot) unwieldy; the rest join with a restart later. */
|
|
4
|
-
export declare const MAX_BOOT_PROJECTS = 48;
|
|
5
|
-
export interface BootProjects {
|
|
6
|
-
roots: RootMapping[];
|
|
7
|
-
projects: RootMapping[];
|
|
8
|
-
notes: string[];
|
|
9
|
-
}
|
|
10
|
-
export declare const planBootProjects: (o: {
|
|
11
|
-
run: ResolvedRun;
|
|
12
|
-
packageRoot: string;
|
|
13
|
-
extraProjects?: string[];
|
|
14
|
-
knownProjects?: string[];
|
|
15
|
-
}) => BootProjects;
|
|
16
|
-
/** The launch folder is inside a mapped root and placed under it (core/workspace.ts): the root shows it, no own mapping. */
|
|
17
|
-
export declare const shownByRoot: (roots: RootMapping[], workspaceHost: string, guestWorkspace: string) => boolean;
|
package/dist/host/launch/wsb.js
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
// The .wsb file Windows Sandbox starts from: memory, devices and the folders mapped in.
|
|
2
|
-
import os from 'node:os';
|
|
3
|
-
import { fail, xmlEscape } from '../../core/util.js';
|
|
4
|
-
import { MIRROR_ROOT, sandboxFolder } from '../../shared/guest-paths.js';
|
|
5
|
-
export const GUEST = { launch: 'C:\\AgentLaunch', data: 'C:\\AgentData', hostTools: 'C:\\HostTools', mirror: MIRROR_ROOT };
|
|
6
|
-
const toggle = (value) => (value ? 'Enable' : 'Disable');
|
|
7
|
-
/** "auto": free RAM minus the reserve, but never more than maxMemoryMb or maxMemoryPercent of the PC's total RAM. */
|
|
8
|
-
export const resolveMemoryMb = (sandbox, freeMemoryBytes = os.freemem(), totalMemoryBytes = os.totalmem()) => {
|
|
9
|
-
if (sandbox.memoryMb !== 'auto')
|
|
10
|
-
return sandbox.memoryMb;
|
|
11
|
-
const freeMb = Math.floor(freeMemoryBytes / 1048576);
|
|
12
|
-
const shareMb = Math.floor((totalMemoryBytes / 1048576) * sandbox.maxMemoryPercent / 100);
|
|
13
|
-
const rounded = Math.floor(Math.min(sandbox.maxMemoryMb, shareMb, freeMb - sandbox.reserveHostMb) / 1024) * 1024;
|
|
14
|
-
if (rounded < 4096)
|
|
15
|
-
fail('Not enough free RAM for the sandbox (' + freeMb + ' MB free, ' + sandbox.reserveHostMb + ' MB kept for this PC).', 'Close some apps, lower sandbox.reserveHostMb, or set sandbox.memoryMb to a fixed value (>= 4096).');
|
|
16
|
-
return rounded;
|
|
17
|
-
};
|
|
18
|
-
export const buildWsb = (config, memoryMb, mappings) => {
|
|
19
|
-
const s = config.sandbox;
|
|
20
|
-
// Guest paths on other drive letters (F:\x) really live under C:\Mirror\F; bootstrap.ps1 substs F: onto it at boot.
|
|
21
|
-
const folders = mappings.map((m) => '<MappedFolder><HostFolder>' + xmlEscape(m.host) + '</HostFolder><SandboxFolder>' + xmlEscape(sandboxFolder(m.guest)) + '</SandboxFolder><ReadOnly>' + String(m.readOnly) + '</ReadOnly></MappedFolder>').join('');
|
|
22
|
-
return '<Configuration>'
|
|
23
|
-
+ '<MemoryInMB>' + memoryMb + '</MemoryInMB>'
|
|
24
|
-
+ '<vGPU>' + toggle(s.vGpu) + '</vGPU>'
|
|
25
|
-
+ '<Networking>' + toggle(s.networking) + '</Networking>'
|
|
26
|
-
+ '<ClipboardRedirection>' + toggle(s.clipboard) + '</ClipboardRedirection>'
|
|
27
|
-
+ '<AudioInput>' + toggle(s.audioInput) + '</AudioInput>'
|
|
28
|
-
+ '<VideoInput>' + toggle(s.videoInput) + '</VideoInput>'
|
|
29
|
-
+ '<PrinterRedirection>' + toggle(s.printerRedirection) + '</PrinterRedirection>'
|
|
30
|
-
+ '<ProtectedClient>' + toggle(s.protectedClient) + '</ProtectedClient>'
|
|
31
|
-
+ '<MappedFolders>' + folders + '</MappedFolders>'
|
|
32
|
-
+ '<LogonCommand><Command>' + xmlEscape(GUEST.launch + '\\sandbox\\logon.cmd') + '</Command></LogonCommand>'
|
|
33
|
-
+ '</Configuration>';
|
|
34
|
-
};
|
package/dist/host/motw.d.ts
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
/** What Windows runs when you open it (not source files such as .js or .py: those need a program you choose). */
|
|
2
|
-
export declare const RISKY: RegExp;
|
|
3
|
-
/** Marks one file if it is a program or script (and a plain file, not a link). Returns true when it marked it. */
|
|
4
|
-
export declare const markFromSandbox: (file: string) => boolean;
|
|
5
|
-
/** Has this file the mark? */
|
|
6
|
-
export declare const isMarked: (file: string) => boolean;
|
|
7
|
-
/** Watches the projects while the sandbox runs and marks what appears or changes; returns a function that stops it. */
|
|
8
|
-
export declare const watchAndMark: (projects: string[], note?: (message: string) => void) => (() => void);
|
|
9
|
-
/** The projects to watch and mark (empty: storage.markSandboxFiles is off). */
|
|
10
|
-
export declare const saveMarkedProjects: (storageRoot: string, dataPath: string, projects: string[]) => void;
|
|
11
|
-
export declare const readMarkedProjects: (storageRoot: string, dataPath: string) => string[];
|
|
12
|
-
/** The data folder's size, measured by the watcher when a sandbox closes (measuring at launch would be slow). */
|
|
13
|
-
export declare const saveDataSize: (storageRoot: string, dataPath: string, bytes: number) => void;
|
|
14
|
-
export declare const readDataSize: (storageRoot: string, dataPath: string) => {
|
|
15
|
-
bytes: number;
|
|
16
|
-
at: string;
|
|
17
|
-
} | null;
|
package/dist/host/motw.js
DELETED
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
// storage.markSandboxFiles: programs and scripts that appear or change in a project while a sandbox runs get Windows'
|
|
2
|
-
// "downloaded from the internet" mark (the Zone.Identifier stream, zone 3). Running one on this PC then goes through
|
|
3
|
-
// SmartScreen, and PowerShell's RemoteSigned policy refuses an unsigned marked script. So something an agent planted is
|
|
4
|
-
// not run by a double-click or a habit. Runs in the background watcher; only the mark is written, never the file.
|
|
5
|
-
import fs from 'node:fs';
|
|
6
|
-
import path from 'node:path';
|
|
7
|
-
import { z } from 'zod';
|
|
8
|
-
import { readValid, writeJsonAtomic } from '../shared/rundir.js';
|
|
9
|
-
/** What Windows runs when you open it (not source files such as .js or .py: those need a program you choose). */
|
|
10
|
-
export const RISKY = /\.(exe|dll|com|scr|pif|msi|msix|msp|appx|appxbundle|bat|cmd|ps1|psm1|psd1|vbs|vbe|wsf|wsh|hta|lnk|url|jar|reg|cpl|application|gadget|chm)$/i;
|
|
11
|
-
const MARK = '[ZoneTransfer]\r\nZoneId=3\r\nHostUrl=about:windows-development-sandbox\r\n';
|
|
12
|
-
/** Folders not worth watching closely (git's own files; dependency and build folders are still marked). */
|
|
13
|
-
const SKIP = /(^|[\\/])\.git([\\/]|$)/i;
|
|
14
|
-
/** Marks one file if it is a program or script (and a plain file, not a link). Returns true when it marked it. */
|
|
15
|
-
export const markFromSandbox = (file) => {
|
|
16
|
-
if (!RISKY.test(file) || SKIP.test(file))
|
|
17
|
-
return false;
|
|
18
|
-
try {
|
|
19
|
-
const stat = fs.lstatSync(file);
|
|
20
|
-
if (!stat.isFile())
|
|
21
|
-
return false;
|
|
22
|
-
fs.writeFileSync(file + ':Zone.Identifier', MARK);
|
|
23
|
-
return true;
|
|
24
|
-
}
|
|
25
|
-
catch {
|
|
26
|
-
return false;
|
|
27
|
-
}
|
|
28
|
-
};
|
|
29
|
-
/** Has this file the mark? */
|
|
30
|
-
export const isMarked = (file) => {
|
|
31
|
-
try {
|
|
32
|
-
return fs.readFileSync(file + ':Zone.Identifier', 'utf8').includes('ZoneId=3');
|
|
33
|
-
}
|
|
34
|
-
catch {
|
|
35
|
-
return false;
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
/** Watches the projects while the sandbox runs and marks what appears or changes; returns a function that stops it. */
|
|
39
|
-
export const watchAndMark = (projects, note = () => undefined) => {
|
|
40
|
-
const pending = new Set();
|
|
41
|
-
let timer;
|
|
42
|
-
const flush = () => {
|
|
43
|
-
timer = undefined;
|
|
44
|
-
const marked = [...pending].filter(markFromSandbox);
|
|
45
|
-
pending.clear();
|
|
46
|
-
if (marked.length)
|
|
47
|
-
note('marked as from the sandbox (SmartScreen asks before they run here): ' + marked.slice(0, 10).map((f) => path.basename(f)).join(', ') + (marked.length > 10 ? ' and ' + (marked.length - 10) + ' more' : ''));
|
|
48
|
-
};
|
|
49
|
-
const watchers = projects.flatMap((project) => {
|
|
50
|
-
try {
|
|
51
|
-
return [fs.watch(project, { recursive: true }, (_event, file) => {
|
|
52
|
-
const rel = file ? String(file) : '';
|
|
53
|
-
if (!rel || !RISKY.test(rel) || SKIP.test(rel))
|
|
54
|
-
return;
|
|
55
|
-
pending.add(path.join(project, rel));
|
|
56
|
-
timer ??= setTimeout(flush, 1000);
|
|
57
|
-
})];
|
|
58
|
-
}
|
|
59
|
-
catch {
|
|
60
|
-
return [];
|
|
61
|
-
}
|
|
62
|
-
});
|
|
63
|
-
return () => { watchers.forEach((w) => w.close()); clearTimeout(timer); if (pending.size)
|
|
64
|
-
flush(); };
|
|
65
|
-
};
|
|
66
|
-
// ---- what the watcher marks, and the size of the persisted data (host-only files next to the sync state) ----------
|
|
67
|
-
const marksFile = (storageRoot, dataPath) => path.join(storageRoot, 'sync', path.basename(dataPath) + '-mark.json');
|
|
68
|
-
const sizeFile = (storageRoot, dataPath) => path.join(storageRoot, 'sync', path.basename(dataPath) + '-size.json');
|
|
69
|
-
/** The projects to watch and mark (empty: storage.markSandboxFiles is off). */
|
|
70
|
-
export const saveMarkedProjects = (storageRoot, dataPath, projects) => writeJsonAtomic(marksFile(storageRoot, dataPath), projects);
|
|
71
|
-
export const readMarkedProjects = (storageRoot, dataPath) => readValid(z.array(z.string().max(1024)).max(64), marksFile(storageRoot, dataPath)) ?? [];
|
|
72
|
-
/** The data folder's size, measured by the watcher when a sandbox closes (measuring at launch would be slow). */
|
|
73
|
-
export const saveDataSize = (storageRoot, dataPath, bytes) => writeJsonAtomic(sizeFile(storageRoot, dataPath), { bytes, at: new Date().toISOString() });
|
|
74
|
-
export const readDataSize = (storageRoot, dataPath) => readValid(z.object({ bytes: z.number().min(0), at: z.string().max(40) }), sizeFile(storageRoot, dataPath));
|
package/dist/host/pc-scan.d.ts
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { type Database } from '../core/detect-databases.js';
|
|
2
|
-
import { type AutoToolchain } from '../core/detect-toolchains.js';
|
|
3
|
-
/** Languages this PC has (their commands on PATH; Windows' Store stubs for python do not count). */
|
|
4
|
-
export declare const pcLanguages: () => AutoToolchain[];
|
|
5
|
-
/** Database services installed on this PC (names from the service control manager; nothing is started or changed). */
|
|
6
|
-
export declare const hostDatabases: () => Database[];
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
export interface RegValue {
|
|
2
|
-
key: string;
|
|
3
|
-
name: string;
|
|
4
|
-
kind: string;
|
|
5
|
-
value: string | number | string[];
|
|
6
|
-
}
|
|
7
|
-
/** Formats captured values as a .reg file (UTF-16 friendly text; written as UTF-16LE with BOM). */
|
|
8
|
-
export declare const toRegFile: (values: RegValue[]) => string;
|
|
9
|
-
/** Writes personalize.reg (+ the wallpaper image) into `<launch>\personalize`. Returns a short summary. */
|
|
10
|
-
export declare const capturePersonalization: (launchPath: string) => string;
|
package/dist/host/personalize.js
DELETED
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
// Captures the look of this desktop (theme, accent colour, taskbar, Explorer options, wallpaper, mouse/keyboard,
|
|
2
|
-
// regional formats) from HKCU as a .reg file the sandbox imports at logon. Only an allow-list of values is read.
|
|
3
|
-
import fs from 'node:fs';
|
|
4
|
-
import path from 'node:path';
|
|
5
|
-
import { ensureDir, errMsg, fileExists, isWin, runPowerShell } from '../core/util.js';
|
|
6
|
-
const VALUES = {
|
|
7
|
-
'Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize': ['AppsUseLightTheme', 'SystemUsesLightTheme', 'EnableTransparency', 'ColorPrevalence'],
|
|
8
|
-
'Software\\Microsoft\\Windows\\DWM': ['AccentColor', 'AccentColorInactive', 'ColorizationColor', 'ColorizationAfterglow', 'ColorizationColorBalance', 'ColorPrevalence', 'EnableWindowColorization'],
|
|
9
|
-
'Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Accent': ['AccentPalette', 'AccentColorMenu', 'StartColorMenu'],
|
|
10
|
-
'Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced': ['TaskbarAl', 'TaskbarSi', 'TaskbarDa', 'TaskbarMn', 'TaskbarGlomLevel', 'ShowTaskViewButton', 'Hidden', 'HideFileExt', 'ShowSuperHidden', 'LaunchTo', 'NavPaneExpandToCurrentFolder', 'NavPaneShowAllFolders', 'ShowCopilotButton', 'Start_TrackDocs', 'Start_Layout'],
|
|
11
|
-
'Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\StuckRects3': ['Settings'],
|
|
12
|
-
'Software\\Microsoft\\Windows\\CurrentVersion\\Search': ['SearchboxTaskbarMode'],
|
|
13
|
-
'Control Panel\\Desktop': ['WallpaperStyle', 'TileWallpaper', 'MenuShowDelay', 'CursorBlinkRate', 'DragFullWindows', 'FontSmoothing', 'FontSmoothingType', 'UserPreferencesMask'],
|
|
14
|
-
'Control Panel\\Colors': ['Background', 'Hilight', 'HotTrackingColor'],
|
|
15
|
-
'Control Panel\\Mouse': ['MouseSpeed', 'MouseSensitivity', 'MouseThreshold1', 'MouseThreshold2', 'DoubleClickSpeed', 'SwapMouseButtons'],
|
|
16
|
-
'Control Panel\\Keyboard': ['KeyboardDelay', 'KeyboardSpeed'],
|
|
17
|
-
'Control Panel\\International': ['sShortDate', 'sLongDate', 'sShortTime', 'sTimeFormat', 'iFirstDayOfWeek', 'sDecimal', 'sThousand', 'sList', 'iMeasure', 'iTime', 'iTLZero'],
|
|
18
|
-
'Control Panel\\Accessibility\\StickyKeys': ['Flags'],
|
|
19
|
-
};
|
|
20
|
-
const toHex = (bytes) => [...bytes].map((b) => b.toString(16).padStart(2, '0')).join(',');
|
|
21
|
-
const regString = (s) => '"' + s.replace(/\\/g, '\\\\').replace(/"/g, '\\"') + '"';
|
|
22
|
-
/** Formats captured values as a .reg file (UTF-16 friendly text; written as UTF-16LE with BOM). */
|
|
23
|
-
export const toRegFile = (values) => {
|
|
24
|
-
const byKey = new Map();
|
|
25
|
-
for (const v of values)
|
|
26
|
-
byKey.set(v.key, [...(byKey.get(v.key) ?? []), v]);
|
|
27
|
-
const lines = ['Windows Registry Editor Version 5.00', ''];
|
|
28
|
-
for (const [key, list] of byKey) {
|
|
29
|
-
lines.push('[HKEY_CURRENT_USER\\' + key + ']');
|
|
30
|
-
for (const v of list) {
|
|
31
|
-
const name = regString(v.name);
|
|
32
|
-
switch (v.kind) {
|
|
33
|
-
case 'DWord':
|
|
34
|
-
lines.push(name + '=dword:' + (Number(v.value) >>> 0).toString(16).padStart(8, '0'));
|
|
35
|
-
break;
|
|
36
|
-
case 'QWord':
|
|
37
|
-
lines.push(name + '=hex(b):' + toHex(Buffer.from(BigInt.asUintN(64, BigInt(v.value)).toString(16).padStart(16, '0'), 'hex').reverse()));
|
|
38
|
-
break;
|
|
39
|
-
case 'Binary':
|
|
40
|
-
lines.push(name + '=hex:' + toHex(Buffer.from(String(v.value), 'base64')));
|
|
41
|
-
break;
|
|
42
|
-
case 'ExpandString':
|
|
43
|
-
lines.push(name + '=hex(2):' + toHex(Buffer.from(String(v.value) + '\0', 'utf16le')));
|
|
44
|
-
break;
|
|
45
|
-
case 'MultiString':
|
|
46
|
-
lines.push(name + '=hex(7):' + toHex(Buffer.from(v.value.join('\0') + '\0\0', 'utf16le')));
|
|
47
|
-
break;
|
|
48
|
-
default: lines.push(name + '=' + regString(String(v.value)));
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
lines.push('');
|
|
52
|
-
}
|
|
53
|
-
return lines.join('\r\n');
|
|
54
|
-
};
|
|
55
|
-
const CAPTURE_SCRIPT = (spec) => [
|
|
56
|
-
'$ErrorActionPreference = "SilentlyContinue"',
|
|
57
|
-
'$spec = \'' + JSON.stringify(spec).replace(/'/g, "''") + '\' | ConvertFrom-Json',
|
|
58
|
-
'$out = @()',
|
|
59
|
-
'foreach ($p in $spec.PSObject.Properties) {',
|
|
60
|
-
' $key = Get-Item -LiteralPath ("HKCU:\\" + $p.Name)',
|
|
61
|
-
' if (-not $key) { continue }',
|
|
62
|
-
' foreach ($name in $p.Value) {',
|
|
63
|
-
' $raw = $key.GetValue($name, $null, "DoNotExpandEnvironmentNames")',
|
|
64
|
-
' if ($null -eq $raw) { continue }',
|
|
65
|
-
' $kind = $key.GetValueKind($name).ToString()',
|
|
66
|
-
' if ($kind -eq "Binary") { $raw = [Convert]::ToBase64String([byte[]]$raw) }',
|
|
67
|
-
' $out += [pscustomobject]@{ key = $p.Name; name = $name; kind = $kind; value = $raw }',
|
|
68
|
-
' }',
|
|
69
|
-
'}',
|
|
70
|
-
'$wall = (Get-ItemProperty -LiteralPath "HKCU:\\Control Panel\\Desktop").WallPaper',
|
|
71
|
-
'[pscustomobject]@{ values = $out; wallpaper = $wall } | ConvertTo-Json -Depth 5 -Compress',
|
|
72
|
-
].join('\n');
|
|
73
|
-
/** Writes personalize.reg (+ the wallpaper image) into `<launch>\personalize`. Returns a short summary. */
|
|
74
|
-
export const capturePersonalization = (launchPath) => {
|
|
75
|
-
if (!isWin)
|
|
76
|
-
return 'skipped (not Windows)';
|
|
77
|
-
try {
|
|
78
|
-
const { status, stdout } = runPowerShell(CAPTURE_SCRIPT(VALUES), true);
|
|
79
|
-
if (status !== 0)
|
|
80
|
-
return 'skipped (registry read failed)';
|
|
81
|
-
// runPowerShell has PowerShell write UTF-8 (non-ASCII date formats and wallpaper paths survive); a BOM is tolerated.
|
|
82
|
-
const parsed = JSON.parse(stdout.replace(/^/, '').trim());
|
|
83
|
-
const values = parsed.values === null ? [] : Array.isArray(parsed.values) ? parsed.values : [parsed.values];
|
|
84
|
-
const dir = path.join(launchPath, 'personalize');
|
|
85
|
-
ensureDir(dir);
|
|
86
|
-
fs.writeFileSync(path.join(dir, 'personalize.reg'), '' + toRegFile(values), 'utf16le');
|
|
87
|
-
const wallpaper = parsed.wallpaper ?? '';
|
|
88
|
-
const themesCopy = path.join(process.env.APPDATA ?? '', 'Microsoft', 'Windows', 'Themes', 'TranscodedWallpaper');
|
|
89
|
-
const source = fileExists(wallpaper) ? wallpaper : fileExists(themesCopy) ? themesCopy : null;
|
|
90
|
-
if (source)
|
|
91
|
-
fs.copyFileSync(source, path.join(dir, 'wallpaper' + (path.extname(source) || '.jpg')));
|
|
92
|
-
return values.length + ' settings' + (source ? ' + wallpaper' : '');
|
|
93
|
-
}
|
|
94
|
-
catch (e) {
|
|
95
|
-
return 'skipped (' + errMsg(e) + ')';
|
|
96
|
-
}
|
|
97
|
-
};
|
package/dist/host/platform.js
DELETED
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
import fs from 'node:fs';
|
|
2
|
-
import os from 'node:os';
|
|
3
|
-
import path from 'node:path';
|
|
4
|
-
import { spawn, spawnSync } from 'node:child_process';
|
|
5
|
-
import { SYSTEM } from '../shared/system.js';
|
|
6
|
-
import { refuseInSelfTest } from './test-guard.js';
|
|
7
|
-
import { updateRestartPending } from './stops.js';
|
|
8
|
-
import { commandsDir, realAgent } from './agent-commands.js';
|
|
9
|
-
import { dirExists, ensureDir, fail, fileExists, findOnPath, homeDir, isWin, realPath } from '../core/util.js';
|
|
10
|
-
const findHarnessExe = (config, harnessName) => {
|
|
11
|
-
const harness = config.harnesses[harnessName];
|
|
12
|
-
if (!harness?.hostExecutable)
|
|
13
|
-
return null;
|
|
14
|
-
const explicit = harness.hostDir && harness.hostDir !== 'auto' ? path.join(harness.hostDir, harness.hostExecutable) : null;
|
|
15
|
-
const found = explicit
|
|
16
|
-
? (fileExists(explicit) ? explicit : null)
|
|
17
|
-
: findOnPath([harness.hostExecutable]) ?? [path.join(homeDir(), '.local', 'bin', harness.hostExecutable)].find(fileExists) ?? null;
|
|
18
|
-
if (!found)
|
|
19
|
-
return null;
|
|
20
|
-
const real = realPath(found);
|
|
21
|
-
return { dir: path.dirname(real), file: path.basename(real) };
|
|
22
|
-
};
|
|
23
|
-
/** Git for Windows root (the folder with cmd\git.exe and bin\bash.exe), from git on PATH. */
|
|
24
|
-
const findGitRoot = () => {
|
|
25
|
-
const git = findOnPath(['git.exe']);
|
|
26
|
-
if (!git)
|
|
27
|
-
return null;
|
|
28
|
-
const root = path.resolve(path.dirname(realPath(git)), '..');
|
|
29
|
-
return fileExists(path.join(root, 'bin', 'bash.exe')) ? root : null;
|
|
30
|
-
};
|
|
31
|
-
/** What can be copied from this PC instead of downloaded inside the sandbox. */
|
|
32
|
-
export const probeHost = (config, harnessName) => {
|
|
33
|
-
const nodeDir = isWin ? path.dirname(process.execPath) : null;
|
|
34
|
-
const copy = config.provisioning.copyFromHost;
|
|
35
|
-
const nvmHome = process.env.NVM_HOME;
|
|
36
|
-
const nvmDir = copy && nvmHome && dirExists(nvmHome) ? realPath(nvmHome) : null;
|
|
37
|
-
const hasNode = (dir) => fileExists(path.join(dir, 'node.exe')) && fileExists(path.join(dir, 'node_modules', 'npm', 'bin', 'npm-cli.js'));
|
|
38
|
-
// One source for Node: nvm's copy of this version when there is one, otherwise the Node folder itself.
|
|
39
|
-
const nvmNode = Boolean(nvmDir && hasNode(path.join(nvmDir, process.version)));
|
|
40
|
-
return {
|
|
41
|
-
nodeDir: copy && !nvmNode && nodeDir && hasNode(nodeDir) ? realPath(nodeDir) : null,
|
|
42
|
-
harnessExe: copy ? findHarnessExe(config, harnessName) : null,
|
|
43
|
-
gitDir: copy && config.provisioning.git.enabled ? findGitRoot() : null,
|
|
44
|
-
nvmDir,
|
|
45
|
-
hostNodeVersion: process.version,
|
|
46
|
-
nvmNode,
|
|
47
|
-
volta: Boolean(process.env.VOLTA_HOME),
|
|
48
|
-
pyenv: Boolean(process.env.PYENV ?? process.env.PYENV_ROOT ?? process.env.PYENV_HOME),
|
|
49
|
-
};
|
|
50
|
-
};
|
|
51
|
-
const SANDBOX_PROCESSES = ['WindowsSandboxClient.exe', 'WindowsSandboxRemoteSession.exe', 'WindowsSandbox.exe'];
|
|
52
|
-
/**
|
|
53
|
-
* Running INSIDE a Windows Sandbox this tool started (its launch folder and data folder are mapped in): then the CLI
|
|
54
|
-
* talks to the sandbox it is in, through C:\\AgentData and loopback, instead of looking for one on a PC.
|
|
55
|
-
*/
|
|
56
|
-
export const insideSandbox = () => isWin && !process.env.AGENT_SANDBOX_HOST_ONLY && fs.existsSync('C:\\AgentLaunch\\session.json') && fs.existsSync('C:\\AgentData\\run');
|
|
57
|
-
export const GUEST_DATA_DIR = 'C:\\AgentData';
|
|
58
|
-
export const isSandboxRunning = () => {
|
|
59
|
-
if (!isWin)
|
|
60
|
-
return false;
|
|
61
|
-
if (insideSandbox())
|
|
62
|
-
return true;
|
|
63
|
-
const result = spawnSync(SYSTEM.tasklist(), ['/NH', '/FO', 'CSV'], { encoding: 'utf8', windowsHide: true });
|
|
64
|
-
const out = (result.stdout ?? '').toLowerCase();
|
|
65
|
-
return SANDBOX_PROCESSES.some((image) => out.includes('"' + image.toLowerCase() + '"'));
|
|
66
|
-
};
|
|
67
|
-
export const sandboxFeatureInstalled = () => isWin && fileExists(path.join(process.env.WINDIR ?? 'C:\\Windows', 'System32', 'WindowsSandbox.exe'));
|
|
68
|
-
export const assertCanLaunch = () => {
|
|
69
|
-
if (!isWin)
|
|
70
|
-
fail('Windows Sandbox only runs on Windows.', 'Use sandbox generate to only write the files.');
|
|
71
|
-
if (!sandboxFeatureInstalled())
|
|
72
|
-
fail('Windows Sandbox is not enabled on this PC.', 'Run in an admin PowerShell, then reboot: Enable-WindowsOptionalFeature -Online -FeatureName Containers-DisposableClientVM -All (needs Windows Pro, Enterprise or Education)');
|
|
73
|
-
if (isSandboxRunning())
|
|
74
|
-
fail('A Windows Sandbox is already running (Windows allows one at a time).', 'Attach to it with sandbox claude -t, show it with sbx-show, or shut it down with sandbox stop.');
|
|
75
|
-
};
|
|
76
|
-
/** cmd.exe expands %VAR% and ^ even inside quotes, and a quote ends them: such a path could run something else. */
|
|
77
|
-
export const assertCmdSafePath = (file) => {
|
|
78
|
-
if (/[%"^\r\n]/.test(file))
|
|
79
|
-
fail('The storage folder path has a character that cannot be started safely: ' + file, 'Set storage.root to a folder without % " ^ in its path.');
|
|
80
|
-
};
|
|
81
|
-
export const startSandbox = (wsbPath) => {
|
|
82
|
-
refuseInSelfTest('start Windows Sandbox');
|
|
83
|
-
assertCmdSafePath(wsbPath);
|
|
84
|
-
const result = spawnSync(SYSTEM.cmd(), ['/d', '/c', 'start', '""', '"' + wsbPath + '"'], { stdio: 'inherit', windowsVerbatimArguments: true });
|
|
85
|
-
if (result.error)
|
|
86
|
-
throw result.error;
|
|
87
|
-
};
|
|
88
|
-
/** Runs a detached copy of this CLI (used for the background history/claude-mem sync watcher). */
|
|
89
|
-
export const spawnDetached = (entry, args) => {
|
|
90
|
-
refuseInSelfTest('start background programs');
|
|
91
|
-
// cwd = the install folder: the caller's folder is the workspace, which the sandbox can write.
|
|
92
|
-
spawn(process.execPath, [entry, ...args], { cwd: path.dirname(entry), detached: true, stdio: 'ignore', windowsHide: true }).unref();
|
|
93
|
-
};
|
|
94
|
-
export const hostClaude = (storageRoot, personal, args) => {
|
|
95
|
-
refuseInSelfTest('run Claude Code on this PC');
|
|
96
|
-
// Never this tool's own forwarding command (agentCommands), which would start a sandbox instead.
|
|
97
|
-
const exe = realAgent('claude', commandsDir(storageRoot));
|
|
98
|
-
if (!exe)
|
|
99
|
-
fail('Claude Code is not installed on this PC (no claude.exe or claude.cmd on PATH).', 'Install it: npm install -g @anthropic-ai/claude-code');
|
|
100
|
-
const env = { ...process.env };
|
|
101
|
-
if (!personal) {
|
|
102
|
-
const profile = path.join(storageRoot, 'host', 'claude');
|
|
103
|
-
ensureDir(profile);
|
|
104
|
-
env.CLAUDE_CONFIG_DIR = profile;
|
|
105
|
-
console.warn('Host Claude is NOT sandboxed. Using separate profile: ' + profile + ' (pass --personal to use your normal one).');
|
|
106
|
-
}
|
|
107
|
-
const result = exe.toLowerCase().endsWith('.cmd') ? spawnSync(SYSTEM.cmd(), ['/d', '/c', exe, ...args], { stdio: 'inherit', env }) : spawnSync(exe, args, { stdio: 'inherit', env });
|
|
108
|
-
if (result.error)
|
|
109
|
-
throw result.error;
|
|
110
|
-
return result.status ?? 1;
|
|
111
|
-
};
|
|
112
|
-
export const doctorRows = (config, harnessName, storageRoot, configPath) => {
|
|
113
|
-
const probe = probeHost(config, harnessName);
|
|
114
|
-
return [
|
|
115
|
-
['Config file', configPath ?? '(none; built-in defaults; create one with: sandbox config init)'],
|
|
116
|
-
['Windows', isWin ? 'yes' : 'NO (launch needs Windows)'],
|
|
117
|
-
['Windows Sandbox feature', sandboxFeatureInstalled() ? 'enabled' : 'NOT enabled'],
|
|
118
|
-
['Sandbox running', isSandboxRunning() ? 'YES' : 'no'],
|
|
119
|
-
['Free host RAM (MB)', String(Math.floor(os.freemem() / 1048576))],
|
|
120
|
-
['Update restart pending', updateRestartPending() ? 'YES (Windows may restart on its own and close the sandbox; restart first or pause updates)' : 'no'],
|
|
121
|
-
['Keep this PC awake', config.sandbox.keepAwake ? 'yes, while a sandbox runs' : 'no (sandbox.keepAwake is off: the PC may sleep under running agents)'],
|
|
122
|
-
['Provisioning', config.provisioning.copyFromHost ? 'copy from this PC' + (config.provisioning.fallbackToInstall ? ', fall back to download' : ', no fallback') : 'download inside sandbox'],
|
|
123
|
-
['Host Node (runner)', probe.nvmNode ? 'nvm ' + probe.hostNodeVersion : probe.nodeDir ?? '(none; will download)'],
|
|
124
|
-
['Host nvm versions', probe.nvmDir ?? '(no NVM_HOME; versions will be downloaded)'],
|
|
125
|
-
['Host ' + harnessName, probe.harnessExe ? path.join(probe.harnessExe.dir, probe.harnessExe.file) : '(none; will npm install)'],
|
|
126
|
-
['Host Git for Windows', probe.gitDir ?? '(none with bash; PortableGit will be downloaded)'],
|
|
127
|
-
['Storage root', storageRoot + (dirExists(storageRoot) ? '' : ' (will be created)')],
|
|
128
|
-
];
|
|
129
|
-
};
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { type ProjectFile } from '../core/detect-databases.js';
|
|
2
|
-
/** Manifest-type files in the project, up to 3 folders deep. Links are not followed (the workspace may be guest-written). */
|
|
3
|
-
export declare const readProjectFiles: (root: string, depth?: number) => ProjectFile[];
|
|
4
|
-
/** File names in the project and its direct sub-folders ("api/go.mod"), for toolchain detection. No links followed. */
|
|
5
|
-
export declare const projectEntries: (root: string) => string[];
|
|
6
|
-
/** Scripts in the project root or one folder down that set up MSVC (vcvars*.bat, vswhere): read with bounded effort. */
|
|
7
|
-
export declare const msvcHint: (root: string) => string | undefined;
|
package/dist/host/projects.d.ts
DELETED
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
import type { Missing } from '../core/project-policy.js';
|
|
3
|
-
import { PROJECTS_GUEST, type ProjectEntry, type RootMapping } from '../shared/projects.js';
|
|
4
|
-
import { type Wsb } from './wsb.js';
|
|
5
|
-
export { PROJECTS_GUEST };
|
|
6
|
-
export type { ProjectEntry };
|
|
7
|
-
declare const Entry: z.ZodObject<{
|
|
8
|
-
name: z.ZodString;
|
|
9
|
-
host: z.ZodString;
|
|
10
|
-
guest: z.ZodString;
|
|
11
|
-
primary: z.ZodBoolean;
|
|
12
|
-
mechanism: z.ZodEnum<{
|
|
13
|
-
root: "root";
|
|
14
|
-
launch: "launch";
|
|
15
|
-
boot: "boot";
|
|
16
|
-
wsb: "wsb";
|
|
17
|
-
}>;
|
|
18
|
-
registeredAt: z.ZodString;
|
|
19
|
-
}, z.core.$strict>;
|
|
20
|
-
declare const Registry: z.ZodObject<{
|
|
21
|
-
launchId: z.ZodString;
|
|
22
|
-
protections: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodBoolean, z.ZodString]>>;
|
|
23
|
-
roots: z.ZodArray<z.ZodObject<{
|
|
24
|
-
host: z.ZodString;
|
|
25
|
-
guest: z.ZodString;
|
|
26
|
-
}, z.core.$strict>>;
|
|
27
|
-
projects: z.ZodArray<z.ZodObject<{
|
|
28
|
-
name: z.ZodString;
|
|
29
|
-
host: z.ZodString;
|
|
30
|
-
guest: z.ZodString;
|
|
31
|
-
primary: z.ZodBoolean;
|
|
32
|
-
mechanism: z.ZodEnum<{
|
|
33
|
-
root: "root";
|
|
34
|
-
launch: "launch";
|
|
35
|
-
boot: "boot";
|
|
36
|
-
wsb: "wsb";
|
|
37
|
-
}>;
|
|
38
|
-
registeredAt: z.ZodString;
|
|
39
|
-
}, z.core.$strict>>;
|
|
40
|
-
atBoot: z.ZodOptional<z.ZodObject<{
|
|
41
|
-
memoryMb: z.ZodNullable<z.ZodNumber>;
|
|
42
|
-
mappings: z.ZodArray<z.ZodObject<{
|
|
43
|
-
host: z.ZodString;
|
|
44
|
-
guest: z.ZodString;
|
|
45
|
-
readOnly: z.ZodBoolean;
|
|
46
|
-
}, z.core.$strict>>;
|
|
47
|
-
widened: z.ZodRecord<z.ZodString, z.ZodString>;
|
|
48
|
-
}, z.core.$strict>>;
|
|
49
|
-
}, z.core.$strict>;
|
|
50
|
-
export type AtBoot = NonNullable<z.output<typeof Registry>['atBoot']>;
|
|
51
|
-
export type RegistryEntry = z.output<typeof Entry>;
|
|
52
|
-
export type ProjectRegistry = z.output<typeof Registry>;
|
|
53
|
-
export declare const readRegistry: (storageRoot: string) => ProjectRegistry | null;
|
|
54
|
-
/** At launch: the launch folder, the projects mapped with it, and the roots. */
|
|
55
|
-
export declare const startRegistry: (storageRoot: string, o: {
|
|
56
|
-
launchId: string;
|
|
57
|
-
protections: ProjectRegistry["protections"];
|
|
58
|
-
primary: RootMapping;
|
|
59
|
-
roots: RootMapping[];
|
|
60
|
-
boot: RootMapping[];
|
|
61
|
-
atBoot?: AtBoot;
|
|
62
|
-
}) => RegistryEntry;
|
|
63
|
-
/** Reads the memory and mapped folders back from a .wsb this tool wrote (host-only launch folder; bounded). */
|
|
64
|
-
export declare const parseWsbBoot: (xml: string) => AtBoot;
|
|
65
|
-
/**
|
|
66
|
-
* What the running sandbox booted with. A sandbox started by 1.4.0 or older has no record: it is read from the .wsb in
|
|
67
|
-
* its launch folder (host-only storage) and recorded. null when neither is there.
|
|
68
|
-
*/
|
|
69
|
-
export declare const bootRecordOf: (storageRoot: string, launchPath: string | null) => AtBoot | null;
|
|
70
|
-
/**
|
|
71
|
-
* Why a folder cannot join the running sandbox without a restart (the caller offers one). With `missing`: it could
|
|
72
|
-
* join, but you chose to restart for what it wants at boot (core/project-policy.ts).
|
|
73
|
-
*/
|
|
74
|
-
export declare class NeedsRestart extends Error {
|
|
75
|
-
readonly hostDir: string;
|
|
76
|
-
readonly reason: string;
|
|
77
|
-
readonly missing?: Missing | undefined;
|
|
78
|
-
constructor(hostDir: string, reason: string, missing?: Missing | undefined);
|
|
79
|
-
}
|
|
80
|
-
export interface ProjectMapper {
|
|
81
|
-
/** The projects of the running sandbox (the launch folder first). */
|
|
82
|
-
list(): RegistryEntry[];
|
|
83
|
-
/** Makes a folder of this PC a project of the running sandbox; throws NeedsRestart when that needs a restart. */
|
|
84
|
-
register(hostDir: string): RegistryEntry;
|
|
85
|
-
/** Forgets a project (never the launch folder). Its folder stays visible until the next start if it is mapped. */
|
|
86
|
-
unregister(name: string): void;
|
|
87
|
-
}
|
|
88
|
-
export interface MapperOptions {
|
|
89
|
-
storageRoot: string;
|
|
90
|
-
packageRoot: string;
|
|
91
|
-
wsbShare: boolean;
|
|
92
|
-
detect?: () => Wsb | null;
|
|
93
|
-
}
|
|
94
|
-
/** Roots first (instant), then `wsb share` where the Windows Sandbox CLI exists, else NeedsRestart. */
|
|
95
|
-
export declare const projectMapper: (o: MapperOptions) => ProjectMapper;
|
|
96
|
-
/** Which project of the running sandbox a folder on this PC is in, and where that folder is inside. */
|
|
97
|
-
export interface ProjectHere {
|
|
98
|
-
project: RegistryEntry;
|
|
99
|
-
guestDir: string;
|
|
100
|
-
}
|
|
101
|
-
export declare const projectHere: (storageRoot: string, hostDir: string) => ProjectHere | null;
|
|
102
|
-
/** The running sandbox's root containing this folder, if any. */
|
|
103
|
-
export declare const rootHere: (storageRoot: string, hostDir: string) => RootMapping | null;
|
|
104
|
-
declare const Known: z.ZodObject<{
|
|
105
|
-
projects: z.ZodArray<z.ZodObject<{
|
|
106
|
-
host: z.ZodString;
|
|
107
|
-
lastUsed: z.ZodString;
|
|
108
|
-
}, z.core.$strict>>;
|
|
109
|
-
}, z.core.$strict>;
|
|
110
|
-
export type KnownProject = z.output<typeof Known>['projects'][number];
|
|
111
|
-
export declare const readKnown: (storageRoot: string) => KnownProject[];
|
|
112
|
-
export declare const rememberProject: (storageRoot: string, hostDir: string) => void;
|
|
113
|
-
export declare const forgetProject: (storageRoot: string, hostDir: string) => boolean;
|
|
114
|
-
/**
|
|
115
|
-
* projects.all: the known projects mapped at boot on their own (existing folders, not excluded, not the launch folder,
|
|
116
|
-
* not inside it or a root, which already show them). Pure apart from checking that the folders exist.
|
|
117
|
-
*/
|
|
118
|
-
export declare const allProjectsToMap: (known: string[], o: {
|
|
119
|
-
primary: string;
|
|
120
|
-
roots: string[];
|
|
121
|
-
exclude: string[];
|
|
122
|
-
exists?: (p: string) => boolean;
|
|
123
|
-
}) => string[];
|