windows-development-sandbox 1.4.1 → 1.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/config.example.json +3 -1
- package/dist/api.js +27 -16
- package/dist/cli/args.d.ts +4 -6
- package/dist/cli/args.js +67 -34
- package/dist/cli/argv.d.ts +9 -0
- package/dist/cli/argv.js +22 -0
- package/dist/cli/commands/accounts.d.ts +1 -1
- package/dist/cli/commands/accounts.js +42 -27
- package/dist/cli/commands/agent-commands.d.ts +3 -3
- package/dist/cli/commands/agent-commands.js +27 -18
- package/dist/cli/commands/context.d.ts +9 -11
- package/dist/cli/commands/context.js +35 -32
- package/dist/cli/commands/data/clean.d.ts +2 -2
- package/dist/cli/commands/data/clean.js +27 -11
- package/dist/cli/commands/data/collect.d.ts +6 -3
- package/dist/cli/commands/data/collect.js +46 -15
- package/dist/cli/commands/data/index.d.ts +2 -2
- package/dist/cli/commands/data/index.js +30 -12
- package/dist/cli/commands/data/remove.d.ts +1 -1
- package/dist/cli/commands/data/remove.js +4 -4
- package/dist/cli/commands/index.d.ts +5 -4
- package/dist/cli/commands/index.js +5 -4
- package/dist/cli/commands/launch/add-root.d.ts +7 -0
- package/dist/cli/commands/launch/add-root.js +64 -0
- package/dist/cli/commands/launch/boot-progress.d.ts +7 -0
- package/dist/cli/commands/launch/boot-progress.js +48 -0
- package/dist/cli/commands/launch/boot-wants.d.ts +11 -0
- package/dist/cli/commands/launch/boot-wants.js +48 -0
- package/dist/cli/commands/launch/first-start.d.ts +10 -0
- package/dist/cli/commands/launch/first-start.js +53 -0
- package/dist/cli/commands/launch/index.d.ts +6 -0
- package/dist/cli/commands/launch/index.js +6 -0
- package/dist/cli/commands/launch/launch.d.ts +8 -0
- package/dist/cli/commands/launch/launch.js +211 -0
- package/dist/cli/commands/launch/prepare.d.ts +23 -0
- package/dist/cli/commands/launch/prepare.js +109 -0
- package/dist/cli/commands/launch/running.d.ts +45 -0
- package/dist/cli/commands/launch/running.js +218 -0
- package/dist/cli/commands/launch/summary.d.ts +8 -0
- package/dist/cli/commands/launch/summary.js +98 -0
- package/dist/cli/commands/maintenance/audit.d.ts +3 -0
- package/dist/cli/commands/maintenance/audit.js +58 -0
- package/dist/cli/commands/maintenance/clean.d.ts +2 -0
- package/dist/cli/commands/maintenance/clean.js +10 -0
- package/dist/cli/commands/maintenance/config.d.ts +2 -0
- package/dist/cli/commands/maintenance/config.js +145 -0
- package/dist/cli/commands/maintenance/doctor.d.ts +2 -0
- package/dist/cli/commands/maintenance/doctor.js +52 -0
- package/dist/cli/commands/maintenance/host-claude.d.ts +2 -0
- package/dist/cli/commands/maintenance/host-claude.js +4 -0
- package/dist/cli/commands/maintenance/index.d.ts +8 -0
- package/dist/cli/commands/maintenance/index.js +9 -0
- package/dist/cli/commands/maintenance/logs.d.ts +2 -0
- package/dist/cli/commands/maintenance/logs.js +44 -0
- package/dist/cli/commands/maintenance/sync.d.ts +2 -0
- package/dist/cli/commands/maintenance/sync.js +12 -0
- package/dist/cli/commands/maintenance/watch.d.ts +3 -0
- package/dist/cli/commands/maintenance/watch.js +6 -0
- package/dist/cli/commands/projects/describe-sessions.d.ts +3 -0
- package/dist/cli/commands/projects/describe-sessions.js +15 -0
- package/dist/cli/commands/projects/here.d.ts +38 -0
- package/dist/cli/commands/projects/here.js +145 -0
- package/dist/cli/commands/projects/index.d.ts +4 -0
- package/dist/cli/commands/projects/index.js +4 -0
- package/dist/cli/commands/projects/projects.d.ts +14 -0
- package/dist/cli/commands/projects/projects.js +213 -0
- package/dist/cli/commands/projects/restart.d.ts +15 -0
- package/dist/cli/commands/projects/restart.js +149 -0
- package/dist/cli/commands/registry.d.ts +3 -0
- package/dist/cli/commands/registry.js +34 -0
- package/dist/cli/commands/repair/checks.js +105 -29
- package/dist/cli/commands/repair/finders.d.ts +13 -10
- package/dist/cli/commands/repair/finders.js +63 -43
- package/dist/cli/commands/repair/index.d.ts +4 -4
- package/dist/cli/commands/repair/index.js +47 -21
- package/dist/cli/commands/repair/types.d.ts +2 -2
- package/dist/cli/commands/repair/types.js +7 -2
- package/dist/cli/commands/sessions/attach.d.ts +2 -0
- package/dist/cli/commands/sessions/attach.js +45 -0
- package/dist/cli/commands/sessions/control.d.ts +4 -0
- package/dist/cli/commands/sessions/control.js +62 -0
- package/dist/cli/commands/sessions/exec.d.ts +6 -0
- package/dist/cli/commands/sessions/exec.js +72 -0
- package/dist/cli/commands/sessions/index.d.ts +6 -0
- package/dist/cli/commands/sessions/index.js +9 -0
- package/dist/cli/commands/sessions/list.d.ts +15 -0
- package/dist/cli/commands/sessions/list.js +65 -0
- package/dist/cli/commands/sessions/status.d.ts +2 -0
- package/dist/cli/commands/sessions/status.js +153 -0
- package/dist/cli/commands/sessions/window.d.ts +3 -0
- package/dist/cli/commands/sessions/window.js +18 -0
- package/dist/cli/commands/setup/checks.d.ts +4 -4
- package/dist/cli/commands/setup/checks.js +36 -19
- package/dist/cli/commands/setup/facts.d.ts +6 -6
- package/dist/cli/commands/setup/facts.js +23 -11
- package/dist/cli/commands/setup/index.d.ts +1 -1
- package/dist/cli/commands/setup/index.js +25 -12
- package/dist/cli/commands/user-config.d.ts +5 -5
- package/dist/cli/commands/user-config.js +14 -12
- package/dist/cli/history.d.ts +5 -4
- package/dist/cli/history.js +23 -11
- package/dist/cli/index.d.ts +4 -14
- package/dist/cli/index.js +27 -77
- package/dist/cli/manifest.d.ts +464 -10
- package/dist/cli/manifest.js +327 -53
- package/dist/cli/menu/apps.d.ts +7 -5
- package/dist/cli/menu/apps.js +64 -16
- package/dist/cli/menu/command-fields.d.ts +15 -0
- package/dist/cli/menu/command-fields.js +23 -0
- package/dist/cli/menu/command-form.d.ts +3 -5
- package/dist/cli/menu/command-form.js +116 -48
- package/dist/cli/menu/home.d.ts +22 -0
- package/dist/cli/menu/home.js +72 -0
- package/dist/cli/menu/index.d.ts +2 -24
- package/dist/cli/menu/index.js +4 -178
- package/dist/cli/menu/menu.d.ts +23 -0
- package/dist/cli/menu/menu.js +185 -0
- package/dist/cli/menu/settings/categories.d.ts +2 -2
- package/dist/cli/menu/settings/categories.js +123 -20
- package/dist/cli/menu/settings/collections/collection-editor.d.ts +23 -0
- package/dist/cli/menu/settings/collections/collection-editor.js +89 -0
- package/dist/cli/menu/settings/collections/map-editor.d.ts +10 -0
- package/dist/cli/menu/settings/collections/map-editor.js +34 -0
- package/dist/cli/menu/settings/collections/object-list-editor.d.ts +10 -0
- package/dist/cli/menu/settings/collections/object-list-editor.js +23 -0
- package/dist/cli/menu/settings/collections/object-map-editor.d.ts +10 -0
- package/dist/cli/menu/settings/collections/object-map-editor.js +35 -0
- package/dist/cli/menu/settings/collections/string-list-editor.d.ts +12 -0
- package/dist/cli/menu/settings/collections/string-list-editor.js +39 -0
- package/dist/cli/menu/settings/config-file.d.ts +2 -2
- package/dist/cli/menu/settings/config-file.js +42 -19
- package/dist/cli/menu/settings/editor-actions.d.ts +2 -0
- package/dist/cli/menu/settings/editor-actions.js +2 -0
- package/dist/cli/menu/settings/format.d.ts +5 -0
- package/dist/cli/menu/settings/format.js +39 -0
- package/dist/cli/menu/settings/index.d.ts +1 -29
- package/dist/cli/menu/settings/index.js +1 -133
- package/dist/cli/menu/settings/object-editor.d.ts +12 -0
- package/dist/cli/menu/settings/object-editor.js +86 -0
- package/dist/cli/menu/settings/schema-node.d.ts +3 -1
- package/dist/cli/menu/settings/schema-node.js +71 -24
- package/dist/cli/menu/settings/settings-editor.d.ts +30 -0
- package/dist/cli/menu/settings/settings-editor.js +176 -0
- package/dist/cli/menu/settings/{editors.d.ts → value-editor.d.ts} +2 -13
- package/dist/cli/menu/settings/value-editor.js +137 -0
- package/dist/cli/menu/several.d.ts +4 -4
- package/dist/cli/menu/several.js +61 -20
- package/dist/cli/{colors.d.ts → output/colors.d.ts} +8 -8
- package/dist/cli/{colors.js → output/colors.js} +32 -14
- package/dist/cli/output/index.d.ts +3 -0
- package/dist/cli/output/index.js +3 -0
- package/dist/cli/output/print.d.ts +5 -0
- package/dist/cli/output/print.js +14 -0
- package/dist/cli/{progress.d.ts → output/progress.d.ts} +5 -5
- package/dist/cli/{progress.js → output/progress.js} +42 -19
- package/dist/cli/report.d.ts +2 -0
- package/dist/cli/report.js +20 -0
- package/dist/cli/tui/app.d.ts +6 -16
- package/dist/cli/tui/app.js +28 -8
- package/dist/cli/tui/dialogs/confirm-screen.d.ts +20 -0
- package/dist/cli/tui/dialogs/confirm-screen.js +50 -0
- package/dist/cli/tui/dialogs/message-screen.d.ts +17 -0
- package/dist/cli/tui/dialogs/message-screen.js +55 -0
- package/dist/cli/tui/dialogs/paragraphs.d.ts +2 -0
- package/dist/cli/tui/dialogs/paragraphs.js +5 -0
- package/dist/cli/tui/dialogs/text-screen.d.ts +26 -0
- package/dist/cli/tui/dialogs/text-screen.js +107 -0
- package/dist/cli/tui/frame.js +3 -1
- package/dist/cli/tui/index.d.ts +7 -3
- package/dist/cli/tui/index.js +4 -2
- package/dist/cli/tui/list/list-screen.d.ts +29 -0
- package/dist/cli/tui/{list-screen.js → list/list-screen.js} +86 -23
- package/dist/cli/tui/{list-screen.d.ts → list/list-types.d.ts} +0 -28
- package/dist/cli/tui/screen.d.ts +14 -0
- package/dist/cli/tui/terminal.js +34 -10
- package/dist/cli/tui/text.d.ts +2 -1
- package/dist/cli/tui/text.js +37 -7
- package/dist/cli/tui/theme.js +27 -9
- package/dist/cli/validate.d.ts +8 -8
- package/dist/cli/validate.js +32 -21
- package/dist/core/config/defaults.d.ts +2 -0
- package/dist/core/config/defaults.js +203 -0
- package/dist/core/config/index.d.ts +2 -0
- package/dist/core/config/index.js +3 -0
- package/dist/core/{config.d.ts → config/loader.d.ts} +1 -2
- package/dist/core/config/loader.js +47 -0
- package/dist/core/{detect-databases.js → detect/databases.js} +111 -23
- package/dist/core/detect/index.d.ts +4 -0
- package/dist/core/detect/index.js +4 -0
- package/dist/core/{detect-pwsh.d.ts → detect/pwsh.d.ts} +1 -1
- package/dist/core/{detect-pwsh.js → detect/pwsh.js} +25 -11
- package/dist/core/{detect-toolchains.d.ts → detect/toolchains.d.ts} +1 -1
- package/dist/core/{detect-toolchains.js → detect/toolchains.js} +42 -5
- package/dist/{guest/toolchains → core/detect}/versions.js +28 -12
- package/dist/core/disk.d.ts +2 -0
- package/dist/core/disk.js +46 -3
- package/dist/core/local-config/boot-wants.d.ts +45 -0
- package/dist/core/local-config/boot-wants.js +120 -0
- package/dist/core/local-config/file.d.ts +3 -0
- package/dist/core/local-config/file.js +16 -0
- package/dist/core/local-config/index.d.ts +5 -0
- package/dist/core/local-config/index.js +7 -0
- package/dist/core/{local-config.d.ts → local-config/overrides.d.ts} +3 -18
- package/dist/core/{local-config.js → local-config/overrides.js} +45 -52
- package/dist/core/local-config/policy.d.ts +19 -0
- package/dist/core/local-config/policy.js +45 -0
- package/dist/core/local-config/trust.d.ts +13 -0
- package/dist/core/local-config/trust.js +43 -0
- package/dist/core/package-info.d.ts +4 -0
- package/dist/core/package-info.js +13 -0
- package/dist/core/run/guest-workspace.d.ts +23 -0
- package/dist/core/run/guest-workspace.js +47 -0
- package/dist/core/run/index.d.ts +3 -0
- package/dist/core/run/index.js +3 -0
- package/dist/core/run/resolve-run.d.ts +3 -0
- package/dist/core/run/resolve-run.js +202 -0
- package/dist/core/run/versions.d.ts +13 -0
- package/dist/core/run/versions.js +65 -0
- package/dist/core/safe-paths.js +17 -5
- package/dist/core/schema/apps.d.ts +4 -4
- package/dist/core/schema/apps.js +55 -21
- package/dist/core/schema/common.d.ts +13 -10
- package/dist/core/schema/common.js +16 -10
- package/dist/core/schema/config.d.ts +15 -10
- package/dist/core/schema/config.js +78 -53
- package/dist/core/schema/databases.d.ts +4 -3
- package/dist/core/schema/databases.js +16 -12
- package/dist/core/schema/harness.d.ts +1 -1
- package/dist/core/schema/harness.js +17 -7
- package/dist/core/schema/index.d.ts +6 -0
- package/dist/core/schema/index.js +8 -0
- package/dist/core/schema/json-schema.js +10 -5
- package/dist/core/schema/profile.d.ts +4 -4
- package/dist/core/schema/profile.js +37 -17
- package/dist/core/schema/projects.d.ts +1 -1
- package/dist/core/schema/projects.js +16 -6
- package/dist/core/schema/sandbox.d.ts +11 -11
- package/dist/core/schema/sandbox.js +101 -37
- package/dist/core/schema/toolchains.d.ts +6 -1
- package/dist/core/schema/toolchains.js +84 -34
- package/dist/core/types.d.ts +19 -9
- package/dist/core/util/errors.d.ts +8 -0
- package/dist/core/util/errors.js +14 -0
- package/dist/core/util/fs.d.ts +8 -0
- package/dist/core/util/fs.js +40 -0
- package/dist/core/util/index.d.ts +7 -0
- package/dist/core/util/index.js +7 -0
- package/dist/core/util/jsonc.d.ts +6 -0
- package/dist/core/util/jsonc.js +25 -0
- package/dist/core/util/links.d.ts +10 -0
- package/dist/core/util/links.js +39 -0
- package/dist/core/util/paths.d.ts +7 -0
- package/dist/core/util/paths.js +33 -0
- package/dist/core/util/process.d.ts +15 -0
- package/dist/core/util/process.js +54 -0
- package/dist/core/util/text.d.ts +8 -0
- package/dist/core/util/text.js +8 -0
- package/dist/guest/{setup/agents.js → agents/agent-installer.js} +24 -4
- package/dist/guest/apps/after-install.d.ts +3 -0
- package/dist/guest/apps/after-install.js +47 -0
- package/dist/guest/apps/app-installer.d.ts +22 -0
- package/dist/guest/apps/app-installer.js +116 -0
- package/dist/guest/apps/find-exe.d.ts +5 -0
- package/dist/guest/apps/find-exe.js +41 -0
- package/dist/guest/apps/index.d.ts +3 -10
- package/dist/guest/apps/index.js +6 -206
- package/dist/guest/apps/resolvers.js +37 -9
- package/dist/guest/apps/shortcuts.d.ts +6 -0
- package/dist/guest/apps/shortcuts.js +28 -0
- package/dist/guest/apps/sources.d.ts +4 -0
- package/dist/guest/apps/sources.js +17 -0
- package/dist/guest/apps/unpack.d.ts +3 -0
- package/dist/guest/apps/unpack.js +47 -0
- package/dist/guest/{audit-parse.js → audit/parse.js} +39 -3
- package/dist/guest/{audit.d.ts → audit/process-audit.d.ts} +3 -1
- package/dist/guest/{audit.js → audit/process-audit.js} +33 -8
- package/dist/guest/boot/boot-env.d.ts +4 -0
- package/dist/guest/{boot-env.js → boot/boot-env.js} +7 -5
- package/dist/guest/boot/boot.d.ts +1 -0
- package/dist/guest/{main.js → boot/boot.js} +96 -50
- package/dist/guest/{guide.js → boot/guide.js} +32 -7
- package/dist/guest/{project-env.d.ts → boot/project-env.d.ts} +3 -3
- package/dist/guest/{project-env.js → boot/project-env.js} +12 -4
- package/dist/guest/boot/project-status.d.ts +5 -0
- package/dist/guest/boot/project-status.js +28 -0
- package/dist/guest/daemon/daemon.d.ts +1 -0
- package/dist/guest/daemon/daemon.js +51 -0
- package/dist/guest/daemon/exec.js +18 -6
- package/dist/guest/daemon/{shutdown.js → idle-shutdown.js} +5 -4
- package/dist/guest/daemon/{project.d.ts → project-provisioner.d.ts} +3 -3
- package/dist/guest/daemon/{project.js → project-provisioner.js} +60 -22
- package/dist/guest/daemon/relays.js +5 -3
- package/dist/guest/daemon/{session.js → sessions.js} +84 -24
- package/dist/guest/daemon/state.d.ts +4 -1
- package/dist/guest/daemon/state.js +34 -20
- package/dist/guest/databases/database-server.d.ts +13 -0
- package/dist/guest/databases/database-server.js +35 -0
- package/dist/guest/databases/dynamodb.d.ts +12 -0
- package/dist/guest/databases/dynamodb.js +81 -0
- package/dist/guest/databases/index.d.ts +2 -0
- package/dist/guest/databases/index.js +2 -0
- package/dist/guest/databases/mongodb.d.ts +7 -0
- package/dist/guest/databases/mongodb.js +46 -0
- package/dist/guest/databases/mysql.d.ts +7 -0
- package/dist/guest/databases/mysql.js +59 -0
- package/dist/guest/databases/names.d.ts +5 -0
- package/dist/guest/databases/names.js +8 -0
- package/dist/guest/databases/postgres.d.ts +9 -0
- package/dist/guest/databases/postgres.js +85 -0
- package/dist/guest/databases/redis.d.ts +7 -0
- package/dist/guest/databases/redis.js +25 -0
- package/dist/guest/databases/registry.d.ts +5 -0
- package/dist/guest/databases/registry.js +51 -0
- package/dist/guest/databases/sbx-db.d.ts +1 -0
- package/dist/guest/{db.js → databases/sbx-db.js} +13 -13
- package/dist/guest/{toolchains/databases → databases}/server.d.ts +5 -5
- package/dist/guest/{toolchains/databases → databases}/server.js +18 -13
- package/dist/guest/entries/daemon.js +16 -0
- package/dist/guest/entries/db.js +10 -0
- package/dist/guest/entries/gitguard.js +20 -0
- package/dist/guest/entries/main.d.ts +1 -0
- package/dist/guest/entries/main.js +24 -0
- package/dist/guest/entries/netproxy.d.ts +1 -0
- package/dist/guest/entries/netproxy.js +7 -0
- package/dist/guest/entries/view.d.ts +1 -0
- package/dist/guest/entries/view.js +11 -0
- package/dist/guest/{gitguard.js → git/decision.js} +49 -26
- package/dist/guest/network/addresses.d.ts +2 -0
- package/dist/guest/network/addresses.js +6 -0
- package/dist/guest/{setup/network.d.ts → network/allow-only.d.ts} +0 -10
- package/dist/guest/network/allow-only.js +84 -0
- package/dist/guest/network/firewall.d.ts +9 -0
- package/dist/guest/{setup/network.js → network/firewall.js} +58 -63
- package/dist/guest/network/proxy-server.d.ts +2 -0
- package/dist/guest/{netproxy.js → network/proxy-server.js} +37 -18
- package/dist/guest/{helpers.d.ts → runtime/csc.d.ts} +1 -1
- package/dist/guest/{helpers.js → runtime/csc.js} +7 -2
- package/dist/guest/runtime/fs.d.ts +2 -0
- package/dist/guest/runtime/fs.js +6 -0
- package/dist/guest/runtime/log.d.ts +3 -0
- package/dist/guest/runtime/log.js +22 -0
- package/dist/guest/runtime/paths.d.ts +13 -0
- package/dist/guest/runtime/paths.js +14 -0
- package/dist/guest/{ports.js → runtime/ports.js} +8 -2
- package/dist/guest/runtime/process.d.ts +15 -0
- package/dist/guest/runtime/process.js +59 -0
- package/dist/guest/{project-context.js → runtime/project-context.js} +1 -1
- package/dist/guest/runtime/session.d.ts +5 -0
- package/dist/guest/runtime/session.js +10 -0
- package/dist/guest/runtime/status.d.ts +7 -0
- package/dist/guest/runtime/status.js +57 -0
- package/dist/guest/{cmdline.js → sessions/cmdline.js} +10 -4
- package/dist/guest/{ptyhost.js → sessions/pty-host.js} +12 -5
- package/dist/guest/{view.js → sessions/viewer.js} +8 -11
- package/dist/guest/setup/claude-mem.d.ts +10 -0
- package/dist/guest/setup/{claude.js → claude-mem.js} +18 -78
- package/dist/guest/setup/{claude.d.ts → claude-profile.d.ts} +0 -10
- package/dist/guest/setup/claude-profile.js +89 -0
- package/dist/guest/setup/desktop.d.ts +2 -0
- package/dist/guest/setup/desktop.js +32 -0
- package/dist/guest/setup/environment.js +28 -5
- package/dist/guest/setup/{user.d.ts → git-identity.d.ts} +0 -2
- package/dist/guest/setup/git-identity.js +34 -0
- package/dist/guest/{gitrules.d.ts → setup/git-rules.d.ts} +1 -1
- package/dist/guest/setup/git-rules.js +50 -0
- package/dist/guest/setup/hooks.js +22 -5
- package/dist/guest/setup/{policy.js → managed-policy.js} +2 -2
- package/dist/guest/toolchains/catalogue.d.ts +4 -4
- package/dist/guest/toolchains/catalogue.js +30 -7
- package/dist/guest/toolchains/detect.d.ts +12 -0
- package/dist/guest/toolchains/detect.js +54 -0
- package/dist/guest/toolchains/index.d.ts +3 -17
- package/dist/guest/toolchains/index.js +1 -106
- package/dist/guest/toolchains/install.d.ts +20 -0
- package/dist/guest/toolchains/install.js +29 -0
- package/dist/guest/toolchains/languages/go.d.ts +3 -0
- package/dist/guest/toolchains/{go.js → languages/go.js} +27 -9
- package/dist/guest/toolchains/languages/java.d.ts +8 -0
- package/dist/guest/toolchains/{java.js → languages/java.js} +57 -18
- package/dist/guest/toolchains/languages/node.d.ts +3 -0
- package/dist/guest/toolchains/{node.js → languages/node.js} +51 -18
- package/dist/guest/toolchains/languages/php.d.ts +3 -0
- package/dist/guest/toolchains/{scripting → languages}/php.js +36 -11
- package/dist/guest/toolchains/languages/python-tools.d.ts +3 -0
- package/dist/guest/toolchains/languages/python-tools.js +12 -0
- package/dist/guest/toolchains/languages/python.d.ts +3 -0
- package/dist/guest/toolchains/{python.js → languages/python.js} +29 -16
- package/dist/guest/toolchains/languages/ruby.d.ts +3 -0
- package/dist/guest/toolchains/{scripting → languages}/ruby.js +28 -10
- package/dist/guest/toolchains/leftovers.d.ts +1 -1
- package/dist/guest/toolchains/leftovers.js +13 -11
- package/dist/guest/toolchains/managers.d.ts +6 -6
- package/dist/guest/toolchains/managers.js +38 -17
- package/dist/guest/toolchains/native/binstall.d.ts +3 -2
- package/dist/guest/toolchains/native/binstall.js +20 -8
- package/dist/guest/toolchains/native/cpp.d.ts +2 -2
- package/dist/guest/toolchains/native/cpp.js +23 -8
- package/dist/guest/toolchains/native/dotnet.d.ts +5 -3
- package/dist/guest/toolchains/native/dotnet.js +72 -24
- package/dist/guest/toolchains/native/mesa.d.ts +2 -2
- package/dist/guest/toolchains/native/mesa.js +27 -10
- package/dist/guest/toolchains/native/msvc/environment.d.ts +4 -4
- package/dist/guest/toolchains/native/msvc/environment.js +30 -16
- package/dist/guest/toolchains/native/msvc/index.d.ts +3 -3
- package/dist/guest/toolchains/native/msvc/index.js +10 -8
- package/dist/guest/toolchains/native/msvc/packages.d.ts +1 -1
- package/dist/guest/toolchains/native/msvc/packages.js +69 -23
- package/dist/guest/toolchains/native/msvc/tree.d.ts +6 -6
- package/dist/guest/toolchains/native/msvc/tree.js +15 -9
- package/dist/guest/toolchains/native/rust-extras.d.ts +23 -0
- package/dist/guest/toolchains/native/rust-extras.js +100 -0
- package/dist/guest/toolchains/native/rust.d.ts +2 -2
- package/dist/guest/toolchains/native/rust.js +41 -10
- package/dist/guest/toolchains/{scripting → native}/vcruntime.d.ts +2 -2
- package/dist/guest/toolchains/{scripting → native}/vcruntime.js +17 -7
- package/dist/guest/toolchains/package-ledger.d.ts +17 -0
- package/dist/guest/toolchains/package-ledger.js +54 -0
- package/dist/guest/toolchains/plan.d.ts +3 -24
- package/dist/guest/toolchains/plan.js +99 -111
- package/dist/guest/toolchains/runtimes.d.ts +6 -6
- package/dist/guest/toolchains/runtimes.js +31 -13
- package/dist/guest/toolchains/scheduler.d.ts +22 -0
- package/dist/guest/toolchains/scheduler.js +123 -0
- package/dist/guest/toolchains/setup.d.ts +10 -0
- package/dist/guest/toolchains/setup.js +22 -0
- package/dist/guest/toolchains/state-file.d.ts +3 -0
- package/dist/guest/toolchains/state-file.js +10 -0
- package/dist/guest/toolchains/step.d.ts +24 -0
- package/dist/guest/toolchains/step.js +1 -0
- package/dist/guest/toolchains/tool-env.d.ts +12 -0
- package/dist/guest/toolchains/tool-env.js +16 -0
- package/dist/guest/toolchains/tools/cli.d.ts +10 -0
- package/dist/guest/toolchains/{cli.js → tools/cli.js} +35 -15
- package/dist/guest/toolchains/tools/git.d.ts +3 -0
- package/dist/guest/toolchains/{git.js → tools/git.js} +38 -15
- package/dist/guest/toolchains/tools/pwsh.d.ts +4 -0
- package/dist/guest/toolchains/{pwsh.js → tools/pwsh.js} +14 -7
- package/dist/guest/toolchains/{vscode-profile.d.ts → tools/vscode-profile.d.ts} +6 -6
- package/dist/guest/toolchains/{vscode-profile.js → tools/vscode-profile.js} +28 -12
- package/dist/guest/toolchains/{vscode.d.ts → tools/vscode.d.ts} +6 -6
- package/dist/guest/toolchains/{vscode.js → tools/vscode.js} +67 -21
- package/dist/guest/toolchains/version-cache.d.ts +16 -0
- package/dist/guest/toolchains/version-cache.js +67 -0
- package/dist/host/agent-commands/commands.d.ts +13 -0
- package/dist/host/agent-commands/commands.js +33 -0
- package/dist/host/agent-commands/forwarders.d.ts +7 -0
- package/dist/host/agent-commands/forwarders.js +31 -0
- package/dist/host/agent-commands/index.d.ts +4 -0
- package/dist/host/agent-commands/index.js +4 -0
- package/dist/host/agent-commands/reconcile.d.ts +12 -0
- package/dist/host/agent-commands/reconcile.js +69 -0
- package/dist/host/agent-commands/user-path.d.ts +2 -0
- package/dist/host/agent-commands/user-path.js +33 -0
- package/dist/host/audit/collect.d.ts +2 -2
- package/dist/host/audit/collect.js +59 -22
- package/dist/host/audit/log.d.ts +2 -2
- package/dist/host/audit/log.js +24 -8
- package/dist/host/{attach.d.ts → channel/attach.d.ts} +2 -2
- package/dist/host/{attach.js → channel/attach.js} +33 -15
- package/dist/host/channel/channel.d.ts +51 -0
- package/dist/host/channel/channel.js +196 -0
- package/dist/host/channel/index.d.ts +2 -0
- package/dist/host/channel/index.js +2 -0
- package/dist/host/guard/agent-files.d.ts +7 -0
- package/dist/host/guard/agent-files.js +103 -0
- package/dist/host/guard/commands.d.ts +10 -0
- package/dist/host/guard/commands.js +123 -0
- package/dist/host/guard/file-hash.d.ts +4 -0
- package/dist/host/guard/file-hash.js +37 -0
- package/dist/host/guard/git-config.d.ts +5 -0
- package/dist/host/guard/git-config.js +62 -0
- package/dist/host/guard/git-dirs.d.ts +12 -0
- package/dist/host/guard/git-dirs.js +53 -0
- package/dist/host/guard/index.d.ts +5 -0
- package/dist/host/guard/index.js +4 -0
- package/dist/host/guard/mark-of-the-web.d.ts +8 -0
- package/dist/host/guard/mark-of-the-web.js +74 -0
- package/dist/host/guard/nested-repos.d.ts +14 -0
- package/dist/host/guard/nested-repos.js +88 -0
- package/dist/host/guard/quarantine.d.ts +3 -0
- package/dist/host/guard/quarantine.js +24 -0
- package/dist/host/guard/repo-guard.d.ts +10 -0
- package/dist/host/guard/repo-guard.js +36 -0
- package/dist/host/guard/store.d.ts +40 -0
- package/dist/host/guard/store.js +145 -0
- package/dist/host/guard/types.d.ts +27 -0
- package/dist/host/guard/types.js +3 -0
- package/dist/host/guard/watch-state.d.ts +9 -0
- package/dist/host/guard/watch-state.js +26 -0
- package/dist/host/launch/boot-projects.d.ts +17 -0
- package/dist/host/launch/{projects.js → boot-projects.js} +22 -13
- package/dist/host/{database-plan.d.ts → launch/database-plan.d.ts} +5 -5
- package/dist/host/{database-plan.js → launch/database-plan.js} +24 -13
- package/dist/host/launch/generate.d.ts +4 -0
- package/dist/host/launch/generate.js +77 -0
- package/dist/host/launch/index.d.ts +10 -0
- package/dist/host/launch/index.js +10 -0
- package/dist/host/launch/mappings.d.ts +5 -5
- package/dist/host/launch/mappings.js +37 -24
- package/dist/host/launch/pc-scan.d.ts +5 -0
- package/dist/host/{pc-scan.js → launch/pc-scan.js} +20 -13
- package/dist/host/launch/project-scan.d.ts +7 -0
- package/dist/host/{project-scan.js → launch/project-scan.js} +29 -21
- package/dist/host/launch/session-file.d.ts +23 -0
- package/dist/host/launch/session-file.js +73 -0
- package/dist/host/launch/stage.d.ts +5 -5
- package/dist/host/launch/stage.js +14 -13
- package/dist/host/launch/toolchains.d.ts +4 -0
- package/dist/host/launch/toolchains.js +11 -0
- package/dist/host/launch/{wsb.d.ts → wsb-file.d.ts} +4 -2
- package/dist/host/launch/wsb-file.js +56 -0
- package/dist/host/life/crash-report.d.ts +8 -0
- package/dist/host/life/crash-report.js +87 -0
- package/dist/host/life/index.d.ts +6 -0
- package/dist/host/life/index.js +6 -0
- package/dist/host/life/keep-awake.d.ts +10 -0
- package/dist/host/life/keep-awake.js +29 -0
- package/dist/host/life/life-record.d.ts +48 -0
- package/dist/host/life/life-record.js +76 -0
- package/dist/host/life/stop-events.d.ts +27 -0
- package/dist/host/life/stop-events.js +96 -0
- package/dist/host/life/stop-warning.d.ts +4 -0
- package/dist/host/life/stop-warning.js +25 -0
- package/dist/host/life/windows-update.d.ts +3 -0
- package/dist/host/life/windows-update.js +11 -0
- package/dist/host/native.d.ts +4 -0
- package/dist/host/native.js +11 -0
- package/dist/host/network/index.d.ts +1 -0
- package/dist/host/network/index.js +1 -0
- package/dist/host/{port-forward.d.ts → network/port-forward.d.ts} +1 -1
- package/dist/host/{port-forward.js → network/port-forward.js} +16 -10
- package/dist/host/profile/accounts.d.ts +37 -0
- package/dist/host/profile/accounts.js +146 -0
- package/dist/host/profile/claude-login.d.ts +22 -0
- package/dist/host/profile/claude-login.js +57 -0
- package/dist/host/{claude-profile.d.ts → profile/claude-profile.d.ts} +9 -9
- package/dist/host/{claude-profile.js → profile/claude-profile.js} +32 -22
- package/dist/host/profile/index.d.ts +7 -0
- package/dist/host/profile/index.js +7 -0
- package/dist/host/profile/personalize.d.ts +2 -0
- package/dist/host/profile/personalize.js +127 -0
- package/dist/host/profile/reg-file.d.ts +8 -0
- package/dist/host/profile/reg-file.js +45 -0
- package/dist/host/profile/secret-files.d.ts +2 -0
- package/dist/host/profile/secret-files.js +25 -0
- package/dist/host/profile/secret-patterns.d.ts +6 -0
- package/dist/host/profile/secret-patterns.js +128 -0
- package/dist/host/profile/secrets.d.ts +12 -0
- package/dist/host/profile/secrets.js +100 -0
- package/dist/host/projects/index.d.ts +4 -0
- package/dist/host/projects/index.js +4 -0
- package/dist/host/{join.d.ts → projects/join.d.ts} +12 -9
- package/dist/host/{join.js → projects/join.js} +62 -33
- package/dist/host/projects/known.d.ts +28 -0
- package/dist/host/projects/known.js +55 -0
- package/dist/host/projects/mapper.d.ts +29 -0
- package/dist/host/projects/mapper.js +88 -0
- package/dist/host/projects/registry.d.ts +83 -0
- package/dist/host/projects/registry.js +136 -0
- package/dist/host/sandbox/doctor.d.ts +2 -0
- package/dist/host/sandbox/doctor.js +42 -0
- package/dist/host/sandbox/host-claude.d.ts +1 -0
- package/dist/host/sandbox/host-claude.js +26 -0
- package/dist/host/sandbox/index.d.ts +6 -0
- package/dist/host/sandbox/index.js +6 -0
- package/dist/host/{platform.d.ts → sandbox/platform.d.ts} +0 -5
- package/dist/host/sandbox/platform.js +60 -0
- package/dist/host/sandbox/probe.d.ts +3 -0
- package/dist/host/sandbox/probe.js +47 -0
- package/dist/host/{window.js → sandbox/window.js} +7 -5
- package/dist/host/{wsb.js → sandbox/wsb-cli.js} +31 -8
- package/dist/host/{cleanup.js → storage/cleanup.js} +27 -12
- package/dist/host/storage/index.d.ts +2 -0
- package/dist/host/storage/index.js +2 -0
- package/dist/host/storage/state-files.d.ts +4 -0
- package/dist/host/storage/state-files.js +10 -0
- package/dist/host/test-guard.js +1 -1
- package/dist/host/tools/conpty.d.ts +8 -0
- package/dist/host/tools/conpty.js +58 -0
- package/dist/host/tools/index.d.ts +2 -0
- package/dist/host/tools/index.js +2 -0
- package/dist/host/{terminal.d.ts → tools/windows-terminal.d.ts} +2 -10
- package/dist/host/{terminal.js → tools/windows-terminal.js} +33 -57
- package/dist/host/workspace-view/active-views.d.ts +3 -0
- package/dist/host/workspace-view/active-views.js +22 -0
- package/dist/host/workspace-view/index.d.ts +2 -18
- package/dist/host/workspace-view/index.js +2 -49
- package/dist/host/workspace-view/plan.d.ts +16 -0
- package/dist/host/workspace-view/plan.js +50 -0
- package/dist/host/workspace-view/rules.js +10 -3
- package/dist/host/workspace-view/view-state.d.ts +10 -0
- package/dist/host/workspace-view/view-state.js +31 -0
- package/dist/host/workspace-view/view.d.ts +1 -0
- package/dist/host/workspace-view/view.js +51 -55
- package/dist/runtime/daemon.js +4220 -1968
- package/dist/runtime/db.js +2134 -849
- package/dist/runtime/gitguard.js +29 -11
- package/dist/runtime/main.js +4687 -2243
- package/dist/runtime/netproxy.js +1644 -420
- package/dist/runtime/view.js +1356 -428
- package/dist/selftest/accounts.test.d.ts +1 -1
- package/dist/selftest/accounts.test.js +20 -17
- package/dist/selftest/agent-commands.test.d.ts +1 -1
- package/dist/selftest/agent-commands.test.js +9 -5
- package/dist/selftest/audit.test.d.ts +1 -1
- package/dist/selftest/audit.test.js +46 -13
- package/dist/selftest/channel.test.d.ts +1 -1
- package/dist/selftest/channel.test.js +63 -16
- package/dist/selftest/cli.test.d.ts +1 -1
- package/dist/selftest/cli.test.js +68 -16
- package/dist/selftest/cmdline.test.d.ts +1 -1
- package/dist/selftest/cmdline.test.js +36 -7
- package/dist/selftest/config.test.d.ts +1 -1
- package/dist/selftest/config.test.js +12 -5
- package/dist/selftest/data.test.d.ts +1 -1
- package/dist/selftest/data.test.js +35 -6
- package/dist/selftest/detect.test.d.ts +1 -1
- package/dist/selftest/detect.test.js +22 -9
- package/dist/selftest/generate.test.d.ts +1 -1
- package/dist/selftest/generate.test.js +33 -9
- package/dist/selftest/git-access.test.d.ts +1 -1
- package/dist/selftest/git-access.test.js +42 -4
- package/dist/selftest/guest-boot.test.d.ts +1 -1
- package/dist/selftest/guest-boot.test.js +25 -7
- package/dist/selftest/host-sim.test.d.ts +1 -1
- package/dist/selftest/host-sim.test.js +27 -3
- package/dist/selftest/hostile-input.test.d.ts +1 -1
- package/dist/selftest/hostile-input.test.js +5 -5
- package/dist/selftest/index.d.ts +1 -1
- package/dist/selftest/index.js +72 -16
- package/dist/selftest/layout.test.d.ts +2 -0
- package/dist/selftest/layout.test.js +131 -0
- package/dist/selftest/links.test.d.ts +1 -1
- package/dist/selftest/links.test.js +16 -11
- package/dist/selftest/live-daemon.test.d.ts +1 -1
- package/dist/selftest/live-daemon.test.js +20 -8
- package/dist/selftest/live-git.test.d.ts +1 -1
- package/dist/selftest/live-git.test.js +13 -4
- package/dist/selftest/live-network.test.d.ts +1 -1
- package/dist/selftest/live-network.test.js +24 -9
- package/dist/selftest/live-projects.test.d.ts +1 -1
- package/dist/selftest/live-projects.test.js +47 -20
- package/dist/selftest/live-terminal.test.d.ts +1 -1
- package/dist/selftest/live-terminal.test.js +41 -15
- package/dist/selftest/local-config.test.d.ts +1 -1
- package/dist/selftest/local-config.test.js +64 -16
- package/dist/selftest/mirror.test.d.ts +1 -1
- package/dist/selftest/mirror.test.js +102 -32
- package/dist/selftest/network.test.d.ts +1 -1
- package/dist/selftest/network.test.js +17 -8
- package/dist/selftest/personalization.test.d.ts +1 -1
- package/dist/selftest/personalization.test.js +12 -5
- package/dist/selftest/projects.test.d.ts +1 -1
- package/dist/selftest/projects.test.js +280 -85
- package/dist/selftest/repair.test.d.ts +1 -1
- package/dist/selftest/repair.test.js +17 -5
- package/dist/selftest/repo-guard.test.d.ts +1 -1
- package/dist/selftest/repo-guard.test.js +21 -20
- package/dist/selftest/secrets.test.d.ts +1 -1
- package/dist/selftest/secrets.test.js +57 -13
- package/dist/selftest/setup.test.d.ts +1 -1
- package/dist/selftest/setup.test.js +25 -5
- package/dist/selftest/{fixtures.d.ts → support/fixtures.d.ts} +5 -3
- package/dist/selftest/{fixtures.js → support/fixtures.js} +95 -17
- package/dist/selftest/{harness.js → support/harness.js} +24 -7
- package/dist/selftest/{live.d.ts → support/live.d.ts} +2 -2
- package/dist/selftest/{live.js → support/live.js} +34 -10
- package/dist/selftest/support/suite.js +1 -0
- package/dist/selftest/sync.test.d.ts +1 -1
- package/dist/selftest/sync.test.js +64 -26
- package/dist/selftest/test-guard.test.d.ts +1 -1
- package/dist/selftest/test-guard.test.js +43 -15
- package/dist/selftest/toolchains.test.d.ts +1 -1
- package/dist/selftest/toolchains.test.js +135 -36
- package/dist/selftest/workspace-view.test.d.ts +1 -1
- package/dist/selftest/workspace-view.test.js +48 -11
- package/dist/selftest/workspace.test.d.ts +1 -1
- package/dist/selftest/workspace.test.js +13 -4
- package/dist/shared/{apps.d.ts → apps/catalogue.d.ts} +1 -11
- package/dist/shared/apps/catalogue.js +768 -0
- package/dist/shared/apps/index.d.ts +2 -0
- package/dist/shared/apps/index.js +2 -0
- package/dist/shared/apps/selection.d.ts +11 -0
- package/dist/shared/apps/selection.js +40 -0
- package/dist/shared/channel/index.d.ts +2 -0
- package/dist/shared/channel/index.js +2 -0
- package/dist/shared/channel/run-dir.d.ts +30 -0
- package/dist/shared/channel/run-dir.js +84 -0
- package/dist/shared/{schema.d.ts → channel/schema.d.ts} +38 -21
- package/dist/shared/{schema.js → channel/schema.js} +62 -35
- package/dist/shared/download/archive.d.ts +13 -0
- package/dist/shared/download/archive.js +57 -0
- package/dist/shared/download/downloader.d.ts +35 -0
- package/dist/shared/download/downloader.js +110 -0
- package/dist/shared/download/github.d.ts +16 -0
- package/dist/shared/download/github.js +74 -0
- package/dist/shared/download/http.d.ts +5 -0
- package/dist/shared/download/http.js +30 -0
- package/dist/shared/download/index.d.ts +5 -0
- package/dist/shared/download/index.js +5 -0
- package/dist/shared/download/spawn.d.ts +2 -0
- package/dist/shared/download/spawn.js +7 -0
- package/dist/shared/io/index.d.ts +3 -0
- package/dist/shared/io/index.js +3 -0
- package/dist/shared/io/json-file.d.ts +10 -0
- package/dist/shared/io/json-file.js +21 -0
- package/dist/shared/io/json.d.ts +13 -0
- package/dist/shared/io/json.js +49 -0
- package/dist/shared/{safe-remove.js → io/safe-remove.js} +32 -7
- package/dist/shared/{netrules.js → network/firewall-rules.js} +36 -5
- package/dist/shared/network/index.d.ts +2 -0
- package/dist/shared/network/index.js +2 -0
- package/dist/shared/{netpolicy.js → network/policy.js} +66 -11
- package/dist/shared/{paths.js → paths/claude-paths.js} +12 -2
- package/dist/shared/{guest-paths.d.ts → paths/guest-paths.d.ts} +6 -12
- package/dist/shared/{guest-paths.js → paths/guest-paths.js} +53 -36
- package/dist/shared/paths/index.d.ts +3 -0
- package/dist/shared/paths/index.js +3 -0
- package/dist/shared/{projects.js → paths/projects.js} +13 -3
- package/dist/shared/pty/client.d.ts +21 -0
- package/dist/shared/pty/client.js +79 -0
- package/dist/shared/{console-input.js → pty/console-input.js} +26 -6
- package/dist/shared/pty/index.d.ts +6 -0
- package/dist/shared/pty/index.js +6 -0
- package/dist/shared/pty/input-joiner.d.ts +15 -0
- package/dist/shared/pty/input-joiner.js +44 -0
- package/dist/shared/pty/output-filter.d.ts +13 -0
- package/dist/shared/pty/output-filter.js +140 -0
- package/dist/shared/pty/protocol.d.ts +36 -0
- package/dist/shared/pty/protocol.js +60 -0
- package/dist/shared/pty/terminal.d.ts +24 -0
- package/dist/shared/pty/terminal.js +147 -0
- package/dist/shared/test-guard.js +3 -1
- package/dist/sync/claude-mem.d.ts +1 -1
- package/dist/sync/claude-mem.js +9 -4
- package/dist/sync/history.d.ts +1 -29
- package/dist/sync/history.js +57 -45
- package/dist/sync/index.d.ts +5 -0
- package/dist/sync/index.js +5 -0
- package/dist/sync/sync-cycle.d.ts +18 -0
- package/dist/sync/sync-cycle.js +85 -0
- package/dist/sync/sync-state.d.ts +32 -0
- package/dist/sync/sync-state.js +37 -0
- package/dist/sync/watcher.d.ts +0 -18
- package/dist/sync/watcher.js +66 -100
- package/native/keep-awake.ps1 +8 -0
- package/native/power.cs +23 -0
- package/native/stop-events.ps1 +38 -0
- package/package.json +11 -3
- package/sandbox/linkgate.cs +98 -0
- package/sandbox/memlog.ps1 +15 -6
- package/schemas/config.schema.json +34 -1
- package/schemas/sandbox-config.schema.json +34 -1
- package/dist/cli/boot-progress.d.ts +0 -22
- package/dist/cli/boot-progress.js +0 -59
- package/dist/cli/commands/launch.d.ts +0 -32
- package/dist/cli/commands/launch.js +0 -421
- package/dist/cli/commands/maintenance.d.ts +0 -10
- package/dist/cli/commands/maintenance.js +0 -220
- package/dist/cli/commands/project.d.ts +0 -33
- package/dist/cli/commands/project.js +0 -102
- package/dist/cli/commands/projects.d.ts +0 -14
- package/dist/cli/commands/projects.js +0 -146
- package/dist/cli/commands/restart.d.ts +0 -6
- package/dist/cli/commands/restart.js +0 -95
- package/dist/cli/commands/sessions.d.ts +0 -12
- package/dist/cli/commands/sessions.js +0 -258
- package/dist/cli/menu/settings/editors.js +0 -305
- package/dist/cli/tui/dialogs.d.ts +0 -57
- package/dist/cli/tui/dialogs.js +0 -162
- package/dist/core/config.js +0 -109
- package/dist/core/project-policy.d.ts +0 -62
- package/dist/core/project-policy.js +0 -121
- package/dist/core/schema.d.ts +0 -6
- package/dist/core/schema.js +0 -8
- package/dist/core/util.d.ts +0 -62
- package/dist/core/util.js +0 -156
- package/dist/core/workspace.d.ts +0 -35
- package/dist/core/workspace.js +0 -206
- package/dist/guest/boot-env.d.ts +0 -4
- package/dist/guest/daemon.js +0 -57
- package/dist/guest/env.d.ts +0 -56
- package/dist/guest/env.js +0 -115
- package/dist/guest/gitrules.js +0 -11
- package/dist/guest/project-status.d.ts +0 -5
- package/dist/guest/project-status.js +0 -17
- package/dist/guest/setup/user.js +0 -51
- package/dist/guest/toolchains/cli.d.ts +0 -10
- package/dist/guest/toolchains/common.d.ts +0 -54
- package/dist/guest/toolchains/common.js +0 -147
- package/dist/guest/toolchains/databases/dynamodb.d.ts +0 -8
- package/dist/guest/toolchains/databases/dynamodb.js +0 -52
- package/dist/guest/toolchains/databases/index.d.ts +0 -6
- package/dist/guest/toolchains/databases/index.js +0 -62
- package/dist/guest/toolchains/databases/mongodb.d.ts +0 -3
- package/dist/guest/toolchains/databases/mongodb.js +0 -31
- package/dist/guest/toolchains/databases/mysql.d.ts +0 -3
- package/dist/guest/toolchains/databases/mysql.js +0 -38
- package/dist/guest/toolchains/databases/postgres.d.ts +0 -5
- package/dist/guest/toolchains/databases/postgres.js +0 -38
- package/dist/guest/toolchains/databases/redis.d.ts +0 -3
- package/dist/guest/toolchains/databases/redis.js +0 -16
- package/dist/guest/toolchains/git.d.ts +0 -3
- package/dist/guest/toolchains/go.d.ts +0 -3
- package/dist/guest/toolchains/java.d.ts +0 -8
- package/dist/guest/toolchains/node.d.ts +0 -3
- package/dist/guest/toolchains/pwsh.d.ts +0 -4
- package/dist/guest/toolchains/python.d.ts +0 -3
- package/dist/guest/toolchains/scripting/php.d.ts +0 -3
- package/dist/guest/toolchains/scripting/ruby.d.ts +0 -3
- package/dist/host/accounts.d.ts +0 -32
- package/dist/host/accounts.js +0 -128
- package/dist/host/agent-commands.d.ts +0 -25
- package/dist/host/agent-commands.js +0 -145
- package/dist/host/channel.d.ts +0 -38
- package/dist/host/channel.js +0 -163
- package/dist/host/generate.d.ts +0 -13
- package/dist/host/generate.js +0 -115
- package/dist/host/launch/projects.d.ts +0 -17
- package/dist/host/launch/wsb.js +0 -34
- package/dist/host/motw.d.ts +0 -17
- package/dist/host/motw.js +0 -74
- package/dist/host/pc-scan.d.ts +0 -6
- package/dist/host/personalize.d.ts +0 -10
- package/dist/host/personalize.js +0 -97
- package/dist/host/platform.js +0 -129
- package/dist/host/project-scan.d.ts +0 -7
- package/dist/host/projects.d.ts +0 -123
- package/dist/host/projects.js +0 -196
- package/dist/host/repo-guard.d.ts +0 -43
- package/dist/host/repo-guard.js +0 -347
- package/dist/host/secrets.d.ts +0 -14
- package/dist/host/secrets.js +0 -133
- package/dist/host/stops.d.ts +0 -67
- package/dist/host/stops.js +0 -126
- package/dist/shared/apps.js +0 -114
- package/dist/shared/download.d.ts +0 -63
- package/dist/shared/download.js +0 -238
- package/dist/shared/pty-client.d.ts +0 -108
- package/dist/shared/pty-client.js +0 -406
- package/dist/shared/rundir.d.ts +0 -41
- package/dist/shared/rundir.js +0 -96
- /package/dist/{guest/daemon.d.ts → cli/tui/list/list-types.js} +0 -0
- /package/dist/{guest/db.d.ts → cli/tui/screen.js} +0 -0
- /package/dist/core/{detect-databases.d.ts → detect/databases.d.ts} +0 -0
- /package/dist/{guest/toolchains → core/detect}/versions.d.ts +0 -0
- /package/dist/guest/{setup/agents.d.ts → agents/agent-installer.d.ts} +0 -0
- /package/dist/guest/{audit-parse.d.ts → audit/parse.d.ts} +0 -0
- /package/dist/guest/{guide.d.ts → boot/guide.d.ts} +0 -0
- /package/dist/guest/daemon/{shutdown.d.ts → idle-shutdown.d.ts} +0 -0
- /package/dist/guest/daemon/{session.d.ts → sessions.d.ts} +0 -0
- /package/dist/guest/{main.d.ts → entries/daemon.d.ts} +0 -0
- /package/dist/guest/{netproxy.d.ts → entries/db.d.ts} +0 -0
- /package/dist/{selftest/suite.js → guest/entries/gitguard.d.ts} +0 -0
- /package/dist/guest/{gitguard.d.ts → git/decision.d.ts} +0 -0
- /package/dist/guest/{ports.d.ts → runtime/ports.d.ts} +0 -0
- /package/dist/guest/{project-context.d.ts → runtime/project-context.d.ts} +0 -0
- /package/dist/guest/{cmdline.d.ts → sessions/cmdline.d.ts} +0 -0
- /package/dist/guest/{ptyhost.d.ts → sessions/pty-host.d.ts} +0 -0
- /package/dist/guest/{view.d.ts → sessions/viewer.d.ts} +0 -0
- /package/dist/guest/setup/{policy.d.ts → managed-policy.d.ts} +0 -0
- /package/dist/host/{window.d.ts → sandbox/window.d.ts} +0 -0
- /package/dist/host/{wsb.d.ts → sandbox/wsb-cli.d.ts} +0 -0
- /package/dist/host/{cleanup.d.ts → storage/cleanup.d.ts} +0 -0
- /package/dist/selftest/{harness.d.ts → support/harness.d.ts} +0 -0
- /package/dist/selftest/{suite.d.ts → support/suite.d.ts} +0 -0
- /package/dist/shared/{safe-remove.d.ts → io/safe-remove.d.ts} +0 -0
- /package/dist/shared/{netrules.d.ts → network/firewall-rules.d.ts} +0 -0
- /package/dist/shared/{netpolicy.d.ts → network/policy.d.ts} +0 -0
- /package/dist/shared/{paths.d.ts → paths/claude-paths.d.ts} +0 -0
- /package/dist/shared/{projects.d.ts → paths/projects.d.ts} +0 -0
- /package/dist/shared/{console-input.d.ts → pty/console-input.d.ts} +0 -0
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
// C:\AgentData\run\sandbox.json: the boot's phase and progress, which the host shows while it waits.
|
|
2
|
+
import os from 'node:os';
|
|
3
|
+
import { now } from '../../shared/channel/run-dir.js';
|
|
4
|
+
import { writeJsonAtomic } from '../../shared/io/json.js';
|
|
5
|
+
import { errMsg } from '../../core/util/errors.js';
|
|
6
|
+
import { warn } from './log.js';
|
|
7
|
+
import { run } from './paths.js';
|
|
8
|
+
import { session, workspace } from './session.js';
|
|
9
|
+
/** The boot's structured progress (the host shows it as one line); kept between status writes. */
|
|
10
|
+
let progress;
|
|
11
|
+
/**
|
|
12
|
+
* Best-effort: progress reporting must never be what breaks the boot. `update` changes the structured progress
|
|
13
|
+
* (a new step, what is being set up); it stays as it was otherwise.
|
|
14
|
+
*/
|
|
15
|
+
export function setSandboxStatus(phase, message, update) {
|
|
16
|
+
try {
|
|
17
|
+
if (update)
|
|
18
|
+
progress = fitProgress({ step: 1, steps: 1, title: '', active: [], done: 0, total: 0, ...progress, ...update });
|
|
19
|
+
writeStatus(phase, message);
|
|
20
|
+
}
|
|
21
|
+
catch (e) {
|
|
22
|
+
warn('Could not update sandbox status: ' + errMsg(e));
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/** Within the limits the host accepts (it drops a progress that is not). */
|
|
26
|
+
function fitProgress(p) {
|
|
27
|
+
return {
|
|
28
|
+
...p,
|
|
29
|
+
title: p.title.slice(0, 120),
|
|
30
|
+
done: Math.min(p.done, 1000),
|
|
31
|
+
total: Math.min(p.total, 1000),
|
|
32
|
+
active: p.active.slice(0, 8).map((a) => ({
|
|
33
|
+
name: a.name.slice(0, 64),
|
|
34
|
+
...(a.percent === undefined ? {} : { percent: Math.max(0, Math.min(100, Math.round(a.percent))) }),
|
|
35
|
+
})),
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
function ownAddresses() {
|
|
39
|
+
return Object.values(os.networkInterfaces())
|
|
40
|
+
.flat()
|
|
41
|
+
.filter((i) => Boolean(i) && i.family === 'IPv4' && !i.internal)
|
|
42
|
+
.map((i) => i.address)
|
|
43
|
+
.slice(0, 8);
|
|
44
|
+
}
|
|
45
|
+
function writeStatus(phase, message) {
|
|
46
|
+
writeJsonAtomic(run.sandboxFile, {
|
|
47
|
+
launchId: session.launchId,
|
|
48
|
+
phase,
|
|
49
|
+
message,
|
|
50
|
+
updatedAt: now(),
|
|
51
|
+
workspaceHost: session.workspaceHost,
|
|
52
|
+
guestWorkspace: workspace,
|
|
53
|
+
headless: session.headless,
|
|
54
|
+
addresses: ownAddresses(),
|
|
55
|
+
...(progress ? { progress } : {}),
|
|
56
|
+
});
|
|
57
|
+
}
|
|
@@ -11,13 +11,19 @@ export const quoteArg = (arg) => (arg !== '' && !/[\s"]/.test(arg) ? arg : quote
|
|
|
11
11
|
* of these are quoted as usual.
|
|
12
12
|
*/
|
|
13
13
|
export const cmdArgs = (args) => {
|
|
14
|
-
const pieces = args
|
|
14
|
+
const pieces = args
|
|
15
|
+
.map((arg) => (/[&|<>^%]/.test(arg) ? arg.split('%').map(quoted).join('%') : quoteArg(arg)))
|
|
16
|
+
.join(' ');
|
|
15
17
|
let inQuotes = false;
|
|
16
|
-
return [...pieces]
|
|
18
|
+
return [...pieces]
|
|
19
|
+
.map((c) => {
|
|
17
20
|
if (c === '"')
|
|
18
21
|
inQuotes = !inQuotes;
|
|
19
22
|
return !inQuotes && /[&|<>^]/.test(c) ? '^^^' + c : c;
|
|
20
|
-
})
|
|
23
|
+
})
|
|
24
|
+
.join('');
|
|
21
25
|
};
|
|
22
26
|
/** The command line ptyhost starts; when the program is cmd.exe its arguments are quoted for cmd (cmdArgs). */
|
|
23
|
-
export const commandLine = (file, args) => path.win32.basename(file).toLowerCase() === 'cmd.exe'
|
|
27
|
+
export const commandLine = (file, args) => path.win32.basename(file).toLowerCase() === 'cmd.exe'
|
|
28
|
+
? [quoteArg(file), cmdArgs(args)].filter(Boolean).join(' ')
|
|
29
|
+
: [file, ...args].map(quoteArg).join(' ');
|
|
@@ -2,14 +2,17 @@
|
|
|
2
2
|
import fs from 'node:fs';
|
|
3
3
|
import path from 'node:path';
|
|
4
4
|
import { spawn } from 'node:child_process';
|
|
5
|
-
import { ensureCompiled } from '
|
|
6
|
-
import { portOpen } from '
|
|
7
|
-
import { logsDir,
|
|
5
|
+
import { ensureCompiled } from '../runtime/csc.js';
|
|
6
|
+
import { portOpen } from '../runtime/ports.js';
|
|
7
|
+
import { logsDir, toolsDir } from '../runtime/paths.js';
|
|
8
|
+
import { session } from '../runtime/session.js';
|
|
8
9
|
export const ensurePtyHost = () => ensureCompiled('ptyhost');
|
|
9
10
|
/** Resolves when ptyhost listens; rejects early if it exits first (e.g. the agent could not be started). */
|
|
10
11
|
export const waitForPtyHost = async (child, port, timeoutMs) => {
|
|
11
12
|
let exitCode;
|
|
12
|
-
child.once('exit', (code) => {
|
|
13
|
+
child.once('exit', (code) => {
|
|
14
|
+
exitCode = code;
|
|
15
|
+
});
|
|
13
16
|
const deadline = Date.now() + timeoutMs;
|
|
14
17
|
while (Date.now() < deadline) {
|
|
15
18
|
if (exitCode !== undefined)
|
|
@@ -33,7 +36,11 @@ export const ptyHostLogTail = (id, lines = 12) => {
|
|
|
33
36
|
/** conpty.dll (+ OpenConsole.exe) the host downloaded, when provisioning.conpty is on; ptyhost falls back to Windows' own. */
|
|
34
37
|
const conptyDll = () => {
|
|
35
38
|
const dll = path.join(toolsDir, 'conpty', 'conpty.dll');
|
|
36
|
-
return session.provisioning.conpty?.enabled !== false &&
|
|
39
|
+
return session.provisioning.conpty?.enabled !== false &&
|
|
40
|
+
fs.existsSync(dll) &&
|
|
41
|
+
fs.existsSync(path.join(toolsDir, 'conpty', 'OpenConsole.exe'))
|
|
42
|
+
? dll
|
|
43
|
+
: null;
|
|
37
44
|
};
|
|
38
45
|
/** Starts ptyhost detached, so closing a terminal tab never kills the agent; only the agent exiting ends it. */
|
|
39
46
|
export const startPtyHost = (o) => {
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
import { connect, runTerminalClient } from '../../shared/pty/index.js';
|
|
2
|
+
import { run } from '../runtime/paths.js';
|
|
3
|
+
/**
|
|
4
|
+
* A session that is still being set up (its project provisioning, its agent installing): show the progress until it
|
|
5
|
+
* runs.
|
|
6
|
+
*/
|
|
7
7
|
const waitUntilStarted = async (id) => {
|
|
8
8
|
let last = '';
|
|
9
9
|
for (let i = 0; i < 3600; i++) {
|
|
10
|
-
const s = readSession(
|
|
10
|
+
const s = run.readSession(id);
|
|
11
11
|
if (s && s.phase !== 'starting')
|
|
12
12
|
return s;
|
|
13
13
|
if (s && s.message !== last) {
|
|
@@ -16,7 +16,7 @@ const waitUntilStarted = async (id) => {
|
|
|
16
16
|
}
|
|
17
17
|
await new Promise((r) => setTimeout(r, 500));
|
|
18
18
|
}
|
|
19
|
-
return readSession(
|
|
19
|
+
return run.readSession(id);
|
|
20
20
|
};
|
|
21
21
|
export const viewSession = async (id) => {
|
|
22
22
|
const session = await waitUntilStarted(id);
|
|
@@ -37,6 +37,3 @@ export const viewSession = async (id) => {
|
|
|
37
37
|
console.log('Session error: ' + result.message);
|
|
38
38
|
return result.reason === 'exit' ? result.exitCode : 1;
|
|
39
39
|
};
|
|
40
|
-
if (process.argv[1]?.endsWith('view.js') && process.argv[2]) {
|
|
41
|
-
viewSession(process.argv[2]).then((code) => { process.exitCode = code; }, (e) => { console.error(e instanceof Error ? e.message : String(e)); process.exitCode = 1; });
|
|
42
|
-
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* claude-mem keeps SQLite + a vector store. They run from the sandbox's own disk (SQLite and mapped folders do not
|
|
3
|
+
* mix) and are mirrored to persistent storage, from where the host syncs them back to your PC.
|
|
4
|
+
*/
|
|
5
|
+
export declare const claudeMemPaths: {
|
|
6
|
+
store: string;
|
|
7
|
+
local: string;
|
|
8
|
+
};
|
|
9
|
+
export declare const restoreClaudeMem: () => void;
|
|
10
|
+
export declare const saveClaudeMem: () => void;
|
|
@@ -1,86 +1,19 @@
|
|
|
1
|
-
// Claude settings from this PC, plugin path fix-up, and the claude-mem working copy.
|
|
2
1
|
import fs from 'node:fs';
|
|
3
2
|
import os from 'node:os';
|
|
4
3
|
import path from 'node:path';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
|
|
10
|
-
const KEEP_SANDBOX_COPY = ['.claude.json', '.credentials.json'];
|
|
11
|
-
/** Plugin manifests store absolute paths to the plugin cache; point them at the sandbox's Claude folder. */
|
|
12
|
-
const fixPluginPaths = (hostConfigDir) => {
|
|
13
|
-
const plugins = path.join(claudeDir, 'plugins');
|
|
14
|
-
if (!hostConfigDir || !exists(plugins))
|
|
15
|
-
return;
|
|
16
|
-
for (const name of fs.readdirSync(plugins).filter((f) => f.endsWith('.json'))) {
|
|
17
|
-
const file = path.join(plugins, name);
|
|
18
|
-
const text = fs.readFileSync(file, 'utf8');
|
|
19
|
-
const fixed = translatePaths(text, hostConfigDir, claudeDir);
|
|
20
|
-
if (fixed !== text)
|
|
21
|
-
fs.writeFileSync(file, fixed, 'utf8');
|
|
22
|
-
}
|
|
23
|
-
};
|
|
24
|
-
const readState = (file) => { try {
|
|
25
|
-
return JSON.parse(fs.readFileSync(file, 'utf8').replace(/^/, ''));
|
|
26
|
-
}
|
|
27
|
-
catch {
|
|
28
|
-
return null;
|
|
29
|
-
} };
|
|
30
|
-
const sameFolder = (a, b) => a.replace(/\\/g, '/').replace(/\/+$/, '').toLowerCase() === b.replace(/\\/g, '/').replace(/\/+$/, '').toLowerCase();
|
|
31
|
-
/**
|
|
32
|
-
* The sandbox keeps its own .claude.json (login, onboarding, per-project state), so MCP servers from this PC are
|
|
33
|
-
* merged into it each boot: user-scope `mcpServers`, and this project's local-scope servers under the sandbox path.
|
|
34
|
-
* Servers with the same name are replaced by this PC's definition; servers added inside the sandbox are kept.
|
|
35
|
-
*/
|
|
36
|
-
export const mergeMcpServers = (hostFile, guestFile, hostWorkspace, guestWorkspace) => {
|
|
37
|
-
const host = readState(hostFile);
|
|
38
|
-
const guest = readState(guestFile);
|
|
39
|
-
if (!host || !guest)
|
|
40
|
-
return 0;
|
|
41
|
-
const hostProject = Object.entries(host.projects ?? {}).find(([key]) => sameFolder(key, hostWorkspace))?.[1]?.mcpServers ?? {};
|
|
42
|
-
const projects = { ...(guest.projects ?? {}) };
|
|
43
|
-
const guestKey = Object.keys(projects).find((key) => sameFolder(key, guestWorkspace)) ?? guestWorkspace.replace(/\\/g, '/');
|
|
44
|
-
projects[guestKey] = { ...(projects[guestKey] ?? {}), mcpServers: { ...(projects[guestKey]?.mcpServers ?? {}), ...hostProject } };
|
|
45
|
-
const merged = { ...guest, mcpServers: { ...(guest.mcpServers ?? {}), ...(host.mcpServers ?? {}) }, projects };
|
|
46
|
-
writeJsonAtomic(guestFile, merged);
|
|
47
|
-
return Object.keys(host.mcpServers ?? {}).length + Object.keys(hostProject).length;
|
|
48
|
-
};
|
|
49
|
-
export const syncClaudeProfile = () => {
|
|
50
|
-
const profile = session.claudeProfile;
|
|
51
|
-
if (profile.items.length === 0) {
|
|
52
|
-
log('No Claude settings were staged from this PC.');
|
|
53
|
-
return;
|
|
54
|
-
}
|
|
55
|
-
const source = path.join(launchDir, 'claude-profile');
|
|
56
|
-
mkdirp(claudeDir);
|
|
57
|
-
for (const name of profile.items) {
|
|
58
|
-
const from = path.join(source, name);
|
|
59
|
-
const to = path.join(claudeDir, name);
|
|
60
|
-
if (!exists(from))
|
|
61
|
-
continue;
|
|
62
|
-
if ((KEEP_SANDBOX_COPY.includes(name) || !profile.overwrite) && exists(to)) {
|
|
63
|
-
log('Claude settings: kept the sandbox\'s ' + name);
|
|
64
|
-
continue;
|
|
65
|
-
}
|
|
66
|
-
// Folders (skills, commands, plugins) are mirrored: what was removed on this PC goes here too.
|
|
67
|
-
if (fs.statSync(from).isDirectory())
|
|
68
|
-
safeRemove(to, claudeDir);
|
|
69
|
-
fs.cpSync(from, to, { recursive: true, force: true });
|
|
70
|
-
log('Claude settings: copied ' + name + ' from this PC');
|
|
71
|
-
}
|
|
72
|
-
fixPluginPaths(profile.hostConfigDir);
|
|
73
|
-
const mcp = mergeMcpServers(path.join(source, '.claude.json'), path.join(claudeDir, '.claude.json'), session.workspaceHost, workspace);
|
|
74
|
-
if (mcp)
|
|
75
|
-
log('Claude settings: ' + mcp + ' MCP server(s) from this PC merged in');
|
|
76
|
-
if (profile.credentials)
|
|
77
|
-
warn('Your host Claude LOGIN was copied into the sandbox (copyCredentials is true).');
|
|
78
|
-
};
|
|
4
|
+
import { session, stateDir } from '../runtime/session.js';
|
|
5
|
+
import { dryRun } from '../runtime/paths.js';
|
|
6
|
+
import { exists, mkdirp } from '../runtime/fs.js';
|
|
7
|
+
import { log, warn } from '../runtime/log.js';
|
|
8
|
+
import { robocopy } from '../runtime/process.js';
|
|
79
9
|
/**
|
|
80
10
|
* claude-mem keeps SQLite + a vector store. They run from the sandbox's own disk (SQLite and mapped folders do not
|
|
81
11
|
* mix) and are mirrored to persistent storage, from where the host syncs them back to your PC.
|
|
82
12
|
*/
|
|
83
|
-
export const claudeMemPaths = {
|
|
13
|
+
export const claudeMemPaths = {
|
|
14
|
+
store: path.join(stateDir, 'claude-mem'),
|
|
15
|
+
local: path.join(os.homedir(), '.claude-mem'),
|
|
16
|
+
};
|
|
84
17
|
const claudeMemEnabled = () => session.claudeProfile.syncClaudeMem && !dryRun;
|
|
85
18
|
export const restoreClaudeMem = () => {
|
|
86
19
|
if (!claudeMemEnabled())
|
|
@@ -97,7 +30,9 @@ export const restoreClaudeMem = () => {
|
|
|
97
30
|
if (exists(claudeMemPaths.store))
|
|
98
31
|
fs.renameSync(claudeMemPaths.store, claudeMemPaths.store + '.damaged-' + Date.now());
|
|
99
32
|
fs.cpSync(path.join(backups, good), claudeMemPaths.store, { recursive: true });
|
|
100
|
-
warn('claude-mem: the stored database was missing or damaged; restored the backup from ' +
|
|
33
|
+
warn('claude-mem: the stored database was missing or damaged; restored the backup from ' +
|
|
34
|
+
new Date(Number(good)).toISOString() +
|
|
35
|
+
'.');
|
|
101
36
|
}
|
|
102
37
|
}
|
|
103
38
|
if (!exists(claudeMemPaths.store))
|
|
@@ -148,7 +83,12 @@ const BACKUP_EVERY_MS = 6 * 3600 * 1000;
|
|
|
148
83
|
const keepBackup = (previous, dir) => {
|
|
149
84
|
if (!exists(previous))
|
|
150
85
|
return;
|
|
151
|
-
const backups = exists(dir)
|
|
86
|
+
const backups = exists(dir)
|
|
87
|
+
? fs
|
|
88
|
+
.readdirSync(dir)
|
|
89
|
+
.filter((n) => /^\d{13}$/.test(n))
|
|
90
|
+
.sort()
|
|
91
|
+
: [];
|
|
152
92
|
const newest = Number(backups[backups.length - 1] ?? 0);
|
|
153
93
|
if (Date.now() - newest < BACKUP_EVERY_MS) {
|
|
154
94
|
fs.rmSync(previous, { recursive: true, force: true });
|
|
@@ -5,13 +5,3 @@
|
|
|
5
5
|
*/
|
|
6
6
|
export declare const mergeMcpServers: (hostFile: string, guestFile: string, hostWorkspace: string, guestWorkspace: string) => number;
|
|
7
7
|
export declare const syncClaudeProfile: () => void;
|
|
8
|
-
/**
|
|
9
|
-
* claude-mem keeps SQLite + a vector store. They run from the sandbox's own disk (SQLite and mapped folders do not
|
|
10
|
-
* mix) and are mirrored to persistent storage, from where the host syncs them back to your PC.
|
|
11
|
-
*/
|
|
12
|
-
export declare const claudeMemPaths: {
|
|
13
|
-
store: string;
|
|
14
|
-
local: string;
|
|
15
|
-
};
|
|
16
|
-
export declare const restoreClaudeMem: () => void;
|
|
17
|
-
export declare const saveClaudeMem: () => void;
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
// Claude settings from this PC, plugin path fix-up, and the claude-mem working copy.
|
|
2
|
+
import fs from 'node:fs';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { translatePaths } from '../../shared/paths/claude-paths.js';
|
|
5
|
+
import { writeJsonAtomic } from '../../shared/io/json.js';
|
|
6
|
+
import { safeRemove } from '../../shared/io/safe-remove.js';
|
|
7
|
+
import { claudeDir, session, workspace } from '../runtime/session.js';
|
|
8
|
+
import { launchDir } from '../runtime/paths.js';
|
|
9
|
+
import { exists, mkdirp } from '../runtime/fs.js';
|
|
10
|
+
import { log, warn } from '../runtime/log.js';
|
|
11
|
+
/** The sandbox keeps its own login and global state; everything else is refreshed from this PC each boot. */
|
|
12
|
+
const KEEP_SANDBOX_COPY = ['.claude.json', '.credentials.json'];
|
|
13
|
+
/** Plugin manifests store absolute paths to the plugin cache; point them at the sandbox's Claude folder. */
|
|
14
|
+
const fixPluginPaths = (hostConfigDir) => {
|
|
15
|
+
const plugins = path.join(claudeDir, 'plugins');
|
|
16
|
+
if (!hostConfigDir || !exists(plugins))
|
|
17
|
+
return;
|
|
18
|
+
for (const name of fs.readdirSync(plugins).filter((f) => f.endsWith('.json'))) {
|
|
19
|
+
const file = path.join(plugins, name);
|
|
20
|
+
const text = fs.readFileSync(file, 'utf8');
|
|
21
|
+
const fixed = translatePaths(text, hostConfigDir, claudeDir);
|
|
22
|
+
if (fixed !== text)
|
|
23
|
+
fs.writeFileSync(file, fixed, 'utf8');
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
const readState = (file) => {
|
|
27
|
+
try {
|
|
28
|
+
return JSON.parse(fs.readFileSync(file, 'utf8').replace(/^/, ''));
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
const sameFolder = (a, b) => a.replace(/\\/g, '/').replace(/\/+$/, '').toLowerCase() === b.replace(/\\/g, '/').replace(/\/+$/, '').toLowerCase();
|
|
35
|
+
/**
|
|
36
|
+
* The sandbox keeps its own .claude.json (login, onboarding, per-project state), so MCP servers from this PC are
|
|
37
|
+
* merged into it each boot: user-scope `mcpServers`, and this project's local-scope servers under the sandbox path.
|
|
38
|
+
* Servers with the same name are replaced by this PC's definition; servers added inside the sandbox are kept.
|
|
39
|
+
*/
|
|
40
|
+
export const mergeMcpServers = (hostFile, guestFile, hostWorkspace, guestWorkspace) => {
|
|
41
|
+
const host = readState(hostFile);
|
|
42
|
+
const guest = readState(guestFile);
|
|
43
|
+
if (!host || !guest)
|
|
44
|
+
return 0;
|
|
45
|
+
const hostProject = Object.entries(host.projects ?? {}).find(([key]) => sameFolder(key, hostWorkspace))?.[1]?.mcpServers ?? {};
|
|
46
|
+
const projects = { ...(guest.projects ?? {}) };
|
|
47
|
+
const guestKey = Object.keys(projects).find((key) => sameFolder(key, guestWorkspace)) ?? guestWorkspace.replace(/\\/g, '/');
|
|
48
|
+
projects[guestKey] = {
|
|
49
|
+
...(projects[guestKey] ?? {}),
|
|
50
|
+
mcpServers: { ...(projects[guestKey]?.mcpServers ?? {}), ...hostProject },
|
|
51
|
+
};
|
|
52
|
+
const merged = {
|
|
53
|
+
...guest,
|
|
54
|
+
mcpServers: { ...(guest.mcpServers ?? {}), ...(host.mcpServers ?? {}) },
|
|
55
|
+
projects,
|
|
56
|
+
};
|
|
57
|
+
writeJsonAtomic(guestFile, merged);
|
|
58
|
+
return Object.keys(host.mcpServers ?? {}).length + Object.keys(hostProject).length;
|
|
59
|
+
};
|
|
60
|
+
export const syncClaudeProfile = () => {
|
|
61
|
+
const profile = session.claudeProfile;
|
|
62
|
+
if (profile.items.length === 0) {
|
|
63
|
+
log('No Claude settings were staged from this PC.');
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
const source = path.join(launchDir, 'claude-profile');
|
|
67
|
+
mkdirp(claudeDir);
|
|
68
|
+
for (const name of profile.items) {
|
|
69
|
+
const from = path.join(source, name);
|
|
70
|
+
const to = path.join(claudeDir, name);
|
|
71
|
+
if (!exists(from))
|
|
72
|
+
continue;
|
|
73
|
+
if ((KEEP_SANDBOX_COPY.includes(name) || !profile.overwrite) && exists(to)) {
|
|
74
|
+
log("Claude settings: kept the sandbox's " + name);
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
// Folders (skills, commands, plugins) are mirrored: what was removed on this PC goes here too.
|
|
78
|
+
if (fs.statSync(from).isDirectory())
|
|
79
|
+
safeRemove(to, claudeDir);
|
|
80
|
+
fs.cpSync(from, to, { recursive: true, force: true });
|
|
81
|
+
log('Claude settings: copied ' + name + ' from this PC');
|
|
82
|
+
}
|
|
83
|
+
fixPluginPaths(profile.hostConfigDir);
|
|
84
|
+
const mcp = mergeMcpServers(path.join(source, '.claude.json'), path.join(claudeDir, '.claude.json'), session.workspaceHost, workspace);
|
|
85
|
+
if (mcp)
|
|
86
|
+
log('Claude settings: ' + mcp + ' MCP server(s) from this PC merged in');
|
|
87
|
+
if (profile.credentials)
|
|
88
|
+
warn('Your host Claude LOGIN was copied into the sandbox (copyCredentials is true).');
|
|
89
|
+
};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// Making the sandbox feel like your PC: desktop look and Git identity.
|
|
2
|
+
import fs from 'node:fs';
|
|
3
|
+
import os from 'node:os';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import { SYSTEM } from '../../shared/system.js';
|
|
6
|
+
import { dryRun, isWin, launchDir } from '../runtime/paths.js';
|
|
7
|
+
import { exec, powershell } from '../runtime/process.js';
|
|
8
|
+
import { exists, mkdirp } from '../runtime/fs.js';
|
|
9
|
+
import { log } from '../runtime/log.js';
|
|
10
|
+
import { session } from '../runtime/session.js';
|
|
11
|
+
const psQuote = (s) => "'" + s.replace(/'/g, "''") + "'";
|
|
12
|
+
/** Imports the host's look (registry values + wallpaper) and restarts Explorer so it applies. */
|
|
13
|
+
export const applyPersonalization = () => {
|
|
14
|
+
const dir = path.join(launchDir, 'personalize');
|
|
15
|
+
if (!session.personalization || !exists(dir) || dryRun || !isWin)
|
|
16
|
+
return;
|
|
17
|
+
exec(SYSTEM.reg(), ['import', path.join(dir, 'personalize.reg')], { stdio: 'ignore' });
|
|
18
|
+
const wallpaper = fs.readdirSync(dir).find((f) => f.startsWith('wallpaper'));
|
|
19
|
+
const local = wallpaper ? path.join(mkdirp(path.join(os.homedir(), 'Pictures')), wallpaper) : null;
|
|
20
|
+
if (wallpaper && local)
|
|
21
|
+
fs.copyFileSync(path.join(dir, wallpaper), local);
|
|
22
|
+
powershell([
|
|
23
|
+
local ? "Set-ItemProperty -Path 'HKCU:\\Control Panel\\Desktop' -Name WallPaper -Value " + psQuote(local) : '',
|
|
24
|
+
'Add-Type -Namespace AgentSandbox -Name Desk -MemberDefinition \'[System.Runtime.InteropServices.DllImport("user32.dll", CharSet = System.Runtime.InteropServices.CharSet.Unicode)] public static extern int SystemParametersInfo(int a, int b, string c, int d);\'',
|
|
25
|
+
local ? '[void][AgentSandbox.Desk]::SystemParametersInfo(20, 0, ' + psQuote(local) + ', 3)' : '',
|
|
26
|
+
// Explorer restarts by itself and picks up taskbar/theme changes.
|
|
27
|
+
'Stop-Process -Name explorer -Force -ErrorAction SilentlyContinue',
|
|
28
|
+
]
|
|
29
|
+
.filter(Boolean)
|
|
30
|
+
.join('\n'));
|
|
31
|
+
log('Desktop personalisation applied from this PC.');
|
|
32
|
+
};
|
|
@@ -1,8 +1,25 @@
|
|
|
1
1
|
// The environment every agent session, hook and terminal tab in the sandbox gets.
|
|
2
2
|
import path from 'node:path';
|
|
3
|
-
import { claudeDir,
|
|
3
|
+
import { claudeDir, session, stateDir, workspace } from '../runtime/session.js';
|
|
4
|
+
import { dataDir, dryRun, isWin, testMode, toolsDir } from '../runtime/paths.js';
|
|
5
|
+
import { mkdirp } from '../runtime/fs.js';
|
|
6
|
+
import { powershell } from '../runtime/process.js';
|
|
7
|
+
import { warn } from '../runtime/log.js';
|
|
8
|
+
import { errMsg } from '../../core/util/errors.js';
|
|
4
9
|
/** Variables agent-sandbox itself sets (besides the toolchains' own). */
|
|
5
|
-
const AGENT_VARS = [
|
|
10
|
+
const AGENT_VARS = [
|
|
11
|
+
'CLAUDE_CONFIG_DIR',
|
|
12
|
+
'CODEX_HOME',
|
|
13
|
+
'GEMINI_CLI_HOME',
|
|
14
|
+
'npm_config_cache',
|
|
15
|
+
'npm_config_update_notifier',
|
|
16
|
+
'AGENT_WORKSPACE',
|
|
17
|
+
'AGENT_DATA',
|
|
18
|
+
'AGENT_TOOLS',
|
|
19
|
+
'AGENT_PROJECT',
|
|
20
|
+
'AGENT_SANDBOX',
|
|
21
|
+
'AGENT_SANDBOX_WORKSPACE',
|
|
22
|
+
];
|
|
6
23
|
export const agentEnv = (tools, target = { workspace, project: session.project, base: process.env }) => {
|
|
7
24
|
const env = {
|
|
8
25
|
...target.base,
|
|
@@ -55,10 +72,16 @@ export const addMachineEnvironment = (vars, dirs, additive = false) => {
|
|
|
55
72
|
return;
|
|
56
73
|
const script = [
|
|
57
74
|
"$vars = '" + JSON.stringify(vars).replace(/'/g, "''") + "' | ConvertFrom-Json",
|
|
58
|
-
|
|
75
|
+
'foreach ($p in $vars.PSObject.Properties) { ' +
|
|
76
|
+
(additive ? "if ([Environment]::GetEnvironmentVariable($p.Name, 'Machine')) { continue }; " : '') +
|
|
77
|
+
"[Environment]::SetEnvironmentVariable($p.Name, [string]$p.Value, 'Machine') }",
|
|
59
78
|
"$path = [Environment]::GetEnvironmentVariable('Path', 'Machine') -split ';'",
|
|
60
|
-
"$add = '" +
|
|
61
|
-
|
|
79
|
+
"$add = '" +
|
|
80
|
+
JSON.stringify(dirs).replace(/'/g, "''") +
|
|
81
|
+
"' | ConvertFrom-Json | Where-Object { $path -notcontains $_ }",
|
|
82
|
+
"if ($add) { [Environment]::SetEnvironmentVariable('Path', (" +
|
|
83
|
+
(additive ? '($path + @($add))' : '(@($add) + $path)') +
|
|
84
|
+
" -join ';'), 'Machine') }",
|
|
62
85
|
].join('\n');
|
|
63
86
|
try {
|
|
64
87
|
powershell(script);
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
/** Imports the host's look (registry values + wallpaper) and restarts Explorer so it applies. */
|
|
2
|
-
export declare const applyPersonalization: () => void;
|
|
3
1
|
/**
|
|
4
2
|
* Your Git identity from this PC (name/email only), plus safe.directory for the mapped workspace (its owner SID
|
|
5
3
|
* differs in the sandbox). Uses the real git.exe directly: the read-only guard would rightly refuse `config --add`.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import os from 'node:os';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { spawnSync } from 'node:child_process';
|
|
5
|
+
import { dryRun, launchDir, toolsDir } from '../runtime/paths.js';
|
|
6
|
+
import { exists } from '../runtime/fs.js';
|
|
7
|
+
/**
|
|
8
|
+
* Your Git identity from this PC (name/email only), plus safe.directory for the mapped workspace (its owner SID
|
|
9
|
+
* differs in the sandbox). Uses the real git.exe directly: the read-only guard would rightly refuse `config --add`.
|
|
10
|
+
*/
|
|
11
|
+
export const setupGitConfig = (env) => {
|
|
12
|
+
// A dry run (the self-test) must not touch the real ~/.gitconfig: it once replaced the sandbox's own, safe.directory
|
|
13
|
+
// included, so git refused the workspace until the next boot.
|
|
14
|
+
if (dryRun)
|
|
15
|
+
return;
|
|
16
|
+
const source = path.join(launchDir, 'home', '.gitconfig');
|
|
17
|
+
if (exists(source))
|
|
18
|
+
fs.copyFileSync(source, path.join(os.homedir(), '.gitconfig'));
|
|
19
|
+
const git = path.join(toolsDir, 'git', 'cmd', 'git.exe');
|
|
20
|
+
if (!exists(git))
|
|
21
|
+
return;
|
|
22
|
+
const { GIT_DIR: _gitDir, ...rest } = env;
|
|
23
|
+
spawnSync(git, ['config', '--global', '--add', 'safe.directory', '*'], {
|
|
24
|
+
env: rest,
|
|
25
|
+
windowsHide: true,
|
|
26
|
+
stdio: 'ignore',
|
|
27
|
+
});
|
|
28
|
+
// Windows long paths are on in the sandbox, but git skips files over 260 characters unless told.
|
|
29
|
+
spawnSync(git, ['config', '--global', 'core.longpaths', 'true'], { env: rest, windowsHide: true, stdio: 'ignore' });
|
|
30
|
+
// Git for Windows' system config says autocrlf=true: checkouts made in the sandbox (worktrees, clones) got CRLF and
|
|
31
|
+
// tools that want LF (rustfmt, shellcheck, prettier) failed on every file. "input" keeps the line endings the repo
|
|
32
|
+
// has, and a checkout from your PC (CRLF in the folder) still shows as unchanged.
|
|
33
|
+
spawnSync(git, ['config', '--global', 'core.autocrlf', 'input'], { env: rest, windowsHide: true, stdio: 'ignore' });
|
|
34
|
+
};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import type { GitAccess } from '
|
|
1
|
+
import type { GitAccess } from '../../core/types.js';
|
|
2
2
|
export declare const gitDenyRules: (access: GitAccess) => string[];
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
const SHELLS = ['Bash', 'PowerShell'];
|
|
2
|
+
const WRITE_COMMANDS = [
|
|
3
|
+
'commit',
|
|
4
|
+
'push',
|
|
5
|
+
'add',
|
|
6
|
+
'rm',
|
|
7
|
+
'mv',
|
|
8
|
+
'merge',
|
|
9
|
+
'rebase',
|
|
10
|
+
'reset',
|
|
11
|
+
'checkout',
|
|
12
|
+
'switch',
|
|
13
|
+
'restore',
|
|
14
|
+
'stash',
|
|
15
|
+
'tag',
|
|
16
|
+
'cherry-pick',
|
|
17
|
+
'revert',
|
|
18
|
+
'am',
|
|
19
|
+
'apply',
|
|
20
|
+
'clean',
|
|
21
|
+
'pull',
|
|
22
|
+
'fetch',
|
|
23
|
+
'clone',
|
|
24
|
+
'init',
|
|
25
|
+
'gc',
|
|
26
|
+
'prune',
|
|
27
|
+
'update-ref',
|
|
28
|
+
'update-index',
|
|
29
|
+
'filter-branch',
|
|
30
|
+
'replace',
|
|
31
|
+
'worktree add',
|
|
32
|
+
'branch -d',
|
|
33
|
+
'branch -D',
|
|
34
|
+
'branch -m',
|
|
35
|
+
'branch -M',
|
|
36
|
+
'config --add',
|
|
37
|
+
'config --unset',
|
|
38
|
+
'remote add',
|
|
39
|
+
'remote remove',
|
|
40
|
+
'remote set-url',
|
|
41
|
+
];
|
|
42
|
+
const GIT_DIR_PATHS = ['**/.git', '**/.git/**'];
|
|
43
|
+
export const gitDenyRules = (access) => {
|
|
44
|
+
if (access === 'full')
|
|
45
|
+
return [];
|
|
46
|
+
const commands = access === 'none' ? ['git'] : WRITE_COMMANDS.map((c) => 'git ' + c);
|
|
47
|
+
const shellRules = SHELLS.flatMap((shell) => commands.map((c) => shell + '(' + c + ':*)'));
|
|
48
|
+
const fileRules = GIT_DIR_PATHS.flatMap((p) => access === 'none' ? ['Read(' + p + ')', 'Edit(' + p + ')'] : ['Edit(' + p + ')']);
|
|
49
|
+
return [...shellRules, ...fileRules];
|
|
50
|
+
};
|
|
@@ -3,8 +3,11 @@ import fs from 'node:fs';
|
|
|
3
3
|
import path from 'node:path';
|
|
4
4
|
import { spawnSync } from 'node:child_process';
|
|
5
5
|
import { SYSTEM } from '../../shared/system.js';
|
|
6
|
-
import { spawnAsync } from '../../shared/download.js';
|
|
7
|
-
import { exists
|
|
6
|
+
import { spawnAsync } from '../../shared/download/index.js';
|
|
7
|
+
import { exists } from '../runtime/fs.js';
|
|
8
|
+
import { isWin, launchDir } from '../runtime/paths.js';
|
|
9
|
+
import { log, warn } from '../runtime/log.js';
|
|
10
|
+
import { session, workspace } from '../runtime/session.js';
|
|
8
11
|
const commandFor = (file) => {
|
|
9
12
|
const ext = path.extname(file).toLowerCase();
|
|
10
13
|
if (ext === '.mjs' || ext === '.js')
|
|
@@ -18,12 +21,21 @@ const commandFor = (file) => {
|
|
|
18
21
|
return null;
|
|
19
22
|
};
|
|
20
23
|
const BOOT = { root: path.join(launchDir, 'hooks'), cwd: workspace };
|
|
21
|
-
export const projectHooks = (name, cwd) => ({
|
|
24
|
+
export const projectHooks = (name, cwd) => ({
|
|
25
|
+
root: path.join(launchDir, 'projects', name, 'hooks'),
|
|
26
|
+
cwd,
|
|
27
|
+
});
|
|
22
28
|
const hooksOf = (stage, target) => {
|
|
23
29
|
const dir = path.join(target.root, stage);
|
|
24
30
|
if (!exists(dir))
|
|
25
31
|
return [];
|
|
26
|
-
return fs
|
|
32
|
+
return fs
|
|
33
|
+
.readdirSync(dir)
|
|
34
|
+
.sort()
|
|
35
|
+
.flatMap((name) => {
|
|
36
|
+
const command = commandFor(path.join(dir, name));
|
|
37
|
+
return command ? [{ name, command }] : [];
|
|
38
|
+
});
|
|
27
39
|
};
|
|
28
40
|
const failed = (stage, name, status) => {
|
|
29
41
|
const message = 'Hook failed (' + stage + '/' + name + ', exit ' + status + ')';
|
|
@@ -43,7 +55,12 @@ export const runHooks = (stage, env, target = BOOT) => {
|
|
|
43
55
|
export const runHooksAsync = async (stage, env, target) => {
|
|
44
56
|
for (const { name, command } of hooksOf(stage, target)) {
|
|
45
57
|
log('Hook [' + stage + ']: ' + name);
|
|
46
|
-
const status = await spawnAsync(command[0], command[1], {
|
|
58
|
+
const status = await spawnAsync(command[0], command[1], {
|
|
59
|
+
stdio: 'ignore',
|
|
60
|
+
cwd: target.cwd,
|
|
61
|
+
env,
|
|
62
|
+
windowsHide: true,
|
|
63
|
+
});
|
|
47
64
|
if (status !== 0)
|
|
48
65
|
failed(stage, name, status);
|
|
49
66
|
}
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
// today, the git access mode. Rewritten every boot; removed when there is nothing to enforce.
|
|
4
4
|
import fs from 'node:fs';
|
|
5
5
|
import path from 'node:path';
|
|
6
|
-
import { gitDenyRules } from '
|
|
7
|
-
import { managedClaudeMd } from '../guide.js';
|
|
6
|
+
import { gitDenyRules } from './git-rules.js';
|
|
7
|
+
import { managedClaudeMd } from '../boot/guide.js';
|
|
8
8
|
export const managedSettingsFile = () => path.join(path.dirname(managedClaudeMd()), 'managed-settings.json');
|
|
9
9
|
export const writeManagedSettings = (access) => {
|
|
10
10
|
const file = managedSettingsFile();
|