@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
|
@@ -86,6 +86,14 @@ export class ServedModelMarkerComponent extends MessageDividerComponent {
|
|
|
86
86
|
labelColor: "warning",
|
|
87
87
|
ruleColor: "dim",
|
|
88
88
|
ruleWidth: 10,
|
|
89
|
+
role: "omp.marker.served-model",
|
|
90
|
+
native: {
|
|
91
|
+
icon: "warn",
|
|
92
|
+
label: () => {
|
|
93
|
+
const via = info.upstreamProvider ? `${info.provider}/${info.upstreamProvider}` : info.provider;
|
|
94
|
+
return `Served ${info.served} · requested ${info.requested} · via ${via}`;
|
|
95
|
+
},
|
|
96
|
+
},
|
|
89
97
|
});
|
|
90
98
|
}
|
|
91
99
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { pathToFileURL } from "node:url";
|
|
1
2
|
import type { TextContent } from "@oh-my-pi/pi-ai";
|
|
2
3
|
import { type Component } from "../tui";
|
|
3
4
|
import { Box } from "../components/box";
|
|
@@ -11,6 +12,10 @@ import type { CustomMessage, SkillPromptDetails } from "./messages";
|
|
|
11
12
|
import { fileHyperlink } from "../render";
|
|
12
13
|
import { collapseSkillTokens, skillChipLabel, skillChipStyle, skillToken } from "../prompt/composer-attachments";
|
|
13
14
|
import { type UserBubbleOptions, UserMessageComponent, userBubbleColor } from "./user-message";
|
|
15
|
+
import type { TspSpan } from "@oh-my-pi/pi-wire";
|
|
16
|
+
import { card, md, node, span, text } from "../native/describe";
|
|
17
|
+
import { type NativeChild, type NativeNode, type NativeUiEvent, rootToggleExpanded } from "../native/node";
|
|
18
|
+
import { Memo } from "../native/memo";
|
|
14
19
|
|
|
15
20
|
/**
|
|
16
21
|
* Transcript row for a user-invoked skill. Two layouts, chosen by where the
|
|
@@ -41,6 +46,8 @@ export class SkillMessageComponent extends Container {
|
|
|
41
46
|
|
|
42
47
|
readonly #message: CustomMessage<SkillPromptDetails>;
|
|
43
48
|
readonly #imageLinks?: readonly (string | undefined)[];
|
|
49
|
+
#expanded = false;
|
|
50
|
+
readonly #native = new Memo();
|
|
44
51
|
|
|
45
52
|
constructor(message: CustomMessage<SkillPromptDetails>, imageLinks?: readonly (string | undefined)[]) {
|
|
46
53
|
super();
|
|
@@ -51,9 +58,65 @@ export class SkillMessageComponent extends Container {
|
|
|
51
58
|
}
|
|
52
59
|
|
|
53
60
|
setExpanded(expanded: boolean): void {
|
|
61
|
+
this.#expanded = expanded;
|
|
54
62
|
this.#disclosure?.setExpanded(expanded);
|
|
55
63
|
}
|
|
56
64
|
|
|
65
|
+
handleNativeEvent(event: NativeUiEvent): void {
|
|
66
|
+
const expanded = rootToggleExpanded(event);
|
|
67
|
+
if (expanded !== undefined) this.setExpanded(expanded);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* A user-toned card (role `omp.skill`): the skill chip (linked to its
|
|
72
|
+
* SKILL.md) and prompt size in the head, the user's draft as markdown, and
|
|
73
|
+
* the loaded skill prompt, described only while expanded because it can
|
|
74
|
+
* be large.
|
|
75
|
+
*/
|
|
76
|
+
override describe(): NativeNode {
|
|
77
|
+
return this.#native.get([this.#expanded], () => {
|
|
78
|
+
const details = this.#message.details;
|
|
79
|
+
const name = details?.name?.trim() || "unknown";
|
|
80
|
+
const token = skillToken(name);
|
|
81
|
+
const prompt = details?.prompt ?? (details?.args ? `${token} ${details.args}` : token);
|
|
82
|
+
const display = collapseSkillTokens(
|
|
83
|
+
prompt,
|
|
84
|
+
candidate => candidate === name,
|
|
85
|
+
() => {},
|
|
86
|
+
);
|
|
87
|
+
const label = skillChipLabel(name);
|
|
88
|
+
const leading = display.startsWith(label) && /^\s*$/.test(display.charAt(label.length));
|
|
89
|
+
const draft = leading ? display.slice(label.length).trim() : display;
|
|
90
|
+
const head: TspSpan[] = [
|
|
91
|
+
span(
|
|
92
|
+
label,
|
|
93
|
+
"customMessageLabel strong",
|
|
94
|
+
details?.path ? { href: pathToFileURL(details.path).href } : undefined,
|
|
95
|
+
),
|
|
96
|
+
];
|
|
97
|
+
if (typeof details?.lineCount === "number") {
|
|
98
|
+
head.push(span(` ${details.lineCount} ${details.lineCount === 1 ? "line" : "lines"}`, "muted"));
|
|
99
|
+
}
|
|
100
|
+
const children: NativeChild[] = [];
|
|
101
|
+
if (draft) children.push(md(draft));
|
|
102
|
+
const promptText = this.#expanded ? this.#extractText() : "";
|
|
103
|
+
if (promptText) {
|
|
104
|
+
children.push(
|
|
105
|
+
node(
|
|
106
|
+
"section",
|
|
107
|
+
{ head: [span("prompt", "muted")], role: "omp.skill.prompt" },
|
|
108
|
+
[md(promptText)],
|
|
109
|
+
"prompt",
|
|
110
|
+
),
|
|
111
|
+
);
|
|
112
|
+
}
|
|
113
|
+
return card(
|
|
114
|
+
{ role: "omp.skill", tone: "user", head, collapsible: true, collapsed: !this.#expanded },
|
|
115
|
+
children.length > 0 ? children : [text([span(label, "muted")])],
|
|
116
|
+
);
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
|
|
57
120
|
/**
|
|
58
121
|
* Transcript finalization contract (see `FinalizableBlock`): an optimistic
|
|
59
122
|
* `/skill:` row reports `false` so the container keeps it live and removable
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { Text } from "../components/text";
|
|
2
2
|
import { theme } from "../theme";
|
|
3
|
+
import { span, text } from "../native/describe";
|
|
4
|
+
import type { NativeNode } from "../native/node";
|
|
3
5
|
|
|
4
6
|
/**
|
|
5
7
|
* Dim transcript marker for tool calls stripped from the resolved branch
|
|
@@ -8,26 +10,32 @@ import { theme } from "../theme";
|
|
|
8
10
|
*/
|
|
9
11
|
export class StrippedToolCallsPlaceholder extends Text {
|
|
10
12
|
#toolActivityVisible: boolean;
|
|
13
|
+
readonly #label: string;
|
|
14
|
+
#native: NativeNode | undefined;
|
|
11
15
|
|
|
12
16
|
constructor(strippedToolCalls: number, toolActivityVisible: boolean) {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
theme.italic(
|
|
17
|
-
`${strippedToolCalls} tool call${strippedToolCalls === 1 ? "" : "s"} elided — no result on this branch`,
|
|
18
|
-
),
|
|
19
|
-
),
|
|
20
|
-
1,
|
|
21
|
-
0,
|
|
22
|
-
);
|
|
17
|
+
const label = `${strippedToolCalls} tool call${strippedToolCalls === 1 ? "" : "s"} elided — no result on this branch`;
|
|
18
|
+
super(theme.fg("dim", theme.italic(label)), 1, 0);
|
|
19
|
+
this.#label = label;
|
|
23
20
|
this.#toolActivityVisible = toolActivityVisible;
|
|
24
21
|
}
|
|
25
22
|
|
|
26
23
|
setToolActivityVisible(visible: boolean): void {
|
|
27
24
|
this.#toolActivityVisible = visible;
|
|
25
|
+
this.#native = undefined;
|
|
28
26
|
this.invalidate();
|
|
29
27
|
}
|
|
30
28
|
|
|
29
|
+
/** A dim italic note, mounted but hidden while tool activity is hidden. */
|
|
30
|
+
override describe(): NativeNode {
|
|
31
|
+
this.#native ??= text([span(this.#label, "dim em")], {
|
|
32
|
+
wrap: "word",
|
|
33
|
+
role: "omp.tool.elided",
|
|
34
|
+
hidden: this.#toolActivityVisible ? undefined : true,
|
|
35
|
+
});
|
|
36
|
+
return this.#native;
|
|
37
|
+
}
|
|
38
|
+
|
|
31
39
|
override render(width: number): readonly string[] {
|
|
32
40
|
if (!this.#toolActivityVisible) return [];
|
|
33
41
|
return super.render(width);
|
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
import type { AgentMessage } from "@oh-my-pi/pi-agent-core";
|
|
2
2
|
import { FENCE_RE } from "../render/render-utils";
|
|
3
3
|
|
|
4
|
-
//
|
|
4
|
+
// Small per-mode MRU memo for formatThinkingForDisplay. During a streaming
|
|
5
5
|
// tick the same growing thinking text is formatted up to three times (reveal
|
|
6
6
|
// count, reveal slice, component render); this collapses them to one
|
|
7
7
|
// computation. Prose and raw modes produce different output for the same text,
|
|
8
|
-
// so each mode keeps its own
|
|
9
|
-
//
|
|
10
|
-
//
|
|
8
|
+
// so each mode keeps its own slots. A message routinely holds several thinking
|
|
9
|
+
// blocks (thinking → text → thinking), and every tick formats each of them, so
|
|
10
|
+
// one slot per mode would thrash between blocks and turn every append into a
|
|
11
|
+
// full refold; {@link DISPLAY_CACHE_SLOTS} slots keep one checkpoint per live
|
|
12
|
+
// block. A miss recomputes exactly as before and evicts the least recently
|
|
13
|
+
// used slot.
|
|
11
14
|
//
|
|
12
15
|
// Each slot also carries the fold state for incremental extension: when the
|
|
13
16
|
// incoming text is an append of the previously formatted text (streaming only
|
|
@@ -85,8 +88,69 @@ function freshDisplayCache(): DisplayCache {
|
|
|
85
88
|
return { text: "", value: "", hadComment: false, startLineByte: 0, state: freshFoldState(), resumable: true };
|
|
86
89
|
}
|
|
87
90
|
|
|
88
|
-
|
|
89
|
-
const
|
|
91
|
+
/** Slots per mode: enough for the thinking blocks of one streaming message. */
|
|
92
|
+
const DISPLAY_CACHE_SLOTS = 4;
|
|
93
|
+
// Most recently used first.
|
|
94
|
+
const proseSlots: DisplayCache[] = [];
|
|
95
|
+
const rawSlots: DisplayCache[] = [];
|
|
96
|
+
|
|
97
|
+
/** Drop every memo slot so the next call recomputes from scratch. Tests only. */
|
|
98
|
+
export function resetThinkingDisplayCacheForTests(): void {
|
|
99
|
+
proseSlots.length = 0;
|
|
100
|
+
rawSlots.length = 0;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Pick the slot to format `text` into and move it to the front: an exact memo
|
|
105
|
+
* hit, else the resumable slot holding the longest verbatim prefix of `text`
|
|
106
|
+
* (an append). A miss overwrites a non-resumable slot holding a prefix of
|
|
107
|
+
* `text` — the same stream's retired checkpoint, e.g. the raw identity
|
|
108
|
+
* shortcut — so such a stream never evicts the other blocks' checkpoints;
|
|
109
|
+
* otherwise the least recently used slot (or a new one below the cap).
|
|
110
|
+
* Append detection runs here once so the caller never re-verifies.
|
|
111
|
+
*/
|
|
112
|
+
function acquireDisplayCache(
|
|
113
|
+
slots: DisplayCache[],
|
|
114
|
+
text: string,
|
|
115
|
+
): { cache: DisplayCache; match: "hit" | "append" | "miss" } {
|
|
116
|
+
// Identity pass first: the repeated renders of one streaming tick must not
|
|
117
|
+
// pay any prefix verification against the other blocks' slots.
|
|
118
|
+
let index = slots.findIndex(slot => slot.text === text);
|
|
119
|
+
let match: "hit" | "append" | "miss" = index === -1 ? "miss" : "hit";
|
|
120
|
+
if (index === -1) {
|
|
121
|
+
let appendLength = 0;
|
|
122
|
+
let retired = -1;
|
|
123
|
+
let retiredLength = 0;
|
|
124
|
+
for (let i = 0; i < slots.length; i++) {
|
|
125
|
+
const slot = slots[i]!;
|
|
126
|
+
const length = slot.text.length;
|
|
127
|
+
if (length <= (slot.resumable ? appendLength : retiredLength) || !isAppend(slot, text)) continue;
|
|
128
|
+
if (slot.resumable) {
|
|
129
|
+
index = i;
|
|
130
|
+
match = "append";
|
|
131
|
+
appendLength = length;
|
|
132
|
+
} else {
|
|
133
|
+
retired = i;
|
|
134
|
+
retiredLength = length;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
if (index === -1) index = retired;
|
|
138
|
+
}
|
|
139
|
+
if (index === -1) {
|
|
140
|
+
if (slots.length < DISPLAY_CACHE_SLOTS) {
|
|
141
|
+
const cache = freshDisplayCache();
|
|
142
|
+
slots.unshift(cache);
|
|
143
|
+
return { cache, match };
|
|
144
|
+
}
|
|
145
|
+
index = slots.length - 1;
|
|
146
|
+
}
|
|
147
|
+
const cache = slots[index]!;
|
|
148
|
+
if (index > 0) {
|
|
149
|
+
slots.splice(index, 1);
|
|
150
|
+
slots.unshift(cache);
|
|
151
|
+
}
|
|
152
|
+
return { cache, match };
|
|
153
|
+
}
|
|
90
154
|
|
|
91
155
|
export function canonicalizeMessage(text: string | null | undefined): string {
|
|
92
156
|
if (!text) return "";
|
|
@@ -190,14 +254,12 @@ function renderFold(state: FoldState): string {
|
|
|
190
254
|
*/
|
|
191
255
|
export function formatThinkingForDisplay(text: string, proseOnly: boolean): string {
|
|
192
256
|
if (!text) return text;
|
|
193
|
-
const cache = proseOnly ?
|
|
194
|
-
|
|
195
|
-
// the same text and must not pay the prefix verification below.
|
|
196
|
-
if (text === cache.text) return cache.value;
|
|
257
|
+
const { cache, match } = acquireDisplayCache(proseOnly ? proseSlots : rawSlots, text);
|
|
258
|
+
if (match === "hit") return cache.value;
|
|
197
259
|
let hasComment: boolean;
|
|
198
260
|
let fromByte: number;
|
|
199
261
|
let state: FoldState;
|
|
200
|
-
if (
|
|
262
|
+
if (match === "append") {
|
|
201
263
|
// Append: a `<!--` introduced by the suffix flips the noise gate, and a
|
|
202
264
|
// marker straddling the seam can start at most 3 bytes back — identical
|
|
203
265
|
// to rescanning the full text, at O(delta).
|
|
@@ -2,7 +2,9 @@ import { Text } from "../components/text";
|
|
|
2
2
|
import { Container } from "../tui";
|
|
3
3
|
import { MessageNoticeComponent } from "../chrome/message-notice";
|
|
4
4
|
import { theme } from "../theme";
|
|
5
|
-
import type
|
|
5
|
+
import { type TodoItem, todoChecklistPhases } from "../tools/todo";
|
|
6
|
+
import { node, span, withHidden } from "../native/describe";
|
|
7
|
+
import type { DescribeContext, NativeNode } from "../native/node";
|
|
6
8
|
|
|
7
9
|
/**
|
|
8
10
|
* Component that renders a todo completion reminder notification, committed into
|
|
@@ -12,22 +14,50 @@ import type { TodoItem } from "../tools/todo";
|
|
|
12
14
|
*/
|
|
13
15
|
export class TodoReminderComponent extends Container {
|
|
14
16
|
readonly #notice: MessageNoticeComponent;
|
|
17
|
+
readonly #todos: TodoItem[];
|
|
18
|
+
readonly #note: string;
|
|
19
|
+
#hidden = false;
|
|
15
20
|
|
|
16
21
|
constructor(todos: TodoItem[], attempt: number, maxAttempts: number) {
|
|
17
22
|
super();
|
|
23
|
+
this.#todos = todos;
|
|
24
|
+
this.#note = `reminder ${attempt}/${maxAttempts}`;
|
|
25
|
+
const count = todos.length;
|
|
26
|
+
const header = `${count} incomplete ${count === 1 ? "todo" : "todos"} - reminder ${attempt}/${maxAttempts}`;
|
|
18
27
|
this.#notice = new MessageNoticeComponent({
|
|
19
28
|
presentation: () => {
|
|
20
|
-
const count = todos.length;
|
|
21
|
-
const label = count === 1 ? "todo" : "todos";
|
|
22
|
-
const header = `${count} incomplete ${label} - reminder ${attempt}/${maxAttempts}`;
|
|
23
29
|
const todoList = todos.map(todo => ` ${theme.checkbox.unchecked} ${todo.content}`).join("\n");
|
|
24
30
|
return { icon: theme.icon.warning, header, body: new Text(theme.italic(todoList), 0, 0) };
|
|
25
31
|
},
|
|
32
|
+
nativePresentation: () => ({
|
|
33
|
+
head: [span(`${theme.icon.warning} ${header}`)],
|
|
34
|
+
body: [
|
|
35
|
+
node(
|
|
36
|
+
"list",
|
|
37
|
+
{},
|
|
38
|
+
todos.map((todo, index) =>
|
|
39
|
+
node("item", { label: [span(todo.content, "em")], tone: "pending" }, [], `t${index}`),
|
|
40
|
+
),
|
|
41
|
+
),
|
|
42
|
+
],
|
|
43
|
+
}),
|
|
44
|
+
role: "omp.notice.todo",
|
|
26
45
|
});
|
|
27
46
|
this.addChild(this.#notice);
|
|
28
47
|
}
|
|
29
48
|
|
|
30
49
|
setToolActivityVisible(visible: boolean): void {
|
|
50
|
+
this.#hidden = !visible;
|
|
31
51
|
this.#notice.setToolActivityVisible(visible);
|
|
32
52
|
}
|
|
53
|
+
|
|
54
|
+
/** A `checklist` reminder of the open items where the terminal lists the kind (§7.5); else the notice card. */
|
|
55
|
+
override describe(cx?: DescribeContext): NativeNode {
|
|
56
|
+
if (cx?.supports("checklist") !== true) return this.#notice.describe();
|
|
57
|
+
const phases = todoChecklistPhases([{ name: "", tasks: this.#todos }]);
|
|
58
|
+
return withHidden(
|
|
59
|
+
node("checklist", { mode: "reminder", phases, note: this.#note, role: "omp.notice.todo" }),
|
|
60
|
+
this.#hidden,
|
|
61
|
+
);
|
|
62
|
+
}
|
|
33
63
|
}
|