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
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
import { DATABASES, detectDatabases } from '
|
|
1
|
+
import { DATABASES, detectDatabases } from '../../core/detect/index.js';
|
|
2
2
|
import { hostDatabases } from './pc-scan.js';
|
|
3
3
|
import { readProjectFiles } from './project-scan.js';
|
|
4
4
|
/** The version a compose file pins (postgres:16-alpine -> 16, mongo:7.0 -> 7.0), if any. */
|
|
5
|
-
|
|
5
|
+
function pinnedVersion(files, image) {
|
|
6
6
|
for (const file of files) {
|
|
7
7
|
const match = image.exec(file.text);
|
|
8
8
|
if (match?.[1] && /^\d+(\.\d+)?/.test(match[1]))
|
|
9
9
|
return /^\d+(\.\d+)?/.exec(match[1])[0];
|
|
10
10
|
}
|
|
11
11
|
return null;
|
|
12
|
-
}
|
|
12
|
+
}
|
|
13
13
|
/**
|
|
14
14
|
* What to run in this sandbox: databases set to true, plus "auto" ones the project needs. SQL Server is reported (so
|
|
15
15
|
* the user hears about it) but cannot run inside Windows Sandbox.
|
|
16
16
|
*/
|
|
17
|
-
export
|
|
17
|
+
export function planDatabases(config, workspace, probe = {}) {
|
|
18
18
|
const autos = DATABASES.filter((db) => config[db].enabled === 'auto');
|
|
19
|
-
const files = autos.length ? probe.files ?? readProjectFiles(workspace) : [];
|
|
19
|
+
const files = autos.length ? (probe.files ?? readProjectFiles(workspace)) : [];
|
|
20
20
|
const detected = autos.length ? detectDatabases(files, probe.host ?? hostDatabases) : [];
|
|
21
21
|
const plan = databasePlanner(config, files.filter((f) => /compose/i.test(f.path)));
|
|
22
22
|
return DATABASES.flatMap((database) => {
|
|
@@ -28,25 +28,36 @@ export const planDatabases = (config, workspace, probe = {}) => {
|
|
|
28
28
|
return [plan(database, found.reasons)];
|
|
29
29
|
return [];
|
|
30
30
|
});
|
|
31
|
-
}
|
|
31
|
+
}
|
|
32
32
|
/** Every database the sandbox can run, so `sbx-db start <name>` works for ones that did not start at boot. */
|
|
33
|
-
export
|
|
33
|
+
export function databaseCatalog(config) {
|
|
34
34
|
const plan = databasePlanner(config, []);
|
|
35
35
|
return DATABASES.filter((db) => db !== 'sqlserver').map((db) => plan(db, ['started with sbx-db']));
|
|
36
|
-
}
|
|
36
|
+
}
|
|
37
37
|
/** Version (a compose file's image tag wins), port and admin UI for one database. */
|
|
38
|
-
|
|
38
|
+
function databasePlanner(config, compose) {
|
|
39
39
|
const versions = {
|
|
40
|
-
postgres: pinnedVersion(compose, /image:\s*["']?(?:[\w.-]+\/)*postgres:([\w.-]+)/i) ??
|
|
40
|
+
postgres: pinnedVersion(compose, /image:\s*["']?(?:[\w.-]+\/)*postgres:([\w.-]+)/i) ??
|
|
41
|
+
(config.postgres.version === 'latest' ? 'latest' : config.postgres.version),
|
|
41
42
|
mysql: config.mysql.version,
|
|
42
43
|
mongodb: pinnedVersion(compose, /image:\s*["']?(?:[\w.-]+\/)*mongo:([\w.-]+)/i) ?? config.mongodb.version,
|
|
43
44
|
redis: 'latest',
|
|
44
45
|
dynamodb: 'latest',
|
|
45
46
|
sqlserver: '',
|
|
46
47
|
};
|
|
47
|
-
const ports = {
|
|
48
|
+
const ports = {
|
|
49
|
+
postgres: config.postgres.port,
|
|
50
|
+
mysql: config.mysql.port,
|
|
51
|
+
mongodb: config.mongodb.port,
|
|
52
|
+
redis: config.redis.port,
|
|
53
|
+
dynamodb: config.dynamodb.port,
|
|
54
|
+
sqlserver: 1433,
|
|
55
|
+
};
|
|
48
56
|
return (database, reasons) => ({
|
|
49
|
-
database,
|
|
57
|
+
database,
|
|
58
|
+
reasons,
|
|
59
|
+
version: versions[database],
|
|
60
|
+
port: ports[database],
|
|
50
61
|
...(database === 'dynamodb' && config.dynamodb.admin ? { adminPort: config.dynamodb.adminPort } : {}),
|
|
51
62
|
});
|
|
52
|
-
}
|
|
63
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
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 the sibling files.
|
|
3
|
+
import fs from 'node:fs';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import crypto from 'node:crypto';
|
|
6
|
+
import { widenForProjects } from '../../core/local-config/index.js';
|
|
7
|
+
import { dirExists, ensureDir, fail, writeJson } from '../../core/util/index.js';
|
|
8
|
+
import { capturePersonalization, stageClaudeProfile } from '../profile/index.js';
|
|
9
|
+
import { assertTestWritable } from '../test-guard.js';
|
|
10
|
+
import { planBootProjects } from './boot-projects.js';
|
|
11
|
+
import { planDatabases } from './database-plan.js';
|
|
12
|
+
import { collectMappings } from './mappings.js';
|
|
13
|
+
import { guestSession, logonEnv } from './session-file.js';
|
|
14
|
+
import { copyRuntime, stageGitIdentity, stageHooks } from './stage.js';
|
|
15
|
+
import { decideProjectToolchains } from './toolchains.js';
|
|
16
|
+
import { buildWsb, resolveMemoryMb } from './wsb-file.js';
|
|
17
|
+
const NO_PROFILE = { hostDir: null, staged: [], skipped: [], credentials: false, secretsRemoved: [] };
|
|
18
|
+
export function generateSandbox(given) {
|
|
19
|
+
// Several projects at boot: the sandbox also gets what the others want and you allowed (core/local-config).
|
|
20
|
+
const others = given.bootWants?.projects ?? [];
|
|
21
|
+
const boot = planBootProjects({
|
|
22
|
+
run: given.run,
|
|
23
|
+
packageRoot: given.packageRoot,
|
|
24
|
+
extraProjects: given.extraProjects,
|
|
25
|
+
knownProjects: given.knownProjects,
|
|
26
|
+
});
|
|
27
|
+
const wide = widenForProjects(given.run.config, others, { keepOff: given.bootWants?.keepOff, exists: dirExists });
|
|
28
|
+
const o = { ...given, run: { ...given.run, config: wide.config } };
|
|
29
|
+
const { config, dataPath, workspaceHost, harnessName, storageRoot } = o.run;
|
|
30
|
+
const harness = harnessName === 'none'
|
|
31
|
+
? null
|
|
32
|
+
: (config.harnesses[harnessName] ??
|
|
33
|
+
fail('Unknown agent: ' + harnessName, 'Configured agents: ' + Object.keys(config.harnesses).join(', ')));
|
|
34
|
+
if (!dirExists(workspaceHost))
|
|
35
|
+
fail('The workspace folder does not exist: ' + workspaceHost, 'cd into the project first.');
|
|
36
|
+
assertTestWritable(storageRoot);
|
|
37
|
+
assertTestWritable(dataPath);
|
|
38
|
+
// Checked before anything is written, so a refusal leaves nothing behind.
|
|
39
|
+
const memoryMb = Math.max(resolveMemoryMb(config.sandbox, o.freeMemoryBytes), ...others.map((p) => (typeof p.config.sandbox.memoryMb === 'number' ? p.config.sandbox.memoryMb : 0)));
|
|
40
|
+
const launchId = Date.now() + '-' + crypto.randomBytes(3).toString('hex');
|
|
41
|
+
const launchPath = path.join(storageRoot, 'launches', launchId);
|
|
42
|
+
ensureDir(launchPath);
|
|
43
|
+
ensureDir(dataPath);
|
|
44
|
+
const mappingNotes = [];
|
|
45
|
+
const mappings = collectMappings(o, launchPath, boot, mappingNotes);
|
|
46
|
+
const profile = harnessName === 'claude'
|
|
47
|
+
? stageClaudeProfile(config.claudeProfile, launchPath, workspaceHost, config.secrets)
|
|
48
|
+
: NO_PROFILE;
|
|
49
|
+
stageGitIdentity(launchPath);
|
|
50
|
+
const personalization = config.personalization.enabled ? capturePersonalization(launchPath) : 'disabled';
|
|
51
|
+
const databases = o.databases ?? planDatabases(config.databases, workspaceHost);
|
|
52
|
+
const toolchains = decideProjectToolchains(o);
|
|
53
|
+
const session = guestSession(o, { launchId, launchPath, harness, boot, mappings, profile, databases, toolchains });
|
|
54
|
+
const sessionPath = path.join(launchPath, 'session.json');
|
|
55
|
+
writeJson(sessionPath, session);
|
|
56
|
+
fs.writeFileSync(path.join(launchPath, 'env.cmd'), logonEnv(session.workspace), 'utf8');
|
|
57
|
+
copyRuntime(o.packageRoot, launchPath);
|
|
58
|
+
stageHooks(o.packageRoot, launchPath, o.run.scripts);
|
|
59
|
+
const wsbPath = path.join(launchPath, 'agent.wsb');
|
|
60
|
+
fs.writeFileSync(wsbPath, buildWsb(config, memoryMb, mappings), 'utf8');
|
|
61
|
+
return {
|
|
62
|
+
wsbPath,
|
|
63
|
+
launchPath,
|
|
64
|
+
launchId,
|
|
65
|
+
sessionPath,
|
|
66
|
+
memoryMb,
|
|
67
|
+
bootConfig: config,
|
|
68
|
+
widened: wide.widened,
|
|
69
|
+
mappings,
|
|
70
|
+
profile,
|
|
71
|
+
personalization,
|
|
72
|
+
databases,
|
|
73
|
+
toolchains,
|
|
74
|
+
projects: { ...boot, notes: [...boot.notes, ...wide.notes] },
|
|
75
|
+
mappingNotes,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { generateSandbox } from './generate.js';
|
|
2
|
+
export { decideProjectToolchains } from './toolchains.js';
|
|
3
|
+
export { hostToolsOf, logonEnv } from './session-file.js';
|
|
4
|
+
export { GUEST, buildWsb, resolveMemoryMb } from './wsb-file.js';
|
|
5
|
+
export { MAX_BOOT_PROJECTS, planBootProjects, shownByRoot, type BootProjects } from './boot-projects.js';
|
|
6
|
+
export { databaseCatalog, planDatabases } from './database-plan.js';
|
|
7
|
+
export { msvcHint, projectEntries, readProjectFiles } from './project-scan.js';
|
|
8
|
+
export { hostDatabases, pcLanguages } from './pc-scan.js';
|
|
9
|
+
export { collectMappings } from './mappings.js';
|
|
10
|
+
export { RUNTIME_FILES, copyRuntime, gitIdentity, stageGitIdentity, stageHooks, stageScripts } from './stage.js';
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { generateSandbox } from './generate.js';
|
|
2
|
+
export { decideProjectToolchains } from './toolchains.js';
|
|
3
|
+
export { hostToolsOf, logonEnv } from './session-file.js';
|
|
4
|
+
export { GUEST, buildWsb, resolveMemoryMb } from './wsb-file.js';
|
|
5
|
+
export { MAX_BOOT_PROJECTS, planBootProjects, shownByRoot } from './boot-projects.js';
|
|
6
|
+
export { databaseCatalog, planDatabases } from './database-plan.js';
|
|
7
|
+
export { msvcHint, projectEntries, readProjectFiles } from './project-scan.js';
|
|
8
|
+
export { hostDatabases, pcLanguages } from './pc-scan.js';
|
|
9
|
+
export { collectMappings } from './mappings.js';
|
|
10
|
+
export { RUNTIME_FILES, copyRuntime, gitIdentity, stageGitIdentity, stageHooks, stageScripts } from './stage.js';
|
|
@@ -1,3 +1,8 @@
|
|
|
1
1
|
import type { GenerateOptions, ResolvedMapping } from '../../core/types.js';
|
|
2
|
-
import type
|
|
3
|
-
|
|
2
|
+
import { type BootProjects } from './boot-projects.js';
|
|
3
|
+
/**
|
|
4
|
+
* Every mapping, placed. An extra folder appears at its `guest` path, or at the same path as on this PC when it has
|
|
5
|
+
* none. A folder that cannot appear there (a reserved or relative path, one already in use, a folder that is not
|
|
6
|
+
* there, a whole drive, this tool's own folders) stops the launch; every such folder is listed in one message.
|
|
7
|
+
*/
|
|
8
|
+
export declare function collectMappings(o: GenerateOptions, launchPath: string, boot?: BootProjects, notes?: string[]): ResolvedMapping[];
|
|
@@ -1,38 +1,97 @@
|
|
|
1
|
-
|
|
1
|
+
// Which folders are mapped into the sandbox: the launch folder, the data folder, the workspace, your extra folders and
|
|
2
|
+
// the tools copied from this PC. Everything is checked before it can reach the .wsb.
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { assertNoGuestOverlap } from '../../core/config/index.js';
|
|
2
5
|
import { assertSafeMapping } from '../../core/safe-paths.js';
|
|
3
|
-
import { dirExists, fail } from '../../core/util.js';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
+
import { dirExists, errMsg, fail, isInsideOrEqual, UserError } from '../../core/util/index.js';
|
|
7
|
+
import { shownByRoot } from './boot-projects.js';
|
|
8
|
+
import { deriveGuest, isValidGuestPath, guestConflict, guestFix, PROJECTS_GUEST, sandboxFolder, tidyGuestPath, } from '../../shared/paths/index.js';
|
|
9
|
+
import { GUEST } from './wsb-file.js';
|
|
6
10
|
import { guestGitDir, planView } from '../workspace-view/index.js';
|
|
7
|
-
|
|
11
|
+
/**
|
|
12
|
+
* Every mapping, placed. An extra folder appears at its `guest` path, or at the same path as on this PC when it has
|
|
13
|
+
* none. A folder that cannot appear there (a reserved or relative path, one already in use, a folder that is not
|
|
14
|
+
* there, a whole drive, this tool's own folders) stops the launch; every such folder is listed in one message.
|
|
15
|
+
*/
|
|
16
|
+
export function collectMappings(o, launchPath, boot = { roots: [], projects: [], notes: [] }, notes = []) {
|
|
8
17
|
const { config, dataPath, workspaceHost, harnessName } = o.run;
|
|
9
18
|
assertGuestPath(config.guestWorkspace, 'guestWorkspace');
|
|
10
19
|
// workspaceFilter: the sandbox gets the project's filtered view (no git-ignored files) and its real .git beside it.
|
|
11
20
|
const view = planView(config, o.run.storageRoot, workspaceHost);
|
|
21
|
+
// A launch folder inside a project root is shown by the root, at the place it has whichever project starts the sandbox.
|
|
22
|
+
const inRoot = !view && shownByRoot(boot.roots, workspaceHost, config.guestWorkspace);
|
|
12
23
|
const mappings = [
|
|
13
24
|
{ host: launchPath, guest: GUEST.launch, readOnly: true },
|
|
14
25
|
{ host: dataPath, guest: GUEST.data, readOnly: false },
|
|
15
|
-
|
|
16
|
-
|
|
26
|
+
...(inRoot
|
|
27
|
+
? []
|
|
28
|
+
: [{ host: view ? view.options.view : workspaceHost, guest: config.guestWorkspace, readOnly: config.readOnly }]),
|
|
29
|
+
...(view?.hostGit
|
|
30
|
+
? [{ host: view.hostGit, guest: guestGitDir(config.guestWorkspace), readOnly: config.readOnly }]
|
|
31
|
+
: []),
|
|
17
32
|
];
|
|
33
|
+
// Project roots and other projects, so they can join the running sandbox without a restart (launch/boot-projects.ts).
|
|
34
|
+
const projects = [];
|
|
35
|
+
for (const m of [...boot.roots, ...boot.projects]) {
|
|
36
|
+
assertGuestPath(m.guest, 'project folder for ' + m.host);
|
|
37
|
+
projects.push({ host: m.host, guest: m.guest, readOnly: false });
|
|
38
|
+
}
|
|
39
|
+
const taken = [
|
|
40
|
+
{ guest: config.guestWorkspace, what: 'the project' },
|
|
41
|
+
...(view?.hostGit ? [{ guest: guestGitDir(config.guestWorkspace), what: "the project's .git" }] : []),
|
|
42
|
+
{ guest: PROJECTS_GUEST, what: 'the other projects' },
|
|
43
|
+
...projects.map((p) => ({ guest: p.guest, what: p.host })),
|
|
44
|
+
];
|
|
45
|
+
const outside = new Set((o.run.outsideMappings ?? []).map((h) => path.resolve(h).toLowerCase()));
|
|
46
|
+
const problems = [];
|
|
47
|
+
const missing = [];
|
|
48
|
+
const extra = [];
|
|
18
49
|
for (const m of config.mappings) {
|
|
19
50
|
const host = m.host;
|
|
20
|
-
assertGuestPath(m.guest, 'mappings[].guest for ' + host);
|
|
21
51
|
if (!dirExists(host)) {
|
|
22
|
-
if (m.optional)
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
52
|
+
if (m.optional)
|
|
53
|
+
missing.push(host);
|
|
54
|
+
else
|
|
55
|
+
problems.push(host + ': the folder does not exist. Fix: create it, correct the path, or mark the mapping "optional": true.');
|
|
56
|
+
continue;
|
|
27
57
|
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
58
|
+
try {
|
|
59
|
+
assertSafeMapping(host, o.packageRoot, o.run.storageRoot);
|
|
60
|
+
}
|
|
61
|
+
catch (e) {
|
|
62
|
+
problems.push(errMsg(e) + (e instanceof UserError && e.fix ? ' Fix: ' + e.fix : ''));
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
// A folder inside the project with no guest path of its own is already there (unless the filtered view hides it).
|
|
66
|
+
if (!m.guest && !view && isInsideOrEqual(workspaceHost, host)) {
|
|
67
|
+
notes.push(host +
|
|
68
|
+
' is inside the project, so it is already in the sandbox at ' +
|
|
69
|
+
deriveGuest(host, workspaceHost, config.guestWorkspace) +
|
|
70
|
+
'.');
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
const wanted = tidyGuestPath(m.guest ?? deriveGuest(host, workspaceHost, config.guestWorkspace));
|
|
74
|
+
// The same folder at the same place twice (your settings and the project file): once is enough.
|
|
75
|
+
if (extra.some((x) => x.host.toLowerCase() === host.toLowerCase() && x.guest.toLowerCase() === wanted.toLowerCase()))
|
|
76
|
+
continue;
|
|
77
|
+
const conflict = guestConflict(wanted, [...taken, ...extra.map((x) => ({ guest: x.guest, what: x.host }))]);
|
|
78
|
+
if (conflict) {
|
|
79
|
+
problems.push(host + ': ' + conflict + '. Fix: ' + guestFix(m.guest));
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
const label = outside.has(path.resolve(host).toLowerCase()) ? 'outside the project, allowed' : undefined;
|
|
83
|
+
extra.push({ host, guest: wanted, readOnly: m.readOnly, ...(label ? { label } : {}) });
|
|
35
84
|
}
|
|
85
|
+
if (problems.length)
|
|
86
|
+
fail((problems.length === 1
|
|
87
|
+
? 'A mapped folder cannot be used:\n '
|
|
88
|
+
: problems.length + ' mapped folders cannot be used:\n ') + problems.join('\n '));
|
|
89
|
+
if (missing.length)
|
|
90
|
+
notes.push('Skipped ' +
|
|
91
|
+
(missing.length === 1 ? 'an optional folder' : missing.length + ' optional folders') +
|
|
92
|
+
' not on this PC: ' +
|
|
93
|
+
missing.join(', '));
|
|
94
|
+
mappings.push(...extra, ...projects);
|
|
36
95
|
const { probe } = o;
|
|
37
96
|
if (probe.nodeDir)
|
|
38
97
|
mappings.push({ host: probe.nodeDir, guest: GUEST.hostTools + '\\node', readOnly: true });
|
|
@@ -42,13 +101,13 @@ export const collectMappings = (o, launchPath, boot = { roots: [], projects: [],
|
|
|
42
101
|
mappings.push({ host: probe.gitDir, guest: GUEST.hostTools + '\\git', readOnly: true });
|
|
43
102
|
if (probe.nvmDir)
|
|
44
103
|
mappings.push({ host: probe.nvmDir, guest: GUEST.hostTools + '\\nvm', readOnly: true });
|
|
104
|
+
// Placement keeps extra folders apart; this guards the rest (and where the folders really are: F:\x is C:\Mirror\F\x).
|
|
45
105
|
assertNoGuestOverlap(mappings);
|
|
46
|
-
// Same check on where the folders really are (F:\x and C:\Mirror\F\x are one place).
|
|
47
106
|
assertNoGuestOverlap(mappings.map((m) => ({ guest: sandboxFolder(m.guest) })));
|
|
48
107
|
return mappings;
|
|
49
|
-
}
|
|
108
|
+
}
|
|
50
109
|
/** The schema checks this already; the host re-checks what goes into the .wsb and the subst list anyway. */
|
|
51
|
-
|
|
110
|
+
function assertGuestPath(guest, what) {
|
|
52
111
|
if (!isValidGuestPath(guest))
|
|
53
112
|
fail(what + ' is not a usable sandbox folder: ' + guest, 'Use a folder under C:\\ (not Windows, Program Files, Users, AgentData, Mirror, ...) or on drive D: to Z:, e.g. C:\\Assets or F:\\SteamLibrary\\steamapps\\common\\Game.');
|
|
54
|
-
}
|
|
113
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type AutoToolchain, type Database } from '../../core/detect/index.js';
|
|
2
|
+
/** Languages this PC has (their commands on PATH; Windows' Store stubs for python do not count). */
|
|
3
|
+
export declare function pcLanguages(): AutoToolchain[];
|
|
4
|
+
/** Database services installed on this PC (names from the service control manager; nothing is started or changed). */
|
|
5
|
+
export declare function hostDatabases(): Database[];
|
|
@@ -2,13 +2,11 @@
|
|
|
2
2
|
import fs from 'node:fs';
|
|
3
3
|
import os from 'node:os';
|
|
4
4
|
import path from 'node:path';
|
|
5
|
-
import { pcHasPwsh } from '
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import { captureOutput, isWin } from '../core/util.js';
|
|
9
|
-
import { system32 } from '../shared/system.js';
|
|
5
|
+
import { AUTO_TOOLCHAINS, databasesFromServices, pcHasPwsh, } from '../../core/detect/index.js';
|
|
6
|
+
import { captureOutput, isWin } from '../../core/util/index.js';
|
|
7
|
+
import { system32 } from '../../shared/system.js';
|
|
10
8
|
/** This PC builds Rust with MSVC: rustup's default host is *-msvc (read from rustup's settings; nothing is run). */
|
|
11
|
-
|
|
9
|
+
function msvcRust() {
|
|
12
10
|
const settings = path.join(process.env.RUSTUP_HOME ?? path.join(os.homedir(), '.rustup'), 'settings.toml');
|
|
13
11
|
try {
|
|
14
12
|
return /default_host_triple\s*=\s*"[^"]*-msvc"/.test(fs.readFileSync(settings, 'utf8').slice(0, 64 * 1024));
|
|
@@ -16,22 +14,31 @@ const msvcRust = () => {
|
|
|
16
14
|
catch {
|
|
17
15
|
return false;
|
|
18
16
|
}
|
|
19
|
-
}
|
|
17
|
+
}
|
|
20
18
|
/** Languages this PC has (their commands on PATH; Windows' Store stubs for python do not count). */
|
|
21
|
-
export
|
|
19
|
+
export function pcLanguages() {
|
|
22
20
|
const dirs = (process.env.PATH ?? '').split(path.delimiter).filter((d) => d && !/WindowsApps/i.test(d));
|
|
23
21
|
const has = (...names) => dirs.some((d) => names.some((n) => fs.existsSync(path.join(d, n))));
|
|
24
22
|
const found = {
|
|
25
|
-
python: has('python.exe', 'py.exe'),
|
|
26
|
-
|
|
23
|
+
python: has('python.exe', 'py.exe'),
|
|
24
|
+
rust: has('cargo.exe', 'rustc.exe'),
|
|
25
|
+
cpp: has('gcc.exe', 'g++.exe', 'cl.exe', 'clang.exe'),
|
|
26
|
+
msvc: msvcRust(),
|
|
27
|
+
pwsh: pcHasPwsh(),
|
|
28
|
+
dotnet: has('dotnet.exe'),
|
|
29
|
+
go: has('go.exe'),
|
|
30
|
+
java: has('java.exe', 'javac.exe'),
|
|
31
|
+
ruby: has('ruby.exe'),
|
|
32
|
+
php: has('php.exe'),
|
|
33
|
+
deno: has('deno.exe'),
|
|
27
34
|
};
|
|
28
35
|
return AUTO_TOOLCHAINS.filter((t) => found[t]);
|
|
29
|
-
}
|
|
36
|
+
}
|
|
30
37
|
/** Database services installed on this PC (names from the service control manager; nothing is started or changed). */
|
|
31
|
-
export
|
|
38
|
+
export function hostDatabases() {
|
|
32
39
|
if (!isWin)
|
|
33
40
|
return [];
|
|
34
41
|
const output = captureOutput(system32('sc.exe'), ['query', 'type=', 'service', 'state=', 'all'], { timeout: 10000 });
|
|
35
42
|
const names = [...output.matchAll(/^SERVICE_NAME:\s*(.+)$/gm)].map((m) => m[1].trim());
|
|
36
43
|
return databasesFromServices(names);
|
|
37
|
-
}
|
|
44
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type ProjectFile } from '../../core/detect/index.js';
|
|
2
|
+
/** Manifest-type files in the project, up to 3 folders deep. Links are not followed (the guest may have written it). */
|
|
3
|
+
export declare function 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 function 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 function msvcHint(root: string): string | undefined;
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
// Reads a project the way detect
|
|
1
|
+
// Reads a project the way core/detect needs it for databases and toolchains (only manifest/config files, bounded).
|
|
2
2
|
import fs from 'node:fs';
|
|
3
3
|
import path from 'node:path';
|
|
4
|
-
import { INTERESTING_FILE } from '
|
|
4
|
+
import { INTERESTING_FILE } from '../../core/detect/index.js';
|
|
5
5
|
const SKIP = /^(node_modules|\.git|\.hg|\.svn|vendor|target|bin|obj|dist|build|out|\.next|\.nuxt|\.venv|venv|env|__pycache__|\.gradle|\.idea|\.vs|coverage|packages)$/i;
|
|
6
6
|
const MAX_FILES = 400;
|
|
7
7
|
const MAX_BYTES = 256 * 1024;
|
|
8
8
|
const MAX_FOLDERS = 2000;
|
|
9
9
|
/** Reads a file through one handle, only if that handle is a regular file of at most MAX_BYTES. */
|
|
10
|
-
|
|
10
|
+
function readSmallFile(file) {
|
|
11
11
|
let fd = null;
|
|
12
12
|
try {
|
|
13
13
|
fd = fs.openSync(file, 'r');
|
|
@@ -25,9 +25,9 @@ const readSmallFile = (file) => {
|
|
|
25
25
|
if (fd !== null)
|
|
26
26
|
fs.closeSync(fd);
|
|
27
27
|
}
|
|
28
|
-
}
|
|
29
|
-
/** Manifest-type files in the project, up to 3 folders deep. Links are not followed (the
|
|
30
|
-
export
|
|
28
|
+
}
|
|
29
|
+
/** Manifest-type files in the project, up to 3 folders deep. Links are not followed (the guest may have written it). */
|
|
30
|
+
export function readProjectFiles(root, depth = 3) {
|
|
31
31
|
const files = [];
|
|
32
32
|
let folders = 0;
|
|
33
33
|
const walk = (dir, level) => {
|
|
@@ -55,28 +55,36 @@ export const readProjectFiles = (root, depth = 3) => {
|
|
|
55
55
|
};
|
|
56
56
|
walk(root, 0);
|
|
57
57
|
return files;
|
|
58
|
-
}
|
|
58
|
+
}
|
|
59
59
|
/** File names in the project and its direct sub-folders ("api/go.mod"), for toolchain detection. No links followed. */
|
|
60
|
-
export
|
|
61
|
-
const list = (dir) => {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
60
|
+
export function projectEntries(root) {
|
|
61
|
+
const list = (dir) => {
|
|
62
|
+
try {
|
|
63
|
+
return fs.readdirSync(dir, { withFileTypes: true }).slice(0, 2000);
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
return [];
|
|
67
|
+
}
|
|
68
|
+
};
|
|
67
69
|
const top = list(root);
|
|
68
|
-
const below = top
|
|
69
|
-
.
|
|
70
|
+
const below = top
|
|
71
|
+
.filter((d) => d.isDirectory() && !d.name.startsWith('.') && !SKIP.test(d.name))
|
|
72
|
+
.slice(0, 200)
|
|
73
|
+
.flatMap((d) => list(path.join(root, d.name))
|
|
74
|
+
.filter((f) => f.isFile())
|
|
75
|
+
.map((f) => d.name + '/' + f.name));
|
|
70
76
|
return [...top.filter((d) => d.isFile()).map((d) => d.name), ...below];
|
|
71
|
-
}
|
|
77
|
+
}
|
|
72
78
|
/** Scripts in the project root or one folder down that set up MSVC (vcvars*.bat, vswhere): read with bounded effort. */
|
|
73
|
-
export
|
|
74
|
-
const scripts = projectEntries(root)
|
|
79
|
+
export function msvcHint(root) {
|
|
80
|
+
const scripts = projectEntries(root)
|
|
81
|
+
.filter((e) => /\.(ps1|cmd|bat|psm1)$/i.test(e))
|
|
82
|
+
.slice(0, 60);
|
|
75
83
|
for (const rel of scripts) {
|
|
76
84
|
let text = '';
|
|
77
85
|
try {
|
|
78
86
|
const file = path.join(root, rel);
|
|
79
|
-
if (fs.statSync(file).size <=
|
|
87
|
+
if (fs.statSync(file).size <= MAX_BYTES)
|
|
80
88
|
text = fs.readFileSync(file, 'utf8');
|
|
81
89
|
}
|
|
82
90
|
catch {
|
|
@@ -86,4 +94,4 @@ export const msvcHint = (root) => {
|
|
|
86
94
|
return rel + ' sets up MSVC';
|
|
87
95
|
}
|
|
88
96
|
return undefined;
|
|
89
|
-
}
|
|
97
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { DatabasePlan, GenerateOptions, Generated, GuestSession, HostProbe, ProfileResult, ResolvedMapping } from '../../core/types.js';
|
|
2
|
+
import type { BootProjects } from './boot-projects.js';
|
|
3
|
+
/** What generateSandbox has decided or staged before it writes session.json. */
|
|
4
|
+
export interface SessionParts {
|
|
5
|
+
readonly launchId: string;
|
|
6
|
+
readonly launchPath: string;
|
|
7
|
+
readonly harness: GuestSession['harness'];
|
|
8
|
+
readonly boot: BootProjects;
|
|
9
|
+
readonly mappings: readonly ResolvedMapping[];
|
|
10
|
+
readonly profile: ProfileResult;
|
|
11
|
+
readonly databases: DatabasePlan[];
|
|
12
|
+
readonly toolchains: Generated['toolchains'];
|
|
13
|
+
}
|
|
14
|
+
/** What was found on this PC to copy instead of download. */
|
|
15
|
+
export declare function hostToolsOf(probe: HostProbe): GuestSession['hostTools'];
|
|
16
|
+
/** session.json. The key order is the file's byte order: keep it. */
|
|
17
|
+
export declare function guestSession(o: GenerateOptions, parts: SessionParts): GuestSession;
|
|
18
|
+
/**
|
|
19
|
+
* env.cmd, which logon.cmd calls before it opens Windows Terminal: Terminal expands "%AGENT_WORKSPACE%" (the starting
|
|
20
|
+
* folder of new tabs) from its own environment, and the runtime only sets the variable machine-wide after Terminal
|
|
21
|
+
* started. `%` is doubled for cmd; a Windows path holds no quotes.
|
|
22
|
+
*/
|
|
23
|
+
export declare function logonEnv(workspace: string): string;
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
// What the guest reads at boot: session.json (the whole launch, decided on this side) and env.cmd for logon.cmd.
|
|
2
|
+
import fs from 'node:fs';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { resolveToolchains } from '../../core/detect/index.js';
|
|
5
|
+
import { hubName, PROJECTS_GUEST, substDrives } from '../../shared/paths/index.js';
|
|
6
|
+
import { hostClaudeDir } from '../profile/index.js';
|
|
7
|
+
import { databaseCatalog } from './database-plan.js';
|
|
8
|
+
/** What was found on this PC to copy instead of download. */
|
|
9
|
+
export function hostToolsOf(probe) {
|
|
10
|
+
return {
|
|
11
|
+
node: Boolean(probe.nodeDir),
|
|
12
|
+
nodeVersion: probe.nodeDir || probe.nvmNode ? probe.hostNodeVersion.replace(/^v/, '') : null,
|
|
13
|
+
harnessExecutable: probe.harnessExe?.file ?? null,
|
|
14
|
+
git: Boolean(probe.gitDir),
|
|
15
|
+
nvm: Boolean(probe.nvmDir),
|
|
16
|
+
volta: Boolean(probe.volta),
|
|
17
|
+
pyenv: Boolean(probe.pyenv),
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
/** session.json. The key order is the file's byte order: keep it. */
|
|
21
|
+
export function guestSession(o, parts) {
|
|
22
|
+
const { config, workspaceHost, harnessName } = o.run;
|
|
23
|
+
const { profile } = parts;
|
|
24
|
+
return {
|
|
25
|
+
launchId: parts.launchId,
|
|
26
|
+
project: path.basename(workspaceHost),
|
|
27
|
+
projectId: hubName(workspaceHost, []),
|
|
28
|
+
workspace: config.guestWorkspace,
|
|
29
|
+
workspaceHost,
|
|
30
|
+
projectsDir: PROJECTS_GUEST,
|
|
31
|
+
// Every folder mapped for other projects (roots and projects mapped at boot): the guest accepts projects in them.
|
|
32
|
+
roots: [...parts.boot.roots, ...parts.boot.projects].map((r) => r.guest),
|
|
33
|
+
...(o.autoSession === false ? { autoSession: false } : {}),
|
|
34
|
+
harnessName,
|
|
35
|
+
harness: parts.harness,
|
|
36
|
+
harnessArguments: o.harnessArgs,
|
|
37
|
+
persistAgentState: config.storage.persistAgentState,
|
|
38
|
+
networking: config.sandbox.networking,
|
|
39
|
+
headless: config.sandbox.headless,
|
|
40
|
+
network: config.network,
|
|
41
|
+
provisioning: config.provisioning,
|
|
42
|
+
// "auto" is decided here, so the guest and the launch table agree.
|
|
43
|
+
toolchains: resolveToolchains(config.toolchains, parts.toolchains),
|
|
44
|
+
databases: parts.databases,
|
|
45
|
+
databaseCatalog: databaseCatalog(config.databases),
|
|
46
|
+
versions: o.run.versions,
|
|
47
|
+
attach: config.attach,
|
|
48
|
+
hooks: config.hooks,
|
|
49
|
+
downloads: config.downloads,
|
|
50
|
+
hostTools: hostToolsOf(o.probe),
|
|
51
|
+
claudeProfile: {
|
|
52
|
+
overwrite: config.claudeProfile.overwrite,
|
|
53
|
+
items: profile.staged,
|
|
54
|
+
credentials: profile.credentials,
|
|
55
|
+
hostConfigDir: profile.hostDir ?? hostClaudeDir(config.claudeProfile),
|
|
56
|
+
syncClaudeMem: config.claudeProfile.syncClaudeMem,
|
|
57
|
+
},
|
|
58
|
+
personalization: fs.existsSync(path.join(parts.launchPath, 'personalize', 'personalize.reg')),
|
|
59
|
+
substDrives: substDrives(parts.mappings.map((m) => m.guest)),
|
|
60
|
+
cpuLimitPercent: config.sandbox.cpuLimit === 'none' ? null : config.sandbox.cpuLimit,
|
|
61
|
+
pageFileMb: config.sandbox.pageFileMb,
|
|
62
|
+
apps: config.apps,
|
|
63
|
+
auditProcesses: config.audit.enabled && config.audit.processes,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* env.cmd, which logon.cmd calls before it opens Windows Terminal: Terminal expands "%AGENT_WORKSPACE%" (the starting
|
|
68
|
+
* folder of new tabs) from its own environment, and the runtime only sets the variable machine-wide after Terminal
|
|
69
|
+
* started. `%` is doubled for cmd; a Windows path holds no quotes.
|
|
70
|
+
*/
|
|
71
|
+
export function logonEnv(workspace) {
|
|
72
|
+
return '@set "AGENT_WORKSPACE=' + workspace.replace(/[\r\n"]/g, '').replace(/%/g, '%%') + '"\r\n';
|
|
73
|
+
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/** Package hooks first, then ~/.agent-sandbox/hooks (same file name = user's wins), then --script / "scripts". */
|
|
2
|
-
export declare
|
|
2
|
+
export declare function stageHooks(packageRoot: string, launchPath: string, scripts: readonly string[]): void;
|
|
3
3
|
/** --script / "scripts" files, run before the agent in this order. */
|
|
4
|
-
export declare
|
|
4
|
+
export declare function stageScripts(target: string, scripts: readonly string[]): void;
|
|
5
5
|
export declare const RUNTIME_FILES: string[];
|
|
6
6
|
/** The bundled sandbox runtime (dist/runtime: one self-contained file per entry point) and the sandbox/ scripts. */
|
|
7
|
-
export declare
|
|
7
|
+
export declare function copyRuntime(packageRoot: string, launchPath: string): void;
|
|
8
8
|
/** Only the identity from ~/.gitconfig: the rest can hold credentials (helpers, tokens in insteadOf URLs). */
|
|
9
|
-
export declare
|
|
9
|
+
export declare function gitIdentity(gitconfig: string): string;
|
|
10
10
|
/** Writes this PC's git name and email to home\.gitconfig in the launch folder (nothing when there are none). */
|
|
11
|
-
export declare
|
|
11
|
+
export declare function stageGitIdentity(launchPath: string): void;
|