@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
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import * as path from "node:path";
|
|
2
2
|
|
|
3
3
|
import { buildPathTree, isUrlLikePath, type PathTreeInput, walkPathTree } from "@oh-my-pi/pi-utils";
|
|
4
|
+
import type { TspTone } from "@oh-my-pi/pi-wire";
|
|
5
|
+
import { code, col, keyed, span, text } from "../native/describe";
|
|
6
|
+
import type { NativeNode } from "../native/node";
|
|
7
|
+
import { formatHashlineHeader } from "./hashline-format";
|
|
8
|
+
import { fileRow } from "./native-view";
|
|
4
9
|
|
|
5
10
|
// =============================================================================
|
|
6
11
|
// Grouped file output (grep / ast-grep / ast-edit / lsp diagnostics)
|
|
@@ -86,6 +91,51 @@ export function formatGroupedFiles(
|
|
|
86
91
|
return { model, display };
|
|
87
92
|
}
|
|
88
93
|
|
|
94
|
+
/** One file's rendered search matches, plus its hashline tag when editable. */
|
|
95
|
+
export interface FileMatchSection {
|
|
96
|
+
model: string[];
|
|
97
|
+
display: string[];
|
|
98
|
+
tag?: string;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Render per-file search matches (grep / ast-grep). Grouped mode nests files
|
|
103
|
+
* via {@link formatGroupedFiles}, appending `#tag` to headers; flat mode
|
|
104
|
+
* blank-separates files and prefixes each with a hashline header when tagged.
|
|
105
|
+
* Files with no model lines are omitted.
|
|
106
|
+
*/
|
|
107
|
+
export function formatFileMatches(
|
|
108
|
+
files: string[],
|
|
109
|
+
grouped: boolean,
|
|
110
|
+
renderFile: (filePath: string) => FileMatchSection,
|
|
111
|
+
): GroupedFilesOutput {
|
|
112
|
+
if (grouped) {
|
|
113
|
+
return formatGroupedFiles(files, filePath => {
|
|
114
|
+
const rendered = renderFile(filePath);
|
|
115
|
+
return {
|
|
116
|
+
modelLines: rendered.model,
|
|
117
|
+
displayLines: rendered.display,
|
|
118
|
+
headerSuffix: rendered.tag ? `#${rendered.tag}` : "",
|
|
119
|
+
skip: rendered.model.length === 0,
|
|
120
|
+
};
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
const model: string[] = [];
|
|
124
|
+
const display: string[] = [];
|
|
125
|
+
for (const filePath of files) {
|
|
126
|
+
const rendered = renderFile(filePath);
|
|
127
|
+
if (rendered.model.length === 0) continue;
|
|
128
|
+
if (model.length > 0) {
|
|
129
|
+
model.push("");
|
|
130
|
+
display.push("");
|
|
131
|
+
}
|
|
132
|
+
if (rendered.tag) model.push(formatHashlineHeader(filePath, rendered.tag));
|
|
133
|
+
model.push(...rendered.model);
|
|
134
|
+
display.push(...rendered.display);
|
|
135
|
+
}
|
|
136
|
+
return { model, display };
|
|
137
|
+
}
|
|
138
|
+
|
|
89
139
|
// =============================================================================
|
|
90
140
|
// Parsing grouped output back into per-line context (TUI renderers)
|
|
91
141
|
// =============================================================================
|
|
@@ -209,3 +259,158 @@ export function groupLineIndicesByBlank(rawLines: readonly string[]): number[][]
|
|
|
209
259
|
}
|
|
210
260
|
return groups;
|
|
211
261
|
}
|
|
262
|
+
|
|
263
|
+
// =============================================================================
|
|
264
|
+
// Native (TSP) description of grouped output
|
|
265
|
+
// =============================================================================
|
|
266
|
+
|
|
267
|
+
/** One event of {@link walkGroupedOutput}: a directory header, a file header, or a non-blank body line. */
|
|
268
|
+
export type GroupedOutputEvent =
|
|
269
|
+
| { readonly kind: "dir" }
|
|
270
|
+
| { readonly kind: "file"; readonly path: string; readonly suffix?: string }
|
|
271
|
+
| { readonly kind: "line"; readonly text: string };
|
|
272
|
+
|
|
273
|
+
/**
|
|
274
|
+
* Walk grouped output (`# dir/`, `## file.ts (suffix)`, body lines), resolving
|
|
275
|
+
* each file header to its full display path (the folded directory chain
|
|
276
|
+
* joined with the name) and dropping blank separator lines.
|
|
277
|
+
*/
|
|
278
|
+
export function* walkGroupedOutput(lines: readonly string[]): Generator<GroupedOutputEvent> {
|
|
279
|
+
const dirAtDepth: string[] = [];
|
|
280
|
+
for (const line of lines) {
|
|
281
|
+
const header = GROUPED_HEADER_RE.exec(line);
|
|
282
|
+
if (!header) {
|
|
283
|
+
if (line.trim().length > 0) yield { kind: "line", text: line };
|
|
284
|
+
continue;
|
|
285
|
+
}
|
|
286
|
+
const depth = header[1]!.length;
|
|
287
|
+
const rest = header[2]!.trimEnd();
|
|
288
|
+
dirAtDepth.length = depth - 1;
|
|
289
|
+
if (rest.endsWith("/") && !isUrlLikePath(rest)) {
|
|
290
|
+
dirAtDepth[depth - 1] = rest.slice(0, -1).replace(HEADER_SUFFIX_RE, "");
|
|
291
|
+
yield { kind: "dir" };
|
|
292
|
+
continue;
|
|
293
|
+
}
|
|
294
|
+
const suffix = HEADER_SUFFIX_RE.exec(rest)?.[0].trim();
|
|
295
|
+
const name = rest.replace(HEADER_SUFFIX_RE, "").replace(HEADER_HASH_TAG_RE, "");
|
|
296
|
+
const prefix = dirAtDepth.filter(Boolean).join("/");
|
|
297
|
+
yield { kind: "file", path: prefix ? `${prefix}/${name}` : name, suffix };
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
/** `*12│text`, ` 12|text`, `*12:text`: optional match marker, line number, gutter, content. */
|
|
302
|
+
const GROUPED_NUMBERED_LINE_RE = /^\s*(\*?)(\d+)(?:│|[:|])(.*)$/;
|
|
303
|
+
|
|
304
|
+
/** One source line for {@link numberedCode}: its number (`null` for an elision marker), text and match mark. */
|
|
305
|
+
export interface NumberedLine {
|
|
306
|
+
n: number | null;
|
|
307
|
+
text: string;
|
|
308
|
+
mark?: boolean;
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
/**
|
|
312
|
+
* Numbered `code` for possibly non-contiguous source lines: one block per run
|
|
313
|
+
* of consecutive line numbers (`start` = the run's first line, match lines
|
|
314
|
+
* `mark`ed), with a `…` row wherever the numbers jump or an elision marker
|
|
315
|
+
* (`n: null`) sits. No path header: the row or head above names the file.
|
|
316
|
+
*/
|
|
317
|
+
export function numberedCode(lines: readonly NumberedLine[], opts: { lang?: string } = {}): NativeNode[] {
|
|
318
|
+
const out: NativeNode[] = [];
|
|
319
|
+
let run: { start: number; text: string[]; marks: { line: number; tone: TspTone }[] } | undefined;
|
|
320
|
+
const flush = () => {
|
|
321
|
+
if (!run) return;
|
|
322
|
+
// The quiet `…` row between two non-adjacent runs.
|
|
323
|
+
if (out.length > 0) out.push(keyed(text([span("…", "dim")], { wrap: "none" }), `g${run.start}`));
|
|
324
|
+
out.push(
|
|
325
|
+
keyed(
|
|
326
|
+
code(run.text.join("\n"), {
|
|
327
|
+
start: run.start,
|
|
328
|
+
numbers: true,
|
|
329
|
+
lang: opts.lang,
|
|
330
|
+
marks: run.marks.length > 0 ? run.marks : undefined,
|
|
331
|
+
}),
|
|
332
|
+
`c${run.start}`,
|
|
333
|
+
),
|
|
334
|
+
);
|
|
335
|
+
run = undefined;
|
|
336
|
+
};
|
|
337
|
+
for (const line of lines) {
|
|
338
|
+
if (line.n === null) {
|
|
339
|
+
flush();
|
|
340
|
+
continue;
|
|
341
|
+
}
|
|
342
|
+
if (run && run.start + run.text.length !== line.n) flush();
|
|
343
|
+
run ??= { start: line.n, text: [], marks: [] };
|
|
344
|
+
run.text.push(line.text);
|
|
345
|
+
if (line.mark) run.marks.push({ line: line.n, tone: "accent" });
|
|
346
|
+
}
|
|
347
|
+
flush();
|
|
348
|
+
return out;
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
/**
|
|
352
|
+
* Describe grouped search output (grep / ast-grep / ast-edit display content)
|
|
353
|
+
* by file (§7.3 grep): per file a 22px path row (dim dir, strong name, the
|
|
354
|
+
* header's suffix or the match count as a chip), then its lines as
|
|
355
|
+
* {@link numberedCode} with match lines marked and `…` between non-adjacent
|
|
356
|
+
* runs. Unnumbered body lines stay plain `code`. `maxFiles` keeps only the
|
|
357
|
+
* first files (the caller says how many were left out).
|
|
358
|
+
*/
|
|
359
|
+
export function describeGroupedOutput(
|
|
360
|
+
lines: readonly string[],
|
|
361
|
+
options: { lang?: (path: string) => string | undefined; maxFiles?: number } = {},
|
|
362
|
+
): NativeNode[] {
|
|
363
|
+
const files: NativeNode[] = [];
|
|
364
|
+
const loose: NativeNode[] = [];
|
|
365
|
+
let current: { path: string; suffix?: string; children: NativeNode[]; marks: number } | undefined;
|
|
366
|
+
let numbered: NumberedLine[] = [];
|
|
367
|
+
let plain: string[] = [];
|
|
368
|
+
|
|
369
|
+
const flushLines = () => {
|
|
370
|
+
const target = current?.children ?? loose;
|
|
371
|
+
if (numbered.length > 0) {
|
|
372
|
+
target.push(...numberedCode(numbered, { lang: current ? options.lang?.(current.path) : undefined }));
|
|
373
|
+
numbered = [];
|
|
374
|
+
}
|
|
375
|
+
if (plain.length > 0) {
|
|
376
|
+
target.push(keyed(code(plain.join("\n")), `p${target.length}`));
|
|
377
|
+
plain = [];
|
|
378
|
+
}
|
|
379
|
+
};
|
|
380
|
+
const flushFile = () => {
|
|
381
|
+
flushLines();
|
|
382
|
+
if (!current) return;
|
|
383
|
+
const count = current.marks;
|
|
384
|
+
const chip = current.suffix
|
|
385
|
+
? { text: current.suffix.replace(/^\(|\)$/g, "") }
|
|
386
|
+
: count > 0
|
|
387
|
+
? { text: String(count), title: count === 1 ? "1 match" : `${count} matches` }
|
|
388
|
+
: undefined;
|
|
389
|
+
const head = fileRow(current.path, { chip, key: "file" });
|
|
390
|
+
files.push(
|
|
391
|
+
keyed(col([head, ...current.children], { gap: "xs", role: "omp.tool.search.file" }), `f:${current.path}`),
|
|
392
|
+
);
|
|
393
|
+
current = undefined;
|
|
394
|
+
};
|
|
395
|
+
|
|
396
|
+
for (const event of walkGroupedOutput(lines)) {
|
|
397
|
+
if (event.kind !== "line") {
|
|
398
|
+
flushFile();
|
|
399
|
+
if (options.maxFiles !== undefined && files.length >= options.maxFiles) break;
|
|
400
|
+
if (event.kind === "file") current = { path: event.path, suffix: event.suffix, children: [], marks: 0 };
|
|
401
|
+
continue;
|
|
402
|
+
}
|
|
403
|
+
const match = GROUPED_NUMBERED_LINE_RE.exec(event.text);
|
|
404
|
+
if (!match) {
|
|
405
|
+
if (numbered.length > 0) flushLines();
|
|
406
|
+
plain.push(event.text);
|
|
407
|
+
continue;
|
|
408
|
+
}
|
|
409
|
+
if (plain.length > 0) flushLines();
|
|
410
|
+
const mark = match[1] === "*";
|
|
411
|
+
if (mark && current) current.marks++;
|
|
412
|
+
numbered.push({ n: Number.parseInt(match[2]!, 10), text: match[3]!, mark });
|
|
413
|
+
}
|
|
414
|
+
flushFile();
|
|
415
|
+
return [...loose, ...files];
|
|
416
|
+
}
|
package/src/tools/json-tree.ts
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* JSON tree rendering utilities shared across tool renderers.
|
|
3
3
|
*/
|
|
4
|
-
import { INTENT_FIELD } from "@oh-my-pi/pi-wire";
|
|
4
|
+
import { INTENT_FIELD, type TspSpan, type TspTreeNode } from "@oh-my-pi/pi-wire";
|
|
5
5
|
import { sanitizeText } from "@oh-my-pi/pi-utils";
|
|
6
6
|
import { TreeView, treeRowPrefix } from "../components/tree-view";
|
|
7
7
|
import { truncateToWidth } from "../render/render-utils";
|
|
8
8
|
import type { Theme, ThemeColor } from "../theme/theme";
|
|
9
|
+
import { node, span } from "../native/describe";
|
|
10
|
+
import type { NativeNode } from "../native/node";
|
|
11
|
+
import { plainText } from "../native/spans";
|
|
9
12
|
|
|
10
13
|
/** Max depth for JSON tree rendering */
|
|
11
14
|
export const JSON_TREE_MAX_DEPTH_COLLAPSED = 2;
|
|
@@ -386,3 +389,115 @@ export function renderJsonTreeLines(
|
|
|
386
389
|
const rendered = tree.renderWithState(Number.POSITIVE_INFINITY);
|
|
387
390
|
return { lines: [...rendered.lines], truncated: rendered.truncated || scalarTruncated };
|
|
388
391
|
}
|
|
392
|
+
|
|
393
|
+
/** Data caps for {@link describeJsonTree}. */
|
|
394
|
+
export interface JsonTreeDescribeOptions {
|
|
395
|
+
/** Deepest level expanded into child nodes; deeper containers get a `…` child. */
|
|
396
|
+
maxDepth?: number;
|
|
397
|
+
/** Tree nodes emitted before the remaining siblings collapse into `… N more`. */
|
|
398
|
+
maxNodes?: number;
|
|
399
|
+
/** Characters kept per string scalar (data cap, not a width). */
|
|
400
|
+
maxScalarLen?: number;
|
|
401
|
+
/** Levels open initially; deeper containers start closed. */
|
|
402
|
+
openDepth?: number;
|
|
403
|
+
/** Root object keys omitted. Defaults to internal tool argument metadata. */
|
|
404
|
+
hiddenRootKeys?: readonly string[];
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
type JsonEntry = readonly [key: string, value: unknown];
|
|
408
|
+
|
|
409
|
+
function clipScalar(value: string, maxLen: number): string {
|
|
410
|
+
return value.length > maxLen ? `${value.slice(0, maxLen)}…` : value;
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
function jsonEntries(value: unknown[] | Record<string, unknown>, hidden?: readonly string[]): JsonEntry[] {
|
|
414
|
+
const out: JsonEntry[] = [];
|
|
415
|
+
if (Array.isArray(value)) {
|
|
416
|
+
for (let index = 0; index < value.length; index++) out.push([`[${index}]`, value[index]]);
|
|
417
|
+
return out;
|
|
418
|
+
}
|
|
419
|
+
for (const key in value) {
|
|
420
|
+
if (!hidden?.includes(key)) out.push([key, value[key]]);
|
|
421
|
+
}
|
|
422
|
+
return out;
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
function jsonScalarToken(value: unknown): string {
|
|
426
|
+
if (typeof value === "number" || typeof value === "bigint") return "syntaxNumber";
|
|
427
|
+
if (typeof value === "boolean" || value === null || value === undefined) return "syntaxKeyword";
|
|
428
|
+
return "dim";
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
/**
|
|
432
|
+
* TSP `tree` of a JSON value: containers become expandable nodes labelled with
|
|
433
|
+
* their key and size, scalars become `key: value` leaves styled by type.
|
|
434
|
+
* Bounded by depth, node count and scalar length; no width math.
|
|
435
|
+
*/
|
|
436
|
+
export function describeJsonTree(value: unknown, options: JsonTreeDescribeOptions = {}): NativeNode {
|
|
437
|
+
const maxDepth = Math.max(0, options.maxDepth ?? JSON_TREE_MAX_DEPTH_EXPANDED);
|
|
438
|
+
const maxScalarLen = Math.max(1, options.maxScalarLen ?? JSON_TREE_SCALAR_LEN_EXPANDED);
|
|
439
|
+
const openDepth = options.openDepth ?? JSON_TREE_MAX_DEPTH_COLLAPSED;
|
|
440
|
+
let budget = Math.max(1, options.maxNodes ?? JSON_TREE_MAX_LINES_EXPANDED);
|
|
441
|
+
let nextId = 0;
|
|
442
|
+
const leaf = (label: readonly TspSpan[]): TspTreeNode => ({ id: `${nextId++}`, label });
|
|
443
|
+
|
|
444
|
+
const describeEntries = (entries: readonly JsonEntry[], depth: number): TspTreeNode[] => {
|
|
445
|
+
const out: TspTreeNode[] = [];
|
|
446
|
+
for (let index = 0; index < entries.length; index++) {
|
|
447
|
+
if (budget <= 0) {
|
|
448
|
+
out.push(leaf([span(`… ${entries.length - index} more`, "dim")]));
|
|
449
|
+
break;
|
|
450
|
+
}
|
|
451
|
+
const [key, child] = entries[index];
|
|
452
|
+
out.push(describeValue(key, child, depth));
|
|
453
|
+
}
|
|
454
|
+
return out;
|
|
455
|
+
};
|
|
456
|
+
|
|
457
|
+
const describeValue = (key: string | undefined, entry: unknown, depth: number): TspTreeNode => {
|
|
458
|
+
budget--;
|
|
459
|
+
const id = `${nextId++}`;
|
|
460
|
+
const keySpans: TspSpan[] = key === undefined ? [] : [span(plainText(key), "muted")];
|
|
461
|
+
if (Array.isArray(entry) || isRecord(entry)) {
|
|
462
|
+
const entries = jsonEntries(entry);
|
|
463
|
+
const size = Array.isArray(entry) ? `[${entry.length}]` : `{${entries.length}}`;
|
|
464
|
+
const label = keySpans.length > 0 ? [...keySpans, span(` ${size}`, "dim")] : [span(size, "dim")];
|
|
465
|
+
if (entries.length === 0) return { id, label };
|
|
466
|
+
const children = depth >= maxDepth ? [leaf([span("…", "dim")])] : describeEntries(entries, depth + 1);
|
|
467
|
+
return { id, label, open: depth < openDepth, children };
|
|
468
|
+
}
|
|
469
|
+
const prefix = keySpans.length > 0 ? [...keySpans, span(": ", "muted")] : [];
|
|
470
|
+
if (typeof entry === "string") {
|
|
471
|
+
const lines = plainText(entry).split("\n");
|
|
472
|
+
const first = clipScalar(lines[0], maxScalarLen);
|
|
473
|
+
if (lines.length === 1) return { id, label: [...prefix, span(`"${first}"`, "syntaxString")] };
|
|
474
|
+
const children: TspTreeNode[] = [];
|
|
475
|
+
for (let index = 0; index < lines.length; index++) {
|
|
476
|
+
if (budget <= 0) {
|
|
477
|
+
children.push(leaf([span(`… ${lines.length - index} more lines`, "dim")]));
|
|
478
|
+
break;
|
|
479
|
+
}
|
|
480
|
+
budget--;
|
|
481
|
+
children.push(leaf([span(clipScalar(lines[index], maxScalarLen), "syntaxString")]));
|
|
482
|
+
}
|
|
483
|
+
return {
|
|
484
|
+
id,
|
|
485
|
+
label: [...prefix, span(`"${first}…"`, "syntaxString"), span(` (${lines.length} lines)`, "dim")],
|
|
486
|
+
open: false,
|
|
487
|
+
children,
|
|
488
|
+
};
|
|
489
|
+
}
|
|
490
|
+
return { id, label: [...prefix, span(plainText(formatScalar(entry, maxScalarLen)), jsonScalarToken(entry))] };
|
|
491
|
+
};
|
|
492
|
+
|
|
493
|
+
let nodes: TspTreeNode[];
|
|
494
|
+
if (Array.isArray(value) || isRecord(value)) {
|
|
495
|
+
const hidden = Array.isArray(value) ? undefined : (options.hiddenRootKeys ?? DEFAULT_HIDDEN_ROOT_KEYS);
|
|
496
|
+
const entries = jsonEntries(value, hidden);
|
|
497
|
+
nodes =
|
|
498
|
+
entries.length > 0 ? describeEntries(entries, 1) : [leaf([span(Array.isArray(value) ? "[]" : "{}", "dim")])];
|
|
499
|
+
} else {
|
|
500
|
+
nodes = [describeValue(undefined, value, 0)];
|
|
501
|
+
}
|
|
502
|
+
return node("tree", { nodes });
|
|
503
|
+
}
|