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
package/config.example.json
CHANGED
package/dist/api.js
CHANGED
|
@@ -1,31 +1,42 @@
|
|
|
1
|
-
// Programmatic API: `import { sandbox } from 'windows-development-sandbox'`. Same safety model as the CLI: the host
|
|
2
|
-
// request kinds the guest daemon accepts, and everything coming back is validated data.
|
|
1
|
+
// Programmatic API: `import { sandbox } from 'windows-development-sandbox'`. Same safety model as the CLI: the host
|
|
2
|
+
// only sends the request kinds the guest daemon accepts, and everything coming back is validated data.
|
|
3
3
|
import path from 'node:path';
|
|
4
|
-
import { attachTerminal } from './host/
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import { expandPath, fail } from './core/util.js';
|
|
4
|
+
import { attachTerminal, SandboxChannel } from './host/channel/index.js';
|
|
5
|
+
import { loadConfig } from './core/config/index.js';
|
|
6
|
+
import { RunDir } from './shared/channel/index.js';
|
|
7
|
+
import { isSandboxRunning } from './host/sandbox/index.js';
|
|
8
|
+
import { expandPath, fail } from './core/util/index.js';
|
|
10
9
|
export const sandbox = (options = {}) => {
|
|
11
10
|
const loaded = loadConfig(options.config);
|
|
12
11
|
const dataPath = path.join(expandPath(loaded.config.storage.root, loaded.base), 'data', loaded.config.storage.dataName);
|
|
13
12
|
const alive = isSandboxRunning;
|
|
13
|
+
const channel = new SandboxChannel(dataPath, alive);
|
|
14
14
|
// async: no sandbox is a rejected promise like every other failure, not a synchronous throw.
|
|
15
|
-
const ready = async () =>
|
|
15
|
+
const ready = async () => alive()
|
|
16
|
+
? channel.waitForReady(null)
|
|
17
|
+
: fail('No Windows Sandbox is running.', 'Start one first, e.g. sandbox claude --headless.');
|
|
16
18
|
return {
|
|
17
19
|
isRunning: alive,
|
|
18
|
-
status: () =>
|
|
20
|
+
status: () => new RunDir(dataPath).readSandboxStatus(),
|
|
19
21
|
ready,
|
|
20
|
-
sessions: () =>
|
|
21
|
-
exec: async (command, o = {}) =>
|
|
22
|
+
sessions: () => new RunDir(dataPath).listSessions(),
|
|
23
|
+
exec: async (command, o = {}) => channel.exec(command, o.cwd ?? (await ready()).guestWorkspace, o.timeoutSeconds ?? 600),
|
|
22
24
|
startSession: async (o = {}) => {
|
|
23
25
|
const status = await ready();
|
|
24
|
-
return waitForSession(
|
|
26
|
+
return channel.waitForSession(channel.requestSession(o.harness ?? loaded.config.defaultHarness, o.args ?? [], o.cwd ?? status.guestWorkspace));
|
|
27
|
+
},
|
|
28
|
+
restart: async (harness) => {
|
|
29
|
+
await ready();
|
|
30
|
+
return channel.restart(harness ?? null);
|
|
31
|
+
},
|
|
32
|
+
ping: async () => {
|
|
33
|
+
await ready();
|
|
34
|
+
return channel.ping();
|
|
35
|
+
},
|
|
36
|
+
attach: async (sessionId) => {
|
|
37
|
+
await ready();
|
|
38
|
+
return attachTerminal(channel.pickSession(sessionId));
|
|
25
39
|
},
|
|
26
|
-
restart: async (harness) => { await ready(); return restartSessions(dataPath, harness ?? null, alive); },
|
|
27
|
-
ping: async () => { await ready(); return pingSandbox(dataPath, alive); },
|
|
28
|
-
attach: async (sessionId) => { await ready(); return attachTerminal(pickSession(dataPath, sessionId)); },
|
|
29
40
|
};
|
|
30
41
|
};
|
|
31
42
|
export { main } from './cli/index.js';
|
package/dist/cli/args.d.ts
CHANGED
|
@@ -40,16 +40,14 @@ export interface SessionWant {
|
|
|
40
40
|
args?: string[];
|
|
41
41
|
}
|
|
42
42
|
/** Splits a command line like a shell: "quoted words" and 'quoted words' stay together. */
|
|
43
|
-
export declare
|
|
43
|
+
export declare function splitArgs(text: string): string[];
|
|
44
44
|
/**
|
|
45
45
|
* `<agent>@<folder>` (the folder may contain '@': only the first one splits), `<agent>` alone = the current folder,
|
|
46
46
|
* and `|<arguments>` for that session's agent only ('|' cannot be in a Windows path). Folders become absolute against
|
|
47
47
|
* `cwd`. Pure; validate.ts checks that the agent and folder exist.
|
|
48
48
|
*/
|
|
49
|
-
export declare
|
|
50
|
-
/** This package's version (this file is dist/cli/args.js, two folders below package.json). */
|
|
51
|
-
export declare const packageVersion: () => string;
|
|
49
|
+
export declare function parseSessionWant(input: string, cwd?: string): SessionWant;
|
|
52
50
|
/** Every command, its options and help text, from manifest.ts. Actions only record what was parsed. */
|
|
53
|
-
export declare
|
|
51
|
+
export declare function buildProgram(record: (name: string, cmd: Command) => void): Command;
|
|
54
52
|
/** Parses argv into the command name and options. Throws commander errors for unknown commands/options. */
|
|
55
|
-
export declare
|
|
53
|
+
export declare function parseCli(argv: string[], wrapper?: boolean): CliOptions;
|
package/dist/cli/args.js
CHANGED
|
@@ -1,20 +1,22 @@
|
|
|
1
1
|
// Command-line parsing with commander. parseCli() only parses (no side effects), so it is easy to test; cli/index.ts
|
|
2
|
-
// dispatches the result. sandbox claude & co parse as `launch`: every option launch does not own goes to the agent, in
|
|
2
|
+
// dispatches the result. sandbox claude & co parse as `launch`: every option launch does not own goes to the agent, in
|
|
3
|
+
// order.
|
|
3
4
|
import path from 'node:path';
|
|
4
|
-
import { fileURLToPath } from 'node:url';
|
|
5
5
|
import { Command, InvalidArgumentError, Option } from 'commander';
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import { c } from './colors.js';
|
|
6
|
+
import { fail } from '../core/util/index.js';
|
|
7
|
+
import { c } from './output/index.js';
|
|
9
8
|
import { COMMANDS } from './manifest.js';
|
|
9
|
+
import { packageVersion } from '../core/package-info.js';
|
|
10
10
|
/** Splits a command line like a shell: "quoted words" and 'quoted words' stay together. */
|
|
11
|
-
export
|
|
11
|
+
export function splitArgs(text) {
|
|
12
|
+
return [...text.matchAll(/"([^"]*)"|'([^']*)'|(\S+)/g)].map((m) => m[1] ?? m[2] ?? m[3]);
|
|
13
|
+
}
|
|
12
14
|
/**
|
|
13
15
|
* `<agent>@<folder>` (the folder may contain '@': only the first one splits), `<agent>` alone = the current folder,
|
|
14
16
|
* and `|<arguments>` for that session's agent only ('|' cannot be in a Windows path). Folders become absolute against
|
|
15
17
|
* `cwd`. Pure; validate.ts checks that the agent and folder exist.
|
|
16
18
|
*/
|
|
17
|
-
export
|
|
19
|
+
export function parseSessionWant(input, cwd = process.cwd()) {
|
|
18
20
|
const bar = input.indexOf('|');
|
|
19
21
|
const text = bar < 0 ? input : input.slice(0, bar);
|
|
20
22
|
const args = bar < 0 ? [] : splitArgs(input.slice(bar + 1));
|
|
@@ -24,23 +26,20 @@ export const parseSessionWant = (input, cwd = process.cwd()) => {
|
|
|
24
26
|
if (!harness)
|
|
25
27
|
fail('--session "' + text + '" names no agent.', 'Use --session <agent>@<folder>, e.g. --session claude@C:\\code\\api (the folder defaults to this one).');
|
|
26
28
|
return { harness, folder: path.resolve(cwd, folder || '.'), ...(args.length ? { args } : {}) };
|
|
27
|
-
}
|
|
28
|
-
/** This package's version (this file is dist/cli/args.js, two folders below package.json). */
|
|
29
|
-
export const packageVersion = () => {
|
|
30
|
-
const file = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..', '..', 'package.json');
|
|
31
|
-
return z.object({ version: z.string() }).safeParse(tryReadJson(file)).data?.version ?? 'unknown';
|
|
32
|
-
};
|
|
29
|
+
}
|
|
33
30
|
/** Reserved spelling for our launch options that can never clash with an agent's flags: --sbx-terminal, ... */
|
|
34
31
|
const SBX_PREFIX = '--sbx-';
|
|
35
|
-
|
|
32
|
+
function positiveNumber(value) {
|
|
36
33
|
const n = Number(value);
|
|
37
34
|
if (!Number.isFinite(n) || n <= 0)
|
|
38
35
|
throw new InvalidArgumentError('expected a positive number');
|
|
39
36
|
return n;
|
|
40
|
-
}
|
|
41
|
-
|
|
37
|
+
}
|
|
38
|
+
function collect(value, previous = []) {
|
|
39
|
+
return [...previous, value];
|
|
40
|
+
}
|
|
42
41
|
/** One commander option from its manifest entry. */
|
|
43
|
-
|
|
42
|
+
function toOption(o) {
|
|
44
43
|
const flags = (o.short ? o.short + ', ' : '') + o.flag + (o.type === 'boolean' ? '' : ' <' + (o.value ?? 'value') + '>');
|
|
45
44
|
const option = new Option(flags, o.description);
|
|
46
45
|
if (o.type === 'number')
|
|
@@ -50,19 +49,24 @@ const toOption = (o) => {
|
|
|
50
49
|
if (o.default !== undefined)
|
|
51
50
|
option.default(o.default);
|
|
52
51
|
return option;
|
|
53
|
-
}
|
|
52
|
+
}
|
|
54
53
|
/** Every command, its options and help text, from manifest.ts. Actions only record what was parsed. */
|
|
55
|
-
export
|
|
54
|
+
export function buildProgram(record) {
|
|
56
55
|
const program = new Command('sandbox')
|
|
57
56
|
.description('A disposable Windows Sandbox for development, with or without an AI agent, for the folder you are in. Run it with no arguments for the menu.')
|
|
58
57
|
.version(packageVersion(), '-v, --version', 'show the version')
|
|
59
58
|
.enablePositionalOptions()
|
|
60
59
|
.showHelpAfterError(' Fix: run the command with --help to see how to use it.')
|
|
61
|
-
.configureOutput({
|
|
60
|
+
.configureOutput({
|
|
61
|
+
outputError: (text, write) => write(c.red('Error: ') + text.replace(/^error: /, '').replace(/^./, (ch) => ch.toUpperCase())),
|
|
62
|
+
})
|
|
62
63
|
.addHelpText('after', '\nPut --config <file> before or after the command to use another settings file.\nExamples:\n sandbox the menu\n sandbox claude -t start Claude and attach this terminal\n sandbox data clean logs delete the saved logs\n sandbox exec -- npm test run a command in the running sandbox')
|
|
63
64
|
.exitOverride();
|
|
64
65
|
for (const spec of COMMANDS) {
|
|
65
|
-
const cmd = program
|
|
66
|
+
const cmd = program
|
|
67
|
+
.command(spec.name, { hidden: spec.hidden })
|
|
68
|
+
.description(spec.summary)
|
|
69
|
+
.option('--config <file>', 'config file (default: ~/.agent-sandbox/config.json)');
|
|
66
70
|
for (const option of spec.options)
|
|
67
71
|
cmd.addOption(toOption(option));
|
|
68
72
|
if (spec.json)
|
|
@@ -76,9 +80,9 @@ export const buildProgram = (record) => {
|
|
|
76
80
|
cmd.action((...args) => record(spec.name, args[args.length - 1]));
|
|
77
81
|
}
|
|
78
82
|
return program;
|
|
79
|
-
}
|
|
83
|
+
}
|
|
80
84
|
/** Turns `--sbx-<option>` into `--<option>` (only for options launch knows; anything else is an error). */
|
|
81
|
-
|
|
85
|
+
function expandReserved(argv, known) {
|
|
82
86
|
const end = argv.indexOf('--');
|
|
83
87
|
return argv.map((token, i) => {
|
|
84
88
|
if ((end !== -1 && i > end) || !token.startsWith(SBX_PREFIX))
|
|
@@ -89,12 +93,17 @@ const expandReserved = (argv, known) => {
|
|
|
89
93
|
fail('Unknown option: ' + flag, 'Reserved --sbx- options: ' + [...known].map((o) => o.replace('--', SBX_PREFIX)).join(', '));
|
|
90
94
|
return value === undefined ? option : option + '=' + value;
|
|
91
95
|
});
|
|
92
|
-
}
|
|
96
|
+
}
|
|
93
97
|
/** Parses argv into the command name and options. Throws commander errors for unknown commands/options. */
|
|
94
|
-
export
|
|
98
|
+
export function parseCli(argv, wrapper = false) {
|
|
95
99
|
let parsed = null;
|
|
96
|
-
const program = buildProgram((name, cmd) => {
|
|
97
|
-
|
|
100
|
+
const program = buildProgram((name, cmd) => {
|
|
101
|
+
parsed = { name, cmd };
|
|
102
|
+
});
|
|
103
|
+
const launchFlags = new Set(program.commands
|
|
104
|
+
.find((c) => c.name() === 'launch')
|
|
105
|
+
.options.map((o) => o.long)
|
|
106
|
+
.filter(Boolean));
|
|
98
107
|
const args = expandReserved(wrapper ? ['launch', ...argv] : argv, launchFlags);
|
|
99
108
|
program.parse(args, { from: 'user' });
|
|
100
109
|
if (!parsed)
|
|
@@ -102,7 +111,8 @@ export const parseCli = (argv, wrapper = false) => {
|
|
|
102
111
|
const { name, cmd } = parsed;
|
|
103
112
|
const o = { ...program.opts(), ...cmd.opts() };
|
|
104
113
|
const forAgent = ['launch', 'start', 'generate', 'host-claude'].includes(name);
|
|
105
|
-
// Commander keeps our `--` separator among the operands when unknown options are allowed; it is ours, not the
|
|
114
|
+
// Commander keeps our `--` separator among the operands when unknown options are allowed; it is ours, not the
|
|
115
|
+
// agent's.
|
|
106
116
|
const separator = forAgent ? cmd.args.indexOf('--') : -1;
|
|
107
117
|
const operands = separator === -1 ? cmd.args : [...cmd.args.slice(0, separator), ...cmd.args.slice(separator + 1)];
|
|
108
118
|
return {
|
|
@@ -118,7 +128,10 @@ export const parseCli = (argv, wrapper = false) => {
|
|
|
118
128
|
node: o.node,
|
|
119
129
|
python: o.python,
|
|
120
130
|
scripts: o.script ?? [],
|
|
121
|
-
databases: (o.database ?? [])
|
|
131
|
+
databases: (o.database ?? [])
|
|
132
|
+
.flatMap((d) => d.split(','))
|
|
133
|
+
.map((d) => d.trim())
|
|
134
|
+
.filter(Boolean),
|
|
122
135
|
headless: o.window ? false : o.headless ? true : undefined,
|
|
123
136
|
terminal: Boolean(o.terminal),
|
|
124
137
|
newSession: Boolean(o.new),
|
|
@@ -138,8 +151,28 @@ export const parseCli = (argv, wrapper = false) => {
|
|
|
138
151
|
kind: o.kind,
|
|
139
152
|
grep: o.grep,
|
|
140
153
|
};
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
154
|
+
}
|
|
155
|
+
function defaults() {
|
|
156
|
+
return {
|
|
157
|
+
command: '',
|
|
158
|
+
positionals: [],
|
|
159
|
+
passthrough: [],
|
|
160
|
+
scripts: [],
|
|
161
|
+
databases: [],
|
|
162
|
+
terminal: false,
|
|
163
|
+
newSession: false,
|
|
164
|
+
noAgent: false,
|
|
165
|
+
trustConfig: false,
|
|
166
|
+
noLocalConfig: false,
|
|
167
|
+
personal: false,
|
|
168
|
+
fromHost: false,
|
|
169
|
+
noRestart: false,
|
|
170
|
+
follow: false,
|
|
171
|
+
json: false,
|
|
172
|
+
yes: false,
|
|
173
|
+
all: false,
|
|
174
|
+
sessions: [],
|
|
175
|
+
timeout: 600,
|
|
176
|
+
days: 7,
|
|
177
|
+
};
|
|
178
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** `--config <file>` right after the command name (where every command accepts it); argv unchanged without a config. */
|
|
2
|
+
export declare function withConfig(argv: string[], config: string | undefined): string[];
|
|
3
|
+
/**
|
|
4
|
+
* `sandbox --config f.json status` works like `sandbox status --config f.json`: a leading --config moves behind the
|
|
5
|
+
* command.
|
|
6
|
+
*/
|
|
7
|
+
export declare function hoistConfig(argv: string[]): string[];
|
|
8
|
+
/** argv without `--config <file>` / `--config=<file>`. */
|
|
9
|
+
export declare function withoutConfig(argv: string[]): string[];
|
package/dist/cli/argv.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/** `--config <file>` right after the command name (where every command accepts it); argv unchanged without a config. */
|
|
2
|
+
export function withConfig(argv, config) {
|
|
3
|
+
return config && argv.length ? [argv[0], '--config', config, ...argv.slice(1)] : argv;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* `sandbox --config f.json status` works like `sandbox status --config f.json`: a leading --config moves behind the
|
|
7
|
+
* command.
|
|
8
|
+
*/
|
|
9
|
+
export function hoistConfig(argv) {
|
|
10
|
+
const eq = argv[0]?.startsWith('--config=');
|
|
11
|
+
if (argv[0] !== '--config' && !eq)
|
|
12
|
+
return argv;
|
|
13
|
+
const value = eq ? argv[0].slice('--config='.length) : argv[1];
|
|
14
|
+
const rest = argv.slice(eq ? 1 : 2);
|
|
15
|
+
if (value === undefined || value === '')
|
|
16
|
+
return argv;
|
|
17
|
+
return rest.length ? withConfig(rest, value) : ['menu', '--config', value];
|
|
18
|
+
}
|
|
19
|
+
/** argv without `--config <file>` / `--config=<file>`. */
|
|
20
|
+
export function withoutConfig(argv) {
|
|
21
|
+
return argv.filter((a, i) => a !== '--config' && argv[i - 1] !== '--config' && !a.startsWith('--config='));
|
|
22
|
+
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { type Context } from './context.js';
|
|
2
|
-
export declare
|
|
2
|
+
export declare function account(ctx: Context): Promise<number>;
|
|
@@ -1,52 +1,67 @@
|
|
|
1
1
|
// `account list | save | use | default | remove`
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
|
|
2
|
+
import { AccountStore, hostClaudeDir, hostGlobalStateFile } from '../../host/profile/index.js';
|
|
3
|
+
import { SandboxChannel } from '../../host/channel/index.js';
|
|
4
|
+
import { isSandboxRunning } from '../../host/sandbox/index.js';
|
|
5
|
+
import { fail, safeText } from '../../core/util/index.js';
|
|
6
|
+
import { printJson, table } from '../output/index.js';
|
|
7
|
+
function label(a) {
|
|
8
|
+
return '"' + a.name + '"' + (a.email ? ' (' + a.email + ')' : '');
|
|
9
|
+
}
|
|
9
10
|
/** This PC's Claude login location (config folder + global state file). */
|
|
10
|
-
|
|
11
|
+
function hostLogin(ctx) {
|
|
11
12
|
const profile = ctx.loaded.config.claudeProfile;
|
|
12
13
|
return { claudeDir: hostClaudeDir(profile), globalStateFile: hostGlobalStateFile(profile) };
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
const rows =
|
|
14
|
+
}
|
|
15
|
+
function list(ctx) {
|
|
16
|
+
const rows = new AccountStore(ctx.storageRoot).list(ctx.dataPath);
|
|
16
17
|
if (printJson(ctx, rows))
|
|
17
18
|
return 0;
|
|
18
19
|
if (rows.length === 0) {
|
|
19
|
-
console.log(
|
|
20
|
+
console.log("No saved accounts. Sign in inside the sandbox, then: sandbox account save <name> (or --from-host to save this PC's login)");
|
|
20
21
|
return 0;
|
|
21
22
|
}
|
|
22
|
-
table([
|
|
23
|
+
table([
|
|
24
|
+
['', 'NAME', 'EMAIL', 'SAVED'],
|
|
25
|
+
...rows.map((a) => [
|
|
26
|
+
(a.isActive ? '*' : ' ') + (a.isDefault ? 'D' : ' '),
|
|
27
|
+
a.name,
|
|
28
|
+
a.email ?? '-',
|
|
29
|
+
a.savedAt.slice(0, 16).replace('T', ' '),
|
|
30
|
+
]),
|
|
31
|
+
]);
|
|
23
32
|
console.log('\n* = active in the sandbox D = default for new launches');
|
|
24
33
|
return 0;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
console.log('Sandbox now uses ' + label(
|
|
28
|
-
const claudeRunning = isSandboxRunning() &&
|
|
34
|
+
}
|
|
35
|
+
async function use(ctx, name) {
|
|
36
|
+
console.log('Sandbox now uses ' + label(new AccountStore(ctx.storageRoot).activate(ctx.dataPath, name)) + '.');
|
|
37
|
+
const claudeRunning = isSandboxRunning() && new SandboxChannel(ctx.dataPath).runningSessions().some((s) => s.harness === 'claude');
|
|
29
38
|
if (claudeRunning && !ctx.options.noRestart)
|
|
30
|
-
console.log(safeText((await
|
|
39
|
+
console.log(safeText((await new SandboxChannel(ctx.dataPath).restart('claude')).message) +
|
|
40
|
+
' with --continue; the conversation carries on under the new account.');
|
|
31
41
|
return 0;
|
|
32
|
-
}
|
|
33
|
-
export
|
|
42
|
+
}
|
|
43
|
+
export async function account(ctx) {
|
|
34
44
|
const [action = 'list', name] = ctx.options.positionals;
|
|
35
45
|
const needName = () => name ?? fail('Missing account name.', 'Usage: sandbox account ' + action + ' <name>');
|
|
36
46
|
switch (action) {
|
|
37
|
-
case 'list':
|
|
47
|
+
case 'list':
|
|
48
|
+
return list(ctx);
|
|
38
49
|
case 'save':
|
|
39
|
-
console.log('Saved account ' +
|
|
50
|
+
console.log('Saved account ' +
|
|
51
|
+
label(new AccountStore(ctx.storageRoot).save(ctx.dataPath, needName(), ctx.options.fromHost ? hostLogin(ctx) : null)) +
|
|
52
|
+
'.');
|
|
40
53
|
return 0;
|
|
41
|
-
case 'use':
|
|
54
|
+
case 'use':
|
|
55
|
+
return use(ctx, needName());
|
|
42
56
|
case 'default':
|
|
43
|
-
|
|
57
|
+
new AccountStore(ctx.storageRoot).setDefault(needName());
|
|
44
58
|
console.log('Default account: ' + name);
|
|
45
59
|
return 0;
|
|
46
60
|
case 'remove':
|
|
47
|
-
|
|
61
|
+
new AccountStore(ctx.storageRoot).remove(needName());
|
|
48
62
|
console.log('Removed account ' + name);
|
|
49
63
|
return 0;
|
|
50
|
-
default:
|
|
64
|
+
default:
|
|
65
|
+
fail('Unknown account action "' + action + '".', 'Use one of: sandbox account list | save <name> | use <name> | default <name> | remove <name>');
|
|
51
66
|
}
|
|
52
|
-
}
|
|
67
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Config } from '../../core/types.js';
|
|
2
|
-
import { type Reconciled } from '../../host/agent-commands.js';
|
|
2
|
+
import { type Reconciled } from '../../host/agent-commands/index.js';
|
|
3
3
|
import { type Context } from './context.js';
|
|
4
4
|
/** Brings this PC in line with agentCommands and says what changed (used after on/off, settings and launch). */
|
|
5
|
-
export declare
|
|
6
|
-
export declare
|
|
5
|
+
export declare function syncAgentCommands(ctx: Context, config: Config, quiet?: boolean): Reconciled | null;
|
|
6
|
+
export declare function agentCommandsCommand(ctx: Context): number;
|
|
@@ -1,40 +1,48 @@
|
|
|
1
1
|
// `sandbox agent-commands [status|on|off]` (Beta): typing claude, codex ... on this PC starts them in a hidden sandbox.
|
|
2
2
|
import fs from 'node:fs';
|
|
3
3
|
import path from 'node:path';
|
|
4
|
-
import { loadConfig, userConfigPath } from '../../core/config.js';
|
|
5
|
-
import { fail } from '../../core/util.js';
|
|
6
|
-
import { agentCommands, commandsDir, reconcileAgentCommands } from '../../host/agent-commands.js';
|
|
7
|
-
import { insideSandbox } from '../../host/
|
|
8
|
-
import { writeFileAtomic } from '../../shared/
|
|
9
|
-
import { c } from '../
|
|
10
|
-
import { editConfigText } from '../menu/settings/
|
|
11
|
-
|
|
12
|
-
|
|
4
|
+
import { loadConfig, userConfigPath } from '../../core/config/index.js';
|
|
5
|
+
import { fail } from '../../core/util/index.js';
|
|
6
|
+
import { agentCommands, commandsDir, reconcileAgentCommands, } from '../../host/agent-commands/index.js';
|
|
7
|
+
import { insideSandbox } from '../../host/sandbox/index.js';
|
|
8
|
+
import { writeFileAtomic } from '../../shared/io/index.js';
|
|
9
|
+
import { c, table } from '../output/index.js';
|
|
10
|
+
import { editConfigText } from '../menu/settings/index.js';
|
|
11
|
+
function entryOf(ctx) {
|
|
12
|
+
return path.join(ctx.packageRoot, 'dist', 'bin', 'sandbox.js');
|
|
13
|
+
}
|
|
13
14
|
/** Brings this PC in line with agentCommands and says what changed (used after on/off, settings and launch). */
|
|
14
|
-
export
|
|
15
|
+
export function syncAgentCommands(ctx, config, quiet = false) {
|
|
15
16
|
if (insideSandbox())
|
|
16
17
|
return null;
|
|
17
18
|
const result = reconcileAgentCommands(config, ctx.storageRoot, process.execPath, entryOf(ctx));
|
|
18
19
|
if (!result.changed || quiet)
|
|
19
20
|
return result;
|
|
20
21
|
if (result.on) {
|
|
21
|
-
console.log('Agent commands (Beta) are on for: ' +
|
|
22
|
+
console.log('Agent commands (Beta) are on for: ' +
|
|
23
|
+
(result.commands.map((a) => a.command).join(', ') || 'no installed agents found'));
|
|
22
24
|
console.log(c.dim('Open a new terminal, then type e.g. claude in any project folder. Run the real one: set SANDBOX_AGENT_DIRECT=1'));
|
|
23
25
|
}
|
|
24
26
|
else
|
|
25
27
|
console.log('Agent commands are off: claude, codex ... run on this PC again (open a new terminal).');
|
|
26
28
|
return result;
|
|
27
|
-
}
|
|
28
|
-
export
|
|
29
|
+
}
|
|
30
|
+
export function agentCommandsCommand(ctx) {
|
|
29
31
|
if (insideSandbox())
|
|
30
|
-
fail(
|
|
32
|
+
fail("Agent commands change your PC's PATH, so they are set up from your PC, not inside the sandbox.", 'Run sandbox agent-commands on in a terminal on your PC.');
|
|
31
33
|
const action = ctx.options.positionals[0] ?? 'status';
|
|
32
34
|
if (action === 'status') {
|
|
33
35
|
const config = ctx.loaded.config;
|
|
34
36
|
const found = agentCommands(config, ctx.storageRoot);
|
|
35
|
-
console.log('Agent commands (Beta): ' +
|
|
37
|
+
console.log('Agent commands (Beta): ' +
|
|
38
|
+
(config.agentCommands.enabled ? c.green('on') : 'off') +
|
|
39
|
+
c.dim(' (' + commandsDir(ctx.storageRoot) + ')'));
|
|
36
40
|
if (found.length)
|
|
37
|
-
table(found.map((a) => [
|
|
41
|
+
table(found.map((a) => [
|
|
42
|
+
a.command,
|
|
43
|
+
'sandboxed ' + a.harness + (config.agentCommands.enabled ? '' : ' when on'),
|
|
44
|
+
c.dim('real: ' + a.real),
|
|
45
|
+
]));
|
|
38
46
|
else
|
|
39
47
|
console.log(c.dim('No agents found on this PC (claude, codex, gemini ... on your PATH).'));
|
|
40
48
|
if (!config.agentCommands.enabled)
|
|
@@ -51,11 +59,12 @@ export const agentCommandsCommand = (ctx) => {
|
|
|
51
59
|
writeFileAtomic(file, edited.text);
|
|
52
60
|
const result = syncAgentCommands(ctx, loadConfig(file).config, true);
|
|
53
61
|
if (result?.on) {
|
|
54
|
-
console.log('Agent commands (Beta) are on: ' +
|
|
62
|
+
console.log('Agent commands (Beta) are on: ' +
|
|
63
|
+
(result.commands.map((a) => a.command).join(', ') || 'no installed agents found yet'));
|
|
55
64
|
console.log(c.dim('Open a new terminal, then type e.g. claude in a project folder: it starts in a hidden sandbox and attaches.'));
|
|
56
65
|
console.log(c.dim('Run the real one on this PC: set SANDBOX_AGENT_DIRECT=1 (PowerShell: $env:SANDBOX_AGENT_DIRECT=1). Turn off: sandbox agent-commands off'));
|
|
57
66
|
}
|
|
58
67
|
else
|
|
59
68
|
console.log('Agent commands are off: claude, codex ... run on this PC again. Open a new terminal.');
|
|
60
69
|
return 0;
|
|
61
|
-
}
|
|
70
|
+
}
|
|
@@ -8,16 +8,14 @@ export interface Context {
|
|
|
8
8
|
storageRoot: string;
|
|
9
9
|
dataPath: string;
|
|
10
10
|
}
|
|
11
|
-
export declare
|
|
12
|
-
/** Prints rows as aligned columns (the last column is not padded). */
|
|
13
|
-
export declare const table: (rows: string[][]) => void;
|
|
14
|
-
/** Prints `value` as JSON when --json was given; returns whether it did. */
|
|
15
|
-
export declare const printJson: (ctx: Context, value: unknown) => boolean;
|
|
16
|
-
export declare const sandboxAlive: () => boolean;
|
|
11
|
+
export declare function createContext(packageRoot: string, entry: string, options: CliOptions): Context;
|
|
17
12
|
/** For commands that control the sandbox from your PC: inside the sandbox they make no sense. */
|
|
18
|
-
export declare
|
|
19
|
-
export declare
|
|
20
|
-
/**
|
|
21
|
-
|
|
13
|
+
export declare function requireOnPc(what: string): void;
|
|
14
|
+
export declare function requireRunning(hint?: string): void;
|
|
15
|
+
/**
|
|
16
|
+
* Maps a folder on this PC to its path inside the running sandbox (only folders inside the mapped workspace exist
|
|
17
|
+
* there).
|
|
18
|
+
*/
|
|
19
|
+
export declare function guestPathFor(hostDir: string, workspaceHost: string, guestWorkspace: string): string;
|
|
22
20
|
/** The guest folder for the current directory (or --workspace) in the running sandbox. */
|
|
23
|
-
export declare
|
|
21
|
+
export declare function currentGuestDir(ctx: Context, workspaceHost: string, guestWorkspace: string): string;
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
// What every command receives, plus the small helpers they share.
|
|
2
2
|
import fs from 'node:fs';
|
|
3
3
|
import path from 'node:path';
|
|
4
|
-
import
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { GUEST_DATA_DIR, insideSandbox, isSandboxRunning } from '../../host/platform.js';
|
|
4
|
+
import { loadConfig, userDir } from '../../core/config/index.js';
|
|
5
|
+
import { expandPath, fail, isInsideOrEqual } from '../../core/util/index.js';
|
|
6
|
+
import { GUEST_DATA_DIR, insideSandbox, isSandboxRunning } from '../../host/sandbox/index.js';
|
|
8
7
|
/** Keeps ~/.agent-sandbox/*.schema.json in step with the installed version (local schema paths editors trust). */
|
|
9
|
-
|
|
8
|
+
function refreshSchemas(packageRoot) {
|
|
10
9
|
const source = path.join(packageRoot, 'schemas');
|
|
11
10
|
if (!fs.existsSync(source))
|
|
12
11
|
return;
|
|
@@ -19,40 +18,44 @@ const refreshSchemas = (packageRoot) => {
|
|
|
19
18
|
fs.writeFileSync(target, text, 'utf8');
|
|
20
19
|
}
|
|
21
20
|
}
|
|
22
|
-
catch {
|
|
23
|
-
|
|
24
|
-
|
|
21
|
+
catch {
|
|
22
|
+
/* editor help only; never block a command over it */
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export function createContext(packageRoot, entry, options) {
|
|
25
26
|
refreshSchemas(packageRoot);
|
|
26
27
|
const loaded = loadConfig(options.config);
|
|
27
28
|
const storageRoot = expandPath(loaded.config.storage.root, loaded.base);
|
|
28
29
|
// Inside a sandbox, the sandbox's own data folder is the one to talk to.
|
|
29
|
-
return {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
export const printJson = (ctx, value) => {
|
|
39
|
-
// JSON.stringify leaves C1 controls (U+0080-U+009F) as they are; text from the sandbox must not reach a terminal raw.
|
|
40
|
-
if (ctx.options.json)
|
|
41
|
-
console.log(JSON.stringify(value, null, 2).replace(/[\u0080-\u009f]/g, (ch) => '\\u' + ch.charCodeAt(0).toString(16).padStart(4, '0')));
|
|
42
|
-
return ctx.options.json;
|
|
43
|
-
};
|
|
44
|
-
export const sandboxAlive = () => isSandboxRunning();
|
|
30
|
+
return {
|
|
31
|
+
packageRoot,
|
|
32
|
+
entry,
|
|
33
|
+
options,
|
|
34
|
+
loaded,
|
|
35
|
+
storageRoot,
|
|
36
|
+
dataPath: insideSandbox() ? GUEST_DATA_DIR : path.join(storageRoot, 'data', loaded.config.storage.dataName),
|
|
37
|
+
};
|
|
38
|
+
}
|
|
45
39
|
/** For commands that control the sandbox from your PC: inside the sandbox they make no sense. */
|
|
46
|
-
export
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
40
|
+
export function requireOnPc(what) {
|
|
41
|
+
if (insideSandbox())
|
|
42
|
+
fail('You are inside the sandbox already, so "sandbox ' + what + '" has nothing to control.', 'Run it from a terminal on your PC.');
|
|
43
|
+
}
|
|
44
|
+
export function requireRunning(hint = '') {
|
|
45
|
+
if (!isSandboxRunning())
|
|
46
|
+
fail('No Windows Sandbox is running.', hint || 'Start one with sandbox claude.');
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Maps a folder on this PC to its path inside the running sandbox (only folders inside the mapped workspace exist
|
|
50
|
+
* there).
|
|
51
|
+
*/
|
|
52
|
+
export function guestPathFor(hostDir, workspaceHost, guestWorkspace) {
|
|
52
53
|
if (!isInsideOrEqual(workspaceHost, hostDir))
|
|
53
54
|
fail('The running sandbox works on ' + workspaceHost + ', and Windows Sandbox cannot add folders while it runs.', 'Run from inside that folder, or stop the sandbox (sandbox stop) and launch again from ' + hostDir + '.');
|
|
54
55
|
const rel = path.relative(workspaceHost, hostDir);
|
|
55
56
|
return rel ? path.win32.join(guestWorkspace, rel) : guestWorkspace;
|
|
56
|
-
}
|
|
57
|
+
}
|
|
57
58
|
/** The guest folder for the current directory (or --workspace) in the running sandbox. */
|
|
58
|
-
export
|
|
59
|
+
export function currentGuestDir(ctx, workspaceHost, guestWorkspace) {
|
|
60
|
+
return guestPathFor(path.resolve(ctx.options.workspace ?? process.cwd()), workspaceHost, guestWorkspace);
|
|
61
|
+
}
|
|
@@ -11,5 +11,5 @@ export interface CleanTarget {
|
|
|
11
11
|
* Turns `sandbox data clean` arguments into folders. Pure (no disk access); throws a UserError for anything that is
|
|
12
12
|
* not a plain relative target inside the data folder: absolute paths, drive letters, `..`, wildcards, unknown areas.
|
|
13
13
|
*/
|
|
14
|
-
export declare
|
|
15
|
-
export declare
|
|
14
|
+
export declare function resolveCleanTargets(inputs: string[], dataPath: string, storageRoot: string): CleanTarget[];
|
|
15
|
+
export declare function dataClean(ctx: Context): Promise<number>;
|