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
|
@@ -1,140 +1,128 @@
|
|
|
1
|
-
// Which toolchain and database steps this sandbox runs, in the order their PATH entries are listed, and what each
|
|
2
|
-
// step depends on. The scheduler (index.ts) runs them.
|
|
3
|
-
import fs from 'node:fs';
|
|
4
|
-
import os from 'node:os';
|
|
5
|
-
import path from 'node:path';
|
|
6
1
|
import { appsNeedMesa, setupApps } from '../apps/index.js';
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import { setupCli } from './cli.js';
|
|
2
|
+
import { dryRun } from '../runtime/paths.js';
|
|
3
|
+
import { wanted } from './detect.js';
|
|
4
|
+
import { DATABASE_NAMES, setupDatabase } from '../databases/index.js';
|
|
5
|
+
import { setupGit } from './tools/git.js';
|
|
6
|
+
import { setupGo } from './languages/go.js';
|
|
7
|
+
import { setupJava } from './languages/java.js';
|
|
8
|
+
import { setupCli } from './tools/cli.js';
|
|
15
9
|
import { setupPyenv, setupVolta, wantsPyenv, wantsVolta } from './managers.js';
|
|
16
10
|
import { setupCpp } from './native/cpp.js';
|
|
17
11
|
import { setupDotnet } from './native/dotnet.js';
|
|
18
12
|
import { setupMesa } from './native/mesa.js';
|
|
19
13
|
import { setupMsvc } from './native/msvc/index.js';
|
|
20
14
|
import { setupRust } from './native/rust.js';
|
|
21
|
-
import { setupNode } from './node.js';
|
|
22
|
-
import { setupPwsh } from './pwsh.js';
|
|
23
|
-
import { setupPython } from './python.js';
|
|
24
|
-
import { setupBun, setupDeno, setupUv
|
|
25
|
-
import { setupPhp } from './
|
|
26
|
-
import { setupRuby } from './
|
|
27
|
-
import { setupVcRuntime } from './
|
|
28
|
-
import { setupVscode } from './vscode.js';
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
if (!exists(uv))
|
|
33
|
-
throw new Error('toolchains.python.tools needs uv (toolchains.uv.enabled)');
|
|
34
|
-
await installOnce(env, 'uv tool', tools, (pkg) => execAsync(uv, ['tool', 'install', pkg], { env: { ...process.env, ...uvVars() } }));
|
|
35
|
-
};
|
|
36
|
-
/**
|
|
37
|
-
* Where cargo builds: shared with the PC's target\, one on the sandbox's disk, or a path. "separate" sets no variable:
|
|
38
|
-
* the cargo shim (sandbox/cargoshim.cs) gives every checkout its own target\sandbox, so git worktrees of several agents
|
|
39
|
-
* never overwrite each other's builds.
|
|
40
|
-
*/
|
|
41
|
-
const cargoTarget = (targetDir) => {
|
|
42
|
-
if (targetDir === 'shared' || targetDir === 'separate')
|
|
43
|
-
return null;
|
|
44
|
-
if (targetDir === 'local')
|
|
45
|
-
return path.join(localDir, 'cargo-target');
|
|
46
|
-
return targetDir;
|
|
47
|
-
};
|
|
48
|
-
/** "separate": tools\shims\cargo\cargo.exe in front of the real cargo, which it runs with the checkout's target dir. */
|
|
49
|
-
const cargoShim = (env, rust) => {
|
|
50
|
-
const real = path.join(tool('rust', 'cargo', 'bin'), 'cargo.exe');
|
|
51
|
-
if (rust.targetDir !== 'separate' || !exists(real))
|
|
52
|
-
return;
|
|
53
|
-
const dir = mkdirp(tool('shims', 'cargo'));
|
|
54
|
-
fs.copyFileSync(ensureCompiled('cargoshim'), path.join(dir, 'cargo.exe'));
|
|
55
|
-
env.prepend.unshift(dir);
|
|
56
|
-
env.vars.AGENT_REAL_CARGO = real;
|
|
57
|
-
};
|
|
58
|
-
/**
|
|
59
|
-
* Cargo defaults that fit Windows, written only when there is no $CARGO_HOME\config.toml yet: fewer parallel jobs
|
|
60
|
-
* (parallel rustc ran out of paging file) and, for the GNU host, only line tables as debug info (full debug info made
|
|
61
|
-
* test executables bigger than the 2 GB Windows allows).
|
|
62
|
-
*/
|
|
63
|
-
const cargoDefaults = (host) => {
|
|
64
|
-
const file = tool('rust', 'cargo', 'config.toml');
|
|
65
|
-
if (exists(file) || !exists(path.dirname(file)))
|
|
66
|
-
return;
|
|
67
|
-
// Several agents often build at once: up to 4 jobs each (8 each crashed Windows inside the sandbox on 13 Oct 2026).
|
|
68
|
-
const jobs = Math.max(2, Math.min(4, Math.floor(os.cpus().length / 4)));
|
|
69
|
-
const gnu = host.endsWith('-gnu');
|
|
70
|
-
fs.writeFileSync(file, [
|
|
71
|
-
'# Written by windows-development-sandbox once; edit freely, it is never overwritten.',
|
|
72
|
-
'[build]', 'jobs = ' + jobs, '',
|
|
73
|
-
...(gnu ? ['[profile.dev]', 'debug = "line-tables-only"', '', '[profile.test]', 'debug = "line-tables-only"', ''] : []),
|
|
74
|
-
].join('\n'));
|
|
75
|
-
};
|
|
76
|
-
/**
|
|
77
|
-
* Where cargo builds and where sccache keeps its cache. Cargo fingerprints hold absolute paths and the host toolchain,
|
|
78
|
-
* so a target\\ shared with builds on the PC rebuilds every time the side changes: "separate" (the default) keeps a
|
|
79
|
-
* sandbox one next to it. sccache's cache persists unless the project sets SCCACHE_DIR itself.
|
|
80
|
-
*/
|
|
81
|
-
const rustCaches = (rust) => {
|
|
82
|
-
const target = cargoTarget(rust.targetDir);
|
|
83
|
-
return { ...(target ? { CARGO_TARGET_DIR: target } : {}), ...(process.env.SCCACHE_DIR ? {} : { SCCACHE_DIR: path.join(dataDir, 'cache', 'sccache') }) };
|
|
84
|
-
};
|
|
85
|
-
/** "auto": the msvc host when the MSVC step runs (as on most PCs), else GNU with MinGW. */
|
|
86
|
-
const rustHost = (config) => {
|
|
87
|
-
if (config.rust.host !== 'auto')
|
|
88
|
-
return config.rust.host;
|
|
89
|
-
const cpu = arch === 'arm64' ? 'aarch64' : 'x86_64';
|
|
90
|
-
return cpu + (wanted(config.msvc.enabled, 'msvc') ? '-pc-windows-msvc' : '-pc-windows-gnu');
|
|
91
|
-
};
|
|
92
|
-
export const plan = (config, versions, o) => {
|
|
15
|
+
import { setupNode } from './languages/node.js';
|
|
16
|
+
import { setupPwsh } from './tools/pwsh.js';
|
|
17
|
+
import { setupPython } from './languages/python.js';
|
|
18
|
+
import { setupBun, setupDeno, setupUv } from './runtimes.js';
|
|
19
|
+
import { setupPhp } from './languages/php.js';
|
|
20
|
+
import { setupRuby } from './languages/ruby.js';
|
|
21
|
+
import { setupVcRuntime } from './native/vcruntime.js';
|
|
22
|
+
import { setupVscode } from './tools/vscode.js';
|
|
23
|
+
import { rustHost, rustCaches, cargoDefaults, cargoShim, linkGate } from './native/rust-extras.js';
|
|
24
|
+
import { setupPythonTools } from './languages/python-tools.js';
|
|
25
|
+
export function plan(config, versions, o) {
|
|
93
26
|
const apps = Boolean(o.apps && (o.apps.install.length || Object.keys(o.apps.custom).length));
|
|
94
27
|
const java = wanted(config.java.enabled, 'java');
|
|
95
28
|
const python = wanted(config.python.enabled, 'python');
|
|
96
29
|
return [
|
|
97
|
-
{
|
|
30
|
+
{
|
|
31
|
+
name: 'Git',
|
|
32
|
+
enabled: o.gitEnabled,
|
|
33
|
+
shared: true,
|
|
34
|
+
install: (env) => setupGit(env, o.hostGit, o.refresh, o.gitAccess),
|
|
35
|
+
},
|
|
98
36
|
// Before Node: with package.json pins, Volta's node/npm/pnpm/yarn come first on PATH.
|
|
99
|
-
{ name: 'Volta',
|
|
100
|
-
{ name: 'Node ' + versions.node.spec,
|
|
101
|
-
{ name: 'Python',
|
|
102
|
-
{ name: 'pyenv-win',
|
|
103
|
-
{
|
|
104
|
-
|
|
37
|
+
{ name: 'Volta', enabled: wantsVolta(config.node.volta), install: (env) => setupVolta(env) },
|
|
38
|
+
{ name: 'Node ' + versions.node.spec, enabled: true, install: (env) => setupNode(env, versions, config.node) },
|
|
39
|
+
{ name: 'Python', enabled: python, install: (env) => setupPython(env, config.python, versions) },
|
|
40
|
+
{ name: 'pyenv-win', enabled: python && wantsPyenv(config.python.pyenv), install: (env) => setupPyenv(env) },
|
|
41
|
+
{
|
|
42
|
+
name: 'C/C++',
|
|
43
|
+
enabled: wanted(config.cpp.enabled, 'cpp') || wanted(config.rust.enabled, 'rust'),
|
|
44
|
+
install: (env) => setupCpp(env, config.cpp),
|
|
45
|
+
},
|
|
46
|
+
{ name: 'MSVC', enabled: wanted(config.msvc.enabled, 'msvc'), install: (env) => setupMsvc(env, config.msvc) },
|
|
105
47
|
// Rust links with MSVC (msvc host) or MinGW's gcc (GNU host): whichever it uses goes first.
|
|
106
48
|
{
|
|
107
|
-
name: 'Rust',
|
|
108
|
-
|
|
49
|
+
name: 'Rust',
|
|
50
|
+
enabled: wanted(config.rust.enabled, 'rust'),
|
|
51
|
+
after: ['C/C++', 'MSVC'],
|
|
52
|
+
install: async (env) => {
|
|
109
53
|
await setupRust(env, { ...config.rust, host: rustHost(config) }, o.refresh);
|
|
110
54
|
Object.assign(env.vars, rustCaches(config.rust));
|
|
111
55
|
if (!dryRun) {
|
|
112
56
|
cargoDefaults(rustHost(config));
|
|
113
57
|
cargoShim(env, config.rust);
|
|
58
|
+
linkGate(env, config.rust, rustHost(config));
|
|
114
59
|
}
|
|
115
60
|
},
|
|
116
61
|
},
|
|
117
|
-
{
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
62
|
+
{
|
|
63
|
+
name: '.NET',
|
|
64
|
+
enabled: wanted(config.dotnet.enabled, 'dotnet'),
|
|
65
|
+
install: (env) => setupDotnet(env, config.dotnet, o.refresh),
|
|
66
|
+
},
|
|
67
|
+
{ name: 'Go', enabled: wanted(config.go.enabled, 'go'), install: (env) => setupGo(env, config.go) },
|
|
68
|
+
{ name: 'Java', enabled: java, install: (env) => setupJava(env, config.java) },
|
|
69
|
+
{ name: 'Ruby', enabled: wanted(config.ruby.enabled, 'ruby'), install: (env) => setupRuby(env, config.ruby) },
|
|
121
70
|
// PHP installs the Visual C++ runtime itself: one installer at a time.
|
|
122
71
|
// Many apps (bat, delta, Neovim, most GUIs, your own programs) are built against it too.
|
|
123
|
-
{
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
72
|
+
{
|
|
73
|
+
name: 'Visual C++ runtime',
|
|
74
|
+
enabled: config.vcRuntime.enabled || apps,
|
|
75
|
+
shared: true,
|
|
76
|
+
install: async (env) => {
|
|
77
|
+
await setupVcRuntime(env);
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
name: 'PHP',
|
|
82
|
+
enabled: wanted(config.php.enabled, 'php'),
|
|
83
|
+
after: ['Visual C++ runtime'],
|
|
84
|
+
install: (env) => setupPhp(env, config.php),
|
|
85
|
+
},
|
|
86
|
+
{ name: 'Deno', enabled: wanted(config.deno.enabled, 'deno'), install: (env) => setupDeno(env) },
|
|
87
|
+
{ name: 'Bun', enabled: config.bun.enabled, install: (env) => setupBun(env) },
|
|
88
|
+
{ name: 'uv', enabled: config.uv.enabled, install: (env) => setupUv(env) },
|
|
89
|
+
{ name: 'PowerShell 7', enabled: wanted(config.pwsh.enabled, 'pwsh'), install: (env) => setupPwsh(env, o.refresh) },
|
|
129
90
|
// The openssl tool comes from Git's install: after Git.
|
|
130
|
-
{
|
|
131
|
-
|
|
132
|
-
|
|
91
|
+
{
|
|
92
|
+
name: 'CLI tools',
|
|
93
|
+
enabled: Object.values(config.cli).some((v) => v !== false),
|
|
94
|
+
after: ['Git'],
|
|
95
|
+
install: (env) => setupCli(env, config.cli, o.gitAccess, o.refresh),
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
name: 'Mesa 3D',
|
|
99
|
+
enabled: config.mesa.enabled || appsNeedMesa(o.apps),
|
|
100
|
+
shared: true,
|
|
101
|
+
install: (env) => setupMesa(env, config.mesa),
|
|
102
|
+
},
|
|
103
|
+
{ name: 'VS Code', enabled: config.vscode.enabled, shared: true, install: (env) => setupVscode(env, o.refresh) },
|
|
133
104
|
// Desktop apps and extra tools (apps.install / apps.custom); games and 3D apps copy Mesa's OpenGL next to them.
|
|
134
|
-
{
|
|
135
|
-
|
|
105
|
+
{
|
|
106
|
+
name: 'Apps',
|
|
107
|
+
enabled: apps,
|
|
108
|
+
shared: true,
|
|
109
|
+
after: ['Mesa 3D', 'Visual C++ runtime'],
|
|
110
|
+
install: (env) => setupApps(env, o.apps, { gitAccess: o.gitAccess, refresh: o.refresh }),
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
name: 'Python tools',
|
|
114
|
+
enabled: python && config.python.tools.length > 0,
|
|
115
|
+
after: ['Python', 'uv'],
|
|
116
|
+
install: (env) => setupPythonTools(env, config.python.tools),
|
|
117
|
+
},
|
|
136
118
|
// DynamoDB Local runs on Java: the Java step installs the JDK first instead of racing it.
|
|
137
119
|
// One server per database in the sandbox: a project that joins later shares the one the boot started.
|
|
138
|
-
...o.databases.map((db) => ({
|
|
120
|
+
...o.databases.map((db) => ({
|
|
121
|
+
name: DATABASE_NAMES[db.database],
|
|
122
|
+
enabled: true,
|
|
123
|
+
shared: true,
|
|
124
|
+
after: db.database === 'dynamodb' && java ? ['Java'] : [],
|
|
125
|
+
install: (env) => setupDatabase(env, db),
|
|
126
|
+
})),
|
|
139
127
|
];
|
|
140
|
-
}
|
|
128
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type ToolEnv } from './
|
|
1
|
+
import { type ToolEnv } from './tool-env.js';
|
|
2
2
|
export interface SingleExeOptions {
|
|
3
3
|
/** Download again even when installed (provisioning.refresh). */
|
|
4
4
|
refresh?: boolean;
|
|
@@ -11,9 +11,9 @@ export interface SingleExeOptions {
|
|
|
11
11
|
size?: string;
|
|
12
12
|
}
|
|
13
13
|
/** A tool from one GitHub release archive, into `dir` (atomically), on PATH. */
|
|
14
|
-
export declare
|
|
15
|
-
export declare
|
|
16
|
-
export declare
|
|
14
|
+
export declare function setupSingleExe(env: ToolEnv, name: string, repo: string, pattern: RegExp, exeName: string, dir: string, options?: SingleExeOptions): Promise<void>;
|
|
15
|
+
export declare function setupBun(env: ToolEnv): Promise<void>;
|
|
16
|
+
export declare function setupDeno(env: ToolEnv): Promise<void>;
|
|
17
17
|
/** Where uv keeps its cache, Pythons and tools (persistent). */
|
|
18
|
-
export declare
|
|
19
|
-
export declare
|
|
18
|
+
export declare function uvVars(): Record<string, string>;
|
|
19
|
+
export declare function setupUv(env: ToolEnv): Promise<void>;
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
// Bun, uv and Deno: single-binary tools from GitHub releases (claude-mem needs Bun and uv).
|
|
2
2
|
import path from 'node:path';
|
|
3
|
-
import { dryRun,
|
|
4
|
-
import {
|
|
3
|
+
import { dryRun, localDir } from '../runtime/paths.js';
|
|
4
|
+
import { exists } from '../runtime/fs.js';
|
|
5
|
+
import { log } from '../runtime/log.js';
|
|
6
|
+
import { arch, tool, versionOf } from './tool-env.js';
|
|
7
|
+
import { installFromGithub } from './install.js';
|
|
5
8
|
/** A tool from one GitHub release archive, into `dir` (atomically), on PATH. */
|
|
6
|
-
export
|
|
9
|
+
export async function setupSingleExe(env, name, repo, pattern, exeName, dir, options = {}) {
|
|
7
10
|
if (dryRun) {
|
|
8
11
|
log('(dry run) would provision ' + name);
|
|
9
12
|
return;
|
|
@@ -12,27 +15,42 @@ export const setupSingleExe = async (env, name, repo, pattern, exeName, dir, opt
|
|
|
12
15
|
const exe = path.join(bin, exeName);
|
|
13
16
|
if (!exists(exe) || options.refresh) {
|
|
14
17
|
const size = options.size ? ', ~' + options.size : '';
|
|
15
|
-
await installFromGithub(repo, pattern, {
|
|
18
|
+
await installFromGithub(repo, pattern, {
|
|
19
|
+
dest: dir,
|
|
20
|
+
what: (a) => name + ' (' + a.name + size + ' once)',
|
|
21
|
+
...(options.subdir ? {} : { locate: exeName }),
|
|
22
|
+
});
|
|
16
23
|
}
|
|
17
24
|
if (!exists(exe))
|
|
18
25
|
throw new Error(exeName + ' missing after installing ' + name);
|
|
19
26
|
env.prepend.push(bin);
|
|
20
27
|
env.summary.push(name + ': ' + versionOf(exe, options.versionArgs) + (options.note ?? ''));
|
|
21
|
-
}
|
|
22
|
-
export
|
|
28
|
+
}
|
|
29
|
+
export async function setupBun(env) {
|
|
23
30
|
await setupSingleExe(env, 'bun', 'oven-sh/bun', arch === 'arm64' ? /^bun-windows-aarch64\.zip$/ : /^bun-windows-x64\.zip$/, 'bun.exe', tool('bun', 'bin'), { size: '35 MB' });
|
|
24
31
|
// Bun cannot keep its cache or temp files on a mapped folder (EINVAL); they go to the sandbox's own disk.
|
|
25
|
-
Object.assign(env.vars, {
|
|
26
|
-
|
|
27
|
-
|
|
32
|
+
Object.assign(env.vars, {
|
|
33
|
+
BUN_INSTALL: tool('bun'),
|
|
34
|
+
BUN_INSTALL_CACHE_DIR: path.join(localDir, 'bun-cache'),
|
|
35
|
+
BUN_TMPDIR: path.join(localDir, 'bun-tmp'),
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
export async function setupDeno(env) {
|
|
28
39
|
await setupSingleExe(env, 'deno', 'denoland/deno', arch === 'arm64' ? /^deno-aarch64-pc-windows-msvc[.]zip$/ : /^deno-x86_64-pc-windows-msvc[.]zip$/, 'deno.exe', tool('deno', 'bin'), { size: '40 MB' });
|
|
29
40
|
// `deno install` puts commands in DENO_INSTALL_ROOT/bin: the folder deno.exe is in, already on PATH.
|
|
30
41
|
Object.assign(env.vars, { DENO_DIR: tool('deno-cache'), DENO_INSTALL_ROOT: tool('deno'), DENO_NO_UPDATE_CHECK: '1' });
|
|
31
|
-
}
|
|
42
|
+
}
|
|
32
43
|
/** Where uv keeps its cache, Pythons and tools (persistent). */
|
|
33
|
-
export
|
|
34
|
-
|
|
44
|
+
export function uvVars() {
|
|
45
|
+
return {
|
|
46
|
+
UV_CACHE_DIR: tool('uv-cache'),
|
|
47
|
+
UV_PYTHON_INSTALL_DIR: tool('uv-python'),
|
|
48
|
+
UV_TOOL_DIR: tool('uv-tools'),
|
|
49
|
+
UV_TOOL_BIN_DIR: tool('uv-bin'),
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
export async function setupUv(env) {
|
|
35
53
|
await setupSingleExe(env, 'uv', 'astral-sh/uv', arch === 'arm64' ? /^uv-aarch64-pc-windows-msvc\.zip$/ : /^uv-x86_64-pc-windows-msvc\.zip$/, 'uv.exe', tool('uv'), { size: '20 MB' });
|
|
36
54
|
Object.assign(env.vars, uvVars());
|
|
37
55
|
env.prepend.push(tool('uv-bin'));
|
|
38
|
-
}
|
|
56
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type ToolEnv } from './tool-env.js';
|
|
2
|
+
import type { ToolchainStep } from './step.js';
|
|
3
|
+
export interface RunOptions {
|
|
4
|
+
/** Progress lines ("Installing Go, Rust (3 of 9 done)"); default: the sandbox's boot status. */
|
|
5
|
+
report?: (message: string) => void;
|
|
6
|
+
/** What machine-wide (shared) steps contributed at boot: reused instead of run again. */
|
|
7
|
+
reuse?: Record<string, ToolEnv>;
|
|
8
|
+
}
|
|
9
|
+
export declare class StepScheduler {
|
|
10
|
+
private readonly parallel;
|
|
11
|
+
/** One lock per kind of step ("Node 20" and "Node 22" share nvm's folders): held while that step runs, in any run. */
|
|
12
|
+
private readonly locks;
|
|
13
|
+
/** The step a download belongs to (several run at once), for its progress. */
|
|
14
|
+
private readonly currentStep;
|
|
15
|
+
constructor(parallel?: number);
|
|
16
|
+
/** Runs the steps (each with its own environment) and returns each step's environment, in plan order. */
|
|
17
|
+
run(steps: readonly ToolchainStep[], o: RunOptions): Promise<Map<string, ToolEnv>>;
|
|
18
|
+
/** Runs `work` once no other step of the same kind (first word of the name) is running. */
|
|
19
|
+
private exclusive;
|
|
20
|
+
}
|
|
21
|
+
/** The one scheduler: its locks span the boot's run and every project's run. */
|
|
22
|
+
export declare const scheduler: StepScheduler;
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
// Runs the planned steps in parallel, a few at a time, after the steps they depend on. One lock per kind of step is
|
|
2
|
+
// held across runs: the boot and projects that join later never install two Nodes (or two Gos) at once.
|
|
3
|
+
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
4
|
+
import { downloader } from '../../shared/download/index.js';
|
|
5
|
+
import { warn } from '../runtime/log.js';
|
|
6
|
+
import { setSandboxStatus } from '../runtime/status.js';
|
|
7
|
+
import { errMsg } from '../../core/util/errors.js';
|
|
8
|
+
import { emptyEnv } from './tool-env.js';
|
|
9
|
+
/** How many installers run at once: enough to overlap downloads with installs, few enough not to thrash the disk. */
|
|
10
|
+
const PARALLEL = 4;
|
|
11
|
+
/** Runs one installer; a failure is reported and skipped so it never blocks the other toolchains. */
|
|
12
|
+
async function runReported(name, env, work) {
|
|
13
|
+
try {
|
|
14
|
+
await work();
|
|
15
|
+
}
|
|
16
|
+
catch (e) {
|
|
17
|
+
warn(name +
|
|
18
|
+
' could not be set up and is skipped; everything else still works, and the next start tries again. Reason: ' +
|
|
19
|
+
errMsg(e));
|
|
20
|
+
env.summary.push(name + ': FAILED');
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
export class StepScheduler {
|
|
24
|
+
parallel;
|
|
25
|
+
/** One lock per kind of step ("Node 20" and "Node 22" share nvm's folders): held while that step runs, in any run. */
|
|
26
|
+
locks = new Map();
|
|
27
|
+
/** The step a download belongs to (several run at once), for its progress. */
|
|
28
|
+
currentStep = new AsyncLocalStorage();
|
|
29
|
+
constructor(parallel = PARALLEL) {
|
|
30
|
+
this.parallel = parallel;
|
|
31
|
+
}
|
|
32
|
+
/** Runs the steps (each with its own environment) and returns each step's environment, in plan order. */
|
|
33
|
+
async run(steps, o) {
|
|
34
|
+
const envs = new Map(steps.map((s) => [s.name, emptyEnv()]));
|
|
35
|
+
const finished = new Map();
|
|
36
|
+
const running = new Set();
|
|
37
|
+
const waiting = [];
|
|
38
|
+
let done = 0;
|
|
39
|
+
// The boot (no `report`) also publishes structured progress: what runs now, how far its download is, how many are
|
|
40
|
+
// done.
|
|
41
|
+
const percent = new Map();
|
|
42
|
+
const active = () => [...running].map((name) => ({ name, ...(percent.has(name) ? { percent: percent.get(name) } : {}) }));
|
|
43
|
+
const say = o.report ??
|
|
44
|
+
((message) => setSandboxStatus('provisioning', message, { active: active(), done, total: steps.length }));
|
|
45
|
+
const report = () => {
|
|
46
|
+
if (running.size)
|
|
47
|
+
say('Installing ' + [...running].join(', ') + ' (' + done + ' of ' + steps.length + ' done)');
|
|
48
|
+
};
|
|
49
|
+
if (!o.report)
|
|
50
|
+
downloader.watch(() => {
|
|
51
|
+
const name = this.currentStep.getStore();
|
|
52
|
+
return name
|
|
53
|
+
? (fraction) => {
|
|
54
|
+
percent.set(name, Math.round(fraction * 100));
|
|
55
|
+
report();
|
|
56
|
+
}
|
|
57
|
+
: null;
|
|
58
|
+
});
|
|
59
|
+
for (const s of steps) {
|
|
60
|
+
// Dependencies first (they are earlier in the plan, so their promises exist), then a free slot.
|
|
61
|
+
finished.set(s.name, (async () => {
|
|
62
|
+
await Promise.all((s.after ?? []).map((name) => finished.get(name)));
|
|
63
|
+
const env = envs.get(s.name);
|
|
64
|
+
const reused = s.shared ? o.reuse?.[s.name] : undefined;
|
|
65
|
+
if (reused) {
|
|
66
|
+
envs.set(s.name, structuredClone(reused));
|
|
67
|
+
done++;
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
while (running.size >= this.parallel)
|
|
71
|
+
await new Promise((r) => waiting.push(r));
|
|
72
|
+
running.add(s.name);
|
|
73
|
+
report();
|
|
74
|
+
try {
|
|
75
|
+
await this.currentStep.run(s.name, () => this.exclusive(s.name, () => runReported(s.name, env, async () => s.install(env))));
|
|
76
|
+
}
|
|
77
|
+
finally {
|
|
78
|
+
running.delete(s.name);
|
|
79
|
+
percent.delete(s.name);
|
|
80
|
+
done++;
|
|
81
|
+
report();
|
|
82
|
+
waiting.shift()?.();
|
|
83
|
+
}
|
|
84
|
+
})());
|
|
85
|
+
}
|
|
86
|
+
try {
|
|
87
|
+
await Promise.all(finished.values());
|
|
88
|
+
}
|
|
89
|
+
finally {
|
|
90
|
+
if (!o.report)
|
|
91
|
+
downloader.watch(null);
|
|
92
|
+
}
|
|
93
|
+
if (!o.report)
|
|
94
|
+
setSandboxStatus('provisioning', 'Set up ' + steps.length + ' toolchains and databases', {
|
|
95
|
+
active: [],
|
|
96
|
+
done,
|
|
97
|
+
total: steps.length,
|
|
98
|
+
});
|
|
99
|
+
return envs;
|
|
100
|
+
}
|
|
101
|
+
/** Runs `work` once no other step of the same kind (first word of the name) is running. */
|
|
102
|
+
async exclusive(name, work) {
|
|
103
|
+
const key = name.split(' ')[0].toLowerCase();
|
|
104
|
+
const previous = this.locks.get(key) ?? Promise.resolve();
|
|
105
|
+
let release = () => undefined;
|
|
106
|
+
const mine = new Promise((r) => {
|
|
107
|
+
release = r;
|
|
108
|
+
});
|
|
109
|
+
const chained = previous.then(() => mine);
|
|
110
|
+
this.locks.set(key, chained);
|
|
111
|
+
await previous;
|
|
112
|
+
try {
|
|
113
|
+
return await work();
|
|
114
|
+
}
|
|
115
|
+
finally {
|
|
116
|
+
release();
|
|
117
|
+
if (this.locks.get(key) === chained)
|
|
118
|
+
this.locks.delete(key);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
/** The one scheduler: its locks span the boot's run and every project's run. */
|
|
123
|
+
export const scheduler = new StepScheduler();
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Toolchains, ToolVersions } from '../../core/types.js';
|
|
2
|
+
import { type ToolEnv } from './tool-env.js';
|
|
3
|
+
import type { ToolchainOptions } from './step.js';
|
|
4
|
+
import { type RunOptions } from './scheduler.js';
|
|
5
|
+
/** The combined environment, plus what each step contributed (kept so later projects reuse the shared steps). */
|
|
6
|
+
export interface ToolchainResult extends ToolEnv {
|
|
7
|
+
steps: Record<string, ToolEnv>;
|
|
8
|
+
}
|
|
9
|
+
/** Provisions every enabled toolchain and database, and returns the combined environment for the agent. */
|
|
10
|
+
export declare function setupToolchains(config: Toolchains, versions: ToolVersions, options: ToolchainOptions, run?: RunOptions): Promise<ToolchainResult>;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { log } from '../runtime/log.js';
|
|
2
|
+
import { mkdirp } from '../runtime/fs.js';
|
|
3
|
+
import { emptyEnv, tool } from './tool-env.js';
|
|
4
|
+
import { plan } from './plan.js';
|
|
5
|
+
import { scheduler } from './scheduler.js';
|
|
6
|
+
/** Provisions every enabled toolchain and database, and returns the combined environment for the agent. */
|
|
7
|
+
export async function setupToolchains(config, versions, options, run = {}) {
|
|
8
|
+
const steps = plan(config, versions, options).filter((s) => s.enabled);
|
|
9
|
+
const envs = await scheduler.run(steps, run);
|
|
10
|
+
// Merged in plan order, so PATH order never depends on which download finished first.
|
|
11
|
+
const env = { ...emptyEnv(), steps: Object.fromEntries(envs) };
|
|
12
|
+
env.prepend.push(mkdirp(tool('bin')));
|
|
13
|
+
for (const part of envs.values()) {
|
|
14
|
+
Object.assign(env.vars, part.vars);
|
|
15
|
+
env.prepend.push(...part.prepend);
|
|
16
|
+
env.append.push(...part.append);
|
|
17
|
+
env.summary.push(...part.summary);
|
|
18
|
+
}
|
|
19
|
+
Object.assign(env.vars, config.environment);
|
|
20
|
+
log('Set up ' + steps.length + ' toolchains and databases.');
|
|
21
|
+
return env;
|
|
22
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
/** Small JSON state files in tools\: read with zod (a half-written file is just empty), written atomically. */
|
|
3
|
+
export function readState(file, schema, empty) {
|
|
4
|
+
try {
|
|
5
|
+
return schema.safeParse(JSON.parse(fs.readFileSync(file, 'utf8').replace(/^\uFEFF/, ''))).data ?? empty;
|
|
6
|
+
}
|
|
7
|
+
catch {
|
|
8
|
+
return empty;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { Config, DatabasePlan, GitAccess } from '../../core/types.js';
|
|
2
|
+
import type { ToolEnv } from './tool-env.js';
|
|
3
|
+
/** apps: the boot only (apps are machine-wide; a project that joins later shares them). */
|
|
4
|
+
export interface ToolchainOptions {
|
|
5
|
+
gitEnabled: boolean;
|
|
6
|
+
gitAccess: GitAccess;
|
|
7
|
+
hostGit: boolean;
|
|
8
|
+
refresh: boolean;
|
|
9
|
+
databases: DatabasePlan[];
|
|
10
|
+
apps?: Config['apps'];
|
|
11
|
+
}
|
|
12
|
+
/** One installer the scheduler runs: a toolchain, the apps, or a database server. */
|
|
13
|
+
export interface ToolchainStep {
|
|
14
|
+
readonly name: string;
|
|
15
|
+
readonly enabled: boolean;
|
|
16
|
+
/** Steps that finish first (they are earlier in the plan). */
|
|
17
|
+
readonly after?: readonly string[];
|
|
18
|
+
/**
|
|
19
|
+
* The step's effect is machine-wide and the same for every project (an installer, a registry entry, a shortcut, the
|
|
20
|
+
* git guard): a project added after boot reuses what the boot's run contributed instead of running it again.
|
|
21
|
+
*/
|
|
22
|
+
readonly shared?: boolean;
|
|
23
|
+
install(env: ToolEnv): Promise<void> | void;
|
|
24
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** What the toolchains contribute to the agent's environment. */
|
|
2
|
+
export interface ToolEnv {
|
|
3
|
+
vars: Record<string, string>;
|
|
4
|
+
prepend: string[];
|
|
5
|
+
append: string[];
|
|
6
|
+
summary: string[];
|
|
7
|
+
}
|
|
8
|
+
export declare function emptyEnv(): ToolEnv;
|
|
9
|
+
export declare const arch: string;
|
|
10
|
+
export declare function tool(...parts: string[]): string;
|
|
11
|
+
/** First x.y.z in a tool's `--version` output. */
|
|
12
|
+
export declare function versionOf(exe: string, args?: string[], options?: {}): string;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// Shared plumbing for the toolchain installers. Everything lives in C:\AgentData\tools (persistent), so only the first
|
|
2
|
+
// boot downloads; later boots only put things on PATH.
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { execOutput } from '../runtime/process.js';
|
|
5
|
+
import { toolsDir } from '../runtime/paths.js';
|
|
6
|
+
export function emptyEnv() {
|
|
7
|
+
return { vars: {}, prepend: [], append: [], summary: [] };
|
|
8
|
+
}
|
|
9
|
+
export const arch = process.arch === 'arm64' ? 'arm64' : 'x64';
|
|
10
|
+
export function tool(...parts) {
|
|
11
|
+
return path.join(toolsDir, ...parts);
|
|
12
|
+
}
|
|
13
|
+
/** First x.y.z in a tool's `--version` output. */
|
|
14
|
+
export function versionOf(exe, args = ['--version'], options = {}) {
|
|
15
|
+
return /\d+\.\d+\.\d+\S*/.exec(execOutput(exe, args, options))?.[0] ?? 'installed';
|
|
16
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { GitAccess } from '../../../core/types.js';
|
|
2
|
+
import { type CliSettings } from '../catalogue.js';
|
|
3
|
+
import { type ToolEnv } from '../tool-env.js';
|
|
4
|
+
/** gh keeps `gh auth login` here, under the agent state (persists like Claude's login; never copied from the PC). */
|
|
5
|
+
export declare function ghConfigDir(): string;
|
|
6
|
+
/**
|
|
7
|
+
* Installs the tools toolchains.cli asks for. Settings still "auto" here (normally the host decides) use the same
|
|
8
|
+
* rules on the workspace as the host would. The gh rule is enforced here again, whatever the host sent.
|
|
9
|
+
*/
|
|
10
|
+
export declare function setupCli(env: ToolEnv, settings: CliSettings, gitAccess: GitAccess, refresh?: boolean): Promise<void>;
|