@oh-my-pi/pi-tui 18.2.4 → 18.2.6
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,261 @@
|
|
|
1
|
+
import type { ImageContent } from "@oh-my-pi/pi-ai";
|
|
2
|
+
import { Editor, type EditorTextDecorationContext } from "../components/editor.js";
|
|
3
|
+
import { type KeyId } from "../keys.js";
|
|
4
|
+
import { TUI } from "../tui.js";
|
|
5
|
+
import type { AppKeybinding } from "../app-keybindings.js";
|
|
6
|
+
import { type SpellingFeatures } from "./macos-spelling.js";
|
|
7
|
+
type ConfigurableEditorAction = Extract<AppKeybinding, "app.interrupt" | "app.clear" | "app.exit" | "app.suspend" | "app.display.reset" | "app.thinking.cycle" | "app.model.cycleForward" | "app.model.cycleBackward" | "app.model.select" | "app.model.selectTemporary" | "app.message.dequeue" | "app.retry" | "app.clipboard.pasteImage" | "app.clipboard.pasteTextRaw" | "app.clipboard.copyPrompt">;
|
|
8
|
+
/** Max gap (ms) between two spaces for the later one to count as OS key auto-repeat rather than a
|
|
9
|
+
* deliberate press. OS auto-repeat is fast; a deliberate tap (even a fast one) is slower. */
|
|
10
|
+
export declare const SPACE_REPEAT_MAX_GAP_MS = 120;
|
|
11
|
+
/** Two consecutive inter-space gaps are "mechanical" (machine-driven auto-repeat) when both are
|
|
12
|
+
* within {@link SPACE_REPEAT_MAX_GAP_MS} and differ by no more than this — an absolute jitter floor
|
|
13
|
+
* or, for slower repeat rates, {@link SPACE_REPEAT_JITTER_RATIO} of the smaller gap. OS key-repeat
|
|
14
|
+
* is metronomic; a human smashing the bar is fast but irregular, so its deltas never stay this
|
|
15
|
+
* steady. */
|
|
16
|
+
export declare const SPACE_REPEAT_JITTER_MS = 18;
|
|
17
|
+
export declare const SPACE_REPEAT_JITTER_RATIO = 0.35;
|
|
18
|
+
/** Consecutive mechanical (fast + steady) deltas that confirm the space bar is held and start
|
|
19
|
+
* recording. Needs a sustained metronomic cadence, so jittery smashing and deliberate taps never
|
|
20
|
+
* reach it. */
|
|
21
|
+
export declare const SPACE_HOLD_MECHANICAL_RUN = 2;
|
|
22
|
+
/** Idle gap (ms) after the last repeated space that counts as the space bar being released, ending
|
|
23
|
+
* the push-to-talk recording. Must comfortably exceed the OS key-repeat interval. */
|
|
24
|
+
export declare const SPACE_HOLD_RELEASE_MS = 250;
|
|
25
|
+
/**
|
|
26
|
+
* Extract image-or-other file paths from plain (un-bracketed) clipboard text.
|
|
27
|
+
* Mirrors {@link extractBracketedPastePaths} for terminals/handlers that
|
|
28
|
+
* already stripped the `\x1b[200~`…`\x1b[201~` markers (e.g. clipboard text
|
|
29
|
+
* read directly via `pbpaste`/PowerShell).
|
|
30
|
+
*/
|
|
31
|
+
export declare function extractPastePathsFromText(text: string): string[] | undefined;
|
|
32
|
+
/**
|
|
33
|
+
* Same shape as {@link extractBracketedImagePastePaths} but operates on a
|
|
34
|
+
* payload that has already been stripped of the `\x1b[200~` / `\x1b[201~`
|
|
35
|
+
* markers — used by the assembled-paste router in {@link CustomEditor.handleInput}
|
|
36
|
+
* so split bracketed pastes get the same attachment-path detection as single-chunk ones.
|
|
37
|
+
*
|
|
38
|
+
* When the segment splitter fails (an unescaped space in a real path breaks
|
|
39
|
+
* its every-segment-is-a-path invariant), falls back to
|
|
40
|
+
* {@link extractWholeTextAttachmentPath}, so a dropped macOS screenshot
|
|
41
|
+
* (`Screenshot 2026-06-25 at 1.23.45 PM.png`) attaches as an image instead of
|
|
42
|
+
* degrading to literal text (#6578).
|
|
43
|
+
*/
|
|
44
|
+
export declare function extractImagePastePathsFromText(text: string): string[] | undefined;
|
|
45
|
+
export declare function extractBracketedPastePaths(data: string): string[] | undefined;
|
|
46
|
+
export declare function extractBracketedImagePastePaths(data: string): string[] | undefined;
|
|
47
|
+
export declare function extractBracketedImagePastePath(data: string): string | undefined;
|
|
48
|
+
/**
|
|
49
|
+
* Return a single previewable file path when `text` is exactly one explicit
|
|
50
|
+
* image (`.png`, `.jpg`/`.jpeg`, `.gif`, `.webp`) or video path. Used by the
|
|
51
|
+
* keybind-driven clipboard image paste path so a
|
|
52
|
+
* clipboard whose only payload is an image file (e.g. Finder `Cmd+C` on
|
|
53
|
+
* macOS) attaches the image instead of pasting the path as literal text.
|
|
54
|
+
*
|
|
55
|
+
* Two-stage detection:
|
|
56
|
+
*
|
|
57
|
+
* 1. Splitter pass (shared with the bracketed-paste handler) — handles
|
|
58
|
+
* quoted paths, shell-escaped spaces, and unambiguous single tokens.
|
|
59
|
+
* Returns the single previewable path when it parses cleanly; explicitly
|
|
60
|
+
* returns `undefined` when the splitter found multiple segments (so
|
|
61
|
+
* ambiguous multi-path clipboard text like `/tmp/a.png /tmp/b.png`
|
|
62
|
+
* still falls through to the text fallback instead of being mis-loaded
|
|
63
|
+
* as one giant path).
|
|
64
|
+
* 2. {@link extractWholeTextAttachmentPath} — only reached when the splitter
|
|
65
|
+
* failed (every segment must look like an explicit path; an unescaped
|
|
66
|
+
* space in a real path breaks that). This is what recovers macOS
|
|
67
|
+
* screenshot filenames like
|
|
68
|
+
* `/Users/me/Desktop/Screenshot 2026-06-25 at 1.23.45 PM.png`.
|
|
69
|
+
*/
|
|
70
|
+
export declare function extractImagePathFromText(text: string): string | undefined;
|
|
71
|
+
/** A large text paste staged as a composer chip. `content` feeds the band card's snippet and
|
|
72
|
+
* captions; the submit-time expansion (verbatim content or a wrapped block) lives in the
|
|
73
|
+
* editor's atom table under `label`. */
|
|
74
|
+
export interface TextAttachment {
|
|
75
|
+
n: number;
|
|
76
|
+
label: string;
|
|
77
|
+
content: string;
|
|
78
|
+
lineCount: number;
|
|
79
|
+
charCount: number;
|
|
80
|
+
}
|
|
81
|
+
/** One visible composer attachment, in band order (vision attachments first, then text pastes). */
|
|
82
|
+
export type ComposerChipDescriptor = {
|
|
83
|
+
kind: "image" | "video";
|
|
84
|
+
n: number;
|
|
85
|
+
image: ImageContent;
|
|
86
|
+
link: string | undefined;
|
|
87
|
+
} | {
|
|
88
|
+
kind: "paste";
|
|
89
|
+
n: number;
|
|
90
|
+
text: TextAttachment;
|
|
91
|
+
};
|
|
92
|
+
/**
|
|
93
|
+
* Custom editor that handles configurable app-level shortcuts for coding-agent.
|
|
94
|
+
*/
|
|
95
|
+
export declare class CustomEditor extends Editor {
|
|
96
|
+
#private;
|
|
97
|
+
imageLinks?: readonly (string | undefined)[];
|
|
98
|
+
/** Draft images pasted into the composer, consumed on submit. Co-located with
|
|
99
|
+
* {@link imageLinks} so every piece of draft-image state lives on the editor. */
|
|
100
|
+
pendingImages: ImageContent[];
|
|
101
|
+
/** Per-image source links (file:// targets) parallel to {@link pendingImages};
|
|
102
|
+
* `undefined` entries are images without a backing reference yet. */
|
|
103
|
+
pendingImageLinks: (string | undefined)[];
|
|
104
|
+
/** Large text pastes staged as compact chip tokens; expansion lives in the atom table.
|
|
105
|
+
* Numbered by a per-draft monotonic counter so a deleted chip never recycles its number
|
|
106
|
+
* (labels key the atom table). */
|
|
107
|
+
pendingTexts: TextAttachment[];
|
|
108
|
+
/** Host-wired producer of per-image `file://` links (session blob store); drives clickable
|
|
109
|
+
* chip tokens for restored drafts (esc-esc, `/tree`, branch). */
|
|
110
|
+
draftImageLinkMaterializer?: (images: readonly ImageContent[]) => Promise<(string | undefined)[] | undefined>;
|
|
111
|
+
/**
|
|
112
|
+
* The host {@link TUI}, captured when a plugin constructs this editor through
|
|
113
|
+
* the upstream-pi `(tui, theme, keybindings)` convention. Undefined for omp's
|
|
114
|
+
* own `new CustomEditor(theme)` callers (they drive repaints through the
|
|
115
|
+
* interactive-mode wiring instead). Plugins that call `this.tui.requestRender()`
|
|
116
|
+
* in their overrides read it here (issue #4766).
|
|
117
|
+
*/
|
|
118
|
+
tui?: TUI;
|
|
119
|
+
/**
|
|
120
|
+
* Accept both the omp constructor convention — `new CustomEditor(theme)` —
|
|
121
|
+
* and the upstream-pi `Editor` convention — `new Editor(tui, theme, keybindings)`
|
|
122
|
+
* — that {@link ExtensionUIContext.setEditorComponent}'s factory contract
|
|
123
|
+
* advertises `(tui, theme, keybindings)`. Plugins written against upstream pi
|
|
124
|
+
* subclass `CustomEditor`/`Editor` and forward `super(tui, theme, keybindings)`;
|
|
125
|
+
* without this shim the `TUI` lands in the `theme` slot and every render throws
|
|
126
|
+
* `undefined is not an object (evaluating 'this.#theme.symbols.boxRound')`
|
|
127
|
+
* (issue #4766). We locate the real {@link EditorTheme} among the args by shape
|
|
128
|
+
* (it carries `symbols`/`borderColor`) rather than by position, and capture a
|
|
129
|
+
* leading {@link TUI} so plugin overrides calling `this.tui.requestRender()`
|
|
130
|
+
* keep working.
|
|
131
|
+
*/
|
|
132
|
+
constructor(...args: readonly unknown[]);
|
|
133
|
+
/** Independently configure typo detection, word autocomplete, and autocorrect. */
|
|
134
|
+
setSpellingFeatures(features: SpellingFeatures): void;
|
|
135
|
+
/** Clear the composer draft: optionally commit `historyText` to history, then
|
|
136
|
+
* reset the editor text and all pending draft-image state. The shared tail of
|
|
137
|
+
* every "message submitted" path; pass no argument for a plain discard. */
|
|
138
|
+
clearDraft(historyText?: string): void;
|
|
139
|
+
/** Preserve a canceled draft in local navigation, then clear the composer. */
|
|
140
|
+
clearDraftForRecall(): void;
|
|
141
|
+
restoreHistoryState(restore?: () => void): void;
|
|
142
|
+
/** Replace the composer draft with a restored historical prompt: re-attaches the message's
|
|
143
|
+
* images, collapses stored `[Image #N, WxH]` markers back into compact chip tokens (so the
|
|
144
|
+
* chips band and atomic deletion return), and re-materializes `file://` links so the tokens
|
|
145
|
+
* are clickable again instead of degrading to dead text (esc-esc branch, `/tree`). */
|
|
146
|
+
setDraft(text: string, images?: readonly ImageContent[]): void;
|
|
147
|
+
/** Set restored text with image, skill, and model references collapsed into atomic chips.
|
|
148
|
+
* Leaves pending image/text state untouched — callers own that. */
|
|
149
|
+
setCollapsedText(text: string): void;
|
|
150
|
+
/**
|
|
151
|
+
* Host-owned skill registry probe: the SKILL.md path for a registered skill, else
|
|
152
|
+
* `undefined`. Only registered skills collapse into chips — an unknown `/skill:<name>`
|
|
153
|
+
* stays literal text — and the path makes the chip a clickable link. Startup defaults
|
|
154
|
+
* to "none known".
|
|
155
|
+
*/
|
|
156
|
+
skillFilePath: (name: string) => string | undefined;
|
|
157
|
+
/** Host-owned model probe: maps a mentionable selector to its display chip label. */
|
|
158
|
+
modelMentionLabel: (selector: string) => string | undefined;
|
|
159
|
+
/** Host-owned session probe: maps a persisted model pseudonym back to its selector. */
|
|
160
|
+
modelMentionSelector: (agent: string) => string | undefined;
|
|
161
|
+
/**
|
|
162
|
+
* Late-bound OSC 8 file link renderer. Startup stays plain until the full
|
|
163
|
+
* interactive graph supplies the settings-aware implementation.
|
|
164
|
+
*/
|
|
165
|
+
fileHyperlink: (filePath: string, text: string) => string;
|
|
166
|
+
/** Stage `content` as a text-attachment chip: inserts the compact token at the cursor and
|
|
167
|
+
* registers `expansion` (default: the content itself) in the atom table for submit. */
|
|
168
|
+
insertTextAttachment(content: string, expansion?: string): void;
|
|
169
|
+
/** Cached read-only attachments whose chip token remains in the buffer.
|
|
170
|
+
* Deleting a token hides its chip and drops the attachment from submission. */
|
|
171
|
+
composerChips(): readonly ComposerChipDescriptor[];
|
|
172
|
+
/** Treat image/paste references — compact chip tokens and bracketed markers alike — as
|
|
173
|
+
* indivisible: a stray backspace deletes the whole token instead of corrupting it. */
|
|
174
|
+
atomicTokenPattern: RegExp;
|
|
175
|
+
/** Magic-keyword shimmer cadence — drives one editor repaint every 70 ms while
|
|
176
|
+
* a keyword is on screen and the prompt is focused. ~14 frames/s is smooth
|
|
177
|
+
* without flooding the renderer. */
|
|
178
|
+
static readonly SHIMMER_FRAME_MS = 70;
|
|
179
|
+
/** Time for the gradient to sweep one full cycle across each keyword. */
|
|
180
|
+
static readonly SHIMMER_PERIOD_MS = 1800;
|
|
181
|
+
/** Decorate magic keywords, attachments, and the queue-composer header/list markers.
|
|
182
|
+
* Queue shorthand reserves its first logical line as a dim `Queueing` label; sequential
|
|
183
|
+
* item markers use the accent color so separate follow-ups remain visible while composing. */
|
|
184
|
+
decorateText: (text: string, context: EditorTextDecorationContext) => string;
|
|
185
|
+
/** Optional test override for the magic-keyword shimmer gate. */
|
|
186
|
+
magicKeywordsEnabledOverride: boolean | undefined;
|
|
187
|
+
/**
|
|
188
|
+
* Host-owned setting reader. Startup defaults to enabled without loading the
|
|
189
|
+
* settings graph; InteractiveMode replaces this with the live session setting.
|
|
190
|
+
*/
|
|
191
|
+
magicKeywordsEnabled: () => boolean;
|
|
192
|
+
/**
|
|
193
|
+
* Late-bound OSC hyperlink renderer. Startup stays plain until the full
|
|
194
|
+
* interactive graph supplies the settings-aware implementation.
|
|
195
|
+
*/
|
|
196
|
+
imageReferenceHyperlink: (label: string, index: number, imageLinks: readonly (string | undefined)[] | undefined, renderLabel: (text: string) => string) => string;
|
|
197
|
+
/** Bind the host's render request callback. Idempotent — the host wires this
|
|
198
|
+
* once after construction (and again after `setEditorComponent` swaps the
|
|
199
|
+
* editor). Passing `undefined` clears any pending frame. */
|
|
200
|
+
setShimmerRepaintHandler(handler: (() => void) | undefined): void;
|
|
201
|
+
onEscape?: () => void;
|
|
202
|
+
onClear?: () => void;
|
|
203
|
+
onExit?: () => void;
|
|
204
|
+
onDisplayReset?: () => void;
|
|
205
|
+
onCycleThinkingLevel?: () => void;
|
|
206
|
+
onCycleModelForward?: () => void;
|
|
207
|
+
onCycleModelBackward?: () => void;
|
|
208
|
+
onSelectModel?: () => void;
|
|
209
|
+
onSuspend?: () => void;
|
|
210
|
+
onSelectModelTemporary?: () => void;
|
|
211
|
+
/** Called when the configured copy-prompt shortcut is pressed. */
|
|
212
|
+
onCopyPrompt?: () => void;
|
|
213
|
+
/** Called when the configured image-paste shortcut is pressed. */
|
|
214
|
+
onPasteImage?: () => Promise<boolean>;
|
|
215
|
+
/** Called when a bracketed paste contains one or more image or video file paths. */
|
|
216
|
+
onPasteImagePath?: (path: string) => void | Promise<void>;
|
|
217
|
+
/** Called when the configured raw text-paste shortcut is pressed. */
|
|
218
|
+
onPasteTextRaw?: () => void;
|
|
219
|
+
/** Called when the configured dequeue shortcut is pressed. */
|
|
220
|
+
onDequeue?: () => void;
|
|
221
|
+
/** Called when the configured retry shortcut is pressed. */
|
|
222
|
+
onRetry?: () => void;
|
|
223
|
+
/** Called when Caps Lock is pressed. */
|
|
224
|
+
onCapsLock?: () => void;
|
|
225
|
+
/** Called when left-arrow is pressed while the editor is empty (cursor necessarily at start). */
|
|
226
|
+
onLeftAtStart?: () => void;
|
|
227
|
+
/** Fired when a sustained space-bar hold is recognized — the push-to-talk STT start. The
|
|
228
|
+
* optimistically-typed spaces have already been deleted by the time this runs. */
|
|
229
|
+
onSpaceHoldStart?: () => void;
|
|
230
|
+
/** Fired when the held space bar is released (detected as an idle gap with no further repeated
|
|
231
|
+
* spaces) — the push-to-talk STT stop. */
|
|
232
|
+
onSpaceHoldEnd?: () => void;
|
|
233
|
+
/** Gate for the space-hold gesture. Returns false to keep the space bar inserting spaces
|
|
234
|
+
* normally; wired to `stt.enabled` so disabling STT restores plain space behavior. */
|
|
235
|
+
sttHoldEnabled?: () => boolean;
|
|
236
|
+
setActionKeys(action: ConfigurableEditorAction, keys: KeyId[]): void;
|
|
237
|
+
/**
|
|
238
|
+
* Register a custom key handler. Extensions use this for shortcuts.
|
|
239
|
+
*/
|
|
240
|
+
setCustomKeyHandler(key: KeyId, handler: () => void): void;
|
|
241
|
+
/**
|
|
242
|
+
* Remove a custom key handler.
|
|
243
|
+
*/
|
|
244
|
+
removeCustomKeyHandler(key: KeyId): void;
|
|
245
|
+
/**
|
|
246
|
+
* Clear all custom key handlers.
|
|
247
|
+
*/
|
|
248
|
+
clearCustomKeyHandlers(): void;
|
|
249
|
+
handleInput(data: string): void;
|
|
250
|
+
/**
|
|
251
|
+
* Route a keystroke through the base text-editor pipeline only, skipping the
|
|
252
|
+
* editor-scoped shortcut interception in {@link handleInput}. Used when the
|
|
253
|
+
* editor is mounted for draft editing beneath another focused surface — e.g.
|
|
254
|
+
* an Ask dialog opened over a non-empty prompt — so finishing or submitting
|
|
255
|
+
* the draft cannot fire an editor-slot shortcut that clears
|
|
256
|
+
* `editorContainer` and orphans the overlay. Only text editing, cursor
|
|
257
|
+
* movement, submission, and the clear action reach the buffer.
|
|
258
|
+
*/
|
|
259
|
+
handleDraftEdit(data: string): void;
|
|
260
|
+
}
|
|
261
|
+
export {};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Component } from "../index.js";
|
|
2
|
+
/** Set the process-wide editor gap layout. */
|
|
3
|
+
export declare function setEditorGapComposerShape(shape: string): void;
|
|
4
|
+
/**
|
|
5
|
+
* One-line top margin between the working/status HUD row and the editor.
|
|
6
|
+
* The band composer's status band is designed to sit flush under the working
|
|
7
|
+
* row, so the gap collapses there — but only while that row actually rendered
|
|
8
|
+
* content (the loader and idle title bring their own leading blank). An empty
|
|
9
|
+
* status row keeps the gap so the band never sits flush against the
|
|
10
|
+
* transcript. Shape and row state are read at render time, so runtime changes
|
|
11
|
+
* apply immediately.
|
|
12
|
+
*/
|
|
13
|
+
export declare class EditorTopGap implements Component {
|
|
14
|
+
readonly statusRowOccupied: () => boolean;
|
|
15
|
+
/** @param statusRowOccupied Whether the status/working row directly above rendered lines this frame. */
|
|
16
|
+
constructor(statusRowOccupied: () => boolean);
|
|
17
|
+
render(_width: number): readonly string[];
|
|
18
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { AutocompleteItem } from "../index.js";
|
|
2
|
+
export declare function getEmojiSuggestions(textBeforeCursor: string): {
|
|
3
|
+
items: AutocompleteItem[];
|
|
4
|
+
prefix: string;
|
|
5
|
+
} | null;
|
|
6
|
+
export declare function applyEmojiCompletion(lines: string[], cursorLine: number, cursorCol: number, item: AutocompleteItem, prefix: string): {
|
|
7
|
+
lines: string[];
|
|
8
|
+
cursorLine: number;
|
|
9
|
+
cursorCol: number;
|
|
10
|
+
};
|
|
11
|
+
export declare function tryEmojiInlineReplace(textBeforeCursor: string): {
|
|
12
|
+
replaceLen: number;
|
|
13
|
+
insert: string;
|
|
14
|
+
} | null;
|
|
15
|
+
export declare function isEmojiPrefix(prefix: string): boolean;
|
|
16
|
+
export declare function expandEmoticons(text: string): string;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Autocomplete for GitHub issue/PR references typed as `#<number>` (e.g. `#3164`).
|
|
3
|
+
*
|
|
4
|
+
* Mirrors the `@` file-reference and `scheme://` internal-url conventions: the
|
|
5
|
+
* token is rewritten to an internal URL (`pr://3164` or `issue://3164`) plus a
|
|
6
|
+
* trailing space, and the existing tool-mediated pipeline (the `read` tool →
|
|
7
|
+
* InternalUrlRouter → `gh`) resolves it from the session cwd's git remote.
|
|
8
|
+
*
|
|
9
|
+
* No network at suggestion time — candidates are generated locally. GitHub
|
|
10
|
+
* shares the issue/PR number space and there is no cheap way to tell which a
|
|
11
|
+
* given number is while typing, so both a PR and an Issue candidate are offered
|
|
12
|
+
* by default. Naming the type first (`pr #3164` / `issue #3164`) constrains the
|
|
13
|
+
* candidates to that kind. Anything that is not a standalone `#<number>` token
|
|
14
|
+
* keeps falling through to the existing prompt-action menu.
|
|
15
|
+
*/
|
|
16
|
+
import type { AutocompleteItem } from "../index.js";
|
|
17
|
+
export interface GithubRefContext {
|
|
18
|
+
/** Text to replace on accept: `#3164`, or `pr #3164` when a qualifier precedes it. */
|
|
19
|
+
prefix: string;
|
|
20
|
+
/** Type the user named (`pr`/`pull` → `pr`, `issue` → `issue`), or null to offer both. */
|
|
21
|
+
qualifier: "pr" | "issue" | null;
|
|
22
|
+
/** The numeric reference, e.g. `3164`. */
|
|
23
|
+
number: string;
|
|
24
|
+
}
|
|
25
|
+
export declare function getGithubRefContext(textBeforeCursor: string): GithubRefContext | null;
|
|
26
|
+
/**
|
|
27
|
+
* Suggestions for a `#<number>` token. Both kinds are offered unless the user
|
|
28
|
+
* named a type (`pr #3164` / `issue #3164`), in which case only that kind is
|
|
29
|
+
* offered. Returns `null` when the text before the cursor is not a standalone
|
|
30
|
+
* `#<number>` token.
|
|
31
|
+
*/
|
|
32
|
+
export declare function getGithubRefSuggestions(textBeforeCursor: string): {
|
|
33
|
+
items: AutocompleteItem[];
|
|
34
|
+
prefix: string;
|
|
35
|
+
} | null;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/** A gradient keyword highlighter.
|
|
2
|
+
*
|
|
3
|
+
* - `resetTo` is the SGR foreground sequence re-emitted after each painted
|
|
4
|
+
* keyword so surrounding text keeps its color; it defaults to a plain
|
|
5
|
+
* foreground reset (editor / default-colored text).
|
|
6
|
+
* - `phase` ∈ [0, 1) rotates the gradient stops cyclically; pass `Date.now()`-
|
|
7
|
+
* derived values to animate a shimmer. Defaults to `0` (the static
|
|
8
|
+
* sent-bubble palette). */
|
|
9
|
+
export type KeywordHighlighter = (text: string, resetTo?: string, phase?: number) => string;
|
|
10
|
+
/** Declarative spec for {@link createGradientHighlighter}. */
|
|
11
|
+
export interface GradientHighlightSpec {
|
|
12
|
+
/** Cheap, stateless presence probe used to skip the boundary regex on most lines. Must be non-global. */
|
|
13
|
+
probe: RegExp;
|
|
14
|
+
/** Global, word-bounded match regex walked by `.replace`. */
|
|
15
|
+
highlight: RegExp;
|
|
16
|
+
/** Number of color stops swept across the gradient. */
|
|
17
|
+
stops: number;
|
|
18
|
+
/** Maps a normalized position `t` in [0, 1) to an HSL hue in degrees. */
|
|
19
|
+
hue: (t: number) => number;
|
|
20
|
+
/** HSL saturation percentage. Default 90. */
|
|
21
|
+
saturation?: number;
|
|
22
|
+
/** HSL lightness percentage. Default 62. */
|
|
23
|
+
lightness?: number;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Build a stateless highlighter that paints each standalone match of `highlight`
|
|
27
|
+
* with a smooth HSL gradient for editor display. The returned function adds only
|
|
28
|
+
* zero-width SGR escapes — the visible width is unchanged — and returns the input
|
|
29
|
+
* untouched when `probe` does not match. The palette is compiled lazily and
|
|
30
|
+
* memoized per active color mode.
|
|
31
|
+
*/
|
|
32
|
+
export declare function createGradientHighlighter(spec: GradientHighlightSpec): KeywordHighlighter;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** Normalize a safe sidecar extension for image display files. */
|
|
2
|
+
export declare function normalizeBlobExtension(extension: string | undefined): string | undefined;
|
|
3
|
+
/** Resolve a safe display-file extension from an image MIME type. */
|
|
4
|
+
export declare function blobExtensionForImageMimeType(mimeType: string | undefined): string | undefined;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { ImageContent } from "@oh-my-pi/pi-ai";
|
|
2
|
+
/** Materialized image destination returned by the host blob writer. */
|
|
3
|
+
interface ImageBlobResult {
|
|
4
|
+
displayPath: string;
|
|
5
|
+
}
|
|
6
|
+
/** Cached probe result for a draft image: dimensions, `null` (probe failed), or `undefined`
|
|
7
|
+
* (never probed). */
|
|
8
|
+
export declare function cachedImageDimensions(image: ImageContent): {
|
|
9
|
+
width: number;
|
|
10
|
+
height: number;
|
|
11
|
+
} | null | undefined;
|
|
12
|
+
/** Record a probe result for a draft image (see {@link cachedImageDimensions}). */
|
|
13
|
+
export declare function setCachedImageDimensions(image: ImageContent, dims: {
|
|
14
|
+
width: number;
|
|
15
|
+
height: number;
|
|
16
|
+
} | null): void;
|
|
17
|
+
type ImageBlobWriter = (data: Buffer, options?: {
|
|
18
|
+
extension?: string;
|
|
19
|
+
}) => Promise<ImageBlobResult>;
|
|
20
|
+
type ImageBlobWriterSync = (data: Buffer, options?: {
|
|
21
|
+
extension?: string;
|
|
22
|
+
}) => ImageBlobResult;
|
|
23
|
+
export declare function imageReferenceHyperlink(label: string, index: number, imageLinks: readonly (string | undefined)[] | undefined, renderLabel: (text: string) => string): string;
|
|
24
|
+
export declare function materializeImageReferenceLinks(images: readonly ImageContent[] | undefined, putBlob: ImageBlobWriter): Promise<(string | undefined)[] | undefined>;
|
|
25
|
+
export declare function materializeImageReferenceLinksSync(images: readonly ImageContent[] | undefined, putBlob: ImageBlobWriterSync): (string | undefined)[] | undefined;
|
|
26
|
+
export {};
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/** Shared assistant transcript construction and model-authored link caching. */
|
|
2
|
+
import type { AssistantMessage, Model } from "@oh-my-pi/pi-ai";
|
|
3
|
+
import type { ImageBudget } from "../components/image.js";
|
|
4
|
+
import type { AssistantThinkingRenderer } from "../chat/extension-types.js";
|
|
5
|
+
import { AssistantMessageComponent } from "../chat/assistant-message.js";
|
|
6
|
+
/** Session display capabilities supplied unchanged by the interactive host. */
|
|
7
|
+
export interface AssistantMessageSession {
|
|
8
|
+
readonly model?: Model;
|
|
9
|
+
readonly extensionRunner?: {
|
|
10
|
+
getAssistantThinkingRenderers(): readonly AssistantThinkingRenderer[];
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
/** Host state required to construct and refresh assistant transcript segments. */
|
|
14
|
+
export interface AssistantMessageHost {
|
|
15
|
+
readonly viewSession: AssistantMessageSession;
|
|
16
|
+
readonly effectiveHideThinkingBlock: boolean;
|
|
17
|
+
readonly proseOnlyThinking: boolean;
|
|
18
|
+
readonly assistantImagesVisible: boolean;
|
|
19
|
+
readonly hideToolActivity: boolean;
|
|
20
|
+
readonly toolOutputExpanded: boolean;
|
|
21
|
+
readonly ui: {
|
|
22
|
+
requestRender(): void;
|
|
23
|
+
readonly imageBudget: ImageBudget;
|
|
24
|
+
};
|
|
25
|
+
resolveAssistantMessageLinks(texts: readonly string[]): Promise<ReadonlyMap<string, string>>;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Resolve and cache the current session's model-authored prose links. Existing
|
|
29
|
+
* entries remain available to synchronous transcript rebuilds; links present in
|
|
30
|
+
* this batch are replaced atomically so missing resources cannot retain a stale
|
|
31
|
+
* destination.
|
|
32
|
+
*/
|
|
33
|
+
export declare function refreshAssistantMessageLinkTargets(ctx: AssistantMessageHost, messages: readonly AssistantMessage[]): Promise<ReadonlyMap<string, string>>;
|
|
34
|
+
/** Current resolved destinations for synchronous component construction. */
|
|
35
|
+
export declare function getAssistantMessageLinkTargets(ctx: AssistantMessageHost): ReadonlyMap<string, string>;
|
|
36
|
+
/** Limit a session snapshot to destinations authored by one rendered segment. */
|
|
37
|
+
export declare function assistantMessageLinkTargets(message: AssistantMessage, targets: ReadonlyMap<string, string>): ReadonlyMap<string, string>;
|
|
38
|
+
/**
|
|
39
|
+
* Construct an {@link AssistantMessageComponent} wired to the live context's
|
|
40
|
+
* thinking/image settings. `message` is omitted for the streaming placeholder
|
|
41
|
+
* component and supplied when rendering a persisted turn.
|
|
42
|
+
*/
|
|
43
|
+
export declare function createAssistantMessageComponent(ctx: AssistantMessageHost, message?: AssistantMessage, linkTargets?: ReadonlyMap<string, string>): AssistantMessageComponent;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { AutocompleteItem } from "../index.js";
|
|
2
|
+
/** Lazy runtime capabilities supplied by the internal URL host. */
|
|
3
|
+
export interface InternalUrlCompletionHost {
|
|
4
|
+
completionSchemes(): string[];
|
|
5
|
+
resolveCompletions(scheme: string, query: string, context: InternalUrlCallerContext & {
|
|
6
|
+
signal?: AbortSignal;
|
|
7
|
+
}): Promise<readonly {
|
|
8
|
+
value: string;
|
|
9
|
+
label?: string;
|
|
10
|
+
description?: string;
|
|
11
|
+
}[] | null | undefined>;
|
|
12
|
+
}
|
|
13
|
+
/** Install the runtime URL completion capabilities. */
|
|
14
|
+
export declare function setInternalUrlCompletionHost(host: InternalUrlCompletionHost): void;
|
|
15
|
+
export interface InternalUrlContext {
|
|
16
|
+
/** Lowercased scheme (e.g. `local`). */
|
|
17
|
+
scheme: string;
|
|
18
|
+
/** Text typed after the slashes so far (host + path); may be empty. */
|
|
19
|
+
query: string;
|
|
20
|
+
/** Exact buffer token from its boundary to the cursor (the completion prefix). */
|
|
21
|
+
token: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Detect a completable internal-url token immediately before the cursor.
|
|
25
|
+
* Returns `null` when the text is not a `scheme://` token whose scheme is
|
|
26
|
+
* registered with a completion-capable handler.
|
|
27
|
+
*/
|
|
28
|
+
export declare function extractInternalUrlContext(textBeforeCursor: string): InternalUrlContext | null;
|
|
29
|
+
/** Caller binding shared by tool execution and prompt completion. */
|
|
30
|
+
export interface InternalUrlCallerContext {
|
|
31
|
+
cwd?: string;
|
|
32
|
+
sessionFile?: string;
|
|
33
|
+
sessionId?: string;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Suggestions for the internal-url token ending at the cursor, or `null` when
|
|
37
|
+
* the text is not such a token or no candidate matches the typed query.
|
|
38
|
+
* The optional lazy caller binding overrides cwd and is read only after
|
|
39
|
+
* recognizing an internal-URL token.
|
|
40
|
+
*/
|
|
41
|
+
export declare function getInternalUrlSuggestions(textBeforeCursor: string, cwd?: string, signal?: AbortSignal, getCaller?: () => InternalUrlCallerContext): Promise<{
|
|
42
|
+
items: AutocompleteItem[];
|
|
43
|
+
prefix: string;
|
|
44
|
+
} | null>;
|
|
45
|
+
/** Whether `prefix` (the token a completion was offered for) is an internal-url token. */
|
|
46
|
+
export declare function isInternalUrlPrefix(prefix: string): boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Replace the internal-url token with the selected candidate, appending a
|
|
49
|
+
* trailing space (matching `@` file-reference behavior) so the user can keep
|
|
50
|
+
* typing.
|
|
51
|
+
*/
|
|
52
|
+
export declare function applyInternalUrlCompletion(lines: string[], cursorLine: number, cursorCol: number, item: AutocompleteItem, prefix: string): {
|
|
53
|
+
lines: string[];
|
|
54
|
+
cursorLine: number;
|
|
55
|
+
cursorCol: number;
|
|
56
|
+
};
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import * as native from "@oh-my-pi/pi-natives";
|
|
2
|
+
import type { EditorInlineReplacement, EditorTextAssistProvider, EditorWordReplacements } from "../components/editor.js";
|
|
3
|
+
/** Independently switchable macOS prose-assistance features. */
|
|
4
|
+
export interface SpellingFeatures {
|
|
5
|
+
typoDetection: boolean;
|
|
6
|
+
autocomplete: boolean;
|
|
7
|
+
autocorrect: boolean;
|
|
8
|
+
}
|
|
9
|
+
/** Logical source location for one rendered editor segment. */
|
|
10
|
+
export interface SpellingDecorationContext {
|
|
11
|
+
editorText: string;
|
|
12
|
+
lines: readonly string[];
|
|
13
|
+
line: number;
|
|
14
|
+
startCol: number;
|
|
15
|
+
}
|
|
16
|
+
/** Native spelling operations used by {@link MacOSSpellingProvider}. */
|
|
17
|
+
export interface SpellingBackend {
|
|
18
|
+
isAvailable(): boolean;
|
|
19
|
+
checkSpelling(text: string): Promise<readonly native.SpellingRange[]>;
|
|
20
|
+
completeWord(text: string, start: number, length: number): Promise<readonly string[]>;
|
|
21
|
+
autocorrectWord(text: string, start: number, length: number): Promise<string | null>;
|
|
22
|
+
spellingGuesses(text: string, start: number, length: number): Promise<readonly string[]>;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Bridges Apple's spelling service into the editor's separate typo,
|
|
26
|
+
* word-completion, and autocorrection paths.
|
|
27
|
+
*/
|
|
28
|
+
export declare class MacOSSpellingProvider implements EditorTextAssistProvider {
|
|
29
|
+
#private;
|
|
30
|
+
private readonly backend;
|
|
31
|
+
/** Invoked when an asynchronous spelling result can change rendered output. */
|
|
32
|
+
onUpdate: (() => void) | undefined;
|
|
33
|
+
constructor(backend?: SpellingBackend, styledUnderlines?: boolean);
|
|
34
|
+
/** Apply all three independent feature gates and invalidate rendered typo ranges. */
|
|
35
|
+
setFeatures(features: SpellingFeatures): void;
|
|
36
|
+
/** Add red undercurls to misspellings while preserving visible text width. */
|
|
37
|
+
decorateTypos(text: string, context: SpellingDecorationContext, decorate?: (span: string) => string): string;
|
|
38
|
+
/** Return the cached macOS completion suffix for the word ending at the cursor. */
|
|
39
|
+
getWordCompletion(lines: string[], cursorLine: number, cursorCol: number): string | null;
|
|
40
|
+
/** Return the confident macOS correction after a completed prose word. */
|
|
41
|
+
tryAutocorrect(lines: string[], cursorLine: number, cursorCol: number): Promise<EditorInlineReplacement | null>;
|
|
42
|
+
/** Return macOS replacement guesses for the misspelled word at the cursor. */
|
|
43
|
+
getWordReplacements(lines: string[], cursorLine: number, cursorCol: number): Promise<EditorWordReplacements | null>;
|
|
44
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Build a case-sensitive magic-keyword matcher for prose punctuation boundaries.
|
|
3
|
+
*
|
|
4
|
+
* Sentence punctuation and quotes may touch the keyword, but letters, digits,
|
|
5
|
+
* underscores, slashes, backslashes, hyphens, file-extension dots, symbol
|
|
6
|
+
* references (`foo::keyword`), and immediate call parentheses (`keyword()`)
|
|
7
|
+
* keep the occurrence embedded in code rather than prose.
|
|
8
|
+
*/
|
|
9
|
+
export declare function magicKeywordRegex(keyword: string, flags?: string): RegExp;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gradient-highlight every magic keyword ("ultrathink", "orchestrate",
|
|
3
|
+
* "workflowz") that appears as standalone prose, skipping any occurrence inside a
|
|
4
|
+
* code block, inline code span, or XML/HTML section. Each highlighter paints its
|
|
5
|
+
* own keyword with its own gradient, so chaining is order-independent — the
|
|
6
|
+
* earlier passes only inject zero-width SGR escapes (no backticks or angle
|
|
7
|
+
* brackets), which never confuse the later passes' markdown masking.
|
|
8
|
+
*
|
|
9
|
+
* `resetTo` is the SGR foreground sequence restored after each painted keyword;
|
|
10
|
+
* pass the surrounding text color when decorating already-colored content (e.g.
|
|
11
|
+
* a themed message bubble) so the gradient does not bleed into the rest of the
|
|
12
|
+
* line. Defaults to a plain foreground reset for default-colored editor text.
|
|
13
|
+
*
|
|
14
|
+
* `phase` ∈ [0, 1) cyclically rotates each gradient — the editor passes a
|
|
15
|
+
* `Date.now()`-derived value to animate a Claude-Code-style shimmer while a
|
|
16
|
+
* keyword is on screen and the prompt is focused; sent message bubbles omit it
|
|
17
|
+
* to keep the static gradient.
|
|
18
|
+
*/
|
|
19
|
+
export declare function highlightMagicKeywords(text: string, resetTo?: string, phase?: number): string;
|
|
20
|
+
/**
|
|
21
|
+
* Cheap test for "does this text contain any magic keyword as standalone prose?".
|
|
22
|
+
* Short-circuits on a substring probe before paying for the markdown-aware
|
|
23
|
+
* prose check, so the common "no keyword in buffer" path is just three
|
|
24
|
+
* `String#indexOf`s. Used by the live editor to gate the shimmer timer.
|
|
25
|
+
*/
|
|
26
|
+
export declare function hasMagicKeyword(text: string): boolean;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Return a copy of `text` with identical length (indices map 1:1) where every
|
|
3
|
+
* character inside a non-prose region is replaced by a space. Non-prose regions
|
|
4
|
+
* are markdown fenced code blocks, inline code spans, and HTML/XML tags together
|
|
5
|
+
* with the content they enclose. Newlines are preserved. Text with no construct
|
|
6
|
+
* that could open such a region is returned unchanged.
|
|
7
|
+
*/
|
|
8
|
+
export declare function maskNonProse(text: string): string;
|
|
9
|
+
/**
|
|
10
|
+
* Whether `text` contains a standalone keyword match (per the non-global,
|
|
11
|
+
* word-bounded `word` regex) that lives in prose rather than inside a code
|
|
12
|
+
* block, inline code span, or HTML/XML section. `word` MUST be non-global so
|
|
13
|
+
* `.test` stays stateless.
|
|
14
|
+
*/
|
|
15
|
+
export declare function keywordInProse(text: string, word: RegExp): boolean;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { Model } from "@oh-my-pi/pi-ai";
|
|
2
|
+
import type { AutocompleteItem } from "../index.js";
|
|
3
|
+
import type { ModelBrowserRegistry, ModelBrowserSource } from "../overlays/model-browser.js";
|
|
4
|
+
import type { ModelBrowserItem } from "../overlays/model-browser.js";
|
|
5
|
+
/** Supplies picker-ranked model candidates for the query after `^`. */
|
|
6
|
+
export type ModelMentionCandidateSource = (query: string) => ReadonlyArray<ModelBrowserItem>;
|
|
7
|
+
/** Whether an autocomplete prefix belongs to a model mention. */
|
|
8
|
+
export declare function isModelMentionPrefix(prefix: string): boolean;
|
|
9
|
+
/** Build model mention choices for the whitespace-delimited token at the cursor. */
|
|
10
|
+
export declare function getModelMentionSuggestions(textBeforeCursor: string, candidates: ModelMentionCandidateSource | undefined): {
|
|
11
|
+
items: AutocompleteItem[];
|
|
12
|
+
prefix: string;
|
|
13
|
+
} | null;
|
|
14
|
+
/** Replace the live mention token with the selected canonical selector and a trailing space. */
|
|
15
|
+
export declare function applyModelMentionCompletion(lines: string[], cursorLine: number, cursorCol: number, item: AutocompleteItem, prefix: string): {
|
|
16
|
+
lines: string[];
|
|
17
|
+
cursorLine: number;
|
|
18
|
+
cursorCol: number;
|
|
19
|
+
};
|
|
20
|
+
/** Create a fresh session-scoped model candidate lookup using picker ordering. */
|
|
21
|
+
export declare function createModelMentionSource(host: {
|
|
22
|
+
source: ModelBrowserSource;
|
|
23
|
+
registry: ModelBrowserRegistry;
|
|
24
|
+
scopedModels: () => ReadonlyArray<Model>;
|
|
25
|
+
}): ModelMentionCandidateSource;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dependency-free `^model` mention syntax shared by the composer, message
|
|
3
|
+
* rendering, and the session registry. Kept apart from `model-mentions.ts` so
|
|
4
|
+
* the startup composer prepaint graph never loads the catalog or task agents.
|
|
5
|
+
*/
|
|
6
|
+
import type { Model } from "@oh-my-pi/pi-ai";
|
|
7
|
+
/** Whitespace-delimited token; groups are leading delimiter and selector. Reset lastIndex before reuse. */
|
|
8
|
+
export declare const MODEL_MENTION_RE: RegExp;
|
|
9
|
+
/** Submitted mention; groups are agent pseudonym and display name. */
|
|
10
|
+
export declare const MODEL_MENTION_TAG_RE: RegExp;
|
|
11
|
+
/** A user-tagged model usable as a subagent pseudonym on the current session branch. */
|
|
12
|
+
export interface ModelMention {
|
|
13
|
+
agent: string;
|
|
14
|
+
selector: string;
|
|
15
|
+
name: string;
|
|
16
|
+
}
|
|
17
|
+
/** Expand a composer atom back into its canonical model selector. */
|
|
18
|
+
export declare function modelMentionToken(selector: string): string;
|
|
19
|
+
/** Encode a registered mention for the user message sent to the model. */
|
|
20
|
+
export declare function modelMentionTag(mention: ModelMention): string;
|
|
21
|
+
/** Use the catalog display name, without quotes, or the id when the name is empty. */
|
|
22
|
+
export declare function modelMentionDisplayName(model: Model): string;
|
|
23
|
+
/** Restore known submitted tags to editable selectors; leave unknown agents literal. */
|
|
24
|
+
export declare function expandModelMentionTags(text: string, selectorFor: (agent: string) => string | undefined): string;
|