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
|
@@ -2,16 +2,26 @@
|
|
|
2
2
|
// `openssl` shim onto the copy Git for Windows already ships.
|
|
3
3
|
import fs from 'node:fs';
|
|
4
4
|
import path from 'node:path';
|
|
5
|
-
import { dryRun
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
|
|
12
|
-
|
|
5
|
+
import { dryRun } from '../../runtime/paths.js';
|
|
6
|
+
import { exists, mkdirp } from '../../runtime/fs.js';
|
|
7
|
+
import { log, warn } from '../../runtime/log.js';
|
|
8
|
+
import { stateDir } from '../../runtime/session.js';
|
|
9
|
+
import { errMsg } from '../../../core/util/errors.js';
|
|
10
|
+
import { projectWorkspace } from '../../runtime/project-context.js';
|
|
11
|
+
import { CLI_TOOLS, decideCli } from '../catalogue.js';
|
|
12
|
+
import { arch, tool } from '../tool-env.js';
|
|
13
|
+
import { setupSingleExe } from '../runtimes.js';
|
|
14
|
+
import { ensureCompiled } from '../../runtime/csc.js';
|
|
15
|
+
/** gh keeps `gh auth login` here, under the agent state (persists like Claude's login; never copied from the PC). */
|
|
16
|
+
export function ghConfigDir() {
|
|
17
|
+
return path.join(stateDir, 'gh');
|
|
18
|
+
}
|
|
13
19
|
const toolVars = {
|
|
14
|
-
gh: () => ({
|
|
20
|
+
gh: () => ({
|
|
21
|
+
GH_CONFIG_DIR: mkdirp(ghConfigDir()),
|
|
22
|
+
GH_NO_UPDATE_NOTIFIER: '1',
|
|
23
|
+
GH_NO_EXTENSION_UPDATE_NOTIFIER: '1',
|
|
24
|
+
}),
|
|
15
25
|
};
|
|
16
26
|
/**
|
|
17
27
|
* tools\shims\openssl.exe (sandbox/openssl.cs), a launcher for Git's mingw64\bin\openssl.exe. A real .exe so programs
|
|
@@ -28,22 +38,28 @@ const shimOpenssl = (env) => {
|
|
|
28
38
|
// An earlier version wrote a .cmd; it would still win for shells that prefer it.
|
|
29
39
|
fs.rmSync(path.join(shims, 'openssl.cmd'), { force: true });
|
|
30
40
|
env.prepend.push(shims);
|
|
31
|
-
env.summary.push(
|
|
41
|
+
env.summary.push("openssl: Git for Windows' copy");
|
|
32
42
|
};
|
|
33
43
|
/**
|
|
34
44
|
* Installs the tools toolchains.cli asks for. Settings still "auto" here (normally the host decides) use the same
|
|
35
45
|
* rules on the workspace as the host would. The gh rule is enforced here again, whatever the host sent.
|
|
36
46
|
*/
|
|
37
|
-
export
|
|
47
|
+
export async function setupCli(env, settings, gitAccess, refresh = false) {
|
|
38
48
|
const decisions = decideCli(settings, { gitAccess, hasGithubDir: exists(path.join(projectWorkspace(), '.github')) });
|
|
39
49
|
if (settings.gh && !decisions.gh.on) {
|
|
40
50
|
env.summary.push('gh: off (' + decisions.gh.reason + ')');
|
|
41
51
|
// A login from an earlier full-access sandbox is still on disk; the agent could read the token from there.
|
|
42
52
|
if (exists(path.join(ghConfigDir(), 'hosts.yml')))
|
|
43
|
-
warn('gh is off (git access is not "full"), but an earlier gh login is still stored in ' +
|
|
53
|
+
warn('gh is off (git access is not "full"), but an earlier gh login is still stored in ' +
|
|
54
|
+
ghConfigDir() +
|
|
55
|
+
' and readable by the agent. Run `gh auth logout` in a full-access sandbox, or delete that folder.');
|
|
44
56
|
}
|
|
45
57
|
if (dryRun) {
|
|
46
|
-
log('(dry run) would provision CLI tools: ' +
|
|
58
|
+
log('(dry run) would provision CLI tools: ' +
|
|
59
|
+
Object.entries(decisions)
|
|
60
|
+
.filter(([, d]) => d.on)
|
|
61
|
+
.map(([n]) => n)
|
|
62
|
+
.join(', '));
|
|
47
63
|
return;
|
|
48
64
|
}
|
|
49
65
|
for (const entry of CLI_TOOLS) {
|
|
@@ -51,7 +67,11 @@ export const setupCli = async (env, settings, gitAccess, refresh = false) => {
|
|
|
51
67
|
if (!decisions[name].on)
|
|
52
68
|
continue;
|
|
53
69
|
try {
|
|
54
|
-
await setupSingleExe(env, name, entry.repo, entry.asset(arch), entry.exe, tool('cli', name), {
|
|
70
|
+
await setupSingleExe(env, name, entry.repo, entry.asset(arch), entry.exe, tool('cli', name), {
|
|
71
|
+
refresh,
|
|
72
|
+
subdir: entry.subdir,
|
|
73
|
+
size: entry.size,
|
|
74
|
+
});
|
|
55
75
|
Object.assign(env.vars, toolVars[name]?.() ?? {});
|
|
56
76
|
}
|
|
57
77
|
catch (e) {
|
|
@@ -69,4 +89,4 @@ export const setupCli = async (env, settings, gitAccess, refresh = false) => {
|
|
|
69
89
|
env.summary.push('openssl: FAILED');
|
|
70
90
|
}
|
|
71
91
|
}
|
|
72
|
-
}
|
|
92
|
+
}
|
|
@@ -2,20 +2,32 @@
|
|
|
2
2
|
// provisioning.git.access decides what the agent gets: 'full' git, a 'readonly' guarded git, or 'none' (bash only).
|
|
3
3
|
import fs from 'node:fs';
|
|
4
4
|
import path from 'node:path';
|
|
5
|
-
import {
|
|
6
|
-
import { safeRemove } from '
|
|
7
|
-
import { dataDir, dryRun,
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
|
|
5
|
+
import { downloader, githubAsset, moveIntoPlace, stagingFolder } from '../../../shared/download/index.js';
|
|
6
|
+
import { safeRemove } from '../../../shared/io/safe-remove.js';
|
|
7
|
+
import { dataDir, dryRun, hostToolsDir, launchDir, toolsDir } from '../../runtime/paths.js';
|
|
8
|
+
import { execAsync, execOutput, robocopy } from '../../runtime/process.js';
|
|
9
|
+
import { exists, mkdirp } from '../../runtime/fs.js';
|
|
10
|
+
import { log, warn } from '../../runtime/log.js';
|
|
11
|
+
import { errMsg } from '../../../core/util/errors.js';
|
|
12
|
+
import { ensureCompiled } from '../../runtime/csc.js';
|
|
13
|
+
import { arch, tool } from '../tool-env.js';
|
|
14
|
+
import { duringSession } from '../../runtime/project-context.js';
|
|
15
|
+
const BLOCKED_HOOKS = [
|
|
16
|
+
'pre-commit',
|
|
17
|
+
'commit-msg',
|
|
18
|
+
'pre-merge-commit',
|
|
19
|
+
'pre-push',
|
|
20
|
+
'pre-rebase',
|
|
21
|
+
'pre-applypatch',
|
|
22
|
+
'applypatch-msg',
|
|
23
|
+
];
|
|
12
24
|
const posix = (p) => p.replace(/\\/g, '/');
|
|
13
25
|
const installPortableGit = async (root) => {
|
|
14
26
|
const asset = await githubAsset('git-for-windows/git', arch === 'arm64' ? /^PortableGit-[\d.]+-arm64\.7z\.exe$/ : /^PortableGit-[\d.]+-64-bit\.7z\.exe$/);
|
|
15
27
|
const sfx = tool(asset.name);
|
|
16
28
|
log('Downloading Git for Windows (' + asset.name + ', ~60 MB once) ...');
|
|
17
29
|
try {
|
|
18
|
-
await
|
|
30
|
+
await downloader.file(asset.url, sfx, asset.sha256);
|
|
19
31
|
await execAsync(sfx, ['-o' + root, '-y'], { stdio: 'ignore' });
|
|
20
32
|
}
|
|
21
33
|
finally {
|
|
@@ -31,7 +43,9 @@ const installGuard = (env, access, realGit) => {
|
|
|
31
43
|
const guard = path.join(launchDir, 'runtime', 'gitguard.js');
|
|
32
44
|
// A real git.exe (programs like Claude Code only look for .exe); a .cmd only if the C# compiler is unavailable.
|
|
33
45
|
// A project added later reuses the boot's: sessions may be running it, and Windows cannot replace a running exe.
|
|
34
|
-
if (duringSession() && (exists(path.join(dir, 'git.exe')) || exists(path.join(dir, 'git.cmd')))) {
|
|
46
|
+
if (duringSession() && (exists(path.join(dir, 'git.exe')) || exists(path.join(dir, 'git.cmd')))) {
|
|
47
|
+
/* keep it */
|
|
48
|
+
}
|
|
35
49
|
else
|
|
36
50
|
try {
|
|
37
51
|
fs.copyFileSync(ensureCompiled('gitshim'), path.join(dir, 'git.exe'));
|
|
@@ -44,14 +58,21 @@ const installGuard = (env, access, realGit) => {
|
|
|
44
58
|
fs.writeFileSync(path.join(dir, 'bashenv.sh'), 'git() { "' + posix(process.execPath) + '" "' + posix(guard) + '" "$@"; }\nexport -f git\n');
|
|
45
59
|
env.prepend.unshift(dir);
|
|
46
60
|
Object.assign(env.vars, {
|
|
47
|
-
AGENT_GIT_ACCESS: access,
|
|
48
|
-
|
|
61
|
+
AGENT_GIT_ACCESS: access,
|
|
62
|
+
AGENT_REAL_GIT: access === 'readonly' ? realGit : '',
|
|
63
|
+
AGENT_GUARD_NODE: process.execPath,
|
|
64
|
+
AGENT_GUARD_SCRIPT: guard,
|
|
65
|
+
BASH_ENV: posix(path.join(dir, 'bashenv.sh')),
|
|
49
66
|
});
|
|
50
67
|
if (access === 'readonly') {
|
|
51
68
|
const hooks = mkdirp(path.join(dir, 'hooks'));
|
|
52
69
|
for (const hook of BLOCKED_HOOKS)
|
|
53
70
|
fs.writeFileSync(path.join(hooks, hook), '#!/bin/sh\necho "git is read-only in this sandbox: ' + hook + ' refused." >&2\nexit 1\n');
|
|
54
|
-
Object.assign(env.vars, {
|
|
71
|
+
Object.assign(env.vars, {
|
|
72
|
+
GIT_CONFIG_COUNT: '1',
|
|
73
|
+
GIT_CONFIG_KEY_0: 'core.hooksPath',
|
|
74
|
+
GIT_CONFIG_VALUE_0: posix(hooks),
|
|
75
|
+
});
|
|
55
76
|
}
|
|
56
77
|
else {
|
|
57
78
|
// Even a git.exe found some other way sees no repository.
|
|
@@ -73,7 +94,7 @@ const pointAtOwnCertificates = (root) => {
|
|
|
73
94
|
if (fixed !== text)
|
|
74
95
|
fs.writeFileSync(config, fixed);
|
|
75
96
|
};
|
|
76
|
-
export
|
|
97
|
+
export async function setupGit(env, hostCopy, refresh, access) {
|
|
77
98
|
const root = tool('git');
|
|
78
99
|
const bash = path.join(root, 'bin', 'bash.exe');
|
|
79
100
|
const gitExe = path.join(root, 'cmd', 'git.exe');
|
|
@@ -117,5 +138,7 @@ export const setupGit = async (env, hostCopy, refresh, access) => {
|
|
|
117
138
|
return;
|
|
118
139
|
}
|
|
119
140
|
installGuard(env, access, gitExe);
|
|
120
|
-
env.summary.push(access === 'readonly'
|
|
121
|
-
|
|
141
|
+
env.summary.push(access === 'readonly'
|
|
142
|
+
? 'git: ' + version + ' READ-ONLY (status/log/diff/show/blame; no commit, push, checkout, ...)'
|
|
143
|
+
: 'git: DISABLED (bash only; the agent cannot use git)');
|
|
144
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type ToolEnv } from '../tool-env.js';
|
|
2
|
+
/** Where pwsh.exe lives (the host's Windows Terminal profile points at the same folder under C:\AgentData). */
|
|
3
|
+
export declare function pwshDir(): string;
|
|
4
|
+
export declare function setupPwsh(env: ToolEnv, refresh?: boolean): Promise<void>;
|
|
@@ -1,14 +1,21 @@
|
|
|
1
1
|
// PowerShell 7 (pwsh): the portable zip from PowerShell/PowerShell releases (no MSI: Windows Sandbox would lose it on
|
|
2
2
|
// every boot). Only `pwsh` is added; Windows PowerShell 5.1 (`powershell`, SYSTEM.powershell()) stays what the
|
|
3
3
|
// sandbox's own hooks and scripts use.
|
|
4
|
-
import { pwshAsset } from '
|
|
5
|
-
import { arch, tool } from '
|
|
6
|
-
import { setupSingleExe } from '
|
|
4
|
+
import { pwshAsset } from '../catalogue.js';
|
|
5
|
+
import { arch, tool } from '../tool-env.js';
|
|
6
|
+
import { setupSingleExe } from '../runtimes.js';
|
|
7
7
|
/** Where pwsh.exe lives (the host's Windows Terminal profile points at the same folder under C:\AgentData). */
|
|
8
|
-
export
|
|
9
|
-
|
|
8
|
+
export function pwshDir() {
|
|
9
|
+
return tool('pwsh');
|
|
10
|
+
}
|
|
11
|
+
export async function setupPwsh(env, refresh = false) {
|
|
10
12
|
// pwsh.exe sits at the zip's root next to its runtime and modules: the whole folder is kept.
|
|
11
|
-
await setupSingleExe(env, 'pwsh', 'PowerShell/PowerShell', pwshAsset(arch), 'pwsh.exe', pwshDir(), {
|
|
13
|
+
await setupSingleExe(env, 'pwsh', 'PowerShell/PowerShell', pwshAsset(arch), 'pwsh.exe', pwshDir(), {
|
|
14
|
+
refresh,
|
|
15
|
+
size: '100 MB',
|
|
16
|
+
versionArgs: ['-Version'],
|
|
17
|
+
note: ' (PowerShell 7; powershell is still 5.1)',
|
|
18
|
+
});
|
|
12
19
|
// No update banner or telemetry from a copy that provisioning.refresh replaces anyway.
|
|
13
20
|
Object.assign(env.vars, { POWERSHELL_UPDATECHECK: 'Off', POWERSHELL_TELEMETRY_OPTOUT: '1' });
|
|
14
|
-
}
|
|
21
|
+
}
|
|
@@ -16,15 +16,15 @@ export interface ToolPaths {
|
|
|
16
16
|
ruby?: string;
|
|
17
17
|
deno?: string;
|
|
18
18
|
}
|
|
19
|
-
/** User settings for the sandbox's VS Code. Only keys with a value are set; the caller removes
|
|
20
|
-
export declare
|
|
19
|
+
/** User settings for the sandbox's VS Code. Only keys with a value are set; the caller removes those it set before. */
|
|
20
|
+
export declare function vscodeSettings(p: ToolPaths): Record<string, unknown>;
|
|
21
21
|
export declare const EXTENSION_ID: RegExp;
|
|
22
22
|
/** The extensions to have: always EditorConfig, then per toolchain and database in use, the project's, and yours. */
|
|
23
|
-
export declare
|
|
23
|
+
export declare function vscodeExtensions(o: {
|
|
24
24
|
toolchains: string[];
|
|
25
25
|
databases: string[];
|
|
26
26
|
recommended: string[];
|
|
27
27
|
extra: string[];
|
|
28
|
-
})
|
|
29
|
-
/** Extensions not installed yet, from the names
|
|
30
|
-
export declare
|
|
28
|
+
}): string[];
|
|
29
|
+
/** Extensions not installed yet, from the folder names in VS Code's extensions folder (publisher.name-1.2.3). */
|
|
30
|
+
export declare function missingExtensions(wanted: string[], folders: string[]): string[];
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
// for the languages in use. Pure (tested); vscode.ts finds the paths and writes them.
|
|
3
3
|
/** The JDK's major version from its folder name (jdk-21.0.5+11 -> 21). */
|
|
4
4
|
const javaMajor = (home) => /(?:jdk|jre)?-?(\d{1,2})(?:[.+_-]|$)/i.exec(home.split(/[\\/]/).pop() ?? '')?.[1];
|
|
5
|
-
/** User settings for the sandbox's VS Code. Only keys with a value are set; the caller removes
|
|
6
|
-
export
|
|
5
|
+
/** User settings for the sandbox's VS Code. Only keys with a value are set; the caller removes those it set before. */
|
|
6
|
+
export function vscodeSettings(p) {
|
|
7
7
|
const profiles = {};
|
|
8
8
|
if (p.pwsh)
|
|
9
9
|
profiles['PowerShell 7'] = { path: p.pwsh, args: ['-NoLogo'] };
|
|
@@ -18,14 +18,18 @@ export const vscodeSettings = (p) => {
|
|
|
18
18
|
'terminal.integrated.defaultProfile.windows': p.pwsh ? 'PowerShell 7' : undefined,
|
|
19
19
|
'python.defaultInterpreterPath': p.python,
|
|
20
20
|
'java.jdt.ls.java.home': p.javaHome,
|
|
21
|
-
'java.configuration.runtimes': p.javaHome
|
|
21
|
+
'java.configuration.runtimes': p.javaHome
|
|
22
|
+
? [{ name: 'JavaSE-' + (javaMajor(p.javaHome) ?? '21'), path: p.javaHome, default: true }]
|
|
23
|
+
: undefined,
|
|
22
24
|
'maven.terminal.useJavaHome': p.javaHome ? true : undefined,
|
|
23
25
|
'go.goroot': p.goRoot,
|
|
24
26
|
'go.alternateTools': p.go ? { go: p.go } : undefined,
|
|
25
27
|
'C_Cpp.default.compilerPath': p.cl ?? p.gcc,
|
|
26
28
|
'cmake.cmakePath': p.cmake,
|
|
27
29
|
'dotnet.dotnetPath': p.dotnet ? p.dotnet.replace(/[\\/]dotnet\.exe$/i, '') : undefined,
|
|
28
|
-
'dotnetAcquisitionExtension.existingDotnetPath': p.dotnet
|
|
30
|
+
'dotnetAcquisitionExtension.existingDotnetPath': p.dotnet
|
|
31
|
+
? [{ extensionId: 'ms-dotnettools.csharp', path: p.dotnet }]
|
|
32
|
+
: undefined,
|
|
29
33
|
'php.validate.executablePath': p.php,
|
|
30
34
|
'php.debug.executablePath': p.php,
|
|
31
35
|
'rubyLsp.rubyVersionManager': p.ruby ? { identifier: 'none' } : undefined,
|
|
@@ -34,12 +38,18 @@ export const vscodeSettings = (p) => {
|
|
|
34
38
|
'npm.packageManager': 'auto',
|
|
35
39
|
};
|
|
36
40
|
return Object.fromEntries(Object.entries(settings).filter(([, v]) => v !== undefined));
|
|
37
|
-
}
|
|
41
|
+
}
|
|
38
42
|
/** Extensions per toolchain (Marketplace ids). */
|
|
39
43
|
const BY_TOOLCHAIN = {
|
|
40
44
|
node: ['dbaeumer.vscode-eslint', 'esbenp.prettier-vscode'],
|
|
41
45
|
python: ['ms-python.python', 'ms-python.debugpy'],
|
|
42
|
-
java: [
|
|
46
|
+
java: [
|
|
47
|
+
'redhat.java',
|
|
48
|
+
'vscjava.vscode-java-debug',
|
|
49
|
+
'vscjava.vscode-java-test',
|
|
50
|
+
'vscjava.vscode-maven',
|
|
51
|
+
'vscjava.vscode-gradle',
|
|
52
|
+
],
|
|
43
53
|
go: ['golang.go'],
|
|
44
54
|
rust: ['rust-lang.rust-analyzer', 'vadimcn.vscode-lldb'],
|
|
45
55
|
cpp: ['ms-vscode.cpptools', 'ms-vscode.cmake-tools'],
|
|
@@ -58,12 +68,18 @@ const BY_DATABASE = {
|
|
|
58
68
|
};
|
|
59
69
|
export const EXTENSION_ID = /^[\w-]+\.[\w-]+$/;
|
|
60
70
|
/** The extensions to have: always EditorConfig, then per toolchain and database in use, the project's, and yours. */
|
|
61
|
-
export
|
|
62
|
-
const all = [
|
|
71
|
+
export function vscodeExtensions(o) {
|
|
72
|
+
const all = [
|
|
73
|
+
'editorconfig.editorconfig',
|
|
74
|
+
...o.toolchains.flatMap((t) => BY_TOOLCHAIN[t] ?? []),
|
|
75
|
+
...o.databases.flatMap((d) => BY_DATABASE[d] ?? []),
|
|
76
|
+
...o.recommended,
|
|
77
|
+
...o.extra,
|
|
78
|
+
];
|
|
63
79
|
return [...new Set(all.map((e) => e.toLowerCase()))].filter((e) => EXTENSION_ID.test(e));
|
|
64
|
-
}
|
|
65
|
-
/** Extensions not installed yet, from the names
|
|
66
|
-
export
|
|
80
|
+
}
|
|
81
|
+
/** Extensions not installed yet, from the folder names in VS Code's extensions folder (publisher.name-1.2.3). */
|
|
82
|
+
export function missingExtensions(wanted, folders) {
|
|
67
83
|
const have = folders.map((f) => f.toLowerCase());
|
|
68
84
|
return wanted.filter((id) => !have.some((f) => f.startsWith(id + '-')));
|
|
69
|
-
}
|
|
85
|
+
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import type { Toolchains } from '
|
|
2
|
-
import { type ToolEnv } from '
|
|
1
|
+
import type { Toolchains } from '../../../core/types.js';
|
|
2
|
+
import { type ToolEnv } from '../tool-env.js';
|
|
3
3
|
/**
|
|
4
4
|
* After every toolchain is installed: points VS Code at the sandbox's own JDK, Python, Go, compilers, .NET, Git and
|
|
5
5
|
* terminals (user settings; only the keys this tool manages are changed, your own stay), and installs the extensions
|
|
6
6
|
* for the languages in use in the background (they persist, so only new ones are downloaded).
|
|
7
7
|
*/
|
|
8
|
-
export declare
|
|
8
|
+
export declare function configureVscode(tools: {
|
|
9
9
|
vars: Record<string, string>;
|
|
10
10
|
prepend: string[];
|
|
11
11
|
append: string[];
|
|
@@ -13,7 +13,7 @@ export declare const configureVscode: (tools: {
|
|
|
13
13
|
}, o: {
|
|
14
14
|
toolchains: string[];
|
|
15
15
|
databases: string[];
|
|
16
|
-
config: Toolchains[
|
|
16
|
+
config: Toolchains['vscode'];
|
|
17
17
|
workspace: string;
|
|
18
|
-
})
|
|
19
|
-
export declare
|
|
18
|
+
}): void;
|
|
19
|
+
export declare function setupVscode(env: ToolEnv, refresh: boolean): Promise<void>;
|
|
@@ -5,10 +5,13 @@ import os from 'node:os';
|
|
|
5
5
|
import path from 'node:path';
|
|
6
6
|
import { spawn } from 'node:child_process';
|
|
7
7
|
import { applyEdits, modify, parse as parseJsonc } from 'jsonc-parser';
|
|
8
|
-
import {
|
|
9
|
-
import { SYSTEM } from '
|
|
10
|
-
import { dryRun,
|
|
11
|
-
import {
|
|
8
|
+
import { downloader, fetchJson } from '../../../shared/download/index.js';
|
|
9
|
+
import { SYSTEM } from '../../../shared/system.js';
|
|
10
|
+
import { dryRun, isWin, logsDir } from '../../runtime/paths.js';
|
|
11
|
+
import { exists, mkdirp } from '../../runtime/fs.js';
|
|
12
|
+
import { log } from '../../runtime/log.js';
|
|
13
|
+
import { powershell } from '../../runtime/process.js';
|
|
14
|
+
import { arch, tool } from '../tool-env.js';
|
|
12
15
|
import { EXTENSION_ID, missingExtensions, vscodeExtensions, vscodeSettings } from './vscode-profile.js';
|
|
13
16
|
/** Newer builds keep their files under a commit-hash folder, so the installed version is recorded here. */
|
|
14
17
|
const VERSION_MARKER = '.agent-sandbox-version';
|
|
@@ -17,7 +20,13 @@ const desktopShortcut = (exe) => {
|
|
|
17
20
|
return;
|
|
18
21
|
const link = path.join(os.homedir(), 'Desktop', 'Visual Studio Code.lnk');
|
|
19
22
|
const q = (s) => "'" + s.replace(/'/g, "''") + "'";
|
|
20
|
-
powershell('$s = (New-Object -ComObject WScript.Shell).CreateShortcut(' +
|
|
23
|
+
powershell('$s = (New-Object -ComObject WScript.Shell).CreateShortcut(' +
|
|
24
|
+
q(link) +
|
|
25
|
+
'); $s.TargetPath = ' +
|
|
26
|
+
q(exe) +
|
|
27
|
+
'; $s.Arguments = ' +
|
|
28
|
+
q('"' + (process.env.AGENT_WORKSPACE ?? '') + '"') +
|
|
29
|
+
'; $s.Save()');
|
|
21
30
|
};
|
|
22
31
|
/** The first of `names` in one of `dirs`. */
|
|
23
32
|
const findIn = (dirs, ...names) => {
|
|
@@ -36,7 +45,9 @@ const recommendedBy = (workspace) => {
|
|
|
36
45
|
if (!exists(file) || fs.statSync(file).size > 64 * 1024)
|
|
37
46
|
return [];
|
|
38
47
|
const data = parseJsonc(fs.readFileSync(file, 'utf8'));
|
|
39
|
-
return Array.isArray(data?.recommendations)
|
|
48
|
+
return Array.isArray(data?.recommendations)
|
|
49
|
+
? data.recommendations.filter((r) => typeof r === 'string' && EXTENSION_ID.test(r)).slice(0, 50)
|
|
50
|
+
: [];
|
|
40
51
|
}
|
|
41
52
|
catch {
|
|
42
53
|
return [];
|
|
@@ -47,7 +58,7 @@ const recommendedBy = (workspace) => {
|
|
|
47
58
|
* terminals (user settings; only the keys this tool manages are changed, your own stay), and installs the extensions
|
|
48
59
|
* for the languages in use in the background (they persist, so only new ones are downloaded).
|
|
49
60
|
*/
|
|
50
|
-
export
|
|
61
|
+
export function configureVscode(tools, o) {
|
|
51
62
|
const root = tool('vscode');
|
|
52
63
|
const code = path.join(root, 'bin', 'code.cmd');
|
|
53
64
|
if (dryRun) {
|
|
@@ -59,26 +70,51 @@ export const configureVscode = (tools, o) => {
|
|
|
59
70
|
const dirs = [...tools.prepend, ...tools.append];
|
|
60
71
|
const git = findIn([tool('git', 'cmd'), ...dirs], 'git.exe');
|
|
61
72
|
const settings = vscodeSettings({
|
|
62
|
-
javaHome: tools.vars.JAVA_HOME,
|
|
63
|
-
|
|
64
|
-
|
|
73
|
+
javaHome: tools.vars.JAVA_HOME,
|
|
74
|
+
goRoot: tools.vars.GOROOT,
|
|
75
|
+
go: findIn(dirs, 'go.exe'),
|
|
76
|
+
python: findIn(dirs, 'python.exe'),
|
|
77
|
+
gcc: findIn(dirs, 'gcc.exe'),
|
|
78
|
+
cl: findIn(dirs, 'cl.exe'),
|
|
79
|
+
cmake: findIn(dirs, 'cmake.exe'),
|
|
80
|
+
dotnet: findIn(dirs, 'dotnet.exe'),
|
|
81
|
+
node: findIn(dirs, 'node.exe'),
|
|
82
|
+
pwsh: findIn(dirs, 'pwsh.exe'),
|
|
83
|
+
git,
|
|
84
|
+
bash: git ? findIn([path.join(path.dirname(path.dirname(git)), 'bin')], 'bash.exe') : undefined,
|
|
85
|
+
php: findIn(dirs, 'php.exe'),
|
|
86
|
+
ruby: findIn(dirs, 'ruby.exe'),
|
|
87
|
+
deno: findIn(dirs, 'deno.exe'),
|
|
65
88
|
});
|
|
66
89
|
writeManagedSettings(path.join(root, 'data', 'user-data', 'User', 'settings.json'), path.join(root, 'data', '.agent-sandbox-managed.json'), settings);
|
|
67
|
-
const wanted = vscodeExtensions({
|
|
90
|
+
const wanted = vscodeExtensions({
|
|
91
|
+
toolchains: o.toolchains,
|
|
92
|
+
databases: o.databases,
|
|
93
|
+
recommended: o.config.recommended ? recommendedBy(o.workspace) : [],
|
|
94
|
+
extra: o.config.extensions,
|
|
95
|
+
});
|
|
68
96
|
let folders = [];
|
|
69
97
|
try {
|
|
70
98
|
folders = fs.readdirSync(path.join(root, 'data', 'extensions'));
|
|
71
99
|
}
|
|
72
|
-
catch {
|
|
100
|
+
catch {
|
|
101
|
+
/* none yet */
|
|
102
|
+
}
|
|
73
103
|
const missing = missingExtensions(wanted, folders);
|
|
74
|
-
tools.summary.push('vscode: set up for ' +
|
|
104
|
+
tools.summary.push('vscode: set up for ' +
|
|
105
|
+
(o.toolchains.join(', ') || 'Node') +
|
|
106
|
+
(missing.length ? '; installing ' + missing.length + ' extension(s) in the background' : '; extensions ready'));
|
|
75
107
|
if (!missing.length)
|
|
76
108
|
return;
|
|
77
109
|
// In the background: the Marketplace can take a minute, and nothing else waits for it.
|
|
78
110
|
const logFile = fs.openSync(path.join(logsDir, 'vscode-extensions.log'), 'a');
|
|
79
|
-
spawn(SYSTEM.cmd(), ['/d', '/c', code, ...missing.flatMap((id) => ['--install-extension', id])], {
|
|
111
|
+
spawn(SYSTEM.cmd(), ['/d', '/c', code, ...missing.flatMap((id) => ['--install-extension', id])], {
|
|
112
|
+
detached: true,
|
|
113
|
+
stdio: ['ignore', logFile, logFile],
|
|
114
|
+
windowsHide: true,
|
|
115
|
+
}).unref();
|
|
80
116
|
fs.closeSync(logFile);
|
|
81
|
-
}
|
|
117
|
+
}
|
|
82
118
|
/**
|
|
83
119
|
* Sets `values` in a settings file, keeping everything else (comments too), and removes keys this tool set last time
|
|
84
120
|
* but no longer has a value for (a toolchain turned off). The keys it manages are remembered in `managedFile`.
|
|
@@ -89,7 +125,9 @@ const writeManagedSettings = (file, managedFile, values) => {
|
|
|
89
125
|
try {
|
|
90
126
|
before = JSON.parse(fs.readFileSync(managedFile, 'utf8'));
|
|
91
127
|
}
|
|
92
|
-
catch {
|
|
128
|
+
catch {
|
|
129
|
+
/* first time */
|
|
130
|
+
}
|
|
93
131
|
const format = { formattingOptions: { insertSpaces: true, tabSize: 2, eol: '\n' } };
|
|
94
132
|
for (const key of before.filter((k) => !(k in values))) {
|
|
95
133
|
if (parseJsonc(text)?.[key] !== undefined)
|
|
@@ -101,7 +139,7 @@ const writeManagedSettings = (file, managedFile, values) => {
|
|
|
101
139
|
fs.writeFileSync(file, text);
|
|
102
140
|
fs.writeFileSync(managedFile, JSON.stringify(Object.keys(values)));
|
|
103
141
|
};
|
|
104
|
-
export
|
|
142
|
+
export async function setupVscode(env, refresh) {
|
|
105
143
|
const root = tool('vscode');
|
|
106
144
|
const exe = path.join(root, 'Code.exe');
|
|
107
145
|
if (dryRun) {
|
|
@@ -109,7 +147,9 @@ export const setupVscode = async (env, refresh) => {
|
|
|
109
147
|
return;
|
|
110
148
|
}
|
|
111
149
|
if (!exists(exe) || refresh) {
|
|
112
|
-
const release = await fetchJson('https://update.code.visualstudio.com/api/update/win32-' +
|
|
150
|
+
const release = await fetchJson('https://update.code.visualstudio.com/api/update/win32-' +
|
|
151
|
+
(arch === 'arm64' ? 'arm64' : 'x64') +
|
|
152
|
+
'-archive/stable/latest');
|
|
113
153
|
log('Downloading VS Code ' + release.productVersion + ' (~150 MB once) ...');
|
|
114
154
|
// Keep settings/extensions across a refresh: move the portable data folder aside and back, also when the install
|
|
115
155
|
// fails (finally). A folder still parked from an interrupted earlier run is the one to keep.
|
|
@@ -120,7 +160,11 @@ export const setupVscode = async (env, refresh) => {
|
|
|
120
160
|
fs.renameSync(keep, parked);
|
|
121
161
|
}
|
|
122
162
|
try {
|
|
123
|
-
await
|
|
163
|
+
await downloader.archive(release.url, root, {
|
|
164
|
+
sha256: release.sha256hash,
|
|
165
|
+
locate: 'Code.exe',
|
|
166
|
+
fileName: 'vscode.zip',
|
|
167
|
+
});
|
|
124
168
|
fs.writeFileSync(path.join(root, VERSION_MARKER), release.productVersion);
|
|
125
169
|
}
|
|
126
170
|
finally {
|
|
@@ -134,6 +178,8 @@ export const setupVscode = async (env, refresh) => {
|
|
|
134
178
|
mkdirp(path.join(root, 'data'));
|
|
135
179
|
env.prepend.push(path.join(root, 'bin'));
|
|
136
180
|
desktopShortcut(exe);
|
|
137
|
-
const version = exists(path.join(root, VERSION_MARKER))
|
|
181
|
+
const version = exists(path.join(root, VERSION_MARKER))
|
|
182
|
+
? fs.readFileSync(path.join(root, VERSION_MARKER), 'utf8').trim()
|
|
183
|
+
: 'installed';
|
|
138
184
|
env.summary.push('vscode: ' + version + ' (portable; run code . or use the desktop shortcut)');
|
|
139
|
-
}
|
|
185
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export declare class VersionCache {
|
|
2
|
+
private readonly file;
|
|
3
|
+
/** Set after a network failure: the remaining lookups go straight to the remembered versions. */
|
|
4
|
+
private offline;
|
|
5
|
+
constructor(file?: () => string);
|
|
6
|
+
/**
|
|
7
|
+
* Resolves a version online and remembers it for a day (provisioning.refresh looks again). After a network failure
|
|
8
|
+
* the remaining lookups use the remembered versions instead of each waiting for the network; other errors (no such
|
|
9
|
+
* version) do not.
|
|
10
|
+
*/
|
|
11
|
+
resolve(key: string, resolve: () => Promise<string>): Promise<string>;
|
|
12
|
+
private remembered;
|
|
13
|
+
}
|
|
14
|
+
export declare const versionCache: VersionCache;
|
|
15
|
+
/** versionCache.resolve: the version for `key`, looked up at most once a day. */
|
|
16
|
+
export declare function resolveCached(key: string, resolve: () => Promise<string>): Promise<string>;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
// Versions looked up online, remembered in tools\resolved-versions.json so most boots make no lookups and an offline
|
|
2
|
+
// boot reuses what was installed last time.
|
|
3
|
+
import fs from 'node:fs';
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
import { writeJsonAtomic } from '../../shared/io/json.js';
|
|
6
|
+
import { warn } from '../runtime/log.js';
|
|
7
|
+
import { session } from '../runtime/session.js';
|
|
8
|
+
import { toolsDir } from '../runtime/paths.js';
|
|
9
|
+
import { errMsg } from '../../core/util/errors.js';
|
|
10
|
+
import { tool } from './tool-env.js';
|
|
11
|
+
import { readState } from './state-file.js';
|
|
12
|
+
/** A remembered lookup; plain strings are what older versions wrote (treated as stale, still usable offline). */
|
|
13
|
+
const ResolvedSchema = z.record(z.string(), z.union([z.string(), z.strictObject({ value: z.string(), at: z.number() })]));
|
|
14
|
+
/** How long a looked-up version is trusted: boots within a day make no version lookups at all. */
|
|
15
|
+
const FRESH_MS = 24 * 60 * 60 * 1000;
|
|
16
|
+
function isNetworkError(e) {
|
|
17
|
+
return /fetch failed|timed? ?out|aborted|ENOTFOUND|EAI_AGAIN|ECONN|ENETUNREACH|EHOSTUNREACH|HTTP 5\d\d|socket/i.test(errMsg(e) + ' ' + String(e?.cause ?? ''));
|
|
18
|
+
}
|
|
19
|
+
export class VersionCache {
|
|
20
|
+
file;
|
|
21
|
+
/** Set after a network failure: the remaining lookups go straight to the remembered versions. */
|
|
22
|
+
offline = false;
|
|
23
|
+
constructor(file = () => tool('resolved-versions.json')) {
|
|
24
|
+
this.file = file;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Resolves a version online and remembers it for a day (provisioning.refresh looks again). After a network failure
|
|
28
|
+
* the remaining lookups use the remembered versions instead of each waiting for the network; other errors (no such
|
|
29
|
+
* version) do not.
|
|
30
|
+
*/
|
|
31
|
+
async resolve(key, resolve) {
|
|
32
|
+
const cached = this.remembered()[key];
|
|
33
|
+
if (cached && (this.offline || (!session.provisioning.refresh && Date.now() - cached.at < FRESH_MS)))
|
|
34
|
+
return cached.value;
|
|
35
|
+
try {
|
|
36
|
+
const value = await resolve();
|
|
37
|
+
fs.mkdirSync(toolsDir, { recursive: true });
|
|
38
|
+
writeJsonAtomic(this.file(), { ...this.remembered(), [key]: { value, at: Date.now() } });
|
|
39
|
+
return value;
|
|
40
|
+
}
|
|
41
|
+
catch (e) {
|
|
42
|
+
if (isNetworkError(e))
|
|
43
|
+
this.offline = true;
|
|
44
|
+
if (!cached)
|
|
45
|
+
throw e;
|
|
46
|
+
warn('Could not look up the latest ' +
|
|
47
|
+
key +
|
|
48
|
+
' online (' +
|
|
49
|
+
errMsg(e) +
|
|
50
|
+
'); using ' +
|
|
51
|
+
cached.value +
|
|
52
|
+
' from an earlier start.');
|
|
53
|
+
return cached.value;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
remembered() {
|
|
57
|
+
return Object.fromEntries(Object.entries(readState(this.file(), ResolvedSchema, {})).map(([k, v]) => [
|
|
58
|
+
k,
|
|
59
|
+
typeof v === 'string' ? { value: v, at: 0 } : v,
|
|
60
|
+
]));
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
export const versionCache = new VersionCache();
|
|
64
|
+
/** versionCache.resolve: the version for `key`, looked up at most once a day. */
|
|
65
|
+
export function resolveCached(key, resolve) {
|
|
66
|
+
return versionCache.resolve(key, resolve);
|
|
67
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Config } from '../../core/types.js';
|
|
2
|
+
export declare const commandsDir: (storageRoot: string) => string;
|
|
3
|
+
export interface AgentCommand {
|
|
4
|
+
harness: string;
|
|
5
|
+
command: string;
|
|
6
|
+
real: string;
|
|
7
|
+
}
|
|
8
|
+
/** cmd.exe expands % and ^ even inside quotes: such paths cannot go into a forwarding file safely. */
|
|
9
|
+
export declare const cmdSafe: (p: string) => boolean;
|
|
10
|
+
/** The agent's own executable on this PC, skipping this tool's forwarding files. */
|
|
11
|
+
export declare const realAgent: (command: string, skipDir: string, pathValue?: string) => string | null;
|
|
12
|
+
/** The agents that get a forwarding command: installed on this PC, and listed (or "auto" = all of them). */
|
|
13
|
+
export declare const agentCommands: (config: Config, storageRoot: string, pathValue?: string) => AgentCommand[];
|