@timurproko/a1 0.2.6 → 0.2.7-dev.1222
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 +197 -908
- package/dist/app/session-shell/session-shell.d.ts +3 -8
- package/dist/app/session-shell/session-shell.js +327 -835
- package/dist/app/session-shell/session-viewport-controller.d.ts +2 -1
- package/dist/app/session-shell/session-viewport-controller.js +41 -38
- 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 +105 -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 +207 -153
- package/dist/composition/reference-selection-options.d.ts +3 -0
- package/dist/composition/reference-selection-options.js +16 -0
- 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 -2
- package/dist/composition/settings-route-host.js +42 -17
- package/dist/composition/settings-search-input.d.ts +9 -0
- package/dist/composition/settings-search-input.js +61 -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 +244 -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 +84 -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-document-selection.d.ts +30 -0
- package/dist/features/owned-ui/reference-document-selection.js +179 -0
- package/dist/features/owned-ui/reference-screen-app.d.ts +6 -1
- package/dist/features/owned-ui/reference-screen-app.js +51 -10
- package/dist/features/owned-ui/settings-app.d.ts +13 -2
- package/dist/features/owned-ui/settings-app.js +136 -97
- 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 +138 -11
- 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 +74 -5
- 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.d.ts +17 -8
- package/dist/ui/components/dialog-panel.js +117 -41
- package/dist/ui/components/index.d.ts +5 -5
- package/dist/ui/components/index.js +4 -4
- 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/scrollbar.d.ts +1 -1
- package/dist/ui/components/scrollbar.js +1 -1
- package/dist/ui/components/selection-copy.d.ts +3 -3
- package/dist/ui/components/selection-copy.js +16 -1
- 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-selection.d.ts +1 -2
- package/dist/ui/components/text-selection.js +5 -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 +179 -58
- 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 +649 -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
|
@@ -15,22 +15,8 @@ export function createPiExtensionUiBridge(host) {
|
|
|
15
15
|
const keybindings = KeybindingsManager.create(host.agentDir);
|
|
16
16
|
const disposers = new Set();
|
|
17
17
|
let customEditorFactory;
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
const closeSurface = (surface) => {
|
|
21
|
-
if (surface !== undefined && activeSurface !== surface)
|
|
22
|
-
return;
|
|
23
|
-
activeSurface = undefined;
|
|
24
|
-
host.setInputSurface(null);
|
|
25
|
-
host.runtime.requestRender();
|
|
26
|
-
};
|
|
27
|
-
const mountSurface = (surface) => {
|
|
28
|
-
if (activeSurface !== undefined && activeSurface !== surface)
|
|
29
|
-
activeSurface.dispose?.();
|
|
30
|
-
activeSurface = surface;
|
|
31
|
-
host.setInputSurface(surface);
|
|
32
|
-
host.runtime.requestRender();
|
|
33
|
-
};
|
|
18
|
+
const dialogs = createExtensionDialogStack(host);
|
|
19
|
+
const overlayCancels = new Set();
|
|
34
20
|
const trackAbort = (signal, cancel) => {
|
|
35
21
|
if (signal === undefined)
|
|
36
22
|
return () => { };
|
|
@@ -54,26 +40,24 @@ export function createPiExtensionUiBridge(host) {
|
|
|
54
40
|
if (settled)
|
|
55
41
|
return;
|
|
56
42
|
settled = true;
|
|
57
|
-
if (activeCancel === cancel)
|
|
58
|
-
activeCancel = undefined;
|
|
59
43
|
untrack();
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
44
|
+
if (surface !== undefined) {
|
|
45
|
+
const retained = retainSurfaceOnSettle && dialogs.isOnly(surface);
|
|
46
|
+
// Rationale: like pinned Pi, a settled dialog is disposed so its countdown stops, unless it stays painted.
|
|
47
|
+
if (!retained)
|
|
48
|
+
surface.dispose?.();
|
|
49
|
+
dialogs.remove(surface, retained);
|
|
50
|
+
}
|
|
67
51
|
resolve(value);
|
|
68
52
|
};
|
|
69
53
|
const cancel = () => finish(undefined);
|
|
70
|
-
|
|
54
|
+
const created = create(finish, cancel);
|
|
55
|
+
surface = created;
|
|
71
56
|
untrack = trackAbort(options?.signal, cancel);
|
|
72
|
-
if (!settled)
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
}
|
|
57
|
+
if (!settled)
|
|
58
|
+
dialogs.push({ surface: created, blocked, cancel });
|
|
59
|
+
else
|
|
60
|
+
created.dispose?.();
|
|
77
61
|
});
|
|
78
62
|
const createFactoryComponent = (factory, ...arguments_) => {
|
|
79
63
|
if (typeof factory !== "function")
|
|
@@ -148,28 +132,26 @@ export function createPiExtensionUiBridge(host) {
|
|
|
148
132
|
let settled = false;
|
|
149
133
|
let surface;
|
|
150
134
|
let overlay;
|
|
151
|
-
const
|
|
152
|
-
if (settled)
|
|
153
|
-
return;
|
|
154
|
-
settled = true;
|
|
155
|
-
if (activeCancel === cancelCustom)
|
|
156
|
-
activeCancel = undefined;
|
|
157
|
-
overlay?.hide();
|
|
158
|
-
if (surface !== undefined)
|
|
159
|
-
closeSurface(surface);
|
|
160
|
-
resolve(value);
|
|
161
|
-
};
|
|
162
|
-
const cancelCustom = () => {
|
|
135
|
+
const close = (settle) => {
|
|
163
136
|
if (settled)
|
|
164
137
|
return;
|
|
165
138
|
settled = true;
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
overlay
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
139
|
+
overlayCancels.delete(cancelCustom);
|
|
140
|
+
// Invariant: remove this dialog or overlay, not the topmost one; another may have opened above it.
|
|
141
|
+
if (overlay !== undefined)
|
|
142
|
+
overlay.hide();
|
|
143
|
+
else if (surface !== undefined)
|
|
144
|
+
dialogs.remove(surface);
|
|
145
|
+
settle();
|
|
146
|
+
if (overlay === undefined) {
|
|
147
|
+
try {
|
|
148
|
+
surface?.dispose?.();
|
|
149
|
+
}
|
|
150
|
+
catch { /* Rationale: a settled dialog's dispose failure must not leak. */ }
|
|
151
|
+
}
|
|
172
152
|
};
|
|
153
|
+
const done = (value) => close(() => resolve(value));
|
|
154
|
+
const cancelCustom = () => close(() => Reflect.apply(resolve, undefined, []));
|
|
173
155
|
let created;
|
|
174
156
|
try {
|
|
175
157
|
created = Reflect.apply(factory, undefined, [tui, piTheme(), keybindings, done]);
|
|
@@ -187,19 +169,18 @@ export function createPiExtensionUiBridge(host) {
|
|
|
187
169
|
return;
|
|
188
170
|
}
|
|
189
171
|
surface = withPiDialogCancel(componentPort(component), cancelCustom);
|
|
190
|
-
activeCancel = cancelCustom;
|
|
191
172
|
if (options?.overlay) {
|
|
192
173
|
const overlayOptions = typeof options.overlayOptions === "function" ? options.overlayOptions() : options.overlayOptions;
|
|
174
|
+
overlayCancels.add(cancelCustom);
|
|
193
175
|
overlay = host.showOverlay(surface, overlayOptions);
|
|
194
176
|
options.onHandle?.(publicOverlayHandle(overlay));
|
|
195
177
|
}
|
|
196
178
|
else
|
|
197
|
-
|
|
179
|
+
dialogs.push({ surface, blocked: undefined, cancel: cancelCustom });
|
|
198
180
|
}).catch(error => {
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
closeSurface(surface);
|
|
181
|
+
overlayCancels.delete(cancelCustom);
|
|
182
|
+
if (surface !== undefined && overlay === undefined)
|
|
183
|
+
dialogs.remove(surface);
|
|
203
184
|
reject(error);
|
|
204
185
|
});
|
|
205
186
|
}),
|
|
@@ -251,11 +232,9 @@ export function createPiExtensionUiBridge(host) {
|
|
|
251
232
|
setToolsExpanded: expanded => host.setToolsExpanded(expanded),
|
|
252
233
|
};
|
|
253
234
|
const reset = () => {
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
activeSurface?.dispose?.();
|
|
258
|
-
activeSurface = undefined;
|
|
235
|
+
dialogs.cancelAll();
|
|
236
|
+
for (const cancel of [...overlayCancels])
|
|
237
|
+
cancel();
|
|
259
238
|
host.setInputSurface(null);
|
|
260
239
|
host.setProgramStatusBlocked(undefined);
|
|
261
240
|
};
|
|
@@ -276,6 +255,46 @@ export function createPiExtensionUiBridge(host) {
|
|
|
276
255
|
},
|
|
277
256
|
};
|
|
278
257
|
}
|
|
258
|
+
/**
|
|
259
|
+
* Pinned Pi's extension dialog stack over the shell's single input slot. The last entry is visible; closing it shows
|
|
260
|
+
* the previous one with its program status, and a covered dialog stays answerable, so no dialog promise is left pending.
|
|
261
|
+
*/
|
|
262
|
+
function createExtensionDialogStack(host) {
|
|
263
|
+
const dialogs = [];
|
|
264
|
+
const showTop = () => {
|
|
265
|
+
const top = dialogs.at(-1);
|
|
266
|
+
host.setInputSurface(top?.surface ?? null);
|
|
267
|
+
host.setProgramStatusBlocked(top?.blocked);
|
|
268
|
+
host.runtime.requestRender();
|
|
269
|
+
};
|
|
270
|
+
return {
|
|
271
|
+
push(dialog) {
|
|
272
|
+
dialogs.push(dialog);
|
|
273
|
+
showTop();
|
|
274
|
+
},
|
|
275
|
+
/** Only removing the visible dialog changes the slot; a retained last surface stays painted without its status. */
|
|
276
|
+
remove(surface, retainSurface = false) {
|
|
277
|
+
const index = dialogs.findIndex(dialog => dialog.surface === surface);
|
|
278
|
+
if (index === -1)
|
|
279
|
+
return;
|
|
280
|
+
dialogs.splice(index, 1);
|
|
281
|
+
if (index !== dialogs.length)
|
|
282
|
+
return;
|
|
283
|
+
if (!retainSurface || dialogs.length > 0)
|
|
284
|
+
return showTop();
|
|
285
|
+
host.setProgramStatusBlocked(undefined);
|
|
286
|
+
host.runtime.requestRender();
|
|
287
|
+
},
|
|
288
|
+
isOnly: (surface) => dialogs.length === 1 && dialogs[0].surface === surface,
|
|
289
|
+
/** Rationale: unlike pinned Pi, which drops stacked dialogs unresolved, A1 settles each as cancelled, top first. */
|
|
290
|
+
cancelAll() {
|
|
291
|
+
for (const dialog of [...dialogs].reverse())
|
|
292
|
+
dialog.cancel();
|
|
293
|
+
for (const dialog of dialogs.splice(0))
|
|
294
|
+
dialog.surface.dispose?.();
|
|
295
|
+
},
|
|
296
|
+
};
|
|
297
|
+
}
|
|
279
298
|
function extensionError(surface, error) {
|
|
280
299
|
return `Extension ${surface} failed: ${error instanceof Error ? error.message : String(error)}`;
|
|
281
300
|
}
|
|
@@ -4,5 +4,5 @@ import { type PiShellViewComponentPort, type PiShellStatusPort, type PiShellProg
|
|
|
4
4
|
export declare function createPiShellHeader(options?: PiShellHeaderOptions): PiShellHeaderPort;
|
|
5
5
|
export declare function createPiShellLoadedResources(resources: readonly PiShellResourceEntry[], initialExpanded?: boolean): PiShellLoadedResourcesPort;
|
|
6
6
|
export declare function createPiShellStatus(view: OwnedUiSessionViewModel, progressStatus: PiShellProgressStatusPresentation, runtime?: Pick<PiShellEditorOptions, "getColumns" | "getRows" | "requestRender">): PiShellStatusPort;
|
|
7
|
-
export declare function createPiShellFooter(view: OwnedUiSessionViewModel, cwd: string, profile?: "pi" | "a1", showLevel?: () => boolean): PiShellViewComponentPort;
|
|
7
|
+
export declare function createPiShellFooter(view: OwnedUiSessionViewModel, cwd: string, profile?: "pi" | "a1", showLevel?: () => boolean, showSessionName?: boolean): PiShellViewComponentPort;
|
|
8
8
|
export declare function createPiQueuedInputStatus(submissions: readonly string[], presentation?: "pinned" | "custom-viewport", getKeybindings?: () => KeybindingsConfig): PiShellQueuedInputPort;
|
|
@@ -7,7 +7,7 @@ import { KeybindingsManager } from "./upstream/adjacent/core/keybindings.js";
|
|
|
7
7
|
import { StatusIndicator, WorkingStatusIndicator } from "./upstream/components/status-indicator.js";
|
|
8
8
|
import { protectPiPromptChipPresentation } from "./prompt-chip-presentation.js";
|
|
9
9
|
import { PINNED_PI_LAYOUT, piTheme, } from "./theme.js";
|
|
10
|
-
import { createTuiFacade, ensureTheme, } from "./shell-shared-facade.js";
|
|
10
|
+
import { createTuiFacade, ensureTheme, piShellTruncateToWidth, piShellVisibleWidth, } from "./shell-shared-facade.js";
|
|
11
11
|
export function createPiShellHeader(options = {}) {
|
|
12
12
|
ensureTheme();
|
|
13
13
|
let expanded = options.expanded ?? false;
|
|
@@ -107,9 +107,9 @@ export function createPiShellStatus(view, progressStatus, runtime) {
|
|
|
107
107
|
component = statusComponent(view, statusUi, outputPad, liveStatusText, placement, progressPresentation, progressStatus);
|
|
108
108
|
};
|
|
109
109
|
return {
|
|
110
|
-
render: width => component?.render(width) ?? [],
|
|
110
|
+
render: width => appendInstalledUpdateStatus(component?.render(width) ?? [], width, view),
|
|
111
111
|
renderDock: width => placement === "dock" ? component?.render(width) ?? [] : [],
|
|
112
|
-
renderLive: width => placement === "live" ? component?.render(width) ?? [] : [],
|
|
112
|
+
renderLive: width => appendInstalledUpdateStatus(placement === "live" ? component?.render(width) ?? [] : [], width, view),
|
|
113
113
|
placement: () => placement,
|
|
114
114
|
invalidate: () => component?.invalidate(),
|
|
115
115
|
update(next) {
|
|
@@ -136,9 +136,9 @@ export function createPiShellStatus(view, progressStatus, runtime) {
|
|
|
136
136
|
},
|
|
137
137
|
};
|
|
138
138
|
}
|
|
139
|
-
export function createPiShellFooter(view, cwd, profile = "pi", showLevel = () => true) {
|
|
139
|
+
export function createPiShellFooter(view, cwd, profile = "pi", showLevel = () => true, showSessionName = true) {
|
|
140
140
|
ensureTheme();
|
|
141
|
-
const footer = new SessionFooter(() => view, cwd, profile, showLevel);
|
|
141
|
+
const footer = new SessionFooter(() => view, cwd, profile, showLevel, showSessionName);
|
|
142
142
|
return {
|
|
143
143
|
render: width => footer.render(width),
|
|
144
144
|
invalidate: () => footer.invalidate(),
|
|
@@ -228,6 +228,22 @@ function statusSignature(view, workingOverride, outputPad, placement, progressPr
|
|
|
228
228
|
const message = withMessage ? `${workingOverride ?? ""}\u0000${view.status.workingMessage ?? ""}\u0000${view.status.workingProgress ?? ""}` : "";
|
|
229
229
|
return `${placement}\u0000${outputPad}\u0000${view.lifecycle}\u0000${progressPresentation}\u0000${message}\u0000${view.status.diagnostics.at(-1) ?? ""}`;
|
|
230
230
|
}
|
|
231
|
+
function appendInstalledUpdateStatus(rows, width, view) {
|
|
232
|
+
if (width <= 0 || !view.diagnostics.some(diagnostic => diagnostic.code === "release-update-installed"))
|
|
233
|
+
return rows;
|
|
234
|
+
const theme = piTheme();
|
|
235
|
+
const full = `${theme.fg("success", "Update installed")} ${theme.fg("muted", "·")} ${theme.fg("accent", "Restart to update")}`;
|
|
236
|
+
const status = piShellTruncateToWidth(full, width);
|
|
237
|
+
const statusWidth = piShellVisibleWidth(status);
|
|
238
|
+
const target = rows.findLastIndex(row => piShellVisibleWidth(row.trimEnd()) > 0);
|
|
239
|
+
if (target < 0)
|
|
240
|
+
return [`${" ".repeat(Math.max(0, width - statusWidth))}${status}`];
|
|
241
|
+
const base = (rows[target] ?? "").trimEnd();
|
|
242
|
+
const gap = width - piShellVisibleWidth(base) - statusWidth;
|
|
243
|
+
if (gap >= 2)
|
|
244
|
+
return rows.map((row, index) => index === target ? `${base}${" ".repeat(gap)}${status}` : row);
|
|
245
|
+
return [...rows.slice(0, target + 1), `${" ".repeat(Math.max(0, width - statusWidth))}${status}`, ...rows.slice(target + 1)];
|
|
246
|
+
}
|
|
231
247
|
function queuedInputChipWrapping(text, presentation, width) {
|
|
232
248
|
return presentation === "custom-viewport"
|
|
233
249
|
? protectPiPromptChipPresentation(text, width)
|
|
@@ -6,7 +6,7 @@ import { hotkeysMarkdown } from "./shell-presenters-info.js";
|
|
|
6
6
|
export function renderPiShellHotkeySections(presentation, width) {
|
|
7
7
|
ensureTheme();
|
|
8
8
|
const shortcuts = presentation.getShortcuts ?? (() => []);
|
|
9
|
-
const markdown = hotkeysMarkdown(presentation.bindings, shortcuts, presentation.profile ?? "pi");
|
|
9
|
+
const markdown = hotkeysMarkdown(presentation.bindings, shortcuts, presentation.profile ?? "pi", presentation.residentTabs);
|
|
10
10
|
const sections = [];
|
|
11
11
|
for (const line of markdown.split("\n")) {
|
|
12
12
|
const heading = /^\*\*(.+)\*\*$/.exec(line)?.[1];
|
|
@@ -68,11 +68,14 @@ export interface PiShellHotkeysPresentation {
|
|
|
68
68
|
readonly bindings?: KeybindingsConfig;
|
|
69
69
|
readonly getShortcuts?: NonNullable<PiShellExtensionRendererResolver["getShortcuts"]>;
|
|
70
70
|
readonly profile?: "pi" | "a1";
|
|
71
|
+
readonly residentTabs?: boolean;
|
|
71
72
|
}
|
|
72
|
-
export declare function createPiShellHotkeys(bindings?: KeybindingsConfig, getShortcuts?: NonNullable<PiShellExtensionRendererResolver["getShortcuts"]>, profile?: "pi" | "a1"): PiShellComponentPort;
|
|
73
|
+
export declare function createPiShellHotkeys(bindings?: KeybindingsConfig, getShortcuts?: NonNullable<PiShellExtensionRendererResolver["getShortcuts"]>, profile?: "pi" | "a1", residentTabs?: boolean): PiShellComponentPort;
|
|
73
74
|
/** The keyboard-shortcut document rows the feed presenter shows, without its spacer, borders, and heading. */
|
|
74
75
|
export declare function renderPiShellHotkeysLines(presentation: PiShellHotkeysPresentation, width: number): readonly string[];
|
|
75
|
-
|
|
76
|
+
/** The global tab declarations the hotkeys document lists, straight from the feature's declarations. */
|
|
77
|
+
export declare const TAB_HOTKEYS: readonly (readonly [string, string | null, string])[];
|
|
78
|
+
export declare function hotkeysMarkdown(bindings: KeybindingsConfig | undefined, getShortcuts: NonNullable<PiShellExtensionRendererResolver["getShortcuts"]>, profile: "pi" | "a1", residentTabs?: boolean): string;
|
|
76
79
|
/**
|
|
77
80
|
* Pinned Pi's `showPackageUpdateNotification` banner: warning-coloured dynamic
|
|
78
81
|
* borders around a bold warning title, the muted update instruction with the
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { DynamicBorder } from "../startup-public.js";
|
|
2
2
|
import { Container, getCapabilities, hyperlink, Markdown, Spacer, Text, visibleWidth } from "@earendil-works/pi-tui";
|
|
3
3
|
import { PRODUCT_TEXT } from "../../../product-identity.js";
|
|
4
|
+
import { projectResidentTabShortcuts, RESIDENT_TAB_GLOBAL_SHORTCUTS } from "../../../features/resident-tab/index.js";
|
|
4
5
|
import { KeybindingsManager } from "./upstream/adjacent/core/keybindings.js";
|
|
5
6
|
import { getPiHotkeysMarkdownTheme, getPiMarkdownTheme, paintPiBorder, PINNED_PI_LAYOUT, piTheme } from "./theme.js";
|
|
6
7
|
import { componentPort, ensureTheme, formatSessionTokens } from "./shell-shared-facade.js";
|
|
@@ -147,9 +148,9 @@ function shortcutDisplay(key) {
|
|
|
147
148
|
return label.charAt(0).toUpperCase() + label.slice(1);
|
|
148
149
|
}).join("+")).join("/");
|
|
149
150
|
}
|
|
150
|
-
export function createPiShellHotkeys(bindings, getShortcuts = () => [], profile = "pi") {
|
|
151
|
+
export function createPiShellHotkeys(bindings, getShortcuts = () => [], profile = "pi", residentTabs = false) {
|
|
151
152
|
ensureTheme();
|
|
152
|
-
const markdown = hotkeysMarkdown(bindings, getShortcuts, profile);
|
|
153
|
+
const markdown = hotkeysMarkdown(bindings, getShortcuts, profile, residentTabs);
|
|
153
154
|
const container = new Container();
|
|
154
155
|
container.addChild(new Spacer(1));
|
|
155
156
|
container.addChild(new DynamicBorder(paintPiBorder));
|
|
@@ -162,12 +163,14 @@ export function createPiShellHotkeys(bindings, getShortcuts = () => [], profile
|
|
|
162
163
|
/** The keyboard-shortcut document rows the feed presenter shows, without its spacer, borders, and heading. */
|
|
163
164
|
export function renderPiShellHotkeysLines(presentation, width) {
|
|
164
165
|
ensureTheme();
|
|
165
|
-
return hotkeysMarkdownComponent(hotkeysMarkdown(presentation.bindings, presentation.getShortcuts ?? (() => []), presentation.profile ?? "pi")).render(width);
|
|
166
|
+
return hotkeysMarkdownComponent(hotkeysMarkdown(presentation.bindings, presentation.getShortcuts ?? (() => []), presentation.profile ?? "pi", presentation.residentTabs)).render(width);
|
|
166
167
|
}
|
|
167
168
|
function hotkeysMarkdownComponent(markdown) {
|
|
168
169
|
return new Markdown(markdown, 1, 1, getPiHotkeysMarkdownTheme());
|
|
169
170
|
}
|
|
170
|
-
|
|
171
|
+
/** The global tab declarations the hotkeys document lists, straight from the feature's declarations. */
|
|
172
|
+
export const TAB_HOTKEYS = RESIDENT_TAB_GLOBAL_SHORTCUTS.map(shortcut => [shortcut.id, shortcut.defaultKey, shortcut.description]);
|
|
173
|
+
export function hotkeysMarkdown(bindings, getShortcuts, profile, residentTabs = false) {
|
|
171
174
|
const keys = profile === "a1" ? KeybindingsManager.fromOwnedBindings(bindings) : new KeybindingsManager(bindings);
|
|
172
175
|
// Compatibility: the owned viewport consumes these physical chords before editor actions.
|
|
173
176
|
const display = (action) => keys.getKeys(action)
|
|
@@ -180,6 +183,17 @@ export function hotkeysMarkdown(bindings, getShortcuts, profile) {
|
|
|
180
183
|
: `\`${label}\``;
|
|
181
184
|
}).join(" / ")} | ${description} |`;
|
|
182
185
|
let markdown = ["**Navigation**", "| Key | Action |", "|-----|--------|", row(["tui.editor.cursorUp", "tui.editor.cursorDown", "tui.editor.cursorLeft", "tui.editor.cursorRight"], "Move cursor / browse history"), row(["tui.editor.cursorWordLeft", "tui.editor.cursorWordRight"], "Move by word"), row(["tui.editor.cursorLineStart"], profile === "a1" ? "Start of prompt line" : "Start of line"), row(["tui.editor.cursorLineEnd"], profile === "a1" ? "End of prompt line" : "End of line"), ...(profile === "a1" ? ["| `Ctrl+Home` | Start of content |", "| `Ctrl+End` | End of content / follow output |"] : []), row(["tui.editor.jumpForward"], "Jump forward to character"), row(["tui.editor.jumpBackward"], "Jump backward to character"), row(["tui.editor.pageUp", "tui.editor.pageDown"], "Scroll by page"), "", "**Editing**", "| Key | Action |", "|-----|--------|", row(["tui.input.submit"], "Send message"), row(["tui.input.newLine"], `New line${process.platform === "win32" ? " (Ctrl+Enter on Windows Terminal)" : ""}`), row(["tui.editor.deleteWordBackward"], "Delete word backwards"), row(["tui.editor.deleteWordForward"], "Delete word forwards"), row(["tui.editor.deleteToLineStart"], "Delete to start of line"), row(["tui.editor.deleteToLineEnd"], "Delete to end of line"), row(["tui.editor.yank"], "Paste the most-recently-deleted text"), row(["tui.editor.yankPop"], "Cycle through the deleted text after pasting"), row(["tui.editor.undo"], "Undo"), "", "**Other**", "| Key | Action |", "|-----|--------|", row(["tui.input.tab"], "Path completion / accept autocomplete"), row(["app.interrupt"], "Cancel autocomplete / abort streaming"), row(["app.clear"], "Clear editor (first) / exit (second)"), row(["app.exit"], "Exit (when editor is empty)"), row(["app.suspend"], "Suspend to background"), row(["app.thinking.cycle"], "Cycle thinking level"), row(["app.model.cycleForward", "app.model.cycleBackward"], "Cycle models"), row(["app.model.select"], profile === "a1" ? "Open the Models dialog" : "Open model selector"), row(["app.tools.expand"], "Toggle tool output expansion"), row(["app.thinking.toggle"], "Toggle thinking block visibility"), row(["app.editor.external"], "Edit message in external editor"), row(["app.message.copy"], "Copy selection or last assistant message"), row(["app.message.followUp"], "Queue follow-up message"), row(["app.message.dequeue"], "Restore queued messages"), row(["app.clipboard.pasteImage"], profile === "a1" ? "Paste image or text from clipboard" : "Paste files on macOS, images, or text from clipboard"), "| `/` | Slash commands |", "| `!` | Run bash command |", "| `!!` | Run bash command (excluded from context) |", ...(profile === "a1" ? ["", "**Models dialog**", "| Key | Action |", "|-----|--------|", "| `Space` | Toggle the selected model in the cycling scope |", "| `Tab` | Switch the all/scoped filter |", row(["app.models.save"], "Save the scope to settings"), row(["app.models.enableAll"], "Scope every listed model"), row(["app.models.clearAll"], "Clear the listed models from the scope"), row(["app.models.toggleProvider"], "Toggle the selected model's provider"), row(["app.models.reorderUp", "app.models.reorderDown"], "Reorder the cycling scope")] : [])].join("\n");
|
|
186
|
+
if (profile === "a1" && residentTabs) {
|
|
187
|
+
// Invariant: the Tabs section shows the same projection the resident shell dispatches: the
|
|
188
|
+
// effective A1 declarations keep their keys and earlier tab declarations keep duplicates.
|
|
189
|
+
const projection = projectResidentTabShortcuts({ configured: bindings, reserved: keys.getEffectiveConfig() });
|
|
190
|
+
markdown += "\n\n**Tabs**\n| Key | Action |\n|-----|--------|\n";
|
|
191
|
+
markdown += RESIDENT_TAB_GLOBAL_SHORTCUTS.map(shortcut => {
|
|
192
|
+
const assigned = projection.assignments[shortcut.id];
|
|
193
|
+
const label = assigned === null ? "Unbound" : `\`${shortcutDisplay(assigned)}\``;
|
|
194
|
+
return `| ${label} | ${shortcut.description} |`;
|
|
195
|
+
}).join("\n");
|
|
196
|
+
}
|
|
183
197
|
const shortcuts = getShortcuts(bindings ?? keys.getEffectiveConfig());
|
|
184
198
|
if (shortcuts.length > 0) {
|
|
185
199
|
markdown += "\n\n**Extensions**\n| Key | Action |\n|-----|--------|\n";
|
|
@@ -4,7 +4,7 @@ import { SkillInvocationMessageComponent } from "./upstream/components/skill-inv
|
|
|
4
4
|
import { piToolArguments as toolArguments, updatePiToolResult as updateToolResult } from "./tool-result-adapter.js";
|
|
5
5
|
import { createTranscriptImageResolver } from "./transcript-image-resolver.js";
|
|
6
6
|
import { createMermaidMarkdownTransformer } from "./upstream/components/mermaid.js";
|
|
7
|
-
import { Container, Image, Spacer, Text, } from "@earendil-works/pi-tui";
|
|
7
|
+
import { Container, getCapabilities, Image, Spacer, Text, } from "@earendil-works/pi-tui";
|
|
8
8
|
import { createPiSubmittedPromptComponent, isPiPromptStyleCompaction, } from "./submitted-prompt-adapter.js";
|
|
9
9
|
export { isPiPromptStyleCompaction, paintPiSubmittedPromptTimestamp } from "./submitted-prompt-adapter.js";
|
|
10
10
|
import { getPiMarkdownTheme, PINNED_PI_LAYOUT, piTheme, } from "./theme.js";
|
|
@@ -127,7 +127,10 @@ function withTranscriptImages(component, block, assets, showImages, imageWidthCe
|
|
|
127
127
|
return component;
|
|
128
128
|
const container = new Container();
|
|
129
129
|
container.addChild(component);
|
|
130
|
+
const imageProtocolUnavailable = getCapabilities().images === null;
|
|
130
131
|
for (const reference of references) {
|
|
132
|
+
if (showImages && imageProtocolUnavailable)
|
|
133
|
+
continue;
|
|
131
134
|
container.addChild(new Spacer(1));
|
|
132
135
|
const asset = assets?.resolve(reference.assetId) ?? null;
|
|
133
136
|
if (!showImages) {
|
|
@@ -3,7 +3,7 @@ import { EarendilAnnouncementComponent } from "./upstream/components/earendil-an
|
|
|
3
3
|
import { ExtensionSelectorComponent } from "./upstream/components/extension-selector.js";
|
|
4
4
|
import { Box, Container, SelectList, Spacer, Text, } from "@earendil-works/pi-tui";
|
|
5
5
|
import { ScopedModelsSelectorComponent } from "./upstream/components/scoped-models-selector.js";
|
|
6
|
-
import { addPiModalSelectFooter, adoptPiModalFrame, adoptPiModalHeader } from "./modal-frame.js";
|
|
6
|
+
import { addPiModalSelectFooter, adoptPiModalFrame, adoptPiModalHeader, adoptPiModalSearchInput } from "./modal-frame.js";
|
|
7
7
|
import { ModelsDialogComponent } from "./models-dialog.js";
|
|
8
8
|
import { TrustSelectorComponent } from "./upstream/components/trust-selector.js";
|
|
9
9
|
import { canonicalizePiSettingsHint, DIALOG_CLOSE_SHORTCUT_HINT, PINNED_PI_LAYOUT, getPiSelectListTheme, paintPiBorder, piTheme, renderPiModalShortcutHints, } from "./theme.js";
|
|
@@ -66,6 +66,7 @@ export function createPiShellSettingsSelector(options) {
|
|
|
66
66
|
onAutocompleteMaxVisibleChange: change("onAutocompleteMaxVisibleChange"),
|
|
67
67
|
onQuietStartupChange: change("onQuietStartupChange"),
|
|
68
68
|
onDefaultProjectTrustChange: change("onDefaultProjectTrustChange"),
|
|
69
|
+
onSessionShareDestinationChange: change("onSessionShareDestinationChange"),
|
|
69
70
|
onClearOnShrinkChange: change("onClearOnShrinkChange"),
|
|
70
71
|
onShowTerminalProgressChange: change("onShowTerminalProgressChange"),
|
|
71
72
|
onTuiModeChange: change("onTuiModeChange"),
|
|
@@ -95,6 +96,7 @@ export function createPiShellSettingsSelector(options) {
|
|
|
95
96
|
export function createPiShellModelSelector(options) {
|
|
96
97
|
ensureTheme();
|
|
97
98
|
const selector = new ModelSelectorComponent(createTuiFacade(options.runtime), options.currentModel, options.modelRuntime, options.scopedModels, options.onSelect, options.onCancel, options.initialSearchInput, options.onSelectAsDefault, options.defaultModel);
|
|
99
|
+
adoptPiModalSearchInput(selector, selector.getSearchInput());
|
|
98
100
|
adoptPiModalFrame(selector, { topIndex: 0, bottomIndex: selector.children.length - 1 });
|
|
99
101
|
return componentPort(selector);
|
|
100
102
|
}
|
|
@@ -234,6 +236,8 @@ export function createPiShellAuthProviderSelector(mode, providers, onSelect, onC
|
|
|
234
236
|
if (selected)
|
|
235
237
|
onSelect(selected.id);
|
|
236
238
|
}, onCancel, initialSearchInput);
|
|
239
|
+
// Provenance: OAuth selector slot is top rule, spacer, title, spacer, then its search Input.
|
|
240
|
+
adoptPiModalSearchInput(selector, selector.children[4]);
|
|
237
241
|
addPiModalSelectFooter(selector);
|
|
238
242
|
const preInsetContent = [selector.children[2], selector.children[6]];
|
|
239
243
|
const header = adoptPiModalHeader(selector, 0, 2);
|
|
@@ -64,6 +64,8 @@ export interface PiShellEditorPort extends PiShellComponentPort {
|
|
|
64
64
|
canPresentPromptSuggestion(): boolean;
|
|
65
65
|
promptSuggestionBlockReason?(): SuggestionDecision;
|
|
66
66
|
hasSelection(): boolean;
|
|
67
|
+
/** Exact expanded semantic editor selection without mutating or collapsing it. */
|
|
68
|
+
selectedText?(): string | undefined;
|
|
67
69
|
ownsPointer(): boolean;
|
|
68
70
|
handlePointer(event: PiShellEditorPointerEvent): boolean;
|
|
69
71
|
pasteClipboard(): boolean;
|
|
@@ -159,9 +161,18 @@ export interface PiShellPasteReservation {
|
|
|
159
161
|
}
|
|
160
162
|
export interface PiShellEditorOptions {
|
|
161
163
|
readonly persistentHistory?: boolean;
|
|
164
|
+
/** Configures the shared interactive input for a caller narrower than the agent prompt. */
|
|
165
|
+
readonly inputCapabilities?: {
|
|
166
|
+
readonly singleLine?: boolean;
|
|
167
|
+
readonly paste?: boolean;
|
|
168
|
+
readonly autocomplete?: boolean;
|
|
169
|
+
readonly placeholder?: string;
|
|
170
|
+
};
|
|
162
171
|
readonly historyEditor?: HistoryEditorConstructor;
|
|
163
172
|
/** Bare A1 adds ergonomic aliases while comparison profiles retain Pi defaults. */
|
|
164
173
|
readonly keybindingProfile?: "pi" | "a1";
|
|
174
|
+
/** Resident Agents expose Settings and the changelog as utility tabs instead of slash commands. */
|
|
175
|
+
readonly hideUtilityTabCommands?: boolean;
|
|
165
176
|
/** The process's shared keybindings; its profile must match `keybindingProfile`. */
|
|
166
177
|
readonly keybindings?: PiKeybindingsHost;
|
|
167
178
|
readonly getColumns: () => number;
|
|
@@ -185,7 +196,7 @@ export interface PiShellEditorOptions {
|
|
|
185
196
|
readonly onFollowUp?: (() => void) | undefined;
|
|
186
197
|
readonly onDequeue?: (() => void) | undefined;
|
|
187
198
|
readonly onPromptSuggestionAccepted?: (text: string) => void;
|
|
188
|
-
readonly onCopyText?: (text: string) => void;
|
|
199
|
+
readonly onCopyText?: (text: string, cut: boolean) => void;
|
|
189
200
|
readonly readClipboardContent?: (signal?: AbortSignal) => Promise<PiShellClipboardContent | null>;
|
|
190
201
|
readonly beginClipboardPaste?: () => PiShellPasteReservation;
|
|
191
202
|
readonly beginTextPaste?: (text: string) => PiShellPasteReservation;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { DynamicBorder } from "../startup-public.js";
|
|
2
2
|
import { Container, getKeybindings, Input, Spacer, Text } from "@earendil-works/pi-tui";
|
|
3
|
-
import { addPiModalHeader, adoptPiModalFrame } from "./modal-frame.js";
|
|
3
|
+
import { addPiModalHeader, addPiModalSearchInput, adoptPiModalFrame } from "./modal-frame.js";
|
|
4
4
|
import { DIALOG_CLOSE_SHORTCUT_HINT, paintPiBorder, PINNED_PI_LAYOUT, piTheme, renderPiModalListRow, renderPiModalShortcutHints, } from "./theme.js";
|
|
5
5
|
import { componentPort, ensureTheme, piShellTruncateToWidth, piShellVisibleWidth } from "./shell-shared-facade.js";
|
|
6
6
|
import { skillMatchesQuery } from "./skills-command.js";
|
|
@@ -50,7 +50,7 @@ class SkillsSelectorComponent extends Container {
|
|
|
50
50
|
this.#searchInput.onSubmit = () => this.#selectCurrent();
|
|
51
51
|
const header = addPiModalHeader(this, new DynamicBorder(paintPiBorder), new Text(piTheme().fg("accent", piTheme().bold("Skills")), 0, 0));
|
|
52
52
|
this.addChild(new Spacer(1));
|
|
53
|
-
|
|
53
|
+
addPiModalSearchInput(this, this.#searchInput);
|
|
54
54
|
this.addChild(new Spacer(1));
|
|
55
55
|
this.addChild(this.#listContainer);
|
|
56
56
|
this.addChild(new Spacer(1));
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Provenance: @earendil-works/pi-coding-agent 1.
|
|
2
|
+
* Provenance: @earendil-works/pi-coding-agent 1.4.0 (MIT), commit 4a080252f06caf63a525d7873c5d94d3c23887e0,
|
|
3
3
|
* packages/coding-agent/src/core/keybindings.ts.
|
|
4
4
|
* Modifications: Mechanical source port with Node import prefixes, public package-root agent-directory
|
|
5
5
|
* resolution, and an opt-in bare-A1 input profile including Ctrl+L level cycling, unbound model
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Provenance: @earendil-works/pi-coding-agent 1.
|
|
2
|
+
* Provenance: @earendil-works/pi-coding-agent 1.4.0 (MIT), commit 4a080252f06caf63a525d7873c5d94d3c23887e0,
|
|
3
3
|
* packages/coding-agent/src/core/keybindings.ts.
|
|
4
4
|
* Modifications: Mechanical source port with Node import prefixes, public package-root agent-directory
|
|
5
5
|
* resolution, and an opt-in bare-A1 input profile including Ctrl+L level cycling, unbound model
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* Deviations: keybindings-public-config-boundary, owned-level-cycle-shortcut,
|
|
10
10
|
* owned-input-keybinding-aliases, owned-session-tree-dialog, owned-dialog-ctrl-c-cancel.
|
|
11
11
|
*/
|
|
12
|
-
import { matchesKey, TUI_KEYBINDINGS, KeybindingsManager as TuiKeybindingsManager, } from "@earendil-works/pi-tui";
|
|
12
|
+
import { Key, matchesKey, TUI_KEYBINDINGS, KeybindingsManager as TuiKeybindingsManager, } from "@earendil-works/pi-tui";
|
|
13
13
|
import { existsSync, readFileSync } from "node:fs";
|
|
14
14
|
import { join } from "node:path";
|
|
15
15
|
import { getAgentDir } from "../../../../startup-public.js";
|
|
@@ -278,14 +278,27 @@ const KEYBINDING_NAME_MIGRATIONS = {
|
|
|
278
278
|
function isLegacyKeybindingName(key) {
|
|
279
279
|
return key in KEYBINDING_NAME_MIGRATIONS;
|
|
280
280
|
}
|
|
281
|
+
const KEYBINDING_MODIFIERS = ["ctrl", "shift", "alt", "super"];
|
|
282
|
+
const BASE_KEY_PATTERN = `(?:[a-z0-9]|${Object.values(Key)
|
|
283
|
+
.flatMap((value) => (typeof value === "string" ? [value.replace(/[\\^$.*+?()[\]{}|]/g, "\\$&")] : []))
|
|
284
|
+
.join("|")})`;
|
|
285
|
+
const DUPLICATE_MODIFIER_PATTERN = KEYBINDING_MODIFIERS
|
|
286
|
+
.map((modifier) => `${modifier}\\+.*${modifier}\\+`)
|
|
287
|
+
.join("|");
|
|
288
|
+
const KEY_ID_PATTERN = new RegExp(`^(?!.*(?:${DUPLICATE_MODIFIER_PATTERN}))(?:(?:${KEYBINDING_MODIFIERS.join("|")})\\+){0,4}${BASE_KEY_PATTERN}$`);
|
|
289
|
+
function isKeyId(value) {
|
|
290
|
+
return typeof value === "string" && KEY_ID_PATTERN.test(value);
|
|
291
|
+
}
|
|
281
292
|
function toKeybindingsConfig(value) {
|
|
282
293
|
const config = {};
|
|
283
294
|
for (const [key, binding] of Object.entries(value)) {
|
|
284
|
-
if (
|
|
295
|
+
if (key === "$schema")
|
|
296
|
+
continue;
|
|
297
|
+
if (isKeyId(binding)) {
|
|
285
298
|
config[key] = binding;
|
|
286
299
|
continue;
|
|
287
300
|
}
|
|
288
|
-
if (Array.isArray(binding) && binding.every(
|
|
301
|
+
if (Array.isArray(binding) && binding.every(isKeyId)) {
|
|
289
302
|
config[key] = binding;
|
|
290
303
|
}
|
|
291
304
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"sourcePackage": "@earendil-works/pi-coding-agent",
|
|
3
|
-
"sourceVersion": "1.
|
|
3
|
+
"sourceVersion": "1.4.0",
|
|
4
4
|
"upstreamRepository": "https://github.com/earendil-works/pi.git",
|
|
5
|
-
"upstreamCommit": "
|
|
5
|
+
"upstreamCommit": "4a080252f06caf63a525d7873c5d94d3c23887e0",
|
|
6
6
|
"sourcePath": "dist/modes/interactive/assets/clankolas.png",
|
|
7
7
|
"sourceSha256": "169acd0dfe6fbb8d8742ed24a3fc654fd0b2e2d4223c733249c5493723f1b72d",
|
|
8
8
|
"license": "MIT",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Provenance: @earendil-works/pi-coding-agent 1.
|
|
2
|
+
* Provenance: @earendil-works/pi-coding-agent 1.4.0 (MIT), commit 4a080252f06caf63a525d7873c5d94d3c23887e0,
|
|
3
3
|
* packages/coding-agent/src/modes/interactive/components/countdown-timer.ts.
|
|
4
4
|
* Modifications: Mechanical source port with ECMAScript private fields; imports remain on the public
|
|
5
5
|
* Pi TUI package root.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Provenance: @earendil-works/pi-coding-agent 1.
|
|
2
|
+
* Provenance: @earendil-works/pi-coding-agent 1.4.0 (MIT), commit 4a080252f06caf63a525d7873c5d94d3c23887e0,
|
|
3
3
|
* packages/coding-agent/src/modes/interactive/components/earendil-announcement.ts.
|
|
4
4
|
* Modifications: Mechanical pinned source port with private imports remapped to public package-root
|
|
5
5
|
* types/APIs and A1-owned theme boundaries. The unchanged image is loaded lazily from its attributed,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Provenance: @earendil-works/pi-coding-agent 1.
|
|
2
|
+
* Provenance: @earendil-works/pi-coding-agent 1.4.0 (MIT), commit 4a080252f06caf63a525d7873c5d94d3c23887e0,
|
|
3
3
|
* packages/coding-agent/src/modes/interactive/components/extension-editor.ts.
|
|
4
4
|
* Modifications: Mechanical port: remap pi-tui to the root public singleton, use owned
|
|
5
5
|
* keybindings/theme and external-editor seams, preserve editor layout, hints, focus, submission,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Provenance: @earendil-works/pi-coding-agent 1.
|
|
2
|
+
* Provenance: @earendil-works/pi-coding-agent 1.4.0 (MIT), commit 4a080252f06caf63a525d7873c5d94d3c23887e0,
|
|
3
3
|
* packages/coding-agent/src/modes/interactive/components/extension-editor.ts.
|
|
4
4
|
* Modifications: Mechanical port: remap pi-tui to the root public singleton, use owned
|
|
5
5
|
* keybindings/theme and external-editor seams, preserve editor layout, hints, focus, submission,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Provenance: @earendil-works/pi-coding-agent 1.
|
|
2
|
+
* Provenance: @earendil-works/pi-coding-agent 1.4.0 (MIT), commit 4a080252f06caf63a525d7873c5d94d3c23887e0,
|
|
3
3
|
* packages/coding-agent/src/modes/interactive/components/extension-input.ts.
|
|
4
4
|
* Modifications: Mechanical port: remap public imports, use ECMAScript private fields, and route the
|
|
5
5
|
* bare-A1 instruction row and chrome through the shared semantic shortcut and compact padded
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Provenance: @earendil-works/pi-coding-agent 1.
|
|
2
|
+
* Provenance: @earendil-works/pi-coding-agent 1.4.0 (MIT), commit 4a080252f06caf63a525d7873c5d94d3c23887e0,
|
|
3
3
|
* packages/coding-agent/src/modes/interactive/components/extension-selector.ts.
|
|
4
4
|
* Modifications: Mechanical port: remap public imports, use ECMAScript private fields, and route the
|
|
5
5
|
* bare-A1 instruction row and chrome through the shared semantic shortcut and compact padded
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Provenance: @earendil-works/pi-coding-agent 1.
|
|
2
|
+
* Provenance: @earendil-works/pi-coding-agent 1.4.0 (MIT), commit 4a080252f06caf63a525d7873c5d94d3c23887e0,
|
|
3
3
|
* packages/coding-agent/src/modes/interactive/components/mermaid.ts.
|
|
4
4
|
* Modifications: Mechanical pinned source port with private imports remapped to public package-root
|
|
5
5
|
* types/APIs and A1-owned theme boundaries; behavior remains acceptance-tested.
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Provenance: @earendil-works/pi-coding-agent 1.
|
|
2
|
+
* Provenance: @earendil-works/pi-coding-agent 1.4.0 (MIT), commit 4a080252f06caf63a525d7873c5d94d3c23887e0,
|
|
3
3
|
* packages/coding-agent/src/modes/interactive/components/custom-editor.ts.
|
|
4
4
|
* Modifications: A1-owned class name and synchronized A1 keybinding contract replace the nominal
|
|
5
5
|
* private upstream keybinding constructor dependency; bare A1 injects the shared Settings/agent input
|
|
6
|
-
* frame, transient contextual-suggestion branch, and
|
|
7
|
-
* above-prompt autocomplete with a one-cell outer gutter.
|
|
8
|
-
* slash-command search on Escape and completes a selected or
|
|
9
|
-
* and reopens the menu on its tunnel rows, and synchronously
|
|
10
|
-
* command menu after Tab applies its row.
|
|
6
|
+
* frame, configurable empty-input placeholder branch, transient contextual-suggestion branch, and
|
|
7
|
+
* explicit body geometry for selection and above-prompt autocomplete with a one-cell outer gutter.
|
|
8
|
+
* Bare A1 also clears a sole top-level slash-command search on Escape and completes a selected or
|
|
9
|
+
* exact completed tunnel command with `:` and reopens the menu on its tunnel rows, and synchronously
|
|
10
|
+
* retains then refreshes an exact top-level command menu after Tab applies its row.
|
|
11
11
|
* Deviations: owned-shared-input-frame, above-prompt-autocomplete-placement,
|
|
12
12
|
* clear-command-search-on-escape, command-tunnel-colon-completion, keep-command-menu-open-after-tab.
|
|
13
13
|
*/
|
|
@@ -21,6 +21,8 @@ export interface OwnedEditorOptions extends EditorOptions {
|
|
|
21
21
|
readonly inputPresentation?: PiShellPromptInputPresentation;
|
|
22
22
|
readonly styleSuggestion?: (text: string) => string;
|
|
23
23
|
readonly styleSuggestionCaret?: (text: string) => string;
|
|
24
|
+
/** Non-accepting empty-input guidance rendered through the shared suggestion presentation. */
|
|
25
|
+
readonly placeholder?: string;
|
|
24
26
|
readonly terminalRows?: () => number;
|
|
25
27
|
/** Reuses the editor's established atomic-aware visual layout when available. */
|
|
26
28
|
readonly getVisualLineCount?: (width: number) => number | undefined;
|