@oh-my-pi/pi-tui 18.2.3 → 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 +29 -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/image.d.ts +18 -16
- 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/image.ts +80 -53
- 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 +70 -8
- package/src/utils.ts +8 -0
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
import type { ToolTier } from "@oh-my-pi/pi-agent-core";
|
|
2
|
+
import { parseStreamingJson } from "@oh-my-pi/pi-utils";
|
|
3
|
+
import { type Component, Container, Text } from "../index";
|
|
4
|
+
import type { Theme } from "../theme/theme";
|
|
5
|
+
import { replaceTabs } from "../render/render-utils";
|
|
6
|
+
import type { RenderResultOptions, ToolActivitySummary, ToolRenderer } from "./renderer";
|
|
7
|
+
import { renderDefaultToolExecution } from "./default-renderer";
|
|
8
|
+
import { parseMCPToolName } from "./mcp";
|
|
9
|
+
|
|
10
|
+
/** Mounted device display callbacks, independent of tool execution state. */
|
|
11
|
+
export interface XdevMountedRenderer {
|
|
12
|
+
label?: string;
|
|
13
|
+
renderCall?(...args: Parameters<ToolRenderer["renderCall"]>): unknown;
|
|
14
|
+
renderResult?(...args: Parameters<ToolRenderer["renderResult"]>): unknown;
|
|
15
|
+
mergeCallAndResult?: boolean;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/** Mounted tool presentation state supplied by the host's canonical tool map. */
|
|
19
|
+
export interface XdevMountedState {
|
|
20
|
+
readonly mountedNames: ReadonlySet<string>;
|
|
21
|
+
readonly tools: ReadonlyMap<string, XdevMountedRenderer>;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function isComponent(value: unknown): value is Component {
|
|
25
|
+
return typeof value === "object" && value !== null && "render" in value && typeof value.render === "function";
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/** Result metadata consumed by delegated device rendering. */
|
|
29
|
+
export interface XdevRenderDispatch {
|
|
30
|
+
tool: string;
|
|
31
|
+
mode: "help" | "execute";
|
|
32
|
+
args?: Record<string, unknown>;
|
|
33
|
+
tier?: ToolTier;
|
|
34
|
+
inner?: unknown;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
let rendererLookup: ((name: string) => ToolRenderer | undefined) | undefined;
|
|
38
|
+
|
|
39
|
+
/** Wire the wrapped-renderer lookup. Called once by `renderers.ts`. */
|
|
40
|
+
export function setXdevRendererLookup(lookup: (name: string) => ToolRenderer | undefined): void {
|
|
41
|
+
rendererLookup = lookup;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/** Decode the (possibly partially streamed) inner args JSON string into display args. */
|
|
45
|
+
function decodeInnerArgs(raw: unknown): Record<string, unknown> {
|
|
46
|
+
if (typeof raw !== "string" || raw.length === 0) return {};
|
|
47
|
+
const parsed = parseStreamingJson<Record<string, unknown>>(raw);
|
|
48
|
+
const args: Record<string, unknown> = parsed && typeof parsed === "object" ? { ...parsed } : {};
|
|
49
|
+
args.__partialJson = raw;
|
|
50
|
+
return args;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/** Renderer for a mounted device: the live mounted tool's own render callbacks
|
|
54
|
+
* (custom/MCP/image tools carry them) first, then the static built-in renderer
|
|
55
|
+
* map keyed by name. */
|
|
56
|
+
function resolveDeviceRenderer(
|
|
57
|
+
name: string,
|
|
58
|
+
mounted: XdevMountedRenderer | undefined,
|
|
59
|
+
): XdevMountedRenderer | undefined {
|
|
60
|
+
if (mounted && (mounted.renderCall || mounted.renderResult)) {
|
|
61
|
+
return mounted;
|
|
62
|
+
}
|
|
63
|
+
return rendererLookup?.(name);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/** Human label for a device write: mounted tool label, else `server/tool` for MCP names. */
|
|
67
|
+
function displayDeviceLabel(name: string, mounted?: { label?: string }): string {
|
|
68
|
+
if (mounted?.label) return mounted.label;
|
|
69
|
+
const parsed = parseMCPToolName(name);
|
|
70
|
+
if (parsed) return `${parsed.serverName}/${parsed.toolName}`;
|
|
71
|
+
return name;
|
|
72
|
+
}
|
|
73
|
+
/** Salient inner-arg keys for the compact activity line: the verb first, then its object. */
|
|
74
|
+
const ACTIVITY_VERB_KEYS = ["action", "op", "command"] as const;
|
|
75
|
+
const ACTIVITY_OBJECT_KEYS = ["query", "symbol", "path", "file", "pattern", "url", "name"] as const;
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Compact `label · verb object` activity summary for a device write, so a
|
|
79
|
+
* squeezed transcript row reads `LSP · references foo` instead of
|
|
80
|
+
* `Write · xd://lsp`. Prose payloads (resolution devices, report_issue)
|
|
81
|
+
* surface their first line instead.
|
|
82
|
+
*/
|
|
83
|
+
export function xdevActivitySummary(
|
|
84
|
+
name: string,
|
|
85
|
+
content: unknown,
|
|
86
|
+
resolveMounted?: (name: string) => XdevMountedRenderer | undefined,
|
|
87
|
+
): ToolActivitySummary {
|
|
88
|
+
const mounted = resolveMounted?.(name);
|
|
89
|
+
const args = decodeInnerArgs(content);
|
|
90
|
+
const pick = (keys: readonly string[]): string | undefined => {
|
|
91
|
+
for (const key of keys) {
|
|
92
|
+
const value = args[key];
|
|
93
|
+
if (typeof value === "string" && value.length > 0) return value.split("\n", 1)[0];
|
|
94
|
+
}
|
|
95
|
+
return undefined;
|
|
96
|
+
};
|
|
97
|
+
let detail = [pick(ACTIVITY_VERB_KEYS), pick(ACTIVITY_OBJECT_KEYS)].filter(Boolean).join(" ");
|
|
98
|
+
if (!detail && typeof content === "string" && !content.trimStart().startsWith("{")) {
|
|
99
|
+
detail = content.trim().split("\n", 1)[0];
|
|
100
|
+
}
|
|
101
|
+
return { label: displayDeviceLabel(name, mounted), detail: detail || undefined };
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/** Drop the streaming-decode bookkeeping key before showing inner args. */
|
|
105
|
+
function displayDeviceArgs(args: Record<string, unknown>): Record<string, unknown> {
|
|
106
|
+
const { __partialJson: _partial, ...rest } = args;
|
|
107
|
+
return rest;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/** Pre-execution card so a streamed `xd://` write does not look like a hung MCP call. */
|
|
111
|
+
function renderQueuedXdevCall(
|
|
112
|
+
label: string,
|
|
113
|
+
args: Record<string, unknown>,
|
|
114
|
+
options: RenderResultOptions,
|
|
115
|
+
theme: Theme,
|
|
116
|
+
): Component {
|
|
117
|
+
return renderDefaultToolExecution(
|
|
118
|
+
{
|
|
119
|
+
label: `queued ${label}`,
|
|
120
|
+
args: displayDeviceArgs(args),
|
|
121
|
+
options: { ...options, isPartial: true, spinnerFrame: undefined },
|
|
122
|
+
},
|
|
123
|
+
theme,
|
|
124
|
+
);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Streaming-safe call preview for an `xd://` write. Until the write actually
|
|
129
|
+
* executes (`executionStarted` / `tool_execution_start`), show a queued/planning
|
|
130
|
+
* card so Grok-style think-after-toolcall stalls do not look like a hung
|
|
131
|
+
* inner tool. `argsComplete` alone is not enough: exclusive writes can sit
|
|
132
|
+
* complete at `message_end` while an earlier call still runs. Once execution
|
|
133
|
+
* starts, forward the decoded inner args to the mounted tool's renderer
|
|
134
|
+
* (session instance first, then the static map). Returns `undefined` (render
|
|
135
|
+
* nothing) when no renderer produces output.
|
|
136
|
+
*/
|
|
137
|
+
export function renderXdevCall(
|
|
138
|
+
name: string,
|
|
139
|
+
content: unknown,
|
|
140
|
+
options: RenderResultOptions,
|
|
141
|
+
theme: Theme,
|
|
142
|
+
resolveMounted?: (name: string) => XdevMountedRenderer | undefined,
|
|
143
|
+
): Component | undefined {
|
|
144
|
+
const mounted = resolveMounted?.(name);
|
|
145
|
+
const args = decodeInnerArgs(content);
|
|
146
|
+
if (!options.executionStarted) {
|
|
147
|
+
return renderQueuedXdevCall(displayDeviceLabel(name, mounted), args, options, theme);
|
|
148
|
+
}
|
|
149
|
+
const renderer = resolveDeviceRenderer(name, mounted);
|
|
150
|
+
if (renderer?.renderCall) {
|
|
151
|
+
const rendered = renderer.renderCall(args, options, theme);
|
|
152
|
+
return isComponent(rendered) ? rendered : undefined;
|
|
153
|
+
}
|
|
154
|
+
return renderDefaultToolExecution({ label: mounted?.label ?? name, args, options }, theme);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/** Forward an `xd://` dispatch result to the mounted tool's renderer. */
|
|
158
|
+
export function renderXdevResult(
|
|
159
|
+
dispatch: XdevRenderDispatch,
|
|
160
|
+
result: { content: Array<{ type: string; text?: string }>; isError?: boolean },
|
|
161
|
+
options: RenderResultOptions,
|
|
162
|
+
theme: Theme,
|
|
163
|
+
resolveMounted?: (name: string) => XdevMountedRenderer | undefined,
|
|
164
|
+
): Component | undefined {
|
|
165
|
+
const text = result.content
|
|
166
|
+
.map(block => (block.type === "text" ? block.text : ""))
|
|
167
|
+
.filter(Boolean)
|
|
168
|
+
.join("\n");
|
|
169
|
+
if (dispatch.mode === "help") {
|
|
170
|
+
return text ? new Text(theme.fg("toolOutput", replaceTabs(text)), 0, 0) : undefined;
|
|
171
|
+
}
|
|
172
|
+
const mounted = resolveMounted?.(dispatch.tool);
|
|
173
|
+
const renderer = resolveDeviceRenderer(dispatch.tool, mounted);
|
|
174
|
+
const innerResult = { content: result.content, details: dispatch.inner, isError: result.isError };
|
|
175
|
+
if (renderer?.renderResult) {
|
|
176
|
+
const parts: Component[] = [];
|
|
177
|
+
// Emulate the unmerged call+result topology inside the write block for
|
|
178
|
+
// renderers that expect a separate call header.
|
|
179
|
+
if (!renderer.mergeCallAndResult && renderer.renderCall) {
|
|
180
|
+
const call = renderer.renderCall(dispatch.args ?? {}, { ...options, isPartial: false }, theme);
|
|
181
|
+
if (isComponent(call)) parts.push(call);
|
|
182
|
+
}
|
|
183
|
+
const rendered = renderer.renderResult(innerResult, options, theme, dispatch.args ?? {});
|
|
184
|
+
if (isComponent(rendered)) parts.push(rendered);
|
|
185
|
+
if (parts.length === 1) return parts[0];
|
|
186
|
+
if (parts.length > 1) {
|
|
187
|
+
const box = new Container();
|
|
188
|
+
for (const part of parts) box.addChild(part);
|
|
189
|
+
return box;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
return renderDefaultToolExecution(
|
|
193
|
+
{
|
|
194
|
+
label: mounted?.label ?? dispatch.tool,
|
|
195
|
+
args: dispatch.args ?? {},
|
|
196
|
+
result: { output: text, isError: result.isError },
|
|
197
|
+
options,
|
|
198
|
+
},
|
|
199
|
+
theme,
|
|
200
|
+
);
|
|
201
|
+
}
|
package/src/tui.ts
CHANGED
|
@@ -52,7 +52,8 @@ import {
|
|
|
52
52
|
visibleWidth,
|
|
53
53
|
} from "./utils";
|
|
54
54
|
|
|
55
|
-
|
|
55
|
+
/** Full-attribute reset terminating each rendered content row. */
|
|
56
|
+
export const SEGMENT_RESET = "\x1b[0m";
|
|
56
57
|
/**
|
|
57
58
|
* Per-line terminator written after every non-image content row. It closes both
|
|
58
59
|
* SGR state and any in-flight OSC 8 hyperlink so styles/links cannot bleed
|
|
@@ -122,8 +123,23 @@ export interface RenderScheduler {
|
|
|
122
123
|
scheduleRender(callback: () => void, delayMs: number): RenderTimer;
|
|
123
124
|
}
|
|
124
125
|
|
|
126
|
+
/** Rows painted by one TUI frame, observed through `TUIOptions.onPaint`. */
|
|
127
|
+
export interface TuiPaint {
|
|
128
|
+
/** Rows committed above the viewport by this paint (native scrollback). Empty on diff paints and alt-screen paints. */
|
|
129
|
+
readonly history: readonly string[];
|
|
130
|
+
/** Complete live viewport after this paint: one prepared (normalized, width-truncated, SGR-coalesced) ANSI string per row. */
|
|
131
|
+
readonly viewport: readonly string[];
|
|
132
|
+
/** True when this paint erased scrollback and repainted from row zero (destructive reset or history replay): consumers drop their history copy before applying `history`. */
|
|
133
|
+
readonly reset: boolean;
|
|
134
|
+
/** True when `viewport` is an alternate-screen overlay; history is untouched. */
|
|
135
|
+
readonly alt: boolean;
|
|
136
|
+
readonly columns: number;
|
|
137
|
+
readonly rows: number;
|
|
138
|
+
}
|
|
139
|
+
|
|
125
140
|
export interface TUIOptions {
|
|
126
141
|
renderScheduler?: RenderScheduler;
|
|
142
|
+
onPaint?: (paint: TuiPaint) => void;
|
|
127
143
|
}
|
|
128
144
|
/** Physical terminal dimensions supplied to a frame provider. */
|
|
129
145
|
export interface ViewportSize {
|
|
@@ -773,6 +789,7 @@ export class TUI extends Container {
|
|
|
773
789
|
#debugNextWindowTop = 0;
|
|
774
790
|
#inputListeners = new Set<InputListener>();
|
|
775
791
|
#startListeners = new Set<StartListener>();
|
|
792
|
+
#paintListener: ((paint: TuiPaint) => void) | null;
|
|
776
793
|
|
|
777
794
|
/** Global callback for debug key (Shift+Ctrl+D). Called before input is forwarded to focused component. */
|
|
778
795
|
onDebug?: () => void;
|
|
@@ -905,6 +922,7 @@ export class TUI extends Container {
|
|
|
905
922
|
super();
|
|
906
923
|
this.terminal = terminal;
|
|
907
924
|
this.#renderScheduler = options?.renderScheduler ?? DEFAULT_RENDER_SCHEDULER;
|
|
925
|
+
this.#paintListener = options?.onPaint ?? null;
|
|
908
926
|
this.#showHardwareCursor = showHardwareCursor === undefined ? this.#showHardwareCursor : showHardwareCursor;
|
|
909
927
|
this.#watchdog = new LoopWatchdog();
|
|
910
928
|
}
|
|
@@ -913,6 +931,11 @@ export class TUI extends Container {
|
|
|
913
931
|
return mode === "append" || mode === "rebuild" || mode === "preserve" ? mode : "preserve";
|
|
914
932
|
}
|
|
915
933
|
|
|
934
|
+
/** Install a listener for completed terminal paints. */
|
|
935
|
+
setPaintListener(listener: ((paint: TuiPaint) => void) | null): void {
|
|
936
|
+
this.#paintListener = listener;
|
|
937
|
+
}
|
|
938
|
+
|
|
916
939
|
/** Install the product-owned bounded frame provider. */
|
|
917
940
|
setFrameProvider(provider: TerminalFrameProvider | undefined): void {
|
|
918
941
|
this.#frameProvider = provider;
|
|
@@ -1723,7 +1746,8 @@ export class TUI extends Container {
|
|
|
1723
1746
|
} while (this.#imageBudget.endPass());
|
|
1724
1747
|
const viewport = rendered.length > height ? rendered.slice(rendered.length - height) : Array.from(rendered);
|
|
1725
1748
|
this.#extractCursorMarkers(viewport);
|
|
1726
|
-
|
|
1749
|
+
// The borrowed resize buffer is transient, not a streamable session paint.
|
|
1750
|
+
this.#emitAltFrame(this.#prepareLinesArray(viewport, width, this.#altPreparedRows, height), width, height, false);
|
|
1727
1751
|
}
|
|
1728
1752
|
|
|
1729
1753
|
/**
|
|
@@ -2603,6 +2627,15 @@ export class TUI extends Container {
|
|
|
2603
2627
|
#terminalLine(line: PreparedLine): string {
|
|
2604
2628
|
return line.terminalContent + (line.hasOsc8 ? LINE_TERMINATOR : SEGMENT_RESET);
|
|
2605
2629
|
}
|
|
2630
|
+
|
|
2631
|
+
#notifyPaint(paint: TuiPaint): void {
|
|
2632
|
+
try {
|
|
2633
|
+
this.#paintListener?.(paint);
|
|
2634
|
+
} catch (err) {
|
|
2635
|
+
logger.error("TUI paint listener failed", { err });
|
|
2636
|
+
}
|
|
2637
|
+
}
|
|
2638
|
+
|
|
2606
2639
|
#renderProviderFrame(width: number, height: number): void {
|
|
2607
2640
|
const provider = this.#frameProvider;
|
|
2608
2641
|
if (!provider || width <= 0 || height <= 0) return;
|
|
@@ -2773,9 +2806,10 @@ export class TUI extends Container {
|
|
|
2773
2806
|
const pendingAltExit = this.#pendingAltExit;
|
|
2774
2807
|
let buffer = this.#paintBeginSequence + pendingAltExit;
|
|
2775
2808
|
if (destructiveReset && TERMINAL.imageProtocol === ImageProtocol.Kitty) {
|
|
2776
|
-
//
|
|
2777
|
-
//
|
|
2778
|
-
//
|
|
2809
|
+
// A reset is explicitly destructive, so remove every placement—not only
|
|
2810
|
+
// the ones this TUI tracked—then resend images composed for the clean
|
|
2811
|
+
// replay. ED2 below reclaims the rest, but only on terminals that treat
|
|
2812
|
+
// an erase as a graphics clear; the explicit delete covers the others.
|
|
2779
2813
|
buffer += encodeKittyDeleteAllImages();
|
|
2780
2814
|
// `d=A` spares virtual placements, and erasing the placeholder text it
|
|
2781
2815
|
// leaves behind does not remove the prototype either. The ids this
|
|
@@ -2789,7 +2823,6 @@ export class TUI extends Container {
|
|
|
2789
2823
|
} else {
|
|
2790
2824
|
this.#imageBudget.takePurgeIds();
|
|
2791
2825
|
}
|
|
2792
|
-
for (const sequence of this.#imageBudget.takeTransmits()) buffer += sequence;
|
|
2793
2826
|
// ED2 MUST precede ED3: tmux implements ED2 by scrolling the live screen
|
|
2794
2827
|
// into pane history (so cleared content stays reachable), so erasing
|
|
2795
2828
|
// history first would let ED2 refill it with a copy of the old screen —
|
|
@@ -2797,7 +2830,16 @@ export class TUI extends Container {
|
|
|
2797
2830
|
// ED2-then-ED3 clears the screen, then wipes history including that
|
|
2798
2831
|
// push. On xterm-family terminals the two erases are independent and
|
|
2799
2832
|
// the order is irrelevant.
|
|
2833
|
+
//
|
|
2834
|
+
// Both erases MUST precede the image transmits. kitty and Ghostty treat
|
|
2835
|
+
// ED2 as a graphics clear that also frees every image left without a
|
|
2836
|
+
// placement — which is exactly what freshly transmitted data is until
|
|
2837
|
+
// the row carrying its placement is written. Transmitting first let the
|
|
2838
|
+
// erase reclaim the data, so the replay's placements then referenced an
|
|
2839
|
+
// image the terminal no longer had and every inline image vanished
|
|
2840
|
+
// after a settled width resize.
|
|
2800
2841
|
if (destructiveReset) buffer += "\x1b[H\x1b[2J\x1b[3J";
|
|
2842
|
+
for (const sequence of this.#imageBudget.takeTransmits()) buffer += sequence;
|
|
2801
2843
|
const diffable =
|
|
2802
2844
|
geometryStable &&
|
|
2803
2845
|
historyRows.length === 0 &&
|
|
@@ -2914,6 +2956,16 @@ export class TUI extends Container {
|
|
|
2914
2956
|
this.#forceViewportRepaintOnNextRender = false;
|
|
2915
2957
|
this.#hasEverRendered = true;
|
|
2916
2958
|
this.#resizeReplaySize = undefined;
|
|
2959
|
+
// Replay-split rows in `prepared.lines` now occupy the physical viewport;
|
|
2960
|
+
// only `preparedHistory.lines` crossed above it into native scrollback.
|
|
2961
|
+
this.#notifyPaint({
|
|
2962
|
+
history: preparedHistory.lines,
|
|
2963
|
+
viewport: prepared.lines,
|
|
2964
|
+
reset: destructiveReset || history?.kind === "replay",
|
|
2965
|
+
alt: false,
|
|
2966
|
+
columns: width,
|
|
2967
|
+
rows: height,
|
|
2968
|
+
});
|
|
2917
2969
|
if (history !== undefined) {
|
|
2918
2970
|
this.#acceptedHistoryBatchId = history.id;
|
|
2919
2971
|
provider?.acknowledgeHistory(history.id);
|
|
@@ -3475,7 +3527,7 @@ export class TUI extends Container {
|
|
|
3475
3527
|
} while (this.#imageBudget.endPass());
|
|
3476
3528
|
this.#extractCursorMarkers(lines);
|
|
3477
3529
|
const prepared = this.#prepareLinesArray(lines, width, this.#altPreparedRows, height);
|
|
3478
|
-
this.#emitAltFrame(prepared, width, height);
|
|
3530
|
+
this.#emitAltFrame(prepared, width, height, true);
|
|
3479
3531
|
}
|
|
3480
3532
|
|
|
3481
3533
|
/**
|
|
@@ -3483,7 +3535,7 @@ export class TUI extends Container {
|
|
|
3483
3535
|
* brackets, a cursor home, and per-row rewrites — never ED3 or any
|
|
3484
3536
|
* native-scrollback byte. The hardware cursor stays hidden here.
|
|
3485
3537
|
*/
|
|
3486
|
-
#emitAltFrame(prepared: PreparedLines, width: number, height: number): void {
|
|
3538
|
+
#emitAltFrame(prepared: PreparedLines, width: number, height: number, notifyPaint: boolean): void {
|
|
3487
3539
|
// The pass that composed this frame ran with `altScreen`, so the normal
|
|
3488
3540
|
// screen's own placements behind it are not treated as retired.
|
|
3489
3541
|
this.#imageBudget.limitResidentImages();
|
|
@@ -3548,6 +3600,16 @@ export class TUI extends Container {
|
|
|
3548
3600
|
this.#altPreviousLines = prepared.lines;
|
|
3549
3601
|
this.#altPreparedRows = prepared.rows;
|
|
3550
3602
|
this.#debugPaint = { lines: prepared.lines, windowTop: 0, altScreen: true };
|
|
3603
|
+
if (notifyPaint) {
|
|
3604
|
+
this.#notifyPaint({
|
|
3605
|
+
history: [],
|
|
3606
|
+
viewport: prepared.lines,
|
|
3607
|
+
reset: false,
|
|
3608
|
+
alt: true,
|
|
3609
|
+
columns: width,
|
|
3610
|
+
rows: height,
|
|
3611
|
+
});
|
|
3612
|
+
}
|
|
3551
3613
|
this.#fullRedrawCount += 1;
|
|
3552
3614
|
}
|
|
3553
3615
|
}
|
package/src/utils.ts
CHANGED
|
@@ -209,6 +209,14 @@ export function padding(n: number): string {
|
|
|
209
209
|
return " ".repeat(n);
|
|
210
210
|
}
|
|
211
211
|
|
|
212
|
+
/** Center a line in a field of `width` columns, truncating when too wide. */
|
|
213
|
+
export function centerLine(line: string, width: number): string {
|
|
214
|
+
const lineWidth = visibleWidth(line);
|
|
215
|
+
if (lineWidth >= width) return truncateToWidth(line, width);
|
|
216
|
+
const left = Math.floor((width - lineWidth) / 2);
|
|
217
|
+
return padding(left) + line + padding(width - left - lineWidth);
|
|
218
|
+
}
|
|
219
|
+
|
|
212
220
|
// Grapheme segmenter (shared instance)
|
|
213
221
|
const segmenter = new Intl.Segmenter(undefined, { granularity: "grapheme" });
|
|
214
222
|
|