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
|
@@ -3,24 +3,40 @@
|
|
|
3
3
|
// sandbox is running.
|
|
4
4
|
import path from 'node:path';
|
|
5
5
|
import _ from 'lodash';
|
|
6
|
-
import { DEFAULTS, loadConfig, userDir } from '../../../core/config.js';
|
|
7
|
-
import { errMsg, expandPath, UserError } from '../../../core/util.js';
|
|
8
|
-
import { isSandboxRunning } from '../../../host/
|
|
9
|
-
import { createContext
|
|
6
|
+
import { DEFAULTS, loadConfig, userDir } from '../../../core/config/index.js';
|
|
7
|
+
import { errMsg, expandPath, UserError } from '../../../core/util/index.js';
|
|
8
|
+
import { isSandboxRunning } from '../../../host/sandbox/index.js';
|
|
9
|
+
import { createContext } from '../context.js';
|
|
10
|
+
import { printJson, table } from '../../output/index.js';
|
|
10
11
|
import { CHECKS } from './checks.js';
|
|
11
|
-
const LABEL = {
|
|
12
|
+
const LABEL = {
|
|
13
|
+
ok: 'OK',
|
|
14
|
+
fixed: 'FIXED',
|
|
15
|
+
'needs-you': 'NEEDS YOU',
|
|
16
|
+
warn: 'WARNING',
|
|
17
|
+
skipped: 'SKIPPED',
|
|
18
|
+
};
|
|
12
19
|
/** Runs every check in order; a check that throws is reported, never stops the rest. */
|
|
13
|
-
export
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
export function runChecks(env, checks = CHECKS) {
|
|
21
|
+
return checks.map((check) => {
|
|
22
|
+
try {
|
|
23
|
+
return { name: check.name, ...check.run(env) };
|
|
24
|
+
}
|
|
25
|
+
catch (e) {
|
|
26
|
+
const fix = e instanceof UserError && e.fix ? ' ' + e.fix : '';
|
|
27
|
+
return { name: check.name, status: 'needs-you', detail: 'check failed: ' + errMsg(e) + fix };
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
export function repair(ctx, configError = null) {
|
|
32
|
+
const env = {
|
|
33
|
+
ctx,
|
|
34
|
+
running: isSandboxRunning(),
|
|
35
|
+
dataPath: ctx.dataPath,
|
|
36
|
+
storageRoot: ctx.storageRoot,
|
|
37
|
+
toolsDir: path.join(ctx.dataPath, 'tools'),
|
|
38
|
+
configError,
|
|
39
|
+
};
|
|
24
40
|
// Re-check the config file even when the context loaded (it may have been edited since, or come from --config).
|
|
25
41
|
if (!env.configError) {
|
|
26
42
|
try {
|
|
@@ -38,14 +54,17 @@ export const repair = (ctx, configError = null) => {
|
|
|
38
54
|
return results.some((r) => r.status === 'needs-you') ? 1 : 0;
|
|
39
55
|
table(results.map((r) => [LABEL[r.status], r.name, r.detail]));
|
|
40
56
|
const counts = _.countBy(results, 'status');
|
|
41
|
-
console.log('\n' +
|
|
57
|
+
console.log('\n' +
|
|
58
|
+
(counts['needs-you']
|
|
59
|
+
? counts['needs-you'] + ' thing(s) need you (see NEEDS YOU above).'
|
|
60
|
+
: 'All good' + (counts.fixed ? ': fixed ' + counts.fixed + ' problem(s).' : '.')));
|
|
42
61
|
return counts['needs-you'] ? 1 : 0;
|
|
43
|
-
}
|
|
62
|
+
}
|
|
44
63
|
/**
|
|
45
64
|
* Entry point that works even when the config file is broken (createContext would throw): falls back to the built-in
|
|
46
65
|
* defaults so the other checks still run, and reports the config problem as the first check.
|
|
47
66
|
*/
|
|
48
|
-
export
|
|
67
|
+
export function repairCommand(packageRoot, entry, options) {
|
|
49
68
|
let ctx;
|
|
50
69
|
try {
|
|
51
70
|
ctx = createContext(packageRoot, entry, options);
|
|
@@ -55,7 +74,14 @@ export const repairCommand = (packageRoot, entry, options) => {
|
|
|
55
74
|
throw e;
|
|
56
75
|
const loaded = { config: structuredClone(DEFAULTS), configPath: null, base: userDir() };
|
|
57
76
|
const storageRoot = expandPath(loaded.config.storage.root, loaded.base);
|
|
58
|
-
return repair({
|
|
77
|
+
return repair({
|
|
78
|
+
packageRoot,
|
|
79
|
+
entry,
|
|
80
|
+
options,
|
|
81
|
+
loaded,
|
|
82
|
+
storageRoot,
|
|
83
|
+
dataPath: path.join(storageRoot, 'data', loaded.config.storage.dataName),
|
|
84
|
+
}, e);
|
|
59
85
|
}
|
|
60
86
|
return repair(ctx);
|
|
61
|
-
}
|
|
87
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { UserError } from '../../../core/util.js';
|
|
1
|
+
import type { UserError } from '../../../core/util/index.js';
|
|
2
2
|
import type { Context } from '../context.js';
|
|
3
3
|
export type RepairStatus = 'ok' | 'fixed' | 'needs-you' | 'warn' | 'skipped';
|
|
4
4
|
export interface RepairResult {
|
|
@@ -18,7 +18,7 @@ export interface RepairCheck {
|
|
|
18
18
|
name: string;
|
|
19
19
|
run: (env: RepairEnv) => Omit<RepairResult, 'name'>;
|
|
20
20
|
}
|
|
21
|
-
export declare
|
|
21
|
+
export declare function ok(detail: string): Omit<RepairResult, 'name'>;
|
|
22
22
|
/** For fixes that must not touch folders a running sandbox may be using. */
|
|
23
23
|
export declare const whileRunning: {
|
|
24
24
|
status: "skipped";
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
-
export
|
|
1
|
+
export function ok(detail) {
|
|
2
|
+
return { status: 'ok', detail };
|
|
3
|
+
}
|
|
2
4
|
/** For fixes that must not touch folders a running sandbox may be using. */
|
|
3
|
-
export const whileRunning = {
|
|
5
|
+
export const whileRunning = {
|
|
6
|
+
status: 'skipped',
|
|
7
|
+
detail: 'a sandbox is running and may be using it; run repair again once it is closed',
|
|
8
|
+
};
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { select } from '@inquirer/prompts';
|
|
2
|
+
import { SandboxChannel, sessionsFirstIn } from '../../../host/channel/index.js';
|
|
3
|
+
import { ProjectRegistry } from '../../../host/projects/index.js';
|
|
4
|
+
import { isWithin } from '../../../shared/paths/index.js';
|
|
5
|
+
import { safeText, sleep } from '../../../core/util/index.js';
|
|
6
|
+
import { requireOnPc, requireRunning } from '../context.js';
|
|
7
|
+
import { attachHere, readySandbox } from '../launch/index.js';
|
|
8
|
+
import { locateHere } from '../projects/index.js';
|
|
9
|
+
import { ago } from '../../output/index.js';
|
|
10
|
+
import { projectOf } from './list.js';
|
|
11
|
+
/** Asks which session to attach to, this folder's project first (the newest is the default). */
|
|
12
|
+
function chooseSession(ctx, running, here) {
|
|
13
|
+
const projects = new ProjectRegistry(ctx.storageRoot).read()?.projects ?? [];
|
|
14
|
+
return select({
|
|
15
|
+
message: 'Which session?' + (here.project ? ' (' + here.project.name + ' first)' : ''),
|
|
16
|
+
choices: running.map((s) => ({
|
|
17
|
+
value: s.id,
|
|
18
|
+
name: (here.guestDir && isWithin(here.guestDir, s.cwd) ? '* ' : ' ') +
|
|
19
|
+
safeText(s.harness).padEnd(9) +
|
|
20
|
+
' ' +
|
|
21
|
+
safeText(projectOf(projects, s)).padEnd(16) +
|
|
22
|
+
' ' +
|
|
23
|
+
ago(s.startedAt).padEnd(11) +
|
|
24
|
+
' ' +
|
|
25
|
+
s.id,
|
|
26
|
+
})),
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
export async function attach(ctx) {
|
|
30
|
+
requireOnPc('attach');
|
|
31
|
+
requireRunning('Start one with: sandbox claude --terminal');
|
|
32
|
+
const ready = await readySandbox(ctx.dataPath);
|
|
33
|
+
const channel = new SandboxChannel(ctx.dataPath);
|
|
34
|
+
const id = ctx.options.positionals[0];
|
|
35
|
+
if (!id && channel.runningSessions().length === 0)
|
|
36
|
+
await sleep(1500);
|
|
37
|
+
const here = locateHere(ctx, ready);
|
|
38
|
+
if (id)
|
|
39
|
+
return attachHere(ctx, channel.pickSession(id));
|
|
40
|
+
// Several sessions: choose, this folder's project first (the newest is the default).
|
|
41
|
+
const running = sessionsFirstIn(channel.runningSessions(), here.guestDir);
|
|
42
|
+
if (running.length > 1 && process.stdin.isTTY && process.stdout.isTTY)
|
|
43
|
+
return attachHere(ctx, channel.pickSession(await chooseSession(ctx, running, here)));
|
|
44
|
+
return attachHere(ctx, channel.pickSession(undefined, here.guestDir));
|
|
45
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { askYesNo } from '../../../core/prompt.js';
|
|
3
|
+
import { SandboxChannel } from '../../../host/channel/index.js';
|
|
4
|
+
import { isSandboxRunning } from '../../../host/sandbox/index.js';
|
|
5
|
+
import { isWithin } from '../../../shared/paths/index.js';
|
|
6
|
+
import { RunDir } from '../../../shared/channel/index.js';
|
|
7
|
+
import { fail, safeText } from '../../../core/util/index.js';
|
|
8
|
+
import { requireOnPc, requireRunning } from '../context.js';
|
|
9
|
+
import { hereDir, locateHere } from '../projects/index.js';
|
|
10
|
+
import { working, c } from '../../output/index.js';
|
|
11
|
+
/** Restarts this folder's project's sessions (--all: every session). */
|
|
12
|
+
export async function restart(ctx) {
|
|
13
|
+
requireOnPc('restart');
|
|
14
|
+
requireRunning();
|
|
15
|
+
const here = locateHere(ctx, new RunDir(ctx.dataPath).readSandboxStatus());
|
|
16
|
+
const scope = ctx.options.all || !here.project ? undefined : here.project.guest;
|
|
17
|
+
if (!scope && !ctx.options.all)
|
|
18
|
+
console.log(c.dim(hereDir(ctx) + ' is not a project of the running sandbox: restarting every session.'));
|
|
19
|
+
console.log(safeText((await working('Restarting the agents' + (scope ? ' of ' + here.project?.name : ''), () => new SandboxChannel(ctx.dataPath).restart(ctx.options.harness ?? null, scope))).message));
|
|
20
|
+
return 0;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Stopping ends every project's sessions: other projects' sessions need a yes (or --yes). A script must never end them
|
|
24
|
+
* by accident, so without a terminal to ask in it fails.
|
|
25
|
+
*/
|
|
26
|
+
async function othersMayEnd(ctx, others) {
|
|
27
|
+
if (!others.length || ctx.options.yes)
|
|
28
|
+
return true;
|
|
29
|
+
const interactive = process.stdin.isTTY && process.stdout.isTTY;
|
|
30
|
+
if (!interactive)
|
|
31
|
+
fail(others.length + ' of these sessions belong to other projects, so the sandbox was not stopped.', 'Stop it anyway with: sandbox stop --yes');
|
|
32
|
+
return askYesNo(others.length + ' of them belong to other projects. Stop the whole sandbox?');
|
|
33
|
+
}
|
|
34
|
+
export async function stop(ctx) {
|
|
35
|
+
requireOnPc('stop');
|
|
36
|
+
if (!isSandboxRunning()) {
|
|
37
|
+
console.log('No Windows Sandbox is running.');
|
|
38
|
+
return 0;
|
|
39
|
+
}
|
|
40
|
+
const sandbox = new RunDir(ctx.dataPath).readSandboxStatus() ??
|
|
41
|
+
fail('This sandbox was not started by this tool.', 'Close its window instead.');
|
|
42
|
+
// Stopping ends every project's sessions, not just this folder's: say which, and ask when others would end too.
|
|
43
|
+
const here = locateHere(ctx, sandbox);
|
|
44
|
+
const channel = new SandboxChannel(ctx.dataPath);
|
|
45
|
+
const running = channel.currentSessions();
|
|
46
|
+
const others = running.filter((s) => !(here.guestDir && isWithin(here.project?.guest ?? here.guestDir, s.cwd)));
|
|
47
|
+
if (running.length)
|
|
48
|
+
console.log('Stopping ends ' +
|
|
49
|
+
running.length +
|
|
50
|
+
' session(s): ' +
|
|
51
|
+
running
|
|
52
|
+
.map((s) => safeText(s.harness) + ' in ' + safeText(s.project ?? path.win32.basename(s.cwd)))
|
|
53
|
+
.join(', ') +
|
|
54
|
+
'.');
|
|
55
|
+
if (!(await othersMayEnd(ctx, others))) {
|
|
56
|
+
console.log('Nothing changed.');
|
|
57
|
+
return 1;
|
|
58
|
+
}
|
|
59
|
+
await working('Asking the sandbox to shut down', () => channel.exec(['C:\\Windows\\System32\\shutdown.exe', '/s', '/t', '2'], sandbox.guestWorkspace, 30));
|
|
60
|
+
console.log('Sandbox is shutting down; history and claude-mem sync back when it closes.');
|
|
61
|
+
return 0;
|
|
62
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type Context } from '../context.js';
|
|
2
|
+
export declare function exec(ctx: Context): Promise<number>;
|
|
3
|
+
/**
|
|
4
|
+
* `sandbox db`: runs the sandbox's own `sbx-db` in this folder's project, which knows its database versions and ports.
|
|
5
|
+
*/
|
|
6
|
+
export declare function db(ctx: Context): Promise<number>;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { spawnSync } from 'node:child_process';
|
|
3
|
+
import { SandboxChannel } from '../../../host/channel/index.js';
|
|
4
|
+
import { insideSandbox } from '../../../host/sandbox/index.js';
|
|
5
|
+
import { NeedsRestart } from '../../../host/projects/index.js';
|
|
6
|
+
import { fail, safeText } from '../../../core/util/index.js';
|
|
7
|
+
import { printJson, working } from '../../output/index.js';
|
|
8
|
+
import { requireOnPc, requireRunning } from '../context.js';
|
|
9
|
+
import { readySandbox } from '../launch/index.js';
|
|
10
|
+
import { hereDir, joinHere, provisionJoined } from '../projects/index.js';
|
|
11
|
+
/** What a command run in the sandbox printed (text from the sandbox: through safeText), or why it failed. */
|
|
12
|
+
function printExecResult(result) {
|
|
13
|
+
if (result.stdout)
|
|
14
|
+
process.stdout.write(safeText(result.stdout));
|
|
15
|
+
if (result.stderr)
|
|
16
|
+
process.stderr.write(safeText(result.stderr));
|
|
17
|
+
if (!result.ok && !result.stdout && !result.stderr)
|
|
18
|
+
console.error(safeText(result.message));
|
|
19
|
+
}
|
|
20
|
+
/** The guest folder for this folder, joining the running sandbox (and setting the project up) when needed. */
|
|
21
|
+
async function guestFolderHere(ctx, what) {
|
|
22
|
+
const ready = await readySandbox(ctx.dataPath);
|
|
23
|
+
try {
|
|
24
|
+
// A command needs no restart for what the project wants at boot: it runs without them (and says so).
|
|
25
|
+
const joined = await joinHere(ctx, ready, { noRestart: true });
|
|
26
|
+
for (const note of joined.notes)
|
|
27
|
+
console.error(note);
|
|
28
|
+
await provisionJoined(ctx, joined);
|
|
29
|
+
return joined.guestDir;
|
|
30
|
+
}
|
|
31
|
+
catch (e) {
|
|
32
|
+
if (!(e instanceof NeedsRestart))
|
|
33
|
+
throw e;
|
|
34
|
+
return fail(hereDir(ctx) + ' is not in the running sandbox (' + e.reason + '), so "sandbox ' + what + '" cannot run there.', 'sandbox claude (or sandbox start) from that folder offers a restart that adds it; or add its parent folder as a root: sandbox projects roots add "' +
|
|
35
|
+
path.dirname(e.hostDir) +
|
|
36
|
+
'"');
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
export async function exec(ctx) {
|
|
40
|
+
const command = [...ctx.options.positionals, ...ctx.options.passthrough];
|
|
41
|
+
if (command.length === 0)
|
|
42
|
+
fail('No command given.', 'Usage: sandbox exec [--timeout <s>] -- <command> [args...]');
|
|
43
|
+
requireOnPc('exec');
|
|
44
|
+
requireRunning();
|
|
45
|
+
const cwd = await guestFolderHere(ctx, 'exec');
|
|
46
|
+
const result = await new SandboxChannel(ctx.dataPath).exec(command, cwd, ctx.options.timeout);
|
|
47
|
+
if (!printJson(ctx, result))
|
|
48
|
+
printExecResult(result);
|
|
49
|
+
return result.exitCode ?? 1;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* `sandbox db`: runs the sandbox's own `sbx-db` in this folder's project, which knows its database versions and ports.
|
|
53
|
+
*/
|
|
54
|
+
export async function db(ctx) {
|
|
55
|
+
const [action = 'list', name] = ctx.options.positionals;
|
|
56
|
+
if (!['list', 'start', 'stop'].includes(action))
|
|
57
|
+
fail('Unknown db action "' + action + '".', 'Use: sandbox db (list) or sandbox db start|stop <postgres|mysql|mongodb|redis|dynamodb>');
|
|
58
|
+
if (action !== 'list' && !name)
|
|
59
|
+
fail('Which database?', 'Usage: sandbox db ' + action + ' <postgres|mysql|mongodb|redis|dynamodb>');
|
|
60
|
+
// Already inside the sandbox: run the database tool here instead of asking the sandbox from outside.
|
|
61
|
+
if (insideSandbox())
|
|
62
|
+
return (spawnSync(process.execPath, [path.join(ctx.packageRoot, 'dist', 'runtime', 'db.js'), action, ...(name ? [name] : [])], { stdio: 'inherit', windowsHide: true }).status ?? 1);
|
|
63
|
+
requireRunning('Start one with: sandbox start --database <name>');
|
|
64
|
+
const cwd = await guestFolderHere(ctx, 'db');
|
|
65
|
+
// Starting can download the database the first time.
|
|
66
|
+
const result = await working((action === 'list' ? 'Asking' : action === 'start' ? 'Starting' : 'Stopping') +
|
|
67
|
+
' the database' +
|
|
68
|
+
(name ? ' ' + name : 's') +
|
|
69
|
+
' in the sandbox', () => new SandboxChannel(ctx.dataPath).exec(['sbx-db', action, ...(name ? [name] : [])], cwd, 1800));
|
|
70
|
+
printExecResult(result);
|
|
71
|
+
return result.exitCode ?? 1;
|
|
72
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// Working with a running sandbox: attach, sessions, status, exec, restart, stop, show/hide. Each knows which project
|
|
2
|
+
// you run it from (project.ts): attach and sessions put that project's sessions first, exec and db run in it, restart
|
|
3
|
+
// restarts its sessions, stop warns about the other projects' sessions.
|
|
4
|
+
export * from './attach.js';
|
|
5
|
+
export * from './list.js';
|
|
6
|
+
export * from './status.js';
|
|
7
|
+
export * from './exec.js';
|
|
8
|
+
export * from './control.js';
|
|
9
|
+
export * from './window.js';
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { SessionStatus } from '../../../core/types.js';
|
|
2
|
+
import type { Viewers } from '../../../shared/pty/index.js';
|
|
3
|
+
import { type RegistryEntry } from '../../../host/projects/index.js';
|
|
4
|
+
import { type Context } from '../context.js';
|
|
5
|
+
export declare function viewerText(v: Viewers | null | undefined): string;
|
|
6
|
+
export declare function projectOf(projects: RegistryEntry[], s: SessionStatus): string;
|
|
7
|
+
/** A session with who is watching it and whether it is in the project of the current folder. */
|
|
8
|
+
export type ListedSession = SessionStatus & {
|
|
9
|
+
readonly viewers?: Viewers | null;
|
|
10
|
+
readonly here?: boolean;
|
|
11
|
+
readonly projectName?: string;
|
|
12
|
+
};
|
|
13
|
+
/** Sessions with who is watching them; `here` marks the ones in the project of the current folder. */
|
|
14
|
+
export declare function listedSessions(ctx: Context): Promise<ListedSession[]>;
|
|
15
|
+
export declare function sessions(ctx: Context): Promise<number>;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import _ from 'lodash';
|
|
2
|
+
import { SandboxChannel, sessionViewers } from '../../../host/channel/index.js';
|
|
3
|
+
import { isSandboxRunning } from '../../../host/sandbox/index.js';
|
|
4
|
+
import { ProjectRegistry } from '../../../host/projects/index.js';
|
|
5
|
+
import { isWithin, projectForGuestDir } from '../../../shared/paths/index.js';
|
|
6
|
+
import { RunDir } from '../../../shared/channel/index.js';
|
|
7
|
+
import { safeText } from '../../../core/util/index.js';
|
|
8
|
+
import { printJson, table, ago, c, shortenMiddle, termWidth } from '../../output/index.js';
|
|
9
|
+
import { locateHere } from '../projects/index.js';
|
|
10
|
+
export function viewerText(v) {
|
|
11
|
+
return v === undefined
|
|
12
|
+
? '-'
|
|
13
|
+
: v === null
|
|
14
|
+
? 'unknown (older session)'
|
|
15
|
+
: v.remote + ' here, ' + (v.viewers - v.remote) + ' in sandbox';
|
|
16
|
+
}
|
|
17
|
+
export function projectOf(projects, s) {
|
|
18
|
+
return s.project ?? projectForGuestDir(projects, s.cwd)?.name ?? '-';
|
|
19
|
+
}
|
|
20
|
+
/** Sessions with who is watching them; `here` marks the ones in the project of the current folder. */
|
|
21
|
+
export async function listedSessions(ctx) {
|
|
22
|
+
// Who is attached comes from each session itself, so a terminal that was closed is never counted.
|
|
23
|
+
const live = isSandboxRunning();
|
|
24
|
+
// Only this sandbox's sessions are asked (and at most MAX_QUERIED_SESSIONS): the sandbox writes these files.
|
|
25
|
+
const ask = new Set(live ? new SandboxChannel(ctx.dataPath).currentSessions().map((s) => s.id) : []);
|
|
26
|
+
const here = live ? locateHere(ctx, new RunDir(ctx.dataPath).readSandboxStatus()) : { guestDir: null };
|
|
27
|
+
const projects = new ProjectRegistry(ctx.storageRoot).read()?.projects ?? [];
|
|
28
|
+
return Promise.all(new RunDir(ctx.dataPath).listSessions().map(async (s) => ({
|
|
29
|
+
...s,
|
|
30
|
+
projectName: projectOf(projects, s),
|
|
31
|
+
here: Boolean(here.guestDir && isWithin(here.guestDir, s.cwd)),
|
|
32
|
+
...(ask.has(s.id) ? { viewers: await sessionViewers(s) } : {}),
|
|
33
|
+
})));
|
|
34
|
+
}
|
|
35
|
+
export async function sessions(ctx) {
|
|
36
|
+
const list = await listedSessions(ctx);
|
|
37
|
+
if (printJson(ctx, list.map((s) => _.omit(s, 'attach'))))
|
|
38
|
+
return 0;
|
|
39
|
+
if (list.length === 0) {
|
|
40
|
+
console.log('No sessions. Start one with: sandbox claude');
|
|
41
|
+
return 0;
|
|
42
|
+
}
|
|
43
|
+
// This folder's project first, newest first within each group; harness, cwd and times are written by the sandbox.
|
|
44
|
+
const ordered = [
|
|
45
|
+
..._.sortBy(list.filter((s) => s.here), (s) => s.startedAt).reverse(),
|
|
46
|
+
..._.sortBy(list.filter((s) => !s.here), (s) => s.startedAt).reverse(),
|
|
47
|
+
];
|
|
48
|
+
const folderWidth = Math.max(16, termWidth() - 80);
|
|
49
|
+
table([
|
|
50
|
+
['', 'ID', 'AGENT', 'PROJECT', 'STATE', 'ATTACHED', 'FOLDER', 'STARTED'],
|
|
51
|
+
...ordered.map((s) => [
|
|
52
|
+
s.here ? '*' : '',
|
|
53
|
+
s.id,
|
|
54
|
+
safeText(s.harness),
|
|
55
|
+
safeText(s.projectName ?? '-'),
|
|
56
|
+
s.phase + (s.exitCode !== undefined ? ' (' + s.exitCode + ')' : ''),
|
|
57
|
+
viewerText(s.viewers),
|
|
58
|
+
shortenMiddle(safeText(s.cwd), folderWidth),
|
|
59
|
+
ago(s.startedAt),
|
|
60
|
+
]),
|
|
61
|
+
]);
|
|
62
|
+
if (list.some((s) => s.here))
|
|
63
|
+
console.log(c.dim('* = the project of this folder'));
|
|
64
|
+
return 0;
|
|
65
|
+
}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import _ from 'lodash';
|
|
2
|
+
import { AccountStore } from '../../../host/profile/index.js';
|
|
3
|
+
import { SandboxChannel } from '../../../host/channel/index.js';
|
|
4
|
+
import { isSandboxRunning } from '../../../host/sandbox/index.js';
|
|
5
|
+
import { ProjectRegistry } from '../../../host/projects/index.js';
|
|
6
|
+
import { RepoGuardStore } from '../../../host/guard/index.js';
|
|
7
|
+
import { projectForGuestDir } from '../../../shared/paths/index.js';
|
|
8
|
+
import { RunDir } from '../../../shared/channel/index.js';
|
|
9
|
+
import { watcherRunning } from '../../../sync/index.js';
|
|
10
|
+
import { errMsg, safeText } from '../../../core/util/index.js';
|
|
11
|
+
import { printJson, table, ago, c, shortenMiddle, termWidth } from '../../output/index.js';
|
|
12
|
+
import { hereDir, locateHere } from '../projects/index.js';
|
|
13
|
+
import { listedSessions, viewerText } from './list.js';
|
|
14
|
+
/** Running databases by port, from the sandbox's own `sbx-db list` (best effort: unknown when it does not answer). */
|
|
15
|
+
async function runningPorts(channel, cwd) {
|
|
16
|
+
try {
|
|
17
|
+
const r = await channel.exec(['sbx-db', 'list'], cwd, 30);
|
|
18
|
+
return new Set((r.stdout ?? '')
|
|
19
|
+
.split(/\r?\n/)
|
|
20
|
+
.filter((l) => /\brunning\b/.test(l))
|
|
21
|
+
.map((l) => Number(/port (\d+)/.exec(l)?.[1]))
|
|
22
|
+
.filter((n) => n > 0));
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/** One project: its setup, databases, running sessions and repo guard findings (sandbox text through safeText). */
|
|
29
|
+
function projectInfo(p, all, facts) {
|
|
30
|
+
const prov = facts.provisioning.find((s) => s.name.toLowerCase() === p.name.toLowerCase());
|
|
31
|
+
const own = facts.sessions.filter((s) => s.phase === 'running' && projectForGuestDir(all, s.cwd)?.name === p.name);
|
|
32
|
+
const { ports } = facts;
|
|
33
|
+
return {
|
|
34
|
+
name: p.name,
|
|
35
|
+
host: p.host,
|
|
36
|
+
guest: p.guest,
|
|
37
|
+
mechanism: p.mechanism,
|
|
38
|
+
here: facts.here === p.name,
|
|
39
|
+
setup: prov
|
|
40
|
+
? { phase: prov.phase, message: safeText(prov.message) }
|
|
41
|
+
: { phase: 'not set up yet', message: 'set up when you first start a session or command there' },
|
|
42
|
+
databases: (prov?.databases ?? []).map((d) => ({
|
|
43
|
+
database: safeText(d.database),
|
|
44
|
+
port: d.port,
|
|
45
|
+
state: ports ? (ports.has(d.port) ? 'running' : 'stopped') : 'unknown',
|
|
46
|
+
})),
|
|
47
|
+
sessions: own.map((s) => ({
|
|
48
|
+
id: s.id,
|
|
49
|
+
harness: safeText(s.harness),
|
|
50
|
+
viewers: viewerText(s.viewers),
|
|
51
|
+
started: s.startedAt,
|
|
52
|
+
})),
|
|
53
|
+
// With several guarded folders each finding starts with its folder.
|
|
54
|
+
repoGuard: facts.findings
|
|
55
|
+
.filter((f) => f.detail.toLowerCase().startsWith(p.host.toLowerCase() + ':'))
|
|
56
|
+
.map((f) => f.kind + ': ' + safeText(f.detail)),
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
const MECHANISM_TEXT = {
|
|
60
|
+
launch: 'started from here',
|
|
61
|
+
root: 'in a project root',
|
|
62
|
+
boot: 'mapped at start',
|
|
63
|
+
};
|
|
64
|
+
function mechanismText(mechanism) {
|
|
65
|
+
return mechanism in MECHANISM_TEXT ? MECHANISM_TEXT[mechanism] : 'wsb share';
|
|
66
|
+
}
|
|
67
|
+
function printProject(p) {
|
|
68
|
+
console.log((p.here ? '* ' : ' ') +
|
|
69
|
+
c.bold(p.name) +
|
|
70
|
+
' ' +
|
|
71
|
+
p.host +
|
|
72
|
+
' -> ' +
|
|
73
|
+
p.guest +
|
|
74
|
+
c.dim(' (' + mechanismText(p.mechanism) + ')'));
|
|
75
|
+
console.log(' setup: ' +
|
|
76
|
+
p.setup.phase +
|
|
77
|
+
(p.setup.phase === 'ready' ? '' : ' - ' + shortenMiddle(p.setup.message, termWidth() - 20)));
|
|
78
|
+
if (p.databases.length)
|
|
79
|
+
console.log(' databases: ' + p.databases.map((d) => d.database + ' :' + d.port + ' ' + d.state).join(', '));
|
|
80
|
+
for (const s of p.sessions)
|
|
81
|
+
console.log(' session ' + s.id + ' ' + s.harness + ' ' + s.viewers + ' ' + ago(s.started));
|
|
82
|
+
for (const f of p.repoGuard)
|
|
83
|
+
console.log(' ' + c.yellow('guard: ' + f));
|
|
84
|
+
}
|
|
85
|
+
export async function status(ctx) {
|
|
86
|
+
const running = isSandboxRunning();
|
|
87
|
+
const run = new RunDir(ctx.dataPath);
|
|
88
|
+
const channel = new SandboxChannel(ctx.dataPath);
|
|
89
|
+
const guard = new RepoGuardStore(ctx.dataPath);
|
|
90
|
+
const sandbox = run.readSandboxStatus();
|
|
91
|
+
const registry = running ? new ProjectRegistry(ctx.storageRoot).read() : null;
|
|
92
|
+
const ready = running && sandbox?.phase === 'ready';
|
|
93
|
+
const daemon = ready
|
|
94
|
+
? await channel.ping().then((r) => r.message, (e) => 'no answer (' + errMsg(e) + ')')
|
|
95
|
+
: '-';
|
|
96
|
+
const here = running ? locateHere(ctx, sandbox) : { project: null, guestDir: null };
|
|
97
|
+
const sessionList = running ? await listedSessions(ctx) : [];
|
|
98
|
+
const provisioning = running ? run.listProjectStatus() : [];
|
|
99
|
+
const ports = ready && sandbox ? await runningPorts(channel, sandbox.guestWorkspace) : null;
|
|
100
|
+
const findings = guard.findings();
|
|
101
|
+
const startedAt = Number(/^(\d+)-/.exec(registry?.launchId ?? sandbox?.launchId ?? '')?.[1]) || null;
|
|
102
|
+
const all = registry?.projects ?? [];
|
|
103
|
+
const facts = { here: here.project?.name ?? null, provisioning, sessions: sessionList, ports, findings };
|
|
104
|
+
const projects = all.map((p) => projectInfo(p, all, facts));
|
|
105
|
+
const info = {
|
|
106
|
+
sandbox: {
|
|
107
|
+
running,
|
|
108
|
+
phase: running ? (sandbox?.phase ?? 'unknown') : 'stopped',
|
|
109
|
+
message: sandbox?.message,
|
|
110
|
+
headless: sandbox?.headless,
|
|
111
|
+
uptime: running && startedAt ? ago(startedAt).replace(' ago', '') : null,
|
|
112
|
+
daemon,
|
|
113
|
+
account: new AccountStore(ctx.storageRoot).activeFor(ctx.dataPath),
|
|
114
|
+
syncWatcher: watcherRunning(ctx.dataPath),
|
|
115
|
+
},
|
|
116
|
+
here: { folder: hereDir(ctx), project: here.project?.name ?? null, guest: here.guestDir },
|
|
117
|
+
roots: registry?.roots ?? [],
|
|
118
|
+
projects,
|
|
119
|
+
otherSessions: sessionList
|
|
120
|
+
.filter((s) => s.phase === 'running' && !projects.some((p) => p.sessions.some((x) => x.id === s.id)))
|
|
121
|
+
.map((s) => ({ id: s.id, harness: safeText(s.harness), cwd: safeText(s.cwd) })),
|
|
122
|
+
repoGuard: {
|
|
123
|
+
guarded: guard.guarded().length,
|
|
124
|
+
findings: findings.map((f) => f.kind + ': ' + f.detail),
|
|
125
|
+
},
|
|
126
|
+
};
|
|
127
|
+
if (printJson(ctx, info))
|
|
128
|
+
return 0;
|
|
129
|
+
const yesNo = (v) => (typeof v === 'boolean' ? (v ? 'yes' : 'no') : String(v ?? '-'));
|
|
130
|
+
table(Object.entries(info.sandbox).map(([k, v]) => [_.startCase(k), safeText(yesNo(v))]));
|
|
131
|
+
if (!running)
|
|
132
|
+
return 0;
|
|
133
|
+
console.log('\n' +
|
|
134
|
+
c.bold('Projects') +
|
|
135
|
+
c.dim(' (* = this folder: ' + info.here.folder + (info.here.project ? '' : ', not in this sandbox') + ')'));
|
|
136
|
+
for (const p of projects)
|
|
137
|
+
printProject(p);
|
|
138
|
+
for (const r of info.roots)
|
|
139
|
+
console.log(' root ' + r.host + ' -> ' + r.guest + c.dim(' (every project in it opens without a restart)'));
|
|
140
|
+
for (const s of info.otherSessions)
|
|
141
|
+
console.log(' session ' + s.id + ' ' + s.harness + ' ' + s.cwd);
|
|
142
|
+
console.log('\n' +
|
|
143
|
+
c.bold('Repo guard') +
|
|
144
|
+
' ' +
|
|
145
|
+
info.repoGuard.guarded +
|
|
146
|
+
' folder(s) guarded; ' +
|
|
147
|
+
(findings.length
|
|
148
|
+
? c.yellow(findings.length + ' change(s) neutralised:')
|
|
149
|
+
: 'nothing from the sandbox needed neutralising'));
|
|
150
|
+
for (const f of info.repoGuard.findings.slice(-10))
|
|
151
|
+
console.log(' ' + c.yellow(safeText(f)));
|
|
152
|
+
return 0;
|
|
153
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { hideSandboxWindow, showSandboxWindow } from '../../../host/sandbox/index.js';
|
|
2
|
+
import { fail } from '../../../core/util/index.js';
|
|
3
|
+
import { requireOnPc, requireRunning } from '../context.js';
|
|
4
|
+
export function show(ctx) {
|
|
5
|
+
requireOnPc('show');
|
|
6
|
+
requireRunning();
|
|
7
|
+
if (!showSandboxWindow(ctx.storageRoot))
|
|
8
|
+
fail('Could not find the Windows Sandbox window.', 'It may still be starting; try again in a few seconds.');
|
|
9
|
+
return 0;
|
|
10
|
+
}
|
|
11
|
+
export async function hide(ctx) {
|
|
12
|
+
requireOnPc('hide');
|
|
13
|
+
requireRunning();
|
|
14
|
+
if (!(await hideSandboxWindow(ctx.storageRoot, 5)))
|
|
15
|
+
fail('Could not find a visible Windows Sandbox window.', 'It may already be hidden (sbx-show brings it back).');
|
|
16
|
+
console.log('Sandbox window hidden. Bring it back with: sbx-show');
|
|
17
|
+
return 0;
|
|
18
|
+
}
|
|
@@ -6,8 +6,8 @@ export interface Check {
|
|
|
6
6
|
detail: string;
|
|
7
7
|
}
|
|
8
8
|
/** Windows Sandbox needs Pro, Enterprise or Education (build 18305+); Home ("Core*") and Server cannot run it. */
|
|
9
|
-
export declare
|
|
10
|
-
export declare
|
|
9
|
+
export declare function editionSupport(edition: string | null): EditionSupport;
|
|
10
|
+
export declare function nodeMajor(version: string): number;
|
|
11
11
|
/** Offer to enable the feature only when it is off and this edition can have it. */
|
|
12
|
-
export declare
|
|
13
|
-
export declare
|
|
12
|
+
export declare function canEnableFeature(f: MachineFacts): boolean;
|
|
13
|
+
export declare function buildChecks(f: MachineFacts): Check[];
|