windows-development-sandbox 1.4.0 → 1.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.sandbox-config.example.json +2 -1
- package/config.example.json +4 -1
- package/dist/api.js +27 -16
- package/dist/cli/args.d.ts +4 -6
- package/dist/cli/args.js +67 -34
- package/dist/cli/argv.d.ts +9 -0
- package/dist/cli/argv.js +22 -0
- package/dist/cli/commands/accounts.d.ts +1 -1
- package/dist/cli/commands/accounts.js +42 -27
- package/dist/cli/commands/agent-commands.d.ts +3 -3
- package/dist/cli/commands/agent-commands.js +27 -18
- package/dist/cli/commands/context.d.ts +9 -11
- package/dist/cli/commands/context.js +35 -32
- package/dist/cli/commands/data/clean.d.ts +2 -2
- package/dist/cli/commands/data/clean.js +27 -11
- package/dist/cli/commands/data/collect.d.ts +6 -3
- package/dist/cli/commands/data/collect.js +46 -15
- package/dist/cli/commands/data/index.d.ts +2 -2
- package/dist/cli/commands/data/index.js +30 -12
- package/dist/cli/commands/data/remove.d.ts +1 -1
- package/dist/cli/commands/data/remove.js +4 -4
- package/dist/cli/commands/index.d.ts +5 -4
- package/dist/cli/commands/index.js +5 -4
- package/dist/cli/commands/launch/add-root.d.ts +7 -0
- package/dist/cli/commands/launch/add-root.js +64 -0
- package/dist/cli/commands/launch/boot-progress.d.ts +7 -0
- package/dist/cli/commands/launch/boot-progress.js +48 -0
- package/dist/cli/commands/launch/boot-wants.d.ts +11 -0
- package/dist/cli/commands/launch/boot-wants.js +48 -0
- package/dist/cli/commands/launch/first-start.d.ts +10 -0
- package/dist/cli/commands/launch/first-start.js +53 -0
- package/dist/cli/commands/launch/index.d.ts +6 -0
- package/dist/cli/commands/launch/index.js +6 -0
- package/dist/cli/commands/launch/launch.d.ts +8 -0
- package/dist/cli/commands/launch/launch.js +211 -0
- package/dist/cli/commands/launch/prepare.d.ts +23 -0
- package/dist/cli/commands/launch/prepare.js +109 -0
- package/dist/cli/commands/launch/running.d.ts +45 -0
- package/dist/cli/commands/launch/running.js +218 -0
- package/dist/cli/commands/launch/summary.d.ts +8 -0
- package/dist/cli/commands/launch/summary.js +98 -0
- package/dist/cli/commands/maintenance/audit.d.ts +3 -0
- package/dist/cli/commands/maintenance/audit.js +58 -0
- package/dist/cli/commands/maintenance/clean.d.ts +2 -0
- package/dist/cli/commands/maintenance/clean.js +10 -0
- package/dist/cli/commands/maintenance/config.d.ts +2 -0
- package/dist/cli/commands/maintenance/config.js +145 -0
- package/dist/cli/commands/maintenance/doctor.d.ts +2 -0
- package/dist/cli/commands/maintenance/doctor.js +52 -0
- package/dist/cli/commands/maintenance/host-claude.d.ts +2 -0
- package/dist/cli/commands/maintenance/host-claude.js +4 -0
- package/dist/cli/commands/maintenance/index.d.ts +8 -0
- package/dist/cli/commands/maintenance/index.js +9 -0
- package/dist/cli/commands/maintenance/logs.d.ts +2 -0
- package/dist/cli/commands/maintenance/logs.js +44 -0
- package/dist/cli/commands/maintenance/sync.d.ts +2 -0
- package/dist/cli/commands/maintenance/sync.js +12 -0
- package/dist/cli/commands/maintenance/watch.d.ts +3 -0
- package/dist/cli/commands/maintenance/watch.js +6 -0
- package/dist/cli/commands/projects/describe-sessions.d.ts +3 -0
- package/dist/cli/commands/projects/describe-sessions.js +15 -0
- package/dist/cli/commands/projects/here.d.ts +38 -0
- package/dist/cli/commands/projects/here.js +145 -0
- package/dist/cli/commands/projects/index.d.ts +4 -0
- package/dist/cli/commands/projects/index.js +4 -0
- package/dist/cli/commands/projects/projects.d.ts +14 -0
- package/dist/cli/commands/projects/projects.js +213 -0
- package/dist/cli/commands/projects/restart.d.ts +15 -0
- package/dist/cli/commands/projects/restart.js +149 -0
- package/dist/cli/commands/registry.d.ts +3 -0
- package/dist/cli/commands/registry.js +34 -0
- package/dist/cli/commands/repair/checks.js +105 -29
- package/dist/cli/commands/repair/finders.d.ts +13 -10
- package/dist/cli/commands/repair/finders.js +63 -43
- package/dist/cli/commands/repair/index.d.ts +4 -4
- package/dist/cli/commands/repair/index.js +47 -21
- package/dist/cli/commands/repair/types.d.ts +2 -2
- package/dist/cli/commands/repair/types.js +7 -2
- package/dist/cli/commands/sessions/attach.d.ts +2 -0
- package/dist/cli/commands/sessions/attach.js +45 -0
- package/dist/cli/commands/sessions/control.d.ts +4 -0
- package/dist/cli/commands/sessions/control.js +62 -0
- package/dist/cli/commands/sessions/exec.d.ts +6 -0
- package/dist/cli/commands/sessions/exec.js +72 -0
- package/dist/cli/commands/sessions/index.d.ts +6 -0
- package/dist/cli/commands/sessions/index.js +9 -0
- package/dist/cli/commands/sessions/list.d.ts +15 -0
- package/dist/cli/commands/sessions/list.js +65 -0
- package/dist/cli/commands/sessions/status.d.ts +2 -0
- package/dist/cli/commands/sessions/status.js +153 -0
- package/dist/cli/commands/sessions/window.d.ts +3 -0
- package/dist/cli/commands/sessions/window.js +18 -0
- package/dist/cli/commands/setup/checks.d.ts +4 -4
- package/dist/cli/commands/setup/checks.js +36 -19
- package/dist/cli/commands/setup/facts.d.ts +6 -6
- package/dist/cli/commands/setup/facts.js +23 -11
- package/dist/cli/commands/setup/index.d.ts +1 -1
- package/dist/cli/commands/setup/index.js +25 -12
- package/dist/cli/commands/user-config.d.ts +5 -5
- package/dist/cli/commands/user-config.js +14 -12
- package/dist/cli/history.d.ts +5 -4
- package/dist/cli/history.js +23 -11
- package/dist/cli/index.d.ts +4 -14
- package/dist/cli/index.js +27 -77
- package/dist/cli/manifest.d.ts +464 -10
- package/dist/cli/manifest.js +328 -54
- package/dist/cli/menu/apps.d.ts +7 -5
- package/dist/cli/menu/apps.js +64 -16
- package/dist/cli/menu/command-fields.d.ts +15 -0
- package/dist/cli/menu/command-fields.js +23 -0
- package/dist/cli/menu/command-form.d.ts +3 -5
- package/dist/cli/menu/command-form.js +116 -48
- package/dist/cli/menu/home.d.ts +22 -0
- package/dist/cli/menu/home.js +72 -0
- package/dist/cli/menu/index.d.ts +2 -24
- package/dist/cli/menu/index.js +4 -178
- package/dist/cli/menu/menu.d.ts +23 -0
- package/dist/cli/menu/menu.js +185 -0
- package/dist/cli/menu/settings/categories.d.ts +2 -2
- package/dist/cli/menu/settings/categories.js +123 -20
- package/dist/cli/menu/settings/collections/collection-editor.d.ts +23 -0
- package/dist/cli/menu/settings/collections/collection-editor.js +89 -0
- package/dist/cli/menu/settings/collections/map-editor.d.ts +10 -0
- package/dist/cli/menu/settings/collections/map-editor.js +34 -0
- package/dist/cli/menu/settings/collections/object-list-editor.d.ts +10 -0
- package/dist/cli/menu/settings/collections/object-list-editor.js +23 -0
- package/dist/cli/menu/settings/collections/object-map-editor.d.ts +10 -0
- package/dist/cli/menu/settings/collections/object-map-editor.js +35 -0
- package/dist/cli/menu/settings/collections/string-list-editor.d.ts +12 -0
- package/dist/cli/menu/settings/collections/string-list-editor.js +39 -0
- package/dist/cli/menu/settings/config-file.d.ts +2 -2
- package/dist/cli/menu/settings/config-file.js +42 -19
- package/dist/cli/menu/settings/editor-actions.d.ts +2 -0
- package/dist/cli/menu/settings/editor-actions.js +2 -0
- package/dist/cli/menu/settings/format.d.ts +5 -0
- package/dist/cli/menu/settings/format.js +39 -0
- package/dist/cli/menu/settings/index.d.ts +1 -29
- package/dist/cli/menu/settings/index.js +1 -133
- package/dist/cli/menu/settings/object-editor.d.ts +12 -0
- package/dist/cli/menu/settings/object-editor.js +86 -0
- package/dist/cli/menu/settings/schema-node.d.ts +3 -1
- package/dist/cli/menu/settings/schema-node.js +71 -24
- package/dist/cli/menu/settings/settings-editor.d.ts +30 -0
- package/dist/cli/menu/settings/settings-editor.js +176 -0
- package/dist/cli/menu/settings/{editors.d.ts → value-editor.d.ts} +2 -13
- package/dist/cli/menu/settings/value-editor.js +137 -0
- package/dist/cli/menu/several.d.ts +4 -4
- package/dist/cli/menu/several.js +61 -20
- package/dist/cli/{colors.d.ts → output/colors.d.ts} +8 -8
- package/dist/cli/{colors.js → output/colors.js} +32 -14
- package/dist/cli/output/index.d.ts +3 -0
- package/dist/cli/output/index.js +3 -0
- package/dist/cli/output/print.d.ts +5 -0
- package/dist/cli/output/print.js +14 -0
- package/dist/cli/output/progress.d.ts +24 -0
- package/dist/cli/output/progress.js +124 -0
- package/dist/cli/report.d.ts +2 -0
- package/dist/cli/report.js +20 -0
- package/dist/cli/tui/app.d.ts +6 -16
- package/dist/cli/tui/app.js +28 -8
- package/dist/cli/tui/dialogs/confirm-screen.d.ts +20 -0
- package/dist/cli/tui/dialogs/confirm-screen.js +50 -0
- package/dist/cli/tui/dialogs/message-screen.d.ts +17 -0
- package/dist/cli/tui/dialogs/message-screen.js +55 -0
- package/dist/cli/tui/dialogs/paragraphs.d.ts +2 -0
- package/dist/cli/tui/dialogs/paragraphs.js +5 -0
- package/dist/cli/tui/dialogs/text-screen.d.ts +26 -0
- package/dist/cli/tui/dialogs/text-screen.js +107 -0
- package/dist/cli/tui/frame.js +3 -1
- package/dist/cli/tui/index.d.ts +7 -3
- package/dist/cli/tui/index.js +4 -2
- package/dist/cli/tui/list/list-screen.d.ts +29 -0
- package/dist/cli/tui/{list-screen.js → list/list-screen.js} +86 -23
- package/dist/cli/tui/{list-screen.d.ts → list/list-types.d.ts} +0 -28
- package/dist/cli/tui/screen.d.ts +14 -0
- package/dist/cli/tui/terminal.js +34 -10
- package/dist/cli/tui/text.d.ts +2 -1
- package/dist/cli/tui/text.js +37 -7
- package/dist/cli/tui/theme.js +27 -9
- package/dist/cli/validate.d.ts +8 -8
- package/dist/cli/validate.js +32 -21
- package/dist/core/config/defaults.d.ts +2 -0
- package/dist/core/config/defaults.js +203 -0
- package/dist/core/config/index.d.ts +2 -0
- package/dist/core/config/index.js +3 -0
- package/dist/core/{config.d.ts → config/loader.d.ts} +1 -2
- package/dist/core/config/loader.js +47 -0
- package/dist/core/{detect-databases.js → detect/databases.js} +111 -23
- package/dist/core/detect/index.d.ts +4 -0
- package/dist/core/detect/index.js +4 -0
- package/dist/core/{detect-pwsh.d.ts → detect/pwsh.d.ts} +1 -1
- package/dist/core/{detect-pwsh.js → detect/pwsh.js} +25 -11
- package/dist/core/{detect-toolchains.d.ts → detect/toolchains.d.ts} +1 -1
- package/dist/core/{detect-toolchains.js → detect/toolchains.js} +42 -5
- package/dist/{guest/toolchains → core/detect}/versions.js +28 -12
- package/dist/core/disk.d.ts +2 -0
- package/dist/core/disk.js +46 -3
- package/dist/core/local-config/boot-wants.d.ts +45 -0
- package/dist/core/local-config/boot-wants.js +120 -0
- package/dist/core/local-config/file.d.ts +3 -0
- package/dist/core/local-config/file.js +16 -0
- package/dist/core/local-config/index.d.ts +5 -0
- package/dist/core/local-config/index.js +7 -0
- package/dist/core/{local-config.d.ts → local-config/overrides.d.ts} +11 -11
- package/dist/core/{local-config.js → local-config/overrides.js} +53 -54
- package/dist/core/{project-policy.d.ts → local-config/policy.d.ts} +7 -3
- package/dist/core/{project-policy.js → local-config/policy.js} +16 -6
- package/dist/core/local-config/trust.d.ts +13 -0
- package/dist/core/local-config/trust.js +43 -0
- package/dist/core/package-info.d.ts +4 -0
- package/dist/core/package-info.js +13 -0
- package/dist/core/run/guest-workspace.d.ts +23 -0
- package/dist/core/run/guest-workspace.js +47 -0
- package/dist/core/run/index.d.ts +3 -0
- package/dist/core/run/index.js +3 -0
- package/dist/core/run/resolve-run.d.ts +3 -0
- package/dist/core/run/resolve-run.js +202 -0
- package/dist/core/run/versions.d.ts +13 -0
- package/dist/core/run/versions.js +65 -0
- package/dist/core/safe-paths.js +17 -5
- package/dist/core/schema/apps.d.ts +4 -4
- package/dist/core/schema/apps.js +55 -21
- package/dist/core/schema/common.d.ts +13 -10
- package/dist/core/schema/common.js +16 -10
- package/dist/core/schema/config.d.ts +18 -12
- package/dist/core/schema/config.js +78 -53
- package/dist/core/schema/databases.d.ts +4 -3
- package/dist/core/schema/databases.js +16 -12
- package/dist/core/schema/harness.d.ts +1 -1
- package/dist/core/schema/harness.js +17 -7
- package/dist/core/schema/index.d.ts +6 -0
- package/dist/core/schema/index.js +8 -0
- package/dist/core/schema/json-schema.js +10 -5
- package/dist/core/schema/profile.d.ts +4 -4
- package/dist/core/schema/profile.js +37 -17
- package/dist/core/schema/projects.d.ts +2 -1
- package/dist/core/schema/projects.js +16 -5
- package/dist/core/schema/sandbox.d.ts +12 -12
- package/dist/core/schema/sandbox.js +101 -37
- package/dist/core/schema/toolchains.d.ts +6 -1
- package/dist/core/schema/toolchains.js +84 -34
- package/dist/core/types.d.ts +36 -9
- package/dist/core/util/errors.d.ts +8 -0
- package/dist/core/util/errors.js +14 -0
- package/dist/core/util/fs.d.ts +8 -0
- package/dist/core/util/fs.js +40 -0
- package/dist/core/util/index.d.ts +7 -0
- package/dist/core/util/index.js +7 -0
- package/dist/core/util/jsonc.d.ts +6 -0
- package/dist/core/util/jsonc.js +25 -0
- package/dist/core/util/links.d.ts +10 -0
- package/dist/core/util/links.js +39 -0
- package/dist/core/util/paths.d.ts +7 -0
- package/dist/core/util/paths.js +33 -0
- package/dist/core/util/process.d.ts +15 -0
- package/dist/core/util/process.js +54 -0
- package/dist/core/util/text.d.ts +8 -0
- package/dist/core/util/text.js +8 -0
- package/dist/guest/{setup/agents.js → agents/agent-installer.js} +24 -4
- package/dist/guest/apps/after-install.d.ts +3 -0
- package/dist/guest/apps/after-install.js +47 -0
- package/dist/guest/apps/app-installer.d.ts +22 -0
- package/dist/guest/apps/app-installer.js +116 -0
- package/dist/guest/apps/find-exe.d.ts +5 -0
- package/dist/guest/apps/find-exe.js +41 -0
- package/dist/guest/apps/index.d.ts +3 -10
- package/dist/guest/apps/index.js +6 -206
- package/dist/guest/apps/resolvers.js +37 -9
- package/dist/guest/apps/shortcuts.d.ts +6 -0
- package/dist/guest/apps/shortcuts.js +28 -0
- package/dist/guest/apps/sources.d.ts +4 -0
- package/dist/guest/apps/sources.js +17 -0
- package/dist/guest/apps/unpack.d.ts +3 -0
- package/dist/guest/apps/unpack.js +47 -0
- package/dist/guest/{audit-parse.js → audit/parse.js} +39 -3
- package/dist/guest/{audit.d.ts → audit/process-audit.d.ts} +3 -1
- package/dist/guest/{audit.js → audit/process-audit.js} +33 -8
- package/dist/guest/boot/boot-env.d.ts +4 -0
- package/dist/guest/{boot-env.js → boot/boot-env.js} +7 -5
- package/dist/guest/boot/boot.d.ts +1 -0
- package/dist/guest/{main.js → boot/boot.js} +100 -50
- package/dist/guest/{guide.js → boot/guide.js} +32 -7
- package/dist/guest/{project-env.d.ts → boot/project-env.d.ts} +3 -3
- package/dist/guest/{project-env.js → boot/project-env.js} +12 -4
- package/dist/guest/boot/project-status.d.ts +5 -0
- package/dist/guest/boot/project-status.js +28 -0
- package/dist/guest/daemon/daemon.d.ts +1 -0
- package/dist/guest/daemon/daemon.js +51 -0
- package/dist/guest/daemon/exec.js +18 -6
- package/dist/guest/daemon/{shutdown.js → idle-shutdown.js} +5 -4
- package/dist/guest/daemon/{project.d.ts → project-provisioner.d.ts} +3 -3
- package/dist/guest/daemon/{project.js → project-provisioner.js} +60 -22
- package/dist/guest/daemon/relays.js +5 -3
- package/dist/guest/daemon/{session.js → sessions.js} +84 -24
- package/dist/guest/daemon/state.d.ts +4 -1
- package/dist/guest/daemon/state.js +34 -20
- package/dist/guest/databases/database-server.d.ts +13 -0
- package/dist/guest/databases/database-server.js +35 -0
- package/dist/guest/databases/dynamodb.d.ts +12 -0
- package/dist/guest/databases/dynamodb.js +81 -0
- package/dist/guest/databases/index.d.ts +2 -0
- package/dist/guest/databases/index.js +2 -0
- package/dist/guest/databases/mongodb.d.ts +7 -0
- package/dist/guest/databases/mongodb.js +46 -0
- package/dist/guest/databases/mysql.d.ts +7 -0
- package/dist/guest/databases/mysql.js +59 -0
- package/dist/guest/databases/names.d.ts +5 -0
- package/dist/guest/databases/names.js +8 -0
- package/dist/guest/databases/postgres.d.ts +9 -0
- package/dist/guest/databases/postgres.js +85 -0
- package/dist/guest/databases/redis.d.ts +7 -0
- package/dist/guest/databases/redis.js +25 -0
- package/dist/guest/databases/registry.d.ts +5 -0
- package/dist/guest/databases/registry.js +51 -0
- package/dist/guest/databases/sbx-db.d.ts +1 -0
- package/dist/guest/{db.js → databases/sbx-db.js} +13 -13
- package/dist/guest/{toolchains/databases → databases}/server.d.ts +5 -5
- package/dist/guest/{toolchains/databases → databases}/server.js +18 -13
- package/dist/guest/entries/daemon.js +16 -0
- package/dist/guest/entries/db.js +10 -0
- package/dist/guest/entries/gitguard.js +20 -0
- package/dist/guest/entries/main.d.ts +1 -0
- package/dist/guest/entries/main.js +24 -0
- package/dist/guest/entries/netproxy.d.ts +1 -0
- package/dist/guest/entries/netproxy.js +7 -0
- package/dist/guest/entries/view.d.ts +1 -0
- package/dist/guest/entries/view.js +11 -0
- package/dist/guest/{gitguard.js → git/decision.js} +49 -26
- package/dist/guest/network/addresses.d.ts +2 -0
- package/dist/guest/network/addresses.js +6 -0
- package/dist/guest/{setup/network.d.ts → network/allow-only.d.ts} +0 -10
- package/dist/guest/network/allow-only.js +84 -0
- package/dist/guest/network/firewall.d.ts +9 -0
- package/dist/guest/{setup/network.js → network/firewall.js} +58 -63
- package/dist/guest/network/proxy-server.d.ts +2 -0
- package/dist/guest/{netproxy.js → network/proxy-server.js} +37 -18
- package/dist/guest/{helpers.d.ts → runtime/csc.d.ts} +1 -1
- package/dist/guest/{helpers.js → runtime/csc.js} +7 -2
- package/dist/guest/runtime/fs.d.ts +2 -0
- package/dist/guest/runtime/fs.js +6 -0
- package/dist/guest/runtime/log.d.ts +3 -0
- package/dist/guest/runtime/log.js +22 -0
- package/dist/guest/runtime/paths.d.ts +13 -0
- package/dist/guest/runtime/paths.js +14 -0
- package/dist/guest/{ports.js → runtime/ports.js} +8 -2
- package/dist/guest/runtime/process.d.ts +15 -0
- package/dist/guest/runtime/process.js +59 -0
- package/dist/guest/{project-context.js → runtime/project-context.js} +1 -1
- package/dist/guest/runtime/session.d.ts +5 -0
- package/dist/guest/runtime/session.js +10 -0
- package/dist/guest/runtime/status.d.ts +7 -0
- package/dist/guest/runtime/status.js +57 -0
- package/dist/guest/{cmdline.js → sessions/cmdline.js} +10 -4
- package/dist/guest/{ptyhost.js → sessions/pty-host.js} +12 -5
- package/dist/guest/{view.js → sessions/viewer.js} +8 -11
- package/dist/guest/setup/claude-mem.d.ts +10 -0
- package/dist/guest/setup/{claude.js → claude-mem.js} +18 -78
- package/dist/guest/setup/{claude.d.ts → claude-profile.d.ts} +0 -10
- package/dist/guest/setup/claude-profile.js +89 -0
- package/dist/guest/setup/desktop.d.ts +2 -0
- package/dist/guest/setup/desktop.js +32 -0
- package/dist/guest/setup/environment.js +28 -5
- package/dist/guest/setup/{user.d.ts → git-identity.d.ts} +0 -2
- package/dist/guest/setup/git-identity.js +34 -0
- package/dist/guest/{gitrules.d.ts → setup/git-rules.d.ts} +1 -1
- package/dist/guest/setup/git-rules.js +50 -0
- package/dist/guest/setup/hooks.js +22 -5
- package/dist/guest/setup/{policy.js → managed-policy.js} +2 -2
- package/dist/guest/toolchains/catalogue.d.ts +4 -4
- package/dist/guest/toolchains/catalogue.js +30 -7
- package/dist/guest/toolchains/detect.d.ts +12 -0
- package/dist/guest/toolchains/detect.js +54 -0
- package/dist/guest/toolchains/index.d.ts +3 -17
- package/dist/guest/toolchains/index.js +1 -80
- package/dist/guest/toolchains/install.d.ts +20 -0
- package/dist/guest/toolchains/install.js +29 -0
- package/dist/guest/toolchains/languages/go.d.ts +3 -0
- package/dist/guest/toolchains/{go.js → languages/go.js} +27 -9
- package/dist/guest/toolchains/languages/java.d.ts +8 -0
- package/dist/guest/toolchains/{java.js → languages/java.js} +57 -18
- package/dist/guest/toolchains/languages/node.d.ts +3 -0
- package/dist/guest/toolchains/{node.js → languages/node.js} +51 -18
- package/dist/guest/toolchains/languages/php.d.ts +3 -0
- package/dist/guest/toolchains/{scripting → languages}/php.js +36 -11
- package/dist/guest/toolchains/languages/python-tools.d.ts +3 -0
- package/dist/guest/toolchains/languages/python-tools.js +12 -0
- package/dist/guest/toolchains/languages/python.d.ts +3 -0
- package/dist/guest/toolchains/{python.js → languages/python.js} +29 -16
- package/dist/guest/toolchains/languages/ruby.d.ts +3 -0
- package/dist/guest/toolchains/{scripting → languages}/ruby.js +28 -10
- package/dist/guest/toolchains/leftovers.d.ts +1 -1
- package/dist/guest/toolchains/leftovers.js +13 -11
- package/dist/guest/toolchains/managers.d.ts +6 -6
- package/dist/guest/toolchains/managers.js +38 -17
- package/dist/guest/toolchains/native/binstall.d.ts +3 -2
- package/dist/guest/toolchains/native/binstall.js +20 -8
- package/dist/guest/toolchains/native/cpp.d.ts +2 -2
- package/dist/guest/toolchains/native/cpp.js +23 -8
- package/dist/guest/toolchains/native/dotnet.d.ts +5 -3
- package/dist/guest/toolchains/native/dotnet.js +72 -24
- package/dist/guest/toolchains/native/mesa.d.ts +2 -2
- package/dist/guest/toolchains/native/mesa.js +27 -10
- package/dist/guest/toolchains/native/msvc/environment.d.ts +4 -4
- package/dist/guest/toolchains/native/msvc/environment.js +30 -16
- package/dist/guest/toolchains/native/msvc/index.d.ts +3 -3
- package/dist/guest/toolchains/native/msvc/index.js +10 -8
- package/dist/guest/toolchains/native/msvc/packages.d.ts +1 -1
- package/dist/guest/toolchains/native/msvc/packages.js +69 -23
- package/dist/guest/toolchains/native/msvc/tree.d.ts +6 -6
- package/dist/guest/toolchains/native/msvc/tree.js +15 -9
- package/dist/guest/toolchains/native/rust-extras.d.ts +23 -0
- package/dist/guest/toolchains/native/rust-extras.js +100 -0
- package/dist/guest/toolchains/native/rust.d.ts +2 -2
- package/dist/guest/toolchains/native/rust.js +41 -10
- package/dist/guest/toolchains/{scripting → native}/vcruntime.d.ts +2 -2
- package/dist/guest/toolchains/{scripting → native}/vcruntime.js +17 -7
- package/dist/guest/toolchains/package-ledger.d.ts +17 -0
- package/dist/guest/toolchains/package-ledger.js +54 -0
- package/dist/guest/toolchains/plan.d.ts +3 -24
- package/dist/guest/toolchains/plan.js +99 -111
- package/dist/guest/toolchains/runtimes.d.ts +6 -6
- package/dist/guest/toolchains/runtimes.js +31 -13
- package/dist/guest/toolchains/scheduler.d.ts +22 -0
- package/dist/guest/toolchains/scheduler.js +123 -0
- package/dist/guest/toolchains/setup.d.ts +10 -0
- package/dist/guest/toolchains/setup.js +22 -0
- package/dist/guest/toolchains/state-file.d.ts +3 -0
- package/dist/guest/toolchains/state-file.js +10 -0
- package/dist/guest/toolchains/step.d.ts +24 -0
- package/dist/guest/toolchains/step.js +1 -0
- package/dist/guest/toolchains/tool-env.d.ts +12 -0
- package/dist/guest/toolchains/tool-env.js +16 -0
- package/dist/guest/toolchains/tools/cli.d.ts +10 -0
- package/dist/guest/toolchains/{cli.js → tools/cli.js} +35 -15
- package/dist/guest/toolchains/tools/git.d.ts +3 -0
- package/dist/guest/toolchains/{git.js → tools/git.js} +38 -15
- package/dist/guest/toolchains/tools/pwsh.d.ts +4 -0
- package/dist/guest/toolchains/{pwsh.js → tools/pwsh.js} +14 -7
- package/dist/guest/toolchains/{vscode-profile.d.ts → tools/vscode-profile.d.ts} +6 -6
- package/dist/guest/toolchains/{vscode-profile.js → tools/vscode-profile.js} +28 -12
- package/dist/guest/toolchains/{vscode.d.ts → tools/vscode.d.ts} +6 -6
- package/dist/guest/toolchains/{vscode.js → tools/vscode.js} +67 -21
- package/dist/guest/toolchains/version-cache.d.ts +16 -0
- package/dist/guest/toolchains/version-cache.js +67 -0
- package/dist/host/agent-commands/commands.d.ts +13 -0
- package/dist/host/agent-commands/commands.js +33 -0
- package/dist/host/agent-commands/forwarders.d.ts +7 -0
- package/dist/host/agent-commands/forwarders.js +31 -0
- package/dist/host/agent-commands/index.d.ts +4 -0
- package/dist/host/agent-commands/index.js +4 -0
- package/dist/host/agent-commands/reconcile.d.ts +12 -0
- package/dist/host/agent-commands/reconcile.js +69 -0
- package/dist/host/agent-commands/user-path.d.ts +2 -0
- package/dist/host/agent-commands/user-path.js +33 -0
- package/dist/host/audit/collect.d.ts +2 -2
- package/dist/host/audit/collect.js +59 -22
- package/dist/host/audit/log.d.ts +2 -2
- package/dist/host/audit/log.js +24 -8
- package/dist/host/{attach.d.ts → channel/attach.d.ts} +2 -2
- package/dist/host/{attach.js → channel/attach.js} +33 -15
- package/dist/host/channel/channel.d.ts +51 -0
- package/dist/host/channel/channel.js +196 -0
- package/dist/host/channel/index.d.ts +2 -0
- package/dist/host/channel/index.js +2 -0
- package/dist/host/guard/agent-files.d.ts +7 -0
- package/dist/host/guard/agent-files.js +103 -0
- package/dist/host/guard/commands.d.ts +10 -0
- package/dist/host/guard/commands.js +123 -0
- package/dist/host/guard/file-hash.d.ts +4 -0
- package/dist/host/guard/file-hash.js +37 -0
- package/dist/host/guard/git-config.d.ts +5 -0
- package/dist/host/guard/git-config.js +62 -0
- package/dist/host/guard/git-dirs.d.ts +12 -0
- package/dist/host/guard/git-dirs.js +53 -0
- package/dist/host/guard/index.d.ts +5 -0
- package/dist/host/guard/index.js +4 -0
- package/dist/host/guard/mark-of-the-web.d.ts +8 -0
- package/dist/host/guard/mark-of-the-web.js +74 -0
- package/dist/host/guard/nested-repos.d.ts +14 -0
- package/dist/host/guard/nested-repos.js +88 -0
- package/dist/host/guard/quarantine.d.ts +3 -0
- package/dist/host/guard/quarantine.js +24 -0
- package/dist/host/guard/repo-guard.d.ts +10 -0
- package/dist/host/guard/repo-guard.js +36 -0
- package/dist/host/guard/store.d.ts +40 -0
- package/dist/host/guard/store.js +145 -0
- package/dist/host/guard/types.d.ts +27 -0
- package/dist/host/guard/types.js +3 -0
- package/dist/host/guard/watch-state.d.ts +9 -0
- package/dist/host/guard/watch-state.js +26 -0
- package/dist/host/launch/boot-projects.d.ts +17 -0
- package/dist/host/launch/{projects.js → boot-projects.js} +27 -12
- package/dist/host/{database-plan.d.ts → launch/database-plan.d.ts} +5 -5
- package/dist/host/{database-plan.js → launch/database-plan.js} +24 -13
- package/dist/host/launch/generate.d.ts +4 -0
- package/dist/host/launch/generate.js +77 -0
- package/dist/host/launch/index.d.ts +10 -0
- package/dist/host/launch/index.js +10 -0
- package/dist/host/launch/mappings.d.ts +7 -2
- package/dist/host/launch/mappings.js +83 -24
- package/dist/host/launch/pc-scan.d.ts +5 -0
- package/dist/host/{pc-scan.js → launch/pc-scan.js} +20 -13
- package/dist/host/launch/project-scan.d.ts +7 -0
- package/dist/host/{project-scan.js → launch/project-scan.js} +29 -21
- package/dist/host/launch/session-file.d.ts +23 -0
- package/dist/host/launch/session-file.js +73 -0
- package/dist/host/launch/stage.d.ts +5 -5
- package/dist/host/launch/stage.js +14 -13
- package/dist/host/launch/toolchains.d.ts +4 -0
- package/dist/host/launch/toolchains.js +11 -0
- package/dist/host/launch/{wsb.d.ts → wsb-file.d.ts} +4 -2
- package/dist/host/launch/wsb-file.js +56 -0
- package/dist/host/life/crash-report.d.ts +8 -0
- package/dist/host/life/crash-report.js +87 -0
- package/dist/host/life/index.d.ts +6 -0
- package/dist/host/life/index.js +6 -0
- package/dist/host/life/keep-awake.d.ts +10 -0
- package/dist/host/life/keep-awake.js +29 -0
- package/dist/host/life/life-record.d.ts +48 -0
- package/dist/host/life/life-record.js +76 -0
- package/dist/host/life/stop-events.d.ts +27 -0
- package/dist/host/life/stop-events.js +96 -0
- package/dist/host/life/stop-warning.d.ts +4 -0
- package/dist/host/life/stop-warning.js +25 -0
- package/dist/host/life/windows-update.d.ts +3 -0
- package/dist/host/life/windows-update.js +11 -0
- package/dist/host/native.d.ts +4 -0
- package/dist/host/native.js +11 -0
- package/dist/host/network/index.d.ts +1 -0
- package/dist/host/network/index.js +1 -0
- package/dist/host/{port-forward.d.ts → network/port-forward.d.ts} +1 -1
- package/dist/host/{port-forward.js → network/port-forward.js} +16 -10
- package/dist/host/profile/accounts.d.ts +37 -0
- package/dist/host/profile/accounts.js +146 -0
- package/dist/host/profile/claude-login.d.ts +22 -0
- package/dist/host/profile/claude-login.js +57 -0
- package/dist/host/{claude-profile.d.ts → profile/claude-profile.d.ts} +9 -9
- package/dist/host/{claude-profile.js → profile/claude-profile.js} +32 -22
- package/dist/host/profile/index.d.ts +7 -0
- package/dist/host/profile/index.js +7 -0
- package/dist/host/profile/personalize.d.ts +2 -0
- package/dist/host/profile/personalize.js +127 -0
- package/dist/host/profile/reg-file.d.ts +8 -0
- package/dist/host/profile/reg-file.js +45 -0
- package/dist/host/profile/secret-files.d.ts +2 -0
- package/dist/host/profile/secret-files.js +25 -0
- package/dist/host/profile/secret-patterns.d.ts +6 -0
- package/dist/host/profile/secret-patterns.js +128 -0
- package/dist/host/profile/secrets.d.ts +12 -0
- package/dist/host/profile/secrets.js +100 -0
- package/dist/host/projects/index.d.ts +4 -0
- package/dist/host/projects/index.js +4 -0
- package/dist/host/projects/join.d.ts +38 -0
- package/dist/host/projects/join.js +119 -0
- package/dist/host/projects/known.d.ts +28 -0
- package/dist/host/projects/known.js +55 -0
- package/dist/host/projects/mapper.d.ts +29 -0
- package/dist/host/projects/mapper.js +88 -0
- package/dist/host/projects/registry.d.ts +83 -0
- package/dist/host/projects/registry.js +136 -0
- package/dist/host/sandbox/doctor.d.ts +2 -0
- package/dist/host/sandbox/doctor.js +42 -0
- package/dist/host/sandbox/host-claude.d.ts +1 -0
- package/dist/host/sandbox/host-claude.js +26 -0
- package/dist/host/sandbox/index.d.ts +6 -0
- package/dist/host/sandbox/index.js +6 -0
- package/dist/host/{platform.d.ts → sandbox/platform.d.ts} +0 -5
- package/dist/host/sandbox/platform.js +60 -0
- package/dist/host/sandbox/probe.d.ts +3 -0
- package/dist/host/sandbox/probe.js +47 -0
- package/dist/host/{window.js → sandbox/window.js} +7 -5
- package/dist/host/{wsb.js → sandbox/wsb-cli.js} +31 -8
- package/dist/host/{cleanup.js → storage/cleanup.js} +27 -12
- package/dist/host/storage/index.d.ts +2 -0
- package/dist/host/storage/index.js +2 -0
- package/dist/host/storage/state-files.d.ts +4 -0
- package/dist/host/storage/state-files.js +10 -0
- package/dist/host/test-guard.js +1 -1
- package/dist/host/tools/conpty.d.ts +8 -0
- package/dist/host/tools/conpty.js +58 -0
- package/dist/host/tools/index.d.ts +2 -0
- package/dist/host/tools/index.js +2 -0
- package/dist/host/{terminal.d.ts → tools/windows-terminal.d.ts} +2 -10
- package/dist/host/{terminal.js → tools/windows-terminal.js} +33 -57
- package/dist/host/workspace-view/active-views.d.ts +3 -0
- package/dist/host/workspace-view/active-views.js +22 -0
- package/dist/host/workspace-view/index.d.ts +2 -18
- package/dist/host/workspace-view/index.js +2 -49
- package/dist/host/workspace-view/plan.d.ts +16 -0
- package/dist/host/workspace-view/plan.js +50 -0
- package/dist/host/workspace-view/rules.js +10 -3
- package/dist/host/workspace-view/view-state.d.ts +10 -0
- package/dist/host/workspace-view/view-state.js +31 -0
- package/dist/host/workspace-view/view.d.ts +1 -0
- package/dist/host/workspace-view/view.js +51 -55
- package/dist/runtime/daemon.js +4232 -1918
- package/dist/runtime/db.js +2145 -830
- package/dist/runtime/gitguard.js +29 -11
- package/dist/runtime/main.js +4760 -2155
- package/dist/runtime/netproxy.js +1654 -418
- package/dist/runtime/view.js +1515 -453
- package/dist/selftest/accounts.test.d.ts +1 -1
- package/dist/selftest/accounts.test.js +20 -17
- package/dist/selftest/agent-commands.test.d.ts +1 -1
- package/dist/selftest/agent-commands.test.js +9 -5
- package/dist/selftest/audit.test.d.ts +1 -1
- package/dist/selftest/audit.test.js +46 -13
- package/dist/selftest/channel.test.d.ts +1 -1
- package/dist/selftest/channel.test.js +91 -8
- package/dist/selftest/cli.test.d.ts +1 -1
- package/dist/selftest/cli.test.js +68 -16
- package/dist/selftest/cmdline.test.d.ts +1 -1
- package/dist/selftest/cmdline.test.js +36 -7
- package/dist/selftest/config.test.d.ts +1 -1
- package/dist/selftest/config.test.js +12 -5
- package/dist/selftest/data.test.d.ts +1 -1
- package/dist/selftest/data.test.js +35 -6
- package/dist/selftest/detect.test.d.ts +1 -1
- package/dist/selftest/detect.test.js +22 -9
- package/dist/selftest/generate.test.d.ts +1 -1
- package/dist/selftest/generate.test.js +33 -9
- package/dist/selftest/git-access.test.d.ts +1 -1
- package/dist/selftest/git-access.test.js +42 -4
- package/dist/selftest/guest-boot.test.d.ts +1 -1
- package/dist/selftest/guest-boot.test.js +25 -7
- package/dist/selftest/host-sim.test.d.ts +1 -1
- package/dist/selftest/host-sim.test.js +27 -3
- package/dist/selftest/hostile-input.test.d.ts +1 -1
- package/dist/selftest/hostile-input.test.js +5 -5
- package/dist/selftest/index.d.ts +1 -1
- package/dist/selftest/index.js +73 -16
- package/dist/selftest/layout.test.d.ts +2 -0
- package/dist/selftest/layout.test.js +131 -0
- package/dist/selftest/links.test.d.ts +1 -1
- package/dist/selftest/links.test.js +16 -11
- package/dist/selftest/live-daemon.test.d.ts +1 -1
- package/dist/selftest/live-daemon.test.js +20 -8
- package/dist/selftest/live-git.test.d.ts +1 -1
- package/dist/selftest/live-git.test.js +13 -4
- package/dist/selftest/live-network.test.d.ts +1 -1
- package/dist/selftest/live-network.test.js +24 -9
- package/dist/selftest/live-projects.test.d.ts +1 -1
- package/dist/selftest/live-projects.test.js +47 -20
- package/dist/selftest/live-terminal.test.d.ts +2 -0
- package/dist/selftest/live-terminal.test.js +195 -0
- package/dist/selftest/local-config.test.d.ts +1 -1
- package/dist/selftest/local-config.test.js +88 -15
- package/dist/selftest/mirror.test.d.ts +1 -1
- package/dist/selftest/mirror.test.js +118 -19
- package/dist/selftest/network.test.d.ts +1 -1
- package/dist/selftest/network.test.js +17 -8
- package/dist/selftest/personalization.test.d.ts +1 -1
- package/dist/selftest/personalization.test.js +12 -5
- package/dist/selftest/projects.test.d.ts +1 -1
- package/dist/selftest/projects.test.js +336 -72
- package/dist/selftest/repair.test.d.ts +1 -1
- package/dist/selftest/repair.test.js +17 -5
- package/dist/selftest/repo-guard.test.d.ts +1 -1
- package/dist/selftest/repo-guard.test.js +21 -20
- package/dist/selftest/secrets.test.d.ts +1 -1
- package/dist/selftest/secrets.test.js +57 -13
- package/dist/selftest/setup.test.d.ts +1 -1
- package/dist/selftest/setup.test.js +25 -5
- package/dist/selftest/{fixtures.d.ts → support/fixtures.d.ts} +7 -4
- package/dist/selftest/{fixtures.js → support/fixtures.js} +95 -17
- package/dist/selftest/{harness.js → support/harness.js} +24 -7
- package/dist/selftest/{live.d.ts → support/live.d.ts} +2 -2
- package/dist/selftest/{live.js → support/live.js} +34 -10
- package/dist/selftest/support/suite.js +1 -0
- package/dist/selftest/sync.test.d.ts +1 -1
- package/dist/selftest/sync.test.js +64 -26
- package/dist/selftest/test-guard.test.d.ts +1 -1
- package/dist/selftest/test-guard.test.js +43 -15
- package/dist/selftest/toolchains.test.d.ts +1 -1
- package/dist/selftest/toolchains.test.js +135 -36
- package/dist/selftest/workspace-view.test.d.ts +1 -1
- package/dist/selftest/workspace-view.test.js +48 -11
- package/dist/selftest/workspace.test.d.ts +1 -1
- package/dist/selftest/workspace.test.js +13 -4
- package/dist/shared/{apps.d.ts → apps/catalogue.d.ts} +1 -11
- package/dist/shared/apps/catalogue.js +768 -0
- package/dist/shared/apps/index.d.ts +2 -0
- package/dist/shared/apps/index.js +2 -0
- package/dist/shared/apps/selection.d.ts +11 -0
- package/dist/shared/apps/selection.js +40 -0
- package/dist/shared/channel/index.d.ts +2 -0
- package/dist/shared/channel/index.js +2 -0
- package/dist/shared/channel/run-dir.d.ts +30 -0
- package/dist/shared/channel/run-dir.js +84 -0
- package/dist/shared/{schema.d.ts → channel/schema.d.ts} +60 -19
- package/dist/shared/channel/schema.js +131 -0
- package/dist/shared/download/archive.d.ts +13 -0
- package/dist/shared/download/archive.js +57 -0
- package/dist/shared/download/downloader.d.ts +35 -0
- package/dist/shared/download/downloader.js +110 -0
- package/dist/shared/download/github.d.ts +16 -0
- package/dist/shared/download/github.js +74 -0
- package/dist/shared/download/http.d.ts +5 -0
- package/dist/shared/download/http.js +30 -0
- package/dist/shared/download/index.d.ts +5 -0
- package/dist/shared/download/index.js +5 -0
- package/dist/shared/download/spawn.d.ts +2 -0
- package/dist/shared/download/spawn.js +7 -0
- package/dist/shared/io/index.d.ts +3 -0
- package/dist/shared/io/index.js +3 -0
- package/dist/shared/io/json-file.d.ts +10 -0
- package/dist/shared/io/json-file.js +21 -0
- package/dist/shared/io/json.d.ts +13 -0
- package/dist/shared/io/json.js +49 -0
- package/dist/shared/{safe-remove.js → io/safe-remove.js} +32 -7
- package/dist/shared/{netrules.js → network/firewall-rules.js} +36 -5
- package/dist/shared/network/index.d.ts +2 -0
- package/dist/shared/network/index.js +2 -0
- package/dist/shared/{netpolicy.js → network/policy.js} +66 -11
- package/dist/shared/{paths.js → paths/claude-paths.js} +12 -2
- package/dist/shared/{guest-paths.d.ts → paths/guest-paths.d.ts} +21 -0
- package/dist/shared/paths/guest-paths.js +146 -0
- package/dist/shared/paths/index.d.ts +3 -0
- package/dist/shared/paths/index.js +3 -0
- package/dist/shared/{projects.d.ts → paths/projects.d.ts} +27 -4
- package/dist/shared/paths/projects.js +136 -0
- package/dist/shared/pty/client.d.ts +21 -0
- package/dist/shared/pty/client.js +79 -0
- package/dist/shared/pty/console-input.d.ts +11 -0
- package/dist/shared/pty/console-input.js +81 -0
- package/dist/shared/pty/index.d.ts +6 -0
- package/dist/shared/pty/index.js +6 -0
- package/dist/shared/pty/input-joiner.d.ts +15 -0
- package/dist/shared/pty/input-joiner.js +44 -0
- package/dist/shared/pty/output-filter.d.ts +13 -0
- package/dist/shared/pty/output-filter.js +140 -0
- package/dist/shared/pty/protocol.d.ts +36 -0
- package/dist/shared/pty/protocol.js +60 -0
- package/dist/shared/pty/terminal.d.ts +24 -0
- package/dist/shared/pty/terminal.js +147 -0
- package/dist/shared/test-guard.js +3 -1
- package/dist/sync/claude-mem.d.ts +1 -1
- package/dist/sync/claude-mem.js +9 -4
- package/dist/sync/history.d.ts +1 -29
- package/dist/sync/history.js +57 -45
- package/dist/sync/index.d.ts +5 -0
- package/dist/sync/index.js +5 -0
- package/dist/sync/sync-cycle.d.ts +18 -0
- package/dist/sync/sync-cycle.js +85 -0
- package/dist/sync/sync-state.d.ts +32 -0
- package/dist/sync/sync-state.js +37 -0
- package/dist/sync/watcher.d.ts +0 -18
- package/dist/sync/watcher.js +66 -100
- package/native/keep-awake.ps1 +8 -0
- package/native/power.cs +23 -0
- package/native/stop-events.ps1 +38 -0
- package/package.json +11 -3
- package/sandbox/linkgate.cs +98 -0
- package/sandbox/memlog.ps1 +15 -6
- package/sandbox/ptyhost.cs +60 -3
- package/schemas/config.schema.json +48 -1
- package/schemas/sandbox-config.schema.json +37 -3
- package/dist/cli/commands/launch.d.ts +0 -29
- package/dist/cli/commands/launch.js +0 -366
- package/dist/cli/commands/maintenance.d.ts +0 -10
- package/dist/cli/commands/maintenance.js +0 -187
- package/dist/cli/commands/project.d.ts +0 -29
- package/dist/cli/commands/project.js +0 -63
- package/dist/cli/commands/projects.d.ts +0 -14
- package/dist/cli/commands/projects.js +0 -146
- package/dist/cli/commands/restart.d.ts +0 -6
- package/dist/cli/commands/restart.js +0 -85
- package/dist/cli/commands/sessions.d.ts +0 -12
- package/dist/cli/commands/sessions.js +0 -257
- package/dist/cli/menu/settings/editors.js +0 -305
- package/dist/cli/progress.d.ts +0 -9
- package/dist/cli/progress.js +0 -49
- package/dist/cli/tui/dialogs.d.ts +0 -57
- package/dist/cli/tui/dialogs.js +0 -162
- package/dist/core/config.js +0 -109
- package/dist/core/schema.d.ts +0 -6
- package/dist/core/schema.js +0 -8
- package/dist/core/util.d.ts +0 -62
- package/dist/core/util.js +0 -156
- package/dist/core/workspace.d.ts +0 -18
- package/dist/core/workspace.js +0 -145
- package/dist/guest/boot-env.d.ts +0 -4
- package/dist/guest/daemon.js +0 -57
- package/dist/guest/env.d.ts +0 -52
- package/dist/guest/env.js +0 -103
- package/dist/guest/gitrules.js +0 -11
- package/dist/guest/project-status.d.ts +0 -5
- package/dist/guest/project-status.js +0 -17
- package/dist/guest/setup/user.js +0 -51
- package/dist/guest/toolchains/cli.d.ts +0 -10
- package/dist/guest/toolchains/common.d.ts +0 -54
- package/dist/guest/toolchains/common.js +0 -147
- package/dist/guest/toolchains/databases/dynamodb.d.ts +0 -8
- package/dist/guest/toolchains/databases/dynamodb.js +0 -52
- package/dist/guest/toolchains/databases/index.d.ts +0 -6
- package/dist/guest/toolchains/databases/index.js +0 -62
- package/dist/guest/toolchains/databases/mongodb.d.ts +0 -3
- package/dist/guest/toolchains/databases/mongodb.js +0 -31
- package/dist/guest/toolchains/databases/mysql.d.ts +0 -3
- package/dist/guest/toolchains/databases/mysql.js +0 -38
- package/dist/guest/toolchains/databases/postgres.d.ts +0 -5
- package/dist/guest/toolchains/databases/postgres.js +0 -38
- package/dist/guest/toolchains/databases/redis.d.ts +0 -3
- package/dist/guest/toolchains/databases/redis.js +0 -16
- package/dist/guest/toolchains/git.d.ts +0 -3
- package/dist/guest/toolchains/go.d.ts +0 -3
- package/dist/guest/toolchains/java.d.ts +0 -8
- package/dist/guest/toolchains/node.d.ts +0 -3
- package/dist/guest/toolchains/pwsh.d.ts +0 -4
- package/dist/guest/toolchains/python.d.ts +0 -3
- package/dist/guest/toolchains/scripting/php.d.ts +0 -3
- package/dist/guest/toolchains/scripting/ruby.d.ts +0 -3
- package/dist/host/accounts.d.ts +0 -32
- package/dist/host/accounts.js +0 -128
- package/dist/host/agent-commands.d.ts +0 -25
- package/dist/host/agent-commands.js +0 -145
- package/dist/host/channel.d.ts +0 -38
- package/dist/host/channel.js +0 -162
- package/dist/host/generate.d.ts +0 -13
- package/dist/host/generate.js +0 -108
- package/dist/host/join.d.ts +0 -28
- package/dist/host/join.js +0 -76
- package/dist/host/launch/projects.d.ts +0 -15
- package/dist/host/launch/wsb.js +0 -34
- package/dist/host/motw.d.ts +0 -17
- package/dist/host/motw.js +0 -74
- package/dist/host/pc-scan.d.ts +0 -6
- package/dist/host/personalize.d.ts +0 -10
- package/dist/host/personalize.js +0 -97
- package/dist/host/platform.js +0 -129
- package/dist/host/project-scan.d.ts +0 -7
- package/dist/host/projects.d.ts +0 -100
- package/dist/host/projects.js +0 -147
- package/dist/host/repo-guard.d.ts +0 -43
- package/dist/host/repo-guard.js +0 -347
- package/dist/host/secrets.d.ts +0 -14
- package/dist/host/secrets.js +0 -133
- package/dist/host/stops.d.ts +0 -67
- package/dist/host/stops.js +0 -126
- package/dist/shared/apps.js +0 -114
- package/dist/shared/download.d.ts +0 -60
- package/dist/shared/download.js +0 -215
- package/dist/shared/guest-paths.js +0 -61
- package/dist/shared/projects.js +0 -67
- package/dist/shared/pty-client.d.ts +0 -91
- package/dist/shared/pty-client.js +0 -349
- package/dist/shared/rundir.d.ts +0 -41
- package/dist/shared/rundir.js +0 -96
- package/dist/shared/schema.js +0 -92
- /package/dist/{guest/daemon.d.ts → cli/tui/list/list-types.js} +0 -0
- /package/dist/{guest/db.d.ts → cli/tui/screen.js} +0 -0
- /package/dist/core/{detect-databases.d.ts → detect/databases.d.ts} +0 -0
- /package/dist/{guest/toolchains → core/detect}/versions.d.ts +0 -0
- /package/dist/guest/{setup/agents.d.ts → agents/agent-installer.d.ts} +0 -0
- /package/dist/guest/{audit-parse.d.ts → audit/parse.d.ts} +0 -0
- /package/dist/guest/{guide.d.ts → boot/guide.d.ts} +0 -0
- /package/dist/guest/daemon/{shutdown.d.ts → idle-shutdown.d.ts} +0 -0
- /package/dist/guest/daemon/{session.d.ts → sessions.d.ts} +0 -0
- /package/dist/guest/{main.d.ts → entries/daemon.d.ts} +0 -0
- /package/dist/guest/{netproxy.d.ts → entries/db.d.ts} +0 -0
- /package/dist/{selftest/suite.js → guest/entries/gitguard.d.ts} +0 -0
- /package/dist/guest/{gitguard.d.ts → git/decision.d.ts} +0 -0
- /package/dist/guest/{ports.d.ts → runtime/ports.d.ts} +0 -0
- /package/dist/guest/{project-context.d.ts → runtime/project-context.d.ts} +0 -0
- /package/dist/guest/{cmdline.d.ts → sessions/cmdline.d.ts} +0 -0
- /package/dist/guest/{ptyhost.d.ts → sessions/pty-host.d.ts} +0 -0
- /package/dist/guest/{view.d.ts → sessions/viewer.d.ts} +0 -0
- /package/dist/guest/setup/{policy.d.ts → managed-policy.d.ts} +0 -0
- /package/dist/host/{window.d.ts → sandbox/window.d.ts} +0 -0
- /package/dist/host/{wsb.d.ts → sandbox/wsb-cli.d.ts} +0 -0
- /package/dist/host/{cleanup.d.ts → storage/cleanup.d.ts} +0 -0
- /package/dist/selftest/{harness.d.ts → support/harness.d.ts} +0 -0
- /package/dist/selftest/{suite.d.ts → support/suite.d.ts} +0 -0
- /package/dist/shared/{safe-remove.d.ts → io/safe-remove.d.ts} +0 -0
- /package/dist/shared/{netrules.d.ts → network/firewall-rules.d.ts} +0 -0
- /package/dist/shared/{netpolicy.d.ts → network/policy.d.ts} +0 -0
- /package/dist/shared/{paths.d.ts → paths/claude-paths.d.ts} +0 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare const trustStorePath: (storageRoot: string) => string;
|
|
2
|
+
export declare const isTrusted: (store: string, file: string, hash: string) => boolean;
|
|
3
|
+
export declare const saveTrust: (store: string, file: string, hash: string) => void;
|
|
4
|
+
export declare const allowStorePath: (storageRoot: string) => string;
|
|
5
|
+
/** true = you allowed it, false = you said no (not asked again), null = not asked yet. */
|
|
6
|
+
export declare const allowedAnswer: (store: string, file: string, setting: string, value: unknown) => boolean | null;
|
|
7
|
+
export declare const saveAllowed: (store: string, file: string, setting: string, value: unknown, allow: boolean) => void;
|
|
8
|
+
/** Answers for folders outside the project are kept with the others, one per folder (and read-only or not). */
|
|
9
|
+
export declare const OUTSIDE_FOLDER = "folder outside the project";
|
|
10
|
+
export declare function outsideKey(m: {
|
|
11
|
+
host: string;
|
|
12
|
+
readOnly: boolean;
|
|
13
|
+
}): string;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import _ from 'lodash';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
import { tryReadJson, writeJson } from '../util/index.js';
|
|
5
|
+
// ---- approvals (host-only: <storage>\trusted-configs.json) ----------------------------------------------------------
|
|
6
|
+
export const trustStorePath = (storageRoot) => path.join(storageRoot, 'trusted-configs.json');
|
|
7
|
+
const loadTrust = (store) => tryReadJson(store) ?? {};
|
|
8
|
+
const key = (file) => path.resolve(file).toLowerCase();
|
|
9
|
+
export const isTrusted = (store, file, hash) => loadTrust(store)[key(file)] === hash;
|
|
10
|
+
export const saveTrust = (store, file, hash) => writeJson(store, { ...loadTrust(store), [key(file)]: hash });
|
|
11
|
+
// ---- looser settings you allowed for one project (host-only: <storage>\allowed-requests.json) ----------------------
|
|
12
|
+
// A project file can never loosen a protection by itself. When it asks, you are asked once (interactively); a "yes"
|
|
13
|
+
// is kept here, per project file and per "setting = value", so only that value is ever let through for that project.
|
|
14
|
+
export const allowStorePath = (storageRoot) => path.join(storageRoot, 'allowed-requests.json');
|
|
15
|
+
const loadAllowed = (store) => {
|
|
16
|
+
const parsed = z
|
|
17
|
+
.record(z.string(), z.array(z.string().max(2000)).max(500))
|
|
18
|
+
.safeParse(tryReadJson(store) ?? {});
|
|
19
|
+
return parsed.success ? parsed.data : {};
|
|
20
|
+
};
|
|
21
|
+
const allowKey = (setting, value) => setting + ' = ' + JSON.stringify(value);
|
|
22
|
+
/** true = you allowed it, false = you said no (not asked again), null = not asked yet. */
|
|
23
|
+
export const allowedAnswer = (store, file, setting, value) => {
|
|
24
|
+
const answers = loadAllowed(store)[key(file)] ?? [];
|
|
25
|
+
return answers.includes(allowKey(setting, value))
|
|
26
|
+
? true
|
|
27
|
+
: answers.includes('no: ' + allowKey(setting, value))
|
|
28
|
+
? false
|
|
29
|
+
: null;
|
|
30
|
+
};
|
|
31
|
+
export const saveAllowed = (store, file, setting, value, allow) => {
|
|
32
|
+
const all = loadAllowed(store);
|
|
33
|
+
const entry = allowKey(setting, value);
|
|
34
|
+
writeJson(store, {
|
|
35
|
+
...all,
|
|
36
|
+
[key(file)]: _.union(_.without(all[key(file)] ?? [], entry, 'no: ' + entry), [(allow ? '' : 'no: ') + entry]),
|
|
37
|
+
});
|
|
38
|
+
};
|
|
39
|
+
/** Answers for folders outside the project are kept with the others, one per folder (and read-only or not). */
|
|
40
|
+
export const OUTSIDE_FOLDER = 'folder outside the project';
|
|
41
|
+
export function outsideKey(m) {
|
|
42
|
+
return (m.readOnly ? 'read-only ' : 'read/write ') + path.resolve(m.host).toLowerCase();
|
|
43
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// Where this package is installed and its version. This file is dist/core/package-info.js, two folders below
|
|
2
|
+
// package.json.
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { fileURLToPath } from 'node:url';
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
import { tryReadJson } from './util/index.js';
|
|
7
|
+
/** The package folder (the one with package.json, dist/, sandbox/ and schemas/). */
|
|
8
|
+
export const PACKAGE_ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..', '..');
|
|
9
|
+
/** This package's version. */
|
|
10
|
+
export const packageVersion = () => {
|
|
11
|
+
const file = path.join(PACKAGE_ROOT, 'package.json');
|
|
12
|
+
return z.object({ version: z.string() }).safeParse(tryReadJson(file)).data?.version ?? 'unknown';
|
|
13
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { Config, Mapping } from '../types.js';
|
|
2
|
+
/** 'auto' guest workspace: C:\Workspace\<folder name> (shared/paths/projects.ts, where every project's place is decided). */
|
|
3
|
+
export declare const autoGuestWorkspace: (hostDir: string) => string;
|
|
4
|
+
/**
|
|
5
|
+
* A launch folder inside a project root appears under the root's folder (C:\Projects\<root>\<name>, or its PC path
|
|
6
|
+
* with "mirror"), where it also is when another project started the sandbox, so git worktrees and Claude's project
|
|
7
|
+
* folders keep working whichever project starts it. Only for "auto" / "mirror"; a filtered or read-only workspace
|
|
8
|
+
* keeps its own mapping (the root would show the folder unfiltered and writable at that place).
|
|
9
|
+
*/
|
|
10
|
+
export declare function placeInRoot(config: Config, workspaceHost: string, mirror: boolean, notes: string[]): Config;
|
|
11
|
+
/** Where the workspace appears: guestWorkspace "auto", "mirror" (with a note when it falls back) or a path. */
|
|
12
|
+
export declare function guestWorkspaceOf(config: Pick<Config, 'guestWorkspace'>, workspaceHost: string): {
|
|
13
|
+
guest: string;
|
|
14
|
+
note: string | null;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Where a mapping will most likely appear, before the launch knows every other folder (the prompt and config check
|
|
18
|
+
* show it; the launch places it for real in host/launch/mappings.ts with the same rules).
|
|
19
|
+
*/
|
|
20
|
+
export declare function previewGuest(m: Pick<Mapping, 'host' | 'guest'>, workspaceHost: string, workspaceGuest: string): {
|
|
21
|
+
guest: string;
|
|
22
|
+
note: string | null;
|
|
23
|
+
};
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { autoGuestFolder, deriveGuest, guestConflict, guestFix, planMirrorWorkspace, PROJECTS_GUEST, rootGuestDir, tidyGuestPath, usableRoots, } from '../../shared/paths/index.js';
|
|
2
|
+
import { dirExists, isInsideOrEqual } from '../util/index.js';
|
|
3
|
+
/** 'auto' guest workspace: C:\Workspace\<folder name> (shared/paths/projects.ts, where every project's place is decided). */
|
|
4
|
+
export const autoGuestWorkspace = autoGuestFolder;
|
|
5
|
+
/**
|
|
6
|
+
* A launch folder inside a project root appears under the root's folder (C:\Projects\<root>\<name>, or its PC path
|
|
7
|
+
* with "mirror"), where it also is when another project started the sandbox, so git worktrees and Claude's project
|
|
8
|
+
* folders keep working whichever project starts it. Only for "auto" / "mirror"; a filtered or read-only workspace
|
|
9
|
+
* keeps its own mapping (the root would show the folder unfiltered and writable at that place).
|
|
10
|
+
*/
|
|
11
|
+
export function placeInRoot(config, workspaceHost, mirror, notes) {
|
|
12
|
+
const guest = rootGuestDir(usableRoots(config.projects.roots, dirExists), mirror, workspaceHost);
|
|
13
|
+
if (!guest)
|
|
14
|
+
return config;
|
|
15
|
+
if (config.workspaceFilter.enabled || config.readOnly) {
|
|
16
|
+
notes.push(workspaceHost +
|
|
17
|
+
' is inside a project root, but ' +
|
|
18
|
+
(config.readOnly ? 'readOnly' : 'workspaceFilter') +
|
|
19
|
+
' is on, so it is mapped on its own at ' +
|
|
20
|
+
config.guestWorkspace +
|
|
21
|
+
' (when another project starts the sandbox it is at ' +
|
|
22
|
+
guest +
|
|
23
|
+
').');
|
|
24
|
+
return config;
|
|
25
|
+
}
|
|
26
|
+
return { ...config, guestWorkspace: guest };
|
|
27
|
+
}
|
|
28
|
+
/** Where the workspace appears: guestWorkspace "auto", "mirror" (with a note when it falls back) or a path. */
|
|
29
|
+
export function guestWorkspaceOf(config, workspaceHost) {
|
|
30
|
+
if (config.guestWorkspace === 'auto')
|
|
31
|
+
return { guest: autoGuestWorkspace(workspaceHost), note: null };
|
|
32
|
+
if (config.guestWorkspace === 'mirror')
|
|
33
|
+
return planMirrorWorkspace(workspaceHost, autoGuestWorkspace(workspaceHost));
|
|
34
|
+
return { guest: config.guestWorkspace, note: null };
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Where a mapping will most likely appear, before the launch knows every other folder (the prompt and config check
|
|
38
|
+
* show it; the launch places it for real in host/launch/mappings.ts with the same rules).
|
|
39
|
+
*/
|
|
40
|
+
export function previewGuest(m, workspaceHost, workspaceGuest) {
|
|
41
|
+
const guest = tidyGuestPath(m.guest ?? deriveGuest(m.host, workspaceHost, workspaceGuest));
|
|
42
|
+
const conflict = guestConflict(guest, [
|
|
43
|
+
...(m.guest || !isInsideOrEqual(workspaceHost, m.host) ? [{ guest: workspaceGuest, what: 'the project' }] : []),
|
|
44
|
+
{ guest: PROJECTS_GUEST, what: 'other projects' },
|
|
45
|
+
]);
|
|
46
|
+
return { guest, note: conflict ? m.host + ': ' + conflict + '. Fix: ' + guestFix(m.guest) : null };
|
|
47
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { ResolvedRun, RunRequest } from '../types.js';
|
|
2
|
+
/** Precedence (lowest to highest): built-in defaults, user config, .sandbox-config.json in the workspace, command-line flags. */
|
|
3
|
+
export declare const resolveRun: (req: RunRequest, hostNodeVersion?: string) => Promise<ResolvedRun>;
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { DATABASES } from '../detect/index.js';
|
|
3
|
+
import { allowedAnswer, allowRequests, allowStorePath, applyOverrides, describeOverrides, isTrusted, LOCAL_CONFIG_NAME, loosenedRequests, normalizeOverrides, OUTSIDE_FOLDER, outsideKey, outsideMappings, readLocalConfig, saveAllowed, saveTrust, trustStorePath, } from '../local-config/index.js';
|
|
4
|
+
import { assertSafeWorkspace } from '../safe-paths.js';
|
|
5
|
+
import { dirExists, expandPath, fail, plainText } from '../util/index.js';
|
|
6
|
+
import { guestWorkspaceOf, placeInRoot, previewGuest } from './guest-workspace.js';
|
|
7
|
+
import { resolveVersions } from './versions.js';
|
|
8
|
+
/** Precedence (lowest to highest): built-in defaults, user config, .sandbox-config.json in the workspace, command-line flags. */
|
|
9
|
+
export const resolveRun = async (req, hostNodeVersion = process.version) => {
|
|
10
|
+
const notes = [];
|
|
11
|
+
// Mappings from the user config are relative to that config file; expand them before anything else uses them.
|
|
12
|
+
const expand = (list) => list.map((p) => expandPath(p, req.loaded.base));
|
|
13
|
+
const projects = req.loaded.config.projects;
|
|
14
|
+
let config = {
|
|
15
|
+
...req.loaded.config,
|
|
16
|
+
mappings: req.loaded.config.mappings.map((m) => ({ ...m, host: expandPath(m.host, req.loaded.base) })),
|
|
17
|
+
projects: {
|
|
18
|
+
...projects,
|
|
19
|
+
roots: expand(projects.roots),
|
|
20
|
+
exclude: expand(projects.exclude),
|
|
21
|
+
declinedRoots: expand(projects.declinedRoots),
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
const mirror = config.guestWorkspace === 'mirror';
|
|
25
|
+
const storageRoot = expandPath(config.storage.root, req.loaded.base);
|
|
26
|
+
const workspaceHost = path.resolve(req.workspace ?? req.cwd);
|
|
27
|
+
if (!dirExists(workspaceHost))
|
|
28
|
+
fail('The workspace folder does not exist: ' + workspaceHost, 'Check the --workspace path, or cd into the project first.');
|
|
29
|
+
assertSafeWorkspace(workspaceHost, req.packageRoot, storageRoot);
|
|
30
|
+
const scripts = [];
|
|
31
|
+
let localConfigPath = null;
|
|
32
|
+
let overrides = {};
|
|
33
|
+
const local = req.noLocalConfig ? null : readLocalConfig(workspaceHost);
|
|
34
|
+
let outsideAllowed = [];
|
|
35
|
+
if (local) {
|
|
36
|
+
overrides = normalizeOverrides(local.data, workspaceHost, local.path);
|
|
37
|
+
const store = trustStorePath(storageRoot);
|
|
38
|
+
if (!isTrusted(store, local.path, local.hash)) {
|
|
39
|
+
const summary = describeOverrides(overrides, workspaceHost);
|
|
40
|
+
let trusted = req.trustConfig;
|
|
41
|
+
if (!trusted && req.ask) {
|
|
42
|
+
console.log('\nFound ' + local.path + ' which is not trusted yet. It would apply:');
|
|
43
|
+
for (const line of summary)
|
|
44
|
+
console.log(' ' + plainText(line));
|
|
45
|
+
trusted = await req.ask('Trust and use this file?');
|
|
46
|
+
}
|
|
47
|
+
if (!trusted)
|
|
48
|
+
fail(local.path +
|
|
49
|
+
' has not been approved yet (a repo can ship this file, so it needs your OK). It would apply:\n ' +
|
|
50
|
+
(summary.map(plainText).join('\n ') || '(no changes)'), 'Review it, then run again in an interactive terminal and answer y, or add --trust-config. To ignore the file: --no-local-config');
|
|
51
|
+
saveTrust(store, local.path, local.hash);
|
|
52
|
+
notes.push('Trusted ' + local.path + ' (you will only be asked again if the file changes).');
|
|
53
|
+
}
|
|
54
|
+
const requests = await projectFileRequests(req, config, overrides, local.path, workspaceHost, storageRoot, notes);
|
|
55
|
+
const allowed = requests.allowed;
|
|
56
|
+
outsideAllowed = requests.outside;
|
|
57
|
+
config = applyOverrides(allowRequests(config, allowed), overrides);
|
|
58
|
+
scripts.push(...(overrides.scripts ?? []));
|
|
59
|
+
localConfigPath = local.path;
|
|
60
|
+
notes.push('Using ' + local.path);
|
|
61
|
+
}
|
|
62
|
+
if (req.headless !== undefined)
|
|
63
|
+
config = { ...config, sandbox: { ...config.sandbox, headless: req.headless } };
|
|
64
|
+
for (const name of req.databases ?? []) {
|
|
65
|
+
const db = name.toLowerCase();
|
|
66
|
+
if (!DATABASES.includes(db))
|
|
67
|
+
fail('Unknown database "' + name + '".', 'Choose from: ' + DATABASES.join(', '));
|
|
68
|
+
config = { ...config, databases: { ...config.databases, [db]: { ...config.databases[db], enabled: true } } };
|
|
69
|
+
}
|
|
70
|
+
// auto / mirror: a project inside a root is where the root shows it, whichever project starts the sandbox.
|
|
71
|
+
const guest = guestWorkspaceOf(config, workspaceHost);
|
|
72
|
+
const placed = config.guestWorkspace === 'auto' || mirror
|
|
73
|
+
? placeInRoot({ ...config, guestWorkspace: guest.guest }, workspaceHost, mirror, notes)
|
|
74
|
+
: { ...config, guestWorkspace: guest.guest };
|
|
75
|
+
if (guest.note && placed.guestWorkspace === guest.guest)
|
|
76
|
+
notes.push(guest.note);
|
|
77
|
+
config = placed;
|
|
78
|
+
scripts.push(...req.scripts.map((s) => path.resolve(s)));
|
|
79
|
+
const harnessName = req.noAgent ? 'none' : (req.harness ?? config.defaultHarness);
|
|
80
|
+
if (harnessName !== 'none' && !config.harnesses[harnessName])
|
|
81
|
+
fail('Unknown agent "' + harnessName + '".', 'Configured agents: ' +
|
|
82
|
+
Object.keys(config.harnesses).join(', ') +
|
|
83
|
+
' (add more under "harnesses" in your config).');
|
|
84
|
+
const versions = resolveVersions(config, workspaceHost, overrides, req, hostNodeVersion);
|
|
85
|
+
const dataPath = path.join(storageRoot, 'data', config.storage.dataName);
|
|
86
|
+
// A project file may ask for "mirror" too (it decides only its own path); project roots follow the user's choice.
|
|
87
|
+
return {
|
|
88
|
+
config,
|
|
89
|
+
storageRoot,
|
|
90
|
+
dataPath,
|
|
91
|
+
workspaceHost,
|
|
92
|
+
harnessName,
|
|
93
|
+
scripts,
|
|
94
|
+
localConfigPath,
|
|
95
|
+
notes,
|
|
96
|
+
versions,
|
|
97
|
+
mirror,
|
|
98
|
+
outsideMappings: outsideAllowed,
|
|
99
|
+
};
|
|
100
|
+
};
|
|
101
|
+
/**
|
|
102
|
+
* A project may only tighten. What it asks for beyond that (a looser setting, a folder outside the project) is used
|
|
103
|
+
* only if you allowed it for this project: asked once, in one question, at an interactive launch, never by
|
|
104
|
+
* --trust-config. Folders outside the project follow projects.allowOutsideMappings (your settings only). A looser
|
|
105
|
+
* setting you did not allow is named in the notes instead of dropped silently.
|
|
106
|
+
*/
|
|
107
|
+
async function projectFileRequests(req, config, overrides, localPath, workspaceHost, storageRoot, notes) {
|
|
108
|
+
const allowStore = allowStorePath(storageRoot);
|
|
109
|
+
const policy = config.projects.allowOutsideMappings;
|
|
110
|
+
// An optional folder that is not on this PC is skipped at launch, so it needs no answer (yet).
|
|
111
|
+
const outside = outsideMappings(workspaceHost, overrides.mappings).filter((m) => !m.optional || dirExists(m.host));
|
|
112
|
+
const name = path.basename(workspaceHost) + "'s " + LOCAL_CONFIG_NAME;
|
|
113
|
+
const preview = guestWorkspaceOf(applyOverrides(config, overrides), workspaceHost).guest;
|
|
114
|
+
const describe = (m) => (m.readOnly ? 'read-only ' : 'READ/WRITE ') + m.host + ' -> ' + previewGuest(m, workspaceHost, preview).guest;
|
|
115
|
+
const plural = (n) => (n === 1 ? '' : 's');
|
|
116
|
+
if (outside.length && policy === false) {
|
|
117
|
+
fail(name +
|
|
118
|
+
' maps ' +
|
|
119
|
+
outside.length +
|
|
120
|
+
' folder' +
|
|
121
|
+
plural(outside.length) +
|
|
122
|
+
' outside the project, and your settings do not allow that:\n ' +
|
|
123
|
+
outside.map(describe).join('\n '), 'Allow it: set projects.allowOutsideMappings to "ask" or true in your settings (sandbox > Settings, or the file sandbox config path shows). Or remove those mappings from the file.');
|
|
124
|
+
}
|
|
125
|
+
const looser = loosenedRequests(config, overrides);
|
|
126
|
+
const interactive = Boolean(req.ask) && (req.interactive ?? Boolean(process.stdin.isTTY));
|
|
127
|
+
const notAllowedYet = () => policy === 'ask'
|
|
128
|
+
? outside.filter((m) => allowedAnswer(allowStore, localPath, OUTSIDE_FOLDER, outsideKey(m)) !== true)
|
|
129
|
+
: [];
|
|
130
|
+
const openOutside = notAllowedYet();
|
|
131
|
+
const openLooser = looser.filter((a) => allowedAnswer(allowStore, localPath, a.key, a.wanted) === null);
|
|
132
|
+
let declinedOutside = false;
|
|
133
|
+
if (interactive && req.ask && (openOutside.length || openLooser.length)) {
|
|
134
|
+
console.log('\n' + name + ' asks for more than your settings allow:');
|
|
135
|
+
if (openOutside.length)
|
|
136
|
+
console.log(' Folders outside the project:\n' + openOutside.map((m) => ' ' + plainText(describe(m))).join('\n'));
|
|
137
|
+
for (const a of openLooser)
|
|
138
|
+
console.log(' ' + a.key + ' = ' + JSON.stringify(a.wanted) + ' (your settings: ' + JSON.stringify(a.yours) + ')');
|
|
139
|
+
const ok = await req.ask('Allow ' + (openOutside.length + openLooser.length === 1 ? 'it' : 'these') + ' for this project?');
|
|
140
|
+
for (const a of openLooser)
|
|
141
|
+
saveAllowed(allowStore, localPath, a.key, a.wanted, ok);
|
|
142
|
+
// A "no" to folders is not kept: the next interactive launch asks again.
|
|
143
|
+
if (ok)
|
|
144
|
+
for (const m of openOutside)
|
|
145
|
+
saveAllowed(allowStore, localPath, OUTSIDE_FOLDER, outsideKey(m), true);
|
|
146
|
+
declinedOutside = !ok && openOutside.length > 0;
|
|
147
|
+
}
|
|
148
|
+
const notAllowed = notAllowedYet();
|
|
149
|
+
if (notAllowed.length) {
|
|
150
|
+
const them = notAllowed.length === 1 ? 'it' : 'them';
|
|
151
|
+
const what = name +
|
|
152
|
+
' maps ' +
|
|
153
|
+
notAllowed.length +
|
|
154
|
+
' folder' +
|
|
155
|
+
plural(notAllowed.length) +
|
|
156
|
+
' outside the project:\n ' +
|
|
157
|
+
notAllowed.map(describe).join('\n ');
|
|
158
|
+
fail(what +
|
|
159
|
+
(declinedOutside
|
|
160
|
+
? '\nYou did not allow ' + them + ', so the sandbox was not started.'
|
|
161
|
+
: '\nThat needs your OK once (a repo ships this file), and this launch cannot ask (no interactive terminal).'), 'Allow ' +
|
|
162
|
+
them +
|
|
163
|
+
': start it from an interactive terminal and answer y, or set projects.allowOutsideMappings to true in your settings (sandbox > Settings, or the file sandbox config path shows).');
|
|
164
|
+
}
|
|
165
|
+
const allowedHosts = [...new Set(outside.map((m) => m.host))];
|
|
166
|
+
if (outside.length)
|
|
167
|
+
notes.push('Folders outside the project allowed for ' +
|
|
168
|
+
name +
|
|
169
|
+
' (' +
|
|
170
|
+
(policy === true ? 'projects.allowOutsideMappings is true' : 'your answer is kept in ' + allowStore) +
|
|
171
|
+
'): ' +
|
|
172
|
+
allowedHosts.join(', '));
|
|
173
|
+
const allowed = [];
|
|
174
|
+
for (const ask of looser) {
|
|
175
|
+
const ok = allowedAnswer(allowStore, localPath, ask.key, ask.wanted);
|
|
176
|
+
if (ok) {
|
|
177
|
+
allowed.push(ask);
|
|
178
|
+
notes.push('Allowed for this project: ' +
|
|
179
|
+
ask.key +
|
|
180
|
+
' = ' +
|
|
181
|
+
JSON.stringify(ask.wanted) +
|
|
182
|
+
' (your answer is kept in ' +
|
|
183
|
+
allowStore +
|
|
184
|
+
').');
|
|
185
|
+
}
|
|
186
|
+
else
|
|
187
|
+
notes.push('The project asks for ' +
|
|
188
|
+
ask.key +
|
|
189
|
+
' = ' +
|
|
190
|
+
JSON.stringify(ask.wanted) +
|
|
191
|
+
', but your settings say ' +
|
|
192
|
+
JSON.stringify(ask.yours) +
|
|
193
|
+
', so it is not used. ' +
|
|
194
|
+
(ok === false
|
|
195
|
+
? 'You said no (kept in ' + allowStore + ').'
|
|
196
|
+
: 'Start it from an interactive terminal to allow it for this project.') +
|
|
197
|
+
' Or set ' +
|
|
198
|
+
ask.key +
|
|
199
|
+
' in your own settings (sandbox, then Settings > All projects).');
|
|
200
|
+
}
|
|
201
|
+
return { allowed, outside: allowedHosts };
|
|
202
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Config, Overrides, ToolVersions } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* The Node version a Volta project pins ("volta": { "node": "20.11.1" } in package.json), so nvm defaults to it too.
|
|
4
|
+
*/
|
|
5
|
+
export declare const voltaNode: (workspace: string) => string | null;
|
|
6
|
+
/**
|
|
7
|
+
* Picks tool versions. Highest priority first: command line, the folder's .sandbox-config.json,
|
|
8
|
+
* version files in the workspace (.nvmrc, .node-version, .python-version), the tool config, this PC's node version.
|
|
9
|
+
*/
|
|
10
|
+
export declare const resolveVersions: (config: Config, workspace: string, local: Overrides, req: {
|
|
11
|
+
nodeVersion?: string;
|
|
12
|
+
pythonVersion?: string;
|
|
13
|
+
}, hostNodeVersion: string) => ToolVersions;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
import { fileExists } from '../util/index.js';
|
|
5
|
+
const firstLine = (file) => {
|
|
6
|
+
if (!fileExists(file))
|
|
7
|
+
return null;
|
|
8
|
+
const line = fs
|
|
9
|
+
.readFileSync(file, 'utf8')
|
|
10
|
+
.replace(/^\uFEFF/, '')
|
|
11
|
+
.split(/\r?\n/)
|
|
12
|
+
.map((l) => l.replace(/#.*$/, '').trim())
|
|
13
|
+
.find((l) => l !== '');
|
|
14
|
+
return line ?? null;
|
|
15
|
+
};
|
|
16
|
+
const VOLTA_PIN = 'package.json volta.node';
|
|
17
|
+
const PackageJsonSchema = z.object({
|
|
18
|
+
volta: z
|
|
19
|
+
.object({
|
|
20
|
+
node: z
|
|
21
|
+
.string()
|
|
22
|
+
.regex(/^\d+(\.\d+){0,2}$/)
|
|
23
|
+
.optional(),
|
|
24
|
+
})
|
|
25
|
+
.optional(),
|
|
26
|
+
});
|
|
27
|
+
/**
|
|
28
|
+
* The Node version a Volta project pins ("volta": { "node": "20.11.1" } in package.json), so nvm defaults to it too.
|
|
29
|
+
*/
|
|
30
|
+
export const voltaNode = (workspace) => {
|
|
31
|
+
const file = path.join(workspace, 'package.json');
|
|
32
|
+
if (!fileExists(file))
|
|
33
|
+
return null;
|
|
34
|
+
try {
|
|
35
|
+
return (PackageJsonSchema.safeParse(JSON.parse(fs.readFileSync(file, 'utf8').replace(/^\uFEFF/, ''))).data?.volta?.node ??
|
|
36
|
+
null);
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Picks tool versions. Highest priority first: command line, the folder's .sandbox-config.json,
|
|
44
|
+
* version files in the workspace (.nvmrc, .node-version, .python-version), the tool config, this PC's node version.
|
|
45
|
+
*/
|
|
46
|
+
export const resolveVersions = (config, workspace, local, req, hostNodeVersion) => {
|
|
47
|
+
const localTools = (local.toolchains ?? {});
|
|
48
|
+
const pick = (cli, localValue, files, configured) => {
|
|
49
|
+
if (cli)
|
|
50
|
+
return { spec: cli, source: 'command line' };
|
|
51
|
+
if (localValue)
|
|
52
|
+
return { spec: localValue, source: '.sandbox-config.json' };
|
|
53
|
+
for (const name of files) {
|
|
54
|
+
const value = name === VOLTA_PIN ? voltaNode(workspace) : firstLine(path.join(workspace, name));
|
|
55
|
+
if (value)
|
|
56
|
+
return { spec: value, source: name };
|
|
57
|
+
}
|
|
58
|
+
return { spec: configured, source: 'config' };
|
|
59
|
+
};
|
|
60
|
+
let node = pick(req.nodeVersion, localTools.node?.version, ['.nvmrc', '.node-version', VOLTA_PIN], config.toolchains.node.version);
|
|
61
|
+
if (node.spec === 'host')
|
|
62
|
+
node = { spec: hostNodeVersion.replace(/^v/, ''), source: 'this PC' };
|
|
63
|
+
const python = pick(req.pythonVersion, localTools.python?.version, ['.python-version'], config.toolchains.python.version);
|
|
64
|
+
return { node, nodeExtra: config.toolchains.node.extraVersions, python };
|
|
65
|
+
};
|
package/dist/core/safe-paths.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
// Which folders may be shared with the sandbox. The agent gets read/write access to what is mapped, so nothing that
|
|
2
2
|
// would let it reach this tool, its storage, your settings or the OS may be mapped.
|
|
3
|
-
import { userDir } from './config.js';
|
|
4
|
-
import { fail, isInsideOrEqual, isRootPath, isUserProfile } from './util.js';
|
|
3
|
+
import { userDir } from './config/index.js';
|
|
4
|
+
import { fail, isInsideOrEqual, isRootPath, isUserProfile } from './util/index.js';
|
|
5
5
|
/** Folders the agent must never be able to write: the tool itself, its storage and your settings for it. */
|
|
6
6
|
const protectedFolders = (packageRoot, storageRoot) => [
|
|
7
|
-
[
|
|
7
|
+
["this tool's install folder", packageRoot],
|
|
8
8
|
['the sandbox storage folder', storageRoot],
|
|
9
9
|
['your sandbox settings folder', userDir()],
|
|
10
10
|
];
|
|
@@ -25,9 +25,21 @@ export const assertSafeWorkspace = (workspace, packageRoot, storageRoot) => {
|
|
|
25
25
|
fail('Your whole user profile cannot be the workspace: ' + workspace, 'Run sandbox claude from a project folder (or pass --workspace <folder>).');
|
|
26
26
|
for (const [label, dir] of protectedFolders(packageRoot, storageRoot)) {
|
|
27
27
|
if (isInsideOrEqual(dir, workspace))
|
|
28
|
-
fail(workspace +
|
|
28
|
+
fail(workspace +
|
|
29
|
+
' cannot be the workspace: it is inside ' +
|
|
30
|
+
label +
|
|
31
|
+
' (' +
|
|
32
|
+
dir +
|
|
33
|
+
'), so the agent could change the code that runs on this PC.', dir === packageRoot
|
|
34
|
+
? 'Developing windows-development-sandbox itself? Install it as a copy instead of a link: run `npm run install:global` in the repository, then sandbox claude works there.'
|
|
35
|
+
: 'Run sandbox claude from a project folder somewhere else.');
|
|
29
36
|
if (isInsideOrEqual(workspace, dir))
|
|
30
|
-
fail(workspace +
|
|
37
|
+
fail(workspace +
|
|
38
|
+
' cannot be the workspace: it contains ' +
|
|
39
|
+
label +
|
|
40
|
+
' (' +
|
|
41
|
+
dir +
|
|
42
|
+
'), which the agent must not be able to change.', 'Run sandbox claude from a project folder that does not contain it.');
|
|
31
43
|
}
|
|
32
44
|
for (const name of ['WINDIR', 'SystemRoot', 'ProgramFiles', 'ProgramFiles(x86)', 'ProgramData']) {
|
|
33
45
|
const dir = process.env[name];
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
export declare const
|
|
2
|
+
export declare const AppIdSchema: z.ZodEnum<{
|
|
3
3
|
[x: string]: string;
|
|
4
4
|
}>;
|
|
5
|
-
export declare const
|
|
6
|
-
export declare const
|
|
5
|
+
export declare const CustomAppIdSchema: z.ZodString;
|
|
6
|
+
export declare const CustomAppSchema: z.ZodObject<{
|
|
7
7
|
name: z.ZodString;
|
|
8
8
|
github: z.ZodOptional<z.ZodString>;
|
|
9
9
|
asset: z.ZodOptional<z.ZodString>;
|
|
@@ -18,7 +18,7 @@ export declare const CustomApp: z.ZodObject<{
|
|
|
18
18
|
exe: z.ZodString;
|
|
19
19
|
cli: z.ZodOptional<z.ZodBoolean>;
|
|
20
20
|
}, z.core.$strict>;
|
|
21
|
-
export declare const
|
|
21
|
+
export declare const AppsSchema: z.ZodObject<{
|
|
22
22
|
install: z.ZodArray<z.ZodEnum<{
|
|
23
23
|
[x: string]: string;
|
|
24
24
|
}>>;
|
package/dist/core/schema/apps.js
CHANGED
|
@@ -1,27 +1,61 @@
|
|
|
1
1
|
// Apps installed in the sandbox: entries from the catalogue (shared/apps.ts) and programs of your own.
|
|
2
2
|
import { z } from 'zod';
|
|
3
|
-
import { APPS } from '../../shared/apps.js';
|
|
3
|
+
import { APPS } from '../../shared/apps/index.js';
|
|
4
4
|
const CATALOGUE_IDS = APPS.filter((a) => !a.setting).map((a) => a.id);
|
|
5
|
-
export const
|
|
6
|
-
export const
|
|
7
|
-
const compiles = (pattern) => {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
5
|
+
export const AppIdSchema = z.enum(CATALOGUE_IDS);
|
|
6
|
+
export const CustomAppIdSchema = z.string().regex(/^[a-z0-9][a-z0-9-]{0,40}$/, 'lower-case letters, digits and - only');
|
|
7
|
+
const compiles = (pattern) => {
|
|
8
|
+
try {
|
|
9
|
+
new RegExp(pattern);
|
|
10
|
+
return true;
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
export const CustomAppSchema = z
|
|
17
|
+
.strictObject({
|
|
15
18
|
name: z.string().min(1).max(80).describe('The name on the desktop shortcut, e.g. "My Tool".'),
|
|
16
|
-
github: z
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
github: z
|
|
20
|
+
.string()
|
|
21
|
+
.regex(/^[\w.-]+\/[\w.-]+$/, 'owner/repo, e.g. sharkdp/bat')
|
|
22
|
+
.optional()
|
|
23
|
+
.describe('GitHub repository (owner/repo): the file comes from its latest release.'),
|
|
24
|
+
asset: z
|
|
25
|
+
.string()
|
|
26
|
+
.max(200)
|
|
27
|
+
.refine(compiles, 'not a valid pattern')
|
|
28
|
+
.optional()
|
|
29
|
+
.describe('With github: a pattern (regular expression) matching the release file, e.g. windows.*x64\\.zip$'),
|
|
30
|
+
url: z
|
|
31
|
+
.string()
|
|
32
|
+
.url()
|
|
33
|
+
.startsWith('https://', 'https:// only')
|
|
34
|
+
.optional()
|
|
35
|
+
.describe('Or a direct https:// download link (zip, 7z, exe or msi).'),
|
|
36
|
+
sha256: z
|
|
37
|
+
.string()
|
|
38
|
+
.regex(/^[0-9a-fA-F]{64}$/, '64 hex characters')
|
|
39
|
+
.optional()
|
|
40
|
+
.describe('SHA-256 of the download (GitHub releases usually publish one; then this is not needed).'),
|
|
41
|
+
unpack: z
|
|
42
|
+
.enum(['archive', 'file', 'nsis', 'msi'])
|
|
43
|
+
.optional()
|
|
44
|
+
.describe('archive (zip, 7z, tar: the default), file (a single .exe), nsis (an installer 7-Zip can open) or msi.'),
|
|
21
45
|
exe: z.string().min(1).max(200).describe('The program to start (found anywhere in the download), e.g. mytool.exe.'),
|
|
22
|
-
cli: z
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
46
|
+
cli: z
|
|
47
|
+
.boolean()
|
|
48
|
+
.optional()
|
|
49
|
+
.describe('A command-line tool: its folder goes on PATH instead of getting a desktop shortcut.'),
|
|
50
|
+
})
|
|
51
|
+
.refine((a) => (a.github && a.asset ? !a.url : Boolean(a.url) && !a.github && !a.asset), {
|
|
52
|
+
message: 'give github + asset, or url (not both)',
|
|
53
|
+
});
|
|
54
|
+
export const AppsSchema = z.strictObject({
|
|
55
|
+
install: z
|
|
56
|
+
.array(AppIdSchema)
|
|
57
|
+
.describe('Apps from the catalogue to install in every sandbox (the Apps screen in the menu lists them by category). Each is downloaded once and kept.'),
|
|
58
|
+
custom: z
|
|
59
|
+
.record(CustomAppIdSchema, CustomAppSchema)
|
|
60
|
+
.describe('Programs of your own: a GitHub release or a download link, and the program to start. Installed like the catalogue apps.'),
|
|
27
61
|
});
|
|
@@ -1,17 +1,20 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
export declare const
|
|
3
|
-
export declare const
|
|
4
|
-
export declare const
|
|
2
|
+
export declare const GuestPathSchema: z.ZodString;
|
|
3
|
+
export declare const NameSchema: z.ZodString;
|
|
4
|
+
export declare const StringsSchema: z.ZodArray<z.ZodString>;
|
|
5
5
|
export declare const toggle: (description: string) => z.ZodObject<{
|
|
6
6
|
enabled: z.ZodBoolean;
|
|
7
7
|
}, z.core.$strict>;
|
|
8
|
-
export declare const
|
|
9
|
-
export declare const
|
|
8
|
+
export declare const SchemaRefSchema: z.ZodString;
|
|
9
|
+
export declare const GitAccessSchema: z.ZodEnum<{
|
|
10
10
|
readonly: "readonly";
|
|
11
|
-
full: "full";
|
|
12
11
|
none: "none";
|
|
12
|
+
full: "full";
|
|
13
13
|
}>;
|
|
14
|
-
/**
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
/**
|
|
15
|
+
* true, false, or "auto": only when the project uses it (found from files like go.mod in the workspace or one level
|
|
16
|
+
* down).
|
|
17
|
+
*/
|
|
18
|
+
export declare const EnabledSchema: z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>;
|
|
19
|
+
export declare const enabled: (what: string, markers: string) => typeof EnabledSchema;
|
|
20
|
+
export declare const Packages: (what: string, example: string) => typeof StringsSchema;
|