windows-development-sandbox 1.4.0 → 1.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.sandbox-config.example.json +2 -1
- package/config.example.json +4 -1
- package/dist/api.js +27 -16
- package/dist/cli/args.d.ts +4 -6
- package/dist/cli/args.js +67 -34
- package/dist/cli/argv.d.ts +9 -0
- package/dist/cli/argv.js +22 -0
- package/dist/cli/commands/accounts.d.ts +1 -1
- package/dist/cli/commands/accounts.js +42 -27
- package/dist/cli/commands/agent-commands.d.ts +3 -3
- package/dist/cli/commands/agent-commands.js +27 -18
- package/dist/cli/commands/context.d.ts +9 -11
- package/dist/cli/commands/context.js +35 -32
- package/dist/cli/commands/data/clean.d.ts +2 -2
- package/dist/cli/commands/data/clean.js +27 -11
- package/dist/cli/commands/data/collect.d.ts +6 -3
- package/dist/cli/commands/data/collect.js +46 -15
- package/dist/cli/commands/data/index.d.ts +2 -2
- package/dist/cli/commands/data/index.js +30 -12
- package/dist/cli/commands/data/remove.d.ts +1 -1
- package/dist/cli/commands/data/remove.js +4 -4
- package/dist/cli/commands/index.d.ts +5 -4
- package/dist/cli/commands/index.js +5 -4
- package/dist/cli/commands/launch/add-root.d.ts +7 -0
- package/dist/cli/commands/launch/add-root.js +64 -0
- package/dist/cli/commands/launch/boot-progress.d.ts +7 -0
- package/dist/cli/commands/launch/boot-progress.js +48 -0
- package/dist/cli/commands/launch/boot-wants.d.ts +11 -0
- package/dist/cli/commands/launch/boot-wants.js +48 -0
- package/dist/cli/commands/launch/first-start.d.ts +10 -0
- package/dist/cli/commands/launch/first-start.js +53 -0
- package/dist/cli/commands/launch/index.d.ts +6 -0
- package/dist/cli/commands/launch/index.js +6 -0
- package/dist/cli/commands/launch/launch.d.ts +8 -0
- package/dist/cli/commands/launch/launch.js +211 -0
- package/dist/cli/commands/launch/prepare.d.ts +23 -0
- package/dist/cli/commands/launch/prepare.js +109 -0
- package/dist/cli/commands/launch/running.d.ts +45 -0
- package/dist/cli/commands/launch/running.js +218 -0
- package/dist/cli/commands/launch/summary.d.ts +8 -0
- package/dist/cli/commands/launch/summary.js +98 -0
- package/dist/cli/commands/maintenance/audit.d.ts +3 -0
- package/dist/cli/commands/maintenance/audit.js +58 -0
- package/dist/cli/commands/maintenance/clean.d.ts +2 -0
- package/dist/cli/commands/maintenance/clean.js +10 -0
- package/dist/cli/commands/maintenance/config.d.ts +2 -0
- package/dist/cli/commands/maintenance/config.js +145 -0
- package/dist/cli/commands/maintenance/doctor.d.ts +2 -0
- package/dist/cli/commands/maintenance/doctor.js +52 -0
- package/dist/cli/commands/maintenance/host-claude.d.ts +2 -0
- package/dist/cli/commands/maintenance/host-claude.js +4 -0
- package/dist/cli/commands/maintenance/index.d.ts +8 -0
- package/dist/cli/commands/maintenance/index.js +9 -0
- package/dist/cli/commands/maintenance/logs.d.ts +2 -0
- package/dist/cli/commands/maintenance/logs.js +44 -0
- package/dist/cli/commands/maintenance/sync.d.ts +2 -0
- package/dist/cli/commands/maintenance/sync.js +12 -0
- package/dist/cli/commands/maintenance/watch.d.ts +3 -0
- package/dist/cli/commands/maintenance/watch.js +6 -0
- package/dist/cli/commands/projects/describe-sessions.d.ts +3 -0
- package/dist/cli/commands/projects/describe-sessions.js +15 -0
- package/dist/cli/commands/projects/here.d.ts +38 -0
- package/dist/cli/commands/projects/here.js +145 -0
- package/dist/cli/commands/projects/index.d.ts +4 -0
- package/dist/cli/commands/projects/index.js +4 -0
- package/dist/cli/commands/projects/projects.d.ts +14 -0
- package/dist/cli/commands/projects/projects.js +213 -0
- package/dist/cli/commands/projects/restart.d.ts +15 -0
- package/dist/cli/commands/projects/restart.js +149 -0
- package/dist/cli/commands/registry.d.ts +3 -0
- package/dist/cli/commands/registry.js +34 -0
- package/dist/cli/commands/repair/checks.js +105 -29
- package/dist/cli/commands/repair/finders.d.ts +13 -10
- package/dist/cli/commands/repair/finders.js +63 -43
- package/dist/cli/commands/repair/index.d.ts +4 -4
- package/dist/cli/commands/repair/index.js +47 -21
- package/dist/cli/commands/repair/types.d.ts +2 -2
- package/dist/cli/commands/repair/types.js +7 -2
- package/dist/cli/commands/sessions/attach.d.ts +2 -0
- package/dist/cli/commands/sessions/attach.js +45 -0
- package/dist/cli/commands/sessions/control.d.ts +4 -0
- package/dist/cli/commands/sessions/control.js +62 -0
- package/dist/cli/commands/sessions/exec.d.ts +6 -0
- package/dist/cli/commands/sessions/exec.js +72 -0
- package/dist/cli/commands/sessions/index.d.ts +6 -0
- package/dist/cli/commands/sessions/index.js +9 -0
- package/dist/cli/commands/sessions/list.d.ts +15 -0
- package/dist/cli/commands/sessions/list.js +65 -0
- package/dist/cli/commands/sessions/status.d.ts +2 -0
- package/dist/cli/commands/sessions/status.js +153 -0
- package/dist/cli/commands/sessions/window.d.ts +3 -0
- package/dist/cli/commands/sessions/window.js +18 -0
- package/dist/cli/commands/setup/checks.d.ts +4 -4
- package/dist/cli/commands/setup/checks.js +36 -19
- package/dist/cli/commands/setup/facts.d.ts +6 -6
- package/dist/cli/commands/setup/facts.js +23 -11
- package/dist/cli/commands/setup/index.d.ts +1 -1
- package/dist/cli/commands/setup/index.js +25 -12
- package/dist/cli/commands/user-config.d.ts +5 -5
- package/dist/cli/commands/user-config.js +14 -12
- package/dist/cli/history.d.ts +5 -4
- package/dist/cli/history.js +23 -11
- package/dist/cli/index.d.ts +4 -14
- package/dist/cli/index.js +27 -77
- package/dist/cli/manifest.d.ts +464 -10
- package/dist/cli/manifest.js +328 -54
- package/dist/cli/menu/apps.d.ts +7 -5
- package/dist/cli/menu/apps.js +64 -16
- package/dist/cli/menu/command-fields.d.ts +15 -0
- package/dist/cli/menu/command-fields.js +23 -0
- package/dist/cli/menu/command-form.d.ts +3 -5
- package/dist/cli/menu/command-form.js +116 -48
- package/dist/cli/menu/home.d.ts +22 -0
- package/dist/cli/menu/home.js +72 -0
- package/dist/cli/menu/index.d.ts +2 -24
- package/dist/cli/menu/index.js +4 -178
- package/dist/cli/menu/menu.d.ts +23 -0
- package/dist/cli/menu/menu.js +185 -0
- package/dist/cli/menu/settings/categories.d.ts +2 -2
- package/dist/cli/menu/settings/categories.js +123 -20
- package/dist/cli/menu/settings/collections/collection-editor.d.ts +23 -0
- package/dist/cli/menu/settings/collections/collection-editor.js +89 -0
- package/dist/cli/menu/settings/collections/map-editor.d.ts +10 -0
- package/dist/cli/menu/settings/collections/map-editor.js +34 -0
- package/dist/cli/menu/settings/collections/object-list-editor.d.ts +10 -0
- package/dist/cli/menu/settings/collections/object-list-editor.js +23 -0
- package/dist/cli/menu/settings/collections/object-map-editor.d.ts +10 -0
- package/dist/cli/menu/settings/collections/object-map-editor.js +35 -0
- package/dist/cli/menu/settings/collections/string-list-editor.d.ts +12 -0
- package/dist/cli/menu/settings/collections/string-list-editor.js +39 -0
- package/dist/cli/menu/settings/config-file.d.ts +2 -2
- package/dist/cli/menu/settings/config-file.js +42 -19
- package/dist/cli/menu/settings/editor-actions.d.ts +2 -0
- package/dist/cli/menu/settings/editor-actions.js +2 -0
- package/dist/cli/menu/settings/format.d.ts +5 -0
- package/dist/cli/menu/settings/format.js +39 -0
- package/dist/cli/menu/settings/index.d.ts +1 -29
- package/dist/cli/menu/settings/index.js +1 -133
- package/dist/cli/menu/settings/object-editor.d.ts +12 -0
- package/dist/cli/menu/settings/object-editor.js +86 -0
- package/dist/cli/menu/settings/schema-node.d.ts +3 -1
- package/dist/cli/menu/settings/schema-node.js +71 -24
- package/dist/cli/menu/settings/settings-editor.d.ts +30 -0
- package/dist/cli/menu/settings/settings-editor.js +176 -0
- package/dist/cli/menu/settings/{editors.d.ts → value-editor.d.ts} +2 -13
- package/dist/cli/menu/settings/value-editor.js +137 -0
- package/dist/cli/menu/several.d.ts +4 -4
- package/dist/cli/menu/several.js +61 -20
- package/dist/cli/{colors.d.ts → output/colors.d.ts} +8 -8
- package/dist/cli/{colors.js → output/colors.js} +32 -14
- package/dist/cli/output/index.d.ts +3 -0
- package/dist/cli/output/index.js +3 -0
- package/dist/cli/output/print.d.ts +5 -0
- package/dist/cli/output/print.js +14 -0
- package/dist/cli/output/progress.d.ts +24 -0
- package/dist/cli/output/progress.js +124 -0
- package/dist/cli/report.d.ts +2 -0
- package/dist/cli/report.js +20 -0
- package/dist/cli/tui/app.d.ts +6 -16
- package/dist/cli/tui/app.js +28 -8
- package/dist/cli/tui/dialogs/confirm-screen.d.ts +20 -0
- package/dist/cli/tui/dialogs/confirm-screen.js +50 -0
- package/dist/cli/tui/dialogs/message-screen.d.ts +17 -0
- package/dist/cli/tui/dialogs/message-screen.js +55 -0
- package/dist/cli/tui/dialogs/paragraphs.d.ts +2 -0
- package/dist/cli/tui/dialogs/paragraphs.js +5 -0
- package/dist/cli/tui/dialogs/text-screen.d.ts +26 -0
- package/dist/cli/tui/dialogs/text-screen.js +107 -0
- package/dist/cli/tui/frame.js +3 -1
- package/dist/cli/tui/index.d.ts +7 -3
- package/dist/cli/tui/index.js +4 -2
- package/dist/cli/tui/list/list-screen.d.ts +29 -0
- package/dist/cli/tui/{list-screen.js → list/list-screen.js} +86 -23
- package/dist/cli/tui/{list-screen.d.ts → list/list-types.d.ts} +0 -28
- package/dist/cli/tui/screen.d.ts +14 -0
- package/dist/cli/tui/terminal.js +34 -10
- package/dist/cli/tui/text.d.ts +2 -1
- package/dist/cli/tui/text.js +37 -7
- package/dist/cli/tui/theme.js +27 -9
- package/dist/cli/validate.d.ts +8 -8
- package/dist/cli/validate.js +32 -21
- package/dist/core/config/defaults.d.ts +2 -0
- package/dist/core/config/defaults.js +203 -0
- package/dist/core/config/index.d.ts +2 -0
- package/dist/core/config/index.js +3 -0
- package/dist/core/{config.d.ts → config/loader.d.ts} +1 -2
- package/dist/core/config/loader.js +47 -0
- package/dist/core/{detect-databases.js → detect/databases.js} +111 -23
- package/dist/core/detect/index.d.ts +4 -0
- package/dist/core/detect/index.js +4 -0
- package/dist/core/{detect-pwsh.d.ts → detect/pwsh.d.ts} +1 -1
- package/dist/core/{detect-pwsh.js → detect/pwsh.js} +25 -11
- package/dist/core/{detect-toolchains.d.ts → detect/toolchains.d.ts} +1 -1
- package/dist/core/{detect-toolchains.js → detect/toolchains.js} +42 -5
- package/dist/{guest/toolchains → core/detect}/versions.js +28 -12
- package/dist/core/disk.d.ts +2 -0
- package/dist/core/disk.js +46 -3
- package/dist/core/local-config/boot-wants.d.ts +45 -0
- package/dist/core/local-config/boot-wants.js +120 -0
- package/dist/core/local-config/file.d.ts +3 -0
- package/dist/core/local-config/file.js +16 -0
- package/dist/core/local-config/index.d.ts +5 -0
- package/dist/core/local-config/index.js +7 -0
- package/dist/core/{local-config.d.ts → local-config/overrides.d.ts} +11 -11
- package/dist/core/{local-config.js → local-config/overrides.js} +53 -54
- package/dist/core/{project-policy.d.ts → local-config/policy.d.ts} +7 -3
- package/dist/core/{project-policy.js → local-config/policy.js} +16 -6
- package/dist/core/local-config/trust.d.ts +13 -0
- package/dist/core/local-config/trust.js +43 -0
- package/dist/core/package-info.d.ts +4 -0
- package/dist/core/package-info.js +13 -0
- package/dist/core/run/guest-workspace.d.ts +23 -0
- package/dist/core/run/guest-workspace.js +47 -0
- package/dist/core/run/index.d.ts +3 -0
- package/dist/core/run/index.js +3 -0
- package/dist/core/run/resolve-run.d.ts +3 -0
- package/dist/core/run/resolve-run.js +202 -0
- package/dist/core/run/versions.d.ts +13 -0
- package/dist/core/run/versions.js +65 -0
- package/dist/core/safe-paths.js +17 -5
- package/dist/core/schema/apps.d.ts +4 -4
- package/dist/core/schema/apps.js +55 -21
- package/dist/core/schema/common.d.ts +13 -10
- package/dist/core/schema/common.js +16 -10
- package/dist/core/schema/config.d.ts +18 -12
- package/dist/core/schema/config.js +78 -53
- package/dist/core/schema/databases.d.ts +4 -3
- package/dist/core/schema/databases.js +16 -12
- package/dist/core/schema/harness.d.ts +1 -1
- package/dist/core/schema/harness.js +17 -7
- package/dist/core/schema/index.d.ts +6 -0
- package/dist/core/schema/index.js +8 -0
- package/dist/core/schema/json-schema.js +10 -5
- package/dist/core/schema/profile.d.ts +4 -4
- package/dist/core/schema/profile.js +37 -17
- package/dist/core/schema/projects.d.ts +2 -1
- package/dist/core/schema/projects.js +16 -5
- package/dist/core/schema/sandbox.d.ts +12 -12
- package/dist/core/schema/sandbox.js +101 -37
- package/dist/core/schema/toolchains.d.ts +6 -1
- package/dist/core/schema/toolchains.js +84 -34
- package/dist/core/types.d.ts +36 -9
- package/dist/core/util/errors.d.ts +8 -0
- package/dist/core/util/errors.js +14 -0
- package/dist/core/util/fs.d.ts +8 -0
- package/dist/core/util/fs.js +40 -0
- package/dist/core/util/index.d.ts +7 -0
- package/dist/core/util/index.js +7 -0
- package/dist/core/util/jsonc.d.ts +6 -0
- package/dist/core/util/jsonc.js +25 -0
- package/dist/core/util/links.d.ts +10 -0
- package/dist/core/util/links.js +39 -0
- package/dist/core/util/paths.d.ts +7 -0
- package/dist/core/util/paths.js +33 -0
- package/dist/core/util/process.d.ts +15 -0
- package/dist/core/util/process.js +54 -0
- package/dist/core/util/text.d.ts +8 -0
- package/dist/core/util/text.js +8 -0
- package/dist/guest/{setup/agents.js → agents/agent-installer.js} +24 -4
- package/dist/guest/apps/after-install.d.ts +3 -0
- package/dist/guest/apps/after-install.js +47 -0
- package/dist/guest/apps/app-installer.d.ts +22 -0
- package/dist/guest/apps/app-installer.js +116 -0
- package/dist/guest/apps/find-exe.d.ts +5 -0
- package/dist/guest/apps/find-exe.js +41 -0
- package/dist/guest/apps/index.d.ts +3 -10
- package/dist/guest/apps/index.js +6 -206
- package/dist/guest/apps/resolvers.js +37 -9
- package/dist/guest/apps/shortcuts.d.ts +6 -0
- package/dist/guest/apps/shortcuts.js +28 -0
- package/dist/guest/apps/sources.d.ts +4 -0
- package/dist/guest/apps/sources.js +17 -0
- package/dist/guest/apps/unpack.d.ts +3 -0
- package/dist/guest/apps/unpack.js +47 -0
- package/dist/guest/{audit-parse.js → audit/parse.js} +39 -3
- package/dist/guest/{audit.d.ts → audit/process-audit.d.ts} +3 -1
- package/dist/guest/{audit.js → audit/process-audit.js} +33 -8
- package/dist/guest/boot/boot-env.d.ts +4 -0
- package/dist/guest/{boot-env.js → boot/boot-env.js} +7 -5
- package/dist/guest/boot/boot.d.ts +1 -0
- package/dist/guest/{main.js → boot/boot.js} +100 -50
- package/dist/guest/{guide.js → boot/guide.js} +32 -7
- package/dist/guest/{project-env.d.ts → boot/project-env.d.ts} +3 -3
- package/dist/guest/{project-env.js → boot/project-env.js} +12 -4
- package/dist/guest/boot/project-status.d.ts +5 -0
- package/dist/guest/boot/project-status.js +28 -0
- package/dist/guest/daemon/daemon.d.ts +1 -0
- package/dist/guest/daemon/daemon.js +51 -0
- package/dist/guest/daemon/exec.js +18 -6
- package/dist/guest/daemon/{shutdown.js → idle-shutdown.js} +5 -4
- package/dist/guest/daemon/{project.d.ts → project-provisioner.d.ts} +3 -3
- package/dist/guest/daemon/{project.js → project-provisioner.js} +60 -22
- package/dist/guest/daemon/relays.js +5 -3
- package/dist/guest/daemon/{session.js → sessions.js} +84 -24
- package/dist/guest/daemon/state.d.ts +4 -1
- package/dist/guest/daemon/state.js +34 -20
- package/dist/guest/databases/database-server.d.ts +13 -0
- package/dist/guest/databases/database-server.js +35 -0
- package/dist/guest/databases/dynamodb.d.ts +12 -0
- package/dist/guest/databases/dynamodb.js +81 -0
- package/dist/guest/databases/index.d.ts +2 -0
- package/dist/guest/databases/index.js +2 -0
- package/dist/guest/databases/mongodb.d.ts +7 -0
- package/dist/guest/databases/mongodb.js +46 -0
- package/dist/guest/databases/mysql.d.ts +7 -0
- package/dist/guest/databases/mysql.js +59 -0
- package/dist/guest/databases/names.d.ts +5 -0
- package/dist/guest/databases/names.js +8 -0
- package/dist/guest/databases/postgres.d.ts +9 -0
- package/dist/guest/databases/postgres.js +85 -0
- package/dist/guest/databases/redis.d.ts +7 -0
- package/dist/guest/databases/redis.js +25 -0
- package/dist/guest/databases/registry.d.ts +5 -0
- package/dist/guest/databases/registry.js +51 -0
- package/dist/guest/databases/sbx-db.d.ts +1 -0
- package/dist/guest/{db.js → databases/sbx-db.js} +13 -13
- package/dist/guest/{toolchains/databases → databases}/server.d.ts +5 -5
- package/dist/guest/{toolchains/databases → databases}/server.js +18 -13
- package/dist/guest/entries/daemon.js +16 -0
- package/dist/guest/entries/db.js +10 -0
- package/dist/guest/entries/gitguard.js +20 -0
- package/dist/guest/entries/main.d.ts +1 -0
- package/dist/guest/entries/main.js +24 -0
- package/dist/guest/entries/netproxy.d.ts +1 -0
- package/dist/guest/entries/netproxy.js +7 -0
- package/dist/guest/entries/view.d.ts +1 -0
- package/dist/guest/entries/view.js +11 -0
- package/dist/guest/{gitguard.js → git/decision.js} +49 -26
- package/dist/guest/network/addresses.d.ts +2 -0
- package/dist/guest/network/addresses.js +6 -0
- package/dist/guest/{setup/network.d.ts → network/allow-only.d.ts} +0 -10
- package/dist/guest/network/allow-only.js +84 -0
- package/dist/guest/network/firewall.d.ts +9 -0
- package/dist/guest/{setup/network.js → network/firewall.js} +58 -63
- package/dist/guest/network/proxy-server.d.ts +2 -0
- package/dist/guest/{netproxy.js → network/proxy-server.js} +37 -18
- package/dist/guest/{helpers.d.ts → runtime/csc.d.ts} +1 -1
- package/dist/guest/{helpers.js → runtime/csc.js} +7 -2
- package/dist/guest/runtime/fs.d.ts +2 -0
- package/dist/guest/runtime/fs.js +6 -0
- package/dist/guest/runtime/log.d.ts +3 -0
- package/dist/guest/runtime/log.js +22 -0
- package/dist/guest/runtime/paths.d.ts +13 -0
- package/dist/guest/runtime/paths.js +14 -0
- package/dist/guest/{ports.js → runtime/ports.js} +8 -2
- package/dist/guest/runtime/process.d.ts +15 -0
- package/dist/guest/runtime/process.js +59 -0
- package/dist/guest/{project-context.js → runtime/project-context.js} +1 -1
- package/dist/guest/runtime/session.d.ts +5 -0
- package/dist/guest/runtime/session.js +10 -0
- package/dist/guest/runtime/status.d.ts +7 -0
- package/dist/guest/runtime/status.js +57 -0
- package/dist/guest/{cmdline.js → sessions/cmdline.js} +10 -4
- package/dist/guest/{ptyhost.js → sessions/pty-host.js} +12 -5
- package/dist/guest/{view.js → sessions/viewer.js} +8 -11
- package/dist/guest/setup/claude-mem.d.ts +10 -0
- package/dist/guest/setup/{claude.js → claude-mem.js} +18 -78
- package/dist/guest/setup/{claude.d.ts → claude-profile.d.ts} +0 -10
- package/dist/guest/setup/claude-profile.js +89 -0
- package/dist/guest/setup/desktop.d.ts +2 -0
- package/dist/guest/setup/desktop.js +32 -0
- package/dist/guest/setup/environment.js +28 -5
- package/dist/guest/setup/{user.d.ts → git-identity.d.ts} +0 -2
- package/dist/guest/setup/git-identity.js +34 -0
- package/dist/guest/{gitrules.d.ts → setup/git-rules.d.ts} +1 -1
- package/dist/guest/setup/git-rules.js +50 -0
- package/dist/guest/setup/hooks.js +22 -5
- package/dist/guest/setup/{policy.js → managed-policy.js} +2 -2
- package/dist/guest/toolchains/catalogue.d.ts +4 -4
- package/dist/guest/toolchains/catalogue.js +30 -7
- package/dist/guest/toolchains/detect.d.ts +12 -0
- package/dist/guest/toolchains/detect.js +54 -0
- package/dist/guest/toolchains/index.d.ts +3 -17
- package/dist/guest/toolchains/index.js +1 -80
- package/dist/guest/toolchains/install.d.ts +20 -0
- package/dist/guest/toolchains/install.js +29 -0
- package/dist/guest/toolchains/languages/go.d.ts +3 -0
- package/dist/guest/toolchains/{go.js → languages/go.js} +27 -9
- package/dist/guest/toolchains/languages/java.d.ts +8 -0
- package/dist/guest/toolchains/{java.js → languages/java.js} +57 -18
- package/dist/guest/toolchains/languages/node.d.ts +3 -0
- package/dist/guest/toolchains/{node.js → languages/node.js} +51 -18
- package/dist/guest/toolchains/languages/php.d.ts +3 -0
- package/dist/guest/toolchains/{scripting → languages}/php.js +36 -11
- package/dist/guest/toolchains/languages/python-tools.d.ts +3 -0
- package/dist/guest/toolchains/languages/python-tools.js +12 -0
- package/dist/guest/toolchains/languages/python.d.ts +3 -0
- package/dist/guest/toolchains/{python.js → languages/python.js} +29 -16
- package/dist/guest/toolchains/languages/ruby.d.ts +3 -0
- package/dist/guest/toolchains/{scripting → languages}/ruby.js +28 -10
- package/dist/guest/toolchains/leftovers.d.ts +1 -1
- package/dist/guest/toolchains/leftovers.js +13 -11
- package/dist/guest/toolchains/managers.d.ts +6 -6
- package/dist/guest/toolchains/managers.js +38 -17
- package/dist/guest/toolchains/native/binstall.d.ts +3 -2
- package/dist/guest/toolchains/native/binstall.js +20 -8
- package/dist/guest/toolchains/native/cpp.d.ts +2 -2
- package/dist/guest/toolchains/native/cpp.js +23 -8
- package/dist/guest/toolchains/native/dotnet.d.ts +5 -3
- package/dist/guest/toolchains/native/dotnet.js +72 -24
- package/dist/guest/toolchains/native/mesa.d.ts +2 -2
- package/dist/guest/toolchains/native/mesa.js +27 -10
- package/dist/guest/toolchains/native/msvc/environment.d.ts +4 -4
- package/dist/guest/toolchains/native/msvc/environment.js +30 -16
- package/dist/guest/toolchains/native/msvc/index.d.ts +3 -3
- package/dist/guest/toolchains/native/msvc/index.js +10 -8
- package/dist/guest/toolchains/native/msvc/packages.d.ts +1 -1
- package/dist/guest/toolchains/native/msvc/packages.js +69 -23
- package/dist/guest/toolchains/native/msvc/tree.d.ts +6 -6
- package/dist/guest/toolchains/native/msvc/tree.js +15 -9
- package/dist/guest/toolchains/native/rust-extras.d.ts +23 -0
- package/dist/guest/toolchains/native/rust-extras.js +100 -0
- package/dist/guest/toolchains/native/rust.d.ts +2 -2
- package/dist/guest/toolchains/native/rust.js +41 -10
- package/dist/guest/toolchains/{scripting → native}/vcruntime.d.ts +2 -2
- package/dist/guest/toolchains/{scripting → native}/vcruntime.js +17 -7
- package/dist/guest/toolchains/package-ledger.d.ts +17 -0
- package/dist/guest/toolchains/package-ledger.js +54 -0
- package/dist/guest/toolchains/plan.d.ts +3 -24
- package/dist/guest/toolchains/plan.js +99 -111
- package/dist/guest/toolchains/runtimes.d.ts +6 -6
- package/dist/guest/toolchains/runtimes.js +31 -13
- package/dist/guest/toolchains/scheduler.d.ts +22 -0
- package/dist/guest/toolchains/scheduler.js +123 -0
- package/dist/guest/toolchains/setup.d.ts +10 -0
- package/dist/guest/toolchains/setup.js +22 -0
- package/dist/guest/toolchains/state-file.d.ts +3 -0
- package/dist/guest/toolchains/state-file.js +10 -0
- package/dist/guest/toolchains/step.d.ts +24 -0
- package/dist/guest/toolchains/step.js +1 -0
- package/dist/guest/toolchains/tool-env.d.ts +12 -0
- package/dist/guest/toolchains/tool-env.js +16 -0
- package/dist/guest/toolchains/tools/cli.d.ts +10 -0
- package/dist/guest/toolchains/{cli.js → tools/cli.js} +35 -15
- package/dist/guest/toolchains/tools/git.d.ts +3 -0
- package/dist/guest/toolchains/{git.js → tools/git.js} +38 -15
- package/dist/guest/toolchains/tools/pwsh.d.ts +4 -0
- package/dist/guest/toolchains/{pwsh.js → tools/pwsh.js} +14 -7
- package/dist/guest/toolchains/{vscode-profile.d.ts → tools/vscode-profile.d.ts} +6 -6
- package/dist/guest/toolchains/{vscode-profile.js → tools/vscode-profile.js} +28 -12
- package/dist/guest/toolchains/{vscode.d.ts → tools/vscode.d.ts} +6 -6
- package/dist/guest/toolchains/{vscode.js → tools/vscode.js} +67 -21
- package/dist/guest/toolchains/version-cache.d.ts +16 -0
- package/dist/guest/toolchains/version-cache.js +67 -0
- package/dist/host/agent-commands/commands.d.ts +13 -0
- package/dist/host/agent-commands/commands.js +33 -0
- package/dist/host/agent-commands/forwarders.d.ts +7 -0
- package/dist/host/agent-commands/forwarders.js +31 -0
- package/dist/host/agent-commands/index.d.ts +4 -0
- package/dist/host/agent-commands/index.js +4 -0
- package/dist/host/agent-commands/reconcile.d.ts +12 -0
- package/dist/host/agent-commands/reconcile.js +69 -0
- package/dist/host/agent-commands/user-path.d.ts +2 -0
- package/dist/host/agent-commands/user-path.js +33 -0
- package/dist/host/audit/collect.d.ts +2 -2
- package/dist/host/audit/collect.js +59 -22
- package/dist/host/audit/log.d.ts +2 -2
- package/dist/host/audit/log.js +24 -8
- package/dist/host/{attach.d.ts → channel/attach.d.ts} +2 -2
- package/dist/host/{attach.js → channel/attach.js} +33 -15
- package/dist/host/channel/channel.d.ts +51 -0
- package/dist/host/channel/channel.js +196 -0
- package/dist/host/channel/index.d.ts +2 -0
- package/dist/host/channel/index.js +2 -0
- package/dist/host/guard/agent-files.d.ts +7 -0
- package/dist/host/guard/agent-files.js +103 -0
- package/dist/host/guard/commands.d.ts +10 -0
- package/dist/host/guard/commands.js +123 -0
- package/dist/host/guard/file-hash.d.ts +4 -0
- package/dist/host/guard/file-hash.js +37 -0
- package/dist/host/guard/git-config.d.ts +5 -0
- package/dist/host/guard/git-config.js +62 -0
- package/dist/host/guard/git-dirs.d.ts +12 -0
- package/dist/host/guard/git-dirs.js +53 -0
- package/dist/host/guard/index.d.ts +5 -0
- package/dist/host/guard/index.js +4 -0
- package/dist/host/guard/mark-of-the-web.d.ts +8 -0
- package/dist/host/guard/mark-of-the-web.js +74 -0
- package/dist/host/guard/nested-repos.d.ts +14 -0
- package/dist/host/guard/nested-repos.js +88 -0
- package/dist/host/guard/quarantine.d.ts +3 -0
- package/dist/host/guard/quarantine.js +24 -0
- package/dist/host/guard/repo-guard.d.ts +10 -0
- package/dist/host/guard/repo-guard.js +36 -0
- package/dist/host/guard/store.d.ts +40 -0
- package/dist/host/guard/store.js +145 -0
- package/dist/host/guard/types.d.ts +27 -0
- package/dist/host/guard/types.js +3 -0
- package/dist/host/guard/watch-state.d.ts +9 -0
- package/dist/host/guard/watch-state.js +26 -0
- package/dist/host/launch/boot-projects.d.ts +17 -0
- package/dist/host/launch/{projects.js → boot-projects.js} +27 -12
- package/dist/host/{database-plan.d.ts → launch/database-plan.d.ts} +5 -5
- package/dist/host/{database-plan.js → launch/database-plan.js} +24 -13
- package/dist/host/launch/generate.d.ts +4 -0
- package/dist/host/launch/generate.js +77 -0
- package/dist/host/launch/index.d.ts +10 -0
- package/dist/host/launch/index.js +10 -0
- package/dist/host/launch/mappings.d.ts +7 -2
- package/dist/host/launch/mappings.js +83 -24
- package/dist/host/launch/pc-scan.d.ts +5 -0
- package/dist/host/{pc-scan.js → launch/pc-scan.js} +20 -13
- package/dist/host/launch/project-scan.d.ts +7 -0
- package/dist/host/{project-scan.js → launch/project-scan.js} +29 -21
- package/dist/host/launch/session-file.d.ts +23 -0
- package/dist/host/launch/session-file.js +73 -0
- package/dist/host/launch/stage.d.ts +5 -5
- package/dist/host/launch/stage.js +14 -13
- package/dist/host/launch/toolchains.d.ts +4 -0
- package/dist/host/launch/toolchains.js +11 -0
- package/dist/host/launch/{wsb.d.ts → wsb-file.d.ts} +4 -2
- package/dist/host/launch/wsb-file.js +56 -0
- package/dist/host/life/crash-report.d.ts +8 -0
- package/dist/host/life/crash-report.js +87 -0
- package/dist/host/life/index.d.ts +6 -0
- package/dist/host/life/index.js +6 -0
- package/dist/host/life/keep-awake.d.ts +10 -0
- package/dist/host/life/keep-awake.js +29 -0
- package/dist/host/life/life-record.d.ts +48 -0
- package/dist/host/life/life-record.js +76 -0
- package/dist/host/life/stop-events.d.ts +27 -0
- package/dist/host/life/stop-events.js +96 -0
- package/dist/host/life/stop-warning.d.ts +4 -0
- package/dist/host/life/stop-warning.js +25 -0
- package/dist/host/life/windows-update.d.ts +3 -0
- package/dist/host/life/windows-update.js +11 -0
- package/dist/host/native.d.ts +4 -0
- package/dist/host/native.js +11 -0
- package/dist/host/network/index.d.ts +1 -0
- package/dist/host/network/index.js +1 -0
- package/dist/host/{port-forward.d.ts → network/port-forward.d.ts} +1 -1
- package/dist/host/{port-forward.js → network/port-forward.js} +16 -10
- package/dist/host/profile/accounts.d.ts +37 -0
- package/dist/host/profile/accounts.js +146 -0
- package/dist/host/profile/claude-login.d.ts +22 -0
- package/dist/host/profile/claude-login.js +57 -0
- package/dist/host/{claude-profile.d.ts → profile/claude-profile.d.ts} +9 -9
- package/dist/host/{claude-profile.js → profile/claude-profile.js} +32 -22
- package/dist/host/profile/index.d.ts +7 -0
- package/dist/host/profile/index.js +7 -0
- package/dist/host/profile/personalize.d.ts +2 -0
- package/dist/host/profile/personalize.js +127 -0
- package/dist/host/profile/reg-file.d.ts +8 -0
- package/dist/host/profile/reg-file.js +45 -0
- package/dist/host/profile/secret-files.d.ts +2 -0
- package/dist/host/profile/secret-files.js +25 -0
- package/dist/host/profile/secret-patterns.d.ts +6 -0
- package/dist/host/profile/secret-patterns.js +128 -0
- package/dist/host/profile/secrets.d.ts +12 -0
- package/dist/host/profile/secrets.js +100 -0
- package/dist/host/projects/index.d.ts +4 -0
- package/dist/host/projects/index.js +4 -0
- package/dist/host/projects/join.d.ts +38 -0
- package/dist/host/projects/join.js +119 -0
- package/dist/host/projects/known.d.ts +28 -0
- package/dist/host/projects/known.js +55 -0
- package/dist/host/projects/mapper.d.ts +29 -0
- package/dist/host/projects/mapper.js +88 -0
- package/dist/host/projects/registry.d.ts +83 -0
- package/dist/host/projects/registry.js +136 -0
- package/dist/host/sandbox/doctor.d.ts +2 -0
- package/dist/host/sandbox/doctor.js +42 -0
- package/dist/host/sandbox/host-claude.d.ts +1 -0
- package/dist/host/sandbox/host-claude.js +26 -0
- package/dist/host/sandbox/index.d.ts +6 -0
- package/dist/host/sandbox/index.js +6 -0
- package/dist/host/{platform.d.ts → sandbox/platform.d.ts} +0 -5
- package/dist/host/sandbox/platform.js +60 -0
- package/dist/host/sandbox/probe.d.ts +3 -0
- package/dist/host/sandbox/probe.js +47 -0
- package/dist/host/{window.js → sandbox/window.js} +7 -5
- package/dist/host/{wsb.js → sandbox/wsb-cli.js} +31 -8
- package/dist/host/{cleanup.js → storage/cleanup.js} +27 -12
- package/dist/host/storage/index.d.ts +2 -0
- package/dist/host/storage/index.js +2 -0
- package/dist/host/storage/state-files.d.ts +4 -0
- package/dist/host/storage/state-files.js +10 -0
- package/dist/host/test-guard.js +1 -1
- package/dist/host/tools/conpty.d.ts +8 -0
- package/dist/host/tools/conpty.js +58 -0
- package/dist/host/tools/index.d.ts +2 -0
- package/dist/host/tools/index.js +2 -0
- package/dist/host/{terminal.d.ts → tools/windows-terminal.d.ts} +2 -10
- package/dist/host/{terminal.js → tools/windows-terminal.js} +33 -57
- package/dist/host/workspace-view/active-views.d.ts +3 -0
- package/dist/host/workspace-view/active-views.js +22 -0
- package/dist/host/workspace-view/index.d.ts +2 -18
- package/dist/host/workspace-view/index.js +2 -49
- package/dist/host/workspace-view/plan.d.ts +16 -0
- package/dist/host/workspace-view/plan.js +50 -0
- package/dist/host/workspace-view/rules.js +10 -3
- package/dist/host/workspace-view/view-state.d.ts +10 -0
- package/dist/host/workspace-view/view-state.js +31 -0
- package/dist/host/workspace-view/view.d.ts +1 -0
- package/dist/host/workspace-view/view.js +51 -55
- package/dist/runtime/daemon.js +4232 -1918
- package/dist/runtime/db.js +2145 -830
- package/dist/runtime/gitguard.js +29 -11
- package/dist/runtime/main.js +4760 -2155
- package/dist/runtime/netproxy.js +1654 -418
- package/dist/runtime/view.js +1515 -453
- package/dist/selftest/accounts.test.d.ts +1 -1
- package/dist/selftest/accounts.test.js +20 -17
- package/dist/selftest/agent-commands.test.d.ts +1 -1
- package/dist/selftest/agent-commands.test.js +9 -5
- package/dist/selftest/audit.test.d.ts +1 -1
- package/dist/selftest/audit.test.js +46 -13
- package/dist/selftest/channel.test.d.ts +1 -1
- package/dist/selftest/channel.test.js +91 -8
- package/dist/selftest/cli.test.d.ts +1 -1
- package/dist/selftest/cli.test.js +68 -16
- package/dist/selftest/cmdline.test.d.ts +1 -1
- package/dist/selftest/cmdline.test.js +36 -7
- package/dist/selftest/config.test.d.ts +1 -1
- package/dist/selftest/config.test.js +12 -5
- package/dist/selftest/data.test.d.ts +1 -1
- package/dist/selftest/data.test.js +35 -6
- package/dist/selftest/detect.test.d.ts +1 -1
- package/dist/selftest/detect.test.js +22 -9
- package/dist/selftest/generate.test.d.ts +1 -1
- package/dist/selftest/generate.test.js +33 -9
- package/dist/selftest/git-access.test.d.ts +1 -1
- package/dist/selftest/git-access.test.js +42 -4
- package/dist/selftest/guest-boot.test.d.ts +1 -1
- package/dist/selftest/guest-boot.test.js +25 -7
- package/dist/selftest/host-sim.test.d.ts +1 -1
- package/dist/selftest/host-sim.test.js +27 -3
- package/dist/selftest/hostile-input.test.d.ts +1 -1
- package/dist/selftest/hostile-input.test.js +5 -5
- package/dist/selftest/index.d.ts +1 -1
- package/dist/selftest/index.js +73 -16
- package/dist/selftest/layout.test.d.ts +2 -0
- package/dist/selftest/layout.test.js +131 -0
- package/dist/selftest/links.test.d.ts +1 -1
- package/dist/selftest/links.test.js +16 -11
- package/dist/selftest/live-daemon.test.d.ts +1 -1
- package/dist/selftest/live-daemon.test.js +20 -8
- package/dist/selftest/live-git.test.d.ts +1 -1
- package/dist/selftest/live-git.test.js +13 -4
- package/dist/selftest/live-network.test.d.ts +1 -1
- package/dist/selftest/live-network.test.js +24 -9
- package/dist/selftest/live-projects.test.d.ts +1 -1
- package/dist/selftest/live-projects.test.js +47 -20
- package/dist/selftest/live-terminal.test.d.ts +2 -0
- package/dist/selftest/live-terminal.test.js +195 -0
- package/dist/selftest/local-config.test.d.ts +1 -1
- package/dist/selftest/local-config.test.js +88 -15
- package/dist/selftest/mirror.test.d.ts +1 -1
- package/dist/selftest/mirror.test.js +118 -19
- package/dist/selftest/network.test.d.ts +1 -1
- package/dist/selftest/network.test.js +17 -8
- package/dist/selftest/personalization.test.d.ts +1 -1
- package/dist/selftest/personalization.test.js +12 -5
- package/dist/selftest/projects.test.d.ts +1 -1
- package/dist/selftest/projects.test.js +336 -72
- package/dist/selftest/repair.test.d.ts +1 -1
- package/dist/selftest/repair.test.js +17 -5
- package/dist/selftest/repo-guard.test.d.ts +1 -1
- package/dist/selftest/repo-guard.test.js +21 -20
- package/dist/selftest/secrets.test.d.ts +1 -1
- package/dist/selftest/secrets.test.js +57 -13
- package/dist/selftest/setup.test.d.ts +1 -1
- package/dist/selftest/setup.test.js +25 -5
- package/dist/selftest/{fixtures.d.ts → support/fixtures.d.ts} +7 -4
- package/dist/selftest/{fixtures.js → support/fixtures.js} +95 -17
- package/dist/selftest/{harness.js → support/harness.js} +24 -7
- package/dist/selftest/{live.d.ts → support/live.d.ts} +2 -2
- package/dist/selftest/{live.js → support/live.js} +34 -10
- package/dist/selftest/support/suite.js +1 -0
- package/dist/selftest/sync.test.d.ts +1 -1
- package/dist/selftest/sync.test.js +64 -26
- package/dist/selftest/test-guard.test.d.ts +1 -1
- package/dist/selftest/test-guard.test.js +43 -15
- package/dist/selftest/toolchains.test.d.ts +1 -1
- package/dist/selftest/toolchains.test.js +135 -36
- package/dist/selftest/workspace-view.test.d.ts +1 -1
- package/dist/selftest/workspace-view.test.js +48 -11
- package/dist/selftest/workspace.test.d.ts +1 -1
- package/dist/selftest/workspace.test.js +13 -4
- package/dist/shared/{apps.d.ts → apps/catalogue.d.ts} +1 -11
- package/dist/shared/apps/catalogue.js +768 -0
- package/dist/shared/apps/index.d.ts +2 -0
- package/dist/shared/apps/index.js +2 -0
- package/dist/shared/apps/selection.d.ts +11 -0
- package/dist/shared/apps/selection.js +40 -0
- package/dist/shared/channel/index.d.ts +2 -0
- package/dist/shared/channel/index.js +2 -0
- package/dist/shared/channel/run-dir.d.ts +30 -0
- package/dist/shared/channel/run-dir.js +84 -0
- package/dist/shared/{schema.d.ts → channel/schema.d.ts} +60 -19
- package/dist/shared/channel/schema.js +131 -0
- package/dist/shared/download/archive.d.ts +13 -0
- package/dist/shared/download/archive.js +57 -0
- package/dist/shared/download/downloader.d.ts +35 -0
- package/dist/shared/download/downloader.js +110 -0
- package/dist/shared/download/github.d.ts +16 -0
- package/dist/shared/download/github.js +74 -0
- package/dist/shared/download/http.d.ts +5 -0
- package/dist/shared/download/http.js +30 -0
- package/dist/shared/download/index.d.ts +5 -0
- package/dist/shared/download/index.js +5 -0
- package/dist/shared/download/spawn.d.ts +2 -0
- package/dist/shared/download/spawn.js +7 -0
- package/dist/shared/io/index.d.ts +3 -0
- package/dist/shared/io/index.js +3 -0
- package/dist/shared/io/json-file.d.ts +10 -0
- package/dist/shared/io/json-file.js +21 -0
- package/dist/shared/io/json.d.ts +13 -0
- package/dist/shared/io/json.js +49 -0
- package/dist/shared/{safe-remove.js → io/safe-remove.js} +32 -7
- package/dist/shared/{netrules.js → network/firewall-rules.js} +36 -5
- package/dist/shared/network/index.d.ts +2 -0
- package/dist/shared/network/index.js +2 -0
- package/dist/shared/{netpolicy.js → network/policy.js} +66 -11
- package/dist/shared/{paths.js → paths/claude-paths.js} +12 -2
- package/dist/shared/{guest-paths.d.ts → paths/guest-paths.d.ts} +21 -0
- package/dist/shared/paths/guest-paths.js +146 -0
- package/dist/shared/paths/index.d.ts +3 -0
- package/dist/shared/paths/index.js +3 -0
- package/dist/shared/{projects.d.ts → paths/projects.d.ts} +27 -4
- package/dist/shared/paths/projects.js +136 -0
- package/dist/shared/pty/client.d.ts +21 -0
- package/dist/shared/pty/client.js +79 -0
- package/dist/shared/pty/console-input.d.ts +11 -0
- package/dist/shared/pty/console-input.js +81 -0
- package/dist/shared/pty/index.d.ts +6 -0
- package/dist/shared/pty/index.js +6 -0
- package/dist/shared/pty/input-joiner.d.ts +15 -0
- package/dist/shared/pty/input-joiner.js +44 -0
- package/dist/shared/pty/output-filter.d.ts +13 -0
- package/dist/shared/pty/output-filter.js +140 -0
- package/dist/shared/pty/protocol.d.ts +36 -0
- package/dist/shared/pty/protocol.js +60 -0
- package/dist/shared/pty/terminal.d.ts +24 -0
- package/dist/shared/pty/terminal.js +147 -0
- package/dist/shared/test-guard.js +3 -1
- package/dist/sync/claude-mem.d.ts +1 -1
- package/dist/sync/claude-mem.js +9 -4
- package/dist/sync/history.d.ts +1 -29
- package/dist/sync/history.js +57 -45
- package/dist/sync/index.d.ts +5 -0
- package/dist/sync/index.js +5 -0
- package/dist/sync/sync-cycle.d.ts +18 -0
- package/dist/sync/sync-cycle.js +85 -0
- package/dist/sync/sync-state.d.ts +32 -0
- package/dist/sync/sync-state.js +37 -0
- package/dist/sync/watcher.d.ts +0 -18
- package/dist/sync/watcher.js +66 -100
- package/native/keep-awake.ps1 +8 -0
- package/native/power.cs +23 -0
- package/native/stop-events.ps1 +38 -0
- package/package.json +11 -3
- package/sandbox/linkgate.cs +98 -0
- package/sandbox/memlog.ps1 +15 -6
- package/sandbox/ptyhost.cs +60 -3
- package/schemas/config.schema.json +48 -1
- package/schemas/sandbox-config.schema.json +37 -3
- package/dist/cli/commands/launch.d.ts +0 -29
- package/dist/cli/commands/launch.js +0 -366
- package/dist/cli/commands/maintenance.d.ts +0 -10
- package/dist/cli/commands/maintenance.js +0 -187
- package/dist/cli/commands/project.d.ts +0 -29
- package/dist/cli/commands/project.js +0 -63
- package/dist/cli/commands/projects.d.ts +0 -14
- package/dist/cli/commands/projects.js +0 -146
- package/dist/cli/commands/restart.d.ts +0 -6
- package/dist/cli/commands/restart.js +0 -85
- package/dist/cli/commands/sessions.d.ts +0 -12
- package/dist/cli/commands/sessions.js +0 -257
- package/dist/cli/menu/settings/editors.js +0 -305
- package/dist/cli/progress.d.ts +0 -9
- package/dist/cli/progress.js +0 -49
- package/dist/cli/tui/dialogs.d.ts +0 -57
- package/dist/cli/tui/dialogs.js +0 -162
- package/dist/core/config.js +0 -109
- package/dist/core/schema.d.ts +0 -6
- package/dist/core/schema.js +0 -8
- package/dist/core/util.d.ts +0 -62
- package/dist/core/util.js +0 -156
- package/dist/core/workspace.d.ts +0 -18
- package/dist/core/workspace.js +0 -145
- package/dist/guest/boot-env.d.ts +0 -4
- package/dist/guest/daemon.js +0 -57
- package/dist/guest/env.d.ts +0 -52
- package/dist/guest/env.js +0 -103
- package/dist/guest/gitrules.js +0 -11
- package/dist/guest/project-status.d.ts +0 -5
- package/dist/guest/project-status.js +0 -17
- package/dist/guest/setup/user.js +0 -51
- package/dist/guest/toolchains/cli.d.ts +0 -10
- package/dist/guest/toolchains/common.d.ts +0 -54
- package/dist/guest/toolchains/common.js +0 -147
- package/dist/guest/toolchains/databases/dynamodb.d.ts +0 -8
- package/dist/guest/toolchains/databases/dynamodb.js +0 -52
- package/dist/guest/toolchains/databases/index.d.ts +0 -6
- package/dist/guest/toolchains/databases/index.js +0 -62
- package/dist/guest/toolchains/databases/mongodb.d.ts +0 -3
- package/dist/guest/toolchains/databases/mongodb.js +0 -31
- package/dist/guest/toolchains/databases/mysql.d.ts +0 -3
- package/dist/guest/toolchains/databases/mysql.js +0 -38
- package/dist/guest/toolchains/databases/postgres.d.ts +0 -5
- package/dist/guest/toolchains/databases/postgres.js +0 -38
- package/dist/guest/toolchains/databases/redis.d.ts +0 -3
- package/dist/guest/toolchains/databases/redis.js +0 -16
- package/dist/guest/toolchains/git.d.ts +0 -3
- package/dist/guest/toolchains/go.d.ts +0 -3
- package/dist/guest/toolchains/java.d.ts +0 -8
- package/dist/guest/toolchains/node.d.ts +0 -3
- package/dist/guest/toolchains/pwsh.d.ts +0 -4
- package/dist/guest/toolchains/python.d.ts +0 -3
- package/dist/guest/toolchains/scripting/php.d.ts +0 -3
- package/dist/guest/toolchains/scripting/ruby.d.ts +0 -3
- package/dist/host/accounts.d.ts +0 -32
- package/dist/host/accounts.js +0 -128
- package/dist/host/agent-commands.d.ts +0 -25
- package/dist/host/agent-commands.js +0 -145
- package/dist/host/channel.d.ts +0 -38
- package/dist/host/channel.js +0 -162
- package/dist/host/generate.d.ts +0 -13
- package/dist/host/generate.js +0 -108
- package/dist/host/join.d.ts +0 -28
- package/dist/host/join.js +0 -76
- package/dist/host/launch/projects.d.ts +0 -15
- package/dist/host/launch/wsb.js +0 -34
- package/dist/host/motw.d.ts +0 -17
- package/dist/host/motw.js +0 -74
- package/dist/host/pc-scan.d.ts +0 -6
- package/dist/host/personalize.d.ts +0 -10
- package/dist/host/personalize.js +0 -97
- package/dist/host/platform.js +0 -129
- package/dist/host/project-scan.d.ts +0 -7
- package/dist/host/projects.d.ts +0 -100
- package/dist/host/projects.js +0 -147
- package/dist/host/repo-guard.d.ts +0 -43
- package/dist/host/repo-guard.js +0 -347
- package/dist/host/secrets.d.ts +0 -14
- package/dist/host/secrets.js +0 -133
- package/dist/host/stops.d.ts +0 -67
- package/dist/host/stops.js +0 -126
- package/dist/shared/apps.js +0 -114
- package/dist/shared/download.d.ts +0 -60
- package/dist/shared/download.js +0 -215
- package/dist/shared/guest-paths.js +0 -61
- package/dist/shared/projects.js +0 -67
- package/dist/shared/pty-client.d.ts +0 -91
- package/dist/shared/pty-client.js +0 -349
- package/dist/shared/rundir.d.ts +0 -41
- package/dist/shared/rundir.js +0 -96
- package/dist/shared/schema.js +0 -92
- /package/dist/{guest/daemon.d.ts → cli/tui/list/list-types.js} +0 -0
- /package/dist/{guest/db.d.ts → cli/tui/screen.js} +0 -0
- /package/dist/core/{detect-databases.d.ts → detect/databases.d.ts} +0 -0
- /package/dist/{guest/toolchains → core/detect}/versions.d.ts +0 -0
- /package/dist/guest/{setup/agents.d.ts → agents/agent-installer.d.ts} +0 -0
- /package/dist/guest/{audit-parse.d.ts → audit/parse.d.ts} +0 -0
- /package/dist/guest/{guide.d.ts → boot/guide.d.ts} +0 -0
- /package/dist/guest/daemon/{shutdown.d.ts → idle-shutdown.d.ts} +0 -0
- /package/dist/guest/daemon/{session.d.ts → sessions.d.ts} +0 -0
- /package/dist/guest/{main.d.ts → entries/daemon.d.ts} +0 -0
- /package/dist/guest/{netproxy.d.ts → entries/db.d.ts} +0 -0
- /package/dist/{selftest/suite.js → guest/entries/gitguard.d.ts} +0 -0
- /package/dist/guest/{gitguard.d.ts → git/decision.d.ts} +0 -0
- /package/dist/guest/{ports.d.ts → runtime/ports.d.ts} +0 -0
- /package/dist/guest/{project-context.d.ts → runtime/project-context.d.ts} +0 -0
- /package/dist/guest/{cmdline.d.ts → sessions/cmdline.d.ts} +0 -0
- /package/dist/guest/{ptyhost.d.ts → sessions/pty-host.d.ts} +0 -0
- /package/dist/guest/{view.d.ts → sessions/viewer.d.ts} +0 -0
- /package/dist/guest/setup/{policy.d.ts → managed-policy.d.ts} +0 -0
- /package/dist/host/{window.d.ts → sandbox/window.d.ts} +0 -0
- /package/dist/host/{wsb.d.ts → sandbox/wsb-cli.d.ts} +0 -0
- /package/dist/host/{cleanup.d.ts → storage/cleanup.d.ts} +0 -0
- /package/dist/selftest/{harness.d.ts → support/harness.d.ts} +0 -0
- /package/dist/selftest/{suite.d.ts → support/suite.d.ts} +0 -0
- /package/dist/shared/{safe-remove.d.ts → io/safe-remove.d.ts} +0 -0
- /package/dist/shared/{netrules.d.ts → network/firewall-rules.d.ts} +0 -0
- /package/dist/shared/{netpolicy.d.ts → network/policy.d.ts} +0 -0
- /package/dist/shared/{paths.d.ts → paths/claude-paths.d.ts} +0 -0
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import _ from 'lodash';
|
|
4
|
+
import { assertNoLinks, fail, safeText, sleep } from '../../../core/util/index.js';
|
|
5
|
+
function newestLog(dir) {
|
|
6
|
+
if (!fs.existsSync(dir))
|
|
7
|
+
return null;
|
|
8
|
+
const logs = fs
|
|
9
|
+
.readdirSync(dir)
|
|
10
|
+
.filter((f) => /^(guest|daemon|bootstrap)-.*\.log$/.test(f) && fs.lstatSync(path.join(dir, f)).isFile());
|
|
11
|
+
const newest = _.maxBy(logs, (f) => fs.statSync(path.join(dir, f)).mtimeMs);
|
|
12
|
+
return newest ? path.join(dir, newest) : null;
|
|
13
|
+
}
|
|
14
|
+
export async function logs(ctx) {
|
|
15
|
+
const dir = path.join(ctx.dataPath, 'logs');
|
|
16
|
+
// The sandbox writes this folder: never read through a link it planted there.
|
|
17
|
+
assertNoLinks(ctx.dataPath, dir);
|
|
18
|
+
const file = newestLog(dir) ??
|
|
19
|
+
fail('No sandbox logs yet in ' + dir + '.', 'Logs appear after the first start (sandbox claude).');
|
|
20
|
+
console.log('== ' + file + ' ==');
|
|
21
|
+
let printed = 0;
|
|
22
|
+
// The log is written inside the sandbox: read only its tail, and make it safe for your terminal.
|
|
23
|
+
const print = () => {
|
|
24
|
+
const size = fs.statSync(file).size;
|
|
25
|
+
const from = printed === 0 ? Math.max(0, size - 64 * 1024) : printed;
|
|
26
|
+
if (size <= from)
|
|
27
|
+
return;
|
|
28
|
+
const fd = fs.openSync(file, 'r');
|
|
29
|
+
const buffer = Buffer.alloc(Math.min(size - from, 4 * 1024 * 1024));
|
|
30
|
+
fs.readSync(fd, buffer, 0, buffer.length, from);
|
|
31
|
+
fs.closeSync(fd);
|
|
32
|
+
const text = safeText(buffer.toString('utf8'));
|
|
33
|
+
process.stdout.write(printed === 0 ? text.split('\n').slice(-120).join('\n') : text);
|
|
34
|
+
printed = from + buffer.length;
|
|
35
|
+
};
|
|
36
|
+
print();
|
|
37
|
+
if (ctx.options.follow)
|
|
38
|
+
console.error('(following; Ctrl+C to stop)');
|
|
39
|
+
while (ctx.options.follow) {
|
|
40
|
+
await sleep(1000);
|
|
41
|
+
print();
|
|
42
|
+
}
|
|
43
|
+
return 0;
|
|
44
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { isSandboxRunning } from '../../../host/sandbox/index.js';
|
|
2
|
+
import { syncBack } from '../../../sync/index.js';
|
|
3
|
+
export function sync(ctx) {
|
|
4
|
+
const running = isSandboxRunning();
|
|
5
|
+
const result = syncBack(ctx.dataPath, !running);
|
|
6
|
+
console.log('History: ' +
|
|
7
|
+
result.history +
|
|
8
|
+
' item(s) synced back. claude-mem: ' +
|
|
9
|
+
result.claudeMem +
|
|
10
|
+
(running ? ' (claude-mem syncs when the sandbox closes)' : ''));
|
|
11
|
+
return 0;
|
|
12
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { safeText } from '../../../core/util/index.js';
|
|
3
|
+
/** "2 sessions (claude in api, codex in web)". */
|
|
4
|
+
export function describeSessions(sessions) {
|
|
5
|
+
return sessions.length === 0
|
|
6
|
+
? 'no sessions'
|
|
7
|
+
: sessions.length +
|
|
8
|
+
' session' +
|
|
9
|
+
(sessions.length === 1 ? '' : 's') +
|
|
10
|
+
' (' +
|
|
11
|
+
sessions
|
|
12
|
+
.map((s) => safeText(s.harness) + ' in ' + safeText(s.project ?? path.win32.basename(s.cwd)))
|
|
13
|
+
.join(', ') +
|
|
14
|
+
')';
|
|
15
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { SandboxStatus } from '../../../core/types.js';
|
|
2
|
+
import { type Missing } from '../../../core/local-config/index.js';
|
|
3
|
+
import { type RegistryEntry } from '../../../host/projects/index.js';
|
|
4
|
+
import type { ProjectSpec } from '../../../shared/channel/index.js';
|
|
5
|
+
import { type Context } from '../context.js';
|
|
6
|
+
/** The folder the command is about: --workspace, else the current one. */
|
|
7
|
+
export declare function hereDir(ctx: Context): string;
|
|
8
|
+
export interface Located {
|
|
9
|
+
project: RegistryEntry | null;
|
|
10
|
+
guestDir: string | null;
|
|
11
|
+
}
|
|
12
|
+
/** Where this folder is in the running sandbox, if it is in it at all (nothing is registered). */
|
|
13
|
+
export declare function locateHere(ctx: Context, status: SandboxStatus | null): Located;
|
|
14
|
+
export interface Joined {
|
|
15
|
+
project: RegistryEntry | null;
|
|
16
|
+
guestDir: string;
|
|
17
|
+
spec: ProjectSpec | null;
|
|
18
|
+
harness: string | null;
|
|
19
|
+
notes: string[];
|
|
20
|
+
}
|
|
21
|
+
/** restart.ts: the sandbox was restarted for a project in this command. */
|
|
22
|
+
export declare function markRestarted(): void;
|
|
23
|
+
/**
|
|
24
|
+
* Makes this folder a project of the running sandbox (nothing to do for the launch folder and projects already in
|
|
25
|
+
* it): its .sandbox-config.json is approved like at a launch, its protections are checked, and it is made visible.
|
|
26
|
+
* Throws NeedsRestart (host/projects) when that is impossible without a restart.
|
|
27
|
+
*/
|
|
28
|
+
export declare function joinHere(ctx: Context, status: SandboxStatus, o?: {
|
|
29
|
+
noRestart?: boolean;
|
|
30
|
+
}): Promise<Joined>;
|
|
31
|
+
/** The command that restarts the running sandbox with this folder's boot wishes (consent given by --yes). */
|
|
32
|
+
export declare function restartCommand(ctx: Context, host: string): string;
|
|
33
|
+
/** Joined without what it wants at boot: what is missing, how to restart with it, and how to always have it. */
|
|
34
|
+
export declare function missingNotes(ctx: Context, name: string, host: string, missing: Missing, shown?: boolean): string[];
|
|
35
|
+
/** Waits until the sandbox has set a project up, with its progress on a spinner (plain lines without a terminal). */
|
|
36
|
+
export declare function provisionJoined(ctx: Context, joined: Joined): Promise<void>;
|
|
37
|
+
/** joinHere, then (for another project) waits until the sandbox has set it up. */
|
|
38
|
+
export declare function readyHere(ctx: Context, status: SandboxStatus): Promise<Joined>;
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
// Which project of the running sandbox a command is run from. Every command that works on a running sandbox uses
|
|
2
|
+
// these, so they all agree: `locateHere` only looks (attach, sessions, status, restart), `joinHere` also makes the
|
|
3
|
+
// folder a project of the running sandbox when it can without a restart (launch, start, exec, db).
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import { select } from '@inquirer/prompts';
|
|
6
|
+
import { describeMissing, missingTip } from '../../../core/local-config/index.js';
|
|
7
|
+
import { askYesNo } from '../../../core/prompt.js';
|
|
8
|
+
import { isInsideOrEqual } from '../../../core/util/index.js';
|
|
9
|
+
import { resolveRun } from '../../../core/run/index.js';
|
|
10
|
+
import { SandboxChannel } from '../../../host/channel/index.js';
|
|
11
|
+
import { ProjectRegistry, joinRunning } from '../../../host/projects/index.js';
|
|
12
|
+
import { c, working } from '../../output/index.js';
|
|
13
|
+
import { describeSessions } from './describe-sessions.js';
|
|
14
|
+
import { guestPathFor } from '../context.js';
|
|
15
|
+
/** The folder the command is about: --workspace, else the current one. */
|
|
16
|
+
export function hereDir(ctx) {
|
|
17
|
+
return path.resolve(ctx.options.workspace ?? process.cwd());
|
|
18
|
+
}
|
|
19
|
+
/** Where this folder is in the running sandbox, if it is in it at all (nothing is registered). */
|
|
20
|
+
export function locateHere(ctx, status) {
|
|
21
|
+
const dir = hereDir(ctx);
|
|
22
|
+
const here = new ProjectRegistry(ctx.storageRoot).here(dir);
|
|
23
|
+
if (here)
|
|
24
|
+
return here;
|
|
25
|
+
// A sandbox started before projects existed: only its launch folder.
|
|
26
|
+
if (!new ProjectRegistry(ctx.storageRoot).read() && status && isInsideOrEqual(status.workspaceHost, dir))
|
|
27
|
+
return { project: null, guestDir: guestPathFor(dir, status.workspaceHost, status.guestWorkspace) };
|
|
28
|
+
return { project: null, guestDir: null };
|
|
29
|
+
}
|
|
30
|
+
let restartedOnce = false;
|
|
31
|
+
/** restart.ts: the sandbox was restarted for a project in this command. */
|
|
32
|
+
export function markRestarted() {
|
|
33
|
+
restartedOnce = true;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Makes this folder a project of the running sandbox (nothing to do for the launch folder and projects already in
|
|
37
|
+
* it): its .sandbox-config.json is approved like at a launch, its protections are checked, and it is made visible.
|
|
38
|
+
* Throws NeedsRestart (host/projects) when that is impossible without a restart.
|
|
39
|
+
*/
|
|
40
|
+
export async function joinHere(ctx, status, o = {}) {
|
|
41
|
+
const { options, loaded, packageRoot, storageRoot, dataPath } = ctx;
|
|
42
|
+
const dir = hereDir(ctx);
|
|
43
|
+
// A sandbox started before projects existed: only its launch folder (guestPathFor explains why otherwise).
|
|
44
|
+
if (!new ProjectRegistry(storageRoot).read())
|
|
45
|
+
return {
|
|
46
|
+
project: null,
|
|
47
|
+
guestDir: guestPathFor(dir, status.workspaceHost, status.guestWorkspace),
|
|
48
|
+
spec: null,
|
|
49
|
+
harness: null,
|
|
50
|
+
notes: [],
|
|
51
|
+
};
|
|
52
|
+
let shown = false;
|
|
53
|
+
const joined = await joinRunning({
|
|
54
|
+
storageRoot,
|
|
55
|
+
dataPath,
|
|
56
|
+
packageRoot,
|
|
57
|
+
hostDir: dir,
|
|
58
|
+
wsbShare: loaded.config.projects.wsbShare,
|
|
59
|
+
resolve: (root) => resolveRun({
|
|
60
|
+
packageRoot,
|
|
61
|
+
loaded,
|
|
62
|
+
cwd: root,
|
|
63
|
+
workspace: root,
|
|
64
|
+
harness: options.harness,
|
|
65
|
+
noAgent: options.noAgent,
|
|
66
|
+
noLocalConfig: options.noLocalConfig,
|
|
67
|
+
trustConfig: options.trustConfig,
|
|
68
|
+
scripts: options.scripts,
|
|
69
|
+
databases: options.databases,
|
|
70
|
+
nodeVersion: options.node,
|
|
71
|
+
pythonVersion: options.python,
|
|
72
|
+
ask: askYesNo,
|
|
73
|
+
}),
|
|
74
|
+
// Its own settings are stricter than the sandbox's: --yes or a "yes" in a terminal joins with the sandbox's.
|
|
75
|
+
acceptStricter: async (name, stricter) => {
|
|
76
|
+
if (options.yes)
|
|
77
|
+
return true;
|
|
78
|
+
if (!process.stdin.isTTY || !process.stdout.isTTY)
|
|
79
|
+
return false;
|
|
80
|
+
console.log(c.yellow(name +
|
|
81
|
+
"'s settings are stricter than this sandbox's (they apply to every session in it):\n " +
|
|
82
|
+
stricter.join('\n ')));
|
|
83
|
+
return askYesNo("Join with the sandbox's settings?");
|
|
84
|
+
},
|
|
85
|
+
// Something it wants only comes with a restart: --yes restarts, a terminal asks, anything else continues.
|
|
86
|
+
decide: async (name, missing) => {
|
|
87
|
+
// Once per command: what a restart could not give (see the launch notes) never restarts it again.
|
|
88
|
+
if (o.noRestart || restartedOnce)
|
|
89
|
+
return 'continue';
|
|
90
|
+
if (options.yes)
|
|
91
|
+
return 'restart';
|
|
92
|
+
if (!process.stdin.isTTY || !process.stdout.isTTY)
|
|
93
|
+
return 'continue';
|
|
94
|
+
console.log(c.yellow(describeMissing(name, missing)));
|
|
95
|
+
shown = true;
|
|
96
|
+
const sessions = new SandboxChannel(dataPath).currentSessions();
|
|
97
|
+
const ending = sessions.length ? describeSessions(sessions) + ' will end' : 'no session is running';
|
|
98
|
+
return select({
|
|
99
|
+
message: 'What now?',
|
|
100
|
+
choices: [
|
|
101
|
+
{ name: 'Continue anyway (join without them)', value: 'continue' },
|
|
102
|
+
{ name: 'Restart with them (' + ending + ')', value: 'restart' },
|
|
103
|
+
{ name: 'Cancel', value: 'cancel' },
|
|
104
|
+
],
|
|
105
|
+
default: 'continue',
|
|
106
|
+
});
|
|
107
|
+
},
|
|
108
|
+
});
|
|
109
|
+
const harness = joined.run && joined.run.harnessName !== 'none' ? joined.run.harnessName : null;
|
|
110
|
+
const notes = joined.missing
|
|
111
|
+
? [...joined.notes, ...missingNotes(ctx, joined.project.name, joined.project.host, joined.missing, shown)]
|
|
112
|
+
: joined.notes;
|
|
113
|
+
return { project: joined.project, guestDir: joined.guestDir, spec: joined.spec, harness, notes };
|
|
114
|
+
}
|
|
115
|
+
/** The command that restarts the running sandbox with this folder's boot wishes (consent given by --yes). */
|
|
116
|
+
export function restartCommand(ctx, host) {
|
|
117
|
+
const agent = ctx.options.noAgent ? 'start' : (ctx.options.harness ?? ctx.loaded.config.defaultHarness);
|
|
118
|
+
return 'sandbox ' + agent + ' --workspace "' + host + '" --yes';
|
|
119
|
+
}
|
|
120
|
+
/** Joined without what it wants at boot: what is missing, how to restart with it, and how to always have it. */
|
|
121
|
+
export function missingNotes(ctx, name, host, missing, shown = false) {
|
|
122
|
+
return [
|
|
123
|
+
...(shown ? [] : [c.yellow(describeMissing(name, missing))]),
|
|
124
|
+
'Joined without them. To restart the sandbox with them (its sessions end): ' + restartCommand(ctx, host),
|
|
125
|
+
c.dim(missingTip(missing)),
|
|
126
|
+
];
|
|
127
|
+
}
|
|
128
|
+
/** Waits until the sandbox has set a project up, with its progress on a spinner (plain lines without a terminal). */
|
|
129
|
+
export async function provisionJoined(ctx, joined) {
|
|
130
|
+
if (!joined.spec)
|
|
131
|
+
return;
|
|
132
|
+
const spec = joined.spec;
|
|
133
|
+
let step = 'starting';
|
|
134
|
+
await working(() => 'Setting up ' + spec.name + ' in the running sandbox: ' + step, () => new SandboxChannel(ctx.dataPath).prepareProject(spec, (m) => {
|
|
135
|
+
step = m;
|
|
136
|
+
}));
|
|
137
|
+
}
|
|
138
|
+
/** joinHere, then (for another project) waits until the sandbox has set it up. */
|
|
139
|
+
export async function readyHere(ctx, status) {
|
|
140
|
+
const joined = await joinHere(ctx, status);
|
|
141
|
+
for (const note of joined.notes)
|
|
142
|
+
console.log(note);
|
|
143
|
+
await provisionJoined(ctx, joined);
|
|
144
|
+
return joined;
|
|
145
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type Context } from '../context.js';
|
|
2
|
+
interface Row {
|
|
3
|
+
readonly folder: string;
|
|
4
|
+
readonly here: boolean;
|
|
5
|
+
readonly known: boolean;
|
|
6
|
+
readonly root: string | null;
|
|
7
|
+
readonly excluded: boolean;
|
|
8
|
+
readonly mappedAtStart: boolean;
|
|
9
|
+
readonly running: string | null;
|
|
10
|
+
}
|
|
11
|
+
/** Every project worth listing: known ones, the running sandbox's, and this folder. */
|
|
12
|
+
export declare function projectRows(ctx: Context): Row[];
|
|
13
|
+
export declare function projects(ctx: Context): Promise<number>;
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
// `sandbox projects`: which projects a sandbox can open without a restart. Project roots (whole folders of projects),
|
|
2
|
+
// the projects this tool has started before, and projects.all / projects.exclude. Changes to what is mapped take
|
|
3
|
+
// effect at the next start; a project you start while a sandbox runs joins it when it can (projects.ts in host/).
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import { checkbox } from '@inquirer/prompts';
|
|
6
|
+
import { assertSafeMapping, assertSafeWorkspace } from '../../../core/safe-paths.js';
|
|
7
|
+
import { dirExists, expandPath, fail, isRootPath } from '../../../core/util/index.js';
|
|
8
|
+
import { isSandboxRunning } from '../../../host/sandbox/index.js';
|
|
9
|
+
import { KnownProjects, projectMapper, ProjectRegistry } from '../../../host/projects/index.js';
|
|
10
|
+
import { isWithin } from '../../../shared/paths/index.js';
|
|
11
|
+
import { c, pageSizeFor, shortenMiddle, termWidth, printJson, table } from '../../output/index.js';
|
|
12
|
+
import { hereDir } from './here.js';
|
|
13
|
+
import { addToList, removeFromList, setSetting } from '../user-config.js';
|
|
14
|
+
function settings(ctx) {
|
|
15
|
+
const p = ctx.loaded.config.projects;
|
|
16
|
+
const expand = (list) => list.map((x) => expandPath(x, ctx.loaded.base));
|
|
17
|
+
return { all: p.all, roots: expand(p.roots), exclude: expand(p.exclude) };
|
|
18
|
+
}
|
|
19
|
+
/** Every project worth listing: known ones, the running sandbox's, and this folder. */
|
|
20
|
+
export function projectRows(ctx) {
|
|
21
|
+
const s = settings(ctx);
|
|
22
|
+
const registry = isSandboxRunning() ? new ProjectRegistry(ctx.storageRoot).read() : null;
|
|
23
|
+
const here = hereDir(ctx);
|
|
24
|
+
const known = new KnownProjects(ctx.storageRoot).list();
|
|
25
|
+
const folders = [...known.map((k) => k.host), ...(registry?.projects.map((p) => p.host) ?? [])];
|
|
26
|
+
const unique = folders.filter((f, i) => folders.findIndex((g) => g.toLowerCase() === f.toLowerCase()) === i);
|
|
27
|
+
return unique.map((folder) => {
|
|
28
|
+
const root = s.roots.find((r) => isWithin(r, folder)) ?? null;
|
|
29
|
+
const excluded = s.exclude.some((e) => isWithin(e, folder));
|
|
30
|
+
const inSandbox = registry?.projects.find((p) => p.host.toLowerCase() === folder.toLowerCase());
|
|
31
|
+
return {
|
|
32
|
+
folder,
|
|
33
|
+
here: isWithin(folder, here),
|
|
34
|
+
known: known.some((k) => k.host.toLowerCase() === folder.toLowerCase()),
|
|
35
|
+
root,
|
|
36
|
+
excluded,
|
|
37
|
+
mappedAtStart: root !== null || (s.all && !excluded && dirExists(folder)),
|
|
38
|
+
running: inSandbox ? inSandbox.name + ' (' + inSandbox.mechanism + ')' : null,
|
|
39
|
+
};
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
const NEXT_START = 'This changes what is mapped from the next start.';
|
|
43
|
+
function runningNote() {
|
|
44
|
+
return isSandboxRunning()
|
|
45
|
+
? ' The running sandbox keeps what it has; start a project in it (sandbox claude there) and it joins without a restart when it can, or you are offered one.'
|
|
46
|
+
: '';
|
|
47
|
+
}
|
|
48
|
+
/** A folder for roots: it holds projects, so it must pass the same checks as a workspace and must not be a drive. */
|
|
49
|
+
function checkFolder(ctx, folder, what) {
|
|
50
|
+
const dir = path.resolve(folder);
|
|
51
|
+
if (!dirExists(dir))
|
|
52
|
+
fail('The folder ' + dir + ' does not exist.', 'Check the path.');
|
|
53
|
+
if (isRootPath(dir))
|
|
54
|
+
fail('A whole drive cannot be ' + what + ': ' + dir, 'Use the folder that holds your projects, e.g. F:\\Code.');
|
|
55
|
+
assertSafeWorkspace(dir, ctx.packageRoot, ctx.storageRoot);
|
|
56
|
+
assertSafeMapping(dir, ctx.packageRoot, ctx.storageRoot);
|
|
57
|
+
return dir;
|
|
58
|
+
}
|
|
59
|
+
function list(ctx) {
|
|
60
|
+
const rows = projectRows(ctx);
|
|
61
|
+
const s = settings(ctx);
|
|
62
|
+
if (printJson(ctx, { all: s.all, roots: s.roots, exclude: s.exclude, projects: rows }))
|
|
63
|
+
return 0;
|
|
64
|
+
console.log(c.bold('projects.all') +
|
|
65
|
+
': ' +
|
|
66
|
+
(s.all ? 'on (every project below is mapped at every start, except excluded ones)' : 'off') +
|
|
67
|
+
c.dim(' sandbox projects all on|off'));
|
|
68
|
+
console.log(c.bold('Roots') +
|
|
69
|
+
': ' +
|
|
70
|
+
(s.roots.length ? s.roots.join(', ') : c.dim('none (sandbox projects roots add <folder>)')));
|
|
71
|
+
if (!rows.length) {
|
|
72
|
+
console.log('No projects yet: start one with sandbox claude in its folder.');
|
|
73
|
+
return 0;
|
|
74
|
+
}
|
|
75
|
+
const width = Math.max(20, termWidth() - 46);
|
|
76
|
+
table([
|
|
77
|
+
['', 'FOLDER', 'AT START', 'RUNNING SANDBOX'],
|
|
78
|
+
...rows.map((r) => [
|
|
79
|
+
r.here ? '*' : '',
|
|
80
|
+
shortenMiddle(r.folder, width),
|
|
81
|
+
r.root ? 'root' : r.excluded ? 'excluded' : r.mappedAtStart ? 'mapped' : '-',
|
|
82
|
+
r.running ?? '-',
|
|
83
|
+
]),
|
|
84
|
+
]);
|
|
85
|
+
console.log(c.dim('* = this folder. Choose with: sandbox projects choose'));
|
|
86
|
+
return 0;
|
|
87
|
+
}
|
|
88
|
+
/** Ticks the projects mapped at every start (turns projects.all on when any is ticked); the rest are excluded. */
|
|
89
|
+
async function choose(ctx) {
|
|
90
|
+
const rows = projectRows(ctx).filter((r) => !r.root);
|
|
91
|
+
if (!rows.length) {
|
|
92
|
+
console.log('No projects to choose from yet (projects in a root are always mapped with it). Start one with sandbox claude in its folder.');
|
|
93
|
+
return 0;
|
|
94
|
+
}
|
|
95
|
+
if (!process.stdin.isTTY)
|
|
96
|
+
fail('sandbox projects choose needs an interactive terminal.', 'Use sandbox projects include|exclude <folder> instead.');
|
|
97
|
+
const s = settings(ctx);
|
|
98
|
+
const picked = await checkbox({
|
|
99
|
+
message: 'Projects mapped at every start, so they open without a restart (every agent in the sandbox can see them):',
|
|
100
|
+
pageSize: pageSizeFor(rows.length),
|
|
101
|
+
choices: rows.map((r) => ({
|
|
102
|
+
value: r.folder,
|
|
103
|
+
name: shortenMiddle(r.folder, termWidth() - 12) + (r.here ? c.dim(' (this folder)') : ''),
|
|
104
|
+
checked: s.all && !r.excluded,
|
|
105
|
+
})),
|
|
106
|
+
});
|
|
107
|
+
const exclude = rows.filter((r) => !picked.includes(r.folder)).map((r) => r.folder);
|
|
108
|
+
setSetting(ctx, ['projects', 'exclude'], [...s.exclude.filter((e) => !rows.some((r) => r.folder.toLowerCase() === e.toLowerCase())), ...exclude]);
|
|
109
|
+
setSetting(ctx, ['projects', 'all'], picked.length > 0);
|
|
110
|
+
console.log(picked.length + ' project(s) mapped at every start, ' + exclude.length + ' excluded. ' + NEXT_START + runningNote());
|
|
111
|
+
return 0;
|
|
112
|
+
}
|
|
113
|
+
function add(ctx, value) {
|
|
114
|
+
const dir = checkFolder(ctx, value, 'a project');
|
|
115
|
+
new KnownProjects(ctx.storageRoot).remember(dir);
|
|
116
|
+
console.log('Added ' +
|
|
117
|
+
dir +
|
|
118
|
+
' to your projects.' +
|
|
119
|
+
(settings(ctx).all
|
|
120
|
+
? ' ' + NEXT_START
|
|
121
|
+
: ' It is mapped at every start once projects.all is on (sandbox projects all on).'));
|
|
122
|
+
return 0;
|
|
123
|
+
}
|
|
124
|
+
function remove(ctx, value) {
|
|
125
|
+
const dir = path.resolve(value);
|
|
126
|
+
const forgot = new KnownProjects(ctx.storageRoot).forget(dir);
|
|
127
|
+
// The running sandbox forgets it too (its folder stays visible until the sandbox stops, if it was mapped).
|
|
128
|
+
const registered = isSandboxRunning()
|
|
129
|
+
? new ProjectRegistry(ctx.storageRoot)
|
|
130
|
+
.read()
|
|
131
|
+
?.projects.find((p) => !p.primary && p.host.toLowerCase() === dir.toLowerCase())
|
|
132
|
+
: undefined;
|
|
133
|
+
if (registered)
|
|
134
|
+
projectMapper({ storageRoot: ctx.storageRoot, packageRoot: ctx.packageRoot, wsbShare: false }).unregister(registered.name);
|
|
135
|
+
console.log(forgot || registered
|
|
136
|
+
? 'Removed ' + dir + ' from your projects (nothing in the folder was touched).'
|
|
137
|
+
: dir + ' was not in your projects.');
|
|
138
|
+
return 0;
|
|
139
|
+
}
|
|
140
|
+
function includeOrExclude(ctx, action, value) {
|
|
141
|
+
const dir = path.resolve(value);
|
|
142
|
+
const changed = action === 'exclude'
|
|
143
|
+
? addToList(ctx, ['projects', 'exclude'], dir)
|
|
144
|
+
: removeFromList(ctx, ['projects', 'exclude'], dir);
|
|
145
|
+
if (action === 'include')
|
|
146
|
+
new KnownProjects(ctx.storageRoot).remember(dir);
|
|
147
|
+
console.log((changed ? (action === 'exclude' ? 'Excluded ' : 'Included ') + dir + '. ' + NEXT_START : 'Nothing changed.') +
|
|
148
|
+
(action === 'include' && !settings(ctx).all
|
|
149
|
+
? ' projects.all is off: sandbox projects all on maps your projects at every start.'
|
|
150
|
+
: '') +
|
|
151
|
+
(changed ? runningNote() : ''));
|
|
152
|
+
return 0;
|
|
153
|
+
}
|
|
154
|
+
function all(ctx, value) {
|
|
155
|
+
if (value === undefined) {
|
|
156
|
+
console.log('projects.all is ' + (settings(ctx).all ? 'on' : 'off') + '.');
|
|
157
|
+
return 0;
|
|
158
|
+
}
|
|
159
|
+
setSetting(ctx, ['projects', 'all'], value === 'on');
|
|
160
|
+
console.log('projects.all is ' +
|
|
161
|
+
value +
|
|
162
|
+
'. ' +
|
|
163
|
+
NEXT_START +
|
|
164
|
+
(value === 'on' ? ' Every agent in the sandbox can then see all of those projects.' : '') +
|
|
165
|
+
runningNote());
|
|
166
|
+
return 0;
|
|
167
|
+
}
|
|
168
|
+
function roots(ctx, value, folder) {
|
|
169
|
+
if (!value || value === 'list') {
|
|
170
|
+
const list = settings(ctx).roots;
|
|
171
|
+
console.log(list.length ? list.join('\n') : 'No project roots. Add one: sandbox projects roots add <folder>');
|
|
172
|
+
return 0;
|
|
173
|
+
}
|
|
174
|
+
if (value === 'add') {
|
|
175
|
+
const dir = checkFolder(ctx, folder, 'a project root');
|
|
176
|
+
const added = addToList(ctx, ['projects', 'roots'], dir);
|
|
177
|
+
console.log(added
|
|
178
|
+
? 'Added the project root ' +
|
|
179
|
+
dir +
|
|
180
|
+
': every project in it (also new ones) opens without a restart. Every agent in the sandbox can see all of them. ' +
|
|
181
|
+
NEXT_START +
|
|
182
|
+
runningNote()
|
|
183
|
+
: dir + ' is a root already.');
|
|
184
|
+
return 0;
|
|
185
|
+
}
|
|
186
|
+
const dir = path.resolve(folder);
|
|
187
|
+
console.log(removeFromList(ctx, ['projects', 'roots'], dir)
|
|
188
|
+
? 'Removed the project root ' + dir + '. ' + NEXT_START
|
|
189
|
+
: dir + ' was not a root.');
|
|
190
|
+
return 0;
|
|
191
|
+
}
|
|
192
|
+
export async function projects(ctx) {
|
|
193
|
+
const [action = 'list', value, folder] = ctx.options.positionals;
|
|
194
|
+
switch (action) {
|
|
195
|
+
case 'list':
|
|
196
|
+
return list(ctx);
|
|
197
|
+
case 'choose':
|
|
198
|
+
return choose(ctx);
|
|
199
|
+
case 'add':
|
|
200
|
+
return add(ctx, value);
|
|
201
|
+
case 'remove':
|
|
202
|
+
return remove(ctx, value);
|
|
203
|
+
case 'include':
|
|
204
|
+
case 'exclude':
|
|
205
|
+
return includeOrExclude(ctx, action, value);
|
|
206
|
+
case 'all':
|
|
207
|
+
return all(ctx, value);
|
|
208
|
+
case 'roots':
|
|
209
|
+
return roots(ctx, value, folder);
|
|
210
|
+
default:
|
|
211
|
+
return fail('Unknown projects action "' + action + '".');
|
|
212
|
+
}
|
|
213
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { SandboxStatus } from '../../../core/types.js';
|
|
2
|
+
import { type NeedsRestart } from '../../../host/projects/index.js';
|
|
3
|
+
import type { Context } from '../context.js';
|
|
4
|
+
import type { LaunchExtras, OpenSessionOptions } from '../launch/index.js';
|
|
5
|
+
import { type Joined } from './here.js';
|
|
6
|
+
/** What a restart needs from launch (launch imports this file, so it is handed in rather than imported). */
|
|
7
|
+
export interface Relauncher {
|
|
8
|
+
launch(ctx: Context, generateOnly: boolean, extras: LaunchExtras): Promise<number>;
|
|
9
|
+
readySandbox(dataPath: string): Promise<SandboxStatus>;
|
|
10
|
+
joinHere(ctx: Context, status: SandboxStatus, o?: {
|
|
11
|
+
noRestart?: boolean;
|
|
12
|
+
}): Promise<Joined>;
|
|
13
|
+
openSession(ctx: Context, ready: SandboxStatus, joined: Joined, o: OpenSessionOptions): Promise<number>;
|
|
14
|
+
}
|
|
15
|
+
export declare function offerRestart(ctx: Context, needs: NeedsRestart[], then: () => Promise<number>, relauncher: Relauncher): Promise<number>;
|