windows-development-sandbox 1.4.1 → 1.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/config.example.json +3 -1
- package/dist/api.js +27 -16
- package/dist/cli/args.d.ts +4 -6
- package/dist/cli/args.js +67 -34
- package/dist/cli/argv.d.ts +9 -0
- package/dist/cli/argv.js +22 -0
- package/dist/cli/commands/accounts.d.ts +1 -1
- package/dist/cli/commands/accounts.js +42 -27
- package/dist/cli/commands/agent-commands.d.ts +3 -3
- package/dist/cli/commands/agent-commands.js +27 -18
- package/dist/cli/commands/context.d.ts +9 -11
- package/dist/cli/commands/context.js +35 -32
- package/dist/cli/commands/data/clean.d.ts +2 -2
- package/dist/cli/commands/data/clean.js +27 -11
- package/dist/cli/commands/data/collect.d.ts +6 -3
- package/dist/cli/commands/data/collect.js +46 -15
- package/dist/cli/commands/data/index.d.ts +2 -2
- package/dist/cli/commands/data/index.js +30 -12
- package/dist/cli/commands/data/remove.d.ts +1 -1
- package/dist/cli/commands/data/remove.js +4 -4
- package/dist/cli/commands/index.d.ts +5 -4
- package/dist/cli/commands/index.js +5 -4
- package/dist/cli/commands/launch/add-root.d.ts +7 -0
- package/dist/cli/commands/launch/add-root.js +64 -0
- package/dist/cli/commands/launch/boot-progress.d.ts +7 -0
- package/dist/cli/commands/launch/boot-progress.js +48 -0
- package/dist/cli/commands/launch/boot-wants.d.ts +11 -0
- package/dist/cli/commands/launch/boot-wants.js +48 -0
- package/dist/cli/commands/launch/first-start.d.ts +10 -0
- package/dist/cli/commands/launch/first-start.js +53 -0
- package/dist/cli/commands/launch/index.d.ts +6 -0
- package/dist/cli/commands/launch/index.js +6 -0
- package/dist/cli/commands/launch/launch.d.ts +8 -0
- package/dist/cli/commands/launch/launch.js +211 -0
- package/dist/cli/commands/launch/prepare.d.ts +23 -0
- package/dist/cli/commands/launch/prepare.js +109 -0
- package/dist/cli/commands/launch/running.d.ts +45 -0
- package/dist/cli/commands/launch/running.js +218 -0
- package/dist/cli/commands/launch/summary.d.ts +8 -0
- package/dist/cli/commands/launch/summary.js +98 -0
- package/dist/cli/commands/maintenance/audit.d.ts +3 -0
- package/dist/cli/commands/maintenance/audit.js +58 -0
- package/dist/cli/commands/maintenance/clean.d.ts +2 -0
- package/dist/cli/commands/maintenance/clean.js +10 -0
- package/dist/cli/commands/maintenance/config.d.ts +2 -0
- package/dist/cli/commands/maintenance/config.js +145 -0
- package/dist/cli/commands/maintenance/doctor.d.ts +2 -0
- package/dist/cli/commands/maintenance/doctor.js +52 -0
- package/dist/cli/commands/maintenance/host-claude.d.ts +2 -0
- package/dist/cli/commands/maintenance/host-claude.js +4 -0
- package/dist/cli/commands/maintenance/index.d.ts +8 -0
- package/dist/cli/commands/maintenance/index.js +9 -0
- package/dist/cli/commands/maintenance/logs.d.ts +2 -0
- package/dist/cli/commands/maintenance/logs.js +44 -0
- package/dist/cli/commands/maintenance/sync.d.ts +2 -0
- package/dist/cli/commands/maintenance/sync.js +12 -0
- package/dist/cli/commands/maintenance/watch.d.ts +3 -0
- package/dist/cli/commands/maintenance/watch.js +6 -0
- package/dist/cli/commands/projects/describe-sessions.d.ts +3 -0
- package/dist/cli/commands/projects/describe-sessions.js +15 -0
- package/dist/cli/commands/projects/here.d.ts +38 -0
- package/dist/cli/commands/projects/here.js +145 -0
- package/dist/cli/commands/projects/index.d.ts +4 -0
- package/dist/cli/commands/projects/index.js +4 -0
- package/dist/cli/commands/projects/projects.d.ts +14 -0
- package/dist/cli/commands/projects/projects.js +213 -0
- package/dist/cli/commands/projects/restart.d.ts +15 -0
- package/dist/cli/commands/projects/restart.js +149 -0
- package/dist/cli/commands/registry.d.ts +3 -0
- package/dist/cli/commands/registry.js +34 -0
- package/dist/cli/commands/repair/checks.js +105 -29
- package/dist/cli/commands/repair/finders.d.ts +13 -10
- package/dist/cli/commands/repair/finders.js +63 -43
- package/dist/cli/commands/repair/index.d.ts +4 -4
- package/dist/cli/commands/repair/index.js +47 -21
- package/dist/cli/commands/repair/types.d.ts +2 -2
- package/dist/cli/commands/repair/types.js +7 -2
- package/dist/cli/commands/sessions/attach.d.ts +2 -0
- package/dist/cli/commands/sessions/attach.js +45 -0
- package/dist/cli/commands/sessions/control.d.ts +4 -0
- package/dist/cli/commands/sessions/control.js +62 -0
- package/dist/cli/commands/sessions/exec.d.ts +6 -0
- package/dist/cli/commands/sessions/exec.js +72 -0
- package/dist/cli/commands/sessions/index.d.ts +6 -0
- package/dist/cli/commands/sessions/index.js +9 -0
- package/dist/cli/commands/sessions/list.d.ts +15 -0
- package/dist/cli/commands/sessions/list.js +65 -0
- package/dist/cli/commands/sessions/status.d.ts +2 -0
- package/dist/cli/commands/sessions/status.js +153 -0
- package/dist/cli/commands/sessions/window.d.ts +3 -0
- package/dist/cli/commands/sessions/window.js +18 -0
- package/dist/cli/commands/setup/checks.d.ts +4 -4
- package/dist/cli/commands/setup/checks.js +36 -19
- package/dist/cli/commands/setup/facts.d.ts +6 -6
- package/dist/cli/commands/setup/facts.js +23 -11
- package/dist/cli/commands/setup/index.d.ts +1 -1
- package/dist/cli/commands/setup/index.js +25 -12
- package/dist/cli/commands/user-config.d.ts +5 -5
- package/dist/cli/commands/user-config.js +14 -12
- package/dist/cli/history.d.ts +5 -4
- package/dist/cli/history.js +23 -11
- package/dist/cli/index.d.ts +4 -14
- package/dist/cli/index.js +27 -77
- package/dist/cli/manifest.d.ts +464 -10
- package/dist/cli/manifest.js +327 -53
- package/dist/cli/menu/apps.d.ts +7 -5
- package/dist/cli/menu/apps.js +64 -16
- package/dist/cli/menu/command-fields.d.ts +15 -0
- package/dist/cli/menu/command-fields.js +23 -0
- package/dist/cli/menu/command-form.d.ts +3 -5
- package/dist/cli/menu/command-form.js +116 -48
- package/dist/cli/menu/home.d.ts +22 -0
- package/dist/cli/menu/home.js +72 -0
- package/dist/cli/menu/index.d.ts +2 -24
- package/dist/cli/menu/index.js +4 -178
- package/dist/cli/menu/menu.d.ts +23 -0
- package/dist/cli/menu/menu.js +185 -0
- package/dist/cli/menu/settings/categories.d.ts +2 -2
- package/dist/cli/menu/settings/categories.js +123 -20
- package/dist/cli/menu/settings/collections/collection-editor.d.ts +23 -0
- package/dist/cli/menu/settings/collections/collection-editor.js +89 -0
- package/dist/cli/menu/settings/collections/map-editor.d.ts +10 -0
- package/dist/cli/menu/settings/collections/map-editor.js +34 -0
- package/dist/cli/menu/settings/collections/object-list-editor.d.ts +10 -0
- package/dist/cli/menu/settings/collections/object-list-editor.js +23 -0
- package/dist/cli/menu/settings/collections/object-map-editor.d.ts +10 -0
- package/dist/cli/menu/settings/collections/object-map-editor.js +35 -0
- package/dist/cli/menu/settings/collections/string-list-editor.d.ts +12 -0
- package/dist/cli/menu/settings/collections/string-list-editor.js +39 -0
- package/dist/cli/menu/settings/config-file.d.ts +2 -2
- package/dist/cli/menu/settings/config-file.js +42 -19
- package/dist/cli/menu/settings/editor-actions.d.ts +2 -0
- package/dist/cli/menu/settings/editor-actions.js +2 -0
- package/dist/cli/menu/settings/format.d.ts +5 -0
- package/dist/cli/menu/settings/format.js +39 -0
- package/dist/cli/menu/settings/index.d.ts +1 -29
- package/dist/cli/menu/settings/index.js +1 -133
- package/dist/cli/menu/settings/object-editor.d.ts +12 -0
- package/dist/cli/menu/settings/object-editor.js +86 -0
- package/dist/cli/menu/settings/schema-node.d.ts +3 -1
- package/dist/cli/menu/settings/schema-node.js +71 -24
- package/dist/cli/menu/settings/settings-editor.d.ts +30 -0
- package/dist/cli/menu/settings/settings-editor.js +176 -0
- package/dist/cli/menu/settings/{editors.d.ts → value-editor.d.ts} +2 -13
- package/dist/cli/menu/settings/value-editor.js +137 -0
- package/dist/cli/menu/several.d.ts +4 -4
- package/dist/cli/menu/several.js +61 -20
- package/dist/cli/{colors.d.ts → output/colors.d.ts} +8 -8
- package/dist/cli/{colors.js → output/colors.js} +32 -14
- package/dist/cli/output/index.d.ts +3 -0
- package/dist/cli/output/index.js +3 -0
- package/dist/cli/output/print.d.ts +5 -0
- package/dist/cli/output/print.js +14 -0
- package/dist/cli/{progress.d.ts → output/progress.d.ts} +5 -5
- package/dist/cli/{progress.js → output/progress.js} +42 -19
- package/dist/cli/report.d.ts +2 -0
- package/dist/cli/report.js +20 -0
- package/dist/cli/tui/app.d.ts +6 -16
- package/dist/cli/tui/app.js +28 -8
- package/dist/cli/tui/dialogs/confirm-screen.d.ts +20 -0
- package/dist/cli/tui/dialogs/confirm-screen.js +50 -0
- package/dist/cli/tui/dialogs/message-screen.d.ts +17 -0
- package/dist/cli/tui/dialogs/message-screen.js +55 -0
- package/dist/cli/tui/dialogs/paragraphs.d.ts +2 -0
- package/dist/cli/tui/dialogs/paragraphs.js +5 -0
- package/dist/cli/tui/dialogs/text-screen.d.ts +26 -0
- package/dist/cli/tui/dialogs/text-screen.js +107 -0
- package/dist/cli/tui/frame.js +3 -1
- package/dist/cli/tui/index.d.ts +7 -3
- package/dist/cli/tui/index.js +4 -2
- package/dist/cli/tui/list/list-screen.d.ts +29 -0
- package/dist/cli/tui/{list-screen.js → list/list-screen.js} +86 -23
- package/dist/cli/tui/{list-screen.d.ts → list/list-types.d.ts} +0 -28
- package/dist/cli/tui/screen.d.ts +14 -0
- package/dist/cli/tui/terminal.js +34 -10
- package/dist/cli/tui/text.d.ts +2 -1
- package/dist/cli/tui/text.js +37 -7
- package/dist/cli/tui/theme.js +27 -9
- package/dist/cli/validate.d.ts +8 -8
- package/dist/cli/validate.js +32 -21
- package/dist/core/config/defaults.d.ts +2 -0
- package/dist/core/config/defaults.js +203 -0
- package/dist/core/config/index.d.ts +2 -0
- package/dist/core/config/index.js +3 -0
- package/dist/core/{config.d.ts → config/loader.d.ts} +1 -2
- package/dist/core/config/loader.js +47 -0
- package/dist/core/{detect-databases.js → detect/databases.js} +111 -23
- package/dist/core/detect/index.d.ts +4 -0
- package/dist/core/detect/index.js +4 -0
- package/dist/core/{detect-pwsh.d.ts → detect/pwsh.d.ts} +1 -1
- package/dist/core/{detect-pwsh.js → detect/pwsh.js} +25 -11
- package/dist/core/{detect-toolchains.d.ts → detect/toolchains.d.ts} +1 -1
- package/dist/core/{detect-toolchains.js → detect/toolchains.js} +42 -5
- package/dist/{guest/toolchains → core/detect}/versions.js +28 -12
- package/dist/core/disk.d.ts +2 -0
- package/dist/core/disk.js +46 -3
- package/dist/core/local-config/boot-wants.d.ts +45 -0
- package/dist/core/local-config/boot-wants.js +120 -0
- package/dist/core/local-config/file.d.ts +3 -0
- package/dist/core/local-config/file.js +16 -0
- package/dist/core/local-config/index.d.ts +5 -0
- package/dist/core/local-config/index.js +7 -0
- package/dist/core/{local-config.d.ts → local-config/overrides.d.ts} +3 -18
- package/dist/core/{local-config.js → local-config/overrides.js} +45 -52
- package/dist/core/local-config/policy.d.ts +19 -0
- package/dist/core/local-config/policy.js +45 -0
- package/dist/core/local-config/trust.d.ts +13 -0
- package/dist/core/local-config/trust.js +43 -0
- package/dist/core/package-info.d.ts +4 -0
- package/dist/core/package-info.js +13 -0
- package/dist/core/run/guest-workspace.d.ts +23 -0
- package/dist/core/run/guest-workspace.js +47 -0
- package/dist/core/run/index.d.ts +3 -0
- package/dist/core/run/index.js +3 -0
- package/dist/core/run/resolve-run.d.ts +3 -0
- package/dist/core/run/resolve-run.js +202 -0
- package/dist/core/run/versions.d.ts +13 -0
- package/dist/core/run/versions.js +65 -0
- package/dist/core/safe-paths.js +17 -5
- package/dist/core/schema/apps.d.ts +4 -4
- package/dist/core/schema/apps.js +55 -21
- package/dist/core/schema/common.d.ts +13 -10
- package/dist/core/schema/common.js +16 -10
- package/dist/core/schema/config.d.ts +15 -10
- package/dist/core/schema/config.js +78 -53
- package/dist/core/schema/databases.d.ts +4 -3
- package/dist/core/schema/databases.js +16 -12
- package/dist/core/schema/harness.d.ts +1 -1
- package/dist/core/schema/harness.js +17 -7
- package/dist/core/schema/index.d.ts +6 -0
- package/dist/core/schema/index.js +8 -0
- package/dist/core/schema/json-schema.js +10 -5
- package/dist/core/schema/profile.d.ts +4 -4
- package/dist/core/schema/profile.js +37 -17
- package/dist/core/schema/projects.d.ts +1 -1
- package/dist/core/schema/projects.js +16 -6
- package/dist/core/schema/sandbox.d.ts +11 -11
- package/dist/core/schema/sandbox.js +101 -37
- package/dist/core/schema/toolchains.d.ts +6 -1
- package/dist/core/schema/toolchains.js +84 -34
- package/dist/core/types.d.ts +19 -9
- package/dist/core/util/errors.d.ts +8 -0
- package/dist/core/util/errors.js +14 -0
- package/dist/core/util/fs.d.ts +8 -0
- package/dist/core/util/fs.js +40 -0
- package/dist/core/util/index.d.ts +7 -0
- package/dist/core/util/index.js +7 -0
- package/dist/core/util/jsonc.d.ts +6 -0
- package/dist/core/util/jsonc.js +25 -0
- package/dist/core/util/links.d.ts +10 -0
- package/dist/core/util/links.js +39 -0
- package/dist/core/util/paths.d.ts +7 -0
- package/dist/core/util/paths.js +33 -0
- package/dist/core/util/process.d.ts +15 -0
- package/dist/core/util/process.js +54 -0
- package/dist/core/util/text.d.ts +8 -0
- package/dist/core/util/text.js +8 -0
- package/dist/guest/{setup/agents.js → agents/agent-installer.js} +24 -4
- package/dist/guest/apps/after-install.d.ts +3 -0
- package/dist/guest/apps/after-install.js +47 -0
- package/dist/guest/apps/app-installer.d.ts +22 -0
- package/dist/guest/apps/app-installer.js +116 -0
- package/dist/guest/apps/find-exe.d.ts +5 -0
- package/dist/guest/apps/find-exe.js +41 -0
- package/dist/guest/apps/index.d.ts +3 -10
- package/dist/guest/apps/index.js +6 -206
- package/dist/guest/apps/resolvers.js +37 -9
- package/dist/guest/apps/shortcuts.d.ts +6 -0
- package/dist/guest/apps/shortcuts.js +28 -0
- package/dist/guest/apps/sources.d.ts +4 -0
- package/dist/guest/apps/sources.js +17 -0
- package/dist/guest/apps/unpack.d.ts +3 -0
- package/dist/guest/apps/unpack.js +47 -0
- package/dist/guest/{audit-parse.js → audit/parse.js} +39 -3
- package/dist/guest/{audit.d.ts → audit/process-audit.d.ts} +3 -1
- package/dist/guest/{audit.js → audit/process-audit.js} +33 -8
- package/dist/guest/boot/boot-env.d.ts +4 -0
- package/dist/guest/{boot-env.js → boot/boot-env.js} +7 -5
- package/dist/guest/boot/boot.d.ts +1 -0
- package/dist/guest/{main.js → boot/boot.js} +96 -50
- package/dist/guest/{guide.js → boot/guide.js} +32 -7
- package/dist/guest/{project-env.d.ts → boot/project-env.d.ts} +3 -3
- package/dist/guest/{project-env.js → boot/project-env.js} +12 -4
- package/dist/guest/boot/project-status.d.ts +5 -0
- package/dist/guest/boot/project-status.js +28 -0
- package/dist/guest/daemon/daemon.d.ts +1 -0
- package/dist/guest/daemon/daemon.js +51 -0
- package/dist/guest/daemon/exec.js +18 -6
- package/dist/guest/daemon/{shutdown.js → idle-shutdown.js} +5 -4
- package/dist/guest/daemon/{project.d.ts → project-provisioner.d.ts} +3 -3
- package/dist/guest/daemon/{project.js → project-provisioner.js} +60 -22
- package/dist/guest/daemon/relays.js +5 -3
- package/dist/guest/daemon/{session.js → sessions.js} +84 -24
- package/dist/guest/daemon/state.d.ts +4 -1
- package/dist/guest/daemon/state.js +34 -20
- package/dist/guest/databases/database-server.d.ts +13 -0
- package/dist/guest/databases/database-server.js +35 -0
- package/dist/guest/databases/dynamodb.d.ts +12 -0
- package/dist/guest/databases/dynamodb.js +81 -0
- package/dist/guest/databases/index.d.ts +2 -0
- package/dist/guest/databases/index.js +2 -0
- package/dist/guest/databases/mongodb.d.ts +7 -0
- package/dist/guest/databases/mongodb.js +46 -0
- package/dist/guest/databases/mysql.d.ts +7 -0
- package/dist/guest/databases/mysql.js +59 -0
- package/dist/guest/databases/names.d.ts +5 -0
- package/dist/guest/databases/names.js +8 -0
- package/dist/guest/databases/postgres.d.ts +9 -0
- package/dist/guest/databases/postgres.js +85 -0
- package/dist/guest/databases/redis.d.ts +7 -0
- package/dist/guest/databases/redis.js +25 -0
- package/dist/guest/databases/registry.d.ts +5 -0
- package/dist/guest/databases/registry.js +51 -0
- package/dist/guest/databases/sbx-db.d.ts +1 -0
- package/dist/guest/{db.js → databases/sbx-db.js} +13 -13
- package/dist/guest/{toolchains/databases → databases}/server.d.ts +5 -5
- package/dist/guest/{toolchains/databases → databases}/server.js +18 -13
- package/dist/guest/entries/daemon.js +16 -0
- package/dist/guest/entries/db.js +10 -0
- package/dist/guest/entries/gitguard.js +20 -0
- package/dist/guest/entries/main.d.ts +1 -0
- package/dist/guest/entries/main.js +24 -0
- package/dist/guest/entries/netproxy.d.ts +1 -0
- package/dist/guest/entries/netproxy.js +7 -0
- package/dist/guest/entries/view.d.ts +1 -0
- package/dist/guest/entries/view.js +11 -0
- package/dist/guest/{gitguard.js → git/decision.js} +49 -26
- package/dist/guest/network/addresses.d.ts +2 -0
- package/dist/guest/network/addresses.js +6 -0
- package/dist/guest/{setup/network.d.ts → network/allow-only.d.ts} +0 -10
- package/dist/guest/network/allow-only.js +84 -0
- package/dist/guest/network/firewall.d.ts +9 -0
- package/dist/guest/{setup/network.js → network/firewall.js} +58 -63
- package/dist/guest/network/proxy-server.d.ts +2 -0
- package/dist/guest/{netproxy.js → network/proxy-server.js} +37 -18
- package/dist/guest/{helpers.d.ts → runtime/csc.d.ts} +1 -1
- package/dist/guest/{helpers.js → runtime/csc.js} +7 -2
- package/dist/guest/runtime/fs.d.ts +2 -0
- package/dist/guest/runtime/fs.js +6 -0
- package/dist/guest/runtime/log.d.ts +3 -0
- package/dist/guest/runtime/log.js +22 -0
- package/dist/guest/runtime/paths.d.ts +13 -0
- package/dist/guest/runtime/paths.js +14 -0
- package/dist/guest/{ports.js → runtime/ports.js} +8 -2
- package/dist/guest/runtime/process.d.ts +15 -0
- package/dist/guest/runtime/process.js +59 -0
- package/dist/guest/{project-context.js → runtime/project-context.js} +1 -1
- package/dist/guest/runtime/session.d.ts +5 -0
- package/dist/guest/runtime/session.js +10 -0
- package/dist/guest/runtime/status.d.ts +7 -0
- package/dist/guest/runtime/status.js +57 -0
- package/dist/guest/{cmdline.js → sessions/cmdline.js} +10 -4
- package/dist/guest/{ptyhost.js → sessions/pty-host.js} +12 -5
- package/dist/guest/{view.js → sessions/viewer.js} +8 -11
- package/dist/guest/setup/claude-mem.d.ts +10 -0
- package/dist/guest/setup/{claude.js → claude-mem.js} +18 -78
- package/dist/guest/setup/{claude.d.ts → claude-profile.d.ts} +0 -10
- package/dist/guest/setup/claude-profile.js +89 -0
- package/dist/guest/setup/desktop.d.ts +2 -0
- package/dist/guest/setup/desktop.js +32 -0
- package/dist/guest/setup/environment.js +28 -5
- package/dist/guest/setup/{user.d.ts → git-identity.d.ts} +0 -2
- package/dist/guest/setup/git-identity.js +34 -0
- package/dist/guest/{gitrules.d.ts → setup/git-rules.d.ts} +1 -1
- package/dist/guest/setup/git-rules.js +50 -0
- package/dist/guest/setup/hooks.js +22 -5
- package/dist/guest/setup/{policy.js → managed-policy.js} +2 -2
- package/dist/guest/toolchains/catalogue.d.ts +4 -4
- package/dist/guest/toolchains/catalogue.js +30 -7
- package/dist/guest/toolchains/detect.d.ts +12 -0
- package/dist/guest/toolchains/detect.js +54 -0
- package/dist/guest/toolchains/index.d.ts +3 -17
- package/dist/guest/toolchains/index.js +1 -106
- package/dist/guest/toolchains/install.d.ts +20 -0
- package/dist/guest/toolchains/install.js +29 -0
- package/dist/guest/toolchains/languages/go.d.ts +3 -0
- package/dist/guest/toolchains/{go.js → languages/go.js} +27 -9
- package/dist/guest/toolchains/languages/java.d.ts +8 -0
- package/dist/guest/toolchains/{java.js → languages/java.js} +57 -18
- package/dist/guest/toolchains/languages/node.d.ts +3 -0
- package/dist/guest/toolchains/{node.js → languages/node.js} +51 -18
- package/dist/guest/toolchains/languages/php.d.ts +3 -0
- package/dist/guest/toolchains/{scripting → languages}/php.js +36 -11
- package/dist/guest/toolchains/languages/python-tools.d.ts +3 -0
- package/dist/guest/toolchains/languages/python-tools.js +12 -0
- package/dist/guest/toolchains/languages/python.d.ts +3 -0
- package/dist/guest/toolchains/{python.js → languages/python.js} +29 -16
- package/dist/guest/toolchains/languages/ruby.d.ts +3 -0
- package/dist/guest/toolchains/{scripting → languages}/ruby.js +28 -10
- package/dist/guest/toolchains/leftovers.d.ts +1 -1
- package/dist/guest/toolchains/leftovers.js +13 -11
- package/dist/guest/toolchains/managers.d.ts +6 -6
- package/dist/guest/toolchains/managers.js +38 -17
- package/dist/guest/toolchains/native/binstall.d.ts +3 -2
- package/dist/guest/toolchains/native/binstall.js +20 -8
- package/dist/guest/toolchains/native/cpp.d.ts +2 -2
- package/dist/guest/toolchains/native/cpp.js +23 -8
- package/dist/guest/toolchains/native/dotnet.d.ts +5 -3
- package/dist/guest/toolchains/native/dotnet.js +72 -24
- package/dist/guest/toolchains/native/mesa.d.ts +2 -2
- package/dist/guest/toolchains/native/mesa.js +27 -10
- package/dist/guest/toolchains/native/msvc/environment.d.ts +4 -4
- package/dist/guest/toolchains/native/msvc/environment.js +30 -16
- package/dist/guest/toolchains/native/msvc/index.d.ts +3 -3
- package/dist/guest/toolchains/native/msvc/index.js +10 -8
- package/dist/guest/toolchains/native/msvc/packages.d.ts +1 -1
- package/dist/guest/toolchains/native/msvc/packages.js +69 -23
- package/dist/guest/toolchains/native/msvc/tree.d.ts +6 -6
- package/dist/guest/toolchains/native/msvc/tree.js +15 -9
- package/dist/guest/toolchains/native/rust-extras.d.ts +23 -0
- package/dist/guest/toolchains/native/rust-extras.js +100 -0
- package/dist/guest/toolchains/native/rust.d.ts +2 -2
- package/dist/guest/toolchains/native/rust.js +41 -10
- package/dist/guest/toolchains/{scripting → native}/vcruntime.d.ts +2 -2
- package/dist/guest/toolchains/{scripting → native}/vcruntime.js +17 -7
- package/dist/guest/toolchains/package-ledger.d.ts +17 -0
- package/dist/guest/toolchains/package-ledger.js +54 -0
- package/dist/guest/toolchains/plan.d.ts +3 -24
- package/dist/guest/toolchains/plan.js +99 -111
- package/dist/guest/toolchains/runtimes.d.ts +6 -6
- package/dist/guest/toolchains/runtimes.js +31 -13
- package/dist/guest/toolchains/scheduler.d.ts +22 -0
- package/dist/guest/toolchains/scheduler.js +123 -0
- package/dist/guest/toolchains/setup.d.ts +10 -0
- package/dist/guest/toolchains/setup.js +22 -0
- package/dist/guest/toolchains/state-file.d.ts +3 -0
- package/dist/guest/toolchains/state-file.js +10 -0
- package/dist/guest/toolchains/step.d.ts +24 -0
- package/dist/guest/toolchains/step.js +1 -0
- package/dist/guest/toolchains/tool-env.d.ts +12 -0
- package/dist/guest/toolchains/tool-env.js +16 -0
- package/dist/guest/toolchains/tools/cli.d.ts +10 -0
- package/dist/guest/toolchains/{cli.js → tools/cli.js} +35 -15
- package/dist/guest/toolchains/tools/git.d.ts +3 -0
- package/dist/guest/toolchains/{git.js → tools/git.js} +38 -15
- package/dist/guest/toolchains/tools/pwsh.d.ts +4 -0
- package/dist/guest/toolchains/{pwsh.js → tools/pwsh.js} +14 -7
- package/dist/guest/toolchains/{vscode-profile.d.ts → tools/vscode-profile.d.ts} +6 -6
- package/dist/guest/toolchains/{vscode-profile.js → tools/vscode-profile.js} +28 -12
- package/dist/guest/toolchains/{vscode.d.ts → tools/vscode.d.ts} +6 -6
- package/dist/guest/toolchains/{vscode.js → tools/vscode.js} +67 -21
- package/dist/guest/toolchains/version-cache.d.ts +16 -0
- package/dist/guest/toolchains/version-cache.js +67 -0
- package/dist/host/agent-commands/commands.d.ts +13 -0
- package/dist/host/agent-commands/commands.js +33 -0
- package/dist/host/agent-commands/forwarders.d.ts +7 -0
- package/dist/host/agent-commands/forwarders.js +31 -0
- package/dist/host/agent-commands/index.d.ts +4 -0
- package/dist/host/agent-commands/index.js +4 -0
- package/dist/host/agent-commands/reconcile.d.ts +12 -0
- package/dist/host/agent-commands/reconcile.js +69 -0
- package/dist/host/agent-commands/user-path.d.ts +2 -0
- package/dist/host/agent-commands/user-path.js +33 -0
- package/dist/host/audit/collect.d.ts +2 -2
- package/dist/host/audit/collect.js +59 -22
- package/dist/host/audit/log.d.ts +2 -2
- package/dist/host/audit/log.js +24 -8
- package/dist/host/{attach.d.ts → channel/attach.d.ts} +2 -2
- package/dist/host/{attach.js → channel/attach.js} +33 -15
- package/dist/host/channel/channel.d.ts +51 -0
- package/dist/host/channel/channel.js +196 -0
- package/dist/host/channel/index.d.ts +2 -0
- package/dist/host/channel/index.js +2 -0
- package/dist/host/guard/agent-files.d.ts +7 -0
- package/dist/host/guard/agent-files.js +103 -0
- package/dist/host/guard/commands.d.ts +10 -0
- package/dist/host/guard/commands.js +123 -0
- package/dist/host/guard/file-hash.d.ts +4 -0
- package/dist/host/guard/file-hash.js +37 -0
- package/dist/host/guard/git-config.d.ts +5 -0
- package/dist/host/guard/git-config.js +62 -0
- package/dist/host/guard/git-dirs.d.ts +12 -0
- package/dist/host/guard/git-dirs.js +53 -0
- package/dist/host/guard/index.d.ts +5 -0
- package/dist/host/guard/index.js +4 -0
- package/dist/host/guard/mark-of-the-web.d.ts +8 -0
- package/dist/host/guard/mark-of-the-web.js +74 -0
- package/dist/host/guard/nested-repos.d.ts +14 -0
- package/dist/host/guard/nested-repos.js +88 -0
- package/dist/host/guard/quarantine.d.ts +3 -0
- package/dist/host/guard/quarantine.js +24 -0
- package/dist/host/guard/repo-guard.d.ts +10 -0
- package/dist/host/guard/repo-guard.js +36 -0
- package/dist/host/guard/store.d.ts +40 -0
- package/dist/host/guard/store.js +145 -0
- package/dist/host/guard/types.d.ts +27 -0
- package/dist/host/guard/types.js +3 -0
- package/dist/host/guard/watch-state.d.ts +9 -0
- package/dist/host/guard/watch-state.js +26 -0
- package/dist/host/launch/boot-projects.d.ts +17 -0
- package/dist/host/launch/{projects.js → boot-projects.js} +22 -13
- package/dist/host/{database-plan.d.ts → launch/database-plan.d.ts} +5 -5
- package/dist/host/{database-plan.js → launch/database-plan.js} +24 -13
- package/dist/host/launch/generate.d.ts +4 -0
- package/dist/host/launch/generate.js +77 -0
- package/dist/host/launch/index.d.ts +10 -0
- package/dist/host/launch/index.js +10 -0
- package/dist/host/launch/mappings.d.ts +5 -5
- package/dist/host/launch/mappings.js +37 -24
- package/dist/host/launch/pc-scan.d.ts +5 -0
- package/dist/host/{pc-scan.js → launch/pc-scan.js} +20 -13
- package/dist/host/launch/project-scan.d.ts +7 -0
- package/dist/host/{project-scan.js → launch/project-scan.js} +29 -21
- package/dist/host/launch/session-file.d.ts +23 -0
- package/dist/host/launch/session-file.js +73 -0
- package/dist/host/launch/stage.d.ts +5 -5
- package/dist/host/launch/stage.js +14 -13
- package/dist/host/launch/toolchains.d.ts +4 -0
- package/dist/host/launch/toolchains.js +11 -0
- package/dist/host/launch/{wsb.d.ts → wsb-file.d.ts} +4 -2
- package/dist/host/launch/wsb-file.js +56 -0
- package/dist/host/life/crash-report.d.ts +8 -0
- package/dist/host/life/crash-report.js +87 -0
- package/dist/host/life/index.d.ts +6 -0
- package/dist/host/life/index.js +6 -0
- package/dist/host/life/keep-awake.d.ts +10 -0
- package/dist/host/life/keep-awake.js +29 -0
- package/dist/host/life/life-record.d.ts +48 -0
- package/dist/host/life/life-record.js +76 -0
- package/dist/host/life/stop-events.d.ts +27 -0
- package/dist/host/life/stop-events.js +96 -0
- package/dist/host/life/stop-warning.d.ts +4 -0
- package/dist/host/life/stop-warning.js +25 -0
- package/dist/host/life/windows-update.d.ts +3 -0
- package/dist/host/life/windows-update.js +11 -0
- package/dist/host/native.d.ts +4 -0
- package/dist/host/native.js +11 -0
- package/dist/host/network/index.d.ts +1 -0
- package/dist/host/network/index.js +1 -0
- package/dist/host/{port-forward.d.ts → network/port-forward.d.ts} +1 -1
- package/dist/host/{port-forward.js → network/port-forward.js} +16 -10
- package/dist/host/profile/accounts.d.ts +37 -0
- package/dist/host/profile/accounts.js +146 -0
- package/dist/host/profile/claude-login.d.ts +22 -0
- package/dist/host/profile/claude-login.js +57 -0
- package/dist/host/{claude-profile.d.ts → profile/claude-profile.d.ts} +9 -9
- package/dist/host/{claude-profile.js → profile/claude-profile.js} +32 -22
- package/dist/host/profile/index.d.ts +7 -0
- package/dist/host/profile/index.js +7 -0
- package/dist/host/profile/personalize.d.ts +2 -0
- package/dist/host/profile/personalize.js +127 -0
- package/dist/host/profile/reg-file.d.ts +8 -0
- package/dist/host/profile/reg-file.js +45 -0
- package/dist/host/profile/secret-files.d.ts +2 -0
- package/dist/host/profile/secret-files.js +25 -0
- package/dist/host/profile/secret-patterns.d.ts +6 -0
- package/dist/host/profile/secret-patterns.js +128 -0
- package/dist/host/profile/secrets.d.ts +12 -0
- package/dist/host/profile/secrets.js +100 -0
- package/dist/host/projects/index.d.ts +4 -0
- package/dist/host/projects/index.js +4 -0
- package/dist/host/{join.d.ts → projects/join.d.ts} +12 -9
- package/dist/host/{join.js → projects/join.js} +62 -33
- package/dist/host/projects/known.d.ts +28 -0
- package/dist/host/projects/known.js +55 -0
- package/dist/host/projects/mapper.d.ts +29 -0
- package/dist/host/projects/mapper.js +88 -0
- package/dist/host/projects/registry.d.ts +83 -0
- package/dist/host/projects/registry.js +136 -0
- package/dist/host/sandbox/doctor.d.ts +2 -0
- package/dist/host/sandbox/doctor.js +42 -0
- package/dist/host/sandbox/host-claude.d.ts +1 -0
- package/dist/host/sandbox/host-claude.js +26 -0
- package/dist/host/sandbox/index.d.ts +6 -0
- package/dist/host/sandbox/index.js +6 -0
- package/dist/host/{platform.d.ts → sandbox/platform.d.ts} +0 -5
- package/dist/host/sandbox/platform.js +60 -0
- package/dist/host/sandbox/probe.d.ts +3 -0
- package/dist/host/sandbox/probe.js +47 -0
- package/dist/host/{window.js → sandbox/window.js} +7 -5
- package/dist/host/{wsb.js → sandbox/wsb-cli.js} +31 -8
- package/dist/host/{cleanup.js → storage/cleanup.js} +27 -12
- package/dist/host/storage/index.d.ts +2 -0
- package/dist/host/storage/index.js +2 -0
- package/dist/host/storage/state-files.d.ts +4 -0
- package/dist/host/storage/state-files.js +10 -0
- package/dist/host/test-guard.js +1 -1
- package/dist/host/tools/conpty.d.ts +8 -0
- package/dist/host/tools/conpty.js +58 -0
- package/dist/host/tools/index.d.ts +2 -0
- package/dist/host/tools/index.js +2 -0
- package/dist/host/{terminal.d.ts → tools/windows-terminal.d.ts} +2 -10
- package/dist/host/{terminal.js → tools/windows-terminal.js} +33 -57
- package/dist/host/workspace-view/active-views.d.ts +3 -0
- package/dist/host/workspace-view/active-views.js +22 -0
- package/dist/host/workspace-view/index.d.ts +2 -18
- package/dist/host/workspace-view/index.js +2 -49
- package/dist/host/workspace-view/plan.d.ts +16 -0
- package/dist/host/workspace-view/plan.js +50 -0
- package/dist/host/workspace-view/rules.js +10 -3
- package/dist/host/workspace-view/view-state.d.ts +10 -0
- package/dist/host/workspace-view/view-state.js +31 -0
- package/dist/host/workspace-view/view.d.ts +1 -0
- package/dist/host/workspace-view/view.js +51 -55
- package/dist/runtime/daemon.js +4220 -1968
- package/dist/runtime/db.js +2134 -849
- package/dist/runtime/gitguard.js +29 -11
- package/dist/runtime/main.js +4687 -2243
- package/dist/runtime/netproxy.js +1644 -420
- package/dist/runtime/view.js +1356 -428
- package/dist/selftest/accounts.test.d.ts +1 -1
- package/dist/selftest/accounts.test.js +20 -17
- package/dist/selftest/agent-commands.test.d.ts +1 -1
- package/dist/selftest/agent-commands.test.js +9 -5
- package/dist/selftest/audit.test.d.ts +1 -1
- package/dist/selftest/audit.test.js +46 -13
- package/dist/selftest/channel.test.d.ts +1 -1
- package/dist/selftest/channel.test.js +63 -16
- package/dist/selftest/cli.test.d.ts +1 -1
- package/dist/selftest/cli.test.js +68 -16
- package/dist/selftest/cmdline.test.d.ts +1 -1
- package/dist/selftest/cmdline.test.js +36 -7
- package/dist/selftest/config.test.d.ts +1 -1
- package/dist/selftest/config.test.js +12 -5
- package/dist/selftest/data.test.d.ts +1 -1
- package/dist/selftest/data.test.js +35 -6
- package/dist/selftest/detect.test.d.ts +1 -1
- package/dist/selftest/detect.test.js +22 -9
- package/dist/selftest/generate.test.d.ts +1 -1
- package/dist/selftest/generate.test.js +33 -9
- package/dist/selftest/git-access.test.d.ts +1 -1
- package/dist/selftest/git-access.test.js +42 -4
- package/dist/selftest/guest-boot.test.d.ts +1 -1
- package/dist/selftest/guest-boot.test.js +25 -7
- package/dist/selftest/host-sim.test.d.ts +1 -1
- package/dist/selftest/host-sim.test.js +27 -3
- package/dist/selftest/hostile-input.test.d.ts +1 -1
- package/dist/selftest/hostile-input.test.js +5 -5
- package/dist/selftest/index.d.ts +1 -1
- package/dist/selftest/index.js +72 -16
- package/dist/selftest/layout.test.d.ts +2 -0
- package/dist/selftest/layout.test.js +131 -0
- package/dist/selftest/links.test.d.ts +1 -1
- package/dist/selftest/links.test.js +16 -11
- package/dist/selftest/live-daemon.test.d.ts +1 -1
- package/dist/selftest/live-daemon.test.js +20 -8
- package/dist/selftest/live-git.test.d.ts +1 -1
- package/dist/selftest/live-git.test.js +13 -4
- package/dist/selftest/live-network.test.d.ts +1 -1
- package/dist/selftest/live-network.test.js +24 -9
- package/dist/selftest/live-projects.test.d.ts +1 -1
- package/dist/selftest/live-projects.test.js +47 -20
- package/dist/selftest/live-terminal.test.d.ts +1 -1
- package/dist/selftest/live-terminal.test.js +41 -15
- package/dist/selftest/local-config.test.d.ts +1 -1
- package/dist/selftest/local-config.test.js +64 -16
- package/dist/selftest/mirror.test.d.ts +1 -1
- package/dist/selftest/mirror.test.js +102 -32
- package/dist/selftest/network.test.d.ts +1 -1
- package/dist/selftest/network.test.js +17 -8
- package/dist/selftest/personalization.test.d.ts +1 -1
- package/dist/selftest/personalization.test.js +12 -5
- package/dist/selftest/projects.test.d.ts +1 -1
- package/dist/selftest/projects.test.js +280 -85
- package/dist/selftest/repair.test.d.ts +1 -1
- package/dist/selftest/repair.test.js +17 -5
- package/dist/selftest/repo-guard.test.d.ts +1 -1
- package/dist/selftest/repo-guard.test.js +21 -20
- package/dist/selftest/secrets.test.d.ts +1 -1
- package/dist/selftest/secrets.test.js +57 -13
- package/dist/selftest/setup.test.d.ts +1 -1
- package/dist/selftest/setup.test.js +25 -5
- package/dist/selftest/{fixtures.d.ts → support/fixtures.d.ts} +5 -3
- package/dist/selftest/{fixtures.js → support/fixtures.js} +95 -17
- package/dist/selftest/{harness.js → support/harness.js} +24 -7
- package/dist/selftest/{live.d.ts → support/live.d.ts} +2 -2
- package/dist/selftest/{live.js → support/live.js} +34 -10
- package/dist/selftest/support/suite.js +1 -0
- package/dist/selftest/sync.test.d.ts +1 -1
- package/dist/selftest/sync.test.js +64 -26
- package/dist/selftest/test-guard.test.d.ts +1 -1
- package/dist/selftest/test-guard.test.js +43 -15
- package/dist/selftest/toolchains.test.d.ts +1 -1
- package/dist/selftest/toolchains.test.js +135 -36
- package/dist/selftest/workspace-view.test.d.ts +1 -1
- package/dist/selftest/workspace-view.test.js +48 -11
- package/dist/selftest/workspace.test.d.ts +1 -1
- package/dist/selftest/workspace.test.js +13 -4
- package/dist/shared/{apps.d.ts → apps/catalogue.d.ts} +1 -11
- package/dist/shared/apps/catalogue.js +768 -0
- package/dist/shared/apps/index.d.ts +2 -0
- package/dist/shared/apps/index.js +2 -0
- package/dist/shared/apps/selection.d.ts +11 -0
- package/dist/shared/apps/selection.js +40 -0
- package/dist/shared/channel/index.d.ts +2 -0
- package/dist/shared/channel/index.js +2 -0
- package/dist/shared/channel/run-dir.d.ts +30 -0
- package/dist/shared/channel/run-dir.js +84 -0
- package/dist/shared/{schema.d.ts → channel/schema.d.ts} +38 -21
- package/dist/shared/{schema.js → channel/schema.js} +62 -35
- package/dist/shared/download/archive.d.ts +13 -0
- package/dist/shared/download/archive.js +57 -0
- package/dist/shared/download/downloader.d.ts +35 -0
- package/dist/shared/download/downloader.js +110 -0
- package/dist/shared/download/github.d.ts +16 -0
- package/dist/shared/download/github.js +74 -0
- package/dist/shared/download/http.d.ts +5 -0
- package/dist/shared/download/http.js +30 -0
- package/dist/shared/download/index.d.ts +5 -0
- package/dist/shared/download/index.js +5 -0
- package/dist/shared/download/spawn.d.ts +2 -0
- package/dist/shared/download/spawn.js +7 -0
- package/dist/shared/io/index.d.ts +3 -0
- package/dist/shared/io/index.js +3 -0
- package/dist/shared/io/json-file.d.ts +10 -0
- package/dist/shared/io/json-file.js +21 -0
- package/dist/shared/io/json.d.ts +13 -0
- package/dist/shared/io/json.js +49 -0
- package/dist/shared/{safe-remove.js → io/safe-remove.js} +32 -7
- package/dist/shared/{netrules.js → network/firewall-rules.js} +36 -5
- package/dist/shared/network/index.d.ts +2 -0
- package/dist/shared/network/index.js +2 -0
- package/dist/shared/{netpolicy.js → network/policy.js} +66 -11
- package/dist/shared/{paths.js → paths/claude-paths.js} +12 -2
- package/dist/shared/{guest-paths.d.ts → paths/guest-paths.d.ts} +6 -12
- package/dist/shared/{guest-paths.js → paths/guest-paths.js} +53 -36
- package/dist/shared/paths/index.d.ts +3 -0
- package/dist/shared/paths/index.js +3 -0
- package/dist/shared/{projects.js → paths/projects.js} +13 -3
- package/dist/shared/pty/client.d.ts +21 -0
- package/dist/shared/pty/client.js +79 -0
- package/dist/shared/{console-input.js → pty/console-input.js} +26 -6
- package/dist/shared/pty/index.d.ts +6 -0
- package/dist/shared/pty/index.js +6 -0
- package/dist/shared/pty/input-joiner.d.ts +15 -0
- package/dist/shared/pty/input-joiner.js +44 -0
- package/dist/shared/pty/output-filter.d.ts +13 -0
- package/dist/shared/pty/output-filter.js +140 -0
- package/dist/shared/pty/protocol.d.ts +36 -0
- package/dist/shared/pty/protocol.js +60 -0
- package/dist/shared/pty/terminal.d.ts +24 -0
- package/dist/shared/pty/terminal.js +147 -0
- package/dist/shared/test-guard.js +3 -1
- package/dist/sync/claude-mem.d.ts +1 -1
- package/dist/sync/claude-mem.js +9 -4
- package/dist/sync/history.d.ts +1 -29
- package/dist/sync/history.js +57 -45
- package/dist/sync/index.d.ts +5 -0
- package/dist/sync/index.js +5 -0
- package/dist/sync/sync-cycle.d.ts +18 -0
- package/dist/sync/sync-cycle.js +85 -0
- package/dist/sync/sync-state.d.ts +32 -0
- package/dist/sync/sync-state.js +37 -0
- package/dist/sync/watcher.d.ts +0 -18
- package/dist/sync/watcher.js +66 -100
- package/native/keep-awake.ps1 +8 -0
- package/native/power.cs +23 -0
- package/native/stop-events.ps1 +38 -0
- package/package.json +11 -3
- package/sandbox/linkgate.cs +98 -0
- package/sandbox/memlog.ps1 +15 -6
- package/schemas/config.schema.json +34 -1
- package/schemas/sandbox-config.schema.json +34 -1
- package/dist/cli/boot-progress.d.ts +0 -22
- package/dist/cli/boot-progress.js +0 -59
- package/dist/cli/commands/launch.d.ts +0 -32
- package/dist/cli/commands/launch.js +0 -421
- package/dist/cli/commands/maintenance.d.ts +0 -10
- package/dist/cli/commands/maintenance.js +0 -220
- package/dist/cli/commands/project.d.ts +0 -33
- package/dist/cli/commands/project.js +0 -102
- package/dist/cli/commands/projects.d.ts +0 -14
- package/dist/cli/commands/projects.js +0 -146
- package/dist/cli/commands/restart.d.ts +0 -6
- package/dist/cli/commands/restart.js +0 -95
- package/dist/cli/commands/sessions.d.ts +0 -12
- package/dist/cli/commands/sessions.js +0 -258
- package/dist/cli/menu/settings/editors.js +0 -305
- package/dist/cli/tui/dialogs.d.ts +0 -57
- package/dist/cli/tui/dialogs.js +0 -162
- package/dist/core/config.js +0 -109
- package/dist/core/project-policy.d.ts +0 -62
- package/dist/core/project-policy.js +0 -121
- package/dist/core/schema.d.ts +0 -6
- package/dist/core/schema.js +0 -8
- package/dist/core/util.d.ts +0 -62
- package/dist/core/util.js +0 -156
- package/dist/core/workspace.d.ts +0 -35
- package/dist/core/workspace.js +0 -206
- package/dist/guest/boot-env.d.ts +0 -4
- package/dist/guest/daemon.js +0 -57
- package/dist/guest/env.d.ts +0 -56
- package/dist/guest/env.js +0 -115
- package/dist/guest/gitrules.js +0 -11
- package/dist/guest/project-status.d.ts +0 -5
- package/dist/guest/project-status.js +0 -17
- package/dist/guest/setup/user.js +0 -51
- package/dist/guest/toolchains/cli.d.ts +0 -10
- package/dist/guest/toolchains/common.d.ts +0 -54
- package/dist/guest/toolchains/common.js +0 -147
- package/dist/guest/toolchains/databases/dynamodb.d.ts +0 -8
- package/dist/guest/toolchains/databases/dynamodb.js +0 -52
- package/dist/guest/toolchains/databases/index.d.ts +0 -6
- package/dist/guest/toolchains/databases/index.js +0 -62
- package/dist/guest/toolchains/databases/mongodb.d.ts +0 -3
- package/dist/guest/toolchains/databases/mongodb.js +0 -31
- package/dist/guest/toolchains/databases/mysql.d.ts +0 -3
- package/dist/guest/toolchains/databases/mysql.js +0 -38
- package/dist/guest/toolchains/databases/postgres.d.ts +0 -5
- package/dist/guest/toolchains/databases/postgres.js +0 -38
- package/dist/guest/toolchains/databases/redis.d.ts +0 -3
- package/dist/guest/toolchains/databases/redis.js +0 -16
- package/dist/guest/toolchains/git.d.ts +0 -3
- package/dist/guest/toolchains/go.d.ts +0 -3
- package/dist/guest/toolchains/java.d.ts +0 -8
- package/dist/guest/toolchains/node.d.ts +0 -3
- package/dist/guest/toolchains/pwsh.d.ts +0 -4
- package/dist/guest/toolchains/python.d.ts +0 -3
- package/dist/guest/toolchains/scripting/php.d.ts +0 -3
- package/dist/guest/toolchains/scripting/ruby.d.ts +0 -3
- package/dist/host/accounts.d.ts +0 -32
- package/dist/host/accounts.js +0 -128
- package/dist/host/agent-commands.d.ts +0 -25
- package/dist/host/agent-commands.js +0 -145
- package/dist/host/channel.d.ts +0 -38
- package/dist/host/channel.js +0 -163
- package/dist/host/generate.d.ts +0 -13
- package/dist/host/generate.js +0 -115
- package/dist/host/launch/projects.d.ts +0 -17
- package/dist/host/launch/wsb.js +0 -34
- package/dist/host/motw.d.ts +0 -17
- package/dist/host/motw.js +0 -74
- package/dist/host/pc-scan.d.ts +0 -6
- package/dist/host/personalize.d.ts +0 -10
- package/dist/host/personalize.js +0 -97
- package/dist/host/platform.js +0 -129
- package/dist/host/project-scan.d.ts +0 -7
- package/dist/host/projects.d.ts +0 -123
- package/dist/host/projects.js +0 -196
- package/dist/host/repo-guard.d.ts +0 -43
- package/dist/host/repo-guard.js +0 -347
- package/dist/host/secrets.d.ts +0 -14
- package/dist/host/secrets.js +0 -133
- package/dist/host/stops.d.ts +0 -67
- package/dist/host/stops.js +0 -126
- package/dist/shared/apps.js +0 -114
- package/dist/shared/download.d.ts +0 -63
- package/dist/shared/download.js +0 -238
- package/dist/shared/pty-client.d.ts +0 -108
- package/dist/shared/pty-client.js +0 -406
- package/dist/shared/rundir.d.ts +0 -41
- package/dist/shared/rundir.js +0 -96
- /package/dist/{guest/daemon.d.ts → cli/tui/list/list-types.js} +0 -0
- /package/dist/{guest/db.d.ts → cli/tui/screen.js} +0 -0
- /package/dist/core/{detect-databases.d.ts → detect/databases.d.ts} +0 -0
- /package/dist/{guest/toolchains → core/detect}/versions.d.ts +0 -0
- /package/dist/guest/{setup/agents.d.ts → agents/agent-installer.d.ts} +0 -0
- /package/dist/guest/{audit-parse.d.ts → audit/parse.d.ts} +0 -0
- /package/dist/guest/{guide.d.ts → boot/guide.d.ts} +0 -0
- /package/dist/guest/daemon/{shutdown.d.ts → idle-shutdown.d.ts} +0 -0
- /package/dist/guest/daemon/{session.d.ts → sessions.d.ts} +0 -0
- /package/dist/guest/{main.d.ts → entries/daemon.d.ts} +0 -0
- /package/dist/guest/{netproxy.d.ts → entries/db.d.ts} +0 -0
- /package/dist/{selftest/suite.js → guest/entries/gitguard.d.ts} +0 -0
- /package/dist/guest/{gitguard.d.ts → git/decision.d.ts} +0 -0
- /package/dist/guest/{ports.d.ts → runtime/ports.d.ts} +0 -0
- /package/dist/guest/{project-context.d.ts → runtime/project-context.d.ts} +0 -0
- /package/dist/guest/{cmdline.d.ts → sessions/cmdline.d.ts} +0 -0
- /package/dist/guest/{ptyhost.d.ts → sessions/pty-host.d.ts} +0 -0
- /package/dist/guest/{view.d.ts → sessions/viewer.d.ts} +0 -0
- /package/dist/guest/setup/{policy.d.ts → managed-policy.d.ts} +0 -0
- /package/dist/host/{window.d.ts → sandbox/window.d.ts} +0 -0
- /package/dist/host/{wsb.d.ts → sandbox/wsb-cli.d.ts} +0 -0
- /package/dist/host/{cleanup.d.ts → storage/cleanup.d.ts} +0 -0
- /package/dist/selftest/{harness.d.ts → support/harness.d.ts} +0 -0
- /package/dist/selftest/{suite.d.ts → support/suite.d.ts} +0 -0
- /package/dist/shared/{safe-remove.d.ts → io/safe-remove.d.ts} +0 -0
- /package/dist/shared/{netrules.d.ts → network/firewall-rules.d.ts} +0 -0
- /package/dist/shared/{netpolicy.d.ts → network/policy.d.ts} +0 -0
- /package/dist/shared/{paths.d.ts → paths/claude-paths.d.ts} +0 -0
- /package/dist/shared/{projects.d.ts → paths/projects.d.ts} +0 -0
- /package/dist/shared/{console-input.d.ts → pty/console-input.d.ts} +0 -0
|
@@ -6,32 +6,51 @@ import { spawnSync } from 'node:child_process';
|
|
|
6
6
|
import _ from 'lodash';
|
|
7
7
|
import { GB, freeBytesAt, humanBytes } from '../../../core/disk.js';
|
|
8
8
|
import { assertTestWritable } from '../../../shared/test-guard.js';
|
|
9
|
-
import { assertNoLinks, fileExists, isLink, isWin, removeLink } from '../../../core/util.js';
|
|
10
|
-
import {
|
|
11
|
-
import { sandboxFeatureInstalled } from '../../../host/
|
|
12
|
-
import {
|
|
9
|
+
import { assertNoLinks, fileExists, isLink, isWin, removeLink } from '../../../core/util/index.js';
|
|
10
|
+
import { SandboxChannel } from '../../../host/channel/index.js';
|
|
11
|
+
import { sandboxFeatureInstalled } from '../../../host/sandbox/index.js';
|
|
12
|
+
import { RunDir } from '../../../shared/channel/index.js';
|
|
13
13
|
import { removeTree } from '../data/remove.js';
|
|
14
|
-
import { deadPidFiles, findHalfInstalled, findLinks, findStagingLeftovers, globalPackages, resolvedVersionsValid } from './finders.js';
|
|
14
|
+
import { deadPidFiles, findHalfInstalled, findLinks, findStagingLeftovers, globalPackages, resolvedVersionsValid, } from './finders.js';
|
|
15
15
|
import { ok, whileRunning } from './types.js';
|
|
16
|
-
|
|
16
|
+
function rel(root, p) {
|
|
17
|
+
return path.relative(root, p) || '.';
|
|
18
|
+
}
|
|
17
19
|
/** Fails (throws) unless every folder from the data folder to `p` is real. */
|
|
18
|
-
|
|
20
|
+
function guard(env, p) {
|
|
21
|
+
assertNoLinks(path.dirname(env.dataPath), p);
|
|
22
|
+
}
|
|
19
23
|
export const CHECKS = [
|
|
20
24
|
{
|
|
21
25
|
name: 'Config file',
|
|
22
|
-
run: (env) =>
|
|
23
|
-
? {
|
|
24
|
-
|
|
26
|
+
run: (env) => env.configError
|
|
27
|
+
? {
|
|
28
|
+
status: 'needs-you',
|
|
29
|
+
detail: env.configError.message +
|
|
30
|
+
(env.configError.fix ? ' ' + env.configError.fix : '') +
|
|
31
|
+
' (repair never rewrites your config; built-in defaults were used for the other checks.)',
|
|
32
|
+
}
|
|
33
|
+
: ok(env.ctx.loaded.configPath ? env.ctx.loaded.configPath + ' is valid.' : 'none; using the built-in defaults.'),
|
|
25
34
|
},
|
|
26
35
|
{
|
|
27
36
|
name: 'Windows Sandbox feature',
|
|
28
|
-
run: () =>
|
|
37
|
+
run: () => sandboxFeatureInstalled()
|
|
38
|
+
? ok('enabled.')
|
|
39
|
+
: {
|
|
40
|
+
status: 'needs-you',
|
|
41
|
+
detail: (isWin ? 'Windows Sandbox is not turned on.' : 'This is not Windows.') +
|
|
42
|
+
' Run: sandbox setup (it checks this PC and offers to turn it on).',
|
|
43
|
+
},
|
|
29
44
|
},
|
|
30
45
|
{
|
|
31
46
|
name: 'Links in the data folder',
|
|
32
47
|
run: (env) => {
|
|
33
48
|
if (isLink(env.dataPath))
|
|
34
|
-
return {
|
|
49
|
+
return {
|
|
50
|
+
status: 'needs-you',
|
|
51
|
+
detail: env.dataPath +
|
|
52
|
+
' itself is a link or junction. agent-sandbox refuses to work through links; point storage.root at the real folder instead (sandbox config path).',
|
|
53
|
+
};
|
|
35
54
|
// A running sandbox can swap folders for links while we look; only check a stopped one.
|
|
36
55
|
if (env.running)
|
|
37
56
|
return whileRunning;
|
|
@@ -44,7 +63,13 @@ export const CHECKS = [
|
|
|
44
63
|
guard(env, path.dirname(link));
|
|
45
64
|
removeLink(link);
|
|
46
65
|
}
|
|
47
|
-
return {
|
|
66
|
+
return {
|
|
67
|
+
status: 'fixed',
|
|
68
|
+
detail: 'removed ' +
|
|
69
|
+
links.length +
|
|
70
|
+
' link(s)/junction(s) the sandbox created, without following them: ' +
|
|
71
|
+
links.map((l) => rel(env.dataPath, l)).join(', '),
|
|
72
|
+
};
|
|
48
73
|
},
|
|
49
74
|
},
|
|
50
75
|
{
|
|
@@ -52,18 +77,29 @@ export const CHECKS = [
|
|
|
52
77
|
run: (env) => {
|
|
53
78
|
if (env.running)
|
|
54
79
|
return ok('a sandbox is running; its state is in use.');
|
|
55
|
-
if (isLink(
|
|
56
|
-
|
|
80
|
+
if (isLink(new RunDir(env.dataPath).root)) {
|
|
81
|
+
new SandboxChannel(env.dataPath).reset();
|
|
57
82
|
return { status: 'fixed', detail: 'the run folder was a link; removed the link itself.' };
|
|
58
83
|
}
|
|
59
|
-
// The last sandbox's status file is normal after it closes; sessions still marked running or unanswered requests
|
|
60
|
-
|
|
61
|
-
const
|
|
84
|
+
// The last sandbox's status file is normal after it closes; sessions still marked running or unanswered requests
|
|
85
|
+
// are not.
|
|
86
|
+
const ghosts = new RunDir(env.dataPath)
|
|
87
|
+
.listSessions()
|
|
88
|
+
.filter((s) => s.phase === 'running' || s.phase === 'starting').length;
|
|
89
|
+
const requests = new RunDir(env.dataPath).scanRequests();
|
|
62
90
|
const pending = requests.valid.length + requests.invalid.length;
|
|
63
91
|
if (!ghosts && !pending)
|
|
64
92
|
return ok('clean.');
|
|
65
|
-
|
|
66
|
-
return {
|
|
93
|
+
new SandboxChannel(env.dataPath).reset();
|
|
94
|
+
return {
|
|
95
|
+
status: 'fixed',
|
|
96
|
+
detail: 'no sandbox is running, but ' +
|
|
97
|
+
_.compact([
|
|
98
|
+
ghosts && ghosts + ' session(s) were still marked running',
|
|
99
|
+
pending && pending + ' request(s) were never answered',
|
|
100
|
+
]).join(' and ') +
|
|
101
|
+
'; cleared the run state so status/attach do not show ghosts.',
|
|
102
|
+
};
|
|
67
103
|
},
|
|
68
104
|
},
|
|
69
105
|
{
|
|
@@ -76,7 +112,10 @@ export const CHECKS = [
|
|
|
76
112
|
return ok('a sandbox is running; kept.');
|
|
77
113
|
assertTestWritable(file);
|
|
78
114
|
fs.rmSync(file, { force: true });
|
|
79
|
-
return {
|
|
115
|
+
return {
|
|
116
|
+
status: 'fixed',
|
|
117
|
+
detail: 'removed the saved hidden-window list from a sandbox that is no longer running.',
|
|
118
|
+
};
|
|
80
119
|
},
|
|
81
120
|
},
|
|
82
121
|
{
|
|
@@ -89,7 +128,12 @@ export const CHECKS = [
|
|
|
89
128
|
assertTestWritable(f);
|
|
90
129
|
fs.rmSync(f, { force: true });
|
|
91
130
|
}
|
|
92
|
-
return {
|
|
131
|
+
return {
|
|
132
|
+
status: 'fixed',
|
|
133
|
+
detail: 'removed ' +
|
|
134
|
+
dead.length +
|
|
135
|
+
' record(s) of a history sync watcher that is no longer running (the next launch starts a new one).',
|
|
136
|
+
};
|
|
93
137
|
},
|
|
94
138
|
},
|
|
95
139
|
{
|
|
@@ -103,7 +147,13 @@ export const CHECKS = [
|
|
|
103
147
|
return ok('none.');
|
|
104
148
|
for (const p of found)
|
|
105
149
|
removeTree(p, env.dataPath);
|
|
106
|
-
return {
|
|
150
|
+
return {
|
|
151
|
+
status: 'fixed',
|
|
152
|
+
detail: 'removed ' +
|
|
153
|
+
found.length +
|
|
154
|
+
' half-finished download/copy folder(s): ' +
|
|
155
|
+
found.map((p) => rel(env.toolsDir, p)).join(', '),
|
|
156
|
+
};
|
|
107
157
|
},
|
|
108
158
|
},
|
|
109
159
|
{
|
|
@@ -117,7 +167,12 @@ export const CHECKS = [
|
|
|
117
167
|
return ok('every toolchain folder has its program.');
|
|
118
168
|
for (const f of found)
|
|
119
169
|
removeTree(f.path, env.dataPath);
|
|
120
|
-
return {
|
|
170
|
+
return {
|
|
171
|
+
status: 'fixed',
|
|
172
|
+
detail: 'removed ' +
|
|
173
|
+
found.map((f) => rel(env.toolsDir, f.path) + ' (no ' + f.missing + ')').join(', ') +
|
|
174
|
+
'; the next sandbox reinstalls them.',
|
|
175
|
+
};
|
|
121
176
|
},
|
|
122
177
|
},
|
|
123
178
|
{
|
|
@@ -137,7 +192,10 @@ export const CHECKS = [
|
|
|
137
192
|
return ok('valid.');
|
|
138
193
|
assertTestWritable(file);
|
|
139
194
|
fs.rmSync(file, { force: true });
|
|
140
|
-
return {
|
|
195
|
+
return {
|
|
196
|
+
status: 'fixed',
|
|
197
|
+
detail: 'tools\\resolved-versions.json was damaged; removed it (versions are looked up again on the next start).',
|
|
198
|
+
};
|
|
141
199
|
},
|
|
142
200
|
},
|
|
143
201
|
{
|
|
@@ -147,13 +205,24 @@ export const CHECKS = [
|
|
|
147
205
|
if (!fileExists(npmCli))
|
|
148
206
|
return { status: 'skipped', detail: 'npm not found next to this Node (' + npmCli + ').' };
|
|
149
207
|
// cwd = Node's own folder: npm reads .npmrc from the current folder, which could be a sandbox-writable workspace.
|
|
150
|
-
const result = spawnSync(process.execPath, [npmCli, 'ls', '-g', '--json', '--depth=0'], {
|
|
208
|
+
const result = spawnSync(process.execPath, [npmCli, 'ls', '-g', '--json', '--depth=0'], {
|
|
209
|
+
cwd: path.dirname(process.execPath),
|
|
210
|
+
encoding: 'utf8',
|
|
211
|
+
windowsHide: true,
|
|
212
|
+
timeout: 60000,
|
|
213
|
+
maxBuffer: 16 * 1024 * 1024,
|
|
214
|
+
});
|
|
151
215
|
const names = globalPackages(result.stdout ?? '');
|
|
152
216
|
if (!names.length)
|
|
153
217
|
return { status: 'skipped', detail: 'could not read the global npm packages.' };
|
|
154
218
|
if (names.includes('agent-sandbox') && names.includes('windows-development-sandbox'))
|
|
155
|
-
return {
|
|
156
|
-
|
|
219
|
+
return {
|
|
220
|
+
status: 'needs-you',
|
|
221
|
+
detail: 'the old agent-sandbox package is still installed next to windows-development-sandbox, and their commands clash. Run: npm uninstall -g agent-sandbox',
|
|
222
|
+
};
|
|
223
|
+
return ok(names.includes('agent-sandbox')
|
|
224
|
+
? 'agent-sandbox installed (the old name; fine on its own).'
|
|
225
|
+
: 'no old agent-sandbox package.');
|
|
157
226
|
},
|
|
158
227
|
},
|
|
159
228
|
{
|
|
@@ -164,7 +233,14 @@ export const CHECKS = [
|
|
|
164
233
|
return { status: 'skipped', detail: 'could not check the drive of ' + env.storageRoot };
|
|
165
234
|
if (free >= 20 * GB)
|
|
166
235
|
return ok(humanBytes(free) + ' free.');
|
|
167
|
-
return {
|
|
236
|
+
return {
|
|
237
|
+
status: 'warn',
|
|
238
|
+
detail: humanBytes(free) +
|
|
239
|
+
' free on the drive of ' +
|
|
240
|
+
env.storageRoot +
|
|
241
|
+
(free < 5 * GB ? ': toolchains need several GB.' : ': getting low.') +
|
|
242
|
+
' See what is stored with: sandbox data, and free space with: sandbox data clean <target>',
|
|
243
|
+
};
|
|
168
244
|
},
|
|
169
245
|
},
|
|
170
246
|
];
|
|
@@ -1,8 +1,11 @@
|
|
|
1
|
-
/** Interrupted downloads and copies: `<name>.staging-<hex>` and `node-staging`, in tools\ and one folder down (tools\go\1.23.staging-ab12). */
|
|
2
|
-
export declare const findStagingLeftovers: (toolsDir: string) => string[];
|
|
3
1
|
/**
|
|
4
|
-
*
|
|
5
|
-
*
|
|
2
|
+
* Interrupted downloads and copies: `<name>.staging-<hex>` and `node-staging`, in tools\ and one folder down
|
|
3
|
+
* (tools\go\1.23.staging-ab12).
|
|
4
|
+
*/
|
|
5
|
+
export declare function findStagingLeftovers(toolsDir: string): string[];
|
|
6
|
+
/**
|
|
7
|
+
* A toolchain folder and the program it must contain. `versions` means one folder per installed version
|
|
8
|
+
* (tools\go\1.23.2); `match` limits which version folders count (tools\nvm also holds settings and nvm.exe).
|
|
6
9
|
*/
|
|
7
10
|
export interface ToolRule {
|
|
8
11
|
folder: string;
|
|
@@ -12,7 +15,7 @@ export interface ToolRule {
|
|
|
12
15
|
}
|
|
13
16
|
export declare const TOOL_RULES: ToolRule[];
|
|
14
17
|
/** Toolchain folders that exist but lack their main program (an install that stopped half way). Never enters links. */
|
|
15
|
-
export declare
|
|
18
|
+
export declare function findHalfInstalled(toolsDir: string, rules?: ToolRule[]): {
|
|
16
19
|
path: string;
|
|
17
20
|
missing: string;
|
|
18
21
|
}[];
|
|
@@ -20,11 +23,11 @@ export declare const findHalfInstalled: (toolsDir: string, rules?: ToolRule[]) =
|
|
|
20
23
|
* Every link or junction under `root` (the links themselves; nothing behind them is visited). Before descending into
|
|
21
24
|
* a folder its real path must still be inside root: a folder swapped for a junction between two looks is not followed.
|
|
22
25
|
*/
|
|
23
|
-
export declare
|
|
26
|
+
export declare function findLinks(root: string): string[];
|
|
24
27
|
/** tools\resolved-versions.json is a JSON object (anything else makes the guest stumble). */
|
|
25
|
-
export declare
|
|
28
|
+
export declare function resolvedVersionsValid(text: string): boolean;
|
|
26
29
|
/** Package names from `npm ls -g --json`; [] when the output is not what npm prints. */
|
|
27
|
-
export declare
|
|
28
|
-
export declare
|
|
30
|
+
export declare function globalPackages(json: string): string[];
|
|
31
|
+
export declare function pidAlive(pid: number): boolean;
|
|
29
32
|
/** Sync-watcher pid files (storage\run\watcher-*.pid) whose process is gone (or whose content is not a pid). */
|
|
30
|
-
export declare
|
|
33
|
+
export declare function deadPidFiles(runDir: string, alive?: (pid: number) => boolean): string[];
|
|
@@ -2,13 +2,16 @@
|
|
|
2
2
|
import fs from 'node:fs';
|
|
3
3
|
import path from 'node:path';
|
|
4
4
|
import { z } from 'zod';
|
|
5
|
-
import { dirExists, fileExists, isLink } from '../../../core/util.js';
|
|
6
|
-
/**
|
|
7
|
-
|
|
5
|
+
import { dirExists, fileExists, isLink } from '../../../core/util/index.js';
|
|
6
|
+
/**
|
|
7
|
+
* Interrupted downloads and copies: `<name>.staging-<hex>` and `node-staging`, in tools\ and one folder down
|
|
8
|
+
* (tools\go\1.23.staging-ab12).
|
|
9
|
+
*/
|
|
10
|
+
export function findStagingLeftovers(toolsDir) {
|
|
8
11
|
const isStaging = (name) => /\.staging-[0-9a-f]+$/i.test(name) || name.toLowerCase() === 'node-staging';
|
|
9
|
-
const realChildren = (dir) =>
|
|
10
|
-
return realChildren(toolsDir).flatMap((p) =>
|
|
11
|
-
}
|
|
12
|
+
const realChildren = (dir) => dirExists(dir) && !isLink(dir) ? fs.readdirSync(dir).map((n) => path.join(dir, n)) : [];
|
|
13
|
+
return realChildren(toolsDir).flatMap((p) => isStaging(path.basename(p)) ? [p] : isLink(p) ? [] : realChildren(p).filter((c) => isStaging(path.basename(c))));
|
|
14
|
+
}
|
|
12
15
|
export const TOOL_RULES = [
|
|
13
16
|
{ folder: 'nvm', exe: ['nvm.exe'] },
|
|
14
17
|
{ folder: 'nvm', exe: ['node.exe'], versions: true, match: /^v\d+\.\d+\.\d+$/ },
|
|
@@ -20,7 +23,7 @@ export const TOOL_RULES = [
|
|
|
20
23
|
{ folder: 'python', exe: ['python.exe'], versions: true },
|
|
21
24
|
];
|
|
22
25
|
/** Toolchain folders that exist but lack their main program (an install that stopped half way). Never enters links. */
|
|
23
|
-
export
|
|
26
|
+
export function findHalfInstalled(toolsDir, rules = TOOL_RULES) {
|
|
24
27
|
const realDir = (p) => dirExists(p) && !isLink(p);
|
|
25
28
|
const staging = (name) => /\.staging-[0-9a-f]+$/i.test(name) || name.toLowerCase() === 'node-staging';
|
|
26
29
|
return rules.flatMap((rule) => {
|
|
@@ -28,26 +31,37 @@ export const findHalfInstalled = (toolsDir, rules = TOOL_RULES) => {
|
|
|
28
31
|
if (!realDir(base))
|
|
29
32
|
return [];
|
|
30
33
|
const folders = rule.versions
|
|
31
|
-
? fs
|
|
34
|
+
? fs
|
|
35
|
+
.readdirSync(base)
|
|
36
|
+
.filter((n) => !staging(n) && (!rule.match || rule.match.test(n)))
|
|
37
|
+
.map((n) => path.join(base, n))
|
|
38
|
+
.filter(realDir)
|
|
32
39
|
: [base];
|
|
33
|
-
return folders
|
|
40
|
+
return folders
|
|
41
|
+
.filter((f) => !fileExists(path.join(f, ...rule.exe)))
|
|
42
|
+
.map((f) => ({ path: f, missing: path.join(...rule.exe) }));
|
|
34
43
|
});
|
|
35
|
-
}
|
|
44
|
+
}
|
|
36
45
|
/**
|
|
37
46
|
* Every link or junction under `root` (the links themselves; nothing behind them is visited). Before descending into
|
|
38
47
|
* a folder its real path must still be inside root: a folder swapped for a junction between two looks is not followed.
|
|
39
48
|
*/
|
|
40
|
-
export
|
|
49
|
+
export function findLinks(root) {
|
|
41
50
|
if (isLink(root))
|
|
42
51
|
return [root];
|
|
43
|
-
const real = (p) => {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
52
|
+
const real = (p) => {
|
|
53
|
+
try {
|
|
54
|
+
return fs.realpathSync.native(p).toLowerCase();
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
return '';
|
|
58
|
+
}
|
|
59
|
+
};
|
|
49
60
|
const top = real(root);
|
|
50
|
-
const inside = (p) => {
|
|
61
|
+
const inside = (p) => {
|
|
62
|
+
const r = real(p);
|
|
63
|
+
return r !== '' && (r === top || r.startsWith(top + path.sep));
|
|
64
|
+
};
|
|
51
65
|
const walk = (dir) => {
|
|
52
66
|
if (!inside(dir))
|
|
53
67
|
return [];
|
|
@@ -66,43 +80,49 @@ export const findLinks = (root) => {
|
|
|
66
80
|
});
|
|
67
81
|
};
|
|
68
82
|
return dirExists(root) ? walk(root) : [];
|
|
69
|
-
}
|
|
70
|
-
const
|
|
83
|
+
}
|
|
84
|
+
const ResolvedVersionsSchema = z.record(z.string(), z.unknown());
|
|
71
85
|
/** tools\resolved-versions.json is a JSON object (anything else makes the guest stumble). */
|
|
72
|
-
export
|
|
86
|
+
export function resolvedVersionsValid(text) {
|
|
73
87
|
try {
|
|
74
|
-
return
|
|
88
|
+
return ResolvedVersionsSchema.safeParse(JSON.parse(text.replace(/^\uFEFF/, ''))).success;
|
|
75
89
|
}
|
|
76
90
|
catch {
|
|
77
91
|
return false;
|
|
78
92
|
}
|
|
79
|
-
}
|
|
80
|
-
const
|
|
93
|
+
}
|
|
94
|
+
const NpmListSchema = z.object({ dependencies: z.record(z.string(), z.unknown()).optional() });
|
|
81
95
|
/** Package names from `npm ls -g --json`; [] when the output is not what npm prints. */
|
|
82
|
-
export
|
|
96
|
+
export function globalPackages(json) {
|
|
83
97
|
try {
|
|
84
|
-
return Object.keys(
|
|
98
|
+
return Object.keys(NpmListSchema.parse(JSON.parse(json)).dependencies ?? {});
|
|
85
99
|
}
|
|
86
100
|
catch {
|
|
87
101
|
return [];
|
|
88
102
|
}
|
|
89
|
-
};
|
|
90
|
-
const Pid = z.coerce.number().int().positive();
|
|
91
|
-
export const pidAlive = (pid) => { try {
|
|
92
|
-
process.kill(pid, 0);
|
|
93
|
-
return true;
|
|
94
103
|
}
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
104
|
+
const PidSchema = z.coerce.number().int().positive();
|
|
105
|
+
export function pidAlive(pid) {
|
|
106
|
+
try {
|
|
107
|
+
process.kill(pid, 0);
|
|
108
|
+
return true;
|
|
109
|
+
}
|
|
110
|
+
catch (e) {
|
|
111
|
+
return e.code === 'EPERM';
|
|
112
|
+
}
|
|
113
|
+
}
|
|
98
114
|
/** Sync-watcher pid files (storage\run\watcher-*.pid) whose process is gone (or whose content is not a pid). */
|
|
99
|
-
export
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
115
|
+
export function deadPidFiles(runDir, alive = pidAlive) {
|
|
116
|
+
return (dirExists(runDir) ? fs.readdirSync(runDir) : [])
|
|
117
|
+
.filter((n) => /^watcher-.*\.pid$/i.test(n))
|
|
118
|
+
.map((n) => path.join(runDir, n))
|
|
119
|
+
.filter((f) => {
|
|
120
|
+
try {
|
|
121
|
+
const pid = PidSchema.safeParse(fs.readFileSync(f, 'utf8').trim());
|
|
122
|
+
return !pid.success || !alive(pid.data);
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
});
|
|
105
128
|
}
|
|
106
|
-
catch {
|
|
107
|
-
return false;
|
|
108
|
-
} });
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { UserError } from '../../../core/util.js';
|
|
1
|
+
import { UserError } from '../../../core/util/index.js';
|
|
2
2
|
import type { CliOptions } from '../../args.js';
|
|
3
3
|
import { type Context } from '../context.js';
|
|
4
4
|
import type { RepairCheck, RepairEnv, RepairResult } from './types.js';
|
|
5
5
|
/** Runs every check in order; a check that throws is reported, never stops the rest. */
|
|
6
|
-
export declare
|
|
7
|
-
export declare
|
|
6
|
+
export declare function runChecks(env: RepairEnv, checks?: RepairCheck[]): RepairResult[];
|
|
7
|
+
export declare function repair(ctx: Context, configError?: UserError | null): number;
|
|
8
8
|
/**
|
|
9
9
|
* Entry point that works even when the config file is broken (createContext would throw): falls back to the built-in
|
|
10
10
|
* defaults so the other checks still run, and reports the config problem as the first check.
|
|
11
11
|
*/
|
|
12
|
-
export declare
|
|
12
|
+
export declare function repairCommand(packageRoot: string, entry: string, options: CliOptions): number;
|
|
@@ -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
|
+
}
|