@oh-my-pi/pi-tui 18.4.2 → 18.4.4
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 +56 -0
- package/dist/types/apps/cleanse-board.d.ts +17 -0
- package/dist/types/apps/git/help.d.ts +16 -0
- package/dist/types/apps/git/sidebar.d.ts +18 -0
- package/dist/types/apps/live-visualizer.d.ts +10 -0
- package/dist/types/apps/ps-top.d.ts +15 -0
- package/dist/types/apps/standalone-picker.d.ts +3 -0
- package/dist/types/autocomplete.d.ts +8 -0
- package/dist/types/chat/advisor-message.d.ts +12 -2
- package/dist/types/chat/assistant-message.d.ts +20 -0
- package/dist/types/chat/bash-execution.d.ts +9 -0
- package/dist/types/chat/chat-transcript-builder.d.ts +6 -1
- package/dist/types/chat/collab-prompt-message.d.ts +4 -0
- package/dist/types/chat/compaction-summary-message.d.ts +15 -0
- package/dist/types/chat/eval-execution.d.ts +8 -0
- package/dist/types/chat/execution-shared.d.ts +58 -0
- package/dist/types/chat/late-diagnostics-message.d.ts +15 -1
- package/dist/types/chat/read-tool-group.d.ts +15 -0
- package/dist/types/chat/skill-message.d.ts +9 -0
- package/dist/types/chat/stripped-tool-calls-placeholder.d.ts +3 -0
- package/dist/types/chat/thinking-display.d.ts +2 -0
- package/dist/types/chat/todo-reminder.d.ts +4 -1
- package/dist/types/chat/tool-execution.d.ts +25 -1
- package/dist/types/chat/transcript-actions.d.ts +37 -0
- package/dist/types/chat/transcript-entry.d.ts +3 -1
- package/dist/types/chat/user-message.d.ts +25 -0
- package/dist/types/chrome/collab-qrcode.d.ts +7 -0
- package/dist/types/chrome/context-thresholds.d.ts +11 -0
- package/dist/types/chrome/countdown-timer.d.ts +9 -3
- package/dist/types/chrome/diff.d.ts +12 -0
- package/dist/types/chrome/dynamic-border.d.ts +3 -0
- package/dist/types/chrome/format.d.ts +6 -0
- package/dist/types/chrome/message-divider.d.ts +13 -0
- package/dist/types/chrome/message-frame.d.ts +10 -0
- package/dist/types/chrome/message-notice.d.ts +23 -0
- package/dist/types/chrome/overlay-box.d.ts +11 -2
- package/dist/types/chrome/qrcode.d.ts +7 -0
- package/dist/types/chrome/segment-track.d.ts +7 -0
- package/dist/types/chrome/selector-helpers.d.ts +0 -6
- package/dist/types/chrome/status-notice.d.ts +14 -0
- package/dist/types/chrome/streaming-panel.d.ts +3 -0
- package/dist/types/chrome/tool-activity.d.ts +3 -0
- package/dist/types/chrome/transcript-container.d.ts +13 -0
- package/dist/types/chrome/transcript-status.d.ts +15 -3
- package/dist/types/components/box.d.ts +7 -0
- package/dist/types/components/disclosure.d.ts +9 -0
- package/dist/types/components/editor.d.ts +42 -0
- package/dist/types/components/form.d.ts +14 -0
- package/dist/types/components/image.d.ts +7 -0
- package/dist/types/components/input.d.ts +20 -1
- package/dist/types/components/key-value-list.d.ts +3 -0
- package/dist/types/components/layout/geometry.d.ts +16 -0
- package/dist/types/components/layout/row.d.ts +7 -0
- package/dist/types/components/layout/split-pane.d.ts +8 -0
- package/dist/types/components/layout/stack.d.ts +6 -0
- package/dist/types/components/loader.d.ts +48 -0
- package/dist/types/components/markdown.d.ts +8 -0
- package/dist/types/components/metric.d.ts +7 -0
- package/dist/types/components/progress-bar.d.ts +3 -0
- package/dist/types/components/scroll-view.d.ts +6 -0
- package/dist/types/components/section.d.ts +3 -0
- package/dist/types/components/select-list.d.ts +33 -0
- package/dist/types/components/settings-list.d.ts +68 -0
- package/dist/types/components/spacer.d.ts +4 -0
- package/dist/types/components/tab-bar.d.ts +9 -0
- package/dist/types/components/table.d.ts +7 -0
- package/dist/types/components/text.d.ts +6 -0
- package/dist/types/components/tree-view.d.ts +9 -0
- package/dist/types/components/truncated-text.d.ts +3 -0
- package/dist/types/components/wizard-step.d.ts +6 -0
- package/dist/types/hotkeys-markdown.d.ts +24 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/latex-block.d.ts +7 -0
- package/dist/types/loop-watchdog.d.ts +9 -0
- package/dist/types/native/apply.d.ts +39 -0
- package/dist/types/native/backend.d.ts +94 -0
- package/dist/types/native/blobs.d.ts +29 -0
- package/dist/types/native/describe.d.ts +56 -0
- package/dist/types/native/encode.d.ts +50 -0
- package/dist/types/native/icons.d.ts +18 -0
- package/dist/types/native/memo.d.ts +27 -0
- package/dist/types/native/node.d.ts +107 -0
- package/dist/types/native/overlay.d.ts +64 -0
- package/dist/types/native/picker.d.ts +124 -0
- package/dist/types/native/reconcile.d.ts +41 -0
- package/dist/types/native/settle.d.ts +11 -0
- package/dist/types/native/spans.d.ts +21 -0
- package/dist/types/native/state.d.ts +6 -0
- package/dist/types/native/tone.d.ts +24 -0
- package/dist/types/overlays/advisor-config.d.ts +20 -0
- package/dist/types/overlays/agent-hub-renderer.d.ts +27 -11
- package/dist/types/overlays/agent-hub.d.ts +10 -0
- package/dist/types/overlays/agent-transcript-viewer.d.ts +7 -0
- package/dist/types/overlays/agents-hub.d.ts +8 -0
- package/dist/types/overlays/annotation-overlay.d.ts +3 -0
- package/dist/types/overlays/ask-dialog.d.ts +23 -0
- package/dist/types/overlays/bordered-loader.d.ts +3 -0
- package/dist/types/overlays/btw-history-panel.d.ts +9 -0
- package/dist/types/overlays/btw-panel.d.ts +3 -0
- package/dist/types/overlays/cleanse-panel.d.ts +5 -2
- package/dist/types/overlays/composer-shape-preview.d.ts +7 -1
- package/dist/types/overlays/copy-selector.d.ts +38 -0
- package/dist/types/overlays/error-banner.d.ts +9 -0
- package/dist/types/overlays/extensions/extension-list.d.ts +1 -0
- package/dist/types/overlays/history-search.d.ts +18 -0
- package/dist/types/overlays/hook-editor.d.ts +28 -1
- package/dist/types/overlays/hook-input.d.ts +3 -0
- package/dist/types/overlays/hook-selector.d.ts +10 -0
- package/dist/types/overlays/hub-frame.d.ts +18 -0
- package/dist/types/overlays/jobs-panel.d.ts +24 -0
- package/dist/types/overlays/login-dialog.d.ts +10 -0
- package/dist/types/overlays/logout-account-selector.d.ts +4 -0
- package/dist/types/overlays/mcp-add-wizard.d.ts +4 -0
- package/dist/types/overlays/model-browser.d.ts +69 -0
- package/dist/types/overlays/model-hub.d.ts +7 -0
- package/dist/types/overlays/model-picker.d.ts +9 -1
- package/dist/types/overlays/move-overlay.d.ts +3 -0
- package/dist/types/overlays/oauth-selector.d.ts +4 -0
- package/dist/types/overlays/omfg-panel.d.ts +3 -0
- package/dist/types/overlays/pause-screen.d.ts +12 -0
- package/dist/types/overlays/plan-review-overlay.d.ts +5 -0
- package/dist/types/overlays/plan-save-overlay.d.ts +10 -0
- package/dist/types/overlays/plugin-selector.d.ts +4 -0
- package/dist/types/overlays/plugin-settings.d.ts +30 -0
- package/dist/types/overlays/queue-mode-selector.d.ts +4 -0
- package/dist/types/overlays/reset-usage-selector.d.ts +8 -0
- package/dist/types/overlays/rewind-selector.d.ts +5 -0
- package/dist/types/overlays/session-info-overlay.d.ts +19 -1
- package/dist/types/overlays/session-selector.d.ts +64 -1
- package/dist/types/overlays/settings-defs.d.ts +14 -0
- package/dist/types/overlays/settings-selector.d.ts +21 -0
- package/dist/types/overlays/show-images-selector.d.ts +4 -0
- package/dist/types/overlays/snapcompact-shape-preview.d.ts +2 -0
- package/dist/types/overlays/stats-notice.d.ts +8 -0
- package/dist/types/overlays/theme-selector.d.ts +11 -0
- package/dist/types/overlays/thinking-selector.d.ts +4 -0
- package/dist/types/overlays/tree-selector.d.ts +60 -2
- package/dist/types/overlays/usage-dashboard.d.ts +26 -3
- package/dist/types/overlays/usage-row.d.ts +36 -2
- package/dist/types/prompt/attachment-chips.d.ts +8 -0
- package/dist/types/prompt/composer-attachments.d.ts +15 -3
- package/dist/types/prompt/composer.d.ts +18 -1
- package/dist/types/prompt/custom-editor.d.ts +48 -2
- package/dist/types/prompt/editor-top-gap.d.ts +2 -0
- package/dist/types/prompt/macos-spelling.d.ts +6 -0
- package/dist/types/prompt/magic-keywords.d.ts +9 -0
- package/dist/types/prompt/queued-messages.d.ts +23 -0
- package/dist/types/prompt/skill-tokens.d.ts +4 -2
- package/dist/types/prompt/welcome.d.ts +16 -0
- package/dist/types/render/code-cell.d.ts +10 -0
- package/dist/types/render/file-list.d.ts +8 -0
- package/dist/types/render/hyperlink.d.ts +14 -0
- package/dist/types/render/output-block.d.ts +43 -0
- package/dist/types/render/output-pane.d.ts +17 -0
- package/dist/types/render/tool-card.d.ts +8 -0
- package/dist/types/render/tree-list.d.ts +8 -0
- package/dist/types/render/width-aware-text.d.ts +7 -0
- package/dist/types/setup/scenes/outro.d.ts +7 -0
- package/dist/types/setup/scenes/sign-in.d.ts +16 -9
- package/dist/types/setup/scenes/splash.d.ts +8 -0
- package/dist/types/setup/scenes/types.d.ts +6 -27
- package/dist/types/setup/wizard-overlay.d.ts +9 -0
- package/dist/types/status-line/component.d.ts +49 -5
- package/dist/types/status-line/context-usage.d.ts +20 -0
- package/dist/types/status-line/footer.d.ts +8 -0
- package/dist/types/status-line/metrics.d.ts +1 -2
- package/dist/types/status-line/segments.d.ts +10 -1
- package/dist/types/status-line/types.d.ts +40 -1
- package/dist/types/stdin-buffer.d.ts +10 -7
- package/dist/types/terminal-capabilities.d.ts +1 -1
- package/dist/types/terminal.d.ts +36 -0
- package/dist/types/theme/defaults/index.d.ts +100 -0
- package/dist/types/theme/schema.d.ts +2 -0
- package/dist/types/theme/shimmer.d.ts +8 -0
- package/dist/types/theme/theme-class.d.ts +2 -0
- package/dist/types/theme/theme.d.ts +33 -1
- package/dist/types/tools/ask.d.ts +3 -0
- package/dist/types/tools/ast-edit.d.ts +10 -1
- package/dist/types/tools/ast-grep.d.ts +10 -1
- package/dist/types/tools/autoresearch.d.ts +21 -4
- package/dist/types/tools/bash.d.ts +30 -1
- package/dist/types/tools/cfg-render.d.ts +5 -1
- package/dist/types/tools/debug.d.ts +3 -1
- package/dist/types/tools/default-renderer.d.ts +6 -1
- package/dist/types/tools/edit.d.ts +14 -1
- package/dist/types/tools/eval.d.ts +12 -1
- package/dist/types/tools/fetch.d.ts +16 -1
- package/dist/types/tools/find.d.ts +15 -1
- package/dist/types/tools/github.d.ts +3 -0
- package/dist/types/tools/glob.d.ts +14 -1
- package/dist/types/tools/goal.d.ts +3 -1
- package/dist/types/tools/grep.d.ts +14 -1
- package/dist/types/tools/grouped-file-output.d.ts +58 -0
- package/dist/types/tools/json-tree.d.ts +20 -0
- package/dist/types/tools/lsp.d.ts +3 -10
- package/dist/types/tools/mcp.d.ts +16 -1
- package/dist/types/tools/memory.d.ts +26 -0
- package/dist/types/tools/native-view.d.ts +90 -0
- package/dist/types/tools/proc-render.d.ts +7 -1
- package/dist/types/tools/read.d.ts +23 -1
- package/dist/types/tools/renderer.d.ts +57 -0
- package/dist/types/tools/report-tool-issue.d.ts +3 -0
- package/dist/types/tools/resolve.d.ts +14 -1
- package/dist/types/tools/task.d.ts +3 -0
- package/dist/types/tools/think.d.ts +3 -0
- package/dist/types/tools/todo.d.ts +12 -0
- package/dist/types/tools/vibe.d.ts +3 -1
- package/dist/types/tools/wait.d.ts +3 -0
- package/dist/types/tools/web-search-types.d.ts +90 -0
- package/dist/types/tools/web-search.d.ts +9 -168
- package/dist/types/tools/write.d.ts +14 -1
- package/dist/types/tools/xdev.d.ts +13 -0
- package/dist/types/tui.d.ts +49 -0
- package/package.json +9 -9
- package/src/apps/autoresearch-dashboard.ts +362 -4
- package/src/apps/cleanse-board.ts +219 -1
- package/src/apps/cleanse-picker.ts +9 -1
- package/src/apps/debug/log-viewer.ts +15 -15
- package/src/apps/debug/protocol-probe.ts +2 -20
- package/src/apps/git/avatar.ts +2 -22
- package/src/apps/git/git-tui.ts +406 -59
- package/src/apps/git/help.ts +130 -0
- package/src/apps/git/sidebar.ts +491 -0
- package/src/apps/live-visualizer.ts +65 -0
- package/src/apps/ps-top.ts +448 -17
- package/src/apps/session-picker.ts +1 -0
- package/src/apps/setup-model-picker.ts +5 -1
- package/src/apps/standalone-picker.ts +55 -1
- package/src/autocomplete.ts +44 -1
- package/src/chat/advisor-message.ts +72 -3
- package/src/chat/assistant-message.ts +538 -51
- package/src/chat/background-tan-message.ts +4 -4
- package/src/chat/bash-execution.ts +81 -0
- package/src/chat/cache-invalidation-marker.ts +8 -0
- package/src/chat/chat-transcript-builder.ts +37 -6
- package/src/chat/collab-prompt-message.ts +15 -3
- package/src/chat/compaction-summary-message.ts +74 -1
- package/src/chat/custom-message.ts +3 -1
- package/src/chat/eval-execution.ts +57 -0
- package/src/chat/execution-shared.ts +153 -1
- package/src/chat/hook-message.ts +1 -0
- package/src/chat/late-diagnostics-message.ts +85 -2
- package/src/chat/read-tool-group.ts +341 -1
- package/src/chat/served-model-marker.ts +8 -0
- package/src/chat/skill-message.ts +63 -0
- package/src/chat/stripped-tool-calls-placeholder.ts +18 -10
- package/src/chat/thinking-display.ts +73 -11
- package/src/chat/todo-reminder.ts +34 -4
- package/src/chat/tool-execution.ts +385 -10
- package/src/chat/transcript-actions.ts +38 -0
- package/src/chat/transcript-browser.ts +2 -9
- package/src/chat/transcript-entry.ts +10 -1
- package/src/chat/transcript-render-helpers.ts +16 -15
- package/src/chat/ttsr-notification.ts +38 -1
- package/src/chat/user-message.ts +167 -4
- package/src/chrome/collab-qrcode.ts +27 -2
- package/src/chrome/context-thresholds.ts +34 -0
- package/src/chrome/countdown-timer.ts +24 -1
- package/src/chrome/diff.ts +60 -1
- package/src/chrome/dynamic-border.ts +7 -0
- package/src/chrome/format.ts +12 -0
- package/src/chrome/message-divider.ts +33 -1
- package/src/chrome/message-frame.ts +53 -10
- package/src/chrome/message-notice.ts +71 -0
- package/src/chrome/overlay-box.ts +45 -2
- package/src/chrome/qrcode.ts +28 -0
- package/src/chrome/segment-track.ts +26 -0
- package/src/chrome/selector-helpers.ts +1 -17
- package/src/chrome/status-notice.ts +46 -0
- package/src/chrome/streaming-panel.ts +25 -1
- package/src/chrome/tool-activity.ts +20 -0
- package/src/chrome/transcript-container.ts +139 -17
- package/src/chrome/transcript-status.ts +40 -11
- package/src/components/box.ts +51 -0
- package/src/components/disclosure.ts +33 -0
- package/src/components/editor.ts +239 -36
- package/src/components/form.ts +93 -9
- package/src/components/image.ts +30 -0
- package/src/components/input.ts +77 -26
- package/src/components/key-value-list.ts +18 -0
- package/src/components/layout/geometry.ts +44 -0
- package/src/components/layout/row.ts +30 -0
- package/src/components/layout/split-pane.ts +65 -0
- package/src/components/layout/stack.ts +27 -0
- package/src/components/loader.ts +183 -1
- package/src/components/markdown.ts +131 -56
- package/src/components/metric.ts +39 -0
- package/src/components/progress-bar.ts +28 -0
- package/src/components/scroll-view.ts +23 -0
- package/src/components/section.ts +16 -0
- package/src/components/select-list.ts +174 -25
- package/src/components/settings-list.ts +264 -7
- package/src/components/spacer.ts +17 -0
- package/src/components/tab-bar.ts +42 -0
- package/src/components/table.ts +34 -0
- package/src/components/text.ts +23 -0
- package/src/components/tree-view.ts +65 -0
- package/src/components/truncated-text.ts +14 -0
- package/src/components/wizard-step.ts +18 -9
- package/src/debug-server.ts +14 -7
- package/src/hotkeys-markdown.ts +251 -69
- package/src/index.ts +6 -0
- package/src/latex-block.ts +11 -0
- package/src/loop-watchdog.ts +38 -10
- package/src/native/apply.ts +275 -0
- package/src/native/backend.ts +682 -0
- package/src/native/blobs.ts +70 -0
- package/src/native/describe.ts +124 -0
- package/src/native/encode.ts +233 -0
- package/src/native/icons.ts +184 -0
- package/src/native/memo.ts +64 -0
- package/src/native/node.ts +112 -0
- package/src/native/overlay.ts +131 -0
- package/src/native/picker.ts +333 -0
- package/src/native/reconcile.ts +1063 -0
- package/src/native/settle.ts +23 -0
- package/src/native/spans.ts +308 -0
- package/src/native/state.ts +28 -0
- package/src/native/tone.ts +79 -0
- package/src/overlays/advisor-config.ts +420 -0
- package/src/overlays/agent-hub-renderer.ts +155 -18
- package/src/overlays/agent-hub.ts +1037 -44
- package/src/overlays/agent-transcript-viewer.ts +129 -0
- package/src/overlays/agents-hub.ts +688 -53
- package/src/overlays/annotation-overlay.ts +391 -52
- package/src/overlays/ask-dialog.ts +435 -24
- package/src/overlays/bordered-loader.ts +17 -0
- package/src/overlays/btw-history-panel.ts +182 -0
- package/src/overlays/btw-panel.ts +68 -2
- package/src/overlays/cleanse-panel.ts +105 -15
- package/src/overlays/codex-reset-fireworks.ts +65 -5
- package/src/overlays/composer-shape-preview.ts +26 -1
- package/src/overlays/copy-selector.ts +545 -23
- package/src/overlays/error-banner.ts +44 -0
- package/src/overlays/extensions/extension-list.ts +23 -17
- package/src/overlays/history-search.ts +175 -33
- package/src/overlays/hook-editor.ts +113 -6
- package/src/overlays/hook-input.ts +22 -1
- package/src/overlays/hook-selector.ts +311 -22
- package/src/overlays/hub-frame.ts +80 -0
- package/src/overlays/jobs-panel.ts +112 -0
- package/src/overlays/login-dialog.ts +183 -1
- package/src/overlays/logout-account-selector.ts +102 -4
- package/src/overlays/mcp-add-wizard.ts +232 -53
- package/src/overlays/model-browser.ts +681 -22
- package/src/overlays/model-hub.ts +1402 -78
- package/src/overlays/model-picker.ts +184 -7
- package/src/overlays/move-overlay.ts +45 -0
- package/src/overlays/oauth-selector.ts +227 -23
- package/src/overlays/omfg-panel.ts +86 -2
- package/src/overlays/pause-screen.ts +55 -4
- package/src/overlays/plan-review-overlay.ts +352 -0
- package/src/overlays/plan-save-overlay.ts +45 -0
- package/src/overlays/plugin-selector.ts +21 -1
- package/src/overlays/plugin-settings.ts +195 -5
- package/src/overlays/queue-mode-selector.ts +19 -1
- package/src/overlays/reset-usage-selector.ts +110 -40
- package/src/overlays/rewind-selector.ts +458 -44
- package/src/overlays/session-account-selector.ts +1 -1
- package/src/overlays/session-info-overlay.ts +137 -1
- package/src/overlays/session-selector.ts +807 -46
- package/src/overlays/settings-defs.ts +41 -0
- package/src/overlays/settings-selector.ts +585 -33
- package/src/overlays/show-images-selector.ts +18 -1
- package/src/overlays/snapcompact-shape-preview.ts +48 -3
- package/src/overlays/stats-notice.ts +31 -0
- package/src/overlays/theme-selector.ts +31 -1
- package/src/overlays/thinking-selector.ts +22 -1
- package/src/overlays/tree-selector.ts +570 -110
- package/src/overlays/usage-dashboard.ts +587 -12
- package/src/overlays/usage-row.ts +161 -25
- package/src/prompt/attachment-chips.ts +60 -0
- package/src/prompt/composer-attachments.ts +31 -9
- package/src/prompt/composer.ts +55 -2
- package/src/prompt/custom-editor.ts +302 -4
- package/src/prompt/editor-top-gap.ts +8 -0
- package/src/prompt/macos-spelling.ts +24 -9
- package/src/prompt/magic-keywords.ts +22 -1
- package/src/prompt/model-mention-autocomplete.ts +1 -0
- package/src/prompt/queued-messages.ts +101 -0
- package/src/prompt/skill-tokens.ts +5 -3
- package/src/prompt/welcome.ts +213 -6
- package/src/render/code-cell.ts +103 -2
- package/src/render/file-list.ts +29 -0
- package/src/render/hyperlink.ts +32 -0
- package/src/render/output-block.ts +110 -0
- package/src/render/output-pane.ts +37 -0
- package/src/render/tool-card.ts +137 -0
- package/src/render/tree-list.ts +39 -0
- package/src/render/width-aware-text.ts +20 -0
- package/src/setup/scenes/composer.ts +29 -0
- package/src/setup/scenes/glyph.ts +15 -0
- package/src/setup/scenes/model.ts +36 -8
- package/src/setup/scenes/outro.ts +28 -1
- package/src/setup/scenes/sign-in.ts +138 -24
- package/src/setup/scenes/splash.ts +28 -1
- package/src/setup/scenes/theme.ts +88 -3
- package/src/setup/scenes/types.ts +7 -28
- package/src/setup/startup-splash.ts +46 -9
- package/src/setup/wizard-overlay.ts +140 -23
- package/src/setup/wizard.ts +1 -1
- package/src/status-line/component.ts +414 -18
- package/src/status-line/context-usage.ts +279 -50
- package/src/status-line/footer.ts +94 -1
- package/src/status-line/metrics.ts +3 -6
- package/src/status-line/segments.ts +463 -97
- package/src/status-line/separators.ts +3 -16
- package/src/status-line/types.ts +43 -1
- package/src/stdin-buffer.ts +27 -21
- package/src/terminal-capabilities.ts +7 -0
- package/src/terminal.ts +153 -11
- package/src/theme/defaults/dark-neon-noir.json +100 -0
- package/src/theme/defaults/index.ts +2 -0
- package/src/theme/defaults/light-prism.json +5 -5
- package/src/theme/defaults/onyx.json +62 -62
- package/src/theme/mermaid-cache.ts +10 -1
- package/src/theme/schema.ts +15 -0
- package/src/theme/shimmer.ts +33 -0
- package/src/theme/theme-class.ts +24 -19
- package/src/theme/theme.ts +111 -9
- package/src/theme/tui-adapters.ts +14 -1
- package/src/tools/ask.ts +157 -1
- package/src/tools/ast-edit.ts +174 -1
- package/src/tools/ast-grep.ts +82 -2
- package/src/tools/autoresearch.ts +149 -1
- package/src/tools/bash.ts +233 -62
- package/src/tools/cfg-render.ts +66 -1
- package/src/tools/debug.ts +78 -1
- package/src/tools/default-renderer.ts +35 -1
- package/src/tools/edit.ts +357 -31
- package/src/tools/eval.ts +257 -1
- package/src/tools/fetch.ts +102 -3
- package/src/tools/find.ts +127 -1
- package/src/tools/github.ts +119 -10
- package/src/tools/glob.ts +116 -1
- package/src/tools/goal.ts +56 -1
- package/src/tools/grep.ts +83 -2
- package/src/tools/grouped-file-output.ts +205 -0
- package/src/tools/json-tree.ts +116 -1
- package/src/tools/lsp.ts +318 -1
- package/src/tools/mcp.ts +80 -1
- package/src/tools/memory.ts +93 -11
- package/src/tools/native-view.ts +292 -0
- package/src/tools/proc-render.ts +221 -1
- package/src/tools/read.ts +199 -4
- package/src/tools/renderer.ts +61 -0
- package/src/tools/report-tool-issue.ts +7 -1
- package/src/tools/resolve.ts +63 -1
- package/src/tools/streaming-output.ts +79 -16
- package/src/tools/task.ts +406 -4
- package/src/tools/think.ts +19 -1
- package/src/tools/todo.ts +89 -0
- package/src/tools/vibe.ts +230 -2
- package/src/tools/wait.ts +181 -1
- package/src/tools/web-search-types.ts +99 -0
- package/src/tools/web-search.ts +111 -170
- package/src/tools/write.ts +144 -5
- package/src/tools/xdev.ts +64 -1
- package/src/tui.ts +295 -4
- package/dist/types/setup/scenes/providers.d.ts +0 -3
- package/dist/types/setup/scenes/web-search.d.ts +0 -22
- package/src/setup/scenes/providers.ts +0 -110
- package/src/setup/scenes/web-search.ts +0 -165
|
@@ -9,6 +9,8 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import type { SelectItem } from "../components/select-list";
|
|
11
11
|
import { Form, SelectFormField, TextFormField, type FormFieldTheme } from "../components/form";
|
|
12
|
+
import type { DescribeContext, NativeNode, NativeUiEvent } from "../native/node";
|
|
13
|
+
import { SelectListSheet, type SelectPickerOptions } from "../native/picker";
|
|
12
14
|
import { ProcessTerminal } from "../terminal";
|
|
13
15
|
import { TUI, type Component, type OverlayOptions } from "../tui";
|
|
14
16
|
import { getSelectListTheme } from "../theme/tui-adapters";
|
|
@@ -64,6 +66,52 @@ export async function runStandaloneTui<T>(
|
|
|
64
66
|
export interface StandaloneSelectOptions {
|
|
65
67
|
currentValue?: string;
|
|
66
68
|
maxVisible?: number;
|
|
69
|
+
/** How the native picker sheet names and marks its items (`noun`, `icon`). */
|
|
70
|
+
picker?: Pick<SelectPickerOptions, "noun" | "icon" | "subtitle" | "confirm">;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* A standalone choice: the form's list in ANSI, and in Tern a `picker md`
|
|
75
|
+
* sheet (NATIVE_REDESIGN §10) over the pane, whatever the item count. Keys
|
|
76
|
+
* stay the form's; pointer events drive the same list.
|
|
77
|
+
*/
|
|
78
|
+
class StandaloneSelect implements Component {
|
|
79
|
+
readonly #form: Form;
|
|
80
|
+
readonly #sheet: SelectListSheet;
|
|
81
|
+
|
|
82
|
+
constructor(form: Form, field: SelectFormField, picker: SelectPickerOptions) {
|
|
83
|
+
this.#form = form;
|
|
84
|
+
this.#sheet = new SelectListSheet(field.selectList, picker);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
get focused(): boolean {
|
|
88
|
+
return this.#form.focused;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
set focused(value: boolean) {
|
|
92
|
+
this.#form.focused = value;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
describe(cx: DescribeContext): NativeNode {
|
|
96
|
+
return cx.supports("picker") ? this.#sheet.describe() : this.#form.describe(cx);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
handleNativeEvent(event: NativeUiEvent): void {
|
|
100
|
+
this.#sheet.handle(event);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
handleInput(data: string): void {
|
|
104
|
+
this.#form.handleInput(data);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
render(width: number): readonly string[] {
|
|
108
|
+
return this.#form.render(width);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
invalidate(): void {
|
|
112
|
+
this.#sheet.invalidate();
|
|
113
|
+
this.#form.invalidate();
|
|
114
|
+
}
|
|
67
115
|
}
|
|
68
116
|
|
|
69
117
|
/**
|
|
@@ -88,7 +136,13 @@ export async function selectStandaloneItem(
|
|
|
88
136
|
onSubmit: value => finish(value),
|
|
89
137
|
onCancel: () => finish(null),
|
|
90
138
|
});
|
|
91
|
-
|
|
139
|
+
const form = new Form({ fields: [field], onCancel: () => finish(null) });
|
|
140
|
+
return new StandaloneSelect(form, field, {
|
|
141
|
+
title: title.replace(/:\s*$/, ""),
|
|
142
|
+
searchable: true,
|
|
143
|
+
...(options?.currentValue !== undefined ? { current: [options.currentValue] } : {}),
|
|
144
|
+
...options?.picker,
|
|
145
|
+
});
|
|
92
146
|
});
|
|
93
147
|
}
|
|
94
148
|
|
package/src/autocomplete.ts
CHANGED
|
@@ -199,6 +199,12 @@ export interface AutocompleteItem {
|
|
|
199
199
|
description?: string;
|
|
200
200
|
/** Optional type-indicator glyph rendered in an aligned column before the label */
|
|
201
201
|
icon?: string;
|
|
202
|
+
/** Named icon for TSP terminals (`folder`, `file`, a slash-command icon name). */
|
|
203
|
+
iconName?: string;
|
|
204
|
+
/** Native detail when it differs from {@link description} (static text, parent dir). */
|
|
205
|
+
nativeDetail?: string;
|
|
206
|
+
/** Live state drawn right-aligned natively ("demo/demo", "off"). */
|
|
207
|
+
state?: string;
|
|
202
208
|
/** Dim hint text shown inline after cursor when this item is selected */
|
|
203
209
|
hint?: string;
|
|
204
210
|
}
|
|
@@ -211,6 +217,8 @@ export interface SlashCommand {
|
|
|
211
217
|
description?: string;
|
|
212
218
|
/** Optional type-indicator glyph shown before the command name in autocomplete */
|
|
213
219
|
icon?: string;
|
|
220
|
+
/** Named icon for TSP terminals, drawn instead of the {@link icon} glyph. */
|
|
221
|
+
iconName?: string;
|
|
214
222
|
argumentHint?: string;
|
|
215
223
|
/** Whether the command consumes argument text after the command name. False means the full input stays normal prompt text once args are present. */
|
|
216
224
|
allowArgs?: boolean;
|
|
@@ -312,6 +320,23 @@ function getAutocompleteCommandDescription(cmd: CommandEntry): string {
|
|
|
312
320
|
return cmd.description ?? "";
|
|
313
321
|
}
|
|
314
322
|
|
|
323
|
+
/**
|
|
324
|
+
* Native split of a command's autocomplete text: a live description in
|
|
325
|
+
* `Label: state` form ("Model: demo/demo") becomes the static description as
|
|
326
|
+
* the detail and the state as the item's right-aligned value.
|
|
327
|
+
*/
|
|
328
|
+
function nativeCommandText(
|
|
329
|
+
liveDesc: string,
|
|
330
|
+
staticDesc: string,
|
|
331
|
+
hint: string | undefined,
|
|
332
|
+
): Pick<AutocompleteItem, "nativeDetail" | "state"> {
|
|
333
|
+
if (!liveDesc || liveDesc === staticDesc) return {};
|
|
334
|
+
const colon = liveDesc.indexOf(": ");
|
|
335
|
+
if (colon <= 0) return {};
|
|
336
|
+
const detail = staticDesc || liveDesc.slice(0, colon);
|
|
337
|
+
return { nativeDetail: hint ? `${hint} - ${detail}` : detail, state: liveDesc.slice(colon + 2) };
|
|
338
|
+
}
|
|
339
|
+
|
|
315
340
|
function commandMatchesNameOrAlias(cmd: CommandEntry, commandName: string): boolean {
|
|
316
341
|
const name = getCommandName(cmd);
|
|
317
342
|
if (name === commandName) return true;
|
|
@@ -343,6 +368,7 @@ function buildSlashCommandCompletions(
|
|
|
343
368
|
const hint = "argumentHint" in cmd && cmd.argumentHint ? cmd.argumentHint : undefined;
|
|
344
369
|
const staticDesc = getStaticCommandDescription(cmd);
|
|
345
370
|
let fullDescMemo: string | undefined;
|
|
371
|
+
let nativeTextMemo: Pick<AutocompleteItem, "nativeDetail" | "state"> = {};
|
|
346
372
|
let fullDescComputed = false;
|
|
347
373
|
// Resolve the (possibly live) display description lazily, only once a
|
|
348
374
|
// candidate actually matches — getAutocompleteDescription reads live
|
|
@@ -351,6 +377,7 @@ function buildSlashCommandCompletions(
|
|
|
351
377
|
if (!fullDescComputed) {
|
|
352
378
|
const displayDesc = getAutocompleteCommandDescription(cmd);
|
|
353
379
|
fullDescMemo = hint ? (displayDesc ? `${hint} - ${displayDesc}` : hint) : displayDesc;
|
|
380
|
+
nativeTextMemo = nativeCommandText(displayDesc, staticDesc, hint);
|
|
354
381
|
fullDescComputed = true;
|
|
355
382
|
}
|
|
356
383
|
return fullDescMemo;
|
|
@@ -385,7 +412,9 @@ function buildSlashCommandCompletions(
|
|
|
385
412
|
score: primaryScore,
|
|
386
413
|
usage,
|
|
387
414
|
...(cmd.icon && { icon: cmd.icon }),
|
|
415
|
+
...(cmd.iconName && { iconName: cmd.iconName }),
|
|
388
416
|
...(fullDesc && { description: fullDesc }),
|
|
417
|
+
...nativeTextMemo,
|
|
389
418
|
};
|
|
390
419
|
}
|
|
391
420
|
|
|
@@ -401,7 +430,9 @@ function buildSlashCommandCompletions(
|
|
|
401
430
|
score: aliasScore,
|
|
402
431
|
usage,
|
|
403
432
|
...(cmd.icon && { icon: cmd.icon }),
|
|
433
|
+
...(cmd.iconName && { iconName: cmd.iconName }),
|
|
404
434
|
...(fullDesc && { description: fullDesc }),
|
|
435
|
+
...nativeTextMemo,
|
|
405
436
|
};
|
|
406
437
|
}
|
|
407
438
|
}
|
|
@@ -495,11 +526,13 @@ function collapseSkillNamespace(commands: CommandEntry[], lowerPrefix: string):
|
|
|
495
526
|
}
|
|
496
527
|
let skillCount = 0;
|
|
497
528
|
let skillIcon: string | undefined;
|
|
529
|
+
let skillIconName: string | undefined;
|
|
498
530
|
const rest = commands.filter(cmd => {
|
|
499
531
|
const name = getCommandName(cmd);
|
|
500
532
|
if (!name?.startsWith(SKILL_NAMESPACE)) return true;
|
|
501
533
|
skillCount += 1;
|
|
502
534
|
skillIcon ??= cmd.icon;
|
|
535
|
+
skillIconName ??= cmd.iconName;
|
|
503
536
|
return (
|
|
504
537
|
!approachesNamespace &&
|
|
505
538
|
skillBareNameBreakoutTier(lowerPrefix, name.slice(SKILL_NAMESPACE.length).toLowerCase()) > commandTier
|
|
@@ -511,6 +544,7 @@ function collapseSkillNamespace(commands: CommandEntry[], lowerPrefix: string):
|
|
|
511
544
|
name: SKILL_NAMESPACE,
|
|
512
545
|
description: `${skillCount} skill${skillCount === 1 ? "" : "s"}`,
|
|
513
546
|
...(skillIcon && { icon: skillIcon }),
|
|
547
|
+
...(skillIconName && { iconName: skillIconName }),
|
|
514
548
|
});
|
|
515
549
|
return rest;
|
|
516
550
|
}
|
|
@@ -781,7 +815,10 @@ export class CombinedAutocompleteProvider implements AutocompleteProvider {
|
|
|
781
815
|
const isPathCompletionItem = item.value.startsWith("/") || item.value.startsWith('"');
|
|
782
816
|
if (findLeadingSlashCommandStart(prefix) !== null && leadingSlashStart !== null && !isPathCompletionItem) {
|
|
783
817
|
const slashPrefix = textBeforeCursor.slice(leadingSlashStart);
|
|
784
|
-
|
|
818
|
+
// A `/` past the leading one usually means an absolute path, but a
|
|
819
|
+
// namespaced skill (`skill:<ns>/<name>`) is a real command name too.
|
|
820
|
+
const isKnownCommand = this.#commands.some(cmd => commandMatchesNameOrAlias(cmd, item.value));
|
|
821
|
+
if (!slashPrefix.includes(" ") && (isKnownCommand || !slashPrefix.slice(1).includes("/"))) {
|
|
785
822
|
const beforeSlash = currentLine.slice(0, leadingSlashStart);
|
|
786
823
|
// The collapsed `/skill:` namespace row completes to the namespace
|
|
787
824
|
// itself: no trailing space, so completion continues with the
|
|
@@ -1117,9 +1154,12 @@ export class CombinedAutocompleteProvider implements AutocompleteProvider {
|
|
|
1117
1154
|
isQuotedPrefix,
|
|
1118
1155
|
});
|
|
1119
1156
|
|
|
1157
|
+
const parentDir = path.posix.dirname(relativePath);
|
|
1120
1158
|
suggestions.push({
|
|
1121
1159
|
value,
|
|
1122
1160
|
label: name + (isDirectory ? "/" : ""),
|
|
1161
|
+
iconName: isDirectory ? "folder" : "file",
|
|
1162
|
+
...(parentDir !== "." && { nativeDetail: parentDir }),
|
|
1123
1163
|
});
|
|
1124
1164
|
}
|
|
1125
1165
|
|
|
@@ -1174,10 +1214,13 @@ export class CombinedAutocompleteProvider implements AutocompleteProvider {
|
|
|
1174
1214
|
isAtPrefix: true,
|
|
1175
1215
|
isQuotedPrefix: options.isQuotedPrefix,
|
|
1176
1216
|
});
|
|
1217
|
+
const parentDir = path.posix.dirname(displayPath);
|
|
1177
1218
|
suggestions.push({
|
|
1178
1219
|
value,
|
|
1179
1220
|
label: entryName + (isDirectory ? "/" : ""),
|
|
1180
1221
|
description: displayPath,
|
|
1222
|
+
iconName: isDirectory ? "folder" : "file",
|
|
1223
|
+
nativeDetail: parentDir === "." ? "" : parentDir,
|
|
1181
1224
|
});
|
|
1182
1225
|
}
|
|
1183
1226
|
return suggestions;
|
|
@@ -4,7 +4,12 @@ import { visibleWidth } from "../utils";
|
|
|
4
4
|
import type { AdvisorMessageDetails, AdvisorNote, AdvisorSeverity } from "./messages";
|
|
5
5
|
import { formatBadge, replaceTabs, type ToolUIColor, wrapTextWithAnsi } from "../render/render-utils";
|
|
6
6
|
import { Ellipsis, truncateToWidth } from "../render";
|
|
7
|
-
import type
|
|
7
|
+
import { getThemeEpoch, type Theme } from "../theme";
|
|
8
|
+
import type { TspSpan } from "@oh-my-pi/pi-wire";
|
|
9
|
+
import { card, span, text } from "../native/describe";
|
|
10
|
+
import { type NativeNode, type NativeUiEvent, rootToggleExpanded } from "../native/node";
|
|
11
|
+
import { plainText } from "../native/spans";
|
|
12
|
+
import { Memo } from "../native/memo";
|
|
8
13
|
|
|
9
14
|
const COLLAPSED_NOTES = 3;
|
|
10
15
|
const NOTE_LINE_WIDTH = 110;
|
|
@@ -130,22 +135,74 @@ function renderAdvisorNote(entry: AdvisorNote, width: number, uiTheme: Theme): s
|
|
|
130
135
|
);
|
|
131
136
|
}
|
|
132
137
|
|
|
138
|
+
/** Native spans for one note: severity badge, advisor attribution, then the note text. */
|
|
139
|
+
function advisorNoteSpans(entry: AdvisorNote): TspSpan[] {
|
|
140
|
+
const spans: TspSpan[] = [];
|
|
141
|
+
if (entry.severity)
|
|
142
|
+
spans.push(span(entry.severity.toUpperCase(), `${severityColor(entry.severity)} strong`), span(" "));
|
|
143
|
+
if (entry.advisor && entry.advisor !== "default") spans.push(span(`[${entry.advisor}] `, "dim"));
|
|
144
|
+
spans.push(span(plainText(entry.note), "customMessageText"));
|
|
145
|
+
return spans;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/** The advisor card: shared by the controlled expansion getter and native toggles. */
|
|
149
|
+
export interface AdvisorMessageCard extends Component {
|
|
150
|
+
/** Transcript-wide expansion (`Ctrl+O`); clears a toggle made in the terminal. */
|
|
151
|
+
setExpanded(expanded: boolean): void;
|
|
152
|
+
handleNativeEvent(event: NativeUiEvent): void;
|
|
153
|
+
}
|
|
154
|
+
|
|
133
155
|
/**
|
|
134
156
|
* Display-only transcript card for advisor notes injected into the primary
|
|
135
157
|
* session. Styled as a distinct voice so notes never blend into thinking
|
|
136
158
|
* output (whose `thinkingText` color equals `toolOutput` in most themes):
|
|
137
159
|
* a bold `customMessageLabel` header tag (skill-card convention), a heavy
|
|
138
160
|
* rail tinted per-note severity, and the note body on the default text color.
|
|
161
|
+
*
|
|
162
|
+
* `getExpanded` owns expansion; a native toggle overrides it for this card
|
|
163
|
+
* until the next transcript-wide change.
|
|
139
164
|
*/
|
|
140
165
|
export function createAdvisorMessageCard(
|
|
141
166
|
details: AdvisorMessageDetails | undefined,
|
|
142
167
|
getExpanded: () => boolean,
|
|
143
168
|
uiTheme: Theme,
|
|
144
|
-
):
|
|
169
|
+
): AdvisorMessageCard {
|
|
145
170
|
const notes = details?.notes ?? [];
|
|
146
171
|
const blockers = notes.filter(note => note.severity === "blocker").length;
|
|
147
172
|
const meta: string[] = [`${notes.length} ${notes.length === 1 ? "note" : "notes"}`];
|
|
148
173
|
if (blockers > 0) meta.push(uiTheme.fg("error", `${blockers} blocker${blockers === 1 ? "" : "s"}`));
|
|
174
|
+
let override: boolean | undefined;
|
|
175
|
+
let lastGlobal = getExpanded();
|
|
176
|
+
const expanded = (): boolean => {
|
|
177
|
+
const global = getExpanded();
|
|
178
|
+
if (global !== lastGlobal) {
|
|
179
|
+
lastGlobal = global;
|
|
180
|
+
override = undefined;
|
|
181
|
+
}
|
|
182
|
+
return override ?? global;
|
|
183
|
+
};
|
|
184
|
+
const nativeMemo = new Memo();
|
|
185
|
+
const describeCard = (isExpanded: boolean): NativeNode => {
|
|
186
|
+
const head: TspSpan[] = [
|
|
187
|
+
span(`${uiTheme.status.info} Advisor`, "customMessageLabel strong"),
|
|
188
|
+
span(` ${notes.length} ${notes.length === 1 ? "note" : "notes"}`, "dim"),
|
|
189
|
+
];
|
|
190
|
+
if (blockers > 0) head.push(span(`${uiTheme.sep.dot}${blockers} blocker${blockers === 1 ? "" : "s"}`, "error"));
|
|
191
|
+
const body = notes.map((entry, index) =>
|
|
192
|
+
text(advisorNoteSpans(entry), { wrap: "word", role: "omp.advisor.note", key: `n${index}` }),
|
|
193
|
+
);
|
|
194
|
+
return card(
|
|
195
|
+
{
|
|
196
|
+
role: "omp.advisor",
|
|
197
|
+
tone: blockers > 0 ? "error" : "info",
|
|
198
|
+
head,
|
|
199
|
+
collapsible: notes.length > COLLAPSED_NOTES,
|
|
200
|
+
collapsed: notes.length > COLLAPSED_NOTES ? !isExpanded : undefined,
|
|
201
|
+
preview: notes.length > COLLAPSED_NOTES ? "auto" : undefined,
|
|
202
|
+
},
|
|
203
|
+
body,
|
|
204
|
+
);
|
|
205
|
+
};
|
|
149
206
|
|
|
150
207
|
const shown = notes.slice(0, COLLAPSED_NOTES);
|
|
151
208
|
const disclosure = new Disclosure({
|
|
@@ -159,9 +216,21 @@ export function createAdvisorMessageCard(
|
|
|
159
216
|
// disclosure from the callback on every render.
|
|
160
217
|
return {
|
|
161
218
|
render(width: number): readonly string[] {
|
|
162
|
-
disclosure.setExpanded(
|
|
219
|
+
disclosure.setExpanded(expanded());
|
|
163
220
|
return disclosure.render(width);
|
|
164
221
|
},
|
|
222
|
+
describe(): NativeNode {
|
|
223
|
+
const isExpanded = expanded();
|
|
224
|
+
return nativeMemo.get([isExpanded, getThemeEpoch()], () => describeCard(isExpanded));
|
|
225
|
+
},
|
|
226
|
+
setExpanded(value: boolean): void {
|
|
227
|
+
lastGlobal = value;
|
|
228
|
+
override = undefined;
|
|
229
|
+
},
|
|
230
|
+
handleNativeEvent(event: NativeUiEvent): void {
|
|
231
|
+
const toggled = rootToggleExpanded(event);
|
|
232
|
+
if (toggled !== undefined) override = toggled;
|
|
233
|
+
},
|
|
165
234
|
invalidate(): void {
|
|
166
235
|
disclosure.invalidate();
|
|
167
236
|
},
|