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
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
// PostgreSQL from EnterpriseDB's Windows binaries (without pgAdmin).
|
|
2
|
+
import fs from 'node:fs';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { downloader, fetchJson } from '../../shared/download/index.js';
|
|
5
|
+
import { execAsync } from '../runtime/process.js';
|
|
6
|
+
import { exists } from '../runtime/fs.js';
|
|
7
|
+
import { log } from '../runtime/log.js';
|
|
8
|
+
import { logsDir } from '../runtime/paths.js';
|
|
9
|
+
import { resolveCached } from '../toolchains/version-cache.js';
|
|
10
|
+
import { tool } from '../toolchains/tool-env.js';
|
|
11
|
+
import { portOpen } from '../runtime/ports.js';
|
|
12
|
+
import { clearStaleLocks, createOnce, dataFor } from './server.js';
|
|
13
|
+
import { DatabaseServer } from './database-server.js';
|
|
14
|
+
/** The data folder of a PostgreSQL major version (one cluster per major). */
|
|
15
|
+
function postgresData(version) {
|
|
16
|
+
return dataFor('postgres-' + version.split('.')[0]);
|
|
17
|
+
}
|
|
18
|
+
export class PostgresServer extends DatabaseServer {
|
|
19
|
+
id = 'postgres';
|
|
20
|
+
async start(env, plan) {
|
|
21
|
+
const exact = await resolveCached('postgres:' + plan.version, async () => {
|
|
22
|
+
const versions = (await fetchJson('https://www.postgresql.org/versions.json')).filter((v) => v.supported);
|
|
23
|
+
const hit = plan.version === 'latest'
|
|
24
|
+
? (versions.find((v) => v.current) ?? versions[versions.length - 1])
|
|
25
|
+
: versions.find((v) => v.major === plan.version.split('.')[0]);
|
|
26
|
+
return hit
|
|
27
|
+
? hit.major + '.' + hit.latestMinor
|
|
28
|
+
: Promise.reject(new Error('No supported PostgreSQL ' + plan.version));
|
|
29
|
+
});
|
|
30
|
+
const home = tool('postgres', exact);
|
|
31
|
+
const bin = path.join(home, 'bin');
|
|
32
|
+
if (!exists(path.join(bin, 'pg_ctl.exe'))) {
|
|
33
|
+
log('Downloading PostgreSQL ' + exact + ' (~330 MB once) ...');
|
|
34
|
+
// EDB publishes no checksums; the download is HTTPS from EnterpriseDB, PostgreSQL's official Windows packager.
|
|
35
|
+
await downloader.archive('https://get.enterprisedb.com/postgresql/postgresql-' + exact + '-1-windows-x64-binaries.zip', home, {
|
|
36
|
+
locate: 'pg_ctl.exe',
|
|
37
|
+
up: 1,
|
|
38
|
+
fileName: 'postgresql-' + exact + '.zip',
|
|
39
|
+
members: ['pgsql/bin', 'pgsql/lib', 'pgsql/share', 'pgsql/include'],
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
const data = postgresData(exact);
|
|
43
|
+
await createOnce(data, 'PG_VERSION', async () => {
|
|
44
|
+
log('Creating the PostgreSQL database (first start) ...');
|
|
45
|
+
await execAsync(path.join(bin, 'initdb.exe'), ['-D', data, '-U', 'postgres', '-A', 'trust', '-E', 'UTF8', '--locale=C'], { stdio: 'ignore' });
|
|
46
|
+
});
|
|
47
|
+
if (await portOpen(plan.port))
|
|
48
|
+
throw new Error('port ' + plan.port + ' is already in use (change databases.postgres.port)');
|
|
49
|
+
await clearStaleLocks(data, ['postmaster.pid'], plan.port);
|
|
50
|
+
// postgres.exe refuses to run as an administrator (the sandbox user is one); pg_ctl drops the rights first.
|
|
51
|
+
await execAsync(path.join(bin, 'pg_ctl.exe'), [
|
|
52
|
+
'start',
|
|
53
|
+
'-D',
|
|
54
|
+
data,
|
|
55
|
+
'-w',
|
|
56
|
+
'-t',
|
|
57
|
+
'60',
|
|
58
|
+
'-l',
|
|
59
|
+
path.join(logsDir, 'postgres.log'),
|
|
60
|
+
'-o',
|
|
61
|
+
'-p ' + plan.port + ' -c listen_addresses=localhost',
|
|
62
|
+
], { stdio: 'ignore' });
|
|
63
|
+
Object.assign(env.vars, { PGHOST: 'localhost', PGPORT: String(plan.port), PGUSER: 'postgres' });
|
|
64
|
+
env.prepend.push(bin);
|
|
65
|
+
env.summary.push('postgres ' +
|
|
66
|
+
exact +
|
|
67
|
+
': localhost:' +
|
|
68
|
+
plan.port +
|
|
69
|
+
', user postgres, no password (postgres://postgres@localhost:' +
|
|
70
|
+
plan.port +
|
|
71
|
+
'/postgres)');
|
|
72
|
+
}
|
|
73
|
+
/** Every installed version's cluster shuts down cleanly through pg_ctl first. */
|
|
74
|
+
async stop(plan) {
|
|
75
|
+
if (exists(tool('postgres'))) {
|
|
76
|
+
for (const version of fs.readdirSync(tool('postgres'))) {
|
|
77
|
+
const data = postgresData(version);
|
|
78
|
+
const pgCtl = path.join(tool('postgres', version), 'bin', 'pg_ctl.exe');
|
|
79
|
+
if (exists(path.join(data, 'postmaster.pid')) && exists(pgCtl))
|
|
80
|
+
await execAsync(pgCtl, ['stop', '-D', data, '-m', 'fast', '-w'], { stdio: 'ignore' });
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
await super.stop(plan);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { DatabasePlan } from '../../core/types.js';
|
|
2
|
+
import { type ToolEnv } from '../toolchains/tool-env.js';
|
|
3
|
+
import { DatabaseServer } from './database-server.js';
|
|
4
|
+
export declare class RedisServer extends DatabaseServer {
|
|
5
|
+
readonly id = "redis";
|
|
6
|
+
start(env: ToolEnv, plan: DatabasePlan): Promise<void>;
|
|
7
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// Redis (the maintained community Windows build of upstream Redis).
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { exists, mkdirp } from '../runtime/fs.js';
|
|
4
|
+
import { installFromGithub } from '../toolchains/install.js';
|
|
5
|
+
import { tool } from '../toolchains/tool-env.js';
|
|
6
|
+
import { dataFor, startServer } from './server.js';
|
|
7
|
+
import { DatabaseServer } from './database-server.js';
|
|
8
|
+
export class RedisServer extends DatabaseServer {
|
|
9
|
+
id = 'redis';
|
|
10
|
+
async start(env, plan) {
|
|
11
|
+
const home = tool('redis');
|
|
12
|
+
if (!exists(path.join(home, 'redis-server.exe'))) {
|
|
13
|
+
// Redis has no official Windows build; this one is built from upstream Redis with MSYS2.
|
|
14
|
+
await installFromGithub('redis-windows/redis-windows', /^Redis-[\d.]+-Windows-x64-msys2\.zip$/, {
|
|
15
|
+
dest: home,
|
|
16
|
+
what: (a) => 'Redis (' + a.name + ', ~10 MB once)',
|
|
17
|
+
locate: 'redis-server.exe',
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
const data = mkdirp(dataFor('redis'));
|
|
21
|
+
await startServer('redis', path.join(home, 'redis-server.exe'), ['--port', String(plan.port), '--bind', '127.0.0.1', '--dir', data.replace(/\\/g, '/'), '--appendonly', 'yes'], plan.port);
|
|
22
|
+
env.prepend.push(home);
|
|
23
|
+
env.summary.push('redis: redis://127.0.0.1:' + plan.port + ' (redis-cli on PATH)');
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { DatabasePlan } from '../../core/types.js';
|
|
2
|
+
import type { ToolEnv } from '../toolchains/tool-env.js';
|
|
3
|
+
/** Stops a database (and DynamoDB's admin UI); false when it was not running. */
|
|
4
|
+
export declare function stopDatabase(plan: DatabasePlan): Promise<boolean>;
|
|
5
|
+
export declare function setupDatabase(env: ToolEnv, plan: DatabasePlan): Promise<void>;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { dryRun } from '../runtime/paths.js';
|
|
2
|
+
import { log } from '../runtime/log.js';
|
|
3
|
+
import { portOpen } from '../runtime/ports.js';
|
|
4
|
+
import { duringSession } from '../runtime/project-context.js';
|
|
5
|
+
import { killListeners } from './database-server.js';
|
|
6
|
+
import { DynamoServer } from './dynamodb.js';
|
|
7
|
+
import { MongoServer } from './mongodb.js';
|
|
8
|
+
import { MysqlServer } from './mysql.js';
|
|
9
|
+
import { DATABASE_NAMES } from './names.js';
|
|
10
|
+
import { PostgresServer } from './postgres.js';
|
|
11
|
+
import { RedisServer } from './redis.js';
|
|
12
|
+
const SERVERS = {
|
|
13
|
+
postgres: new PostgresServer(),
|
|
14
|
+
mysql: new MysqlServer(),
|
|
15
|
+
mongodb: new MongoServer(),
|
|
16
|
+
redis: new RedisServer(),
|
|
17
|
+
dynamodb: new DynamoServer(),
|
|
18
|
+
};
|
|
19
|
+
/** Stops a database (and DynamoDB's admin UI); false when it was not running. */
|
|
20
|
+
export async function stopDatabase(plan) {
|
|
21
|
+
if (!(await portOpen(plan.port)))
|
|
22
|
+
return false;
|
|
23
|
+
// SQL Server never runs here: whatever listens on its port is just ended.
|
|
24
|
+
if (plan.database === 'sqlserver')
|
|
25
|
+
killListeners(plan);
|
|
26
|
+
else
|
|
27
|
+
await SERVERS[plan.database].stop(plan);
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
export async function setupDatabase(env, plan) {
|
|
31
|
+
if (plan.database === 'sqlserver') {
|
|
32
|
+
env.summary.push('sqlserver: NOT available (SQL Server cannot start inside Windows Sandbox). Switch the project to Postgres or SQLite for local work');
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
if (dryRun) {
|
|
36
|
+
log('(dry run) would run ' +
|
|
37
|
+
DATABASE_NAMES[plan.database] +
|
|
38
|
+
' on port ' +
|
|
39
|
+
plan.port +
|
|
40
|
+
' (' +
|
|
41
|
+
plan.reasons.join('; ') +
|
|
42
|
+
')');
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
// A project that joined later, while another project's server already listens there: they share it.
|
|
46
|
+
if (duringSession() && (await portOpen(plan.port))) {
|
|
47
|
+
env.summary.push(plan.database + ': shared, already running on port ' + plan.port);
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
await SERVERS[plan.database].start(env, plan);
|
|
51
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function runSbxDb(args: string[]): Promise<number>;
|
|
@@ -1,20 +1,21 @@
|
|
|
1
|
-
// `sbx-db`: list, start and stop the sandbox's databases from a terminal inside it (`sandbox db` on the PC runs it too).
|
|
2
|
-
// Usage: sbx-db [list] | sbx-db start <name> | sbx-db stop <name>
|
|
3
1
|
import fs from 'node:fs';
|
|
4
|
-
import {
|
|
5
|
-
import { portOpen } from '
|
|
6
|
-
import { DATABASE_NAMES
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
2
|
+
import { ProjectSpecSchema } from '../../shared/channel/schema.js';
|
|
3
|
+
import { portOpen } from '../runtime/ports.js';
|
|
4
|
+
import { DATABASE_NAMES } from './names.js';
|
|
5
|
+
import { setupDatabase, stopDatabase } from './registry.js';
|
|
6
|
+
import { emptyEnv } from '../toolchains/tool-env.js';
|
|
7
|
+
import { addMachineEnvironment } from '../setup/environment.js';
|
|
8
|
+
import { session } from '../runtime/session.js';
|
|
10
9
|
const USAGE = 'Usage: sbx-db [list] | sbx-db start <name> | sbx-db stop <name>';
|
|
11
|
-
/**
|
|
10
|
+
/**
|
|
11
|
+
* In a project registered after boot (its terminals and exec have AGENT_PROJECT_FILE): that project's database plan.
|
|
12
|
+
*/
|
|
12
13
|
const projectPlans = () => {
|
|
13
14
|
const file = process.env.AGENT_PROJECT_FILE;
|
|
14
15
|
if (!file)
|
|
15
16
|
return null;
|
|
16
17
|
try {
|
|
17
|
-
return
|
|
18
|
+
return ProjectSpecSchema.safeParse(JSON.parse(fs.readFileSync(file, 'utf8'))).data?.databases ?? null;
|
|
18
19
|
}
|
|
19
20
|
catch {
|
|
20
21
|
return null;
|
|
@@ -61,7 +62,7 @@ const stop = async (name) => {
|
|
|
61
62
|
console.log((await stopDatabase(plan)) ? 'Stopped ' + plan.database + '.' : plan.database + ' was not running.');
|
|
62
63
|
return 0;
|
|
63
64
|
};
|
|
64
|
-
|
|
65
|
+
export function runSbxDb(args) {
|
|
65
66
|
const [action = 'list', name] = args;
|
|
66
67
|
if (action === 'list')
|
|
67
68
|
return list();
|
|
@@ -71,5 +72,4 @@ const main = (args) => {
|
|
|
71
72
|
return stop(name);
|
|
72
73
|
console.error(USAGE);
|
|
73
74
|
return Promise.resolve(2);
|
|
74
|
-
}
|
|
75
|
-
main(process.argv.slice(2)).then((code) => { process.exitCode = code; }, (e) => { console.error(errMsg(e)); process.exitCode = 1; });
|
|
75
|
+
}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
/** C:\AgentData\databases\<name>: the data survives the sandbox. */
|
|
2
|
-
export declare
|
|
3
|
-
/** Starts a server detached (it outlives the boot script)
|
|
4
|
-
export declare
|
|
2
|
+
export declare function dataFor(name: string): string;
|
|
3
|
+
/** Starts a server detached (it outlives the boot script), output in logs\<name>.log, and waits for its port. */
|
|
4
|
+
export declare function startServer(name: string, exe: string, args: string[], port: number): Promise<void>;
|
|
5
5
|
/**
|
|
6
6
|
* Lock files a sandbox that was closed without shutting the server down leaves behind. Only when nothing listens on
|
|
7
7
|
* the port: a server already running in this VM keeps its lock.
|
|
8
8
|
*/
|
|
9
|
-
export declare
|
|
9
|
+
export declare function clearStaleLocks(dir: string, files: string[], port: number): Promise<void>;
|
|
10
10
|
/**
|
|
11
11
|
* Creates a database folder with `create` (initdb, install-db) unless `marker` is there. A failed or interrupted run
|
|
12
12
|
* removes the folder again when this call made it, so the half-made one is not taken for a finished database next boot.
|
|
13
13
|
*/
|
|
14
|
-
export declare
|
|
14
|
+
export declare function createOnce(data: string, marker: string, create: () => Promise<void>): Promise<void>;
|
|
@@ -1,14 +1,17 @@
|
|
|
1
|
-
// What
|
|
1
|
+
// What the database servers share: where data lives, starting a server detached, and safe first-time creation.
|
|
2
2
|
import fs from 'node:fs';
|
|
3
3
|
import path from 'node:path';
|
|
4
4
|
import { spawn } from 'node:child_process';
|
|
5
|
-
import { safeRemove } from '
|
|
6
|
-
import { dataDir,
|
|
7
|
-
import {
|
|
5
|
+
import { safeRemove } from '../../shared/io/safe-remove.js';
|
|
6
|
+
import { dataDir, logsDir } from '../runtime/paths.js';
|
|
7
|
+
import { exists, mkdirp } from '../runtime/fs.js';
|
|
8
|
+
import { portOpen, waitForPort } from '../runtime/ports.js';
|
|
8
9
|
/** C:\AgentData\databases\<name>: the data survives the sandbox. */
|
|
9
|
-
export
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
export function dataFor(name) {
|
|
11
|
+
return path.join(dataDir, 'databases', name);
|
|
12
|
+
}
|
|
13
|
+
/** Starts a server detached (it outlives the boot script), output in logs\<name>.log, and waits for its port. */
|
|
14
|
+
export async function startServer(name, exe, args, port) {
|
|
12
15
|
if (await portOpen(port))
|
|
13
16
|
throw new Error('port ' + port + ' is already in use (change databases.' + name + '.port)');
|
|
14
17
|
const logFile = path.join(logsDir, name + '.log');
|
|
@@ -17,22 +20,22 @@ export const startServer = async (name, exe, args, port) => {
|
|
|
17
20
|
fs.closeSync(out);
|
|
18
21
|
if (!(await waitForPort(port, 60)))
|
|
19
22
|
throw new Error(name + ' did not start listening on port ' + port + '; see ' + logFile);
|
|
20
|
-
}
|
|
23
|
+
}
|
|
21
24
|
/**
|
|
22
25
|
* Lock files a sandbox that was closed without shutting the server down leaves behind. Only when nothing listens on
|
|
23
26
|
* the port: a server already running in this VM keeps its lock.
|
|
24
27
|
*/
|
|
25
|
-
export
|
|
28
|
+
export async function clearStaleLocks(dir, files, port) {
|
|
26
29
|
if (await portOpen(port))
|
|
27
30
|
return;
|
|
28
31
|
for (const f of files)
|
|
29
32
|
fs.rmSync(path.join(dir, f), { force: true });
|
|
30
|
-
}
|
|
33
|
+
}
|
|
31
34
|
/**
|
|
32
35
|
* Creates a database folder with `create` (initdb, install-db) unless `marker` is there. A failed or interrupted run
|
|
33
36
|
* removes the folder again when this call made it, so the half-made one is not taken for a finished database next boot.
|
|
34
37
|
*/
|
|
35
|
-
export
|
|
38
|
+
export async function createOnce(data, marker, create) {
|
|
36
39
|
if (exists(path.join(data, marker)))
|
|
37
40
|
return;
|
|
38
41
|
const existed = exists(data);
|
|
@@ -45,8 +48,10 @@ export const createOnce = async (data, marker, create) => {
|
|
|
45
48
|
try {
|
|
46
49
|
safeRemove(data, dataDir);
|
|
47
50
|
}
|
|
48
|
-
catch {
|
|
51
|
+
catch {
|
|
52
|
+
/* the original error is the one to report */
|
|
53
|
+
}
|
|
49
54
|
}
|
|
50
55
|
throw e;
|
|
51
56
|
}
|
|
52
|
-
}
|
|
57
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// Session daemon (runs detached inside the sandbox for its whole life). It is the only thing that acts on host
|
|
2
|
+
// requests, and it only knows four request kinds: start a session, run a command, restart sessions, ping.
|
|
3
|
+
// It must never die quietly: every iteration is guarded, and anything unexpected is written to its log.
|
|
4
|
+
// The handlers live in daemon/ (session, exec); this file is the polling loop.
|
|
5
|
+
import { startRelays } from '../daemon/relays.js';
|
|
6
|
+
import { startProcessCollector } from '../audit/process-audit.js';
|
|
7
|
+
import { safely } from '../daemon/state.js';
|
|
8
|
+
import { log, warn } from '../runtime/log.js';
|
|
9
|
+
import { errMsg } from '../../core/util/errors.js';
|
|
10
|
+
import { loop } from '../daemon/daemon.js';
|
|
11
|
+
process.on('uncaughtException', (e) => warn('daemon: unexpected error (continuing): ' + (e.stack ?? errMsg(e))));
|
|
12
|
+
process.on('unhandledRejection', (e) => warn('daemon: unexpected error (continuing): ' + errMsg(e)));
|
|
13
|
+
log('Session daemon started (pid ' + process.pid + ').');
|
|
14
|
+
safely('port forwards', startRelays);
|
|
15
|
+
safely('audit', startProcessCollector);
|
|
16
|
+
loop();
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// `sbx-db`: list, start and stop the sandbox's databases from a terminal inside it (`sandbox db` on the PC runs it too).
|
|
2
|
+
// Usage: sbx-db [list] | sbx-db start <name> | sbx-db stop <name>
|
|
3
|
+
import { errMsg } from '../../core/util/errors.js';
|
|
4
|
+
import { runSbxDb } from '../databases/sbx-db.js';
|
|
5
|
+
runSbxDb(process.argv.slice(2)).then((code) => {
|
|
6
|
+
process.exitCode = code;
|
|
7
|
+
}, (e) => {
|
|
8
|
+
console.error(errMsg(e));
|
|
9
|
+
process.exitCode = 1;
|
|
10
|
+
});
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// `git` wrapper used when provisioning.git.access is 'readonly' or 'none'. Installed first on PATH (git.cmd) and as a
|
|
2
|
+
// bash function (BASH_ENV), it decides per call and then runs the real git. Standalone on purpose: it runs on every
|
|
3
|
+
// git call, so it reads only two environment variables (AGENT_GIT_ACCESS, AGENT_REAL_GIT).
|
|
4
|
+
import { spawnSync } from 'node:child_process';
|
|
5
|
+
import { gitDecision } from '../git/decision.js';
|
|
6
|
+
if (process.argv[1]?.toLowerCase().endsWith('gitguard.js')) {
|
|
7
|
+
const args = process.argv.slice(2);
|
|
8
|
+
const decision = gitDecision(args, process.env.AGENT_GIT_ACCESS ?? 'none');
|
|
9
|
+
if (!decision.allow) {
|
|
10
|
+
console.error('fatal: ' + decision.reason);
|
|
11
|
+
process.exit(128);
|
|
12
|
+
}
|
|
13
|
+
const real = process.env.AGENT_REAL_GIT;
|
|
14
|
+
if (!real) {
|
|
15
|
+
console.error('fatal: git is not available in this sandbox.');
|
|
16
|
+
process.exit(128);
|
|
17
|
+
}
|
|
18
|
+
const result = spawnSync(real, args, { stdio: 'inherit', windowsHide: true });
|
|
19
|
+
process.exit(result.status ?? 1);
|
|
20
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// Guest entry point, started by bootstrap.ps1 in the sandbox window. Provisions everything, starts the session
|
|
2
|
+
// daemon, asks it for the first agent session and then shows that session in this window.
|
|
3
|
+
import fs from 'node:fs';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import { logsDir } from '../runtime/paths.js';
|
|
6
|
+
import { setSandboxStatus } from '../runtime/status.js';
|
|
7
|
+
import { errMsg } from '../../core/util/errors.js';
|
|
8
|
+
import { runBoot } from '../boot/boot.js';
|
|
9
|
+
runBoot().catch((e) => {
|
|
10
|
+
const message = errMsg(e) + (e instanceof Error && e.stack ? '\n' + e.stack : '');
|
|
11
|
+
try {
|
|
12
|
+
setSandboxStatus('failed', errMsg(e));
|
|
13
|
+
fs.writeFileSync(path.join(logsDir, 'guest-error.txt'), message);
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
/* ignore */
|
|
17
|
+
}
|
|
18
|
+
// The window gets the plain message; the stack trace is in guest-error.txt.
|
|
19
|
+
console.error('\n\x1b[31mThe sandbox could not start: ' +
|
|
20
|
+
errMsg(e) +
|
|
21
|
+
'\x1b[0m\nDetails: ' +
|
|
22
|
+
path.join(logsDir, 'guest-error.txt'));
|
|
23
|
+
process.exitCode = 1;
|
|
24
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// The sandbox's own proxy for network.allowOnly (runs detached for the sandbox's life, as sbx-netproxy.exe so the
|
|
2
|
+
// firewall can let only it out). HTTPS goes through CONNECT, plain HTTP as proxy requests; a host that is not allowed
|
|
3
|
+
// gets 403 and a line in logs\netproxy.log. With network.proxy set it hands everything on to that proxy.
|
|
4
|
+
// Usage: sbx-netproxy.exe netproxy.js
|
|
5
|
+
import { PROXY_PORT } from '../../shared/network/policy.js';
|
|
6
|
+
import { server } from '../network/proxy-server.js';
|
|
7
|
+
server.listen(PROXY_PORT, '127.0.0.1');
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// A terminal tab inside the sandbox that shows one agent session (same pseudo console the host can attach to).
|
|
2
|
+
// Usage: node view.js <sessionId>
|
|
3
|
+
import { viewSession } from '../sessions/viewer.js';
|
|
4
|
+
if (process.argv[1]?.endsWith('view.js') && process.argv[2]) {
|
|
5
|
+
viewSession(process.argv[2]).then((code) => {
|
|
6
|
+
process.exitCode = code;
|
|
7
|
+
}, (e) => {
|
|
8
|
+
console.error(e instanceof Error ? e.message : String(e));
|
|
9
|
+
process.exitCode = 1;
|
|
10
|
+
});
|
|
11
|
+
}
|
|
@@ -1,24 +1,54 @@
|
|
|
1
|
-
// `git` wrapper used when provisioning.git.access is 'readonly' or 'none'. Installed first on PATH (git.cmd) and as a
|
|
2
|
-
// bash function (BASH_ENV), it decides per call and then runs the real git. Standalone on purpose: it runs on every
|
|
3
|
-
// git call, so it reads only two environment variables (AGENT_GIT_ACCESS, AGENT_REAL_GIT).
|
|
4
|
-
import { spawnSync } from 'node:child_process';
|
|
5
1
|
/** Subcommands that only read. */
|
|
6
2
|
const READ_ONLY = new Set([
|
|
7
|
-
'status',
|
|
8
|
-
'
|
|
9
|
-
'
|
|
3
|
+
'status',
|
|
4
|
+
'log',
|
|
5
|
+
'diff',
|
|
6
|
+
'show',
|
|
7
|
+
'blame',
|
|
8
|
+
'annotate',
|
|
9
|
+
'ls-files',
|
|
10
|
+
'ls-tree',
|
|
11
|
+
'ls-remote',
|
|
12
|
+
'rev-parse',
|
|
13
|
+
'rev-list',
|
|
14
|
+
'describe',
|
|
15
|
+
'shortlog',
|
|
16
|
+
'grep',
|
|
17
|
+
'cat-file',
|
|
18
|
+
'reflog',
|
|
19
|
+
'whatchanged',
|
|
20
|
+
'name-rev',
|
|
21
|
+
'for-each-ref',
|
|
22
|
+
'show-ref',
|
|
23
|
+
'merge-base',
|
|
24
|
+
'count-objects',
|
|
25
|
+
'check-ignore',
|
|
26
|
+
'check-attr',
|
|
27
|
+
'var',
|
|
28
|
+
'version',
|
|
29
|
+
'help',
|
|
30
|
+
'diff-tree',
|
|
31
|
+
'diff-files',
|
|
32
|
+
'diff-index',
|
|
33
|
+
'cherry',
|
|
34
|
+
'range-diff',
|
|
35
|
+
'show-branch',
|
|
36
|
+
'verify-commit',
|
|
37
|
+
'verify-tag',
|
|
10
38
|
]);
|
|
11
39
|
/**
|
|
12
40
|
* `git branch` / `git tag` list when every argument is a listing flag, or when a listing flag is present and the
|
|
13
41
|
* rest are patterns/commits (`git branch --contains HEAD`). A bare name (`git branch new`) creates, so it is refused.
|
|
14
42
|
*/
|
|
15
|
-
const listingOnly = (flags, listFlags) => (rest) => rest.every((a) => flags.test(a)) ||
|
|
43
|
+
const listingOnly = (flags, listFlags) => (rest) => rest.every((a) => flags.test(a)) ||
|
|
44
|
+
(rest.some((a) => listFlags.test(a)) && rest.every((a) => flags.test(a) || !a.startsWith('-')));
|
|
16
45
|
/** Subcommands that are read-only only in their listing forms. */
|
|
17
46
|
const LISTING = {
|
|
18
47
|
branch: listingOnly(/^(-a|-r|-v|-vv|--all|--remotes|--list|-l|--show-current|--verbose|--no-color|--color(=.*)?|--contains|--no-contains|--merged|--no-merged|--sort=.*|--format=.*)$/, /^(--list|-l|--contains|--no-contains|--merged|--no-merged)$/),
|
|
19
48
|
tag: listingOnly(/^(-l|--list|-n\d*|--contains|--no-contains|--merged|--no-merged|--points-at|--sort=.*|--format=.*)$/, /^(-l|--list|--contains|--no-contains|--merged|--no-merged|--points-at)$/),
|
|
20
49
|
remote: (rest) => rest.length === 0 || ['-v', '--verbose', 'show', 'get-url'].includes(rest[0]),
|
|
21
|
-
config: (rest) => rest.some((a) => /^(--get|--get-all|--get-regexp|--list|-l|--show-origin|--show-scope|--name-only)$/.test(a)) &&
|
|
50
|
+
config: (rest) => rest.some((a) => /^(--get|--get-all|--get-regexp|--list|-l|--show-origin|--show-scope|--name-only)$/.test(a)) &&
|
|
51
|
+
!rest.some((a) => /^(--add|--unset|--unset-all|--replace-all|--rename-section|--remove-section|-e|--edit)$/.test(a)),
|
|
22
52
|
stash: (rest) => ['list', 'show'].includes(rest[0] ?? ''),
|
|
23
53
|
worktree: (rest) => rest[0] === 'list',
|
|
24
54
|
submodule: (rest) => rest.length === 0 || rest[0] === 'status' || rest[0] === 'summary',
|
|
@@ -31,7 +61,10 @@ export const gitDecision = (args, access) => {
|
|
|
31
61
|
if (access === 'full')
|
|
32
62
|
return { allow: true };
|
|
33
63
|
if (access !== 'readonly')
|
|
34
|
-
return {
|
|
64
|
+
return {
|
|
65
|
+
allow: false,
|
|
66
|
+
reason: 'git is disabled in this sandbox (provisioning.git.access = ' + (access || 'none') + ').',
|
|
67
|
+
};
|
|
35
68
|
let i = 0;
|
|
36
69
|
while (i < args.length && args[i].startsWith('-')) {
|
|
37
70
|
if (FORBIDDEN_GLOBAL.test(args[i]))
|
|
@@ -41,20 +74,10 @@ export const gitDecision = (args, access) => {
|
|
|
41
74
|
const [command, ...rest] = args.slice(i);
|
|
42
75
|
if (command === undefined || command === '--version' || READ_ONLY.has(command) || (LISTING[command]?.(rest) ?? false))
|
|
43
76
|
return { allow: true };
|
|
44
|
-
return {
|
|
77
|
+
return {
|
|
78
|
+
allow: false,
|
|
79
|
+
reason: 'git ' +
|
|
80
|
+
command +
|
|
81
|
+
' is blocked: git is read-only in this sandbox (provisioning.git.access = readonly). Reading (status, log, diff, show, blame) is allowed.',
|
|
82
|
+
};
|
|
45
83
|
};
|
|
46
|
-
if (process.argv[1]?.toLowerCase().endsWith('gitguard.js')) {
|
|
47
|
-
const args = process.argv.slice(2);
|
|
48
|
-
const decision = gitDecision(args, process.env.AGENT_GIT_ACCESS ?? 'none');
|
|
49
|
-
if (!decision.allow) {
|
|
50
|
-
console.error('fatal: ' + decision.reason);
|
|
51
|
-
process.exit(128);
|
|
52
|
-
}
|
|
53
|
-
const real = process.env.AGENT_REAL_GIT;
|
|
54
|
-
if (!real) {
|
|
55
|
-
console.error('fatal: git is not available in this sandbox.');
|
|
56
|
-
process.exit(128);
|
|
57
|
-
}
|
|
58
|
-
const result = spawnSync(real, args, { stdio: 'inherit', windowsHide: true });
|
|
59
|
-
process.exit(result.status ?? 1);
|
|
60
|
-
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import os from 'node:os';
|
|
2
|
+
/** Guest IPv4 addresses the host can use to reach session ports. */
|
|
3
|
+
export const guestAddresses = () => Object.values(os.networkInterfaces())
|
|
4
|
+
.flat()
|
|
5
|
+
.filter((i) => Boolean(i) && i.family === 'IPv4' && !i.internal)
|
|
6
|
+
.map((i) => i.address);
|
|
@@ -1,11 +1,3 @@
|
|
|
1
|
-
/** What the agent's manifest says about the LAN. */
|
|
2
|
-
export type LanState = 'blocked' | 'open' | 'offline';
|
|
3
|
-
/**
|
|
4
|
-
* Applies the LAN block. Internet is checked first; if it works before the rules but not after, the rules (not the
|
|
5
|
-
* internet) are the problem, so they are removed and the agent is told the LAN is open. If there is no internet at
|
|
6
|
-
* all, the block stays in place: being offline is never a reason to open the LAN.
|
|
7
|
-
*/
|
|
8
|
-
export declare const applyNetworkPolicy: (ptyHostExe: string | null) => Promise<LanState>;
|
|
9
1
|
/** HTTP_PROXY & co. for everything in the sandbox: its own proxy (allowOnly) or yours (network.proxy). */
|
|
10
2
|
export declare const proxyEnv: () => Record<string, string>;
|
|
11
3
|
/**
|
|
@@ -15,5 +7,3 @@ export declare const proxyEnv: () => Record<string, string>;
|
|
|
15
7
|
* could undo it, which is why sandbox.networking false is the only hard isolation.
|
|
16
8
|
*/
|
|
17
9
|
export declare const applyAllowOnly: () => Promise<boolean>;
|
|
18
|
-
/** Guest IPv4 addresses the host can use to reach session ports. */
|
|
19
|
-
export declare const guestAddresses: () => string[];
|