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
|
@@ -12,12 +12,17 @@ const StopEventsSchema = z
|
|
|
12
12
|
provider: z.string().max(200),
|
|
13
13
|
process: z
|
|
14
14
|
.string()
|
|
15
|
-
.max(
|
|
15
|
+
.max(1600)
|
|
16
16
|
.nullable()
|
|
17
17
|
.transform((p) => p ?? ''),
|
|
18
18
|
}))
|
|
19
19
|
.max(100);
|
|
20
20
|
const UPDATERS = /^(trustedinstaller|mousocoreworker|musnotification(ux)?|usoclient|wuauclt|tiworker|updateorchestrator)\.exe$/i;
|
|
21
|
+
/** The stop code in Kernel-Power 41's detail ("BugcheckCode 209" -> "0xD1"); null for 0 (no blue screen). */
|
|
22
|
+
export function bugcheckCode(detail) {
|
|
23
|
+
const n = Number(/BugcheckCode\s+(\d+)/.exec(detail)?.[1] ?? 0);
|
|
24
|
+
return n > 0 ? '0x' + n.toString(16).toUpperCase() : null;
|
|
25
|
+
}
|
|
21
26
|
/**
|
|
22
27
|
* The first event that ends a running sandbox (pure): Windows inside the sandbox crashing (Hyper-V 18590; `process`
|
|
23
28
|
* holds its message with the stop code), a restart or shutdown, a crash or power loss, sleep, low memory. Switching
|
|
@@ -41,12 +46,24 @@ export function explainStop(events) {
|
|
|
41
46
|
},
|
|
42
47
|
];
|
|
43
48
|
}
|
|
44
|
-
if (
|
|
49
|
+
if (e.id === 41 && p.includes('kernel-power')) {
|
|
50
|
+
const code = bugcheckCode(e.process);
|
|
51
|
+
return [
|
|
52
|
+
{
|
|
53
|
+
kind: 'crash',
|
|
54
|
+
at: e.at,
|
|
55
|
+
text: code
|
|
56
|
+
? 'this PC blue-screened (stop code ' + code + ')'
|
|
57
|
+
: 'Windows stopped unexpectedly (a freeze, a crash, a power cut, or the power button held down)',
|
|
58
|
+
},
|
|
59
|
+
];
|
|
60
|
+
}
|
|
61
|
+
if (e.id === 6008 && p.includes('eventlog'))
|
|
45
62
|
return [
|
|
46
63
|
{
|
|
47
64
|
kind: 'crash',
|
|
48
65
|
at: e.at,
|
|
49
|
-
text: 'Windows stopped unexpectedly (a crash, a power cut, or the power button held down)',
|
|
66
|
+
text: 'Windows stopped unexpectedly (a freeze, a crash, a power cut, or the power button held down)',
|
|
50
67
|
},
|
|
51
68
|
];
|
|
52
69
|
if (e.id === 42 && p.includes('kernel-power'))
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const ADVICE = {
|
|
2
2
|
updates: 'Before leaving agents overnight, restart for pending updates first or pause them (Settings > Windows Update > Pause updates).',
|
|
3
3
|
restart: 'If that was not you, check Settings > Windows Update and Event Viewer > Windows Logs > System.',
|
|
4
|
-
crash: 'Event Viewer > Windows Logs > System has the
|
|
4
|
+
crash: 'sandbox logs --crash prints what Windows logged and how much memory this PC had; Event Viewer > Windows Logs > System has the rest. A laptop also needs to stay plugged in.',
|
|
5
5
|
sleep: 'sandbox.keepAwake keeps this PC awake while a sandbox runs (closing a laptop lid still sleeps it). Check it is on, and that sleep is not forced by a policy.',
|
|
6
6
|
sandboxCrash: 'C:\\AgentData\\logs\\memory-*.log shows what used memory just before. Fewer builds at once inside the sandbox (e.g. cargo build.jobs) makes it less likely.',
|
|
7
7
|
memory: 'Give the sandbox less RAM (sandbox.maxMemoryMb, sandbox.reserveHostMb) or run fewer builds at once inside it.',
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type os from 'node:os';
|
|
2
|
+
import { type HostThresholds, type LoadProfile } from '../../shared/memory/index.js';
|
|
3
|
+
import { type HostMemory } from './host-memory.js';
|
|
4
|
+
export interface WatchdogState {
|
|
5
|
+
readonly low: boolean;
|
|
6
|
+
readonly calm: number;
|
|
7
|
+
/** Seconds the CPU has been above the limit. */
|
|
8
|
+
readonly cpuHighSeconds: number;
|
|
9
|
+
/** Time (ms) the last request went out. */
|
|
10
|
+
readonly lastSentAt: number;
|
|
11
|
+
}
|
|
12
|
+
export declare const WATCHDOG_START: WatchdogState;
|
|
13
|
+
/** The request is repeated this often while the PC stays low, and each one lasts a bit longer than that. */
|
|
14
|
+
export declare const RESEND_MS = 30000;
|
|
15
|
+
export declare const REQUEST_SECONDS = 90;
|
|
16
|
+
export interface WatchdogInput {
|
|
17
|
+
/** Null when memory could not be read this time (only the CPU counts then). */
|
|
18
|
+
readonly memory: HostMemory | null;
|
|
19
|
+
/** Total CPU use since the last sample (percent), null when unknown. */
|
|
20
|
+
readonly cpuPercent: number | null;
|
|
21
|
+
readonly intervalSeconds: number;
|
|
22
|
+
readonly nowMs: number;
|
|
23
|
+
readonly reserveHostMb: number;
|
|
24
|
+
readonly profile: LoadProfile;
|
|
25
|
+
}
|
|
26
|
+
export interface WatchdogStep {
|
|
27
|
+
readonly state: WatchdogState;
|
|
28
|
+
/** Send a request to the sandbox now. */
|
|
29
|
+
readonly send: boolean;
|
|
30
|
+
/** Why the PC is low (plain words), empty when it is not. */
|
|
31
|
+
readonly reason: string;
|
|
32
|
+
/** The state changed (the log says so). */
|
|
33
|
+
readonly changed: boolean;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Why this PC counts as low, for these numbers ("" when it does not). Low = available RAM under max(4 GB, 12 % of RAM)
|
|
37
|
+
* or available commit under 15 % of the commit limit or half the reserve (the gentle profile: 6 GB, 15 %, 20 %).
|
|
38
|
+
* `scale` widens the limits (1.25 = the level it must climb back above).
|
|
39
|
+
*/
|
|
40
|
+
export declare function lowReason(memory: HostMemory, reserveHostMb: number, t: HostThresholds, scale: number): string;
|
|
41
|
+
/** One watchdog step. Hysteresis: low starts at the limits and ends above 1.25 times them for calmSamples samples. */
|
|
42
|
+
export declare function watchdogStep(prev: WatchdogState, input: WatchdogInput): WatchdogStep;
|
|
43
|
+
/** Total CPU use between two os.cpus() readings (percent). */
|
|
44
|
+
export declare function cpuPercentBetween(a: readonly os.CpuInfo[], b: readonly os.CpuInfo[]): number | null;
|
|
45
|
+
/** One line in <storage>\logs\host-memory-<data>.log, which the crash report reads; the file is kept small. */
|
|
46
|
+
export declare function appendHostMemory(file: string, memory: HostMemory, cpuPercent: number | null): void;
|
|
47
|
+
/** What the launch decided for the watchdog (host-only, in <storage>\run): the load profile and the PC's reserve. */
|
|
48
|
+
export interface LoadSettings {
|
|
49
|
+
readonly profile: LoadProfile;
|
|
50
|
+
readonly reserveHostMb: number;
|
|
51
|
+
}
|
|
52
|
+
export declare function writeLoadSettings(storageRoot: string, dataPath: string, settings: LoadSettings): void;
|
|
53
|
+
/** The settings of the running launch; the defaults (normal profile, 8 GB reserve) when none were written. */
|
|
54
|
+
export declare function readLoadSettings(storageRoot: string, dataPath: string): LoadSettings;
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import fs from 'node:fs';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { HOST_THRESHOLDS } from '../../shared/memory/index.js';
|
|
5
|
+
import { hostMemoryLine } from './host-memory.js';
|
|
6
|
+
export const WATCHDOG_START = { low: false, calm: 0, cpuHighSeconds: 0, lastSentAt: 0 };
|
|
7
|
+
/** The request is repeated this often while the PC stays low, and each one lasts a bit longer than that. */
|
|
8
|
+
export const RESEND_MS = 30000;
|
|
9
|
+
export const REQUEST_SECONDS = 90;
|
|
10
|
+
/**
|
|
11
|
+
* Why this PC counts as low, for these numbers ("" when it does not). Low = available RAM under max(4 GB, 12 % of RAM)
|
|
12
|
+
* or available commit under 15 % of the commit limit or half the reserve (the gentle profile: 6 GB, 15 %, 20 %).
|
|
13
|
+
* `scale` widens the limits (1.25 = the level it must climb back above).
|
|
14
|
+
*/
|
|
15
|
+
export function lowReason(memory, reserveHostMb, t, scale) {
|
|
16
|
+
const availableLimit = Math.max(t.availableMinMb, (memory.totalMb * t.availablePercent) / 100) * scale;
|
|
17
|
+
if (memory.availableMb < availableLimit)
|
|
18
|
+
return 'only ' + memory.availableMb + " MB of this PC's RAM is free";
|
|
19
|
+
const commitLimit = Math.max((memory.commitLimitMb * t.commitAvailablePercent) / 100, reserveHostMb / 2) * scale;
|
|
20
|
+
if (memory.commitAvailableMb < commitLimit)
|
|
21
|
+
return 'only ' + memory.commitAvailableMb + ' MB of memory (RAM plus paging file) is left on this PC';
|
|
22
|
+
return '';
|
|
23
|
+
}
|
|
24
|
+
/** One watchdog step. Hysteresis: low starts at the limits and ends above 1.25 times them for calmSamples samples. */
|
|
25
|
+
export function watchdogStep(prev, input) {
|
|
26
|
+
const t = HOST_THRESHOLDS[input.profile];
|
|
27
|
+
let reason = '';
|
|
28
|
+
if (input.memory)
|
|
29
|
+
reason = lowReason(input.memory, input.reserveHostMb, t, 1);
|
|
30
|
+
const cpuHigh = input.cpuPercent !== null && input.cpuPercent >= t.cpuPercent ? prev.cpuHighSeconds + input.intervalSeconds : 0;
|
|
31
|
+
if (!reason && cpuHigh >= t.cpuSeconds)
|
|
32
|
+
reason = "this PC's CPU has been above " + t.cpuPercent + '% for ' + cpuHigh + ' seconds';
|
|
33
|
+
const calmNow = input.memory ? lowReason(input.memory, input.reserveHostMb, t, 1.25) === '' : true;
|
|
34
|
+
let low = prev.low;
|
|
35
|
+
let calm = prev.calm;
|
|
36
|
+
if (reason) {
|
|
37
|
+
low = true;
|
|
38
|
+
calm = 0;
|
|
39
|
+
}
|
|
40
|
+
else if (prev.low) {
|
|
41
|
+
calm = calmNow && cpuHigh === 0 ? prev.calm + 1 : 0;
|
|
42
|
+
if (calm >= t.calmSamples) {
|
|
43
|
+
low = false;
|
|
44
|
+
calm = 0;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
const send = low && input.nowMs - prev.lastSentAt >= RESEND_MS;
|
|
48
|
+
return {
|
|
49
|
+
state: { low, calm, cpuHighSeconds: cpuHigh, lastSentAt: send ? input.nowMs : prev.lastSentAt },
|
|
50
|
+
send,
|
|
51
|
+
reason: reason || (low ? 'this PC is still low' : ''),
|
|
52
|
+
changed: low !== prev.low,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
/** Total CPU use between two os.cpus() readings (percent). */
|
|
56
|
+
export function cpuPercentBetween(a, b) {
|
|
57
|
+
let busy = 0;
|
|
58
|
+
let total = 0;
|
|
59
|
+
for (let i = 0; i < Math.min(a.length, b.length); i++) {
|
|
60
|
+
const x = a[i].times;
|
|
61
|
+
const y = b[i].times;
|
|
62
|
+
const idle = y.idle - x.idle;
|
|
63
|
+
const all = y.user - x.user + (y.nice - x.nice) + (y.sys - x.sys) + (y.irq - x.irq) + idle;
|
|
64
|
+
busy += all - idle;
|
|
65
|
+
total += all;
|
|
66
|
+
}
|
|
67
|
+
return total > 0 ? Math.round((busy / total) * 100) : null;
|
|
68
|
+
}
|
|
69
|
+
const MAX_LOG_BYTES = 512 * 1024;
|
|
70
|
+
/** One line in <storage>\logs\host-memory-<data>.log, which the crash report reads; the file is kept small. */
|
|
71
|
+
export function appendHostMemory(file, memory, cpuPercent) {
|
|
72
|
+
try {
|
|
73
|
+
fs.mkdirSync(path.dirname(file), { recursive: true });
|
|
74
|
+
try {
|
|
75
|
+
if (fs.statSync(file).size > MAX_LOG_BYTES)
|
|
76
|
+
fs.renameSync(file, file + '.old');
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
// No log yet.
|
|
80
|
+
}
|
|
81
|
+
fs.appendFileSync(file, hostMemoryLine(memory) + (cpuPercent === null ? '' : ' | CPU ' + cpuPercent + '%') + '\n');
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
// The log is a courtesy: never a reason to fail.
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
const LoadSettingsSchema = z.object({
|
|
88
|
+
profile: z.enum(['normal', 'gentle']),
|
|
89
|
+
reserveHostMb: z.number().int().nonnegative(),
|
|
90
|
+
});
|
|
91
|
+
function loadFile(storageRoot, dataPath) {
|
|
92
|
+
return path.join(storageRoot, 'run', 'load-' + path.basename(dataPath) + '.json');
|
|
93
|
+
}
|
|
94
|
+
export function writeLoadSettings(storageRoot, dataPath, settings) {
|
|
95
|
+
const file = loadFile(storageRoot, dataPath);
|
|
96
|
+
fs.mkdirSync(path.dirname(file), { recursive: true });
|
|
97
|
+
fs.writeFileSync(file, JSON.stringify(settings));
|
|
98
|
+
}
|
|
99
|
+
/** The settings of the running launch; the defaults (normal profile, 8 GB reserve) when none were written. */
|
|
100
|
+
export function readLoadSettings(storageRoot, dataPath) {
|
|
101
|
+
try {
|
|
102
|
+
return LoadSettingsSchema.parse(JSON.parse(fs.readFileSync(loadFile(storageRoot, dataPath), 'utf8')));
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
// Not written (an older launch) or damaged: the defaults.
|
|
106
|
+
return { profile: 'normal', reserveHostMb: 8192 };
|
|
107
|
+
}
|
|
108
|
+
}
|
|
@@ -6,6 +6,8 @@ import path from 'node:path';
|
|
|
6
6
|
import { z } from 'zod';
|
|
7
7
|
import { assertNoLinks, fail, isInsideOrEqual, isLink } from '../../core/util/index.js';
|
|
8
8
|
import { JsonFile } from '../../shared/io/index.js';
|
|
9
|
+
import { protectPrivateFolder } from '../sharing/index.js';
|
|
10
|
+
import { ensureStorageRoot } from '../storage/index.js';
|
|
9
11
|
const ManifestSchema = z.object({
|
|
10
12
|
entries: z.array(z.object({ original: z.string(), copy: z.string(), existed: z.boolean() })),
|
|
11
13
|
});
|
|
@@ -56,6 +58,7 @@ export class MigrationBackup {
|
|
|
56
58
|
}
|
|
57
59
|
/** Copies each existing file or folder (and records the ones that do not exist yet, to remove them on restore). */
|
|
58
60
|
save(paths) {
|
|
61
|
+
ensureStorageRoot(this.storageRoot, protectPrivateFolder);
|
|
59
62
|
const dataRoot = path.join(this.storageRoot, 'data');
|
|
60
63
|
const entries = this.manifest.read()?.entries ?? [];
|
|
61
64
|
for (const target of paths) {
|
|
@@ -6,3 +6,5 @@ export declare function readFileObject(file: string | null): Json | null;
|
|
|
6
6
|
export declare function fullSnapshots(file: Json): DefaultsSnapshot[];
|
|
7
7
|
/** Removes these values from the file, comments and the rest untouched, noting `why: <key>` for each. */
|
|
8
8
|
export declare function removeValues(file: string, paths: readonly string[][], why: string, note: (line: string) => void): void;
|
|
9
|
+
/** Sets one value in the file (created when missing), comments and the rest untouched. */
|
|
10
|
+
export declare function setValue(file: string, path: string[], value: unknown): void;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// Reading and editing a config.json (JSON with comments) for the migrations: removing a value keeps every comment.
|
|
2
2
|
import fs from 'node:fs';
|
|
3
|
+
import nodePath from 'node:path';
|
|
3
4
|
import { applyEdits, modify, parse } from 'jsonc-parser';
|
|
4
5
|
import _ from 'lodash';
|
|
5
6
|
import { writeFileAtomic } from '../../../shared/io/index.js';
|
|
@@ -26,3 +27,9 @@ export function removeValues(file, paths, why, note) {
|
|
|
26
27
|
}
|
|
27
28
|
writeFileAtomic(file, text);
|
|
28
29
|
}
|
|
30
|
+
/** Sets one value in the file (created when missing), comments and the rest untouched. */
|
|
31
|
+
export function setValue(file, path, value) {
|
|
32
|
+
const text = fs.existsSync(file) ? fs.readFileSync(file, 'utf8') : '{}\n';
|
|
33
|
+
fs.mkdirSync(nodePath.dirname(file), { recursive: true });
|
|
34
|
+
writeFileAtomic(file, applyEdits(text, modify(text, path, value, FORMAT)));
|
|
35
|
+
}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
// An all-users install keeps everyone's data under %ProgramData%\AgentSandbox (its machine config says where), so a
|
|
2
2
|
// sandbox can be shared. A config.json written by an old `config init` pins storage.root to the old per-user default,
|
|
3
3
|
// which wins over the machine config. Removes that pin, and only that: a storage.root you chose yourself stays.
|
|
4
|
+
import path from 'node:path';
|
|
4
5
|
import _ from 'lodash';
|
|
5
6
|
import { DEFAULTS, machineConfigPath } from '../../../core/config/index.js';
|
|
7
|
+
import { expandPath } from '../../../core/util/index.js';
|
|
8
|
+
import { holdsData } from '../../storage/root.js';
|
|
6
9
|
import { fullSnapshots, readFileObject, removeValues } from './config-file.js';
|
|
7
10
|
const ROOT = ['storage', 'root'];
|
|
8
11
|
/** True when the machine config sets the storage folder and the user's file only pins a default of an old init. */
|
|
@@ -15,7 +18,12 @@ function pinnedOverMachine(configPath) {
|
|
|
15
18
|
return false;
|
|
16
19
|
const value = _.get(file, ROOT);
|
|
17
20
|
const defaults = [_.get(DEFAULTS, ROOT), ...fullSnapshots(file).map((s) => _.get(s.defaults, ROOT))];
|
|
18
|
-
|
|
21
|
+
if (!defaults.some((d) => _.isEqual(d, value)))
|
|
22
|
+
return false;
|
|
23
|
+
// A pin that holds your saved data while the shared folder has none is kept: sandbox storage offers the move.
|
|
24
|
+
const pinned = typeof value === 'string' ? expandPath(value, path.dirname(configPath ?? '')) : '';
|
|
25
|
+
const shared = expandPath(String(_.get(machine, ROOT)), path.dirname(machineConfigPath()));
|
|
26
|
+
return !(holdsData(pinned) && !holdsData(shared));
|
|
19
27
|
}
|
|
20
28
|
export const followMachineStorage = {
|
|
21
29
|
id: '2026-10-follow-machine-storage',
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Migration } from '../migration.js';
|
|
2
|
+
/** All the conditions of the migration, as a pure check on what is on disk. */
|
|
3
|
+
export declare function needsPin(file: string, machineFile: string, oldRoot: string | null): boolean;
|
|
4
|
+
export declare const pinStorageRoot: Migration;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
// 1.6 moves the default storage folder to %ProgramData%\AgentSandbox\users\<you>. Nobody's data may seem to vanish: a
|
|
2
|
+
// user with no storage.root of their own, no all-users install, and saved data in the old per-user folder keeps that
|
|
3
|
+
// folder, pinned in config.json. Moving it to the new default is offered later (sandbox storage).
|
|
4
|
+
import fs from 'node:fs';
|
|
5
|
+
import path from 'node:path';
|
|
6
|
+
import _ from 'lodash';
|
|
7
|
+
import { machineConfigPath } from '../../../core/config/index.js';
|
|
8
|
+
import { holdsData, OLD_DEFAULT_ROOT, oldDefaultRoot } from '../../storage/root.js';
|
|
9
|
+
import { readFileObject, setValue } from './config-file.js';
|
|
10
|
+
const ROOT = ['storage', 'root'];
|
|
11
|
+
/** The file the pin goes in: the user's config, or the one it would be (not created until the pin is written). */
|
|
12
|
+
function targetFile(ctx) {
|
|
13
|
+
return ctx.configPath ?? path.join(ctx.userDir, 'config.json');
|
|
14
|
+
}
|
|
15
|
+
/** All the conditions of the migration, as a pure check on what is on disk. */
|
|
16
|
+
export function needsPin(file, machineFile, oldRoot) {
|
|
17
|
+
if (!oldRoot || !holdsData(oldRoot))
|
|
18
|
+
return false;
|
|
19
|
+
const machine = readFileObject(machineFile);
|
|
20
|
+
if (machine && _.has(machine, ROOT))
|
|
21
|
+
return false;
|
|
22
|
+
if (!fs.existsSync(file))
|
|
23
|
+
return true;
|
|
24
|
+
const parsed = readFileObject(file);
|
|
25
|
+
// A file that cannot be read is left alone: editing it blindly could lose the user's settings.
|
|
26
|
+
return parsed !== null && !_.has(parsed, ROOT);
|
|
27
|
+
}
|
|
28
|
+
export const pinStorageRoot = {
|
|
29
|
+
id: '2026-10-pin-storage-root',
|
|
30
|
+
introducedIn: '1.6.0',
|
|
31
|
+
scope: 'user',
|
|
32
|
+
needsIdleSandbox: false,
|
|
33
|
+
summary: 'Keeps your saved data where it is (the old per-user folder), now that the default folder is a new one.',
|
|
34
|
+
applies(ctx) {
|
|
35
|
+
return needsPin(targetFile(ctx), machineConfigPath(), oldDefaultRoot());
|
|
36
|
+
},
|
|
37
|
+
touches() {
|
|
38
|
+
return [];
|
|
39
|
+
},
|
|
40
|
+
async run(ctx, note) {
|
|
41
|
+
if (!needsPin(targetFile(ctx), machineConfigPath(), oldDefaultRoot()))
|
|
42
|
+
return;
|
|
43
|
+
setValue(targetFile(ctx), ROOT, OLD_DEFAULT_ROOT);
|
|
44
|
+
note('Your saved data stays in ' + OLD_DEFAULT_ROOT + ' (storage.root)');
|
|
45
|
+
},
|
|
46
|
+
};
|
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
import _ from 'lodash';
|
|
5
5
|
import { DEFAULTS } from '../../../core/config/index.js';
|
|
6
6
|
import { fullSnapshots, readFileObject, removeValues } from './config-file.js';
|
|
7
|
+
/** storage.root is never unpinned: the old default now names the old folder, and following today's would hide it. */
|
|
8
|
+
const KEEP_PINNED = ['storage', 'root'];
|
|
7
9
|
/** Paths of the leaves of a JSON object (arrays and scalars are leaves). */
|
|
8
10
|
function leafPaths(value, prefix = []) {
|
|
9
11
|
if (!_.isPlainObject(value))
|
|
@@ -15,7 +17,8 @@ function pinnedLeaves(file) {
|
|
|
15
17
|
const snapshots = fullSnapshots(file);
|
|
16
18
|
return leafPaths(file).filter((path) => {
|
|
17
19
|
const value = _.get(file, path);
|
|
18
|
-
return (_.
|
|
20
|
+
return (!_.isEqual(path, KEEP_PINNED) &&
|
|
21
|
+
_.has(DEFAULTS, path) &&
|
|
19
22
|
!_.isEqual(value, _.get(DEFAULTS, path)) &&
|
|
20
23
|
snapshots.some((snapshot) => _.has(snapshot.defaults, path) && _.isEqual(_.get(snapshot.defaults, path), value)));
|
|
21
24
|
});
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import { followMachineStorage } from './migrations/follow-machine-storage.js';
|
|
2
|
+
import { pinStorageRoot } from './migrations/pin-storage-root.js';
|
|
2
3
|
import { unpinConfigDefaults } from './migrations/unpin-config-defaults.js';
|
|
3
|
-
export const MIGRATIONS = [unpinConfigDefaults, followMachineStorage];
|
|
4
|
+
export const MIGRATIONS = [unpinConfigDefaults, followMachineStorage, pinStorageRoot];
|
package/dist/host/native.d.ts
CHANGED
|
@@ -3,7 +3,8 @@ export declare function nativeFile(...parts: string[]): string;
|
|
|
3
3
|
/** powershell.exe arguments that run native\scripts\<name> (a .ps1 shipped next to dist) with `args`. */
|
|
4
4
|
export declare function nativeScript(name: string, args?: readonly string[]): string[];
|
|
5
5
|
/**
|
|
6
|
-
* <storage>\bin
|
|
7
|
-
* cannot be built (no csc, a compile error): the caller then runs the PowerShell fallback.
|
|
6
|
+
* <storage>\bin\<hash of its sources>\HostTools.exe, compiled with the .NET Framework csc the first time; null when it
|
|
7
|
+
* cannot be built (no csc, a compile error): the caller then runs the PowerShell fallback. A plain name and full file
|
|
8
|
+
* properties (AssemblyInfo.cs), so antivirus software does not take a nameless, random-looking exe for malware.
|
|
8
9
|
*/
|
|
9
10
|
export declare function hostToolsExe(storageRoot: string): string | null;
|
package/dist/host/native.js
CHANGED
|
@@ -27,8 +27,9 @@ export function nativeScript(name, args = []) {
|
|
|
27
27
|
];
|
|
28
28
|
}
|
|
29
29
|
/**
|
|
30
|
-
* <storage>\bin
|
|
31
|
-
* cannot be built (no csc, a compile error): the caller then runs the PowerShell fallback.
|
|
30
|
+
* <storage>\bin\<hash of its sources>\HostTools.exe, compiled with the .NET Framework csc the first time; null when it
|
|
31
|
+
* cannot be built (no csc, a compile error): the caller then runs the PowerShell fallback. A plain name and full file
|
|
32
|
+
* properties (AssemblyInfo.cs), so antivirus software does not take a nameless, random-looking exe for malware.
|
|
32
33
|
*/
|
|
33
34
|
export function hostToolsExe(storageRoot) {
|
|
34
35
|
refuseInSelfTest('build HostTools.exe');
|
|
@@ -47,15 +48,33 @@ export function hostToolsExe(storageRoot) {
|
|
|
47
48
|
const hash = crypto.createHash('sha256');
|
|
48
49
|
for (const file of sources)
|
|
49
50
|
hash.update(fs.readFileSync(file));
|
|
50
|
-
const
|
|
51
|
+
const bin = path.join(storageRoot, 'bin');
|
|
52
|
+
const exe = path.join(bin, hash.digest('hex').slice(0, 12), 'HostTools.exe');
|
|
51
53
|
if (fs.existsSync(exe))
|
|
52
54
|
return exe;
|
|
53
55
|
if (!fs.existsSync(SYSTEM.csc()))
|
|
54
56
|
return null;
|
|
55
57
|
fs.mkdirSync(path.dirname(exe), { recursive: true });
|
|
58
|
+
removeOldHostTools(bin, path.dirname(exe));
|
|
56
59
|
const result = spawnSync(SYSTEM.csc(), ['/nologo', '/optimize', '/target:exe', '/out:' + exe, ...sources], {
|
|
57
60
|
windowsHide: true,
|
|
58
61
|
timeout: 120000,
|
|
59
62
|
});
|
|
60
63
|
return result.status === 0 && fs.existsSync(exe) ? exe : null;
|
|
61
64
|
}
|
|
65
|
+
/** Earlier builds: HostTools-<hash>.exe files and other <hash> folders in bin (best effort: one in use stays). */
|
|
66
|
+
function removeOldHostTools(bin, keep) {
|
|
67
|
+
for (const entry of fs.readdirSync(bin, { withFileTypes: true })) {
|
|
68
|
+
const full = path.join(bin, entry.name);
|
|
69
|
+
const old = (entry.isFile() && /^HostTools-[0-9a-f]{12}\.exe$/i.test(entry.name)) ||
|
|
70
|
+
(entry.isDirectory() && /^[0-9a-f]{12}$/i.test(entry.name) && full !== keep);
|
|
71
|
+
if (!old)
|
|
72
|
+
continue;
|
|
73
|
+
try {
|
|
74
|
+
fs.rmSync(full, { recursive: true, force: true });
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
// Still running (keep-awake of another sandbox): removed by a later build.
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { SecretStore } from '../secrets/index.js';
|
|
1
2
|
import { type LoginFiles } from './claude-login.js';
|
|
2
3
|
export interface Account {
|
|
3
4
|
readonly name: string;
|
|
@@ -13,14 +14,37 @@ export interface AccountRow {
|
|
|
13
14
|
readonly isActive: boolean;
|
|
14
15
|
readonly savedAt: string;
|
|
15
16
|
}
|
|
17
|
+
/** What lists need: no decryption. */
|
|
18
|
+
export interface AccountMeta {
|
|
19
|
+
readonly name: string;
|
|
20
|
+
readonly savedAt: string;
|
|
21
|
+
readonly email: string | null;
|
|
22
|
+
}
|
|
16
23
|
export declare function accountsDir(storageRoot: string): string;
|
|
17
24
|
/** The saved Claude logins under <storage>\accounts, and which one each sandbox data folder uses. */
|
|
18
25
|
export declare class AccountStore {
|
|
19
26
|
private readonly storageRoot;
|
|
20
|
-
|
|
27
|
+
private readonly sharePlugins;
|
|
28
|
+
private readonly secrets;
|
|
29
|
+
/** What the last activate() did with the shared plugins (a problem there never stops the switch). */
|
|
30
|
+
pluginNote: string | null;
|
|
31
|
+
/** @param sharePlugins claudeProfile.sharePluginsAcrossAccounts: carry Claude plugins to the account switched to */
|
|
32
|
+
constructor(storageRoot: string, sharePlugins?: boolean, secrets?: SecretStore);
|
|
33
|
+
/** With the setting on: refreshes the shared plugin set from this data set, or fills this data set from it. */
|
|
34
|
+
syncPlugins(dataPath: string): void;
|
|
35
|
+
private shareStep;
|
|
21
36
|
private file;
|
|
37
|
+
private seal;
|
|
22
38
|
private store;
|
|
39
|
+
/** The saved account's name, date and e-mail (nothing is decrypted). */
|
|
40
|
+
meta(name: string): AccountMeta | null;
|
|
41
|
+
/**
|
|
42
|
+
* The saved account with its login decrypted. A plain file from an older version is encrypted on the spot (it stays
|
|
43
|
+
* readable when that fails).
|
|
44
|
+
*/
|
|
23
45
|
read(name: string): Account | null;
|
|
46
|
+
/** Encrypts every account still saved as plain text (older versions); returns how many it did. */
|
|
47
|
+
sealLegacy(): number;
|
|
24
48
|
defaultName(): string | null;
|
|
25
49
|
/** The account a data folder uses (kept in the index of the storage folder that data folder is in). */
|
|
26
50
|
activeFor(dataPath: string): string | null;
|