windows-development-sandbox 1.4.1 → 1.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/config.example.json +3 -1
- package/dist/api.js +27 -16
- package/dist/cli/args.d.ts +4 -6
- package/dist/cli/args.js +67 -34
- package/dist/cli/argv.d.ts +9 -0
- package/dist/cli/argv.js +22 -0
- package/dist/cli/commands/accounts.d.ts +1 -1
- package/dist/cli/commands/accounts.js +42 -27
- package/dist/cli/commands/agent-commands.d.ts +3 -3
- package/dist/cli/commands/agent-commands.js +27 -18
- package/dist/cli/commands/context.d.ts +9 -11
- package/dist/cli/commands/context.js +35 -32
- package/dist/cli/commands/data/clean.d.ts +2 -2
- package/dist/cli/commands/data/clean.js +27 -11
- package/dist/cli/commands/data/collect.d.ts +6 -3
- package/dist/cli/commands/data/collect.js +46 -15
- package/dist/cli/commands/data/index.d.ts +2 -2
- package/dist/cli/commands/data/index.js +30 -12
- package/dist/cli/commands/data/remove.d.ts +1 -1
- package/dist/cli/commands/data/remove.js +4 -4
- package/dist/cli/commands/index.d.ts +5 -4
- package/dist/cli/commands/index.js +5 -4
- package/dist/cli/commands/launch/add-root.d.ts +7 -0
- package/dist/cli/commands/launch/add-root.js +64 -0
- package/dist/cli/commands/launch/boot-progress.d.ts +7 -0
- package/dist/cli/commands/launch/boot-progress.js +48 -0
- package/dist/cli/commands/launch/boot-wants.d.ts +11 -0
- package/dist/cli/commands/launch/boot-wants.js +48 -0
- package/dist/cli/commands/launch/first-start.d.ts +10 -0
- package/dist/cli/commands/launch/first-start.js +53 -0
- package/dist/cli/commands/launch/index.d.ts +6 -0
- package/dist/cli/commands/launch/index.js +6 -0
- package/dist/cli/commands/launch/launch.d.ts +8 -0
- package/dist/cli/commands/launch/launch.js +211 -0
- package/dist/cli/commands/launch/prepare.d.ts +23 -0
- package/dist/cli/commands/launch/prepare.js +109 -0
- package/dist/cli/commands/launch/running.d.ts +45 -0
- package/dist/cli/commands/launch/running.js +218 -0
- package/dist/cli/commands/launch/summary.d.ts +8 -0
- package/dist/cli/commands/launch/summary.js +98 -0
- package/dist/cli/commands/maintenance/audit.d.ts +3 -0
- package/dist/cli/commands/maintenance/audit.js +58 -0
- package/dist/cli/commands/maintenance/clean.d.ts +2 -0
- package/dist/cli/commands/maintenance/clean.js +10 -0
- package/dist/cli/commands/maintenance/config.d.ts +2 -0
- package/dist/cli/commands/maintenance/config.js +145 -0
- package/dist/cli/commands/maintenance/doctor.d.ts +2 -0
- package/dist/cli/commands/maintenance/doctor.js +52 -0
- package/dist/cli/commands/maintenance/host-claude.d.ts +2 -0
- package/dist/cli/commands/maintenance/host-claude.js +4 -0
- package/dist/cli/commands/maintenance/index.d.ts +8 -0
- package/dist/cli/commands/maintenance/index.js +9 -0
- package/dist/cli/commands/maintenance/logs.d.ts +2 -0
- package/dist/cli/commands/maintenance/logs.js +44 -0
- package/dist/cli/commands/maintenance/sync.d.ts +2 -0
- package/dist/cli/commands/maintenance/sync.js +12 -0
- package/dist/cli/commands/maintenance/watch.d.ts +3 -0
- package/dist/cli/commands/maintenance/watch.js +6 -0
- package/dist/cli/commands/projects/describe-sessions.d.ts +3 -0
- package/dist/cli/commands/projects/describe-sessions.js +15 -0
- package/dist/cli/commands/projects/here.d.ts +38 -0
- package/dist/cli/commands/projects/here.js +145 -0
- package/dist/cli/commands/projects/index.d.ts +4 -0
- package/dist/cli/commands/projects/index.js +4 -0
- package/dist/cli/commands/projects/projects.d.ts +14 -0
- package/dist/cli/commands/projects/projects.js +213 -0
- package/dist/cli/commands/projects/restart.d.ts +15 -0
- package/dist/cli/commands/projects/restart.js +149 -0
- package/dist/cli/commands/registry.d.ts +3 -0
- package/dist/cli/commands/registry.js +34 -0
- package/dist/cli/commands/repair/checks.js +105 -29
- package/dist/cli/commands/repair/finders.d.ts +13 -10
- package/dist/cli/commands/repair/finders.js +63 -43
- package/dist/cli/commands/repair/index.d.ts +4 -4
- package/dist/cli/commands/repair/index.js +47 -21
- package/dist/cli/commands/repair/types.d.ts +2 -2
- package/dist/cli/commands/repair/types.js +7 -2
- package/dist/cli/commands/sessions/attach.d.ts +2 -0
- package/dist/cli/commands/sessions/attach.js +45 -0
- package/dist/cli/commands/sessions/control.d.ts +4 -0
- package/dist/cli/commands/sessions/control.js +62 -0
- package/dist/cli/commands/sessions/exec.d.ts +6 -0
- package/dist/cli/commands/sessions/exec.js +72 -0
- package/dist/cli/commands/sessions/index.d.ts +6 -0
- package/dist/cli/commands/sessions/index.js +9 -0
- package/dist/cli/commands/sessions/list.d.ts +15 -0
- package/dist/cli/commands/sessions/list.js +65 -0
- package/dist/cli/commands/sessions/status.d.ts +2 -0
- package/dist/cli/commands/sessions/status.js +153 -0
- package/dist/cli/commands/sessions/window.d.ts +3 -0
- package/dist/cli/commands/sessions/window.js +18 -0
- package/dist/cli/commands/setup/checks.d.ts +4 -4
- package/dist/cli/commands/setup/checks.js +36 -19
- package/dist/cli/commands/setup/facts.d.ts +6 -6
- package/dist/cli/commands/setup/facts.js +23 -11
- package/dist/cli/commands/setup/index.d.ts +1 -1
- package/dist/cli/commands/setup/index.js +25 -12
- package/dist/cli/commands/user-config.d.ts +5 -5
- package/dist/cli/commands/user-config.js +14 -12
- package/dist/cli/history.d.ts +5 -4
- package/dist/cli/history.js +23 -11
- package/dist/cli/index.d.ts +4 -14
- package/dist/cli/index.js +27 -77
- package/dist/cli/manifest.d.ts +464 -10
- package/dist/cli/manifest.js +327 -53
- package/dist/cli/menu/apps.d.ts +7 -5
- package/dist/cli/menu/apps.js +64 -16
- package/dist/cli/menu/command-fields.d.ts +15 -0
- package/dist/cli/menu/command-fields.js +23 -0
- package/dist/cli/menu/command-form.d.ts +3 -5
- package/dist/cli/menu/command-form.js +116 -48
- package/dist/cli/menu/home.d.ts +22 -0
- package/dist/cli/menu/home.js +72 -0
- package/dist/cli/menu/index.d.ts +2 -24
- package/dist/cli/menu/index.js +4 -178
- package/dist/cli/menu/menu.d.ts +23 -0
- package/dist/cli/menu/menu.js +185 -0
- package/dist/cli/menu/settings/categories.d.ts +2 -2
- package/dist/cli/menu/settings/categories.js +123 -20
- package/dist/cli/menu/settings/collections/collection-editor.d.ts +23 -0
- package/dist/cli/menu/settings/collections/collection-editor.js +89 -0
- package/dist/cli/menu/settings/collections/map-editor.d.ts +10 -0
- package/dist/cli/menu/settings/collections/map-editor.js +34 -0
- package/dist/cli/menu/settings/collections/object-list-editor.d.ts +10 -0
- package/dist/cli/menu/settings/collections/object-list-editor.js +23 -0
- package/dist/cli/menu/settings/collections/object-map-editor.d.ts +10 -0
- package/dist/cli/menu/settings/collections/object-map-editor.js +35 -0
- package/dist/cli/menu/settings/collections/string-list-editor.d.ts +12 -0
- package/dist/cli/menu/settings/collections/string-list-editor.js +39 -0
- package/dist/cli/menu/settings/config-file.d.ts +2 -2
- package/dist/cli/menu/settings/config-file.js +42 -19
- package/dist/cli/menu/settings/editor-actions.d.ts +2 -0
- package/dist/cli/menu/settings/editor-actions.js +2 -0
- package/dist/cli/menu/settings/format.d.ts +5 -0
- package/dist/cli/menu/settings/format.js +39 -0
- package/dist/cli/menu/settings/index.d.ts +1 -29
- package/dist/cli/menu/settings/index.js +1 -133
- package/dist/cli/menu/settings/object-editor.d.ts +12 -0
- package/dist/cli/menu/settings/object-editor.js +86 -0
- package/dist/cli/menu/settings/schema-node.d.ts +3 -1
- package/dist/cli/menu/settings/schema-node.js +71 -24
- package/dist/cli/menu/settings/settings-editor.d.ts +30 -0
- package/dist/cli/menu/settings/settings-editor.js +176 -0
- package/dist/cli/menu/settings/{editors.d.ts → value-editor.d.ts} +2 -13
- package/dist/cli/menu/settings/value-editor.js +137 -0
- package/dist/cli/menu/several.d.ts +4 -4
- package/dist/cli/menu/several.js +61 -20
- package/dist/cli/{colors.d.ts → output/colors.d.ts} +8 -8
- package/dist/cli/{colors.js → output/colors.js} +32 -14
- package/dist/cli/output/index.d.ts +3 -0
- package/dist/cli/output/index.js +3 -0
- package/dist/cli/output/print.d.ts +5 -0
- package/dist/cli/output/print.js +14 -0
- package/dist/cli/{progress.d.ts → output/progress.d.ts} +5 -5
- package/dist/cli/{progress.js → output/progress.js} +42 -19
- package/dist/cli/report.d.ts +2 -0
- package/dist/cli/report.js +20 -0
- package/dist/cli/tui/app.d.ts +6 -16
- package/dist/cli/tui/app.js +28 -8
- package/dist/cli/tui/dialogs/confirm-screen.d.ts +20 -0
- package/dist/cli/tui/dialogs/confirm-screen.js +50 -0
- package/dist/cli/tui/dialogs/message-screen.d.ts +17 -0
- package/dist/cli/tui/dialogs/message-screen.js +55 -0
- package/dist/cli/tui/dialogs/paragraphs.d.ts +2 -0
- package/dist/cli/tui/dialogs/paragraphs.js +5 -0
- package/dist/cli/tui/dialogs/text-screen.d.ts +26 -0
- package/dist/cli/tui/dialogs/text-screen.js +107 -0
- package/dist/cli/tui/frame.js +3 -1
- package/dist/cli/tui/index.d.ts +7 -3
- package/dist/cli/tui/index.js +4 -2
- package/dist/cli/tui/list/list-screen.d.ts +29 -0
- package/dist/cli/tui/{list-screen.js → list/list-screen.js} +86 -23
- package/dist/cli/tui/{list-screen.d.ts → list/list-types.d.ts} +0 -28
- package/dist/cli/tui/screen.d.ts +14 -0
- package/dist/cli/tui/terminal.js +34 -10
- package/dist/cli/tui/text.d.ts +2 -1
- package/dist/cli/tui/text.js +37 -7
- package/dist/cli/tui/theme.js +27 -9
- package/dist/cli/validate.d.ts +8 -8
- package/dist/cli/validate.js +32 -21
- package/dist/core/config/defaults.d.ts +2 -0
- package/dist/core/config/defaults.js +203 -0
- package/dist/core/config/index.d.ts +2 -0
- package/dist/core/config/index.js +3 -0
- package/dist/core/{config.d.ts → config/loader.d.ts} +1 -2
- package/dist/core/config/loader.js +47 -0
- package/dist/core/{detect-databases.js → detect/databases.js} +111 -23
- package/dist/core/detect/index.d.ts +4 -0
- package/dist/core/detect/index.js +4 -0
- package/dist/core/{detect-pwsh.d.ts → detect/pwsh.d.ts} +1 -1
- package/dist/core/{detect-pwsh.js → detect/pwsh.js} +25 -11
- package/dist/core/{detect-toolchains.d.ts → detect/toolchains.d.ts} +1 -1
- package/dist/core/{detect-toolchains.js → detect/toolchains.js} +42 -5
- package/dist/{guest/toolchains → core/detect}/versions.js +28 -12
- package/dist/core/disk.d.ts +2 -0
- package/dist/core/disk.js +46 -3
- package/dist/core/local-config/boot-wants.d.ts +45 -0
- package/dist/core/local-config/boot-wants.js +120 -0
- package/dist/core/local-config/file.d.ts +3 -0
- package/dist/core/local-config/file.js +16 -0
- package/dist/core/local-config/index.d.ts +5 -0
- package/dist/core/local-config/index.js +7 -0
- package/dist/core/{local-config.d.ts → local-config/overrides.d.ts} +3 -18
- package/dist/core/{local-config.js → local-config/overrides.js} +45 -52
- package/dist/core/local-config/policy.d.ts +19 -0
- package/dist/core/local-config/policy.js +45 -0
- package/dist/core/local-config/trust.d.ts +13 -0
- package/dist/core/local-config/trust.js +43 -0
- package/dist/core/package-info.d.ts +4 -0
- package/dist/core/package-info.js +13 -0
- package/dist/core/run/guest-workspace.d.ts +23 -0
- package/dist/core/run/guest-workspace.js +47 -0
- package/dist/core/run/index.d.ts +3 -0
- package/dist/core/run/index.js +3 -0
- package/dist/core/run/resolve-run.d.ts +3 -0
- package/dist/core/run/resolve-run.js +202 -0
- package/dist/core/run/versions.d.ts +13 -0
- package/dist/core/run/versions.js +65 -0
- package/dist/core/safe-paths.js +17 -5
- package/dist/core/schema/apps.d.ts +4 -4
- package/dist/core/schema/apps.js +55 -21
- package/dist/core/schema/common.d.ts +13 -10
- package/dist/core/schema/common.js +16 -10
- package/dist/core/schema/config.d.ts +15 -10
- package/dist/core/schema/config.js +78 -53
- package/dist/core/schema/databases.d.ts +4 -3
- package/dist/core/schema/databases.js +16 -12
- package/dist/core/schema/harness.d.ts +1 -1
- package/dist/core/schema/harness.js +17 -7
- package/dist/core/schema/index.d.ts +6 -0
- package/dist/core/schema/index.js +8 -0
- package/dist/core/schema/json-schema.js +10 -5
- package/dist/core/schema/profile.d.ts +4 -4
- package/dist/core/schema/profile.js +37 -17
- package/dist/core/schema/projects.d.ts +1 -1
- package/dist/core/schema/projects.js +16 -6
- package/dist/core/schema/sandbox.d.ts +11 -11
- package/dist/core/schema/sandbox.js +101 -37
- package/dist/core/schema/toolchains.d.ts +6 -1
- package/dist/core/schema/toolchains.js +84 -34
- package/dist/core/types.d.ts +19 -9
- package/dist/core/util/errors.d.ts +8 -0
- package/dist/core/util/errors.js +14 -0
- package/dist/core/util/fs.d.ts +8 -0
- package/dist/core/util/fs.js +40 -0
- package/dist/core/util/index.d.ts +7 -0
- package/dist/core/util/index.js +7 -0
- package/dist/core/util/jsonc.d.ts +6 -0
- package/dist/core/util/jsonc.js +25 -0
- package/dist/core/util/links.d.ts +10 -0
- package/dist/core/util/links.js +39 -0
- package/dist/core/util/paths.d.ts +7 -0
- package/dist/core/util/paths.js +33 -0
- package/dist/core/util/process.d.ts +15 -0
- package/dist/core/util/process.js +54 -0
- package/dist/core/util/text.d.ts +8 -0
- package/dist/core/util/text.js +8 -0
- package/dist/guest/{setup/agents.js → agents/agent-installer.js} +24 -4
- package/dist/guest/apps/after-install.d.ts +3 -0
- package/dist/guest/apps/after-install.js +47 -0
- package/dist/guest/apps/app-installer.d.ts +22 -0
- package/dist/guest/apps/app-installer.js +116 -0
- package/dist/guest/apps/find-exe.d.ts +5 -0
- package/dist/guest/apps/find-exe.js +41 -0
- package/dist/guest/apps/index.d.ts +3 -10
- package/dist/guest/apps/index.js +6 -206
- package/dist/guest/apps/resolvers.js +37 -9
- package/dist/guest/apps/shortcuts.d.ts +6 -0
- package/dist/guest/apps/shortcuts.js +28 -0
- package/dist/guest/apps/sources.d.ts +4 -0
- package/dist/guest/apps/sources.js +17 -0
- package/dist/guest/apps/unpack.d.ts +3 -0
- package/dist/guest/apps/unpack.js +47 -0
- package/dist/guest/{audit-parse.js → audit/parse.js} +39 -3
- package/dist/guest/{audit.d.ts → audit/process-audit.d.ts} +3 -1
- package/dist/guest/{audit.js → audit/process-audit.js} +33 -8
- package/dist/guest/boot/boot-env.d.ts +4 -0
- package/dist/guest/{boot-env.js → boot/boot-env.js} +7 -5
- package/dist/guest/boot/boot.d.ts +1 -0
- package/dist/guest/{main.js → boot/boot.js} +96 -50
- package/dist/guest/{guide.js → boot/guide.js} +32 -7
- package/dist/guest/{project-env.d.ts → boot/project-env.d.ts} +3 -3
- package/dist/guest/{project-env.js → boot/project-env.js} +12 -4
- package/dist/guest/boot/project-status.d.ts +5 -0
- package/dist/guest/boot/project-status.js +28 -0
- package/dist/guest/daemon/daemon.d.ts +1 -0
- package/dist/guest/daemon/daemon.js +51 -0
- package/dist/guest/daemon/exec.js +18 -6
- package/dist/guest/daemon/{shutdown.js → idle-shutdown.js} +5 -4
- package/dist/guest/daemon/{project.d.ts → project-provisioner.d.ts} +3 -3
- package/dist/guest/daemon/{project.js → project-provisioner.js} +60 -22
- package/dist/guest/daemon/relays.js +5 -3
- package/dist/guest/daemon/{session.js → sessions.js} +84 -24
- package/dist/guest/daemon/state.d.ts +4 -1
- package/dist/guest/daemon/state.js +34 -20
- package/dist/guest/databases/database-server.d.ts +13 -0
- package/dist/guest/databases/database-server.js +35 -0
- package/dist/guest/databases/dynamodb.d.ts +12 -0
- package/dist/guest/databases/dynamodb.js +81 -0
- package/dist/guest/databases/index.d.ts +2 -0
- package/dist/guest/databases/index.js +2 -0
- package/dist/guest/databases/mongodb.d.ts +7 -0
- package/dist/guest/databases/mongodb.js +46 -0
- package/dist/guest/databases/mysql.d.ts +7 -0
- package/dist/guest/databases/mysql.js +59 -0
- package/dist/guest/databases/names.d.ts +5 -0
- package/dist/guest/databases/names.js +8 -0
- package/dist/guest/databases/postgres.d.ts +9 -0
- package/dist/guest/databases/postgres.js +85 -0
- package/dist/guest/databases/redis.d.ts +7 -0
- package/dist/guest/databases/redis.js +25 -0
- package/dist/guest/databases/registry.d.ts +5 -0
- package/dist/guest/databases/registry.js +51 -0
- package/dist/guest/databases/sbx-db.d.ts +1 -0
- package/dist/guest/{db.js → databases/sbx-db.js} +13 -13
- package/dist/guest/{toolchains/databases → databases}/server.d.ts +5 -5
- package/dist/guest/{toolchains/databases → databases}/server.js +18 -13
- package/dist/guest/entries/daemon.js +16 -0
- package/dist/guest/entries/db.js +10 -0
- package/dist/guest/entries/gitguard.js +20 -0
- package/dist/guest/entries/main.d.ts +1 -0
- package/dist/guest/entries/main.js +24 -0
- package/dist/guest/entries/netproxy.d.ts +1 -0
- package/dist/guest/entries/netproxy.js +7 -0
- package/dist/guest/entries/view.d.ts +1 -0
- package/dist/guest/entries/view.js +11 -0
- package/dist/guest/{gitguard.js → git/decision.js} +49 -26
- package/dist/guest/network/addresses.d.ts +2 -0
- package/dist/guest/network/addresses.js +6 -0
- package/dist/guest/{setup/network.d.ts → network/allow-only.d.ts} +0 -10
- package/dist/guest/network/allow-only.js +84 -0
- package/dist/guest/network/firewall.d.ts +9 -0
- package/dist/guest/{setup/network.js → network/firewall.js} +58 -63
- package/dist/guest/network/proxy-server.d.ts +2 -0
- package/dist/guest/{netproxy.js → network/proxy-server.js} +37 -18
- package/dist/guest/{helpers.d.ts → runtime/csc.d.ts} +1 -1
- package/dist/guest/{helpers.js → runtime/csc.js} +7 -2
- package/dist/guest/runtime/fs.d.ts +2 -0
- package/dist/guest/runtime/fs.js +6 -0
- package/dist/guest/runtime/log.d.ts +3 -0
- package/dist/guest/runtime/log.js +22 -0
- package/dist/guest/runtime/paths.d.ts +13 -0
- package/dist/guest/runtime/paths.js +14 -0
- package/dist/guest/{ports.js → runtime/ports.js} +8 -2
- package/dist/guest/runtime/process.d.ts +15 -0
- package/dist/guest/runtime/process.js +59 -0
- package/dist/guest/{project-context.js → runtime/project-context.js} +1 -1
- package/dist/guest/runtime/session.d.ts +5 -0
- package/dist/guest/runtime/session.js +10 -0
- package/dist/guest/runtime/status.d.ts +7 -0
- package/dist/guest/runtime/status.js +57 -0
- package/dist/guest/{cmdline.js → sessions/cmdline.js} +10 -4
- package/dist/guest/{ptyhost.js → sessions/pty-host.js} +12 -5
- package/dist/guest/{view.js → sessions/viewer.js} +8 -11
- package/dist/guest/setup/claude-mem.d.ts +10 -0
- package/dist/guest/setup/{claude.js → claude-mem.js} +18 -78
- package/dist/guest/setup/{claude.d.ts → claude-profile.d.ts} +0 -10
- package/dist/guest/setup/claude-profile.js +89 -0
- package/dist/guest/setup/desktop.d.ts +2 -0
- package/dist/guest/setup/desktop.js +32 -0
- package/dist/guest/setup/environment.js +28 -5
- package/dist/guest/setup/{user.d.ts → git-identity.d.ts} +0 -2
- package/dist/guest/setup/git-identity.js +34 -0
- package/dist/guest/{gitrules.d.ts → setup/git-rules.d.ts} +1 -1
- package/dist/guest/setup/git-rules.js +50 -0
- package/dist/guest/setup/hooks.js +22 -5
- package/dist/guest/setup/{policy.js → managed-policy.js} +2 -2
- package/dist/guest/toolchains/catalogue.d.ts +4 -4
- package/dist/guest/toolchains/catalogue.js +30 -7
- package/dist/guest/toolchains/detect.d.ts +12 -0
- package/dist/guest/toolchains/detect.js +54 -0
- package/dist/guest/toolchains/index.d.ts +3 -17
- package/dist/guest/toolchains/index.js +1 -106
- package/dist/guest/toolchains/install.d.ts +20 -0
- package/dist/guest/toolchains/install.js +29 -0
- package/dist/guest/toolchains/languages/go.d.ts +3 -0
- package/dist/guest/toolchains/{go.js → languages/go.js} +27 -9
- package/dist/guest/toolchains/languages/java.d.ts +8 -0
- package/dist/guest/toolchains/{java.js → languages/java.js} +57 -18
- package/dist/guest/toolchains/languages/node.d.ts +3 -0
- package/dist/guest/toolchains/{node.js → languages/node.js} +51 -18
- package/dist/guest/toolchains/languages/php.d.ts +3 -0
- package/dist/guest/toolchains/{scripting → languages}/php.js +36 -11
- package/dist/guest/toolchains/languages/python-tools.d.ts +3 -0
- package/dist/guest/toolchains/languages/python-tools.js +12 -0
- package/dist/guest/toolchains/languages/python.d.ts +3 -0
- package/dist/guest/toolchains/{python.js → languages/python.js} +29 -16
- package/dist/guest/toolchains/languages/ruby.d.ts +3 -0
- package/dist/guest/toolchains/{scripting → languages}/ruby.js +28 -10
- package/dist/guest/toolchains/leftovers.d.ts +1 -1
- package/dist/guest/toolchains/leftovers.js +13 -11
- package/dist/guest/toolchains/managers.d.ts +6 -6
- package/dist/guest/toolchains/managers.js +38 -17
- package/dist/guest/toolchains/native/binstall.d.ts +3 -2
- package/dist/guest/toolchains/native/binstall.js +20 -8
- package/dist/guest/toolchains/native/cpp.d.ts +2 -2
- package/dist/guest/toolchains/native/cpp.js +23 -8
- package/dist/guest/toolchains/native/dotnet.d.ts +5 -3
- package/dist/guest/toolchains/native/dotnet.js +72 -24
- package/dist/guest/toolchains/native/mesa.d.ts +2 -2
- package/dist/guest/toolchains/native/mesa.js +27 -10
- package/dist/guest/toolchains/native/msvc/environment.d.ts +4 -4
- package/dist/guest/toolchains/native/msvc/environment.js +30 -16
- package/dist/guest/toolchains/native/msvc/index.d.ts +3 -3
- package/dist/guest/toolchains/native/msvc/index.js +10 -8
- package/dist/guest/toolchains/native/msvc/packages.d.ts +1 -1
- package/dist/guest/toolchains/native/msvc/packages.js +69 -23
- package/dist/guest/toolchains/native/msvc/tree.d.ts +6 -6
- package/dist/guest/toolchains/native/msvc/tree.js +15 -9
- package/dist/guest/toolchains/native/rust-extras.d.ts +23 -0
- package/dist/guest/toolchains/native/rust-extras.js +100 -0
- package/dist/guest/toolchains/native/rust.d.ts +2 -2
- package/dist/guest/toolchains/native/rust.js +41 -10
- package/dist/guest/toolchains/{scripting → native}/vcruntime.d.ts +2 -2
- package/dist/guest/toolchains/{scripting → native}/vcruntime.js +17 -7
- package/dist/guest/toolchains/package-ledger.d.ts +17 -0
- package/dist/guest/toolchains/package-ledger.js +54 -0
- package/dist/guest/toolchains/plan.d.ts +3 -24
- package/dist/guest/toolchains/plan.js +99 -111
- package/dist/guest/toolchains/runtimes.d.ts +6 -6
- package/dist/guest/toolchains/runtimes.js +31 -13
- package/dist/guest/toolchains/scheduler.d.ts +22 -0
- package/dist/guest/toolchains/scheduler.js +123 -0
- package/dist/guest/toolchains/setup.d.ts +10 -0
- package/dist/guest/toolchains/setup.js +22 -0
- package/dist/guest/toolchains/state-file.d.ts +3 -0
- package/dist/guest/toolchains/state-file.js +10 -0
- package/dist/guest/toolchains/step.d.ts +24 -0
- package/dist/guest/toolchains/step.js +1 -0
- package/dist/guest/toolchains/tool-env.d.ts +12 -0
- package/dist/guest/toolchains/tool-env.js +16 -0
- package/dist/guest/toolchains/tools/cli.d.ts +10 -0
- package/dist/guest/toolchains/{cli.js → tools/cli.js} +35 -15
- package/dist/guest/toolchains/tools/git.d.ts +3 -0
- package/dist/guest/toolchains/{git.js → tools/git.js} +38 -15
- package/dist/guest/toolchains/tools/pwsh.d.ts +4 -0
- package/dist/guest/toolchains/{pwsh.js → tools/pwsh.js} +14 -7
- package/dist/guest/toolchains/{vscode-profile.d.ts → tools/vscode-profile.d.ts} +6 -6
- package/dist/guest/toolchains/{vscode-profile.js → tools/vscode-profile.js} +28 -12
- package/dist/guest/toolchains/{vscode.d.ts → tools/vscode.d.ts} +6 -6
- package/dist/guest/toolchains/{vscode.js → tools/vscode.js} +67 -21
- package/dist/guest/toolchains/version-cache.d.ts +16 -0
- package/dist/guest/toolchains/version-cache.js +67 -0
- package/dist/host/agent-commands/commands.d.ts +13 -0
- package/dist/host/agent-commands/commands.js +33 -0
- package/dist/host/agent-commands/forwarders.d.ts +7 -0
- package/dist/host/agent-commands/forwarders.js +31 -0
- package/dist/host/agent-commands/index.d.ts +4 -0
- package/dist/host/agent-commands/index.js +4 -0
- package/dist/host/agent-commands/reconcile.d.ts +12 -0
- package/dist/host/agent-commands/reconcile.js +69 -0
- package/dist/host/agent-commands/user-path.d.ts +2 -0
- package/dist/host/agent-commands/user-path.js +33 -0
- package/dist/host/audit/collect.d.ts +2 -2
- package/dist/host/audit/collect.js +59 -22
- package/dist/host/audit/log.d.ts +2 -2
- package/dist/host/audit/log.js +24 -8
- package/dist/host/{attach.d.ts → channel/attach.d.ts} +2 -2
- package/dist/host/{attach.js → channel/attach.js} +33 -15
- package/dist/host/channel/channel.d.ts +51 -0
- package/dist/host/channel/channel.js +196 -0
- package/dist/host/channel/index.d.ts +2 -0
- package/dist/host/channel/index.js +2 -0
- package/dist/host/guard/agent-files.d.ts +7 -0
- package/dist/host/guard/agent-files.js +103 -0
- package/dist/host/guard/commands.d.ts +10 -0
- package/dist/host/guard/commands.js +123 -0
- package/dist/host/guard/file-hash.d.ts +4 -0
- package/dist/host/guard/file-hash.js +37 -0
- package/dist/host/guard/git-config.d.ts +5 -0
- package/dist/host/guard/git-config.js +62 -0
- package/dist/host/guard/git-dirs.d.ts +12 -0
- package/dist/host/guard/git-dirs.js +53 -0
- package/dist/host/guard/index.d.ts +5 -0
- package/dist/host/guard/index.js +4 -0
- package/dist/host/guard/mark-of-the-web.d.ts +8 -0
- package/dist/host/guard/mark-of-the-web.js +74 -0
- package/dist/host/guard/nested-repos.d.ts +14 -0
- package/dist/host/guard/nested-repos.js +88 -0
- package/dist/host/guard/quarantine.d.ts +3 -0
- package/dist/host/guard/quarantine.js +24 -0
- package/dist/host/guard/repo-guard.d.ts +10 -0
- package/dist/host/guard/repo-guard.js +36 -0
- package/dist/host/guard/store.d.ts +40 -0
- package/dist/host/guard/store.js +145 -0
- package/dist/host/guard/types.d.ts +27 -0
- package/dist/host/guard/types.js +3 -0
- package/dist/host/guard/watch-state.d.ts +9 -0
- package/dist/host/guard/watch-state.js +26 -0
- package/dist/host/launch/boot-projects.d.ts +17 -0
- package/dist/host/launch/{projects.js → boot-projects.js} +22 -13
- package/dist/host/{database-plan.d.ts → launch/database-plan.d.ts} +5 -5
- package/dist/host/{database-plan.js → launch/database-plan.js} +24 -13
- package/dist/host/launch/generate.d.ts +4 -0
- package/dist/host/launch/generate.js +77 -0
- package/dist/host/launch/index.d.ts +10 -0
- package/dist/host/launch/index.js +10 -0
- package/dist/host/launch/mappings.d.ts +5 -5
- package/dist/host/launch/mappings.js +37 -24
- package/dist/host/launch/pc-scan.d.ts +5 -0
- package/dist/host/{pc-scan.js → launch/pc-scan.js} +20 -13
- package/dist/host/launch/project-scan.d.ts +7 -0
- package/dist/host/{project-scan.js → launch/project-scan.js} +29 -21
- package/dist/host/launch/session-file.d.ts +23 -0
- package/dist/host/launch/session-file.js +73 -0
- package/dist/host/launch/stage.d.ts +5 -5
- package/dist/host/launch/stage.js +14 -13
- package/dist/host/launch/toolchains.d.ts +4 -0
- package/dist/host/launch/toolchains.js +11 -0
- package/dist/host/launch/{wsb.d.ts → wsb-file.d.ts} +4 -2
- package/dist/host/launch/wsb-file.js +56 -0
- package/dist/host/life/crash-report.d.ts +8 -0
- package/dist/host/life/crash-report.js +87 -0
- package/dist/host/life/index.d.ts +6 -0
- package/dist/host/life/index.js +6 -0
- package/dist/host/life/keep-awake.d.ts +10 -0
- package/dist/host/life/keep-awake.js +29 -0
- package/dist/host/life/life-record.d.ts +48 -0
- package/dist/host/life/life-record.js +76 -0
- package/dist/host/life/stop-events.d.ts +27 -0
- package/dist/host/life/stop-events.js +96 -0
- package/dist/host/life/stop-warning.d.ts +4 -0
- package/dist/host/life/stop-warning.js +25 -0
- package/dist/host/life/windows-update.d.ts +3 -0
- package/dist/host/life/windows-update.js +11 -0
- package/dist/host/native.d.ts +4 -0
- package/dist/host/native.js +11 -0
- package/dist/host/network/index.d.ts +1 -0
- package/dist/host/network/index.js +1 -0
- package/dist/host/{port-forward.d.ts → network/port-forward.d.ts} +1 -1
- package/dist/host/{port-forward.js → network/port-forward.js} +16 -10
- package/dist/host/profile/accounts.d.ts +37 -0
- package/dist/host/profile/accounts.js +146 -0
- package/dist/host/profile/claude-login.d.ts +22 -0
- package/dist/host/profile/claude-login.js +57 -0
- package/dist/host/{claude-profile.d.ts → profile/claude-profile.d.ts} +9 -9
- package/dist/host/{claude-profile.js → profile/claude-profile.js} +32 -22
- package/dist/host/profile/index.d.ts +7 -0
- package/dist/host/profile/index.js +7 -0
- package/dist/host/profile/personalize.d.ts +2 -0
- package/dist/host/profile/personalize.js +127 -0
- package/dist/host/profile/reg-file.d.ts +8 -0
- package/dist/host/profile/reg-file.js +45 -0
- package/dist/host/profile/secret-files.d.ts +2 -0
- package/dist/host/profile/secret-files.js +25 -0
- package/dist/host/profile/secret-patterns.d.ts +6 -0
- package/dist/host/profile/secret-patterns.js +128 -0
- package/dist/host/profile/secrets.d.ts +12 -0
- package/dist/host/profile/secrets.js +100 -0
- package/dist/host/projects/index.d.ts +4 -0
- package/dist/host/projects/index.js +4 -0
- package/dist/host/{join.d.ts → projects/join.d.ts} +12 -9
- package/dist/host/{join.js → projects/join.js} +62 -33
- package/dist/host/projects/known.d.ts +28 -0
- package/dist/host/projects/known.js +55 -0
- package/dist/host/projects/mapper.d.ts +29 -0
- package/dist/host/projects/mapper.js +88 -0
- package/dist/host/projects/registry.d.ts +83 -0
- package/dist/host/projects/registry.js +136 -0
- package/dist/host/sandbox/doctor.d.ts +2 -0
- package/dist/host/sandbox/doctor.js +42 -0
- package/dist/host/sandbox/host-claude.d.ts +1 -0
- package/dist/host/sandbox/host-claude.js +26 -0
- package/dist/host/sandbox/index.d.ts +6 -0
- package/dist/host/sandbox/index.js +6 -0
- package/dist/host/{platform.d.ts → sandbox/platform.d.ts} +0 -5
- package/dist/host/sandbox/platform.js +60 -0
- package/dist/host/sandbox/probe.d.ts +3 -0
- package/dist/host/sandbox/probe.js +47 -0
- package/dist/host/{window.js → sandbox/window.js} +7 -5
- package/dist/host/{wsb.js → sandbox/wsb-cli.js} +31 -8
- package/dist/host/{cleanup.js → storage/cleanup.js} +27 -12
- package/dist/host/storage/index.d.ts +2 -0
- package/dist/host/storage/index.js +2 -0
- package/dist/host/storage/state-files.d.ts +4 -0
- package/dist/host/storage/state-files.js +10 -0
- package/dist/host/test-guard.js +1 -1
- package/dist/host/tools/conpty.d.ts +8 -0
- package/dist/host/tools/conpty.js +58 -0
- package/dist/host/tools/index.d.ts +2 -0
- package/dist/host/tools/index.js +2 -0
- package/dist/host/{terminal.d.ts → tools/windows-terminal.d.ts} +2 -10
- package/dist/host/{terminal.js → tools/windows-terminal.js} +33 -57
- package/dist/host/workspace-view/active-views.d.ts +3 -0
- package/dist/host/workspace-view/active-views.js +22 -0
- package/dist/host/workspace-view/index.d.ts +2 -18
- package/dist/host/workspace-view/index.js +2 -49
- package/dist/host/workspace-view/plan.d.ts +16 -0
- package/dist/host/workspace-view/plan.js +50 -0
- package/dist/host/workspace-view/rules.js +10 -3
- package/dist/host/workspace-view/view-state.d.ts +10 -0
- package/dist/host/workspace-view/view-state.js +31 -0
- package/dist/host/workspace-view/view.d.ts +1 -0
- package/dist/host/workspace-view/view.js +51 -55
- package/dist/runtime/daemon.js +4220 -1968
- package/dist/runtime/db.js +2134 -849
- package/dist/runtime/gitguard.js +29 -11
- package/dist/runtime/main.js +4687 -2243
- package/dist/runtime/netproxy.js +1644 -420
- package/dist/runtime/view.js +1356 -428
- package/dist/selftest/accounts.test.d.ts +1 -1
- package/dist/selftest/accounts.test.js +20 -17
- package/dist/selftest/agent-commands.test.d.ts +1 -1
- package/dist/selftest/agent-commands.test.js +9 -5
- package/dist/selftest/audit.test.d.ts +1 -1
- package/dist/selftest/audit.test.js +46 -13
- package/dist/selftest/channel.test.d.ts +1 -1
- package/dist/selftest/channel.test.js +63 -16
- package/dist/selftest/cli.test.d.ts +1 -1
- package/dist/selftest/cli.test.js +68 -16
- package/dist/selftest/cmdline.test.d.ts +1 -1
- package/dist/selftest/cmdline.test.js +36 -7
- package/dist/selftest/config.test.d.ts +1 -1
- package/dist/selftest/config.test.js +12 -5
- package/dist/selftest/data.test.d.ts +1 -1
- package/dist/selftest/data.test.js +35 -6
- package/dist/selftest/detect.test.d.ts +1 -1
- package/dist/selftest/detect.test.js +22 -9
- package/dist/selftest/generate.test.d.ts +1 -1
- package/dist/selftest/generate.test.js +33 -9
- package/dist/selftest/git-access.test.d.ts +1 -1
- package/dist/selftest/git-access.test.js +42 -4
- package/dist/selftest/guest-boot.test.d.ts +1 -1
- package/dist/selftest/guest-boot.test.js +25 -7
- package/dist/selftest/host-sim.test.d.ts +1 -1
- package/dist/selftest/host-sim.test.js +27 -3
- package/dist/selftest/hostile-input.test.d.ts +1 -1
- package/dist/selftest/hostile-input.test.js +5 -5
- package/dist/selftest/index.d.ts +1 -1
- package/dist/selftest/index.js +72 -16
- package/dist/selftest/layout.test.d.ts +2 -0
- package/dist/selftest/layout.test.js +131 -0
- package/dist/selftest/links.test.d.ts +1 -1
- package/dist/selftest/links.test.js +16 -11
- package/dist/selftest/live-daemon.test.d.ts +1 -1
- package/dist/selftest/live-daemon.test.js +20 -8
- package/dist/selftest/live-git.test.d.ts +1 -1
- package/dist/selftest/live-git.test.js +13 -4
- package/dist/selftest/live-network.test.d.ts +1 -1
- package/dist/selftest/live-network.test.js +24 -9
- package/dist/selftest/live-projects.test.d.ts +1 -1
- package/dist/selftest/live-projects.test.js +47 -20
- package/dist/selftest/live-terminal.test.d.ts +1 -1
- package/dist/selftest/live-terminal.test.js +41 -15
- package/dist/selftest/local-config.test.d.ts +1 -1
- package/dist/selftest/local-config.test.js +64 -16
- package/dist/selftest/mirror.test.d.ts +1 -1
- package/dist/selftest/mirror.test.js +102 -32
- package/dist/selftest/network.test.d.ts +1 -1
- package/dist/selftest/network.test.js +17 -8
- package/dist/selftest/personalization.test.d.ts +1 -1
- package/dist/selftest/personalization.test.js +12 -5
- package/dist/selftest/projects.test.d.ts +1 -1
- package/dist/selftest/projects.test.js +280 -85
- package/dist/selftest/repair.test.d.ts +1 -1
- package/dist/selftest/repair.test.js +17 -5
- package/dist/selftest/repo-guard.test.d.ts +1 -1
- package/dist/selftest/repo-guard.test.js +21 -20
- package/dist/selftest/secrets.test.d.ts +1 -1
- package/dist/selftest/secrets.test.js +57 -13
- package/dist/selftest/setup.test.d.ts +1 -1
- package/dist/selftest/setup.test.js +25 -5
- package/dist/selftest/{fixtures.d.ts → support/fixtures.d.ts} +5 -3
- package/dist/selftest/{fixtures.js → support/fixtures.js} +95 -17
- package/dist/selftest/{harness.js → support/harness.js} +24 -7
- package/dist/selftest/{live.d.ts → support/live.d.ts} +2 -2
- package/dist/selftest/{live.js → support/live.js} +34 -10
- package/dist/selftest/support/suite.js +1 -0
- package/dist/selftest/sync.test.d.ts +1 -1
- package/dist/selftest/sync.test.js +64 -26
- package/dist/selftest/test-guard.test.d.ts +1 -1
- package/dist/selftest/test-guard.test.js +43 -15
- package/dist/selftest/toolchains.test.d.ts +1 -1
- package/dist/selftest/toolchains.test.js +135 -36
- package/dist/selftest/workspace-view.test.d.ts +1 -1
- package/dist/selftest/workspace-view.test.js +48 -11
- package/dist/selftest/workspace.test.d.ts +1 -1
- package/dist/selftest/workspace.test.js +13 -4
- package/dist/shared/{apps.d.ts → apps/catalogue.d.ts} +1 -11
- package/dist/shared/apps/catalogue.js +768 -0
- package/dist/shared/apps/index.d.ts +2 -0
- package/dist/shared/apps/index.js +2 -0
- package/dist/shared/apps/selection.d.ts +11 -0
- package/dist/shared/apps/selection.js +40 -0
- package/dist/shared/channel/index.d.ts +2 -0
- package/dist/shared/channel/index.js +2 -0
- package/dist/shared/channel/run-dir.d.ts +30 -0
- package/dist/shared/channel/run-dir.js +84 -0
- package/dist/shared/{schema.d.ts → channel/schema.d.ts} +38 -21
- package/dist/shared/{schema.js → channel/schema.js} +62 -35
- package/dist/shared/download/archive.d.ts +13 -0
- package/dist/shared/download/archive.js +57 -0
- package/dist/shared/download/downloader.d.ts +35 -0
- package/dist/shared/download/downloader.js +110 -0
- package/dist/shared/download/github.d.ts +16 -0
- package/dist/shared/download/github.js +74 -0
- package/dist/shared/download/http.d.ts +5 -0
- package/dist/shared/download/http.js +30 -0
- package/dist/shared/download/index.d.ts +5 -0
- package/dist/shared/download/index.js +5 -0
- package/dist/shared/download/spawn.d.ts +2 -0
- package/dist/shared/download/spawn.js +7 -0
- package/dist/shared/io/index.d.ts +3 -0
- package/dist/shared/io/index.js +3 -0
- package/dist/shared/io/json-file.d.ts +10 -0
- package/dist/shared/io/json-file.js +21 -0
- package/dist/shared/io/json.d.ts +13 -0
- package/dist/shared/io/json.js +49 -0
- package/dist/shared/{safe-remove.js → io/safe-remove.js} +32 -7
- package/dist/shared/{netrules.js → network/firewall-rules.js} +36 -5
- package/dist/shared/network/index.d.ts +2 -0
- package/dist/shared/network/index.js +2 -0
- package/dist/shared/{netpolicy.js → network/policy.js} +66 -11
- package/dist/shared/{paths.js → paths/claude-paths.js} +12 -2
- package/dist/shared/{guest-paths.d.ts → paths/guest-paths.d.ts} +6 -12
- package/dist/shared/{guest-paths.js → paths/guest-paths.js} +53 -36
- package/dist/shared/paths/index.d.ts +3 -0
- package/dist/shared/paths/index.js +3 -0
- package/dist/shared/{projects.js → paths/projects.js} +13 -3
- package/dist/shared/pty/client.d.ts +21 -0
- package/dist/shared/pty/client.js +79 -0
- package/dist/shared/{console-input.js → pty/console-input.js} +26 -6
- package/dist/shared/pty/index.d.ts +6 -0
- package/dist/shared/pty/index.js +6 -0
- package/dist/shared/pty/input-joiner.d.ts +15 -0
- package/dist/shared/pty/input-joiner.js +44 -0
- package/dist/shared/pty/output-filter.d.ts +13 -0
- package/dist/shared/pty/output-filter.js +140 -0
- package/dist/shared/pty/protocol.d.ts +36 -0
- package/dist/shared/pty/protocol.js +60 -0
- package/dist/shared/pty/terminal.d.ts +24 -0
- package/dist/shared/pty/terminal.js +147 -0
- package/dist/shared/test-guard.js +3 -1
- package/dist/sync/claude-mem.d.ts +1 -1
- package/dist/sync/claude-mem.js +9 -4
- package/dist/sync/history.d.ts +1 -29
- package/dist/sync/history.js +57 -45
- package/dist/sync/index.d.ts +5 -0
- package/dist/sync/index.js +5 -0
- package/dist/sync/sync-cycle.d.ts +18 -0
- package/dist/sync/sync-cycle.js +85 -0
- package/dist/sync/sync-state.d.ts +32 -0
- package/dist/sync/sync-state.js +37 -0
- package/dist/sync/watcher.d.ts +0 -18
- package/dist/sync/watcher.js +66 -100
- package/native/keep-awake.ps1 +8 -0
- package/native/power.cs +23 -0
- package/native/stop-events.ps1 +38 -0
- package/package.json +11 -3
- package/sandbox/linkgate.cs +98 -0
- package/sandbox/memlog.ps1 +15 -6
- package/schemas/config.schema.json +34 -1
- package/schemas/sandbox-config.schema.json +34 -1
- package/dist/cli/boot-progress.d.ts +0 -22
- package/dist/cli/boot-progress.js +0 -59
- package/dist/cli/commands/launch.d.ts +0 -32
- package/dist/cli/commands/launch.js +0 -421
- package/dist/cli/commands/maintenance.d.ts +0 -10
- package/dist/cli/commands/maintenance.js +0 -220
- package/dist/cli/commands/project.d.ts +0 -33
- package/dist/cli/commands/project.js +0 -102
- package/dist/cli/commands/projects.d.ts +0 -14
- package/dist/cli/commands/projects.js +0 -146
- package/dist/cli/commands/restart.d.ts +0 -6
- package/dist/cli/commands/restart.js +0 -95
- package/dist/cli/commands/sessions.d.ts +0 -12
- package/dist/cli/commands/sessions.js +0 -258
- package/dist/cli/menu/settings/editors.js +0 -305
- package/dist/cli/tui/dialogs.d.ts +0 -57
- package/dist/cli/tui/dialogs.js +0 -162
- package/dist/core/config.js +0 -109
- package/dist/core/project-policy.d.ts +0 -62
- package/dist/core/project-policy.js +0 -121
- package/dist/core/schema.d.ts +0 -6
- package/dist/core/schema.js +0 -8
- package/dist/core/util.d.ts +0 -62
- package/dist/core/util.js +0 -156
- package/dist/core/workspace.d.ts +0 -35
- package/dist/core/workspace.js +0 -206
- package/dist/guest/boot-env.d.ts +0 -4
- package/dist/guest/daemon.js +0 -57
- package/dist/guest/env.d.ts +0 -56
- package/dist/guest/env.js +0 -115
- package/dist/guest/gitrules.js +0 -11
- package/dist/guest/project-status.d.ts +0 -5
- package/dist/guest/project-status.js +0 -17
- package/dist/guest/setup/user.js +0 -51
- package/dist/guest/toolchains/cli.d.ts +0 -10
- package/dist/guest/toolchains/common.d.ts +0 -54
- package/dist/guest/toolchains/common.js +0 -147
- package/dist/guest/toolchains/databases/dynamodb.d.ts +0 -8
- package/dist/guest/toolchains/databases/dynamodb.js +0 -52
- package/dist/guest/toolchains/databases/index.d.ts +0 -6
- package/dist/guest/toolchains/databases/index.js +0 -62
- package/dist/guest/toolchains/databases/mongodb.d.ts +0 -3
- package/dist/guest/toolchains/databases/mongodb.js +0 -31
- package/dist/guest/toolchains/databases/mysql.d.ts +0 -3
- package/dist/guest/toolchains/databases/mysql.js +0 -38
- package/dist/guest/toolchains/databases/postgres.d.ts +0 -5
- package/dist/guest/toolchains/databases/postgres.js +0 -38
- package/dist/guest/toolchains/databases/redis.d.ts +0 -3
- package/dist/guest/toolchains/databases/redis.js +0 -16
- package/dist/guest/toolchains/git.d.ts +0 -3
- package/dist/guest/toolchains/go.d.ts +0 -3
- package/dist/guest/toolchains/java.d.ts +0 -8
- package/dist/guest/toolchains/node.d.ts +0 -3
- package/dist/guest/toolchains/pwsh.d.ts +0 -4
- package/dist/guest/toolchains/python.d.ts +0 -3
- package/dist/guest/toolchains/scripting/php.d.ts +0 -3
- package/dist/guest/toolchains/scripting/ruby.d.ts +0 -3
- package/dist/host/accounts.d.ts +0 -32
- package/dist/host/accounts.js +0 -128
- package/dist/host/agent-commands.d.ts +0 -25
- package/dist/host/agent-commands.js +0 -145
- package/dist/host/channel.d.ts +0 -38
- package/dist/host/channel.js +0 -163
- package/dist/host/generate.d.ts +0 -13
- package/dist/host/generate.js +0 -115
- package/dist/host/launch/projects.d.ts +0 -17
- package/dist/host/launch/wsb.js +0 -34
- package/dist/host/motw.d.ts +0 -17
- package/dist/host/motw.js +0 -74
- package/dist/host/pc-scan.d.ts +0 -6
- package/dist/host/personalize.d.ts +0 -10
- package/dist/host/personalize.js +0 -97
- package/dist/host/platform.js +0 -129
- package/dist/host/project-scan.d.ts +0 -7
- package/dist/host/projects.d.ts +0 -123
- package/dist/host/projects.js +0 -196
- package/dist/host/repo-guard.d.ts +0 -43
- package/dist/host/repo-guard.js +0 -347
- package/dist/host/secrets.d.ts +0 -14
- package/dist/host/secrets.js +0 -133
- package/dist/host/stops.d.ts +0 -67
- package/dist/host/stops.js +0 -126
- package/dist/shared/apps.js +0 -114
- package/dist/shared/download.d.ts +0 -63
- package/dist/shared/download.js +0 -238
- package/dist/shared/pty-client.d.ts +0 -108
- package/dist/shared/pty-client.js +0 -406
- package/dist/shared/rundir.d.ts +0 -41
- package/dist/shared/rundir.js +0 -96
- /package/dist/{guest/daemon.d.ts → cli/tui/list/list-types.js} +0 -0
- /package/dist/{guest/db.d.ts → cli/tui/screen.js} +0 -0
- /package/dist/core/{detect-databases.d.ts → detect/databases.d.ts} +0 -0
- /package/dist/{guest/toolchains → core/detect}/versions.d.ts +0 -0
- /package/dist/guest/{setup/agents.d.ts → agents/agent-installer.d.ts} +0 -0
- /package/dist/guest/{audit-parse.d.ts → audit/parse.d.ts} +0 -0
- /package/dist/guest/{guide.d.ts → boot/guide.d.ts} +0 -0
- /package/dist/guest/daemon/{shutdown.d.ts → idle-shutdown.d.ts} +0 -0
- /package/dist/guest/daemon/{session.d.ts → sessions.d.ts} +0 -0
- /package/dist/guest/{main.d.ts → entries/daemon.d.ts} +0 -0
- /package/dist/guest/{netproxy.d.ts → entries/db.d.ts} +0 -0
- /package/dist/{selftest/suite.js → guest/entries/gitguard.d.ts} +0 -0
- /package/dist/guest/{gitguard.d.ts → git/decision.d.ts} +0 -0
- /package/dist/guest/{ports.d.ts → runtime/ports.d.ts} +0 -0
- /package/dist/guest/{project-context.d.ts → runtime/project-context.d.ts} +0 -0
- /package/dist/guest/{cmdline.d.ts → sessions/cmdline.d.ts} +0 -0
- /package/dist/guest/{ptyhost.d.ts → sessions/pty-host.d.ts} +0 -0
- /package/dist/guest/{view.d.ts → sessions/viewer.d.ts} +0 -0
- /package/dist/guest/setup/{policy.d.ts → managed-policy.d.ts} +0 -0
- /package/dist/host/{window.d.ts → sandbox/window.d.ts} +0 -0
- /package/dist/host/{wsb.d.ts → sandbox/wsb-cli.d.ts} +0 -0
- /package/dist/host/{cleanup.d.ts → storage/cleanup.d.ts} +0 -0
- /package/dist/selftest/{harness.d.ts → support/harness.d.ts} +0 -0
- /package/dist/selftest/{suite.d.ts → support/suite.d.ts} +0 -0
- /package/dist/shared/{safe-remove.d.ts → io/safe-remove.d.ts} +0 -0
- /package/dist/shared/{netrules.d.ts → network/firewall-rules.d.ts} +0 -0
- /package/dist/shared/{netpolicy.d.ts → network/policy.d.ts} +0 -0
- /package/dist/shared/{paths.d.ts → paths/claude-paths.d.ts} +0 -0
- /package/dist/shared/{projects.d.ts → paths/projects.d.ts} +0 -0
- /package/dist/shared/{console-input.d.ts → pty/console-input.d.ts} +0 -0
package/dist/guest/apps/index.js
CHANGED
|
@@ -1,206 +1,6 @@
|
|
|
1
|
-
// Installs the apps you chose (apps.install from the catalogue, apps.custom of your own) into C:\AgentData\tools\apps
|
|
2
|
-
//
|
|
3
|
-
//
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
import os from 'node:os';
|
|
8
|
-
import path from 'node:path';
|
|
9
|
-
import { appsToInstall, exeMatcher } from '../../shared/apps.js';
|
|
10
|
-
import { download, extractArchive, githubAsset, moveIntoPlace, stagingFolder } from '../../shared/download.js';
|
|
11
|
-
import { safeRemove } from '../../shared/safe-remove.js';
|
|
12
|
-
import { SYSTEM } from '../../shared/system.js';
|
|
13
|
-
import { dryRun, errMsg, execAsync, exists, log, mkdirp, powershell, warn } from '../env.js';
|
|
14
|
-
import { arch, tool } from '../toolchains/common.js';
|
|
15
|
-
import { RESOLVERS } from './resolvers.js';
|
|
16
|
-
export { appsNeedMesa } from '../../shared/apps.js';
|
|
17
|
-
const MARKER = '.agent-sandbox-app';
|
|
18
|
-
/** How many apps download and unpack at once (they are big: a few at a time keeps the disk and network busy). */
|
|
19
|
-
const PARALLEL = 3;
|
|
20
|
-
const sevenZip = () => tool('apps', '7zip', '7z.exe');
|
|
21
|
-
/** Where to download an entry from. */
|
|
22
|
-
const resolve = async (entry) => {
|
|
23
|
-
const s = entry.source;
|
|
24
|
-
if ('github' in s) {
|
|
25
|
-
const a = await githubAsset(s.github, new RegExp(s.asset), true);
|
|
26
|
-
return { url: a.url, fileName: a.name, sha256: a.sha256 };
|
|
27
|
-
}
|
|
28
|
-
if ('url' in s) {
|
|
29
|
-
const name = decodeURIComponent(new URL(s.url).pathname.split('/').pop() || entry.id);
|
|
30
|
-
return { url: s.url, fileName: /\.\w{2,5}$/.test(name) ? name : name + '.zip' };
|
|
31
|
-
}
|
|
32
|
-
if ('resolve' in s && RESOLVERS[s.resolve])
|
|
33
|
-
return RESOLVERS[s.resolve]();
|
|
34
|
-
throw new Error('no download source for ' + entry.name);
|
|
35
|
-
};
|
|
36
|
-
/** The program in an installed folder (breadth first, bounded: big apps have tens of thousands of files). */
|
|
37
|
-
export const findExe = (root, exe) => {
|
|
38
|
-
const match = exeMatcher(exe);
|
|
39
|
-
let queue = [root];
|
|
40
|
-
let seen = 0;
|
|
41
|
-
for (let depth = 0; depth < 7 && queue.length; depth++) {
|
|
42
|
-
const next = [];
|
|
43
|
-
for (const dir of queue) {
|
|
44
|
-
let entries;
|
|
45
|
-
try {
|
|
46
|
-
entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
47
|
-
}
|
|
48
|
-
catch {
|
|
49
|
-
continue;
|
|
50
|
-
}
|
|
51
|
-
const hit = entries.find((e) => e.isFile() && match(e.name));
|
|
52
|
-
if (hit)
|
|
53
|
-
return path.join(dir, hit.name);
|
|
54
|
-
next.push(...entries.filter((e) => e.isDirectory() && !e.isSymbolicLink()).map((e) => path.join(dir, e.name)));
|
|
55
|
-
if ((seen += entries.length) > 50000)
|
|
56
|
-
return null;
|
|
57
|
-
}
|
|
58
|
-
queue = next;
|
|
59
|
-
}
|
|
60
|
-
return null;
|
|
61
|
-
};
|
|
62
|
-
/** Downloads and unpacks one entry into its folder (replaced in one step: never half there). */
|
|
63
|
-
const installApp = async (entry, dest) => {
|
|
64
|
-
const work = stagingFolder(dest);
|
|
65
|
-
const out = path.join(work, 'out');
|
|
66
|
-
try {
|
|
67
|
-
if ('npm' in entry.source) {
|
|
68
|
-
const npmCli = path.join(path.dirname(process.execPath), 'node_modules', 'npm', 'bin', 'npm-cli.js');
|
|
69
|
-
log('Installing ' + entry.name + ' (npm) ...');
|
|
70
|
-
await execAsync(process.execPath, [npmCli, 'install', '--prefix', mkdirp(out), '--no-audit', '--no-fund', '--loglevel=error', entry.source.npm]);
|
|
71
|
-
}
|
|
72
|
-
else {
|
|
73
|
-
const d = await resolve(entry);
|
|
74
|
-
log('Downloading ' + entry.name + ' (' + d.fileName + ', ~' + entry.size + ' once) ...');
|
|
75
|
-
const file = path.join(mkdirp(work), d.fileName.replace(/[\\/:*?"<>|]/g, '_'));
|
|
76
|
-
await download(d.url, file, { sha256: d.sha256 ?? null });
|
|
77
|
-
await unpack(entry, file, out, d);
|
|
78
|
-
}
|
|
79
|
-
fs.writeFileSync(path.join(out, MARKER), JSON.stringify({ id: entry.id, at: new Date().toISOString() }));
|
|
80
|
-
moveIntoPlace(out, dest);
|
|
81
|
-
}
|
|
82
|
-
finally {
|
|
83
|
-
safeRemove(work, path.dirname(work));
|
|
84
|
-
}
|
|
85
|
-
};
|
|
86
|
-
const unpack = async (entry, file, out, d) => {
|
|
87
|
-
if (entry.id === '7zip') {
|
|
88
|
-
// 7zr.exe (the small standalone 7-Zip) opens the full 7-Zip's installer.
|
|
89
|
-
const sevenZr = path.join(path.dirname(file), '7zr.exe');
|
|
90
|
-
const zr = await githubAsset('ip7z/7zip', /^7zr\.exe$/);
|
|
91
|
-
await download(zr.url, sevenZr, zr.sha256);
|
|
92
|
-
await execAsync(sevenZr, ['x', '-y', '-o' + out, file], { stdio: 'ignore' });
|
|
93
|
-
return;
|
|
94
|
-
}
|
|
95
|
-
switch (entry.unpack ?? 'archive') {
|
|
96
|
-
case 'file': {
|
|
97
|
-
mkdirp(out);
|
|
98
|
-
fs.renameSync(file, path.join(out, /^\//.test(entry.exe) ? path.basename(file) : entry.exe));
|
|
99
|
-
return;
|
|
100
|
-
}
|
|
101
|
-
case 'nsis': {
|
|
102
|
-
if (!exists(sevenZip()))
|
|
103
|
-
throw new Error('7-Zip is needed to unpack ' + entry.name + ' and could not be installed');
|
|
104
|
-
const raw = path.join(path.dirname(out), 'raw');
|
|
105
|
-
await execAsync(sevenZip(), ['x', '-y', '-o' + raw, file], { stdio: 'ignore' });
|
|
106
|
-
// electron-builder installers carry the app as one more archive inside.
|
|
107
|
-
const inner = findExe(raw, '/^app-64\\.7z$/');
|
|
108
|
-
if (inner)
|
|
109
|
-
await execAsync(sevenZip(), ['x', '-y', '-o' + out, inner], { stdio: 'ignore' });
|
|
110
|
-
else
|
|
111
|
-
fs.renameSync(raw, out);
|
|
112
|
-
return;
|
|
113
|
-
}
|
|
114
|
-
case 'msi': {
|
|
115
|
-
// An administrative install only extracts the files: nothing is registered with Windows.
|
|
116
|
-
mkdirp(out);
|
|
117
|
-
await execAsync(SYSTEM.msiexec(), ['/a', file, '/qn', 'TARGETDIR=' + out], { stdio: 'ignore' });
|
|
118
|
-
return;
|
|
119
|
-
}
|
|
120
|
-
default:
|
|
121
|
-
await extractArchive(file, out, d.members);
|
|
122
|
-
}
|
|
123
|
-
};
|
|
124
|
-
/** Settings an app needs on every boot (the sandbox's registry is new each time), and files next to its program. */
|
|
125
|
-
const afterInstall = async (entry, exe) => {
|
|
126
|
-
const dir = path.dirname(exe);
|
|
127
|
-
if (entry.needs?.includes('mesa')) {
|
|
128
|
-
const mesa = tool('mesa', arch === 'arm64' ? 'arm64' : 'x64');
|
|
129
|
-
for (const dll of ['opengl32.dll', 'libgallium_wgl.dll', 'dxil.dll']) {
|
|
130
|
-
if (exists(path.join(mesa, dll)) && !exists(path.join(dir, dll)))
|
|
131
|
-
fs.copyFileSync(path.join(mesa, dll), path.join(dir, dll));
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
// Godot and Sublime keep their settings next to the program instead of in the profile, which is wiped on close.
|
|
135
|
-
if (entry.id === 'godot' && !exists(path.join(dir, '._sc_')))
|
|
136
|
-
fs.writeFileSync(path.join(dir, '._sc_'), '');
|
|
137
|
-
if (entry.id === 'sublime')
|
|
138
|
-
mkdirp(path.join(dir, 'Data'));
|
|
139
|
-
if (entry.id === 'sysinternals') {
|
|
140
|
-
for (const name of ['Process Explorer', 'Process Monitor', 'Autoruns', 'TCPView', 'PsExec', 'PsList', 'PsKill', 'Handle', 'ListDLLs', 'Sigcheck', 'Strings', 'VMMap', 'RAMMap', 'DebugView', 'Disk2vhd', 'Du', 'ZoomIt']) {
|
|
141
|
-
await execAsync(SYSTEM.reg(), ['add', 'HKCU\\Software\\Sysinternals\\' + name, '/v', 'EulaAccepted', '/t', 'REG_DWORD', '/d', '1', '/f'], { stdio: 'ignore' }).catch(() => undefined);
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
};
|
|
145
|
-
/** Desktop and Start menu shortcuts, all in one PowerShell call. */
|
|
146
|
-
const shortcuts = (apps) => {
|
|
147
|
-
if (!apps.length)
|
|
148
|
-
return;
|
|
149
|
-
const q = (s) => "'" + s.replace(/'/g, "''") + "'";
|
|
150
|
-
const desktop = path.join(os.homedir(), 'Desktop');
|
|
151
|
-
const start = path.join(process.env.APPDATA ?? path.join(os.homedir(), 'AppData', 'Roaming'), 'Microsoft', 'Windows', 'Start Menu', 'Programs', 'Sandbox apps');
|
|
152
|
-
const lines = ['$w = New-Object -ComObject WScript.Shell', 'New-Item -ItemType Directory -Force -Path ' + q(start) + ' | Out-Null'];
|
|
153
|
-
for (const app of apps) {
|
|
154
|
-
for (const folder of [desktop, start]) {
|
|
155
|
-
const name = app.name.replace(/[\\/:*?"<>|]/g, '');
|
|
156
|
-
lines.push('$s = $w.CreateShortcut(' + q(path.join(folder, name + '.lnk')) + '); $s.TargetPath = ' + q(app.exe) + '; $s.WorkingDirectory = ' + q(path.dirname(app.exe)) + '; $s.Save()');
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
powershell(lines.join('\n'));
|
|
160
|
-
};
|
|
161
|
-
export const setupApps = async (env, apps, o) => {
|
|
162
|
-
const { entries, skipped } = appsToInstall(apps, o.gitAccess);
|
|
163
|
-
for (const s of skipped)
|
|
164
|
-
env.summary.push('app skipped: ' + s);
|
|
165
|
-
if (dryRun) {
|
|
166
|
-
log('(dry run) would install apps: ' + entries.map((e) => e.name).join(', '));
|
|
167
|
-
return;
|
|
168
|
-
}
|
|
169
|
-
const gui = [];
|
|
170
|
-
const installed = [];
|
|
171
|
-
const one = async (entry) => {
|
|
172
|
-
try {
|
|
173
|
-
const dest = tool('apps', ...entry.id.split('/'));
|
|
174
|
-
if (!exists(path.join(dest, MARKER)) || o.refresh)
|
|
175
|
-
await installApp(entry, dest);
|
|
176
|
-
const exe = findExe(dest, entry.exe);
|
|
177
|
-
if (!exe)
|
|
178
|
-
throw new Error(entry.exe + ' not found in the download');
|
|
179
|
-
await afterInstall(entry, exe);
|
|
180
|
-
if (entry.cli || entry.id === 'sysinternals')
|
|
181
|
-
env.prepend.push(path.dirname(exe));
|
|
182
|
-
if (!entry.cli)
|
|
183
|
-
gui.push({ name: entry.name, exe });
|
|
184
|
-
installed.push(entry.name);
|
|
185
|
-
}
|
|
186
|
-
catch (e) {
|
|
187
|
-
warn(entry.name + ' could not be installed and is skipped; the other apps are not affected. Reason: ' + errMsg(e));
|
|
188
|
-
env.summary.push(entry.name + ': FAILED');
|
|
189
|
-
}
|
|
190
|
-
};
|
|
191
|
-
// 7-Zip first: the NSIS apps need it to unpack.
|
|
192
|
-
const [first, rest] = entries[0]?.id === '7zip' ? [[entries[0]], entries.slice(1)] : [[], entries];
|
|
193
|
-
for (const e of first)
|
|
194
|
-
await one(e);
|
|
195
|
-
const queue = [...rest];
|
|
196
|
-
await Promise.all(Array.from({ length: Math.min(PARALLEL, queue.length) }, async () => { for (let e = queue.shift(); e; e = queue.shift())
|
|
197
|
-
await one(e); }));
|
|
198
|
-
try {
|
|
199
|
-
shortcuts(gui);
|
|
200
|
-
}
|
|
201
|
-
catch (e) {
|
|
202
|
-
warn('App shortcuts could not be created: ' + errMsg(e));
|
|
203
|
-
}
|
|
204
|
-
if (installed.length)
|
|
205
|
-
env.summary.push('apps: ' + installed.join(', ') + ' (shortcuts on the desktop and in Start > Sandbox apps)');
|
|
206
|
-
};
|
|
1
|
+
// Installs the apps you chose (apps.install from the catalogue, apps.custom of your own) into C:\AgentData\tools\apps.
|
|
2
|
+
// Installers are never run: archives are unpacked, NSIS installers opened with 7-Zip and MSIs extracted (msiexec /a),
|
|
3
|
+
// so nothing is registered and nothing is lost when the sandbox closes.
|
|
4
|
+
export { appsNeedMesa } from '../../shared/apps/index.js';
|
|
5
|
+
export { setupApps } from './app-installer.js';
|
|
6
|
+
export { findExe } from './find-exe.js';
|
|
@@ -1,22 +1,33 @@
|
|
|
1
1
|
// Where the latest version of an app is, for apps that are not a plain GitHub release: each looks it up on the
|
|
2
2
|
// vendor's own site (and its published checksum, where there is one). Named by AppSource.resolve in shared/apps.ts.
|
|
3
|
-
import { fetchJson, fetchText, githubAsset, latestGithubTag } from '../../shared/download.js';
|
|
3
|
+
import { fetchJson, fetchText, githubAsset, latestGithubTag } from '../../shared/download/index.js';
|
|
4
4
|
/** The SHA-256 on the line of a SHA256SUMS-style file that names `file`. */
|
|
5
|
-
const sumFor = (sums, file) => sums
|
|
5
|
+
const sumFor = (sums, file) => sums
|
|
6
|
+
.split(/\r?\n/)
|
|
7
|
+
.map((l) => /^([0-9a-f]{64})\s+\*?(.+)$/i.exec(l.trim()))
|
|
8
|
+
.find((m) => m && m[2].trim().endsWith(file))?.[1]
|
|
9
|
+
.toLowerCase() ?? null;
|
|
6
10
|
const firstHash = (text) => /\b([0-9a-f]{64})\b/i.exec(text)?.[1].toLowerCase() ?? null;
|
|
7
11
|
const stripV = (tag) => tag.replace(/^v/, '');
|
|
8
12
|
export const RESOLVERS = {
|
|
9
13
|
sublime: async () => {
|
|
10
14
|
// Sublime publishes no checksums; the download is HTTPS from sublimetext.com.
|
|
11
15
|
const { latest_version: build } = await fetchJson('https://www.sublimetext.com/updates/4/stable_update_check');
|
|
12
|
-
return {
|
|
16
|
+
return {
|
|
17
|
+
url: 'https://download.sublimetext.com/sublime_text_build_' + build + '_x64.zip',
|
|
18
|
+
fileName: 'sublime_text_' + build + '.zip',
|
|
19
|
+
};
|
|
13
20
|
},
|
|
14
21
|
pgadmin: async () => {
|
|
15
22
|
// pgAdmin is only an installer on pgadmin.org; EnterpriseDB's PostgreSQL binaries zip has a portable copy.
|
|
16
23
|
const versions = (await fetchJson('https://www.postgresql.org/versions.json')).filter((v) => v.supported);
|
|
17
24
|
const current = versions.find((v) => v.current) ?? versions[versions.length - 1];
|
|
18
25
|
const exact = current.major + '.' + current.latestMinor;
|
|
19
|
-
return {
|
|
26
|
+
return {
|
|
27
|
+
url: 'https://get.enterprisedb.com/postgresql/postgresql-' + exact + '-1-windows-x64-binaries.zip',
|
|
28
|
+
fileName: 'postgresql-' + exact + '.zip',
|
|
29
|
+
members: ['pgsql/pgAdmin 4'],
|
|
30
|
+
};
|
|
20
31
|
},
|
|
21
32
|
everything: async () => {
|
|
22
33
|
const page = await fetchText('https://www.voidtools.com/downloads/');
|
|
@@ -38,16 +49,26 @@ export const RESOLVERS = {
|
|
|
38
49
|
const { LATEST_FIREFOX_VERSION: v } = await fetchJson('https://product-details.mozilla.org/1.0/firefox_versions.json');
|
|
39
50
|
const base = 'https://archive.mozilla.org/pub/firefox/releases/' + v + '/';
|
|
40
51
|
const sums = await fetchText(base + 'SHA256SUMS');
|
|
41
|
-
return {
|
|
52
|
+
return {
|
|
53
|
+
url: base + 'win64/en-US/Firefox%20Setup%20' + v + '.exe',
|
|
54
|
+
fileName: 'firefox-setup-' + v + '.exe',
|
|
55
|
+
sha256: sumFor(sums, 'win64/en-US/Firefox Setup ' + v + '.exe'),
|
|
56
|
+
};
|
|
42
57
|
},
|
|
43
58
|
blender: async () => {
|
|
44
59
|
const releases = await fetchText('https://download.blender.org/release/');
|
|
45
|
-
const series = [...releases.matchAll(/href="Blender(\d+)\.(\d+)\/"/g)]
|
|
60
|
+
const series = [...releases.matchAll(/href="Blender(\d+)\.(\d+)\/"/g)]
|
|
61
|
+
.map((m) => [Number(m[1]), Number(m[2])])
|
|
62
|
+
.sort((a, b) => a[0] - b[0] || a[1] - b[1])
|
|
63
|
+
.pop();
|
|
46
64
|
if (!series)
|
|
47
65
|
throw new Error('could not list Blender releases');
|
|
48
66
|
const folder = 'https://download.blender.org/release/Blender' + series[0] + '.' + series[1] + '/';
|
|
49
67
|
const listing = await fetchText(folder);
|
|
50
|
-
const files = [...listing.matchAll(/href="(blender-([\d.]+)-windows-x64\.zip)"/g)].map((m) => ({
|
|
68
|
+
const files = [...listing.matchAll(/href="(blender-([\d.]+)-windows-x64\.zip)"/g)].map((m) => ({
|
|
69
|
+
file: m[1],
|
|
70
|
+
v: m[2].split('.').map(Number),
|
|
71
|
+
}));
|
|
51
72
|
const latest = files.sort((a, b) => a.v[2] - b.v[2]).pop();
|
|
52
73
|
if (!latest)
|
|
53
74
|
throw new Error('no Windows build in ' + folder);
|
|
@@ -68,12 +89,19 @@ export const RESOLVERS = {
|
|
|
68
89
|
const { current_version: v } = await fetchJson('https://checkpoint-api.hashicorp.com/v1/check/terraform');
|
|
69
90
|
const base = 'https://releases.hashicorp.com/terraform/' + v + '/';
|
|
70
91
|
const file = 'terraform_' + v + '_windows_amd64.zip';
|
|
71
|
-
return {
|
|
92
|
+
return {
|
|
93
|
+
url: base + file,
|
|
94
|
+
fileName: file,
|
|
95
|
+
sha256: sumFor(await fetchText(base + 'terraform_' + v + '_SHA256SUMS'), file),
|
|
96
|
+
};
|
|
72
97
|
},
|
|
73
98
|
mitmproxy: async () => {
|
|
74
99
|
// mitmproxy's GitHub releases have no files; its own download server has them (no published checksums).
|
|
75
100
|
const v = stripV(await latestGithubTag('mitmproxy/mitmproxy'));
|
|
76
|
-
return {
|
|
101
|
+
return {
|
|
102
|
+
url: 'https://downloads.mitmproxy.org/' + v + '/mitmproxy-' + v + '-windows-x86_64.zip',
|
|
103
|
+
fileName: 'mitmproxy-' + v + '.zip',
|
|
104
|
+
};
|
|
77
105
|
},
|
|
78
106
|
sqlite: async () => {
|
|
79
107
|
// The download page lists every file in a CSV comment: PRODUCT,<version>,<year>/<file>,<size>,<sha3>.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import os from 'node:os';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { powershell } from '../runtime/process.js';
|
|
4
|
+
/** Desktop and Start menu shortcuts, all in one PowerShell call. */
|
|
5
|
+
export function shortcuts(apps) {
|
|
6
|
+
if (!apps.length)
|
|
7
|
+
return;
|
|
8
|
+
const q = (s) => "'" + s.replace(/'/g, "''") + "'";
|
|
9
|
+
const desktop = path.join(os.homedir(), 'Desktop');
|
|
10
|
+
const start = path.join(process.env.APPDATA ?? path.join(os.homedir(), 'AppData', 'Roaming'), 'Microsoft', 'Windows', 'Start Menu', 'Programs', 'Sandbox apps');
|
|
11
|
+
const lines = [
|
|
12
|
+
'$w = New-Object -ComObject WScript.Shell',
|
|
13
|
+
'New-Item -ItemType Directory -Force -Path ' + q(start) + ' | Out-Null',
|
|
14
|
+
];
|
|
15
|
+
for (const app of apps) {
|
|
16
|
+
for (const folder of [desktop, start]) {
|
|
17
|
+
const name = app.name.replace(/[\\/:*?"<>|]/g, '');
|
|
18
|
+
lines.push('$s = $w.CreateShortcut(' +
|
|
19
|
+
q(path.join(folder, name + '.lnk')) +
|
|
20
|
+
'); $s.TargetPath = ' +
|
|
21
|
+
q(app.exe) +
|
|
22
|
+
'; $s.WorkingDirectory = ' +
|
|
23
|
+
q(path.dirname(app.exe)) +
|
|
24
|
+
'; $s.Save()');
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
powershell(lines.join('\n'));
|
|
28
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { githubAsset } from '../../shared/download/index.js';
|
|
2
|
+
import { RESOLVERS } from './resolvers.js';
|
|
3
|
+
/** Where to download an entry from. */
|
|
4
|
+
export async function resolve(entry) {
|
|
5
|
+
const s = entry.source;
|
|
6
|
+
if ('github' in s) {
|
|
7
|
+
const a = await githubAsset(s.github, new RegExp(s.asset), true);
|
|
8
|
+
return { url: a.url, fileName: a.name, sha256: a.sha256 };
|
|
9
|
+
}
|
|
10
|
+
if ('url' in s) {
|
|
11
|
+
const name = decodeURIComponent(new URL(s.url).pathname.split('/').pop() || entry.id);
|
|
12
|
+
return { url: s.url, fileName: /\.\w{2,5}$/.test(name) ? name : name + '.zip' };
|
|
13
|
+
}
|
|
14
|
+
if ('resolve' in s && RESOLVERS[s.resolve])
|
|
15
|
+
return RESOLVERS[s.resolve]();
|
|
16
|
+
throw new Error('no download source for ' + entry.name);
|
|
17
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { downloader, extractArchive, githubAsset } from '../../shared/download/index.js';
|
|
4
|
+
import { SYSTEM } from '../../shared/system.js';
|
|
5
|
+
import { execAsync } from '../runtime/process.js';
|
|
6
|
+
import { exists, mkdirp } from '../runtime/fs.js';
|
|
7
|
+
import { tool } from '../toolchains/tool-env.js';
|
|
8
|
+
import { findExe } from './find-exe.js';
|
|
9
|
+
const sevenZip = () => tool('apps', '7zip', '7z.exe');
|
|
10
|
+
export async function unpack(entry, file, out, d) {
|
|
11
|
+
if (entry.id === '7zip') {
|
|
12
|
+
// 7zr.exe (the small standalone 7-Zip) opens the full 7-Zip's installer.
|
|
13
|
+
const sevenZr = path.join(path.dirname(file), '7zr.exe');
|
|
14
|
+
const zr = await githubAsset('ip7z/7zip', /^7zr\.exe$/);
|
|
15
|
+
await downloader.file(zr.url, sevenZr, zr.sha256);
|
|
16
|
+
await execAsync(sevenZr, ['x', '-y', '-o' + out, file], { stdio: 'ignore' });
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
switch (entry.unpack ?? 'archive') {
|
|
20
|
+
case 'file': {
|
|
21
|
+
mkdirp(out);
|
|
22
|
+
fs.renameSync(file, path.join(out, /^\//.test(entry.exe) ? path.basename(file) : entry.exe));
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
case 'nsis': {
|
|
26
|
+
if (!exists(sevenZip()))
|
|
27
|
+
throw new Error('7-Zip is needed to unpack ' + entry.name + ' and could not be installed');
|
|
28
|
+
const raw = path.join(path.dirname(out), 'raw');
|
|
29
|
+
await execAsync(sevenZip(), ['x', '-y', '-o' + raw, file], { stdio: 'ignore' });
|
|
30
|
+
// electron-builder installers carry the app as one more archive inside.
|
|
31
|
+
const inner = findExe(raw, '/^app-64\\.7z$/');
|
|
32
|
+
if (inner)
|
|
33
|
+
await execAsync(sevenZip(), ['x', '-y', '-o' + out, inner], { stdio: 'ignore' });
|
|
34
|
+
else
|
|
35
|
+
fs.renameSync(raw, out);
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
case 'msi': {
|
|
39
|
+
// An administrative install only extracts the files: nothing is registered with Windows.
|
|
40
|
+
mkdirp(out);
|
|
41
|
+
await execAsync(SYSTEM.msiexec(), ['/a', file, '/qn', 'TARGETDIR=' + out], { stdio: 'ignore' });
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
default:
|
|
45
|
+
await extractArchive(file, out, d.members);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
@@ -2,8 +2,38 @@
|
|
|
2
2
|
// the self-test can check it on the PC side.
|
|
3
3
|
import path from 'node:path';
|
|
4
4
|
/** Background programs of Windows itself: never what an agent ran. */
|
|
5
|
-
export const NOISE = new Set([
|
|
6
|
-
|
|
5
|
+
export const NOISE = new Set([
|
|
6
|
+
'conhost.exe',
|
|
7
|
+
'svchost.exe',
|
|
8
|
+
'backgroundtaskhost.exe',
|
|
9
|
+
'runtimebroker.exe',
|
|
10
|
+
'wmiprvse.exe',
|
|
11
|
+
'dllhost.exe',
|
|
12
|
+
'searchprotocolhost.exe',
|
|
13
|
+
'searchfilterhost.exe',
|
|
14
|
+
'taskhostw.exe',
|
|
15
|
+
'sppsvc.exe',
|
|
16
|
+
'wermgr.exe',
|
|
17
|
+
'consent.exe',
|
|
18
|
+
'smartscreen.exe',
|
|
19
|
+
'mpcmdrun.exe',
|
|
20
|
+
'compattelrunner.exe',
|
|
21
|
+
'wevtutil.exe',
|
|
22
|
+
'audiodg.exe',
|
|
23
|
+
'ctfmon.exe',
|
|
24
|
+
'sihost.exe',
|
|
25
|
+
'werfault.exe',
|
|
26
|
+
'msmpeng.exe',
|
|
27
|
+
'nissrv.exe',
|
|
28
|
+
'usoclient.exe',
|
|
29
|
+
'musnotification.exe',
|
|
30
|
+
]);
|
|
31
|
+
const decode = (s) => s
|
|
32
|
+
.replace(/</g, '<')
|
|
33
|
+
.replace(/>/g, '>')
|
|
34
|
+
.replace(/"/g, '"')
|
|
35
|
+
.replace(/'/g, "'")
|
|
36
|
+
.replace(/&/g, '&');
|
|
7
37
|
const field = (event, name) => decode(new RegExp("<Data Name='" + name + "'>([^<]*)</Data>").exec(event)?.[1] ?? '');
|
|
8
38
|
/** The events in wevtutil's XML output as audit lines, with the newest record id seen. */
|
|
9
39
|
export const parseProcessEvents = (xml) => {
|
|
@@ -18,7 +48,13 @@ export const parseProcessEvents = (xml) => {
|
|
|
18
48
|
if (!program || NOISE.has(path.win32.basename(program).toLowerCase()))
|
|
19
49
|
continue;
|
|
20
50
|
const t = /SystemTime='([^']+)'/.exec(event)?.[1] ?? new Date().toISOString();
|
|
21
|
-
lines.push(JSON.stringify({
|
|
51
|
+
lines.push(JSON.stringify({
|
|
52
|
+
t,
|
|
53
|
+
k: 'proc',
|
|
54
|
+
p: program.slice(0, 1024),
|
|
55
|
+
c: field(event, 'CommandLine').slice(0, 2000),
|
|
56
|
+
pp: field(event, 'ParentProcessName').slice(0, 1024),
|
|
57
|
+
}));
|
|
22
58
|
}
|
|
23
59
|
return { lines, last };
|
|
24
60
|
};
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
/** Turns on process-creation auditing with command lines (the registry is new every boot). */
|
|
2
2
|
export declare const enableProcessAudit: () => void;
|
|
3
|
-
/**
|
|
3
|
+
/**
|
|
4
|
+
* Reads new process events every 15 s for the daemon's life (from the moment it started: older ones are boot noise).
|
|
5
|
+
*/
|
|
4
6
|
export declare const startProcessCollector: () => void;
|
|
@@ -5,9 +5,13 @@
|
|
|
5
5
|
import fs from 'node:fs';
|
|
6
6
|
import path from 'node:path';
|
|
7
7
|
import { spawnSync } from 'node:child_process';
|
|
8
|
-
import { SYSTEM } from '
|
|
9
|
-
import { parseProcessEvents } from './
|
|
10
|
-
import { dryRun,
|
|
8
|
+
import { SYSTEM } from '../../shared/system.js';
|
|
9
|
+
import { parseProcessEvents } from './parse.js';
|
|
10
|
+
import { dryRun, isWin, run } from '../runtime/paths.js';
|
|
11
|
+
import { log, warn } from '../runtime/log.js';
|
|
12
|
+
import { mkdirp } from '../runtime/fs.js';
|
|
13
|
+
import { session } from '../runtime/session.js';
|
|
14
|
+
import { errMsg } from '../../core/util/errors.js';
|
|
11
15
|
/** The "Process Creation" audit subcategory (a GUID, so it works in every Windows language). */
|
|
12
16
|
const PROCESS_CREATION = '{0CCE922B-69AE-11D9-BED3-505054503030}';
|
|
13
17
|
const MAX_PER_PASS = 2000;
|
|
@@ -17,27 +21,48 @@ export const enableProcessAudit = () => {
|
|
|
17
21
|
if (!auditOn())
|
|
18
22
|
return;
|
|
19
23
|
spawnSync(path.join(process.env.WINDIR ?? 'C:\\Windows', 'System32', 'auditpol.exe'), ['/set', '/subcategory:' + PROCESS_CREATION, '/success:enable'], { windowsHide: true, stdio: 'ignore' });
|
|
20
|
-
spawnSync(SYSTEM.reg(), [
|
|
24
|
+
spawnSync(SYSTEM.reg(), [
|
|
25
|
+
'add',
|
|
26
|
+
'HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System\\Audit',
|
|
27
|
+
'/v',
|
|
28
|
+
'ProcessCreationIncludeCmdLine_Enabled',
|
|
29
|
+
'/t',
|
|
30
|
+
'REG_DWORD',
|
|
31
|
+
'/d',
|
|
32
|
+
'1',
|
|
33
|
+
'/f',
|
|
34
|
+
], { windowsHide: true, stdio: 'ignore' });
|
|
21
35
|
log('Audit: programs started in the sandbox are recorded (audit.processes).');
|
|
22
36
|
};
|
|
23
37
|
const wevtutil = () => path.join(process.env.WINDIR ?? 'C:\\Windows', 'System32', 'wevtutil.exe');
|
|
24
38
|
const newestRecord = () => {
|
|
25
|
-
const r = spawnSync(wevtutil(), ['qe', 'Security', '/q:*[System[(EventID=4688)]]', '/f:xml', '/c:1', '/rd:true'], {
|
|
39
|
+
const r = spawnSync(wevtutil(), ['qe', 'Security', '/q:*[System[(EventID=4688)]]', '/f:xml', '/c:1', '/rd:true'], {
|
|
40
|
+
encoding: 'utf8',
|
|
41
|
+
windowsHide: true,
|
|
42
|
+
});
|
|
26
43
|
return parseProcessEvents(r.stdout ?? '').last;
|
|
27
44
|
};
|
|
28
|
-
/**
|
|
45
|
+
/**
|
|
46
|
+
* Reads new process events every 15 s for the daemon's life (from the moment it started: older ones are boot noise).
|
|
47
|
+
*/
|
|
29
48
|
export const startProcessCollector = () => {
|
|
30
49
|
if (!auditOn())
|
|
31
50
|
return;
|
|
32
51
|
let last = newestRecord();
|
|
33
52
|
const pass = () => {
|
|
34
53
|
try {
|
|
35
|
-
const r = spawnSync(wevtutil(), [
|
|
54
|
+
const r = spawnSync(wevtutil(), [
|
|
55
|
+
'qe',
|
|
56
|
+
'Security',
|
|
57
|
+
'/q:*[System[(EventID=4688) and (EventRecordID>' + last + ')]]',
|
|
58
|
+
'/f:xml',
|
|
59
|
+
'/c:' + MAX_PER_PASS,
|
|
60
|
+
], { encoding: 'utf8', windowsHide: true, maxBuffer: 64 * 1024 * 1024 });
|
|
36
61
|
const { lines, last: newest } = parseProcessEvents(r.stdout ?? '');
|
|
37
62
|
if (newest)
|
|
38
63
|
last = newest;
|
|
39
64
|
if (lines.length)
|
|
40
|
-
fs.writeFileSync(path.join(mkdirp(run.
|
|
65
|
+
fs.writeFileSync(path.join(mkdirp(run.auditDir), Date.now() + '-' + process.pid + '.jsonl'), lines.join('\n') + '\n');
|
|
41
66
|
}
|
|
42
67
|
catch (e) {
|
|
43
68
|
warn('audit: ' + errMsg(e));
|
|
@@ -4,20 +4,22 @@
|
|
|
4
4
|
// project's, so project A's Node, Rust target folder or database variables never leak into project B's sessions.
|
|
5
5
|
import fs from 'node:fs';
|
|
6
6
|
import path from 'node:path';
|
|
7
|
-
import { writeJsonAtomic } from '
|
|
8
|
-
import { localDir } from '
|
|
9
|
-
import {
|
|
7
|
+
import { writeJsonAtomic } from '../../shared/io/json.js';
|
|
8
|
+
import { localDir } from '../runtime/paths.js';
|
|
9
|
+
import { BootEnvSchema } from './project-env.js';
|
|
10
10
|
export { baseEnvFor } from './project-env.js';
|
|
11
11
|
const file = () => path.join(localDir, 'boot-env.json');
|
|
12
12
|
export const saveBootEnv = (value) => {
|
|
13
13
|
try {
|
|
14
14
|
writeJsonAtomic(file(), value);
|
|
15
15
|
}
|
|
16
|
-
catch {
|
|
16
|
+
catch {
|
|
17
|
+
/* projects added later then fall back to the boot environment */
|
|
18
|
+
}
|
|
17
19
|
};
|
|
18
20
|
export const readBootEnv = () => {
|
|
19
21
|
try {
|
|
20
|
-
return
|
|
22
|
+
return BootEnvSchema.safeParse(JSON.parse(fs.readFileSync(file(), 'utf8'))).data ?? null;
|
|
21
23
|
}
|
|
22
24
|
catch {
|
|
23
25
|
return null;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const runBoot: () => Promise<void>;
|