@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
|
@@ -31,6 +31,15 @@ export interface OutputSummary {
|
|
|
31
31
|
columnDroppedBytes?: number;
|
|
32
32
|
/** Number of distinct lines that hit the per-line column cap. */
|
|
33
33
|
columnTruncatedLines?: number;
|
|
34
|
+
/**
|
|
35
|
+
* 1-indexed first and last lines the column cap cut, numbered as in the
|
|
36
|
+
* artifact. Absent when the numbering cannot match the artifact (an inline
|
|
37
|
+
* substitute was capped, or `replace()` rewrote the buffer).
|
|
38
|
+
*/
|
|
39
|
+
columnTruncatedRange?: {
|
|
40
|
+
first: number;
|
|
41
|
+
last: number;
|
|
42
|
+
};
|
|
34
43
|
/** Configured per-line column cap in effect (UTF-8 bytes), when > 0. */
|
|
35
44
|
columnMax?: number;
|
|
36
45
|
/** Artifact ID for internal URL access (artifact://<id>) when truncated */
|
|
@@ -236,7 +245,8 @@ export declare class OutputSink {
|
|
|
236
245
|
constructor(options?: OutputSinkOptions);
|
|
237
246
|
/**
|
|
238
247
|
* Push a chunk of output. The buffer management and onChunk callback run
|
|
239
|
-
* synchronously
|
|
248
|
+
* synchronously; onChunk fires after the chunk is stored, so {@link preview}
|
|
249
|
+
* already includes it. File sink writes are deferred and serialized internally.
|
|
240
250
|
*
|
|
241
251
|
* `inline` substitutes a bounded representation for the in-memory buffer and
|
|
242
252
|
* live preview while the complete chunk is mirrored to the artifact.
|
|
@@ -260,6 +270,15 @@ export declare class OutputSink {
|
|
|
260
270
|
* branch in `dump()` against stale totals.
|
|
261
271
|
*/
|
|
262
272
|
replace(text: string): void;
|
|
273
|
+
/**
|
|
274
|
+
* Current inline view without finalizing: the body {@link dump} would
|
|
275
|
+
* return right now (head + elision marker + rolling tail), minus any notice
|
|
276
|
+
* and minus the newline `dump()` appends after output that ends in a bare
|
|
277
|
+
* carriage return. Each call trims the rolling tail to its budget (a copy
|
|
278
|
+
* of the tail window once it overflowed), so call it from a throttled
|
|
279
|
+
* onChunk (`chunkThrottleMs`), not once per raw chunk.
|
|
280
|
+
*/
|
|
281
|
+
preview(): string;
|
|
263
282
|
dump(notice?: string): Promise<OutputSummary>;
|
|
264
283
|
/**
|
|
265
284
|
* Release the artifact spill descriptor on an exit path that skips
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import * as fs from "node:fs";
|
|
1
2
|
import type { AgentToolUpdateCallback } from "@linxiraos/pi-agent-core";
|
|
2
3
|
import { formatBytes, materializeString, sanitizeText } from "@linxiraos/pi-utils";
|
|
3
4
|
import { sanitizeWithOptionalSixelPassthrough } from "../render/sixel";
|
|
@@ -51,6 +52,12 @@ export interface OutputSummary {
|
|
|
51
52
|
columnDroppedBytes?: number;
|
|
52
53
|
/** Number of distinct lines that hit the per-line column cap. */
|
|
53
54
|
columnTruncatedLines?: number;
|
|
55
|
+
/**
|
|
56
|
+
* 1-indexed first and last lines the column cap cut, numbered as in the
|
|
57
|
+
* artifact. Absent when the numbering cannot match the artifact (an inline
|
|
58
|
+
* substitute was capped, or `replace()` rewrote the buffer).
|
|
59
|
+
*/
|
|
60
|
+
columnTruncatedRange?: { first: number; last: number };
|
|
54
61
|
/** Configured per-line column cap in effect (UTF-8 bytes), when > 0. */
|
|
55
62
|
columnMax?: number;
|
|
56
63
|
/** Artifact ID for internal URL access (artifact://<id>) when truncated */
|
|
@@ -232,6 +239,10 @@ function truncateBytesWindowed(
|
|
|
232
239
|
? data.substring(0, Math.min(data.length, maxBytes))
|
|
233
240
|
: data.substring(Math.max(0, data.length - maxBytes));
|
|
234
241
|
|
|
242
|
+
// All-ASCII window: one byte per char, so it is exactly `maxBytes` bytes on a boundary.
|
|
243
|
+
const windowBytes = Buffer.byteLength(window, "utf-8");
|
|
244
|
+
if (windowBytes === window.length) return { text: window, bytes: windowBytes };
|
|
245
|
+
|
|
235
246
|
const buf = Buffer.from(window, "utf-8");
|
|
236
247
|
|
|
237
248
|
if (mode === "head") {
|
|
@@ -875,6 +886,8 @@ export class TailBuffer {
|
|
|
875
886
|
export class OutputSink {
|
|
876
887
|
#buffer = "";
|
|
877
888
|
#bufferBytes = 0;
|
|
889
|
+
/** The overflowed tail window may exceed its budget until {@link #trimTail} runs. */
|
|
890
|
+
#tailUntrimmed = false;
|
|
878
891
|
#head = "";
|
|
879
892
|
#headBytes = 0;
|
|
880
893
|
#headLines = 0; // newline count inside #head
|
|
@@ -894,6 +907,10 @@ export class OutputSink {
|
|
|
894
907
|
#columnEllipsisAdded = false;
|
|
895
908
|
#columnDroppedBytes = 0;
|
|
896
909
|
#columnTruncatedLines = 0;
|
|
910
|
+
#columnFirstCutLine = 0;
|
|
911
|
+
#columnLastCutLine = 0;
|
|
912
|
+
/** Set once a cut line's number may not match the artifact; the range is then withheld. */
|
|
913
|
+
#columnCutLinesUnmapped = false;
|
|
897
914
|
#file?: {
|
|
898
915
|
path: string;
|
|
899
916
|
artifactId?: string;
|
|
@@ -1001,7 +1018,8 @@ export class OutputSink {
|
|
|
1001
1018
|
|
|
1002
1019
|
/**
|
|
1003
1020
|
* Push a chunk of output. The buffer management and onChunk callback run
|
|
1004
|
-
* synchronously
|
|
1021
|
+
* synchronously; onChunk fires after the chunk is stored, so {@link preview}
|
|
1022
|
+
* already includes it. File sink writes are deferred and serialized internally.
|
|
1005
1023
|
*
|
|
1006
1024
|
* `inline` substitutes a bounded representation for the in-memory buffer and
|
|
1007
1025
|
* live preview while the complete chunk is mirrored to the artifact.
|
|
@@ -1014,6 +1032,8 @@ export class OutputSink {
|
|
|
1014
1032
|
const substituted = inline !== undefined;
|
|
1015
1033
|
const inlineChunk = inline === undefined ? chunk : sanitizeText(inline);
|
|
1016
1034
|
|
|
1035
|
+
this.#store(chunk, inlineChunk, substituted);
|
|
1036
|
+
|
|
1017
1037
|
// Throttled onChunk: coalesce chunks arriving inside the throttle window.
|
|
1018
1038
|
// A timer flushes quiet tails at the throttle boundary; dump() catches a
|
|
1019
1039
|
// final pending chunk when the process exits before that timer fires.
|
|
@@ -1028,9 +1048,15 @@ export class OutputSink {
|
|
|
1028
1048
|
this.#schedulePendingChunkFlush();
|
|
1029
1049
|
}
|
|
1030
1050
|
}
|
|
1051
|
+
}
|
|
1031
1052
|
|
|
1053
|
+
/** Count, cap, mirror, and retain one sanitized chunk. */
|
|
1054
|
+
#store(chunk: string, inlineChunk: string, substituted: boolean): void {
|
|
1032
1055
|
const rawBytes = Buffer.byteLength(chunk, "utf-8");
|
|
1033
1056
|
this.#totalBytes += rawBytes;
|
|
1057
|
+
// Line the chunk starts on, as numbered in the artifact; 0 when the capped
|
|
1058
|
+
// inline text is a substitute whose lines do not map onto the artifact.
|
|
1059
|
+
const firstLine = substituted ? 0 : this.#totalLines + 1;
|
|
1034
1060
|
|
|
1035
1061
|
if (chunk.length > 0) {
|
|
1036
1062
|
this.#sawData = true;
|
|
@@ -1041,7 +1067,7 @@ export class OutputSink {
|
|
|
1041
1067
|
// Per-line column cap. State persists across chunks so a mid-line split
|
|
1042
1068
|
// still respects the budget. Operates on the inline chunk; the complete
|
|
1043
1069
|
// chunk is mirrored to the artifact before any cap is applied.
|
|
1044
|
-
const capped = this.#maxColumns > 0 ? this.#applyColumnCap(inlineChunk) : inlineChunk;
|
|
1070
|
+
const capped = this.#maxColumns > 0 ? this.#applyColumnCap(inlineChunk, firstLine) : inlineChunk;
|
|
1045
1071
|
const cappedBytes = capped === inlineChunk ? inlineBytes : Buffer.byteLength(capped, "utf-8");
|
|
1046
1072
|
const cappedThisChunk = cappedBytes < inlineBytes;
|
|
1047
1073
|
if (substituted) this.#truncated = true;
|
|
@@ -1089,11 +1115,13 @@ export class OutputSink {
|
|
|
1089
1115
|
* cap; subsequent bytes are skipped until the next `\n`. State persists
|
|
1090
1116
|
* across calls so a long line split across chunks still produces one marker.
|
|
1091
1117
|
*/
|
|
1092
|
-
#applyColumnCap(chunk: string): string {
|
|
1118
|
+
#applyColumnCap(chunk: string, firstLine: number): string {
|
|
1093
1119
|
if (chunk.length === 0) return chunk;
|
|
1120
|
+
if (!this.#columnEllipsisAdded && this.#fitsColumnCap(chunk)) return chunk;
|
|
1094
1121
|
const max = this.#maxColumns;
|
|
1095
1122
|
const parts: string[] = [];
|
|
1096
1123
|
let cursor = 0;
|
|
1124
|
+
let line = firstLine;
|
|
1097
1125
|
while (cursor < chunk.length) {
|
|
1098
1126
|
const nlIdx = chunk.indexOf(NL, cursor);
|
|
1099
1127
|
const segEnd = nlIdx === -1 ? chunk.length : nlIdx;
|
|
@@ -1124,6 +1152,12 @@ export class OutputSink {
|
|
|
1124
1152
|
parts.push(ELLIPSIS);
|
|
1125
1153
|
this.#columnDroppedBytes += segBytes - keptBytes;
|
|
1126
1154
|
this.#columnTruncatedLines++;
|
|
1155
|
+
if (line > 0) {
|
|
1156
|
+
if (this.#columnFirstCutLine === 0) this.#columnFirstCutLine = line;
|
|
1157
|
+
this.#columnLastCutLine = line;
|
|
1158
|
+
} else {
|
|
1159
|
+
this.#columnCutLinesUnmapped = true;
|
|
1160
|
+
}
|
|
1127
1161
|
this.#currentLineBytes += keptBytes + ellipsisBytes;
|
|
1128
1162
|
this.#columnEllipsisAdded = true;
|
|
1129
1163
|
}
|
|
@@ -1134,10 +1168,37 @@ export class OutputSink {
|
|
|
1134
1168
|
this.#currentLineBytes = 0;
|
|
1135
1169
|
this.#columnEllipsisAdded = false;
|
|
1136
1170
|
cursor = nlIdx + 1;
|
|
1171
|
+
if (line > 0) line++;
|
|
1137
1172
|
}
|
|
1138
1173
|
return parts.join("");
|
|
1139
1174
|
}
|
|
1140
1175
|
|
|
1176
|
+
/**
|
|
1177
|
+
* Fast path for {@link #applyColumnCap}: when every line segment fits the
|
|
1178
|
+
* remaining cap even at the 3-bytes-per-code-unit UTF-8 worst case, the
|
|
1179
|
+
* chunk passes through unchanged and only the trailing line width is
|
|
1180
|
+
* measured. Returns false (state untouched) when any line might trip the cap.
|
|
1181
|
+
*/
|
|
1182
|
+
#fitsColumnCap(chunk: string): boolean {
|
|
1183
|
+
const max = this.#maxColumns;
|
|
1184
|
+
let room = max - this.#currentLineBytes;
|
|
1185
|
+
let cursor = 0;
|
|
1186
|
+
for (;;) {
|
|
1187
|
+
const nlIdx = chunk.indexOf(NL, cursor);
|
|
1188
|
+
const segEnd = nlIdx === -1 ? chunk.length : nlIdx;
|
|
1189
|
+
if ((segEnd - cursor) * 3 > room) return false;
|
|
1190
|
+
if (nlIdx === -1) break;
|
|
1191
|
+
cursor = nlIdx + 1;
|
|
1192
|
+
room = max;
|
|
1193
|
+
}
|
|
1194
|
+
if (cursor === 0) {
|
|
1195
|
+
this.#currentLineBytes += Buffer.byteLength(chunk, "utf-8");
|
|
1196
|
+
} else {
|
|
1197
|
+
this.#currentLineBytes = cursor === chunk.length ? 0 : Buffer.byteLength(chunk.substring(cursor), "utf-8");
|
|
1198
|
+
}
|
|
1199
|
+
return true;
|
|
1200
|
+
}
|
|
1201
|
+
|
|
1141
1202
|
// The rolling tail budget is whatever the head window has not consumed of
|
|
1142
1203
|
// the inline budget: `spillThreshold - #headBytes`. While the head window
|
|
1143
1204
|
// fills it shrinks toward `spillThreshold - headLimit`; after `replace()`
|
|
@@ -1171,15 +1232,27 @@ export class OutputSink {
|
|
|
1171
1232
|
const { text, bytes } = truncateTailBytes(chunk, threshold);
|
|
1172
1233
|
this.#buffer = text;
|
|
1173
1234
|
this.#bufferBytes = bytes;
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
this.#buffer += chunk;
|
|
1177
|
-
this.#bufferBytes += dataBytes;
|
|
1178
|
-
|
|
1179
|
-
const { text, bytes } = truncateTailBytes(this.#buffer, threshold);
|
|
1180
|
-
this.#buffer = text;
|
|
1181
|
-
this.#bufferBytes = bytes;
|
|
1235
|
+
this.#tailUntrimmed = false;
|
|
1236
|
+
return;
|
|
1182
1237
|
}
|
|
1238
|
+
// Amortize the trim: let the window grow to 2× the budget before cutting it
|
|
1239
|
+
// back, so steady-state chunks cost an append instead of a window copy.
|
|
1240
|
+
// `#trimTail()` restores the exact budget before the buffer is read.
|
|
1241
|
+
this.#buffer += chunk;
|
|
1242
|
+
this.#bufferBytes += dataBytes;
|
|
1243
|
+
this.#tailUntrimmed = true;
|
|
1244
|
+
if (this.#bufferBytes > threshold * 2) this.#trimTail();
|
|
1245
|
+
}
|
|
1246
|
+
|
|
1247
|
+
/** Cut an overflowed tail window back to the current tail budget. */
|
|
1248
|
+
#trimTail(): void {
|
|
1249
|
+
if (!this.#tailUntrimmed) return;
|
|
1250
|
+
this.#tailUntrimmed = false;
|
|
1251
|
+
const threshold = Math.max(0, this.#spillThreshold - this.#headBytes);
|
|
1252
|
+
if (this.#bufferBytes <= threshold) return;
|
|
1253
|
+
const { text, bytes } = truncateTailBytes(this.#buffer, threshold);
|
|
1254
|
+
this.#buffer = text;
|
|
1255
|
+
this.#bufferBytes = bytes;
|
|
1183
1256
|
}
|
|
1184
1257
|
|
|
1185
1258
|
/**
|
|
@@ -1309,6 +1382,10 @@ export class OutputSink {
|
|
|
1309
1382
|
async #createFileSink(): Promise<void> {
|
|
1310
1383
|
if (!this.#artifactPath || this.#fileReady || this.#artifactError) return;
|
|
1311
1384
|
try {
|
|
1385
|
+
// Bun's Windows FileSink defers the open: an unopenable target (e.g. a
|
|
1386
|
+
// directory) only fails on the first write, misreported as a write
|
|
1387
|
+
// failure. Probe the open eagerly so it stays classified — and terminal.
|
|
1388
|
+
if (process.platform === "win32") fs.closeSync(fs.openSync(this.#artifactPath, "w"));
|
|
1312
1389
|
const sink = Bun.file(this.#artifactPath).writer();
|
|
1313
1390
|
this.#file = { path: this.#artifactPath, artifactId: this.#artifactId, sink };
|
|
1314
1391
|
this.#fileReady = true;
|
|
@@ -1367,6 +1444,7 @@ export class OutputSink {
|
|
|
1367
1444
|
this.#clearPendingChunkTimer();
|
|
1368
1445
|
this.#buffer = text;
|
|
1369
1446
|
this.#bufferBytes = Buffer.byteLength(text, "utf-8");
|
|
1447
|
+
this.#tailUntrimmed = false;
|
|
1370
1448
|
this.#head = "";
|
|
1371
1449
|
this.#headBytes = 0;
|
|
1372
1450
|
this.#headLines = 0;
|
|
@@ -1379,6 +1457,8 @@ export class OutputSink {
|
|
|
1379
1457
|
this.#columnEllipsisAdded = false;
|
|
1380
1458
|
this.#columnDroppedBytes = 0;
|
|
1381
1459
|
this.#columnTruncatedLines = 0;
|
|
1460
|
+
// The artifact keeps the replaced stream, so later line numbers no longer match it.
|
|
1461
|
+
this.#columnCutLinesUnmapped = true;
|
|
1382
1462
|
this.#pendingChunk = "";
|
|
1383
1463
|
this.#pendingCarriageReturn = false;
|
|
1384
1464
|
}
|
|
@@ -1453,22 +1533,31 @@ export class OutputSink {
|
|
|
1453
1533
|
}
|
|
1454
1534
|
}
|
|
1455
1535
|
|
|
1456
|
-
|
|
1457
|
-
|
|
1458
|
-
|
|
1459
|
-
|
|
1460
|
-
|
|
1461
|
-
|
|
1536
|
+
/**
|
|
1537
|
+
* Current inline view without finalizing: the body {@link dump} would
|
|
1538
|
+
* return right now (head + elision marker + rolling tail), minus any notice
|
|
1539
|
+
* and minus the newline `dump()` appends after output that ends in a bare
|
|
1540
|
+
* carriage return. Each call trims the rolling tail to its budget (a copy
|
|
1541
|
+
* of the tail window once it overflowed), so call it from a throttled
|
|
1542
|
+
* onChunk (`chunkThrottleMs`), not once per raw chunk.
|
|
1543
|
+
*/
|
|
1544
|
+
preview(): string {
|
|
1545
|
+
return this.#composeBody().body;
|
|
1546
|
+
}
|
|
1462
1547
|
|
|
1463
|
-
|
|
1464
|
-
|
|
1465
|
-
|
|
1548
|
+
/**
|
|
1549
|
+
* Compose the visible output. With head retention, splice head + marker +
|
|
1550
|
+
* tail when content was elided. Otherwise return the rolling buffer.
|
|
1551
|
+
*/
|
|
1552
|
+
#composeBody(): {
|
|
1553
|
+
body: string;
|
|
1554
|
+
outputBytes: number;
|
|
1555
|
+
outputLines: number;
|
|
1556
|
+
elidedBytes?: number;
|
|
1557
|
+
elidedLines?: number;
|
|
1558
|
+
} {
|
|
1559
|
+
this.#trimTail();
|
|
1466
1560
|
const totalLines = this.#sawData ? this.#totalLines + 1 : 0;
|
|
1467
|
-
|
|
1468
|
-
await this.#finalizeFile();
|
|
1469
|
-
|
|
1470
|
-
// Compose the visible output. With head retention, splice head + marker
|
|
1471
|
-
// + tail when content was elided. Otherwise return the rolling buffer.
|
|
1472
1561
|
const headBytes = this.#headBytes;
|
|
1473
1562
|
const tailBuf = this.#buffer;
|
|
1474
1563
|
const tailBytes = this.#bufferBytes;
|
|
@@ -1479,39 +1568,50 @@ export class OutputSink {
|
|
|
1479
1568
|
// so column-dropped bytes don't inflate the "elided from middle" count.
|
|
1480
1569
|
const effectiveTotalBytes = Math.max(0, this.#totalBytes - this.#columnDroppedBytes);
|
|
1481
1570
|
|
|
1482
|
-
let body: string;
|
|
1483
|
-
let outputBytes: number;
|
|
1484
|
-
let outputLines: number;
|
|
1485
|
-
let elidedBytes: number | undefined;
|
|
1486
|
-
let elidedLines: number | undefined;
|
|
1487
|
-
|
|
1488
1571
|
if (headBytes > 0 && effectiveTotalBytes > headBytes + tailBytes) {
|
|
1489
1572
|
// Middle was elided. Emit head + marker + tail.
|
|
1490
|
-
elidedBytes = Math.max(0, effectiveTotalBytes - headBytes - tailBytes);
|
|
1491
|
-
elidedLines = Math.max(0, totalLines - headLines - tailLines);
|
|
1573
|
+
const elidedBytes = Math.max(0, effectiveTotalBytes - headBytes - tailBytes);
|
|
1574
|
+
const elidedLines = Math.max(0, totalLines - headLines - tailLines);
|
|
1492
1575
|
const marker = formatMiddleElisionMarker(elidedLines, elidedBytes);
|
|
1493
1576
|
const markerBytes = Buffer.byteLength(marker, "utf-8");
|
|
1494
1577
|
const headSep = this.#head.endsWith("\n") ? "" : "\n";
|
|
1495
1578
|
const tailSep = tailBuf.startsWith("\n") ? "" : "\n";
|
|
1496
|
-
|
|
1497
|
-
|
|
1498
|
-
headBytes +
|
|
1499
|
-
|
|
1500
|
-
|
|
1501
|
-
|
|
1502
|
-
|
|
1503
|
-
|
|
1504
|
-
|
|
1505
|
-
} else if (headBytes > 0) {
|
|
1579
|
+
return {
|
|
1580
|
+
body: `${this.#head}${headSep}${marker}${tailSep}${tailBuf}`,
|
|
1581
|
+
outputBytes: headBytes + markerBytes + tailBytes + headSep.length + tailSep.length,
|
|
1582
|
+
outputLines: headLines + 1 + tailLines,
|
|
1583
|
+
elidedBytes,
|
|
1584
|
+
elidedLines,
|
|
1585
|
+
};
|
|
1586
|
+
}
|
|
1587
|
+
if (headBytes > 0) {
|
|
1506
1588
|
// Head + tail combine into the full buffered output (no overlap or elision).
|
|
1507
|
-
body = `${this.#head}${tailBuf}`;
|
|
1508
|
-
|
|
1509
|
-
|
|
1510
|
-
|
|
1511
|
-
|
|
1512
|
-
|
|
1513
|
-
outputLines = tailLines;
|
|
1589
|
+
const body = `${this.#head}${tailBuf}`;
|
|
1590
|
+
return {
|
|
1591
|
+
body,
|
|
1592
|
+
outputBytes: headBytes + tailBytes,
|
|
1593
|
+
outputLines: body.length > 0 ? countNewlines(body) + 1 : 0,
|
|
1594
|
+
};
|
|
1514
1595
|
}
|
|
1596
|
+
return { body: tailBuf, outputBytes: tailBytes, outputLines: tailLines };
|
|
1597
|
+
}
|
|
1598
|
+
|
|
1599
|
+
async dump(notice?: string): Promise<OutputSummary> {
|
|
1600
|
+
if (this.#pendingCarriageReturn) {
|
|
1601
|
+
this.#pendingCarriageReturn = false;
|
|
1602
|
+
this.push(NL);
|
|
1603
|
+
}
|
|
1604
|
+
const noticeLine = notice ? `[${notice}]\n` : "";
|
|
1605
|
+
|
|
1606
|
+
// Flush any chunk still held back by the throttle so the live preview
|
|
1607
|
+
// ends with the complete stream.
|
|
1608
|
+
this.#flushPendingChunk();
|
|
1609
|
+
const totalLines = this.#sawData ? this.#totalLines + 1 : 0;
|
|
1610
|
+
|
|
1611
|
+
await this.#finalizeFile();
|
|
1612
|
+
|
|
1613
|
+
const { body, outputBytes, outputLines, elidedBytes, elidedLines } = this.#composeBody();
|
|
1614
|
+
if (elidedBytes !== undefined) this.#truncated = true;
|
|
1515
1615
|
|
|
1516
1616
|
return {
|
|
1517
1617
|
output: `${noticeLine}${body}`,
|
|
@@ -1525,6 +1625,10 @@ export class OutputSink {
|
|
|
1525
1625
|
columnDroppedBytes: this.#columnDroppedBytes > 0 ? this.#columnDroppedBytes : undefined,
|
|
1526
1626
|
columnTruncatedLines: this.#columnTruncatedLines > 0 ? this.#columnTruncatedLines : undefined,
|
|
1527
1627
|
columnMax: this.#columnTruncatedLines > 0 ? this.#maxColumns : undefined,
|
|
1628
|
+
columnTruncatedRange:
|
|
1629
|
+
this.#columnFirstCutLine > 0 && !this.#columnCutLinesUnmapped
|
|
1630
|
+
? { first: this.#columnFirstCutLine, last: this.#columnLastCutLine }
|
|
1631
|
+
: undefined,
|
|
1528
1632
|
artifactId: this.#artifactError ? undefined : this.#file?.artifactId,
|
|
1529
1633
|
artifactElidedBytes:
|
|
1530
1634
|
this.#artifactError || !this.#file?.artifactId || this.#artifactElidedBytes === 0
|
package/src/tools/task.d.ts
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import type { Usage } from "@linxiraos/pi-ai";
|
|
2
2
|
import type { ThemeColor } from "../theme/theme";
|
|
3
3
|
import type { ConfiguredThinkingLevel } from "../render/render-utils";
|
|
4
|
+
import type { RenderResultOptions, NativeToolView, ToolRenderResult } from "./renderer";
|
|
4
5
|
import { type Component } from "../tui";
|
|
5
|
-
import type { RenderResultOptions } from "./renderer";
|
|
6
6
|
import { type Theme } from "../theme/theme";
|
|
7
|
-
import type { NativeToolView, ToolRenderResult } from "./renderer";
|
|
8
7
|
/** Render context threaded in from `ToolExecutionComponent.#buildRenderContext`. */
|
|
9
8
|
interface TaskRenderContext {
|
|
10
9
|
hasResult?: boolean;
|
|
@@ -255,7 +254,7 @@ export interface AgentProgress {
|
|
|
255
254
|
resolvedModelRoute?: string;
|
|
256
255
|
/** True when a live advisor was attached to this run's session, not merely enabled in settings. */
|
|
257
256
|
advisor?: boolean;
|
|
258
|
-
/** The agent's latest self-estimate of task completion (0–100), from the periodic `task.
|
|
257
|
+
/** The agent's latest self-estimate of task completion (0–100), from the periodic `task.completionProbe` side request. */
|
|
259
258
|
completionPercent?: number;
|
|
260
259
|
/** Data extracted by registered subprocess tool handlers (keyed by tool name) */
|
|
261
260
|
extractedToolData?: Record<string, unknown[]>;
|