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/gitrules.js
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
const SHELLS = ['Bash', 'PowerShell'];
|
|
2
|
-
const WRITE_COMMANDS = ['commit', 'push', 'add', 'rm', 'mv', 'merge', 'rebase', 'reset', 'checkout', 'switch', 'restore', 'stash', 'tag', 'cherry-pick', 'revert', 'am', 'apply', 'clean', 'pull', 'fetch', 'clone', 'init', 'gc', 'prune', 'update-ref', 'update-index', 'filter-branch', 'replace', 'worktree add', 'branch -d', 'branch -D', 'branch -m', 'branch -M', 'config --add', 'config --unset', 'remote add', 'remote remove', 'remote set-url'];
|
|
3
|
-
const GIT_DIR_PATHS = ['**/.git', '**/.git/**'];
|
|
4
|
-
export const gitDenyRules = (access) => {
|
|
5
|
-
if (access === 'full')
|
|
6
|
-
return [];
|
|
7
|
-
const commands = access === 'none' ? ['git'] : WRITE_COMMANDS.map((c) => 'git ' + c);
|
|
8
|
-
const shellRules = SHELLS.flatMap((shell) => commands.map((c) => shell + '(' + c + ':*)'));
|
|
9
|
-
const fileRules = GIT_DIR_PATHS.flatMap((p) => (access === 'none' ? ['Read(' + p + ')', 'Edit(' + p + ')'] : ['Edit(' + p + ')']));
|
|
10
|
-
return [...shellRules, ...fileRules];
|
|
11
|
-
};
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import type { DatabasePlan } from '../core/types.js';
|
|
2
|
-
import type { ProjectStatusT } from '../shared/schema.js';
|
|
3
|
-
/** The launch folder's project id (older launch folders: derived from its name). */
|
|
4
|
-
export declare const primaryProject: () => string;
|
|
5
|
-
export declare const saveProjectStatus: (name: string, workspace: string, phase: ProjectStatusT["phase"], message: string, databases: DatabasePlan[], summary: string[]) => void;
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { now, writeJsonAtomic } from '../shared/rundir.js';
|
|
2
|
-
import { hubName } from '../shared/projects.js';
|
|
3
|
-
import { errMsg, run, session, warn } from './env.js';
|
|
4
|
-
/** The launch folder's project id (older launch folders: derived from its name). */
|
|
5
|
-
export const primaryProject = () => session.projectId ?? hubName(session.workspaceHost || session.project, []);
|
|
6
|
-
export const saveProjectStatus = (name, workspace, phase, message, databases, summary) => {
|
|
7
|
-
try {
|
|
8
|
-
writeJsonAtomic(run.project(name), {
|
|
9
|
-
name, workspace, phase, message: message.slice(0, 3500), updatedAt: now(),
|
|
10
|
-
databases: databases.filter((d) => d.database !== 'sqlserver').slice(0, 16).map((d) => ({ database: d.database, port: d.port })),
|
|
11
|
-
summary: summary.slice(0, 64).map((s) => s.slice(0, 500)),
|
|
12
|
-
});
|
|
13
|
-
}
|
|
14
|
-
catch (e) {
|
|
15
|
-
warn('Could not write the status of project ' + name + ': ' + errMsg(e));
|
|
16
|
-
}
|
|
17
|
-
};
|
package/dist/guest/setup/user.js
DELETED
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
// Making the sandbox feel like your PC: desktop look and Git identity.
|
|
2
|
-
import fs from 'node:fs';
|
|
3
|
-
import os from 'node:os';
|
|
4
|
-
import path from 'node:path';
|
|
5
|
-
import { spawnSync } from 'node:child_process';
|
|
6
|
-
import { SYSTEM } from '../../shared/system.js';
|
|
7
|
-
import { dryRun, exec, exists, isWin, launchDir, log, mkdirp, powershell, session, toolsDir } from '../env.js';
|
|
8
|
-
const psQuote = (s) => "'" + s.replace(/'/g, "''") + "'";
|
|
9
|
-
/** Imports the host's look (registry values + wallpaper) and restarts Explorer so it applies. */
|
|
10
|
-
export const applyPersonalization = () => {
|
|
11
|
-
const dir = path.join(launchDir, 'personalize');
|
|
12
|
-
if (!session.personalization || !exists(dir) || dryRun || !isWin)
|
|
13
|
-
return;
|
|
14
|
-
exec(SYSTEM.reg(), ['import', path.join(dir, 'personalize.reg')], { stdio: 'ignore' });
|
|
15
|
-
const wallpaper = fs.readdirSync(dir).find((f) => f.startsWith('wallpaper'));
|
|
16
|
-
const local = wallpaper ? path.join(mkdirp(path.join(os.homedir(), 'Pictures')), wallpaper) : null;
|
|
17
|
-
if (wallpaper && local)
|
|
18
|
-
fs.copyFileSync(path.join(dir, wallpaper), local);
|
|
19
|
-
powershell([
|
|
20
|
-
local ? "Set-ItemProperty -Path 'HKCU:\\Control Panel\\Desktop' -Name WallPaper -Value " + psQuote(local) : '',
|
|
21
|
-
"Add-Type -Namespace AgentSandbox -Name Desk -MemberDefinition '[System.Runtime.InteropServices.DllImport(\"user32.dll\", CharSet = System.Runtime.InteropServices.CharSet.Unicode)] public static extern int SystemParametersInfo(int a, int b, string c, int d);'",
|
|
22
|
-
local ? '[void][AgentSandbox.Desk]::SystemParametersInfo(20, 0, ' + psQuote(local) + ', 3)' : '',
|
|
23
|
-
// Explorer restarts by itself and picks up taskbar/theme changes.
|
|
24
|
-
'Stop-Process -Name explorer -Force -ErrorAction SilentlyContinue',
|
|
25
|
-
].filter(Boolean).join('\n'));
|
|
26
|
-
log('Desktop personalisation applied from this PC.');
|
|
27
|
-
};
|
|
28
|
-
/**
|
|
29
|
-
* Your Git identity from this PC (name/email only), plus safe.directory for the mapped workspace (its owner SID
|
|
30
|
-
* differs in the sandbox). Uses the real git.exe directly: the read-only guard would rightly refuse `config --add`.
|
|
31
|
-
*/
|
|
32
|
-
export const setupGitConfig = (env) => {
|
|
33
|
-
// A dry run (the self-test) must not touch the real ~/.gitconfig: it once replaced the sandbox's own, safe.directory
|
|
34
|
-
// included, so git refused the workspace until the next boot.
|
|
35
|
-
if (dryRun)
|
|
36
|
-
return;
|
|
37
|
-
const source = path.join(launchDir, 'home', '.gitconfig');
|
|
38
|
-
if (exists(source))
|
|
39
|
-
fs.copyFileSync(source, path.join(os.homedir(), '.gitconfig'));
|
|
40
|
-
const git = path.join(toolsDir, 'git', 'cmd', 'git.exe');
|
|
41
|
-
if (!exists(git))
|
|
42
|
-
return;
|
|
43
|
-
const { GIT_DIR: _gitDir, ...rest } = env;
|
|
44
|
-
spawnSync(git, ['config', '--global', '--add', 'safe.directory', '*'], { env: rest, windowsHide: true, stdio: 'ignore' });
|
|
45
|
-
// Windows long paths are on in the sandbox, but git skips files over 260 characters unless told.
|
|
46
|
-
spawnSync(git, ['config', '--global', 'core.longpaths', 'true'], { env: rest, windowsHide: true, stdio: 'ignore' });
|
|
47
|
-
// Git for Windows' system config says autocrlf=true: checkouts made in the sandbox (worktrees, clones) got CRLF and
|
|
48
|
-
// tools that want LF (rustfmt, shellcheck, prettier) failed on every file. "input" keeps the line endings the repo
|
|
49
|
-
// has, and a checkout from your PC (CRLF in the folder) still shows as unchanged.
|
|
50
|
-
spawnSync(git, ['config', '--global', 'core.autocrlf', 'input'], { env: rest, windowsHide: true, stdio: 'ignore' });
|
|
51
|
-
};
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import type { GitAccess } from '../../core/types.js';
|
|
2
|
-
import { type CliSettings } from './catalogue.js';
|
|
3
|
-
import { type ToolEnv } from './common.js';
|
|
4
|
-
/** gh keeps `gh auth login` here, under the agent state (persists like Claude's own login; never copied from the PC). */
|
|
5
|
-
export declare const ghConfigDir: () => string;
|
|
6
|
-
/**
|
|
7
|
-
* Installs the tools toolchains.cli asks for. Settings still "auto" here (normally the host decides) use the same
|
|
8
|
-
* rules on the workspace as the host would. The gh rule is enforced here again, whatever the host sent.
|
|
9
|
-
*/
|
|
10
|
-
export declare const setupCli: (env: ToolEnv, settings: CliSettings, gitAccess: GitAccess, refresh?: boolean) => Promise<void>;
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import { type ReleaseAsset } from '../../shared/download.js';
|
|
2
|
-
/** What the toolchains contribute to the agent's environment. */
|
|
3
|
-
export interface ToolEnv {
|
|
4
|
-
vars: Record<string, string>;
|
|
5
|
-
prepend: string[];
|
|
6
|
-
append: string[];
|
|
7
|
-
summary: string[];
|
|
8
|
-
}
|
|
9
|
-
export declare const emptyEnv: () => ToolEnv;
|
|
10
|
-
export declare const arch: string;
|
|
11
|
-
export declare const tool: (...parts: string[]) => string;
|
|
12
|
-
/** First x.y.z in a tool's `--version` output. */
|
|
13
|
-
export declare const versionOf: (exe: string, args?: string[], options?: {}) => string;
|
|
14
|
-
/**
|
|
15
|
-
* Resolves a version online and remembers it for a day (provisioning.refresh looks again), so most boots make no
|
|
16
|
-
* lookups and an offline boot reuses what was installed last time. After a network failure the remaining lookups go
|
|
17
|
-
* straight to the remembered versions instead of each waiting for the network; other errors (no such version) do not.
|
|
18
|
-
*/
|
|
19
|
-
export declare const resolveCached: (key: string, resolve: () => Promise<string>) => Promise<string>;
|
|
20
|
-
/** A single file download that lands as `file` only when complete (and checksum-verified): a cut-off one never looks finished. */
|
|
21
|
-
export declare const downloadFile: (url: string, file: string, sha256?: string | null) => Promise<void>;
|
|
22
|
-
interface GithubInstall {
|
|
23
|
-
/** The folder the archive is unpacked into (replaced atomically). */
|
|
24
|
-
dest: string;
|
|
25
|
-
/** What the progress line says is being downloaded, with its size; a function gets the release asset. */
|
|
26
|
-
what: string | ((asset: ReleaseAsset) => string);
|
|
27
|
-
/** Look past the latest release for a matching asset. */
|
|
28
|
-
searchOlder?: boolean;
|
|
29
|
-
/** installArchive's `locate` / `up`: keep only the folder holding this file. */
|
|
30
|
-
locate?: string;
|
|
31
|
-
up?: number;
|
|
32
|
-
}
|
|
33
|
-
/** The newest GitHub release asset matching `pattern`, checksum-verified, unpacked into `dest`. */
|
|
34
|
-
export declare const installFromGithub: (repo: string, pattern: RegExp, o: GithubInstall) => Promise<void>;
|
|
35
|
-
/** Runs one installer; a failure is reported and skipped so it never blocks the other toolchains. */
|
|
36
|
-
export declare const step: (name: string, env: ToolEnv, work: () => Promise<void>) => Promise<void>;
|
|
37
|
-
/** File names in the project's folder and its direct sub-folders ("api/go.mod"); read once per project. */
|
|
38
|
-
export declare const workspaceEntries: () => string[];
|
|
39
|
-
/**
|
|
40
|
-
* true / false as configured. The host already turns "auto" into a decision at launch (core/detect-toolchains.ts);
|
|
41
|
-
* this only applies when a session file still says "auto": the workspace has one of the marker files.
|
|
42
|
-
*/
|
|
43
|
-
export declare const wanted: (setting: boolean | "auto", toolchain: string) => boolean;
|
|
44
|
-
/** The first of these version files in the workspace root, parsed (e.g. .ruby-version "3.3.1"). */
|
|
45
|
-
export declare const versionFromFiles: (files: string[], parse?: (text: string, name: string) => string | null) => {
|
|
46
|
-
spec: string;
|
|
47
|
-
source: string;
|
|
48
|
-
} | null;
|
|
49
|
-
/**
|
|
50
|
-
* Installs each package that is not installed yet (remembered in tools\installed-packages.json under `group`, e.g.
|
|
51
|
-
* "npm@22.11.0"). One failing package is reported and skipped; it is tried again next boot.
|
|
52
|
-
*/
|
|
53
|
-
export declare const installOnce: (env: ToolEnv, group: string, packages: string[], install: (pkg: string) => void | Promise<void>) => Promise<void>;
|
|
54
|
-
export {};
|
|
@@ -1,147 +0,0 @@
|
|
|
1
|
-
// Shared plumbing for the toolchain installers. Everything lives in C:\AgentData\tools (persistent), so only the first
|
|
2
|
-
// boot downloads; later boots only put things on PATH.
|
|
3
|
-
import fs from 'node:fs';
|
|
4
|
-
import path from 'node:path';
|
|
5
|
-
import { z } from 'zod';
|
|
6
|
-
import { download, githubAsset, installArchive } from '../../shared/download.js';
|
|
7
|
-
import { writeJsonAtomic } from '../../shared/rundir.js';
|
|
8
|
-
import { errMsg, execOutput, exists, log, session, toolsDir, warn } from '../env.js';
|
|
9
|
-
import { projectWorkspace } from '../project-context.js';
|
|
10
|
-
import { MARKERS } from '../../core/detect-toolchains.js';
|
|
11
|
-
import { projectUses, specFromVersionFile } from './versions.js';
|
|
12
|
-
export const emptyEnv = () => ({ vars: {}, prepend: [], append: [], summary: [] });
|
|
13
|
-
export const arch = process.arch === 'arm64' ? 'arm64' : 'x64';
|
|
14
|
-
export const tool = (...parts) => path.join(toolsDir, ...parts);
|
|
15
|
-
/** First x.y.z in a tool's `--version` output. */
|
|
16
|
-
export const versionOf = (exe, args = ['--version'], options = {}) => /\d+\.\d+\.\d+\S*/.exec(execOutput(exe, args, options))?.[0] ?? 'installed';
|
|
17
|
-
/** Small JSON state files in tools\: read with zod (a half-written file is just empty), written atomically. */
|
|
18
|
-
const readState = (file, schema, empty) => {
|
|
19
|
-
try {
|
|
20
|
-
return schema.safeParse(JSON.parse(fs.readFileSync(file, 'utf8').replace(/^/, ''))).data ?? empty;
|
|
21
|
-
}
|
|
22
|
-
catch {
|
|
23
|
-
return empty;
|
|
24
|
-
}
|
|
25
|
-
};
|
|
26
|
-
/** A remembered lookup; plain strings are what older versions wrote (treated as stale, still usable offline). */
|
|
27
|
-
const Resolved = z.record(z.string(), z.union([z.string(), z.strictObject({ value: z.string(), at: z.number() })]));
|
|
28
|
-
const resolvedFile = () => tool('resolved-versions.json');
|
|
29
|
-
const remembered = () => Object.fromEntries(Object.entries(readState(resolvedFile(), Resolved, {})).map(([k, v]) => [k, typeof v === 'string' ? { value: v, at: 0 } : v]));
|
|
30
|
-
/** How long a looked-up version is trusted: boots within a day make no version lookups at all. */
|
|
31
|
-
const FRESH_MS = 24 * 60 * 60 * 1000;
|
|
32
|
-
let offline = false;
|
|
33
|
-
const networkError = (e) => /fetch failed|timed? ?out|aborted|ENOTFOUND|EAI_AGAIN|ECONN|ENETUNREACH|EHOSTUNREACH|HTTP 5\d\d|socket/i.test(errMsg(e) + ' ' + String(e?.cause ?? ''));
|
|
34
|
-
/**
|
|
35
|
-
* Resolves a version online and remembers it for a day (provisioning.refresh looks again), so most boots make no
|
|
36
|
-
* lookups and an offline boot reuses what was installed last time. After a network failure the remaining lookups go
|
|
37
|
-
* straight to the remembered versions instead of each waiting for the network; other errors (no such version) do not.
|
|
38
|
-
*/
|
|
39
|
-
export const resolveCached = async (key, resolve) => {
|
|
40
|
-
const cached = remembered()[key];
|
|
41
|
-
if (cached && (offline || (!session.provisioning.refresh && Date.now() - cached.at < FRESH_MS)))
|
|
42
|
-
return cached.value;
|
|
43
|
-
try {
|
|
44
|
-
const value = await resolve();
|
|
45
|
-
fs.mkdirSync(toolsDir, { recursive: true });
|
|
46
|
-
writeJsonAtomic(resolvedFile(), { ...remembered(), [key]: { value, at: Date.now() } });
|
|
47
|
-
return value;
|
|
48
|
-
}
|
|
49
|
-
catch (e) {
|
|
50
|
-
if (networkError(e))
|
|
51
|
-
offline = true;
|
|
52
|
-
if (!cached)
|
|
53
|
-
throw e;
|
|
54
|
-
warn('Could not look up the latest ' + key + ' online (' + errMsg(e) + '); using ' + cached.value + ' from an earlier start.');
|
|
55
|
-
return cached.value;
|
|
56
|
-
}
|
|
57
|
-
};
|
|
58
|
-
/** A single file download that lands as `file` only when complete (and checksum-verified): a cut-off one never looks finished. */
|
|
59
|
-
export const downloadFile = async (url, file, sha256 = null) => {
|
|
60
|
-
const part = file + '.part';
|
|
61
|
-
try {
|
|
62
|
-
await download(url, part, sha256);
|
|
63
|
-
fs.rmSync(file, { force: true });
|
|
64
|
-
fs.renameSync(part, file);
|
|
65
|
-
}
|
|
66
|
-
finally {
|
|
67
|
-
fs.rmSync(part, { force: true });
|
|
68
|
-
}
|
|
69
|
-
};
|
|
70
|
-
/** The newest GitHub release asset matching `pattern`, checksum-verified, unpacked into `dest`. */
|
|
71
|
-
export const installFromGithub = async (repo, pattern, o) => {
|
|
72
|
-
const asset = await githubAsset(repo, pattern, o.searchOlder);
|
|
73
|
-
log('Downloading ' + (typeof o.what === 'string' ? o.what : o.what(asset)) + ' ...');
|
|
74
|
-
await installArchive(asset.url, o.dest, { sha256: asset.sha256, fileName: asset.name, ...(o.locate ? { locate: o.locate } : {}), ...(o.up ? { up: o.up } : {}) });
|
|
75
|
-
};
|
|
76
|
-
/** Runs one installer; a failure is reported and skipped so it never blocks the other toolchains. */
|
|
77
|
-
export const step = async (name, env, work) => {
|
|
78
|
-
try {
|
|
79
|
-
await work();
|
|
80
|
-
}
|
|
81
|
-
catch (e) {
|
|
82
|
-
warn(name + ' could not be set up and is skipped; everything else still works, and the next start tries again. Reason: ' + errMsg(e));
|
|
83
|
-
env.summary.push(name + ': FAILED');
|
|
84
|
-
}
|
|
85
|
-
};
|
|
86
|
-
// ---- which toolchains a project needs ------------------------------------------------------------------------------
|
|
87
|
-
const SKIP_DIRS = new Set(['node_modules', '.git', 'target', 'bin', 'obj', 'dist', 'build', 'vendor', '.venv', 'venv']);
|
|
88
|
-
const entries = new Map();
|
|
89
|
-
/** File names in the project's folder and its direct sub-folders ("api/go.mod"); read once per project. */
|
|
90
|
-
export const workspaceEntries = () => {
|
|
91
|
-
const workspace = projectWorkspace();
|
|
92
|
-
const known = entries.get(workspace.toLowerCase());
|
|
93
|
-
if (known)
|
|
94
|
-
return known;
|
|
95
|
-
const list = (dir) => { try {
|
|
96
|
-
return fs.readdirSync(dir, { withFileTypes: true });
|
|
97
|
-
}
|
|
98
|
-
catch {
|
|
99
|
-
return [];
|
|
100
|
-
} };
|
|
101
|
-
const top = list(workspace);
|
|
102
|
-
const below = top.filter((d) => d.isDirectory() && !d.name.startsWith('.') && !SKIP_DIRS.has(d.name.toLowerCase()))
|
|
103
|
-
.flatMap((d) => list(path.join(workspace, d.name)).filter((f) => f.isFile()).map((f) => d.name + '/' + f.name));
|
|
104
|
-
const found = [...top.filter((d) => d.isFile()).map((d) => d.name), ...below];
|
|
105
|
-
entries.set(workspace.toLowerCase(), found);
|
|
106
|
-
return found;
|
|
107
|
-
};
|
|
108
|
-
/**
|
|
109
|
-
* true / false as configured. The host already turns "auto" into a decision at launch (core/detect-toolchains.ts);
|
|
110
|
-
* this only applies when a session file still says "auto": the workspace has one of the marker files.
|
|
111
|
-
*/
|
|
112
|
-
export const wanted = (setting, toolchain) => setting === 'auto' ? projectUses(workspaceEntries(), MARKERS[toolchain] ?? []) : setting;
|
|
113
|
-
/** The first of these version files in the workspace root, parsed (e.g. .ruby-version "3.3.1"). */
|
|
114
|
-
export const versionFromFiles = (files, parse = (t) => specFromVersionFile(t)) => {
|
|
115
|
-
for (const name of files) {
|
|
116
|
-
const file = path.join(projectWorkspace(), name);
|
|
117
|
-
if (!exists(file))
|
|
118
|
-
continue;
|
|
119
|
-
const spec = parse(fs.readFileSync(file, 'utf8'), name);
|
|
120
|
-
if (spec)
|
|
121
|
-
return { spec, source: name };
|
|
122
|
-
}
|
|
123
|
-
return null;
|
|
124
|
-
};
|
|
125
|
-
// ---- global packages, installed once -------------------------------------------------------------------------------
|
|
126
|
-
const installedFile = () => tool('installed-packages.json');
|
|
127
|
-
const installed = () => readState(installedFile(), z.record(z.string(), z.string()), {});
|
|
128
|
-
/**
|
|
129
|
-
* Installs each package that is not installed yet (remembered in tools\installed-packages.json under `group`, e.g.
|
|
130
|
-
* "npm@22.11.0"). One failing package is reported and skipped; it is tried again next boot.
|
|
131
|
-
*/
|
|
132
|
-
export const installOnce = async (env, group, packages, install) => {
|
|
133
|
-
const todo = packages.filter((p) => !installed()[group + ':' + p]);
|
|
134
|
-
for (const pkg of todo) {
|
|
135
|
-
try {
|
|
136
|
-
log('Installing ' + pkg + ' (' + group + ') ...');
|
|
137
|
-
await install(pkg);
|
|
138
|
-
writeJsonAtomic(installedFile(), { ...installed(), [group + ':' + pkg]: new Date().toISOString() });
|
|
139
|
-
}
|
|
140
|
-
catch (e) {
|
|
141
|
-
warn(pkg + ' (' + group + ') could not be installed and is skipped; the next start tries again. Reason: ' + errMsg(e));
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
const ok = packages.filter((p) => installed()[group + ':' + p]);
|
|
145
|
-
if (ok.length)
|
|
146
|
-
env.summary.push(group.split('@')[0] + ' packages: ' + ok.join(', '));
|
|
147
|
-
};
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { DatabasePlan } from '../../../core/types.js';
|
|
2
|
-
import { type ToolEnv } from '../common.js';
|
|
3
|
-
/**
|
|
4
|
-
* Amazon's DynamoDB Local (a Java program; the Java toolchain step runs first, else this installs the LTS JDK) and
|
|
5
|
-
* dynamodb-admin, the web UI to browse and edit tables, installed with the runner's own npm. Every AWS SDK picks the
|
|
6
|
-
* local endpoint up from AWS_ENDPOINT_URL_DYNAMODB, with dummy credentials (real ones never reach the sandbox).
|
|
7
|
-
*/
|
|
8
|
-
export declare const setupDynamo: (env: ToolEnv, plan: DatabasePlan) => Promise<void>;
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
// DynamoDB Local + dynamodb-admin.
|
|
2
|
-
import fs from 'node:fs';
|
|
3
|
-
import path from 'node:path';
|
|
4
|
-
import { spawn } from 'node:child_process';
|
|
5
|
-
import { fetchText, installArchive } from '../../../shared/download.js';
|
|
6
|
-
import { execAsync, exists, log, logsDir, mkdirp } from '../../env.js';
|
|
7
|
-
import { ensureJdk } from '../java.js';
|
|
8
|
-
import { tool } from '../common.js';
|
|
9
|
-
import { portOpen, waitForPort } from '../../ports.js';
|
|
10
|
-
import { dataFor, startServer } from './server.js';
|
|
11
|
-
const DYNAMO_ZIP = 'https://d1ni2b6xgvw0s0.cloudfront.net/v2.x/dynamodb_local_latest.zip';
|
|
12
|
-
/**
|
|
13
|
-
* Amazon's DynamoDB Local (a Java program; the Java toolchain step runs first, else this installs the LTS JDK) and
|
|
14
|
-
* dynamodb-admin, the web UI to browse and edit tables, installed with the runner's own npm. Every AWS SDK picks the
|
|
15
|
-
* local endpoint up from AWS_ENDPOINT_URL_DYNAMODB, with dummy credentials (real ones never reach the sandbox).
|
|
16
|
-
*/
|
|
17
|
-
export const setupDynamo = async (env, plan) => {
|
|
18
|
-
const java = path.join(await ensureJdk(), 'bin', 'java.exe');
|
|
19
|
-
const home = tool('dynamodb-local');
|
|
20
|
-
if (!exists(path.join(home, 'DynamoDBLocal.jar'))) {
|
|
21
|
-
log('Downloading DynamoDB Local (~60 MB once) ...');
|
|
22
|
-
const sha256 = (await fetchText(DYNAMO_ZIP + '.sha256')).trim().split(/\s+/)[0];
|
|
23
|
-
await installArchive(DYNAMO_ZIP, home, { sha256, locate: 'DynamoDBLocal.jar', fileName: 'dynamodb_local.zip' });
|
|
24
|
-
}
|
|
25
|
-
const data = mkdirp(dataFor('dynamodb'));
|
|
26
|
-
// -sharedDb: one database whatever region/credentials a client uses, so the admin UI and the app see the same tables.
|
|
27
|
-
await startServer('dynamodb', java, ['-Djava.library.path=' + path.join(home, 'DynamoDBLocal_lib'), '-jar', path.join(home, 'DynamoDBLocal.jar'), '-sharedDb', '-dbPath', data, '-port', String(plan.port)], plan.port);
|
|
28
|
-
const endpoint = 'http://localhost:' + plan.port;
|
|
29
|
-
const aws = { AWS_ENDPOINT_URL_DYNAMODB: endpoint, DYNAMO_ENDPOINT: endpoint, AWS_ACCESS_KEY_ID: 'local', AWS_SECRET_ACCESS_KEY: 'local', AWS_REGION: 'us-east-1', AWS_DEFAULT_REGION: 'us-east-1' };
|
|
30
|
-
Object.assign(env.vars, aws);
|
|
31
|
-
env.summary.push('dynamodb (DynamoDB Local): ' + endpoint + ' (AWS SDKs use it automatically via AWS_ENDPOINT_URL_DYNAMODB; dummy credentials)');
|
|
32
|
-
if (!plan.adminPort)
|
|
33
|
-
return;
|
|
34
|
-
const prefix = tool('dynamodb-admin');
|
|
35
|
-
const script = path.join(prefix, 'node_modules', 'dynamodb-admin', 'dist', 'dynamodb-admin.js');
|
|
36
|
-
if (!exists(script)) {
|
|
37
|
-
log('Installing dynamodb-admin, the DynamoDB web UI (~20 MB once) ...');
|
|
38
|
-
const npmCli = path.join(path.dirname(process.execPath), 'node_modules', 'npm', 'bin', 'npm-cli.js');
|
|
39
|
-
await execAsync(process.execPath, [npmCli, 'install', '--global', '--prefix', prefix, 'dynamodb-admin', '--no-fund', '--no-audit'], { stdio: 'ignore' });
|
|
40
|
-
}
|
|
41
|
-
// The database matters more than its UI: a taken port is reported, not fatal.
|
|
42
|
-
if (await portOpen(plan.adminPort)) {
|
|
43
|
-
env.summary.push('dynamodb-admin: NOT started, port ' + plan.adminPort + ' is in use (change databases.dynamodb.adminPort)');
|
|
44
|
-
return;
|
|
45
|
-
}
|
|
46
|
-
const out = fs.openSync(path.join(logsDir, 'dynamodb-admin.log'), 'a');
|
|
47
|
-
spawn(process.execPath, [script, '--port', String(plan.adminPort), '--dynamo-endpoint', endpoint, '--skip-default-credentials'], { detached: true, stdio: ['ignore', out, out], windowsHide: true, env: { ...process.env, ...aws } }).unref();
|
|
48
|
-
fs.closeSync(out);
|
|
49
|
-
if (!(await waitForPort(plan.adminPort, 30)))
|
|
50
|
-
throw new Error('dynamodb-admin did not start; see ' + path.join(logsDir, 'dynamodb-admin.log'));
|
|
51
|
-
env.summary.push('dynamodb-admin: http://localhost:' + plan.adminPort + ' (browse and edit tables in the sandbox\'s browser)');
|
|
52
|
-
};
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import type { DatabasePlan } from '../../../core/types.js';
|
|
2
|
-
import { type ToolEnv } from '../common.js';
|
|
3
|
-
export declare const DATABASE_NAMES: Record<DatabasePlan['database'], string>;
|
|
4
|
-
/** Stops a database (and DynamoDB's admin UI). PostgreSQL shuts down cleanly through pg_ctl; the others are ended. */
|
|
5
|
-
export declare const stopDatabase: (plan: DatabasePlan) => Promise<boolean>;
|
|
6
|
-
export declare const setupDatabase: (env: ToolEnv, plan: DatabasePlan) => Promise<void>;
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
// Databases inside the sandbox: PostgreSQL, MariaDB (MySQL-compatible), MongoDB, Redis and DynamoDB Local. Binaries
|
|
2
|
-
// live in C:\AgentData\tools, data in C:\AgentData\databases (both persist), and every server listens on localhost only.
|
|
3
|
-
// Which ones run was decided on the host (session.databases): only what the project needs.
|
|
4
|
-
import fs from 'node:fs';
|
|
5
|
-
import path from 'node:path';
|
|
6
|
-
import { spawnSync } from 'node:child_process';
|
|
7
|
-
import { SYSTEM } from '../../../shared/system.js';
|
|
8
|
-
import { dryRun, execAsync, exists, log } from '../../env.js';
|
|
9
|
-
import { tool } from '../common.js';
|
|
10
|
-
import { setupDynamo } from './dynamodb.js';
|
|
11
|
-
import { setupMongo } from './mongodb.js';
|
|
12
|
-
import { setupMysql } from './mysql.js';
|
|
13
|
-
import { postgresData, setupPostgres } from './postgres.js';
|
|
14
|
-
import { setupRedis } from './redis.js';
|
|
15
|
-
import { portOpen } from '../../ports.js';
|
|
16
|
-
import { duringSession } from '../../project-context.js';
|
|
17
|
-
const SETUP = { postgres: setupPostgres, mysql: setupMysql, mongodb: setupMongo, redis: setupRedis, dynamodb: setupDynamo };
|
|
18
|
-
export const DATABASE_NAMES = { postgres: 'PostgreSQL', mysql: 'MySQL (MariaDB)', mongodb: 'MongoDB', redis: 'Redis', dynamodb: 'DynamoDB Local', sqlserver: 'SQL Server' };
|
|
19
|
-
/** The process listening on a local TCP port (netstat: no PowerShell start-up cost), or null. */
|
|
20
|
-
const listenerPid = (port) => {
|
|
21
|
-
const out = spawnSync(SYSTEM.netstat(), ['-ano', '-p', 'TCP'], { encoding: 'utf8', windowsHide: true }).stdout ?? '';
|
|
22
|
-
const hit = out.split(/\r?\n/).map((l) => /^\s*TCP\s+\S+:(\d+)\s+\S+\s+LISTENING\s+(\d+)/.exec(l)).find((m) => m && Number(m[1]) === port);
|
|
23
|
-
return hit ? Number(hit[2]) : null;
|
|
24
|
-
};
|
|
25
|
-
/** Stops a database (and DynamoDB's admin UI). PostgreSQL shuts down cleanly through pg_ctl; the others are ended. */
|
|
26
|
-
export const stopDatabase = async (plan) => {
|
|
27
|
-
if (!(await portOpen(plan.port)))
|
|
28
|
-
return false;
|
|
29
|
-
if (plan.database === 'postgres' && exists(tool('postgres'))) {
|
|
30
|
-
for (const version of fs.readdirSync(tool('postgres'))) {
|
|
31
|
-
const data = postgresData(version);
|
|
32
|
-
const pgCtl = path.join(tool('postgres', version), 'bin', 'pg_ctl.exe');
|
|
33
|
-
if (exists(path.join(data, 'postmaster.pid')) && exists(pgCtl))
|
|
34
|
-
await execAsync(pgCtl, ['stop', '-D', data, '-m', 'fast', '-w'], { stdio: 'ignore' });
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
for (const port of [plan.port, plan.adminPort ?? 0]) {
|
|
38
|
-
const pid = port && listenerPid(port);
|
|
39
|
-
if (pid)
|
|
40
|
-
try {
|
|
41
|
-
process.kill(pid);
|
|
42
|
-
}
|
|
43
|
-
catch { /* already gone */ }
|
|
44
|
-
}
|
|
45
|
-
return true;
|
|
46
|
-
};
|
|
47
|
-
export const setupDatabase = async (env, plan) => {
|
|
48
|
-
if (plan.database === 'sqlserver') {
|
|
49
|
-
env.summary.push('sqlserver: NOT available (SQL Server cannot start inside Windows Sandbox). Switch the project to Postgres or SQLite for local work');
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
if (dryRun) {
|
|
53
|
-
log('(dry run) would run ' + DATABASE_NAMES[plan.database] + ' on port ' + plan.port + ' (' + plan.reasons.join('; ') + ')');
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
|
-
// A project that joined later, while another project's server already listens there: they share it.
|
|
57
|
-
if (duringSession() && (await portOpen(plan.port))) {
|
|
58
|
-
env.summary.push(plan.database + ': shared, already running on port ' + plan.port);
|
|
59
|
-
return;
|
|
60
|
-
}
|
|
61
|
-
await SETUP[plan.database](env, plan);
|
|
62
|
-
};
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
// MongoDB Community, with mongosh.
|
|
2
|
-
import path from 'node:path';
|
|
3
|
-
import { fetchJson, installArchive } from '../../../shared/download.js';
|
|
4
|
-
import { exists, log, mkdirp } from '../../env.js';
|
|
5
|
-
import { installFromGithub, resolveCached, tool } from '../common.js';
|
|
6
|
-
import { clearStaleLocks, dataFor, startServer } from './server.js';
|
|
7
|
-
export const setupMongo = async (env, plan) => {
|
|
8
|
-
const find = async () => {
|
|
9
|
-
const { versions } = await fetchJson('https://downloads.mongodb.org/full.json');
|
|
10
|
-
const prod = versions.filter((v) => v.production_release);
|
|
11
|
-
const hit = plan.version === 'latest' ? prod[0] : prod.find((v) => v.version === plan.version || v.version.startsWith(plan.version + '.'));
|
|
12
|
-
const archive = hit?.downloads.find((d) => d.target === 'windows' && d.arch === 'x86_64' && d.edition === 'base')?.archive;
|
|
13
|
-
return hit && archive ? { version: hit.version, archive } : Promise.reject(new Error('No MongoDB ' + plan.version + ' for Windows'));
|
|
14
|
-
};
|
|
15
|
-
const version = await resolveCached('mongodb:' + plan.version, async () => (await find()).version);
|
|
16
|
-
const home = tool('mongodb', version);
|
|
17
|
-
if (!exists(path.join(home, 'bin', 'mongod.exe'))) {
|
|
18
|
-
const { archive } = await find();
|
|
19
|
-
log('Downloading MongoDB ' + version + ' (~400 MB once) ...');
|
|
20
|
-
await installArchive(archive.url, home, { sha256: archive.sha256, locate: 'mongod.exe', up: 1 });
|
|
21
|
-
}
|
|
22
|
-
const shell = tool('mongosh');
|
|
23
|
-
if (!exists(path.join(shell, 'mongosh.exe'))) {
|
|
24
|
-
await installFromGithub('mongodb-js/mongosh', /^mongosh-[\d.]+-win32-x64\.zip$/, { dest: shell, what: 'mongosh, the MongoDB shell (~50 MB once)', locate: 'mongosh.exe' });
|
|
25
|
-
}
|
|
26
|
-
const data = mkdirp(dataFor('mongodb'));
|
|
27
|
-
await clearStaleLocks(data, ['mongod.lock'], plan.port);
|
|
28
|
-
await startServer('mongodb', path.join(home, 'bin', 'mongod.exe'), ['--dbpath', data, '--bind_ip', '127.0.0.1', '--port', String(plan.port)], plan.port);
|
|
29
|
-
env.prepend.push(path.join(home, 'bin'), shell);
|
|
30
|
-
env.summary.push('mongodb ' + version + ': mongodb://127.0.0.1:' + plan.port + ' (mongosh on PATH)');
|
|
31
|
-
};
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
// MariaDB, the MySQL-compatible server.
|
|
2
|
-
import path from 'node:path';
|
|
3
|
-
import { fetchJson, installArchive } from '../../../shared/download.js';
|
|
4
|
-
import { execAsync, exists, log } from '../../env.js';
|
|
5
|
-
import { resolveCached, tool } from '../common.js';
|
|
6
|
-
import { createOnce, dataFor, startServer } from './server.js';
|
|
7
|
-
const MARIA = 'https://downloads.mariadb.org/rest-api/mariadb/';
|
|
8
|
-
export const setupMysql = async (env, plan) => {
|
|
9
|
-
const series = await resolveCached('mariadb:' + plan.version, async () => {
|
|
10
|
-
if (plan.version !== 'lts')
|
|
11
|
-
return plan.version;
|
|
12
|
-
const { major_releases: all } = await fetchJson(MARIA);
|
|
13
|
-
return all.find((r) => r.release_status === 'Stable' && r.release_support_type === 'Long Term Support')?.release_id ?? Promise.reject(new Error('No MariaDB LTS release found'));
|
|
14
|
-
});
|
|
15
|
-
const latest = async () => {
|
|
16
|
-
const { releases } = await fetchJson(MARIA + series + '/latest/');
|
|
17
|
-
const [version, release] = Object.entries(releases)[0] ?? [];
|
|
18
|
-
const zip = release?.files.find((f) => /-winx64\.zip$/.test(f.file_name));
|
|
19
|
-
return zip ? { version, zip } : Promise.reject(new Error('No MariaDB ' + series + ' zip for Windows'));
|
|
20
|
-
};
|
|
21
|
-
const version = await resolveCached('mariadb-version:' + series, async () => (await latest()).version);
|
|
22
|
-
const home = tool('mariadb', version);
|
|
23
|
-
const bin = path.join(home, 'bin');
|
|
24
|
-
if (!exists(path.join(bin, 'mariadbd.exe'))) {
|
|
25
|
-
const { zip } = await latest();
|
|
26
|
-
log('Downloading MariaDB ' + version + ' (~90 MB once) ...');
|
|
27
|
-
await installArchive(zip.file_download_url.replace(/^http:/, 'https:'), home, { sha256: zip.checksum?.sha256sum ?? null, locate: 'mariadbd.exe', up: 1, fileName: zip.file_name });
|
|
28
|
-
}
|
|
29
|
-
const data = dataFor('mariadb');
|
|
30
|
-
await createOnce(data, 'mysql', async () => {
|
|
31
|
-
log('Creating the MariaDB database (first start) ...');
|
|
32
|
-
await execAsync(path.join(bin, 'mariadb-install-db.exe'), ['--datadir=' + data, '--port=' + plan.port], { stdio: 'ignore' });
|
|
33
|
-
});
|
|
34
|
-
await startServer('mysql', path.join(bin, 'mariadbd.exe'), ['--datadir=' + data, '--port=' + plan.port, '--bind-address=127.0.0.1', '--console'], plan.port);
|
|
35
|
-
Object.assign(env.vars, { MYSQL_HOST: '127.0.0.1', MYSQL_TCP_PORT: String(plan.port) });
|
|
36
|
-
env.prepend.push(bin);
|
|
37
|
-
env.summary.push('mysql (MariaDB ' + version + '): 127.0.0.1:' + plan.port + ', user root, no password (mysql://root@127.0.0.1:' + plan.port + ')');
|
|
38
|
-
};
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import type { DatabasePlan } from '../../../core/types.js';
|
|
2
|
-
import { type ToolEnv } from '../common.js';
|
|
3
|
-
/** The data folder of a PostgreSQL major version (one cluster per major). */
|
|
4
|
-
export declare const postgresData: (version: string) => string;
|
|
5
|
-
export declare const setupPostgres: (env: ToolEnv, plan: DatabasePlan) => Promise<void>;
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
// PostgreSQL from EnterpriseDB's Windows binaries (without pgAdmin).
|
|
2
|
-
import path from 'node:path';
|
|
3
|
-
import { fetchJson, installArchive } from '../../../shared/download.js';
|
|
4
|
-
import { execAsync, exists, log, logsDir } from '../../env.js';
|
|
5
|
-
import { resolveCached, tool } from '../common.js';
|
|
6
|
-
import { portOpen } from '../../ports.js';
|
|
7
|
-
import { clearStaleLocks, createOnce, dataFor } from './server.js';
|
|
8
|
-
/** The data folder of a PostgreSQL major version (one cluster per major). */
|
|
9
|
-
export const postgresData = (version) => dataFor('postgres-' + version.split('.')[0]);
|
|
10
|
-
export const setupPostgres = async (env, plan) => {
|
|
11
|
-
const exact = await resolveCached('postgres:' + plan.version, async () => {
|
|
12
|
-
const versions = (await fetchJson('https://www.postgresql.org/versions.json')).filter((v) => v.supported);
|
|
13
|
-
const hit = plan.version === 'latest' ? versions.find((v) => v.current) ?? versions[versions.length - 1] : versions.find((v) => v.major === plan.version.split('.')[0]);
|
|
14
|
-
return hit ? hit.major + '.' + hit.latestMinor : Promise.reject(new Error('No supported PostgreSQL ' + plan.version));
|
|
15
|
-
});
|
|
16
|
-
const home = tool('postgres', exact);
|
|
17
|
-
const bin = path.join(home, 'bin');
|
|
18
|
-
if (!exists(path.join(bin, 'pg_ctl.exe'))) {
|
|
19
|
-
log('Downloading PostgreSQL ' + exact + ' (~330 MB once) ...');
|
|
20
|
-
// EDB publishes no checksums; the download is HTTPS from EnterpriseDB, PostgreSQL's official Windows packager.
|
|
21
|
-
await installArchive('https://get.enterprisedb.com/postgresql/postgresql-' + exact + '-1-windows-x64-binaries.zip', home, {
|
|
22
|
-
locate: 'pg_ctl.exe', up: 1, fileName: 'postgresql-' + exact + '.zip', members: ['pgsql/bin', 'pgsql/lib', 'pgsql/share', 'pgsql/include'],
|
|
23
|
-
});
|
|
24
|
-
}
|
|
25
|
-
const data = postgresData(exact);
|
|
26
|
-
await createOnce(data, 'PG_VERSION', async () => {
|
|
27
|
-
log('Creating the PostgreSQL database (first start) ...');
|
|
28
|
-
await execAsync(path.join(bin, 'initdb.exe'), ['-D', data, '-U', 'postgres', '-A', 'trust', '-E', 'UTF8', '--locale=C'], { stdio: 'ignore' });
|
|
29
|
-
});
|
|
30
|
-
if (await portOpen(plan.port))
|
|
31
|
-
throw new Error('port ' + plan.port + ' is already in use (change databases.postgres.port)');
|
|
32
|
-
await clearStaleLocks(data, ['postmaster.pid'], plan.port);
|
|
33
|
-
// postgres.exe refuses to run as an administrator (the sandbox user is one); pg_ctl drops the rights first.
|
|
34
|
-
await execAsync(path.join(bin, 'pg_ctl.exe'), ['start', '-D', data, '-w', '-t', '60', '-l', path.join(logsDir, 'postgres.log'), '-o', '-p ' + plan.port + ' -c listen_addresses=localhost'], { stdio: 'ignore' });
|
|
35
|
-
Object.assign(env.vars, { PGHOST: 'localhost', PGPORT: String(plan.port), PGUSER: 'postgres' });
|
|
36
|
-
env.prepend.push(bin);
|
|
37
|
-
env.summary.push('postgres ' + exact + ': localhost:' + plan.port + ', user postgres, no password (postgres://postgres@localhost:' + plan.port + '/postgres)');
|
|
38
|
-
};
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
// Redis (the maintained community Windows build of upstream Redis).
|
|
2
|
-
import path from 'node:path';
|
|
3
|
-
import { exists, mkdirp } from '../../env.js';
|
|
4
|
-
import { installFromGithub, tool } from '../common.js';
|
|
5
|
-
import { dataFor, startServer } from './server.js';
|
|
6
|
-
export const setupRedis = async (env, plan) => {
|
|
7
|
-
const home = tool('redis');
|
|
8
|
-
if (!exists(path.join(home, 'redis-server.exe'))) {
|
|
9
|
-
// Redis has no official Windows build; this one is built from upstream Redis with MSYS2.
|
|
10
|
-
await installFromGithub('redis-windows/redis-windows', /^Redis-[\d.]+-Windows-x64-msys2\.zip$/, { dest: home, what: (a) => 'Redis (' + a.name + ', ~10 MB once)', locate: 'redis-server.exe' });
|
|
11
|
-
}
|
|
12
|
-
const data = mkdirp(dataFor('redis'));
|
|
13
|
-
await startServer('redis', path.join(home, 'redis-server.exe'), ['--port', String(plan.port), '--bind', '127.0.0.1', '--dir', data.replace(/\\/g, '/'), '--appendonly', 'yes'], plan.port);
|
|
14
|
-
env.prepend.push(home);
|
|
15
|
-
env.summary.push('redis: redis://127.0.0.1:' + plan.port + ' (redis-cli on PATH)');
|
|
16
|
-
};
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { Toolchains } from '../../core/types.js';
|
|
2
|
-
import { type ToolEnv } from './common.js';
|
|
3
|
-
/**
|
|
4
|
-
* A JDK for tools that run on Java (DynamoDB Local): the newest one already installed, else the newest LTS. Returns its
|
|
5
|
-
* folder; the agent's Java on PATH stays whatever toolchains.java says.
|
|
6
|
-
*/
|
|
7
|
-
export declare const ensureJdk: () => Promise<string>;
|
|
8
|
-
export declare const setupJava: (env: ToolEnv, config: Toolchains["java"]) => Promise<void>;
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import { type ToolEnv } from './common.js';
|
|
2
|
-
/** Where pwsh.exe lives (the host's Windows Terminal profile points at the same folder under C:\AgentData). */
|
|
3
|
-
export declare const pwshDir: () => string;
|
|
4
|
-
export declare const setupPwsh: (env: ToolEnv, refresh?: boolean) => Promise<void>;
|