@linxiraos/pi-tui 1.1.26 → 1.2.0
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 +51 -491
- package/README.md +13 -7
- package/dist/types/active-terminal.d.ts +30 -0
- package/dist/types/app-keybindings.d.ts +7 -2
- package/dist/types/apps/cleanse-board.d.ts +1 -1
- package/dist/types/apps/debug/log-viewer.d.ts +4 -0
- package/dist/types/apps/debug/raw-sse-buffer.d.ts +2 -0
- package/dist/types/apps/git/git-tui.d.ts +5 -4
- package/dist/types/apps/git/help.d.ts +3 -1
- package/dist/types/apps/if-bench-board.d.ts +2 -2
- package/dist/types/apps/setup-model-picker.d.ts +1 -1
- package/dist/types/autocomplete.d.ts +5 -2
- package/dist/types/charts/chart-plan.d.ts +674 -0
- package/dist/types/charts/chart-svg.d.ts +59 -0
- package/dist/types/charts/table-data.d.ts +175 -0
- package/dist/types/chat/assistant-message.d.ts +11 -1
- package/dist/types/chat/chat-transcript-builder.d.ts +3 -0
- package/dist/types/chat/compaction-summary-message.d.ts +1 -0
- package/dist/types/chat/execution-shared.d.ts +6 -5
- package/dist/types/chat/fence-figure.d.ts +42 -0
- package/dist/types/chat/figure-markdown.d.ts +42 -0
- package/dist/types/chat/messages.d.ts +1 -1
- package/dist/types/chat/svg-figure.d.ts +33 -0
- package/dist/types/chat/svg-source.d.ts +49 -0
- package/dist/types/chat/table-chart.d.ts +89 -0
- package/dist/types/chat/tool-execution.d.ts +2 -0
- package/dist/types/chat/user-message.d.ts +17 -4
- package/dist/types/chrome/shared.d.ts +9 -0
- package/dist/types/chrome/status-notice.d.ts +15 -3
- package/dist/types/chrome/transcript-container.d.ts +6 -0
- package/dist/types/components/box.d.ts +1 -0
- package/dist/types/components/disclosure.d.ts +1 -0
- package/dist/types/components/editor.d.ts +23 -5
- package/dist/types/components/form.d.ts +1 -0
- package/dist/types/components/image.d.ts +26 -44
- package/dist/types/components/input.d.ts +2 -1
- package/dist/types/components/key-value-list.d.ts +1 -0
- package/dist/types/components/layout/row.d.ts +1 -0
- package/dist/types/components/layout/stack.d.ts +1 -0
- package/dist/types/components/loader.d.ts +5 -6
- package/dist/types/components/markdown.d.ts +47 -5
- package/dist/types/components/scroll-view.d.ts +1 -0
- package/dist/types/components/section.d.ts +1 -0
- package/dist/types/components/table.d.ts +1 -0
- package/dist/types/components/text.d.ts +1 -0
- package/dist/types/components/tree-view.d.ts +7 -0
- package/dist/types/components/truncated-text.d.ts +1 -0
- package/dist/types/fuzzy.d.ts +29 -1
- package/dist/types/key-hint-format.d.ts +9 -1
- package/dist/types/keybinding-matchers.d.ts +3 -0
- package/dist/types/keybindings.d.ts +1 -1
- package/dist/types/kitty-graphics.d.ts +2 -2
- package/dist/types/loop-watchdog.d.ts +8 -7
- package/dist/types/multiplexers/cmux.d.ts +16 -0
- package/dist/types/multiplexers/herdr.d.ts +26 -0
- package/dist/types/multiplexers/notify.d.ts +13 -0
- package/dist/types/multiplexers/orca.d.ts +12 -0
- package/dist/types/multiplexers/screen.d.ts +9 -0
- package/dist/types/multiplexers/tmux.d.ts +29 -0
- package/dist/types/multiplexers/types.d.ts +100 -0
- package/dist/types/multiplexers/wmux.d.ts +12 -0
- package/dist/types/multiplexers/zellij.d.ts +12 -0
- package/dist/types/native/apply.d.ts +4 -3
- package/dist/types/native/backend.d.ts +5 -4
- package/dist/types/native/blobs.d.ts +7 -3
- package/dist/types/native/encode.d.ts +8 -6
- package/dist/types/native/node.d.ts +36 -5
- package/dist/types/native/overlay.d.ts +8 -3
- package/dist/types/native/settle.d.ts +4 -3
- package/dist/types/overlays/agent-hub-projection.d.ts +6 -5
- package/dist/types/overlays/agent-hub-types.d.ts +9 -0
- package/dist/types/overlays/agent-hub.d.ts +3 -0
- package/dist/types/overlays/agent-transcript-viewer.d.ts +12 -2
- package/dist/types/overlays/agents-hub.d.ts +9 -0
- package/dist/types/overlays/annotation-overlay.d.ts +19 -2
- package/dist/types/overlays/annotation-types.d.ts +2 -0
- package/dist/types/overlays/ask-dialog.d.ts +5 -2
- package/dist/types/overlays/btw-history-panel.d.ts +13 -1
- package/dist/types/overlays/copy-selector.d.ts +1 -0
- package/dist/types/overlays/history-search.d.ts +10 -0
- package/dist/types/overlays/hook-selector.d.ts +9 -4
- package/dist/types/overlays/hub-frame.d.ts +4 -1
- package/dist/types/overlays/jobs-panel.d.ts +1 -7
- package/dist/types/overlays/model-browser.d.ts +54 -7
- package/dist/types/overlays/model-hub.d.ts +37 -0
- package/dist/types/overlays/oauth-selector.d.ts +0 -1
- package/dist/types/overlays/plan-review-overlay.d.ts +3 -2
- package/dist/types/overlays/report-panel.d.ts +68 -0
- package/dist/types/overlays/rewind-selector.d.ts +1 -0
- package/dist/types/overlays/session-observer-registry.d.ts +2 -0
- package/dist/types/overlays/session-selector.d.ts +6 -2
- package/dist/types/overlays/settings-defs.d.ts +1 -0
- package/dist/types/overlays/thinking-selector.d.ts +2 -2
- package/dist/types/overlays/usage-dashboard.d.ts +12 -8
- package/dist/types/overlays/usage-display.d.ts +3 -1
- package/dist/types/prompt/composer-cache.d.ts +0 -16
- package/dist/types/prompt/composer.d.ts +18 -3
- package/dist/types/prompt/custom-editor.d.ts +25 -13
- package/dist/types/prompt/image-source.d.ts +2 -1
- package/dist/types/prompt/interactive-context-helpers.d.ts +5 -1
- package/dist/types/prompt/model-mention-autocomplete.d.ts +1 -1
- package/dist/types/prompt/welcome.d.ts +7 -2
- package/dist/types/render/composite.d.ts +2 -0
- package/dist/types/render/output-pane.d.ts +1 -0
- package/dist/types/render/render-utils.d.ts +1 -0
- package/dist/types/render/tool-card.d.ts +6 -0
- package/dist/types/render/width-aware-text.d.ts +2 -0
- package/dist/types/setup/scenes/types.d.ts +1 -0
- package/dist/types/space-hold.d.ts +40 -25
- package/dist/types/status-line/component.d.ts +3 -0
- package/dist/types/status-line/context-usage.d.ts +7 -5
- package/dist/types/status-line/host.d.ts +4 -1
- package/dist/types/status-line/segments.d.ts +2 -0
- package/dist/types/status-line/types.d.ts +14 -3
- package/dist/types/terminal-capabilities.d.ts +41 -36
- package/dist/types/terminal-multiplexer.d.ts +127 -14
- package/dist/types/terminal.d.ts +23 -16
- package/dist/types/theme/active-symbols.d.ts +1 -1
- package/dist/types/theme/schema.d.ts +11 -2
- package/dist/types/theme/symbols.d.ts +1 -1
- package/dist/types/theme/theme-class.d.ts +7 -0
- package/dist/types/theme/theme.d.ts +1 -1
- package/dist/types/theme/tui-adapters.d.ts +3 -0
- package/dist/types/thinking.d.ts +1 -1
- package/dist/types/tmux.d.ts +11 -4
- package/dist/types/tools/bash.d.ts +7 -2
- package/dist/types/tools/daemon.d.ts +1 -1
- package/dist/types/tools/eval.d.ts +22 -3
- package/dist/types/tools/glob.d.ts +4 -0
- package/dist/types/tools/native-view.d.ts +47 -0
- package/dist/types/tools/output-meta.d.ts +11 -1
- package/dist/types/tools/renderer.d.ts +37 -2
- package/dist/types/tools/streaming-output.d.ts +20 -1
- package/dist/types/tools/task.d.ts +2 -3
- package/dist/types/tools/write.d.ts +9 -2
- package/dist/types/tools/yield.d.ts +22 -0
- package/dist/types/tui.d.ts +36 -0
- package/dist/types/utils.d.ts +6 -0
- package/dist/types/vim.d.ts +19 -5
- package/dist/types/windows-input-mode.d.ts +33 -1
- package/package.json +13 -9
- package/src/active-terminal.d.ts +30 -0
- package/src/active-terminal.ts +80 -0
- package/src/app-keybindings.d.ts +7 -2
- package/src/app-keybindings.ts +7 -2
- package/src/apps/autoresearch-dashboard.ts +7 -3
- package/src/apps/cleanse-board.ts +2 -2
- package/src/apps/cleanse-picker.ts +1 -1
- package/src/apps/debug/log-viewer.ts +188 -72
- package/src/apps/debug/raw-sse-buffer.ts +8 -0
- package/src/apps/debug/raw-sse.ts +39 -5
- package/src/apps/git/diff-pane.ts +96 -23
- package/src/apps/git/git-tui.ts +23 -16
- package/src/apps/git/help.ts +29 -20
- package/src/apps/git/sidebar.ts +8 -3
- package/src/apps/if-bench-board.ts +2 -2
- package/src/apps/ps-top.ts +2 -2
- package/src/apps/setup-model-picker.ts +1 -1
- package/src/autocomplete.d.ts +5 -2
- package/src/autocomplete.ts +67 -43
- package/src/bracketed-paste.ts +10 -3
- package/src/charts/chart-plan.d.ts +674 -0
- package/src/charts/chart-plan.ts +5081 -0
- package/src/charts/chart-svg.d.ts +59 -0
- package/src/charts/chart-svg.ts +4657 -0
- package/src/charts/table-data.d.ts +175 -0
- package/src/charts/table-data.ts +1478 -0
- package/src/chat/advisor-message.ts +11 -0
- package/src/chat/assistant-message.d.ts +11 -1
- package/src/chat/assistant-message.ts +245 -54
- package/src/chat/chat-transcript-builder.d.ts +3 -0
- package/src/chat/chat-transcript-builder.ts +9 -3
- package/src/chat/compaction-summary-message.d.ts +1 -0
- package/src/chat/compaction-summary-message.ts +8 -0
- package/src/chat/execution-shared.d.ts +6 -5
- package/src/chat/execution-shared.ts +42 -25
- package/src/chat/fence-figure.d.ts +42 -0
- package/src/chat/fence-figure.ts +80 -0
- package/src/chat/figure-markdown.d.ts +42 -0
- package/src/chat/figure-markdown.ts +174 -0
- package/src/chat/messages.d.ts +1 -1
- package/src/chat/messages.ts +1 -1
- package/src/chat/read-tool-group.ts +6 -4
- package/src/chat/skill-message.ts +6 -0
- package/src/chat/svg-figure.d.ts +33 -0
- package/src/chat/svg-figure.ts +399 -0
- package/src/chat/svg-source.d.ts +49 -0
- package/src/chat/svg-source.ts +188 -0
- package/src/chat/table-chart.d.ts +89 -0
- package/src/chat/table-chart.ts +294 -0
- package/src/chat/tool-execution.d.ts +2 -0
- package/src/chat/tool-execution.ts +86 -7
- package/src/chat/user-message.d.ts +17 -4
- package/src/chat/user-message.ts +71 -8
- package/src/chrome/shared.ts +53 -0
- package/src/chrome/status-notice.ts +25 -7
- package/src/chrome/transcript-container.d.ts +6 -0
- package/src/chrome/transcript-container.ts +162 -19
- package/src/components/box.d.ts +1 -0
- package/src/components/box.ts +5 -0
- package/src/components/disclosure.d.ts +1 -0
- package/src/components/disclosure.ts +8 -0
- package/src/components/editor.d.ts +23 -5
- package/src/components/editor.ts +316 -47
- package/src/components/form.d.ts +1 -0
- package/src/components/form.ts +8 -0
- package/src/components/image.d.ts +26 -44
- package/src/components/image.ts +115 -152
- package/src/components/input.d.ts +2 -1
- package/src/components/input.ts +17 -7
- package/src/components/key-value-list.d.ts +1 -0
- package/src/components/key-value-list.ts +4 -0
- package/src/components/layout/row.d.ts +1 -0
- package/src/components/layout/row.ts +7 -0
- package/src/components/layout/stack.d.ts +1 -0
- package/src/components/layout/stack.ts +7 -0
- package/src/components/loader.d.ts +5 -6
- package/src/components/loader.ts +10 -17
- package/src/components/markdown.d.ts +47 -5
- package/src/components/markdown.ts +786 -303
- package/src/components/scroll-view.d.ts +1 -0
- package/src/components/scroll-view.ts +5 -0
- package/src/components/section.d.ts +1 -0
- package/src/components/section.ts +5 -0
- package/src/components/settings-list.ts +2 -0
- package/src/components/table.d.ts +1 -0
- package/src/components/table.ts +4 -0
- package/src/components/text.d.ts +1 -0
- package/src/components/text.ts +7 -0
- package/src/components/tree-view.d.ts +7 -0
- package/src/components/tree-view.ts +38 -8
- package/src/components/truncated-text.d.ts +1 -0
- package/src/components/truncated-text.ts +5 -0
- package/src/desktop-notify.ts +3 -2
- package/src/fuzzy.d.ts +29 -1
- package/src/fuzzy.ts +115 -30
- package/src/hotkeys-markdown.ts +9 -2
- package/src/key-hint-format.d.ts +9 -1
- package/src/key-hint-format.ts +26 -11
- package/src/keybinding-matchers.d.ts +3 -0
- package/src/keybinding-matchers.ts +6 -2
- package/src/keybindings.d.ts +1 -1
- package/src/keybindings.ts +1 -1
- package/src/kitty-graphics.d.ts +2 -2
- package/src/kitty-graphics.ts +11 -5
- package/src/loop-watchdog.d.ts +8 -7
- package/src/loop-watchdog.ts +18 -13
- package/src/multiplexers/cmux.d.ts +16 -0
- package/src/multiplexers/cmux.ts +29 -0
- package/src/multiplexers/herdr.d.ts +26 -0
- package/src/multiplexers/herdr.ts +64 -0
- package/src/multiplexers/notify.d.ts +13 -0
- package/src/multiplexers/notify.ts +24 -0
- package/src/multiplexers/orca.d.ts +12 -0
- package/src/multiplexers/orca.ts +16 -0
- package/src/multiplexers/screen.d.ts +9 -0
- package/src/multiplexers/screen.ts +15 -0
- package/src/multiplexers/tmux.d.ts +29 -0
- package/src/multiplexers/tmux.ts +40 -0
- package/src/multiplexers/types.d.ts +100 -0
- package/src/multiplexers/types.ts +110 -0
- package/src/multiplexers/wmux.d.ts +12 -0
- package/src/multiplexers/wmux.ts +16 -0
- package/src/multiplexers/zellij.d.ts +12 -0
- package/src/multiplexers/zellij.ts +24 -0
- package/src/native/apply.d.ts +4 -3
- package/src/native/apply.ts +4 -3
- package/src/native/backend.d.ts +5 -4
- package/src/native/backend.ts +199 -22
- package/src/native/blobs.d.ts +7 -3
- package/src/native/blobs.ts +47 -12
- package/src/native/encode.d.ts +8 -6
- package/src/native/encode.ts +76 -34
- package/src/native/node.d.ts +36 -5
- package/src/native/node.ts +31 -5
- package/src/native/overlay.d.ts +8 -3
- package/src/native/overlay.ts +17 -4
- package/src/native/reconcile.ts +16 -4
- package/src/native/settle.d.ts +4 -3
- package/src/native/settle.ts +4 -3
- package/src/overlays/agent-hub-projection.d.ts +6 -5
- package/src/overlays/agent-hub-projection.ts +124 -13
- package/src/overlays/agent-hub-types.d.ts +9 -0
- package/src/overlays/agent-hub-types.ts +6 -0
- package/src/overlays/agent-hub.ts +48 -29
- package/src/overlays/agent-transcript-viewer.ts +93 -23
- package/src/overlays/agents-hub.ts +28 -8
- package/src/overlays/annotation-overlay.ts +293 -90
- package/src/overlays/annotation-types.ts +2 -0
- package/src/overlays/ask-dialog.ts +10 -17
- package/src/overlays/btw-history-panel.ts +136 -39
- package/src/overlays/copy-selector.d.ts +1 -0
- package/src/overlays/copy-selector.ts +32 -8
- package/src/overlays/extensions/extension-dashboard.ts +4 -4
- package/src/overlays/extensions/state-manager.ts +52 -12
- package/src/overlays/history-search.ts +100 -7
- package/src/overlays/hook-selector.ts +12 -5
- package/src/overlays/hub-frame.ts +19 -1
- package/src/overlays/jobs-panel.ts +33 -52
- package/src/overlays/model-browser.ts +367 -122
- package/src/overlays/model-hub.ts +435 -59
- package/src/overlays/move-overlay.ts +28 -14
- package/src/overlays/oauth-selector.ts +54 -70
- package/src/overlays/pause-screen.ts +2 -2
- package/src/overlays/plan-review-overlay.ts +208 -70
- package/src/overlays/plugin-settings.ts +3 -3
- package/src/overlays/report-panel.ts +191 -0
- package/src/overlays/rewind-selector.ts +88 -17
- package/src/overlays/session-observer-registry.d.ts +2 -0
- package/src/overlays/session-observer-registry.ts +10 -2
- package/src/overlays/session-selector.ts +64 -26
- package/src/overlays/settings-defs.ts +5 -4
- package/src/overlays/settings-selector.ts +33 -8
- package/src/overlays/snapcompact-shape-preview.ts +2 -3
- package/src/overlays/stats-notice.ts +1 -1
- package/src/overlays/thinking-selector.ts +11 -10
- package/src/overlays/tree-selector.ts +41 -20
- package/src/overlays/usage-dashboard.ts +117 -58
- package/src/overlays/usage-display.ts +10 -4
- package/src/overlays/usage-row.ts +22 -8
- package/src/prompt/attachment-chips.ts +15 -11
- package/src/prompt/composer-attachments.ts +6 -4
- package/src/prompt/composer-cache.ts +7 -86
- package/src/prompt/composer.ts +37 -26
- package/src/prompt/custom-editor.ts +282 -105
- package/src/prompt/image-source.ts +2 -1
- package/src/prompt/interactive-context-helpers.ts +32 -18
- package/src/prompt/macos-spelling.ts +7 -0
- package/src/prompt/magic-keywords.ts +11 -2
- package/src/prompt/model-mention-autocomplete.ts +14 -14
- package/src/prompt/queued-messages.ts +6 -4
- package/src/prompt/tips.txt +13 -9
- package/src/prompt/welcome.ts +64 -46
- package/src/prompt/word-completion.ts +38 -5
- package/src/render/composite.d.ts +2 -0
- package/src/render/composite.ts +64 -0
- package/src/render/output-pane.d.ts +1 -0
- package/src/render/output-pane.ts +6 -0
- package/src/render/render-utils.d.ts +1 -0
- package/src/render/render-utils.ts +16 -1
- package/src/render/tool-card.d.ts +6 -0
- package/src/render/tool-card.ts +15 -0
- package/src/render/width-aware-text.d.ts +2 -0
- package/src/render/width-aware-text.ts +5 -0
- package/src/setup/scenes/model.ts +2 -1
- package/src/setup/scenes/types.ts +1 -0
- package/src/space-hold.d.ts +40 -25
- package/src/space-hold.ts +156 -52
- package/src/status-line/component.ts +292 -78
- package/src/status-line/context-usage.ts +21 -46
- package/src/status-line/host.ts +4 -1
- package/src/status-line/segments.ts +40 -22
- package/src/status-line/types.ts +15 -3
- package/src/terminal-capabilities.d.ts +41 -36
- package/src/terminal-capabilities.ts +137 -213
- package/src/terminal-multiplexer.d.ts +127 -14
- package/src/terminal-multiplexer.ts +112 -33
- package/src/terminal.d.ts +23 -16
- package/src/terminal.ts +203 -99
- package/src/theme/active-symbols.d.ts +1 -1
- package/src/theme/active-symbols.ts +1 -1
- package/src/theme/schema-validation.ts +1 -0
- package/src/theme/schema.d.ts +11 -2
- package/src/theme/schema.ts +14 -1
- package/src/theme/session-color.ts +1 -7
- package/src/theme/symbols.d.ts +1 -1
- package/src/theme/symbols.ts +11 -4
- package/src/theme/theme-class.d.ts +7 -0
- package/src/theme/theme-class.ts +26 -1
- package/src/theme/theme-schema.json +5 -1
- package/src/theme/theme.d.ts +1 -1
- package/src/theme/theme.ts +8 -4
- package/src/theme/tui-adapters.d.ts +3 -0
- package/src/theme/tui-adapters.ts +68 -0
- package/src/thinking.d.ts +1 -1
- package/src/thinking.ts +1 -1
- package/src/tmux.d.ts +11 -4
- package/src/tmux.ts +47 -11
- package/src/tools/ast-edit.ts +59 -35
- package/src/tools/ast-grep.ts +35 -16
- package/src/tools/bash.d.ts +7 -2
- package/src/tools/bash.ts +116 -47
- package/src/tools/daemon.d.ts +1 -1
- package/src/tools/daemon.ts +1 -1
- package/src/tools/default-renderer.ts +35 -19
- package/src/tools/edit.ts +142 -120
- package/src/tools/eval-format/index.ts +28 -2
- package/src/tools/eval-format/javascript.ts +7 -5
- package/src/tools/eval.d.ts +22 -3
- package/src/tools/eval.ts +364 -208
- package/src/tools/fetch.ts +5 -6
- package/src/tools/glob.d.ts +4 -0
- package/src/tools/glob.ts +33 -65
- package/src/tools/grep.ts +81 -48
- package/src/tools/index.ts +2 -0
- package/src/tools/lsp.ts +81 -59
- package/src/tools/mcp.ts +111 -68
- package/src/tools/native-view.d.ts +47 -0
- package/src/tools/native-view.ts +102 -1
- package/src/tools/output-meta.d.ts +11 -1
- package/src/tools/output-meta.ts +23 -3
- package/src/tools/read.ts +7 -5
- package/src/tools/renderer.d.ts +37 -2
- package/src/tools/renderer.ts +42 -2
- package/src/tools/streaming-output.d.ts +20 -1
- package/src/tools/streaming-output.ts +154 -50
- package/src/tools/task.d.ts +2 -3
- package/src/tools/task.ts +115 -62
- package/src/tools/todo.ts +119 -30
- package/src/tools/wait.ts +34 -24
- package/src/tools/web-search.ts +1 -1
- package/src/tools/write.d.ts +9 -2
- package/src/tools/write.ts +147 -95
- package/src/tools/yield.d.ts +22 -0
- package/src/tools/yield.ts +225 -0
- package/src/tui.d.ts +36 -0
- package/src/tui.ts +666 -217
- package/src/utils.d.ts +6 -0
- package/src/utils.ts +19 -0
- package/src/vim.d.ts +19 -5
- package/src/vim.ts +333 -18
- package/src/windows-input-mode.d.ts +33 -1
- package/src/windows-input-mode.ts +212 -6
|
@@ -6,7 +6,7 @@ import { type Component, type ResizeScrollbackMode, type TerminalFramePlan, type
|
|
|
6
6
|
import type { NativeSurface, NativeSurfaceProvider } from "../native/node.js";
|
|
7
7
|
import { CustomEditor } from "./custom-editor.js";
|
|
8
8
|
import type { WordCompletionMethod } from "./word-completion.js";
|
|
9
|
-
import {
|
|
9
|
+
import { WelcomeComponent, type RecentSession, type LspServerInfo } from "./welcome.js";
|
|
10
10
|
/** Live settings that affect the composer before and after session adoption. */
|
|
11
11
|
export interface ComposerPreferences {
|
|
12
12
|
readonly quiet: boolean;
|
|
@@ -47,7 +47,7 @@ export interface ComposerStatusCache {
|
|
|
47
47
|
/** Optional dependencies and initial state for a standalone composer. */
|
|
48
48
|
export interface ComposerOptions {
|
|
49
49
|
readonly terminal?: Terminal;
|
|
50
|
-
/** Extra TUI construction options (render scheduler injection for tests and `
|
|
50
|
+
/** Extra TUI construction options (render scheduler injection for tests and `zetacode render`). */
|
|
51
51
|
readonly tuiOptions?: TUIOptions;
|
|
52
52
|
readonly preferences?: Partial<ComposerPreferences>;
|
|
53
53
|
readonly welcome?: ComposerWelcomeUpdate;
|
|
@@ -122,6 +122,21 @@ export declare class Composer implements TerminalFrameProvider, NativeSurfacePro
|
|
|
122
122
|
#private;
|
|
123
123
|
readonly ui: TUI;
|
|
124
124
|
constructor(options?: ComposerOptions);
|
|
125
|
+
/**
|
|
126
|
+
* Rows the below-transcript chrome under `root` (editor, status line, …)
|
|
127
|
+
* took in the last frame, so a root that grows upward can cap itself to
|
|
128
|
+
* the screen rows left above them; `undefined` before `root` was laid out.
|
|
129
|
+
*/
|
|
130
|
+
rowsBelow(root: Component): number | undefined;
|
|
131
|
+
/**
|
|
132
|
+
* Keep the input on the bottom row while the live rows cannot fill the
|
|
133
|
+
* screen, as after an inline decision panel closes. A tall block that just
|
|
134
|
+
* left the chrome above the editor (a command report) may have scrolled
|
|
135
|
+
* rows into native history that cannot be pulled back; without the pin the
|
|
136
|
+
* editor would jump up to where the shorter frame now ends. The pin lifts
|
|
137
|
+
* once live rows fill the screen again.
|
|
138
|
+
*/
|
|
139
|
+
pinInputToBottom(): void;
|
|
125
140
|
/** Compose the bounded mutable viewport and the next ordered history append. */
|
|
126
141
|
renderFrame(viewport: ViewportSize): TerminalFramePlan;
|
|
127
142
|
/**
|
|
@@ -164,7 +179,7 @@ export declare class Composer implements TerminalFrameProvider, NativeSurfacePro
|
|
|
164
179
|
enableInput(): void;
|
|
165
180
|
/** Apply settings changes without replacing the editor or welcome component. */
|
|
166
181
|
setPreferences(update: Partial<ComposerPreferences>): void;
|
|
167
|
-
/** Patch welcome data in place as
|
|
182
|
+
/** Patch welcome data in place as version, session, and project discovery complete. */
|
|
168
183
|
updateWelcome(update: ComposerWelcomeUpdate): void;
|
|
169
184
|
/** Replace optional header content around the stable welcome scene. */
|
|
170
185
|
setHeaderExtras(before: readonly Component[], after: readonly Component[]): void;
|
|
@@ -7,7 +7,7 @@ import type { AppKeybinding } from "../app-keybindings.js";
|
|
|
7
7
|
import type { DescribeContext, NativeNode, NativeUiEvent } from "../native/node.js";
|
|
8
8
|
import type { ComposerFactsSource } from "../status-line/types.js";
|
|
9
9
|
import { type MacOSSpellingFeatures } from "./macos-spelling.js";
|
|
10
|
-
import type { TspEditorDecoration } from "@linxiraos/pi-wire";
|
|
10
|
+
import type { TspEditorDecoration, TspText } from "@linxiraos/pi-wire";
|
|
11
11
|
import { type WordCompletionMethod } from "./word-completion.js";
|
|
12
12
|
/** Live composer state the TSP layout shows; the interactive host wires {@link CustomEditor.composerState}. */
|
|
13
13
|
export interface ComposerNativeState {
|
|
@@ -18,10 +18,16 @@ export interface ComposerNativeState {
|
|
|
18
18
|
};
|
|
19
19
|
/** Thinking effort word (`high`, `off`, `auto`); undefined when the model has no thinking. */
|
|
20
20
|
readonly thinking?: string;
|
|
21
|
+
/** The thinking level draws as the model chip's icon instead of its own chip (where the terminal has `effort`). */
|
|
22
|
+
readonly thinkingInModel?: boolean;
|
|
23
|
+
/** Generation tok/s after the thinking level (live while running, else the last reading); undefined hides it. */
|
|
24
|
+
readonly rate?: number;
|
|
21
25
|
/** A turn is running: the send keycap becomes a Stop button. */
|
|
22
26
|
readonly running: boolean;
|
|
23
27
|
/** The viewed subagent's lineage, outermost first and the viewed agent last; undefined on the main session. */
|
|
24
28
|
readonly viewing?: readonly string[];
|
|
29
|
+
/** The session's title, quoted in italics as the TSP placeholder; undefined until it has one. */
|
|
30
|
+
readonly title?: string;
|
|
25
31
|
}
|
|
26
32
|
/** Independently switchable prose-assistance features of the composer. */
|
|
27
33
|
export interface SpellingFeatures extends MacOSSpellingFeatures {
|
|
@@ -112,19 +118,19 @@ export declare class CustomEditor extends Editor {
|
|
|
112
118
|
* Numbered by a per-draft monotonic counter so a deleted chip never recycles its number
|
|
113
119
|
* (labels key the atom table). */
|
|
114
120
|
pendingTexts: TextAttachment[];
|
|
115
|
-
/** Host-wired producer of per-image
|
|
116
|
-
* chip tokens for restored drafts (esc-esc, `/tree`, branch). */
|
|
121
|
+
/** Host-wired producer of per-image chip targets (a file on disk, or a session blob copy);
|
|
122
|
+
* drives clickable chip tokens for restored drafts (esc-esc, `/tree`, branch). */
|
|
117
123
|
draftImageLinkMaterializer?: (images: readonly ImageContent[]) => Promise<(string | undefined)[] | undefined>;
|
|
118
124
|
/**
|
|
119
125
|
* The host {@link TUI}, captured when a plugin constructs this editor through
|
|
120
|
-
* the upstream-pi `(tui, theme, keybindings)` convention. Undefined for
|
|
126
|
+
* the upstream-pi `(tui, theme, keybindings)` convention. Undefined for omp's
|
|
121
127
|
* own `new CustomEditor(theme)` callers (they drive repaints through the
|
|
122
128
|
* interactive-mode wiring instead). Plugins that call `this.tui.requestRender()`
|
|
123
129
|
* in their overrides read it here (issue #4766).
|
|
124
130
|
*/
|
|
125
131
|
tui?: TUI;
|
|
126
132
|
/**
|
|
127
|
-
* Accept both the
|
|
133
|
+
* Accept both the omp constructor convention — `new CustomEditor(theme)` —
|
|
128
134
|
* and the upstream-pi `Editor` convention — `new Editor(tui, theme, keybindings)`
|
|
129
135
|
* — that {@link ExtensionUIContext.setEditorComponent}'s factory contract
|
|
130
136
|
* advertises `(tui, theme, keybindings)`. Plugins written against upstream pi
|
|
@@ -187,7 +193,8 @@ export declare class CustomEditor extends Editor {
|
|
|
187
193
|
static readonly SHIMMER_PERIOD_MS = 1800;
|
|
188
194
|
/** Decorate magic keywords, attachments, and the queue-composer header/list markers.
|
|
189
195
|
* Queue shorthand reserves its first logical line as a dim `Queueing` label; sequential
|
|
190
|
-
* item markers use the accent color so separate follow-ups remain visible while composing.
|
|
196
|
+
* item markers use the accent color so separate follow-ups remain visible while composing.
|
|
197
|
+
* Called once per layout segment, so whole-buffer inputs are computed once per text revision. */
|
|
191
198
|
decorateText: (text: string, context: EditorTextDecorationContext) => string;
|
|
192
199
|
/**
|
|
193
200
|
* TSP decorations: magic keywords shimmer (terminal-clocked) in the accent
|
|
@@ -213,8 +220,10 @@ export declare class CustomEditor extends Editor {
|
|
|
213
220
|
* once after construction (and again after `setEditorComponent` swaps the
|
|
214
221
|
* editor). Passing `undefined` clears any pending frame. */
|
|
215
222
|
setShimmerRepaintHandler(handler: (() => void) | undefined): void;
|
|
216
|
-
/**
|
|
217
|
-
|
|
223
|
+
/** Editing is available during bootstrap; atomic sends wait until submission is wired and enabled. */
|
|
224
|
+
protected get nativeSendable(): boolean;
|
|
225
|
+
/** Viewing a subagent, the draft goes to it: the placeholder names it; else the session's title, quoted in italics. */
|
|
226
|
+
describePlaceholder: () => TspText;
|
|
218
227
|
/** A shell-mode draft highlights as its language. */
|
|
219
228
|
describeLanguage: () => string | undefined;
|
|
220
229
|
/** Host-owned live state for the TSP composer (shell mode, effort chip, send/stop). */
|
|
@@ -227,7 +236,8 @@ export declare class CustomEditor extends Editor {
|
|
|
227
236
|
* The TSP composer: role `zeta.editor[.bash|.python]` (tone `pending` while
|
|
228
237
|
* a turn runs) over the context hairline, the viewing header while a
|
|
229
238
|
* subagent is focused, the attachment chips, a `line` row of the
|
|
230
|
-
* shell-mode chip and the input, and the `bar`: model chip, effort chip
|
|
239
|
+
* shell-mode chip and the input, and the `bar`: model chip, effort chip
|
|
240
|
+
* (or the effort glyph as the model chip's icon), the generation rate,
|
|
231
241
|
* the other status facts, usage, then send (Stop while a turn runs).
|
|
232
242
|
* Clicks come back as `status.model`, `thinking.cycle`, `submit`,
|
|
233
243
|
* `interrupt` and `focus:<id>` actions.
|
|
@@ -237,7 +247,8 @@ export declare class CustomEditor extends Editor {
|
|
|
237
247
|
* Clicks on the composer's controls take the same paths as their keys: ⇧⇥,
|
|
238
248
|
* ⏎ and Esc; the viewing header's links (`focus:<id>`) go to the host,
|
|
239
249
|
* the status facts' clicks (`status.*`) to their source. Selection edits
|
|
240
|
-
* go to the buffer
|
|
250
|
+
* go to the buffer; `send` submits its own prompt after saving the old draft
|
|
251
|
+
* for recall and waiting for in-flight clipboard work.
|
|
241
252
|
*/
|
|
242
253
|
handleNativeEvent(event: NativeUiEvent): void;
|
|
243
254
|
onEscape?: () => void;
|
|
@@ -268,9 +279,9 @@ export declare class CustomEditor extends Editor {
|
|
|
268
279
|
onLeftAtStart?: () => void;
|
|
269
280
|
/** Called when the viewing header asks to view agent `id` ({@link MAIN_AGENT_ID}: the main session). */
|
|
270
281
|
onFocusAgent?: (id: string) => void;
|
|
271
|
-
/**
|
|
272
|
-
* stays out of Vim's Normal/Visual modes (where the space bar is the `l` motion)
|
|
273
|
-
* open autocomplete menu. */
|
|
282
|
+
/** Configurable push-to-talk; set its `handler` to enable it. It is a text-composition gesture, so
|
|
283
|
+
* it stays out of Vim's Normal/Visual modes (where the space bar is the `l` motion), away from an
|
|
284
|
+
* open autocomplete menu, and out of a pending character jump (whose target may be the key). */
|
|
274
285
|
readonly spaceHold: SpaceHoldGesture;
|
|
275
286
|
setActionKeys(action: ConfigurableEditorAction, keys: KeyId[]): void;
|
|
276
287
|
/**
|
|
@@ -285,6 +296,7 @@ export declare class CustomEditor extends Editor {
|
|
|
285
296
|
* Clear all custom key handlers.
|
|
286
297
|
*/
|
|
287
298
|
clearCustomKeyHandlers(): void;
|
|
299
|
+
capturesInput(data: string): boolean;
|
|
288
300
|
handleInput(data: string): void;
|
|
289
301
|
/**
|
|
290
302
|
* Route a keystroke through the base text-editor pipeline only, skipping the
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
* to the session's `local://` root, and generated video contact-sheet previews.
|
|
5
5
|
* Symbol metadata stays out of serialized/model-bound image data while traveling
|
|
6
6
|
* with the draft object, until AgentSession creates the hidden companion message
|
|
7
|
-
* that tells the model the path
|
|
7
|
+
* that tells the model the path. The model keeps `local://` references across
|
|
8
|
+
* `/move`; chips for internal URLs instead use a stable blob copy.
|
|
8
9
|
*/
|
|
9
10
|
import type { ImageContent } from "@linxiraos/pi-ai";
|
|
10
11
|
/** How an image attachment's backing file entered the session. */
|
|
@@ -15,14 +15,18 @@ export interface AssistantMessageHost {
|
|
|
15
15
|
readonly viewSession: AssistantMessageSession;
|
|
16
16
|
readonly effectiveHideThinkingBlock: boolean;
|
|
17
17
|
readonly proseOnlyThinking: boolean;
|
|
18
|
+
readonly expandThinkingBlocks: boolean;
|
|
18
19
|
readonly assistantImagesVisible: boolean;
|
|
20
|
+
/** Whether the viewed session's tables get charts: the main session's do, a focused subagent's do not. */
|
|
21
|
+
readonly tableChartsVisible: boolean;
|
|
19
22
|
readonly hideToolActivity: boolean;
|
|
20
23
|
readonly toolOutputExpanded: boolean;
|
|
21
24
|
readonly ui: {
|
|
22
25
|
requestRender(): void;
|
|
23
26
|
readonly imageBudget: ImageBudget;
|
|
24
27
|
};
|
|
25
|
-
|
|
28
|
+
/** Resolve already-extracted Markdown link destinations to local targets. */
|
|
29
|
+
resolveAssistantMessageLinkHrefs(hrefs: readonly string[]): Promise<ReadonlyMap<string, string>>;
|
|
26
30
|
}
|
|
27
31
|
/**
|
|
28
32
|
* Resolve and cache the current session's model-authored prose links. Existing
|
|
@@ -19,7 +19,7 @@ export declare function applyModelMentionCompletion(lines: string[], cursorLine:
|
|
|
19
19
|
};
|
|
20
20
|
/**
|
|
21
21
|
* Create a session-scoped model candidate lookup using picker ordering. The
|
|
22
|
-
* scope and
|
|
22
|
+
* scope and its prepared ranker are reused across queries until their inputs change.
|
|
23
23
|
*/
|
|
24
24
|
export declare function createModelMentionSource(host: {
|
|
25
25
|
source: ModelBrowserSource;
|
|
@@ -14,7 +14,12 @@ export declare const WELCOME_LSP_SLOTS = 4;
|
|
|
14
14
|
* `r` is a uniform sample in [0, 1). Returns "" when `tips` is empty.
|
|
15
15
|
* Exported for tests. */
|
|
16
16
|
export declare function pickWeightedTip(tips: readonly string[], r: number): string;
|
|
17
|
-
|
|
17
|
+
/**
|
|
18
|
+
* The welcome tip as lines of at most `width` columns: `Tip:` and the body
|
|
19
|
+
* wrapped together, with no indent, so the banner can center each line.
|
|
20
|
+
* `[]` when `width` leaves no room for a useful line.
|
|
21
|
+
*/
|
|
22
|
+
export declare function renderWelcomeTip(tip: string, width: number, phase?: number): string[];
|
|
18
23
|
export interface RecentSession {
|
|
19
24
|
name: string;
|
|
20
25
|
timeAgo: string;
|
|
@@ -37,7 +42,7 @@ export declare class WelcomeComponent implements Component {
|
|
|
37
42
|
private recentSessions;
|
|
38
43
|
/** Detected project servers; `null` means LSP is disabled and hides the section. */
|
|
39
44
|
private lspServers;
|
|
40
|
-
constructor(version: string, modelName
|
|
45
|
+
constructor(version: string, modelName?: string, providerName?: string, recentSessions?: RecentSession[],
|
|
41
46
|
/** Detected project servers; `null` means LSP is disabled and hides the section. */
|
|
42
47
|
lspServers?: LspServerInfo[] | null);
|
|
43
48
|
get tip(): string | undefined;
|
|
@@ -92,6 +92,7 @@ export declare class OutputPane implements Component {
|
|
|
92
92
|
describe(_cx: DescribeContext): NativeNode;
|
|
93
93
|
render(width: number): readonly string[];
|
|
94
94
|
invalidate(): void;
|
|
95
|
+
releaseRenderCaches(): void;
|
|
95
96
|
}
|
|
96
97
|
/** Default styling for plain tool output while preserving existing ANSI. */
|
|
97
98
|
export declare function styleToolOutputLine(line: string, theme: Theme): string;
|
|
@@ -298,6 +298,7 @@ export interface RenderedStringCache {
|
|
|
298
298
|
export declare function createRenderedStringCache(): RenderedStringCache;
|
|
299
299
|
/** Drop the memo so the next lookup re-renders (e.g. the render function identity changed). */
|
|
300
300
|
export declare function invalidateRenderedStringCache(cache: RenderedStringCache): void;
|
|
301
|
+
export declare function releaseRenderedStringCache(cache: RenderedStringCache): void;
|
|
301
302
|
/** Reuse a rendered string while its theme, expansion, content, and salt match. */
|
|
302
303
|
export declare function cachedRenderedString(cache: RenderedStringCache | undefined, theme: Theme, expanded: boolean, salt: string, content: string, render: () => string): string;
|
|
303
304
|
/**
|
|
@@ -46,6 +46,11 @@ export interface ToolCardOptions {
|
|
|
46
46
|
paddingY?: number;
|
|
47
47
|
ignoreTight?: boolean;
|
|
48
48
|
onInvalidate?: () => void;
|
|
49
|
+
/**
|
|
50
|
+
* Drop builder-owned memos the next build recomputes. Called by
|
|
51
|
+
* {@link ToolCard.releaseRenderCaches}, which never calls `onInvalidate`.
|
|
52
|
+
*/
|
|
53
|
+
onReleaseRenderCaches?: () => void;
|
|
49
54
|
onDispose?: () => void;
|
|
50
55
|
}
|
|
51
56
|
/** Map transcript lifecycle terminology onto the output frame's visual states. */
|
|
@@ -71,6 +76,7 @@ export declare class ToolCard implements Component {
|
|
|
71
76
|
handleInput(data: string): void;
|
|
72
77
|
setIgnoreTight(ignore: boolean): void;
|
|
73
78
|
invalidate(): void;
|
|
79
|
+
releaseRenderCaches(): void;
|
|
74
80
|
dispose(): void;
|
|
75
81
|
}
|
|
76
82
|
/** Construct a lazy framed tool card. */
|
|
@@ -20,6 +20,8 @@ export declare class WidthAwareText implements Component {
|
|
|
20
20
|
setCustomBgFn(customBgFn?: (text: string) => string): void;
|
|
21
21
|
setIgnoreTight(ignore: boolean): this;
|
|
22
22
|
invalidate(): void;
|
|
23
|
+
/** The formatted text stays: the inner `Text` renders from it, so dropping it would free nothing. */
|
|
24
|
+
releaseRenderCaches(): void;
|
|
23
25
|
/**
|
|
24
26
|
* Re-run the formatter on the next render because its inputs changed.
|
|
25
27
|
* Unlike {@link invalidate}, the inner `Text` keeps its wrap cache, so a
|
|
@@ -28,6 +28,7 @@ export interface SetupHost extends SetupUiHost {
|
|
|
28
28
|
readonly disabledProviders: readonly string[];
|
|
29
29
|
readonly authStorage: AuthStorage;
|
|
30
30
|
readonly modelSource: ModelBrowserSource;
|
|
31
|
+
/** Available and catalog models of every kind; role chips resolve over all of them, rows list chat models. */
|
|
31
32
|
getModels(): {
|
|
32
33
|
available: Model[];
|
|
33
34
|
all: Model[];
|
|
@@ -1,45 +1,60 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import { type KeyId } from "./keys.js";
|
|
2
|
+
/** Printable text a push-to-talk candidate key types (plain or shifted single characters and Space),
|
|
3
|
+
* or undefined for non-printable keys and chords, which the gesture reserves instead of typing. */
|
|
4
|
+
export declare function getSpaceHoldText(data: string, canonical: string | undefined): string | undefined;
|
|
5
|
+
/** Max gap (ms) between two configured-key presses for a later one to count as OS key auto-repeat
|
|
6
|
+
* rather than a deliberate press. OS auto-repeat is fast; a deliberate tap (even a fast one) is slower. */
|
|
3
7
|
export declare const SPACE_REPEAT_MAX_GAP_MS = 120;
|
|
4
|
-
/** Two consecutive inter-
|
|
8
|
+
/** Two consecutive inter-key gaps are "mechanical" (machine-driven auto-repeat) when both are
|
|
5
9
|
* within {@link SPACE_REPEAT_MAX_GAP_MS} and differ by no more than this — an absolute jitter floor
|
|
6
10
|
* or, for slower repeat rates, {@link SPACE_REPEAT_JITTER_RATIO} of the smaller gap. OS key-repeat
|
|
7
|
-
* is metronomic;
|
|
8
|
-
* steady. */
|
|
11
|
+
* is metronomic; human typing is irregular, so its deltas do not stay this steady. */
|
|
9
12
|
export declare const SPACE_REPEAT_JITTER_MS = 18;
|
|
10
13
|
export declare const SPACE_REPEAT_JITTER_RATIO = 0.35;
|
|
11
|
-
/** Consecutive mechanical (fast + steady) deltas that confirm
|
|
12
|
-
* recording. Needs a sustained metronomic cadence, so jittery
|
|
14
|
+
/** Consecutive mechanical (fast + steady) deltas that confirm a configured key is held and start
|
|
15
|
+
* recording. Needs a sustained metronomic cadence, so jittery typing and deliberate taps never
|
|
13
16
|
* reach it. */
|
|
14
17
|
export declare const SPACE_HOLD_MECHANICAL_RUN = 2;
|
|
15
|
-
/** Idle gap (ms) after the last repeated
|
|
16
|
-
*
|
|
18
|
+
/** Idle gap (ms) after the last repeated configured-key press that counts as release and ends
|
|
19
|
+
* push-to-talk. Must comfortably exceed the OS key-repeat interval. */
|
|
17
20
|
export declare const SPACE_HOLD_RELEASE_MS = 250;
|
|
18
|
-
/**
|
|
21
|
+
/** A release timer firing more than this (ms) past its deadline means the event loop stalled (a
|
|
22
|
+
* synchronous microphone open, GC, a heavy render) while the bar may still be held: the repeats
|
|
23
|
+
* emitted during the stall are queued but unread, so the stall must not read as a release. */
|
|
24
|
+
export declare const SPACE_HOLD_STALL_SLACK_MS = 100;
|
|
25
|
+
/** What a recognized push-to-talk hold drives — the start and stop callbacks. */
|
|
19
26
|
export interface SpaceHoldHandler {
|
|
20
|
-
/** Gate for the gesture. Returns false to
|
|
21
|
-
* disabling push-to-talk restores plain space behavior. */
|
|
27
|
+
/** Gate for the gesture. Returns false to let matching keys behave normally. */
|
|
22
28
|
enabled(): boolean;
|
|
23
|
-
/** A sustained hold was recognized
|
|
29
|
+
/** A sustained hold was recognized; any safely typed candidate text has already been deleted. */
|
|
24
30
|
onStart(): void;
|
|
25
|
-
/** The held
|
|
31
|
+
/** The held key was released (an idle gap with no further repeats, or any other key). */
|
|
26
32
|
onEnd(): void;
|
|
27
33
|
}
|
|
28
34
|
/** What the host must do with a keypress after {@link SpaceHoldGesture.process} has seen it:
|
|
29
|
-
* `"pass"` — handle it normally; `"type"` — insert
|
|
30
|
-
* turns into a hold); `"swallow"` — drop it, the gesture consumed it. */
|
|
35
|
+
* `"pass"` — handle it normally; `"type"` — insert its safely decoded printable text now (it is
|
|
36
|
+
* tracked back out if the run turns into a hold); `"swallow"` — drop it, the gesture consumed it. */
|
|
31
37
|
export type SpaceHoldStep = "pass" | "type" | "swallow";
|
|
32
|
-
/**
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
* taps are too slow, so neither escalates and both keep typing real spaces; the few spaces typed
|
|
37
|
-
* before a real hold is recognized are tracked back out of the host input. */
|
|
38
|
+
/** Push-to-talk key-hold state machine. A held key emits OS auto-repeat at a steady fast interval.
|
|
39
|
+
* We watch inter-key deltas and only recognize a hold once {@link SPACE_HOLD_MECHANICAL_RUN}
|
|
40
|
+
* consecutive deltas are mechanical (see {@link gapsAreMechanical}). Deliberate taps and jittery
|
|
41
|
+
* runs stay typed; only text typed during the current steady run is removed on recognition. */
|
|
38
42
|
export declare class SpaceHoldGesture {
|
|
39
43
|
#private;
|
|
40
|
-
/**
|
|
44
|
+
/** Configured alternative keys. Alternatives are tracked independently and never combine into one run. */
|
|
45
|
+
get keys(): readonly KeyId[];
|
|
46
|
+
set keys(keys: readonly KeyId[]);
|
|
47
|
+
/** Unset (the default) keeps configured keys behaving normally. */
|
|
41
48
|
handler: SpaceHoldHandler | undefined;
|
|
42
49
|
constructor(deleteTyped: (count: number) => void, allowed?: () => boolean);
|
|
43
|
-
/**
|
|
44
|
-
|
|
50
|
+
/** Pure focused-owner preflight on raw input: whether the key must reach the host before
|
|
51
|
+
* TUI-wide input listeners. Only non-printable bindings are claimed — they would otherwise
|
|
52
|
+
* trigger app shortcuts mid-hold; printable candidates keep the normal listener path so
|
|
53
|
+
* raw-input observers (e.g. extensions) still see typed text, as they did before remapping. */
|
|
54
|
+
shouldRoute(data: string): boolean;
|
|
55
|
+
/** Feed one canonical keypress and, when safely printable, its decoded text length. The host
|
|
56
|
+
* records the actual inserted length with {@link recordTyped} after applying normal typing. */
|
|
57
|
+
process(key: string | undefined, insertedCharacterLength?: number): SpaceHoldStep;
|
|
58
|
+
/** Account for text the host actually inserted for the preceding `"type"` step. */
|
|
59
|
+
recordTyped(insertedCharacterLength: number): void;
|
|
45
60
|
}
|
|
@@ -86,6 +86,7 @@ export declare class StatusLineComponent<TSession extends StatusLineSession = St
|
|
|
86
86
|
setPlanModeStatus(status: {
|
|
87
87
|
enabled: boolean;
|
|
88
88
|
paused: boolean;
|
|
89
|
+
workflow?: "parallel" | "iterative" | "ultra";
|
|
89
90
|
} | undefined): void;
|
|
90
91
|
setLoopModeStatus(status: NonNullable<SegmentContext["loopMode"]> | undefined): void;
|
|
91
92
|
setGoalModeStatus(status: {
|
|
@@ -113,6 +114,8 @@ export declare class StatusLineComponent<TSession extends StatusLineSession = St
|
|
|
113
114
|
setRecording(recording: boolean): void;
|
|
114
115
|
/** Set the callback that presents detected Codex reset celebrations, or clear it with `undefined`. */
|
|
115
116
|
setCodexResetFireworksHandler(handler: ((event: CodexResetFireworksEvent) => void) | undefined): void;
|
|
117
|
+
/** Set the callback that presents the first pool-wide saved-reset expiry warning, or clear it with `undefined`. */
|
|
118
|
+
setResetExpiryNoticeHandler(handler: ((notice: string) => void) | undefined): void;
|
|
116
119
|
setHookStatus(key: string, text: string | undefined): void;
|
|
117
120
|
watchBranch(onBranchChange: () => void): void;
|
|
118
121
|
dispose(): void;
|
|
@@ -3,6 +3,7 @@ import type { CompactionSettings } from "@linxiraos/pi-agent-core/compaction";
|
|
|
3
3
|
import type { Tool as AiTool, Model } from "@linxiraos/pi-ai";
|
|
4
4
|
import type { Theme } from "../theme/index.js";
|
|
5
5
|
import { Container } from "../tui.js";
|
|
6
|
+
import type { TspText } from "@linxiraos/pi-wire";
|
|
6
7
|
import type { DescribeContext, NativeNode } from "../native/node.js";
|
|
7
8
|
interface ContextSkill {
|
|
8
9
|
readonly name: string;
|
|
@@ -154,6 +155,8 @@ export declare function computeNonMessageBreakdown(session: NonMessageTokenSourc
|
|
|
154
155
|
* session and model.
|
|
155
156
|
*/
|
|
156
157
|
export declare function computeContextBreakdown(session: ContextUsageSession, options: ContextUsageOptions): ContextBreakdown;
|
|
158
|
+
/** The `/context` title: the model and its window once a model is selected. */
|
|
159
|
+
export declare function contextUsageHead(breakdown: ContextBreakdown): TspText;
|
|
157
160
|
/**
|
|
158
161
|
* Native context-usage panel for terminals without `meter`: the cell grid as
|
|
159
162
|
* unwrapped styled rows beside the legend. The terminal places the legend
|
|
@@ -161,15 +164,14 @@ export declare function computeContextBreakdown(session: ContextUsageSession, op
|
|
|
161
164
|
*/
|
|
162
165
|
export declare function describeContextUsage(breakdown: ContextBreakdown): NativeNode;
|
|
163
166
|
/**
|
|
164
|
-
* The `/context`
|
|
165
|
-
*
|
|
166
|
-
*
|
|
167
|
+
* The `/context` report body, without a frame or title of its own (the panel
|
|
168
|
+
* showing it is titled {@link contextUsageHead}): ANSI renders the cell grid
|
|
169
|
+
* beside the legend; natively it is drawn with `meter`s where the terminal has
|
|
170
|
+
* them and as the glyph grid otherwise.
|
|
167
171
|
*/
|
|
168
172
|
export declare class ContextUsageView extends Container {
|
|
169
173
|
#private;
|
|
170
174
|
constructor(breakdown: ContextBreakdown, theme: Theme);
|
|
171
|
-
/** Replace the shown breakdown in place, refreshing both the ANSI and native views. */
|
|
172
|
-
setBreakdown(breakdown: ContextBreakdown): void;
|
|
173
175
|
describe(cx: DescribeContext): NativeNode;
|
|
174
176
|
}
|
|
175
177
|
/**
|
|
@@ -2,7 +2,7 @@ import type { AgentMessage, ThinkingLevel } from "@linxiraos/pi-agent-core";
|
|
|
2
2
|
import type { Tool, UsageLimit, UsageReport } from "@linxiraos/pi-ai";
|
|
3
3
|
import type { Model } from "@linxiraos/pi-catalog/types";
|
|
4
4
|
import type { CompactionBoundaries } from "./context-usage.js";
|
|
5
|
-
import type { StatusLineSettings } from "./types.js";
|
|
5
|
+
import type { StatusLineSettings, StatusResetExpiry } from "./types.js";
|
|
6
6
|
export interface StatusAccountIdentity {
|
|
7
7
|
accountId?: string;
|
|
8
8
|
email?: string;
|
|
@@ -126,6 +126,9 @@ export interface StatusLineHost<TSession extends StatusLineSession = StatusLineS
|
|
|
126
126
|
}>;
|
|
127
127
|
calculateTokensPerSecond(messages: readonly AgentMessage[], isStreaming: boolean): number | null;
|
|
128
128
|
limitMatchesActiveAccount(report: UsageReport, limit: UsageLimit, identity: StatusAccountIdentity): boolean;
|
|
129
|
+
classifyResetExpiry?(report: UsageReport, nowMs: number): StatusResetExpiry | undefined;
|
|
130
|
+
/** One-line warning for saved resets anywhere in the pool that expire within 24 hours. */
|
|
131
|
+
resetExpiryNotice?(reports: readonly UsageReport[], nowMs: number): string | undefined;
|
|
129
132
|
computeCompactionBoundaries(session: TSession, contextWindow: number, model?: Model): CompactionBoundaries | null;
|
|
130
133
|
}
|
|
131
134
|
export interface FooterHost {
|
|
@@ -7,6 +7,8 @@ export type { SegmentContext } from "./types.js";
|
|
|
7
7
|
* model segment and the composer's effort chip.
|
|
8
8
|
*/
|
|
9
9
|
export declare function thinkingLevelWord(session: Pick<StatusLineSession, "state" | "isAutoThinking" | "autoResolvedThinkingLevel">): string | undefined;
|
|
10
|
+
/** Zeta-only: the ultra plan workflow gets its own status-line label (lost in the v18.8.8 merge once already). */
|
|
11
|
+
export declare const PLAN_ULTRA_LABEL = "Plan-Ultra";
|
|
10
12
|
export declare const SEGMENTS: Record<StatusLineSegmentId, StatusLineSegment>;
|
|
11
13
|
export declare function renderSegment(id: StatusLineSegmentId, ctx: SegmentContext): RenderedSegment;
|
|
12
14
|
/** Native description of one segment; null when it is hidden or unknown. */
|
|
@@ -93,6 +93,8 @@ export interface SegmentContext {
|
|
|
93
93
|
planMode: {
|
|
94
94
|
enabled: boolean;
|
|
95
95
|
paused: boolean;
|
|
96
|
+
/** Plan workflow variant; `ultra` renders as `Plan-Ultra` in the mode segment. */
|
|
97
|
+
workflow?: "parallel" | "iterative" | "ultra";
|
|
96
98
|
} | null;
|
|
97
99
|
prewalk: {
|
|
98
100
|
enabled: boolean;
|
|
@@ -112,7 +114,7 @@ export interface SegmentContext {
|
|
|
112
114
|
} | null;
|
|
113
115
|
/** Modal editing state, or null when `tui.vimMode` is off. */
|
|
114
116
|
vim: {
|
|
115
|
-
mode: "insert" | "normal" | "visual" | "visual-line";
|
|
117
|
+
mode: "insert" | "normal" | "visual" | "visual-line" | "replace";
|
|
116
118
|
/** Half-typed operator/count (`"2d"`), empty when nothing is pending. */
|
|
117
119
|
pending: string;
|
|
118
120
|
/** Lines spanned by the active Visual selection; 0 outside Visual modes. */
|
|
@@ -223,9 +225,18 @@ export interface SegmentContext {
|
|
|
223
225
|
expiryHours?: number;
|
|
224
226
|
expired?: boolean;
|
|
225
227
|
unavailableReason?: string;
|
|
228
|
+
expiring?: StatusResetExpiry;
|
|
226
229
|
};
|
|
227
230
|
} | null;
|
|
228
231
|
}
|
|
232
|
+
/** How close an account's saved resets are to expiring, when it is worth a warning. */
|
|
233
|
+
export interface StatusResetExpiry {
|
|
234
|
+
/** `soon`: within 7 days; `imminent`: within 24 hours. */
|
|
235
|
+
tier: "soon" | "imminent";
|
|
236
|
+
count: number;
|
|
237
|
+
/** Expiry of the reset the warning is about (epoch ms); it can be later than the soonest banked one. */
|
|
238
|
+
expiresAtMs: number;
|
|
239
|
+
}
|
|
229
240
|
export interface RenderedSegment {
|
|
230
241
|
content: string;
|
|
231
242
|
visible: boolean;
|
|
@@ -245,8 +256,8 @@ export interface SegmentView {
|
|
|
245
256
|
}
|
|
246
257
|
/**
|
|
247
258
|
* The status line's facts for the native composer. A TSP terminal shows no
|
|
248
|
-
* status strip: the tab title carries the session, the pane header the path
|
|
249
|
-
* and
|
|
259
|
+
* status strip: the tab title carries the session, the pane header the path,
|
|
260
|
+
* and the composer the rest (the git branch among its facts).
|
|
250
261
|
*/
|
|
251
262
|
export interface ComposerFacts {
|
|
252
263
|
/**
|