windows-development-sandbox 1.5.0 → 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/config.example.json +27 -1
- package/dist/app/context.d.ts +8 -0
- package/dist/app/context.js +12 -0
- package/dist/app/features/defs.d.ts +322 -0
- package/dist/app/features/defs.js +28 -0
- package/dist/app/features/sandbox/index.d.ts +2 -0
- package/dist/app/features/sandbox/index.js +3 -0
- package/dist/app/features/sandbox/sandbox.def.d.ts +193 -0
- package/dist/app/features/sandbox/sandbox.def.js +245 -0
- package/dist/app/features/sandbox/sandbox.run.d.ts +72 -0
- package/dist/app/features/sandbox/sandbox.run.js +98 -0
- package/dist/app/features/sessions/index.d.ts +2 -0
- package/dist/app/features/sessions/index.js +3 -0
- package/dist/app/features/sessions/sessions.def.d.ts +141 -0
- package/dist/app/features/sessions/sessions.def.js +176 -0
- package/dist/app/features/sessions/sessions.run.d.ts +39 -0
- package/dist/app/features/sessions/sessions.run.js +58 -0
- package/dist/{cli/menu/settings/categories.d.ts → app/features/settings/categories.def.d.ts} +4 -0
- package/dist/{cli/menu/settings/categories.js → app/features/settings/categories.def.js} +40 -46
- package/dist/app/features/settings/index.d.ts +5 -0
- package/dist/app/features/settings/index.js +6 -0
- package/dist/{cli/menu/settings/config-file.d.ts → app/features/settings/settings-file.d.ts} +1 -1
- package/dist/{cli/menu/settings/config-file.js → app/features/settings/settings-file.js} +1 -1
- package/dist/app/features/settings/settings-rows.d.ts +35 -0
- package/dist/app/features/settings/settings-rows.js +94 -0
- package/dist/app/features/settings/settings.def.d.ts +157 -0
- package/dist/app/features/settings/settings.def.js +179 -0
- package/dist/app/features/settings/settings.run.d.ts +67 -0
- package/dist/app/features/settings/settings.run.js +84 -0
- package/dist/app/kernel/define.d.ts +143 -0
- package/dist/app/kernel/define.js +42 -0
- package/dist/app/kernel/errors.d.ts +34 -0
- package/dist/app/kernel/errors.js +45 -0
- package/dist/app/kernel/fields.d.ts +70 -0
- package/dist/app/kernel/fields.js +243 -0
- package/dist/app/kernel/index.d.ts +8 -0
- package/dist/app/kernel/index.js +10 -0
- package/dist/app/kernel/io.d.ts +193 -0
- package/dist/app/kernel/io.js +126 -0
- package/dist/app/kernel/rpc.d.ts +156 -0
- package/dist/app/kernel/rpc.js +47 -0
- package/dist/{cli/menu/settings → app/kernel}/schema-node.d.ts +9 -0
- package/dist/{cli/menu/settings → app/kernel}/schema-node.js +26 -0
- package/dist/app/kernel/text.d.ts +6 -0
- package/dist/app/kernel/text.js +57 -0
- package/dist/app/kernel/view.d.ts +146 -0
- package/dist/app/kernel/view.js +28 -0
- package/dist/app/registry.d.ts +10 -0
- package/dist/app/registry.js +50 -0
- package/dist/cli/args.d.ts +18 -2
- package/dist/cli/args.js +101 -24
- package/dist/cli/commands/accounts.js +45 -17
- package/dist/cli/commands/context.d.ts +2 -0
- package/dist/cli/commands/context.js +9 -2
- package/dist/cli/commands/data/clean.js +32 -9
- package/dist/cli/commands/engine.d.ts +2 -0
- package/dist/cli/commands/engine.js +60 -0
- package/dist/cli/commands/index.d.ts +2 -1
- package/dist/cli/commands/index.js +2 -1
- package/dist/cli/commands/launch/add-root.d.ts +3 -2
- package/dist/cli/commands/launch/add-root.js +11 -10
- package/dist/cli/commands/launch/launch.js +102 -9
- package/dist/cli/commands/launch/prepare.js +6 -4
- package/dist/cli/commands/launch/running.js +2 -1
- package/dist/cli/commands/launch/summary.d.ts +2 -0
- package/dist/cli/commands/maintenance/audit.js +1 -1
- package/dist/cli/commands/maintenance/clean.d.ts +1 -1
- package/dist/cli/commands/maintenance/clean.js +17 -3
- package/dist/cli/commands/maintenance/config-share.d.ts +12 -0
- package/dist/cli/commands/maintenance/config-share.js +80 -0
- package/dist/cli/commands/maintenance/config.d.ts +1 -1
- package/dist/cli/commands/maintenance/config.js +38 -10
- package/dist/cli/commands/maintenance/doctor.d.ts +1 -1
- package/dist/cli/commands/maintenance/doctor.js +2 -4
- package/dist/cli/commands/maintenance/logs.js +14 -0
- package/dist/cli/commands/maintenance/migrate.d.ts +2 -1
- package/dist/cli/commands/maintenance/migrate.js +19 -4
- package/dist/cli/commands/maintenance/sync.js +2 -0
- package/dist/cli/commands/maintenance/update.d.ts +2 -0
- package/dist/cli/commands/maintenance/update.js +27 -4
- package/dist/cli/commands/projects/here.js +12 -7
- package/dist/cli/commands/projects/projects.js +26 -17
- package/dist/cli/commands/registry.js +10 -7
- package/dist/cli/commands/repair/checks/agents.d.ts +2 -0
- package/dist/cli/commands/repair/checks/agents.js +70 -0
- package/dist/cli/commands/repair/checks/common.d.ts +8 -0
- package/dist/cli/commands/repair/checks/common.js +22 -0
- package/dist/cli/commands/repair/checks/contained.d.ts +2 -0
- package/dist/cli/commands/repair/checks/contained.js +139 -0
- package/dist/cli/commands/repair/checks/data.d.ts +2 -0
- package/dist/cli/commands/repair/checks/data.js +241 -0
- package/dist/cli/commands/repair/checks/hcs.d.ts +7 -0
- package/dist/cli/commands/repair/checks/hcs.js +28 -0
- package/dist/cli/commands/repair/checks/index.d.ts +2 -0
- package/dist/cli/commands/repair/checks/index.js +24 -0
- package/dist/cli/commands/repair/checks/install.d.ts +5 -0
- package/dist/cli/commands/repair/checks/install.js +318 -0
- package/dist/cli/commands/repair/checks/machine.d.ts +2 -0
- package/dist/cli/commands/repair/checks/machine.js +232 -0
- package/dist/cli/commands/repair/checks/network.d.ts +6 -0
- package/dist/cli/commands/repair/checks/network.js +60 -0
- package/dist/cli/commands/repair/checks/pc.d.ts +4 -0
- package/dist/cli/commands/repair/checks/pc.js +86 -0
- package/dist/cli/commands/repair/checks/sandbox.d.ts +2 -0
- package/dist/cli/commands/repair/checks/sandbox.js +282 -0
- package/dist/cli/commands/repair/checks/settings.d.ts +2 -0
- package/dist/cli/commands/repair/checks/settings.js +169 -0
- package/dist/cli/commands/repair/checks/vpn.d.ts +2 -0
- package/dist/cli/commands/repair/checks/vpn.js +78 -0
- package/dist/cli/commands/repair/engine.d.ts +32 -0
- package/dist/cli/commands/repair/engine.js +127 -0
- package/dist/cli/commands/repair/env.d.ts +7 -0
- package/dist/cli/commands/repair/env.js +50 -0
- package/dist/cli/commands/repair/index.d.ts +1 -9
- package/dist/cli/commands/repair/index.js +2 -54
- package/dist/cli/commands/repair/log.d.ts +17 -0
- package/dist/cli/commands/repair/log.js +82 -0
- package/dist/cli/commands/repair/printer.d.ts +32 -0
- package/dist/cli/commands/repair/printer.js +132 -0
- package/dist/cli/commands/repair/run.d.ts +33 -0
- package/dist/cli/commands/repair/run.js +133 -0
- package/dist/cli/commands/repair/types.d.ts +97 -9
- package/dist/cli/commands/repair/types.js +11 -7
- package/dist/cli/commands/resume.js +2 -2
- package/dist/cli/commands/sessions/index.d.ts +0 -4
- package/dist/cli/commands/sessions/index.js +3 -7
- package/dist/cli/commands/setup/index.d.ts +5 -0
- package/dist/cli/commands/setup/index.js +25 -1
- package/dist/cli/commands/shared-use.d.ts +5 -2
- package/dist/cli/commands/shared-use.js +11 -8
- package/dist/cli/commands/storage/contained.d.ts +3 -0
- package/dist/cli/commands/storage/contained.js +179 -0
- package/dist/cli/commands/storage/index.d.ts +2 -0
- package/dist/cli/commands/storage/index.js +2 -0
- package/dist/cli/commands/storage/offer.d.ts +3 -0
- package/dist/cli/commands/storage/offer.js +91 -0
- package/dist/cli/commands/storage/storage.d.ts +8 -0
- package/dist/cli/commands/storage/storage.js +179 -0
- package/dist/cli/commands/user-config.js +2 -2
- package/dist/cli/commands/vpn.d.ts +4 -0
- package/dist/cli/commands/vpn.js +91 -0
- package/dist/cli/commands/web.d.ts +4 -0
- package/dist/cli/commands/web.js +97 -0
- package/dist/cli/history.js +1 -1
- package/dist/cli/index.js +48 -4
- package/dist/cli/manifest.d.ts +339 -97
- package/dist/cli/manifest.js +222 -67
- package/dist/cli/menu/add-agent.d.ts +47 -0
- package/dist/cli/menu/add-agent.js +168 -0
- package/dist/cli/menu/apps.d.ts +38 -3
- package/dist/cli/menu/apps.js +80 -5
- package/dist/cli/menu/command-fields.d.ts +18 -0
- package/dist/cli/menu/command-fields.js +61 -0
- package/dist/cli/menu/command-form.d.ts +22 -0
- package/dist/cli/menu/command-form.js +169 -46
- package/dist/cli/menu/data-folder.d.ts +18 -0
- package/dist/cli/menu/data-folder.js +99 -0
- package/dist/cli/menu/io-menu.d.ts +29 -0
- package/dist/cli/menu/io-menu.js +126 -0
- package/dist/cli/menu/live.d.ts +27 -0
- package/dist/cli/menu/live.js +69 -0
- package/dist/cli/menu/memory.d.ts +19 -0
- package/dist/cli/menu/memory.js +53 -0
- package/dist/cli/menu/menu.d.ts +11 -2
- package/dist/cli/menu/menu.js +36 -15
- package/dist/cli/menu/pages/accounts-page.js +55 -24
- package/dist/cli/menu/pages/agents-page.d.ts +68 -0
- package/dist/cli/menu/pages/agents-page.js +345 -0
- package/dist/cli/menu/pages/apps-page.d.ts +3 -1
- package/dist/cli/menu/pages/apps-page.js +20 -4
- package/dist/cli/menu/pages/list-page.d.ts +43 -3
- package/dist/cli/menu/pages/list-page.js +146 -12
- package/dist/cli/menu/pages/maintenance-page.d.ts +9 -5
- package/dist/cli/menu/pages/maintenance-page.js +172 -85
- package/dist/cli/menu/pages/sandbox-page.d.ts +7 -6
- package/dist/cli/menu/pages/sandbox-page.js +117 -120
- package/dist/cli/menu/pages/scopes.d.ts +1 -1
- package/dist/cli/menu/pages/sessions-page.d.ts +6 -8
- package/dist/cli/menu/pages/sessions-page.js +22 -75
- package/dist/cli/menu/pages/settings-page.d.ts +10 -14
- package/dist/cli/menu/pages/settings-page.js +95 -102
- package/dist/cli/menu/render-view.d.ts +28 -0
- package/dist/cli/menu/render-view.js +112 -0
- package/dist/cli/menu/settings/ask-path.d.ts +14 -0
- package/dist/cli/menu/settings/ask-path.js +14 -0
- package/dist/cli/menu/settings/collections/collection-editor.d.ts +8 -2
- package/dist/cli/menu/settings/collections/collection-editor.js +12 -8
- package/dist/cli/menu/settings/collections/map-editor.js +5 -1
- package/dist/cli/menu/settings/collections/object-list-editor.js +2 -2
- package/dist/cli/menu/settings/collections/object-map-editor.js +2 -2
- package/dist/cli/menu/settings/collections/string-list-editor.d.ts +10 -1
- package/dist/cli/menu/settings/collections/string-list-editor.js +23 -0
- package/dist/cli/menu/settings/draft.d.ts +1 -1
- package/dist/cli/menu/settings/format.d.ts +1 -3
- package/dist/cli/menu/settings/format.js +6 -36
- package/dist/cli/menu/settings/index.d.ts +1 -3
- package/dist/cli/menu/settings/index.js +3 -3
- package/dist/cli/menu/settings/object-editor.d.ts +6 -2
- package/dist/cli/menu/settings/object-editor.js +15 -4
- package/dist/cli/menu/settings/share.d.ts +36 -0
- package/dist/cli/menu/settings/share.js +131 -0
- package/dist/cli/menu/settings/value-editor.d.ts +10 -1
- package/dist/cli/menu/settings/value-editor.js +99 -63
- package/dist/cli/menu/several.js +7 -5
- package/dist/cli/menu/share-settings.d.ts +21 -0
- package/dist/cli/menu/share-settings.js +112 -0
- package/dist/cli/menu/shell.d.ts +53 -10
- package/dist/cli/menu/shell.js +115 -10
- package/dist/cli/menu/views.d.ts +7 -0
- package/dist/cli/menu/views.js +11 -0
- package/dist/cli/menu/vpn-login.d.ts +16 -0
- package/dist/cli/menu/vpn-login.js +74 -0
- package/dist/cli/operations/handler.d.ts +6 -0
- package/dist/cli/operations/handler.js +61 -0
- package/dist/cli/operations/index.d.ts +4 -0
- package/dist/cli/operations/index.js +5 -0
- package/dist/cli/operations/input.d.ts +6 -0
- package/dist/cli/operations/input.js +37 -0
- package/dist/cli/operations/io-cli.d.ts +7 -0
- package/dist/cli/operations/io-cli.js +62 -0
- package/dist/cli/operations/spec.d.ts +18 -0
- package/dist/cli/operations/spec.js +108 -0
- package/dist/cli/output/colors.d.ts +2 -2
- package/dist/cli/output/colors.js +2 -11
- package/dist/cli/output/index.d.ts +1 -0
- package/dist/cli/output/index.js +1 -0
- package/dist/cli/output/print.d.ts +5 -1
- package/dist/cli/output/print.js +15 -4
- package/dist/cli/output/progress.d.ts +15 -0
- package/dist/cli/output/progress.js +44 -0
- package/dist/cli/output/render-view.d.ts +4 -0
- package/dist/cli/output/render-view.js +63 -0
- package/dist/cli/services/accounts-service.d.ts +2 -0
- package/dist/cli/services/accounts-service.js +2 -2
- package/dist/cli/services/agent-commands-service.d.ts +2 -0
- package/dist/cli/services/agent-commands-service.js +11 -2
- package/dist/cli/services/health-service.d.ts +0 -6
- package/dist/cli/services/health-service.js +5 -42
- package/dist/cli/services/index.d.ts +3 -1
- package/dist/cli/services/index.js +3 -1
- package/dist/cli/services/logs-service.js +4 -3
- package/dist/cli/services/migrate-service.js +1 -1
- package/dist/cli/services/update-service.d.ts +2 -0
- package/dist/cli/services/update-service.js +13 -6
- package/dist/cli/services/vpn-service.d.ts +28 -0
- package/dist/cli/services/vpn-service.js +46 -0
- package/dist/cli/services/web-service.d.ts +22 -0
- package/dist/cli/services/web-service.js +111 -0
- package/dist/cli/tui/app.d.ts +12 -4
- package/dist/cli/tui/app.js +38 -9
- package/dist/cli/tui/dialogs/path-listing.d.ts +43 -0
- package/dist/cli/tui/dialogs/path-listing.js +127 -0
- package/dist/cli/tui/dialogs/path-picker.d.ts +67 -0
- package/dist/cli/tui/dialogs/path-picker.js +423 -0
- package/dist/cli/tui/dialogs/text-screen.d.ts +6 -0
- package/dist/cli/tui/dialogs/text-screen.js +10 -3
- package/dist/cli/tui/frame.d.ts +7 -10
- package/dist/cli/tui/frame.js +19 -10
- package/dist/cli/tui/index.d.ts +4 -3
- package/dist/cli/tui/index.js +2 -1
- package/dist/cli/tui/list/list-screen.d.ts +28 -2
- package/dist/cli/tui/list/list-screen.js +130 -66
- package/dist/cli/tui/list/list-types.d.ts +10 -4
- package/dist/cli/tui/nav.d.ts +29 -0
- package/dist/cli/tui/nav.js +67 -0
- package/dist/cli/tui/terminal.d.ts +7 -0
- package/dist/cli/tui/terminal.js +30 -10
- package/dist/cli/validate.d.ts +1 -1
- package/dist/cli/validate.js +3 -3
- package/dist/cli/version.d.ts +2 -0
- package/dist/cli/version.js +11 -0
- package/dist/core/config/defaults.js +13 -1
- package/dist/core/config/loader.js +12 -2
- package/dist/core/local-config/overrides.js +1 -0
- package/dist/core/prompt.d.ts +19 -0
- package/dist/core/prompt.js +43 -3
- package/dist/core/schema/common.d.ts +6 -0
- package/dist/core/schema/common.js +8 -0
- package/dist/core/schema/config.d.ts +36 -0
- package/dist/core/schema/config.js +26 -2
- package/dist/core/schema/harness.d.ts +2 -0
- package/dist/core/schema/harness.js +13 -2
- package/dist/core/schema/index.d.ts +3 -1
- package/dist/core/schema/index.js +3 -1
- package/dist/core/schema/profile.d.ts +1 -0
- package/dist/core/schema/profile.js +3 -0
- package/dist/core/schema/redact.d.ts +13 -0
- package/dist/core/schema/redact.js +75 -0
- package/dist/core/schema/sandbox.d.ts +6 -0
- package/dist/core/schema/sandbox.js +21 -3
- package/dist/core/schema/vpn.d.ts +18 -0
- package/dist/core/schema/vpn.js +22 -0
- package/dist/core/schema/web.d.ts +6 -0
- package/dist/core/schema/web.js +14 -0
- package/dist/core/types.d.ts +44 -0
- package/dist/core/util/fs.d.ts +2 -0
- package/dist/core/util/fs.js +9 -0
- package/dist/core/util/index.d.ts +1 -1
- package/dist/core/util/index.js +1 -1
- package/dist/guest/agents/agent-files.d.ts +54 -0
- package/dist/guest/agents/agent-files.js +67 -0
- package/dist/guest/agents/agent-installer.js +2 -9
- package/dist/guest/agents/local-state.d.ts +14 -0
- package/dist/guest/agents/local-state.js +218 -0
- package/dist/guest/agents/sbx-agent.d.ts +2 -0
- package/dist/guest/agents/sbx-agent.js +35 -0
- package/dist/guest/boot/boot.d.ts +4 -0
- package/dist/guest/boot/boot.js +51 -11
- package/dist/guest/daemon/daemon.js +8 -1
- package/dist/guest/daemon/exec.js +2 -1
- package/dist/guest/daemon/idle-shutdown.js +2 -0
- package/dist/guest/daemon/sessions.d.ts +5 -0
- package/dist/guest/daemon/sessions.js +20 -3
- package/dist/guest/entries/agent.d.ts +1 -0
- package/dist/guest/entries/agent.js +10 -0
- package/dist/guest/entries/daemon.js +5 -0
- package/dist/guest/governor/decide.d.ts +61 -0
- package/dist/guest/governor/decide.js +182 -0
- package/dist/guest/governor/governor.d.ts +42 -0
- package/dist/guest/governor/governor.js +214 -0
- package/dist/guest/governor/index.d.ts +2 -0
- package/dist/guest/governor/index.js +2 -0
- package/dist/guest/runtime/csc.d.ts +2 -0
- package/dist/guest/runtime/csc.js +2 -0
- package/dist/guest/runtime/secrets.d.ts +12 -0
- package/dist/guest/runtime/secrets.js +63 -0
- package/dist/guest/sessions/viewer.js +3 -1
- package/dist/guest/setup/claude-profile.d.ts +2 -1
- package/dist/guest/setup/claude-profile.js +12 -1
- package/dist/guest/setup/environment.d.ts +6 -0
- package/dist/guest/setup/environment.js +56 -6
- package/dist/guest/setup/path-plan.d.ts +32 -0
- package/dist/guest/setup/path-plan.js +67 -0
- package/dist/guest/setup/shell-path.d.ts +1 -0
- package/dist/guest/setup/shell-path.js +22 -0
- package/dist/guest/toolchains/languages/python.js +1 -1
- package/dist/guest/toolchains/native/rust-extras.js +4 -2
- package/dist/guest/toolchains/runtimes.js +2 -2
- package/dist/guest/vpn/index.d.ts +1 -0
- package/dist/guest/vpn/index.js +1 -0
- package/dist/guest/vpn/openvpn.d.ts +9 -0
- package/dist/guest/vpn/openvpn.js +47 -0
- package/dist/guest/vpn/tunnel.d.ts +17 -0
- package/dist/guest/vpn/tunnel.js +78 -0
- package/dist/guest/vpn/vpn.d.ts +6 -0
- package/dist/guest/vpn/vpn.js +174 -0
- package/dist/guest/vpn/wireguard.d.ts +32 -0
- package/dist/guest/vpn/wireguard.js +132 -0
- package/dist/host/agent-commands/commands.d.ts +4 -0
- package/dist/host/agent-commands/commands.js +31 -7
- package/dist/host/audit/log.d.ts +1 -1
- package/dist/host/channel/attach.d.ts +6 -2
- package/dist/host/channel/attach.js +6 -3
- package/dist/host/channel/channel.d.ts +9 -0
- package/dist/host/channel/channel.js +30 -2
- package/dist/host/engines/engine.d.ts +12 -0
- package/dist/host/engines/engine.js +1 -0
- package/dist/host/engines/hcs/check.d.ts +25 -0
- package/dist/host/engines/hcs/check.js +95 -0
- package/dist/host/engines/hcs/documents.d.ts +44 -0
- package/dist/host/engines/hcs/documents.js +155 -0
- package/dist/host/engines/hcs/engine.d.ts +39 -0
- package/dist/host/engines/hcs/engine.js +171 -0
- package/dist/host/engines/hcs/helper.d.ts +43 -0
- package/dist/host/engines/hcs/helper.js +173 -0
- package/dist/host/engines/hcs/images.d.ts +37 -0
- package/dist/host/engines/hcs/images.js +152 -0
- package/dist/host/engines/index.d.ts +7 -0
- package/dist/host/engines/index.js +5 -0
- package/dist/host/engines/registry.d.ts +16 -0
- package/dist/host/engines/registry.js +30 -0
- package/dist/host/engines/types.d.ts +58 -0
- package/dist/host/engines/types.js +1 -0
- package/dist/host/engines/windows-sandbox/engine.d.ts +16 -0
- package/dist/host/engines/windows-sandbox/engine.js +63 -0
- package/dist/host/engines/windows-sandbox/wsb-text.d.ts +2 -0
- package/dist/host/engines/windows-sandbox/wsb-text.js +29 -0
- package/dist/host/health/acl-read.d.ts +17 -0
- package/dist/host/health/acl-read.js +45 -0
- package/dist/host/health/config-backup.d.ts +11 -0
- package/dist/host/health/config-backup.js +73 -0
- package/dist/host/health/index.d.ts +6 -0
- package/dist/host/health/index.js +7 -0
- package/dist/host/health/install-state.d.ts +33 -0
- package/dist/host/health/install-state.js +110 -0
- package/dist/host/health/path-copies.d.ts +32 -0
- package/dist/host/health/path-copies.js +82 -0
- package/dist/host/health/stale.d.ts +45 -0
- package/dist/host/health/stale.js +120 -0
- package/dist/host/health/system.d.ts +37 -0
- package/dist/host/health/system.js +87 -0
- package/dist/host/install/copies.d.ts +13 -0
- package/dist/host/install/copies.js +63 -0
- package/dist/host/install/index.d.ts +1 -0
- package/dist/host/install/index.js +1 -0
- package/dist/host/launch/generate.d.ts +5 -1
- package/dist/host/launch/generate.js +73 -7
- package/dist/host/launch/index.d.ts +3 -1
- package/dist/host/launch/index.js +3 -1
- package/dist/host/launch/launch-plan.d.ts +13 -0
- package/dist/host/launch/launch-plan.js +26 -0
- package/dist/host/launch/mappings.js +2 -1
- package/dist/host/launch/risk-notes.d.ts +10 -0
- package/dist/host/launch/risk-notes.js +18 -0
- package/dist/host/launch/session-file.d.ts +2 -0
- package/dist/host/launch/session-file.js +11 -2
- package/dist/host/launch/stage.js +1 -1
- package/dist/host/launch/wsb-file.d.ts +28 -4
- package/dist/host/launch/wsb-file.js +61 -42
- package/dist/host/life/crash-report.d.ts +27 -1
- package/dist/host/life/crash-report.js +173 -7
- package/dist/host/life/host-memory.d.ts +40 -0
- package/dist/host/life/host-memory.js +137 -0
- package/dist/host/life/index.d.ts +2 -0
- package/dist/host/life/index.js +2 -0
- package/dist/host/life/stop-events.d.ts +2 -0
- package/dist/host/life/stop-events.js +20 -3
- package/dist/host/life/stop-warning.js +1 -1
- package/dist/host/life/watchdog.d.ts +54 -0
- package/dist/host/life/watchdog.js +108 -0
- package/dist/host/migrate/backup.js +3 -0
- package/dist/host/migrate/migrations/config-file.d.ts +2 -0
- package/dist/host/migrate/migrations/config-file.js +7 -0
- package/dist/host/migrate/migrations/follow-machine-storage.js +9 -1
- package/dist/host/migrate/migrations/pin-storage-root.d.ts +4 -0
- package/dist/host/migrate/migrations/pin-storage-root.js +46 -0
- package/dist/host/migrate/migrations/unpin-config-defaults.js +4 -1
- package/dist/host/migrate/registry.js +2 -1
- package/dist/host/native.d.ts +3 -2
- package/dist/host/native.js +22 -3
- package/dist/host/profile/accounts.d.ts +25 -1
- package/dist/host/profile/accounts.js +96 -13
- package/dist/host/profile/agent-accounts.d.ts +5 -1
- package/dist/host/profile/agent-accounts.js +35 -5
- package/dist/host/profile/claude-login.js +3 -2
- package/dist/host/profile/index.d.ts +2 -1
- package/dist/host/profile/index.js +1 -0
- package/dist/host/profile/plugin-share.d.ts +26 -0
- package/dist/host/profile/plugin-share.js +146 -0
- package/dist/host/projects/join.d.ts +7 -1
- package/dist/host/projects/join.js +21 -4
- package/dist/host/projects/registry.d.ts +16 -10
- package/dist/host/projects/registry.js +74 -6
- package/dist/host/sandbox/contained-deps.d.ts +2 -0
- package/dist/host/sandbox/contained-deps.js +17 -0
- package/dist/host/sandbox/index.d.ts +2 -0
- package/dist/host/sandbox/index.js +2 -0
- package/dist/host/sandbox/platform.d.ts +4 -0
- package/dist/host/sandbox/platform.js +23 -4
- package/dist/host/sandbox/tasklist.d.ts +13 -0
- package/dist/host/sandbox/tasklist.js +47 -0
- package/dist/host/secrets/index.d.ts +2 -0
- package/dist/host/secrets/index.js +2 -0
- package/dist/host/secrets/launch-secrets.d.ts +17 -0
- package/dist/host/secrets/launch-secrets.js +94 -0
- package/dist/host/secrets/secret-store.d.ts +25 -0
- package/dist/host/secrets/secret-store.js +89 -0
- package/dist/host/sharing/acl.d.ts +16 -2
- package/dist/host/sharing/acl.js +35 -10
- package/dist/host/sharing/current.js +8 -3
- package/dist/host/sharing/doctor.d.ts +2 -0
- package/dist/host/sharing/doctor.js +44 -0
- package/dist/host/sharing/group-access.d.ts +6 -0
- package/dist/host/sharing/group-access.js +24 -0
- package/dist/host/sharing/index.d.ts +2 -1
- package/dist/host/sharing/index.js +2 -1
- package/dist/host/sharing/lifecycle.d.ts +8 -2
- package/dist/host/sharing/lifecycle.js +16 -7
- package/dist/host/storage/cleanup.d.ts +2 -0
- package/dist/host/storage/cleanup.js +2 -1
- package/dist/host/storage/contained/check.d.ts +9 -0
- package/dist/host/storage/contained/check.js +37 -0
- package/dist/host/storage/contained/contained-storage.d.ts +66 -0
- package/dist/host/storage/contained/contained-storage.js +168 -0
- package/dist/host/storage/contained/disk-port.d.ts +43 -0
- package/dist/host/storage/contained/disk-port.js +122 -0
- package/dist/host/storage/contained/index.d.ts +9 -0
- package/dist/host/storage/contained/index.js +8 -0
- package/dist/host/storage/contained/layout.d.ts +28 -0
- package/dist/host/storage/contained/layout.js +45 -0
- package/dist/host/storage/contained/resolve.d.ts +4 -0
- package/dist/host/storage/contained/resolve.js +30 -0
- package/dist/host/storage/contained/setting.d.ts +1 -0
- package/dist/host/storage/contained/setting.js +5 -0
- package/dist/host/storage/contained/state.d.ts +89 -0
- package/dist/host/storage/contained/state.js +166 -0
- package/dist/host/storage/contained/transfer.d.ts +24 -0
- package/dist/host/storage/contained/transfer.js +121 -0
- package/dist/host/storage/history.d.ts +21 -0
- package/dist/host/storage/history.js +49 -0
- package/dist/host/storage/index.d.ts +6 -0
- package/dist/host/storage/index.js +6 -0
- package/dist/host/storage/move.d.ts +95 -0
- package/dist/host/storage/move.js +384 -0
- package/dist/host/storage/offer.d.ts +11 -0
- package/dist/host/storage/offer.js +36 -0
- package/dist/host/storage/providers/contained.d.ts +15 -0
- package/dist/host/storage/providers/contained.js +39 -0
- package/dist/host/storage/providers/folder.d.ts +12 -0
- package/dist/host/storage/providers/folder.js +20 -0
- package/dist/host/storage/providers/index.d.ts +4 -0
- package/dist/host/storage/providers/index.js +3 -0
- package/dist/host/storage/providers/registry.d.ts +9 -0
- package/dist/host/storage/providers/registry.js +14 -0
- package/dist/host/storage/providers/types.d.ts +33 -0
- package/dist/host/storage/providers/types.js +1 -0
- package/dist/host/storage/root.d.ts +18 -0
- package/dist/host/storage/root.js +77 -0
- package/dist/host/tools/conpty.js +3 -2
- package/dist/host/tools/windows-terminal.d.ts +2 -0
- package/dist/host/tools/windows-terminal.js +31 -12
- package/dist/host/update/index.d.ts +1 -1
- package/dist/host/update/index.js +1 -1
- package/dist/host/update/notice.d.ts +2 -0
- package/dist/host/update/notice.js +13 -1
- package/dist/host/update/update-state.d.ts +6 -0
- package/dist/host/update/update-state.js +2 -0
- package/dist/host/update/updater.d.ts +19 -0
- package/dist/host/update/updater.js +88 -12
- package/dist/host/vpn/index.d.ts +4 -0
- package/dist/host/vpn/index.js +4 -0
- package/dist/host/vpn/login.d.ts +24 -0
- package/dist/host/vpn/login.js +79 -0
- package/dist/host/vpn/nordvpn.d.ts +21 -0
- package/dist/host/vpn/nordvpn.js +77 -0
- package/dist/host/vpn/prepare.d.ts +19 -0
- package/dist/host/vpn/prepare.js +138 -0
- package/dist/host/vpn/status.d.ts +12 -0
- package/dist/host/vpn/status.js +53 -0
- package/dist/host/web/auth.d.ts +38 -0
- package/dist/host/web/auth.js +96 -0
- package/dist/host/web/backend.d.ts +14 -0
- package/dist/host/web/backend.js +1 -0
- package/dist/host/web/bridge.d.ts +27 -0
- package/dist/host/web/bridge.js +144 -0
- package/dist/host/web/browser.d.ts +3 -0
- package/dist/host/web/browser.js +23 -0
- package/dist/host/web/control.d.ts +17 -0
- package/dist/host/web/control.js +67 -0
- package/dist/host/web/index.d.ts +10 -0
- package/dist/host/web/index.js +9 -0
- package/dist/host/web/rpc.d.ts +24 -0
- package/dist/host/web/rpc.js +149 -0
- package/dist/host/web/runner.d.ts +16 -0
- package/dist/host/web/runner.js +44 -0
- package/dist/host/web/server.d.ts +47 -0
- package/dist/host/web/server.js +238 -0
- package/dist/host/web/state.d.ts +20 -0
- package/dist/host/web/state.js +41 -0
- package/dist/host/web/static-files.d.ts +13 -0
- package/dist/host/web/static-files.js +57 -0
- package/dist/runtime/agent.js +27675 -0
- package/dist/runtime/daemon.js +1950 -1122
- package/dist/runtime/db.js +302 -111
- package/dist/runtime/main.js +1560 -275
- package/dist/runtime/netproxy.js +168 -8
- package/dist/runtime/view.js +186 -13
- package/dist/selftest/accounts.test.js +40 -0
- package/dist/selftest/agent-paths.test.d.ts +2 -0
- package/dist/selftest/agent-paths.test.js +125 -0
- package/dist/selftest/app.test.d.ts +2 -0
- package/dist/selftest/app.test.js +324 -0
- package/dist/selftest/channel.test.js +18 -0
- package/dist/selftest/cli.test.js +35 -4
- package/dist/selftest/config.test.js +59 -0
- package/dist/selftest/contained.test.d.ts +2 -0
- package/dist/selftest/contained.test.js +544 -0
- package/dist/selftest/credentials.test.d.ts +2 -0
- package/dist/selftest/credentials.test.js +198 -0
- package/dist/selftest/engine.test.d.ts +2 -0
- package/dist/selftest/engine.test.js +127 -0
- package/dist/selftest/generate.test.js +1 -1
- package/dist/selftest/hcs.test.d.ts +2 -0
- package/dist/selftest/hcs.test.js +482 -0
- package/dist/selftest/health.test.d.ts +2 -0
- package/dist/selftest/health.test.js +470 -0
- package/dist/selftest/heavy-load.test.d.ts +2 -0
- package/dist/selftest/heavy-load.test.js +329 -0
- package/dist/selftest/host-sim.test.js +2 -0
- package/dist/selftest/index.js +31 -0
- package/dist/selftest/layout.test.js +14 -0
- package/dist/selftest/menu-perf.test.d.ts +2 -0
- package/dist/selftest/menu-perf.test.js +248 -0
- package/dist/selftest/menu-screens.d.ts +7 -0
- package/dist/selftest/menu-screens.js +68 -17
- package/dist/selftest/menu.test.js +603 -22
- package/dist/selftest/migrate.test.js +1 -1
- package/dist/selftest/personalization.test.js +3 -1
- package/dist/selftest/projects.test.js +39 -1
- package/dist/selftest/shared-use.test.js +64 -2
- package/dist/selftest/sharing.test.js +50 -1
- package/dist/selftest/storage.test.d.ts +2 -0
- package/dist/selftest/storage.test.js +363 -0
- package/dist/selftest/support/engine-cases.d.ts +8 -0
- package/dist/selftest/support/engine-cases.js +65 -0
- package/dist/selftest/support/engine-golden.d.ts +3 -0
- package/dist/selftest/support/engine-golden.js +66 -0
- package/dist/selftest/support/fixtures.d.ts +20 -0
- package/dist/selftest/support/hcs-probes.d.ts +17 -0
- package/dist/selftest/support/hcs-probes.js +41 -0
- package/dist/selftest/support/releases.js +1 -1
- package/dist/selftest/toolchains.test.js +21 -0
- package/dist/selftest/update-service.test.js +87 -3
- package/dist/selftest/vpn.test.d.ts +2 -0
- package/dist/selftest/vpn.test.js +412 -0
- package/dist/selftest/web.test.d.ts +2 -0
- package/dist/selftest/web.test.js +402 -0
- package/dist/shared/apps/catalogue.js +31 -0
- package/dist/shared/channel/index.d.ts +1 -0
- package/dist/shared/channel/index.js +1 -0
- package/dist/shared/channel/run-dir.d.ts +9 -1
- package/dist/shared/channel/run-dir.js +18 -1
- package/dist/shared/channel/schema.d.ts +53 -0
- package/dist/shared/channel/schema.js +38 -0
- package/dist/shared/channel/secrets.d.ts +29 -0
- package/dist/shared/channel/secrets.js +50 -0
- package/dist/shared/memory/index.d.ts +1 -0
- package/dist/shared/memory/index.js +1 -0
- package/dist/shared/memory/policy.d.ts +33 -0
- package/dist/shared/memory/policy.js +55 -0
- package/dist/shared/pty/output-filter.d.ts +14 -1
- package/dist/shared/pty/output-filter.js +22 -4
- package/dist/shared/pty/terminal.d.ts +4 -1
- package/dist/shared/pty/terminal.js +4 -2
- package/dist/shared/system.d.ts +1 -0
- package/dist/shared/system.js +1 -0
- package/dist/shared/vpn/download.d.ts +29 -0
- package/dist/shared/vpn/download.js +30 -0
- package/dist/shared/vpn/kill-switch.d.ts +18 -0
- package/dist/shared/vpn/kill-switch.js +81 -0
- package/dist/shared/vpn/ovpn.d.ts +23 -0
- package/dist/shared/vpn/ovpn.js +244 -0
- package/dist/shared/vpn/wireguard.d.ts +51 -0
- package/dist/shared/vpn/wireguard.js +227 -0
- package/dist/shared/web/index.d.ts +1 -0
- package/dist/shared/web/index.js +1 -0
- package/dist/shared/web/protocol.d.ts +61 -0
- package/dist/shared/web/protocol.js +35 -0
- package/dist/sync/sync-cycle.js +9 -5
- package/dist/sync/sync-state.d.ts +1 -0
- package/dist/sync/sync-state.js +1 -0
- package/dist/sync/watcher.d.ts +13 -0
- package/dist/sync/watcher.js +102 -3
- package/dist/web/index.html +14 -0
- package/dist/web/main-NRRS5O6Z.js +157 -0
- package/dist/web/main-T5DMCHYV.css +1 -0
- package/native/csharp/FolderSecurity.cs +29 -0
- package/native/csharp/HcsHost/AssemblyInfo.cs +14 -0
- package/native/csharp/HcsHost/Guard.cs +100 -0
- package/native/csharp/HcsHost/Hcs.cs +256 -0
- package/native/csharp/HcsHost/Json.cs +78 -0
- package/native/csharp/HcsHost/Program.cs +185 -0
- package/native/csharp/HcsHost/VirtualDisk.cs +95 -0
- package/native/csharp/HostTools/AssemblyInfo.cs +14 -0
- package/native/csharp/HostTools/MemoryStatus.cs +107 -0
- package/native/csharp/HostTools/Program.cs +58 -17
- package/native/scripts/check-contained.ps1 +28 -0
- package/native/scripts/contained-common.ps1 +241 -0
- package/native/scripts/dismount-contained.ps1 +66 -0
- package/native/scripts/memory-status.ps1 +34 -0
- package/native/scripts/mount-contained.ps1 +139 -0
- package/native/scripts/protect-data.ps1 +29 -0
- package/native/scripts/read-folder-sddl.ps1 +10 -0
- package/native/scripts/run-elevated.ps1 +17 -4
- package/native/scripts/set-folder-access.ps1 +49 -7
- package/native/scripts/stop-events.ps1 +23 -8
- package/node_modules/ws/LICENSE +20 -0
- package/node_modules/ws/README.md +548 -0
- package/node_modules/ws/browser.js +8 -0
- package/node_modules/ws/index.js +22 -0
- package/node_modules/ws/lib/buffer-util.js +131 -0
- package/node_modules/ws/lib/constants.js +19 -0
- package/node_modules/ws/lib/event-target.js +292 -0
- package/node_modules/ws/lib/extension.js +203 -0
- package/node_modules/ws/lib/limiter.js +55 -0
- package/node_modules/ws/lib/permessage-deflate.js +530 -0
- package/node_modules/ws/lib/receiver.js +743 -0
- package/node_modules/ws/lib/sender.js +607 -0
- package/node_modules/ws/lib/stream.js +161 -0
- package/node_modules/ws/lib/subprotocol.js +62 -0
- package/node_modules/ws/lib/validation.js +152 -0
- package/node_modules/ws/lib/websocket-server.js +562 -0
- package/node_modules/ws/lib/websocket.js +1421 -0
- package/node_modules/ws/package.json +74 -0
- package/node_modules/ws/wrapper.mjs +21 -0
- package/package.json +22 -5
- package/sandbox/csharp/EnvBroadcast.cs +33 -0
- package/sandbox/csharp/MemGov.cs +398 -0
- package/sandbox/csharp/PathSync.cs +90 -0
- package/sandbox/csharp/PtyHost.cs +111 -5
- package/sandbox/scripts/install-shell-path.ps1 +73 -0
- package/sandbox/scripts/set-machine-environment.ps1 +37 -4
- package/schemas/config.schema.json +136 -7
- package/schemas/sandbox-config.schema.json +17 -4
- package/dist/cli/commands/repair/checks.d.ts +0 -2
- package/dist/cli/commands/repair/checks.js +0 -246
- package/dist/cli/commands/sessions/control.d.ts +0 -4
- package/dist/cli/commands/sessions/control.js +0 -66
- package/dist/cli/commands/sessions/list.d.ts +0 -2
- package/dist/cli/commands/sessions/list.js +0 -45
- package/dist/cli/commands/sessions/status.d.ts +0 -2
- package/dist/cli/commands/sessions/status.js +0 -93
- package/dist/cli/commands/sessions/window.d.ts +0 -3
- package/dist/cli/commands/sessions/window.js +0 -18
- package/dist/cli/menu/pages/start-page.d.ts +0 -43
- package/dist/cli/menu/pages/start-page.js +0 -192
- package/dist/cli/tui/tab-bar.d.ts +0 -9
- package/dist/cli/tui/tab-bar.js +0 -33
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
// "Add an agent": a few questions (how it installs, its name, its package or program) that end in a new entry of
|
|
2
|
+
// `harnesses` in your own config file. It is written at once, unless harnesses has unsaved changes in Settings (then
|
|
3
|
+
// it joins them). Everything else about the agent (arguments, login folders ...) is edited in Settings > Agents &
|
|
4
|
+
// sessions.
|
|
5
|
+
import { DEFAULTS } from '../../core/config/index.js';
|
|
6
|
+
import { HarnessSchema, NameSchema, describeIssues } from '../../core/schema/index.js';
|
|
7
|
+
import { fail } from '../../core/util/index.js';
|
|
8
|
+
import { askPath } from './settings/ask-path.js';
|
|
9
|
+
/** Nothing wrong with the name (true), or what is wrong. Pure. */
|
|
10
|
+
export function agentNameProblem(name, taken) {
|
|
11
|
+
const typed = name.trim();
|
|
12
|
+
if (!typed)
|
|
13
|
+
return 'Type a name.';
|
|
14
|
+
const parsed = NameSchema.safeParse(typed);
|
|
15
|
+
if (!parsed.success)
|
|
16
|
+
return 'Use letters, numbers, - and _ only.';
|
|
17
|
+
if (taken.some((t) => t.toLowerCase() === typed.toLowerCase()))
|
|
18
|
+
return typed + ' is an agent already.';
|
|
19
|
+
return true;
|
|
20
|
+
}
|
|
21
|
+
/** The command a package usually provides: "@scope/my-agent@latest" gives "my-agent". Pure. */
|
|
22
|
+
export function commandFromPackage(pkg) {
|
|
23
|
+
const version = pkg.lastIndexOf('@');
|
|
24
|
+
const bare = version > 0 ? pkg.slice(0, version) : pkg;
|
|
25
|
+
return (bare.split(/[\\/]/).pop() ?? '').replace(/[^A-Za-z0-9._-]/g, '');
|
|
26
|
+
}
|
|
27
|
+
/** The config entry for a new agent. Pure. */
|
|
28
|
+
export function newAgent(source, what, command, hostDir = 'auto') {
|
|
29
|
+
const common = { arguments: [], environment: {} };
|
|
30
|
+
if (source === 'npm')
|
|
31
|
+
return { ...common, npmPackage: what, npmBin: command };
|
|
32
|
+
if (source === 'uv')
|
|
33
|
+
return { ...common, uvPackage: what, uvBin: command };
|
|
34
|
+
return { ...common, hostExecutable: what, hostDir };
|
|
35
|
+
}
|
|
36
|
+
/** What `harnesses` should say with `name` taken out. Pure. */
|
|
37
|
+
export function withoutAgent(current, name) {
|
|
38
|
+
const rest = { ...(current && typeof current === 'object' ? current : {}) };
|
|
39
|
+
delete rest[name];
|
|
40
|
+
return rest;
|
|
41
|
+
}
|
|
42
|
+
/** Writes a setting to your config file now, or adds it to the unsaved changes when it has some already. */
|
|
43
|
+
export function writeOrStage(file, draft, key, value) {
|
|
44
|
+
if (draft.has(file, key)) {
|
|
45
|
+
draft.stage(file, key, value);
|
|
46
|
+
return { saved: false };
|
|
47
|
+
}
|
|
48
|
+
const result = file.set(key, value);
|
|
49
|
+
if (typeof result === 'object')
|
|
50
|
+
fail('It could not be saved: ' + result.problems.join('; '));
|
|
51
|
+
return { saved: true };
|
|
52
|
+
}
|
|
53
|
+
/** What `harnesses` should say with `name` added to what is staged or in the file now. Pure. */
|
|
54
|
+
export function withAgent(current, name, harness) {
|
|
55
|
+
return { ...(current && typeof current === 'object' ? current : {}), [name]: harness };
|
|
56
|
+
}
|
|
57
|
+
/** The staged value of a setting, else what your own file says (what `harnesses` or `defaultHarness` will be). */
|
|
58
|
+
function current(file, draft, key) {
|
|
59
|
+
return draft.has(file, key) ? draft.value(file, key) : file.valueInFile(key);
|
|
60
|
+
}
|
|
61
|
+
/** Makes `name` the agent that starts by default (written now, or joined to unsaved changes to that setting). */
|
|
62
|
+
export function makeDefaultAgent(file, draft, name) {
|
|
63
|
+
return writeOrStage(file, draft, ['defaultHarness'], name);
|
|
64
|
+
}
|
|
65
|
+
/** Takes an agent you added out of your settings (the built-in ones are not removable). */
|
|
66
|
+
export function removeAgent(file, draft, name) {
|
|
67
|
+
if (name in DEFAULTS.harnesses)
|
|
68
|
+
fail(name + ' is built in, so it cannot be removed.');
|
|
69
|
+
const key = ['harnesses'];
|
|
70
|
+
const standing = current(file, draft, ['defaultHarness']) ?? file.userConfig().defaultHarness;
|
|
71
|
+
if (standing === name)
|
|
72
|
+
fail(name + ' is the default agent.', 'Make another agent the default first.');
|
|
73
|
+
const rest = withoutAgent(current(file, draft, key), name);
|
|
74
|
+
// Nothing of your own left: the setting goes (the built-in agents need no line).
|
|
75
|
+
return writeOrStage(file, draft, key, Object.keys(rest).length ? rest : undefined);
|
|
76
|
+
}
|
|
77
|
+
export class AddAgent {
|
|
78
|
+
app;
|
|
79
|
+
file;
|
|
80
|
+
draft;
|
|
81
|
+
taken;
|
|
82
|
+
constructor(app, file, draft,
|
|
83
|
+
/** Every agent that exists now (the new name must be different). */
|
|
84
|
+
taken) {
|
|
85
|
+
this.app = app;
|
|
86
|
+
this.file = file;
|
|
87
|
+
this.draft = draft;
|
|
88
|
+
this.taken = taken;
|
|
89
|
+
}
|
|
90
|
+
/** Asks, then adds the agent. Undefined when you backed out. */
|
|
91
|
+
async run() {
|
|
92
|
+
const path = ['Agents', 'Add an agent'];
|
|
93
|
+
const source = await this.app.choose(path, 'How does the agent get into the sandbox?', [
|
|
94
|
+
{
|
|
95
|
+
value: 'npm',
|
|
96
|
+
label: 'An npm package',
|
|
97
|
+
description: 'Installed inside the sandbox with npm once and kept (e.g. @openai/codex).',
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
value: 'uv',
|
|
101
|
+
label: 'A Python package',
|
|
102
|
+
description: 'Installed inside the sandbox with uv once and kept (e.g. aider-chat).',
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
value: 'host',
|
|
106
|
+
label: 'A program on this PC',
|
|
107
|
+
description: 'An .exe copied from this PC into the sandbox (looked up on PATH and in ~/.local/bin).',
|
|
108
|
+
},
|
|
109
|
+
]);
|
|
110
|
+
if (!source)
|
|
111
|
+
return undefined;
|
|
112
|
+
const name = await this.app.text({
|
|
113
|
+
path,
|
|
114
|
+
label: 'Name of the agent',
|
|
115
|
+
about: ['What you type after "sandbox", e.g. sandbox <name>. Letters, numbers, - and _.'],
|
|
116
|
+
validate: (v) => agentNameProblem(v, this.taken),
|
|
117
|
+
});
|
|
118
|
+
if (!name)
|
|
119
|
+
return undefined;
|
|
120
|
+
if (source === 'host') {
|
|
121
|
+
const exe = await askPath(this.app, {
|
|
122
|
+
path,
|
|
123
|
+
title: 'Choose the program (.exe)',
|
|
124
|
+
about: ['The agent program on this PC. It is copied into the sandbox. A bare file name is looked up on PATH.'],
|
|
125
|
+
kind: 'file',
|
|
126
|
+
validate: (v) => (v.trim() ? true : 'Choose a file.'),
|
|
127
|
+
});
|
|
128
|
+
if (!exe)
|
|
129
|
+
return undefined;
|
|
130
|
+
const slash = Math.max(exe.lastIndexOf('\\'), exe.lastIndexOf('/'));
|
|
131
|
+
const dir = slash > 0 ? exe.slice(0, slash) : 'auto';
|
|
132
|
+
return this.add(name.trim(), newAgent('host', exe.slice(slash + 1), '', dir));
|
|
133
|
+
}
|
|
134
|
+
const what = await this.app.text({
|
|
135
|
+
path,
|
|
136
|
+
label: source === 'npm' ? 'npm package' : 'Python package',
|
|
137
|
+
about: [
|
|
138
|
+
source === 'npm'
|
|
139
|
+
? 'The package to install, optionally with a version: @scope/name or name@latest.'
|
|
140
|
+
: 'The package for `uv tool install`.',
|
|
141
|
+
],
|
|
142
|
+
validate: (v) => (v.trim() ? true : 'Type it.'),
|
|
143
|
+
});
|
|
144
|
+
if (!what)
|
|
145
|
+
return undefined;
|
|
146
|
+
const command = await this.app.text({
|
|
147
|
+
path,
|
|
148
|
+
label: 'Command',
|
|
149
|
+
about: ['The command the package provides; it is what runs inside the sandbox.'],
|
|
150
|
+
initial: commandFromPackage(what.trim()),
|
|
151
|
+
validate: (v) => (/^[A-Za-z0-9._-]+$/.test(v.trim()) ? true : 'Letters, numbers, . - and _ only.'),
|
|
152
|
+
});
|
|
153
|
+
if (!command)
|
|
154
|
+
return undefined;
|
|
155
|
+
return this.add(name.trim(), newAgent(source, what.trim(), command.trim()));
|
|
156
|
+
}
|
|
157
|
+
/** Validates and writes (or stages) the entry. */
|
|
158
|
+
add(name, harness) {
|
|
159
|
+
const checked = HarnessSchema.safeParse(harness);
|
|
160
|
+
if (!checked.success)
|
|
161
|
+
fail('That agent is not valid: ' + describeIssues(checked.error).join('; '));
|
|
162
|
+
const key = ['harnesses'];
|
|
163
|
+
return {
|
|
164
|
+
name,
|
|
165
|
+
...writeOrStage(this.file, this.draft, key, withAgent(current(this.file, this.draft, key), name, harness)),
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
}
|
package/dist/cli/menu/apps.d.ts
CHANGED
|
@@ -1,8 +1,43 @@
|
|
|
1
|
-
import { type AppEntry } from '../../shared/apps/index.js';
|
|
1
|
+
import { type AppCategory, type AppEntry } from '../../shared/apps/index.js';
|
|
2
2
|
import { type Category, type ListItem } from '../tui/index.js';
|
|
3
|
-
import type { ConfigFile } from '
|
|
3
|
+
import type { ConfigFile } from '../../app/features/settings/index.js';
|
|
4
4
|
import type { Draft } from './settings/draft.js';
|
|
5
5
|
export declare const CUSTOM = "@custom:";
|
|
6
|
+
/** The catalogue has many small categories; the menu shows these few groups so the navigation stays short. */
|
|
7
|
+
export declare const APP_GROUPS: readonly [{
|
|
8
|
+
readonly id: "editors";
|
|
9
|
+
readonly label: "Editors & docs";
|
|
10
|
+
readonly description: "Code and text editors (VS Code is on by default), plus diagrams and document conversion.";
|
|
11
|
+
readonly members: readonly ["editors", "diagrams"];
|
|
12
|
+
}, {
|
|
13
|
+
readonly id: "clients";
|
|
14
|
+
readonly label: "DB & API clients";
|
|
15
|
+
readonly description: "GUIs for the sandbox databases, tools to send HTTP, REST and GraphQL requests, and to inspect traffic.";
|
|
16
|
+
readonly members: readonly ["databases", "api", "network"];
|
|
17
|
+
}, {
|
|
18
|
+
readonly id: "tools";
|
|
19
|
+
readonly label: "Git & utilities";
|
|
20
|
+
readonly description: "Git GUIs and terminal UIs, archives, file search and comparing, process tools, and decompilers.";
|
|
21
|
+
readonly members: readonly ["git", "utilities", "reversing"];
|
|
22
|
+
}, {
|
|
23
|
+
readonly id: "cli";
|
|
24
|
+
readonly label: "Command-line & cloud";
|
|
25
|
+
readonly description: "Small developer tools (JSON, search, builds, media ...) and tools for clouds and Kubernetes.";
|
|
26
|
+
readonly members: readonly ["cli", "cloud"];
|
|
27
|
+
}, {
|
|
28
|
+
readonly id: "play";
|
|
29
|
+
readonly label: "Browsers & games";
|
|
30
|
+
readonly description: "Browsers for testing web apps, and game engines and editors (they draw with OpenGL on the CPU).";
|
|
31
|
+
readonly members: readonly ["browsers", "gamedev"];
|
|
32
|
+
}];
|
|
33
|
+
/** The group an app category is shown under. */
|
|
34
|
+
export declare function groupOf(category: AppCategory): string;
|
|
35
|
+
/** The row in Apps that opens the "request an app" issue form (its id is not an app). */
|
|
36
|
+
export declare const REQUEST_APP = "@request-app";
|
|
37
|
+
/** This project's new-issue page on GitHub. */
|
|
38
|
+
export declare const ISSUES_URL = "https://github.com/JoshDiDuca/windows-development-sandbox/issues/new";
|
|
39
|
+
/** The new-issue address with a title and a body to fill in (the page needs no login to show it). */
|
|
40
|
+
export declare function requestAppUrl(): string;
|
|
6
41
|
export declare class AppsModel {
|
|
7
42
|
private readonly file;
|
|
8
43
|
private readonly dataPath;
|
|
@@ -29,6 +64,6 @@ export declare class AppsModel {
|
|
|
29
64
|
/** Stages the ticks of the list: only what differs from the saved file is kept in the draft. */
|
|
30
65
|
stageTicks(draft: Draft, ticked: readonly string[]): void;
|
|
31
66
|
}
|
|
32
|
-
/** For
|
|
67
|
+
/** For notices: "12 apps chosen". */
|
|
33
68
|
export declare function appsSummary(file: ConfigFile): string;
|
|
34
69
|
export declare function appLabel(id: string): string;
|
package/dist/cli/menu/apps.js
CHANGED
|
@@ -4,10 +4,71 @@
|
|
|
4
4
|
import fs from 'node:fs';
|
|
5
5
|
import path from 'node:path';
|
|
6
6
|
import _ from 'lodash';
|
|
7
|
-
import {
|
|
7
|
+
import { APPS } from '../../shared/apps/index.js';
|
|
8
8
|
import { Text, Theme } from '../tui/index.js';
|
|
9
9
|
export const CUSTOM = '@custom:';
|
|
10
|
+
/** The catalogue has many small categories; the menu shows these few groups so the navigation stays short. */
|
|
11
|
+
export const APP_GROUPS = [
|
|
12
|
+
{
|
|
13
|
+
id: 'editors',
|
|
14
|
+
label: 'Editors & docs',
|
|
15
|
+
description: 'Code and text editors (VS Code is on by default), plus diagrams and document conversion.',
|
|
16
|
+
members: ['editors', 'diagrams'],
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
id: 'clients',
|
|
20
|
+
label: 'DB & API clients',
|
|
21
|
+
description: 'GUIs for the sandbox databases, tools to send HTTP, REST and GraphQL requests, and to inspect traffic.',
|
|
22
|
+
members: ['databases', 'api', 'network'],
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
id: 'tools',
|
|
26
|
+
label: 'Git & utilities',
|
|
27
|
+
description: 'Git GUIs and terminal UIs, archives, file search and comparing, process tools, and decompilers.',
|
|
28
|
+
members: ['git', 'utilities', 'reversing'],
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
id: 'cli',
|
|
32
|
+
label: 'Command-line & cloud',
|
|
33
|
+
description: 'Small developer tools (JSON, search, builds, media ...) and tools for clouds and Kubernetes.',
|
|
34
|
+
members: ['cli', 'cloud'],
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
id: 'play',
|
|
38
|
+
label: 'Browsers & games',
|
|
39
|
+
description: 'Browsers for testing web apps, and game engines and editors (they draw with OpenGL on the CPU).',
|
|
40
|
+
members: ['browsers', 'gamedev'],
|
|
41
|
+
},
|
|
42
|
+
];
|
|
43
|
+
/** The group an app category is shown under. */
|
|
44
|
+
export function groupOf(category) {
|
|
45
|
+
return APP_GROUPS.find((g) => g.members.includes(category))?.id ?? 'tools';
|
|
46
|
+
}
|
|
10
47
|
const INSTALL = ['apps', 'install'];
|
|
48
|
+
/** The row in Apps that opens the "request an app" issue form (its id is not an app). */
|
|
49
|
+
export const REQUEST_APP = '@request-app';
|
|
50
|
+
/** This project's new-issue page on GitHub. */
|
|
51
|
+
export const ISSUES_URL = 'https://github.com/JoshDiDuca/windows-development-sandbox/issues/new';
|
|
52
|
+
/** The new-issue address with a title and a body to fill in (the page needs no login to show it). */
|
|
53
|
+
export function requestAppUrl() {
|
|
54
|
+
const body = [
|
|
55
|
+
'**App name:**',
|
|
56
|
+
'',
|
|
57
|
+
'**Where to get it** (GitHub releases page or a direct download link):',
|
|
58
|
+
'',
|
|
59
|
+
'**What it is for:**',
|
|
60
|
+
'',
|
|
61
|
+
'**Command-line tool or desktop app?**',
|
|
62
|
+
'',
|
|
63
|
+
'**Does it need a GPU, a license or an account?**',
|
|
64
|
+
].join('\n');
|
|
65
|
+
const query = [
|
|
66
|
+
['title', 'App request: '],
|
|
67
|
+
['body', body],
|
|
68
|
+
['labels', 'app-request'],
|
|
69
|
+
];
|
|
70
|
+
return ISSUES_URL + '?' + query.map(([k, v]) => k + '=' + encodeURIComponent(v)).join('&');
|
|
71
|
+
}
|
|
11
72
|
export class AppsModel {
|
|
12
73
|
file;
|
|
13
74
|
dataPath;
|
|
@@ -21,7 +82,7 @@ export class AppsModel {
|
|
|
21
82
|
}
|
|
22
83
|
categories() {
|
|
23
84
|
return [
|
|
24
|
-
...
|
|
85
|
+
...APP_GROUPS.map(({ id, label, description }) => ({ id, label, description })),
|
|
25
86
|
...(this.file.isProject
|
|
26
87
|
? []
|
|
27
88
|
: [
|
|
@@ -81,13 +142,15 @@ export class AppsModel {
|
|
|
81
142
|
...(entry.needs?.includes('mesa')
|
|
82
143
|
? [Theme.muted('Graphics ') + 'OpenGL on the CPU (Mesa) is added for it']
|
|
83
144
|
: []),
|
|
84
|
-
...(entry.fullGitOnly
|
|
145
|
+
...(entry.fullGitOnly
|
|
146
|
+
? [Theme.warn('Needs full git access (Settings > Projects & setup > Git): it pushes with its own git.')]
|
|
147
|
+
: []),
|
|
85
148
|
...(entry.setting ? [Theme.muted('Setting ') + entry.setting] : []),
|
|
86
149
|
];
|
|
87
150
|
return {
|
|
88
151
|
value: entry.id,
|
|
89
152
|
label: entry.name,
|
|
90
|
-
category: entry.category,
|
|
153
|
+
category: groupOf(entry.category),
|
|
91
154
|
description: entry.about,
|
|
92
155
|
details: notes,
|
|
93
156
|
keywords: entry.id,
|
|
@@ -98,6 +161,18 @@ export class AppsModel {
|
|
|
98
161
|
items(draft) {
|
|
99
162
|
return [
|
|
100
163
|
...this.entries().map((a) => this.item(a, draft)),
|
|
164
|
+
...(this.file.isProject
|
|
165
|
+
? []
|
|
166
|
+
: [
|
|
167
|
+
{
|
|
168
|
+
value: REQUEST_APP,
|
|
169
|
+
label: 'Request an app…',
|
|
170
|
+
category: 'custom',
|
|
171
|
+
description: 'Not in the list? Press r: your browser opens a prefilled request on GitHub (' + ISSUES_URL + ').',
|
|
172
|
+
hint: Theme.muted('press r'),
|
|
173
|
+
disabled: 'Press r to open the request form on GitHub.',
|
|
174
|
+
},
|
|
175
|
+
]),
|
|
101
176
|
...Object.entries(this.custom(draft)).map(([id, a]) => ({
|
|
102
177
|
value: CUSTOM + id,
|
|
103
178
|
label: a.name,
|
|
@@ -128,7 +203,7 @@ export class AppsModel {
|
|
|
128
203
|
draft.stage(this.file, INSTALL, wanted.length || this.file.isProject ? wanted : undefined);
|
|
129
204
|
}
|
|
130
205
|
}
|
|
131
|
-
/** For
|
|
206
|
+
/** For notices: "12 apps chosen". */
|
|
132
207
|
export function appsSummary(file) {
|
|
133
208
|
const config = file.userConfig();
|
|
134
209
|
const n = config.apps.install.length + Object.keys(config.apps.custom).length;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type ArgSpec, type OptionSpec } from '../manifest.js';
|
|
2
|
+
import type { PathKind } from '../../app/kernel/index.js';
|
|
2
3
|
/** What an option accepts, checked while typing (undefined = fine). */
|
|
3
4
|
export declare function optionProblem(o: OptionSpec, v: string): string | undefined;
|
|
4
5
|
export type Field = {
|
|
@@ -13,3 +14,20 @@ export type Field = {
|
|
|
13
14
|
} | {
|
|
14
15
|
kind: 'extra';
|
|
15
16
|
};
|
|
17
|
+
/** The name of an option in the form: its plain label, else the flag made readable (never the raw flag). */
|
|
18
|
+
export declare function optionLabel(o: OptionSpec): string;
|
|
19
|
+
/** The name of an argument in the form. */
|
|
20
|
+
export declare function argLabel(a: ArgSpec): string;
|
|
21
|
+
/** A summary as a sentence for the top of the form: "(beta) your sandbox ..." reads "Beta: your sandbox ...". */
|
|
22
|
+
export declare function plainSummary(summary: string): string;
|
|
23
|
+
/**
|
|
24
|
+
* A description for the form. A leading "(rename)" / "(save)" names the action it belongs to: the form only asks it for
|
|
25
|
+
* that action, so the prefix is dropped. Any other prefix "(claude)" becomes "For claude: ...".
|
|
26
|
+
*/
|
|
27
|
+
export declare function plainDescription(text: string, actions: readonly string[]): string;
|
|
28
|
+
/** The action a description names with a leading "(action)", when it is one of `actions`. */
|
|
29
|
+
export declare function actionOf(text: string, actions: readonly string[]): string | undefined;
|
|
30
|
+
/** A folder or file option (a placeholder of dir / file), or one known by name. */
|
|
31
|
+
export declare function optionPathKind(o: OptionSpec): PathKind | undefined;
|
|
32
|
+
/** A folder or file argument; `first` is the answer to the command's first argument (the action). */
|
|
33
|
+
export declare function argPathKind(a: ArgSpec, command: string, first: string): PathKind | undefined;
|
|
@@ -1,6 +1,9 @@
|
|
|
1
|
+
// What the command form knows about a field: what to call it, how its description reads once the form is filtered by
|
|
2
|
+
// action, and what kind of value it takes (a folder, a file, a number ...). Pure, so the form and its tests share it.
|
|
1
3
|
import fs from 'node:fs';
|
|
2
4
|
import path from 'node:path';
|
|
3
5
|
import { splitArgs } from '../args.js';
|
|
6
|
+
import { Text } from '../tui/index.js';
|
|
4
7
|
import { validNodeSpec, validPythonSpec } from '../validate.js';
|
|
5
8
|
/** What an option accepts, checked while typing (undefined = fine). */
|
|
6
9
|
export function optionProblem(o, v) {
|
|
@@ -21,3 +24,61 @@ export function optionProblem(o, v) {
|
|
|
21
24
|
}
|
|
22
25
|
return undefined;
|
|
23
26
|
}
|
|
27
|
+
/** Plain names for arguments whose own name is a code word. */
|
|
28
|
+
const ARG_LABELS = {
|
|
29
|
+
id: 'Session',
|
|
30
|
+
action: 'What to do',
|
|
31
|
+
targets: 'What to delete',
|
|
32
|
+
suite: 'Test suites',
|
|
33
|
+
value: 'Value',
|
|
34
|
+
folder: 'Folder',
|
|
35
|
+
command: 'Command',
|
|
36
|
+
};
|
|
37
|
+
/** The name of an option in the form: its plain label, else the flag made readable (never the raw flag). */
|
|
38
|
+
export function optionLabel(o) {
|
|
39
|
+
return o.label ?? Text.humanize(o.flag.replace(/^--/, ''));
|
|
40
|
+
}
|
|
41
|
+
/** The name of an argument in the form. */
|
|
42
|
+
export function argLabel(a) {
|
|
43
|
+
return ARG_LABELS[a.name] ?? Text.humanize(a.name);
|
|
44
|
+
}
|
|
45
|
+
const upper = (text) => text.replace(/^./, (c) => c.toUpperCase());
|
|
46
|
+
/** A summary as a sentence for the top of the form: "(beta) your sandbox ..." reads "Beta: your sandbox ...". */
|
|
47
|
+
export function plainSummary(summary) {
|
|
48
|
+
const beta = /^\((beta)\)\s*(.*)$/i.exec(summary);
|
|
49
|
+
return upper(beta ? 'Beta: ' + beta[2] : summary) + '.';
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* A description for the form. A leading "(rename)" / "(save)" names the action it belongs to: the form only asks it for
|
|
53
|
+
* that action, so the prefix is dropped. Any other prefix "(claude)" becomes "For claude: ...".
|
|
54
|
+
*/
|
|
55
|
+
export function plainDescription(text, actions) {
|
|
56
|
+
const m = /^\(([^)]+)\)\s*(.*)$/.exec(text);
|
|
57
|
+
if (!m)
|
|
58
|
+
return upper(text);
|
|
59
|
+
const [, tag, rest] = m;
|
|
60
|
+
return actions.includes(tag.split(/[ /]/)[0]) ? upper(rest) : 'For ' + tag + ': ' + rest;
|
|
61
|
+
}
|
|
62
|
+
/** The action a description names with a leading "(action)", when it is one of `actions`. */
|
|
63
|
+
export function actionOf(text, actions) {
|
|
64
|
+
const tag = /^\(([^)\s/]+)[^)]*\)/.exec(text)?.[1];
|
|
65
|
+
return tag && actions.includes(tag) ? tag : undefined;
|
|
66
|
+
}
|
|
67
|
+
/** A folder or file option (a placeholder of dir / file), or one known by name. */
|
|
68
|
+
export function optionPathKind(o) {
|
|
69
|
+
if (o.value === 'dir' || o.value === 'folder' || o.flag === '--restore')
|
|
70
|
+
return 'dir';
|
|
71
|
+
if (o.value === 'file' || o.flag === '--config')
|
|
72
|
+
return 'file';
|
|
73
|
+
return undefined;
|
|
74
|
+
}
|
|
75
|
+
/** A folder or file argument; `first` is the answer to the command's first argument (the action). */
|
|
76
|
+
export function argPathKind(a, command, first) {
|
|
77
|
+
if (['folder', 'dir', 'directory'].includes(a.name))
|
|
78
|
+
return 'dir';
|
|
79
|
+
if (['file', 'path'].includes(a.name))
|
|
80
|
+
return 'file';
|
|
81
|
+
if (command === 'projects' && a.name === 'value' && ['add', 'remove', 'include', 'exclude'].includes(first))
|
|
82
|
+
return 'dir';
|
|
83
|
+
return undefined;
|
|
84
|
+
}
|
|
@@ -10,9 +10,12 @@ export declare class CommandForm {
|
|
|
10
10
|
/** Answers by field id (arg:<name>, opt:<flag>, json, extra). */
|
|
11
11
|
private readonly values;
|
|
12
12
|
constructor(app: App, ctx: Context, spec: CommandSpec, preset?: string[]);
|
|
13
|
+
/** The actions the command's first argument offers (account: save, use, rename ...). */
|
|
14
|
+
private actions;
|
|
13
15
|
/** Values a choices list names, filled in from config and the running sandbox. */
|
|
14
16
|
private choices;
|
|
15
17
|
private first;
|
|
18
|
+
private valueOf;
|
|
16
19
|
/** Options the form may ask for at all (advanced ones included). */
|
|
17
20
|
private askable;
|
|
18
21
|
private hiddenCount;
|
|
@@ -25,7 +28,26 @@ export declare class CommandForm {
|
|
|
25
28
|
private item;
|
|
26
29
|
/** Shows the form until you run the command (its argv) or go back (null). */
|
|
27
30
|
run(): Promise<string[] | null>;
|
|
31
|
+
private isSwitch;
|
|
32
|
+
/** Sets (or, with no value, clears) a field's answer. */
|
|
33
|
+
private set;
|
|
34
|
+
/** The kind of path a field takes (a folder or a file), if it is one. */
|
|
35
|
+
private pathKind;
|
|
36
|
+
/** A name that does not exist yet (the new login's name): typed, not picked. */
|
|
37
|
+
private freeText;
|
|
38
|
+
/** The values to pick from for a field with a fixed or looked-up set of answers. */
|
|
39
|
+
private options;
|
|
40
|
+
/** Changes one field with the input that fits it. Returns a notice to show (when there is something to say). */
|
|
28
41
|
private edit;
|
|
42
|
+
/** Is the problem with a picked path (true = fine)? Moving or switching the data folder has its own rules. */
|
|
43
|
+
private pathProblem;
|
|
44
|
+
/** Several folders or files (--script ...): a list to add to, change and remove from. */
|
|
45
|
+
private pathList;
|
|
46
|
+
/** projects remove / include / exclude pick from the known projects (or any folder); add takes a folder. */
|
|
47
|
+
private projectAction;
|
|
48
|
+
private projectFolder;
|
|
49
|
+
/** Nothing to pick from (no saved logins, no running session): say what to do, in the form, without an error. */
|
|
50
|
+
private nothingToChoose;
|
|
29
51
|
/** `data clean` targets, ticked from a list with their sizes (never "all": that is typed on purpose). */
|
|
30
52
|
private dataTargets;
|
|
31
53
|
}
|