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
|
@@ -11,28 +11,22 @@ export declare const guestDrive: (guest: string) => string | null;
|
|
|
11
11
|
* no '..' or empty segments, no characters Windows rejects in paths.
|
|
12
12
|
*/
|
|
13
13
|
export declare const isValidGuestPath: (guest: string) => boolean;
|
|
14
|
-
/** Where a mapping lands when the path it asks for (or the PC path) cannot be used inside the sandbox. */
|
|
15
|
-
export declare const MAPPED_ROOT = "C:\\Mapped";
|
|
16
14
|
/** A guest path as typed, tidied: '/' -> '\', no doubled or trailing backslashes, upper-case drive letter. */
|
|
17
15
|
export declare const tidyGuestPath: (guest: string) => string;
|
|
18
16
|
/** Why a guest path cannot be used as it is (null: it can). Short, plain English. */
|
|
19
17
|
export declare const guestPathProblem: (guest: string) => string | null;
|
|
20
|
-
/** C:\Mapped\<drive>\<rest of path>: a safe place for a folder whose own path cannot be used (odd characters made safe). */
|
|
21
|
-
export declare const mappedFallback: (path: string) => string;
|
|
22
18
|
/** Two guest folders overlap where they really are (F:\x is C:\Mirror\F\x): the same, or one inside the other. */
|
|
23
19
|
export declare const guestOverlaps: (a: string, b: string) => boolean;
|
|
20
|
+
/** How to fix a mapping whose guest path cannot be used: `guest` is what it asked for (none = the PC path). */
|
|
21
|
+
export declare const guestFix: (guest: string | undefined) => string;
|
|
24
22
|
/**
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
* C:\Mapped\<drive>\<path> instead (made unique with -2, -3 ...), and `note` says where and why.
|
|
23
|
+
* Why a folder cannot appear at `guest` in the sandbox (null: it can): a path the sandbox cannot use, or one that
|
|
24
|
+
* overlaps a folder in `taken`. Folders are never moved somewhere else: the launch names the problem and the fix.
|
|
28
25
|
*/
|
|
29
|
-
export declare const
|
|
26
|
+
export declare const guestConflict: (guest: string, taken: readonly {
|
|
30
27
|
guest: string;
|
|
31
28
|
what: string;
|
|
32
|
-
}[]) =>
|
|
33
|
-
guest: string;
|
|
34
|
-
note: string | null;
|
|
35
|
-
};
|
|
29
|
+
}[]) => string | null;
|
|
36
30
|
/**
|
|
37
31
|
* The guest path a mapping asks for when it gives none: a folder inside the project at the same place in the project's
|
|
38
32
|
* guest folder, any other folder at the same path as on this PC (D: to Z: through C:\Mirror and subst).
|
|
@@ -32,11 +32,13 @@ export const isValidGuestPath = (guest) => {
|
|
|
32
32
|
return !RESERVED_GUEST.test('C:\\' + rest);
|
|
33
33
|
return MIRROR_LETTER.test(letter);
|
|
34
34
|
};
|
|
35
|
-
/** Where a mapping lands when the path it asks for (or the PC path) cannot be used inside the sandbox. */
|
|
36
|
-
export const MAPPED_ROOT = 'C:\\Mapped';
|
|
37
35
|
/** A guest path as typed, tidied: '/' -> '\', no doubled or trailing backslashes, upper-case drive letter. */
|
|
38
36
|
export const tidyGuestPath = (guest) => {
|
|
39
|
-
const p = guest
|
|
37
|
+
const p = guest
|
|
38
|
+
.trim()
|
|
39
|
+
.replace(/\//g, '\\')
|
|
40
|
+
.replace(/\\{2,}/g, '\\')
|
|
41
|
+
.replace(/\\+$/, '');
|
|
40
42
|
return /^[a-z]:/.test(p) ? p[0].toUpperCase() + p.slice(1) : p;
|
|
41
43
|
};
|
|
42
44
|
/** Why a guest path cannot be used as it is (null: it can). Short, plain English. */
|
|
@@ -50,36 +52,38 @@ export const guestPathProblem = (guest) => {
|
|
|
50
52
|
return 'the sandbox cannot show drive ' + letter + ':';
|
|
51
53
|
if (letter && /^[A-Za-z]:\\?$/.test(guest))
|
|
52
54
|
return guest + ' is a whole drive';
|
|
55
|
+
if (!letter)
|
|
56
|
+
return (guest +
|
|
57
|
+
' is not a full path (guest paths start with a drive, such as C:\\Games\\' +
|
|
58
|
+
(guest.split('\\').pop() || 'Name') +
|
|
59
|
+
')');
|
|
53
60
|
return guest + ' is not a folder path the sandbox can use';
|
|
54
61
|
};
|
|
55
|
-
/** C:\Mapped\<drive>\<rest of path>: a safe place for a folder whose own path cannot be used (odd characters made safe). */
|
|
56
|
-
export const mappedFallback = (path) => {
|
|
57
|
-
const m = /^([A-Za-z]):\\?(.*)$/.exec(tidyGuestPath(path)) ?? /^\\\\(.*)$/.exec(path);
|
|
58
|
-
const letter = m && m.length === 3 ? m[1].toUpperCase() : 'UNC';
|
|
59
|
-
const rest = (m ? m[m.length - 1] : path).split(/[\\/]+/).map((s) => s.replace(/[<>:"|?*\x00-\x1f]/g, '_').replace(/[. ]+$/, '')).filter((s) => s !== '' && s !== '..').join('\\');
|
|
60
|
-
return MAPPED_ROOT + '\\' + letter + (rest ? '\\' + rest : '');
|
|
61
|
-
};
|
|
62
62
|
/** Two guest folders overlap where they really are (F:\x is C:\Mirror\F\x): the same, or one inside the other. */
|
|
63
63
|
export const guestOverlaps = (a, b) => {
|
|
64
64
|
const x = sandboxFolder(a).replace(/\\+$/, '').toLowerCase();
|
|
65
65
|
const y = sandboxFolder(b).replace(/\\+$/, '').toLowerCase();
|
|
66
66
|
return x === y || x.startsWith(y + '\\') || y.startsWith(x + '\\');
|
|
67
67
|
};
|
|
68
|
+
/** How to fix a mapping whose guest path cannot be used: `guest` is what it asked for (none = the PC path). */
|
|
69
|
+
export const guestFix = (guest) => guest
|
|
70
|
+
? 'set "guest" to a full path of a free folder, such as C:\\Games\\<name>, or leave it out to use the same path as on this PC.'
|
|
71
|
+
: 'its path on this PC cannot be used inside the sandbox; give it a "guest" path such as C:\\Games\\<name>.';
|
|
68
72
|
/**
|
|
69
|
-
*
|
|
70
|
-
*
|
|
71
|
-
* C:\Mapped\<drive>\<path> instead (made unique with -2, -3 ...), and `note` says where and why.
|
|
73
|
+
* Why a folder cannot appear at `guest` in the sandbox (null: it can): a path the sandbox cannot use, or one that
|
|
74
|
+
* overlaps a folder in `taken`. Folders are never moved somewhere else: the launch names the problem and the fix.
|
|
72
75
|
*/
|
|
73
|
-
export const
|
|
74
|
-
const
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
const other =
|
|
78
|
-
if (!
|
|
79
|
-
return
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
76
|
+
export const guestConflict = (guest, taken) => {
|
|
77
|
+
const problem = guestPathProblem(guest);
|
|
78
|
+
if (problem)
|
|
79
|
+
return problem;
|
|
80
|
+
const other = taken.find((t) => guestOverlaps(guest, t.guest));
|
|
81
|
+
if (!other)
|
|
82
|
+
return null;
|
|
83
|
+
return (guest +
|
|
84
|
+
' is already used by ' +
|
|
85
|
+
other.what +
|
|
86
|
+
(other.guest.toLowerCase() === guest.toLowerCase() ? '' : ' (' + other.guest + ')'));
|
|
83
87
|
};
|
|
84
88
|
/**
|
|
85
89
|
* The guest path a mapping asks for when it gives none: a folder inside the project at the same place in the project's
|
|
@@ -90,15 +94,6 @@ export const deriveGuest = (host, projectHost, projectGuest) => {
|
|
|
90
94
|
const inside = rel === '' || (!rel.startsWith('..') && !win32.isAbsolute(rel));
|
|
91
95
|
return inside ? (rel ? win32.join(projectGuest, rel) : projectGuest) : tidyGuestPath(win32.resolve(host));
|
|
92
96
|
};
|
|
93
|
-
const freePlace = (base, clash) => {
|
|
94
|
-
const ok = (g) => isValidGuestPath(g) && !clash(g);
|
|
95
|
-
if (ok(base))
|
|
96
|
-
return base;
|
|
97
|
-
for (let i = 2; i < 1000; i++)
|
|
98
|
-
if (ok(base + '-' + i))
|
|
99
|
-
return base + '-' + i;
|
|
100
|
-
return base + '-' + Date.now();
|
|
101
|
-
};
|
|
102
97
|
/** Where a guest path really is inside the sandbox (the .wsb SandboxFolder): C: paths as-is, F:\x -> C:\Mirror\F\x. */
|
|
103
98
|
export const sandboxFolder = (guest) => {
|
|
104
99
|
const m = DRIVE_PATH.exec(guest);
|
|
@@ -120,10 +115,32 @@ export const planMirrorWorkspace = (workspaceHost, fallback) => {
|
|
|
120
115
|
const host = workspaceHost.replace(/\\+$/, '');
|
|
121
116
|
if (isValidGuestPath(host)) {
|
|
122
117
|
const letter = guestDrive(host);
|
|
123
|
-
return {
|
|
118
|
+
return {
|
|
119
|
+
guest: letter + host.slice(1),
|
|
120
|
+
note: letter === 'C'
|
|
121
|
+
? null
|
|
122
|
+
: 'guestWorkspace "mirror": ' +
|
|
123
|
+
host +
|
|
124
|
+
' is mapped to ' +
|
|
125
|
+
sandboxFolder(letter + host.slice(1)) +
|
|
126
|
+
' and shown as ' +
|
|
127
|
+
letter +
|
|
128
|
+
': (subst) inside the sandbox.',
|
|
129
|
+
};
|
|
124
130
|
}
|
|
125
|
-
const why = !guestDrive(host)
|
|
126
|
-
|
|
131
|
+
const why = !guestDrive(host)
|
|
132
|
+
? 'it is not on a drive letter'
|
|
133
|
+
: guestDrive(host) === 'C' && RESERVED_GUEST.test(host)
|
|
134
|
+
? 'that folder is reserved inside the sandbox (Windows, Program Files, Users, ...)'
|
|
127
135
|
: 'the sandbox cannot show a folder at that path';
|
|
128
|
-
return {
|
|
136
|
+
return {
|
|
137
|
+
guest: fallback,
|
|
138
|
+
note: 'guestWorkspace "mirror": ' +
|
|
139
|
+
host +
|
|
140
|
+
' cannot appear at the same path (' +
|
|
141
|
+
why +
|
|
142
|
+
'); using ' +
|
|
143
|
+
fallback +
|
|
144
|
+
' instead.',
|
|
145
|
+
};
|
|
129
146
|
};
|
|
@@ -22,10 +22,16 @@ export const WORKSPACES_GUEST = 'C:\\Workspace';
|
|
|
22
22
|
* per-project history and claude-mem's project name match this PC instead of every project being "Workspace".
|
|
23
23
|
*/
|
|
24
24
|
export const autoGuestFolder = (hostDir) => {
|
|
25
|
-
const name = path.win32
|
|
25
|
+
const name = path.win32
|
|
26
|
+
.basename(hostDir.replace(/[\\/]+$/, ''))
|
|
27
|
+
.replace(/[^A-Za-z0-9._ -]/g, '_')
|
|
28
|
+
.replace(/^[. ]+|[. ]+$/g, '');
|
|
26
29
|
return WORKSPACES_GUEST + '\\' + (name || 'project');
|
|
27
30
|
};
|
|
28
|
-
const norm = (p) => path.win32
|
|
31
|
+
const norm = (p) => path.win32
|
|
32
|
+
.resolve(p)
|
|
33
|
+
.replace(/[\\/]+$/, '')
|
|
34
|
+
.toLowerCase();
|
|
29
35
|
/** `child` is `parent` or somewhere below it (Windows paths, case-insensitive). */
|
|
30
36
|
export const isWithin = (parent, child) => {
|
|
31
37
|
const a = norm(parent);
|
|
@@ -37,7 +43,11 @@ export const isWithin = (parent, child) => {
|
|
|
37
43
|
* '_' (ids become file names on both sides), at most 48 characters, made unique against `taken` with -2, -3, ...
|
|
38
44
|
*/
|
|
39
45
|
export const hubName = (hostDir, taken) => {
|
|
40
|
-
const base = path.win32
|
|
46
|
+
const base = path.win32
|
|
47
|
+
.basename(path.win32.resolve(hostDir))
|
|
48
|
+
.replace(/[^A-Za-z0-9_-]+/g, '-')
|
|
49
|
+
.replace(/^-+|-+$/g, '')
|
|
50
|
+
.slice(0, 48) || 'project';
|
|
41
51
|
const used = new Set([...taken].map((t) => t.toLowerCase()));
|
|
42
52
|
if (!used.has(base.toLowerCase()))
|
|
43
53
|
return base;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import net from 'node:net';
|
|
2
|
+
export interface Endpoint {
|
|
3
|
+
addresses: string[];
|
|
4
|
+
port: number;
|
|
5
|
+
token: string;
|
|
6
|
+
}
|
|
7
|
+
/** Tries every address the sandbox published and returns the first one that answers. */
|
|
8
|
+
export declare const connect: (endpoint: Endpoint, timeoutMs?: number) => Promise<net.Socket>;
|
|
9
|
+
/** Sends one control frame (e.g. RESTART) without taking over the screen. */
|
|
10
|
+
export declare const sendControl: (endpoint: Endpoint, type: number) => Promise<void>;
|
|
11
|
+
/** Who is watching a session right now: `remote` counts viewers on the PC (not the sandbox's own tabs). */
|
|
12
|
+
export interface Viewers {
|
|
13
|
+
viewers: number;
|
|
14
|
+
remote: number;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Asks a session's ptyhost who is attached. Only viewers heard from in the last few seconds count, so a terminal that
|
|
18
|
+
* was closed (or a PC that went to sleep) is not reported. null when the session does not answer: an older ptyhost
|
|
19
|
+
* treats the query as a silent control connection, so the caller must not assume anything.
|
|
20
|
+
*/
|
|
21
|
+
export declare const queryViewers: (endpoint: Endpoint, timeoutMs?: number) => Promise<Viewers | null>;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import net from 'node:net';
|
|
2
|
+
import { helloFrame, HelloFlag, encodeFrame, FrameReader, FrameType } from './protocol.js';
|
|
3
|
+
const connectOnce = (host, port, timeoutMs) => {
|
|
4
|
+
return new Promise((resolve, reject) => {
|
|
5
|
+
const socket = net.connect({ host, port });
|
|
6
|
+
const timer = setTimeout(() => {
|
|
7
|
+
socket.destroy();
|
|
8
|
+
reject(new Error('timed out connecting to ' + host + ':' + port));
|
|
9
|
+
}, timeoutMs);
|
|
10
|
+
socket.once('connect', () => {
|
|
11
|
+
clearTimeout(timer);
|
|
12
|
+
socket.setNoDelay(true);
|
|
13
|
+
resolve(socket);
|
|
14
|
+
});
|
|
15
|
+
socket.once('error', (e) => {
|
|
16
|
+
clearTimeout(timer);
|
|
17
|
+
reject(e);
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
};
|
|
21
|
+
/** Tries every address the sandbox published and returns the first one that answers. */
|
|
22
|
+
export const connect = async (endpoint, timeoutMs = 3000) => {
|
|
23
|
+
const errors = [];
|
|
24
|
+
for (const address of endpoint.addresses) {
|
|
25
|
+
try {
|
|
26
|
+
return await connectOnce(address, endpoint.port, timeoutMs);
|
|
27
|
+
}
|
|
28
|
+
catch (e) {
|
|
29
|
+
errors.push(address + ': ' + (e instanceof Error ? e.message : String(e)));
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
throw new Error('Could not reach the sandbox session (' + errors.join('; ') + ')');
|
|
33
|
+
};
|
|
34
|
+
/** Sends one control frame (e.g. RESTART) without taking over the screen. */
|
|
35
|
+
export const sendControl = async (endpoint, type) => {
|
|
36
|
+
const socket = await connect(endpoint);
|
|
37
|
+
await new Promise((resolve) => socket.end(Buffer.concat([helloFrame(endpoint.token, 80, 24, HelloFlag.ControlOnly), encodeFrame(type)]), resolve));
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* Asks a session's ptyhost who is attached. Only viewers heard from in the last few seconds count, so a terminal that
|
|
41
|
+
* was closed (or a PC that went to sleep) is not reported. null when the session does not answer: an older ptyhost
|
|
42
|
+
* treats the query as a silent control connection, so the caller must not assume anything.
|
|
43
|
+
*/
|
|
44
|
+
export const queryViewers = async (endpoint, timeoutMs = 2000) => {
|
|
45
|
+
let socket;
|
|
46
|
+
try {
|
|
47
|
+
socket = await connect(endpoint, timeoutMs);
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
return new Promise((resolve) => {
|
|
53
|
+
const reader = new FrameReader();
|
|
54
|
+
const done = (value) => {
|
|
55
|
+
clearTimeout(timer);
|
|
56
|
+
socket.destroy();
|
|
57
|
+
resolve(value);
|
|
58
|
+
};
|
|
59
|
+
const timer = setTimeout(() => done(null), timeoutMs);
|
|
60
|
+
socket.on('data', (chunk) => {
|
|
61
|
+
let frames;
|
|
62
|
+
try {
|
|
63
|
+
frames = reader.push(chunk);
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
done(null);
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
const status = frames.find((f) => f.type === FrameType.Status && f.payload.length >= 4);
|
|
70
|
+
if (status)
|
|
71
|
+
done({ viewers: status.payload.readInt16LE(0), remote: status.payload.readInt16LE(2) });
|
|
72
|
+
else if (frames.some((f) => f.type === FrameType.Error))
|
|
73
|
+
done(null);
|
|
74
|
+
});
|
|
75
|
+
socket.on('error', () => done(null));
|
|
76
|
+
socket.on('close', () => done(null));
|
|
77
|
+
socket.write(helloFrame(endpoint.token, 80, 24, HelloFlag.Query));
|
|
78
|
+
});
|
|
79
|
+
};
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
// Node has no API for the console mode, so a PowerShell child sets it on the console both share (the input mode
|
|
6
6
|
// belongs to the console, not to a handle). Only built-ins here: view.js bundles this.
|
|
7
7
|
import { spawn } from 'node:child_process';
|
|
8
|
-
import { SYSTEM } from '
|
|
8
|
+
import { SYSTEM } from '../system.js';
|
|
9
9
|
/**
|
|
10
10
|
* PowerShell starts in a console of its own, hidden (so it never retitles your tab or touches its modes), then switches
|
|
11
11
|
* to ours. Started without any console, powershell.exe does nothing at all.
|
|
@@ -45,17 +45,37 @@ export const enableVtInput = () => {
|
|
|
45
45
|
let exited = Promise.resolve();
|
|
46
46
|
const ready = new Promise((resolve) => {
|
|
47
47
|
try {
|
|
48
|
-
child = spawn(SYSTEM.powershell(), [
|
|
48
|
+
child = spawn(SYSTEM.powershell(), [
|
|
49
|
+
'-NoLogo',
|
|
50
|
+
'-NoProfile',
|
|
51
|
+
'-NonInteractive',
|
|
52
|
+
'-ExecutionPolicy',
|
|
53
|
+
'Bypass',
|
|
54
|
+
'-EncodedCommand',
|
|
55
|
+
Buffer.from(script(process.pid), 'utf16le').toString('base64'),
|
|
56
|
+
], { stdio: 'ignore', windowsHide: true });
|
|
49
57
|
}
|
|
50
58
|
catch {
|
|
51
59
|
resolve(false);
|
|
52
60
|
return;
|
|
53
61
|
}
|
|
54
62
|
exited = new Promise((done) => {
|
|
55
|
-
child?.on('exit', (code) => {
|
|
56
|
-
|
|
63
|
+
child?.on('exit', (code) => {
|
|
64
|
+
resolve(code === 0);
|
|
65
|
+
done();
|
|
66
|
+
});
|
|
67
|
+
child?.on('error', () => {
|
|
68
|
+
resolve(false);
|
|
69
|
+
done();
|
|
70
|
+
});
|
|
57
71
|
});
|
|
58
72
|
});
|
|
59
|
-
return {
|
|
60
|
-
|
|
73
|
+
return {
|
|
74
|
+
ready,
|
|
75
|
+
stop: () => {
|
|
76
|
+
if (child && child.exitCode === null && child.signalCode === null)
|
|
77
|
+
child.kill();
|
|
78
|
+
return exited;
|
|
79
|
+
},
|
|
80
|
+
};
|
|
61
81
|
};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { FrameType, HelloFlag, PING_INTERVAL_MS, type Frame, DETACH_KEY, encodeFrame, helloFrame, resizeFrame, MAX_FRAME_BYTES, FrameReader, } from './protocol.js';
|
|
2
|
+
export { type Endpoint, connect, sendControl, type Viewers, queryViewers } from './client.js';
|
|
3
|
+
export { type ClientResult, MOUSE_OFF, fixWindowsKeys, runTerminalClient } from './terminal.js';
|
|
4
|
+
export { JOIN_MS, InputJoiner } from './input-joiner.js';
|
|
5
|
+
export { type VtInput, enableVtInput } from './console-input.js';
|
|
6
|
+
export { OutputFilter } from './output-filter.js';
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { FrameType, HelloFlag, PING_INTERVAL_MS, DETACH_KEY, encodeFrame, helloFrame, resizeFrame, MAX_FRAME_BYTES, FrameReader, } from './protocol.js';
|
|
2
|
+
export { connect, sendControl, queryViewers } from './client.js';
|
|
3
|
+
export { MOUSE_OFF, fixWindowsKeys, runTerminalClient } from './terminal.js';
|
|
4
|
+
export { JOIN_MS, InputJoiner } from './input-joiner.js';
|
|
5
|
+
export { enableVtInput } from './console-input.js';
|
|
6
|
+
export { OutputFilter } from './output-filter.js';
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/** How long an unfinished escape sequence is held back waiting for the rest (a lone Esc key press waits this long). */
|
|
2
|
+
export declare const JOIN_MS = 30;
|
|
3
|
+
/**
|
|
4
|
+
* Keeps each escape sequence typed into your terminal (keys, mouse reports, the terminal's replies) in one INPUT frame.
|
|
5
|
+
* The console can hand one over in pieces; ConPTY reads a lone "ESC[" as Alt+[ and the rest as typed text, so a split
|
|
6
|
+
* Right arrow (ESC[C) left a stray "C" in the agent's prompt. An unfinished sequence at the end of a chunk is held
|
|
7
|
+
* until the rest arrives (or JOIN_MS passes).
|
|
8
|
+
*/
|
|
9
|
+
export declare class InputJoiner {
|
|
10
|
+
private held;
|
|
11
|
+
/** The bytes to send now; an unfinished sequence at the end is kept for the next chunk. */
|
|
12
|
+
push(chunk: Buffer): Buffer;
|
|
13
|
+
holding(): boolean;
|
|
14
|
+
flush(): Buffer;
|
|
15
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
// Keeps escape sequences typed into your terminal whole, so ConPTY never sees half of one.
|
|
2
|
+
/** How long an unfinished escape sequence is held back waiting for the rest (a lone Esc key press waits this long). */
|
|
3
|
+
export const JOIN_MS = 30;
|
|
4
|
+
/** Longest sequence held back; anything longer is not a key, mouse report or terminal reply, and is sent as it is. */
|
|
5
|
+
const MAX_HELD = 64;
|
|
6
|
+
/**
|
|
7
|
+
* Keeps each escape sequence typed into your terminal (keys, mouse reports, the terminal's replies) in one INPUT frame.
|
|
8
|
+
* The console can hand one over in pieces; ConPTY reads a lone "ESC[" as Alt+[ and the rest as typed text, so a split
|
|
9
|
+
* Right arrow (ESC[C) left a stray "C" in the agent's prompt. An unfinished sequence at the end of a chunk is held
|
|
10
|
+
* until the rest arrives (or JOIN_MS passes).
|
|
11
|
+
*/
|
|
12
|
+
export class InputJoiner {
|
|
13
|
+
held = Buffer.alloc(0);
|
|
14
|
+
/** The bytes to send now; an unfinished sequence at the end is kept for the next chunk. */
|
|
15
|
+
push(chunk) {
|
|
16
|
+
const data = this.held.length ? Buffer.concat([this.held, chunk]) : chunk;
|
|
17
|
+
const cut = unfinishedSequence(data);
|
|
18
|
+
this.held = Buffer.from(data.subarray(cut));
|
|
19
|
+
return data.subarray(0, cut);
|
|
20
|
+
}
|
|
21
|
+
holding() {
|
|
22
|
+
return this.held.length > 0;
|
|
23
|
+
}
|
|
24
|
+
flush() {
|
|
25
|
+
const out = this.held;
|
|
26
|
+
this.held = Buffer.alloc(0);
|
|
27
|
+
return out;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/** Where an escape sequence that has not ended yet starts at the end of `data` (data.length if there is none). */
|
|
31
|
+
function unfinishedSequence(data) {
|
|
32
|
+
const start = data.lastIndexOf(0x1b, -1);
|
|
33
|
+
if (start === -1 || data.length - start > MAX_HELD)
|
|
34
|
+
return data.length;
|
|
35
|
+
const rest = data.subarray(start + 1);
|
|
36
|
+
if (rest.length === 0)
|
|
37
|
+
return start;
|
|
38
|
+
// ESC [ or ESC O (SS3) followed only by parameter / intermediate bytes: the final byte has not arrived yet.
|
|
39
|
+
if (rest[0] === 0x5b || rest[0] === 0x4f)
|
|
40
|
+
return rest.subarray(1).every((b) => b >= 0x20 && b <= 0x3f) && (rest[0] === 0x5b || rest.length === 1)
|
|
41
|
+
? start
|
|
42
|
+
: data.length;
|
|
43
|
+
return data.length;
|
|
44
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Removes the terminal "strings" an untrusted program could abuse from the sandbox's output before it reaches your
|
|
3
|
+
* terminal: clipboard writes (OSC 52), terminal macros (ConEmu's OSC 9), DCS / APC / PM / SOS, and their C1 forms.
|
|
4
|
+
* Titles, links, progress and colours pass. A byte-level state machine, so no split across chunks, leading zero
|
|
5
|
+
* (ESC]052) or huge payload slips through: a dropped string stays dropped until its terminator, however long it is.
|
|
6
|
+
*/
|
|
7
|
+
export declare class OutputFilter {
|
|
8
|
+
/** text: normal output; esc: after ESC; c2: after a 0xC2 lead byte; string: inside an OSC/DCS/...; stringEsc / stringC2: a possible terminator inside one. */
|
|
9
|
+
private state;
|
|
10
|
+
/** The string being read: an OSC worth keeping is collected until its terminator; null = being dropped. */
|
|
11
|
+
private body;
|
|
12
|
+
push(chunk: Buffer): Buffer;
|
|
13
|
+
}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/** OSC commands that may reach your terminal: window title (0, 1, 2), links (8), progress (9;4), shell marks (133). */
|
|
2
|
+
const KEPT_OSC = (body) => {
|
|
3
|
+
const number = /^(\d{1,4})(;|$)/.exec(body);
|
|
4
|
+
if (!number)
|
|
5
|
+
return false;
|
|
6
|
+
const n = Number(number[1]);
|
|
7
|
+
return n <= 2 || n === 8 || n === 133 || (n === 9 && body.startsWith(number[1] + ';4;'));
|
|
8
|
+
};
|
|
9
|
+
/** Longest OSC kept (a title or a link); anything longer is dropped whole. */
|
|
10
|
+
const MAX_KEPT_STRING = 4096;
|
|
11
|
+
/**
|
|
12
|
+
* Removes the terminal "strings" an untrusted program could abuse from the sandbox's output before it reaches your
|
|
13
|
+
* terminal: clipboard writes (OSC 52), terminal macros (ConEmu's OSC 9), DCS / APC / PM / SOS, and their C1 forms.
|
|
14
|
+
* Titles, links, progress and colours pass. A byte-level state machine, so no split across chunks, leading zero
|
|
15
|
+
* (ESC]052) or huge payload slips through: a dropped string stays dropped until its terminator, however long it is.
|
|
16
|
+
*/
|
|
17
|
+
export class OutputFilter {
|
|
18
|
+
/** text: normal output; esc: after ESC; c2: after a 0xC2 lead byte; string: inside an OSC/DCS/...; stringEsc / stringC2: a possible terminator inside one. */
|
|
19
|
+
state = 'text';
|
|
20
|
+
/** The string being read: an OSC worth keeping is collected until its terminator; null = being dropped. */
|
|
21
|
+
body = null;
|
|
22
|
+
push(chunk) {
|
|
23
|
+
const out = Buffer.allocUnsafe(chunk.length + MAX_KEPT_STRING + 8);
|
|
24
|
+
let n = 0;
|
|
25
|
+
const put = (...bytes) => {
|
|
26
|
+
for (const b of bytes)
|
|
27
|
+
out[n++] = b;
|
|
28
|
+
};
|
|
29
|
+
/** After ESC (or the C1 form): ] opens an OSC (maybe kept), P X ^ _ open DCS / SOS / PM / APC (dropped). */
|
|
30
|
+
const opens = (b, c1) => {
|
|
31
|
+
if (b === (c1 ? 0x9d : 0x5d)) {
|
|
32
|
+
this.body = c1 ? null : [];
|
|
33
|
+
this.state = 'string';
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
if ((c1 ? [0x90, 0x98, 0x9e, 0x9f] : [0x50, 0x58, 0x5e, 0x5f]).includes(b)) {
|
|
37
|
+
this.body = null;
|
|
38
|
+
this.state = 'string';
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
return false;
|
|
42
|
+
};
|
|
43
|
+
const endString = (terminator) => {
|
|
44
|
+
const body = this.body && Buffer.from(this.body).toString('latin1');
|
|
45
|
+
if (body !== null && KEPT_OSC(body)) {
|
|
46
|
+
put(0x1b, 0x5d);
|
|
47
|
+
out.write(body, n, 'latin1');
|
|
48
|
+
n += body.length;
|
|
49
|
+
put(...terminator);
|
|
50
|
+
}
|
|
51
|
+
this.body = null;
|
|
52
|
+
this.state = 'text';
|
|
53
|
+
};
|
|
54
|
+
const collect = (b) => {
|
|
55
|
+
if (this.body && this.body.push(b) > MAX_KEPT_STRING)
|
|
56
|
+
this.body = null;
|
|
57
|
+
};
|
|
58
|
+
for (const b of chunk) {
|
|
59
|
+
switch (this.state) {
|
|
60
|
+
case 'text':
|
|
61
|
+
if (b === 0x1b)
|
|
62
|
+
this.state = 'esc';
|
|
63
|
+
else if (b === 0xc2)
|
|
64
|
+
this.state = 'c2';
|
|
65
|
+
else
|
|
66
|
+
put(b);
|
|
67
|
+
break;
|
|
68
|
+
case 'esc':
|
|
69
|
+
if (opens(b, false))
|
|
70
|
+
break;
|
|
71
|
+
if (b !== 0x1b) {
|
|
72
|
+
put(0x1b, b);
|
|
73
|
+
this.state = 'text';
|
|
74
|
+
}
|
|
75
|
+
else
|
|
76
|
+
put(0x1b);
|
|
77
|
+
break;
|
|
78
|
+
case 'c2':
|
|
79
|
+
if (opens(b, true))
|
|
80
|
+
break;
|
|
81
|
+
if (b === 0x1b) {
|
|
82
|
+
put(0xc2);
|
|
83
|
+
this.state = 'esc';
|
|
84
|
+
}
|
|
85
|
+
else if (b === 0xc2)
|
|
86
|
+
put(0xc2);
|
|
87
|
+
else {
|
|
88
|
+
put(0xc2, b);
|
|
89
|
+
this.state = 'text';
|
|
90
|
+
}
|
|
91
|
+
break;
|
|
92
|
+
case 'string':
|
|
93
|
+
if (b === 0x07)
|
|
94
|
+
endString([0x07]);
|
|
95
|
+
else if (b === 0x1b)
|
|
96
|
+
this.state = 'stringEsc';
|
|
97
|
+
else if (b === 0xc2)
|
|
98
|
+
this.state = 'stringC2';
|
|
99
|
+
else if (b === 0x18 || b === 0x1a) {
|
|
100
|
+
this.body = null;
|
|
101
|
+
this.state = 'text';
|
|
102
|
+
}
|
|
103
|
+
else
|
|
104
|
+
collect(b);
|
|
105
|
+
break;
|
|
106
|
+
case 'stringC2':
|
|
107
|
+
// U+009C is the C1 string terminator; any other character is part of the string.
|
|
108
|
+
if (b === 0x9c)
|
|
109
|
+
endString([0x1b, 0x5c]);
|
|
110
|
+
else {
|
|
111
|
+
collect(0xc2);
|
|
112
|
+
this.state = 'string';
|
|
113
|
+
if (b === 0x07)
|
|
114
|
+
endString([0x07]);
|
|
115
|
+
else if (b === 0x1b)
|
|
116
|
+
this.state = 'stringEsc';
|
|
117
|
+
else if (b !== 0xc2)
|
|
118
|
+
collect(b);
|
|
119
|
+
else
|
|
120
|
+
this.state = 'stringC2';
|
|
121
|
+
}
|
|
122
|
+
break;
|
|
123
|
+
case 'stringEsc':
|
|
124
|
+
if (b === 0x5c) {
|
|
125
|
+
endString([0x1b, 0x5c]);
|
|
126
|
+
break;
|
|
127
|
+
}
|
|
128
|
+
// ESC inside a string ends it (dropped) and starts a new sequence.
|
|
129
|
+
this.body = null;
|
|
130
|
+
this.state = 'esc';
|
|
131
|
+
if (!opens(b, false) && b !== 0x1b) {
|
|
132
|
+
put(0x1b, b);
|
|
133
|
+
this.state = 'text';
|
|
134
|
+
}
|
|
135
|
+
break;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return out.subarray(0, n);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export declare const FrameType: {
|
|
2
|
+
readonly Hello: 1;
|
|
3
|
+
readonly Input: 2;
|
|
4
|
+
readonly Resize: 3;
|
|
5
|
+
readonly Restart: 4;
|
|
6
|
+
readonly Ping: 5;
|
|
7
|
+
readonly Output: 16;
|
|
8
|
+
readonly Exit: 17;
|
|
9
|
+
readonly Error: 18;
|
|
10
|
+
readonly Restarting: 19;
|
|
11
|
+
readonly Status: 20;
|
|
12
|
+
readonly Console: 21;
|
|
13
|
+
};
|
|
14
|
+
/** HELLO flags: control-only connections get no output and never size the console; a query only asks for STATUS. */
|
|
15
|
+
export declare const HelloFlag: {
|
|
16
|
+
readonly ControlOnly: 1;
|
|
17
|
+
readonly Query: 2;
|
|
18
|
+
};
|
|
19
|
+
/** Viewers ping this often; ptyhost counts a viewer as gone after 15 s of silence (e.g. its terminal tab was closed). */
|
|
20
|
+
export declare const PING_INTERVAL_MS = 5000;
|
|
21
|
+
export interface Frame {
|
|
22
|
+
type: number;
|
|
23
|
+
payload: Buffer;
|
|
24
|
+
}
|
|
25
|
+
/** Ctrl+] — the same detach key telnet uses; Claude Code does not bind it. */
|
|
26
|
+
export declare const DETACH_KEY = 29;
|
|
27
|
+
export declare const encodeFrame: (type: number, payload?: Buffer) => Buffer;
|
|
28
|
+
export declare const helloFrame: (token: string, cols: number, rows: number, flags?: number) => Buffer;
|
|
29
|
+
export declare const resizeFrame: (cols: number, rows: number) => Buffer;
|
|
30
|
+
/** Same limit as ptyhost.cs; a peer announcing more is broken or hostile. */
|
|
31
|
+
export declare const MAX_FRAME_BYTES: number;
|
|
32
|
+
/** Splits a TCP byte stream back into frames. */
|
|
33
|
+
export declare class FrameReader {
|
|
34
|
+
private pending;
|
|
35
|
+
push(chunk: Buffer): Frame[];
|
|
36
|
+
}
|