@timurproko/a1 0.2.6 → 0.2.7-dev.1221
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 +41 -3
- package/bin/automatic-update.js +7 -0
- package/bin/cli.js +4 -0
- package/bin/guardian.js +5 -0
- package/bin/tab-launch-context.d.ts +27 -0
- package/bin/tab-launch-context.js +94 -0
- package/bin/ui.js +107 -59
- package/dist/app/session-shell/clipboard-diagnostics.js +1 -1
- package/dist/app/session-shell/dialog-coordinator.d.ts +42 -0
- package/dist/app/session-shell/dialog-coordinator.js +133 -0
- package/dist/app/session-shell/dock-chrome.d.ts +34 -0
- package/dist/app/session-shell/dock-chrome.js +109 -0
- package/dist/app/session-shell/exit-notice.d.ts +1 -1
- package/dist/app/session-shell/exit-notice.js +1 -1
- package/dist/app/session-shell/extension-surface.d.ts +30 -0
- package/dist/app/session-shell/extension-surface.js +105 -0
- package/dist/app/session-shell/helper-pool.d.ts +3 -5
- package/dist/app/session-shell/helper-pool.js +3 -5
- package/dist/app/session-shell/input-surface-switch.d.ts +36 -0
- package/dist/app/session-shell/input-surface-switch.js +85 -0
- package/dist/app/session-shell/login-interaction.d.ts +27 -0
- package/dist/app/session-shell/login-interaction.js +91 -0
- package/dist/app/session-shell/prompt-submission.d.ts +48 -0
- package/dist/app/session-shell/prompt-submission.js +276 -0
- package/dist/app/session-shell/resident-tab-coordinator.d.ts +38 -0
- package/dist/app/session-shell/resident-tab-coordinator.js +77 -0
- package/dist/app/session-shell/response-copy-helper.js +21 -6
- package/dist/app/session-shell/response-copy-protocol.d.ts +1 -1
- package/dist/app/session-shell/response-copy-transport.d.ts +16 -6
- package/dist/app/session-shell/response-copy-transport.js +69 -17
- package/dist/app/session-shell/session-concern.d.ts +22 -0
- package/dist/app/session-shell/session-concern.js +29 -0
- package/dist/app/session-shell/session-lifecycle.d.ts +29 -0
- package/dist/app/session-shell/session-lifecycle.js +49 -0
- package/dist/app/session-shell/session-shell-root.d.ts +42 -6
- package/dist/app/session-shell/session-shell-root.js +196 -908
- package/dist/app/session-shell/session-shell.d.ts +3 -8
- package/dist/app/session-shell/session-shell.js +324 -835
- package/dist/app/session-shell/session-viewport-controller.d.ts +2 -2
- package/dist/app/session-shell/session-viewport-controller.js +29 -15
- package/dist/app/session-shell/settings-bindings.d.ts +17 -0
- package/dist/app/session-shell/settings-bindings.js +91 -0
- package/dist/app/session-shell/shell-editor-factory.d.ts +27 -0
- package/dist/app/session-shell/shell-editor-factory.js +102 -0
- package/dist/app/session-shell/shell-host.d.ts +6 -0
- package/dist/app/session-shell/shell-host.js +34 -7
- package/dist/app/session-shell/shell-layout.d.ts +64 -0
- package/dist/app/session-shell/shell-layout.js +18 -0
- package/dist/app/session-shell/suggestion-surface.d.ts +25 -0
- package/dist/app/session-shell/suggestion-surface.js +63 -0
- package/dist/app/session-shell/transcript-document.d.ts +78 -0
- package/dist/app/session-shell/transcript-document.js +365 -0
- package/dist/app/session-shell/viewport-layout.d.ts +31 -0
- package/dist/app/session-shell/viewport-layout.js +160 -0
- package/dist/app/session-shell/workflow-output.d.ts +33 -0
- package/dist/app/session-shell/workflow-output.js +174 -0
- package/dist/app/session-shell/workflow-router.d.ts +25 -0
- package/dist/app/session-shell/workflow-router.js +39 -0
- package/dist/cli/dispatch.d.ts +11 -1
- package/dist/cli/dispatch.js +79 -5
- package/dist/cli/tabs-request.d.ts +7 -0
- package/dist/cli/tabs-request.js +1 -0
- package/dist/cli/tabs.d.ts +14 -0
- package/dist/cli/tabs.js +151 -0
- package/dist/cli/version-stats.js +38 -3
- package/dist/composition/owned-settings.d.ts +12 -0
- package/dist/composition/owned-settings.js +36 -0
- package/dist/composition/owned-ui.d.ts +27 -28
- package/dist/composition/owned-ui.js +205 -153
- package/dist/composition/resident-tab-bridge.d.ts +25 -0
- package/dist/composition/resident-tab-bridge.js +180 -0
- package/dist/composition/session-backend.d.ts +19 -0
- package/dist/composition/session-backend.js +1 -0
- package/dist/composition/session-runtime-registry.d.ts +20 -0
- package/dist/composition/session-runtime-registry.js +85 -0
- package/dist/composition/settings-route-host.d.ts +16 -1
- package/dist/composition/settings-route-host.js +29 -10
- package/dist/composition/settings-search-input.d.ts +9 -0
- package/dist/composition/settings-search-input.js +58 -0
- package/dist/composition/startup-route.d.ts +32 -0
- package/dist/composition/startup-route.js +72 -0
- package/dist/composition/utility-tab.d.ts +28 -0
- package/dist/composition/utility-tab.js +242 -0
- package/dist/contracts/owned-ui/index.d.ts +1 -1
- package/dist/contracts/owned-ui/model.d.ts +3 -0
- package/dist/contracts/owned-ui/session-backend.d.ts +3 -0
- package/dist/contracts/owned-ui/session-workflows.d.ts +11 -4
- package/dist/contracts/presentation/index.d.ts +11 -0
- package/dist/contracts/presentation/index.js +12 -0
- package/dist/features/launch/development-launch.js +6 -0
- package/dist/features/launch/index.d.ts +1 -1
- package/dist/features/launch/intent.d.ts +3 -1
- package/dist/features/launch/intent.js +7 -4
- package/dist/features/launch/profile-paths.js +4 -0
- package/dist/features/owned-ui/plus-menu-dialog.d.ts +22 -0
- package/dist/features/owned-ui/plus-menu-dialog.js +76 -0
- package/dist/features/owned-ui/project-trust-dialog.d.ts +1 -1
- package/dist/features/owned-ui/project-trust-dialog.js +6 -8
- package/dist/features/owned-ui/project-trust-prompt.d.ts +1 -0
- package/dist/features/owned-ui/project-trust-prompt.js +7 -3
- package/dist/features/owned-ui/reference-screen-app.d.ts +2 -0
- package/dist/features/owned-ui/reference-screen-app.js +12 -2
- package/dist/features/owned-ui/settings-app.d.ts +12 -2
- package/dist/features/owned-ui/settings-app.js +116 -81
- package/dist/features/owned-ui/settings-search-input.d.ts +29 -0
- package/dist/features/owned-ui/settings-search-input.js +1 -0
- package/dist/features/prompt-history/index.d.ts +1 -1
- package/dist/features/prompt-history/paths.d.ts +2 -1
- package/dist/features/prompt-history/paths.js +10 -2
- package/dist/features/prompt-history/service.d.ts +5 -0
- package/dist/features/prompt-history/service.js +1 -1
- package/dist/features/resident-tab/auto-name.d.ts +11 -0
- package/dist/features/resident-tab/auto-name.js +44 -0
- package/dist/features/resident-tab/index.d.ts +5 -0
- package/dist/features/resident-tab/index.js +7 -0
- package/dist/features/resident-tab/shortcut-bindings-file.d.ts +8 -0
- package/dist/features/resident-tab/shortcut-bindings-file.js +40 -0
- package/dist/features/resident-tab/shortcut-declarations.d.ts +13 -0
- package/dist/features/resident-tab/shortcut-declarations.js +26 -0
- package/dist/features/resident-tab/shortcut-projection.d.ts +29 -0
- package/dist/features/resident-tab/shortcut-projection.js +64 -0
- package/dist/features/resident-tab/status-deriver.d.ts +10 -0
- package/dist/features/resident-tab/status-deriver.js +12 -0
- package/dist/foundation/launch-context/index.d.ts +12 -0
- package/dist/foundation/launch-context/index.js +26 -0
- package/dist/foundation/launch-guardian/exit-watcher.d.ts +14 -0
- package/dist/foundation/launch-guardian/exit-watcher.js +94 -0
- package/dist/foundation/launch-guardian/main.d.ts +7 -1
- package/dist/foundation/launch-guardian/main.js +60 -7
- package/dist/foundation/lifecycle/session-repository-context.js +16 -2
- package/dist/foundation/process-containment/{native-guardian-containment.d.ts → addon-containment.d.ts} +7 -5
- package/dist/foundation/process-containment/addon-containment.js +139 -0
- package/dist/foundation/process-containment/addon-process-inspector.d.ts +11 -0
- package/dist/foundation/process-containment/addon-process-inspector.js +36 -0
- package/dist/foundation/process-containment/addon.d.ts +42 -0
- package/dist/foundation/process-containment/addon.js +57 -0
- package/dist/foundation/process-containment/artifact.d.ts +1 -1
- package/dist/foundation/process-containment/artifact.js +6 -5
- package/dist/foundation/process-containment/contracts.d.ts +2 -0
- package/dist/foundation/process-containment/index.d.ts +4 -4
- package/dist/foundation/process-containment/index.js +3 -3
- package/dist/foundation/process-containment/native-process-inspector.d.ts +2 -1
- package/dist/foundation/process-containment/native-process-inspector.js +10 -10
- package/dist/foundation/release/automatic-update.d.ts +37 -0
- package/dist/foundation/release/automatic-update.js +265 -0
- package/dist/foundation/release/bootstrap.d.ts +7 -9
- package/dist/foundation/release/bootstrap.js +107 -24
- package/dist/foundation/release/cohort-state.d.ts +1 -1
- package/dist/foundation/release/cohort-state.js +1 -1
- package/dist/foundation/release/dependency-certification.js +54 -19
- package/dist/foundation/release/early-accent.d.ts +12 -0
- package/dist/foundation/release/early-accent.js +59 -0
- package/dist/foundation/release/index.d.ts +2 -2
- package/dist/foundation/release/index.js +2 -2
- package/dist/foundation/release/latest-release.d.ts +24 -2
- package/dist/foundation/release/latest-release.js +51 -1
- package/dist/foundation/release/progress-palette.generated.d.ts +137 -3
- package/dist/foundation/release/progress-palette.generated.js +137 -3
- package/dist/foundation/release/release-gc.d.ts +3 -0
- package/dist/foundation/release/release-gc.js +59 -8
- package/dist/foundation/release/release-store.d.ts +12 -0
- package/dist/foundation/release/release-store.js +124 -2
- package/dist/foundation/release/update-execution-lease.d.ts +48 -0
- package/dist/foundation/release/update-execution-lease.js +161 -0
- package/dist/foundation/release/update.d.ts +12 -7
- package/dist/foundation/release/update.js +281 -196
- package/dist/foundation/resident-tabs/bounded-host-command.d.ts +18 -0
- package/dist/foundation/resident-tabs/bounded-host-command.js +39 -0
- package/dist/foundation/resident-tabs/bridge-client.d.ts +70 -0
- package/dist/foundation/resident-tabs/bridge-client.js +321 -0
- package/dist/foundation/resident-tabs/doctor.d.ts +28 -0
- package/dist/foundation/resident-tabs/doctor.js +166 -0
- package/dist/foundation/resident-tabs/draft-checkpoint.d.ts +27 -0
- package/dist/foundation/resident-tabs/draft-checkpoint.js +145 -0
- package/dist/foundation/resident-tabs/ensure-terminal-host.d.ts +36 -0
- package/dist/foundation/resident-tabs/ensure-terminal-host.js +151 -0
- package/dist/foundation/resident-tabs/fault-injection.d.ts +8 -0
- package/dist/foundation/resident-tabs/fault-injection.js +26 -0
- package/dist/foundation/resident-tabs/fixture-control.d.ts +7 -0
- package/dist/foundation/resident-tabs/fixture-control.js +35 -0
- package/dist/foundation/resident-tabs/host-entry.d.ts +1 -0
- package/dist/foundation/resident-tabs/host-entry.js +17 -0
- package/dist/foundation/resident-tabs/index.d.ts +12 -0
- package/dist/foundation/resident-tabs/index.js +6 -0
- package/dist/foundation/resident-tabs/maintenance.d.ts +39 -0
- package/dist/foundation/resident-tabs/maintenance.js +75 -0
- package/dist/foundation/resident-tabs/progress-observation-schema.d.ts +34 -0
- package/dist/foundation/resident-tabs/progress-observation-schema.js +1 -0
- package/dist/foundation/resident-tabs/progress-observation.d.ts +4 -0
- package/dist/foundation/resident-tabs/progress-observation.js +150 -0
- package/dist/foundation/resident-tabs/prompt-journal.d.ts +63 -0
- package/dist/foundation/resident-tabs/prompt-journal.js +213 -0
- package/dist/foundation/resident-tabs/protocol.d.ts +12 -0
- package/dist/foundation/resident-tabs/protocol.js +195 -0
- package/dist/foundation/resident-tabs/recovery.d.ts +26 -0
- package/dist/foundation/resident-tabs/recovery.js +205 -0
- package/dist/foundation/resident-tabs/release-holds.d.ts +28 -0
- package/dist/foundation/resident-tabs/release-holds.js +75 -0
- package/dist/foundation/resident-tabs/routes.d.ts +5 -0
- package/dist/foundation/resident-tabs/routes.js +5 -0
- package/dist/foundation/resident-tabs/routing.d.ts +11 -0
- package/dist/foundation/resident-tabs/routing.js +10 -0
- package/dist/foundation/resident-tabs/session-sync.d.ts +14 -0
- package/dist/foundation/resident-tabs/session-sync.js +37 -0
- package/dist/foundation/resident-tabs/settings.d.ts +12 -0
- package/dist/foundation/resident-tabs/settings.js +58 -0
- package/dist/foundation/resident-tabs/terminal-host-artifact.d.ts +14 -0
- package/dist/foundation/resident-tabs/terminal-host-artifact.js +78 -0
- package/dist/foundation/resident-tabs/zip-archive.d.ts +9 -0
- package/dist/foundation/resident-tabs/zip-archive.js +56 -0
- package/dist/foundation/session-writer-lock/index.d.ts +30 -0
- package/dist/foundation/session-writer-lock/index.js +203 -0
- package/dist/foundation/startup/startup-descriptor.js +2 -2
- package/dist/foundation/terminal-cleanup/index.d.ts +1 -1
- package/dist/foundation/terminal-cleanup/index.js +1 -1
- package/dist/foundation/terminal-cleanup/terminal-reset.d.ts +6 -0
- package/dist/foundation/terminal-cleanup/terminal-reset.js +6 -0
- package/dist/integrations/pi/components/editor-interaction.d.ts +2 -0
- package/dist/integrations/pi/components/modal-frame.d.ts +17 -1
- package/dist/integrations/pi/components/modal-frame.js +48 -9
- package/dist/integrations/pi/components/models-dialog.js +4 -52
- package/dist/integrations/pi/components/owned-editor-ux.d.ts +6 -1
- package/dist/integrations/pi/components/owned-editor-ux.js +90 -6
- package/dist/integrations/pi/components/resources/builtin-themes.d.ts +4 -4
- package/dist/integrations/pi/components/resources/builtin-themes.js +4 -4
- package/dist/integrations/pi/components/share-operation-dialog.d.ts +2 -0
- package/dist/integrations/pi/components/share-operation-dialog.js +2 -1
- package/dist/integrations/pi/components/shell-editor-autocomplete.js +58 -36
- package/dist/integrations/pi/components/shell-extension-ui.js +79 -60
- package/dist/integrations/pi/components/shell-footer-status.d.ts +1 -1
- package/dist/integrations/pi/components/shell-footer-status.js +21 -5
- package/dist/integrations/pi/components/shell-hotkey-sections.js +1 -1
- package/dist/integrations/pi/components/shell-presenters-info.d.ts +5 -2
- package/dist/integrations/pi/components/shell-presenters-info.js +18 -4
- package/dist/integrations/pi/components/shell-presenters-transcript.js +4 -1
- package/dist/integrations/pi/components/shell-selectors-dialogs.js +5 -1
- package/dist/integrations/pi/components/shell-shared-facade.d.ts +12 -1
- package/dist/integrations/pi/components/skills-dialog.js +2 -2
- package/dist/integrations/pi/components/upstream/adjacent/core/keybindings.d.ts +1 -1
- package/dist/integrations/pi/components/upstream/adjacent/core/keybindings.js +17 -4
- package/dist/integrations/pi/components/upstream/assets/earendil-image.json +2 -2
- package/dist/integrations/pi/components/upstream/components/countdown-timer.d.ts +1 -1
- package/dist/integrations/pi/components/upstream/components/earendil-announcement.js +1 -1
- package/dist/integrations/pi/components/upstream/components/extension-editor.d.ts +1 -1
- package/dist/integrations/pi/components/upstream/components/extension-editor.js +1 -1
- package/dist/integrations/pi/components/upstream/components/extension-input.js +1 -1
- package/dist/integrations/pi/components/upstream/components/extension-selector.js +1 -1
- package/dist/integrations/pi/components/upstream/components/mermaid.js +1 -1
- package/dist/integrations/pi/components/upstream/components/owned-editor.d.ts +8 -6
- package/dist/integrations/pi/components/upstream/components/owned-editor.js +16 -9
- package/dist/integrations/pi/components/upstream/components/pi-logo.js +1 -1
- package/dist/integrations/pi/components/upstream/components/scoped-models-selector.d.ts +4 -4
- package/dist/integrations/pi/components/upstream/components/scoped-models-selector.js +2 -2
- package/dist/integrations/pi/components/upstream/components/session-footer.d.ts +2 -1
- package/dist/integrations/pi/components/upstream/components/session-footer.js +31 -25
- package/dist/integrations/pi/components/upstream/components/session-selector-search.js +1 -1
- package/dist/integrations/pi/components/upstream/components/session-selector.js +8 -7
- package/dist/integrations/pi/components/upstream/components/skill-invocation-message.d.ts +1 -1
- package/dist/integrations/pi/components/upstream/components/skill-invocation-message.js +1 -1
- package/dist/integrations/pi/components/upstream/components/status-indicator.d.ts +2 -2
- package/dist/integrations/pi/components/upstream/components/status-indicator.js +3 -3
- package/dist/integrations/pi/components/upstream/components/themed-text.d.ts +1 -1
- package/dist/integrations/pi/components/upstream/components/themed-text.js +1 -1
- package/dist/integrations/pi/components/upstream/components/thinking-selector.d.ts +8 -7
- package/dist/integrations/pi/components/upstream/components/thinking-selector.js +10 -9
- package/dist/integrations/pi/components/upstream/components/tool-execution.d.ts +2 -6
- package/dist/integrations/pi/components/upstream/components/tool-execution.js +103 -101
- package/dist/integrations/pi/components/upstream/components/tree-selector.d.ts +9 -9
- package/dist/integrations/pi/components/upstream/components/tree-selector.js +13 -21
- package/dist/integrations/pi/components/upstream/components/trust-selector.js +1 -1
- package/dist/integrations/pi/components/upstream/external-editor.js +1 -1
- package/dist/integrations/pi/components/upstream/history/editor-core.d.ts +2 -2
- package/dist/integrations/pi/components/upstream/history/editor-core.js +7 -5
- package/dist/integrations/pi/components/upstream/history/kill-ring.d.ts +1 -1
- package/dist/integrations/pi/components/upstream/history/kill-ring.js +1 -1
- package/dist/integrations/pi/components/upstream/history/printable-key.js +1 -1
- package/dist/integrations/pi/components/upstream/history/text-helpers.js +1 -1
- package/dist/integrations/pi/components/upstream/history/undo-stack.d.ts +1 -1
- package/dist/integrations/pi/components/upstream/history/undo-stack.js +1 -1
- package/dist/integrations/pi/components/upstream/history/word-navigation.js +1 -1
- package/dist/integrations/pi/components/upstream/model-search.d.ts +1 -1
- package/dist/integrations/pi/components/upstream/program-status-reporter.d.ts +1 -1
- package/dist/integrations/pi/components/upstream/theme/theme-controller.d.ts +1 -1
- package/dist/integrations/pi/components/upstream/theme/theme.d.ts +5 -0
- package/dist/integrations/pi/components/upstream/theme/theme.js +29 -2
- package/dist/integrations/pi/engine/adapter.d.ts +5 -77
- package/dist/integrations/pi/engine/adapter.js +95 -394
- package/dist/integrations/pi/engine/command-dispatch.d.ts +13 -0
- package/dist/integrations/pi/engine/command-dispatch.js +57 -0
- package/dist/integrations/pi/engine/host.js +2 -2
- package/dist/integrations/pi/engine/offline-settings-port.d.ts +23 -0
- package/dist/integrations/pi/engine/offline-settings-port.js +53 -0
- package/dist/integrations/pi/engine/pi-settings-metadata.json +14 -2
- package/dist/integrations/pi/engine/ports.d.ts +56 -0
- package/dist/integrations/pi/engine/ports.js +93 -0
- package/dist/integrations/pi/engine/prompt-suggestions.d.ts +1 -0
- package/dist/integrations/pi/engine/prompt-suggestions.js +40 -0
- package/dist/integrations/pi/engine/resources/changelog.json +4 -4
- package/dist/integrations/pi/engine/runtime-integration.js +102 -29
- package/dist/integrations/pi/engine/session-runtime.d.ts +0 -6
- package/dist/integrations/pi/engine/session-runtime.js +13 -5
- package/dist/integrations/pi/engine/session-selection.d.ts +3 -0
- package/dist/integrations/pi/engine/session-selection.js +45 -9
- package/dist/integrations/pi/engine/settings-bridge.d.ts +5 -0
- package/dist/integrations/pi/engine/settings-bridge.js +15 -0
- package/dist/integrations/pi/engine/settings-port.js +11 -15
- package/dist/integrations/pi/engine/view-state.d.ts +42 -0
- package/dist/integrations/pi/engine/view-state.js +126 -0
- package/dist/integrations/pi/engine/workflow-contexts.js +10 -1
- package/dist/integrations/pi/engine/workflow-runner.js +73 -4
- package/dist/integrations/pi/engine/workflow-support.d.ts +12 -0
- package/dist/integrations/pi/engine/workflow-support.js +36 -0
- package/dist/integrations/pi/engine/workflows.d.ts +3 -1
- package/dist/integrations/pi/engine/workflows.js +1 -0
- package/dist/integrations/pi/startup-public.js +257 -310
- package/dist/integrations/pi/startup-public.manifest.json +564 -440
- package/dist/integrations/pi/tui-runtime/adapter.d.ts +6 -0
- package/dist/integrations/pi/tui-runtime/adapter.js +32 -1
- package/dist/integrations/pi/tui-runtime/contracts.d.ts +5 -0
- package/dist/integrations/pi/tui-runtime/damage-aware-terminal.d.ts +12 -1
- package/dist/integrations/pi/tui-runtime/damage-aware-terminal.js +31 -2
- package/dist/native/darwin-arm64/manifest.json +10 -7
- package/dist/native/darwin-arm64/process-guardian.node +0 -0
- package/dist/native/darwin-arm64/terminal-host-THIRD-PARTY-NOTICES.txt +10500 -0
- package/dist/native/darwin-arm64/terminal-host.manifest.json +46 -0
- package/dist/native/darwin-arm64/terminal-host.node +0 -0
- package/dist/native/darwin-x64/manifest.json +23 -0
- package/dist/native/darwin-x64/process-guardian.node +0 -0
- package/dist/native/darwin-x64/terminal-host-THIRD-PARTY-NOTICES.txt +10737 -0
- package/dist/native/darwin-x64/terminal-host.manifest.json +46 -0
- package/dist/native/darwin-x64/terminal-host.node +0 -0
- package/dist/native/linux-x64/manifest.json +10 -7
- package/dist/native/linux-x64/process-guardian.node +0 -0
- package/dist/native/linux-x64/terminal-host-THIRD-PARTY-NOTICES.txt +11226 -0
- package/dist/native/linux-x64/terminal-host.manifest.json +46 -0
- package/dist/native/linux-x64/terminal-host.node +0 -0
- package/dist/native/win32-x64/manifest.json +10 -7
- package/dist/native/win32-x64/process-guardian.node +0 -0
- package/dist/native/win32-x64/terminal-host-THIRD-PARTY-NOTICES.txt +10757 -0
- package/dist/native/win32-x64/terminal-host.manifest.json +46 -0
- package/dist/native/win32-x64/terminal-host.node +0 -0
- package/dist/product-identity.d.ts +3 -3
- package/dist/product-identity.js +4 -4
- package/dist/product-identity.json +16 -2
- package/dist/runtime-payload-inventory.json +6330 -6677
- package/dist/ui/apps/host.d.ts +2 -0
- package/dist/ui/apps/host.js +7 -1
- package/dist/ui/components/dialog-panel.js +35 -30
- package/dist/ui/components/index.d.ts +2 -2
- package/dist/ui/components/index.js +1 -1
- package/dist/ui/components/line-input.d.ts +4 -1
- package/dist/ui/components/line-input.js +3 -1
- package/dist/ui/components/prompt-input.d.ts +11 -8
- package/dist/ui/components/prompt-input.js +15 -13
- package/dist/ui/components/selection-copy.d.ts +2 -0
- package/dist/ui/components/selection-copy.js +13 -0
- package/dist/ui/components/spans.js +2 -2
- package/dist/ui/components/submitted-prompt.d.ts +9 -6
- package/dist/ui/components/submitted-prompt.js +20 -12
- package/dist/ui/components/surface.js +4 -2
- package/dist/ui/components/text.d.ts +3 -6
- package/dist/ui/components/text.js +6 -8
- package/dist/ui/components/transcript-viewport.d.ts +9 -2
- package/dist/ui/components/transcript-viewport.js +176 -55
- package/dist/ui/settings/declarations.d.ts +90 -16
- package/dist/ui/settings/declarations.js +67 -14
- package/dist/ui/settings/early-accent.d.ts +81 -0
- package/dist/ui/settings/early-accent.js +50 -0
- package/dist/ui/settings/index.d.ts +4 -2
- package/dist/ui/settings/index.js +2 -1
- package/dist/ui/settings/manager.d.ts +16 -3
- package/dist/ui/settings/manager.js +122 -33
- package/dist/ui/settings/migrations.d.ts +6 -0
- package/dist/ui/settings/migrations.js +73 -0
- package/dist/ui/settings/profile-document.d.ts +26 -0
- package/dist/ui/settings/profile-document.js +164 -0
- package/dist/ui/settings/progress-palette.generated.d.ts +139 -0
- package/dist/ui/settings/progress-palette.generated.js +139 -0
- package/dist/ui/settings/sections.d.ts +4 -0
- package/dist/ui/settings/sections.js +9 -3
- package/docs/architecture/boundaries.md +24 -9
- package/docs/architecture/evidence/resident-tabs/linux-x64.md +37 -0
- package/docs/architecture/evidence/resident-tabs/macos-arm64.md +36 -0
- package/docs/architecture/evidence/resident-tabs/macos-x64.md +35 -0
- package/docs/architecture/evidence/resident-tabs/windows-x64.md +36 -0
- package/docs/architecture/internal-naming.md +3 -1
- package/docs/architecture/process-guardian-provenance.md +18 -10
- package/docs/architecture/project-structure.md +8 -0
- package/docs/architecture/resident-tabs-requirements.md +18 -0
- package/docs/architecture/resident-tabs.md +648 -0
- package/docs/architecture/response-copy-delivery.md +1 -1
- package/docs/architecture/terminal-host-proof-gate.md +2 -0
- package/docs/architecture/terminal-host-provenance.md +16 -4
- package/docs/architecture/tool-image-presentation.md +2 -1
- package/docs/architecture/toolchain.md +11 -9
- package/docs/ci-release-runbook.md +14 -7
- package/docs/features/launch-profiles.md +11 -8
- package/docs/features/prompt-history.md +41 -20
- package/docs/manual-resident-tabs-acceptance.md +51 -0
- package/docs/openspec-archive-automation.md +49 -22
- package/docs/validation.md +49 -9
- package/package.json +19 -6
- package/dist/foundation/process-containment/darwin-process-inspector.d.ts +0 -5
- package/dist/foundation/process-containment/darwin-process-inspector.js +0 -7
- package/dist/foundation/process-containment/native-guardian-containment.js +0 -152
- package/dist/foundation/process-containment/windows-process-inspector.d.ts +0 -19
- package/dist/foundation/process-containment/windows-process-inspector.js +0 -56
- package/dist/native/darwin-arm64/process-guardian +0 -0
- package/dist/native/linux-x64/process-guardian +0 -0
- package/dist/native/win32-x64/process-guardian.exe +0 -0
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
type UiAccentColor = "blue" | "purple" | "cyan" | "green" | "orange" | "pink";
|
|
2
|
+
export type EarlyAccentAppearance = "dark" | "light";
|
|
3
|
+
export type EarlyAccentMode = "truecolor" | "256color";
|
|
4
|
+
/** Read only global profile data, never project settings or the interactive resource pipeline. */
|
|
5
|
+
export declare function resolveEarlyAccentColor(environment?: NodeJS.ProcessEnv, home?: () => string): UiAccentColor;
|
|
6
|
+
export declare function earlyAccentPalette(color: UiAccentColor, appearance?: EarlyAccentAppearance, mode?: EarlyAccentMode): {
|
|
7
|
+
readonly accent: string;
|
|
8
|
+
readonly border: string;
|
|
9
|
+
};
|
|
10
|
+
export declare function earlyTerminalAppearance(environment?: NodeJS.ProcessEnv): EarlyAccentAppearance;
|
|
11
|
+
export declare function earlyTerminalColorMode(environment?: NodeJS.ProcessEnv): EarlyAccentMode;
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { readFileSync, statSync } from "node:fs";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import { isAbsolute, join } from "node:path";
|
|
4
|
+
import { PRODUCT_IDENTITY } from "../../product-identity.js";
|
|
5
|
+
import { SHARED_PROGRESS_PALETTE } from "./progress-palette.generated.js";
|
|
6
|
+
const MAX_SETTINGS_BYTES = 256 * 1024;
|
|
7
|
+
/** Read only global profile data, never project settings or the interactive resource pipeline. */
|
|
8
|
+
export function resolveEarlyAccentColor(environment = process.env, home = homedir) {
|
|
9
|
+
try {
|
|
10
|
+
const selectedHome = environment[PRODUCT_IDENTITY.environment.profileHome] ?? home();
|
|
11
|
+
if (!isAbsolute(selectedHome) || selectedHome.includes("\0"))
|
|
12
|
+
return "blue";
|
|
13
|
+
const file = join(selectedHome, PRODUCT_IDENTITY.state.piAgentProfile, "settings.json");
|
|
14
|
+
if (statSync(file).size > MAX_SETTINGS_BYTES)
|
|
15
|
+
return "blue";
|
|
16
|
+
const raw = readFileSync(file, "utf8");
|
|
17
|
+
if (Buffer.byteLength(raw, "utf8") > MAX_SETTINGS_BYTES)
|
|
18
|
+
return "blue";
|
|
19
|
+
const root = JSON.parse(raw.replace(/^\uFEFF/u, ""));
|
|
20
|
+
if (!isRecord(root))
|
|
21
|
+
return "blue";
|
|
22
|
+
const namespace = root[PRODUCT_IDENTITY.commandName];
|
|
23
|
+
if (!isRecord(namespace))
|
|
24
|
+
return "blue";
|
|
25
|
+
const value = namespace.accentColor;
|
|
26
|
+
if (value === "default")
|
|
27
|
+
return "purple"; // Compatibility: preserve explicitly saved legacy defaults.
|
|
28
|
+
return isAccentColor(value) ? value : "blue";
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return "blue";
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
export function earlyAccentPalette(color, appearance = "dark", mode = "truecolor") {
|
|
35
|
+
return SHARED_PROGRESS_PALETTE[color][appearance][mode];
|
|
36
|
+
}
|
|
37
|
+
export function earlyTerminalAppearance(environment = process.env) {
|
|
38
|
+
const index = Number.parseInt((environment.COLORFGBG ?? "").split(";").at(-1) ?? "", 10);
|
|
39
|
+
return Number.isInteger(index) && (index === 7 || index === 15 || index >= 231) ? "light" : "dark";
|
|
40
|
+
}
|
|
41
|
+
export function earlyTerminalColorMode(environment = process.env) {
|
|
42
|
+
if (environment.PI_TRUE_COLOR === "1")
|
|
43
|
+
return "truecolor";
|
|
44
|
+
if (environment.PI_TRUE_COLOR === "0")
|
|
45
|
+
return "256color";
|
|
46
|
+
const program = (environment.TERM_PROGRAM ?? "").toLowerCase();
|
|
47
|
+
const known = ["kitty", "ghostty", "wezterm", "rex", "warpterminal", "iterm.app", "alacritty", "vscode", "zed"];
|
|
48
|
+
const trueColor = /^(truecolor|24bit)$/iu.test(environment.COLORTERM ?? "")
|
|
49
|
+
|| (environment.TERM ?? "").endsWith("-direct")
|
|
50
|
+
|| process.platform === "win32" || environment.WT_SESSION !== undefined
|
|
51
|
+
|| known.includes(program);
|
|
52
|
+
return trueColor ? "truecolor" : "256color";
|
|
53
|
+
}
|
|
54
|
+
function isRecord(value) {
|
|
55
|
+
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
56
|
+
}
|
|
57
|
+
function isAccentColor(value) {
|
|
58
|
+
return typeof value === "string" && Object.hasOwn(SHARED_PROGRESS_PALETTE, value);
|
|
59
|
+
}
|
|
@@ -15,13 +15,13 @@ export { PRODUCT_PACKAGE_NAME, createReleaseIdentity, deriveReleaseIdentity, dig
|
|
|
15
15
|
export type { DiscoverReleasePayloadOptions, DiscoveredReleasePayload, ReleaseFileIdentity, ReleaseIdentity } from "./release.js";
|
|
16
16
|
export { collectRelease, prepareReleaseCleanup, runBoundedReleaseCleanup, runReleaseCleanupWorker, scheduleReleaseCleanup } from "./release-gc.js";
|
|
17
17
|
export type { ReleaseCleanupLimits, ReleaseCleanupOperations, ReleaseCleanupOptions, ReleaseCleanupResult, ReleaseCleanupWorkerOptions } from "./release-gc.js";
|
|
18
|
-
export { RELEASE_MANIFEST_FILENAME, assertImmutableExecutionRoot, consumeMaterializationProof, materializeRelease, readCertifiedReleaseManifest, readMaterializedRelease, resolveReleaseEntryPoint, verifyMaterializedRelease, } from "./release-store.js";
|
|
18
|
+
export { RELEASE_MANIFEST_FILENAME, ReleaseRepairUnavailableError, assertCertifiedFilesPresent, assertImmutableExecutionRoot, consumeMaterializationProof, materializeRelease, readCertifiedReleaseManifest, readMaterializedRelease, repairMaterializedRelease, resolveReleaseEntryPoint, verifyMaterializedRelease, } from "./release-store.js";
|
|
19
19
|
export type { CertifiedReleaseRecord, MaterializeReleaseOptions, MaterializedRelease, ReadCertifiedReleaseManifestOptions, ReleaseContentOperation, ReleaseContentOperationEvent, VerifyMaterializedReleaseOptions, } from "./release-store.js";
|
|
20
20
|
export { createRestartSeal, readRestartCertifiedRelease, releaseCertificationDocument, restartSealDigest } from "./restart-certification.js";
|
|
21
21
|
export type { RestartSeal, RestartValidationEvent } from "./restart-certification.js";
|
|
22
22
|
export { STABLE_RELEASE_SCHEMA, createStableReleaseEvidence, verifyStableRegistry } from "./stable-release.js";
|
|
23
23
|
export type { StableRegistryState, StableRegistryVerificationOptions, StableReleaseEvidence, StableReleaseEvidenceInput } from "./stable-release.js";
|
|
24
|
-
export { PACKAGE_UNLOCK_PATIENCE_MS, PRODUCT_PACKAGE, assertUpdatePerformanceBudget, createNpmProcessRunner, createUpdateLifecycleCoordinator, isPackageLockError, lockedPackageDiagnostic, planUpdateOwnership, renderUpdateProgressBar, runSelfUpdate, } from "./update.js";
|
|
24
|
+
export { PACKAGE_UNLOCK_PATIENCE_MS, UPDATE_ALREADY_RUNNING_EXIT_CODE, PRODUCT_PACKAGE, assertUpdatePerformanceBudget, createNpmProcessRunner, createUpdateLifecycleCoordinator, isPackageLockError, lockedPackageDiagnostic, planUpdateOwnership, renderUpdateProgressBar, runSelfUpdate, } from "./update.js";
|
|
25
25
|
export type { ProcessRequest, ProcessResult, SelfUpdateOptions, UpdateActivationPhase, UpdateChannel, UpdateFileMetadata, UpdateFileSystem, UpdateLifecycleCoordinator, UpdateMaterializationProgress, UpdateMeasuredPhase, UpdateOutput, UpdateOwnershipAction, UpdatePackageReplacementInput, UpdatePerformanceEvidence, UpdatePhaseTimingEvent, UpdateProcessRunner, UpdateTransactionJournal, UpdateUnlockPatience, } from "./update.js";
|
|
26
26
|
export { UPDATE_ACTIVATION_CONTRACT, UPDATE_ACTIVATION_ENTRY, UPDATE_ACTIVATION_MANIFEST_FIELD, activateInstalledRelease, delegateActivation, readActivationContracts, runActivationEntry, } from "./update-activation.js";
|
|
27
27
|
export type { UpdateActivationCallbacks, UpdateActivationEvent, UpdateActivationRequest } from "./update-activation.js";
|
|
@@ -7,10 +7,10 @@ export { listRecordedEndpoints, liveReleaseIds, probeOwnership, readEndpointMeta
|
|
|
7
7
|
export { cleanupProvenIdleOwner, cleanupVerifiedOwner, processIsAlive } from "./process-cleanup.js";
|
|
8
8
|
export { PRODUCT_PACKAGE_NAME, createReleaseIdentity, deriveReleaseIdentity, digestManifestFiles, discoverReleasePayload, packageRootFromModule, releaseFileIdentity, resolveWithin, } from "./release.js";
|
|
9
9
|
export { collectRelease, prepareReleaseCleanup, runBoundedReleaseCleanup, runReleaseCleanupWorker, scheduleReleaseCleanup } from "./release-gc.js";
|
|
10
|
-
export { RELEASE_MANIFEST_FILENAME, assertImmutableExecutionRoot, consumeMaterializationProof, materializeRelease, readCertifiedReleaseManifest, readMaterializedRelease, resolveReleaseEntryPoint, verifyMaterializedRelease, } from "./release-store.js";
|
|
10
|
+
export { RELEASE_MANIFEST_FILENAME, ReleaseRepairUnavailableError, assertCertifiedFilesPresent, assertImmutableExecutionRoot, consumeMaterializationProof, materializeRelease, readCertifiedReleaseManifest, readMaterializedRelease, repairMaterializedRelease, resolveReleaseEntryPoint, verifyMaterializedRelease, } from "./release-store.js";
|
|
11
11
|
export { createRestartSeal, readRestartCertifiedRelease, releaseCertificationDocument, restartSealDigest } from "./restart-certification.js";
|
|
12
12
|
export { STABLE_RELEASE_SCHEMA, createStableReleaseEvidence, verifyStableRegistry } from "./stable-release.js";
|
|
13
|
-
export { PACKAGE_UNLOCK_PATIENCE_MS, PRODUCT_PACKAGE, assertUpdatePerformanceBudget, createNpmProcessRunner, createUpdateLifecycleCoordinator, isPackageLockError, lockedPackageDiagnostic, planUpdateOwnership, renderUpdateProgressBar, runSelfUpdate, } from "./update.js";
|
|
13
|
+
export { PACKAGE_UNLOCK_PATIENCE_MS, UPDATE_ALREADY_RUNNING_EXIT_CODE, PRODUCT_PACKAGE, assertUpdatePerformanceBudget, createNpmProcessRunner, createUpdateLifecycleCoordinator, isPackageLockError, lockedPackageDiagnostic, planUpdateOwnership, renderUpdateProgressBar, runSelfUpdate, } from "./update.js";
|
|
14
14
|
export { UPDATE_ACTIVATION_CONTRACT, UPDATE_ACTIVATION_ENTRY, UPDATE_ACTIVATION_MANIFEST_FIELD, activateInstalledRelease, delegateActivation, readActivationContracts, runActivationEntry, } from "./update-activation.js";
|
|
15
15
|
export { selectSupervisorLaunchReleaseId, selectUpdateLaunchRelease } from "./update-launch.js";
|
|
16
16
|
export { UPDATE_RECOVERY_SCHEMA, cleanupUpdateRecoveryCapsules, inspectUpdateLauncherSet, npmPrefixForGlobalRoot, prepareUpdateRecoveryCapsule, readUpdateRecoveryCapsule, removeUpdateRecoveryCapsule, runProtectedPackageReplacement, updateLauncherPaths, updateNpmInstallArguments, } from "./update-recovery.js";
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/** Published release channels: stable `X.Y.Z` on dist-tag `latest`, development `X.Y.Z-dev.N` on `next`. */
|
|
2
2
|
export type ReleaseChannel = "stable" | "development";
|
|
3
|
+
export type StartupUpdateMode = "auto" | "notify" | "no";
|
|
3
4
|
export interface DistTagVersions {
|
|
4
5
|
readonly release: string | null;
|
|
5
6
|
readonly develop: string | null;
|
|
@@ -20,6 +21,15 @@ export interface AvailableRelease {
|
|
|
20
21
|
}
|
|
21
22
|
export declare const DEFAULT_NPM_REGISTRY = "https://registry.npmjs.org";
|
|
22
23
|
export declare const UPDATE_CHECK_INTERVAL_MS: number;
|
|
24
|
+
/** One published version with the pull request its manifest records, when it records one. */
|
|
25
|
+
export interface PublishedVersion {
|
|
26
|
+
readonly version: string;
|
|
27
|
+
readonly pullRequest: number | null;
|
|
28
|
+
}
|
|
29
|
+
export interface PublishedVersions {
|
|
30
|
+
readonly versions: readonly PublishedVersion[];
|
|
31
|
+
readonly error: string | null;
|
|
32
|
+
}
|
|
23
33
|
/**
|
|
24
34
|
* The channel a running version updates on, or null for a version that was never published:
|
|
25
35
|
* a bare `X.Y.Z-dev` only comes from a source checkout, which has nothing to update to.
|
|
@@ -31,6 +41,18 @@ export declare function distTagsUrl(registry?: string): string;
|
|
|
31
41
|
/** Read `latest` (required) and `next` (optional) from a dist-tags object. */
|
|
32
42
|
export declare function parseDistTags(metadata: unknown, source: string): DistTagVersions;
|
|
33
43
|
export declare function queryRegistryDistTags(fetcher: RegistryFetcher, registry?: string): Promise<DistTagVersions>;
|
|
44
|
+
export declare function packageDocumentUrl(registry?: string): string;
|
|
45
|
+
/** The pull request a published or installed manifest records under `publication.pullRequest`, when valid. */
|
|
46
|
+
export declare function recordedPullRequest(manifest: unknown): number | null;
|
|
47
|
+
/**
|
|
48
|
+
* Every published version with its recorded pull request, read from the registry's full package
|
|
49
|
+
* document: its per-version manifests keep the publication metadata that version lists and the
|
|
50
|
+
* abbreviated install document leave out.
|
|
51
|
+
*/
|
|
52
|
+
export declare function queryPublishedVersions(fetcher: RegistryFetcher, registry?: string): Promise<PublishedVersions>;
|
|
53
|
+
export declare function parsePublishedVersions(document: unknown): PublishedVersions;
|
|
54
|
+
/** Forget the startup release check so the next interactive launch asks the registry again. */
|
|
55
|
+
export declare function invalidateReleaseCheckCache(configDir: string): Promise<void>;
|
|
34
56
|
export declare function unavailableDistTags(error: string): DistTagVersions;
|
|
35
57
|
export declare function createRegistryFetcher(timeoutMs: number): RegistryFetcher;
|
|
36
58
|
export interface StartupReleaseCheckOptions {
|
|
@@ -39,8 +61,8 @@ export interface StartupReleaseCheckOptions {
|
|
|
39
61
|
readonly environment?: NodeJS.ProcessEnv;
|
|
40
62
|
/** Whether standard output is an interactive terminal. */
|
|
41
63
|
readonly interactive: boolean;
|
|
42
|
-
/** The bare-A1 `updateCheck` setting; comparison profiles omit it. */
|
|
43
|
-
readonly
|
|
64
|
+
/** The bare-A1 `updateCheck` setting; comparison profiles omit it and use auto. */
|
|
65
|
+
readonly settingMode?: StartupUpdateMode;
|
|
44
66
|
readonly fetcher?: RegistryFetcher;
|
|
45
67
|
readonly now?: () => number;
|
|
46
68
|
}
|
|
@@ -9,6 +9,7 @@ const STARTUP_FETCH_TIMEOUT_MS = 3_000;
|
|
|
9
9
|
const CACHE_FILENAME = "update-check.json";
|
|
10
10
|
const CACHE_VERSION = 1;
|
|
11
11
|
const MAX_CACHE_BYTES = 4096;
|
|
12
|
+
const MAX_PACKAGE_DOCUMENT_BYTES = 32 * 1024 * 1024;
|
|
12
13
|
const DEVELOPMENT_BUILD = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)-dev\.(0|[1-9]\d*)$/u;
|
|
13
14
|
const RELEASE_PAGE = "https://github.com/timurproko/a1/releases/tag/v";
|
|
14
15
|
/**
|
|
@@ -57,6 +58,55 @@ export async function queryRegistryDistTags(fetcher, registry) {
|
|
|
57
58
|
return unavailableDistTags(errorMessage(error));
|
|
58
59
|
}
|
|
59
60
|
}
|
|
61
|
+
export function packageDocumentUrl(registry = DEFAULT_NPM_REGISTRY) {
|
|
62
|
+
return `${registry.replace(/\/+$/u, "")}/${encodeURIComponent(PRODUCT_TEXT.packageName)}`;
|
|
63
|
+
}
|
|
64
|
+
/** The pull request a published or installed manifest records under `publication.pullRequest`, when valid. */
|
|
65
|
+
export function recordedPullRequest(manifest) {
|
|
66
|
+
if (typeof manifest !== "object" || manifest === null)
|
|
67
|
+
return null;
|
|
68
|
+
const publication = manifest.publication;
|
|
69
|
+
if (typeof publication !== "object" || publication === null)
|
|
70
|
+
return null;
|
|
71
|
+
const value = publication.pullRequest;
|
|
72
|
+
return typeof value === "number" && Number.isSafeInteger(value) && value > 0 ? value : null;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Every published version with its recorded pull request, read from the registry's full package
|
|
76
|
+
* document: its per-version manifests keep the publication metadata that version lists and the
|
|
77
|
+
* abbreviated install document leave out.
|
|
78
|
+
*/
|
|
79
|
+
export async function queryPublishedVersions(fetcher, registry) {
|
|
80
|
+
try {
|
|
81
|
+
const response = await fetcher(packageDocumentUrl(registry));
|
|
82
|
+
if (!response.ok)
|
|
83
|
+
return { versions: [], error: `registry responded with status ${response.status}` };
|
|
84
|
+
const text = await response.text();
|
|
85
|
+
if (text.length > MAX_PACKAGE_DOCUMENT_BYTES)
|
|
86
|
+
return { versions: [], error: "registry package document is oversized" };
|
|
87
|
+
return parsePublishedVersions(JSON.parse(text));
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
return { versions: [], error: errorMessage(error) };
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
export function parsePublishedVersions(document) {
|
|
94
|
+
if (typeof document !== "object" || document === null || Array.isArray(document)) {
|
|
95
|
+
return { versions: [], error: "registry returned a non-object package document" };
|
|
96
|
+
}
|
|
97
|
+
const manifests = document.versions;
|
|
98
|
+
if (typeof manifests !== "object" || manifests === null || Array.isArray(manifests)) {
|
|
99
|
+
return { versions: [], error: "registry package document lists no versions" };
|
|
100
|
+
}
|
|
101
|
+
const versions = Object.entries(manifests)
|
|
102
|
+
.filter(([version]) => validSemver(version) === version)
|
|
103
|
+
.map(([version, manifest]) => ({ version, pullRequest: recordedPullRequest(manifest) }));
|
|
104
|
+
return { versions, error: null };
|
|
105
|
+
}
|
|
106
|
+
/** Forget the startup release check so the next interactive launch asks the registry again. */
|
|
107
|
+
export async function invalidateReleaseCheckCache(configDir) {
|
|
108
|
+
await rm(join(configDir, CACHE_FILENAME), { force: true });
|
|
109
|
+
}
|
|
60
110
|
export function unavailableDistTags(error) {
|
|
61
111
|
return { release: null, develop: null, error };
|
|
62
112
|
}
|
|
@@ -74,7 +124,7 @@ export function startupReleaseCheckSkipReason(options) {
|
|
|
74
124
|
return "ci";
|
|
75
125
|
if (!options.interactive)
|
|
76
126
|
return "not-interactive";
|
|
77
|
-
if (options.
|
|
127
|
+
if (options.settingMode === "no")
|
|
78
128
|
return "disabled-by-setting";
|
|
79
129
|
if (releaseChannelOf(options.runningVersion) === null)
|
|
80
130
|
return "unpublished-version";
|
|
@@ -1,5 +1,139 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Generated by scripts/pi/sync-progress-palette.ts from
|
|
3
|
-
* (MIT), commit
|
|
2
|
+
* Generated by scripts/pi/sync-progress-palette.ts from A1's named accent projection
|
|
3
|
+
* over pinned Pi 1.4.0 (MIT), commit 4a080252f06caf63a525d7873c5d94d3c23887e0. Do not edit directly.
|
|
4
4
|
*/
|
|
5
|
-
export declare const
|
|
5
|
+
export declare const SHARED_PROGRESS_PALETTE: Readonly<{
|
|
6
|
+
blue: {
|
|
7
|
+
dark: {
|
|
8
|
+
truecolor: {
|
|
9
|
+
accent: string;
|
|
10
|
+
border: string;
|
|
11
|
+
};
|
|
12
|
+
"256color": {
|
|
13
|
+
accent: string;
|
|
14
|
+
border: string;
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
light: {
|
|
18
|
+
truecolor: {
|
|
19
|
+
accent: string;
|
|
20
|
+
border: string;
|
|
21
|
+
};
|
|
22
|
+
"256color": {
|
|
23
|
+
accent: string;
|
|
24
|
+
border: string;
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
purple: {
|
|
29
|
+
dark: {
|
|
30
|
+
truecolor: {
|
|
31
|
+
accent: string;
|
|
32
|
+
border: string;
|
|
33
|
+
};
|
|
34
|
+
"256color": {
|
|
35
|
+
accent: string;
|
|
36
|
+
border: string;
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
light: {
|
|
40
|
+
truecolor: {
|
|
41
|
+
accent: string;
|
|
42
|
+
border: string;
|
|
43
|
+
};
|
|
44
|
+
"256color": {
|
|
45
|
+
accent: string;
|
|
46
|
+
border: string;
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
cyan: {
|
|
51
|
+
dark: {
|
|
52
|
+
truecolor: {
|
|
53
|
+
accent: string;
|
|
54
|
+
border: string;
|
|
55
|
+
};
|
|
56
|
+
"256color": {
|
|
57
|
+
accent: string;
|
|
58
|
+
border: string;
|
|
59
|
+
};
|
|
60
|
+
};
|
|
61
|
+
light: {
|
|
62
|
+
truecolor: {
|
|
63
|
+
accent: string;
|
|
64
|
+
border: string;
|
|
65
|
+
};
|
|
66
|
+
"256color": {
|
|
67
|
+
accent: string;
|
|
68
|
+
border: string;
|
|
69
|
+
};
|
|
70
|
+
};
|
|
71
|
+
};
|
|
72
|
+
green: {
|
|
73
|
+
dark: {
|
|
74
|
+
truecolor: {
|
|
75
|
+
accent: string;
|
|
76
|
+
border: string;
|
|
77
|
+
};
|
|
78
|
+
"256color": {
|
|
79
|
+
accent: string;
|
|
80
|
+
border: string;
|
|
81
|
+
};
|
|
82
|
+
};
|
|
83
|
+
light: {
|
|
84
|
+
truecolor: {
|
|
85
|
+
accent: string;
|
|
86
|
+
border: string;
|
|
87
|
+
};
|
|
88
|
+
"256color": {
|
|
89
|
+
accent: string;
|
|
90
|
+
border: string;
|
|
91
|
+
};
|
|
92
|
+
};
|
|
93
|
+
};
|
|
94
|
+
orange: {
|
|
95
|
+
dark: {
|
|
96
|
+
truecolor: {
|
|
97
|
+
accent: string;
|
|
98
|
+
border: string;
|
|
99
|
+
};
|
|
100
|
+
"256color": {
|
|
101
|
+
accent: string;
|
|
102
|
+
border: string;
|
|
103
|
+
};
|
|
104
|
+
};
|
|
105
|
+
light: {
|
|
106
|
+
truecolor: {
|
|
107
|
+
accent: string;
|
|
108
|
+
border: string;
|
|
109
|
+
};
|
|
110
|
+
"256color": {
|
|
111
|
+
accent: string;
|
|
112
|
+
border: string;
|
|
113
|
+
};
|
|
114
|
+
};
|
|
115
|
+
};
|
|
116
|
+
pink: {
|
|
117
|
+
dark: {
|
|
118
|
+
truecolor: {
|
|
119
|
+
accent: string;
|
|
120
|
+
border: string;
|
|
121
|
+
};
|
|
122
|
+
"256color": {
|
|
123
|
+
accent: string;
|
|
124
|
+
border: string;
|
|
125
|
+
};
|
|
126
|
+
};
|
|
127
|
+
light: {
|
|
128
|
+
truecolor: {
|
|
129
|
+
accent: string;
|
|
130
|
+
border: string;
|
|
131
|
+
};
|
|
132
|
+
"256color": {
|
|
133
|
+
accent: string;
|
|
134
|
+
border: string;
|
|
135
|
+
};
|
|
136
|
+
};
|
|
137
|
+
};
|
|
138
|
+
}>;
|
|
139
|
+
export declare const SHARED_PROGRESS_ACCENT_ANSI: string;
|
|
@@ -1,5 +1,139 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Generated by scripts/pi/sync-progress-palette.ts from
|
|
3
|
-
* (MIT), commit
|
|
2
|
+
* Generated by scripts/pi/sync-progress-palette.ts from A1's named accent projection
|
|
3
|
+
* over pinned Pi 1.4.0 (MIT), commit 4a080252f06caf63a525d7873c5d94d3c23887e0. Do not edit directly.
|
|
4
4
|
*/
|
|
5
|
-
export const
|
|
5
|
+
export const SHARED_PROGRESS_PALETTE = Object.freeze({
|
|
6
|
+
"blue": {
|
|
7
|
+
"dark": {
|
|
8
|
+
"truecolor": {
|
|
9
|
+
"accent": "\u001b[38;2;130;160;241m",
|
|
10
|
+
"border": "\u001b[38;2;116;102;197m"
|
|
11
|
+
},
|
|
12
|
+
"256color": {
|
|
13
|
+
"accent": "\u001b[38;5;111m",
|
|
14
|
+
"border": "\u001b[38;5;98m"
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"light": {
|
|
18
|
+
"truecolor": {
|
|
19
|
+
"accent": "\u001b[38;2;63;96;226m",
|
|
20
|
+
"border": "\u001b[38;2;83;67;154m"
|
|
21
|
+
},
|
|
22
|
+
"256color": {
|
|
23
|
+
"accent": "\u001b[38;5;62m",
|
|
24
|
+
"border": "\u001b[38;5;60m"
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
"purple": {
|
|
29
|
+
"dark": {
|
|
30
|
+
"truecolor": {
|
|
31
|
+
"accent": "\u001b[38;2;167;152;215m",
|
|
32
|
+
"border": "\u001b[38;2;105;115;167m"
|
|
33
|
+
},
|
|
34
|
+
"256color": {
|
|
35
|
+
"accent": "\u001b[38;5;140m",
|
|
36
|
+
"border": "\u001b[38;5;61m"
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
"light": {
|
|
40
|
+
"truecolor": {
|
|
41
|
+
"accent": "\u001b[38;2;116;89;180m",
|
|
42
|
+
"border": "\u001b[38;2;68;77;130m"
|
|
43
|
+
},
|
|
44
|
+
"256color": {
|
|
45
|
+
"accent": "\u001b[38;5;97m",
|
|
46
|
+
"border": "\u001b[38;5;60m"
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
"cyan": {
|
|
51
|
+
"dark": {
|
|
52
|
+
"truecolor": {
|
|
53
|
+
"accent": "\u001b[38;2;93;179;186m",
|
|
54
|
+
"border": "\u001b[38;2;74;128;146m"
|
|
55
|
+
},
|
|
56
|
+
"256color": {
|
|
57
|
+
"accent": "\u001b[38;5;73m",
|
|
58
|
+
"border": "\u001b[38;5;66m"
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
"light": {
|
|
62
|
+
"truecolor": {
|
|
63
|
+
"accent": "\u001b[38;2;40;122;129m",
|
|
64
|
+
"border": "\u001b[38;2;40;89;106m"
|
|
65
|
+
},
|
|
66
|
+
"256color": {
|
|
67
|
+
"accent": "\u001b[38;5;30m",
|
|
68
|
+
"border": "\u001b[38;5;23m"
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
"green": {
|
|
73
|
+
"dark": {
|
|
74
|
+
"truecolor": {
|
|
75
|
+
"accent": "\u001b[38;2;104;183;141m",
|
|
76
|
+
"border": "\u001b[38;2;75;132;120m"
|
|
77
|
+
},
|
|
78
|
+
"256color": {
|
|
79
|
+
"accent": "\u001b[38;5;72m",
|
|
80
|
+
"border": "\u001b[38;5;66m"
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
"light": {
|
|
84
|
+
"truecolor": {
|
|
85
|
+
"accent": "\u001b[38;2;51;126;88m",
|
|
86
|
+
"border": "\u001b[38;2;41;93;82m"
|
|
87
|
+
},
|
|
88
|
+
"256color": {
|
|
89
|
+
"accent": "\u001b[38;5;65m",
|
|
90
|
+
"border": "\u001b[38;5;23m"
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
"orange": {
|
|
95
|
+
"dark": {
|
|
96
|
+
"truecolor": {
|
|
97
|
+
"accent": "\u001b[38;2;231;135;83m",
|
|
98
|
+
"border": "\u001b[38;2;178;89;79m"
|
|
99
|
+
},
|
|
100
|
+
"256color": {
|
|
101
|
+
"accent": "\u001b[38;5;173m",
|
|
102
|
+
"border": "\u001b[38;5;131m"
|
|
103
|
+
}
|
|
104
|
+
},
|
|
105
|
+
"light": {
|
|
106
|
+
"truecolor": {
|
|
107
|
+
"accent": "\u001b[38;2;174;80;16m",
|
|
108
|
+
"border": "\u001b[38;2;133;57;49m"
|
|
109
|
+
},
|
|
110
|
+
"256color": {
|
|
111
|
+
"accent": "\u001b[38;5;130m",
|
|
112
|
+
"border": "\u001b[38;5;95m"
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
},
|
|
116
|
+
"pink": {
|
|
117
|
+
"dark": {
|
|
118
|
+
"truecolor": {
|
|
119
|
+
"accent": "\u001b[38;2;223;122;199m",
|
|
120
|
+
"border": "\u001b[38;2;150;91;171m"
|
|
121
|
+
},
|
|
122
|
+
"256color": {
|
|
123
|
+
"accent": "\u001b[38;5;176m",
|
|
124
|
+
"border": "\u001b[38;5;97m"
|
|
125
|
+
}
|
|
126
|
+
},
|
|
127
|
+
"light": {
|
|
128
|
+
"truecolor": {
|
|
129
|
+
"accent": "\u001b[38;2;178;56;153m",
|
|
130
|
+
"border": "\u001b[38;2;114;61;131m"
|
|
131
|
+
},
|
|
132
|
+
"256color": {
|
|
133
|
+
"accent": "\u001b[38;5;132m",
|
|
134
|
+
"border": "\u001b[38;5;60m"
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
export const SHARED_PROGRESS_ACCENT_ANSI = SHARED_PROGRESS_PALETTE.blue.dark.truecolor.accent;
|
|
@@ -2,6 +2,7 @@ import { rename, rm } from "node:fs/promises";
|
|
|
2
2
|
import { CohortStateStore, type ExternalReleaseHold, type OrphanReleaseDisposition } from "./cohort-state.js";
|
|
3
3
|
import type { ProductPaths } from "../lifecycle/index.js";
|
|
4
4
|
import { UpdateTransactionStore } from "./update-transaction.js";
|
|
5
|
+
import { type ResidentReleaseHoldReport } from "../resident-tabs/index.js";
|
|
5
6
|
export interface ReleaseCleanupLimits {
|
|
6
7
|
readonly maxItems: number;
|
|
7
8
|
readonly maxDurationMs: number;
|
|
@@ -21,6 +22,8 @@ export interface ReleaseCleanupOptions {
|
|
|
21
22
|
readonly operations?: ReleaseCleanupOperations;
|
|
22
23
|
/** Process-start seam for scheduler and continuation tests. */
|
|
23
24
|
readonly workerSpawner?: (entry: string, environment: NodeJS.ProcessEnv) => Promise<void>;
|
|
25
|
+
/** Resident-tab inspection seam; the default asks a verified installed terminal host. */
|
|
26
|
+
readonly residentHolds?: (dataDir: string, releaseRoots: readonly string[]) => Promise<ResidentReleaseHoldReport>;
|
|
24
27
|
}
|
|
25
28
|
export interface ReleaseCleanupWorkerOptions {
|
|
26
29
|
readonly cleanup?: ReleaseCleanupOptions;
|
|
@@ -14,6 +14,7 @@ import { UpdateTransactionStore } from "./update-transaction.js";
|
|
|
14
14
|
import { cleanupUpdateRecoveryCapsules } from "./update-recovery.js";
|
|
15
15
|
import { PRODUCT_IDENTITY } from "../../product-identity.js";
|
|
16
16
|
import { collectCompileCaches, startupCompileCachePath } from "../startup/index.js";
|
|
17
|
+
import { readResidentReleaseHolds } from "../resident-tabs/index.js";
|
|
17
18
|
const DEFAULT_CANDIDATE_AGE_MS = 60 * 60 * 1_000;
|
|
18
19
|
const DEFAULT_LIMITS = { maxItems: 8, maxDurationMs: 2_000, concurrency: 1 };
|
|
19
20
|
const DEFAULT_WORKER_DURATION_MS = 10 * 60 * 1_000;
|
|
@@ -30,7 +31,7 @@ export async function prepareReleaseCleanup(dataDir, paths, options = {}) {
|
|
|
30
31
|
const store = new CohortStateStore(dataDir);
|
|
31
32
|
const discovered = await discoverCleanupInputs(dataDir, store, options);
|
|
32
33
|
const transactionStore = options.transactionStore ?? new UpdateTransactionStore(dataDir);
|
|
33
|
-
await store.reconcileRetention(async () => await protectionInputs(paths, transactionStore, options.externalHolds ?? []), discovered.orphans);
|
|
34
|
+
await store.reconcileRetention(async () => await protectionInputs(dataDir, paths, transactionStore, options.externalHolds ?? [], options.residentHolds), discovered.orphans);
|
|
34
35
|
for (const diagnostic of discovered.diagnostics.slice(0, 16)) {
|
|
35
36
|
await store.recordCleanupFailure(diagnostic.releaseId, diagnostic.stage, diagnostic.error);
|
|
36
37
|
}
|
|
@@ -77,7 +78,7 @@ export async function runBoundedReleaseCleanup(dataDir, paths, options = {}) {
|
|
|
77
78
|
maximum -= 1;
|
|
78
79
|
const certificationId = certificationReleaseId(artifact);
|
|
79
80
|
if (certificationId !== null) {
|
|
80
|
-
const inputs = await protectionInputs(paths, transactionStore, options.externalHolds ?? []);
|
|
81
|
+
const inputs = await protectionInputs(dataDir, paths, transactionStore, options.externalHolds ?? [], options.residentHolds);
|
|
81
82
|
if (isProtectedDetachedRelease(await store.read(), inputs, certificationId))
|
|
82
83
|
continue;
|
|
83
84
|
}
|
|
@@ -232,7 +233,7 @@ export async function collectRelease(store, dataDir, releaseId, externalReferenc
|
|
|
232
233
|
const state = await store.read();
|
|
233
234
|
if (!state.releases[releaseId])
|
|
234
235
|
throw new Error(`unknown release ${releaseId}`);
|
|
235
|
-
await store.reconcileRetention(async () => ({ ...(await protectionInputs(paths, new UpdateTransactionStore(dataDir), holds)) }));
|
|
236
|
+
await store.reconcileRetention(async () => ({ ...(await protectionInputs(dataDir, paths, new UpdateTransactionStore(dataDir), holds)) }));
|
|
236
237
|
const disposition = (await store.read()).cleanup.pending[releaseId];
|
|
237
238
|
if (!disposition)
|
|
238
239
|
throw new Error(`release ${releaseId} is still referenced and cannot be collected`);
|
|
@@ -243,7 +244,7 @@ export async function collectRelease(store, dataDir, releaseId, externalReferenc
|
|
|
243
244
|
async function collectDisposition(store, dataDir, paths, disposition, options) {
|
|
244
245
|
const releaseId = disposition.release.releaseId;
|
|
245
246
|
try {
|
|
246
|
-
const inputs = await protectionInputs(paths, options.transactionStore ?? new UpdateTransactionStore(dataDir), options.externalHolds ?? []);
|
|
247
|
+
const inputs = await protectionInputs(dataDir, paths, options.transactionStore ?? new UpdateTransactionStore(dataDir), options.externalHolds ?? [], options.residentHolds);
|
|
247
248
|
const current = await store.read();
|
|
248
249
|
if (isProtectedDetachedRelease(current, inputs, releaseId))
|
|
249
250
|
return false;
|
|
@@ -289,12 +290,62 @@ function isProtectedDetachedRelease(state, inputs, releaseId) {
|
|
|
289
290
|
|| (inputs.externalHolds ?? []).some(hold => hold.releaseId === releaseId)
|
|
290
291
|
|| (inputs.transaction?.status === "active" && inputs.transaction.priorActiveReleaseId === releaseId);
|
|
291
292
|
}
|
|
292
|
-
async function protectionInputs(paths, transactionStore, externalHolds) {
|
|
293
|
-
const [liveIds, transaction] = await Promise.all([
|
|
293
|
+
async function protectionInputs(dataDir, paths, transactionStore, externalHolds, residentHolds) {
|
|
294
|
+
const [liveIds, transaction, resident] = await Promise.all([
|
|
294
295
|
paths ? liveReleaseIds(paths) : Promise.resolve([]),
|
|
295
296
|
transactionStore.read(),
|
|
297
|
+
residentReleaseHolds(dataDir, residentHolds),
|
|
296
298
|
]);
|
|
297
|
-
return { liveReleaseIds: liveIds, externalHolds, transaction: transactionReference(transaction) };
|
|
299
|
+
return { liveReleaseIds: liveIds, externalHolds: [...externalHolds, ...resident], transaction: transactionReference(transaction) };
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Holds every release a live resident server, holder, or tab child runs from. Retention fails
|
|
303
|
+
* closed: an incomplete report, or a recorded root inside the release store that names no known
|
|
304
|
+
* release, holds every known release.
|
|
305
|
+
*/
|
|
306
|
+
async function residentReleaseHolds(dataDir, reader) {
|
|
307
|
+
const state = await new CohortStateStore(dataDir).read();
|
|
308
|
+
const records = [
|
|
309
|
+
...Object.values(state.releases),
|
|
310
|
+
...Object.values(state.cleanup.pending).map(disposition => disposition.release),
|
|
311
|
+
];
|
|
312
|
+
const preferred = [state.references.active, state.references.rollback]
|
|
313
|
+
.flatMap(id => id && state.releases[id] ? [state.releases[id].releaseRoot] : []);
|
|
314
|
+
const roots = [...new Set([...preferred, ...Object.values(state.releases).map(record => record.releaseRoot)])];
|
|
315
|
+
const report = await (reader ?? ((directory, releaseRoots) => readResidentReleaseHolds({ dataDir: directory, releaseRoots })))(dataDir, roots);
|
|
316
|
+
const everything = () => [...new Set(records.map(record => record.releaseId))].map(releaseId => ({ authority: "resident", releaseId }));
|
|
317
|
+
if (!report.complete)
|
|
318
|
+
return everything();
|
|
319
|
+
if (report.releaseRoots.length === 0)
|
|
320
|
+
return [];
|
|
321
|
+
// Rationale: native Windows extended paths and Unix aliases must match the catalog's spelling.
|
|
322
|
+
const byRoot = new Map();
|
|
323
|
+
for (const record of records) {
|
|
324
|
+
const canonical = await realpath(record.releaseRoot).catch(() => record.releaseRoot);
|
|
325
|
+
byRoot.set(comparablePath(canonical), record.releaseId);
|
|
326
|
+
}
|
|
327
|
+
const directory = await realpath(resolve(dataDir, "releases")).catch(() => null);
|
|
328
|
+
if (directory === null)
|
|
329
|
+
return everything();
|
|
330
|
+
const store = comparablePath(directory);
|
|
331
|
+
const holds = new Set();
|
|
332
|
+
for (const root of report.releaseRoots) {
|
|
333
|
+
// Security: an unresolved live root may alias managed content; uncertainty must retain it.
|
|
334
|
+
const canonical = await realpath(root).catch(() => null);
|
|
335
|
+
if (canonical === null)
|
|
336
|
+
return everything();
|
|
337
|
+
const key = comparablePath(canonical);
|
|
338
|
+
const releaseId = byRoot.get(key);
|
|
339
|
+
if (releaseId)
|
|
340
|
+
holds.add(releaseId);
|
|
341
|
+
else if (key.startsWith(`${store}${sep}`))
|
|
342
|
+
return everything();
|
|
343
|
+
}
|
|
344
|
+
return [...holds].sort().map(releaseId => ({ authority: "resident", releaseId }));
|
|
345
|
+
}
|
|
346
|
+
function comparablePath(path) {
|
|
347
|
+
const absolute = resolve(path);
|
|
348
|
+
return process.platform === "win32" ? absolute.toLowerCase() : absolute;
|
|
298
349
|
}
|
|
299
350
|
function transactionReference(transaction) {
|
|
300
351
|
return transaction === null ? null : { status: transaction.status, priorActiveReleaseId: transaction.priorActiveReleaseId };
|
|
@@ -745,7 +796,7 @@ function parseWorkerHolds(value) {
|
|
|
745
796
|
if (!Array.isArray(parsed))
|
|
746
797
|
return [];
|
|
747
798
|
return parsed.filter((hold) => Boolean(hold) && typeof hold === "object"
|
|
748
|
-
&&
|
|
799
|
+
&& ["agent", "migration", "resident"].includes(hold.authority)
|
|
749
800
|
&& typeof hold.releaseId === "string");
|
|
750
801
|
}
|
|
751
802
|
catch {
|