windows-development-sandbox 1.5.0 → 1.9.0
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/README.md +1 -0
- package/config.example.json +27 -1
- package/dist/app/context.d.ts +8 -0
- package/dist/app/context.js +12 -0
- package/dist/app/features/defs.d.ts +322 -0
- package/dist/app/features/defs.js +28 -0
- package/dist/app/features/sandbox/index.d.ts +2 -0
- package/dist/app/features/sandbox/index.js +3 -0
- package/dist/app/features/sandbox/sandbox.def.d.ts +193 -0
- package/dist/app/features/sandbox/sandbox.def.js +245 -0
- package/dist/app/features/sandbox/sandbox.run.d.ts +72 -0
- package/dist/app/features/sandbox/sandbox.run.js +98 -0
- package/dist/app/features/sessions/index.d.ts +2 -0
- package/dist/app/features/sessions/index.js +3 -0
- package/dist/app/features/sessions/sessions.def.d.ts +141 -0
- package/dist/app/features/sessions/sessions.def.js +176 -0
- package/dist/app/features/sessions/sessions.run.d.ts +39 -0
- package/dist/app/features/sessions/sessions.run.js +58 -0
- package/dist/{cli/menu/settings/categories.d.ts → app/features/settings/categories.def.d.ts} +4 -0
- package/dist/{cli/menu/settings/categories.js → app/features/settings/categories.def.js} +40 -46
- package/dist/app/features/settings/index.d.ts +5 -0
- package/dist/app/features/settings/index.js +6 -0
- package/dist/{cli/menu/settings/config-file.d.ts → app/features/settings/settings-file.d.ts} +1 -1
- package/dist/{cli/menu/settings/config-file.js → app/features/settings/settings-file.js} +1 -1
- package/dist/app/features/settings/settings-rows.d.ts +35 -0
- package/dist/app/features/settings/settings-rows.js +94 -0
- package/dist/app/features/settings/settings.def.d.ts +157 -0
- package/dist/app/features/settings/settings.def.js +179 -0
- package/dist/app/features/settings/settings.run.d.ts +67 -0
- package/dist/app/features/settings/settings.run.js +84 -0
- package/dist/app/kernel/define.d.ts +143 -0
- package/dist/app/kernel/define.js +42 -0
- package/dist/app/kernel/errors.d.ts +34 -0
- package/dist/app/kernel/errors.js +45 -0
- package/dist/app/kernel/fields.d.ts +70 -0
- package/dist/app/kernel/fields.js +243 -0
- package/dist/app/kernel/index.d.ts +8 -0
- package/dist/app/kernel/index.js +10 -0
- package/dist/app/kernel/io.d.ts +193 -0
- package/dist/app/kernel/io.js +126 -0
- package/dist/app/kernel/rpc.d.ts +156 -0
- package/dist/app/kernel/rpc.js +47 -0
- package/dist/{cli/menu/settings → app/kernel}/schema-node.d.ts +9 -0
- package/dist/{cli/menu/settings → app/kernel}/schema-node.js +26 -0
- package/dist/app/kernel/text.d.ts +6 -0
- package/dist/app/kernel/text.js +57 -0
- package/dist/app/kernel/view.d.ts +146 -0
- package/dist/app/kernel/view.js +28 -0
- package/dist/app/registry.d.ts +10 -0
- package/dist/app/registry.js +50 -0
- package/dist/cli/args.d.ts +18 -2
- package/dist/cli/args.js +101 -24
- package/dist/cli/commands/accounts.js +45 -17
- package/dist/cli/commands/context.d.ts +2 -0
- package/dist/cli/commands/context.js +9 -2
- package/dist/cli/commands/data/clean.js +32 -9
- package/dist/cli/commands/engine.d.ts +2 -0
- package/dist/cli/commands/engine.js +60 -0
- package/dist/cli/commands/index.d.ts +2 -1
- package/dist/cli/commands/index.js +2 -1
- package/dist/cli/commands/launch/add-root.d.ts +3 -2
- package/dist/cli/commands/launch/add-root.js +11 -10
- package/dist/cli/commands/launch/launch.js +102 -9
- package/dist/cli/commands/launch/prepare.js +6 -4
- package/dist/cli/commands/launch/running.js +2 -1
- package/dist/cli/commands/launch/summary.d.ts +2 -0
- package/dist/cli/commands/maintenance/audit.js +1 -1
- package/dist/cli/commands/maintenance/clean.d.ts +1 -1
- package/dist/cli/commands/maintenance/clean.js +17 -3
- package/dist/cli/commands/maintenance/config-share.d.ts +12 -0
- package/dist/cli/commands/maintenance/config-share.js +80 -0
- package/dist/cli/commands/maintenance/config.d.ts +1 -1
- package/dist/cli/commands/maintenance/config.js +38 -10
- package/dist/cli/commands/maintenance/doctor.d.ts +1 -1
- package/dist/cli/commands/maintenance/doctor.js +2 -4
- package/dist/cli/commands/maintenance/logs.js +14 -0
- package/dist/cli/commands/maintenance/migrate.d.ts +2 -1
- package/dist/cli/commands/maintenance/migrate.js +19 -4
- package/dist/cli/commands/maintenance/sync.js +2 -0
- package/dist/cli/commands/maintenance/update.d.ts +2 -0
- package/dist/cli/commands/maintenance/update.js +27 -4
- package/dist/cli/commands/projects/here.js +12 -7
- package/dist/cli/commands/projects/projects.js +26 -17
- package/dist/cli/commands/registry.js +10 -7
- package/dist/cli/commands/repair/checks/agents.d.ts +2 -0
- package/dist/cli/commands/repair/checks/agents.js +70 -0
- package/dist/cli/commands/repair/checks/common.d.ts +8 -0
- package/dist/cli/commands/repair/checks/common.js +22 -0
- package/dist/cli/commands/repair/checks/contained.d.ts +2 -0
- package/dist/cli/commands/repair/checks/contained.js +139 -0
- package/dist/cli/commands/repair/checks/data.d.ts +2 -0
- package/dist/cli/commands/repair/checks/data.js +241 -0
- package/dist/cli/commands/repair/checks/hcs.d.ts +7 -0
- package/dist/cli/commands/repair/checks/hcs.js +28 -0
- package/dist/cli/commands/repair/checks/index.d.ts +2 -0
- package/dist/cli/commands/repair/checks/index.js +24 -0
- package/dist/cli/commands/repair/checks/install.d.ts +5 -0
- package/dist/cli/commands/repair/checks/install.js +318 -0
- package/dist/cli/commands/repair/checks/machine.d.ts +2 -0
- package/dist/cli/commands/repair/checks/machine.js +232 -0
- package/dist/cli/commands/repair/checks/network.d.ts +6 -0
- package/dist/cli/commands/repair/checks/network.js +60 -0
- package/dist/cli/commands/repair/checks/pc.d.ts +4 -0
- package/dist/cli/commands/repair/checks/pc.js +86 -0
- package/dist/cli/commands/repair/checks/sandbox.d.ts +2 -0
- package/dist/cli/commands/repair/checks/sandbox.js +282 -0
- package/dist/cli/commands/repair/checks/settings.d.ts +2 -0
- package/dist/cli/commands/repair/checks/settings.js +169 -0
- package/dist/cli/commands/repair/checks/vpn.d.ts +2 -0
- package/dist/cli/commands/repair/checks/vpn.js +78 -0
- package/dist/cli/commands/repair/engine.d.ts +32 -0
- package/dist/cli/commands/repair/engine.js +127 -0
- package/dist/cli/commands/repair/env.d.ts +7 -0
- package/dist/cli/commands/repair/env.js +50 -0
- package/dist/cli/commands/repair/index.d.ts +1 -9
- package/dist/cli/commands/repair/index.js +2 -54
- package/dist/cli/commands/repair/log.d.ts +17 -0
- package/dist/cli/commands/repair/log.js +82 -0
- package/dist/cli/commands/repair/printer.d.ts +32 -0
- package/dist/cli/commands/repair/printer.js +132 -0
- package/dist/cli/commands/repair/run.d.ts +33 -0
- package/dist/cli/commands/repair/run.js +133 -0
- package/dist/cli/commands/repair/types.d.ts +97 -9
- package/dist/cli/commands/repair/types.js +11 -7
- package/dist/cli/commands/resume.js +2 -2
- package/dist/cli/commands/sessions/index.d.ts +0 -4
- package/dist/cli/commands/sessions/index.js +3 -7
- package/dist/cli/commands/setup/index.d.ts +5 -0
- package/dist/cli/commands/setup/index.js +25 -1
- package/dist/cli/commands/shared-use.d.ts +5 -2
- package/dist/cli/commands/shared-use.js +11 -8
- package/dist/cli/commands/storage/contained.d.ts +3 -0
- package/dist/cli/commands/storage/contained.js +179 -0
- package/dist/cli/commands/storage/index.d.ts +2 -0
- package/dist/cli/commands/storage/index.js +2 -0
- package/dist/cli/commands/storage/offer.d.ts +3 -0
- package/dist/cli/commands/storage/offer.js +91 -0
- package/dist/cli/commands/storage/storage.d.ts +8 -0
- package/dist/cli/commands/storage/storage.js +179 -0
- package/dist/cli/commands/user-config.js +2 -2
- package/dist/cli/commands/vpn.d.ts +4 -0
- package/dist/cli/commands/vpn.js +91 -0
- package/dist/cli/commands/web.d.ts +4 -0
- package/dist/cli/commands/web.js +97 -0
- package/dist/cli/history.js +1 -1
- package/dist/cli/index.js +48 -4
- package/dist/cli/manifest.d.ts +339 -97
- package/dist/cli/manifest.js +222 -67
- package/dist/cli/menu/add-agent.d.ts +47 -0
- package/dist/cli/menu/add-agent.js +168 -0
- package/dist/cli/menu/apps.d.ts +38 -3
- package/dist/cli/menu/apps.js +80 -5
- package/dist/cli/menu/command-fields.d.ts +18 -0
- package/dist/cli/menu/command-fields.js +61 -0
- package/dist/cli/menu/command-form.d.ts +22 -0
- package/dist/cli/menu/command-form.js +169 -46
- package/dist/cli/menu/data-folder.d.ts +18 -0
- package/dist/cli/menu/data-folder.js +99 -0
- package/dist/cli/menu/io-menu.d.ts +29 -0
- package/dist/cli/menu/io-menu.js +126 -0
- package/dist/cli/menu/live.d.ts +27 -0
- package/dist/cli/menu/live.js +69 -0
- package/dist/cli/menu/memory.d.ts +19 -0
- package/dist/cli/menu/memory.js +53 -0
- package/dist/cli/menu/menu.d.ts +11 -2
- package/dist/cli/menu/menu.js +36 -15
- package/dist/cli/menu/pages/accounts-page.js +55 -24
- package/dist/cli/menu/pages/agents-page.d.ts +68 -0
- package/dist/cli/menu/pages/agents-page.js +345 -0
- package/dist/cli/menu/pages/apps-page.d.ts +3 -1
- package/dist/cli/menu/pages/apps-page.js +20 -4
- package/dist/cli/menu/pages/list-page.d.ts +43 -3
- package/dist/cli/menu/pages/list-page.js +146 -12
- package/dist/cli/menu/pages/maintenance-page.d.ts +9 -5
- package/dist/cli/menu/pages/maintenance-page.js +172 -85
- package/dist/cli/menu/pages/sandbox-page.d.ts +7 -6
- package/dist/cli/menu/pages/sandbox-page.js +117 -120
- package/dist/cli/menu/pages/scopes.d.ts +1 -1
- package/dist/cli/menu/pages/sessions-page.d.ts +6 -8
- package/dist/cli/menu/pages/sessions-page.js +22 -75
- package/dist/cli/menu/pages/settings-page.d.ts +10 -14
- package/dist/cli/menu/pages/settings-page.js +95 -102
- package/dist/cli/menu/render-view.d.ts +28 -0
- package/dist/cli/menu/render-view.js +112 -0
- package/dist/cli/menu/settings/ask-path.d.ts +14 -0
- package/dist/cli/menu/settings/ask-path.js +14 -0
- package/dist/cli/menu/settings/collections/collection-editor.d.ts +8 -2
- package/dist/cli/menu/settings/collections/collection-editor.js +12 -8
- package/dist/cli/menu/settings/collections/map-editor.js +5 -1
- package/dist/cli/menu/settings/collections/object-list-editor.js +2 -2
- package/dist/cli/menu/settings/collections/object-map-editor.js +2 -2
- package/dist/cli/menu/settings/collections/string-list-editor.d.ts +10 -1
- package/dist/cli/menu/settings/collections/string-list-editor.js +23 -0
- package/dist/cli/menu/settings/draft.d.ts +1 -1
- package/dist/cli/menu/settings/format.d.ts +1 -3
- package/dist/cli/menu/settings/format.js +6 -36
- package/dist/cli/menu/settings/index.d.ts +1 -3
- package/dist/cli/menu/settings/index.js +3 -3
- package/dist/cli/menu/settings/object-editor.d.ts +6 -2
- package/dist/cli/menu/settings/object-editor.js +15 -4
- package/dist/cli/menu/settings/share.d.ts +36 -0
- package/dist/cli/menu/settings/share.js +131 -0
- package/dist/cli/menu/settings/value-editor.d.ts +10 -1
- package/dist/cli/menu/settings/value-editor.js +99 -63
- package/dist/cli/menu/several.js +7 -5
- package/dist/cli/menu/share-settings.d.ts +21 -0
- package/dist/cli/menu/share-settings.js +112 -0
- package/dist/cli/menu/shell.d.ts +53 -10
- package/dist/cli/menu/shell.js +115 -10
- package/dist/cli/menu/views.d.ts +7 -0
- package/dist/cli/menu/views.js +11 -0
- package/dist/cli/menu/vpn-login.d.ts +16 -0
- package/dist/cli/menu/vpn-login.js +74 -0
- package/dist/cli/operations/handler.d.ts +6 -0
- package/dist/cli/operations/handler.js +61 -0
- package/dist/cli/operations/index.d.ts +4 -0
- package/dist/cli/operations/index.js +5 -0
- package/dist/cli/operations/input.d.ts +6 -0
- package/dist/cli/operations/input.js +37 -0
- package/dist/cli/operations/io-cli.d.ts +7 -0
- package/dist/cli/operations/io-cli.js +62 -0
- package/dist/cli/operations/spec.d.ts +18 -0
- package/dist/cli/operations/spec.js +108 -0
- package/dist/cli/output/colors.d.ts +2 -2
- package/dist/cli/output/colors.js +2 -11
- package/dist/cli/output/index.d.ts +1 -0
- package/dist/cli/output/index.js +1 -0
- package/dist/cli/output/print.d.ts +5 -1
- package/dist/cli/output/print.js +15 -4
- package/dist/cli/output/progress.d.ts +15 -0
- package/dist/cli/output/progress.js +44 -0
- package/dist/cli/output/render-view.d.ts +4 -0
- package/dist/cli/output/render-view.js +63 -0
- package/dist/cli/services/accounts-service.d.ts +2 -0
- package/dist/cli/services/accounts-service.js +2 -2
- package/dist/cli/services/agent-commands-service.d.ts +2 -0
- package/dist/cli/services/agent-commands-service.js +11 -2
- package/dist/cli/services/health-service.d.ts +0 -6
- package/dist/cli/services/health-service.js +5 -42
- package/dist/cli/services/index.d.ts +3 -1
- package/dist/cli/services/index.js +3 -1
- package/dist/cli/services/logs-service.js +4 -3
- package/dist/cli/services/migrate-service.js +1 -1
- package/dist/cli/services/update-service.d.ts +2 -0
- package/dist/cli/services/update-service.js +13 -6
- package/dist/cli/services/vpn-service.d.ts +28 -0
- package/dist/cli/services/vpn-service.js +46 -0
- package/dist/cli/services/web-service.d.ts +22 -0
- package/dist/cli/services/web-service.js +111 -0
- package/dist/cli/tui/app.d.ts +12 -4
- package/dist/cli/tui/app.js +38 -9
- package/dist/cli/tui/dialogs/path-listing.d.ts +43 -0
- package/dist/cli/tui/dialogs/path-listing.js +127 -0
- package/dist/cli/tui/dialogs/path-picker.d.ts +67 -0
- package/dist/cli/tui/dialogs/path-picker.js +423 -0
- package/dist/cli/tui/dialogs/text-screen.d.ts +6 -0
- package/dist/cli/tui/dialogs/text-screen.js +10 -3
- package/dist/cli/tui/frame.d.ts +7 -10
- package/dist/cli/tui/frame.js +19 -10
- package/dist/cli/tui/index.d.ts +4 -3
- package/dist/cli/tui/index.js +2 -1
- package/dist/cli/tui/list/list-screen.d.ts +28 -2
- package/dist/cli/tui/list/list-screen.js +130 -66
- package/dist/cli/tui/list/list-types.d.ts +10 -4
- package/dist/cli/tui/nav.d.ts +29 -0
- package/dist/cli/tui/nav.js +67 -0
- package/dist/cli/tui/terminal.d.ts +7 -0
- package/dist/cli/tui/terminal.js +30 -10
- package/dist/cli/validate.d.ts +1 -1
- package/dist/cli/validate.js +3 -3
- package/dist/cli/version.d.ts +2 -0
- package/dist/cli/version.js +11 -0
- package/dist/core/config/defaults.js +13 -1
- package/dist/core/config/loader.js +12 -2
- package/dist/core/local-config/overrides.js +1 -0
- package/dist/core/prompt.d.ts +19 -0
- package/dist/core/prompt.js +43 -3
- package/dist/core/schema/common.d.ts +6 -0
- package/dist/core/schema/common.js +8 -0
- package/dist/core/schema/config.d.ts +36 -0
- package/dist/core/schema/config.js +26 -2
- package/dist/core/schema/harness.d.ts +2 -0
- package/dist/core/schema/harness.js +13 -2
- package/dist/core/schema/index.d.ts +3 -1
- package/dist/core/schema/index.js +3 -1
- package/dist/core/schema/profile.d.ts +1 -0
- package/dist/core/schema/profile.js +3 -0
- package/dist/core/schema/redact.d.ts +13 -0
- package/dist/core/schema/redact.js +75 -0
- package/dist/core/schema/sandbox.d.ts +6 -0
- package/dist/core/schema/sandbox.js +21 -3
- package/dist/core/schema/vpn.d.ts +18 -0
- package/dist/core/schema/vpn.js +22 -0
- package/dist/core/schema/web.d.ts +6 -0
- package/dist/core/schema/web.js +14 -0
- package/dist/core/types.d.ts +44 -0
- package/dist/core/util/fs.d.ts +2 -0
- package/dist/core/util/fs.js +9 -0
- package/dist/core/util/index.d.ts +1 -1
- package/dist/core/util/index.js +1 -1
- package/dist/guest/agents/agent-files.d.ts +54 -0
- package/dist/guest/agents/agent-files.js +67 -0
- package/dist/guest/agents/agent-installer.js +2 -9
- package/dist/guest/agents/local-state.d.ts +14 -0
- package/dist/guest/agents/local-state.js +218 -0
- package/dist/guest/agents/sbx-agent.d.ts +2 -0
- package/dist/guest/agents/sbx-agent.js +35 -0
- package/dist/guest/boot/boot.d.ts +4 -0
- package/dist/guest/boot/boot.js +51 -11
- package/dist/guest/daemon/daemon.js +8 -1
- package/dist/guest/daemon/exec.js +2 -1
- package/dist/guest/daemon/idle-shutdown.js +2 -0
- package/dist/guest/daemon/sessions.d.ts +5 -0
- package/dist/guest/daemon/sessions.js +20 -3
- package/dist/guest/entries/agent.d.ts +1 -0
- package/dist/guest/entries/agent.js +10 -0
- package/dist/guest/entries/daemon.js +5 -0
- package/dist/guest/governor/decide.d.ts +61 -0
- package/dist/guest/governor/decide.js +182 -0
- package/dist/guest/governor/governor.d.ts +42 -0
- package/dist/guest/governor/governor.js +214 -0
- package/dist/guest/governor/index.d.ts +2 -0
- package/dist/guest/governor/index.js +2 -0
- package/dist/guest/runtime/csc.d.ts +2 -0
- package/dist/guest/runtime/csc.js +2 -0
- package/dist/guest/runtime/secrets.d.ts +12 -0
- package/dist/guest/runtime/secrets.js +63 -0
- package/dist/guest/sessions/viewer.js +3 -1
- package/dist/guest/setup/claude-profile.d.ts +2 -1
- package/dist/guest/setup/claude-profile.js +12 -1
- package/dist/guest/setup/environment.d.ts +6 -0
- package/dist/guest/setup/environment.js +56 -6
- package/dist/guest/setup/path-plan.d.ts +32 -0
- package/dist/guest/setup/path-plan.js +67 -0
- package/dist/guest/setup/shell-path.d.ts +1 -0
- package/dist/guest/setup/shell-path.js +22 -0
- package/dist/guest/toolchains/languages/python.js +1 -1
- package/dist/guest/toolchains/native/rust-extras.js +4 -2
- package/dist/guest/toolchains/runtimes.js +2 -2
- package/dist/guest/vpn/index.d.ts +1 -0
- package/dist/guest/vpn/index.js +1 -0
- package/dist/guest/vpn/openvpn.d.ts +9 -0
- package/dist/guest/vpn/openvpn.js +47 -0
- package/dist/guest/vpn/tunnel.d.ts +17 -0
- package/dist/guest/vpn/tunnel.js +78 -0
- package/dist/guest/vpn/vpn.d.ts +6 -0
- package/dist/guest/vpn/vpn.js +174 -0
- package/dist/guest/vpn/wireguard.d.ts +32 -0
- package/dist/guest/vpn/wireguard.js +132 -0
- package/dist/host/agent-commands/commands.d.ts +4 -0
- package/dist/host/agent-commands/commands.js +31 -7
- package/dist/host/audit/log.d.ts +1 -1
- package/dist/host/channel/attach.d.ts +6 -2
- package/dist/host/channel/attach.js +6 -3
- package/dist/host/channel/channel.d.ts +9 -0
- package/dist/host/channel/channel.js +30 -2
- package/dist/host/engines/engine.d.ts +12 -0
- package/dist/host/engines/engine.js +1 -0
- package/dist/host/engines/hcs/check.d.ts +25 -0
- package/dist/host/engines/hcs/check.js +95 -0
- package/dist/host/engines/hcs/documents.d.ts +44 -0
- package/dist/host/engines/hcs/documents.js +155 -0
- package/dist/host/engines/hcs/engine.d.ts +39 -0
- package/dist/host/engines/hcs/engine.js +171 -0
- package/dist/host/engines/hcs/helper.d.ts +43 -0
- package/dist/host/engines/hcs/helper.js +173 -0
- package/dist/host/engines/hcs/images.d.ts +37 -0
- package/dist/host/engines/hcs/images.js +152 -0
- package/dist/host/engines/index.d.ts +7 -0
- package/dist/host/engines/index.js +5 -0
- package/dist/host/engines/registry.d.ts +16 -0
- package/dist/host/engines/registry.js +30 -0
- package/dist/host/engines/types.d.ts +58 -0
- package/dist/host/engines/types.js +1 -0
- package/dist/host/engines/windows-sandbox/engine.d.ts +16 -0
- package/dist/host/engines/windows-sandbox/engine.js +63 -0
- package/dist/host/engines/windows-sandbox/wsb-text.d.ts +2 -0
- package/dist/host/engines/windows-sandbox/wsb-text.js +29 -0
- package/dist/host/health/acl-read.d.ts +17 -0
- package/dist/host/health/acl-read.js +45 -0
- package/dist/host/health/config-backup.d.ts +11 -0
- package/dist/host/health/config-backup.js +73 -0
- package/dist/host/health/index.d.ts +6 -0
- package/dist/host/health/index.js +7 -0
- package/dist/host/health/install-state.d.ts +33 -0
- package/dist/host/health/install-state.js +110 -0
- package/dist/host/health/path-copies.d.ts +32 -0
- package/dist/host/health/path-copies.js +82 -0
- package/dist/host/health/stale.d.ts +45 -0
- package/dist/host/health/stale.js +120 -0
- package/dist/host/health/system.d.ts +37 -0
- package/dist/host/health/system.js +87 -0
- package/dist/host/install/copies.d.ts +13 -0
- package/dist/host/install/copies.js +63 -0
- package/dist/host/install/index.d.ts +1 -0
- package/dist/host/install/index.js +1 -0
- package/dist/host/launch/generate.d.ts +5 -1
- package/dist/host/launch/generate.js +73 -7
- package/dist/host/launch/index.d.ts +3 -1
- package/dist/host/launch/index.js +3 -1
- package/dist/host/launch/launch-plan.d.ts +13 -0
- package/dist/host/launch/launch-plan.js +26 -0
- package/dist/host/launch/mappings.js +2 -1
- package/dist/host/launch/risk-notes.d.ts +10 -0
- package/dist/host/launch/risk-notes.js +18 -0
- package/dist/host/launch/session-file.d.ts +2 -0
- package/dist/host/launch/session-file.js +11 -2
- package/dist/host/launch/stage.js +1 -1
- package/dist/host/launch/wsb-file.d.ts +28 -4
- package/dist/host/launch/wsb-file.js +61 -42
- package/dist/host/life/crash-report.d.ts +27 -1
- package/dist/host/life/crash-report.js +173 -7
- package/dist/host/life/host-memory.d.ts +40 -0
- package/dist/host/life/host-memory.js +137 -0
- package/dist/host/life/index.d.ts +2 -0
- package/dist/host/life/index.js +2 -0
- package/dist/host/life/stop-events.d.ts +2 -0
- package/dist/host/life/stop-events.js +20 -3
- package/dist/host/life/stop-warning.js +1 -1
- package/dist/host/life/watchdog.d.ts +54 -0
- package/dist/host/life/watchdog.js +108 -0
- package/dist/host/migrate/backup.js +3 -0
- package/dist/host/migrate/migrations/config-file.d.ts +2 -0
- package/dist/host/migrate/migrations/config-file.js +7 -0
- package/dist/host/migrate/migrations/follow-machine-storage.js +9 -1
- package/dist/host/migrate/migrations/pin-storage-root.d.ts +4 -0
- package/dist/host/migrate/migrations/pin-storage-root.js +46 -0
- package/dist/host/migrate/migrations/unpin-config-defaults.js +4 -1
- package/dist/host/migrate/registry.js +2 -1
- package/dist/host/native.d.ts +3 -2
- package/dist/host/native.js +22 -3
- package/dist/host/profile/accounts.d.ts +25 -1
- package/dist/host/profile/accounts.js +96 -13
- package/dist/host/profile/agent-accounts.d.ts +5 -1
- package/dist/host/profile/agent-accounts.js +35 -5
- package/dist/host/profile/claude-login.js +3 -2
- package/dist/host/profile/index.d.ts +2 -1
- package/dist/host/profile/index.js +1 -0
- package/dist/host/profile/plugin-share.d.ts +26 -0
- package/dist/host/profile/plugin-share.js +146 -0
- package/dist/host/projects/join.d.ts +7 -1
- package/dist/host/projects/join.js +21 -4
- package/dist/host/projects/registry.d.ts +16 -10
- package/dist/host/projects/registry.js +74 -6
- package/dist/host/sandbox/contained-deps.d.ts +2 -0
- package/dist/host/sandbox/contained-deps.js +17 -0
- package/dist/host/sandbox/index.d.ts +2 -0
- package/dist/host/sandbox/index.js +2 -0
- package/dist/host/sandbox/platform.d.ts +4 -0
- package/dist/host/sandbox/platform.js +23 -4
- package/dist/host/sandbox/tasklist.d.ts +13 -0
- package/dist/host/sandbox/tasklist.js +47 -0
- package/dist/host/secrets/index.d.ts +2 -0
- package/dist/host/secrets/index.js +2 -0
- package/dist/host/secrets/launch-secrets.d.ts +17 -0
- package/dist/host/secrets/launch-secrets.js +94 -0
- package/dist/host/secrets/secret-store.d.ts +25 -0
- package/dist/host/secrets/secret-store.js +89 -0
- package/dist/host/sharing/acl.d.ts +16 -2
- package/dist/host/sharing/acl.js +35 -10
- package/dist/host/sharing/current.js +8 -3
- package/dist/host/sharing/doctor.d.ts +2 -0
- package/dist/host/sharing/doctor.js +44 -0
- package/dist/host/sharing/group-access.d.ts +6 -0
- package/dist/host/sharing/group-access.js +24 -0
- package/dist/host/sharing/index.d.ts +2 -1
- package/dist/host/sharing/index.js +2 -1
- package/dist/host/sharing/lifecycle.d.ts +8 -2
- package/dist/host/sharing/lifecycle.js +16 -7
- package/dist/host/storage/cleanup.d.ts +2 -0
- package/dist/host/storage/cleanup.js +2 -1
- package/dist/host/storage/contained/check.d.ts +9 -0
- package/dist/host/storage/contained/check.js +37 -0
- package/dist/host/storage/contained/contained-storage.d.ts +66 -0
- package/dist/host/storage/contained/contained-storage.js +168 -0
- package/dist/host/storage/contained/disk-port.d.ts +43 -0
- package/dist/host/storage/contained/disk-port.js +122 -0
- package/dist/host/storage/contained/index.d.ts +9 -0
- package/dist/host/storage/contained/index.js +8 -0
- package/dist/host/storage/contained/layout.d.ts +28 -0
- package/dist/host/storage/contained/layout.js +45 -0
- package/dist/host/storage/contained/resolve.d.ts +4 -0
- package/dist/host/storage/contained/resolve.js +30 -0
- package/dist/host/storage/contained/setting.d.ts +1 -0
- package/dist/host/storage/contained/setting.js +5 -0
- package/dist/host/storage/contained/state.d.ts +89 -0
- package/dist/host/storage/contained/state.js +166 -0
- package/dist/host/storage/contained/transfer.d.ts +24 -0
- package/dist/host/storage/contained/transfer.js +121 -0
- package/dist/host/storage/history.d.ts +21 -0
- package/dist/host/storage/history.js +49 -0
- package/dist/host/storage/index.d.ts +6 -0
- package/dist/host/storage/index.js +6 -0
- package/dist/host/storage/move.d.ts +95 -0
- package/dist/host/storage/move.js +384 -0
- package/dist/host/storage/offer.d.ts +11 -0
- package/dist/host/storage/offer.js +36 -0
- package/dist/host/storage/providers/contained.d.ts +15 -0
- package/dist/host/storage/providers/contained.js +39 -0
- package/dist/host/storage/providers/folder.d.ts +12 -0
- package/dist/host/storage/providers/folder.js +20 -0
- package/dist/host/storage/providers/index.d.ts +4 -0
- package/dist/host/storage/providers/index.js +3 -0
- package/dist/host/storage/providers/registry.d.ts +9 -0
- package/dist/host/storage/providers/registry.js +14 -0
- package/dist/host/storage/providers/types.d.ts +33 -0
- package/dist/host/storage/providers/types.js +1 -0
- package/dist/host/storage/root.d.ts +18 -0
- package/dist/host/storage/root.js +77 -0
- package/dist/host/tools/conpty.js +3 -2
- package/dist/host/tools/windows-terminal.d.ts +2 -0
- package/dist/host/tools/windows-terminal.js +31 -12
- package/dist/host/update/index.d.ts +1 -1
- package/dist/host/update/index.js +1 -1
- package/dist/host/update/notice.d.ts +2 -0
- package/dist/host/update/notice.js +13 -1
- package/dist/host/update/update-state.d.ts +6 -0
- package/dist/host/update/update-state.js +2 -0
- package/dist/host/update/updater.d.ts +19 -0
- package/dist/host/update/updater.js +88 -12
- package/dist/host/vpn/index.d.ts +4 -0
- package/dist/host/vpn/index.js +4 -0
- package/dist/host/vpn/login.d.ts +24 -0
- package/dist/host/vpn/login.js +79 -0
- package/dist/host/vpn/nordvpn.d.ts +21 -0
- package/dist/host/vpn/nordvpn.js +77 -0
- package/dist/host/vpn/prepare.d.ts +19 -0
- package/dist/host/vpn/prepare.js +138 -0
- package/dist/host/vpn/status.d.ts +12 -0
- package/dist/host/vpn/status.js +53 -0
- package/dist/host/web/auth.d.ts +38 -0
- package/dist/host/web/auth.js +96 -0
- package/dist/host/web/backend.d.ts +14 -0
- package/dist/host/web/backend.js +1 -0
- package/dist/host/web/bridge.d.ts +27 -0
- package/dist/host/web/bridge.js +144 -0
- package/dist/host/web/browser.d.ts +3 -0
- package/dist/host/web/browser.js +23 -0
- package/dist/host/web/control.d.ts +17 -0
- package/dist/host/web/control.js +67 -0
- package/dist/host/web/index.d.ts +10 -0
- package/dist/host/web/index.js +9 -0
- package/dist/host/web/rpc.d.ts +24 -0
- package/dist/host/web/rpc.js +149 -0
- package/dist/host/web/runner.d.ts +16 -0
- package/dist/host/web/runner.js +44 -0
- package/dist/host/web/server.d.ts +47 -0
- package/dist/host/web/server.js +238 -0
- package/dist/host/web/state.d.ts +20 -0
- package/dist/host/web/state.js +41 -0
- package/dist/host/web/static-files.d.ts +13 -0
- package/dist/host/web/static-files.js +57 -0
- package/dist/runtime/agent.js +27675 -0
- package/dist/runtime/daemon.js +1950 -1122
- package/dist/runtime/db.js +302 -111
- package/dist/runtime/main.js +1560 -275
- package/dist/runtime/netproxy.js +168 -8
- package/dist/runtime/view.js +186 -13
- package/dist/selftest/accounts.test.js +40 -0
- package/dist/selftest/agent-paths.test.d.ts +2 -0
- package/dist/selftest/agent-paths.test.js +125 -0
- package/dist/selftest/app.test.d.ts +2 -0
- package/dist/selftest/app.test.js +324 -0
- package/dist/selftest/channel.test.js +18 -0
- package/dist/selftest/cli.test.js +35 -4
- package/dist/selftest/config.test.js +59 -0
- package/dist/selftest/contained.test.d.ts +2 -0
- package/dist/selftest/contained.test.js +544 -0
- package/dist/selftest/credentials.test.d.ts +2 -0
- package/dist/selftest/credentials.test.js +198 -0
- package/dist/selftest/engine.test.d.ts +2 -0
- package/dist/selftest/engine.test.js +127 -0
- package/dist/selftest/generate.test.js +1 -1
- package/dist/selftest/hcs.test.d.ts +2 -0
- package/dist/selftest/hcs.test.js +482 -0
- package/dist/selftest/health.test.d.ts +2 -0
- package/dist/selftest/health.test.js +470 -0
- package/dist/selftest/heavy-load.test.d.ts +2 -0
- package/dist/selftest/heavy-load.test.js +329 -0
- package/dist/selftest/host-sim.test.js +2 -0
- package/dist/selftest/index.js +31 -0
- package/dist/selftest/layout.test.js +14 -0
- package/dist/selftest/menu-perf.test.d.ts +2 -0
- package/dist/selftest/menu-perf.test.js +248 -0
- package/dist/selftest/menu-screens.d.ts +7 -0
- package/dist/selftest/menu-screens.js +68 -17
- package/dist/selftest/menu.test.js +603 -22
- package/dist/selftest/migrate.test.js +1 -1
- package/dist/selftest/personalization.test.js +3 -1
- package/dist/selftest/projects.test.js +39 -1
- package/dist/selftest/shared-use.test.js +64 -2
- package/dist/selftest/sharing.test.js +50 -1
- package/dist/selftest/storage.test.d.ts +2 -0
- package/dist/selftest/storage.test.js +363 -0
- package/dist/selftest/support/engine-cases.d.ts +8 -0
- package/dist/selftest/support/engine-cases.js +65 -0
- package/dist/selftest/support/engine-golden.d.ts +3 -0
- package/dist/selftest/support/engine-golden.js +66 -0
- package/dist/selftest/support/fixtures.d.ts +20 -0
- package/dist/selftest/support/hcs-probes.d.ts +17 -0
- package/dist/selftest/support/hcs-probes.js +41 -0
- package/dist/selftest/support/releases.js +1 -1
- package/dist/selftest/toolchains.test.js +21 -0
- package/dist/selftest/update-service.test.js +87 -3
- package/dist/selftest/vpn.test.d.ts +2 -0
- package/dist/selftest/vpn.test.js +412 -0
- package/dist/selftest/web.test.d.ts +2 -0
- package/dist/selftest/web.test.js +402 -0
- package/dist/shared/apps/catalogue.js +31 -0
- package/dist/shared/channel/index.d.ts +1 -0
- package/dist/shared/channel/index.js +1 -0
- package/dist/shared/channel/run-dir.d.ts +9 -1
- package/dist/shared/channel/run-dir.js +18 -1
- package/dist/shared/channel/schema.d.ts +53 -0
- package/dist/shared/channel/schema.js +38 -0
- package/dist/shared/channel/secrets.d.ts +29 -0
- package/dist/shared/channel/secrets.js +50 -0
- package/dist/shared/memory/index.d.ts +1 -0
- package/dist/shared/memory/index.js +1 -0
- package/dist/shared/memory/policy.d.ts +33 -0
- package/dist/shared/memory/policy.js +55 -0
- package/dist/shared/pty/output-filter.d.ts +14 -1
- package/dist/shared/pty/output-filter.js +22 -4
- package/dist/shared/pty/terminal.d.ts +4 -1
- package/dist/shared/pty/terminal.js +4 -2
- package/dist/shared/system.d.ts +1 -0
- package/dist/shared/system.js +1 -0
- package/dist/shared/vpn/download.d.ts +29 -0
- package/dist/shared/vpn/download.js +30 -0
- package/dist/shared/vpn/kill-switch.d.ts +18 -0
- package/dist/shared/vpn/kill-switch.js +81 -0
- package/dist/shared/vpn/ovpn.d.ts +23 -0
- package/dist/shared/vpn/ovpn.js +244 -0
- package/dist/shared/vpn/wireguard.d.ts +51 -0
- package/dist/shared/vpn/wireguard.js +227 -0
- package/dist/shared/web/index.d.ts +1 -0
- package/dist/shared/web/index.js +1 -0
- package/dist/shared/web/protocol.d.ts +61 -0
- package/dist/shared/web/protocol.js +35 -0
- package/dist/sync/sync-cycle.js +9 -5
- package/dist/sync/sync-state.d.ts +1 -0
- package/dist/sync/sync-state.js +1 -0
- package/dist/sync/watcher.d.ts +13 -0
- package/dist/sync/watcher.js +102 -3
- package/dist/web/index.html +14 -0
- package/dist/web/main-NRRS5O6Z.js +157 -0
- package/dist/web/main-T5DMCHYV.css +1 -0
- package/native/csharp/FolderSecurity.cs +29 -0
- package/native/csharp/HcsHost/AssemblyInfo.cs +14 -0
- package/native/csharp/HcsHost/Guard.cs +100 -0
- package/native/csharp/HcsHost/Hcs.cs +256 -0
- package/native/csharp/HcsHost/Json.cs +78 -0
- package/native/csharp/HcsHost/Program.cs +185 -0
- package/native/csharp/HcsHost/VirtualDisk.cs +95 -0
- package/native/csharp/HostTools/AssemblyInfo.cs +14 -0
- package/native/csharp/HostTools/MemoryStatus.cs +107 -0
- package/native/csharp/HostTools/Program.cs +58 -17
- package/native/scripts/check-contained.ps1 +28 -0
- package/native/scripts/contained-common.ps1 +241 -0
- package/native/scripts/dismount-contained.ps1 +66 -0
- package/native/scripts/memory-status.ps1 +34 -0
- package/native/scripts/mount-contained.ps1 +139 -0
- package/native/scripts/protect-data.ps1 +29 -0
- package/native/scripts/read-folder-sddl.ps1 +10 -0
- package/native/scripts/run-elevated.ps1 +17 -4
- package/native/scripts/set-folder-access.ps1 +49 -7
- package/native/scripts/stop-events.ps1 +23 -8
- package/node_modules/ws/LICENSE +20 -0
- package/node_modules/ws/README.md +548 -0
- package/node_modules/ws/browser.js +8 -0
- package/node_modules/ws/index.js +22 -0
- package/node_modules/ws/lib/buffer-util.js +131 -0
- package/node_modules/ws/lib/constants.js +19 -0
- package/node_modules/ws/lib/event-target.js +292 -0
- package/node_modules/ws/lib/extension.js +203 -0
- package/node_modules/ws/lib/limiter.js +55 -0
- package/node_modules/ws/lib/permessage-deflate.js +530 -0
- package/node_modules/ws/lib/receiver.js +743 -0
- package/node_modules/ws/lib/sender.js +607 -0
- package/node_modules/ws/lib/stream.js +161 -0
- package/node_modules/ws/lib/subprotocol.js +62 -0
- package/node_modules/ws/lib/validation.js +152 -0
- package/node_modules/ws/lib/websocket-server.js +562 -0
- package/node_modules/ws/lib/websocket.js +1421 -0
- package/node_modules/ws/package.json +74 -0
- package/node_modules/ws/wrapper.mjs +21 -0
- package/package.json +22 -5
- package/sandbox/csharp/EnvBroadcast.cs +33 -0
- package/sandbox/csharp/MemGov.cs +398 -0
- package/sandbox/csharp/PathSync.cs +90 -0
- package/sandbox/csharp/PtyHost.cs +111 -5
- package/sandbox/scripts/install-shell-path.ps1 +73 -0
- package/sandbox/scripts/set-machine-environment.ps1 +37 -4
- package/schemas/config.schema.json +136 -7
- package/schemas/sandbox-config.schema.json +17 -4
- package/dist/cli/commands/repair/checks.d.ts +0 -2
- package/dist/cli/commands/repair/checks.js +0 -246
- package/dist/cli/commands/sessions/control.d.ts +0 -4
- package/dist/cli/commands/sessions/control.js +0 -66
- package/dist/cli/commands/sessions/list.d.ts +0 -2
- package/dist/cli/commands/sessions/list.js +0 -45
- package/dist/cli/commands/sessions/status.d.ts +0 -2
- package/dist/cli/commands/sessions/status.js +0 -93
- package/dist/cli/commands/sessions/window.d.ts +0 -3
- package/dist/cli/commands/sessions/window.js +0 -18
- package/dist/cli/menu/pages/start-page.d.ts +0 -43
- package/dist/cli/menu/pages/start-page.js +0 -192
- package/dist/cli/tui/tab-bar.d.ts +0 -9
- package/dist/cli/tui/tab-bar.js +0 -33
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
// The engine behind doctor and repair: runs the checks in order (grouped), each with its own time limit, tells a hook
|
|
2
|
+
// as each one starts and ends, then applies the fixes you agreed to and looks again to see they worked. Never prints.
|
|
3
|
+
import { errMsg, UserError } from '../../../core/util/index.js';
|
|
4
|
+
import { CHECK_GROUPS, WHILE_RUNNING, } from './types.js';
|
|
5
|
+
export const DEFAULT_TIMEOUT_MS = 20_000;
|
|
6
|
+
export const FIX_TIMEOUT_MS = 120_000;
|
|
7
|
+
class TimedOut extends Error {
|
|
8
|
+
}
|
|
9
|
+
/** Resolves with `work`, or rejects with TimedOut after `ms` (a check that blocks the process cannot be stopped). */
|
|
10
|
+
export function withTimeout(work, ms) {
|
|
11
|
+
return new Promise((resolve, reject) => {
|
|
12
|
+
const timer = setTimeout(() => reject(new TimedOut()), ms);
|
|
13
|
+
Promise.resolve()
|
|
14
|
+
.then(work)
|
|
15
|
+
.then((value) => {
|
|
16
|
+
clearTimeout(timer);
|
|
17
|
+
resolve(value);
|
|
18
|
+
}, (e) => {
|
|
19
|
+
clearTimeout(timer);
|
|
20
|
+
reject(e instanceof Error ? e : new Error(String(e)));
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
/** The checks in the order they are shown: by group, then as listed. */
|
|
25
|
+
export function inGroupOrder(checks) {
|
|
26
|
+
return [...checks].sort((a, b) => CHECK_GROUPS.indexOf(a.group) - CHECK_GROUPS.indexOf(b.group));
|
|
27
|
+
}
|
|
28
|
+
export function summarize(results) {
|
|
29
|
+
const count = (status) => results.filter((r) => r.status === status).length;
|
|
30
|
+
return {
|
|
31
|
+
total: results.length,
|
|
32
|
+
ok: count('ok'),
|
|
33
|
+
fixed: count('fixed'),
|
|
34
|
+
warn: count('warn'),
|
|
35
|
+
needsYou: count('needs-you'),
|
|
36
|
+
skipped: count('skipped'),
|
|
37
|
+
fixable: results.filter((r) => r.fixable && r.status !== 'fixed').length,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
const withUserFix = (e) => errMsg(e) + (e instanceof UserError && e.fix ? ' ' + e.fix : '');
|
|
41
|
+
export class HealthRun {
|
|
42
|
+
env;
|
|
43
|
+
hooks;
|
|
44
|
+
limits;
|
|
45
|
+
findings = new Map();
|
|
46
|
+
checks;
|
|
47
|
+
constructor(checks, env, hooks = {}, limits = {}) {
|
|
48
|
+
this.env = env;
|
|
49
|
+
this.hooks = hooks;
|
|
50
|
+
this.limits = limits;
|
|
51
|
+
this.checks = inGroupOrder(checks);
|
|
52
|
+
}
|
|
53
|
+
/** Runs every check without changing anything. */
|
|
54
|
+
async look() {
|
|
55
|
+
const results = [];
|
|
56
|
+
for (const check of this.checks) {
|
|
57
|
+
if (check.applies && !check.applies(this.env))
|
|
58
|
+
continue;
|
|
59
|
+
this.hooks.lookStart?.(check);
|
|
60
|
+
const result = await this.lookAt(check);
|
|
61
|
+
results.push(result);
|
|
62
|
+
this.hooks.lookEnd?.(result);
|
|
63
|
+
}
|
|
64
|
+
return results;
|
|
65
|
+
}
|
|
66
|
+
/** Applies the fix of every result repair can mend (or only those in `only`), then looks again. */
|
|
67
|
+
async fix(results, only) {
|
|
68
|
+
const out = [];
|
|
69
|
+
for (const result of results) {
|
|
70
|
+
const check = this.checks.find((c) => c.id === result.id);
|
|
71
|
+
const finding = this.findings.get(result.id);
|
|
72
|
+
if (!check?.fix || !finding || !result.fixable || (only && !only.includes(result.id))) {
|
|
73
|
+
out.push(result);
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
this.hooks.fixStart?.(result);
|
|
77
|
+
const after = await this.fixOne(check, finding, result);
|
|
78
|
+
out.push(after);
|
|
79
|
+
this.hooks.fixEnd?.(after);
|
|
80
|
+
}
|
|
81
|
+
return out;
|
|
82
|
+
}
|
|
83
|
+
async lookAt(check) {
|
|
84
|
+
const started = Date.now();
|
|
85
|
+
const base = { id: check.id, group: check.group, name: check.name };
|
|
86
|
+
if (check.needsIdle === 'look' && this.env.running)
|
|
87
|
+
return { ...base, status: 'skipped', detail: WHILE_RUNNING, fixable: false, ms: 0 };
|
|
88
|
+
let finding;
|
|
89
|
+
try {
|
|
90
|
+
finding = await withTimeout(() => check.run(this.env), check.timeoutMs ?? this.limits.lookMs ?? DEFAULT_TIMEOUT_MS);
|
|
91
|
+
}
|
|
92
|
+
catch (e) {
|
|
93
|
+
const ms = Date.now() - started;
|
|
94
|
+
if (e instanceof TimedOut)
|
|
95
|
+
return { ...base, status: 'skipped', detail: 'took too long, skipped', timedOut: true, fixable: false, ms };
|
|
96
|
+
return { ...base, status: 'needs-you', detail: 'the check failed: ' + withUserFix(e), fixable: false, ms };
|
|
97
|
+
}
|
|
98
|
+
this.findings.set(check.id, finding);
|
|
99
|
+
return {
|
|
100
|
+
...base,
|
|
101
|
+
status: finding.status,
|
|
102
|
+
detail: finding.detail,
|
|
103
|
+
means: finding.means,
|
|
104
|
+
fix: finding.fix,
|
|
105
|
+
plan: finding.plan,
|
|
106
|
+
lines: finding.lines,
|
|
107
|
+
fixable: Boolean(check.fix && finding.plan && finding.status !== 'ok'),
|
|
108
|
+
ms: Date.now() - started,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
async fixOne(check, finding, result) {
|
|
112
|
+
if (check.needsIdle && this.env.running)
|
|
113
|
+
return { ...result, status: 'skipped', detail: WHILE_RUNNING, fixable: false };
|
|
114
|
+
try {
|
|
115
|
+
const outcome = await withTimeout(() => check.fix?.(this.env, finding) ?? { done: '' }, this.limits.fixMs ?? FIX_TIMEOUT_MS);
|
|
116
|
+
const again = await this.lookAt(check);
|
|
117
|
+
const applied = { done: outcome.done, before: result.detail, after: again.detail };
|
|
118
|
+
if (again.status === 'ok')
|
|
119
|
+
return { ...again, status: 'fixed', detail: outcome.done, fixable: false, applied };
|
|
120
|
+
return { ...again, fixable: false, applied, error: 'it is still not right after the fix' };
|
|
121
|
+
}
|
|
122
|
+
catch (e) {
|
|
123
|
+
const why = e instanceof TimedOut ? 'took too long' : withUserFix(e);
|
|
124
|
+
return { ...result, status: 'needs-you', error: why, fixable: false, detail: result.detail };
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { UserError } from '../../../core/util/index.js';
|
|
2
|
+
import { type SystemProbe } from '../../../host/health/index.js';
|
|
3
|
+
import type { Context } from '../context.js';
|
|
4
|
+
import type { RepairEnv } from './types.js';
|
|
5
|
+
/** The settings file in use: --config, AGENT_SANDBOX_CONFIG, else the user's config.json. */
|
|
6
|
+
export declare function configFileOf(ctx: Context): string;
|
|
7
|
+
export declare function buildEnv(ctx: Context, configError?: UserError | null, system?: SystemProbe): RepairEnv;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
// Builds what the checks read (RepairEnv) for the real PC from the command's context. Tests build their own.
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { loadConfig, machineRoot, userConfigPath, userDir } from '../../../core/config/index.js';
|
|
4
|
+
import { UserError } from '../../../core/util/index.js';
|
|
5
|
+
import { WindowsProbe } from '../../../host/health/index.js';
|
|
6
|
+
import { InstallLayout, InstallRecordFile } from '../../../host/install/index.js';
|
|
7
|
+
import { MIGRATIONS } from '../../../host/migrate/index.js';
|
|
8
|
+
import { isSandboxRunning } from '../../../host/sandbox/index.js';
|
|
9
|
+
import { hostDataFolder } from '../../../host/storage/index.js';
|
|
10
|
+
import { gatherFacts } from '../setup/facts.js';
|
|
11
|
+
/** The settings file in use: --config, AGENT_SANDBOX_CONFIG, else the user's config.json. */
|
|
12
|
+
export function configFileOf(ctx) {
|
|
13
|
+
return path.resolve(ctx.options.config ?? process.env.AGENT_SANDBOX_CONFIG ?? userConfigPath());
|
|
14
|
+
}
|
|
15
|
+
/** The settings problem to report: the one the context was made without, or a fresh one (the file may have changed). */
|
|
16
|
+
function configProblem(ctx, known) {
|
|
17
|
+
if (known)
|
|
18
|
+
return known;
|
|
19
|
+
try {
|
|
20
|
+
loadConfig(ctx.options.config);
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
catch (e) {
|
|
24
|
+
if (e instanceof UserError)
|
|
25
|
+
return e;
|
|
26
|
+
throw e;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
export function buildEnv(ctx, configError = null, system = new WindowsProbe()) {
|
|
30
|
+
const layout = InstallLayout.detect(ctx.packageRoot);
|
|
31
|
+
let facts = null;
|
|
32
|
+
return {
|
|
33
|
+
ctx,
|
|
34
|
+
running: isSandboxRunning(),
|
|
35
|
+
dataPath: ctx.dataPath,
|
|
36
|
+
storageRoot: ctx.storageRoot,
|
|
37
|
+
toolsDir: hostDataFolder(ctx.dataPath, 'tools'),
|
|
38
|
+
configError: configProblem(ctx, configError),
|
|
39
|
+
layout,
|
|
40
|
+
record: layout ? new InstallRecordFile(layout.root).read() : null,
|
|
41
|
+
machineHome: machineRoot(),
|
|
42
|
+
userDir: userDir(),
|
|
43
|
+
configFile: configFileOf(ctx),
|
|
44
|
+
migrations: MIGRATIONS,
|
|
45
|
+
userInstallRoot: process.env.LOCALAPPDATA ? path.join(process.env.LOCALAPPDATA, 'WindowsDevelopmentSandbox') : null,
|
|
46
|
+
system,
|
|
47
|
+
now: Date.now,
|
|
48
|
+
facts: () => (facts ??= gatherFacts(ctx.storageRoot)),
|
|
49
|
+
};
|
|
50
|
+
}
|
|
@@ -1,9 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import type { CliOptions } from '../../args.js';
|
|
3
|
-
import { type Context } from '../context.js';
|
|
4
|
-
export declare function repair(ctx: Context, configError?: UserError | null): number;
|
|
5
|
-
/**
|
|
6
|
-
* Entry point that works even when the config file is broken (createContext would throw): falls back to the built-in
|
|
7
|
-
* defaults so the other checks still run, and reports the config problem as the first check.
|
|
8
|
-
*/
|
|
9
|
-
export declare function repairCommand(packageRoot: string, entry: string, options: CliOptions): number;
|
|
1
|
+
export { repairCommand, runDoctor, runRepair } from './run.js';
|
|
@@ -1,54 +1,2 @@
|
|
|
1
|
-
// `sandbox
|
|
2
|
-
|
|
3
|
-
// sandbox is running.
|
|
4
|
-
import path from 'node:path';
|
|
5
|
-
import _ from 'lodash';
|
|
6
|
-
import { DEFAULTS, userDir } from '../../../core/config/index.js';
|
|
7
|
-
import { expandPath, UserError } from '../../../core/util/index.js';
|
|
8
|
-
import { createContext } from '../context.js';
|
|
9
|
-
import { printJson, table } from '../../output/index.js';
|
|
10
|
-
import { HealthService } from '../../services/index.js';
|
|
11
|
-
const LABEL = {
|
|
12
|
-
ok: 'OK',
|
|
13
|
-
fixed: 'FIXED',
|
|
14
|
-
'needs-you': 'NEEDS YOU',
|
|
15
|
-
warn: 'WARNING',
|
|
16
|
-
skipped: 'SKIPPED',
|
|
17
|
-
};
|
|
18
|
-
export function repair(ctx, configError = null) {
|
|
19
|
-
const results = new HealthService(ctx).repair(configError);
|
|
20
|
-
if (printJson(ctx, results))
|
|
21
|
-
return results.some((r) => r.status === 'needs-you') ? 1 : 0;
|
|
22
|
-
table(results.map((r) => [LABEL[r.status], r.name, r.detail]));
|
|
23
|
-
const counts = _.countBy(results, 'status');
|
|
24
|
-
console.log('\n' +
|
|
25
|
-
(counts['needs-you']
|
|
26
|
-
? counts['needs-you'] + ' thing(s) need you (see NEEDS YOU above).'
|
|
27
|
-
: 'All good' + (counts.fixed ? ': fixed ' + counts.fixed + ' problem(s).' : '.')));
|
|
28
|
-
return counts['needs-you'] ? 1 : 0;
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Entry point that works even when the config file is broken (createContext would throw): falls back to the built-in
|
|
32
|
-
* defaults so the other checks still run, and reports the config problem as the first check.
|
|
33
|
-
*/
|
|
34
|
-
export function repairCommand(packageRoot, entry, options) {
|
|
35
|
-
let ctx;
|
|
36
|
-
try {
|
|
37
|
-
ctx = createContext(packageRoot, entry, options);
|
|
38
|
-
}
|
|
39
|
-
catch (e) {
|
|
40
|
-
if (!(e instanceof UserError))
|
|
41
|
-
throw e;
|
|
42
|
-
const loaded = { config: structuredClone(DEFAULTS), configPath: null, base: userDir() };
|
|
43
|
-
const storageRoot = expandPath(loaded.config.storage.root, loaded.base);
|
|
44
|
-
return repair({
|
|
45
|
-
packageRoot,
|
|
46
|
-
entry,
|
|
47
|
-
options,
|
|
48
|
-
loaded,
|
|
49
|
-
storageRoot,
|
|
50
|
-
dataPath: path.join(storageRoot, 'data', loaded.config.storage.dataName),
|
|
51
|
-
}, e);
|
|
52
|
-
}
|
|
53
|
-
return repair(ctx);
|
|
54
|
-
}
|
|
1
|
+
// `sandbox doctor` and `sandbox repair`: one engine, checks by group, live output, fixes after a yes, a repair log.
|
|
2
|
+
export { repairCommand, runDoctor, runRepair } from './run.js';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { CheckResult, Summary } from './types.js';
|
|
2
|
+
/** repair-20261015-093012.log */
|
|
3
|
+
export declare function logName(when: Date): string;
|
|
4
|
+
/** The log's text. `found` is what the first look saw; `final` what is true after the fixes (same list if none). */
|
|
5
|
+
export declare function logText(o: {
|
|
6
|
+
when: Date;
|
|
7
|
+
version: string;
|
|
8
|
+
command: string;
|
|
9
|
+
found: readonly CheckResult[];
|
|
10
|
+
final: readonly CheckResult[];
|
|
11
|
+
summary: Summary;
|
|
12
|
+
}): string;
|
|
13
|
+
/**
|
|
14
|
+
* Writes the log in <storage>\logs and returns its path, or null when the storage folder does not exist (nothing to
|
|
15
|
+
* keep a log in) or is not safe to write in. Text from the sandbox is cleaned first.
|
|
16
|
+
*/
|
|
17
|
+
export declare function writeRepairLog(storageRoot: string, text: string, when: Date): string | null;
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
// The repair log: what was found, what was changed, and what each check said before and after. One text file per run in
|
|
2
|
+
// <storage>\logs, so there is a record of exactly what repair did to this PC.
|
|
3
|
+
import fs from 'node:fs';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import { assertNoLinks, dirExists } from '../../../core/util/index.js';
|
|
6
|
+
import { safeText } from '../../../core/util/index.js';
|
|
7
|
+
import { assertTestWritable } from '../../../host/test-guard.js';
|
|
8
|
+
const two = (n) => String(n).padStart(2, '0');
|
|
9
|
+
/** repair-20261015-093012.log */
|
|
10
|
+
export function logName(when) {
|
|
11
|
+
return ('repair-' +
|
|
12
|
+
when.getFullYear() +
|
|
13
|
+
two(when.getMonth() + 1) +
|
|
14
|
+
two(when.getDate()) +
|
|
15
|
+
'-' +
|
|
16
|
+
two(when.getHours()) +
|
|
17
|
+
two(when.getMinutes()) +
|
|
18
|
+
two(when.getSeconds()) +
|
|
19
|
+
'.log');
|
|
20
|
+
}
|
|
21
|
+
/** The log's text. `found` is what the first look saw; `final` what is true after the fixes (same list if none). */
|
|
22
|
+
export function logText(o) {
|
|
23
|
+
const lines = [
|
|
24
|
+
'Repair log ' + o.when.toISOString(),
|
|
25
|
+
'Version ' + o.version + ', command: ' + o.command,
|
|
26
|
+
'',
|
|
27
|
+
'Found:',
|
|
28
|
+
];
|
|
29
|
+
for (const r of o.found)
|
|
30
|
+
lines.push(' [' +
|
|
31
|
+
r.status +
|
|
32
|
+
'] ' +
|
|
33
|
+
r.group +
|
|
34
|
+
' / ' +
|
|
35
|
+
r.name +
|
|
36
|
+
': ' +
|
|
37
|
+
r.detail +
|
|
38
|
+
(r.plan ? ' (can fix: ' + r.plan + ')' : ''));
|
|
39
|
+
const changed = o.final.filter((r) => r.applied || r.error);
|
|
40
|
+
lines.push('', changed.length ? 'Changed:' : 'Nothing was changed.');
|
|
41
|
+
for (const r of changed) {
|
|
42
|
+
lines.push(' ' + r.name + ':');
|
|
43
|
+
if (r.applied)
|
|
44
|
+
lines.push(' changed: ' + r.applied.done, ' before: ' + r.applied.before, ' after: ' + r.applied.after);
|
|
45
|
+
if (r.error)
|
|
46
|
+
lines.push(' problem: ' + r.error);
|
|
47
|
+
}
|
|
48
|
+
const s = o.summary;
|
|
49
|
+
lines.push('', 'Result: ' +
|
|
50
|
+
s.ok +
|
|
51
|
+
' ok, ' +
|
|
52
|
+
s.fixed +
|
|
53
|
+
' fixed, ' +
|
|
54
|
+
s.warn +
|
|
55
|
+
' warnings, ' +
|
|
56
|
+
s.needsYou +
|
|
57
|
+
' need you, ' +
|
|
58
|
+
s.skipped +
|
|
59
|
+
' skipped', '');
|
|
60
|
+
return lines.join('\n');
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Writes the log in <storage>\logs and returns its path, or null when the storage folder does not exist (nothing to
|
|
64
|
+
* keep a log in) or is not safe to write in. Text from the sandbox is cleaned first.
|
|
65
|
+
*/
|
|
66
|
+
export function writeRepairLog(storageRoot, text, when) {
|
|
67
|
+
if (!dirExists(storageRoot))
|
|
68
|
+
return null;
|
|
69
|
+
const dir = path.join(storageRoot, 'logs');
|
|
70
|
+
const file = path.join(dir, logName(when));
|
|
71
|
+
try {
|
|
72
|
+
assertNoLinks(storageRoot, dir);
|
|
73
|
+
assertTestWritable(file);
|
|
74
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
75
|
+
fs.writeFileSync(file, safeText(text), 'utf8');
|
|
76
|
+
return file;
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
// A log that cannot be written must not undo or hide the repair itself; the caller says there is no log.
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { CheckResult, Summary } from './types.js';
|
|
2
|
+
import type { RunHooks } from './engine.js';
|
|
3
|
+
/** Where text goes (the terminal; a test collects it). */
|
|
4
|
+
export interface Out {
|
|
5
|
+
write(text: string): void;
|
|
6
|
+
}
|
|
7
|
+
/** "12 ok, 2 fixed, 1 needs you": the parts that are zero are left out (except ok). */
|
|
8
|
+
export declare function summaryText(s: Summary): string;
|
|
9
|
+
export declare class HealthPrinter {
|
|
10
|
+
private readonly out;
|
|
11
|
+
/** Redraw lines in place (a terminal); otherwise each result is one finished line. */
|
|
12
|
+
private readonly animate;
|
|
13
|
+
private group;
|
|
14
|
+
private live;
|
|
15
|
+
constructor(out: Out,
|
|
16
|
+
/** Redraw lines in place (a terminal); otherwise each result is one finished line. */
|
|
17
|
+
animate?: boolean);
|
|
18
|
+
private glyph;
|
|
19
|
+
private clearLive;
|
|
20
|
+
private heading;
|
|
21
|
+
title(text: string): void;
|
|
22
|
+
/** Hooks for HealthRun: print as the checks run (and, for repair, as the fixes are applied). */
|
|
23
|
+
hooks(): RunHooks;
|
|
24
|
+
/** One result: the line, then what it means and what to do when it is not ok. */
|
|
25
|
+
result(r: CheckResult): void;
|
|
26
|
+
/** What a fix did, on the line it started. */
|
|
27
|
+
private fixed;
|
|
28
|
+
/** What repair will change, listed before it asks. */
|
|
29
|
+
plan(fixable: readonly CheckResult[]): void;
|
|
30
|
+
summary(results: readonly CheckResult[], s: Summary): void;
|
|
31
|
+
line(text: string): void;
|
|
32
|
+
}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
// How doctor and repair look: headings per group, one line per result as it finishes (a "Checking ..." line while it
|
|
2
|
+
// runs on a terminal), "What it means" and "Fix" under what is not ok, and the summary. The engine's only printing.
|
|
3
|
+
import { c, canAnimate } from '../../output/index.js';
|
|
4
|
+
const GLYPH = {
|
|
5
|
+
ok: { tty: '✔', plain: '[ok]', paint: c.green },
|
|
6
|
+
fixed: { tty: '✔', plain: '[fixed]', paint: c.cyan },
|
|
7
|
+
warn: { tty: '!', plain: '[!]', paint: c.yellow },
|
|
8
|
+
'needs-you': { tty: '✘', plain: '[x]', paint: c.red },
|
|
9
|
+
skipped: { tty: '–', plain: '[-]', paint: c.dim },
|
|
10
|
+
};
|
|
11
|
+
const MAX_LINES = 6;
|
|
12
|
+
/** "12 ok, 2 fixed, 1 needs you": the parts that are zero are left out (except ok). */
|
|
13
|
+
export function summaryText(s) {
|
|
14
|
+
const parts = [
|
|
15
|
+
s.ok + ' ok',
|
|
16
|
+
s.fixed && s.fixed + ' fixed',
|
|
17
|
+
s.needsYou && s.needsYou + ' ' + (s.needsYou === 1 ? 'needs' : 'need') + ' you',
|
|
18
|
+
s.warn && s.warn + (s.warn === 1 ? ' warning' : ' warnings'),
|
|
19
|
+
s.skipped && s.skipped + ' skipped',
|
|
20
|
+
];
|
|
21
|
+
return parts.filter(Boolean).join(', ');
|
|
22
|
+
}
|
|
23
|
+
export class HealthPrinter {
|
|
24
|
+
out;
|
|
25
|
+
animate;
|
|
26
|
+
group = null;
|
|
27
|
+
live = false;
|
|
28
|
+
constructor(out,
|
|
29
|
+
/** Redraw lines in place (a terminal); otherwise each result is one finished line. */
|
|
30
|
+
animate = canAnimate(process.env, Boolean(process.stdout.isTTY))) {
|
|
31
|
+
this.out = out;
|
|
32
|
+
this.animate = animate;
|
|
33
|
+
}
|
|
34
|
+
glyph(status) {
|
|
35
|
+
const g = GLYPH[status];
|
|
36
|
+
return g.paint(this.animate ? g.tty : g.plain);
|
|
37
|
+
}
|
|
38
|
+
clearLive() {
|
|
39
|
+
if (this.live)
|
|
40
|
+
this.out.write('\r\x1b[2K');
|
|
41
|
+
this.live = false;
|
|
42
|
+
}
|
|
43
|
+
heading(group) {
|
|
44
|
+
if (group === this.group)
|
|
45
|
+
return;
|
|
46
|
+
this.group = group;
|
|
47
|
+
this.out.write('\n' + c.bold(group) + '\n');
|
|
48
|
+
}
|
|
49
|
+
title(text) {
|
|
50
|
+
this.out.write(c.bold(text) + '\n');
|
|
51
|
+
}
|
|
52
|
+
/** Hooks for HealthRun: print as the checks run (and, for repair, as the fixes are applied). */
|
|
53
|
+
hooks() {
|
|
54
|
+
return {
|
|
55
|
+
lookStart: (check) => {
|
|
56
|
+
this.heading(check.group);
|
|
57
|
+
if (!this.animate)
|
|
58
|
+
return;
|
|
59
|
+
this.live = true;
|
|
60
|
+
this.out.write(' ' + c.dim('… Checking ' + (check.checking ?? check.name.toLowerCase()) + '…'));
|
|
61
|
+
},
|
|
62
|
+
lookEnd: (result) => {
|
|
63
|
+
this.clearLive();
|
|
64
|
+
this.result(result);
|
|
65
|
+
},
|
|
66
|
+
fixStart: (result) => {
|
|
67
|
+
this.heading(result.group);
|
|
68
|
+
if (!this.animate)
|
|
69
|
+
return;
|
|
70
|
+
this.live = true;
|
|
71
|
+
this.out.write(' ' + c.dim('… Fixing: ' + (result.plan ?? result.name) + '…'));
|
|
72
|
+
},
|
|
73
|
+
fixEnd: (result) => {
|
|
74
|
+
this.clearLive();
|
|
75
|
+
this.fixed(result);
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
/** One result: the line, then what it means and what to do when it is not ok. */
|
|
80
|
+
result(r) {
|
|
81
|
+
this.heading(r.group);
|
|
82
|
+
const note = r.timedOut ? ' (took too long)' : '';
|
|
83
|
+
this.out.write(' ' + this.glyph(r.status) + ' ' + c.bold(r.name) + ': ' + r.detail + note + '\n');
|
|
84
|
+
if (r.status === 'ok')
|
|
85
|
+
return;
|
|
86
|
+
if (r.means)
|
|
87
|
+
this.out.write(' What it means: ' + r.means + '\n');
|
|
88
|
+
if (r.fixable && r.plan)
|
|
89
|
+
this.out.write(' Fix: sandbox repair will ' + r.plan + '\n');
|
|
90
|
+
else if (r.fix)
|
|
91
|
+
this.out.write(' Fix: ' + r.fix + '\n');
|
|
92
|
+
for (const line of (r.lines ?? []).slice(0, MAX_LINES))
|
|
93
|
+
this.out.write(' ' + line + '\n');
|
|
94
|
+
if ((r.lines?.length ?? 0) > MAX_LINES)
|
|
95
|
+
this.out.write(' ... and ' + (r.lines.length - MAX_LINES) + ' more\n');
|
|
96
|
+
}
|
|
97
|
+
/** What a fix did, on the line it started. */
|
|
98
|
+
fixed(r) {
|
|
99
|
+
this.heading(r.group);
|
|
100
|
+
if (r.status === 'fixed') {
|
|
101
|
+
this.out.write(' ' + this.glyph('fixed') + ' ' + c.bold(r.name) + ': ' + (r.applied?.done ?? r.detail) + '\n');
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
const prefix = ' ' + this.glyph('needs-you') + ' ' + c.bold(r.name) + ': ';
|
|
105
|
+
this.out.write(prefix + 'the fix did not work' + (r.error ? ' (' + r.error + ')' : '') + '\n');
|
|
106
|
+
if (r.fix)
|
|
107
|
+
this.out.write(' Fix: ' + r.fix + '\n');
|
|
108
|
+
}
|
|
109
|
+
/** What repair will change, listed before it asks. */
|
|
110
|
+
plan(fixable) {
|
|
111
|
+
this.out.write('\n' + c.bold('Repair will change:') + '\n');
|
|
112
|
+
fixable.forEach((r, i) => {
|
|
113
|
+
this.out.write(' ' + (i + 1) + '. ' + r.name + ': ' + (r.plan ?? r.detail) + '\n');
|
|
114
|
+
for (const line of (r.lines ?? []).slice(0, MAX_LINES))
|
|
115
|
+
this.out.write(' ' + line + '\n');
|
|
116
|
+
});
|
|
117
|
+
this.out.write('Nothing is deleted except leftovers; your settings, logins and projects are never removed.\n');
|
|
118
|
+
}
|
|
119
|
+
summary(results, s) {
|
|
120
|
+
this.clearLive();
|
|
121
|
+
this.out.write('\n' + c.bold('Summary') + ': ' + summaryText(s) + '\n');
|
|
122
|
+
const left = results.filter((r) => r.status === 'needs-you');
|
|
123
|
+
if (left.length) {
|
|
124
|
+
this.out.write('\n' + c.bold('Still needs you:') + '\n');
|
|
125
|
+
for (const r of left)
|
|
126
|
+
this.out.write(' - ' + r.name + ': ' + (r.fix ?? r.detail) + '\n');
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
line(text) {
|
|
130
|
+
this.out.write(text + '\n');
|
|
131
|
+
}
|
|
132
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { UserError } from '../../../core/util/index.js';
|
|
2
|
+
import type { CliOptions } from '../../args.js';
|
|
3
|
+
import { type Context } from '../context.js';
|
|
4
|
+
import { HealthPrinter } from './printer.js';
|
|
5
|
+
import type { Check, CheckResult, RepairEnv, Summary } from './types.js';
|
|
6
|
+
/** What both commands find, and what they do about it. */
|
|
7
|
+
export interface HealthReport {
|
|
8
|
+
readonly found: CheckResult[];
|
|
9
|
+
readonly final: CheckResult[];
|
|
10
|
+
readonly summary: Summary;
|
|
11
|
+
/** Fixes were applied. */
|
|
12
|
+
readonly changed: boolean;
|
|
13
|
+
}
|
|
14
|
+
interface Plan {
|
|
15
|
+
/** Fix without asking. */
|
|
16
|
+
readonly yes: boolean;
|
|
17
|
+
/** May ask (a terminal, and not --json). */
|
|
18
|
+
readonly ask: boolean;
|
|
19
|
+
/** The question asked after the list of what will change. */
|
|
20
|
+
readonly question: (n: number) => string;
|
|
21
|
+
}
|
|
22
|
+
/** Runs the checks, then (when allowed) the fixes. `printer` is null for --json. */
|
|
23
|
+
export declare function runHealth(env: RepairEnv, printer: HealthPrinter | null, plan: Plan, checks?: readonly Check[], confirmFix?: (question: string) => Promise<boolean>): Promise<HealthReport>;
|
|
24
|
+
/** `sandbox doctor` */
|
|
25
|
+
export declare function runDoctor(ctx: Context): Promise<number>;
|
|
26
|
+
/** `sandbox repair` for a loaded context. */
|
|
27
|
+
export declare function runRepair(ctx: Context, configError?: UserError | null): Promise<number>;
|
|
28
|
+
/**
|
|
29
|
+
* Entry point that works even when the config file is broken (createContext would throw): falls back to the built-in
|
|
30
|
+
* defaults so the other checks still run, and reports the settings problem as a check of its own.
|
|
31
|
+
*/
|
|
32
|
+
export declare function repairCommand(packageRoot: string, entry: string, options: CliOptions): Promise<number>;
|
|
33
|
+
export {};
|