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,157 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { type Page } from '../../kernel/index.js';
|
|
3
|
+
export declare const ScopeSchema: z.ZodEnum<{
|
|
4
|
+
project: "project";
|
|
5
|
+
user: "user";
|
|
6
|
+
}>;
|
|
7
|
+
export type Scope = z.output<typeof ScopeSchema>;
|
|
8
|
+
/** One setting as every surface shows it. Values are what the file or the merged settings say, secrets as ***. */
|
|
9
|
+
export declare const SettingRowSchema: z.ZodObject<{
|
|
10
|
+
id: z.ZodString;
|
|
11
|
+
key: z.ZodArray<z.ZodString>;
|
|
12
|
+
label: z.ZodString;
|
|
13
|
+
category: z.ZodString;
|
|
14
|
+
section: z.ZodOptional<z.ZodString>;
|
|
15
|
+
field: z.ZodType<import("../../kernel/fields.js").Field, unknown, z.core.$ZodTypeInternals<import("../../kernel/fields.js").Field, unknown>>;
|
|
16
|
+
value: z.ZodUnknown;
|
|
17
|
+
set: z.ZodBoolean;
|
|
18
|
+
yours: z.ZodUnknown;
|
|
19
|
+
yoursSet: z.ZodBoolean;
|
|
20
|
+
inProject: z.ZodOptional<z.ZodUnknown>;
|
|
21
|
+
default: z.ZodOptional<z.ZodUnknown>;
|
|
22
|
+
locked: z.ZodBoolean;
|
|
23
|
+
}, z.core.$strip>;
|
|
24
|
+
export type SettingRow = z.output<typeof SettingRowSchema>;
|
|
25
|
+
export declare const SettingsListSchema: z.ZodObject<{
|
|
26
|
+
scope: z.ZodEnum<{
|
|
27
|
+
project: "project";
|
|
28
|
+
user: "user";
|
|
29
|
+
}>;
|
|
30
|
+
file: z.ZodString;
|
|
31
|
+
exists: z.ZodBoolean;
|
|
32
|
+
dataFolder: z.ZodOptional<z.ZodString>;
|
|
33
|
+
categories: z.ZodArray<z.ZodObject<{
|
|
34
|
+
id: z.ZodString;
|
|
35
|
+
label: z.ZodString;
|
|
36
|
+
description: z.ZodString;
|
|
37
|
+
}, z.core.$strip>>;
|
|
38
|
+
rows: z.ZodArray<z.ZodObject<{
|
|
39
|
+
id: z.ZodString;
|
|
40
|
+
key: z.ZodArray<z.ZodString>;
|
|
41
|
+
label: z.ZodString;
|
|
42
|
+
category: z.ZodString;
|
|
43
|
+
section: z.ZodOptional<z.ZodString>;
|
|
44
|
+
field: z.ZodType<import("../../kernel/fields.js").Field, unknown, z.core.$ZodTypeInternals<import("../../kernel/fields.js").Field, unknown>>;
|
|
45
|
+
value: z.ZodUnknown;
|
|
46
|
+
set: z.ZodBoolean;
|
|
47
|
+
yours: z.ZodUnknown;
|
|
48
|
+
yoursSet: z.ZodBoolean;
|
|
49
|
+
inProject: z.ZodOptional<z.ZodUnknown>;
|
|
50
|
+
default: z.ZodOptional<z.ZodUnknown>;
|
|
51
|
+
locked: z.ZodBoolean;
|
|
52
|
+
}, z.core.$strip>>;
|
|
53
|
+
}, z.core.$strip>;
|
|
54
|
+
export type SettingsList = z.output<typeof SettingsListSchema>;
|
|
55
|
+
export declare const listSettings: import("../../kernel/define.js").QueryDef<z.ZodObject<{
|
|
56
|
+
scope: z.ZodDefault<z.ZodEnum<{
|
|
57
|
+
project: "project";
|
|
58
|
+
user: "user";
|
|
59
|
+
}>>;
|
|
60
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
61
|
+
scope: z.ZodEnum<{
|
|
62
|
+
project: "project";
|
|
63
|
+
user: "user";
|
|
64
|
+
}>;
|
|
65
|
+
file: z.ZodString;
|
|
66
|
+
exists: z.ZodBoolean;
|
|
67
|
+
dataFolder: z.ZodOptional<z.ZodString>;
|
|
68
|
+
categories: z.ZodArray<z.ZodObject<{
|
|
69
|
+
id: z.ZodString;
|
|
70
|
+
label: z.ZodString;
|
|
71
|
+
description: z.ZodString;
|
|
72
|
+
}, z.core.$strip>>;
|
|
73
|
+
rows: z.ZodArray<z.ZodObject<{
|
|
74
|
+
id: z.ZodString;
|
|
75
|
+
key: z.ZodArray<z.ZodString>;
|
|
76
|
+
label: z.ZodString;
|
|
77
|
+
category: z.ZodString;
|
|
78
|
+
section: z.ZodOptional<z.ZodString>;
|
|
79
|
+
field: z.ZodType<import("../../kernel/fields.js").Field, unknown, z.core.$ZodTypeInternals<import("../../kernel/fields.js").Field, unknown>>;
|
|
80
|
+
value: z.ZodUnknown;
|
|
81
|
+
set: z.ZodBoolean;
|
|
82
|
+
yours: z.ZodUnknown;
|
|
83
|
+
yoursSet: z.ZodBoolean;
|
|
84
|
+
inProject: z.ZodOptional<z.ZodUnknown>;
|
|
85
|
+
default: z.ZodOptional<z.ZodUnknown>;
|
|
86
|
+
locked: z.ZodBoolean;
|
|
87
|
+
}, z.core.$strip>>;
|
|
88
|
+
}, z.core.$strip>, "settings.list">;
|
|
89
|
+
export declare const getSetting: import("../../kernel/define.js").QueryDef<z.ZodObject<{
|
|
90
|
+
key: z.ZodString;
|
|
91
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
92
|
+
key: z.ZodString;
|
|
93
|
+
value: z.ZodUnknown;
|
|
94
|
+
}, z.core.$strip>, "settings.get">;
|
|
95
|
+
export declare const setSetting: import("../../kernel/define.js").OperationDef<z.ZodObject<{
|
|
96
|
+
scope: z.ZodDefault<z.ZodEnum<{
|
|
97
|
+
project: "project";
|
|
98
|
+
user: "user";
|
|
99
|
+
}>>;
|
|
100
|
+
key: z.ZodString;
|
|
101
|
+
value: z.ZodUnknown;
|
|
102
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
103
|
+
key: z.ZodString;
|
|
104
|
+
changed: z.ZodBoolean;
|
|
105
|
+
message: z.ZodString;
|
|
106
|
+
}, z.core.$strip>, "settings.set">;
|
|
107
|
+
export declare const resetSetting: import("../../kernel/define.js").OperationDef<z.ZodObject<{
|
|
108
|
+
scope: z.ZodDefault<z.ZodEnum<{
|
|
109
|
+
project: "project";
|
|
110
|
+
user: "user";
|
|
111
|
+
}>>;
|
|
112
|
+
key: z.ZodString;
|
|
113
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
114
|
+
key: z.ZodString;
|
|
115
|
+
changed: z.ZodBoolean;
|
|
116
|
+
message: z.ZodString;
|
|
117
|
+
}, z.core.$strip>, "settings.reset">;
|
|
118
|
+
/** The settings page of one scope: a section per category, each setting with its value and an edit action. */
|
|
119
|
+
export declare function settingsPage(o: SettingsList): Page;
|
|
120
|
+
export declare const settingsView: import("../../kernel/define.js").ViewDef<{
|
|
121
|
+
settings: import("../../kernel/define.js").QueryDef<z.ZodObject<{
|
|
122
|
+
scope: z.ZodDefault<z.ZodEnum<{
|
|
123
|
+
project: "project";
|
|
124
|
+
user: "user";
|
|
125
|
+
}>>;
|
|
126
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
127
|
+
scope: z.ZodEnum<{
|
|
128
|
+
project: "project";
|
|
129
|
+
user: "user";
|
|
130
|
+
}>;
|
|
131
|
+
file: z.ZodString;
|
|
132
|
+
exists: z.ZodBoolean;
|
|
133
|
+
dataFolder: z.ZodOptional<z.ZodString>;
|
|
134
|
+
categories: z.ZodArray<z.ZodObject<{
|
|
135
|
+
id: z.ZodString;
|
|
136
|
+
label: z.ZodString;
|
|
137
|
+
description: z.ZodString;
|
|
138
|
+
}, z.core.$strip>>;
|
|
139
|
+
rows: z.ZodArray<z.ZodObject<{
|
|
140
|
+
id: z.ZodString;
|
|
141
|
+
key: z.ZodArray<z.ZodString>;
|
|
142
|
+
label: z.ZodString;
|
|
143
|
+
category: z.ZodString;
|
|
144
|
+
section: z.ZodOptional<z.ZodString>;
|
|
145
|
+
field: z.ZodType<import("../../kernel/fields.js").Field, unknown, z.core.$ZodTypeInternals<import("../../kernel/fields.js").Field, unknown>>;
|
|
146
|
+
value: z.ZodUnknown;
|
|
147
|
+
set: z.ZodBoolean;
|
|
148
|
+
yours: z.ZodUnknown;
|
|
149
|
+
yoursSet: z.ZodBoolean;
|
|
150
|
+
inProject: z.ZodOptional<z.ZodUnknown>;
|
|
151
|
+
default: z.ZodOptional<z.ZodUnknown>;
|
|
152
|
+
locked: z.ZodBoolean;
|
|
153
|
+
}, z.core.$strip>>;
|
|
154
|
+
}, z.core.$strip>, "settings.list">;
|
|
155
|
+
}, {
|
|
156
|
+
scope: Scope;
|
|
157
|
+
}, "settings">;
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
// Settings: every setting of your own file (all projects) or of this folder's .sandbox-config.json (this project), read
|
|
2
|
+
// from the config schema through Fields, with get, set and reset. Pure: schemas and the view; the rows are made on the
|
|
3
|
+
// Node side (settings-rows.ts) because the config schema is, and secrets never leave it unmasked.
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
import { action, defineOperation, defineQuery, defineView, FieldSchema, link, valueText, } from '../../kernel/index.js';
|
|
6
|
+
export const ScopeSchema = z
|
|
7
|
+
.enum(['user', 'project'])
|
|
8
|
+
.describe("Your own settings (all projects) or this folder's .sandbox-config.json (this project)");
|
|
9
|
+
const KeySchema = z
|
|
10
|
+
.string()
|
|
11
|
+
.regex(/^[A-Za-z0-9_$-]+(\.[A-Za-z0-9_$-]+)*$/)
|
|
12
|
+
.max(200)
|
|
13
|
+
.describe('The setting, e.g. sandbox.memoryMb');
|
|
14
|
+
/** One setting as every surface shows it. Values are what the file or the merged settings say, secrets as ***. */
|
|
15
|
+
export const SettingRowSchema = z.object({
|
|
16
|
+
id: z.string().describe('The setting, e.g. sandbox.memoryMb'),
|
|
17
|
+
key: z.array(z.string()),
|
|
18
|
+
label: z.string(),
|
|
19
|
+
category: z.string(),
|
|
20
|
+
/** A heading inside the category (Toolchains › Node.js). */
|
|
21
|
+
section: z.string().optional(),
|
|
22
|
+
field: FieldSchema,
|
|
23
|
+
/** In effect in this scope (this project: only what its file says). */
|
|
24
|
+
value: z.unknown(),
|
|
25
|
+
/** Written in this scope's file. */
|
|
26
|
+
set: z.boolean(),
|
|
27
|
+
/** Your own setting in effect (all projects), and whether your file sets it. */
|
|
28
|
+
yours: z.unknown(),
|
|
29
|
+
yoursSet: z.boolean(),
|
|
30
|
+
/** What this project's file says (undefined: not set there, or a project cannot set it). */
|
|
31
|
+
inProject: z.unknown().optional(),
|
|
32
|
+
/** The built-in default (your own settings only). */
|
|
33
|
+
default: z.unknown().optional(),
|
|
34
|
+
/** A project can only make this stricter than your own setting. */
|
|
35
|
+
locked: z.boolean(),
|
|
36
|
+
});
|
|
37
|
+
export const SettingsListSchema = z.object({
|
|
38
|
+
scope: ScopeSchema,
|
|
39
|
+
file: z.string().describe('The file this scope edits'),
|
|
40
|
+
exists: z.boolean(),
|
|
41
|
+
/** Your own settings: where the data folder is (it has its own flow; its setting is not listed). */
|
|
42
|
+
dataFolder: z.string().optional(),
|
|
43
|
+
categories: z.array(z.object({ id: z.string(), label: z.string(), description: z.string() })),
|
|
44
|
+
rows: z.array(SettingRowSchema),
|
|
45
|
+
});
|
|
46
|
+
export const listSettings = defineQuery({
|
|
47
|
+
id: 'settings.list',
|
|
48
|
+
title: 'Settings',
|
|
49
|
+
summary: 'every setting with its value, by category',
|
|
50
|
+
input: z.object({ scope: ScopeSchema.default('user') }),
|
|
51
|
+
output: SettingsListSchema,
|
|
52
|
+
cli: { name: 'config', action: 'list', json: true },
|
|
53
|
+
});
|
|
54
|
+
export const getSetting = defineQuery({
|
|
55
|
+
id: 'settings.get',
|
|
56
|
+
title: 'Get a setting',
|
|
57
|
+
summary: 'show one setting (secrets as ***)',
|
|
58
|
+
input: z.object({ key: KeySchema }),
|
|
59
|
+
output: z.object({ key: z.string(), value: z.unknown() }),
|
|
60
|
+
text: (o) => (typeof o.value === 'string' ? o.value : JSON.stringify(o.value, null, 2)),
|
|
61
|
+
surfaces: { except: { menu: 'Settings shows every value', web: 'the Settings page shows every value' } },
|
|
62
|
+
cli: { name: 'config', action: 'get', positional: ['key'] },
|
|
63
|
+
});
|
|
64
|
+
export const setSetting = defineOperation({
|
|
65
|
+
id: 'settings.set',
|
|
66
|
+
title: 'Change a setting',
|
|
67
|
+
summary: 'change one setting (text is read like the command line: true/on, numbers, JSON)',
|
|
68
|
+
input: z.object({
|
|
69
|
+
scope: ScopeSchema.default('user'),
|
|
70
|
+
key: KeySchema,
|
|
71
|
+
value: z.unknown().describe('The new value'),
|
|
72
|
+
}),
|
|
73
|
+
output: z.object({ key: z.string(), changed: z.boolean(), message: z.string() }),
|
|
74
|
+
text: (o) => o.message,
|
|
75
|
+
cli: { name: 'config', action: 'set', positional: ['key', 'value'] },
|
|
76
|
+
});
|
|
77
|
+
export const resetSetting = defineOperation({
|
|
78
|
+
id: 'settings.reset',
|
|
79
|
+
title: 'Reset a setting',
|
|
80
|
+
summary: 'put one setting back to its default (in a project file: remove it)',
|
|
81
|
+
input: z.object({ scope: ScopeSchema.default('user'), key: KeySchema }),
|
|
82
|
+
output: z.object({ key: z.string(), changed: z.boolean(), message: z.string() }),
|
|
83
|
+
text: (o) => o.message,
|
|
84
|
+
cli: { name: 'config', action: 'reset', positional: ['key'] },
|
|
85
|
+
});
|
|
86
|
+
/** The facts under a setting: its key, your value, the project's, the default, and the lock. */
|
|
87
|
+
function details(row, scope) {
|
|
88
|
+
const text = (v) => valueText(v, row.field, 40).text;
|
|
89
|
+
return [
|
|
90
|
+
'Setting ' + row.id,
|
|
91
|
+
'All projects ' + text(row.yours) + (row.yoursSet ? ' (your file)' : ' (built-in default)'),
|
|
92
|
+
'This project ' + (row.inProject === undefined ? 'not set' : text(row.inProject)),
|
|
93
|
+
...(scope === 'user' ? ['Default ' + text(row.default)] : []),
|
|
94
|
+
...(scope === 'project' && row.locked ? ['A project can only make this stricter than your own setting.'] : []),
|
|
95
|
+
];
|
|
96
|
+
}
|
|
97
|
+
function settingItem(row, scope) {
|
|
98
|
+
const shown = scope === 'project' && !row.set
|
|
99
|
+
? 'all projects: ' + valueText(row.yours, row.field, 40).text
|
|
100
|
+
: valueText(row.value, row.field).text;
|
|
101
|
+
const editable = row.field.kind === 'secret' ? '' : row.value;
|
|
102
|
+
return {
|
|
103
|
+
id: row.id,
|
|
104
|
+
label: row.label,
|
|
105
|
+
hint: shown,
|
|
106
|
+
...(row.set ? { tone: scope === 'project' ? 'accent' : 'ok', badges: [{ text: 'set', tone: 'accent' }] } : {}),
|
|
107
|
+
description: row.field.help,
|
|
108
|
+
group: row.section,
|
|
109
|
+
details: details(row, scope),
|
|
110
|
+
keywords: row.id,
|
|
111
|
+
cells: { setting: row.id, value: shown },
|
|
112
|
+
primary: action(setSetting, { scope, key: row.id }, {
|
|
113
|
+
label: 'Change',
|
|
114
|
+
verb: 'edit',
|
|
115
|
+
fields: [{ ...row.field, name: 'value', label: row.label }],
|
|
116
|
+
initial: { value: editable },
|
|
117
|
+
}),
|
|
118
|
+
actions: row.set
|
|
119
|
+
? [
|
|
120
|
+
action(resetSetting, { scope, key: row.id }, { label: scope === 'project' ? 'Remove' : 'Reset to default', verb: 'reset', key: 'r' }),
|
|
121
|
+
]
|
|
122
|
+
: [],
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
/** The Data folder row: where the saved data is; moving it has a flow of its own (menu; sandbox storage move). */
|
|
126
|
+
function dataFolderItem(folder) {
|
|
127
|
+
return {
|
|
128
|
+
id: '@data-folder',
|
|
129
|
+
label: 'Data folder',
|
|
130
|
+
hint: folder,
|
|
131
|
+
cells: { setting: 'storage.root', value: folder },
|
|
132
|
+
description: 'Where your tools, logins, history and logs are kept between sandboxes. Move it with the menu (Settings > Data folder) or sandbox storage move <folder>.',
|
|
133
|
+
primary: link({ kind: 'command', argv: ['storage'] }, 'Data folder', { verb: 'change' }),
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
/** The settings page of one scope: a section per category, each setting with its value and an edit action. */
|
|
137
|
+
export function settingsPage(o) {
|
|
138
|
+
const sections = o.categories.map((c) => ({
|
|
139
|
+
id: c.id,
|
|
140
|
+
title: c.label,
|
|
141
|
+
description: c.description,
|
|
142
|
+
columns: [
|
|
143
|
+
{ key: 'setting', label: 'SETTING' },
|
|
144
|
+
{ key: 'value', label: 'VALUE' },
|
|
145
|
+
],
|
|
146
|
+
columnsOn: 'cli',
|
|
147
|
+
items: [
|
|
148
|
+
...o.rows.filter((r) => r.category === c.id).map((r) => settingItem(r, o.scope)),
|
|
149
|
+
...(c.id === 'general' && o.dataFolder ? [dataFolderItem(o.dataFolder)] : []),
|
|
150
|
+
],
|
|
151
|
+
}));
|
|
152
|
+
return {
|
|
153
|
+
title: 'Settings',
|
|
154
|
+
notice: {
|
|
155
|
+
text: 'Editing ' +
|
|
156
|
+
o.file +
|
|
157
|
+
(o.exists ? '' : ' (created when you save)') +
|
|
158
|
+
(o.scope === 'project' ? ': only what a project may set; needs your approval at the next launch' : ''),
|
|
159
|
+
tone: o.scope === 'project' ? 'accent' : 'muted',
|
|
160
|
+
},
|
|
161
|
+
sections,
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
export const settingsView = defineView({
|
|
165
|
+
id: 'settings',
|
|
166
|
+
title: 'Settings',
|
|
167
|
+
summary: 'Every setting, for all projects or just this project, with its value, default and description.',
|
|
168
|
+
queries: { settings: listSettings },
|
|
169
|
+
operations: [setSetting, resetSetting],
|
|
170
|
+
tabs: {
|
|
171
|
+
param: 'scope',
|
|
172
|
+
choices: [
|
|
173
|
+
{ value: 'user', label: 'All projects' },
|
|
174
|
+
{ value: 'project', label: 'This project' },
|
|
175
|
+
],
|
|
176
|
+
},
|
|
177
|
+
inputs: (params) => ({ settings: { scope: params.scope } }),
|
|
178
|
+
build: ({ settings }) => settingsPage(settings),
|
|
179
|
+
});
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { type AppContext } from '../../context.js';
|
|
2
|
+
import { type SettingsFiles } from './settings-rows.js';
|
|
3
|
+
/** Your own settings file (the one --config names) and the project file of the current folder. */
|
|
4
|
+
export declare function settingsFiles(ctx: AppContext): SettingsFiles;
|
|
5
|
+
export declare const listSettingsRun: import("../../kernel/define.js").Implementation<import("../../kernel/define.js").QueryDef<import("zod").ZodObject<{
|
|
6
|
+
scope: import("zod").ZodDefault<import("zod").ZodEnum<{
|
|
7
|
+
project: "project";
|
|
8
|
+
user: "user";
|
|
9
|
+
}>>;
|
|
10
|
+
}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
|
|
11
|
+
scope: import("zod").ZodEnum<{
|
|
12
|
+
project: "project";
|
|
13
|
+
user: "user";
|
|
14
|
+
}>;
|
|
15
|
+
file: import("zod").ZodString;
|
|
16
|
+
exists: import("zod").ZodBoolean;
|
|
17
|
+
dataFolder: import("zod").ZodOptional<import("zod").ZodString>;
|
|
18
|
+
categories: import("zod").ZodArray<import("zod").ZodObject<{
|
|
19
|
+
id: import("zod").ZodString;
|
|
20
|
+
label: import("zod").ZodString;
|
|
21
|
+
description: import("zod").ZodString;
|
|
22
|
+
}, import("zod/v4/core").$strip>>;
|
|
23
|
+
rows: import("zod").ZodArray<import("zod").ZodObject<{
|
|
24
|
+
id: import("zod").ZodString;
|
|
25
|
+
key: import("zod").ZodArray<import("zod").ZodString>;
|
|
26
|
+
label: import("zod").ZodString;
|
|
27
|
+
category: import("zod").ZodString;
|
|
28
|
+
section: import("zod").ZodOptional<import("zod").ZodString>;
|
|
29
|
+
field: import("zod").ZodType<import("../../kernel/fields.js").Field, unknown, import("zod/v4/core").$ZodTypeInternals<import("../../kernel/fields.js").Field, unknown>>;
|
|
30
|
+
value: import("zod").ZodUnknown;
|
|
31
|
+
set: import("zod").ZodBoolean;
|
|
32
|
+
yours: import("zod").ZodUnknown;
|
|
33
|
+
yoursSet: import("zod").ZodBoolean;
|
|
34
|
+
inProject: import("zod").ZodOptional<import("zod").ZodUnknown>;
|
|
35
|
+
default: import("zod").ZodOptional<import("zod").ZodUnknown>;
|
|
36
|
+
locked: import("zod").ZodBoolean;
|
|
37
|
+
}, import("zod/v4/core").$strip>>;
|
|
38
|
+
}, import("zod/v4/core").$strip>, "settings.list">, import("../../../cli/commands/context.js").Context>;
|
|
39
|
+
export declare const getSettingRun: import("../../kernel/define.js").Implementation<import("../../kernel/define.js").QueryDef<import("zod").ZodObject<{
|
|
40
|
+
key: import("zod").ZodString;
|
|
41
|
+
}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
|
|
42
|
+
key: import("zod").ZodString;
|
|
43
|
+
value: import("zod").ZodUnknown;
|
|
44
|
+
}, import("zod/v4/core").$strip>, "settings.get">, import("../../../cli/commands/context.js").Context>;
|
|
45
|
+
export declare const setSettingRun: import("../../kernel/define.js").Implementation<import("../../kernel/define.js").OperationDef<import("zod").ZodObject<{
|
|
46
|
+
scope: import("zod").ZodDefault<import("zod").ZodEnum<{
|
|
47
|
+
project: "project";
|
|
48
|
+
user: "user";
|
|
49
|
+
}>>;
|
|
50
|
+
key: import("zod").ZodString;
|
|
51
|
+
value: import("zod").ZodUnknown;
|
|
52
|
+
}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
|
|
53
|
+
key: import("zod").ZodString;
|
|
54
|
+
changed: import("zod").ZodBoolean;
|
|
55
|
+
message: import("zod").ZodString;
|
|
56
|
+
}, import("zod/v4/core").$strip>, "settings.set">, import("../../../cli/commands/context.js").Context>;
|
|
57
|
+
export declare const resetSettingRun: import("../../kernel/define.js").Implementation<import("../../kernel/define.js").OperationDef<import("zod").ZodObject<{
|
|
58
|
+
scope: import("zod").ZodDefault<import("zod").ZodEnum<{
|
|
59
|
+
project: "project";
|
|
60
|
+
user: "user";
|
|
61
|
+
}>>;
|
|
62
|
+
key: import("zod").ZodString;
|
|
63
|
+
}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
|
|
64
|
+
key: import("zod").ZodString;
|
|
65
|
+
changed: import("zod").ZodBoolean;
|
|
66
|
+
message: import("zod").ZodString;
|
|
67
|
+
}, import("zod/v4/core").$strip>, "settings.reset">, import("../../../cli/commands/context.js").Context>;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
// The settings feature's work: the rows of a scope, and one setting read, changed or reset. Files are changed one
|
|
2
|
+
// setting at a time with comments kept, and nothing is written unless the whole file stays valid (settings-file.ts).
|
|
3
|
+
import _ from 'lodash';
|
|
4
|
+
import { redactSecrets } from '../../../core/schema/index.js';
|
|
5
|
+
import { fail } from '../../../core/util/index.js';
|
|
6
|
+
import { hereDir } from '../../../cli/commands/projects/here.js';
|
|
7
|
+
import { implement } from '../../context.js';
|
|
8
|
+
import { allowedText, valueFromText } from '../../kernel/index.js';
|
|
9
|
+
import { CATEGORIES } from './categories.def.js';
|
|
10
|
+
import { ConfigFile } from './settings-file.js';
|
|
11
|
+
import { findSetting, masked, settingRows } from './settings-rows.js';
|
|
12
|
+
import { getSetting, listSettings, resetSetting, setSetting } from './settings.def.js';
|
|
13
|
+
/** Your own settings file (the one --config names) and the project file of the current folder. */
|
|
14
|
+
export function settingsFiles(ctx) {
|
|
15
|
+
return { user: ConfigFile.user(ctx.loaded.configPath), project: ConfigFile.project(hereDir(ctx)) };
|
|
16
|
+
}
|
|
17
|
+
/** A typed or sent value as the setting reads it: text goes through the command line's rules (true/on, numbers ...). */
|
|
18
|
+
function valueFor(node, value) {
|
|
19
|
+
return typeof value === 'string' ? valueFromText(node, value) : value;
|
|
20
|
+
}
|
|
21
|
+
export const listSettingsRun = implement(listSettings, (ctx, input) => {
|
|
22
|
+
const files = settingsFiles(ctx);
|
|
23
|
+
const file = files[input.scope];
|
|
24
|
+
const rows = settingRows(files, input.scope).filter((r) => input.scope === 'project' || r.id !== 'storage.root');
|
|
25
|
+
return {
|
|
26
|
+
scope: input.scope,
|
|
27
|
+
file: file.file,
|
|
28
|
+
exists: file.exists,
|
|
29
|
+
...(input.scope === 'user' ? { dataFolder: ctx.storageRoot } : {}),
|
|
30
|
+
categories: CATEGORIES.filter((c) => rows.some((r) => r.category === c.id)).map((c) => ({
|
|
31
|
+
id: c.id,
|
|
32
|
+
label: c.label,
|
|
33
|
+
description: c.description,
|
|
34
|
+
})),
|
|
35
|
+
rows,
|
|
36
|
+
};
|
|
37
|
+
});
|
|
38
|
+
export const getSettingRun = implement(getSetting, (ctx, input) => {
|
|
39
|
+
const file = settingsFiles(ctx).user;
|
|
40
|
+
const { key } = findSetting(file, input.key);
|
|
41
|
+
// Secret values (an agent's API keys) are never shown.
|
|
42
|
+
return { key: input.key, value: _.get(redactSecrets(file.userConfig()), key) };
|
|
43
|
+
});
|
|
44
|
+
/** The file of a scope, and the setting a key names in it. */
|
|
45
|
+
function target(ctx, scope, name) {
|
|
46
|
+
const file = settingsFiles(ctx)[scope];
|
|
47
|
+
return { ...findSetting(file, name), file };
|
|
48
|
+
}
|
|
49
|
+
export const setSettingRun = implement(setSetting, (ctx, input) => {
|
|
50
|
+
const { key, node, file } = target(ctx, input.scope, input.key);
|
|
51
|
+
if (node.isSection)
|
|
52
|
+
fail('"' + input.key + '" is a group of settings.', 'Set one of them, e.g. ' + node.leaves(key)[0]?.key.join('.'));
|
|
53
|
+
const value = valueFor(node, input.value);
|
|
54
|
+
const problem = node.check(value);
|
|
55
|
+
if (problem !== true) {
|
|
56
|
+
const typed = typeof input.value === 'string' ? input.value : JSON.stringify(masked(key, input.value));
|
|
57
|
+
fail('"' + typed + '" does not work for ' + input.key + ': ' + problem, allowedText(node));
|
|
58
|
+
}
|
|
59
|
+
const outcome = file.set(key, value);
|
|
60
|
+
if (typeof outcome === 'object')
|
|
61
|
+
fail('Could not change ' + input.key + ': ' + outcome.problems.join('; '), 'Nothing was written.');
|
|
62
|
+
return {
|
|
63
|
+
key: input.key,
|
|
64
|
+
changed: outcome === 'saved',
|
|
65
|
+
message: input.key +
|
|
66
|
+
' is ' +
|
|
67
|
+
JSON.stringify(masked(key, value)) +
|
|
68
|
+
(outcome === 'unchanged' ? ' (it was already)' : '') +
|
|
69
|
+
'.',
|
|
70
|
+
};
|
|
71
|
+
});
|
|
72
|
+
export const resetSettingRun = implement(resetSetting, (ctx, input) => {
|
|
73
|
+
const { key, file } = target(ctx, input.scope, input.key);
|
|
74
|
+
const outcome = file.set(key, undefined);
|
|
75
|
+
if (typeof outcome === 'object')
|
|
76
|
+
fail('Could not reset ' + input.key + ': ' + outcome.problems.join('; '), 'Nothing was written.');
|
|
77
|
+
return {
|
|
78
|
+
key: input.key,
|
|
79
|
+
changed: outcome === 'saved',
|
|
80
|
+
message: file.isProject
|
|
81
|
+
? input.key + ' is not set in ' + file.file + ' any more.'
|
|
82
|
+
: input.key + ' is back to its default: ' + JSON.stringify(masked(key, file.defaultOf(key))) + '.',
|
|
83
|
+
};
|
|
84
|
+
});
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import type { z } from 'zod';
|
|
2
|
+
import type { OperationIO } from './io.js';
|
|
3
|
+
import type { Page } from './view.js';
|
|
4
|
+
export type SurfaceName = 'cli' | 'menu' | 'web';
|
|
5
|
+
export declare const SURFACE_NAMES: readonly SurfaceName[];
|
|
6
|
+
/** Where a definition is offered: everywhere, or everywhere but these surfaces (each with the reason). */
|
|
7
|
+
export type Surfaces = 'all' | {
|
|
8
|
+
readonly except: Readonly<Partial<Record<SurfaceName, string>>>;
|
|
9
|
+
};
|
|
10
|
+
/** The command groups of `sandbox --help` (and the menu's command list). */
|
|
11
|
+
export type CommandGroup = 'Agents' | 'Sessions' | 'Projects & accounts' | 'Data' | 'Web' | 'Health' | 'Advanced';
|
|
12
|
+
/** Lists filled in at run time (the menu's command form offers them). */
|
|
13
|
+
export type DynamicChoices = 'harnesses' | 'accounts' | 'sessions';
|
|
14
|
+
/** How one input field is spelled on the command line (the description comes from the schema's .describe()). */
|
|
15
|
+
export interface CliFlag {
|
|
16
|
+
readonly flag: `--${string}`;
|
|
17
|
+
readonly short?: `-${string}`;
|
|
18
|
+
/** The name --help shows; `flag` stays accepted as a hidden alias. */
|
|
19
|
+
readonly shownAs?: `--${string}`;
|
|
20
|
+
/** Placeholder in --help (name for --agent <name>). */
|
|
21
|
+
readonly value?: string;
|
|
22
|
+
readonly choices?: DynamicChoices | readonly string[];
|
|
23
|
+
readonly noMenu?: boolean;
|
|
24
|
+
readonly advanced?: boolean;
|
|
25
|
+
readonly label?: string;
|
|
26
|
+
}
|
|
27
|
+
/** The command line for a definition: a command of its own, or an action of an existing command (`config get`). */
|
|
28
|
+
export interface CliHint {
|
|
29
|
+
readonly name: string;
|
|
30
|
+
readonly action?: string;
|
|
31
|
+
/** Required for a command of its own. */
|
|
32
|
+
readonly group?: CommandGroup;
|
|
33
|
+
/** --help's one line (default: the definition's summary). */
|
|
34
|
+
readonly summary?: string;
|
|
35
|
+
/** Input fields given as positional arguments, in order (after the action, if any). */
|
|
36
|
+
readonly positional?: readonly string[];
|
|
37
|
+
readonly flags?: Readonly<Record<string, CliFlag | undefined>>;
|
|
38
|
+
/** The command takes -y/--yes, which answers its confirmations; the text is its --help line. */
|
|
39
|
+
readonly yes?: string;
|
|
40
|
+
/** Offers --json. */
|
|
41
|
+
readonly json?: boolean;
|
|
42
|
+
/** Shapes what --json prints (kept as the command printed it before the core); default: the output. */
|
|
43
|
+
shapeJson?(output: unknown): unknown;
|
|
44
|
+
readonly examples?: readonly string[];
|
|
45
|
+
}
|
|
46
|
+
/** A CliHint as written in a definition: field names checked against the input, the output typed. */
|
|
47
|
+
export interface TypedCliHint<I, O> extends Omit<CliHint, 'positional' | 'flags' | 'shapeJson'> {
|
|
48
|
+
readonly positional?: readonly (keyof I & string)[];
|
|
49
|
+
readonly flags?: {
|
|
50
|
+
readonly [K in keyof I]?: CliFlag;
|
|
51
|
+
};
|
|
52
|
+
shapeJson?(output: O): unknown;
|
|
53
|
+
}
|
|
54
|
+
interface Definition<Id extends string, I extends z.ZodType, O extends z.ZodType> {
|
|
55
|
+
readonly id: Id;
|
|
56
|
+
/** Menu row, web button or heading, CLI summary. */
|
|
57
|
+
readonly title: string;
|
|
58
|
+
readonly summary: string;
|
|
59
|
+
readonly input: I;
|
|
60
|
+
readonly output: O;
|
|
61
|
+
/** Default: every surface. */
|
|
62
|
+
readonly surfaces?: Surfaces;
|
|
63
|
+
readonly cli?: CliHint;
|
|
64
|
+
/** The output in one text: what an operation did, or a value a query read (CLI output, menu notice, web note). */
|
|
65
|
+
text?(output: z.output<O>): string;
|
|
66
|
+
}
|
|
67
|
+
/** What a definition is written as: its CLI hint typed against its own schemas. */
|
|
68
|
+
type Written<D extends Definition<string, z.ZodType, z.ZodType>> = Omit<D, 'kind' | 'cli'> & {
|
|
69
|
+
readonly cli?: TypedCliHint<z.input<D['input']>, z.output<D['output']>>;
|
|
70
|
+
};
|
|
71
|
+
export interface OperationDef<I extends z.ZodType = z.ZodType, O extends z.ZodType = z.ZodType, Id extends string = string> extends Definition<Id, I, O> {
|
|
72
|
+
readonly kind: 'operation';
|
|
73
|
+
/** Shown as dangerous (red); it asks for its own confirmation through io.confirm. */
|
|
74
|
+
readonly danger?: boolean;
|
|
75
|
+
}
|
|
76
|
+
export interface QueryDef<I extends z.ZodType = z.ZodType, O extends z.ZodType = z.ZodType, Id extends string = string> extends Definition<Id, I, O> {
|
|
77
|
+
readonly kind: 'query';
|
|
78
|
+
/** Read again this often while shown (the menu's status line and the web's subscriptions use the same rule). */
|
|
79
|
+
readonly live?: {
|
|
80
|
+
readonly everyMs: number;
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
export type AnyDefinition = OperationDef | QueryDef;
|
|
84
|
+
export type InputOf<D extends AnyDefinition> = z.output<D['input']>;
|
|
85
|
+
export type OutputOf<D extends AnyDefinition> = z.output<D['output']>;
|
|
86
|
+
export type QueryMap = Readonly<Record<string, QueryDef>>;
|
|
87
|
+
export type ViewData<Q extends QueryMap> = {
|
|
88
|
+
readonly [K in keyof Q]: z.output<Q[K]['output']>;
|
|
89
|
+
};
|
|
90
|
+
export type ViewInputs<Q extends QueryMap> = {
|
|
91
|
+
readonly [K in keyof Q]?: z.input<Q[K]['input']>;
|
|
92
|
+
};
|
|
93
|
+
/** The tabs of a view: which parameter they set, and its values. */
|
|
94
|
+
export interface ViewTabs<P> {
|
|
95
|
+
readonly param: keyof P & string;
|
|
96
|
+
readonly choices: readonly {
|
|
97
|
+
readonly value: string;
|
|
98
|
+
readonly label: string;
|
|
99
|
+
}[];
|
|
100
|
+
}
|
|
101
|
+
export interface ViewDef<Q extends QueryMap = QueryMap, P = Record<string, never>, Id extends string = string> {
|
|
102
|
+
readonly kind: 'view';
|
|
103
|
+
readonly id: Id;
|
|
104
|
+
readonly title: string;
|
|
105
|
+
readonly summary: string;
|
|
106
|
+
readonly queries: Q;
|
|
107
|
+
/** Every operation the page may offer (the parity check reads this). */
|
|
108
|
+
readonly operations: readonly OperationDef[];
|
|
109
|
+
/** A parameter switched with tabs above the page (Settings: all projects or this project), first choice default. */
|
|
110
|
+
readonly tabs?: ViewTabs<P>;
|
|
111
|
+
/** The input of each query for these view parameters (default: each query's defaults). */
|
|
112
|
+
inputs?(params: P): ViewInputs<Q>;
|
|
113
|
+
/** Pure: query results in, a Page out. */
|
|
114
|
+
build(data: ViewData<Q>, params: P): Page;
|
|
115
|
+
}
|
|
116
|
+
export declare function defineOperation<const Id extends string, I extends z.ZodType, O extends z.ZodType>(def: Written<OperationDef<I, O, Id>>): OperationDef<I, O, Id>;
|
|
117
|
+
export declare function defineQuery<const Id extends string, I extends z.ZodType, O extends z.ZodType>(def: Written<QueryDef<I, O, Id>>): QueryDef<I, O, Id>;
|
|
118
|
+
/** Any view, whatever its parameters (a list of views, a view looked up by id); call build with the right ones. */
|
|
119
|
+
export type AnyView = ViewDef<QueryMap, never>;
|
|
120
|
+
export declare function defineView<const Id extends string, Q extends QueryMap, P = Record<string, never>>(def: Omit<ViewDef<Q, P, Id>, 'kind'>): ViewDef<Q, P, Id>;
|
|
121
|
+
/** Why a definition is not on a surface, or undefined when it is. */
|
|
122
|
+
export declare function exemption(def: {
|
|
123
|
+
readonly surfaces?: Surfaces;
|
|
124
|
+
}, surface: SurfaceName): string | undefined;
|
|
125
|
+
export declare function onSurface(def: {
|
|
126
|
+
readonly surfaces?: Surfaces;
|
|
127
|
+
}, surface: SurfaceName): boolean;
|
|
128
|
+
/** A definition with its run function (Node side). `Ctx` is what the program gives every run (app/context.ts). */
|
|
129
|
+
export interface Implementation<D extends AnyDefinition = AnyDefinition, Ctx = unknown> {
|
|
130
|
+
readonly def: D;
|
|
131
|
+
run(ctx: Ctx, input: InputOf<D>, io: OperationIO): Promise<OutputOf<D>>;
|
|
132
|
+
}
|
|
133
|
+
/** Binds implement() to the program's context type once (app/context.ts), so features write implement(def, run). */
|
|
134
|
+
export declare function implementer<Ctx>(): <D extends AnyDefinition>(def: D, run: (ctx: Ctx, input: InputOf<D>, io: OperationIO) => Promise<OutputOf<D>> | OutputOf<D>) => Implementation<D, Ctx>;
|
|
135
|
+
/** The input as the definition reads it (defaults filled in); a value that does not fit says what is wrong. */
|
|
136
|
+
export declare function parseInput<D extends AnyDefinition>(def: D, input: unknown): InputOf<D>;
|
|
137
|
+
/** Runs an implementation the way every surface must: input checked before, output checked after. */
|
|
138
|
+
export declare function invoke<D extends AnyDefinition, Ctx>(impl: Implementation<D, Ctx>, ctx: Ctx, input: unknown, io: OperationIO): Promise<OutputOf<D>>;
|
|
139
|
+
/** The inputs a view's queries run with for these parameters (defaults filled in). */
|
|
140
|
+
export declare function viewInputs<Q extends QueryMap, P>(view: ViewDef<Q, P>, params: P): {
|
|
141
|
+
[K in keyof Q]: unknown;
|
|
142
|
+
};
|
|
143
|
+
export {};
|