@oh-my-pi/pi-tui 18.2.4 → 18.2.5
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/CHANGELOG.md +23 -0
- package/README.md +43 -0
- package/dist/types/app-keybindings.d.ts +395 -0
- package/dist/types/apps/autoresearch-dashboard.d.ts +43 -0
- package/dist/types/apps/autoresearch-data.d.ts +15 -0
- package/dist/types/apps/cleanse-board.d.ts +66 -0
- package/dist/types/apps/cleanse-picker.d.ts +23 -0
- package/dist/types/apps/debug/log-formatting.d.ts +6 -0
- package/dist/types/apps/debug/log-viewer.d.ts +81 -0
- package/dist/types/apps/debug/protocol-probe.d.ts +42 -0
- package/dist/types/apps/debug/raw-sse-buffer.d.ts +58 -0
- package/dist/types/apps/debug/raw-sse.d.ts +26 -0
- package/dist/types/apps/debug/terminal-info.d.ts +34 -0
- package/dist/types/apps/debug/viewer-frame.d.ts +52 -0
- package/dist/types/apps/git/avatar.d.ts +9 -0
- package/dist/types/apps/git/colors.d.ts +49 -0
- package/dist/types/apps/git/diff-pane.d.ts +188 -0
- package/dist/types/apps/git/git-tui.d.ts +66 -0
- package/dist/types/apps/git/sidebar.d.ts +149 -0
- package/dist/types/apps/git/state.d.ts +117 -0
- package/dist/types/apps/if-bench-board.d.ts +75 -0
- package/dist/types/apps/live-visualizer.d.ts +33 -0
- package/dist/types/apps/ps-data.d.ts +51 -0
- package/dist/types/apps/ps-top.d.ts +33 -0
- package/dist/types/apps/session-picker.d.ts +26 -0
- package/dist/types/apps/setup-model-picker.d.ts +13 -0
- package/dist/types/apps/standalone-picker.d.ts +42 -0
- package/dist/types/autocomplete.d.ts +4 -0
- package/dist/types/chat/advisor-message.d.ts +11 -0
- package/dist/types/chat/assistant-message.d.ts +106 -0
- package/dist/types/chat/background-tan-message.d.ts +9 -0
- package/dist/types/chat/bash-execution.d.ts +47 -0
- package/dist/types/chat/cache-invalidation-marker.d.ts +50 -0
- package/dist/types/chat/chat-transcript-builder.d.ts +50 -0
- package/dist/types/chat/collab-prompt-message.d.ts +10 -0
- package/dist/types/chat/compaction-summary-message.d.ts +54 -0
- package/dist/types/chat/custom-message.d.ts +10 -0
- package/dist/types/chat/display-preferences.d.ts +13 -0
- package/dist/types/chat/eval-execution.d.ts +29 -0
- package/dist/types/chat/execution-shared.d.ts +51 -0
- package/dist/types/chat/extension-types.d.ts +28 -0
- package/dist/types/chat/hook-message.d.ts +10 -0
- package/dist/types/chat/image-loading.d.ts +46 -0
- package/dist/types/chat/late-diagnostics-message.d.ts +21 -0
- package/dist/types/chat/messages.d.ts +189 -0
- package/dist/types/chat/reaction.d.ts +30 -0
- package/dist/types/chat/read-target.d.ts +4 -0
- package/dist/types/chat/read-tool-group.d.ts +67 -0
- package/dist/types/chat/served-model-marker.d.ts +47 -0
- package/dist/types/chat/skill-message.d.ts +33 -0
- package/dist/types/chat/skill-title-input.d.ts +14 -0
- package/dist/types/chat/stripped-tool-calls-placeholder.d.ts +12 -0
- package/dist/types/chat/thinking-display.d.ts +12 -0
- package/dist/types/chat/todo-reminder.d.ts +13 -0
- package/dist/types/chat/tool-execution.d.ts +138 -0
- package/dist/types/chat/transcript-browser.d.ts +93 -0
- package/dist/types/chat/transcript-entry.d.ts +45 -0
- package/dist/types/chat/transcript-outline.d.ts +86 -0
- package/dist/types/chat/transcript-render-helpers.d.ts +92 -0
- package/dist/types/chat/ttsr-notification.d.ts +23 -0
- package/dist/types/chat/user-message.d.ts +52 -0
- package/dist/types/chrome/chat-block.d.ts +64 -0
- package/dist/types/chrome/collab-qrcode.d.ts +28 -0
- package/dist/types/chrome/context-thresholds.d.ts +10 -0
- package/dist/types/chrome/countdown-timer.d.ts +14 -0
- package/dist/types/chrome/diff.d.ts +14 -0
- package/dist/types/chrome/dynamic-border.d.ts +16 -0
- package/dist/types/chrome/error-block.d.ts +17 -0
- package/dist/types/chrome/form-theme.d.ts +3 -0
- package/dist/types/chrome/format.d.ts +12 -0
- package/dist/types/chrome/index.d.ts +20 -0
- package/dist/types/chrome/keybinding-hints.d.ts +40 -0
- package/dist/types/chrome/live-board.d.ts +23 -0
- package/dist/types/chrome/local-date.d.ts +4 -0
- package/dist/types/chrome/message-divider.d.ts +22 -0
- package/dist/types/chrome/message-frame.d.ts +52 -0
- package/dist/types/chrome/message-notice.d.ts +35 -0
- package/dist/types/chrome/overlay-box.d.ts +74 -0
- package/dist/types/chrome/qrcode.d.ts +48 -0
- package/dist/types/chrome/segment-track.d.ts +27 -0
- package/dist/types/chrome/select-list-mouse-routing.d.ts +4 -0
- package/dist/types/chrome/selector-helpers.d.ts +52 -0
- package/dist/types/chrome/shared.d.ts +5 -0
- package/dist/types/chrome/streaming-panel.d.ts +19 -0
- package/dist/types/chrome/tool-activity.d.ts +17 -0
- package/dist/types/chrome/transcript-container.d.ts +129 -0
- package/dist/types/chrome/transcript-status.d.ts +12 -0
- package/dist/types/chrome/visual-truncate.d.ts +19 -0
- package/dist/types/components/disclosure.d.ts +42 -0
- package/dist/types/components/form.d.ts +130 -0
- package/dist/types/components/key-value-list.d.ts +24 -0
- package/dist/types/components/layout/geometry.d.ts +73 -0
- package/dist/types/components/layout/row.d.ts +55 -0
- package/dist/types/components/layout/split-pane.d.ts +80 -0
- package/dist/types/components/layout/stack.d.ts +50 -0
- package/dist/types/components/menu-selection.d.ts +71 -0
- package/dist/types/components/metric.d.ts +44 -0
- package/dist/types/components/progress-bar.d.ts +36 -0
- package/dist/types/components/scroll-view.d.ts +53 -19
- package/dist/types/components/scroll-viewport.d.ts +46 -0
- package/dist/types/components/section.d.ts +19 -0
- package/dist/types/components/select-list.d.ts +46 -2
- package/dist/types/components/settings-list.d.ts +20 -0
- package/dist/types/components/table.d.ts +32 -0
- package/dist/types/components/tree-view.d.ts +130 -0
- package/dist/types/components/wizard-step.d.ts +60 -0
- package/dist/types/hotkeys-markdown.d.ts +7 -0
- package/dist/types/index.d.ts +17 -0
- package/dist/types/keybinding-matchers.d.ts +35 -0
- package/dist/types/keys.d.ts +2 -2
- package/dist/types/lang-from-path.d.ts +9 -0
- package/dist/types/overlays/advisor-config.d.ts +114 -0
- package/dist/types/overlays/agent-activity.d.ts +41 -0
- package/dist/types/overlays/agent-hub-projection.d.ts +33 -0
- package/dist/types/overlays/agent-hub-renderer.d.ts +53 -0
- package/dist/types/overlays/agent-hub-types.d.ts +99 -0
- package/dist/types/overlays/agent-hub.d.ts +126 -0
- package/dist/types/overlays/agent-transcript-viewer.d.ts +71 -0
- package/dist/types/overlays/agents-hub.d.ts +72 -0
- package/dist/types/overlays/ask-dialog.d.ts +88 -0
- package/dist/types/overlays/bordered-loader.d.ts +11 -0
- package/dist/types/overlays/btw-history-panel.d.ts +29 -0
- package/dist/types/overlays/btw-history.d.ts +17 -0
- package/dist/types/overlays/btw-panel.d.ts +26 -0
- package/dist/types/overlays/cleanse-panel.d.ts +36 -0
- package/dist/types/overlays/codex-reset-fireworks.d.ts +52 -0
- package/dist/types/overlays/composer-shape-preview.d.ts +47 -0
- package/dist/types/overlays/composer-shape-registry.d.ts +50 -0
- package/dist/types/overlays/copy-selector.d.ts +48 -0
- package/dist/types/overlays/copy-targets.d.ts +63 -0
- package/dist/types/overlays/error-banner.d.ts +13 -0
- package/dist/types/overlays/extensions/display-text.d.ts +10 -0
- package/dist/types/overlays/extensions/extension-dashboard.d.ts +63 -0
- package/dist/types/overlays/extensions/extension-list.d.ts +54 -0
- package/dist/types/overlays/extensions/inspector-model.d.ts +109 -0
- package/dist/types/overlays/extensions/inspector-panel.d.ts +17 -0
- package/dist/types/overlays/extensions/live-tool-session.d.ts +28 -0
- package/dist/types/overlays/extensions/mcp-runtime.d.ts +107 -0
- package/dist/types/overlays/extensions/state-manager.d.ts +42 -0
- package/dist/types/overlays/extensions/types.d.ts +165 -0
- package/dist/types/overlays/history-search.d.ts +16 -0
- package/dist/types/overlays/hook-editor.d.ts +44 -0
- package/dist/types/overlays/hook-input.d.ts +20 -0
- package/dist/types/overlays/hook-selector.d.ts +71 -0
- package/dist/types/overlays/hub-frame.d.ts +77 -0
- package/dist/types/overlays/login-dialog.d.ts +43 -0
- package/dist/types/overlays/logout-account-selector.d.ts +15 -0
- package/dist/types/overlays/mcp-add-wizard.d.ts +87 -0
- package/dist/types/overlays/model-browser.d.ts +213 -0
- package/dist/types/overlays/model-hub.d.ts +72 -0
- package/dist/types/overlays/model-picker.d.ts +74 -0
- package/dist/types/overlays/model-selector.d.ts +52 -0
- package/dist/types/overlays/move-overlay.d.ts +39 -0
- package/dist/types/overlays/oauth-selector.d.ts +41 -0
- package/dist/types/overlays/omfg-panel.d.ts +20 -0
- package/dist/types/overlays/pause-screen.d.ts +43 -0
- package/dist/types/overlays/plan-review-overlay.d.ts +89 -0
- package/dist/types/overlays/plan-save-overlay.d.ts +19 -0
- package/dist/types/overlays/plan-toc.d.ts +41 -0
- package/dist/types/overlays/plugin-selector.d.ts +28 -0
- package/dist/types/overlays/plugin-settings.d.ts +180 -0
- package/dist/types/overlays/queue-mode-selector.d.ts +11 -0
- package/dist/types/overlays/reset-usage-selector.d.ts +23 -0
- package/dist/types/overlays/rewind-selector.d.ts +61 -0
- package/dist/types/overlays/running-subagent-badge.d.ts +6 -0
- package/dist/types/overlays/session-account-selector.d.ts +24 -0
- package/dist/types/overlays/session-info-overlay.d.ts +17 -0
- package/dist/types/overlays/session-observer-registry.d.ts +77 -0
- package/dist/types/overlays/session-selector.d.ts +131 -0
- package/dist/types/overlays/settings-defs.d.ts +119 -0
- package/dist/types/overlays/settings-selector.d.ts +73 -0
- package/dist/types/overlays/show-images-selector.d.ts +11 -0
- package/dist/types/overlays/snapcompact-shape-preview.d.ts +31 -0
- package/dist/types/overlays/theme-selector.d.ts +12 -0
- package/dist/types/overlays/thinking-selector.d.ts +12 -0
- package/dist/types/overlays/tiny-title-download-progress.d.ts +21 -0
- package/dist/types/overlays/tree-selector.d.ts +92 -0
- package/dist/types/overlays/usage-dashboard.d.ts +94 -0
- package/dist/types/overlays/usage-display.d.ts +5 -0
- package/dist/types/overlays/usage-row.d.ts +17 -0
- package/dist/types/prompt/attachment-chips.d.ts +19 -0
- package/dist/types/prompt/composer-attachments.d.ts +71 -0
- package/dist/types/prompt/composer-cache.d.ts +37 -0
- package/dist/types/prompt/composer.d.ts +159 -0
- package/dist/types/prompt/custom-editor.d.ts +261 -0
- package/dist/types/prompt/editor-top-gap.d.ts +18 -0
- package/dist/types/prompt/emoji-autocomplete.d.ts +16 -0
- package/dist/types/prompt/github-ref-autocomplete.d.ts +35 -0
- package/dist/types/prompt/gradient-highlight.d.ts +32 -0
- package/dist/types/prompt/image-format.d.ts +4 -0
- package/dist/types/prompt/image-references.d.ts +26 -0
- package/dist/types/prompt/interactive-context-helpers.d.ts +43 -0
- package/dist/types/prompt/internal-url-autocomplete.d.ts +56 -0
- package/dist/types/prompt/macos-spelling.d.ts +44 -0
- package/dist/types/prompt/magic-keyword-boundary.d.ts +9 -0
- package/dist/types/prompt/magic-keywords.d.ts +26 -0
- package/dist/types/prompt/markdown-prose.d.ts +15 -0
- package/dist/types/prompt/model-mention-autocomplete.d.ts +25 -0
- package/dist/types/prompt/model-mention-syntax.d.ts +24 -0
- package/dist/types/prompt/orchestrate.d.ts +13 -0
- package/dist/types/prompt/prompt-action-autocomplete.d.ts +56 -0
- package/dist/types/prompt/queue-input.d.ts +8 -0
- package/dist/types/prompt/skill-tokens.d.ts +13 -0
- package/dist/types/prompt/tools-markdown.d.ts +12 -0
- package/dist/types/prompt/ultrathink.d.ts +13 -0
- package/dist/types/prompt/usage-amounts.d.ts +26 -0
- package/dist/types/prompt/video.d.ts +18 -0
- package/dist/types/prompt/welcome.d.ts +83 -0
- package/dist/types/prompt/workflow.d.ts +13 -0
- package/dist/types/render/code-cell.d.ts +51 -0
- package/dist/types/render/file-list.d.ts +22 -0
- package/dist/types/render/hyperlink.d.ts +80 -0
- package/dist/types/render/index.d.ts +16 -0
- package/dist/types/render/output-block.d.ts +54 -0
- package/dist/types/render/output-pane.d.ts +80 -0
- package/dist/types/render/render-utils.d.ts +312 -0
- package/dist/types/render/sixel.d.ts +21 -0
- package/dist/types/render/status-line.d.ts +23 -0
- package/dist/types/render/tool-card.d.ts +71 -0
- package/dist/types/render/tree-list.d.ts +29 -0
- package/dist/types/render/types.d.ts +17 -0
- package/dist/types/render/utils.d.ts +43 -0
- package/dist/types/render/width-aware-text.d.ts +23 -0
- package/dist/types/setup/lazy.d.ts +3 -0
- package/dist/types/setup/scenes/composer.d.ts +3 -0
- package/dist/types/setup/scenes/glyph.d.ts +3 -0
- package/dist/types/setup/scenes/model.d.ts +3 -0
- package/dist/types/setup/scenes/outro.d.ts +2 -0
- package/dist/types/setup/scenes/providers.d.ts +3 -0
- package/dist/types/setup/scenes/sign-in.d.ts +21 -0
- package/dist/types/setup/scenes/splash.d.ts +11 -0
- package/dist/types/setup/scenes/theme.d.ts +3 -0
- package/dist/types/setup/scenes/types.d.ts +110 -0
- package/dist/types/setup/scenes/web-search.d.ts +22 -0
- package/dist/types/setup/setup-version.d.ts +11 -0
- package/dist/types/setup/startup-splash.d.ts +9 -0
- package/dist/types/setup/wizard-overlay.d.ts +16 -0
- package/dist/types/setup/wizard.d.ts +25 -0
- package/dist/types/status-line/component.d.ts +182 -0
- package/dist/types/status-line/context-usage.d.ts +156 -0
- package/dist/types/status-line/footer.d.ts +30 -0
- package/dist/types/status-line/git-utils.d.ts +22 -0
- package/dist/types/status-line/host.d.ts +129 -0
- package/dist/types/status-line/index.d.ts +6 -0
- package/dist/types/status-line/loop.d.ts +18 -0
- package/dist/types/status-line/metrics.d.ts +21 -0
- package/dist/types/status-line/presets.d.ts +3 -0
- package/dist/types/status-line/schema.d.ts +15 -0
- package/dist/types/status-line/segments.d.ts +5 -0
- package/dist/types/status-line/separators.d.ts +3 -0
- package/dist/types/status-line/types.d.ts +236 -0
- package/dist/types/stdin-buffer.d.ts +4 -0
- package/dist/types/theme/color.d.ts +24 -0
- package/dist/types/theme/defaults/index.d.ts +9489 -0
- package/dist/types/theme/index.d.ts +4 -0
- package/dist/types/theme/loader.d.ts +23 -0
- package/dist/types/theme/mermaid-cache.d.ts +26 -0
- package/dist/types/theme/schema-validation.d.ts +3 -0
- package/dist/types/theme/schema.d.ts +25 -0
- package/dist/types/theme/session-color.d.ts +43 -0
- package/dist/types/theme/shimmer.d.ts +44 -0
- package/dist/types/theme/symbols.d.ts +34 -0
- package/dist/types/theme/theme-class.d.ts +299 -0
- package/dist/types/theme/theme.d.ts +111 -0
- package/dist/types/theme/tui-adapters.d.ts +30 -0
- package/dist/types/thinking.d.ts +165 -0
- package/dist/types/tools/agent-tree.d.ts +36 -0
- package/dist/types/tools/ask.d.ts +67 -0
- package/dist/types/tools/ast-edit.d.ts +53 -0
- package/dist/types/tools/ast-grep.d.ts +52 -0
- package/dist/types/tools/autoresearch.d.ts +156 -0
- package/dist/types/tools/bash-interactive.d.ts +28 -0
- package/dist/types/tools/bash.d.ts +103 -0
- package/dist/types/tools/conflict-detect.d.ts +43 -0
- package/dist/types/tools/debug.d.ts +60 -0
- package/dist/types/tools/default-renderer.d.ts +24 -0
- package/dist/types/tools/edit.d.ts +158 -0
- package/dist/types/tools/eval-format/code-mode-declarations.d.ts +5 -0
- package/dist/types/tools/eval-format/index.d.ts +5 -0
- package/dist/types/tools/eval-format/javascript.d.ts +2 -0
- package/dist/types/tools/eval-format/python.d.ts +2 -0
- package/dist/types/tools/eval.d.ts +94 -0
- package/dist/types/tools/fetch.d.ts +42 -0
- package/dist/types/tools/gh-format.d.ts +8 -0
- package/dist/types/tools/github.d.ts +144 -0
- package/dist/types/tools/glob.d.ts +44 -0
- package/dist/types/tools/goal.d.ts +42 -0
- package/dist/types/tools/grep.d.ts +64 -0
- package/dist/types/tools/grouped-file-output.d.ts +71 -0
- package/dist/types/tools/hashline-format.d.ts +28 -0
- package/dist/types/tools/hub.d.ts +340 -0
- package/dist/types/tools/index.d.ts +4 -0
- package/dist/types/tools/json-tree.d.ts +59 -0
- package/dist/types/tools/line-ranges.d.ts +29 -0
- package/dist/types/tools/list-limit.d.ts +15 -0
- package/dist/types/tools/lsp.d.ts +72 -0
- package/dist/types/tools/match-line-format.d.ts +11 -0
- package/dist/types/tools/mcp.d.ts +81 -0
- package/dist/types/tools/memory.d.ts +67 -0
- package/dist/types/tools/output-meta.d.ts +151 -0
- package/dist/types/tools/read.d.ts +139 -0
- package/dist/types/tools/renderer.d.ts +98 -0
- package/dist/types/tools/report-tool-issue.d.ts +8 -0
- package/dist/types/tools/resolve.d.ts +47 -0
- package/dist/types/tools/streaming-output.d.ts +282 -0
- package/dist/types/tools/subprocess.d.ts +24 -0
- package/dist/types/tools/task-repair-args.d.ts +53 -0
- package/dist/types/tools/task-yield-assembly.d.ts +20 -0
- package/dist/types/tools/task.d.ts +425 -0
- package/dist/types/tools/terminal-output.d.ts +8 -0
- package/dist/types/tools/think.d.ts +13 -0
- package/dist/types/tools/todo.d.ts +118 -0
- package/dist/types/tools/tool-errors.d.ts +7 -0
- package/dist/types/tools/vibe.d.ts +120 -0
- package/dist/types/tools/web-search.d.ts +195 -0
- package/dist/types/tools/write.d.ts +76 -0
- package/dist/types/tools/xd-url.d.ts +13 -0
- package/dist/types/tools/xdev.d.ts +52 -0
- package/dist/types/tui.d.ts +18 -0
- package/dist/types/utils.d.ts +2 -0
- package/package.json +37 -3
- package/src/app-keybindings.ts +760 -0
- package/src/apps/autoresearch-dashboard.ts +500 -0
- package/src/apps/autoresearch-data.ts +64 -0
- package/src/apps/cleanse-board.ts +341 -0
- package/src/apps/cleanse-picker.ts +57 -0
- package/src/apps/debug/log-formatting.ts +53 -0
- package/src/apps/debug/log-viewer.ts +868 -0
- package/src/apps/debug/protocol-probe.ts +267 -0
- package/src/apps/debug/raw-sse-buffer.ts +449 -0
- package/src/apps/debug/raw-sse.ts +282 -0
- package/src/apps/debug/terminal-info.ts +115 -0
- package/src/apps/debug/viewer-frame.ts +174 -0
- package/src/apps/git/avatar.ts +52 -0
- package/src/apps/git/colors.ts +109 -0
- package/src/apps/git/diff-pane.ts +1512 -0
- package/src/apps/git/git-tui.ts +889 -0
- package/src/apps/git/sidebar.ts +1204 -0
- package/src/apps/git/state.ts +113 -0
- package/src/apps/if-bench-board.ts +324 -0
- package/src/apps/live-visualizer.ts +238 -0
- package/src/apps/ps-data.ts +116 -0
- package/src/apps/ps-top.ts +422 -0
- package/src/apps/session-picker.ts +95 -0
- package/src/apps/setup-model-picker.ts +21 -0
- package/src/apps/standalone-picker.ts +111 -0
- package/src/autocomplete.ts +9 -13
- package/src/chat/advisor-message.ts +175 -0
- package/src/chat/assistant-message.ts +1214 -0
- package/src/chat/background-tan-message.ts +35 -0
- package/src/chat/bash-execution.ts +394 -0
- package/src/chat/cache-invalidation-marker.ts +94 -0
- package/src/chat/chat-transcript-builder.ts +593 -0
- package/src/chat/collab-prompt-message.ts +34 -0
- package/src/chat/compaction-summary-message.ts +261 -0
- package/src/chat/custom-message.ts +23 -0
- package/src/chat/display-preferences.ts +24 -0
- package/src/chat/eval-execution.ts +172 -0
- package/src/chat/execution-shared.ts +113 -0
- package/src/chat/extension-types.ts +46 -0
- package/src/chat/hook-message.ts +20 -0
- package/src/chat/image-loading.ts +122 -0
- package/src/chat/late-diagnostics-message.ts +92 -0
- package/src/chat/messages.ts +305 -0
- package/src/chat/reaction.ts +65 -0
- package/src/chat/read-target.ts +7 -0
- package/src/chat/read-tool-group.ts +873 -0
- package/src/chat/served-model-marker.ts +91 -0
- package/src/chat/skill-message.ts +220 -0
- package/src/chat/skill-title-input.ts +41 -0
- package/src/chat/stripped-tool-calls-placeholder.ts +35 -0
- package/src/chat/thinking-display.ts +312 -0
- package/src/chat/todo-reminder.ts +33 -0
- package/src/chat/tool-execution.ts +1395 -0
- package/src/chat/transcript-browser.ts +268 -0
- package/src/chat/transcript-entry.ts +96 -0
- package/src/chat/transcript-outline.ts +260 -0
- package/src/chat/transcript-render-helpers.ts +315 -0
- package/src/chat/ttsr-notification.ts +123 -0
- package/src/chat/user-message.ts +287 -0
- package/src/chrome/chat-block.ts +110 -0
- package/src/chrome/collab-qrcode.ts +74 -0
- package/src/chrome/context-thresholds.ts +85 -0
- package/src/chrome/countdown-timer.ts +74 -0
- package/src/chrome/diff.ts +266 -0
- package/src/chrome/dynamic-border.ts +36 -0
- package/src/chrome/error-block.ts +63 -0
- package/src/chrome/form-theme.ts +10 -0
- package/src/chrome/format.ts +66 -0
- package/src/chrome/index.ts +21 -0
- package/src/chrome/keybinding-hints.ts +55 -0
- package/src/chrome/live-board.ts +123 -0
- package/src/chrome/local-date.ts +20 -0
- package/src/chrome/message-divider.ts +51 -0
- package/src/chrome/message-frame.ts +164 -0
- package/src/chrome/message-notice.ts +103 -0
- package/src/chrome/overlay-box.ts +301 -0
- package/src/chrome/qrcode.ts +539 -0
- package/src/chrome/segment-track.ts +86 -0
- package/src/chrome/select-list-mouse-routing.ts +11 -0
- package/src/chrome/selector-helpers.ts +119 -0
- package/src/chrome/shared.ts +27 -0
- package/src/chrome/streaming-panel.ts +72 -0
- package/src/chrome/tool-activity.ts +44 -0
- package/src/chrome/transcript-container.ts +902 -0
- package/src/chrome/transcript-status.ts +27 -0
- package/src/chrome/visual-truncate.ts +70 -0
- package/src/components/disclosure.ts +235 -0
- package/src/components/editor.ts +10 -12
- package/src/components/form.ts +566 -0
- package/src/components/input.ts +6 -27
- package/src/components/key-value-list.ts +88 -0
- package/src/components/layout/geometry.ts +202 -0
- package/src/components/layout/row.ts +283 -0
- package/src/components/layout/split-pane.ts +349 -0
- package/src/components/layout/stack.ts +261 -0
- package/src/components/markdown.ts +16 -12
- package/src/components/menu-selection.ts +248 -0
- package/src/components/metric.ts +132 -0
- package/src/components/progress-bar.ts +140 -0
- package/src/components/scroll-view.ts +372 -70
- package/src/components/scroll-viewport.ts +154 -0
- package/src/components/section.ts +77 -0
- package/src/components/select-list.ts +238 -159
- package/src/components/settings-list.ts +103 -80
- package/src/components/table.ts +127 -0
- package/src/components/tree-view.ts +481 -0
- package/src/components/wizard-step.ts +229 -0
- package/src/deccara.ts +1 -3
- package/src/hotkeys-markdown.ts +100 -0
- package/src/index.ts +18 -0
- package/src/keybinding-matchers.ts +99 -0
- package/src/keys.ts +2 -2
- package/src/lang-from-path.ts +252 -0
- package/src/overlays/advisor-config.ts +761 -0
- package/src/overlays/agent-activity.ts +113 -0
- package/src/overlays/agent-hub-projection.ts +250 -0
- package/src/overlays/agent-hub-renderer.ts +281 -0
- package/src/overlays/agent-hub-types.ts +74 -0
- package/src/overlays/agent-hub.ts +1562 -0
- package/src/overlays/agent-transcript-viewer.ts +669 -0
- package/src/overlays/agents-hub.ts +1203 -0
- package/src/overlays/ask-dialog.ts +1202 -0
- package/src/overlays/bordered-loader.ts +41 -0
- package/src/overlays/btw-history-panel.ts +591 -0
- package/src/overlays/btw-history.ts +33 -0
- package/src/overlays/btw-panel.ts +167 -0
- package/src/overlays/cleanse-panel.ts +167 -0
- package/src/overlays/codex-reset-fireworks.ts +375 -0
- package/src/overlays/composer-shape-preview.ts +137 -0
- package/src/overlays/composer-shape-registry.ts +82 -0
- package/src/overlays/copy-selector.ts +618 -0
- package/src/overlays/copy-targets.ts +210 -0
- package/src/overlays/error-banner.ts +39 -0
- package/src/overlays/extensions/display-text.ts +39 -0
- package/src/overlays/extensions/extension-dashboard.ts +645 -0
- package/src/overlays/extensions/extension-list.ts +667 -0
- package/src/overlays/extensions/inspector-model.ts +484 -0
- package/src/overlays/extensions/inspector-panel.ts +669 -0
- package/src/overlays/extensions/live-tool-session.ts +67 -0
- package/src/overlays/extensions/mcp-runtime.ts +289 -0
- package/src/overlays/extensions/state-manager.ts +337 -0
- package/src/overlays/extensions/types.ts +208 -0
- package/src/overlays/history-search.ts +268 -0
- package/src/overlays/hook-editor.ts +272 -0
- package/src/overlays/hook-input.ts +84 -0
- package/src/overlays/hook-selector.ts +635 -0
- package/src/overlays/hub-frame.ts +262 -0
- package/src/overlays/login-dialog.ts +231 -0
- package/src/overlays/logout-account-selector.ts +115 -0
- package/src/overlays/mcp-add-wizard.ts +1436 -0
- package/src/overlays/model-browser.ts +1176 -0
- package/src/overlays/model-hub.ts +2279 -0
- package/src/overlays/model-picker.ts +285 -0
- package/src/overlays/model-selector.ts +107 -0
- package/src/overlays/move-overlay.ts +197 -0
- package/src/overlays/oauth-selector.ts +446 -0
- package/src/overlays/omfg-panel.ts +136 -0
- package/src/overlays/pause-screen.ts +198 -0
- package/src/overlays/plan-review-overlay.ts +1227 -0
- package/src/overlays/plan-save-overlay.ts +74 -0
- package/src/overlays/plan-toc.ts +139 -0
- package/src/overlays/plugin-selector.ts +97 -0
- package/src/overlays/plugin-settings.ts +839 -0
- package/src/overlays/queue-mode-selector.ts +55 -0
- package/src/overlays/reset-usage-selector.ts +170 -0
- package/src/overlays/rewind-selector.ts +499 -0
- package/src/overlays/running-subagent-badge.ts +19 -0
- package/src/overlays/session-account-selector.ts +68 -0
- package/src/overlays/session-info-overlay.ts +96 -0
- package/src/overlays/session-observer-registry.ts +289 -0
- package/src/overlays/session-selector.ts +1137 -0
- package/src/overlays/settings-defs.ts +315 -0
- package/src/overlays/settings-selector.ts +1415 -0
- package/src/overlays/show-images-selector.ts +44 -0
- package/src/overlays/snapcompact-shape-preview-doc.md +14 -0
- package/src/overlays/snapcompact-shape-preview.ts +192 -0
- package/src/overlays/theme-selector.ts +62 -0
- package/src/overlays/thinking-selector.ts +51 -0
- package/src/overlays/tiny-title-download-progress.ts +102 -0
- package/src/overlays/tree-selector.ts +1121 -0
- package/src/overlays/usage-dashboard.ts +629 -0
- package/src/overlays/usage-display.ts +45 -0
- package/src/overlays/usage-row.ts +118 -0
- package/src/prompt/attachment-chips.ts +201 -0
- package/src/prompt/composer-attachments.ts +280 -0
- package/src/prompt/composer-cache.ts +304 -0
- package/src/prompt/composer.ts +934 -0
- package/src/prompt/custom-editor.ts +1392 -0
- package/src/prompt/data/emojis.json +1 -0
- package/src/prompt/editor-top-gap.ts +28 -0
- package/src/prompt/emoji-autocomplete.ts +285 -0
- package/src/prompt/github-ref-autocomplete.ts +75 -0
- package/src/prompt/gradient-highlight.ts +101 -0
- package/src/prompt/image-format.ts +28 -0
- package/src/prompt/image-references.ts +102 -0
- package/src/prompt/interactive-context-helpers.ts +126 -0
- package/src/prompt/internal-url-autocomplete.ts +155 -0
- package/src/prompt/macos-spelling.ts +456 -0
- package/src/prompt/magic-keyword-boundary.ts +23 -0
- package/src/prompt/magic-keywords.ts +42 -0
- package/src/prompt/markdown-prose.ts +245 -0
- package/src/prompt/model-mention-autocomplete.ts +94 -0
- package/src/prompt/model-mention-syntax.ts +41 -0
- package/src/prompt/orchestrate.ts +26 -0
- package/src/prompt/prompt-action-autocomplete.ts +337 -0
- package/src/prompt/queue-input.ts +132 -0
- package/src/prompt/skill-tokens.ts +36 -0
- package/src/prompt/tips.txt +27 -0
- package/src/prompt/tools-markdown.ts +29 -0
- package/src/prompt/ultrathink.ts +26 -0
- package/src/prompt/usage-amounts.ts +99 -0
- package/src/prompt/video.ts +47 -0
- package/src/prompt/welcome.ts +605 -0
- package/src/prompt/workflow.ts +26 -0
- package/src/render/code-cell.ts +244 -0
- package/src/render/file-list.ts +58 -0
- package/src/render/hyperlink.ts +192 -0
- package/src/render/index.ts +17 -0
- package/src/render/output-block.ts +267 -0
- package/src/render/output-pane.ts +299 -0
- package/src/render/render-utils.ts +1182 -0
- package/src/render/sixel.ts +69 -0
- package/src/render/status-line.ts +55 -0
- package/src/render/tool-card.ts +272 -0
- package/src/render/tree-list.ts +188 -0
- package/src/render/types.ts +19 -0
- package/src/render/utils.ts +109 -0
- package/src/render/width-aware-text.ts +60 -0
- package/src/setup/lazy.ts +17 -0
- package/src/setup/scenes/composer.ts +127 -0
- package/src/setup/scenes/glyph.ts +120 -0
- package/src/setup/scenes/model.ts +138 -0
- package/src/setup/scenes/outro.ts +24 -0
- package/src/setup/scenes/providers.ts +107 -0
- package/src/setup/scenes/sign-in.ts +373 -0
- package/src/setup/scenes/splash.ts +192 -0
- package/src/setup/scenes/theme.ts +343 -0
- package/src/setup/scenes/types.ts +111 -0
- package/src/setup/scenes/web-search.ts +165 -0
- package/src/setup/setup-version.ts +11 -0
- package/src/setup/startup-splash.ts +107 -0
- package/src/setup/wizard-overlay.ts +319 -0
- package/src/setup/wizard.ts +101 -0
- package/src/status-line/component.ts +3003 -0
- package/src/status-line/context-usage.ts +688 -0
- package/src/status-line/footer.ts +323 -0
- package/src/status-line/git-utils.ts +42 -0
- package/src/status-line/host.ts +97 -0
- package/src/status-line/index.ts +6 -0
- package/src/status-line/loop.ts +28 -0
- package/src/status-line/metrics.ts +94 -0
- package/src/status-line/presets.ts +107 -0
- package/src/status-line/schema.ts +57 -0
- package/src/status-line/segments.ts +934 -0
- package/src/status-line/separators.ts +55 -0
- package/src/status-line/types.ts +227 -0
- package/src/stdin-buffer.ts +4 -2
- package/src/theme/color.ts +95 -0
- package/src/theme/dark.json +95 -0
- package/src/theme/defaults/alabaster.json +93 -0
- package/src/theme/defaults/amethyst.json +96 -0
- package/src/theme/defaults/anthracite.json +93 -0
- package/src/theme/defaults/basalt.json +91 -0
- package/src/theme/defaults/birch.json +95 -0
- package/src/theme/defaults/dark-abyss.json +91 -0
- package/src/theme/defaults/dark-arctic.json +104 -0
- package/src/theme/defaults/dark-aurora.json +95 -0
- package/src/theme/defaults/dark-catppuccin.json +107 -0
- package/src/theme/defaults/dark-cavern.json +91 -0
- package/src/theme/defaults/dark-celestial.json +106 -0
- package/src/theme/defaults/dark-copper.json +95 -0
- package/src/theme/defaults/dark-cosmos.json +90 -0
- package/src/theme/defaults/dark-cyberpunk.json +102 -0
- package/src/theme/defaults/dark-dracula.json +98 -0
- package/src/theme/defaults/dark-eclipse.json +91 -0
- package/src/theme/defaults/dark-ember.json +95 -0
- package/src/theme/defaults/dark-equinox.json +90 -0
- package/src/theme/defaults/dark-forest.json +96 -0
- package/src/theme/defaults/dark-github.json +105 -0
- package/src/theme/defaults/dark-gruvbox.json +112 -0
- package/src/theme/defaults/dark-lavender.json +95 -0
- package/src/theme/defaults/dark-lunar.json +89 -0
- package/src/theme/defaults/dark-midnight.json +95 -0
- package/src/theme/defaults/dark-monochrome.json +94 -0
- package/src/theme/defaults/dark-monokai.json +98 -0
- package/src/theme/defaults/dark-nebula.json +90 -0
- package/src/theme/defaults/dark-nord.json +98 -0
- package/src/theme/defaults/dark-ocean.json +101 -0
- package/src/theme/defaults/dark-one.json +100 -0
- package/src/theme/defaults/dark-poimandres.json +115 -0
- package/src/theme/defaults/dark-rainforest.json +91 -0
- package/src/theme/defaults/dark-reef.json +91 -0
- package/src/theme/defaults/dark-retro.json +92 -0
- package/src/theme/defaults/dark-rose-pine.json +96 -0
- package/src/theme/defaults/dark-sakura.json +95 -0
- package/src/theme/defaults/dark-slate.json +95 -0
- package/src/theme/defaults/dark-solarized.json +97 -0
- package/src/theme/defaults/dark-solstice.json +90 -0
- package/src/theme/defaults/dark-starfall.json +91 -0
- package/src/theme/defaults/dark-sunset.json +99 -0
- package/src/theme/defaults/dark-swamp.json +90 -0
- package/src/theme/defaults/dark-synthwave.json +103 -0
- package/src/theme/defaults/dark-taiga.json +91 -0
- package/src/theme/defaults/dark-terminal.json +95 -0
- package/src/theme/defaults/dark-tokyo-night.json +101 -0
- package/src/theme/defaults/dark-tundra.json +91 -0
- package/src/theme/defaults/dark-twilight.json +91 -0
- package/src/theme/defaults/dark-volcanic.json +91 -0
- package/src/theme/defaults/graphite.json +92 -0
- package/src/theme/defaults/index.ts +201 -0
- package/src/theme/defaults/light-arctic.json +107 -0
- package/src/theme/defaults/light-aurora-day.json +91 -0
- package/src/theme/defaults/light-canyon.json +91 -0
- package/src/theme/defaults/light-catppuccin.json +106 -0
- package/src/theme/defaults/light-cirrus.json +90 -0
- package/src/theme/defaults/light-coral.json +95 -0
- package/src/theme/defaults/light-cyberpunk.json +96 -0
- package/src/theme/defaults/light-dawn.json +90 -0
- package/src/theme/defaults/light-dunes.json +91 -0
- package/src/theme/defaults/light-eucalyptus.json +95 -0
- package/src/theme/defaults/light-forest.json +100 -0
- package/src/theme/defaults/light-frost.json +95 -0
- package/src/theme/defaults/light-github.json +115 -0
- package/src/theme/defaults/light-glacier.json +91 -0
- package/src/theme/defaults/light-gruvbox.json +108 -0
- package/src/theme/defaults/light-haze.json +90 -0
- package/src/theme/defaults/light-honeycomb.json +95 -0
- package/src/theme/defaults/light-lagoon.json +91 -0
- package/src/theme/defaults/light-lavender.json +95 -0
- package/src/theme/defaults/light-meadow.json +91 -0
- package/src/theme/defaults/light-mint.json +95 -0
- package/src/theme/defaults/light-monochrome.json +101 -0
- package/src/theme/defaults/light-ocean.json +99 -0
- package/src/theme/defaults/light-one.json +99 -0
- package/src/theme/defaults/light-opal.json +91 -0
- package/src/theme/defaults/light-orchard.json +91 -0
- package/src/theme/defaults/light-paper.json +95 -0
- package/src/theme/defaults/light-poimandres.json +115 -0
- package/src/theme/defaults/light-prism.json +90 -0
- package/src/theme/defaults/light-retro.json +98 -0
- package/src/theme/defaults/light-sand.json +95 -0
- package/src/theme/defaults/light-savanna.json +91 -0
- package/src/theme/defaults/light-solarized.json +102 -0
- package/src/theme/defaults/light-soleil.json +90 -0
- package/src/theme/defaults/light-sunset.json +99 -0
- package/src/theme/defaults/light-synthwave.json +98 -0
- package/src/theme/defaults/light-tokyo-night.json +111 -0
- package/src/theme/defaults/light-wetland.json +91 -0
- package/src/theme/defaults/light-zenith.json +89 -0
- package/src/theme/defaults/limestone.json +94 -0
- package/src/theme/defaults/mahogany.json +97 -0
- package/src/theme/defaults/marble.json +93 -0
- package/src/theme/defaults/obsidian.json +91 -0
- package/src/theme/defaults/onyx.json +91 -0
- package/src/theme/defaults/pearl.json +93 -0
- package/src/theme/defaults/porcelain.json +91 -0
- package/src/theme/defaults/quartz.json +96 -0
- package/src/theme/defaults/sandstone.json +95 -0
- package/src/theme/defaults/titanium.json +90 -0
- package/src/theme/index.ts +5 -0
- package/src/theme/light.json +93 -0
- package/src/theme/loader.ts +200 -0
- package/src/theme/mermaid-cache.ts +92 -0
- package/src/theme/schema-validation.ts +119 -0
- package/src/theme/schema.ts +168 -0
- package/src/theme/session-color.ts +253 -0
- package/src/theme/shimmer.ts +307 -0
- package/src/theme/symbols.ts +1433 -0
- package/src/theme/theme-class.ts +787 -0
- package/src/theme/theme-schema.json +463 -0
- package/src/theme/theme.ts +810 -0
- package/src/theme/tui-adapters.ts +339 -0
- package/src/thinking.ts +380 -0
- package/src/tools/agent-tree.ts +128 -0
- package/src/tools/ask.ts +482 -0
- package/src/tools/ast-edit.ts +210 -0
- package/src/tools/ast-grep.ts +171 -0
- package/src/tools/autoresearch.ts +287 -0
- package/src/tools/bash-interactive.ts +295 -0
- package/src/tools/bash.ts +468 -0
- package/src/tools/conflict-detect.ts +77 -0
- package/src/tools/debug.ts +167 -0
- package/src/tools/default-renderer.ts +172 -0
- package/src/tools/edit.ts +1258 -0
- package/src/tools/eval-format/code-mode-declarations.ts +61 -0
- package/src/tools/eval-format/index.ts +16 -0
- package/src/tools/eval-format/javascript.ts +952 -0
- package/src/tools/eval-format/python.ts +544 -0
- package/src/tools/eval.ts +835 -0
- package/src/tools/fetch.ts +226 -0
- package/src/tools/gh-format.ts +18 -0
- package/src/tools/github.ts +686 -0
- package/src/tools/glob.ts +213 -0
- package/src/tools/goal.ts +153 -0
- package/src/tools/grep.ts +385 -0
- package/src/tools/grouped-file-output.ts +211 -0
- package/src/tools/hashline-format.ts +59 -0
- package/src/tools/hub.ts +1488 -0
- package/src/tools/index.ts +71 -0
- package/src/tools/json-tree.ts +388 -0
- package/src/tools/line-ranges.ts +98 -0
- package/src/tools/list-limit.ts +43 -0
- package/src/tools/lsp.ts +702 -0
- package/src/tools/match-line-format.ts +20 -0
- package/src/tools/mcp.ts +309 -0
- package/src/tools/memory.ts +220 -0
- package/src/tools/output-meta.ts +367 -0
- package/src/tools/read.ts +628 -0
- package/src/tools/renderer.ts +107 -0
- package/src/tools/report-tool-issue.ts +13 -0
- package/src/tools/resolve.ts +139 -0
- package/src/tools/streaming-output.ts +1576 -0
- package/src/tools/subprocess.ts +39 -0
- package/src/tools/task-repair-args.ts +118 -0
- package/src/tools/task-yield-assembly.ts +147 -0
- package/src/tools/task.ts +2110 -0
- package/src/tools/terminal-output.ts +153 -0
- package/src/tools/think.ts +28 -0
- package/src/tools/todo.ts +580 -0
- package/src/tools/tool-errors.ts +15 -0
- package/src/tools/vibe.ts +420 -0
- package/src/tools/web-search.ts +409 -0
- package/src/tools/write.ts +511 -0
- package/src/tools/xd-url.ts +28 -0
- package/src/tools/xdev.ts +201 -0
- package/src/tui.ts +57 -4
- package/src/utils.ts +8 -0
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/** A scope row shared by fullscreen hubs, with hub-specific kinds and metadata. */
|
|
2
|
+
export interface SidebarEntry<TKind extends string> {
|
|
3
|
+
id: string;
|
|
4
|
+
kind: TKind;
|
|
5
|
+
label: string;
|
|
6
|
+
annotation?: string;
|
|
7
|
+
}
|
|
8
|
+
/** A pre-styled footer choice carrying a hub-specific action. */
|
|
9
|
+
export interface StripChip<TAction> {
|
|
10
|
+
label: string;
|
|
11
|
+
styled: string;
|
|
12
|
+
action: TAction;
|
|
13
|
+
}
|
|
14
|
+
/** Shared selection state for a hub's chip-bearing strip variants. */
|
|
15
|
+
export interface StripState<TChip extends StripChip<unknown>> {
|
|
16
|
+
chips: TChip[];
|
|
17
|
+
index: number;
|
|
18
|
+
}
|
|
19
|
+
/** A chip hit range in frame-relative columns. */
|
|
20
|
+
export interface ChipRange {
|
|
21
|
+
start: number;
|
|
22
|
+
end: number;
|
|
23
|
+
index: number;
|
|
24
|
+
}
|
|
25
|
+
/** Hub-specific sidebar decoration, independent of viewport and row layout. */
|
|
26
|
+
export interface SidebarStyle {
|
|
27
|
+
icon: string;
|
|
28
|
+
annotation: string;
|
|
29
|
+
muted?: boolean;
|
|
30
|
+
hovered?: boolean;
|
|
31
|
+
padTruncated?: boolean;
|
|
32
|
+
}
|
|
33
|
+
/** Cycle a strip's selection for directional and tab input, returning whether it handled the key. */
|
|
34
|
+
export declare function moveStripSelection(strip: StripState<StripChip<unknown>>, data: string): boolean;
|
|
35
|
+
/** Persistent fullscreen split frame, sidebar viewport, and footer chip renderer. */
|
|
36
|
+
export declare class HubFrame {
|
|
37
|
+
#private;
|
|
38
|
+
/** Current sidebar viewport offset, shared with the hub's navigation. */
|
|
39
|
+
sidebarScroll: number;
|
|
40
|
+
/** Chip hit ranges from the last footer render. */
|
|
41
|
+
chipRanges: ChipRange[];
|
|
42
|
+
/** Compose hub-specific sidebar and body renderers into a persistent frame. */
|
|
43
|
+
constructor(title: string, sidebarBounds: {
|
|
44
|
+
min: number;
|
|
45
|
+
max: number;
|
|
46
|
+
}, renderSidebar: (width: number, rows: number) => string[], renderBody: (width: number, height: number | undefined) => readonly string[]);
|
|
47
|
+
/** Invalidate the composed layout. */
|
|
48
|
+
invalidate(): void;
|
|
49
|
+
/** Measure labels and annotations within this hub's sidebar width bounds. */
|
|
50
|
+
sidebarWidth(entries: readonly SidebarEntry<string>[]): number;
|
|
51
|
+
/** Pan the sidebar within the current viewport's bounds. */
|
|
52
|
+
scrollSidebar(delta: number, rows: number, entryCount: number): void;
|
|
53
|
+
/** Select a footer chip at a frame-relative column, if one was painted there. */
|
|
54
|
+
selectChipAt(strip: StripState<StripChip<unknown>>, col: number): boolean;
|
|
55
|
+
/** Render the sidebar viewport while retaining each hub's follow and clipping policy. */
|
|
56
|
+
renderSidebar<TEntry extends SidebarEntry<string>>(entries: readonly TEntry[], width: number, rows: number, selection: {
|
|
57
|
+
id: string;
|
|
58
|
+
focused: boolean;
|
|
59
|
+
follow: boolean;
|
|
60
|
+
clamp: boolean;
|
|
61
|
+
}, style: (entry: TEntry, index: number) => SidebarStyle): string[];
|
|
62
|
+
/** Render footer hints or a hub-specific strip, resetting stale mouse ranges. */
|
|
63
|
+
renderFooter(width: number, hint: string, renderStrip?: () => string): string;
|
|
64
|
+
/** Render footer chips from a hub-selected horizontal window and record their hit ranges. */
|
|
65
|
+
renderChips(width: number, prefix: string, strip: StripState<StripChip<unknown>>, start?: number): string;
|
|
66
|
+
/** Translate a mouse position into footer, sidebar, and body coordinates. */
|
|
67
|
+
locate(row: number, col: number): {
|
|
68
|
+
footerColumn: number | undefined;
|
|
69
|
+
bodyHeight: number;
|
|
70
|
+
contentLine: number;
|
|
71
|
+
overSidebar: boolean;
|
|
72
|
+
overBody: boolean;
|
|
73
|
+
bodyLine: number;
|
|
74
|
+
};
|
|
75
|
+
/** Paint a complete fullscreen hub with its title, width bounds, and contextual footer. */
|
|
76
|
+
render(width: number, height: number, entries: readonly SidebarEntry<string>[], footer: string): readonly string[];
|
|
77
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { OAuthPrompt } from "@oh-my-pi/pi-ai/oauth/types";
|
|
2
|
+
import { type TUI } from "../index.js";
|
|
3
|
+
import { OverlayPanel } from "../chrome/overlay-box.js";
|
|
4
|
+
/**
|
|
5
|
+
* Login dialog component - replaces editor during OAuth login flow
|
|
6
|
+
*/
|
|
7
|
+
export declare class LoginDialogComponent extends OverlayPanel {
|
|
8
|
+
#private;
|
|
9
|
+
constructor(tui: TUI, providerId: string, onComplete: (success: boolean, message?: string) => void, openUrl: (url: string) => void);
|
|
10
|
+
get signal(): AbortSignal;
|
|
11
|
+
/**
|
|
12
|
+
* Called by the OAuth `onAuth` callback. Renders the full authorization URL
|
|
13
|
+
* as the primary copy target — that works from any machine, including
|
|
14
|
+
* SSH/WSL/headless sessions where the OMP-hosted `launchUrl` would resolve
|
|
15
|
+
* against the user's local browser and fail. When `launchUrl` is present it
|
|
16
|
+
* is offered as an additional local shortcut so narrow local terminals still
|
|
17
|
+
* have a truncation-safe copy target (viewport clipping on a long authorize
|
|
18
|
+
* URL silently drops trailing OAuth query parameters — e.g.
|
|
19
|
+
* `code_challenge_method=S256`). Every physical URL row carries its own OSC 8
|
|
20
|
+
* link to the full URL, so clicking any wrapped fragment opens the same target.
|
|
21
|
+
*/
|
|
22
|
+
showAuth(url: string, instructions?: string, launchUrl?: string): void;
|
|
23
|
+
/**
|
|
24
|
+
* Show input for manual code/URL entry (for callback server providers)
|
|
25
|
+
*/
|
|
26
|
+
showManualInput(prompt: string, signal?: AbortSignal): Promise<string>;
|
|
27
|
+
/**
|
|
28
|
+
* Called by onPrompt callback - show prompt and wait for input
|
|
29
|
+
* Note: Does NOT clear content, appends to existing (preserves URL from showAuth)
|
|
30
|
+
*/
|
|
31
|
+
showPrompt(prompt: OAuthPrompt): Promise<string>;
|
|
32
|
+
/**
|
|
33
|
+
* Show waiting message (for polling flows like GitHub Copilot)
|
|
34
|
+
*/
|
|
35
|
+
showWaiting(message: string): void;
|
|
36
|
+
/**
|
|
37
|
+
* Called by onProgress callback
|
|
38
|
+
*/
|
|
39
|
+
showProgress(message: string): void;
|
|
40
|
+
/** Route non-bracketed paste transports into the active login input. */
|
|
41
|
+
pasteText(text: string): void;
|
|
42
|
+
handleInput(data: string): void;
|
|
43
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { OverlayPanel } from "../chrome/overlay-box.js";
|
|
2
|
+
export interface LogoutAccount {
|
|
3
|
+
credentialId: number;
|
|
4
|
+
provider: string;
|
|
5
|
+
label: string;
|
|
6
|
+
detail: string;
|
|
7
|
+
type: "api_key" | "oauth";
|
|
8
|
+
active: boolean;
|
|
9
|
+
}
|
|
10
|
+
/** Account picker for `/logout` after the provider has been selected. */
|
|
11
|
+
export declare class LogoutAccountSelectorComponent extends OverlayPanel {
|
|
12
|
+
#private;
|
|
13
|
+
constructor(providerName: string, accounts: LogoutAccount[], onSelect: (account: LogoutAccount) => void, onCancel: () => void);
|
|
14
|
+
handleInput(keyData: string): void;
|
|
15
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { OverlayPanel } from "../chrome/overlay-box.js";
|
|
2
|
+
type Scope = "user" | "project";
|
|
3
|
+
/** Authentication fields produced by the wizard. */
|
|
4
|
+
interface MCPAddWizardAuth {
|
|
5
|
+
type: "oauth";
|
|
6
|
+
credentialId: string;
|
|
7
|
+
tokenUrl?: string;
|
|
8
|
+
clientId?: string;
|
|
9
|
+
clientSecret?: string;
|
|
10
|
+
resource?: string;
|
|
11
|
+
}
|
|
12
|
+
interface MCPAddWizardConfigBase {
|
|
13
|
+
timeout?: number;
|
|
14
|
+
auth?: MCPAddWizardAuth;
|
|
15
|
+
}
|
|
16
|
+
interface MCPAddWizardStdioConfig extends MCPAddWizardConfigBase {
|
|
17
|
+
type: "stdio";
|
|
18
|
+
command: string;
|
|
19
|
+
args?: string[];
|
|
20
|
+
env?: Record<string, string>;
|
|
21
|
+
}
|
|
22
|
+
interface MCPAddWizardRemoteConfig extends MCPAddWizardConfigBase {
|
|
23
|
+
type: "http" | "sse";
|
|
24
|
+
url: string;
|
|
25
|
+
headers?: Record<string, string>;
|
|
26
|
+
}
|
|
27
|
+
/** Server configuration fields produced for testing and persistence. */
|
|
28
|
+
export type MCPAddWizardConfig = MCPAddWizardStdioConfig | MCPAddWizardRemoteConfig;
|
|
29
|
+
interface MCPAddWizardOAuthEndpoints {
|
|
30
|
+
authorizationUrl: string;
|
|
31
|
+
tokenUrl: string;
|
|
32
|
+
issuerUrl?: string;
|
|
33
|
+
clientId?: string;
|
|
34
|
+
registrationUrl?: string;
|
|
35
|
+
scopes?: string;
|
|
36
|
+
resource?: string;
|
|
37
|
+
}
|
|
38
|
+
interface MCPAddWizardAuthDetection {
|
|
39
|
+
requiresAuth: boolean;
|
|
40
|
+
authType?: "oauth" | "apikey" | "unknown";
|
|
41
|
+
oauth?: MCPAddWizardOAuthEndpoints;
|
|
42
|
+
authServerUrl?: string;
|
|
43
|
+
resourceMetadataUrl?: string;
|
|
44
|
+
scopes?: string;
|
|
45
|
+
}
|
|
46
|
+
/** Host-owned validation and OAuth discovery capabilities. */
|
|
47
|
+
export interface MCPAddWizardDeps {
|
|
48
|
+
validateServerName(name: string): string | undefined;
|
|
49
|
+
analyzeAuthError(error: Error, serverUrl?: string): MCPAddWizardAuthDetection;
|
|
50
|
+
discoverOAuthEndpoints(serverUrl: string, authServerUrl?: string, resourceMetadataUrl?: string, options?: {
|
|
51
|
+
protectedScopes?: string;
|
|
52
|
+
}): Promise<MCPAddWizardOAuthEndpoints | null>;
|
|
53
|
+
fetchResourceMetadataScopes(resourceMetadataUrl: string): Promise<string | undefined>;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Result of the wizard's OAuth callback. `credentialId` is mandatory;
|
|
57
|
+
* `clientId` is populated when the OAuth provider performed dynamic client
|
|
58
|
+
* registration (or when the caller pre-supplied it) so the wizard can fold it
|
|
59
|
+
* into the final `mcp.json` entry. Refresh material (including any DCR client
|
|
60
|
+
* secret) is embedded in the stored credential, never written to config files.
|
|
61
|
+
*/
|
|
62
|
+
export interface MCPAddWizardOAuthResult {
|
|
63
|
+
credentialId: string;
|
|
64
|
+
clientId?: string;
|
|
65
|
+
resource?: string;
|
|
66
|
+
}
|
|
67
|
+
interface MCPAddWizardOAuthOptions {
|
|
68
|
+
serverUrl?: string;
|
|
69
|
+
resource?: string;
|
|
70
|
+
stripSameOriginResource?: boolean;
|
|
71
|
+
registrationUrl?: string;
|
|
72
|
+
issuerUrl?: string;
|
|
73
|
+
/**
|
|
74
|
+
* External cancellation source. Aborting it tears down the in-flight OAuth
|
|
75
|
+
* flow and surfaces a neutral cancellation error. The wizard wires its own
|
|
76
|
+
* controller here so Esc cancels the OAuth wait instead of stepping back
|
|
77
|
+
* through the form (the wizard is focused, so the editor's Esc hook does
|
|
78
|
+
* not fire).
|
|
79
|
+
*/
|
|
80
|
+
abortSignal?: AbortSignal;
|
|
81
|
+
}
|
|
82
|
+
export declare class MCPAddWizard extends OverlayPanel {
|
|
83
|
+
#private;
|
|
84
|
+
constructor(deps: MCPAddWizardDeps, onComplete: (name: string, config: MCPAddWizardConfig, scope: Scope) => void, onCancel: () => void, onOAuth?: (authUrl: string, tokenUrl: string, clientId: string, clientSecret: string, scopes: string, options?: MCPAddWizardOAuthOptions) => Promise<MCPAddWizardOAuthResult>, onTestConnection?: (config: MCPAddWizardConfig) => Promise<void>, onRender?: () => void, initialName?: string);
|
|
85
|
+
handleInput(keyData: string): void;
|
|
86
|
+
}
|
|
87
|
+
export {};
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
import type { Model } from "@oh-my-pi/pi-ai";
|
|
2
|
+
import type { Component } from "../tui.js";
|
|
3
|
+
import type { SgrMouseEvent } from "../mouse.js";
|
|
4
|
+
import { type ConfiguredThinkingLevel } from "../thinking.js";
|
|
5
|
+
import { type ThemeColor } from "../theme/theme.js";
|
|
6
|
+
/** Canonical display ordering of built-in model roles. */
|
|
7
|
+
export type ModelRole = "default" | "smol" | "slow" | "vision" | "plan" | "commit" | "tiny" | "task" | "advisor";
|
|
8
|
+
export declare const MODEL_ROLE_IDS: ModelRole[];
|
|
9
|
+
/** Measured model performance shown in browser rows. */
|
|
10
|
+
export interface ModelBrowserPerf {
|
|
11
|
+
samples: number;
|
|
12
|
+
tps: number;
|
|
13
|
+
ttftMs: number | null;
|
|
14
|
+
}
|
|
15
|
+
/** Role metadata shown in model selectors. */
|
|
16
|
+
export interface ModelBrowserRoleInfo {
|
|
17
|
+
tag?: string;
|
|
18
|
+
name: string;
|
|
19
|
+
color?: ThemeColor;
|
|
20
|
+
hidden?: boolean;
|
|
21
|
+
}
|
|
22
|
+
/** Role lookup used for scoped model resolution. */
|
|
23
|
+
export interface ModelRoleLookup {
|
|
24
|
+
getModelRole(role: string): string | undefined;
|
|
25
|
+
}
|
|
26
|
+
/** Resolved selector metadata required by model overlays. */
|
|
27
|
+
export interface ResolvedModelRoleValue {
|
|
28
|
+
model: Model | undefined;
|
|
29
|
+
thinkingLevel?: ConfiguredThinkingLevel;
|
|
30
|
+
explicitThinkingLevel: boolean;
|
|
31
|
+
warning?: string;
|
|
32
|
+
}
|
|
33
|
+
/** Host-provided preferences and model-role resolution for the browser. */
|
|
34
|
+
export interface ModelBrowserSource extends ModelRoleLookup {
|
|
35
|
+
readonly defaultThinkingLevel: string;
|
|
36
|
+
readonly modelProviderOrder: readonly string[];
|
|
37
|
+
readonly knownRoleIds: readonly string[];
|
|
38
|
+
readonly mruOrder: readonly string[];
|
|
39
|
+
readonly modelPerf: ReadonlyMap<string, ModelBrowserPerf>;
|
|
40
|
+
getRoleInfo(role: string): ModelBrowserRoleInfo;
|
|
41
|
+
resolveRoleValue(value: string | undefined, models: Model[], roleLookup?: ModelRoleLookup): ResolvedModelRoleValue;
|
|
42
|
+
}
|
|
43
|
+
/** Read-only catalog surface consumed by model browsers. */
|
|
44
|
+
export interface ModelBrowserRegistry {
|
|
45
|
+
getError(): unknown;
|
|
46
|
+
getAvailable(): Model[];
|
|
47
|
+
getAll(): Model[];
|
|
48
|
+
}
|
|
49
|
+
/** One selectable row. `selector` is a canonical model key or host-specific virtual key. */
|
|
50
|
+
export interface ModelBrowserItem {
|
|
51
|
+
provider: string;
|
|
52
|
+
id: string;
|
|
53
|
+
model: Model;
|
|
54
|
+
selector: string;
|
|
55
|
+
/** Optional foreground color for the row label. */
|
|
56
|
+
labelColor?: ThemeColor;
|
|
57
|
+
}
|
|
58
|
+
/** Resolved role assignment as displayed by the browser and the hub. */
|
|
59
|
+
export interface RoleAssignment {
|
|
60
|
+
model: Model;
|
|
61
|
+
thinkingLevel: ConfiguredThinkingLevel;
|
|
62
|
+
/** True when the role has no configured value and fell back to auto-selection. */
|
|
63
|
+
autoSelected: boolean;
|
|
64
|
+
}
|
|
65
|
+
/** Map of role id to its resolved assignment (absent roles are unresolved). */
|
|
66
|
+
export type RoleAssignments = Record<string, RoleAssignment | undefined>;
|
|
67
|
+
/**
|
|
68
|
+
* Resolve every known role to its display assignment: configured role values
|
|
69
|
+
* resolve against `allModels`; unconfigured roles fall back to auto-selection
|
|
70
|
+
* over `autoCandidates` (skipped when empty). Shared by the /models hub and
|
|
71
|
+
* the alt+p session picker.
|
|
72
|
+
*/
|
|
73
|
+
export declare function resolveRoleAssignments(settings: ModelBrowserSource, allModels: ReadonlyArray<Model>, autoCandidates: ReadonlyArray<Model>): RoleAssignments;
|
|
74
|
+
/** Wrap raw models into browser items. */
|
|
75
|
+
export declare function buildBrowserItems(models: ReadonlyArray<Model>): ModelBrowserItem[];
|
|
76
|
+
/** Options for {@link sortModelItems}. */
|
|
77
|
+
export interface SortModelItemsOptions {
|
|
78
|
+
roles?: RoleAssignments;
|
|
79
|
+
mruOrder?: ReadonlyArray<string>;
|
|
80
|
+
/**
|
|
81
|
+
* When a search query is narrowing the list, role assignments should NOT
|
|
82
|
+
* promote a weakly-matching default model above a perfect text match —
|
|
83
|
+
* defer to MRU/version instead so user affinity drives the order.
|
|
84
|
+
*/
|
|
85
|
+
skipRoleRank?: boolean;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Order models for display: role-assigned first, then most-recently-used,
|
|
89
|
+
* then per provider by priority, version, and recency.
|
|
90
|
+
*/
|
|
91
|
+
export declare function sortModelItems(items: ModelBrowserItem[], options?: SortModelItemsOptions): void;
|
|
92
|
+
/** Picker candidates and ordering inputs shared with composer model mentions. */
|
|
93
|
+
export interface SessionModelScope {
|
|
94
|
+
items: ModelBrowserItem[];
|
|
95
|
+
roles: RoleAssignments;
|
|
96
|
+
mruOrder: ReadonlyArray<string>;
|
|
97
|
+
error: string | undefined;
|
|
98
|
+
}
|
|
99
|
+
/** Build the session picker's current scope without creating an interactive browser. */
|
|
100
|
+
export declare function buildSessionModelScope(settings: ModelBrowserSource, registry: ModelBrowserRegistry, scopedModels: ReadonlyArray<Model>): SessionModelScope;
|
|
101
|
+
/** User affinity used to order search matches within one relevance tier. */
|
|
102
|
+
export interface SearchAffinity {
|
|
103
|
+
/** `provider/id` (lowercased) → rank; configured-role models first, then MRU. */
|
|
104
|
+
models: Map<string, number>;
|
|
105
|
+
/** provider (lowercased) → rank; explicit order, then role providers, then MRU providers. */
|
|
106
|
+
providers: Map<string, number>;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Build model and provider affinity from explicit configuration, configured
|
|
110
|
+
* role assignments, and recent model use. Auto-selected roles are catalog
|
|
111
|
+
* policy, not evidence of user preference.
|
|
112
|
+
*/
|
|
113
|
+
export declare function buildSearchAffinity(providerOrder: ReadonlyArray<string>, roles: RoleAssignments, mruOrder: ReadonlyArray<string>): SearchAffinity;
|
|
114
|
+
/** Rank picker and mention candidates by text relevance, user affinity, and MRU/version order. */
|
|
115
|
+
export declare function rankModelItems(query: string, items: ReadonlyArray<ModelBrowserItem>, options: {
|
|
116
|
+
roles: RoleAssignments;
|
|
117
|
+
mruOrder: ReadonlyArray<string>;
|
|
118
|
+
affinity: SearchAffinity;
|
|
119
|
+
}): ModelBrowserItem[];
|
|
120
|
+
/**
|
|
121
|
+
* A slim role chip: `● default ◉` — solid dot for configured assignments,
|
|
122
|
+
* hollow for auto-selected fallbacks, thinking glyph attached when set.
|
|
123
|
+
*
|
|
124
|
+
* The space after the status glyph is load-bearing. Under the `nerd` preset
|
|
125
|
+
* these are Nerd Font private-use icons (U+F111 / U+F10C) whose glyphs are
|
|
126
|
+
* drawn two cells wide, while `visibleWidth` counts them as one
|
|
127
|
+
* (`ambiguousIsNarrow: true` in tui/utils.ts — the PUA block is
|
|
128
|
+
* East_Asian_Width=Ambiguous). Without a separator the icon overhangs and
|
|
129
|
+
* eats the label's first character (`● default` renders as `●efault`).
|
|
130
|
+
* Mirrors the spacing already used for `status.success` in model-hub.
|
|
131
|
+
*/
|
|
132
|
+
export declare function formatRoleChip(role: string, assignment: RoleAssignment, settings: ModelBrowserSource): string;
|
|
133
|
+
/**
|
|
134
|
+
* The fuzzy haystack for a model row: the displayed `provider/id`, plus `free`
|
|
135
|
+
* for zero-cost models so the cost column's own word is searchable even when
|
|
136
|
+
* the id never says it (openrouter suffixes `:free`; nvidia does not).
|
|
137
|
+
*
|
|
138
|
+
* Must stay a pure function of the item — never of the query. `fuzzyRank`
|
|
139
|
+
* caches match indices keyed on this string and stops admitting new entries
|
|
140
|
+
* past its cap, so a query-dependent haystack would thrash that cache.
|
|
141
|
+
*/
|
|
142
|
+
export declare function modelSearchText({ provider, id, model }: ModelBrowserItem): string;
|
|
143
|
+
/** Behavior switches for {@link ModelBrowser}. */
|
|
144
|
+
export interface ModelBrowserOptions {
|
|
145
|
+
/** Render the dim `provider/` prefix before model ids. Default true. */
|
|
146
|
+
showProvider?: boolean;
|
|
147
|
+
/** Session token count used to flag models whose context window is exceeded. */
|
|
148
|
+
currentContextTokens?: number;
|
|
149
|
+
/** When true, over-context rows render grayed; picking one compacts first (session-switch mode). */
|
|
150
|
+
markOverContext?: boolean;
|
|
151
|
+
/** Host-provided empty-state text (e.g. provider discovery status). */
|
|
152
|
+
emptyText?: () => string | undefined;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* The reusable browser component. Renders a fixed-height block
|
|
156
|
+
* (`maxVisible + LIST_ROW_START + DETAIL_ROWS` rows) so host mouse geometry
|
|
157
|
+
* stays stable across renders.
|
|
158
|
+
*/
|
|
159
|
+
export declare class ModelBrowser implements Component {
|
|
160
|
+
#private;
|
|
161
|
+
/** Enter or click-on-selected. */
|
|
162
|
+
onActivate?: (item: ModelBrowserItem) => void;
|
|
163
|
+
onSelectionChange?: (item: ModelBrowserItem | undefined) => void;
|
|
164
|
+
onQueryChange?: (query: string) => void;
|
|
165
|
+
/** Cancel key with an empty query (a non-empty query is cleared first). */
|
|
166
|
+
onCancel?: () => void;
|
|
167
|
+
constructor(settings: ModelBrowserSource, options?: ModelBrowserOptions);
|
|
168
|
+
/** Mark `selector` as the session's active model (undefined clears the mark). */
|
|
169
|
+
setCurrentSelector(selector: string | undefined): void;
|
|
170
|
+
/** Replace the scope's base items; the live query re-applies and selection is pinned by selector. */
|
|
171
|
+
setItems(items: ModelBrowserItem[]): void;
|
|
172
|
+
setRoles(roles: RoleAssignments): void;
|
|
173
|
+
setMruOrder(order: ReadonlyArray<string>): void;
|
|
174
|
+
/** Measured TPS/TTFT averages keyed by `provider/id` selector (see AgentStorage.getModelPerf). */
|
|
175
|
+
setPerfStats(perf: ReadonlyMap<string, ModelBrowserPerf>): void;
|
|
176
|
+
setMaxVisible(rows: number): void;
|
|
177
|
+
setShowProvider(show: boolean): void;
|
|
178
|
+
/** Keep the source order after fuzzy filtering instead of applying model-specific ranking. */
|
|
179
|
+
setPreserveQueryOrder(preserve: boolean): void;
|
|
180
|
+
/** Allow hosts to toggle context-window flagging between browser modes. */
|
|
181
|
+
setMarkOverContext(mark: boolean): void;
|
|
182
|
+
/** Focused: accent cursor + selected-row background band. Unfocused: dim cursor, no band. */
|
|
183
|
+
setFocused(focused: boolean): void;
|
|
184
|
+
/** Total rendered height for the current `maxVisible` (host layout budgeting). */
|
|
185
|
+
get renderedRows(): number;
|
|
186
|
+
get query(): string;
|
|
187
|
+
setQuery(query: string): void;
|
|
188
|
+
getSelected(): ModelBrowserItem | undefined;
|
|
189
|
+
get visibleCount(): number;
|
|
190
|
+
/** Move selection to `selector`; false when it is not in the current view. */
|
|
191
|
+
selectSelector(selector: string): boolean;
|
|
192
|
+
/** True when `item`'s context window is smaller than the live session token count (grayed row; hosts compact before switching). */
|
|
193
|
+
isOverContext(item: ModelBrowserItem): boolean;
|
|
194
|
+
/**
|
|
195
|
+
* Move the selection by `delta` rows, skipping disabled rows. Single steps
|
|
196
|
+
* wrap at the ends; `wrap: false` (page/home/end jumps) clamps instead.
|
|
197
|
+
*/
|
|
198
|
+
moveSelection(delta: number, options?: {
|
|
199
|
+
wrap?: boolean;
|
|
200
|
+
}): void;
|
|
201
|
+
handleInput(data: string): void;
|
|
202
|
+
/** Cancel-key ladder: clear a non-empty query first, then bubble to the host. */
|
|
203
|
+
handleCancel(): void;
|
|
204
|
+
/**
|
|
205
|
+
* Route a mouse event. `line` is relative to the browser's first rendered
|
|
206
|
+
* row (the search row).
|
|
207
|
+
*/
|
|
208
|
+
routeMouse(event: SgrMouseEvent, line: number): void;
|
|
209
|
+
/** Drop the hover band. Hosts call this when the pointer leaves the browser pane. */
|
|
210
|
+
clearHover(): void;
|
|
211
|
+
render(width: number): string[];
|
|
212
|
+
invalidate(): void;
|
|
213
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import type { Model } from "@oh-my-pi/pi-ai";
|
|
2
|
+
import type { Component, TUI } from "../tui.js";
|
|
3
|
+
import type { ModelBrowserSource, ModelBrowserRegistry } from "./model-browser.js";
|
|
4
|
+
import { type ConfiguredThinkingLevel } from "../thinking.js";
|
|
5
|
+
/** Live preferences and selector operations supplied by the host. */
|
|
6
|
+
export interface ModelHubSource extends ModelBrowserSource {
|
|
7
|
+
readonly disabledProviders: readonly string[];
|
|
8
|
+
readonly fallbackChains: Record<string, string[]>;
|
|
9
|
+
readonly modelRoleStorage: "global" | "project";
|
|
10
|
+
readonly cycleOrder: readonly string[];
|
|
11
|
+
getProjectModelRole(role: string): string | undefined;
|
|
12
|
+
getGlobalModelRole(role: string): string | undefined;
|
|
13
|
+
getModelRoleSource(role: string): "global" | "project" | "default";
|
|
14
|
+
}
|
|
15
|
+
/** Catalog capabilities required by the model hub. */
|
|
16
|
+
export interface ModelHubRegistry extends ModelBrowserRegistry {
|
|
17
|
+
readonly authStorage: {
|
|
18
|
+
hasAuth(provider: string): boolean;
|
|
19
|
+
};
|
|
20
|
+
getDiscoverableProviders(): string[];
|
|
21
|
+
getProviderDiscoveryState(provider: string): {
|
|
22
|
+
optional: boolean;
|
|
23
|
+
status: "idle" | "ok" | "empty" | "cached" | "unavailable" | "unauthenticated";
|
|
24
|
+
fetchedAt?: number;
|
|
25
|
+
error?: string;
|
|
26
|
+
} | undefined;
|
|
27
|
+
find(provider: string, id: string): Model | undefined;
|
|
28
|
+
refresh(strategy: "online"): Promise<void>;
|
|
29
|
+
refreshProvider(provider: string, strategy: "online", options?: {
|
|
30
|
+
refreshCommandCredentials?: boolean;
|
|
31
|
+
}): Promise<void>;
|
|
32
|
+
}
|
|
33
|
+
/** A `--models` scope entry (mirrors the session's scoped model list). */
|
|
34
|
+
export interface ScopedModelItem {
|
|
35
|
+
model: Model;
|
|
36
|
+
thinkingLevel?: string;
|
|
37
|
+
}
|
|
38
|
+
export type ModelRoleSelectionScope = "global" | "project";
|
|
39
|
+
export interface ModelHubCallbacks {
|
|
40
|
+
/** Persist a role assignment. */
|
|
41
|
+
onAssign: (model: Model, role: string, thinkingLevel: ConfiguredThinkingLevel | undefined, selector: string, scope?: ModelRoleSelectionScope) => void | boolean | Promise<void | boolean>;
|
|
42
|
+
/** Clear a configured role back to auto-selection. */
|
|
43
|
+
onUnassign: (role: string, scope?: ModelRoleSelectionScope) => void;
|
|
44
|
+
/** Persist a `retry.fallbackChains` entry — keyed by a role, `provider/model-id`, or `provider/*`; an empty chain clears the key. */
|
|
45
|
+
onFallbackChainChange?: (role: string, chain: string[]) => void;
|
|
46
|
+
/** Locked provider activation: forward to the /login flow. */
|
|
47
|
+
onLoginRequest?: (providerId: string) => void;
|
|
48
|
+
/** Persist a new quick-switch cycle order (the ctrl+p role cycle). */
|
|
49
|
+
onCycleOrderChange?: (order: string[]) => void;
|
|
50
|
+
onCancel: () => void;
|
|
51
|
+
}
|
|
52
|
+
export interface ModelHubOptions {
|
|
53
|
+
/** Preselect this provider's sidebar entry (e.g. when reopening after /login). */
|
|
54
|
+
initialProviderId?: string;
|
|
55
|
+
}
|
|
56
|
+
/** Test hook: forget which providers were auto-refreshed this process. */
|
|
57
|
+
export declare function resetProviderAutoRefreshGuard(): void;
|
|
58
|
+
/**
|
|
59
|
+
* The fullscreen model hub component. Hosted via `ui.showOverlay(..., { fullscreen: true })`;
|
|
60
|
+
* the host must call {@link ModelHubComponent.dispose} when the overlay closes.
|
|
61
|
+
*/
|
|
62
|
+
export declare class ModelHubComponent implements Component {
|
|
63
|
+
#private;
|
|
64
|
+
constructor(tui: TUI, settings: ModelHubSource, registry: ModelHubRegistry, scopedModels: ReadonlyArray<ScopedModelItem>, callbacks: ModelHubCallbacks, options?: ModelHubOptions);
|
|
65
|
+
/** Cancel pending provider refresh timers and the spinner. Host calls this on overlay close. */
|
|
66
|
+
dispose(): void;
|
|
67
|
+
invalidate(): void;
|
|
68
|
+
/** Re-sync after an asynchronous callback finishes mutating settings. */
|
|
69
|
+
refreshAfterExternalMutation(): void;
|
|
70
|
+
handleInput(data: string): void;
|
|
71
|
+
render(width: number): readonly string[];
|
|
72
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compact session-model picker (alt+p / `/switch`): a bottom-anchored
|
|
3
|
+
* floating overlay hosting just a {@link ModelBrowser} — no provider sidebar.
|
|
4
|
+
* Model entries switch the current session only; a search beginning with `@`
|
|
5
|
+
* exposes the configured ctrl+p quick roles.
|
|
6
|
+
*/
|
|
7
|
+
import type { Model } from "@oh-my-pi/pi-ai";
|
|
8
|
+
import { type KeyId } from "../keys.js";
|
|
9
|
+
import type { Component, TUI } from "../tui.js";
|
|
10
|
+
import type { ModelBrowserRegistry, ModelBrowserSource } from "./model-browser.js";
|
|
11
|
+
import type { ConfiguredThinkingLevel } from "../thinking.js";
|
|
12
|
+
import type { ScopedModelItem } from "./model-hub.js";
|
|
13
|
+
/** Configured role resolved to a concrete model. */
|
|
14
|
+
export interface ResolvedRoleModel {
|
|
15
|
+
role: string;
|
|
16
|
+
model: Model;
|
|
17
|
+
thinkingLevel?: ConfiguredThinkingLevel;
|
|
18
|
+
explicitThinkingLevel: boolean;
|
|
19
|
+
}
|
|
20
|
+
/** Catalog refresh capability used by the session picker. */
|
|
21
|
+
export interface ModelPickerRegistry extends ModelBrowserRegistry {
|
|
22
|
+
refresh(strategy: "offline"): Promise<void>;
|
|
23
|
+
}
|
|
24
|
+
export interface ModelPickerCallbacks {
|
|
25
|
+
/**
|
|
26
|
+
* A model was chosen for a session-only switch. `selector` is `provider/id`.
|
|
27
|
+
* `overContext` is true when the session transcript exceeds the model's
|
|
28
|
+
* context window — the host must compact before switching.
|
|
29
|
+
*/
|
|
30
|
+
onPick: (model: Model, selector: string, meta: {
|
|
31
|
+
overContext: boolean;
|
|
32
|
+
}) => void;
|
|
33
|
+
/** A configured ctrl+p quick role was chosen. */
|
|
34
|
+
onPickRole?: (entry: ResolvedRoleModel) => void;
|
|
35
|
+
/**
|
|
36
|
+
* A model was chosen for Task subagents (task mode, toggled by pressing the
|
|
37
|
+
* picker shortcut again). Session-only: the host applies a runtime override.
|
|
38
|
+
*/
|
|
39
|
+
onPickTask?: (model: Model, selector: string) => void;
|
|
40
|
+
/** The picker was dismissed. */
|
|
41
|
+
onCancel: () => void;
|
|
42
|
+
}
|
|
43
|
+
export interface ModelPickerOptions {
|
|
44
|
+
/** Session token count; models with smaller context windows are grayed and compact-first on pick. */
|
|
45
|
+
currentContextTokens?: number;
|
|
46
|
+
/** `provider/id` of the session's active model; highlighted and preselected. */
|
|
47
|
+
currentSelector?: string;
|
|
48
|
+
/** Resolved role models in the same order used by the ctrl+p quick-role cycle. */
|
|
49
|
+
quickRoles?: ReadonlyArray<ResolvedRoleModel>;
|
|
50
|
+
/** Complete ctrl+p order, including unavailable roles, to preserve segment colors. */
|
|
51
|
+
quickRoleOrder?: ReadonlyArray<string>;
|
|
52
|
+
/** Active quick role, highlighted when the search begins with `@`. */
|
|
53
|
+
currentQuickRole?: string;
|
|
54
|
+
/** Keys that toggle task-subagent mode while the picker is open; typically the alt+p binding. */
|
|
55
|
+
taskModeKeys?: readonly KeyId[];
|
|
56
|
+
/** Human-readable label for the toggle key, shown in footer hints (e.g. "alt+p"). */
|
|
57
|
+
taskModeKeyLabel?: string;
|
|
58
|
+
/** `provider/id` highlighted and preselected in task mode (current Task subagent model). */
|
|
59
|
+
taskSelector?: string;
|
|
60
|
+
}
|
|
61
|
+
/** Rows the browser renders around its list window (search + blank, blank + two detail rows). */
|
|
62
|
+
export declare const BROWSER_FRAME_ROWS = 5;
|
|
63
|
+
/**
|
|
64
|
+
* The alt+p picker component. Hosted as a non-fullscreen bottom-anchored
|
|
65
|
+
* overlay (`ui.showOverlay(..., { anchor: "bottom-center" })`); keyboard-only,
|
|
66
|
+
* since mouse tracking is reserved for fullscreen overlays.
|
|
67
|
+
*/
|
|
68
|
+
export declare class ModelPickerComponent implements Component {
|
|
69
|
+
#private;
|
|
70
|
+
constructor(tui: TUI, settings: ModelBrowserSource, registry: ModelPickerRegistry, scopedModels: ReadonlyArray<ScopedModelItem>, callbacks: ModelPickerCallbacks, options?: ModelPickerOptions);
|
|
71
|
+
invalidate(): void;
|
|
72
|
+
handleInput(data: string): void;
|
|
73
|
+
render(width: number): string[];
|
|
74
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { type ConfiguredThinkingLevel } from "../thinking.js";
|
|
2
|
+
/** Opt-in selectors that can otherwise be literal model-id suffixes. */
|
|
3
|
+
export interface ThinkingSuffixOptions {
|
|
4
|
+
allowMaxSuffix?: boolean;
|
|
5
|
+
allowAutoAlias?: boolean;
|
|
6
|
+
}
|
|
7
|
+
/** Selector parsing options with authoritative literal-model lookup. */
|
|
8
|
+
export interface ModelStringParseOptions extends ThinkingSuffixOptions {
|
|
9
|
+
isLiteralModelId?: (provider: string, id: string) => boolean;
|
|
10
|
+
}
|
|
11
|
+
/** Recognize all configured effort selectors after literal-id matching. */
|
|
12
|
+
export declare const MAX_THINKING_SUFFIX_OPTIONS: ThinkingSuffixOptions;
|
|
13
|
+
/** Parse a suffix while preserving selectors not explicitly enabled. */
|
|
14
|
+
export declare function parseThinkingSuffix(value: string, options?: ThinkingSuffixOptions): ConfiguredThinkingLevel | undefined;
|
|
15
|
+
/**
|
|
16
|
+
* Split a trailing `:<level>` thinking selector off a model pattern.
|
|
17
|
+
*
|
|
18
|
+
* `level` is set when the suffix parses as a concrete thinking level (or, when
|
|
19
|
+
* the caller opts in via `allowMaxSuffix`/`allowAutoAlias`, the guarded `:max`
|
|
20
|
+
* level / `:auto` sentinel); `base` then has the suffix stripped. Otherwise
|
|
21
|
+
* `base` is the input.
|
|
22
|
+
* `minColonIndex` requires the colon to appear strictly after that index —
|
|
23
|
+
* role-alias callers pass the matched alias prefix length.
|
|
24
|
+
*/
|
|
25
|
+
export declare function splitThinkingSuffix(pattern: string, minColonIndex?: number, options?: ThinkingSuffixOptions): {
|
|
26
|
+
base: string;
|
|
27
|
+
level?: ConfiguredThinkingLevel;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Parse a model string in "provider/modelId" format.
|
|
31
|
+
* Returns undefined if the format is invalid.
|
|
32
|
+
*/
|
|
33
|
+
export declare function parseModelString(modelStr: string, options?: ModelStringParseOptions): {
|
|
34
|
+
provider: string;
|
|
35
|
+
id: string;
|
|
36
|
+
thinkingLevel?: ConfiguredThinkingLevel;
|
|
37
|
+
} | undefined;
|
|
38
|
+
export declare function formatModelSelectorValue(selector: string, thinkingLevel: ConfiguredThinkingLevel | undefined): string;
|
|
39
|
+
/**
|
|
40
|
+
* Split a trailing `@<upstream>` provider-routing selector off a model pattern.
|
|
41
|
+
*
|
|
42
|
+
* `openrouter/z-ai/glm-4.7@cerebras` -> base `openrouter/z-ai/glm-4.7`, upstream
|
|
43
|
+
* `cerebras`. Tiered upstreams keep their path (`...@google-ai-studio/priority`).
|
|
44
|
+
* A `:thinking` suffix after the slug is kept on the base
|
|
45
|
+
* (`...@cerebras:high` -> base `...:high`). Returns undefined when there is no
|
|
46
|
+
* `@` or the suffix is not a bare provider slug, so model ids that legitimately
|
|
47
|
+
* contain `@` (`claude-opus-4-8@default`, `workers-ai/@cf/...`) are never split.
|
|
48
|
+
*/
|
|
49
|
+
export declare function splitUpstreamRouting(pattern: string): {
|
|
50
|
+
base: string;
|
|
51
|
+
upstream: string;
|
|
52
|
+
} | undefined;
|