@oh-my-pi/pi-tui 18.2.4 → 18.2.6
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,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fullscreen `/advisor configure` overlay: a mouse- and keyboard-driven editor
|
|
3
|
+
* for the `WATCHDOG.yml` advisor roster at project or user level.
|
|
4
|
+
*
|
|
5
|
+
* It paints the entire alternate screen from row 0 (so SGR mouse rows index
|
|
6
|
+
* directly into the rendered frame) using the shared {@link ./overlay-box} chrome.
|
|
7
|
+
* The list screen is a two-pane split (the `/extensions` idiom): a clickable
|
|
8
|
+
* advisor/action sidebar on the left, and a scrollable preview of the highlighted
|
|
9
|
+
* advisor's model / tools / instructions on the right, filling the free space.
|
|
10
|
+
*
|
|
11
|
+
* Each screen is backed by a proven primitive — {@link SelectList} (list / detail
|
|
12
|
+
* / tools / thinking), {@link Input} (name), {@link ModelSelectorComponent} (the
|
|
13
|
+
* same rich `/model` picker, in direct-select mode), and {@link HookEditorComponent}
|
|
14
|
+
* (multiline instructions; Ctrl+G opens `$EDITOR`). The overlay edits an in-memory
|
|
15
|
+
* {@link WatchdogConfigDoc} and only touches disk + the live advisors via the host
|
|
16
|
+
* `save` callback.
|
|
17
|
+
*/
|
|
18
|
+
import type { ThinkingLevel } from "@oh-my-pi/pi-agent-core";
|
|
19
|
+
import { type Model, type UsageLimit, type UsageReport } from "@oh-my-pi/pi-ai";
|
|
20
|
+
import { type Component, type TUI } from "../index.js";
|
|
21
|
+
import { type ModelBrowserSource } from "./model-browser.js";
|
|
22
|
+
/** One advisor declared in `WATCHDOG.yml`; its instructions specialize the shared baseline. */
|
|
23
|
+
export interface AdvisorConfig {
|
|
24
|
+
name: string;
|
|
25
|
+
/** Model selector with an optional `:level` thinking suffix, resolved like any other model override. */
|
|
26
|
+
model?: string;
|
|
27
|
+
/** Built-in tool names, including mutating tools; omitted uses read/grep/glob plus available recall, empty grants none. */
|
|
28
|
+
tools?: string[];
|
|
29
|
+
instructions?: string;
|
|
30
|
+
/** Defaults to true; false retains the advisor in the roster and status displays without building its runtime. */
|
|
31
|
+
enabled?: boolean;
|
|
32
|
+
/** Maximum non-blocker notes per advisor prompt update (default 4); blockers are exempt. */
|
|
33
|
+
maxNotesPerUpdate?: number;
|
|
34
|
+
}
|
|
35
|
+
/** Which level a `WATCHDOG.yml` lives at: the project root or the user agent dir. */
|
|
36
|
+
export type AdvisorConfigScope = "project" | "user";
|
|
37
|
+
/** Editable raw contents of one `WATCHDOG.yml`, without cross-level merging or `@import` expansion, for exact round trips. */
|
|
38
|
+
export interface WatchdogConfigDoc {
|
|
39
|
+
instructions?: string;
|
|
40
|
+
maxNotesPerUpdate?: number;
|
|
41
|
+
advisors: AdvisorConfig[];
|
|
42
|
+
/** Per-entry problems found while loading (dropped entries). Shown when the file becomes active in the editor. */
|
|
43
|
+
warnings?: string[];
|
|
44
|
+
}
|
|
45
|
+
export interface AdvisorConfigStat {
|
|
46
|
+
name: string;
|
|
47
|
+
sessionId?: string;
|
|
48
|
+
status: string;
|
|
49
|
+
model?: {
|
|
50
|
+
provider: string;
|
|
51
|
+
};
|
|
52
|
+
tokens: {
|
|
53
|
+
input: number;
|
|
54
|
+
output: number;
|
|
55
|
+
cacheRead: number;
|
|
56
|
+
};
|
|
57
|
+
cost: number;
|
|
58
|
+
contextWindow: number;
|
|
59
|
+
contextTokens: number;
|
|
60
|
+
}
|
|
61
|
+
/** Host callbacks: all disk + live-runtime effects flow through these. */
|
|
62
|
+
export interface AdvisorConfigCallbacks {
|
|
63
|
+
/** Load a scope's `WATCHDOG.yml` into an editable doc (empty when absent). */
|
|
64
|
+
loadDoc: (scope: AdvisorConfigScope) => Promise<WatchdogConfigDoc>;
|
|
65
|
+
/** Persist the doc to the scope's file and rebuild the live advisors. */
|
|
66
|
+
save: (scope: AdvisorConfigScope, doc: WatchdogConfigDoc) => Promise<void>;
|
|
67
|
+
/** Tear down the overlay and restore the editor. */
|
|
68
|
+
close: () => void;
|
|
69
|
+
requestRender: () => void;
|
|
70
|
+
/** Surface a transient status/warning line to the user. */
|
|
71
|
+
notify: (message: string) => void;
|
|
72
|
+
/**
|
|
73
|
+
* Surface a sticky warning (e.g. malformed entries in the file just made
|
|
74
|
+
* active by a scope switch). Falls back to `notify` when omitted.
|
|
75
|
+
*/
|
|
76
|
+
warn?: (message: string) => void;
|
|
77
|
+
/** Live advisor usage stats; lets the preview show tokens/cost per advisor. */
|
|
78
|
+
getAdvisorStats?: () => AdvisorConfigStat[];
|
|
79
|
+
/** Reports normalized by the host to collapse shared credential pools. */
|
|
80
|
+
getUsageReports?: () => Promise<UsageReport[] | null>;
|
|
81
|
+
/** Filter to the advisor's active credential; absent identity includes every limit. */
|
|
82
|
+
getQuotaLimitFilter?: (provider: string, sessionId: string | undefined) => ((report: UsageReport, limit: UsageLimit) => boolean) | undefined;
|
|
83
|
+
}
|
|
84
|
+
export interface AdvisorConfigDeps {
|
|
85
|
+
getAvailableModels: () => Model[];
|
|
86
|
+
browserSource: ModelBrowserSource;
|
|
87
|
+
defaultToolNames: ReadonlySet<string>;
|
|
88
|
+
externalEditor?: (text: string) => Promise<string | null>;
|
|
89
|
+
scopedModels: ReadonlyArray<{
|
|
90
|
+
model: Model;
|
|
91
|
+
thinkingLevel?: ThinkingLevel;
|
|
92
|
+
}>;
|
|
93
|
+
availableToolNames: string[];
|
|
94
|
+
/** Formatted advisor-role model shown on the seeded default row (e.g. "anthropic/claude-..."). */
|
|
95
|
+
defaultModelLabel?: string;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* One-line provider quota display. The host supplies normalized usage reports
|
|
99
|
+
* and an optional credential filter; the overlay owns only presentation.
|
|
100
|
+
*/
|
|
101
|
+
export declare function formatCompactQuota(provider: string, reports: UsageReport[], nowMs: number, includeLimit?: (report: UsageReport, limit: UsageLimit) => boolean): string | null;
|
|
102
|
+
/**
|
|
103
|
+
* Fullscreen advisor-configuration overlay. Implements {@link Component} directly
|
|
104
|
+
* (rather than extending Container) so it owns the whole frame and the mouse
|
|
105
|
+
* geometry needed to make every row clickable.
|
|
106
|
+
*/
|
|
107
|
+
export declare class AdvisorConfigOverlayComponent implements Component {
|
|
108
|
+
#private;
|
|
109
|
+
constructor(tui: TUI, deps: AdvisorConfigDeps, scope: AdvisorConfigScope, doc: WatchdogConfigDoc, callbacks: AdvisorConfigCallbacks);
|
|
110
|
+
render(width: number): readonly string[];
|
|
111
|
+
handleInput(data: string): void;
|
|
112
|
+
/** Forward enhanced-paste transports into a multiline instructions editor. */
|
|
113
|
+
pasteText(text: string): void;
|
|
114
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { AgentProgress } from "../tools/task.js";
|
|
2
|
+
export type AgentActivityKind = "response" | "tool" | "irc" | "lifecycle";
|
|
3
|
+
export type AgentActivityStatus = "pending" | "success" | "error" | "aborted";
|
|
4
|
+
export interface AgentActivityRow {
|
|
5
|
+
id: string;
|
|
6
|
+
agentId: string;
|
|
7
|
+
timestamp: number;
|
|
8
|
+
kind: AgentActivityKind;
|
|
9
|
+
title: string;
|
|
10
|
+
summary: string;
|
|
11
|
+
status?: AgentActivityStatus;
|
|
12
|
+
entryId?: string;
|
|
13
|
+
toolCallId?: string;
|
|
14
|
+
toolName?: string;
|
|
15
|
+
from?: string;
|
|
16
|
+
to?: string;
|
|
17
|
+
replyTo?: string;
|
|
18
|
+
source: "live" | "transcript" | "irc";
|
|
19
|
+
}
|
|
20
|
+
export interface AgentActivityQuery {
|
|
21
|
+
agentIds?: ReadonlySet<string>;
|
|
22
|
+
kinds?: ReadonlySet<AgentActivityKind>;
|
|
23
|
+
search?: string;
|
|
24
|
+
before?: {
|
|
25
|
+
timestamp: number;
|
|
26
|
+
id: string;
|
|
27
|
+
};
|
|
28
|
+
limit?: number;
|
|
29
|
+
}
|
|
30
|
+
/** Activity index surface rendered by the agent hub. */
|
|
31
|
+
export interface AgentActivitySource {
|
|
32
|
+
setLive(agentId: string, rows: AgentActivityRow[]): void;
|
|
33
|
+
sync(agentId: string, sessionFile: string | null): Promise<void>;
|
|
34
|
+
query(query: AgentActivityQuery): AgentActivityRow[];
|
|
35
|
+
recent(agentId: string, limit: number): AgentActivityRow[];
|
|
36
|
+
}
|
|
37
|
+
/** Collapse an activity label to one readable terminal line. */
|
|
38
|
+
export declare function activityOneLine(value: string): string;
|
|
39
|
+
/** Stable timestamp ordering for merged activity rows. */
|
|
40
|
+
export declare function compareActivityRows(a: AgentActivityRow, b: AgentActivityRow): number;
|
|
41
|
+
export declare function activityRowsFromProgress(progress: AgentProgress, lastUpdate?: number): AgentActivityRow[];
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { AgentMetricsSummary, AgentRecordLike, AgentStatus } from "./agent-hub-types.js";
|
|
2
|
+
import type { ObservableSession } from "./session-observer-registry.js";
|
|
3
|
+
export type AgentMetrics = AgentMetricsSummary;
|
|
4
|
+
export interface AggregateMetrics extends AgentMetrics {
|
|
5
|
+
reportedAgents: number;
|
|
6
|
+
/** Rows whose duration is an observer-measured active runtime. */
|
|
7
|
+
activeDurationAgents: number;
|
|
8
|
+
}
|
|
9
|
+
interface AgentTreeProjection<TRecord extends AgentRecordLike> {
|
|
10
|
+
rows: TRecord[];
|
|
11
|
+
depthById: Map<string, number>;
|
|
12
|
+
parentById: Map<string, string>;
|
|
13
|
+
lastSiblingById: Map<string, boolean>;
|
|
14
|
+
}
|
|
15
|
+
export declare const STATUS_ORDER: Record<AgentStatus, number>;
|
|
16
|
+
/** Exact observer usage for one roster entry. */
|
|
17
|
+
export declare function progressMetrics(observed: ObservableSession | undefined): AgentMetrics | undefined;
|
|
18
|
+
export declare function aggregateMetrics<TRecord extends AgentRecordLike>(args: {
|
|
19
|
+
rows: readonly TRecord[];
|
|
20
|
+
observedById: ReadonlyMap<string, ObservableSession>;
|
|
21
|
+
metricsFor: (ref: TRecord, observed: ObservableSession | undefined) => AgentMetrics | undefined;
|
|
22
|
+
fallbackStatsSession: (ref: TRecord, observed: ObservableSession | undefined) => NonNullable<AgentRecordLike["session"]> | undefined;
|
|
23
|
+
sessionMetrics: WeakMap<object, {
|
|
24
|
+
metrics: AgentMetrics | undefined;
|
|
25
|
+
}>;
|
|
26
|
+
refreshFallback: boolean;
|
|
27
|
+
}): {
|
|
28
|
+
metrics: AggregateMetrics;
|
|
29
|
+
hasFallbackLiveSessions: boolean;
|
|
30
|
+
};
|
|
31
|
+
/** Parent-before-child projection preserving the roster's stable sibling order. */
|
|
32
|
+
export declare function projectAgentTree<TRecord extends AgentRecordLike>(refs: readonly TRecord[]): AgentTreeProjection<TRecord>;
|
|
33
|
+
export {};
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { ThemeColor } from "../theme/theme.js";
|
|
2
|
+
import { type AgentRecordLike } from "./agent-hub-types.js";
|
|
3
|
+
import type { ObservableSession } from "./session-observer-registry.js";
|
|
4
|
+
import type { AgentMetrics } from "./agent-hub-projection.js";
|
|
5
|
+
export interface RosterRender {
|
|
6
|
+
lines: string[];
|
|
7
|
+
hitRows: Array<number | undefined>;
|
|
8
|
+
}
|
|
9
|
+
/** Compute the max content width for the current terminal, accounting for chrome. */
|
|
10
|
+
export declare function contentWidth(): number;
|
|
11
|
+
/** Sanitize a line for TUI display and truncate it to the viewport width. */
|
|
12
|
+
export declare function sanitizeLine(text: string, maxWidth?: number): string;
|
|
13
|
+
export declare function clampHubLine(line: string, width: number): string;
|
|
14
|
+
/** Status glyph, colored per theme status conventions. The title-line counts spell out the words. */
|
|
15
|
+
export declare function statusGlyph(status: AgentRecordLike["status"]): string;
|
|
16
|
+
export declare function statusText(status: AgentRecordLike["status"], text: string): string;
|
|
17
|
+
/** Host-resolved model-role label and color. */
|
|
18
|
+
export interface AgentRoleDisplay {
|
|
19
|
+
color?: ThemeColor;
|
|
20
|
+
tag?: string;
|
|
21
|
+
name?: string;
|
|
22
|
+
}
|
|
23
|
+
/** Textual model-role tag; color reinforces (but never replaces) the label. */
|
|
24
|
+
export declare function formatRoleBadge(role: string, info: AgentRoleDisplay): string;
|
|
25
|
+
/**
|
|
26
|
+
* Resolved model + reasoning level for a hub row. Exact executor progress is
|
|
27
|
+
* authoritative (and survives completion); direct live sessions are the
|
|
28
|
+
* fallback for agents without an observer snapshot — the main session has no
|
|
29
|
+
* snapshot at all, so its row is read straight off the live session.
|
|
30
|
+
*
|
|
31
|
+
* Every source reports the model that produced the row's work, never the one
|
|
32
|
+
* the session merely points at: an armed fallback that has not served yet stays
|
|
33
|
+
* attributed to whichever model last actually spoke.
|
|
34
|
+
*/
|
|
35
|
+
export declare function modelBadge(ref: AgentRecordLike, observed: ObservableSession | undefined): string | undefined;
|
|
36
|
+
export declare function formatMetricDuration(metrics: AgentMetrics): string | undefined;
|
|
37
|
+
export declare function formatCost(cost: number): string;
|
|
38
|
+
export declare function formatMetrics(metrics: AgentMetrics): string;
|
|
39
|
+
/** Row-grid variant of {@link formatMetrics}: fixed-width cells so every agent's metadata
|
|
40
|
+
* line shares one column layout instead of flowing after wrapped text. Cost is left-aligned
|
|
41
|
+
* so the line starts flush; the numeric cells are right-aligned so units line up. */
|
|
42
|
+
export declare function formatMetricColumns(metrics: AgentMetrics, age: string): string;
|
|
43
|
+
export declare function contextGauge(tokens: number, window: number): string;
|
|
44
|
+
/** Fit a child-id preview without joining an arbitrarily large child set. */
|
|
45
|
+
export declare function formatChildIds(children: readonly AgentRecordLike[], width: number): string;
|
|
46
|
+
/** Bash `tree`-style branch for an agent's identity row. */
|
|
47
|
+
export declare function treeBranch(ref: AgentRecordLike, maxWidth: number, depthById: ReadonlyMap<string, number>, parentById: ReadonlyMap<string, string>, lastSiblingById: ReadonlyMap<string, boolean>): string;
|
|
48
|
+
/** Ancestry rails for the task and metrics rows beneath an agent identity. */
|
|
49
|
+
export declare function treeContinuation(ref: AgentRecordLike, maxWidth: number, depthById: ReadonlyMap<string, number>, parentById: ReadonlyMap<string, string>, lastSiblingById: ReadonlyMap<string, boolean>): string;
|
|
50
|
+
/** One roster-wide origin for metric columns, independent of tree depth. */
|
|
51
|
+
export declare function treeMetadataIndent(maxWidth: number, maxDepth: number): number;
|
|
52
|
+
/** Right-align `text` inside a fixed-width cell, truncating overflow. */
|
|
53
|
+
export declare function alignRightCell(text: string, width: number): string;
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import type { AgentMessage, ThinkingLevel } from "@oh-my-pi/pi-agent-core";
|
|
2
|
+
import type { Model } from "@oh-my-pi/pi-ai";
|
|
3
|
+
/** Identity of the ambient main session in the agent roster. */
|
|
4
|
+
export declare const MAIN_AGENT_ID = "Main";
|
|
5
|
+
/** Lifecycle state shown in the roster. */
|
|
6
|
+
export type AgentStatus = "running" | "idle" | "parked" | "aborted";
|
|
7
|
+
/** Usage summary consumed by the roster and inspector. */
|
|
8
|
+
export interface AgentMetricsSummary {
|
|
9
|
+
tokens: number;
|
|
10
|
+
requests: number;
|
|
11
|
+
tools: number;
|
|
12
|
+
cost: number;
|
|
13
|
+
durationMs: number;
|
|
14
|
+
durationKind?: "active" | "span" | "unknown";
|
|
15
|
+
contextTokens?: number;
|
|
16
|
+
contextWindow?: number;
|
|
17
|
+
}
|
|
18
|
+
/** Live session data and actions used by the agent hub. */
|
|
19
|
+
export interface AgentHubSession {
|
|
20
|
+
readonly thinkingLevel: ThinkingLevel | undefined;
|
|
21
|
+
readonly model: Model | undefined;
|
|
22
|
+
readonly servingModel?: {
|
|
23
|
+
selector: string;
|
|
24
|
+
isFallback: boolean;
|
|
25
|
+
};
|
|
26
|
+
readonly agent?: {
|
|
27
|
+
state: {
|
|
28
|
+
messages: AgentMessage[];
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
getSessionStats(): {
|
|
32
|
+
tokens: {
|
|
33
|
+
input: number;
|
|
34
|
+
output: number;
|
|
35
|
+
cacheWrite: number;
|
|
36
|
+
};
|
|
37
|
+
assistantMessages: number;
|
|
38
|
+
toolCalls: number;
|
|
39
|
+
cost: number;
|
|
40
|
+
contextUsage?: {
|
|
41
|
+
tokens: number;
|
|
42
|
+
contextWindow: number;
|
|
43
|
+
} | null;
|
|
44
|
+
};
|
|
45
|
+
abort(options?: {
|
|
46
|
+
reason?: string;
|
|
47
|
+
}): Promise<void>;
|
|
48
|
+
}
|
|
49
|
+
/** Structural view of an agent-registry record. */
|
|
50
|
+
export interface AgentRecordLike {
|
|
51
|
+
id: string;
|
|
52
|
+
displayName: string;
|
|
53
|
+
kind: "main" | "sub" | "advisor";
|
|
54
|
+
parentId?: string;
|
|
55
|
+
status: AgentStatus;
|
|
56
|
+
session: AgentHubSession | null;
|
|
57
|
+
sessionFile: string | null;
|
|
58
|
+
createdAt: number;
|
|
59
|
+
lastActivity: number;
|
|
60
|
+
activity?: string;
|
|
61
|
+
history?: {
|
|
62
|
+
agent?: string;
|
|
63
|
+
modelRole?: string;
|
|
64
|
+
resolvedModel?: string;
|
|
65
|
+
resolvedModelIsFallback?: boolean;
|
|
66
|
+
metrics?: AgentMetricsSummary;
|
|
67
|
+
readOnly?: boolean;
|
|
68
|
+
outputPath?: string;
|
|
69
|
+
patchPath?: string;
|
|
70
|
+
branchName?: string;
|
|
71
|
+
nestedPatchPaths?: string[];
|
|
72
|
+
};
|
|
73
|
+
lifecycle?: {
|
|
74
|
+
responseAt?: number;
|
|
75
|
+
acceptedAt?: number;
|
|
76
|
+
terminalAt?: number;
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
/** Registry operations needed to display a live roster. */
|
|
80
|
+
export interface AgentHubRegistry<TRecord extends AgentRecordLike = AgentRecordLike> {
|
|
81
|
+
list(): TRecord[];
|
|
82
|
+
get(id: string): TRecord | undefined;
|
|
83
|
+
onChange(listener: () => void): () => void;
|
|
84
|
+
}
|
|
85
|
+
/** Lifecycle actions exposed by the host. */
|
|
86
|
+
export interface AgentLifecycleLike<TRecord extends AgentRecordLike = AgentRecordLike> {
|
|
87
|
+
ensureLive(id: string): Promise<{
|
|
88
|
+
prompt(text: string, options: {
|
|
89
|
+
streamingBehavior: "steer";
|
|
90
|
+
}): Promise<unknown>;
|
|
91
|
+
}>;
|
|
92
|
+
release(id: string, expected: TRecord, options: {
|
|
93
|
+
tombstone: true;
|
|
94
|
+
}): Promise<boolean>;
|
|
95
|
+
}
|
|
96
|
+
/** Unread-message counts supplied by the host IRC bus. */
|
|
97
|
+
export interface IrcBusLike {
|
|
98
|
+
unreadCount(id: string): number;
|
|
99
|
+
}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Hub overlay component.
|
|
3
|
+
*
|
|
4
|
+
* One overlay, two views:
|
|
5
|
+
* - Table view: every registered agent except Main (Main IS the ambient
|
|
6
|
+
* chat), live from the global AgentHubRegistry — status, unread irc count,
|
|
7
|
+
* current/last task, last activity. Navigate with keys, wheel, hover, and
|
|
8
|
+
* click; `r` revives a parked agent, `x` aborts + releases one.
|
|
9
|
+
* - Chat view: per-agent transcript (incremental session-file tail, absorbed
|
|
10
|
+
* from the old session observer overlay) plus an input line. Submitting
|
|
11
|
+
* revives a parked agent, then prompts/steers it; the message lands in the
|
|
12
|
+
* agent's persisted history via the normal prompt path.
|
|
13
|
+
*
|
|
14
|
+
* Replaces the old SessionObserverOverlayComponent (ctrl+s observer).
|
|
15
|
+
*/
|
|
16
|
+
import type { AgentTool } from "@oh-my-pi/pi-agent-core";
|
|
17
|
+
import { Container, type TUI } from "../tui.js";
|
|
18
|
+
import { type SelectListMouseTarget } from "../mouse.js";
|
|
19
|
+
import { type AgentActivitySource } from "./agent-activity.js";
|
|
20
|
+
import type { KeyId } from "../app-keybindings.js";
|
|
21
|
+
import type { MessageRenderer } from "../chat/extension-types.js";
|
|
22
|
+
import type { AgentLifecycleLike, IrcBusLike } from "./agent-hub-types.js";
|
|
23
|
+
import { type AgentRecordLike, type AgentHubRegistry } from "./agent-hub-types.js";
|
|
24
|
+
import type { SessionObserverRegistry } from "./session-observer-registry.js";
|
|
25
|
+
import { type AgentTranscriptSource } from "./agent-transcript-viewer.js";
|
|
26
|
+
import type { AgentRoleDisplay } from "./agent-hub-renderer.js";
|
|
27
|
+
export type AgentHubSection = "agents" | "activity";
|
|
28
|
+
/** Result of one host-backed transcript read for the Agent Hub viewer. */
|
|
29
|
+
export interface AgentHubRemoteTranscript {
|
|
30
|
+
text: string;
|
|
31
|
+
newSize: number;
|
|
32
|
+
/** Terminal read failure reported by the host; guests should surface it instead of retrying hot. */
|
|
33
|
+
error?: string;
|
|
34
|
+
}
|
|
35
|
+
/** Guest-side proxy for hub actions executed on the collab host. */
|
|
36
|
+
export interface AgentHubRemote {
|
|
37
|
+
chat(id: string, text: string): void;
|
|
38
|
+
kill(id: string): void;
|
|
39
|
+
revive(id: string): void;
|
|
40
|
+
/** Mirrors readFileIncremental: text from fromByte (complete JSONL lines), newSize = next fromByte base; null = temporarily unavailable. */
|
|
41
|
+
readTranscript(id: string, fromByte: number): Promise<AgentHubRemoteTranscript | null>;
|
|
42
|
+
}
|
|
43
|
+
export interface AgentHubDeps<TRecord extends AgentRecordLike = AgentRecordLike> {
|
|
44
|
+
/** Progress/status snapshot source (task lifecycle + progress channels). */
|
|
45
|
+
observers: SessionObserverRegistry;
|
|
46
|
+
/** Resolve the current display metadata for a model role. */
|
|
47
|
+
getRoleInfo?: (role: string) => AgentRoleDisplay;
|
|
48
|
+
/** Host-backed transcript parsing and local reads. */
|
|
49
|
+
transcript: AgentTranscriptSource;
|
|
50
|
+
/** Register persisted roster entries while the overlay remains alive. */
|
|
51
|
+
loadPersisted: (shouldContinue: () => boolean) => Promise<void>;
|
|
52
|
+
/** Keys that toggle the hub closed from inside (app.agents.hub + app.session.observe). */
|
|
53
|
+
hubKeys: KeyId[];
|
|
54
|
+
onDone: () => void;
|
|
55
|
+
requestRender: () => void;
|
|
56
|
+
/** Registry supplying the roster. */
|
|
57
|
+
registry: AgentHubRegistry<TRecord>;
|
|
58
|
+
/** Resolve lifecycle actions lazily when a local action needs them. */
|
|
59
|
+
lifecycle: () => AgentLifecycleLike<TRecord>;
|
|
60
|
+
/** Host message bus supplying unread counts. */
|
|
61
|
+
irc: IrcBusLike;
|
|
62
|
+
/** TUI handle for transcript components; tests omit it and get a render-only stub. */
|
|
63
|
+
ui?: TUI;
|
|
64
|
+
/** Tool lookup for transcript renderers (labels, custom render functions). */
|
|
65
|
+
getTool?: (name: string) => AgentTool | undefined;
|
|
66
|
+
/** Whether the active registry entry came from a built-in factory. */
|
|
67
|
+
isBuiltInTool?: (name: string) => boolean;
|
|
68
|
+
/** Extension message renderers for custom messages in the transcript. */
|
|
69
|
+
getMessageRenderer?: (customType: string) => MessageRenderer | undefined;
|
|
70
|
+
/** Cwd used by tool renderers for path shortening; defaults to the project dir. */
|
|
71
|
+
cwd?: string;
|
|
72
|
+
/** Mirrors the main transcript's thinking-block visibility. */
|
|
73
|
+
hideThinkingBlock?: () => boolean;
|
|
74
|
+
proseOnlyThinking?: () => boolean;
|
|
75
|
+
/** Keys toggling tool output expansion (app.tools.expand). */
|
|
76
|
+
expandKeys?: KeyId[];
|
|
77
|
+
/** Focus the main view on this agent's live session (ctx.focusAgentSession). When absent (collab guest, tests), Enter opens the in-hub chat view instead. */
|
|
78
|
+
focusAgent?: (id: string) => Promise<void>;
|
|
79
|
+
/** Current main session file; used to seed parked historical subagents after restart. */
|
|
80
|
+
sessionFile?: string | null;
|
|
81
|
+
/** Initial top-level projection; slash commands deep-link into this surface. */
|
|
82
|
+
initialSection?: AgentHubSection;
|
|
83
|
+
/** Unified local or remote activity source. */
|
|
84
|
+
activity: AgentActivitySource;
|
|
85
|
+
/** Whether observer progress should update live activity rows. */
|
|
86
|
+
manageActivityLive?: boolean;
|
|
87
|
+
/** Collab guest: route actions/transcripts to the host instead of local sessions. */
|
|
88
|
+
remote?: AgentHubRemote;
|
|
89
|
+
}
|
|
90
|
+
export declare class AgentHubOverlayComponent<TRecord extends AgentRecordLike = AgentRecordLike> extends Container implements SelectListMouseTarget {
|
|
91
|
+
#private;
|
|
92
|
+
/** Resolves after persisted historical subagents have been registered and rows refreshed. */
|
|
93
|
+
readonly persistedSubagentsReady: Promise<void>;
|
|
94
|
+
constructor(deps: AgentHubDeps<TRecord>);
|
|
95
|
+
/**
|
|
96
|
+
* Whether the current table view has no agents to show (every registered agent
|
|
97
|
+
* except Main). Persisted historical rows may arrive later; callers that need
|
|
98
|
+
* those included must wait for {@link persistedSubagentsReady} first.
|
|
99
|
+
*/
|
|
100
|
+
get isEmpty(): boolean;
|
|
101
|
+
/** Tear down every subscription and timer. Called by the overlay owner on close. */
|
|
102
|
+
dispose(): void;
|
|
103
|
+
render(width: number): readonly string[];
|
|
104
|
+
handleInput(keyData: string): void;
|
|
105
|
+
/**
|
|
106
|
+
* Seed the table's left-left close detector with the current time so a single
|
|
107
|
+
* subsequent `←` (within {@link LEFT_TAP_WINDOW_MS}) dismisses the hub.
|
|
108
|
+
*
|
|
109
|
+
* The editor's own double-tap detector consumes the `←←` that opens the hub,
|
|
110
|
+
* leaving this detector at its fresh `0` — without this handoff the user would
|
|
111
|
+
* have to press `←←` a second time to escape. Called by the opener when the hub
|
|
112
|
+
* was raised by that gesture.
|
|
113
|
+
*/
|
|
114
|
+
armCloseTap(): void;
|
|
115
|
+
/**
|
|
116
|
+
* Open the fullscreen transcript viewer for an agent id (public for table Enter
|
|
117
|
+
* and tests). Mounts {@link AgentTranscriptViewer} as a `fullscreen` overlay so it
|
|
118
|
+
* owns the alternate screen; the hub table stays mounted underneath and is
|
|
119
|
+
* restored when the viewer closes. No-op without a real TUI (render-only test stub).
|
|
120
|
+
*/
|
|
121
|
+
openChat(id: string, entryId?: string): void;
|
|
122
|
+
handleWheel(delta: -1 | 1): void;
|
|
123
|
+
hitTest(line: number): number | undefined;
|
|
124
|
+
setHoverIndex(index: number | null): void;
|
|
125
|
+
clickItem(index: number): void;
|
|
126
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fullscreen transcript viewer.
|
|
3
|
+
*
|
|
4
|
+
* `AgentHubOverlayComponent.openChat` mounts this as a `fullscreen` overlay
|
|
5
|
+
* (`ui.showOverlay(..., { fullscreen: true })`), so it borrows the terminal's
|
|
6
|
+
* alternate screen buffer (the vim/less idiom) and paints the whole screen — no
|
|
7
|
+
* compositing into the live transcript's scrollback. It renders a parked
|
|
8
|
+
* subagent / advisor / collab-guest transcript that has no live in-view session.
|
|
9
|
+
*
|
|
10
|
+
* Local transcripts tail append-only growth: unchanged file identity plus stable
|
|
11
|
+
* sentinels means only newly appended JSONL is parsed and rendered. Rewrites,
|
|
12
|
+
* truncation, rotation, or sentinel drift fall back to a full rebuild so changed
|
|
13
|
+
* historical entries cannot leave stale components behind. Collab guests use the
|
|
14
|
+
* same append path over the host's byte-capped transcript reads.
|
|
15
|
+
*/
|
|
16
|
+
import type * as fs from "node:fs";
|
|
17
|
+
import type { AgentTool } from "@oh-my-pi/pi-agent-core";
|
|
18
|
+
import type { Component, TUI } from "../tui.js";
|
|
19
|
+
import type { KeyId } from "../app-keybindings.js";
|
|
20
|
+
import type { MessageRenderer } from "../chat/extension-types.js";
|
|
21
|
+
import type { AgentLifecycleLike } from "./agent-hub-types.js";
|
|
22
|
+
import type { AgentHubRegistry } from "./agent-hub-types.js";
|
|
23
|
+
import type { SessionMessageEntryLike } from "../chat/transcript-entry.js";
|
|
24
|
+
import type { SessionObserverRegistry } from "./session-observer-registry.js";
|
|
25
|
+
import type { AgentHubRemote } from "./agent-hub.js";
|
|
26
|
+
/** Parsed message and model metadata relevant to a transcript viewer. */
|
|
27
|
+
export type AgentTranscriptEntry = SessionMessageEntryLike | {
|
|
28
|
+
type: "model_change";
|
|
29
|
+
model: string;
|
|
30
|
+
};
|
|
31
|
+
/** Local filesystem and session parsing capabilities supplied by the host. */
|
|
32
|
+
export interface AgentTranscriptSource {
|
|
33
|
+
fs: Pick<typeof fs, "openSync" | "closeSync" | "readSync" | "readFileSync" | "statSync">;
|
|
34
|
+
parseEntries(text: string): AgentTranscriptEntry[];
|
|
35
|
+
}
|
|
36
|
+
export interface AgentTranscriptViewerDeps {
|
|
37
|
+
agentId: string;
|
|
38
|
+
transcript: AgentTranscriptSource;
|
|
39
|
+
/** Persisted entry to reveal on first paint when opened from an activity row. */
|
|
40
|
+
initialEntryId?: string;
|
|
41
|
+
registry: AgentHubRegistry;
|
|
42
|
+
/** Collab guest: read transcript from the host instead of a local file. */
|
|
43
|
+
remote?: AgentHubRemote;
|
|
44
|
+
/** Progress/cost snapshot source for the stats line. */
|
|
45
|
+
observers?: SessionObserverRegistry;
|
|
46
|
+
/** Revive+prompt path for messageable local agents. Lazy to avoid touching the global. */
|
|
47
|
+
lifecycle?: () => AgentLifecycleLike;
|
|
48
|
+
ui: TUI;
|
|
49
|
+
getTool?: (name: string) => AgentTool | undefined;
|
|
50
|
+
/** Whether the active registry entry came from a built-in factory. */
|
|
51
|
+
isBuiltInTool?: (name: string) => boolean;
|
|
52
|
+
getMessageRenderer?: (customType: string) => MessageRenderer | undefined;
|
|
53
|
+
cwd: string;
|
|
54
|
+
hideThinkingBlock?: () => boolean;
|
|
55
|
+
proseOnlyThinking?: () => boolean;
|
|
56
|
+
expandKeys: KeyId[];
|
|
57
|
+
/** Keys that toggle the whole hub closed (app.agents.hub + app.session.observe). */
|
|
58
|
+
hubKeys: KeyId[];
|
|
59
|
+
requestRender: () => void;
|
|
60
|
+
/** Close just this viewer (Esc), returning to the hub table. */
|
|
61
|
+
onClose: () => void;
|
|
62
|
+
/** Close this viewer AND the hub (hub-toggle keys). */
|
|
63
|
+
onHubClose: () => void;
|
|
64
|
+
}
|
|
65
|
+
export declare class AgentTranscriptViewer implements Component {
|
|
66
|
+
#private;
|
|
67
|
+
constructor(deps: AgentTranscriptViewerDeps);
|
|
68
|
+
dispose(): void;
|
|
69
|
+
handleInput(data: string): void;
|
|
70
|
+
render(width: number): readonly string[];
|
|
71
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fullscreen /agents hub, shown on the alternate screen like /models.
|
|
3
|
+
*
|
|
4
|
+
* Layout mirrors the model hub: a sidebar of scopes (All agents, per-source
|
|
5
|
+
* groups, "+ New agent"), a body listing agents with type-to-filter search,
|
|
6
|
+
* and a footer that turns into a chip strip while configuring. Enter on an
|
|
7
|
+
* agent opens its property strip (enabled / model / prewalk / advisor); a
|
|
8
|
+
* property opens a value strip whose "pick model…" chip dives into the real
|
|
9
|
+
* ModelBrowser and whose "pattern…" chip opens an inline pattern input, so
|
|
10
|
+
* every per-agent knob is picked instead of memorized.
|
|
11
|
+
*/
|
|
12
|
+
import type { Model } from "@oh-my-pi/pi-ai";
|
|
13
|
+
import { type Component, type TUI } from "../index.js";
|
|
14
|
+
import type { AgentSource } from "../tools/task.js";
|
|
15
|
+
import { type ModelBrowserSource } from "./model-browser.js";
|
|
16
|
+
/** One agent with its per-agent settings overrides resolved for display. */
|
|
17
|
+
export interface HubAgent {
|
|
18
|
+
name: string;
|
|
19
|
+
description: string;
|
|
20
|
+
systemPrompt: string;
|
|
21
|
+
source: AgentSource;
|
|
22
|
+
filePath?: string;
|
|
23
|
+
model?: string[];
|
|
24
|
+
prewalk?: boolean | string;
|
|
25
|
+
advisor?: boolean | string;
|
|
26
|
+
disabled: boolean;
|
|
27
|
+
/** `task.agentModelOverrides[name]` as a comma-joined pattern list. */
|
|
28
|
+
overrideModel?: string;
|
|
29
|
+
/** `task.agentPrewalk[name]`: "on", "off", or a model pattern. */
|
|
30
|
+
prewalkOverride?: string;
|
|
31
|
+
/** `task.agentAdvisor[name]`: "on", "off", or a model pattern. */
|
|
32
|
+
advisorOverride?: string;
|
|
33
|
+
}
|
|
34
|
+
/** The per-agent knob a strip or the model browser is editing. */
|
|
35
|
+
type PropertyKind = "model" | "prewalk" | "advisor";
|
|
36
|
+
export interface GeneratedAgentSpec {
|
|
37
|
+
identifier: string;
|
|
38
|
+
whenToUse: string;
|
|
39
|
+
systemPrompt: string;
|
|
40
|
+
}
|
|
41
|
+
/** Runtime-owned discovery, settings, generation and persistence. */
|
|
42
|
+
export interface AgentsHubDeps {
|
|
43
|
+
browserSource: ModelBrowserSource;
|
|
44
|
+
loadAgents: () => Promise<HubAgent[]>;
|
|
45
|
+
getAvailableModels: () => Model[];
|
|
46
|
+
effectiveModelPatterns: (agent: HubAgent) => string[];
|
|
47
|
+
resolvePatterns: (patterns: string[]) => string | undefined;
|
|
48
|
+
effectivePrewalkPattern: (agent: HubAgent) => string | undefined;
|
|
49
|
+
effectiveAdvisorPattern: (agent: HubAgent) => string | undefined;
|
|
50
|
+
setDisabledAgents: (names: string[]) => void;
|
|
51
|
+
setOverrides: (property: PropertyKind, overrides: Record<string, string>) => void;
|
|
52
|
+
generateAgent: (description: string, onText: (text: string) => void) => Promise<string>;
|
|
53
|
+
saveAgent: (scope: "project" | "user", spec: GeneratedAgentSpec) => Promise<string>;
|
|
54
|
+
}
|
|
55
|
+
export interface AgentsHubCallbacks {
|
|
56
|
+
onCancel: () => void;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* The fullscreen agents hub component. Hosted via
|
|
60
|
+
* `ui.showOverlay(..., { fullscreen: true })`; the host must call
|
|
61
|
+
* {@link AgentsHubComponent.dispose} when the overlay closes.
|
|
62
|
+
*/
|
|
63
|
+
export declare class AgentsHubComponent implements Component {
|
|
64
|
+
#private;
|
|
65
|
+
private constructor();
|
|
66
|
+
static create(tui: TUI, deps: AgentsHubDeps, callbacks?: AgentsHubCallbacks): Promise<AgentsHubComponent>;
|
|
67
|
+
dispose(): void;
|
|
68
|
+
invalidate(): void;
|
|
69
|
+
handleInput(data: string): void;
|
|
70
|
+
render(width: number): readonly string[];
|
|
71
|
+
}
|
|
72
|
+
export {};
|