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
|
@@ -1,11 +1,15 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Databases (start and stop), each a category on the left.
|
|
1
|
+
// Section 3: the sandbox as a whole. Status (the sandbox view: its facts, the window, stopping it), Projects (roots and
|
|
2
|
+
// known projects) and Databases (start and stop), each a category on the left.
|
|
3
|
+
import fs from 'node:fs';
|
|
3
4
|
import path from 'node:path';
|
|
5
|
+
import { sandboxPage, sandboxStatus } from '../../../app/features/sandbox/index.js';
|
|
6
|
+
import { readQuery } from '../../../app/registry.js';
|
|
4
7
|
import { errMsg, safeText } from '../../../core/util/index.js';
|
|
5
8
|
import { RunDir } from '../../../shared/channel/index.js';
|
|
6
|
-
import {
|
|
7
|
-
import { DatabasesService, ProjectsService, SandboxService, } from '../../services/index.js';
|
|
9
|
+
import { DatabasesService, ProjectsService } from '../../services/index.js';
|
|
8
10
|
import { Text, Theme, } from '../../tui/index.js';
|
|
11
|
+
import { MenuOperations } from '../io-menu.js';
|
|
12
|
+
import { menuView } from '../render-view.js';
|
|
9
13
|
import { ListPage } from './list-page.js';
|
|
10
14
|
const CATEGORIES = [
|
|
11
15
|
{ id: 'status', label: 'Status', description: 'What the sandbox is doing, its window, and stopping it.' },
|
|
@@ -16,57 +20,29 @@ const CATEGORIES = [
|
|
|
16
20
|
},
|
|
17
21
|
{ id: 'databases', label: 'Databases', description: 'Databases the sandbox can run: start and stop them.' },
|
|
18
22
|
];
|
|
19
|
-
|
|
23
|
+
/** The status category: the sandbox view's rows (prefixed, so they never clash with the projects' rows). */
|
|
24
|
+
function statusView(m) {
|
|
25
|
+
return menuView(sandboxPage(m.report), { category: 'status', prefix: 'status:', refresh: false });
|
|
26
|
+
}
|
|
20
27
|
/** The list for the sandbox tab. Pure. */
|
|
21
28
|
export function sandboxOptions(m) {
|
|
22
|
-
const
|
|
23
|
-
const
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
category: '
|
|
29
|
-
section: '
|
|
30
|
-
|
|
31
|
-
}
|
|
32
|
-
const off = running ? {} : { disabled: 'No sandbox is running.' };
|
|
33
|
-
const sessions = m.report.projects.reduce((n, p) => n + p.sessions.length, 0) + m.report.otherSessions.length;
|
|
34
|
-
const status = [
|
|
35
|
-
row('info:state', 'State', running ? Theme.ok(Theme.glyph.on + ' ' + sandbox.phase) : Theme.muted(Theme.glyph.off + ' stopped'), { description: sandbox.message ? safeText(sandbox.message) : undefined }),
|
|
36
|
-
row('info:uptime', 'Up for', sandbox.startedAt && running ? ago(sandbox.startedAt).replace(' ago', '') : '-'),
|
|
37
|
-
row('info:daemon', 'Sandbox agent', running ? safeText(sandbox.daemon) : '-'),
|
|
38
|
-
row('info:window', 'Window', running ? (sandbox.headless ? 'hidden' : 'shown') : '-'),
|
|
39
|
-
row('info:sessions', 'Sessions', running ? String(sessions) : '-'),
|
|
40
|
-
row('info:account', 'Claude account', sandbox.account ?? '-'),
|
|
41
|
-
row('info:sync', 'History sync running', yesNo(sandbox.syncWatcher)),
|
|
42
|
-
row('info:guard', 'Repo guard', repoGuard.guarded +
|
|
43
|
-
' folder(s) guarded' +
|
|
44
|
-
(repoGuard.findings.length ? ', ' + repoGuard.findings.length + ' change(s) neutralised' : ''), {
|
|
45
|
-
details: repoGuard.findings.slice(-8).map((f) => Theme.warn(safeText(f))),
|
|
46
|
-
}),
|
|
47
|
-
row('act:show', 'Show the window', '', {
|
|
48
|
-
section: 'Actions',
|
|
49
|
-
description: 'Brings the sandbox window to the front.',
|
|
50
|
-
...off,
|
|
51
|
-
}),
|
|
52
|
-
row('act:hide', 'Hide the window', '', {
|
|
53
|
-
section: 'Actions',
|
|
54
|
-
description: 'Hides the window; sbx-show inside the sandbox (or Show the window here) brings it back.',
|
|
55
|
-
...off,
|
|
56
|
-
}),
|
|
57
|
-
row('act:stop', 'Stop the sandbox…', '', {
|
|
58
|
-
section: 'Actions',
|
|
59
|
-
description: 'Shuts the sandbox down; history and claude-mem sync back when it closes.',
|
|
60
|
-
...off,
|
|
61
|
-
}),
|
|
62
|
-
];
|
|
29
|
+
const running = m.report.sandbox.running;
|
|
30
|
+
const status = statusView(m);
|
|
31
|
+
const statusItems = [...(running ? [] : startRows(m.defaultAgent, 'status')), ...status.items];
|
|
32
|
+
const addRoot = {
|
|
33
|
+
value: ADD_ROOT,
|
|
34
|
+
label: '+ Add a project root…',
|
|
35
|
+
category: 'projects',
|
|
36
|
+
section: 'Project roots',
|
|
37
|
+
description: 'Pick a folder that holds your projects: every project in it (also new ones) opens without a restart.',
|
|
38
|
+
};
|
|
63
39
|
const roots = m.projects.roots.map((r) => ({
|
|
64
40
|
value: 'root:' + r,
|
|
65
41
|
label: Text.middle(r, 60),
|
|
66
42
|
hint: Theme.muted('root'),
|
|
67
43
|
category: 'projects',
|
|
68
44
|
section: 'Project roots',
|
|
69
|
-
description: 'Every project in this folder (also new ones) opens without a restart.',
|
|
45
|
+
description: 'Every project in this folder (also new ones) opens without a restart. f removes the root.',
|
|
70
46
|
}));
|
|
71
47
|
const projects = m.projects.projects.map((p) => ({
|
|
72
48
|
value: 'project:' + p.folder,
|
|
@@ -80,6 +56,20 @@ export function sandboxOptions(m) {
|
|
|
80
56
|
Theme.muted('In sandbox ') + (p.running ?? '-'),
|
|
81
57
|
],
|
|
82
58
|
}));
|
|
59
|
+
const noDatabases = m.databases
|
|
60
|
+
? []
|
|
61
|
+
: running
|
|
62
|
+
? [
|
|
63
|
+
{
|
|
64
|
+
value: 'info:db',
|
|
65
|
+
label: 'The sandbox is not ready yet',
|
|
66
|
+
category: 'databases',
|
|
67
|
+
section: 'Databases',
|
|
68
|
+
description: 'Its databases are listed once it is ready. l looks again.',
|
|
69
|
+
disabled: 'Not ready yet: l looks again.',
|
|
70
|
+
},
|
|
71
|
+
]
|
|
72
|
+
: startRows(m.defaultAgent, 'databases');
|
|
83
73
|
const databases = (m.databases ?? []).map((d) => ({
|
|
84
74
|
value: 'db:' + d.name,
|
|
85
75
|
label: d.name,
|
|
@@ -90,42 +80,69 @@ export function sandboxOptions(m) {
|
|
|
90
80
|
}));
|
|
91
81
|
return {
|
|
92
82
|
path: [],
|
|
93
|
-
items: [...
|
|
83
|
+
items: [...statusItems, addRoot, ...roots, ...projects, ...databases, ...noDatabases],
|
|
94
84
|
categories: CATEGORIES,
|
|
95
|
-
empty:
|
|
96
|
-
actions: sandboxActions,
|
|
97
|
-
enterLabel: '
|
|
98
|
-
escapeLabel: 'quit',
|
|
85
|
+
empty: 'Nothing here yet.',
|
|
86
|
+
actions: (category) => category === 'projects' || category === 'databases' ? sandboxActions(category) : [...status.actions, REFRESH],
|
|
87
|
+
enterLabel: (category, id) => status.enterLabel(category, id) || enterLabel(id ?? '', m),
|
|
99
88
|
};
|
|
100
89
|
}
|
|
90
|
+
const ADD_ROOT = '@add-root';
|
|
91
|
+
const REFRESH = { key: 'l', label: 'refresh', importance: 3 };
|
|
92
|
+
/** The rows that start a sandbox, shown where the sandbox has to run for anything to be there. */
|
|
93
|
+
function startRows(agent, category) {
|
|
94
|
+
return [
|
|
95
|
+
{
|
|
96
|
+
value: 'act:start',
|
|
97
|
+
label: 'Start the sandbox with ' + agent,
|
|
98
|
+
hint: Theme.muted('default agent'),
|
|
99
|
+
category,
|
|
100
|
+
section: 'No sandbox is running',
|
|
101
|
+
description: 'Starts the sandbox and ' + agent + ' in this folder.',
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
value: 'act:start-bare',
|
|
105
|
+
label: 'Start the sandbox without an agent',
|
|
106
|
+
category,
|
|
107
|
+
section: 'No sandbox is running',
|
|
108
|
+
description: 'Tools and databases only.',
|
|
109
|
+
},
|
|
110
|
+
];
|
|
111
|
+
}
|
|
112
|
+
/** What Enter does on a row of Projects and Databases ("" = the row only shows information). */
|
|
113
|
+
function enterLabel(id, m) {
|
|
114
|
+
if (id.startsWith('act:start'))
|
|
115
|
+
return 'start';
|
|
116
|
+
if (id === ADD_ROOT)
|
|
117
|
+
return 'choose folder';
|
|
118
|
+
if (id.startsWith('db:'))
|
|
119
|
+
return m.databases?.find((d) => 'db:' + d.name === id)?.running ? 'stop' : 'start';
|
|
120
|
+
return '';
|
|
121
|
+
}
|
|
101
122
|
function sandboxActions(category) {
|
|
102
123
|
if (category === 'projects')
|
|
103
124
|
return [
|
|
104
|
-
{ key: 'a', label: 'add root' },
|
|
105
|
-
{ key: 'f', label: '
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
? []
|
|
109
|
-
: [
|
|
110
|
-
{ key: 'w', label: 'show window' },
|
|
111
|
-
{ key: 'h', label: 'hide window' },
|
|
112
|
-
{ key: 'x', label: 'stop' },
|
|
125
|
+
{ key: 'a', label: 'add root', importance: 1 },
|
|
126
|
+
{ key: 'f', label: 'remove root', importance: 1, applies: (id) => id.startsWith('root:') },
|
|
127
|
+
{ key: 'f', label: 'forget project', importance: 1, applies: (id) => id.startsWith('project:') },
|
|
128
|
+
REFRESH,
|
|
113
129
|
];
|
|
130
|
+
return [REFRESH];
|
|
114
131
|
}
|
|
115
132
|
export class SandboxPage extends ListPage {
|
|
116
133
|
ctx;
|
|
117
134
|
label = 'Sandbox';
|
|
118
135
|
model;
|
|
119
|
-
sandbox;
|
|
120
136
|
projects;
|
|
137
|
+
operations;
|
|
121
138
|
constructor(app, ctx) {
|
|
122
139
|
super(app);
|
|
123
140
|
this.ctx = ctx;
|
|
124
|
-
this.sandbox = new SandboxService(ctx);
|
|
125
141
|
this.projects = new ProjectsService(ctx);
|
|
142
|
+
this.operations = new MenuOperations(app, ctx);
|
|
126
143
|
}
|
|
127
144
|
async load() {
|
|
128
|
-
const report = await this.
|
|
145
|
+
const report = await readQuery(sandboxStatus, this.ctx);
|
|
129
146
|
const guest = report.sandbox.running && report.sandbox.phase === 'ready' ? this.guestWorkspace() : null;
|
|
130
147
|
let databases = null;
|
|
131
148
|
if (guest) {
|
|
@@ -136,7 +153,7 @@ export class SandboxPage extends ListPage {
|
|
|
136
153
|
/* the sandbox did not answer: the list stays empty */
|
|
137
154
|
}
|
|
138
155
|
}
|
|
139
|
-
this.model = { report, projects: this.projects.list(), databases };
|
|
156
|
+
this.model = { report, projects: this.projects.list(), databases, defaultAgent: this.defaultAgent() };
|
|
140
157
|
}
|
|
141
158
|
/** The folder `sbx-db` runs in: the sandbox's own workspace. */
|
|
142
159
|
guestWorkspace() {
|
|
@@ -151,16 +168,21 @@ export class SandboxPage extends ListPage {
|
|
|
151
168
|
const id = result.kind === 'pick' || result.kind === 'action' ? result.value : undefined;
|
|
152
169
|
const key = result.kind === 'action' ? result.key : undefined;
|
|
153
170
|
try {
|
|
154
|
-
if (
|
|
155
|
-
return
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
171
|
+
if (key === 'l')
|
|
172
|
+
return { reload: true };
|
|
173
|
+
const chosen = this.model ? statusView(this.model).resolve(result) : undefined;
|
|
174
|
+
if (chosen?.kind === 'action')
|
|
175
|
+
return await this.operations.perform(chosen.action, [this.label], (text) => this.busy(text, id));
|
|
176
|
+
if (id === 'act:start' && !key)
|
|
177
|
+
return { exit: { kind: 'run', argv: ['launch', '--harness', this.defaultAgent()] } };
|
|
178
|
+
if (id === 'act:start-bare' && !key)
|
|
179
|
+
return { exit: { kind: 'run', argv: ['start'] } };
|
|
180
|
+
if (id === ADD_ROOT && !key)
|
|
181
|
+
return await this.addRoot();
|
|
160
182
|
if (key === 'a')
|
|
161
183
|
return await this.addRoot();
|
|
162
184
|
if (key === 'f')
|
|
163
|
-
return this.forget(id);
|
|
185
|
+
return await this.forget(id);
|
|
164
186
|
if (id?.startsWith('db:') && result.kind === 'pick')
|
|
165
187
|
return await this.toggleDatabase(id.slice(3));
|
|
166
188
|
}
|
|
@@ -169,62 +191,25 @@ export class SandboxPage extends ListPage {
|
|
|
169
191
|
}
|
|
170
192
|
return {};
|
|
171
193
|
}
|
|
194
|
+
defaultAgent() {
|
|
195
|
+
return this.ctx.loaded.config.defaultHarness;
|
|
196
|
+
}
|
|
172
197
|
noSandbox() {
|
|
173
198
|
return this.model?.report.sandbox.running ? null : { notice: Theme.warn('No sandbox is running.') };
|
|
174
199
|
}
|
|
175
|
-
show() {
|
|
176
|
-
const none = this.noSandbox();
|
|
177
|
-
if (none)
|
|
178
|
-
return none;
|
|
179
|
-
this.sandbox.showWindow();
|
|
180
|
-
return { notice: Theme.ok(Theme.glyph.ok + ' Window shown.') };
|
|
181
|
-
}
|
|
182
|
-
async hide() {
|
|
183
|
-
const none = this.noSandbox();
|
|
184
|
-
if (none)
|
|
185
|
-
return none;
|
|
186
|
-
await this.sandbox.hideWindow();
|
|
187
|
-
return {
|
|
188
|
-
reload: true,
|
|
189
|
-
notice: Theme.ok(Theme.glyph.ok + ' Window hidden.') + Theme.muted(' sbx-show brings it back.'),
|
|
190
|
-
};
|
|
191
|
-
}
|
|
192
|
-
async stop() {
|
|
193
|
-
const none = this.noSandbox();
|
|
194
|
-
if (none)
|
|
195
|
-
return none;
|
|
196
|
-
const plan = this.sandbox.stopPlan();
|
|
197
|
-
const named = plan.running.map((s) => safeText(s.harness) + ' in ' + safeText(s.project ?? path.win32.basename(s.cwd)));
|
|
198
|
-
const lines = [
|
|
199
|
-
plan.running.length
|
|
200
|
-
? 'Stopping ends ' +
|
|
201
|
-
plan.running.length +
|
|
202
|
-
' session' +
|
|
203
|
-
(plan.running.length === 1 ? '' : 's') +
|
|
204
|
-
': ' +
|
|
205
|
-
named.join(', ') +
|
|
206
|
-
'.'
|
|
207
|
-
: 'No session is running.',
|
|
208
|
-
...(plan.others.length ? [plan.others.length + ' of them belong to other projects.'] : []),
|
|
209
|
-
'History and claude-mem sync back when it closes.',
|
|
210
|
-
];
|
|
211
|
-
if (!(await this.app.ask('Stop the sandbox?', lines, 'Stop', true)))
|
|
212
|
-
return {};
|
|
213
|
-
await this.sandbox.shutdown(plan.sandbox);
|
|
214
|
-
return { reload: true, notice: Theme.ok(Theme.glyph.ok + ' The sandbox is shutting down.') };
|
|
215
|
-
}
|
|
216
200
|
async addRoot() {
|
|
217
|
-
const
|
|
201
|
+
const picked = await this.app.pickPath({
|
|
218
202
|
path: ['Sandbox', 'Add a project root'],
|
|
219
|
-
|
|
203
|
+
title: 'Choose the folder that holds your projects',
|
|
220
204
|
about: [
|
|
221
205
|
'Every project inside it (also new ones) opens without a restart. Every agent in the sandbox can see them.',
|
|
222
206
|
],
|
|
223
|
-
|
|
207
|
+
use: 'add this root',
|
|
208
|
+
validate: (v) => (fs.existsSync(v) ? true : 'That folder does not exist.'),
|
|
224
209
|
});
|
|
225
|
-
if (!
|
|
210
|
+
if (!picked)
|
|
226
211
|
return {};
|
|
227
|
-
const { dir, added } = this.projects.addRoot(
|
|
212
|
+
const { dir, added } = this.projects.addRoot(picked);
|
|
228
213
|
return {
|
|
229
214
|
reload: true,
|
|
230
215
|
notice: added
|
|
@@ -232,8 +217,20 @@ export class SandboxPage extends ListPage {
|
|
|
232
217
|
: Theme.muted(dir + ' is a root already.'),
|
|
233
218
|
};
|
|
234
219
|
}
|
|
235
|
-
forget(id) {
|
|
236
|
-
|
|
220
|
+
async forget(id) {
|
|
221
|
+
const root = id?.startsWith('root:');
|
|
222
|
+
if (!id || (!root && !id.startsWith('project:')))
|
|
223
|
+
return {};
|
|
224
|
+
const folder = id.slice(root ? 5 : 8);
|
|
225
|
+
const ok = await this.app.ask((root ? 'Remove the root ' : 'Forget ') + path.basename(folder) + '?', [
|
|
226
|
+
root
|
|
227
|
+
? 'Its projects are no longer opened without a restart.'
|
|
228
|
+
: 'The project is dropped from your list of projects.',
|
|
229
|
+
'Nothing in ' + folder + ' is touched.',
|
|
230
|
+
], root ? 'Remove' : 'Forget', true);
|
|
231
|
+
if (!ok)
|
|
232
|
+
return {};
|
|
233
|
+
if (id.startsWith('root:')) {
|
|
237
234
|
const { dir, removed } = this.projects.removeRoot(id.slice(5));
|
|
238
235
|
return {
|
|
239
236
|
reload: true,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type Tab } from '../../tui/index.js';
|
|
2
|
-
import type { ConfigFile } from '
|
|
2
|
+
import type { ConfigFile } from '../../../app/features/settings/index.js';
|
|
3
3
|
export type Scope = 'user' | 'project';
|
|
4
4
|
export declare const SCOPES: {
|
|
5
5
|
scope: Scope;
|
|
@@ -1,18 +1,16 @@
|
|
|
1
|
+
import { type SessionsList } from '../../../app/features/sessions/index.js';
|
|
1
2
|
import type { Context } from '../../commands/context.js';
|
|
2
|
-
import {
|
|
3
|
-
import { type App, type ListOptions, type ListResult } from '../../tui/index.js';
|
|
3
|
+
import type { App, ListOptions, ListResult } from '../../tui/index.js';
|
|
4
4
|
import { ListPage, type Outcome } from './list-page.js';
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
/** Newest first, this folder's project first. */
|
|
8
|
-
readonly sessions: readonly ListedSession[];
|
|
9
|
-
}
|
|
5
|
+
/** What the page shows: the sessions query's result (the folder column is never shown here). */
|
|
6
|
+
export type SessionsModel = Omit<SessionsList, 'wide'>;
|
|
10
7
|
/** The list for the sessions tab. Pure. */
|
|
11
8
|
export declare function sessionsOptions(m: SessionsModel): ListOptions<string>;
|
|
12
9
|
export declare class SessionsPage extends ListPage<string> {
|
|
10
|
+
private readonly ctx;
|
|
13
11
|
readonly label = "Sessions";
|
|
14
12
|
private model;
|
|
15
|
-
private readonly
|
|
13
|
+
private readonly operations;
|
|
16
14
|
constructor(app: App, ctx: Context);
|
|
17
15
|
protected load(): Promise<void>;
|
|
18
16
|
protected options(): ListOptions<string>;
|
|
@@ -1,94 +1,41 @@
|
|
|
1
|
-
//
|
|
2
|
-
// menu), r restarts the agents.
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { Theme } from '../../tui/index.js';
|
|
1
|
+
// Section 2: the agent sessions of the running sandbox, as the sessions view shows them (src/app/features/sessions).
|
|
2
|
+
// Enter shows one in this terminal (the one thing that leaves the menu), r restarts the agents.
|
|
3
|
+
import { listSessions, sessionsPage } from '../../../app/features/sessions/index.js';
|
|
4
|
+
import { readQuery } from '../../../app/registry.js';
|
|
5
|
+
import { MenuOperations } from '../io-menu.js';
|
|
6
|
+
import { menuView } from '../render-view.js';
|
|
8
7
|
import { ListPage } from './list-page.js';
|
|
8
|
+
function view(m) {
|
|
9
|
+
return menuView(sessionsPage({ ...m, wide: false }));
|
|
10
|
+
}
|
|
9
11
|
/** The list for the sessions tab. Pure. */
|
|
10
12
|
export function sessionsOptions(m) {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
intro: m.sandboxRunning
|
|
14
|
-
? undefined
|
|
15
|
-
: 'No sandbox is running. Start one on the Start tab (1); its sessions are listed here.',
|
|
16
|
-
items: m.sessions.map((s) => ({
|
|
17
|
-
value: s.id,
|
|
18
|
-
label: safeText(s.harness) + ' ' + safeText(s.projectName ?? '-'),
|
|
19
|
-
hint: s.phase + (s.exitCode !== undefined ? ' (' + s.exitCode + ')' : '') + ' ' + ago(s.startedAt),
|
|
20
|
-
section: s.here ? "This folder's project" : 'Other sessions',
|
|
21
|
-
description: s.phase === 'running'
|
|
22
|
-
? 'Enter shows this session in this terminal (Ctrl+] detaches; the session keeps running).'
|
|
23
|
-
: undefined,
|
|
24
|
-
details: [
|
|
25
|
-
Theme.muted('Session ') + s.id,
|
|
26
|
-
Theme.muted('Folder ') + safeText(s.cwd),
|
|
27
|
-
Theme.muted('Attached ') + viewerText(s.viewers),
|
|
28
|
-
],
|
|
29
|
-
...(s.phase === 'running' ? {} : { disabled: 'This session has ended.' }),
|
|
30
|
-
})),
|
|
31
|
-
empty: 'No sessions yet.',
|
|
32
|
-
actions: [
|
|
33
|
-
{ key: 'r', label: 'restart agents', importance: 1 },
|
|
34
|
-
{ key: 'o', label: 'reopen last sessions', importance: 2 },
|
|
35
|
-
{ key: 'l', label: 'refresh', importance: 3 },
|
|
36
|
-
],
|
|
37
|
-
enterLabel: 'attach',
|
|
38
|
-
escapeLabel: 'quit',
|
|
39
|
-
};
|
|
13
|
+
const v = view(m);
|
|
14
|
+
return { path: [], items: v.items, actions: v.actions, enterLabel: v.enterLabel };
|
|
40
15
|
}
|
|
41
16
|
export class SessionsPage extends ListPage {
|
|
17
|
+
ctx;
|
|
42
18
|
label = 'Sessions';
|
|
43
|
-
model
|
|
44
|
-
|
|
19
|
+
model;
|
|
20
|
+
operations;
|
|
45
21
|
constructor(app, ctx) {
|
|
46
22
|
super(app);
|
|
47
|
-
this.
|
|
23
|
+
this.ctx = ctx;
|
|
24
|
+
this.operations = new MenuOperations(app, ctx);
|
|
25
|
+
this.model = { sandboxRunning: false, sessions: [], defaultAgent: ctx.loaded.config.defaultHarness };
|
|
48
26
|
}
|
|
49
27
|
async load() {
|
|
50
|
-
|
|
51
|
-
try {
|
|
52
|
-
const list = sandboxRunning ? await this.service.list() : [];
|
|
53
|
-
this.model = { sandboxRunning, sessions: this.service.ordered(list) };
|
|
54
|
-
}
|
|
55
|
-
catch (e) {
|
|
56
|
-
this.model = { sandboxRunning, sessions: [] };
|
|
57
|
-
this.say(Theme.error(Theme.glyph.cross + ' ' + errMsg(e)));
|
|
58
|
-
}
|
|
28
|
+
this.model = await readQuery(listSessions, this.ctx);
|
|
59
29
|
}
|
|
60
30
|
options() {
|
|
61
31
|
return sessionsOptions(this.model);
|
|
62
32
|
}
|
|
63
33
|
async act(result) {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
if (result.kind !== 'action')
|
|
34
|
+
const chosen = view(this.model).resolve(result);
|
|
35
|
+
if (!chosen)
|
|
67
36
|
return {};
|
|
68
|
-
if (
|
|
37
|
+
if (chosen.kind === 'refresh')
|
|
69
38
|
return { reload: true };
|
|
70
|
-
|
|
71
|
-
return { exit: { kind: 'run', argv: ['resume'] } };
|
|
72
|
-
if (!this.model.sandboxRunning)
|
|
73
|
-
return { notice: Theme.warn('No sandbox is running.') };
|
|
74
|
-
const scope = this.service.restartScope(false);
|
|
75
|
-
const what = scope.guest ? 'the agents of ' + scope.projectName : 'every agent';
|
|
76
|
-
const ok = await this.app.ask('Restart ' + what + '?', [
|
|
77
|
-
'The agents are started again and continue their conversations where they can.',
|
|
78
|
-
...(scope.notAProject
|
|
79
|
-
? [scope.folder + ' is not a project of the running sandbox: every session restarts.']
|
|
80
|
-
: []),
|
|
81
|
-
], 'Restart');
|
|
82
|
-
if (!ok)
|
|
83
|
-
return {};
|
|
84
|
-
try {
|
|
85
|
-
return {
|
|
86
|
-
reload: true,
|
|
87
|
-
notice: Theme.ok(Theme.glyph.ok + ' ' + safeText(await this.service.restart(null, scope.guest))),
|
|
88
|
-
};
|
|
89
|
-
}
|
|
90
|
-
catch (e) {
|
|
91
|
-
return { notice: Theme.error(Theme.glyph.cross + ' ' + errMsg(e)) };
|
|
92
|
-
}
|
|
39
|
+
return this.operations.perform(chosen.action, [this.label], (text) => this.busy(text));
|
|
93
40
|
}
|
|
94
41
|
}
|
|
@@ -1,27 +1,23 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import type {
|
|
1
|
+
import { settingsOf, type ConfigFile, type Setting } from '../../../app/features/settings/index.js';
|
|
2
|
+
import type { Context } from '../../commands/context.js';
|
|
3
|
+
import { type App, type ListItem, type ListOptions, type ListResult } from '../../tui/index.js';
|
|
3
4
|
import type { Draft } from '../settings/draft.js';
|
|
4
|
-
import type { SchemaNode } from '../settings/schema-node.js';
|
|
5
5
|
import { type Scope } from './scopes.js';
|
|
6
6
|
import { ListPage, type Outcome } from './list-page.js';
|
|
7
|
-
export
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
}
|
|
13
|
-
/** Every editable setting with the category and heading it is shown under. */
|
|
14
|
-
export declare function settingsOf(file: ConfigFile): Setting[];
|
|
15
|
-
/** The list for the settings tab. Pure (reads the files it is given). */
|
|
16
|
-
export declare function settingsOptions(files: Record<Scope, ConfigFile>, scope: Scope, draft: Draft): ListOptions<string>;
|
|
7
|
+
export { settingsOf, type Setting };
|
|
8
|
+
/** The row in General that opens the data folder flow (your own settings only). */
|
|
9
|
+
export declare const DATA_FOLDER = "@data-folder";
|
|
10
|
+
/** The list for the settings section. Pure (reads the files it is given). `extra` are rows that are not settings. */
|
|
11
|
+
export declare function settingsOptions(files: Record<Scope, ConfigFile>, scope: Scope, draft: Draft, extra?: readonly ListItem<string>[]): ListOptions<string>;
|
|
17
12
|
export declare class SettingsPage extends ListPage<string> {
|
|
18
13
|
private readonly files;
|
|
19
14
|
private readonly draft;
|
|
15
|
+
private readonly ctx;
|
|
20
16
|
readonly label = "Settings";
|
|
21
17
|
readonly stages = true;
|
|
22
18
|
private scope;
|
|
23
19
|
private readonly editor;
|
|
24
|
-
constructor(app: App, files: Record<Scope, ConfigFile>, draft: Draft);
|
|
20
|
+
constructor(app: App, files: Record<Scope, ConfigFile>, draft: Draft, ctx: Context);
|
|
25
21
|
private get file();
|
|
26
22
|
protected load(): Promise<void>;
|
|
27
23
|
protected options(): ListOptions<string>;
|