@timurproko/a1 0.2.6 → 0.2.7-dev.1221
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +41 -3
- package/bin/automatic-update.js +7 -0
- package/bin/cli.js +4 -0
- package/bin/guardian.js +5 -0
- package/bin/tab-launch-context.d.ts +27 -0
- package/bin/tab-launch-context.js +94 -0
- package/bin/ui.js +107 -59
- package/dist/app/session-shell/clipboard-diagnostics.js +1 -1
- package/dist/app/session-shell/dialog-coordinator.d.ts +42 -0
- package/dist/app/session-shell/dialog-coordinator.js +133 -0
- package/dist/app/session-shell/dock-chrome.d.ts +34 -0
- package/dist/app/session-shell/dock-chrome.js +109 -0
- package/dist/app/session-shell/exit-notice.d.ts +1 -1
- package/dist/app/session-shell/exit-notice.js +1 -1
- package/dist/app/session-shell/extension-surface.d.ts +30 -0
- package/dist/app/session-shell/extension-surface.js +105 -0
- package/dist/app/session-shell/helper-pool.d.ts +3 -5
- package/dist/app/session-shell/helper-pool.js +3 -5
- package/dist/app/session-shell/input-surface-switch.d.ts +36 -0
- package/dist/app/session-shell/input-surface-switch.js +85 -0
- package/dist/app/session-shell/login-interaction.d.ts +27 -0
- package/dist/app/session-shell/login-interaction.js +91 -0
- package/dist/app/session-shell/prompt-submission.d.ts +48 -0
- package/dist/app/session-shell/prompt-submission.js +276 -0
- package/dist/app/session-shell/resident-tab-coordinator.d.ts +38 -0
- package/dist/app/session-shell/resident-tab-coordinator.js +77 -0
- package/dist/app/session-shell/response-copy-helper.js +21 -6
- package/dist/app/session-shell/response-copy-protocol.d.ts +1 -1
- package/dist/app/session-shell/response-copy-transport.d.ts +16 -6
- package/dist/app/session-shell/response-copy-transport.js +69 -17
- package/dist/app/session-shell/session-concern.d.ts +22 -0
- package/dist/app/session-shell/session-concern.js +29 -0
- package/dist/app/session-shell/session-lifecycle.d.ts +29 -0
- package/dist/app/session-shell/session-lifecycle.js +49 -0
- package/dist/app/session-shell/session-shell-root.d.ts +42 -6
- package/dist/app/session-shell/session-shell-root.js +196 -908
- package/dist/app/session-shell/session-shell.d.ts +3 -8
- package/dist/app/session-shell/session-shell.js +324 -835
- package/dist/app/session-shell/session-viewport-controller.d.ts +2 -2
- package/dist/app/session-shell/session-viewport-controller.js +29 -15
- package/dist/app/session-shell/settings-bindings.d.ts +17 -0
- package/dist/app/session-shell/settings-bindings.js +91 -0
- package/dist/app/session-shell/shell-editor-factory.d.ts +27 -0
- package/dist/app/session-shell/shell-editor-factory.js +102 -0
- package/dist/app/session-shell/shell-host.d.ts +6 -0
- package/dist/app/session-shell/shell-host.js +34 -7
- package/dist/app/session-shell/shell-layout.d.ts +64 -0
- package/dist/app/session-shell/shell-layout.js +18 -0
- package/dist/app/session-shell/suggestion-surface.d.ts +25 -0
- package/dist/app/session-shell/suggestion-surface.js +63 -0
- package/dist/app/session-shell/transcript-document.d.ts +78 -0
- package/dist/app/session-shell/transcript-document.js +365 -0
- package/dist/app/session-shell/viewport-layout.d.ts +31 -0
- package/dist/app/session-shell/viewport-layout.js +160 -0
- package/dist/app/session-shell/workflow-output.d.ts +33 -0
- package/dist/app/session-shell/workflow-output.js +174 -0
- package/dist/app/session-shell/workflow-router.d.ts +25 -0
- package/dist/app/session-shell/workflow-router.js +39 -0
- package/dist/cli/dispatch.d.ts +11 -1
- package/dist/cli/dispatch.js +79 -5
- package/dist/cli/tabs-request.d.ts +7 -0
- package/dist/cli/tabs-request.js +1 -0
- package/dist/cli/tabs.d.ts +14 -0
- package/dist/cli/tabs.js +151 -0
- package/dist/cli/version-stats.js +38 -3
- package/dist/composition/owned-settings.d.ts +12 -0
- package/dist/composition/owned-settings.js +36 -0
- package/dist/composition/owned-ui.d.ts +27 -28
- package/dist/composition/owned-ui.js +205 -153
- package/dist/composition/resident-tab-bridge.d.ts +25 -0
- package/dist/composition/resident-tab-bridge.js +180 -0
- package/dist/composition/session-backend.d.ts +19 -0
- package/dist/composition/session-backend.js +1 -0
- package/dist/composition/session-runtime-registry.d.ts +20 -0
- package/dist/composition/session-runtime-registry.js +85 -0
- package/dist/composition/settings-route-host.d.ts +16 -1
- package/dist/composition/settings-route-host.js +29 -10
- package/dist/composition/settings-search-input.d.ts +9 -0
- package/dist/composition/settings-search-input.js +58 -0
- package/dist/composition/startup-route.d.ts +32 -0
- package/dist/composition/startup-route.js +72 -0
- package/dist/composition/utility-tab.d.ts +28 -0
- package/dist/composition/utility-tab.js +242 -0
- package/dist/contracts/owned-ui/index.d.ts +1 -1
- package/dist/contracts/owned-ui/model.d.ts +3 -0
- package/dist/contracts/owned-ui/session-backend.d.ts +3 -0
- package/dist/contracts/owned-ui/session-workflows.d.ts +11 -4
- package/dist/contracts/presentation/index.d.ts +11 -0
- package/dist/contracts/presentation/index.js +12 -0
- package/dist/features/launch/development-launch.js +6 -0
- package/dist/features/launch/index.d.ts +1 -1
- package/dist/features/launch/intent.d.ts +3 -1
- package/dist/features/launch/intent.js +7 -4
- package/dist/features/launch/profile-paths.js +4 -0
- package/dist/features/owned-ui/plus-menu-dialog.d.ts +22 -0
- package/dist/features/owned-ui/plus-menu-dialog.js +76 -0
- package/dist/features/owned-ui/project-trust-dialog.d.ts +1 -1
- package/dist/features/owned-ui/project-trust-dialog.js +6 -8
- package/dist/features/owned-ui/project-trust-prompt.d.ts +1 -0
- package/dist/features/owned-ui/project-trust-prompt.js +7 -3
- package/dist/features/owned-ui/reference-screen-app.d.ts +2 -0
- package/dist/features/owned-ui/reference-screen-app.js +12 -2
- package/dist/features/owned-ui/settings-app.d.ts +12 -2
- package/dist/features/owned-ui/settings-app.js +116 -81
- package/dist/features/owned-ui/settings-search-input.d.ts +29 -0
- package/dist/features/owned-ui/settings-search-input.js +1 -0
- package/dist/features/prompt-history/index.d.ts +1 -1
- package/dist/features/prompt-history/paths.d.ts +2 -1
- package/dist/features/prompt-history/paths.js +10 -2
- package/dist/features/prompt-history/service.d.ts +5 -0
- package/dist/features/prompt-history/service.js +1 -1
- package/dist/features/resident-tab/auto-name.d.ts +11 -0
- package/dist/features/resident-tab/auto-name.js +44 -0
- package/dist/features/resident-tab/index.d.ts +5 -0
- package/dist/features/resident-tab/index.js +7 -0
- package/dist/features/resident-tab/shortcut-bindings-file.d.ts +8 -0
- package/dist/features/resident-tab/shortcut-bindings-file.js +40 -0
- package/dist/features/resident-tab/shortcut-declarations.d.ts +13 -0
- package/dist/features/resident-tab/shortcut-declarations.js +26 -0
- package/dist/features/resident-tab/shortcut-projection.d.ts +29 -0
- package/dist/features/resident-tab/shortcut-projection.js +64 -0
- package/dist/features/resident-tab/status-deriver.d.ts +10 -0
- package/dist/features/resident-tab/status-deriver.js +12 -0
- package/dist/foundation/launch-context/index.d.ts +12 -0
- package/dist/foundation/launch-context/index.js +26 -0
- package/dist/foundation/launch-guardian/exit-watcher.d.ts +14 -0
- package/dist/foundation/launch-guardian/exit-watcher.js +94 -0
- package/dist/foundation/launch-guardian/main.d.ts +7 -1
- package/dist/foundation/launch-guardian/main.js +60 -7
- package/dist/foundation/lifecycle/session-repository-context.js +16 -2
- package/dist/foundation/process-containment/{native-guardian-containment.d.ts → addon-containment.d.ts} +7 -5
- package/dist/foundation/process-containment/addon-containment.js +139 -0
- package/dist/foundation/process-containment/addon-process-inspector.d.ts +11 -0
- package/dist/foundation/process-containment/addon-process-inspector.js +36 -0
- package/dist/foundation/process-containment/addon.d.ts +42 -0
- package/dist/foundation/process-containment/addon.js +57 -0
- package/dist/foundation/process-containment/artifact.d.ts +1 -1
- package/dist/foundation/process-containment/artifact.js +6 -5
- package/dist/foundation/process-containment/contracts.d.ts +2 -0
- package/dist/foundation/process-containment/index.d.ts +4 -4
- package/dist/foundation/process-containment/index.js +3 -3
- package/dist/foundation/process-containment/native-process-inspector.d.ts +2 -1
- package/dist/foundation/process-containment/native-process-inspector.js +10 -10
- package/dist/foundation/release/automatic-update.d.ts +37 -0
- package/dist/foundation/release/automatic-update.js +265 -0
- package/dist/foundation/release/bootstrap.d.ts +7 -9
- package/dist/foundation/release/bootstrap.js +107 -24
- package/dist/foundation/release/cohort-state.d.ts +1 -1
- package/dist/foundation/release/cohort-state.js +1 -1
- package/dist/foundation/release/dependency-certification.js +54 -19
- package/dist/foundation/release/early-accent.d.ts +12 -0
- package/dist/foundation/release/early-accent.js +59 -0
- package/dist/foundation/release/index.d.ts +2 -2
- package/dist/foundation/release/index.js +2 -2
- package/dist/foundation/release/latest-release.d.ts +24 -2
- package/dist/foundation/release/latest-release.js +51 -1
- package/dist/foundation/release/progress-palette.generated.d.ts +137 -3
- package/dist/foundation/release/progress-palette.generated.js +137 -3
- package/dist/foundation/release/release-gc.d.ts +3 -0
- package/dist/foundation/release/release-gc.js +59 -8
- package/dist/foundation/release/release-store.d.ts +12 -0
- package/dist/foundation/release/release-store.js +124 -2
- package/dist/foundation/release/update-execution-lease.d.ts +48 -0
- package/dist/foundation/release/update-execution-lease.js +161 -0
- package/dist/foundation/release/update.d.ts +12 -7
- package/dist/foundation/release/update.js +281 -196
- package/dist/foundation/resident-tabs/bounded-host-command.d.ts +18 -0
- package/dist/foundation/resident-tabs/bounded-host-command.js +39 -0
- package/dist/foundation/resident-tabs/bridge-client.d.ts +70 -0
- package/dist/foundation/resident-tabs/bridge-client.js +321 -0
- package/dist/foundation/resident-tabs/doctor.d.ts +28 -0
- package/dist/foundation/resident-tabs/doctor.js +166 -0
- package/dist/foundation/resident-tabs/draft-checkpoint.d.ts +27 -0
- package/dist/foundation/resident-tabs/draft-checkpoint.js +145 -0
- package/dist/foundation/resident-tabs/ensure-terminal-host.d.ts +36 -0
- package/dist/foundation/resident-tabs/ensure-terminal-host.js +151 -0
- package/dist/foundation/resident-tabs/fault-injection.d.ts +8 -0
- package/dist/foundation/resident-tabs/fault-injection.js +26 -0
- package/dist/foundation/resident-tabs/fixture-control.d.ts +7 -0
- package/dist/foundation/resident-tabs/fixture-control.js +35 -0
- package/dist/foundation/resident-tabs/host-entry.d.ts +1 -0
- package/dist/foundation/resident-tabs/host-entry.js +17 -0
- package/dist/foundation/resident-tabs/index.d.ts +12 -0
- package/dist/foundation/resident-tabs/index.js +6 -0
- package/dist/foundation/resident-tabs/maintenance.d.ts +39 -0
- package/dist/foundation/resident-tabs/maintenance.js +75 -0
- package/dist/foundation/resident-tabs/progress-observation-schema.d.ts +34 -0
- package/dist/foundation/resident-tabs/progress-observation-schema.js +1 -0
- package/dist/foundation/resident-tabs/progress-observation.d.ts +4 -0
- package/dist/foundation/resident-tabs/progress-observation.js +150 -0
- package/dist/foundation/resident-tabs/prompt-journal.d.ts +63 -0
- package/dist/foundation/resident-tabs/prompt-journal.js +213 -0
- package/dist/foundation/resident-tabs/protocol.d.ts +12 -0
- package/dist/foundation/resident-tabs/protocol.js +195 -0
- package/dist/foundation/resident-tabs/recovery.d.ts +26 -0
- package/dist/foundation/resident-tabs/recovery.js +205 -0
- package/dist/foundation/resident-tabs/release-holds.d.ts +28 -0
- package/dist/foundation/resident-tabs/release-holds.js +75 -0
- package/dist/foundation/resident-tabs/routes.d.ts +5 -0
- package/dist/foundation/resident-tabs/routes.js +5 -0
- package/dist/foundation/resident-tabs/routing.d.ts +11 -0
- package/dist/foundation/resident-tabs/routing.js +10 -0
- package/dist/foundation/resident-tabs/session-sync.d.ts +14 -0
- package/dist/foundation/resident-tabs/session-sync.js +37 -0
- package/dist/foundation/resident-tabs/settings.d.ts +12 -0
- package/dist/foundation/resident-tabs/settings.js +58 -0
- package/dist/foundation/resident-tabs/terminal-host-artifact.d.ts +14 -0
- package/dist/foundation/resident-tabs/terminal-host-artifact.js +78 -0
- package/dist/foundation/resident-tabs/zip-archive.d.ts +9 -0
- package/dist/foundation/resident-tabs/zip-archive.js +56 -0
- package/dist/foundation/session-writer-lock/index.d.ts +30 -0
- package/dist/foundation/session-writer-lock/index.js +203 -0
- package/dist/foundation/startup/startup-descriptor.js +2 -2
- package/dist/foundation/terminal-cleanup/index.d.ts +1 -1
- package/dist/foundation/terminal-cleanup/index.js +1 -1
- package/dist/foundation/terminal-cleanup/terminal-reset.d.ts +6 -0
- package/dist/foundation/terminal-cleanup/terminal-reset.js +6 -0
- package/dist/integrations/pi/components/editor-interaction.d.ts +2 -0
- package/dist/integrations/pi/components/modal-frame.d.ts +17 -1
- package/dist/integrations/pi/components/modal-frame.js +48 -9
- package/dist/integrations/pi/components/models-dialog.js +4 -52
- package/dist/integrations/pi/components/owned-editor-ux.d.ts +6 -1
- package/dist/integrations/pi/components/owned-editor-ux.js +90 -6
- package/dist/integrations/pi/components/resources/builtin-themes.d.ts +4 -4
- package/dist/integrations/pi/components/resources/builtin-themes.js +4 -4
- package/dist/integrations/pi/components/share-operation-dialog.d.ts +2 -0
- package/dist/integrations/pi/components/share-operation-dialog.js +2 -1
- package/dist/integrations/pi/components/shell-editor-autocomplete.js +58 -36
- package/dist/integrations/pi/components/shell-extension-ui.js +79 -60
- package/dist/integrations/pi/components/shell-footer-status.d.ts +1 -1
- package/dist/integrations/pi/components/shell-footer-status.js +21 -5
- package/dist/integrations/pi/components/shell-hotkey-sections.js +1 -1
- package/dist/integrations/pi/components/shell-presenters-info.d.ts +5 -2
- package/dist/integrations/pi/components/shell-presenters-info.js +18 -4
- package/dist/integrations/pi/components/shell-presenters-transcript.js +4 -1
- package/dist/integrations/pi/components/shell-selectors-dialogs.js +5 -1
- package/dist/integrations/pi/components/shell-shared-facade.d.ts +12 -1
- package/dist/integrations/pi/components/skills-dialog.js +2 -2
- package/dist/integrations/pi/components/upstream/adjacent/core/keybindings.d.ts +1 -1
- package/dist/integrations/pi/components/upstream/adjacent/core/keybindings.js +17 -4
- package/dist/integrations/pi/components/upstream/assets/earendil-image.json +2 -2
- package/dist/integrations/pi/components/upstream/components/countdown-timer.d.ts +1 -1
- package/dist/integrations/pi/components/upstream/components/earendil-announcement.js +1 -1
- package/dist/integrations/pi/components/upstream/components/extension-editor.d.ts +1 -1
- package/dist/integrations/pi/components/upstream/components/extension-editor.js +1 -1
- package/dist/integrations/pi/components/upstream/components/extension-input.js +1 -1
- package/dist/integrations/pi/components/upstream/components/extension-selector.js +1 -1
- package/dist/integrations/pi/components/upstream/components/mermaid.js +1 -1
- package/dist/integrations/pi/components/upstream/components/owned-editor.d.ts +8 -6
- package/dist/integrations/pi/components/upstream/components/owned-editor.js +16 -9
- package/dist/integrations/pi/components/upstream/components/pi-logo.js +1 -1
- package/dist/integrations/pi/components/upstream/components/scoped-models-selector.d.ts +4 -4
- package/dist/integrations/pi/components/upstream/components/scoped-models-selector.js +2 -2
- package/dist/integrations/pi/components/upstream/components/session-footer.d.ts +2 -1
- package/dist/integrations/pi/components/upstream/components/session-footer.js +31 -25
- package/dist/integrations/pi/components/upstream/components/session-selector-search.js +1 -1
- package/dist/integrations/pi/components/upstream/components/session-selector.js +8 -7
- package/dist/integrations/pi/components/upstream/components/skill-invocation-message.d.ts +1 -1
- package/dist/integrations/pi/components/upstream/components/skill-invocation-message.js +1 -1
- package/dist/integrations/pi/components/upstream/components/status-indicator.d.ts +2 -2
- package/dist/integrations/pi/components/upstream/components/status-indicator.js +3 -3
- package/dist/integrations/pi/components/upstream/components/themed-text.d.ts +1 -1
- package/dist/integrations/pi/components/upstream/components/themed-text.js +1 -1
- package/dist/integrations/pi/components/upstream/components/thinking-selector.d.ts +8 -7
- package/dist/integrations/pi/components/upstream/components/thinking-selector.js +10 -9
- package/dist/integrations/pi/components/upstream/components/tool-execution.d.ts +2 -6
- package/dist/integrations/pi/components/upstream/components/tool-execution.js +103 -101
- package/dist/integrations/pi/components/upstream/components/tree-selector.d.ts +9 -9
- package/dist/integrations/pi/components/upstream/components/tree-selector.js +13 -21
- package/dist/integrations/pi/components/upstream/components/trust-selector.js +1 -1
- package/dist/integrations/pi/components/upstream/external-editor.js +1 -1
- package/dist/integrations/pi/components/upstream/history/editor-core.d.ts +2 -2
- package/dist/integrations/pi/components/upstream/history/editor-core.js +7 -5
- package/dist/integrations/pi/components/upstream/history/kill-ring.d.ts +1 -1
- package/dist/integrations/pi/components/upstream/history/kill-ring.js +1 -1
- package/dist/integrations/pi/components/upstream/history/printable-key.js +1 -1
- package/dist/integrations/pi/components/upstream/history/text-helpers.js +1 -1
- package/dist/integrations/pi/components/upstream/history/undo-stack.d.ts +1 -1
- package/dist/integrations/pi/components/upstream/history/undo-stack.js +1 -1
- package/dist/integrations/pi/components/upstream/history/word-navigation.js +1 -1
- package/dist/integrations/pi/components/upstream/model-search.d.ts +1 -1
- package/dist/integrations/pi/components/upstream/program-status-reporter.d.ts +1 -1
- package/dist/integrations/pi/components/upstream/theme/theme-controller.d.ts +1 -1
- package/dist/integrations/pi/components/upstream/theme/theme.d.ts +5 -0
- package/dist/integrations/pi/components/upstream/theme/theme.js +29 -2
- package/dist/integrations/pi/engine/adapter.d.ts +5 -77
- package/dist/integrations/pi/engine/adapter.js +95 -394
- package/dist/integrations/pi/engine/command-dispatch.d.ts +13 -0
- package/dist/integrations/pi/engine/command-dispatch.js +57 -0
- package/dist/integrations/pi/engine/host.js +2 -2
- package/dist/integrations/pi/engine/offline-settings-port.d.ts +23 -0
- package/dist/integrations/pi/engine/offline-settings-port.js +53 -0
- package/dist/integrations/pi/engine/pi-settings-metadata.json +14 -2
- package/dist/integrations/pi/engine/ports.d.ts +56 -0
- package/dist/integrations/pi/engine/ports.js +93 -0
- package/dist/integrations/pi/engine/prompt-suggestions.d.ts +1 -0
- package/dist/integrations/pi/engine/prompt-suggestions.js +40 -0
- package/dist/integrations/pi/engine/resources/changelog.json +4 -4
- package/dist/integrations/pi/engine/runtime-integration.js +102 -29
- package/dist/integrations/pi/engine/session-runtime.d.ts +0 -6
- package/dist/integrations/pi/engine/session-runtime.js +13 -5
- package/dist/integrations/pi/engine/session-selection.d.ts +3 -0
- package/dist/integrations/pi/engine/session-selection.js +45 -9
- package/dist/integrations/pi/engine/settings-bridge.d.ts +5 -0
- package/dist/integrations/pi/engine/settings-bridge.js +15 -0
- package/dist/integrations/pi/engine/settings-port.js +11 -15
- package/dist/integrations/pi/engine/view-state.d.ts +42 -0
- package/dist/integrations/pi/engine/view-state.js +126 -0
- package/dist/integrations/pi/engine/workflow-contexts.js +10 -1
- package/dist/integrations/pi/engine/workflow-runner.js +73 -4
- package/dist/integrations/pi/engine/workflow-support.d.ts +12 -0
- package/dist/integrations/pi/engine/workflow-support.js +36 -0
- package/dist/integrations/pi/engine/workflows.d.ts +3 -1
- package/dist/integrations/pi/engine/workflows.js +1 -0
- package/dist/integrations/pi/startup-public.js +257 -310
- package/dist/integrations/pi/startup-public.manifest.json +564 -440
- package/dist/integrations/pi/tui-runtime/adapter.d.ts +6 -0
- package/dist/integrations/pi/tui-runtime/adapter.js +32 -1
- package/dist/integrations/pi/tui-runtime/contracts.d.ts +5 -0
- package/dist/integrations/pi/tui-runtime/damage-aware-terminal.d.ts +12 -1
- package/dist/integrations/pi/tui-runtime/damage-aware-terminal.js +31 -2
- package/dist/native/darwin-arm64/manifest.json +10 -7
- package/dist/native/darwin-arm64/process-guardian.node +0 -0
- package/dist/native/darwin-arm64/terminal-host-THIRD-PARTY-NOTICES.txt +10500 -0
- package/dist/native/darwin-arm64/terminal-host.manifest.json +46 -0
- package/dist/native/darwin-arm64/terminal-host.node +0 -0
- package/dist/native/darwin-x64/manifest.json +23 -0
- package/dist/native/darwin-x64/process-guardian.node +0 -0
- package/dist/native/darwin-x64/terminal-host-THIRD-PARTY-NOTICES.txt +10737 -0
- package/dist/native/darwin-x64/terminal-host.manifest.json +46 -0
- package/dist/native/darwin-x64/terminal-host.node +0 -0
- package/dist/native/linux-x64/manifest.json +10 -7
- package/dist/native/linux-x64/process-guardian.node +0 -0
- package/dist/native/linux-x64/terminal-host-THIRD-PARTY-NOTICES.txt +11226 -0
- package/dist/native/linux-x64/terminal-host.manifest.json +46 -0
- package/dist/native/linux-x64/terminal-host.node +0 -0
- package/dist/native/win32-x64/manifest.json +10 -7
- package/dist/native/win32-x64/process-guardian.node +0 -0
- package/dist/native/win32-x64/terminal-host-THIRD-PARTY-NOTICES.txt +10757 -0
- package/dist/native/win32-x64/terminal-host.manifest.json +46 -0
- package/dist/native/win32-x64/terminal-host.node +0 -0
- package/dist/product-identity.d.ts +3 -3
- package/dist/product-identity.js +4 -4
- package/dist/product-identity.json +16 -2
- package/dist/runtime-payload-inventory.json +6330 -6677
- package/dist/ui/apps/host.d.ts +2 -0
- package/dist/ui/apps/host.js +7 -1
- package/dist/ui/components/dialog-panel.js +35 -30
- package/dist/ui/components/index.d.ts +2 -2
- package/dist/ui/components/index.js +1 -1
- package/dist/ui/components/line-input.d.ts +4 -1
- package/dist/ui/components/line-input.js +3 -1
- package/dist/ui/components/prompt-input.d.ts +11 -8
- package/dist/ui/components/prompt-input.js +15 -13
- package/dist/ui/components/selection-copy.d.ts +2 -0
- package/dist/ui/components/selection-copy.js +13 -0
- package/dist/ui/components/spans.js +2 -2
- package/dist/ui/components/submitted-prompt.d.ts +9 -6
- package/dist/ui/components/submitted-prompt.js +20 -12
- package/dist/ui/components/surface.js +4 -2
- package/dist/ui/components/text.d.ts +3 -6
- package/dist/ui/components/text.js +6 -8
- package/dist/ui/components/transcript-viewport.d.ts +9 -2
- package/dist/ui/components/transcript-viewport.js +176 -55
- package/dist/ui/settings/declarations.d.ts +90 -16
- package/dist/ui/settings/declarations.js +67 -14
- package/dist/ui/settings/early-accent.d.ts +81 -0
- package/dist/ui/settings/early-accent.js +50 -0
- package/dist/ui/settings/index.d.ts +4 -2
- package/dist/ui/settings/index.js +2 -1
- package/dist/ui/settings/manager.d.ts +16 -3
- package/dist/ui/settings/manager.js +122 -33
- package/dist/ui/settings/migrations.d.ts +6 -0
- package/dist/ui/settings/migrations.js +73 -0
- package/dist/ui/settings/profile-document.d.ts +26 -0
- package/dist/ui/settings/profile-document.js +164 -0
- package/dist/ui/settings/progress-palette.generated.d.ts +139 -0
- package/dist/ui/settings/progress-palette.generated.js +139 -0
- package/dist/ui/settings/sections.d.ts +4 -0
- package/dist/ui/settings/sections.js +9 -3
- package/docs/architecture/boundaries.md +24 -9
- package/docs/architecture/evidence/resident-tabs/linux-x64.md +37 -0
- package/docs/architecture/evidence/resident-tabs/macos-arm64.md +36 -0
- package/docs/architecture/evidence/resident-tabs/macos-x64.md +35 -0
- package/docs/architecture/evidence/resident-tabs/windows-x64.md +36 -0
- package/docs/architecture/internal-naming.md +3 -1
- package/docs/architecture/process-guardian-provenance.md +18 -10
- package/docs/architecture/project-structure.md +8 -0
- package/docs/architecture/resident-tabs-requirements.md +18 -0
- package/docs/architecture/resident-tabs.md +648 -0
- package/docs/architecture/response-copy-delivery.md +1 -1
- package/docs/architecture/terminal-host-proof-gate.md +2 -0
- package/docs/architecture/terminal-host-provenance.md +16 -4
- package/docs/architecture/tool-image-presentation.md +2 -1
- package/docs/architecture/toolchain.md +11 -9
- package/docs/ci-release-runbook.md +14 -7
- package/docs/features/launch-profiles.md +11 -8
- package/docs/features/prompt-history.md +41 -20
- package/docs/manual-resident-tabs-acceptance.md +51 -0
- package/docs/openspec-archive-automation.md +49 -22
- package/docs/validation.md +49 -9
- package/package.json +19 -6
- package/dist/foundation/process-containment/darwin-process-inspector.d.ts +0 -5
- package/dist/foundation/process-containment/darwin-process-inspector.js +0 -7
- package/dist/foundation/process-containment/native-guardian-containment.js +0 -152
- package/dist/foundation/process-containment/windows-process-inspector.d.ts +0 -19
- package/dist/foundation/process-containment/windows-process-inspector.js +0 -56
- package/dist/native/darwin-arm64/process-guardian +0 -0
- package/dist/native/linux-x64/process-guardian +0 -0
- package/dist/native/win32-x64/process-guardian.exe +0 -0
|
@@ -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;
|
|
@@ -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
|
*/
|
|
@@ -25,6 +25,7 @@ export function createOwnedEditorClass(Base) {
|
|
|
25
25
|
#inputPresentation;
|
|
26
26
|
#styleSuggestion;
|
|
27
27
|
#styleSuggestionCaret;
|
|
28
|
+
#placeholder;
|
|
28
29
|
#terminalRows;
|
|
29
30
|
#getVisualLineCount;
|
|
30
31
|
#clearCommandSearchOnEscape;
|
|
@@ -37,6 +38,7 @@ export function createOwnedEditorClass(Base) {
|
|
|
37
38
|
this.#inputPresentation = options.inputPresentation;
|
|
38
39
|
this.#styleSuggestion = options.styleSuggestion ?? (text => text);
|
|
39
40
|
this.#styleSuggestionCaret = options.styleSuggestionCaret ?? (text => `\u001b[7m${text}\u001b[27m`);
|
|
41
|
+
this.#placeholder = options.placeholder ?? null;
|
|
40
42
|
this.#terminalRows = options.terminalRows ?? (() => 24);
|
|
41
43
|
this.#getVisualLineCount = options.getVisualLineCount;
|
|
42
44
|
this.#clearCommandSearchOnEscape = options.clearCommandSearchOnEscape === true;
|
|
@@ -70,7 +72,12 @@ export function createOwnedEditorClass(Base) {
|
|
|
70
72
|
return rows;
|
|
71
73
|
}
|
|
72
74
|
if (this.#promptSuggestion !== null && this.canPresentPromptSuggestion()) {
|
|
73
|
-
const rows = this.#renderSuggestion(width);
|
|
75
|
+
const rows = this.#renderSuggestion(width, this.#promptSuggestion);
|
|
76
|
+
this.#renderedBodyRowCount = rows.length;
|
|
77
|
+
return rows;
|
|
78
|
+
}
|
|
79
|
+
if (this.#placeholder !== null && this.focused && this.getText().length === 0 && !this.isShowingAutocomplete()) {
|
|
80
|
+
const rows = this.#renderSuggestion(width, this.#placeholder);
|
|
74
81
|
this.#renderedBodyRowCount = rows.length;
|
|
75
82
|
return rows;
|
|
76
83
|
}
|
|
@@ -176,10 +183,10 @@ export function createOwnedEditorClass(Base) {
|
|
|
176
183
|
triggerAutocomplete(this);
|
|
177
184
|
return true;
|
|
178
185
|
}
|
|
179
|
-
#renderSuggestion(width) {
|
|
186
|
+
#renderSuggestion(width, suggestion) {
|
|
180
187
|
const presentation = this.#inputPresentation;
|
|
181
188
|
const { paddingX, contentWidth, layoutWidth } = presentation.geometry(width, this.getPaddingX());
|
|
182
|
-
const chunks = wrapTextWithAnsi(
|
|
189
|
+
const chunks = wrapTextWithAnsi(suggestion, layoutWidth).map(text => ({ text }));
|
|
183
190
|
const maxVisible = Math.max(5, Math.floor(this.#terminalRows() * 0.3));
|
|
184
191
|
const visible = chunks.slice(0, maxVisible);
|
|
185
192
|
const leftPadding = " ".repeat(paddingX);
|
|
@@ -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/pi-logo.ts.
|
|
4
4
|
* Modifications: Remapped the private theme import to A1's public-backed adapter and composed the
|
|
5
5
|
* fixed-color logo into the owned startup header.
|
|
@@ -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/scoped-models-selector.ts.
|
|
4
4
|
* Modifications: Source-synchronized scoped-model selector port: preserve session-only toggles,
|
|
5
5
|
* search, bulk/provider/reorder actions, dirty state, Ctrl+S persistence, refresh status,
|
|
6
6
|
* cancellation, and focus while remapping theme and public helper imports; local key labels preserve
|
|
7
7
|
* pinned platform formatting before layout without changing binding identities, and bare A1 uses the
|
|
8
|
-
* shared semantic modal shortcut row and compact padded modal frame while
|
|
9
|
-
* implicit Ctrl+C selection-cancel alias without advertising it.
|
|
10
|
-
* Deviations: owned-modal-shortcut-hints, owned-dialog-ctrl-c-cancel.
|
|
8
|
+
* shared semantic modal shortcut row, accent search marker, and compact padded modal frame while
|
|
9
|
+
* immediately closing on the implicit Ctrl+C selection-cancel alias without advertising it.
|
|
10
|
+
* Deviations: owned-modal-shortcut-hints, owned-dialog-ctrl-c-cancel, owned-dialog-search-marker.
|
|
11
11
|
*/
|
|
12
12
|
interface ScopedModel {
|
|
13
13
|
readonly provider: string;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Container, fuzzyFilter, getKeybindings, Input, Spacer, Text, } from "@earendil-works/pi-tui";
|
|
2
2
|
import { DynamicBorder } from "../../../startup-public.js";
|
|
3
3
|
import { getModelSearchText } from "../model-search.js";
|
|
4
|
-
import { addPiModalHeader, adoptPiModalFrame } from "../../modal-frame.js";
|
|
4
|
+
import { addPiModalHeader, addPiModalSearchInput, adoptPiModalFrame } from "../../modal-frame.js";
|
|
5
5
|
import { DIALOG_CLOSE_SHORTCUT_HINT, paintPiBorder, piTheme, renderPiModalShortcutHints } from "../../theme.js";
|
|
6
6
|
// Rationale: upstream's capitalized hint formatter is private to the package; the same mapping lives here.
|
|
7
7
|
function keyDisplayText(keybinding) {
|
|
@@ -118,7 +118,7 @@ export class ScopedModelsSelectorComponent extends Container {
|
|
|
118
118
|
this.addChild(new Spacer(1));
|
|
119
119
|
// Search input
|
|
120
120
|
this.searchInput = new Input();
|
|
121
|
-
|
|
121
|
+
addPiModalSearchInput(this, this.searchInput);
|
|
122
122
|
this.addChild(new Spacer(1));
|
|
123
123
|
// List container
|
|
124
124
|
this.listContainer = new Container();
|
|
@@ -5,7 +5,8 @@ export declare class SessionFooter implements Component {
|
|
|
5
5
|
private readonly cwd;
|
|
6
6
|
private readonly profile;
|
|
7
7
|
private readonly show;
|
|
8
|
-
|
|
8
|
+
private readonly showSessionName;
|
|
9
|
+
constructor(getView: () => OwnedUiSessionViewModel, cwd: string, profile?: "pi" | "a1", show?: () => boolean, showSessionName?: boolean);
|
|
9
10
|
invalidate(): void;
|
|
10
11
|
dispose(): void;
|
|
11
12
|
render(width: number): string[];
|
|
@@ -1,12 +1,10 @@
|
|
|
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/footer.ts.
|
|
4
|
-
* Modifications:
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* surfaces may suppress a thinking level they already present.
|
|
9
|
-
* Deviations: owned-status-level-color, owned-pull-request-badge.
|
|
4
|
+
* Modifications: Owned UI/routing; A1 level color, linked PRs, resident names, dim ellipsis and model
|
|
5
|
+
* priority; Pi unchanged.
|
|
6
|
+
* Deviations: owned-status-level-color, owned-pull-request-badge, owned-resident-session-name,
|
|
7
|
+
* owned-footer-ellipsis, owned-footer-model-priority.
|
|
10
8
|
*/
|
|
11
9
|
import { isAbsolute, relative, resolve, sep } from "node:path";
|
|
12
10
|
import { hyperlink, truncateToWidth, visibleWidth } from "@earendil-works/pi-tui";
|
|
@@ -16,11 +14,13 @@ export class SessionFooter {
|
|
|
16
14
|
cwd;
|
|
17
15
|
profile;
|
|
18
16
|
show;
|
|
19
|
-
|
|
17
|
+
showSessionName;
|
|
18
|
+
constructor(getView, cwd, profile = "pi", show = () => true, showSessionName = true) {
|
|
20
19
|
this.getView = getView;
|
|
21
20
|
this.cwd = cwd;
|
|
22
21
|
this.profile = profile;
|
|
23
22
|
this.show = show;
|
|
23
|
+
this.showSessionName = showSessionName;
|
|
24
24
|
}
|
|
25
25
|
invalidate() { }
|
|
26
26
|
dispose() { }
|
|
@@ -28,6 +28,7 @@ export class SessionFooter {
|
|
|
28
28
|
const view = this.getView();
|
|
29
29
|
const usage = view.status.usage;
|
|
30
30
|
const theme = piTheme();
|
|
31
|
+
const dimEllipsis = theme.fg("dim", this.profile === "a1" ? "…" : "...");
|
|
31
32
|
const input = usage?.input ?? 0;
|
|
32
33
|
const output = usage?.output ?? 0;
|
|
33
34
|
const cacheRead = usage?.cacheRead ?? 0;
|
|
@@ -35,17 +36,17 @@ export class SessionFooter {
|
|
|
35
36
|
const cost = usage?.cost ?? 0;
|
|
36
37
|
const contextWindow = usage?.contextWindow ?? 0;
|
|
37
38
|
const contextPercentValue = usage?.contextPercent ?? 0;
|
|
38
|
-
const
|
|
39
|
-
|
|
39
|
+
const contextPercent = usage?.contextAvailable !== false && usage?.contextPercent === null
|
|
40
|
+
? "?" : contextPercentValue.toFixed(1);
|
|
40
41
|
const repositoryPath = this.profile === "a1" ? view.status.footer?.repositoryPath ?? this.cwd : this.cwd;
|
|
41
42
|
let pwd = formatCwd(repositoryPath, process.env.HOME || process.env.USERPROFILE);
|
|
42
43
|
const branch = view.status.footer?.branch;
|
|
43
44
|
if (branch)
|
|
44
45
|
pwd = `${pwd} (${branch})`;
|
|
45
|
-
const sessionName = view.status.footer?.sessionName;
|
|
46
|
+
const sessionName = this.showSessionName ? view.status.footer?.sessionName : null;
|
|
46
47
|
const pullRequest = this.profile === "a1" ? view.status.footer?.pullRequest : null;
|
|
47
48
|
let pathRow;
|
|
48
|
-
if (pullRequest
|
|
49
|
+
if (pullRequest == null) {
|
|
49
50
|
pathRow = theme.fg("dim", sessionName ? `${pwd} • ${sessionName}` : pwd);
|
|
50
51
|
}
|
|
51
52
|
else {
|
|
@@ -56,12 +57,10 @@ export class SessionFooter {
|
|
|
56
57
|
if (visibleWidth(full) <= width)
|
|
57
58
|
pathRow = full;
|
|
58
59
|
else if (visibleWidth(badge) <= width) {
|
|
59
|
-
|
|
60
|
-
const path = pathWidth === 0 ? "" : truncateToWidth(theme.fg("dim", pwd), pathWidth, theme.fg("dim", "..."));
|
|
61
|
-
pathRow = path + badge;
|
|
60
|
+
pathRow = truncateToWidth(theme.fg("dim", pwd), width - visibleWidth(badge), dimEllipsis) + badge;
|
|
62
61
|
}
|
|
63
62
|
else {
|
|
64
|
-
pathRow = truncateToWidth(badge, width,
|
|
63
|
+
pathRow = truncateToWidth(badge, width, dimEllipsis);
|
|
65
64
|
}
|
|
66
65
|
}
|
|
67
66
|
const parts = [];
|
|
@@ -85,7 +84,7 @@ export class SessionFooter {
|
|
|
85
84
|
let left = parts.join(" ");
|
|
86
85
|
let leftWidth = visibleWidth(left);
|
|
87
86
|
if (leftWidth > width) {
|
|
88
|
-
left = truncateToWidth(left, width, "...");
|
|
87
|
+
left = truncateToWidth(left, width, this.profile === "a1" ? dimEllipsis : "...");
|
|
89
88
|
leftWidth = visibleWidth(left);
|
|
90
89
|
}
|
|
91
90
|
const modelName = view.activeModel?.modelId ?? "no-model";
|
|
@@ -93,6 +92,7 @@ export class SessionFooter {
|
|
|
93
92
|
? view.activeModel === null || !this.show() ? theme.fg("dim", modelName)
|
|
94
93
|
: theme.fg("dim", `${modelName} • `) + theme.getThinkingBorderColor(view.thinkingLevel)(view.thinkingLevel)
|
|
95
94
|
: view.activeModel === null || view.thinkingLevel === "off" || !this.show() ? modelName : `${modelName} • ${view.thinkingLevel}`;
|
|
95
|
+
const modelLevel = rightWithoutProvider;
|
|
96
96
|
const routed = view.routedModel;
|
|
97
97
|
if (routed) {
|
|
98
98
|
const level = routed.thinkingLevel === undefined ? "" : ` • ${routed.thinkingLevel}`;
|
|
@@ -106,9 +106,18 @@ export class SessionFooter {
|
|
|
106
106
|
if (leftWidth + 2 + visibleWidth(right) > width)
|
|
107
107
|
right = rightWithoutProvider;
|
|
108
108
|
}
|
|
109
|
+
if (this.profile === "a1" && leftWidth + 2 + visibleWidth(right) > width) {
|
|
110
|
+
right = [rightWithoutProvider, modelLevel].find(value => visibleWidth(value) + 2 <= width)
|
|
111
|
+
?? truncateToWidth(theme.fg("dim", modelName), width, dimEllipsis);
|
|
112
|
+
left = truncateToWidth(left, Math.max(0, width - visibleWidth(right) - 2), dimEllipsis);
|
|
113
|
+
leftWidth = visibleWidth(left);
|
|
114
|
+
}
|
|
109
115
|
const rightWidth = visibleWidth(right);
|
|
110
116
|
let line;
|
|
111
|
-
if (
|
|
117
|
+
if (this.profile === "a1" && leftWidth === 0) {
|
|
118
|
+
line = " ".repeat(Math.max(0, width - rightWidth)) + right;
|
|
119
|
+
}
|
|
120
|
+
else if (leftWidth + 2 + rightWidth <= width) {
|
|
112
121
|
line = left + " ".repeat(width - leftWidth - rightWidth) + right;
|
|
113
122
|
}
|
|
114
123
|
else {
|
|
@@ -121,13 +130,13 @@ export class SessionFooter {
|
|
|
121
130
|
line = left;
|
|
122
131
|
}
|
|
123
132
|
const lines = [
|
|
124
|
-
truncateToWidth(pathRow, width,
|
|
133
|
+
truncateToWidth(pathRow, width, dimEllipsis),
|
|
125
134
|
theme.fg("dim", left) + (this.profile === "a1" ? line.slice(left.length) : theme.fg("dim", line.slice(left.length))),
|
|
126
135
|
];
|
|
127
136
|
const statuses = view.status.footer?.extensionStatuses ?? [];
|
|
128
137
|
if (statuses.length > 0) {
|
|
129
138
|
const status = [...statuses].sort(([leftKey], [rightKey]) => leftKey.localeCompare(rightKey)).map(([, text]) => sanitize(text)).join(" ");
|
|
130
|
-
lines.push(truncateToWidth(status, width,
|
|
139
|
+
lines.push(truncateToWidth(status, width, dimEllipsis));
|
|
131
140
|
}
|
|
132
141
|
return lines;
|
|
133
142
|
}
|
|
@@ -147,11 +156,8 @@ function formatTokens(count) {
|
|
|
147
156
|
function formatCwd(cwd, home) {
|
|
148
157
|
if (!home)
|
|
149
158
|
return cwd;
|
|
150
|
-
const
|
|
151
|
-
|
|
152
|
-
const relativeToHome = relative(resolvedHome, resolvedCwd);
|
|
153
|
-
const inside = relativeToHome === "" || (relativeToHome !== ".." && !relativeToHome.startsWith(`..${sep}`) && !isAbsolute(relativeToHome));
|
|
154
|
-
if (!inside)
|
|
159
|
+
const relativeToHome = relative(resolve(home), resolve(cwd));
|
|
160
|
+
if (isAbsolute(relativeToHome) || relativeToHome === ".." || relativeToHome.startsWith(`..${sep}`))
|
|
155
161
|
return cwd;
|
|
156
162
|
return relativeToHome === "" ? "~" : `~${sep}${relativeToHome}`;
|
|
157
163
|
}
|
|
@@ -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/session-selector-search.ts.
|
|
4
4
|
* Modifications: Source-synchronized session search port with only the public SessionInfo type import
|
|
5
5
|
* remapped.
|