@oh-my-pi/pi-tui 18.2.4 → 18.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +23 -0
- package/README.md +43 -0
- package/dist/types/app-keybindings.d.ts +395 -0
- package/dist/types/apps/autoresearch-dashboard.d.ts +43 -0
- package/dist/types/apps/autoresearch-data.d.ts +15 -0
- package/dist/types/apps/cleanse-board.d.ts +66 -0
- package/dist/types/apps/cleanse-picker.d.ts +23 -0
- package/dist/types/apps/debug/log-formatting.d.ts +6 -0
- package/dist/types/apps/debug/log-viewer.d.ts +81 -0
- package/dist/types/apps/debug/protocol-probe.d.ts +42 -0
- package/dist/types/apps/debug/raw-sse-buffer.d.ts +58 -0
- package/dist/types/apps/debug/raw-sse.d.ts +26 -0
- package/dist/types/apps/debug/terminal-info.d.ts +34 -0
- package/dist/types/apps/debug/viewer-frame.d.ts +52 -0
- package/dist/types/apps/git/avatar.d.ts +9 -0
- package/dist/types/apps/git/colors.d.ts +49 -0
- package/dist/types/apps/git/diff-pane.d.ts +188 -0
- package/dist/types/apps/git/git-tui.d.ts +66 -0
- package/dist/types/apps/git/sidebar.d.ts +149 -0
- package/dist/types/apps/git/state.d.ts +117 -0
- package/dist/types/apps/if-bench-board.d.ts +75 -0
- package/dist/types/apps/live-visualizer.d.ts +33 -0
- package/dist/types/apps/ps-data.d.ts +51 -0
- package/dist/types/apps/ps-top.d.ts +33 -0
- package/dist/types/apps/session-picker.d.ts +26 -0
- package/dist/types/apps/setup-model-picker.d.ts +13 -0
- package/dist/types/apps/standalone-picker.d.ts +42 -0
- package/dist/types/autocomplete.d.ts +4 -0
- package/dist/types/chat/advisor-message.d.ts +11 -0
- package/dist/types/chat/assistant-message.d.ts +106 -0
- package/dist/types/chat/background-tan-message.d.ts +9 -0
- package/dist/types/chat/bash-execution.d.ts +47 -0
- package/dist/types/chat/cache-invalidation-marker.d.ts +50 -0
- package/dist/types/chat/chat-transcript-builder.d.ts +50 -0
- package/dist/types/chat/collab-prompt-message.d.ts +10 -0
- package/dist/types/chat/compaction-summary-message.d.ts +54 -0
- package/dist/types/chat/custom-message.d.ts +10 -0
- package/dist/types/chat/display-preferences.d.ts +13 -0
- package/dist/types/chat/eval-execution.d.ts +29 -0
- package/dist/types/chat/execution-shared.d.ts +51 -0
- package/dist/types/chat/extension-types.d.ts +28 -0
- package/dist/types/chat/hook-message.d.ts +10 -0
- package/dist/types/chat/image-loading.d.ts +46 -0
- package/dist/types/chat/late-diagnostics-message.d.ts +21 -0
- package/dist/types/chat/messages.d.ts +189 -0
- package/dist/types/chat/reaction.d.ts +30 -0
- package/dist/types/chat/read-target.d.ts +4 -0
- package/dist/types/chat/read-tool-group.d.ts +67 -0
- package/dist/types/chat/served-model-marker.d.ts +47 -0
- package/dist/types/chat/skill-message.d.ts +33 -0
- package/dist/types/chat/skill-title-input.d.ts +14 -0
- package/dist/types/chat/stripped-tool-calls-placeholder.d.ts +12 -0
- package/dist/types/chat/thinking-display.d.ts +12 -0
- package/dist/types/chat/todo-reminder.d.ts +13 -0
- package/dist/types/chat/tool-execution.d.ts +138 -0
- package/dist/types/chat/transcript-browser.d.ts +93 -0
- package/dist/types/chat/transcript-entry.d.ts +45 -0
- package/dist/types/chat/transcript-outline.d.ts +86 -0
- package/dist/types/chat/transcript-render-helpers.d.ts +92 -0
- package/dist/types/chat/ttsr-notification.d.ts +23 -0
- package/dist/types/chat/user-message.d.ts +52 -0
- package/dist/types/chrome/chat-block.d.ts +64 -0
- package/dist/types/chrome/collab-qrcode.d.ts +28 -0
- package/dist/types/chrome/context-thresholds.d.ts +10 -0
- package/dist/types/chrome/countdown-timer.d.ts +14 -0
- package/dist/types/chrome/diff.d.ts +14 -0
- package/dist/types/chrome/dynamic-border.d.ts +16 -0
- package/dist/types/chrome/error-block.d.ts +17 -0
- package/dist/types/chrome/form-theme.d.ts +3 -0
- package/dist/types/chrome/format.d.ts +12 -0
- package/dist/types/chrome/index.d.ts +20 -0
- package/dist/types/chrome/keybinding-hints.d.ts +40 -0
- package/dist/types/chrome/live-board.d.ts +23 -0
- package/dist/types/chrome/local-date.d.ts +4 -0
- package/dist/types/chrome/message-divider.d.ts +22 -0
- package/dist/types/chrome/message-frame.d.ts +52 -0
- package/dist/types/chrome/message-notice.d.ts +35 -0
- package/dist/types/chrome/overlay-box.d.ts +74 -0
- package/dist/types/chrome/qrcode.d.ts +48 -0
- package/dist/types/chrome/segment-track.d.ts +27 -0
- package/dist/types/chrome/select-list-mouse-routing.d.ts +4 -0
- package/dist/types/chrome/selector-helpers.d.ts +52 -0
- package/dist/types/chrome/shared.d.ts +5 -0
- package/dist/types/chrome/streaming-panel.d.ts +19 -0
- package/dist/types/chrome/tool-activity.d.ts +17 -0
- package/dist/types/chrome/transcript-container.d.ts +129 -0
- package/dist/types/chrome/transcript-status.d.ts +12 -0
- package/dist/types/chrome/visual-truncate.d.ts +19 -0
- package/dist/types/components/disclosure.d.ts +42 -0
- package/dist/types/components/form.d.ts +130 -0
- package/dist/types/components/key-value-list.d.ts +24 -0
- package/dist/types/components/layout/geometry.d.ts +73 -0
- package/dist/types/components/layout/row.d.ts +55 -0
- package/dist/types/components/layout/split-pane.d.ts +80 -0
- package/dist/types/components/layout/stack.d.ts +50 -0
- package/dist/types/components/menu-selection.d.ts +71 -0
- package/dist/types/components/metric.d.ts +44 -0
- package/dist/types/components/progress-bar.d.ts +36 -0
- package/dist/types/components/scroll-view.d.ts +53 -19
- package/dist/types/components/scroll-viewport.d.ts +46 -0
- package/dist/types/components/section.d.ts +19 -0
- package/dist/types/components/select-list.d.ts +46 -2
- package/dist/types/components/settings-list.d.ts +20 -0
- package/dist/types/components/table.d.ts +32 -0
- package/dist/types/components/tree-view.d.ts +130 -0
- package/dist/types/components/wizard-step.d.ts +60 -0
- package/dist/types/hotkeys-markdown.d.ts +7 -0
- package/dist/types/index.d.ts +17 -0
- package/dist/types/keybinding-matchers.d.ts +35 -0
- package/dist/types/keys.d.ts +2 -2
- package/dist/types/lang-from-path.d.ts +9 -0
- package/dist/types/overlays/advisor-config.d.ts +114 -0
- package/dist/types/overlays/agent-activity.d.ts +41 -0
- package/dist/types/overlays/agent-hub-projection.d.ts +33 -0
- package/dist/types/overlays/agent-hub-renderer.d.ts +53 -0
- package/dist/types/overlays/agent-hub-types.d.ts +99 -0
- package/dist/types/overlays/agent-hub.d.ts +126 -0
- package/dist/types/overlays/agent-transcript-viewer.d.ts +71 -0
- package/dist/types/overlays/agents-hub.d.ts +72 -0
- package/dist/types/overlays/ask-dialog.d.ts +88 -0
- package/dist/types/overlays/bordered-loader.d.ts +11 -0
- package/dist/types/overlays/btw-history-panel.d.ts +29 -0
- package/dist/types/overlays/btw-history.d.ts +17 -0
- package/dist/types/overlays/btw-panel.d.ts +26 -0
- package/dist/types/overlays/cleanse-panel.d.ts +36 -0
- package/dist/types/overlays/codex-reset-fireworks.d.ts +52 -0
- package/dist/types/overlays/composer-shape-preview.d.ts +47 -0
- package/dist/types/overlays/composer-shape-registry.d.ts +50 -0
- package/dist/types/overlays/copy-selector.d.ts +48 -0
- package/dist/types/overlays/copy-targets.d.ts +63 -0
- package/dist/types/overlays/error-banner.d.ts +13 -0
- package/dist/types/overlays/extensions/display-text.d.ts +10 -0
- package/dist/types/overlays/extensions/extension-dashboard.d.ts +63 -0
- package/dist/types/overlays/extensions/extension-list.d.ts +54 -0
- package/dist/types/overlays/extensions/inspector-model.d.ts +109 -0
- package/dist/types/overlays/extensions/inspector-panel.d.ts +17 -0
- package/dist/types/overlays/extensions/live-tool-session.d.ts +28 -0
- package/dist/types/overlays/extensions/mcp-runtime.d.ts +107 -0
- package/dist/types/overlays/extensions/state-manager.d.ts +42 -0
- package/dist/types/overlays/extensions/types.d.ts +165 -0
- package/dist/types/overlays/history-search.d.ts +16 -0
- package/dist/types/overlays/hook-editor.d.ts +44 -0
- package/dist/types/overlays/hook-input.d.ts +20 -0
- package/dist/types/overlays/hook-selector.d.ts +71 -0
- package/dist/types/overlays/hub-frame.d.ts +77 -0
- package/dist/types/overlays/login-dialog.d.ts +43 -0
- package/dist/types/overlays/logout-account-selector.d.ts +15 -0
- package/dist/types/overlays/mcp-add-wizard.d.ts +87 -0
- package/dist/types/overlays/model-browser.d.ts +213 -0
- package/dist/types/overlays/model-hub.d.ts +72 -0
- package/dist/types/overlays/model-picker.d.ts +74 -0
- package/dist/types/overlays/model-selector.d.ts +52 -0
- package/dist/types/overlays/move-overlay.d.ts +39 -0
- package/dist/types/overlays/oauth-selector.d.ts +41 -0
- package/dist/types/overlays/omfg-panel.d.ts +20 -0
- package/dist/types/overlays/pause-screen.d.ts +43 -0
- package/dist/types/overlays/plan-review-overlay.d.ts +89 -0
- package/dist/types/overlays/plan-save-overlay.d.ts +19 -0
- package/dist/types/overlays/plan-toc.d.ts +41 -0
- package/dist/types/overlays/plugin-selector.d.ts +28 -0
- package/dist/types/overlays/plugin-settings.d.ts +180 -0
- package/dist/types/overlays/queue-mode-selector.d.ts +11 -0
- package/dist/types/overlays/reset-usage-selector.d.ts +23 -0
- package/dist/types/overlays/rewind-selector.d.ts +61 -0
- package/dist/types/overlays/running-subagent-badge.d.ts +6 -0
- package/dist/types/overlays/session-account-selector.d.ts +24 -0
- package/dist/types/overlays/session-info-overlay.d.ts +17 -0
- package/dist/types/overlays/session-observer-registry.d.ts +77 -0
- package/dist/types/overlays/session-selector.d.ts +131 -0
- package/dist/types/overlays/settings-defs.d.ts +119 -0
- package/dist/types/overlays/settings-selector.d.ts +73 -0
- package/dist/types/overlays/show-images-selector.d.ts +11 -0
- package/dist/types/overlays/snapcompact-shape-preview.d.ts +31 -0
- package/dist/types/overlays/theme-selector.d.ts +12 -0
- package/dist/types/overlays/thinking-selector.d.ts +12 -0
- package/dist/types/overlays/tiny-title-download-progress.d.ts +21 -0
- package/dist/types/overlays/tree-selector.d.ts +92 -0
- package/dist/types/overlays/usage-dashboard.d.ts +94 -0
- package/dist/types/overlays/usage-display.d.ts +5 -0
- package/dist/types/overlays/usage-row.d.ts +17 -0
- package/dist/types/prompt/attachment-chips.d.ts +19 -0
- package/dist/types/prompt/composer-attachments.d.ts +71 -0
- package/dist/types/prompt/composer-cache.d.ts +37 -0
- package/dist/types/prompt/composer.d.ts +159 -0
- package/dist/types/prompt/custom-editor.d.ts +261 -0
- package/dist/types/prompt/editor-top-gap.d.ts +18 -0
- package/dist/types/prompt/emoji-autocomplete.d.ts +16 -0
- package/dist/types/prompt/github-ref-autocomplete.d.ts +35 -0
- package/dist/types/prompt/gradient-highlight.d.ts +32 -0
- package/dist/types/prompt/image-format.d.ts +4 -0
- package/dist/types/prompt/image-references.d.ts +26 -0
- package/dist/types/prompt/interactive-context-helpers.d.ts +43 -0
- package/dist/types/prompt/internal-url-autocomplete.d.ts +56 -0
- package/dist/types/prompt/macos-spelling.d.ts +44 -0
- package/dist/types/prompt/magic-keyword-boundary.d.ts +9 -0
- package/dist/types/prompt/magic-keywords.d.ts +26 -0
- package/dist/types/prompt/markdown-prose.d.ts +15 -0
- package/dist/types/prompt/model-mention-autocomplete.d.ts +25 -0
- package/dist/types/prompt/model-mention-syntax.d.ts +24 -0
- package/dist/types/prompt/orchestrate.d.ts +13 -0
- package/dist/types/prompt/prompt-action-autocomplete.d.ts +56 -0
- package/dist/types/prompt/queue-input.d.ts +8 -0
- package/dist/types/prompt/skill-tokens.d.ts +13 -0
- package/dist/types/prompt/tools-markdown.d.ts +12 -0
- package/dist/types/prompt/ultrathink.d.ts +13 -0
- package/dist/types/prompt/usage-amounts.d.ts +26 -0
- package/dist/types/prompt/video.d.ts +18 -0
- package/dist/types/prompt/welcome.d.ts +83 -0
- package/dist/types/prompt/workflow.d.ts +13 -0
- package/dist/types/render/code-cell.d.ts +51 -0
- package/dist/types/render/file-list.d.ts +22 -0
- package/dist/types/render/hyperlink.d.ts +80 -0
- package/dist/types/render/index.d.ts +16 -0
- package/dist/types/render/output-block.d.ts +54 -0
- package/dist/types/render/output-pane.d.ts +80 -0
- package/dist/types/render/render-utils.d.ts +312 -0
- package/dist/types/render/sixel.d.ts +21 -0
- package/dist/types/render/status-line.d.ts +23 -0
- package/dist/types/render/tool-card.d.ts +71 -0
- package/dist/types/render/tree-list.d.ts +29 -0
- package/dist/types/render/types.d.ts +17 -0
- package/dist/types/render/utils.d.ts +43 -0
- package/dist/types/render/width-aware-text.d.ts +23 -0
- package/dist/types/setup/lazy.d.ts +3 -0
- package/dist/types/setup/scenes/composer.d.ts +3 -0
- package/dist/types/setup/scenes/glyph.d.ts +3 -0
- package/dist/types/setup/scenes/model.d.ts +3 -0
- package/dist/types/setup/scenes/outro.d.ts +2 -0
- package/dist/types/setup/scenes/providers.d.ts +3 -0
- package/dist/types/setup/scenes/sign-in.d.ts +21 -0
- package/dist/types/setup/scenes/splash.d.ts +11 -0
- package/dist/types/setup/scenes/theme.d.ts +3 -0
- package/dist/types/setup/scenes/types.d.ts +110 -0
- package/dist/types/setup/scenes/web-search.d.ts +22 -0
- package/dist/types/setup/setup-version.d.ts +11 -0
- package/dist/types/setup/startup-splash.d.ts +9 -0
- package/dist/types/setup/wizard-overlay.d.ts +16 -0
- package/dist/types/setup/wizard.d.ts +25 -0
- package/dist/types/status-line/component.d.ts +182 -0
- package/dist/types/status-line/context-usage.d.ts +156 -0
- package/dist/types/status-line/footer.d.ts +30 -0
- package/dist/types/status-line/git-utils.d.ts +22 -0
- package/dist/types/status-line/host.d.ts +129 -0
- package/dist/types/status-line/index.d.ts +6 -0
- package/dist/types/status-line/loop.d.ts +18 -0
- package/dist/types/status-line/metrics.d.ts +21 -0
- package/dist/types/status-line/presets.d.ts +3 -0
- package/dist/types/status-line/schema.d.ts +15 -0
- package/dist/types/status-line/segments.d.ts +5 -0
- package/dist/types/status-line/separators.d.ts +3 -0
- package/dist/types/status-line/types.d.ts +236 -0
- package/dist/types/stdin-buffer.d.ts +4 -0
- package/dist/types/theme/color.d.ts +24 -0
- package/dist/types/theme/defaults/index.d.ts +9489 -0
- package/dist/types/theme/index.d.ts +4 -0
- package/dist/types/theme/loader.d.ts +23 -0
- package/dist/types/theme/mermaid-cache.d.ts +26 -0
- package/dist/types/theme/schema-validation.d.ts +3 -0
- package/dist/types/theme/schema.d.ts +25 -0
- package/dist/types/theme/session-color.d.ts +43 -0
- package/dist/types/theme/shimmer.d.ts +44 -0
- package/dist/types/theme/symbols.d.ts +34 -0
- package/dist/types/theme/theme-class.d.ts +299 -0
- package/dist/types/theme/theme.d.ts +111 -0
- package/dist/types/theme/tui-adapters.d.ts +30 -0
- package/dist/types/thinking.d.ts +165 -0
- package/dist/types/tools/agent-tree.d.ts +36 -0
- package/dist/types/tools/ask.d.ts +67 -0
- package/dist/types/tools/ast-edit.d.ts +53 -0
- package/dist/types/tools/ast-grep.d.ts +52 -0
- package/dist/types/tools/autoresearch.d.ts +156 -0
- package/dist/types/tools/bash-interactive.d.ts +28 -0
- package/dist/types/tools/bash.d.ts +103 -0
- package/dist/types/tools/conflict-detect.d.ts +43 -0
- package/dist/types/tools/debug.d.ts +60 -0
- package/dist/types/tools/default-renderer.d.ts +24 -0
- package/dist/types/tools/edit.d.ts +158 -0
- package/dist/types/tools/eval-format/code-mode-declarations.d.ts +5 -0
- package/dist/types/tools/eval-format/index.d.ts +5 -0
- package/dist/types/tools/eval-format/javascript.d.ts +2 -0
- package/dist/types/tools/eval-format/python.d.ts +2 -0
- package/dist/types/tools/eval.d.ts +94 -0
- package/dist/types/tools/fetch.d.ts +42 -0
- package/dist/types/tools/gh-format.d.ts +8 -0
- package/dist/types/tools/github.d.ts +144 -0
- package/dist/types/tools/glob.d.ts +44 -0
- package/dist/types/tools/goal.d.ts +42 -0
- package/dist/types/tools/grep.d.ts +64 -0
- package/dist/types/tools/grouped-file-output.d.ts +71 -0
- package/dist/types/tools/hashline-format.d.ts +28 -0
- package/dist/types/tools/hub.d.ts +340 -0
- package/dist/types/tools/index.d.ts +4 -0
- package/dist/types/tools/json-tree.d.ts +59 -0
- package/dist/types/tools/line-ranges.d.ts +29 -0
- package/dist/types/tools/list-limit.d.ts +15 -0
- package/dist/types/tools/lsp.d.ts +72 -0
- package/dist/types/tools/match-line-format.d.ts +11 -0
- package/dist/types/tools/mcp.d.ts +81 -0
- package/dist/types/tools/memory.d.ts +67 -0
- package/dist/types/tools/output-meta.d.ts +151 -0
- package/dist/types/tools/read.d.ts +139 -0
- package/dist/types/tools/renderer.d.ts +98 -0
- package/dist/types/tools/report-tool-issue.d.ts +8 -0
- package/dist/types/tools/resolve.d.ts +47 -0
- package/dist/types/tools/streaming-output.d.ts +282 -0
- package/dist/types/tools/subprocess.d.ts +24 -0
- package/dist/types/tools/task-repair-args.d.ts +53 -0
- package/dist/types/tools/task-yield-assembly.d.ts +20 -0
- package/dist/types/tools/task.d.ts +425 -0
- package/dist/types/tools/terminal-output.d.ts +8 -0
- package/dist/types/tools/think.d.ts +13 -0
- package/dist/types/tools/todo.d.ts +118 -0
- package/dist/types/tools/tool-errors.d.ts +7 -0
- package/dist/types/tools/vibe.d.ts +120 -0
- package/dist/types/tools/web-search.d.ts +195 -0
- package/dist/types/tools/write.d.ts +76 -0
- package/dist/types/tools/xd-url.d.ts +13 -0
- package/dist/types/tools/xdev.d.ts +52 -0
- package/dist/types/tui.d.ts +18 -0
- package/dist/types/utils.d.ts +2 -0
- package/package.json +37 -3
- package/src/app-keybindings.ts +760 -0
- package/src/apps/autoresearch-dashboard.ts +500 -0
- package/src/apps/autoresearch-data.ts +64 -0
- package/src/apps/cleanse-board.ts +341 -0
- package/src/apps/cleanse-picker.ts +57 -0
- package/src/apps/debug/log-formatting.ts +53 -0
- package/src/apps/debug/log-viewer.ts +868 -0
- package/src/apps/debug/protocol-probe.ts +267 -0
- package/src/apps/debug/raw-sse-buffer.ts +449 -0
- package/src/apps/debug/raw-sse.ts +282 -0
- package/src/apps/debug/terminal-info.ts +115 -0
- package/src/apps/debug/viewer-frame.ts +174 -0
- package/src/apps/git/avatar.ts +52 -0
- package/src/apps/git/colors.ts +109 -0
- package/src/apps/git/diff-pane.ts +1512 -0
- package/src/apps/git/git-tui.ts +889 -0
- package/src/apps/git/sidebar.ts +1204 -0
- package/src/apps/git/state.ts +113 -0
- package/src/apps/if-bench-board.ts +324 -0
- package/src/apps/live-visualizer.ts +238 -0
- package/src/apps/ps-data.ts +116 -0
- package/src/apps/ps-top.ts +422 -0
- package/src/apps/session-picker.ts +95 -0
- package/src/apps/setup-model-picker.ts +21 -0
- package/src/apps/standalone-picker.ts +111 -0
- package/src/autocomplete.ts +9 -13
- package/src/chat/advisor-message.ts +175 -0
- package/src/chat/assistant-message.ts +1214 -0
- package/src/chat/background-tan-message.ts +35 -0
- package/src/chat/bash-execution.ts +394 -0
- package/src/chat/cache-invalidation-marker.ts +94 -0
- package/src/chat/chat-transcript-builder.ts +593 -0
- package/src/chat/collab-prompt-message.ts +34 -0
- package/src/chat/compaction-summary-message.ts +261 -0
- package/src/chat/custom-message.ts +23 -0
- package/src/chat/display-preferences.ts +24 -0
- package/src/chat/eval-execution.ts +172 -0
- package/src/chat/execution-shared.ts +113 -0
- package/src/chat/extension-types.ts +46 -0
- package/src/chat/hook-message.ts +20 -0
- package/src/chat/image-loading.ts +122 -0
- package/src/chat/late-diagnostics-message.ts +92 -0
- package/src/chat/messages.ts +305 -0
- package/src/chat/reaction.ts +65 -0
- package/src/chat/read-target.ts +7 -0
- package/src/chat/read-tool-group.ts +873 -0
- package/src/chat/served-model-marker.ts +91 -0
- package/src/chat/skill-message.ts +220 -0
- package/src/chat/skill-title-input.ts +41 -0
- package/src/chat/stripped-tool-calls-placeholder.ts +35 -0
- package/src/chat/thinking-display.ts +312 -0
- package/src/chat/todo-reminder.ts +33 -0
- package/src/chat/tool-execution.ts +1395 -0
- package/src/chat/transcript-browser.ts +268 -0
- package/src/chat/transcript-entry.ts +96 -0
- package/src/chat/transcript-outline.ts +260 -0
- package/src/chat/transcript-render-helpers.ts +315 -0
- package/src/chat/ttsr-notification.ts +123 -0
- package/src/chat/user-message.ts +287 -0
- package/src/chrome/chat-block.ts +110 -0
- package/src/chrome/collab-qrcode.ts +74 -0
- package/src/chrome/context-thresholds.ts +85 -0
- package/src/chrome/countdown-timer.ts +74 -0
- package/src/chrome/diff.ts +266 -0
- package/src/chrome/dynamic-border.ts +36 -0
- package/src/chrome/error-block.ts +63 -0
- package/src/chrome/form-theme.ts +10 -0
- package/src/chrome/format.ts +66 -0
- package/src/chrome/index.ts +21 -0
- package/src/chrome/keybinding-hints.ts +55 -0
- package/src/chrome/live-board.ts +123 -0
- package/src/chrome/local-date.ts +20 -0
- package/src/chrome/message-divider.ts +51 -0
- package/src/chrome/message-frame.ts +164 -0
- package/src/chrome/message-notice.ts +103 -0
- package/src/chrome/overlay-box.ts +301 -0
- package/src/chrome/qrcode.ts +539 -0
- package/src/chrome/segment-track.ts +86 -0
- package/src/chrome/select-list-mouse-routing.ts +11 -0
- package/src/chrome/selector-helpers.ts +119 -0
- package/src/chrome/shared.ts +27 -0
- package/src/chrome/streaming-panel.ts +72 -0
- package/src/chrome/tool-activity.ts +44 -0
- package/src/chrome/transcript-container.ts +902 -0
- package/src/chrome/transcript-status.ts +27 -0
- package/src/chrome/visual-truncate.ts +70 -0
- package/src/components/disclosure.ts +235 -0
- package/src/components/editor.ts +10 -12
- package/src/components/form.ts +566 -0
- package/src/components/input.ts +6 -27
- package/src/components/key-value-list.ts +88 -0
- package/src/components/layout/geometry.ts +202 -0
- package/src/components/layout/row.ts +283 -0
- package/src/components/layout/split-pane.ts +349 -0
- package/src/components/layout/stack.ts +261 -0
- package/src/components/markdown.ts +16 -12
- package/src/components/menu-selection.ts +248 -0
- package/src/components/metric.ts +132 -0
- package/src/components/progress-bar.ts +140 -0
- package/src/components/scroll-view.ts +372 -70
- package/src/components/scroll-viewport.ts +154 -0
- package/src/components/section.ts +77 -0
- package/src/components/select-list.ts +238 -159
- package/src/components/settings-list.ts +103 -80
- package/src/components/table.ts +127 -0
- package/src/components/tree-view.ts +481 -0
- package/src/components/wizard-step.ts +229 -0
- package/src/deccara.ts +1 -3
- package/src/hotkeys-markdown.ts +100 -0
- package/src/index.ts +18 -0
- package/src/keybinding-matchers.ts +99 -0
- package/src/keys.ts +2 -2
- package/src/lang-from-path.ts +252 -0
- package/src/overlays/advisor-config.ts +761 -0
- package/src/overlays/agent-activity.ts +113 -0
- package/src/overlays/agent-hub-projection.ts +250 -0
- package/src/overlays/agent-hub-renderer.ts +281 -0
- package/src/overlays/agent-hub-types.ts +74 -0
- package/src/overlays/agent-hub.ts +1562 -0
- package/src/overlays/agent-transcript-viewer.ts +669 -0
- package/src/overlays/agents-hub.ts +1203 -0
- package/src/overlays/ask-dialog.ts +1202 -0
- package/src/overlays/bordered-loader.ts +41 -0
- package/src/overlays/btw-history-panel.ts +591 -0
- package/src/overlays/btw-history.ts +33 -0
- package/src/overlays/btw-panel.ts +167 -0
- package/src/overlays/cleanse-panel.ts +167 -0
- package/src/overlays/codex-reset-fireworks.ts +375 -0
- package/src/overlays/composer-shape-preview.ts +137 -0
- package/src/overlays/composer-shape-registry.ts +82 -0
- package/src/overlays/copy-selector.ts +618 -0
- package/src/overlays/copy-targets.ts +210 -0
- package/src/overlays/error-banner.ts +39 -0
- package/src/overlays/extensions/display-text.ts +39 -0
- package/src/overlays/extensions/extension-dashboard.ts +645 -0
- package/src/overlays/extensions/extension-list.ts +667 -0
- package/src/overlays/extensions/inspector-model.ts +484 -0
- package/src/overlays/extensions/inspector-panel.ts +669 -0
- package/src/overlays/extensions/live-tool-session.ts +67 -0
- package/src/overlays/extensions/mcp-runtime.ts +289 -0
- package/src/overlays/extensions/state-manager.ts +337 -0
- package/src/overlays/extensions/types.ts +208 -0
- package/src/overlays/history-search.ts +268 -0
- package/src/overlays/hook-editor.ts +272 -0
- package/src/overlays/hook-input.ts +84 -0
- package/src/overlays/hook-selector.ts +635 -0
- package/src/overlays/hub-frame.ts +262 -0
- package/src/overlays/login-dialog.ts +231 -0
- package/src/overlays/logout-account-selector.ts +115 -0
- package/src/overlays/mcp-add-wizard.ts +1436 -0
- package/src/overlays/model-browser.ts +1176 -0
- package/src/overlays/model-hub.ts +2279 -0
- package/src/overlays/model-picker.ts +285 -0
- package/src/overlays/model-selector.ts +107 -0
- package/src/overlays/move-overlay.ts +197 -0
- package/src/overlays/oauth-selector.ts +446 -0
- package/src/overlays/omfg-panel.ts +136 -0
- package/src/overlays/pause-screen.ts +198 -0
- package/src/overlays/plan-review-overlay.ts +1227 -0
- package/src/overlays/plan-save-overlay.ts +74 -0
- package/src/overlays/plan-toc.ts +139 -0
- package/src/overlays/plugin-selector.ts +97 -0
- package/src/overlays/plugin-settings.ts +839 -0
- package/src/overlays/queue-mode-selector.ts +55 -0
- package/src/overlays/reset-usage-selector.ts +170 -0
- package/src/overlays/rewind-selector.ts +499 -0
- package/src/overlays/running-subagent-badge.ts +19 -0
- package/src/overlays/session-account-selector.ts +68 -0
- package/src/overlays/session-info-overlay.ts +96 -0
- package/src/overlays/session-observer-registry.ts +289 -0
- package/src/overlays/session-selector.ts +1137 -0
- package/src/overlays/settings-defs.ts +315 -0
- package/src/overlays/settings-selector.ts +1415 -0
- package/src/overlays/show-images-selector.ts +44 -0
- package/src/overlays/snapcompact-shape-preview-doc.md +14 -0
- package/src/overlays/snapcompact-shape-preview.ts +192 -0
- package/src/overlays/theme-selector.ts +62 -0
- package/src/overlays/thinking-selector.ts +51 -0
- package/src/overlays/tiny-title-download-progress.ts +102 -0
- package/src/overlays/tree-selector.ts +1121 -0
- package/src/overlays/usage-dashboard.ts +629 -0
- package/src/overlays/usage-display.ts +45 -0
- package/src/overlays/usage-row.ts +118 -0
- package/src/prompt/attachment-chips.ts +201 -0
- package/src/prompt/composer-attachments.ts +280 -0
- package/src/prompt/composer-cache.ts +304 -0
- package/src/prompt/composer.ts +934 -0
- package/src/prompt/custom-editor.ts +1392 -0
- package/src/prompt/data/emojis.json +1 -0
- package/src/prompt/editor-top-gap.ts +28 -0
- package/src/prompt/emoji-autocomplete.ts +285 -0
- package/src/prompt/github-ref-autocomplete.ts +75 -0
- package/src/prompt/gradient-highlight.ts +101 -0
- package/src/prompt/image-format.ts +28 -0
- package/src/prompt/image-references.ts +102 -0
- package/src/prompt/interactive-context-helpers.ts +126 -0
- package/src/prompt/internal-url-autocomplete.ts +155 -0
- package/src/prompt/macos-spelling.ts +456 -0
- package/src/prompt/magic-keyword-boundary.ts +23 -0
- package/src/prompt/magic-keywords.ts +42 -0
- package/src/prompt/markdown-prose.ts +245 -0
- package/src/prompt/model-mention-autocomplete.ts +94 -0
- package/src/prompt/model-mention-syntax.ts +41 -0
- package/src/prompt/orchestrate.ts +26 -0
- package/src/prompt/prompt-action-autocomplete.ts +337 -0
- package/src/prompt/queue-input.ts +132 -0
- package/src/prompt/skill-tokens.ts +36 -0
- package/src/prompt/tips.txt +27 -0
- package/src/prompt/tools-markdown.ts +29 -0
- package/src/prompt/ultrathink.ts +26 -0
- package/src/prompt/usage-amounts.ts +99 -0
- package/src/prompt/video.ts +47 -0
- package/src/prompt/welcome.ts +605 -0
- package/src/prompt/workflow.ts +26 -0
- package/src/render/code-cell.ts +244 -0
- package/src/render/file-list.ts +58 -0
- package/src/render/hyperlink.ts +192 -0
- package/src/render/index.ts +17 -0
- package/src/render/output-block.ts +267 -0
- package/src/render/output-pane.ts +299 -0
- package/src/render/render-utils.ts +1182 -0
- package/src/render/sixel.ts +69 -0
- package/src/render/status-line.ts +55 -0
- package/src/render/tool-card.ts +272 -0
- package/src/render/tree-list.ts +188 -0
- package/src/render/types.ts +19 -0
- package/src/render/utils.ts +109 -0
- package/src/render/width-aware-text.ts +60 -0
- package/src/setup/lazy.ts +17 -0
- package/src/setup/scenes/composer.ts +127 -0
- package/src/setup/scenes/glyph.ts +120 -0
- package/src/setup/scenes/model.ts +138 -0
- package/src/setup/scenes/outro.ts +24 -0
- package/src/setup/scenes/providers.ts +107 -0
- package/src/setup/scenes/sign-in.ts +373 -0
- package/src/setup/scenes/splash.ts +192 -0
- package/src/setup/scenes/theme.ts +343 -0
- package/src/setup/scenes/types.ts +111 -0
- package/src/setup/scenes/web-search.ts +165 -0
- package/src/setup/setup-version.ts +11 -0
- package/src/setup/startup-splash.ts +107 -0
- package/src/setup/wizard-overlay.ts +319 -0
- package/src/setup/wizard.ts +101 -0
- package/src/status-line/component.ts +3003 -0
- package/src/status-line/context-usage.ts +688 -0
- package/src/status-line/footer.ts +323 -0
- package/src/status-line/git-utils.ts +42 -0
- package/src/status-line/host.ts +97 -0
- package/src/status-line/index.ts +6 -0
- package/src/status-line/loop.ts +28 -0
- package/src/status-line/metrics.ts +94 -0
- package/src/status-line/presets.ts +107 -0
- package/src/status-line/schema.ts +57 -0
- package/src/status-line/segments.ts +934 -0
- package/src/status-line/separators.ts +55 -0
- package/src/status-line/types.ts +227 -0
- package/src/stdin-buffer.ts +4 -2
- package/src/theme/color.ts +95 -0
- package/src/theme/dark.json +95 -0
- package/src/theme/defaults/alabaster.json +93 -0
- package/src/theme/defaults/amethyst.json +96 -0
- package/src/theme/defaults/anthracite.json +93 -0
- package/src/theme/defaults/basalt.json +91 -0
- package/src/theme/defaults/birch.json +95 -0
- package/src/theme/defaults/dark-abyss.json +91 -0
- package/src/theme/defaults/dark-arctic.json +104 -0
- package/src/theme/defaults/dark-aurora.json +95 -0
- package/src/theme/defaults/dark-catppuccin.json +107 -0
- package/src/theme/defaults/dark-cavern.json +91 -0
- package/src/theme/defaults/dark-celestial.json +106 -0
- package/src/theme/defaults/dark-copper.json +95 -0
- package/src/theme/defaults/dark-cosmos.json +90 -0
- package/src/theme/defaults/dark-cyberpunk.json +102 -0
- package/src/theme/defaults/dark-dracula.json +98 -0
- package/src/theme/defaults/dark-eclipse.json +91 -0
- package/src/theme/defaults/dark-ember.json +95 -0
- package/src/theme/defaults/dark-equinox.json +90 -0
- package/src/theme/defaults/dark-forest.json +96 -0
- package/src/theme/defaults/dark-github.json +105 -0
- package/src/theme/defaults/dark-gruvbox.json +112 -0
- package/src/theme/defaults/dark-lavender.json +95 -0
- package/src/theme/defaults/dark-lunar.json +89 -0
- package/src/theme/defaults/dark-midnight.json +95 -0
- package/src/theme/defaults/dark-monochrome.json +94 -0
- package/src/theme/defaults/dark-monokai.json +98 -0
- package/src/theme/defaults/dark-nebula.json +90 -0
- package/src/theme/defaults/dark-nord.json +98 -0
- package/src/theme/defaults/dark-ocean.json +101 -0
- package/src/theme/defaults/dark-one.json +100 -0
- package/src/theme/defaults/dark-poimandres.json +115 -0
- package/src/theme/defaults/dark-rainforest.json +91 -0
- package/src/theme/defaults/dark-reef.json +91 -0
- package/src/theme/defaults/dark-retro.json +92 -0
- package/src/theme/defaults/dark-rose-pine.json +96 -0
- package/src/theme/defaults/dark-sakura.json +95 -0
- package/src/theme/defaults/dark-slate.json +95 -0
- package/src/theme/defaults/dark-solarized.json +97 -0
- package/src/theme/defaults/dark-solstice.json +90 -0
- package/src/theme/defaults/dark-starfall.json +91 -0
- package/src/theme/defaults/dark-sunset.json +99 -0
- package/src/theme/defaults/dark-swamp.json +90 -0
- package/src/theme/defaults/dark-synthwave.json +103 -0
- package/src/theme/defaults/dark-taiga.json +91 -0
- package/src/theme/defaults/dark-terminal.json +95 -0
- package/src/theme/defaults/dark-tokyo-night.json +101 -0
- package/src/theme/defaults/dark-tundra.json +91 -0
- package/src/theme/defaults/dark-twilight.json +91 -0
- package/src/theme/defaults/dark-volcanic.json +91 -0
- package/src/theme/defaults/graphite.json +92 -0
- package/src/theme/defaults/index.ts +201 -0
- package/src/theme/defaults/light-arctic.json +107 -0
- package/src/theme/defaults/light-aurora-day.json +91 -0
- package/src/theme/defaults/light-canyon.json +91 -0
- package/src/theme/defaults/light-catppuccin.json +106 -0
- package/src/theme/defaults/light-cirrus.json +90 -0
- package/src/theme/defaults/light-coral.json +95 -0
- package/src/theme/defaults/light-cyberpunk.json +96 -0
- package/src/theme/defaults/light-dawn.json +90 -0
- package/src/theme/defaults/light-dunes.json +91 -0
- package/src/theme/defaults/light-eucalyptus.json +95 -0
- package/src/theme/defaults/light-forest.json +100 -0
- package/src/theme/defaults/light-frost.json +95 -0
- package/src/theme/defaults/light-github.json +115 -0
- package/src/theme/defaults/light-glacier.json +91 -0
- package/src/theme/defaults/light-gruvbox.json +108 -0
- package/src/theme/defaults/light-haze.json +90 -0
- package/src/theme/defaults/light-honeycomb.json +95 -0
- package/src/theme/defaults/light-lagoon.json +91 -0
- package/src/theme/defaults/light-lavender.json +95 -0
- package/src/theme/defaults/light-meadow.json +91 -0
- package/src/theme/defaults/light-mint.json +95 -0
- package/src/theme/defaults/light-monochrome.json +101 -0
- package/src/theme/defaults/light-ocean.json +99 -0
- package/src/theme/defaults/light-one.json +99 -0
- package/src/theme/defaults/light-opal.json +91 -0
- package/src/theme/defaults/light-orchard.json +91 -0
- package/src/theme/defaults/light-paper.json +95 -0
- package/src/theme/defaults/light-poimandres.json +115 -0
- package/src/theme/defaults/light-prism.json +90 -0
- package/src/theme/defaults/light-retro.json +98 -0
- package/src/theme/defaults/light-sand.json +95 -0
- package/src/theme/defaults/light-savanna.json +91 -0
- package/src/theme/defaults/light-solarized.json +102 -0
- package/src/theme/defaults/light-soleil.json +90 -0
- package/src/theme/defaults/light-sunset.json +99 -0
- package/src/theme/defaults/light-synthwave.json +98 -0
- package/src/theme/defaults/light-tokyo-night.json +111 -0
- package/src/theme/defaults/light-wetland.json +91 -0
- package/src/theme/defaults/light-zenith.json +89 -0
- package/src/theme/defaults/limestone.json +94 -0
- package/src/theme/defaults/mahogany.json +97 -0
- package/src/theme/defaults/marble.json +93 -0
- package/src/theme/defaults/obsidian.json +91 -0
- package/src/theme/defaults/onyx.json +91 -0
- package/src/theme/defaults/pearl.json +93 -0
- package/src/theme/defaults/porcelain.json +91 -0
- package/src/theme/defaults/quartz.json +96 -0
- package/src/theme/defaults/sandstone.json +95 -0
- package/src/theme/defaults/titanium.json +90 -0
- package/src/theme/index.ts +5 -0
- package/src/theme/light.json +93 -0
- package/src/theme/loader.ts +200 -0
- package/src/theme/mermaid-cache.ts +92 -0
- package/src/theme/schema-validation.ts +119 -0
- package/src/theme/schema.ts +168 -0
- package/src/theme/session-color.ts +253 -0
- package/src/theme/shimmer.ts +307 -0
- package/src/theme/symbols.ts +1433 -0
- package/src/theme/theme-class.ts +787 -0
- package/src/theme/theme-schema.json +463 -0
- package/src/theme/theme.ts +810 -0
- package/src/theme/tui-adapters.ts +339 -0
- package/src/thinking.ts +380 -0
- package/src/tools/agent-tree.ts +128 -0
- package/src/tools/ask.ts +482 -0
- package/src/tools/ast-edit.ts +210 -0
- package/src/tools/ast-grep.ts +171 -0
- package/src/tools/autoresearch.ts +287 -0
- package/src/tools/bash-interactive.ts +295 -0
- package/src/tools/bash.ts +468 -0
- package/src/tools/conflict-detect.ts +77 -0
- package/src/tools/debug.ts +167 -0
- package/src/tools/default-renderer.ts +172 -0
- package/src/tools/edit.ts +1258 -0
- package/src/tools/eval-format/code-mode-declarations.ts +61 -0
- package/src/tools/eval-format/index.ts +16 -0
- package/src/tools/eval-format/javascript.ts +952 -0
- package/src/tools/eval-format/python.ts +544 -0
- package/src/tools/eval.ts +835 -0
- package/src/tools/fetch.ts +226 -0
- package/src/tools/gh-format.ts +18 -0
- package/src/tools/github.ts +686 -0
- package/src/tools/glob.ts +213 -0
- package/src/tools/goal.ts +153 -0
- package/src/tools/grep.ts +385 -0
- package/src/tools/grouped-file-output.ts +211 -0
- package/src/tools/hashline-format.ts +59 -0
- package/src/tools/hub.ts +1488 -0
- package/src/tools/index.ts +71 -0
- package/src/tools/json-tree.ts +388 -0
- package/src/tools/line-ranges.ts +98 -0
- package/src/tools/list-limit.ts +43 -0
- package/src/tools/lsp.ts +702 -0
- package/src/tools/match-line-format.ts +20 -0
- package/src/tools/mcp.ts +309 -0
- package/src/tools/memory.ts +220 -0
- package/src/tools/output-meta.ts +367 -0
- package/src/tools/read.ts +628 -0
- package/src/tools/renderer.ts +107 -0
- package/src/tools/report-tool-issue.ts +13 -0
- package/src/tools/resolve.ts +139 -0
- package/src/tools/streaming-output.ts +1576 -0
- package/src/tools/subprocess.ts +39 -0
- package/src/tools/task-repair-args.ts +118 -0
- package/src/tools/task-yield-assembly.ts +147 -0
- package/src/tools/task.ts +2110 -0
- package/src/tools/terminal-output.ts +153 -0
- package/src/tools/think.ts +28 -0
- package/src/tools/todo.ts +580 -0
- package/src/tools/tool-errors.ts +15 -0
- package/src/tools/vibe.ts +420 -0
- package/src/tools/web-search.ts +409 -0
- package/src/tools/write.ts +511 -0
- package/src/tools/xd-url.ts +28 -0
- package/src/tools/xdev.ts +201 -0
- package/src/tui.ts +57 -4
- package/src/utils.ts +8 -0
|
@@ -0,0 +1,449 @@
|
|
|
1
|
+
import type { Model, ProviderResponseMetadata, RawSseEvent } from "@oh-my-pi/pi-ai";
|
|
2
|
+
import { materializeString } from "@oh-my-pi/pi-utils";
|
|
3
|
+
|
|
4
|
+
const MAX_RAW_SSE_EVENTS = 1_000;
|
|
5
|
+
const MAX_RAW_SSE_CHARS = 512_000;
|
|
6
|
+
const MAX_RAW_SSE_EVENT_CHARS = 64_000;
|
|
7
|
+
// Reserve room for the `: omp-debug-truncated` / `: omp-debug-elided` marker
|
|
8
|
+
// lines so a trimmed event stays within MAX_RAW_SSE_EVENT_CHARS overall.
|
|
9
|
+
const TRIM_MARKER_RESERVE = 200;
|
|
10
|
+
// Caps applied to individual tool entries when compacting a `tools` array
|
|
11
|
+
// inside an oversized `data:` payload.
|
|
12
|
+
const MAX_TOOL_SCHEMA_CHARS = 200;
|
|
13
|
+
const MAX_TOOL_DESCRIPTION_CHARS = 200;
|
|
14
|
+
|
|
15
|
+
/** A captured provider response or raw server-sent event. */
|
|
16
|
+
export type RawSseDebugRecord =
|
|
17
|
+
| {
|
|
18
|
+
kind: "response";
|
|
19
|
+
sequence: number;
|
|
20
|
+
timestamp: number;
|
|
21
|
+
provider?: string;
|
|
22
|
+
model?: string;
|
|
23
|
+
api?: string;
|
|
24
|
+
status: number;
|
|
25
|
+
requestId?: string | null;
|
|
26
|
+
transport?: string;
|
|
27
|
+
}
|
|
28
|
+
| {
|
|
29
|
+
kind: "event";
|
|
30
|
+
sequence: number;
|
|
31
|
+
timestamp: number;
|
|
32
|
+
provider?: string;
|
|
33
|
+
model?: string;
|
|
34
|
+
api?: string;
|
|
35
|
+
event: string | null;
|
|
36
|
+
raw: string[];
|
|
37
|
+
truncated: boolean;
|
|
38
|
+
originalChars: number;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
/** Retained events and eviction counters at a point in time. */
|
|
42
|
+
export interface RawSseDebugSnapshot {
|
|
43
|
+
records: readonly RawSseDebugRecord[];
|
|
44
|
+
droppedRecords: number;
|
|
45
|
+
droppedChars: number;
|
|
46
|
+
totalEvents: number;
|
|
47
|
+
lastUpdatedAt?: number;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// Per-record char counts are stored in a parallel array (`#recordChars`) on
|
|
51
|
+
// the buffer rather than stamped onto each record via a symbol property.
|
|
52
|
+
// Stamping triggered hidden-class transitions in V8/JSC — the previous
|
|
53
|
+
// revision saw `trimRawLines` regress 4× (0.5s → 2.0s in a 50s profile)
|
|
54
|
+
// because every event-record allocation went through the slow dictionary
|
|
55
|
+
// path. The parallel array keeps records as plain monomorphic objects.
|
|
56
|
+
type TrimResult = { raw: string[]; truncated: boolean; originalChars: number; chars: number };
|
|
57
|
+
|
|
58
|
+
// `chars` uses the historical formula `reduce(line.length + 1, init = 1)` so
|
|
59
|
+
// the accounting matches the previous `countRecordChars` byte-for-byte (the
|
|
60
|
+
// trailing +1 covers the record-level newline that `rawRecordText` appends in
|
|
61
|
+
// `toRawText`).
|
|
62
|
+
function countChars(lines: readonly string[]): number {
|
|
63
|
+
let chars = 0;
|
|
64
|
+
for (let i = 0; i < lines.length; i++) chars += lines[i].length + 1;
|
|
65
|
+
return chars;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function elideText(text: string, max: number): string {
|
|
69
|
+
if (text.length <= max) return text;
|
|
70
|
+
return `${text.slice(0, max)}… (+${text.length - max} chars)`;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// Shrinks one tool definition in place: schemas (`parameters` for OpenAI
|
|
74
|
+
// shapes, `input_schema` for Anthropic) become elided JSON strings and long
|
|
75
|
+
// descriptions are cut, while `name`/`type` survive untouched. Chat-completions
|
|
76
|
+
// nests the payload under `function`.
|
|
77
|
+
function compactToolEntry(tool: unknown): boolean {
|
|
78
|
+
if (typeof tool !== "object" || tool === null) return false;
|
|
79
|
+
const obj = tool as Record<string, unknown>;
|
|
80
|
+
let changed = false;
|
|
81
|
+
if (typeof obj.function === "object" && obj.function !== null) {
|
|
82
|
+
changed = compactToolEntry(obj.function);
|
|
83
|
+
}
|
|
84
|
+
for (const key of ["parameters", "input_schema"]) {
|
|
85
|
+
const schema = obj[key];
|
|
86
|
+
if (schema === undefined || schema === null) continue;
|
|
87
|
+
const text = typeof schema === "string" ? schema : JSON.stringify(schema);
|
|
88
|
+
if (text.length <= MAX_TOOL_SCHEMA_CHARS) continue;
|
|
89
|
+
obj[key] = elideText(text, MAX_TOOL_SCHEMA_CHARS);
|
|
90
|
+
changed = true;
|
|
91
|
+
}
|
|
92
|
+
if (typeof obj.description === "string" && obj.description.length > MAX_TOOL_DESCRIPTION_CHARS) {
|
|
93
|
+
obj.description = elideText(obj.description, MAX_TOOL_DESCRIPTION_CHARS);
|
|
94
|
+
changed = true;
|
|
95
|
+
}
|
|
96
|
+
return changed;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// Walks a parsed SSE payload and compacts every `tools` array it finds
|
|
100
|
+
// (e.g. `response.tools` echoed back by the Responses API). Mutates `node`.
|
|
101
|
+
function compactToolsDeep(node: unknown): boolean {
|
|
102
|
+
if (Array.isArray(node)) {
|
|
103
|
+
let changed = false;
|
|
104
|
+
for (const item of node) changed = compactToolsDeep(item) || changed;
|
|
105
|
+
return changed;
|
|
106
|
+
}
|
|
107
|
+
if (typeof node !== "object" || node === null) return false;
|
|
108
|
+
let changed = false;
|
|
109
|
+
const obj = node as Record<string, unknown>;
|
|
110
|
+
for (const key in obj) {
|
|
111
|
+
const value = obj[key];
|
|
112
|
+
if (key === "tools" && Array.isArray(value)) {
|
|
113
|
+
for (const tool of value) changed = compactToolEntry(tool) || changed;
|
|
114
|
+
} else {
|
|
115
|
+
changed = compactToolsDeep(value) || changed;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return changed;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// Rewrites oversized `data:` lines with tool schemas compacted. Returns null
|
|
122
|
+
// when nothing changed (unparseable payloads or no tools to shrink). Only
|
|
123
|
+
// invoked on events that already blew the budget, so the JSON round-trip is
|
|
124
|
+
// off the streaming hot path.
|
|
125
|
+
function compactToolLines(raw: readonly string[]): string[] | null {
|
|
126
|
+
let changed = false;
|
|
127
|
+
const out = raw.map(line => {
|
|
128
|
+
if (!line.startsWith("data:") || line.length <= MAX_TOOL_SCHEMA_CHARS) return line;
|
|
129
|
+
const start = line.charCodeAt(5) === 32 ? 6 : 5;
|
|
130
|
+
try {
|
|
131
|
+
const parsed = JSON.parse(line.slice(start));
|
|
132
|
+
if (!compactToolsDeep(parsed)) return line;
|
|
133
|
+
changed = true;
|
|
134
|
+
return `data: ${JSON.stringify(parsed)}`;
|
|
135
|
+
} catch {
|
|
136
|
+
return line;
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
return changed ? out : null;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
// Keeps the first and last portions of an over-budget event and drops the
|
|
143
|
+
// middle, so leading fields (id/model/status) AND trailing fields
|
|
144
|
+
// (usage/finish_reason) both stay visible. A `: omp-debug-elided` comment
|
|
145
|
+
// marks the cut; split lines carry `…` at the cut edge.
|
|
146
|
+
function headTailTrim(lines: string[], budget: number, elidedTotal: number): string[] {
|
|
147
|
+
const headBudget = budget >> 1;
|
|
148
|
+
const tailBudget = budget - headBudget;
|
|
149
|
+
|
|
150
|
+
let i = 0;
|
|
151
|
+
let headRemaining = headBudget;
|
|
152
|
+
const out: string[] = [];
|
|
153
|
+
while (i < lines.length && lines[i].length + 1 <= headRemaining) {
|
|
154
|
+
headRemaining -= lines[i].length + 1;
|
|
155
|
+
out.push(lines[i]);
|
|
156
|
+
i++;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
let j = lines.length - 1;
|
|
160
|
+
let tailRemaining = tailBudget;
|
|
161
|
+
const tail: string[] = [];
|
|
162
|
+
while (j >= i && lines[j].length + 1 <= tailRemaining) {
|
|
163
|
+
tailRemaining -= lines[j].length + 1;
|
|
164
|
+
tail.push(lines[j]);
|
|
165
|
+
j--;
|
|
166
|
+
}
|
|
167
|
+
tail.reverse();
|
|
168
|
+
|
|
169
|
+
let elided = elidedTotal - countChars(out) - countChars(tail);
|
|
170
|
+
if (i <= j) {
|
|
171
|
+
// lines[i..j] straddle the cut: keep a head slice of the first and a
|
|
172
|
+
// tail slice of the last (the same line when i === j).
|
|
173
|
+
const headSlice = lines[i].slice(0, Math.max(0, headRemaining - 2));
|
|
174
|
+
const tailStart =
|
|
175
|
+
i === j
|
|
176
|
+
? Math.max(headSlice.length, lines[j].length - tailRemaining + 2)
|
|
177
|
+
: Math.max(0, lines[j].length - tailRemaining + 2);
|
|
178
|
+
const tailSlice = lines[j].slice(tailStart);
|
|
179
|
+
elided -= headSlice.length + tailSlice.length;
|
|
180
|
+
if (headSlice.length > 0) out.push(`${headSlice}…`);
|
|
181
|
+
out.push(`: omp-debug-elided chars=${Math.max(0, elided)}`);
|
|
182
|
+
if (tailSlice.length > 0) out.push(`…${tailSlice}`);
|
|
183
|
+
} else if (elided > 0) {
|
|
184
|
+
out.push(`: omp-debug-elided chars=${elided}`);
|
|
185
|
+
}
|
|
186
|
+
out.push(...tail);
|
|
187
|
+
return out;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
// Trim pipeline for one SSE event:
|
|
191
|
+
// 1. fits → return `raw` **by reference** (ownership contract at
|
|
192
|
+
// `RawSseDebugBuffer.recordEvent` below).
|
|
193
|
+
// 2. over budget → compact tool schemas inside `data:` JSON payloads;
|
|
194
|
+
// if that alone fits, the payload stays parseable JSON.
|
|
195
|
+
// 3. still over → head+tail trim (middle elided).
|
|
196
|
+
// Any trimmed result ends with the `: omp-debug-truncated` marker carrying
|
|
197
|
+
// the original size.
|
|
198
|
+
function trimRawLines(raw: string[]): TrimResult {
|
|
199
|
+
const originalChars = countChars(raw);
|
|
200
|
+
if (originalChars <= MAX_RAW_SSE_EVENT_CHARS) {
|
|
201
|
+
return { raw, truncated: false, originalChars, chars: originalChars + 1 };
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
const budget = MAX_RAW_SSE_EVENT_CHARS - TRIM_MARKER_RESERVE;
|
|
205
|
+
let lines = compactToolLines(raw) ?? raw;
|
|
206
|
+
const compactedChars = lines === raw ? originalChars : countChars(lines);
|
|
207
|
+
if (compactedChars > budget) {
|
|
208
|
+
lines = headTailTrim(lines, budget, compactedChars);
|
|
209
|
+
} else if (lines === raw) {
|
|
210
|
+
lines = raw.slice();
|
|
211
|
+
}
|
|
212
|
+
// Kept windows outlive the incoming frame; detach them from its backing storage.
|
|
213
|
+
lines = lines.map(materializeString);
|
|
214
|
+
lines.push(`: omp-debug-truncated originalChars=${originalChars}`);
|
|
215
|
+
return { raw: lines, truncated: true, originalChars, chars: countChars(lines) + 1 };
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
/** Format a captured event timestamp as an ISO instant. */
|
|
219
|
+
export function formatRawSseIsoTime(timestamp: number): string {
|
|
220
|
+
return new Date(timestamp).toISOString();
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
/** Encode response metadata as an SSE comment. */
|
|
224
|
+
export function formatRawSseResponseComment(record: Extract<RawSseDebugRecord, { kind: "response" }>): string {
|
|
225
|
+
const fields = [
|
|
226
|
+
"omp-response",
|
|
227
|
+
`ts=${formatRawSseIsoTime(record.timestamp)}`,
|
|
228
|
+
`status=${record.status}`,
|
|
229
|
+
record.provider ? `provider=${record.provider}` : undefined,
|
|
230
|
+
record.model ? `model=${record.model}` : undefined,
|
|
231
|
+
record.api ? `api=${record.api}` : undefined,
|
|
232
|
+
record.requestId ? `requestId=${record.requestId}` : undefined,
|
|
233
|
+
record.transport ? `transport=${record.transport}` : undefined,
|
|
234
|
+
].filter((field): field is string => field !== undefined);
|
|
235
|
+
return `: ${fields.join(" ")}`;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
/** Return wire-format lines for a captured record. */
|
|
239
|
+
export function rawSseRecordLines(record: RawSseDebugRecord): string[] {
|
|
240
|
+
if (record.kind === "response") return [formatRawSseResponseComment(record)];
|
|
241
|
+
return record.raw;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
function rawRecordText(record: RawSseDebugRecord): string {
|
|
245
|
+
return `${rawSseRecordLines(record).join("\n")}\n`;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
function metadataTransport(response: ProviderResponseMetadata): string | undefined {
|
|
249
|
+
const value = response.metadata?.lastTransport;
|
|
250
|
+
return typeof value === "string" ? value : undefined;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
/** Bounded, observable capture of raw provider responses and SSE frames. */
|
|
254
|
+
export class RawSseDebugBuffer {
|
|
255
|
+
#records: RawSseDebugRecord[] = [];
|
|
256
|
+
// Parallel to `#records`: `#recordChars[i]` is the precomputed char count
|
|
257
|
+
// for `#records[i]`. Kept in lockstep by `#append` (push both) and
|
|
258
|
+
// `#enforceLimits` (advance `#head` to evict, then `slice` both together
|
|
259
|
+
// when compacting). See the comment above the class for why this is a
|
|
260
|
+
// sidecar array instead of a per-record property.
|
|
261
|
+
#recordChars: number[] = [];
|
|
262
|
+
// Head-index ring over `#records`/`#recordChars`: index of the oldest live
|
|
263
|
+
// record. Eviction advances `#head` (amortized O(1)) rather than an O(n)
|
|
264
|
+
// front `shift()`; the dead `[0, #head)` prefix is reclaimed lazily by
|
|
265
|
+
// `#enforceLimits`. Live count is `#records.length - #head`; the live
|
|
266
|
+
// records are `#records[#head ..]`.
|
|
267
|
+
#head = 0;
|
|
268
|
+
#totalChars = 0;
|
|
269
|
+
#droppedRecords = 0;
|
|
270
|
+
#droppedChars = 0;
|
|
271
|
+
#totalEvents = 0;
|
|
272
|
+
#lastUpdatedAt: number | undefined;
|
|
273
|
+
#nextSequence = 1;
|
|
274
|
+
#listeners = new Set<() => void>();
|
|
275
|
+
#emitScheduled = false;
|
|
276
|
+
|
|
277
|
+
subscribe(listener: () => void): () => void {
|
|
278
|
+
this.#listeners.add(listener);
|
|
279
|
+
return () => this.#listeners.delete(listener);
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
recordResponse(response: ProviderResponseMetadata, model?: Model): void {
|
|
283
|
+
const record: RawSseDebugRecord = {
|
|
284
|
+
kind: "response",
|
|
285
|
+
sequence: this.#nextSequence++,
|
|
286
|
+
timestamp: Date.now(),
|
|
287
|
+
provider: model?.provider,
|
|
288
|
+
model: model?.id,
|
|
289
|
+
api: model?.api,
|
|
290
|
+
status: response.status,
|
|
291
|
+
requestId: response.requestId,
|
|
292
|
+
transport: metadataTransport(response),
|
|
293
|
+
};
|
|
294
|
+
this.#append(record, formatRawSseResponseComment(record).length + 1);
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
// Ownership contract for `event.raw`:
|
|
298
|
+
// The caller (`notifyRawSseEvent` in `packages/ai/src/utils/sse-debug.ts`)
|
|
299
|
+
// hands us a freshly-allocated `string[]` per event and never retains,
|
|
300
|
+
// mutates, or re-dispatches it.
|
|
301
|
+
// That lets `trimRawLines` keep the array by reference instead of
|
|
302
|
+
// cloning on every chunk — a measurable savings on the streaming hot
|
|
303
|
+
// path. If a future observer-chain mutates the array, restore the
|
|
304
|
+
// `raw.slice()` defensive copy inside `trimRawLines`.
|
|
305
|
+
recordEvent(event: RawSseEvent, model?: Model): void {
|
|
306
|
+
const trimmed = trimRawLines(event.raw);
|
|
307
|
+
this.#totalEvents += 1;
|
|
308
|
+
this.#append(
|
|
309
|
+
{
|
|
310
|
+
kind: "event",
|
|
311
|
+
sequence: this.#nextSequence++,
|
|
312
|
+
timestamp: Date.now(),
|
|
313
|
+
provider: model?.provider,
|
|
314
|
+
model: model?.id,
|
|
315
|
+
api: model?.api,
|
|
316
|
+
event: event.event,
|
|
317
|
+
raw: trimmed.raw,
|
|
318
|
+
truncated: trimmed.truncated,
|
|
319
|
+
originalChars: trimmed.originalChars,
|
|
320
|
+
},
|
|
321
|
+
trimmed.chars,
|
|
322
|
+
);
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
snapshot(): RawSseDebugSnapshot {
|
|
326
|
+
return {
|
|
327
|
+
records: this.#records.slice(this.#head),
|
|
328
|
+
droppedRecords: this.#droppedRecords,
|
|
329
|
+
droppedChars: this.#droppedChars,
|
|
330
|
+
totalEvents: this.#totalEvents,
|
|
331
|
+
lastUpdatedAt: this.#lastUpdatedAt,
|
|
332
|
+
};
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
toRawText(): string {
|
|
336
|
+
// Reads the live window directly: `rawRecordText` only computes a string
|
|
337
|
+
// from each record, so no caller-visible mutation is possible. With a
|
|
338
|
+
// non-empty dead prefix we map a slice past `#head`; `#head === 0` (the
|
|
339
|
+
// common case) maps `#records` in place with no extra copy.
|
|
340
|
+
const live = this.#head === 0 ? this.#records : this.#records.slice(this.#head);
|
|
341
|
+
const body = live.map(rawRecordText).join("\n");
|
|
342
|
+
if (this.#droppedRecords === 0) return body;
|
|
343
|
+
const dropped = `: omp-debug-dropped records=${this.#droppedRecords} chars=${this.#droppedChars}\n\n`;
|
|
344
|
+
return body.length > 0 ? `${dropped}${body}` : dropped;
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
/**
|
|
348
|
+
* Drop every retained record and reset accounting. Called from
|
|
349
|
+
* {@link AgentSession} teardown so a disposed (e.g. parked subagent) session
|
|
350
|
+
* releases its bounded captured wire records. Notifies subscribers so a live
|
|
351
|
+
* debug viewer redraws empty.
|
|
352
|
+
*/
|
|
353
|
+
clear(): void {
|
|
354
|
+
this.#records = [];
|
|
355
|
+
this.#recordChars = [];
|
|
356
|
+
this.#head = 0;
|
|
357
|
+
this.#totalChars = 0;
|
|
358
|
+
this.#droppedRecords = 0;
|
|
359
|
+
this.#droppedChars = 0;
|
|
360
|
+
this.#totalEvents = 0;
|
|
361
|
+
this.#lastUpdatedAt = undefined;
|
|
362
|
+
this.#emit();
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
#append(record: RawSseDebugRecord, chars: number): void {
|
|
366
|
+
this.#records.push(record);
|
|
367
|
+
this.#recordChars.push(chars);
|
|
368
|
+
this.#totalChars += chars;
|
|
369
|
+
this.#lastUpdatedAt = record.timestamp;
|
|
370
|
+
this.#enforceLimits();
|
|
371
|
+
this.#emit();
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
#enforceLimits(): void {
|
|
375
|
+
while (this.#records.length - this.#head > MAX_RAW_SSE_EVENTS || this.#totalChars > MAX_RAW_SSE_CHARS) {
|
|
376
|
+
if (this.#records.length - this.#head === 0) break;
|
|
377
|
+
const chars = this.#recordChars[this.#head] ?? 0;
|
|
378
|
+
this.#head += 1;
|
|
379
|
+
this.#totalChars = Math.max(0, this.#totalChars - chars);
|
|
380
|
+
this.#droppedRecords += 1;
|
|
381
|
+
this.#droppedChars += chars;
|
|
382
|
+
}
|
|
383
|
+
// Reclaim the consumed `[0, #head)` prefix once it grows large: one O(n)
|
|
384
|
+
// memmove amortized over many O(1) evictions, bounding the backing arrays
|
|
385
|
+
// to ~2x the live window. `#head >= MAX_RAW_SSE_EVENTS` covers the
|
|
386
|
+
// full-record-count steady state; `#head > liveCount` covers a small live
|
|
387
|
+
// window held by a few large records under the char budget.
|
|
388
|
+
const liveCount = this.#records.length - this.#head;
|
|
389
|
+
if (this.#head >= MAX_RAW_SSE_EVENTS || this.#head > liveCount) {
|
|
390
|
+
this.#records = this.#records.slice(this.#head);
|
|
391
|
+
this.#recordChars = this.#recordChars.slice(this.#head);
|
|
392
|
+
this.#head = 0;
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
#emit(): void {
|
|
397
|
+
const count = this.#listeners.size;
|
|
398
|
+
if (count === 0) return;
|
|
399
|
+
// With a single listener (the common case — RawSse debug viewer is the
|
|
400
|
+
// only subscriber), keep eager emit so per-event semantics are
|
|
401
|
+
// preserved. With multiple listeners, coalesce bursts of events into
|
|
402
|
+
// one microtask-deferred fan-out to avoid N×M listener invocations
|
|
403
|
+
// during a streaming response.
|
|
404
|
+
if (count === 1) {
|
|
405
|
+
this.#fanOut();
|
|
406
|
+
return;
|
|
407
|
+
}
|
|
408
|
+
if (this.#emitScheduled) return;
|
|
409
|
+
this.#emitScheduled = true;
|
|
410
|
+
queueMicrotask(() => {
|
|
411
|
+
this.#emitScheduled = false;
|
|
412
|
+
this.#fanOut();
|
|
413
|
+
});
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
#fanOut(): void {
|
|
417
|
+
for (const listener of this.#listeners) {
|
|
418
|
+
try {
|
|
419
|
+
listener();
|
|
420
|
+
} catch {
|
|
421
|
+
// Debug viewers must not be able to break stream capture.
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
const globalFallbackBuffer = new RawSseDebugBuffer();
|
|
428
|
+
const kRawSseDebugBuffer = Symbol("debug.rawSseBuffer");
|
|
429
|
+
type OwnerWithBuffer = object & { rawSseDebugBuffer?: unknown; [kRawSseDebugBuffer]?: RawSseDebugBuffer };
|
|
430
|
+
|
|
431
|
+
/** Resolve an owner's capture buffer or the process-wide fallback. */
|
|
432
|
+
export function resolveRawSseDebugBuffer(owner?: object): RawSseDebugBuffer {
|
|
433
|
+
if (!owner) return globalFallbackBuffer;
|
|
434
|
+
|
|
435
|
+
const tagged = owner as OwnerWithBuffer;
|
|
436
|
+
const declared = tagged.rawSseDebugBuffer;
|
|
437
|
+
if (declared instanceof RawSseDebugBuffer) return declared;
|
|
438
|
+
|
|
439
|
+
const existing = tagged[kRawSseDebugBuffer];
|
|
440
|
+
if (existing) return existing;
|
|
441
|
+
|
|
442
|
+
const buffer = new RawSseDebugBuffer();
|
|
443
|
+
try {
|
|
444
|
+
tagged[kRawSseDebugBuffer] = buffer;
|
|
445
|
+
} catch {
|
|
446
|
+
// Non-extensible owner: caller gets a fresh buffer on each call.
|
|
447
|
+
}
|
|
448
|
+
return buffer;
|
|
449
|
+
}
|