@timurproko/a1 0.2.7-dev.1249 → 0.2.7-dev.1255
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 +11 -36
- package/bin/cli.js +2 -17
- package/bin/ui.js +10 -51
- package/dist/app/session-shell/clipboard-diagnostics.d.ts +2 -2
- package/dist/app/session-shell/clipboard-image.d.ts +0 -1
- package/dist/app/session-shell/clipboard-image.js +1 -1
- package/dist/app/session-shell/dialog-coordinator.d.ts +6 -5
- package/dist/app/session-shell/dialog-coordinator.js +3 -4
- package/dist/app/session-shell/dock-chrome.d.ts +11 -6
- package/dist/app/session-shell/dock-chrome.js +5 -8
- package/dist/app/session-shell/editor-hyperlink-budget.d.ts +0 -2
- package/dist/app/session-shell/editor-hyperlink-budget.js +1 -1
- package/dist/app/session-shell/exit-notice.d.ts +3 -3
- package/dist/app/session-shell/exit-notice.js +10 -10
- package/dist/app/session-shell/extension-surface.d.ts +8 -7
- package/dist/app/session-shell/helper-pool.d.ts +3 -4
- package/dist/app/session-shell/helper-pool.js +1 -1
- package/dist/app/session-shell/image-preparation-client.d.ts +4 -3
- package/dist/app/session-shell/image-preparation.d.ts +0 -2
- package/dist/app/session-shell/image-preparation.js +2 -2
- package/dist/app/session-shell/image-source.d.ts +2 -3
- package/dist/app/session-shell/image-source.js +2 -2
- package/dist/app/session-shell/input-surface-switch.d.ts +9 -7
- package/dist/app/session-shell/input-surface-switch.js +1 -2
- package/dist/app/session-shell/login-interaction.d.ts +5 -4
- package/dist/app/session-shell/login-interaction.js +2 -3
- package/dist/app/session-shell/paste-executor.d.ts +4 -8
- package/dist/app/session-shell/paste-executor.js +2 -2
- package/dist/app/session-shell/paste-protocol.d.ts +2 -2
- package/dist/app/session-shell/path-chip-presentation.d.ts +0 -5
- package/dist/app/session-shell/path-chip-presentation.js +3 -3
- package/dist/app/session-shell/prompt-chips.d.ts +8 -7
- package/dist/app/session-shell/prompt-history-controller.d.ts +3 -3
- package/dist/app/session-shell/prompt-submission.d.ts +7 -6
- package/dist/app/session-shell/prompt-submission.js +7 -28
- package/dist/app/session-shell/quit-outro-effects.d.ts +3 -3
- package/dist/app/session-shell/quit-outro-effects.js +1 -4
- package/dist/app/session-shell/quit-outro.d.ts +9 -12
- package/dist/app/session-shell/quit-outro.js +11 -11
- package/dist/app/session-shell/response-copy-protocol.d.ts +3 -2
- package/dist/app/session-shell/response-copy-transport.d.ts +2 -14
- package/dist/app/session-shell/response-copy-transport.js +2 -3
- package/dist/app/session-shell/session-lifecycle.d.ts +3 -3
- package/dist/app/session-shell/session-lifecycle.js +2 -4
- package/dist/app/session-shell/session-shell-root.d.ts +74 -120
- package/dist/app/session-shell/session-shell-root.js +82 -115
- package/dist/app/session-shell/session-shell.d.ts +13 -16
- package/dist/app/session-shell/session-shell.js +149 -314
- package/dist/app/session-shell/session-viewport-controller.d.ts +7 -6
- package/dist/app/session-shell/session-viewport-controller.js +5 -8
- package/dist/app/session-shell/settings-bindings.d.ts +24 -2
- package/dist/app/session-shell/settings-bindings.js +24 -0
- package/dist/app/session-shell/share-operation.d.ts +3 -3
- package/dist/app/session-shell/share-operation.js +4 -6
- package/dist/app/session-shell/shell-clipboard.d.ts +59 -0
- package/dist/app/session-shell/shell-clipboard.js +119 -0
- package/dist/app/session-shell/shell-editor-factory.d.ts +8 -4
- package/dist/app/session-shell/shell-editor-factory.js +13 -15
- package/dist/app/session-shell/shell-host.d.ts +16 -17
- package/dist/app/session-shell/shell-host.js +20 -37
- package/dist/app/session-shell/shell-layout.d.ts +2 -2
- package/dist/app/session-shell/shell-prompt-suggestions.d.ts +26 -0
- package/dist/app/session-shell/shell-prompt-suggestions.js +48 -0
- package/dist/app/session-shell/suggestion-surface.d.ts +1 -6
- package/dist/app/session-shell/suggestion-surface.js +1 -1
- package/dist/app/session-shell/system-clipboard.d.ts +2 -14
- package/dist/app/session-shell/system-clipboard.js +2 -7
- package/dist/app/session-shell/transcript-document.d.ts +12 -10
- package/dist/app/session-shell/transcript-document.js +15 -41
- package/dist/app/session-shell/viewport-layout.d.ts +2 -2
- package/dist/app/session-shell/workflow-output.d.ts +5 -3
- package/dist/app/session-shell/workflow-output.js +13 -15
- package/dist/app/session-shell/workflow-router.d.ts +1 -3
- package/dist/app/session-shell/workflow-router.js +1 -4
- package/dist/cli/dispatch.d.ts +1 -11
- package/dist/cli/dispatch.js +5 -92
- package/dist/cli/package-messages.d.ts +0 -1
- package/dist/cli/package-messages.js +1 -1
- package/dist/cli/session-context.d.ts +1 -1
- package/dist/cli/session-context.js +5 -7
- package/dist/cli/uninstall.d.ts +4 -7
- package/dist/cli/uninstall.js +6 -35
- package/dist/cli/version-stats.js +4 -7
- package/dist/composition/owned-settings.d.ts +2 -2
- package/dist/composition/owned-settings.js +0 -4
- package/dist/composition/owned-ui.d.ts +3 -25
- package/dist/composition/owned-ui.js +37 -113
- package/dist/composition/reference-selection-options.d.ts +1 -1
- package/dist/composition/reference-selection-options.js +1 -1
- package/dist/composition/release-update-observation.d.ts +4 -4
- package/dist/composition/release-update-observation.js +17 -47
- package/dist/composition/session-backend.d.ts +0 -1
- package/dist/composition/session-runtime-registry.d.ts +5 -4
- package/dist/composition/settings-route-host.d.ts +0 -7
- package/dist/composition/settings-route-host.js +7 -20
- package/dist/composition/settings-search-input.d.ts +2 -1
- package/dist/composition/startup-route.d.ts +2 -3
- package/dist/composition/startup-route.js +2 -3
- package/dist/contracts/owned-ui/extension-ui.d.ts +2 -1
- package/dist/contracts/owned-ui/index.d.ts +2 -1
- package/dist/contracts/owned-ui/model.d.ts +0 -3
- package/dist/contracts/owned-ui/session-presenters.d.ts +3 -0
- package/dist/contracts/owned-ui/session-workflows.d.ts +1 -4
- package/dist/contracts/owned-ui/shell-components.d.ts +543 -0
- package/dist/contracts/presentation/component.d.ts +17 -0
- package/dist/contracts/presentation/component.js +8 -0
- package/dist/contracts/presentation/index.d.ts +6 -15
- package/dist/contracts/presentation/index.js +2 -0
- package/dist/contracts/presentation/terminal.d.ts +290 -0
- package/dist/contracts/presentation/theme.d.ts +46 -0
- package/dist/features/launch/development-launch.js +1 -2
- package/dist/features/launch/index.d.ts +1 -1
- package/dist/features/launch/intent.d.ts +1 -3
- package/dist/features/launch/intent.js +2 -4
- package/dist/features/launch/runtime-selection.d.ts +2 -2
- package/dist/features/launch/runtime-selection.js +2 -2
- package/dist/features/launch/session-context.d.ts +2 -2
- package/dist/features/owned-ui/project-trust-prompt.d.ts +2 -2
- package/dist/features/owned-ui/project-trust-prompt.js +1 -1
- package/dist/features/owned-ui/reference-screen-app.d.ts +0 -2
- package/dist/features/owned-ui/reference-screen-app.js +2 -9
- package/dist/features/owned-ui/release-note-state.d.ts +2 -1
- package/dist/features/owned-ui/settings-app.d.ts +0 -6
- package/dist/features/owned-ui/settings-app.js +42 -254
- package/dist/features/owned-ui/settings-edits.d.ts +31 -0
- package/dist/features/owned-ui/settings-edits.js +139 -0
- package/dist/features/owned-ui/settings-scroll-rail.d.ts +29 -0
- package/dist/features/owned-ui/settings-scroll-rail.js +79 -0
- package/dist/features/owned-ui/settings-search-input.d.ts +2 -1
- package/dist/features/prompt-history/service.d.ts +3 -2
- package/dist/foundation/launch-context/index.d.ts +0 -12
- package/dist/foundation/launch-context/index.js +0 -26
- package/dist/foundation/lifecycle/claim-gate.d.ts +9 -0
- package/dist/foundation/lifecycle/claim-gate.js +37 -0
- package/dist/foundation/lifecycle/index.d.ts +5 -9
- package/dist/foundation/lifecycle/index.js +3 -4
- package/dist/foundation/lifecycle/model.d.ts +2 -59
- package/dist/foundation/lifecycle/model.js +0 -35
- package/dist/foundation/lifecycle/paths.d.ts +0 -24
- package/dist/foundation/lifecycle/paths.js +0 -40
- package/dist/foundation/lifecycle/process-liveness.d.ts +8 -0
- package/dist/foundation/lifecycle/process-liveness.js +18 -0
- package/dist/foundation/lifecycle/session-claim-lock.d.ts +1 -1
- package/dist/foundation/lifecycle/session-claim-lock.js +2 -2
- package/dist/foundation/lifecycle/session-repository-context.d.ts +6 -6
- package/dist/foundation/lifecycle/session-repository-context.js +2 -3
- package/dist/foundation/release/automatic-update.d.ts +6 -17
- package/dist/foundation/release/automatic-update.js +23 -44
- package/dist/foundation/release/bootstrap.d.ts +2 -25
- package/dist/foundation/release/bootstrap.js +37 -348
- package/dist/foundation/release/dependency-certification.d.ts +1 -2
- package/dist/foundation/release/dependency-certification.js +1 -1
- package/dist/foundation/release/early-accent.d.ts +2 -2
- package/dist/foundation/release/early-accent.js +1 -1
- package/dist/foundation/release/index.d.ts +10 -17
- package/dist/foundation/release/index.js +7 -11
- package/dist/foundation/release/latest-release.d.ts +3 -19
- package/dist/foundation/release/latest-release.js +11 -12
- package/dist/foundation/release/ordinary-launch-selection.d.ts +1 -1
- package/dist/foundation/release/ordinary-launch-selection.js +1 -1
- package/dist/foundation/release/process-liveness.d.ts +2 -0
- package/dist/foundation/release/process-liveness.js +12 -0
- package/dist/foundation/release/release-gc.d.ts +13 -10
- package/dist/foundation/release/release-gc.js +37 -101
- package/dist/foundation/release/{cohort-state.d.ts → release-state.d.ts} +44 -69
- package/dist/foundation/release/{cohort-state.js → release-state.js} +38 -70
- package/dist/foundation/release/release-store.d.ts +2 -2
- package/dist/foundation/release/release-store.js +2 -2
- package/dist/foundation/release/restart-certification.js +1 -1
- package/dist/foundation/release/update-activation.d.ts +2 -9
- package/dist/foundation/release/update-activation.js +30 -45
- package/dist/foundation/release/update-execution-lease.d.ts +2 -3
- package/dist/foundation/release/update-execution-lease.js +2 -2
- package/dist/foundation/release/update-launch.d.ts +2 -4
- package/dist/foundation/release/update-launch.js +0 -7
- package/dist/foundation/release/update-recovery.js +1 -1
- package/dist/foundation/release/update-transaction.d.ts +1 -1
- package/dist/foundation/release/update-transaction.js +5 -2
- package/dist/foundation/release/update.d.ts +2 -12
- package/dist/foundation/release/update.js +37 -214
- package/dist/foundation/session-writer-lock/index.d.ts +14 -6
- package/dist/foundation/session-writer-lock/index.js +48 -103
- package/dist/foundation/startup/startup-budget.d.ts +5 -5
- package/dist/foundation/startup/startup-budget.js +2 -2
- package/dist/foundation/startup/startup-runtime.d.ts +1 -1
- package/dist/foundation/terminal-cleanup/exit-notice.d.ts +6 -0
- package/dist/foundation/terminal-cleanup/exit-notice.js +36 -0
- package/dist/foundation/terminal-cleanup/index.d.ts +2 -1
- package/dist/foundation/terminal-cleanup/index.js +2 -1
- package/dist/foundation/terminal-cleanup/terminal-reset.d.ts +0 -5
- package/dist/foundation/terminal-cleanup/terminal-reset.js +0 -5
- package/dist/integrations/pi/components/editor-interaction.d.ts +4 -12
- package/dist/integrations/pi/components/index.d.ts +15 -9
- package/dist/integrations/pi/components/index.js +9 -5
- package/dist/integrations/pi/components/lazy-selectors.d.ts +2 -10
- package/dist/integrations/pi/components/lazy-selectors.js +1 -1
- package/dist/integrations/pi/components/modal-frame.d.ts +5 -22
- package/dist/integrations/pi/components/modal-frame.js +3 -23
- package/dist/integrations/pi/components/owned-editor-ux.d.ts +4 -3
- package/dist/integrations/pi/components/prompt-input-port.d.ts +2 -19
- package/dist/integrations/pi/components/resources/builtin-themes.d.ts +2 -1
- package/dist/integrations/pi/components/shell-editor-autocomplete.d.ts +3 -2
- package/dist/integrations/pi/components/shell-editor-autocomplete.js +1 -4
- package/dist/integrations/pi/components/shell-footer-status.d.ts +3 -3
- package/dist/integrations/pi/components/shell-footer-status.js +5 -4
- package/dist/integrations/pi/components/shell-hotkey-sections.js +1 -1
- package/dist/integrations/pi/components/shell-presenters-info.d.ts +6 -8
- package/dist/integrations/pi/components/shell-presenters-info.js +6 -19
- package/dist/integrations/pi/components/shell-presenters-transcript.d.ts +1 -1
- package/dist/integrations/pi/components/shell-presenters-transcript.js +1 -1
- package/dist/integrations/pi/components/shell-session-info-reference.d.ts +2 -1
- package/dist/integrations/pi/components/shell-shared-facade.d.ts +33 -229
- package/dist/integrations/pi/components/shell-shared-facade.js +8 -1
- package/dist/integrations/pi/components/skills-command.d.ts +1 -9
- package/dist/integrations/pi/components/skills-command.js +5 -5
- package/dist/integrations/pi/components/submitted-prompt-adapter.d.ts +2 -5
- package/dist/integrations/pi/components/submitted-prompt-adapter.js +2 -16
- package/dist/integrations/pi/components/theme.d.ts +9 -2
- package/dist/integrations/pi/components/theme.js +17 -2
- package/dist/integrations/pi/components/thinking-selector-dialog.d.ts +2 -1
- package/dist/integrations/pi/components/upstream/adjacent/core/keybindings.d.ts +2 -2
- package/dist/integrations/pi/components/upstream/components/session-footer.d.ts +1 -2
- package/dist/integrations/pi/components/upstream/components/session-footer.js +6 -8
- package/dist/integrations/pi/engine/adapter.d.ts +3 -6
- package/dist/integrations/pi/engine/adapter.js +4 -28
- package/dist/integrations/pi/engine/changelog.d.ts +2 -2
- package/dist/integrations/pi/engine/changelog.js +3 -3
- package/dist/integrations/pi/engine/compaction-progress.d.ts +2 -3
- package/dist/integrations/pi/engine/compaction-progress.js +1 -1
- package/dist/integrations/pi/engine/conformance.d.ts +2 -1
- package/dist/integrations/pi/engine/default-model-setting.d.ts +0 -2
- package/dist/integrations/pi/engine/default-model-setting.js +1 -2
- package/dist/integrations/pi/engine/diagnostics-state.d.ts +0 -1
- package/dist/integrations/pi/engine/diagnostics-state.js +0 -14
- package/dist/integrations/pi/engine/event-delivery.d.ts +2 -1
- package/dist/integrations/pi/engine/extension-ui-binding.d.ts +2 -1
- package/dist/integrations/pi/engine/host.js +2 -2
- package/dist/integrations/pi/engine/message-values.d.ts +0 -1
- package/dist/integrations/pi/engine/message-values.js +1 -1
- package/dist/integrations/pi/engine/pending-delivery.d.ts +0 -4
- package/dist/integrations/pi/engine/pending-delivery.js +3 -3
- package/dist/integrations/pi/engine/ports.d.ts +7 -1
- package/dist/integrations/pi/engine/ports.js +4 -0
- package/dist/integrations/pi/engine/project-trust-preflight.d.ts +2 -1
- package/dist/integrations/pi/engine/prompt-suggestions.d.ts +3 -3
- package/dist/integrations/pi/engine/prompt-suggestions.js +0 -40
- package/dist/integrations/pi/engine/provider-authentication.d.ts +1 -1
- package/dist/integrations/pi/engine/public-main-entry.d.ts +1 -5
- package/dist/integrations/pi/engine/public-main-entry.js +1 -1
- package/dist/integrations/pi/engine/repository-pr-rest.d.ts +1 -9
- package/dist/integrations/pi/engine/repository-pr-rest.js +2 -2
- package/dist/integrations/pi/engine/repository-pr.d.ts +1 -3
- package/dist/integrations/pi/engine/repository-pr.js +1 -1
- package/dist/integrations/pi/engine/resource-catalog.d.ts +2 -1
- package/dist/integrations/pi/engine/session-integration.d.ts +1 -1
- package/dist/integrations/pi/engine/session-runtime.d.ts +4 -3
- package/dist/integrations/pi/engine/session-runtime.js +0 -2
- package/dist/integrations/pi/engine/settings-bridge.d.ts +0 -2
- package/dist/integrations/pi/engine/settings-bridge.js +1 -1
- package/dist/integrations/pi/engine/settings-port.d.ts +3 -2
- package/dist/integrations/pi/engine/transcript-projection.d.ts +2 -1
- package/dist/integrations/pi/engine/workflow-contexts.d.ts +1 -1
- package/dist/integrations/pi/engine/workflow-runner.d.ts +1 -1
- package/dist/integrations/pi/engine/workflow-runner.js +1 -1
- package/dist/integrations/pi/engine/workflow-support.d.ts +0 -6
- package/dist/integrations/pi/engine/workflow-support.js +4 -18
- package/dist/integrations/pi/engine/workflows.d.ts +5 -5
- package/dist/integrations/pi/session-presenters/components.d.ts +3 -0
- package/dist/integrations/pi/session-presenters/components.js +75 -0
- package/dist/integrations/pi/session-presenters/index.d.ts +1 -0
- package/dist/integrations/pi/session-presenters/index.js +1 -0
- package/dist/integrations/pi/session-presenters/presentation.d.ts +3 -0
- package/dist/integrations/pi/session-presenters/presentation.js +10 -0
- package/dist/integrations/pi/session-presenters/presenters.d.ts +2 -1
- package/dist/integrations/pi/session-presenters/presenters.js +3 -1
- package/dist/integrations/pi/tui-runtime/adapter.d.ts +2 -2
- package/dist/integrations/pi/tui-runtime/adapter.js +23 -32
- package/dist/integrations/pi/tui-runtime/contracts.d.ts +22 -166
- package/dist/integrations/pi/tui-runtime/damage-aware-terminal.d.ts +5 -40
- package/dist/integrations/pi/tui-runtime/index.d.ts +1 -0
- package/dist/integrations/pi/tui-runtime/index.js +1 -0
- package/dist/integrations/pi/tui-runtime/input-presentation-coordinator.d.ts +4 -6
- package/dist/integrations/pi/tui-runtime/overlay-geometry.d.ts +2 -8
- package/dist/integrations/pi/tui-runtime/overlay-geometry.js +3 -9
- package/dist/integrations/pi/tui-runtime/runtime-factory.d.ts +3 -0
- package/dist/integrations/pi/tui-runtime/runtime-factory.js +11 -0
- package/dist/product-identity.d.ts +4 -6
- package/dist/product-identity.js +6 -11
- package/dist/product-identity.json +1 -40
- package/dist/runtime-payload-inventory.json +0 -3
- package/dist/ui/components/index.d.ts +4 -4
- package/dist/ui/components/index.js +2 -2
- package/dist/ui/components/selection-copy.d.ts +0 -1
- package/dist/ui/components/selection-copy.js +0 -12
- package/dist/ui/components/submitted-prompt.d.ts +3 -13
- package/dist/ui/components/submitted-prompt.js +8 -41
- package/dist/ui/components/theme.d.ts +4 -19
- package/dist/ui/components/theme.js +6 -0
- package/dist/ui/components/transcript-viewport.d.ts +1 -3
- package/dist/ui/components/transcript-viewport.js +1 -4
- package/dist/ui/settings/declarations.d.ts +2 -97
- package/dist/ui/settings/declarations.js +2 -78
- package/dist/ui/settings/early-accent.js +1 -1
- package/dist/ui/settings/index.d.ts +3 -5
- package/dist/ui/settings/index.js +2 -3
- package/dist/ui/settings/manager.d.ts +0 -4
- package/dist/ui/settings/manager.js +6 -62
- package/dist/ui/settings/resolution.d.ts +6 -18
- package/dist/ui/settings/resolution.js +4 -103
- package/dist/ui/settings/sections.d.ts +0 -4
- package/dist/ui/settings/sections.js +1 -1
- package/docs/architecture/boundaries.md +23 -40
- package/docs/architecture/code-documentation.md +2 -2
- package/docs/architecture/internal-naming.md +11 -17
- package/docs/architecture/project-structure.md +13 -16
- package/docs/architecture/resource-and-data-policy.md +16 -31
- package/docs/architecture/toolchain.md +14 -19
- package/docs/architecture/ui-reference-provenance.md +2 -2
- package/docs/ci-release-runbook.md +5 -5
- package/docs/features/launch-profiles.md +11 -17
- package/docs/features/prompt-history.md +10 -11
- package/docs/local-worktree-cleanup.md +28 -1
- package/docs/manual-owned-ui-checkpoint.md +0 -1
- package/docs/validation.md +5 -11
- package/docs/worktree-link-recovery.md +6 -6
- package/package.json +7 -20
- package/bin/guardian.js +0 -42
- package/bin/supervisor.js +0 -7
- package/bin/tab-launch-context.d.ts +0 -27
- package/bin/tab-launch-context.js +0 -94
- package/dist/app/session-shell/resident-tab-coordinator.d.ts +0 -38
- package/dist/app/session-shell/resident-tab-coordinator.js +0 -77
- package/dist/cli/tabs-request.d.ts +0 -7
- package/dist/cli/tabs.d.ts +0 -14
- package/dist/cli/tabs.js +0 -151
- package/dist/composition/resident-tab-bridge.d.ts +0 -41
- package/dist/composition/resident-tab-bridge.js +0 -209
- package/dist/composition/utility-tab.d.ts +0 -28
- package/dist/composition/utility-tab.js +0 -244
- package/dist/features/owned-ui/plus-menu-dialog.d.ts +0 -28
- package/dist/features/owned-ui/plus-menu-dialog.js +0 -89
- package/dist/features/resident-tab/auto-name.d.ts +0 -11
- package/dist/features/resident-tab/auto-name.js +0 -44
- package/dist/features/resident-tab/index.d.ts +0 -5
- package/dist/features/resident-tab/index.js +0 -7
- package/dist/features/resident-tab/shortcut-bindings-file.d.ts +0 -8
- package/dist/features/resident-tab/shortcut-bindings-file.js +0 -40
- package/dist/features/resident-tab/shortcut-declarations.d.ts +0 -13
- package/dist/features/resident-tab/shortcut-declarations.js +0 -26
- package/dist/features/resident-tab/shortcut-projection.d.ts +0 -29
- package/dist/features/resident-tab/shortcut-projection.js +0 -64
- package/dist/features/resident-tab/status-deriver.d.ts +0 -10
- package/dist/features/resident-tab/status-deriver.js +0 -12
- package/dist/foundation/launch-guardian/exit-watcher.d.ts +0 -14
- package/dist/foundation/launch-guardian/exit-watcher.js +0 -103
- package/dist/foundation/launch-guardian/index.d.ts +0 -2
- package/dist/foundation/launch-guardian/index.js +0 -1
- package/dist/foundation/launch-guardian/main.d.ts +0 -39
- package/dist/foundation/launch-guardian/main.js +0 -232
- package/dist/foundation/lifecycle/commands.d.ts +0 -40
- package/dist/foundation/lifecycle/launch-instance.d.ts +0 -46
- package/dist/foundation/lifecycle/launch-instance.js +0 -134
- package/dist/foundation/lifecycle/native-claim-gate.d.ts +0 -5
- package/dist/foundation/lifecycle/native-claim-gate.js +0 -41
- package/dist/foundation/lifecycle/supervisor-startup.d.ts +0 -30
- package/dist/foundation/lifecycle/supervisor-startup.js +0 -106
- package/dist/foundation/process-containment/addon-containment.d.ts +0 -20
- package/dist/foundation/process-containment/addon-containment.js +0 -139
- package/dist/foundation/process-containment/addon-process-inspector.d.ts +0 -11
- package/dist/foundation/process-containment/addon-process-inspector.js +0 -36
- package/dist/foundation/process-containment/addon.d.ts +0 -47
- package/dist/foundation/process-containment/addon.js +0 -57
- package/dist/foundation/process-containment/artifact.d.ts +0 -1
- package/dist/foundation/process-containment/artifact.js +0 -35
- package/dist/foundation/process-containment/contracts.d.ts +0 -33
- package/dist/foundation/process-containment/contracts.js +0 -35
- package/dist/foundation/process-containment/index.d.ts +0 -9
- package/dist/foundation/process-containment/index.js +0 -7
- package/dist/foundation/process-containment/linux-process-inspector.d.ts +0 -7
- package/dist/foundation/process-containment/linux-process-inspector.js +0 -27
- package/dist/foundation/process-containment/native-process-inspector.d.ts +0 -4
- package/dist/foundation/process-containment/native-process-inspector.js +0 -21
- package/dist/foundation/protocol/client.d.ts +0 -18
- package/dist/foundation/protocol/client.js +0 -130
- package/dist/foundation/protocol/index.d.ts +0 -3
- package/dist/foundation/protocol/index.js +0 -2
- package/dist/foundation/protocol/messages.d.ts +0 -90
- package/dist/foundation/protocol/messages.js +0 -100
- package/dist/foundation/release/cohort-selection.d.ts +0 -33
- package/dist/foundation/release/cohort-selection.js +0 -67
- package/dist/foundation/release/endpoint-lock.d.ts +0 -2
- package/dist/foundation/release/endpoint-lock.js +0 -37
- package/dist/foundation/release/endpoint-recovery.d.ts +0 -10
- package/dist/foundation/release/endpoint-recovery.js +0 -45
- package/dist/foundation/release/endpoints.d.ts +0 -32
- package/dist/foundation/release/endpoints.js +0 -152
- package/dist/foundation/release/prepared-update-activation.d.ts +0 -3
- package/dist/foundation/release/prepared-update-activation.js +0 -27
- package/dist/foundation/release/process-cleanup.d.ts +0 -14
- package/dist/foundation/release/process-cleanup.js +0 -76
- package/dist/foundation/release/supervisor-identity.d.ts +0 -15
- package/dist/foundation/release/supervisor-identity.js +0 -63
- package/dist/foundation/resident-tabs/boot-identity.d.ts +0 -6
- package/dist/foundation/resident-tabs/boot-identity.js +0 -16
- package/dist/foundation/resident-tabs/bounded-host-command.d.ts +0 -20
- package/dist/foundation/resident-tabs/bounded-host-command.js +0 -62
- package/dist/foundation/resident-tabs/bridge-client.d.ts +0 -73
- package/dist/foundation/resident-tabs/bridge-client.js +0 -327
- package/dist/foundation/resident-tabs/continuity.d.ts +0 -12
- package/dist/foundation/resident-tabs/continuity.js +0 -63
- package/dist/foundation/resident-tabs/doctor.d.ts +0 -28
- package/dist/foundation/resident-tabs/doctor.js +0 -166
- package/dist/foundation/resident-tabs/draft-checkpoint.d.ts +0 -27
- package/dist/foundation/resident-tabs/draft-checkpoint.js +0 -145
- package/dist/foundation/resident-tabs/ensure-terminal-host.d.ts +0 -36
- package/dist/foundation/resident-tabs/ensure-terminal-host.js +0 -151
- package/dist/foundation/resident-tabs/fault-injection.d.ts +0 -8
- package/dist/foundation/resident-tabs/fault-injection.js +0 -26
- package/dist/foundation/resident-tabs/fixture-control.d.ts +0 -7
- package/dist/foundation/resident-tabs/fixture-control.js +0 -35
- package/dist/foundation/resident-tabs/host-entry.js +0 -17
- package/dist/foundation/resident-tabs/index.d.ts +0 -15
- package/dist/foundation/resident-tabs/index.js +0 -10
- package/dist/foundation/resident-tabs/maintenance.d.ts +0 -39
- package/dist/foundation/resident-tabs/maintenance.js +0 -75
- package/dist/foundation/resident-tabs/progress-observation-schema.d.ts +0 -34
- package/dist/foundation/resident-tabs/progress-observation-schema.js +0 -1
- package/dist/foundation/resident-tabs/progress-observation.d.ts +0 -4
- package/dist/foundation/resident-tabs/progress-observation.js +0 -150
- package/dist/foundation/resident-tabs/prompt-journal.d.ts +0 -63
- package/dist/foundation/resident-tabs/prompt-journal.js +0 -213
- package/dist/foundation/resident-tabs/protocol.d.ts +0 -12
- package/dist/foundation/resident-tabs/protocol.js +0 -195
- package/dist/foundation/resident-tabs/recovery.d.ts +0 -26
- package/dist/foundation/resident-tabs/recovery.js +0 -205
- package/dist/foundation/resident-tabs/release-holds.d.ts +0 -28
- package/dist/foundation/resident-tabs/release-holds.js +0 -78
- package/dist/foundation/resident-tabs/routes.d.ts +0 -5
- package/dist/foundation/resident-tabs/routes.js +0 -5
- package/dist/foundation/resident-tabs/routing.d.ts +0 -11
- package/dist/foundation/resident-tabs/routing.js +0 -10
- package/dist/foundation/resident-tabs/runtime-control.d.ts +0 -38
- package/dist/foundation/resident-tabs/runtime-control.js +0 -74
- package/dist/foundation/resident-tabs/session-sync.d.ts +0 -14
- package/dist/foundation/resident-tabs/session-sync.js +0 -37
- package/dist/foundation/resident-tabs/settings.d.ts +0 -16
- package/dist/foundation/resident-tabs/settings.js +0 -60
- package/dist/foundation/resident-tabs/terminal-host-artifact.d.ts +0 -14
- package/dist/foundation/resident-tabs/terminal-host-artifact.js +0 -78
- package/dist/foundation/resident-tabs/zip-archive.d.ts +0 -9
- package/dist/foundation/resident-tabs/zip-archive.js +0 -56
- package/dist/foundation/storage/control-store.d.ts +0 -20
- package/dist/foundation/storage/control-store.js +0 -331
- package/dist/foundation/storage/index.d.ts +0 -1
- package/dist/foundation/storage/index.js +0 -1
- package/dist/foundation/supervision/index.d.ts +0 -3
- package/dist/foundation/supervision/index.js +0 -3
- package/dist/foundation/supervision/main.d.ts +0 -1
- package/dist/foundation/supervision/main.js +0 -86
- package/dist/foundation/supervision/paths.d.ts +0 -1
- package/dist/foundation/supervision/paths.js +0 -1
- package/dist/foundation/supervision/server.d.ts +0 -46
- package/dist/foundation/supervision/server.js +0 -611
- package/dist/integrations/pi/components/components.d.ts +0 -4
- package/dist/integrations/pi/components/components.js +0 -48
- package/dist/integrations/pi/components/conformance.d.ts +0 -18
- package/dist/integrations/pi/components/conformance.js +0 -70
- package/dist/integrations/pi/components/shell-components.d.ts +0 -7
- package/dist/integrations/pi/components/shell-components.js +0 -7
- package/dist/integrations/pi/components/upstream/theme/theme-controller.d.ts +0 -33
- package/dist/integrations/pi/components/upstream/theme/theme-controller.js +0 -114
- package/dist/integrations/pi/engine/offline-settings-port.d.ts +0 -23
- package/dist/integrations/pi/engine/offline-settings-port.js +0 -54
- package/dist/native/darwin-arm64/manifest.json +0 -23
- package/dist/native/darwin-arm64/process-guardian.node +0 -0
- package/dist/native/darwin-arm64/terminal-host-THIRD-PARTY-NOTICES.txt +0 -10500
- package/dist/native/darwin-arm64/terminal-host.manifest.json +0 -46
- package/dist/native/darwin-arm64/terminal-host.node +0 -0
- package/dist/native/darwin-x64/manifest.json +0 -23
- package/dist/native/darwin-x64/process-guardian.node +0 -0
- package/dist/native/darwin-x64/terminal-host-THIRD-PARTY-NOTICES.txt +0 -10737
- package/dist/native/darwin-x64/terminal-host.manifest.json +0 -46
- package/dist/native/darwin-x64/terminal-host.node +0 -0
- package/dist/native/linux-x64/manifest.json +0 -23
- package/dist/native/linux-x64/process-guardian.node +0 -0
- package/dist/native/linux-x64/terminal-host-THIRD-PARTY-NOTICES.txt +0 -11226
- package/dist/native/linux-x64/terminal-host.manifest.json +0 -46
- package/dist/native/linux-x64/terminal-host.node +0 -0
- package/dist/native/win32-x64/manifest.json +0 -23
- package/dist/native/win32-x64/process-guardian.node +0 -0
- package/dist/native/win32-x64/terminal-host-THIRD-PARTY-NOTICES.txt +0 -10757
- package/dist/native/win32-x64/terminal-host.manifest.json +0 -46
- package/dist/native/win32-x64/terminal-host.node +0 -0
- package/dist/ui/settings/migrations.d.ts +0 -19
- package/dist/ui/settings/migrations.js +0 -209
- package/dist/ui/settings/progress-palette.generated.d.ts +0 -139
- package/dist/ui/settings/progress-palette.generated.js +0 -139
- package/docs/architecture/evidence/resident-tabs/linux-x64.md +0 -37
- package/docs/architecture/evidence/resident-tabs/macos-arm64.md +0 -36
- package/docs/architecture/evidence/resident-tabs/macos-x64.md +0 -35
- package/docs/architecture/evidence/resident-tabs/windows-x64.md +0 -36
- package/docs/architecture/evidence/terminal-host-spike/manual-one-pane-terminal-host.md +0 -70
- package/docs/architecture/evidence/terminal-host-spike/manual-two-by-two-basic-terminal-host.md +0 -32
- package/docs/architecture/evidence/terminal-host-spike/milestone-baseline.json +0 -115
- package/docs/architecture/evidence/terminal-host-spike/owned-ui-foundation-prerequisite.json +0 -48
- package/docs/architecture/evidence/terminal-host-spike/terminal-host-provenance.json +0 -125
- package/docs/architecture/evidence/terminal-host-spike/terminal-host-task-5-1.json +0 -56
- package/docs/architecture/evidence/terminal-host-spike/terminal-host-task-5-3.json +0 -174
- package/docs/architecture/evidence/terminal-host-spike/terminal-spike-acceptance-record.json +0 -18
- package/docs/architecture/native-fixture-isolation.md +0 -23
- package/docs/architecture/process-guardian-provenance.md +0 -36
- package/docs/architecture/resident-tabs-requirements.md +0 -18
- package/docs/architecture/resident-tabs.md +0 -668
- package/docs/architecture/terminal-host-proof-gate.md +0 -34
- package/docs/architecture/terminal-host-provenance.md +0 -81
- package/docs/architecture/terminal-host-spike-evidence.md +0 -39
- package/docs/launch-recovery.md +0 -23
- package/docs/manual-launch-instance-acceptance.md +0 -43
- package/docs/manual-resident-tabs-acceptance.md +0 -51
- /package/dist/{cli/tabs-request.js → contracts/owned-ui/shell-components.js} +0 -0
- /package/dist/{foundation/release → contracts/presentation}/progress-palette.generated.d.ts +0 -0
- /package/dist/{foundation/release → contracts/presentation}/progress-palette.generated.js +0 -0
- /package/dist/{foundation/lifecycle/commands.js → contracts/presentation/terminal.js} +0 -0
- /package/dist/{foundation/resident-tabs/host-entry.d.ts → contracts/presentation/theme.js} +0 -0
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { DIALOG_BACK_SHORTCUT_HINT, DIALOG_CLOSE_SHORTCUT_HINT } from "../../contracts/presentation/index.js";
|
|
2
|
-
import { GLOBAL_SCOPE, LineInput, PLAIN_THEME, ShortcutRegistry, assertNoShortcutConflicts, blockJumpTarget, configureDialogChoiceCapacity, configureDialogTextRows, configureDialogWidth, numericValues, RAIL_COLUMNS, renderCenteredDialogOverlay, renderDialogPanel, renderSteppedDialogPanel, renderEmptyState, renderGroupHeader, renderListRow, renderNote, renderShortcutHintsWithClose, menuRowAt, regionAt, renderValueMenu, withScrollbarRail, stepperEnds, steppedValue, truncateToWidth, valueColumnFor, valueMenuFrame, blockRowSpan, displayWidth,
|
|
3
|
-
import {
|
|
2
|
+
import { GLOBAL_SCOPE, LineInput, PLAIN_THEME, ShortcutRegistry, assertNoShortcutConflicts, blockJumpTarget, configureDialogChoiceCapacity, configureDialogTextRows, configureDialogWidth, numericValues, RAIL_COLUMNS, renderCenteredDialogOverlay, renderDialogPanel, renderSteppedDialogPanel, renderEmptyState, renderGroupHeader, renderListRow, renderNote, renderShortcutHintsWithClose, menuRowAt, regionAt, renderValueMenu, withScrollbarRail, stepperEnds, steppedValue, truncateToWidth, valueColumnFor, valueMenuFrame, blockRowSpan, displayWidth, handleLineInputKey, humanizeLabel, humanizeTitle, indexOfKey, layoutList, moveSelection, rowKey, scrollForSelection, scrollbarGeometry, scrollbarWheelRows, selectableIndexes, } from "../../ui/components/index.js";
|
|
3
|
+
import { SettingsScrollRail } from "./settings-scroll-rail.js";
|
|
4
|
+
import { SettingsEdits, changeFailure, replaceRecord, sameRecord, structuredValue } from "./settings-edits.js";
|
|
4
5
|
import { SETTINGS_APP_ID } from "./settings-route.js";
|
|
5
6
|
export { SETTINGS_APP_ID, SETTINGS_ROUTE } from "./settings-route.js";
|
|
6
7
|
const SCOPE = SETTINGS_APP_ID;
|
|
@@ -15,14 +16,8 @@ const DIALOG_SCOPE = `${SETTINGS_APP_ID}-parts`;
|
|
|
15
16
|
const MODEL_SCOPE = `${SETTINGS_APP_ID}-models`;
|
|
16
17
|
const MODEL_LEVEL_SCOPE = `${SETTINGS_APP_ID}-model-levels`;
|
|
17
18
|
const SCROLLBAR_TOP_INSET = 0;
|
|
18
|
-
/** Identity of the settings list rail in the shared rail state. */
|
|
19
|
-
const RAIL_KEY = "settings";
|
|
20
|
-
// Compatibility: the transcript rail stays lit this long after a scroll, and repaints just after.
|
|
21
|
-
const SCROLL_LINGER_MS = 900;
|
|
22
|
-
const SCROLL_LINGER_REPAINT_MS = 925;
|
|
23
19
|
/** What a structured value offers instead of printing itself. */
|
|
24
20
|
const CONFIGURE = "configure";
|
|
25
|
-
const TAB_BAR_RIGHT_ITEMS_SETTING_ID = "tabBarRightItems";
|
|
26
21
|
export const SETTINGS_SHORTCUTS = new ShortcutRegistry();
|
|
27
22
|
SETTINGS_SHORTCUTS.declare({ key: "edit", scope: SCOPE, description: "Search settings", section: "Change", hint: { keys: "Type", does: "search" } }, "edit-filter");
|
|
28
23
|
SETTINGS_SHORTCUTS.declare({ key: "up", scope: SCOPE, description: "Previous setting", section: "Navigate", hint: { keys: "↑↓", does: "navigate" } }, "move-up");
|
|
@@ -98,12 +93,7 @@ export class SettingsApp {
|
|
|
98
93
|
#menu = null;
|
|
99
94
|
#structured = null;
|
|
100
95
|
// Invariant: pending values remain visible until the source reflects them.
|
|
101
|
-
#
|
|
102
|
-
#undoHistory = [];
|
|
103
|
-
#editSequence = 0;
|
|
104
|
-
#undoRequests = 0;
|
|
105
|
-
#undoActive = false;
|
|
106
|
-
#closed = false;
|
|
96
|
+
#edits;
|
|
107
97
|
#bodyTopForFrame = SETTINGS_TOP_RULE_ROWS + SETTINGS_TITLE_ROWS;
|
|
108
98
|
#bodyHeightForFrame = 0;
|
|
109
99
|
#panelTopForFrame = 0;
|
|
@@ -112,23 +102,13 @@ export class SettingsApp {
|
|
|
112
102
|
#frameRows = [];
|
|
113
103
|
#menuFrame = null;
|
|
114
104
|
// Invariant: rail hover and drag live in the shared keyed state, as the transcript's do.
|
|
115
|
-
#
|
|
105
|
+
#rail = new SettingsScrollRail();
|
|
116
106
|
// Rationale: the rail as drawn in the last frame, or null when nothing can be pointed at.
|
|
117
|
-
#railFrame = null;
|
|
118
|
-
// Invariant: a scroll lights the rail until this time; the timer repaints once it has passed.
|
|
119
|
-
#activeUntil = 0;
|
|
120
|
-
#activityTimer;
|
|
121
|
-
#renderedScroll;
|
|
122
107
|
#options;
|
|
123
|
-
/**
|
|
124
|
-
* `pinned` presents the screen as a resident Settings tab, which offers no screen-level close;
|
|
125
|
-
* `configurePlusMenu` opens the tab bar's Plus Menu dialog in place of this screen's own.
|
|
126
|
-
*/
|
|
127
108
|
constructor(session, options) {
|
|
128
109
|
this.#session = session;
|
|
110
|
+
this.#edits = new SettingsEdits(session, () => this.#structured);
|
|
129
111
|
this.#options = {
|
|
130
|
-
pinned: options.pinned === true,
|
|
131
|
-
configurePlusMenu: options.configurePlusMenu ?? null,
|
|
132
112
|
dialogPanel: options.dialogPanel ?? null,
|
|
133
113
|
};
|
|
134
114
|
this.#search = {
|
|
@@ -139,17 +119,14 @@ export class SettingsApp {
|
|
|
139
119
|
};
|
|
140
120
|
}
|
|
141
121
|
onActivate(host) {
|
|
142
|
-
this.#
|
|
122
|
+
this.#edits.open();
|
|
143
123
|
void this.#session.load().then(() => host.requestRender());
|
|
144
124
|
}
|
|
145
125
|
onClose(_host) {
|
|
146
|
-
this.#
|
|
147
|
-
this.#undoHistory.length = 0;
|
|
148
|
-
this.#undoRequests = 0;
|
|
126
|
+
this.#edits.close();
|
|
149
127
|
this.#search.input?.setFocused(false);
|
|
150
128
|
this.#search.input = null;
|
|
151
|
-
this.#
|
|
152
|
-
this.#rails.clear();
|
|
129
|
+
this.#rail.dispose();
|
|
153
130
|
}
|
|
154
131
|
render(rect, host) {
|
|
155
132
|
const theme = host.theme ?? PLAIN_THEME;
|
|
@@ -182,11 +159,7 @@ export class SettingsApp {
|
|
|
182
159
|
this.#panelTopForFrame = topRows + contentHeight + dividerRows;
|
|
183
160
|
this.#scroll = layout.scroll;
|
|
184
161
|
const now = Date.now();
|
|
185
|
-
|
|
186
|
-
// once rather than at each wheel, drag, key, and search branch.
|
|
187
|
-
if (this.#renderedScroll !== undefined && this.#renderedScroll !== layout.scroll)
|
|
188
|
-
this.#noteScrollActivity(host, now);
|
|
189
|
-
this.#renderedScroll = layout.scroll;
|
|
162
|
+
this.#rail.noteRenderedScroll(layout.scroll, now, () => host.requestRender());
|
|
190
163
|
// Invariant: auto and always keep the rail columns while the list fits, so a revealed
|
|
191
164
|
// rail never reflows the rows; hidden gives the columns back to the rows.
|
|
192
165
|
const appearance = this.#scrollbarAppearance();
|
|
@@ -199,22 +172,10 @@ export class SettingsApp {
|
|
|
199
172
|
scroll: layout.scroll,
|
|
200
173
|
trackHeight: Math.max(0, titleRows + bodyHeight - SCROLLBAR_TOP_INSET),
|
|
201
174
|
});
|
|
202
|
-
const presentation =
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
hovered: this.#rails.isHovered(RAIL_KEY),
|
|
207
|
-
dragging: this.#rails.isDragging(RAIL_KEY),
|
|
208
|
-
activeUntil: this.#activeUntil,
|
|
209
|
-
now,
|
|
210
|
-
});
|
|
211
|
-
this.#railFrame = reservesRail && geometry !== null
|
|
212
|
-
? {
|
|
213
|
-
rail: { key: RAIL_KEY, column: rect.width, rowStart: topRows + SCROLLBAR_TOP_INSET, trackHeight: geometry.trackHeight },
|
|
214
|
-
geometry,
|
|
215
|
-
page: layout.visible,
|
|
216
|
-
}
|
|
217
|
-
: null;
|
|
175
|
+
const presentation = this.#rail.presentation({ geometry, appearance, style: this.#scrollbarStyle(), now });
|
|
176
|
+
this.#rail.setFrame(reservesRail && geometry !== null
|
|
177
|
+
? { rail: { column: rect.width, rowStart: topRows + SCROLLBAR_TOP_INSET, trackHeight: geometry.trackHeight }, geometry, page: layout.visible }
|
|
178
|
+
: null);
|
|
218
179
|
const body = [];
|
|
219
180
|
this.#frameRows = [];
|
|
220
181
|
if (rows.length === 0) {
|
|
@@ -275,8 +236,7 @@ export class SettingsApp {
|
|
|
275
236
|
const selected = indexOfKey(rows, this.#selectedKey);
|
|
276
237
|
switch (action) {
|
|
277
238
|
case "close":
|
|
278
|
-
|
|
279
|
-
host.close();
|
|
239
|
+
host.close();
|
|
280
240
|
return { consumed: true };
|
|
281
241
|
case "edit-filter":
|
|
282
242
|
return { consumed: false };
|
|
@@ -284,7 +244,7 @@ export class SettingsApp {
|
|
|
284
244
|
const row = rows[selected];
|
|
285
245
|
if (row?.kind === "element" && (row.value.structured || isDefaultModelEntry(row.value)))
|
|
286
246
|
this.#openStructured(row.value);
|
|
287
|
-
else if (row?.kind === "element" && typeof this.#
|
|
247
|
+
else if (row?.kind === "element" && typeof this.#edits.shown(row.value) === "number")
|
|
288
248
|
this.#cycle(rows, selected, 1);
|
|
289
249
|
else
|
|
290
250
|
this.#openMenu(rows, selected, true);
|
|
@@ -322,7 +282,7 @@ export class SettingsApp {
|
|
|
322
282
|
this.#cycle(rows, selected, action === "next-value" ? 1 : -1);
|
|
323
283
|
return { consumed: true };
|
|
324
284
|
case "undo":
|
|
325
|
-
this.#undo();
|
|
285
|
+
this.#edits.undo();
|
|
326
286
|
return { consumed: true };
|
|
327
287
|
default:
|
|
328
288
|
return { consumed: false };
|
|
@@ -364,7 +324,7 @@ export class SettingsApp {
|
|
|
364
324
|
const value = menu.choices[overRow];
|
|
365
325
|
this.#closeMenu(menu);
|
|
366
326
|
if (value !== undefined)
|
|
367
|
-
this.#apply(menu.entry, value);
|
|
327
|
+
this.#edits.apply(menu.entry, value);
|
|
368
328
|
return { consumed: true };
|
|
369
329
|
}
|
|
370
330
|
if (event.kind === "wheel-up" || event.kind === "wheel-down") {
|
|
@@ -389,7 +349,14 @@ export class SettingsApp {
|
|
|
389
349
|
// cannot change its selection or act on the Settings list behind it.
|
|
390
350
|
return { consumed: true, render: false };
|
|
391
351
|
}
|
|
392
|
-
const rail = this.#
|
|
352
|
+
const rail = this.#rail.pointer(event, this.#scroll);
|
|
353
|
+
if (rail.scroll !== undefined)
|
|
354
|
+
this.#scroll = rail.scroll;
|
|
355
|
+
// Invariant: the rail is not a row: pointing at it lights nothing in the list.
|
|
356
|
+
if (rail.overRail) {
|
|
357
|
+
this.#hoverKey = null;
|
|
358
|
+
this.#hoverRegion = "label";
|
|
359
|
+
}
|
|
393
360
|
if (rail.owned)
|
|
394
361
|
return { consumed: true };
|
|
395
362
|
const row = this.#frameRows.find(candidate => candidate.screenRow === event.row - 1);
|
|
@@ -419,52 +386,6 @@ export class SettingsApp {
|
|
|
419
386
|
const changed = previousKey !== this.#hoverKey || previousRegion !== this.#hoverRegion || rail.changed;
|
|
420
387
|
return { consumed: event.kind !== "motion", render: changed };
|
|
421
388
|
}
|
|
422
|
-
// Rationale: the rail takes its share of a pointer report first: hover, a thumb drag, or a
|
|
423
|
-
// track page. Owned means the list must not see the report; changed means the rail looks different.
|
|
424
|
-
#railPointer(event) {
|
|
425
|
-
const frame = this.#railFrame;
|
|
426
|
-
const wasHovered = this.#rails.isHovered(RAIL_KEY);
|
|
427
|
-
if (frame === null) {
|
|
428
|
-
this.#rails.clear();
|
|
429
|
-
return { owned: false, changed: wasHovered };
|
|
430
|
-
}
|
|
431
|
-
const pointer = { column: event.column, row: event.row - 1 };
|
|
432
|
-
if (this.#rails.isDragging(RAIL_KEY)) {
|
|
433
|
-
// Invariant: a drag keeps the pointer wherever it goes until the button comes up.
|
|
434
|
-
if (event.kind === "release")
|
|
435
|
-
this.#rails.endDrag();
|
|
436
|
-
else {
|
|
437
|
-
const target = this.#rails.dragTo(frame.rail, frame.geometry, pointer);
|
|
438
|
-
if (target !== null)
|
|
439
|
-
this.#scroll = target;
|
|
440
|
-
}
|
|
441
|
-
return { owned: true, changed: true };
|
|
442
|
-
}
|
|
443
|
-
const over = this.#rails.notePointer([frame.rail], pointer) !== null;
|
|
444
|
-
if (!over)
|
|
445
|
-
return { owned: false, changed: wasHovered };
|
|
446
|
-
// Invariant: the rail is not a row: pointing at it lights nothing in the list.
|
|
447
|
-
this.#hoverKey = null;
|
|
448
|
-
this.#hoverRegion = "label";
|
|
449
|
-
if (event.kind === "press" && !this.#rails.beginDrag(frame.rail, frame.geometry, pointer)) {
|
|
450
|
-
this.#scroll = scrollForTrackPage(frame.geometry, pointer.row - frame.rail.rowStart, this.#scroll, frame.page);
|
|
451
|
-
}
|
|
452
|
-
return { owned: true, changed: true };
|
|
453
|
-
}
|
|
454
|
-
#noteScrollActivity(host, now) {
|
|
455
|
-
this.#activeUntil = Math.max(this.#activeUntil, now + SCROLL_LINGER_MS);
|
|
456
|
-
this.#clearActivityTimer();
|
|
457
|
-
this.#activityTimer = setTimeout(() => {
|
|
458
|
-
this.#activityTimer = undefined;
|
|
459
|
-
host.requestRender();
|
|
460
|
-
}, SCROLL_LINGER_REPAINT_MS);
|
|
461
|
-
this.#activityTimer.unref?.();
|
|
462
|
-
}
|
|
463
|
-
#clearActivityTimer() {
|
|
464
|
-
if (this.#activityTimer !== undefined)
|
|
465
|
-
clearTimeout(this.#activityTimer);
|
|
466
|
-
this.#activityTimer = undefined;
|
|
467
|
-
}
|
|
468
389
|
#openMenu(rows, selected, selectCurrent = false) {
|
|
469
390
|
const row = rows[selected];
|
|
470
391
|
if (row === undefined || row.kind !== "element")
|
|
@@ -474,7 +395,7 @@ export class SettingsApp {
|
|
|
474
395
|
this.#openStructured(entry);
|
|
475
396
|
return;
|
|
476
397
|
}
|
|
477
|
-
const shown = this.#
|
|
398
|
+
const shown = this.#edits.shown(entry);
|
|
478
399
|
// Rationale: a number is stepped, not picked from a list: it has its own two controls,
|
|
479
400
|
// and pointing at it is not a request for anything else.
|
|
480
401
|
if (typeof shown === "number")
|
|
@@ -517,9 +438,6 @@ export class SettingsApp {
|
|
|
517
438
|
// selector may open empty so it can truthfully report that no authenticated models exist.
|
|
518
439
|
if (entry.flags.length === 0 && modelDialog !== "default")
|
|
519
440
|
return;
|
|
520
|
-
// Rationale: beside a tab bar, its own Plus Menu dialog configures `+`, so both ways look the same.
|
|
521
|
-
if (entry.backend === "a1" && entry.id === PLUS_MENU_SETTING_ID && this.#options.configurePlusMenu?.() === true)
|
|
522
|
-
return;
|
|
523
441
|
const stored = typeof entry.rawValue === "object" && entry.rawValue !== null && !Array.isArray(entry.rawValue)
|
|
524
442
|
? entry.rawValue
|
|
525
443
|
: {};
|
|
@@ -534,19 +452,12 @@ export class SettingsApp {
|
|
|
534
452
|
// thing under the pointer, so it stops looking like it.
|
|
535
453
|
this.#hoverKey = null;
|
|
536
454
|
this.#hoverRegion = "label";
|
|
537
|
-
this.#
|
|
455
|
+
this.#rail.clear();
|
|
538
456
|
const currentDefault = typeof entry.rawValue === "string" ? entry.rawValue : null;
|
|
539
457
|
this.#structured = {
|
|
540
458
|
entry,
|
|
541
459
|
flags: entry.flags.map(flag => flag.key),
|
|
542
460
|
modelDialog,
|
|
543
|
-
flagDialog: entry.backend !== "a1" ? null
|
|
544
|
-
: entry.id === PLUS_MENU_SETTING_ID ? new PlusMenuDialog(entry.flags)
|
|
545
|
-
: entry.id === TAB_BAR_RIGHT_ITEMS_SETTING_ID ? new FlagToggleDialog(entry.flags, {
|
|
546
|
-
title: "Widgets",
|
|
547
|
-
description: "Choose which widgets the tab bar shows.",
|
|
548
|
-
empty: "No items match",
|
|
549
|
-
}) : null,
|
|
550
461
|
filter: modelDialog === null ? null : new LineInput(""),
|
|
551
462
|
step: "model",
|
|
552
463
|
modelKey: null,
|
|
@@ -562,12 +473,6 @@ export class SettingsApp {
|
|
|
562
473
|
return { consumed: false };
|
|
563
474
|
if (open.modelDialog !== null)
|
|
564
475
|
return this.#modelDialogKey(open, data);
|
|
565
|
-
if (open.flagDialog !== null) {
|
|
566
|
-
const outcome = open.flagDialog.handle(KEYS[data] ?? data, data, key => this.#toggleFlag(open.flags.indexOf(key)));
|
|
567
|
-
if (outcome === "close")
|
|
568
|
-
this.#structured = null;
|
|
569
|
-
return { consumed: true };
|
|
570
|
-
}
|
|
571
476
|
switch (SETTINGS_SHORTCUTS.resolve(KEYS[data] ?? data, DIALOG_SCOPE)) {
|
|
572
477
|
case "close":
|
|
573
478
|
this.#structured = null;
|
|
@@ -582,7 +487,7 @@ export class SettingsApp {
|
|
|
582
487
|
this.#toggleFlag(open.index);
|
|
583
488
|
return { consumed: true };
|
|
584
489
|
case "undo":
|
|
585
|
-
this.#undo();
|
|
490
|
+
this.#edits.undo();
|
|
586
491
|
return { consumed: true };
|
|
587
492
|
default:
|
|
588
493
|
return { consumed: true, render: false };
|
|
@@ -714,14 +619,8 @@ export class SettingsApp {
|
|
|
714
619
|
this.#saveStructured(open, previous, forward);
|
|
715
620
|
}
|
|
716
621
|
#saveStructured(open, previous, forward) {
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
const failure = changeFailure(outcome);
|
|
720
|
-
if (failure === null) {
|
|
721
|
-
this.#recordUndo({ kind: "structured", sequence, entry: open.entry, previous, forward });
|
|
722
|
-
return;
|
|
723
|
-
}
|
|
724
|
-
// Concurrency: only roll back the dialog if no later press has moved the record on.
|
|
622
|
+
// Concurrency: only roll back the dialog if no later press has moved the record on.
|
|
623
|
+
this.#edits.saveStructured(open.entry, previous, forward, () => {
|
|
725
624
|
if (this.#structured === open && sameRecord(open.record, forward))
|
|
726
625
|
replaceRecord(open.record, previous);
|
|
727
626
|
});
|
|
@@ -733,7 +632,7 @@ export class SettingsApp {
|
|
|
733
632
|
const key = KEYS[data] ?? data;
|
|
734
633
|
if (SETTINGS_SHORTCUTS.resolve(key, SCOPE) === "undo") {
|
|
735
634
|
this.#closeMenu(menu);
|
|
736
|
-
this.#undo();
|
|
635
|
+
this.#edits.undo();
|
|
737
636
|
return { consumed: true };
|
|
738
637
|
}
|
|
739
638
|
if (key === "escape") {
|
|
@@ -750,7 +649,7 @@ export class SettingsApp {
|
|
|
750
649
|
const value = menu.choices[menu.index];
|
|
751
650
|
this.#closeMenu(menu);
|
|
752
651
|
if (value !== undefined)
|
|
753
|
-
this.#apply(menu.entry, value);
|
|
652
|
+
this.#edits.apply(menu.entry, value);
|
|
754
653
|
}
|
|
755
654
|
return { consumed: true };
|
|
756
655
|
}
|
|
@@ -810,13 +709,13 @@ export class SettingsApp {
|
|
|
810
709
|
const entry = row.value;
|
|
811
710
|
if (!entry.editable)
|
|
812
711
|
return;
|
|
813
|
-
const shown = this.#
|
|
712
|
+
const shown = this.#edits.shown(entry);
|
|
814
713
|
if (typeof shown === "number") {
|
|
815
714
|
// Rationale: at the end of the range there is nothing to say: the arrow already reads
|
|
816
715
|
// as unavailable, so a message would only repeat it.
|
|
817
716
|
const next = steppedValue(rangeOf(entry), shown, delta);
|
|
818
717
|
if (next !== null)
|
|
819
|
-
this.#apply(entry, next);
|
|
718
|
+
this.#edits.apply(entry, next);
|
|
820
719
|
return;
|
|
821
720
|
}
|
|
822
721
|
const choices = entry.choices;
|
|
@@ -827,82 +726,7 @@ export class SettingsApp {
|
|
|
827
726
|
? (delta > 0 ? 0 : choices.length - 1)
|
|
828
727
|
: (current + delta + choices.length) % choices.length];
|
|
829
728
|
if (next !== undefined)
|
|
830
|
-
this.#apply(entry, next);
|
|
831
|
-
}
|
|
832
|
-
#apply(entry, value) {
|
|
833
|
-
const key = `${entry.backend}:${entry.id}`;
|
|
834
|
-
const previous = this.#shownValue(entry);
|
|
835
|
-
const sequence = ++this.#editSequence;
|
|
836
|
-
// Invariant: shown immediately so the row never lags a keypress, and so the next press
|
|
837
|
-
// steps from here rather than from a value the source has not caught up to.
|
|
838
|
-
this.#pending.set(key, value);
|
|
839
|
-
void this.#session.change(entry.backend, entry.id, value).then(outcome => {
|
|
840
|
-
const failure = changeFailure(outcome);
|
|
841
|
-
if (failure !== null) {
|
|
842
|
-
if (this.#pending.get(key) === value)
|
|
843
|
-
this.#pending.delete(key);
|
|
844
|
-
return;
|
|
845
|
-
}
|
|
846
|
-
if (previous !== null && previous !== value)
|
|
847
|
-
this.#recordUndo({ kind: "scalar", sequence, entry, previous });
|
|
848
|
-
// Concurrency: a later press may have moved on; only the last request clears itself.
|
|
849
|
-
if (this.#pending.get(key) === value)
|
|
850
|
-
this.#pending.delete(key);
|
|
851
|
-
});
|
|
852
|
-
}
|
|
853
|
-
#shownValue(entry) {
|
|
854
|
-
return this.#pending.get(`${entry.backend}:${entry.id}`) ?? entry.value;
|
|
855
|
-
}
|
|
856
|
-
#recordUndo(record) {
|
|
857
|
-
if (this.#closed)
|
|
858
|
-
return;
|
|
859
|
-
const after = this.#undoHistory.findIndex(candidate => candidate.sequence > record.sequence);
|
|
860
|
-
if (after < 0)
|
|
861
|
-
this.#undoHistory.push(record);
|
|
862
|
-
else
|
|
863
|
-
this.#undoHistory.splice(after, 0, record);
|
|
864
|
-
}
|
|
865
|
-
#undo() {
|
|
866
|
-
this.#undoRequests++;
|
|
867
|
-
this.#drainUndo();
|
|
868
|
-
}
|
|
869
|
-
#drainUndo() {
|
|
870
|
-
if (this.#undoActive || this.#undoRequests === 0)
|
|
871
|
-
return;
|
|
872
|
-
const record = this.#undoHistory.pop();
|
|
873
|
-
if (record === undefined) {
|
|
874
|
-
this.#undoRequests = 0;
|
|
875
|
-
return;
|
|
876
|
-
}
|
|
877
|
-
this.#undoRequests--;
|
|
878
|
-
this.#undoActive = true;
|
|
879
|
-
if (record.kind === "scalar") {
|
|
880
|
-
const key = `${record.entry.backend}:${record.entry.id}`;
|
|
881
|
-
this.#pending.set(key, record.previous);
|
|
882
|
-
void this.#session.change(record.entry.backend, record.entry.id, record.previous).then(outcome => {
|
|
883
|
-
if (this.#pending.get(key) === record.previous)
|
|
884
|
-
this.#pending.delete(key);
|
|
885
|
-
this.#finishUndo(record, outcome);
|
|
886
|
-
});
|
|
887
|
-
return;
|
|
888
|
-
}
|
|
889
|
-
const open = this.#structured;
|
|
890
|
-
if (open !== null && sameEntry(open.entry, record.entry))
|
|
891
|
-
replaceRecord(open.record, record.previous);
|
|
892
|
-
void this.#session.changeStructured(record.entry.backend, record.entry.id, structuredValue(record.entry, record.previous)).then(outcome => {
|
|
893
|
-
const failure = changeFailure(outcome);
|
|
894
|
-
if (failure !== null && this.#structured === open && open !== null && sameRecord(open.record, record.previous)) {
|
|
895
|
-
replaceRecord(open.record, record.forward);
|
|
896
|
-
}
|
|
897
|
-
this.#finishUndo(record, outcome);
|
|
898
|
-
});
|
|
899
|
-
}
|
|
900
|
-
#finishUndo(record, outcome) {
|
|
901
|
-
const failure = changeFailure(outcome);
|
|
902
|
-
if (failure !== null)
|
|
903
|
-
this.#recordUndo(record);
|
|
904
|
-
this.#undoActive = false;
|
|
905
|
-
this.#drainUndo();
|
|
729
|
+
this.#edits.apply(entry, next);
|
|
906
730
|
}
|
|
907
731
|
#scrollbarSpeed() {
|
|
908
732
|
const value = this.#scrollSetting("scrollbarSpeed");
|
|
@@ -920,7 +744,7 @@ export class SettingsApp {
|
|
|
920
744
|
const entry = this.#session.sections()
|
|
921
745
|
.flatMap(section => section.entries)
|
|
922
746
|
.find(candidate => candidate.backend === "a1" && candidate.id === id);
|
|
923
|
-
return entry === undefined ? this.#session.value(id) : this.#
|
|
747
|
+
return entry === undefined ? this.#session.value(id) : this.#edits.shown(entry);
|
|
924
748
|
}
|
|
925
749
|
#jump(rows, target) {
|
|
926
750
|
this.#select(rows, target);
|
|
@@ -992,7 +816,7 @@ export class SettingsApp {
|
|
|
992
816
|
}
|
|
993
817
|
#viewRow(entry) {
|
|
994
818
|
const key = `${entry.backend}:${entry.id}`;
|
|
995
|
-
const shown = this.#
|
|
819
|
+
const shown = this.#edits.shown(entry);
|
|
996
820
|
const value = entry.structured || isDefaultModelEntry(entry)
|
|
997
821
|
? CONFIGURE
|
|
998
822
|
: shown === null
|
|
@@ -1018,7 +842,7 @@ export class SettingsApp {
|
|
|
1018
842
|
...(menu.entry.id === "accentColor" ? {
|
|
1019
843
|
previews: menu.choices.map(choice => theme.accentPreview?.(String(choice), "■") ?? ""),
|
|
1020
844
|
} : {}),
|
|
1021
|
-
current: this.#
|
|
845
|
+
current: this.#edits.shown(menu.entry) === null ? null : displaySettingValue(menu.entry, this.#edits.shown(menu.entry)),
|
|
1022
846
|
index: menu.index,
|
|
1023
847
|
};
|
|
1024
848
|
const frame = valueMenuFrame(state, {
|
|
@@ -1036,8 +860,6 @@ export class SettingsApp {
|
|
|
1036
860
|
#dialogLines(open, width, height, theme) {
|
|
1037
861
|
if (open.modelDialog !== null)
|
|
1038
862
|
return this.#modelDialogLines(open, width, height, theme);
|
|
1039
|
-
if (open.flagDialog !== null)
|
|
1040
|
-
return open.flagDialog.lines(open.record, width, theme);
|
|
1041
863
|
const rows = open.flags.map(key => {
|
|
1042
864
|
const declared = open.entry.flags.find(flag => flag.key === key);
|
|
1043
865
|
return {
|
|
@@ -1111,8 +933,7 @@ export class SettingsApp {
|
|
|
1111
933
|
#footerLines(width, theme) {
|
|
1112
934
|
// Rationale: standing guidance is more useful than transient feedback; failures still
|
|
1113
935
|
// roll back without displacing the Settings interaction contract.
|
|
1114
|
-
const entries = SETTINGS_SHORTCUTS.hintEntries(SCOPE)
|
|
1115
|
-
|| entry.key !== DIALOG_CLOSE_SHORTCUT_HINT.key || entry.action !== DIALOG_CLOSE_SHORTCUT_HINT.action);
|
|
936
|
+
const entries = SETTINGS_SHORTCUTS.hintEntries(SCOPE);
|
|
1116
937
|
const status = renderShortcutHintsWithClose(entries, theme, width, width > 0 ? 1 : 0);
|
|
1117
938
|
const input = this.#search.input;
|
|
1118
939
|
if (input === null)
|
|
@@ -1183,36 +1004,6 @@ function thinkingLevelDescription(level) {
|
|
|
1183
1004
|
default: return "";
|
|
1184
1005
|
}
|
|
1185
1006
|
}
|
|
1186
|
-
function structuredValue(entry, record) {
|
|
1187
|
-
// Invariant: a choice part at its fallback is unset, so the engine's default applies.
|
|
1188
|
-
return Object.fromEntries(Object.entries(record).filter(([key, value]) => {
|
|
1189
|
-
const part = entry.flags.find(candidate => candidate.key === key);
|
|
1190
|
-
return part?.choices === undefined || value !== part.fallback;
|
|
1191
|
-
}));
|
|
1192
|
-
}
|
|
1193
|
-
function sameEntry(left, right) {
|
|
1194
|
-
return left.backend === right.backend && left.id === right.id;
|
|
1195
|
-
}
|
|
1196
|
-
function sameRecord(left, right) {
|
|
1197
|
-
const leftEntries = Object.entries(left);
|
|
1198
|
-
const rightEntries = Object.entries(right);
|
|
1199
|
-
return leftEntries.length === rightEntries.length
|
|
1200
|
-
&& leftEntries.every(([key, value]) => right[key] === value);
|
|
1201
|
-
}
|
|
1202
|
-
function replaceRecord(target, source) {
|
|
1203
|
-
for (const key of Object.keys(target))
|
|
1204
|
-
delete target[key];
|
|
1205
|
-
Object.assign(target, source);
|
|
1206
|
-
}
|
|
1207
|
-
function changeFailure(outcome) {
|
|
1208
|
-
if (outcome.failure !== null)
|
|
1209
|
-
return outcome.failure;
|
|
1210
|
-
if (outcome.status === "failed")
|
|
1211
|
-
return "the effect failed";
|
|
1212
|
-
if (outcome.status === "unavailable")
|
|
1213
|
-
return outcome.limitationReason ?? "the setting is unavailable";
|
|
1214
|
-
return outcome.limitationReason;
|
|
1215
|
-
}
|
|
1216
1007
|
function isDefaultModelEntry(entry) {
|
|
1217
1008
|
return entry.backend === "agent" && entry.id === "defaultModel";
|
|
1218
1009
|
}
|
|
@@ -1224,11 +1015,8 @@ function labelOf(entry) {
|
|
|
1224
1015
|
function rangeOf(entry) {
|
|
1225
1016
|
return { minimum: entry.minimum, maximum: entry.maximum, values: numericValues(entry.choices) };
|
|
1226
1017
|
}
|
|
1227
|
-
/** Booleans read as yes and no
|
|
1228
|
-
function displaySettingValue(
|
|
1229
|
-
if (entry.backend === "a1" && entry.id === "timeFormat" && (value === "20:00" || value === "8:00 PM")) {
|
|
1230
|
-
return formatLocalTime(new Date(), value) ?? value;
|
|
1231
|
-
}
|
|
1018
|
+
/** Booleans read as yes and no. */
|
|
1019
|
+
function displaySettingValue(_entry, value) {
|
|
1232
1020
|
if (typeof value === "boolean")
|
|
1233
1021
|
return value ? "yes" : "no";
|
|
1234
1022
|
return String(value);
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { OwnedUiSettingValue, OwnedUiSettingsChangeOutcome, OwnedUiSettingsEntry, OwnedSettingsManager } from "../../ui/settings/index.js";
|
|
2
|
+
type SettingsRecord = Record<string, boolean | string>;
|
|
3
|
+
/** The structured dialog an undo may need to roll back in place; null when none is open. */
|
|
4
|
+
export interface OpenStructuredRecord {
|
|
5
|
+
readonly entry: OwnedUiSettingsEntry;
|
|
6
|
+
readonly record: SettingsRecord;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* The settings screen's edits: values shown ahead of the source, and an undo history ordered by edit
|
|
10
|
+
* sequence. Undo requests drain one at a time so each restores against the result of the one before.
|
|
11
|
+
*/
|
|
12
|
+
export declare class SettingsEdits {
|
|
13
|
+
#private;
|
|
14
|
+
constructor(session: Pick<OwnedSettingsManager, "change" | "changeStructured">, openStructured: () => OpenStructuredRecord | null);
|
|
15
|
+
/** The value a row shows: a pending edit, or the source's value. */
|
|
16
|
+
shown(entry: OwnedUiSettingsEntry): OwnedUiSettingValue | null;
|
|
17
|
+
apply(entry: OwnedUiSettingsEntry, value: OwnedUiSettingValue): void;
|
|
18
|
+
/** Saves a structured dialog's record; `rollback` runs when the change fails. */
|
|
19
|
+
saveStructured(entry: OwnedUiSettingsEntry, previous: Readonly<SettingsRecord>, forward: Readonly<SettingsRecord>, rollback: () => void): void;
|
|
20
|
+
undo(): void;
|
|
21
|
+
open(): void;
|
|
22
|
+
/** Drops the history and queued requests; late results no longer record undo steps. */
|
|
23
|
+
close(): void;
|
|
24
|
+
}
|
|
25
|
+
/** The record the engine stores: a choice part at its fallback is unset, so the engine's default applies. */
|
|
26
|
+
export declare function structuredValue(entry: OwnedUiSettingsEntry, record: Readonly<SettingsRecord>): SettingsRecord;
|
|
27
|
+
export declare function sameRecord(left: Readonly<SettingsRecord>, right: Readonly<SettingsRecord>): boolean;
|
|
28
|
+
export declare function replaceRecord(target: SettingsRecord, source: Readonly<SettingsRecord>): void;
|
|
29
|
+
/** Why a change did not take effect, or null when it did. */
|
|
30
|
+
export declare function changeFailure(outcome: OwnedUiSettingsChangeOutcome): string | null;
|
|
31
|
+
export {};
|