@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,39 +0,0 @@
|
|
|
1
|
-
import { type TerminalHostCommand } from "./ensure-terminal-host.js";
|
|
2
|
-
export type MaintenanceAction = "list" | "stop" | "stop-all" | "host-status" | "host-stop" | "runtime-control";
|
|
3
|
-
export type MaintenanceHostState = "none" | "running" | "stopped" | "unresponsive" | "incompatible" | "refused" | "unverifiable" | "unavailable";
|
|
4
|
-
/** The versioned `a1 tabs` report: `a1-tabs-maintenance-v1`, as printed by the terminal host. */
|
|
5
|
-
export interface MaintenanceReport {
|
|
6
|
-
readonly schema: "a1-tabs-maintenance-v1";
|
|
7
|
-
readonly command: string;
|
|
8
|
-
readonly host: MaintenanceHostState;
|
|
9
|
-
readonly stateDir?: string;
|
|
10
|
-
readonly result?: Record<string, unknown>;
|
|
11
|
-
readonly pid?: number;
|
|
12
|
-
readonly message?: string;
|
|
13
|
-
readonly releaseRoot?: string | null;
|
|
14
|
-
readonly terminatedUnresponsive?: number;
|
|
15
|
-
/** The terminal host's exit status: 0 success, 3 refused or failed, 4 another generation. */
|
|
16
|
-
readonly exitCode: number;
|
|
17
|
-
}
|
|
18
|
-
export interface MaintenanceOptions {
|
|
19
|
-
readonly action: MaintenanceAction;
|
|
20
|
-
readonly tabId?: string;
|
|
21
|
-
readonly profileRoot: string;
|
|
22
|
-
readonly dataDir: string;
|
|
23
|
-
readonly runtimeDir: string;
|
|
24
|
-
/** The first root is the invoking release; other roots never substitute for it. */
|
|
25
|
-
readonly releaseRoots: readonly string[];
|
|
26
|
-
readonly environment: NodeJS.ProcessEnv;
|
|
27
|
-
readonly platform?: NodeJS.Platform;
|
|
28
|
-
readonly architecture?: string;
|
|
29
|
-
readonly timeoutMs?: number;
|
|
30
|
-
readonly verify?: (addon: string, platform: NodeJS.Platform, architecture: string) => Promise<unknown>;
|
|
31
|
-
readonly run?: (command: TerminalHostCommand, arguments_: readonly string[], timeoutMs: number) => Promise<{
|
|
32
|
-
readonly code: number;
|
|
33
|
-
readonly stdout: string;
|
|
34
|
-
}>;
|
|
35
|
-
}
|
|
36
|
-
/** Runs maintenance only through the invoking release; another cohort is never a retry target. */
|
|
37
|
-
export declare function runTerminalHostMaintenance(options: MaintenanceOptions): Promise<MaintenanceReport>;
|
|
38
|
-
/** The largest maintenance report accepted from the terminal host. */
|
|
39
|
-
export declare const MAX_MAINTENANCE_REPORT_BYTES: number;
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
import { constants } from "node:fs";
|
|
2
|
-
import { access } from "node:fs/promises";
|
|
3
|
-
import { PRODUCT_IDENTITY } from "../../product-identity.js";
|
|
4
|
-
import { runBoundedHostCommand } from "./bounded-host-command.js";
|
|
5
|
-
import { resolveTerminalHostEntryPath, resolveTerminalHostPath } from "./ensure-terminal-host.js";
|
|
6
|
-
import { verifyTerminalHostArtifact } from "./terminal-host-artifact.js";
|
|
7
|
-
/** Runs maintenance only through the invoking release; another cohort is never a retry target. */
|
|
8
|
-
export async function runTerminalHostMaintenance(options) {
|
|
9
|
-
const platform = options.platform ?? process.platform;
|
|
10
|
-
const architecture = options.architecture ?? process.arch;
|
|
11
|
-
const command = await firstVerifiedHost(options, options.releaseRoots.slice(0, 1), platform, architecture);
|
|
12
|
-
if (command === undefined)
|
|
13
|
-
return unavailable(options.action, "the invoking release has no verified terminal host");
|
|
14
|
-
return await invoke(options, command);
|
|
15
|
-
}
|
|
16
|
-
function arguments_(options) {
|
|
17
|
-
const command = options.action === "stop" ? ["stop", options.tabId ?? ""] : [options.action];
|
|
18
|
-
return ["tabs", ...command, "--profile", options.profileRoot, "--data-dir", options.dataDir, "--runtime-dir", options.runtimeDir];
|
|
19
|
-
}
|
|
20
|
-
async function invoke(options, command) {
|
|
21
|
-
const timeoutMs = options.timeoutMs ?? 120_000;
|
|
22
|
-
try {
|
|
23
|
-
const run = options.run ?? ((host, argumentsValue, limit) => runHost(host, argumentsValue, limit, options.environment));
|
|
24
|
-
const result = await run(command, arguments_(options), timeoutMs);
|
|
25
|
-
const line = result.stdout.trim().split(/\r?\n/u).at(-1) ?? "";
|
|
26
|
-
const parsed = JSON.parse(line);
|
|
27
|
-
if (parsed.schema !== "a1-tabs-maintenance-v1" || typeof parsed.host !== "string")
|
|
28
|
-
throw new Error("malformed maintenance report");
|
|
29
|
-
return { ...parsed, exitCode: result.code };
|
|
30
|
-
}
|
|
31
|
-
catch (error) {
|
|
32
|
-
return unavailable(options.action, `terminal host maintenance failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
async function firstVerifiedHost(options, roots, platform, architecture) {
|
|
36
|
-
const override = options.environment[PRODUCT_IDENTITY.environment.developmentInstanceId]
|
|
37
|
-
? options.environment[PRODUCT_IDENTITY.environment.terminalHostPath]?.trim()
|
|
38
|
-
: undefined;
|
|
39
|
-
if (override) {
|
|
40
|
-
const entry = roots[0] === undefined ? undefined : resolveTerminalHostEntryPath(roots[0]);
|
|
41
|
-
if (entry === undefined)
|
|
42
|
-
return undefined;
|
|
43
|
-
try {
|
|
44
|
-
await Promise.all([access(override, constants.R_OK), access(entry, constants.R_OK)]);
|
|
45
|
-
return { executable: process.execPath, entry };
|
|
46
|
-
}
|
|
47
|
-
catch {
|
|
48
|
-
return undefined;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
for (const root of roots) {
|
|
52
|
-
const addon = resolveTerminalHostPath(root, {}, platform, architecture);
|
|
53
|
-
try {
|
|
54
|
-
await (options.verify ?? verifyTerminalHostArtifact)(addon, platform, architecture);
|
|
55
|
-
return { executable: process.execPath, entry: resolveTerminalHostEntryPath(root) };
|
|
56
|
-
}
|
|
57
|
-
catch {
|
|
58
|
-
// Invariant: a missing or altered invoking artifact fails closed.
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
return undefined;
|
|
62
|
-
}
|
|
63
|
-
function unavailable(action, message) {
|
|
64
|
-
return { schema: "a1-tabs-maintenance-v1", command: action, host: "unavailable", message, exitCode: 3 };
|
|
65
|
-
}
|
|
66
|
-
/** The largest maintenance report accepted from the terminal host. */
|
|
67
|
-
export const MAX_MAINTENANCE_REPORT_BYTES = 4 * 1024 * 1024;
|
|
68
|
-
async function runHost(command, arguments_, timeoutMs, environment) {
|
|
69
|
-
return await runBoundedHostCommand(command, arguments_, {
|
|
70
|
-
environment,
|
|
71
|
-
maxStdoutBytes: MAX_MAINTENANCE_REPORT_BYTES,
|
|
72
|
-
timeoutMs,
|
|
73
|
-
label: "terminal host maintenance",
|
|
74
|
-
});
|
|
75
|
-
}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
/** Payload-free fixture schema; type-only imports keep it outside the evaluated startup graph. */
|
|
2
|
-
export type ResidentInputPhase = "receipt" | "semantic-start" | "semantic-end" | "composition-start" | "composition-end" | "write-start" | "write-end";
|
|
3
|
-
export interface ProgressFields {
|
|
4
|
-
readonly eventSequence?: number;
|
|
5
|
-
readonly revision?: number;
|
|
6
|
-
readonly geometryGeneration?: number;
|
|
7
|
-
readonly bytes?: number;
|
|
8
|
-
readonly count?: number;
|
|
9
|
-
readonly eventKind?: string;
|
|
10
|
-
readonly frameId?: number;
|
|
11
|
-
readonly renderCause?: string;
|
|
12
|
-
readonly fragmentCount?: number;
|
|
13
|
-
readonly transactionKind?: "synchronized-output" | "ordinary";
|
|
14
|
-
}
|
|
15
|
-
export interface ProgressRecord extends ProgressFields {
|
|
16
|
-
readonly schema: "a1-resident-progress-observation-v1";
|
|
17
|
-
readonly runId: string;
|
|
18
|
-
readonly role: "child";
|
|
19
|
-
readonly stage: "engine-delivery" | "child-render-write" | "child-input-phase";
|
|
20
|
-
readonly pid: number;
|
|
21
|
-
readonly processInstance: string;
|
|
22
|
-
readonly timestampUnixUs: number;
|
|
23
|
-
readonly clockErrorUs: number;
|
|
24
|
-
readonly sequence: number;
|
|
25
|
-
readonly tabId: string;
|
|
26
|
-
readonly incarnation: number;
|
|
27
|
-
readonly lostBefore: number;
|
|
28
|
-
}
|
|
29
|
-
export interface ResidentProgressObserverPort {
|
|
30
|
-
readonly tabId: string;
|
|
31
|
-
engineDelivery(event: unknown): void;
|
|
32
|
-
inputPhase?(phase: ResidentInputPhase, revision: number): void;
|
|
33
|
-
childRenderWrite(bytes: number, fragments: number, transaction: "synchronized-output" | "ordinary", frameId?: number, renderCause?: string): void;
|
|
34
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import type { ResidentProgressObserverPort } from "./progress-observation-schema.js";
|
|
2
|
-
export type { ResidentProgressObserverPort } from "./progress-observation-schema.js";
|
|
3
|
-
/** Opt-in payload-free child observer; ordinary launches return null. */
|
|
4
|
-
export declare function residentProgressObserver(environment?: NodeJS.ProcessEnv): ResidentProgressObserverPort | null;
|
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
import { randomUUID } from "node:crypto";
|
|
2
|
-
import { appendFile, mkdir } from "node:fs/promises";
|
|
3
|
-
import { join } from "node:path";
|
|
4
|
-
import { performance } from "node:perf_hooks";
|
|
5
|
-
import { PRODUCT_IDENTITY } from "../../product-identity.js";
|
|
6
|
-
const OBSERVATION_DIRECTORY_ENV = PRODUCT_IDENTITY.environment.residentProgressObservationDir;
|
|
7
|
-
const OBSERVATION_RUN_ENV = PRODUCT_IDENTITY.environment.residentProgressRunId;
|
|
8
|
-
const MAX_PENDING_BYTES = 256 * 1024;
|
|
9
|
-
class ResidentProgressObserver {
|
|
10
|
-
#directory;
|
|
11
|
-
#runId;
|
|
12
|
-
#tabId;
|
|
13
|
-
#incarnation;
|
|
14
|
-
#processInstance;
|
|
15
|
-
#path;
|
|
16
|
-
#sequence = 0;
|
|
17
|
-
#engineSequence = 0;
|
|
18
|
-
#pendingBytes = 0;
|
|
19
|
-
#lost = 0;
|
|
20
|
-
#writing = false;
|
|
21
|
-
#pending = [];
|
|
22
|
-
#scheduled = false;
|
|
23
|
-
#directoryReady = false;
|
|
24
|
-
#failed = false;
|
|
25
|
-
get tabId() { return this.#tabId; }
|
|
26
|
-
constructor(directory, runId, tabId, incarnation) {
|
|
27
|
-
this.#directory = directory;
|
|
28
|
-
this.#runId = runId;
|
|
29
|
-
this.#tabId = tabId;
|
|
30
|
-
this.#incarnation = incarnation;
|
|
31
|
-
this.#processInstance = `${process.pid}-${randomUUID()}`;
|
|
32
|
-
this.#path = join(directory, `child-${this.#processInstance}.jsonl`);
|
|
33
|
-
}
|
|
34
|
-
engineDelivery(event) {
|
|
35
|
-
this.#engineSequence += 1;
|
|
36
|
-
this.#observe("engine-delivery", {
|
|
37
|
-
eventSequence: this.#engineSequence,
|
|
38
|
-
eventKind: eventKind(event),
|
|
39
|
-
count: 1,
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
inputPhase(phase, revision) {
|
|
43
|
-
this.#observe("child-input-phase", { eventKind: phase, revision, count: 1 });
|
|
44
|
-
}
|
|
45
|
-
childRenderWrite(bytes, fragments, transaction, frameId, renderCause) {
|
|
46
|
-
this.#observe("child-render-write", {
|
|
47
|
-
eventSequence: this.#engineSequence,
|
|
48
|
-
bytes,
|
|
49
|
-
count: 1,
|
|
50
|
-
fragmentCount: fragments,
|
|
51
|
-
transactionKind: transaction,
|
|
52
|
-
...(frameId === undefined ? {} : { frameId }),
|
|
53
|
-
...(renderCause === undefined ? {} : { renderCause }),
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
#observe(stage, fields) {
|
|
57
|
-
if (this.#failed)
|
|
58
|
-
return;
|
|
59
|
-
const lostBefore = this.#lost;
|
|
60
|
-
const record = {
|
|
61
|
-
schema: "a1-resident-progress-observation-v1",
|
|
62
|
-
runId: this.#runId,
|
|
63
|
-
role: "child",
|
|
64
|
-
stage,
|
|
65
|
-
pid: process.pid,
|
|
66
|
-
processInstance: this.#processInstance,
|
|
67
|
-
timestampUnixUs: Math.round((performance.timeOrigin + performance.now()) * 1_000),
|
|
68
|
-
// Rationale: epoch-calibrated timeOrigin retains conservative cross-process clock error.
|
|
69
|
-
clockErrorUs: 1_000,
|
|
70
|
-
sequence: ++this.#sequence,
|
|
71
|
-
tabId: this.#tabId,
|
|
72
|
-
incarnation: this.#incarnation,
|
|
73
|
-
lostBefore,
|
|
74
|
-
...fields,
|
|
75
|
-
};
|
|
76
|
-
const line = `${JSON.stringify(record)}\n`;
|
|
77
|
-
const length = Buffer.byteLength(line);
|
|
78
|
-
if (this.#pendingBytes + length > MAX_PENDING_BYTES) {
|
|
79
|
-
this.#lost = lostBefore + 1;
|
|
80
|
-
return;
|
|
81
|
-
}
|
|
82
|
-
this.#lost = 0;
|
|
83
|
-
this.#pendingBytes += length;
|
|
84
|
-
this.#pending.push(line);
|
|
85
|
-
this.#schedule();
|
|
86
|
-
}
|
|
87
|
-
#schedule() {
|
|
88
|
-
if (this.#scheduled || this.#writing || this.#failed)
|
|
89
|
-
return;
|
|
90
|
-
this.#scheduled = true;
|
|
91
|
-
// Performance: check-phase batches yield to input and amortize file opens and promises.
|
|
92
|
-
setImmediate(() => { this.#scheduled = false; void this.#flush(); });
|
|
93
|
-
}
|
|
94
|
-
async #flush() {
|
|
95
|
-
if (this.#failed || this.#pending.length === 0)
|
|
96
|
-
return;
|
|
97
|
-
this.#writing = true;
|
|
98
|
-
const batch = this.#pending.join("");
|
|
99
|
-
this.#pending = [];
|
|
100
|
-
// Rationale: cap pending only.
|
|
101
|
-
this.#pendingBytes = 0;
|
|
102
|
-
try {
|
|
103
|
-
if (!this.#directoryReady) {
|
|
104
|
-
await mkdir(this.#directory, { recursive: true });
|
|
105
|
-
this.#directoryReady = true;
|
|
106
|
-
}
|
|
107
|
-
await appendFile(this.#path, batch, "utf8");
|
|
108
|
-
}
|
|
109
|
-
catch {
|
|
110
|
-
this.#failed = true;
|
|
111
|
-
this.#pending = [];
|
|
112
|
-
}
|
|
113
|
-
finally {
|
|
114
|
-
this.#writing = false;
|
|
115
|
-
if (this.#pending.length > 0)
|
|
116
|
-
this.#schedule();
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
let observer;
|
|
121
|
-
/** Opt-in payload-free child observer; ordinary launches return null. */
|
|
122
|
-
export function residentProgressObserver(environment = process.env) {
|
|
123
|
-
if (environment === process.env && observer !== undefined)
|
|
124
|
-
return observer;
|
|
125
|
-
const directory = environment[OBSERVATION_DIRECTORY_ENV];
|
|
126
|
-
const runId = environment[OBSERVATION_RUN_ENV];
|
|
127
|
-
const tabId = environment[PRODUCT_IDENTITY.environment.residentProgressTabId];
|
|
128
|
-
const incarnation = Number(environment[PRODUCT_IDENTITY.environment.residentProgressTabIncarnation]);
|
|
129
|
-
const value = directory && runId && runId.length <= 128 && tabId && Number.isSafeInteger(incarnation) && incarnation >= 0
|
|
130
|
-
? new ResidentProgressObserver(directory, runId, tabId, incarnation)
|
|
131
|
-
: null;
|
|
132
|
-
if (environment === process.env) {
|
|
133
|
-
observer = value;
|
|
134
|
-
// Security: keep evidence paths and identity private; erase them before extensions/tools inherit env.
|
|
135
|
-
for (const name of [
|
|
136
|
-
OBSERVATION_DIRECTORY_ENV,
|
|
137
|
-
OBSERVATION_RUN_ENV,
|
|
138
|
-
PRODUCT_IDENTITY.environment.residentProgressTabId,
|
|
139
|
-
PRODUCT_IDENTITY.environment.residentProgressTabIncarnation,
|
|
140
|
-
])
|
|
141
|
-
delete process.env[name];
|
|
142
|
-
}
|
|
143
|
-
return value;
|
|
144
|
-
}
|
|
145
|
-
function eventKind(event) {
|
|
146
|
-
if (typeof event !== "object" || event === null)
|
|
147
|
-
return "unknown";
|
|
148
|
-
const value = event.type;
|
|
149
|
-
return typeof value === "string" && /^[a-z][a-z0-9_-]{0,63}$/iu.test(value) ? value : "unknown";
|
|
150
|
-
}
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import { ResidentTabFaultInjection } from "./fault-injection.js";
|
|
2
|
-
export interface SubmittedPromptRecord {
|
|
3
|
-
readonly type: "submitted";
|
|
4
|
-
readonly id: string;
|
|
5
|
-
readonly sessionId: string;
|
|
6
|
-
readonly sessionFile: string | null;
|
|
7
|
-
readonly incarnation: number;
|
|
8
|
-
readonly fileExisted: boolean;
|
|
9
|
-
readonly kind: "prompt" | "steer" | "follow-up";
|
|
10
|
-
readonly text: string;
|
|
11
|
-
readonly at: string;
|
|
12
|
-
}
|
|
13
|
-
export interface CorrelatedPromptRecord {
|
|
14
|
-
readonly type: "correlated";
|
|
15
|
-
readonly id: string;
|
|
16
|
-
readonly entryId: string;
|
|
17
|
-
}
|
|
18
|
-
export interface SettledPromptRecord {
|
|
19
|
-
readonly type: "settled";
|
|
20
|
-
readonly id: string;
|
|
21
|
-
readonly entryId: string;
|
|
22
|
-
}
|
|
23
|
-
export interface RetiredPromptRecord {
|
|
24
|
-
readonly type: "retired";
|
|
25
|
-
readonly id: string;
|
|
26
|
-
}
|
|
27
|
-
export type PromptJournalRecord = SubmittedPromptRecord | CorrelatedPromptRecord | SettledPromptRecord | RetiredPromptRecord;
|
|
28
|
-
export interface PromptSubmission {
|
|
29
|
-
readonly sessionId: string;
|
|
30
|
-
readonly sessionFile: string | null;
|
|
31
|
-
readonly incarnation: number;
|
|
32
|
-
readonly fileExisted: boolean;
|
|
33
|
-
readonly kind: SubmittedPromptRecord["kind"];
|
|
34
|
-
readonly text: string;
|
|
35
|
-
}
|
|
36
|
-
export interface SessionJournalEntry {
|
|
37
|
-
readonly entryId: string;
|
|
38
|
-
readonly text: string;
|
|
39
|
-
readonly settled: boolean;
|
|
40
|
-
}
|
|
41
|
-
export interface PendingPrompt {
|
|
42
|
-
readonly submitted: SubmittedPromptRecord;
|
|
43
|
-
readonly correlatedEntryId?: string;
|
|
44
|
-
}
|
|
45
|
-
export declare class PromptJournal {
|
|
46
|
-
#private;
|
|
47
|
-
readonly path: string;
|
|
48
|
-
constructor(path: string, options?: {
|
|
49
|
-
readonly faults?: ResidentTabFaultInjection;
|
|
50
|
-
readonly maximumBytes?: number;
|
|
51
|
-
});
|
|
52
|
-
initialize(): Promise<void>;
|
|
53
|
-
submit(submission: PromptSubmission): Promise<SubmittedPromptRecord>;
|
|
54
|
-
adopt(record: SubmittedPromptRecord): Promise<boolean>;
|
|
55
|
-
correlate(id: string, entryId: string): Promise<void>;
|
|
56
|
-
settle(id: string, entryId: string): Promise<void>;
|
|
57
|
-
retire(id: string): Promise<void>;
|
|
58
|
-
read(): Promise<readonly PromptJournalRecord[]>;
|
|
59
|
-
pending(sessionEntries?: readonly SessionJournalEntry[]): Promise<readonly PendingPrompt[]>;
|
|
60
|
-
compactIfRetired(): Promise<boolean>;
|
|
61
|
-
}
|
|
62
|
-
export declare function classifyMissingSession(record: SubmittedPromptRecord, sessionExists: boolean): "available" | "first-turn" | "missing-transcript";
|
|
63
|
-
export declare function removeJournalTemporary(path: string): Promise<void>;
|
|
@@ -1,213 +0,0 @@
|
|
|
1
|
-
import { randomUUID } from "node:crypto";
|
|
2
|
-
import { chmod, mkdir, open, readFile, rename, stat, unlink } from "node:fs/promises";
|
|
3
|
-
import { dirname } from "node:path";
|
|
4
|
-
import { ResidentTabFaultInjection } from "./fault-injection.js";
|
|
5
|
-
const MAX_JOURNAL_BYTES = 8 * 1024 * 1024;
|
|
6
|
-
const MAX_RECORD_BYTES = 2 * 1024 * 1024;
|
|
7
|
-
export class PromptJournal {
|
|
8
|
-
path;
|
|
9
|
-
#faults;
|
|
10
|
-
#maximumBytes;
|
|
11
|
-
#operation = Promise.resolve();
|
|
12
|
-
#retired = new Set();
|
|
13
|
-
constructor(path, options = {}) {
|
|
14
|
-
this.path = path;
|
|
15
|
-
this.#faults = options.faults ?? new ResidentTabFaultInjection();
|
|
16
|
-
this.#maximumBytes = options.maximumBytes ?? MAX_JOURNAL_BYTES;
|
|
17
|
-
}
|
|
18
|
-
async initialize() {
|
|
19
|
-
await secureDirectory(dirname(this.path));
|
|
20
|
-
const handle = await open(this.path, "a", 0o600);
|
|
21
|
-
await handle.close();
|
|
22
|
-
if (process.platform !== "win32")
|
|
23
|
-
await chmod(this.path, 0o600);
|
|
24
|
-
for (const record of await this.read())
|
|
25
|
-
if (record.type === "retired")
|
|
26
|
-
this.#retired.add(record.id);
|
|
27
|
-
}
|
|
28
|
-
async submit(submission) {
|
|
29
|
-
const record = {
|
|
30
|
-
type: "submitted",
|
|
31
|
-
id: randomUUID(),
|
|
32
|
-
...submission,
|
|
33
|
-
at: new Date().toISOString(),
|
|
34
|
-
};
|
|
35
|
-
await this.#append(record, "journal-before-append", "journal-after-append", "journal-after-sync");
|
|
36
|
-
return record;
|
|
37
|
-
}
|
|
38
|
-
async adopt(record) {
|
|
39
|
-
if ((await this.read()).some(existing => existing.type === "submitted" && existing.id === record.id))
|
|
40
|
-
return false;
|
|
41
|
-
await this.#append(record, "journal-before-append", "journal-after-append", "journal-after-sync");
|
|
42
|
-
return true;
|
|
43
|
-
}
|
|
44
|
-
async correlate(id, entryId) {
|
|
45
|
-
await this.#append({ type: "correlated", id, entryId }, "journal-before-correlation", "journal-after-correlation");
|
|
46
|
-
}
|
|
47
|
-
async settle(id, entryId) {
|
|
48
|
-
await this.#append({ type: "settled", id, entryId }, "journal-before-settled-record", "journal-after-settled-record");
|
|
49
|
-
}
|
|
50
|
-
async retire(id) {
|
|
51
|
-
if (this.#retired.has(id))
|
|
52
|
-
return;
|
|
53
|
-
await this.#append({ type: "retired", id }, "journal-during-retirement");
|
|
54
|
-
this.#retired.add(id);
|
|
55
|
-
}
|
|
56
|
-
async read() {
|
|
57
|
-
let text;
|
|
58
|
-
try {
|
|
59
|
-
text = await readFile(this.path, "utf8");
|
|
60
|
-
}
|
|
61
|
-
catch (error) {
|
|
62
|
-
if (error.code === "ENOENT")
|
|
63
|
-
return [];
|
|
64
|
-
throw error;
|
|
65
|
-
}
|
|
66
|
-
const records = [];
|
|
67
|
-
const lines = text.split("\n");
|
|
68
|
-
for (let index = 0; index < lines.length; index += 1) {
|
|
69
|
-
const line = lines[index];
|
|
70
|
-
if (!line)
|
|
71
|
-
continue;
|
|
72
|
-
try {
|
|
73
|
-
const value = JSON.parse(line);
|
|
74
|
-
records.push(decodeRecord(value));
|
|
75
|
-
}
|
|
76
|
-
catch (error) {
|
|
77
|
-
if (index === lines.length - 1 && !text.endsWith("\n"))
|
|
78
|
-
break;
|
|
79
|
-
throw error;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
return records;
|
|
83
|
-
}
|
|
84
|
-
async pending(sessionEntries = []) {
|
|
85
|
-
const states = new Map();
|
|
86
|
-
const settled = new Set();
|
|
87
|
-
const retired = new Set();
|
|
88
|
-
for (const record of await this.read()) {
|
|
89
|
-
if (record.type === "submitted")
|
|
90
|
-
states.set(record.id, { submitted: record });
|
|
91
|
-
else if (record.type === "correlated") {
|
|
92
|
-
const state = states.get(record.id);
|
|
93
|
-
if (state !== undefined)
|
|
94
|
-
states.set(record.id, { ...state, correlatedEntryId: record.entryId });
|
|
95
|
-
}
|
|
96
|
-
else if (record.type === "settled")
|
|
97
|
-
settled.add(record.id);
|
|
98
|
-
else
|
|
99
|
-
retired.add(record.id);
|
|
100
|
-
}
|
|
101
|
-
const byId = new Map(sessionEntries.map(entry => [entry.entryId, entry]));
|
|
102
|
-
const pending = [];
|
|
103
|
-
const claimedEntries = new Set();
|
|
104
|
-
for (const [id, state] of states) {
|
|
105
|
-
if (retired.has(id) || settled.has(id)) {
|
|
106
|
-
await this.retire(id);
|
|
107
|
-
continue;
|
|
108
|
-
}
|
|
109
|
-
const correlated = state.correlatedEntryId === undefined ? undefined : byId.get(state.correlatedEntryId);
|
|
110
|
-
const textMatch = correlated ?? sessionEntries.find(entry => entry.text === state.submitted.text && !claimedEntries.has(entry.entryId));
|
|
111
|
-
if (textMatch !== undefined)
|
|
112
|
-
claimedEntries.add(textMatch.entryId);
|
|
113
|
-
if (textMatch?.settled === true)
|
|
114
|
-
await this.retire(id);
|
|
115
|
-
else
|
|
116
|
-
pending.push(state);
|
|
117
|
-
}
|
|
118
|
-
return pending;
|
|
119
|
-
}
|
|
120
|
-
async compactIfRetired() {
|
|
121
|
-
if ((await this.pending()).length !== 0)
|
|
122
|
-
return false;
|
|
123
|
-
await this.#serialize(async () => {
|
|
124
|
-
this.#faults.at("journal-during-compaction");
|
|
125
|
-
const temporary = `${this.path}.tmp-${process.pid}-${randomUUID()}`;
|
|
126
|
-
const handle = await open(temporary, "wx", 0o600);
|
|
127
|
-
try {
|
|
128
|
-
await handle.sync();
|
|
129
|
-
}
|
|
130
|
-
finally {
|
|
131
|
-
await handle.close();
|
|
132
|
-
}
|
|
133
|
-
await rename(temporary, this.path);
|
|
134
|
-
await syncDirectory(dirname(this.path));
|
|
135
|
-
});
|
|
136
|
-
return true;
|
|
137
|
-
}
|
|
138
|
-
async #append(record, ...points) {
|
|
139
|
-
const line = `${JSON.stringify(record)}\n`;
|
|
140
|
-
const bytes = Buffer.byteLength(line);
|
|
141
|
-
if (bytes > MAX_RECORD_BYTES)
|
|
142
|
-
throw new Error("resident prompt journal record exceeds its size limit");
|
|
143
|
-
await this.#serialize(async () => {
|
|
144
|
-
for (const point of points.slice(0, 1))
|
|
145
|
-
this.#faults.at(point);
|
|
146
|
-
const current = await stat(this.path).then(value => value.size, error => error.code === "ENOENT" ? 0 : Promise.reject(error));
|
|
147
|
-
if (current + bytes > this.#maximumBytes)
|
|
148
|
-
throw new Error("resident prompt journal is full");
|
|
149
|
-
const handle = await open(this.path, "a", 0o600);
|
|
150
|
-
try {
|
|
151
|
-
await handle.write(line, undefined, "utf8");
|
|
152
|
-
if (points[1] !== undefined)
|
|
153
|
-
this.#faults.at(points[1]);
|
|
154
|
-
await handle.sync();
|
|
155
|
-
if (points[2] !== undefined)
|
|
156
|
-
this.#faults.at(points[2]);
|
|
157
|
-
}
|
|
158
|
-
finally {
|
|
159
|
-
await handle.close();
|
|
160
|
-
}
|
|
161
|
-
});
|
|
162
|
-
}
|
|
163
|
-
async #serialize(operation) {
|
|
164
|
-
const next = this.#operation.then(operation, operation);
|
|
165
|
-
this.#operation = next.catch(() => undefined);
|
|
166
|
-
await next;
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
export function classifyMissingSession(record, sessionExists) {
|
|
170
|
-
if (sessionExists)
|
|
171
|
-
return "available";
|
|
172
|
-
return record.fileExisted ? "missing-transcript" : "first-turn";
|
|
173
|
-
}
|
|
174
|
-
function decodeRecord(value) {
|
|
175
|
-
if (typeof value !== "object" || value === null)
|
|
176
|
-
throw new Error("invalid resident prompt journal record");
|
|
177
|
-
const record = value;
|
|
178
|
-
if (typeof record.id !== "string" || record.id.length === 0)
|
|
179
|
-
throw new Error("invalid resident prompt journal id");
|
|
180
|
-
if (record.type === "submitted") {
|
|
181
|
-
if (typeof record.sessionId !== "string" || !(typeof record.sessionFile === "string" || record.sessionFile === null)
|
|
182
|
-
|| typeof record.incarnation !== "number" || typeof record.fileExisted !== "boolean"
|
|
183
|
-
|| !["prompt", "steer", "follow-up"].includes(String(record.kind)) || typeof record.text !== "string" || typeof record.at !== "string") {
|
|
184
|
-
throw new Error("invalid submitted prompt journal record");
|
|
185
|
-
}
|
|
186
|
-
return record;
|
|
187
|
-
}
|
|
188
|
-
if ((record.type === "correlated" || record.type === "settled") && typeof record.entryId === "string")
|
|
189
|
-
return record;
|
|
190
|
-
if (record.type === "retired")
|
|
191
|
-
return record;
|
|
192
|
-
throw new Error("invalid resident prompt journal record type");
|
|
193
|
-
}
|
|
194
|
-
async function secureDirectory(path) {
|
|
195
|
-
await mkdir(path, { recursive: true, mode: 0o700 });
|
|
196
|
-
if (process.platform !== "win32")
|
|
197
|
-
await chmod(path, 0o700);
|
|
198
|
-
}
|
|
199
|
-
async function syncDirectory(path) {
|
|
200
|
-
if (process.platform === "win32")
|
|
201
|
-
return;
|
|
202
|
-
const handle = await open(path, "r");
|
|
203
|
-
try {
|
|
204
|
-
await handle.sync();
|
|
205
|
-
}
|
|
206
|
-
finally {
|
|
207
|
-
await handle.close();
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
export async function removeJournalTemporary(path) {
|
|
211
|
-
await unlink(path).catch(error => { if (error.code !== "ENOENT")
|
|
212
|
-
throw error; });
|
|
213
|
-
}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
export interface ResidentEnvelope<T = Readonly<Record<string, unknown>>> {
|
|
2
|
-
readonly type: string;
|
|
3
|
-
readonly requestId?: number;
|
|
4
|
-
readonly body: T;
|
|
5
|
-
}
|
|
6
|
-
/** Generation-1 MessagePack named-map codec. It intentionally supports only bridge-safe values. */
|
|
7
|
-
export declare function encodeResidentFrame(value: ResidentEnvelope): Buffer;
|
|
8
|
-
export declare function decodeResidentPayload(payload: Uint8Array): ResidentEnvelope;
|
|
9
|
-
export declare class ResidentFrameDecoder {
|
|
10
|
-
#private;
|
|
11
|
-
push(chunk: Uint8Array): readonly ResidentEnvelope[];
|
|
12
|
-
}
|