@linxiraos/pi-tui 1.2.0 → 1.3.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 +188 -120
- package/README.md +36 -0
- package/THIRD-PARTY-NOTICES.txt +55 -5
- package/dist/types/app-keybindings.d.ts +18 -8
- package/dist/types/apps/git/diff-pane.d.ts +5 -0
- package/dist/types/apps/git/git-tui.d.ts +16 -2
- package/dist/types/apps/git/state.d.ts +11 -0
- package/dist/types/autocomplete.d.ts +2 -0
- package/dist/types/charts/chart-svg.d.ts +7 -13
- package/dist/types/chat/advisor-message.d.ts +4 -1
- package/dist/types/chat/assistant-message.d.ts +9 -4
- package/dist/types/chat/figure-markdown.d.ts +7 -2
- package/dist/types/chat/messages.d.ts +3 -1
- package/dist/types/chat/read-tool-group.d.ts +2 -2
- package/dist/types/chat/table-chart.d.ts +11 -15
- package/dist/types/chat/tool-execution.d.ts +32 -20
- package/dist/types/chat/user-message.d.ts +3 -2
- package/dist/types/chrome/countdown-timer.d.ts +3 -2
- package/dist/types/chrome/diff.d.ts +2 -3
- package/dist/types/chrome/transcript-container.d.ts +2 -0
- package/dist/types/components/image.d.ts +2 -0
- package/dist/types/components/markdown.d.ts +49 -3
- package/dist/types/components/text.d.ts +2 -0
- package/dist/types/debug-server.d.ts +2 -0
- package/dist/types/keybinding-matchers.d.ts +6 -0
- package/dist/types/multiplexers/tmux.d.ts +1 -0
- package/dist/types/multiplexers/types.d.ts +6 -0
- package/dist/types/native/backend.d.ts +5 -4
- package/dist/types/native/blobs.d.ts +24 -12
- package/dist/types/overlays/agent-hub-projection.d.ts +10 -5
- package/dist/types/overlays/annotation-overlay.d.ts +19 -0
- package/dist/types/overlays/approval-dialog.d.ts +79 -0
- package/dist/types/overlays/ask-dialog.d.ts +11 -6
- package/dist/types/overlays/btw-history-panel.d.ts +2 -6
- package/dist/types/overlays/hook-editor.d.ts +7 -2
- package/dist/types/overlays/hook-input.d.ts +12 -4
- package/dist/types/overlays/job-tree.d.ts +50 -0
- package/dist/types/overlays/jobs-panel.d.ts +25 -11
- package/dist/types/overlays/login-dialog.d.ts +8 -3
- package/dist/types/overlays/mcp-add-wizard.d.ts +9 -1
- package/dist/types/overlays/model-browser.d.ts +6 -1
- package/dist/types/overlays/model-picker.d.ts +2 -0
- package/dist/types/overlays/pause-screen.d.ts +5 -0
- package/dist/types/overlays/plan-review-overlay.d.ts +4 -0
- package/dist/types/overlays/report-panel.d.ts +5 -1
- package/dist/types/overlays/reset-usage-selector.d.ts +7 -5
- package/dist/types/overlays/session-account-selector.d.ts +4 -0
- package/dist/types/overlays/session-info-overlay.d.ts +7 -3
- package/dist/types/overlays/session-selector.d.ts +3 -1
- package/dist/types/overlays/usage-dashboard.d.ts +6 -6
- package/dist/types/prompt/composer.d.ts +22 -26
- package/dist/types/prompt/custom-editor.d.ts +20 -10
- package/dist/types/prompt/image-references.d.ts +22 -0
- package/dist/types/prompt/internal-url-autocomplete.d.ts +1 -0
- package/dist/types/prompt/macos-spelling.d.ts +2 -1
- package/dist/types/prompt/prose-gate.d.ts +3 -0
- package/dist/types/prompt/queued-messages.d.ts +1 -1
- package/dist/types/prompt/typing-word.d.ts +25 -0
- package/dist/types/prompt/welcome.d.ts +35 -43
- package/dist/types/render/hanging-wrap.d.ts +7 -0
- package/dist/types/render/hyperlink.d.ts +2 -0
- package/dist/types/render/render-utils.d.ts +9 -1
- package/dist/types/render/utils.d.ts +1 -1
- package/dist/types/setup/scenes/splash.d.ts +6 -5
- package/dist/types/status-line/context-usage.d.ts +4 -1
- package/dist/types/status-line/host.d.ts +6 -4
- package/dist/types/status-line/startup.d.ts +6 -6
- package/dist/types/status-line/types.d.ts +3 -0
- package/dist/types/stdin-buffer.d.ts +7 -0
- package/dist/types/terminal-capabilities.d.ts +16 -1
- package/dist/types/terminal-multiplexer.d.ts +7 -0
- package/dist/types/terminal.d.ts +8 -4
- package/dist/types/theme/symbols.d.ts +1 -1
- package/dist/types/theme/theme.d.ts +11 -0
- package/dist/types/thinking.d.ts +5 -0
- package/dist/types/tmux.d.ts +39 -4
- package/dist/types/tools/ast-edit.d.ts +2 -2
- package/dist/types/tools/ast-grep.d.ts +2 -2
- package/dist/types/tools/bash.d.ts +6 -1
- package/dist/types/tools/edit.d.ts +2 -0
- package/dist/types/tools/eval.d.ts +53 -4
- package/dist/types/tools/find.d.ts +14 -4
- package/dist/types/tools/glob.d.ts +3 -3
- package/dist/types/tools/grep.d.ts +2 -2
- package/dist/types/tools/grouped-file-output.d.ts +9 -4
- package/dist/types/tools/native-view.d.ts +1 -1
- package/dist/types/tools/read.d.ts +32 -10
- package/dist/types/tools/renderer.d.ts +2 -0
- package/dist/types/tools/task.d.ts +31 -0
- package/dist/types/tools/write.d.ts +2 -0
- package/dist/types/tui.d.ts +20 -3
- package/package.json +10 -10
- package/src/app-keybindings.d.ts +18 -8
- package/src/app-keybindings.ts +20 -8
- package/src/apps/autoresearch-dashboard.ts +444 -27
- package/src/apps/debug/raw-sse.ts +2 -2
- package/src/apps/git/diff-pane.ts +39 -41
- package/src/apps/git/git-tui.ts +80 -14
- package/src/apps/git/sidebar.ts +10 -1
- package/src/apps/git/state.ts +12 -0
- package/src/autocomplete.d.ts +2 -0
- package/src/autocomplete.ts +21 -19
- package/src/bracketed-paste.ts +9 -2
- package/src/charts/chart-svg.d.ts +7 -13
- package/src/charts/chart-svg.ts +19 -22
- package/src/chat/advisor-message.d.ts +4 -1
- package/src/chat/advisor-message.ts +77 -24
- package/src/chat/assistant-message.d.ts +9 -4
- package/src/chat/assistant-message.ts +127 -31
- package/src/chat/bash-execution.ts +7 -2
- package/src/chat/figure-markdown.d.ts +7 -2
- package/src/chat/figure-markdown.ts +10 -3
- package/src/chat/image-loading.ts +9 -6
- package/src/chat/messages.d.ts +3 -1
- package/src/chat/messages.ts +4 -1
- package/src/chat/read-tool-group.d.ts +2 -2
- package/src/chat/read-tool-group.ts +97 -42
- package/src/chat/svg-figure.ts +3 -1
- package/src/chat/svg-source.ts +6 -3
- package/src/chat/table-chart.d.ts +11 -15
- package/src/chat/table-chart.ts +24 -57
- package/src/chat/tool-execution.d.ts +32 -20
- package/src/chat/tool-execution.ts +103 -36
- package/src/chat/user-message.d.ts +3 -2
- package/src/chat/user-message.ts +54 -34
- package/src/chrome/countdown-timer.ts +3 -3
- package/src/chrome/diff.d.ts +2 -3
- package/src/chrome/diff.ts +4 -9
- package/src/chrome/transcript-container.d.ts +2 -0
- package/src/chrome/transcript-container.ts +212 -28
- package/src/components/editor.ts +12 -12
- package/src/components/image.d.ts +2 -0
- package/src/components/image.ts +54 -20
- package/src/components/markdown.d.ts +49 -3
- package/src/components/markdown.ts +461 -11
- package/src/components/settings-list.ts +2 -4
- package/src/components/text.d.ts +2 -0
- package/src/components/text.ts +11 -1
- package/src/debug-server.d.ts +2 -0
- package/src/debug-server.ts +51 -69
- package/src/hotkeys-markdown.ts +2 -0
- package/src/keybinding-matchers.d.ts +6 -0
- package/src/keybinding-matchers.ts +19 -0
- package/src/multiplexers/tmux.d.ts +1 -0
- package/src/multiplexers/tmux.ts +3 -0
- package/src/multiplexers/types.d.ts +6 -0
- package/src/multiplexers/types.ts +6 -0
- package/src/native/backend.d.ts +5 -4
- package/src/native/backend.ts +13 -5
- package/src/native/blobs.d.ts +24 -12
- package/src/native/blobs.ts +56 -7
- package/src/native/reconcile.ts +43 -21
- package/src/overlays/advisor-config.ts +259 -8
- package/src/overlays/agent-hub-projection.d.ts +10 -5
- package/src/overlays/agent-hub-projection.ts +63 -12
- package/src/overlays/agent-hub.ts +2 -2
- package/src/overlays/annotation-overlay.ts +422 -168
- package/src/overlays/approval-dialog.ts +389 -0
- package/src/overlays/ask-dialog.ts +244 -105
- package/src/overlays/btw-history-panel.ts +208 -147
- package/src/overlays/extensions/extension-list.ts +4 -6
- package/src/overlays/hook-editor.ts +90 -32
- package/src/overlays/hook-input.ts +105 -19
- package/src/overlays/job-tree.ts +177 -0
- package/src/overlays/jobs-panel.ts +222 -142
- package/src/overlays/login-dialog.ts +201 -91
- package/src/overlays/mcp-add-wizard.ts +562 -279
- package/src/overlays/model-browser.ts +32 -7
- package/src/overlays/model-hub.ts +4 -10
- package/src/overlays/model-picker.ts +58 -21
- package/src/overlays/pause-screen.ts +81 -23
- package/src/overlays/plan-review-overlay.ts +16 -0
- package/src/overlays/plugin-selector.ts +17 -1
- package/src/overlays/plugin-settings.ts +8 -2
- package/src/overlays/queue-mode-selector.ts +10 -0
- package/src/overlays/report-panel.ts +6 -2
- package/src/overlays/reset-usage-selector.ts +130 -21
- package/src/overlays/session-account-selector.ts +36 -0
- package/src/overlays/session-info-overlay.ts +199 -76
- package/src/overlays/session-selector.ts +15 -10
- package/src/overlays/settings-selector.ts +3 -0
- package/src/overlays/show-images-selector.ts +1 -0
- package/src/overlays/snapcompact-shape-preview.ts +13 -6
- package/src/overlays/theme-selector.ts +6 -1
- package/src/overlays/thinking-selector.ts +8 -4
- package/src/overlays/tree-selector.ts +117 -2
- package/src/overlays/usage-dashboard.ts +498 -144
- package/src/prompt/composer-cache.ts +4 -6
- package/src/prompt/composer.ts +196 -96
- package/src/prompt/custom-editor.ts +168 -65
- package/src/prompt/image-references.d.ts +22 -0
- package/src/prompt/image-references.ts +79 -2
- package/src/prompt/internal-url-autocomplete.ts +1 -0
- package/src/prompt/macos-spelling.ts +28 -5
- package/src/prompt/prose-gate.ts +3 -0
- package/src/prompt/queued-messages.ts +9 -2
- package/src/prompt/tips.txt +1 -2
- package/src/prompt/typing-word.ts +59 -0
- package/src/prompt/welcome.ts +256 -423
- package/src/render/code-cell.ts +18 -5
- package/src/render/hanging-wrap.d.ts +7 -0
- package/src/render/hanging-wrap.ts +58 -0
- package/src/render/hyperlink.d.ts +2 -0
- package/src/render/hyperlink.ts +5 -0
- package/src/render/render-utils.d.ts +9 -1
- package/src/render/render-utils.ts +16 -2
- package/src/render/utils.d.ts +1 -1
- package/src/render/utils.ts +1 -1
- package/src/render/width-aware-text.ts +6 -5
- package/src/setup/scenes/splash.ts +137 -60
- package/src/status-line/component.ts +23 -10
- package/src/status-line/context-usage.ts +176 -73
- package/src/status-line/footer.ts +18 -35
- package/src/status-line/host.ts +6 -1
- package/src/status-line/segments.ts +16 -5
- package/src/status-line/startup.ts +6 -6
- package/src/status-line/types.ts +1 -0
- package/src/stdin-buffer.d.ts +7 -0
- package/src/stdin-buffer.ts +11 -1
- package/src/terminal-capabilities.d.ts +16 -1
- package/src/terminal-capabilities.ts +66 -28
- package/src/terminal-multiplexer.d.ts +7 -0
- package/src/terminal-multiplexer.ts +14 -0
- package/src/terminal.d.ts +8 -4
- package/src/terminal.ts +160 -46
- package/src/theme/symbols.d.ts +1 -1
- package/src/theme/symbols.ts +1 -0
- package/src/theme/theme-class.ts +1 -0
- package/src/theme/theme.d.ts +11 -0
- package/src/theme/theme.ts +46 -14
- package/src/thinking.d.ts +5 -0
- package/src/thinking.ts +9 -1
- package/src/tmux.d.ts +39 -4
- package/src/tmux.ts +110 -16
- package/src/tools/ask.ts +20 -9
- package/src/tools/ast-edit.d.ts +2 -2
- package/src/tools/ast-edit.ts +30 -7
- package/src/tools/ast-grep.d.ts +2 -2
- package/src/tools/ast-grep.ts +39 -35
- package/src/tools/bash.d.ts +6 -1
- package/src/tools/bash.ts +15 -9
- package/src/tools/debug.ts +2 -1
- package/src/tools/default-renderer.ts +3 -2
- package/src/tools/edit.d.ts +2 -0
- package/src/tools/edit.ts +100 -21
- package/src/tools/eval.d.ts +53 -4
- package/src/tools/eval.ts +173 -137
- package/src/tools/find.d.ts +14 -4
- package/src/tools/find.ts +71 -18
- package/src/tools/glob.d.ts +3 -3
- package/src/tools/glob.ts +51 -17
- package/src/tools/grep.d.ts +2 -2
- package/src/tools/grep.ts +99 -22
- package/src/tools/grouped-file-output.d.ts +9 -4
- package/src/tools/grouped-file-output.ts +21 -6
- package/src/tools/lsp.ts +30 -18
- package/src/tools/mcp.ts +2 -2
- package/src/tools/native-view.d.ts +1 -1
- package/src/tools/native-view.ts +2 -2
- package/src/tools/read.d.ts +32 -10
- package/src/tools/read.ts +89 -43
- package/src/tools/renderer.d.ts +2 -0
- package/src/tools/renderer.ts +2 -0
- package/src/tools/task.d.ts +31 -0
- package/src/tools/task.ts +40 -7
- package/src/tools/todo.ts +3 -2
- package/src/tools/wait.ts +16 -30
- package/src/tools/web-search.ts +2 -1
- package/src/tools/write.d.ts +2 -0
- package/src/tools/write.ts +36 -12
- package/src/tools/yield.ts +2 -2
- package/src/tui.d.ts +20 -3
- package/src/tui.ts +140 -36
- package/src/utils.ts +5 -3
- package/dist/types/tools/eval-format/code-mode-declarations.d.ts +0 -5
- package/src/tools/eval-format/code-mode-declarations.ts +0 -61
package/THIRD-PARTY-NOTICES.txt
CHANGED
|
@@ -8,8 +8,8 @@ no rights in third-party code, fonts, data, or marks identified below.
|
|
|
8
8
|
PYTHON DEPENDENCY DISTRIBUTION ROLE
|
|
9
9
|
===================================
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
Uvicorn, HTTPX, Pydantic, pydantic-settings, python-dotenv, Click, and
|
|
11
|
+
zeta-rpc has no third-party runtime dependencies. robomp declares FastAPI,
|
|
12
|
+
Uvicorn, HTTPX, Pydantic, pydantic-settings, python-dotenv, Click, and zeta-rpc
|
|
13
13
|
as ordinary installer-resolved dependencies. The Python wheels do not vendor
|
|
14
14
|
those projects; each dependency remains a separately installed distribution
|
|
15
15
|
carrying its own license metadata and files. Container/system assemblers must
|
|
@@ -79,9 +79,9 @@ uutils coreutils (https://github.com/uutils/coreutils), MIT
|
|
|
79
79
|
--------------------------------------------------------------------------------
|
|
80
80
|
Covers: base32, base64, basename, cat, cksum (shared checksum machinery),
|
|
81
81
|
b2sum, md5sum, sha1sum, sha224sum, sha256sum, sha384sum, sha512sum, comm, cp,
|
|
82
|
-
cut, date, dirname, head, hostname, ln, ls, mkdir, mktemp, mv,
|
|
83
|
-
printenv, readlink, realpath, rm, seq, sort, stat, tac, tail, tee,
|
|
84
|
-
truncate, uname, uniq, wc, whoami, yes.
|
|
82
|
+
cut, date, dirname, head, hostname, ln, ls, mkdir, mktemp, mv, nl, nproc,
|
|
83
|
+
paste, printenv, readlink, realpath, rm, seq, sort, stat, tac, tail, tee,
|
|
84
|
+
touch, tr, truncate, uname, uniq, wc, whoami, yes.
|
|
85
85
|
|
|
86
86
|
Copyright (c) uutils developers
|
|
87
87
|
|
|
@@ -824,6 +824,56 @@ public licenses.
|
|
|
824
824
|
|
|
825
825
|
Creative Commons may be contacted at creativecommons.org.
|
|
826
826
|
|
|
827
|
+
-------------------------------------------------------------------------------
|
|
828
|
+
scripts/brand/fonts/ANSI Shadow.flf, scripts/brand/fonts/mini.flf
|
|
829
|
+
|
|
830
|
+
Two FIGlet font files from the standard FIGlet font distribution — the
|
|
831
|
+
figlet.org font set shipped by figlet.js
|
|
832
|
+
(https://github.com/patorjk/figlet.js/tree/master/fonts), fetched from
|
|
833
|
+
figlet.js 1.8.0 — vendored so the welcome/splash brand art
|
|
834
|
+
(`packages/tui/src/prompt/welcome.ts`) is generated reproducibly and offline
|
|
835
|
+
by `bun scripts/brand/generate-logo-art.ts`. Both files are unmodified and
|
|
836
|
+
retain their original FIGlet headers. They are build-time inputs only: no font
|
|
837
|
+
file or font data is compiled into, or shipped with, a Zeta release artifact.
|
|
838
|
+
The fonts' own headers carry their terms:
|
|
839
|
+
|
|
840
|
+
- `ANSI Shadow.flf` — "ANSI Shadow". Author unknown ("Font Author: ?" in the
|
|
841
|
+
header); a TheDraw-archive font converted with the FIGlet font editor
|
|
842
|
+
(http://patorjk.com/figfont-editor). Distributed under the FIGlet font
|
|
843
|
+
license as carried by the standard FIGlet font set: free to use and
|
|
844
|
+
redistribute with the header intact.
|
|
845
|
+
- `mini.flf` — "mini" by Glenn Chappell (4/93), from figlet release 2.1
|
|
846
|
+
(12 Aug 1994), "Includes ISO Latin-1"; modified by Paul Burton
|
|
847
|
+
<solution@earthlink.net> 12/96. Header grant: "Permission is hereby given to
|
|
848
|
+
modify this font, as long as the modifier's name is placed on a comment
|
|
849
|
+
line."
|
|
850
|
+
|
|
851
|
+
FIGlet renderer — `figlet` 1.8.0 (https://github.com/patorjk/figlet.js), a
|
|
852
|
+
root devDependency used only to generate the art at build time; it is not
|
|
853
|
+
imported by any runtime bundle or shipped artifact.
|
|
854
|
+
|
|
855
|
+
MIT License
|
|
856
|
+
|
|
857
|
+
Copyright (C) 2014-present Patrick Gillespie and other contributors
|
|
858
|
+
|
|
859
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
860
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
861
|
+
in the Software without restriction, including without limitation the rights
|
|
862
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
863
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
864
|
+
furnished to do so, subject to the following conditions:
|
|
865
|
+
|
|
866
|
+
The above copyright notice and this permission notice shall be included in
|
|
867
|
+
all copies or substantial portions of the Software.
|
|
868
|
+
|
|
869
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
870
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
871
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
872
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
873
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
874
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
875
|
+
SOFTWARE.
|
|
876
|
+
|
|
827
877
|
BUN / NPM DEPENDENCY INVENTORY
|
|
828
878
|
==============================
|
|
829
879
|
This inventory is traversed from bun.lock, not from the host node_modules tree.
|
|
@@ -17,6 +17,8 @@ interface AppKeybindings {
|
|
|
17
17
|
"app.model.selectTemporary": true;
|
|
18
18
|
"app.tools.expand": true;
|
|
19
19
|
"app.tools.toggleVisibility": true;
|
|
20
|
+
"app.ask.hide": true;
|
|
21
|
+
"app.approval.approve": true;
|
|
20
22
|
"app.editor.external": true;
|
|
21
23
|
"app.message.followUp": true;
|
|
22
24
|
"app.retry": true;
|
|
@@ -36,8 +38,8 @@ interface AppKeybindings {
|
|
|
36
38
|
"app.session.rename": true;
|
|
37
39
|
"app.session.delete": true;
|
|
38
40
|
"app.session.deleteNoninvasive": true;
|
|
39
|
-
"app.tree.
|
|
40
|
-
"app.tree.
|
|
41
|
+
"app.tree.previousBranch": true;
|
|
42
|
+
"app.tree.nextBranch": true;
|
|
41
43
|
"app.plan.toggle": true;
|
|
42
44
|
"app.history.search": true;
|
|
43
45
|
"app.stt.pushToTalk": true;
|
|
@@ -238,6 +240,14 @@ export declare const KEYBINDINGS: {
|
|
|
238
240
|
readonly defaultKeys: "ctrl+shift+o";
|
|
239
241
|
readonly description: "Show or hide tool activity";
|
|
240
242
|
};
|
|
243
|
+
readonly "app.ask.hide": {
|
|
244
|
+
readonly defaultKeys: "alt+h";
|
|
245
|
+
readonly description: "Hide or show a pending ask dialog";
|
|
246
|
+
};
|
|
247
|
+
readonly "app.approval.approve": {
|
|
248
|
+
readonly defaultKeys: ["ctrl+enter", "ctrl+q"];
|
|
249
|
+
readonly description: "Approve a pending tool call";
|
|
250
|
+
};
|
|
241
251
|
readonly "app.editor.external": {
|
|
242
252
|
readonly defaultKeys: "ctrl+g";
|
|
243
253
|
readonly description: "Open external editor";
|
|
@@ -314,13 +324,13 @@ export declare const KEYBINDINGS: {
|
|
|
314
324
|
readonly defaultKeys: "ctrl+backspace";
|
|
315
325
|
readonly description: "Delete session (non-invasive)";
|
|
316
326
|
};
|
|
317
|
-
readonly "app.tree.
|
|
318
|
-
readonly defaultKeys: [
|
|
319
|
-
readonly description: "
|
|
327
|
+
readonly "app.tree.previousBranch": {
|
|
328
|
+
readonly defaultKeys: [];
|
|
329
|
+
readonly description: "Jump to the previous branch in /tree";
|
|
320
330
|
};
|
|
321
|
-
readonly "app.tree.
|
|
322
|
-
readonly defaultKeys: [
|
|
323
|
-
readonly description: "
|
|
331
|
+
readonly "app.tree.nextBranch": {
|
|
332
|
+
readonly defaultKeys: [];
|
|
333
|
+
readonly description: "Jump to the next branch in /tree";
|
|
324
334
|
};
|
|
325
335
|
readonly "app.plan.toggle": {
|
|
326
336
|
readonly defaultKeys: "alt+shift+p";
|
|
@@ -118,6 +118,11 @@ export type PaneClick = {
|
|
|
118
118
|
} | {
|
|
119
119
|
type: "handled";
|
|
120
120
|
} | null;
|
|
121
|
+
/**
|
|
122
|
+
* The heading of one side of a media/binary change (`Before · PNG · Git LFS`):
|
|
123
|
+
* `label` plus the side's kind, shared by the ANSI pane and the native compare.
|
|
124
|
+
*/
|
|
125
|
+
export declare function assetTitle(label: string, side: FileAssetSide): string;
|
|
121
126
|
/**
|
|
122
127
|
* Scrollable diff viewport. The root component feeds it key/mouse input and
|
|
123
128
|
* composes its rendered lines into the frame.
|
|
@@ -7,7 +7,8 @@
|
|
|
7
7
|
* scrollbar, right sidebar (file management + commit form while dirty, HEAD
|
|
8
8
|
* commit details with author avatar when clean). Submitting an empty commit
|
|
9
9
|
* form generates an llm-git-compatible message; submitting populated fields
|
|
10
|
-
* commits them. A footer shows key hints
|
|
10
|
+
* commits them. A footer shows key hints; the staging and discarding ones are
|
|
11
|
+
* omitted while the tree is clean, where they cannot fire.
|
|
11
12
|
*
|
|
12
13
|
* `tab` moves focus between the diff and the sidebar; both panes take
|
|
13
14
|
* arrows/PgUp/PgDn, vim motions (`j`/`k`/`h`/`l`/`g`/`G`), and mouse
|
|
@@ -22,7 +23,8 @@
|
|
|
22
23
|
* refreshes. In the sidebar tree `←`/`→` collapse/expand directories,
|
|
23
24
|
* `enter` opens the selected file in the diff pane, `space` stages or
|
|
24
25
|
* unstages the selected row, and `delete` discards it — on a directory,
|
|
25
|
-
* every file underneath it.
|
|
26
|
+
* every file underneath it. All of the staging and discarding keys are inert
|
|
27
|
+
* on a clean tree, which shows the HEAD commit instead of a change list.
|
|
26
28
|
*/
|
|
27
29
|
import { TUI } from "../../tui.js";
|
|
28
30
|
import type { AvatarSource } from "./avatar.js";
|
|
@@ -58,6 +60,17 @@ export interface GitTuiHost {
|
|
|
58
60
|
stagedAll: boolean;
|
|
59
61
|
}>;
|
|
60
62
|
}
|
|
63
|
+
type Focus = "diff" | "sidebar";
|
|
64
|
+
/**
|
|
65
|
+
* Footer key hints. A clean tree renders the HEAD commit view, where stage
|
|
66
|
+
* and discard cannot fire: `#patchTargetFor` returns null and
|
|
67
|
+
* `#discardCurrentFile` returns early for `area: "commit"` rows, and the
|
|
68
|
+
* sidebar only builds stage/discard actions for the unstaged/staged
|
|
69
|
+
* sections. `commit` needs the commit form (absent on a clean tree) and
|
|
70
|
+
* `select` feeds the line-level stage/discard actions (no-ops on commit
|
|
71
|
+
* rows), so the commit view drops those too and says what it is showing.
|
|
72
|
+
*/
|
|
73
|
+
export declare function gitFooterHints(clean: boolean, focus: Focus): string;
|
|
61
74
|
/**
|
|
62
75
|
* Mount the git TUI as a fullscreen overlay on an existing TUI (the `/git`
|
|
63
76
|
* slash command). Resolves when the user closes it; the caller restores focus.
|
|
@@ -65,3 +78,4 @@ export interface GitTuiHost {
|
|
|
65
78
|
export declare function showGitOverlay(ui: TUI, host: GitTuiHost): Promise<void>;
|
|
66
79
|
/** Run the fullscreen git TUI standalone (`zetacode git`) until the user quits. */
|
|
67
80
|
export declare function runGitTui(host: GitTuiHost): Promise<void>;
|
|
81
|
+
export {};
|
|
@@ -73,11 +73,22 @@ export interface TextFileContents {
|
|
|
73
73
|
readonly newText: string;
|
|
74
74
|
readonly streamResult: DiffStreamResult;
|
|
75
75
|
}
|
|
76
|
+
/** Where one side of a change lives, so a host viewer (Tern's TSP `media` node) can load it by path. */
|
|
77
|
+
export interface MediaRef {
|
|
78
|
+
/** Absolute path of the file (repository root joined with its repository path). */
|
|
79
|
+
readonly path: string;
|
|
80
|
+
/** Git revision holding this side (`HEAD`, a sha, `:0` for the index); absent for the worktree file. */
|
|
81
|
+
readonly rev?: string;
|
|
82
|
+
}
|
|
76
83
|
/** Non-text sides rendered as previews or explicit placeholders. */
|
|
77
84
|
export interface AssetFileContents {
|
|
78
85
|
readonly kind: "asset";
|
|
79
86
|
readonly old: FileAssetSide;
|
|
80
87
|
readonly new: FileAssetSide;
|
|
88
|
+
/** Source of {@link old}; absent when that side is empty. */
|
|
89
|
+
readonly oldRef?: MediaRef;
|
|
90
|
+
/** Source of {@link new}; absent when that side is empty. */
|
|
91
|
+
readonly newRef?: MediaRef;
|
|
81
92
|
}
|
|
82
93
|
/** Loaded file content selected for text diffing or asset preview. */
|
|
83
94
|
export type FileContents = TextFileContents | AssetFileContents;
|
|
@@ -6,6 +6,8 @@
|
|
|
6
6
|
*/
|
|
7
7
|
export declare function findLeadingSlashCommandStart(text: string): number | null;
|
|
8
8
|
export declare function findTrailingSlashCommandStart(text: string): number | null;
|
|
9
|
+
/** Extract the live whitespace-delimited or double-quoted `@` file token ending at the cursor. */
|
|
10
|
+
export declare function extractAtFilePrefix(text: string): string | null;
|
|
9
11
|
/**
|
|
10
12
|
* Whether an autocomplete value represents a directory: trailing slash or
|
|
11
13
|
* backslash, optionally followed by a closing quote for quoted paths.
|
|
@@ -2,9 +2,11 @@
|
|
|
2
2
|
* Draws a {@link ChartSpec} as a standalone SVG document colored only with
|
|
3
3
|
* figure tokens — `var(--fg)`, `var(--muted)`, `var(--border)`,
|
|
4
4
|
* `var(--accent)`, `var(--surface)`, `var(--c1)`…`var(--c6)` — on a
|
|
5
|
-
* transparent background — the token vocabulary of assistant ```svg figures
|
|
6
|
-
*
|
|
7
|
-
*
|
|
5
|
+
* transparent background — the token vocabulary of assistant ```svg figures:
|
|
6
|
+
* the host resolves them against the live theme (`prepareSvg`) for the
|
|
7
|
+
* rasterized terminal image, and a TSP terminal draws the chart as an ```svg
|
|
8
|
+
* figure in the palette it shows. The root carries {@link chartAlt} as its
|
|
9
|
+
* `aria-label`.
|
|
8
10
|
*
|
|
9
11
|
* Styled after Apple's charts and Tern's UI: a UI sans (Geist where Tern
|
|
10
12
|
* provides it), muted labels, hairline gridlines that recede behind the
|
|
@@ -39,16 +41,8 @@
|
|
|
39
41
|
*/
|
|
40
42
|
import { type ChartSpec } from "./chart-plan.js";
|
|
41
43
|
import { type Dimension } from "./table-data.js";
|
|
42
|
-
/**
|
|
43
|
-
export
|
|
44
|
-
readonly svg: string;
|
|
45
|
-
readonly width: number;
|
|
46
|
-
readonly height: number;
|
|
47
|
-
}
|
|
48
|
-
/** The SVG document for `spec`. */
|
|
49
|
-
export declare function renderChartSvg(spec: ChartSpec): ChartSvg;
|
|
50
|
-
/** One-line description of the chart, for screen readers and terminals that show the alt text. */
|
|
51
|
-
export declare function chartAlt(spec: ChartSpec): string;
|
|
44
|
+
/** The SVG document for `spec`, labeled for screen readers with {@link chartAlt}. */
|
|
45
|
+
export declare function renderChartSvg(spec: ChartSpec): string;
|
|
52
46
|
/**
|
|
53
47
|
* A value in base units as an axis label: durations and sizes in the unit,
|
|
54
48
|
* counts compacted under the suffix (`12k`, `3.4M`), that `magnitude` reads
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type Component } from "../tui.js";
|
|
2
2
|
import type { AdvisorMessageDetails } from "./messages.js";
|
|
3
|
-
import {
|
|
3
|
+
import type { Theme } from "../theme/index.js";
|
|
4
4
|
import { type NativeUiEvent } from "../native/node.js";
|
|
5
5
|
/** The advisor card: shared by the controlled expansion getter and native toggles. */
|
|
6
6
|
export interface AdvisorMessageCard extends Component {
|
|
@@ -14,6 +14,9 @@ export interface AdvisorMessageCard extends Component {
|
|
|
14
14
|
* output (whose `thinkingText` color equals `toolOutput` in most themes):
|
|
15
15
|
* a bold `customMessageLabel` header tag (skill-card convention), a heavy
|
|
16
16
|
* rail tinted per-note severity, and the note body on the default text color.
|
|
17
|
+
* Natively it is a callout tinted by its worst note: that severity's icon and
|
|
18
|
+
* the tally head it, the advisor's name ends the head, and with several notes
|
|
19
|
+
* each leads with its own severity icon.
|
|
17
20
|
*
|
|
18
21
|
* `getExpanded` owns expansion; a native toggle overrides it for this card
|
|
19
22
|
* until the next transcript-wide change.
|
|
@@ -2,7 +2,7 @@ import type { AssistantMessage, ImageContent } from "@linxiraos/pi-ai";
|
|
|
2
2
|
import { type Component, Container } from "../tui.js";
|
|
3
3
|
import { type ImageBudget } from "../components/image.js";
|
|
4
4
|
import type { AssistantThinkingRenderer } from "./extension-types.js";
|
|
5
|
-
import type { NativeNode, NativeUiEvent } from "../native/node.js";
|
|
5
|
+
import type { DescribeContext, NativeNode, NativeUiEvent } from "../native/node.js";
|
|
6
6
|
import { type CacheInvalidation } from "./cache-invalidation-marker.js";
|
|
7
7
|
import { type ServedModelMismatch } from "./served-model-marker.js";
|
|
8
8
|
import { type TranscriptStableRow } from "../chrome/transcript-container.js";
|
|
@@ -99,13 +99,13 @@ export declare class AssistantMessageComponent extends Container {
|
|
|
99
99
|
* head's `title`. With `hideThinkingBlock` only the live head shows (collapsed)
|
|
100
100
|
* and a finished thought emits nothing.
|
|
101
101
|
*/
|
|
102
|
-
describe(): NativeNode;
|
|
102
|
+
describe(cx?: DescribeContext): NativeNode;
|
|
103
103
|
/**
|
|
104
104
|
* A TTSR rule rewound this partial answer: a native terminal dims it and
|
|
105
105
|
* tags it `↺ rewound` (the ANSI render leaves it as it stopped).
|
|
106
106
|
*/
|
|
107
107
|
markRewound(): void;
|
|
108
|
-
/** Mirrors a thinking section collapsed or expanded in the terminal. */
|
|
108
|
+
/** Mirrors a thinking section collapsed or expanded in the terminal; runs its controls' clicks. */
|
|
109
109
|
handleNativeEvent(event: NativeUiEvent): void;
|
|
110
110
|
/** Width-independent stable identities for the streamed leading thinking run. */
|
|
111
111
|
getTranscriptStableRows(): readonly TranscriptStableRow[];
|
|
@@ -130,7 +130,12 @@ export declare class AssistantMessageComponent extends Container {
|
|
|
130
130
|
setTableChartsVisible(visible: boolean): void;
|
|
131
131
|
/** Toggle only images produced by tool results; assistant-native images remain governed by setImagesVisible. */
|
|
132
132
|
setToolResultImagesVisible(visible: boolean): void;
|
|
133
|
-
|
|
133
|
+
/**
|
|
134
|
+
* A grouped read's result images, and `mediaPath`: the file it read that Tern's media viewer
|
|
135
|
+
* shows (read details), which a native host supporting `media` shows by path instead of the
|
|
136
|
+
* images. A media-only result (a model, a PDF) passes no images.
|
|
137
|
+
*/
|
|
138
|
+
setToolResultImages(toolCallId: string, images: ImageContent[], mediaPath?: string): void;
|
|
134
139
|
updateContent(message: AssistantMessage, opts?: {
|
|
135
140
|
transient?: boolean;
|
|
136
141
|
}): void;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ImageBudget } from "../components/image.js";
|
|
2
|
-
import type
|
|
2
|
+
import { type Markdown } from "../components/markdown.js";
|
|
3
3
|
import { Container } from "../tui.js";
|
|
4
4
|
export interface FigureMarkdownOptions {
|
|
5
5
|
/** Markdown for one prose run (and a failed figure's code fallback); FigureMarkdown drives its transience. */
|
|
@@ -32,7 +32,12 @@ export declare class FigureMarkdown extends Container {
|
|
|
32
32
|
/**
|
|
33
33
|
* The trimmed prose ahead of the first figure, or "" when the block opens
|
|
34
34
|
* with one. These are the only rows plain Markdown reproduces byte for
|
|
35
|
-
* byte, so they are all a transcript may publish ahead of the figure.
|
|
35
|
+
* byte, so they are all a transcript may publish ahead of the figure. While
|
|
36
|
+
* that prose is still the streaming tail (no figure follows it yet), only
|
|
37
|
+
* its settled prefix ({@link Markdown.getLastRenderStableText}) qualifies:
|
|
38
|
+
* the rest is still being written. Both forms are in
|
|
39
|
+
* {@link streamingMarkdownSource} form, so the settled prefix stays a byte
|
|
40
|
+
* prefix of the whole run once a figure splits it off.
|
|
36
41
|
*/
|
|
37
42
|
get leadingProse(): string;
|
|
38
43
|
/** Whether a figure's final source still waits for its raster, or a chart for its pick or raster. */
|
|
@@ -173,7 +173,9 @@ export declare function isUserInvokedSkillPrompt(message: CustomMessage): boolea
|
|
|
173
173
|
* reminders, and auto-continues are not turn starts.
|
|
174
174
|
*/
|
|
175
175
|
export declare function isUserTurnInitiator(message: CustomMessage): boolean;
|
|
176
|
-
|
|
176
|
+
/** Advisor note severities, weakest first; ranks severity thresholds such as `advisor.continueSeverity`. */
|
|
177
|
+
export declare const ADVISOR_SEVERITIES: readonly ["nit", "concern", "blocker"];
|
|
178
|
+
export type AdvisorSeverity = (typeof ADVISOR_SEVERITIES)[number];
|
|
177
179
|
/** One queued advice note. */
|
|
178
180
|
export interface AdvisorNote {
|
|
179
181
|
note: string;
|
|
@@ -74,8 +74,8 @@ export declare class ReadToolGroupComponent extends Container implements ToolExe
|
|
|
74
74
|
* The read run as one inline `tool` on terminals that list the kind, else
|
|
75
75
|
* the fallback: a bare `card` (role `zeta.tool.read`) with `Read <path>` or
|
|
76
76
|
* `Read (N)` in the head, a `list` of path items (status tone, link,
|
|
77
|
-
* correction and conflict detail, nested usage) and
|
|
78
|
-
*
|
|
77
|
+
* correction and conflict detail, nested usage) and a clamped preview per
|
|
78
|
+
* read when content previews are on.
|
|
79
79
|
*/
|
|
80
80
|
describe(cx?: DescribeContext): NativeNode;
|
|
81
81
|
}
|
|
@@ -2,7 +2,6 @@ import type { Tokens } from "@linxiraos/pi-utils/marked";
|
|
|
2
2
|
import { type ChartPlan } from "../charts/chart-plan.js";
|
|
3
3
|
import { type TableAnalysis } from "../charts/table-data.js";
|
|
4
4
|
import type { ImageBudget } from "../components/image.js";
|
|
5
|
-
import type { NativeNode } from "../native/node.js";
|
|
6
5
|
import type { Component } from "../tui.js";
|
|
7
6
|
/**
|
|
8
7
|
* `smart`: a model refines the local guess where meaning decides (kind,
|
|
@@ -24,17 +23,11 @@ export interface TableChartRequest {
|
|
|
24
23
|
* for no chart. A rejection falls back to the local guess.
|
|
25
24
|
*/
|
|
26
25
|
export type TableChartPlanner = (request: TableChartRequest) => Promise<ChartPlan | null>;
|
|
27
|
-
/**
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
/** Size in SVG user units. */
|
|
33
|
-
readonly width: number;
|
|
34
|
-
readonly height: number;
|
|
35
|
-
}
|
|
36
|
-
/** The chart under a table: drawn, none, or a smart pick on its way (the promise settles once the cache holds it). */
|
|
37
|
-
export type ChartLookup = TableChart | null | Promise<void>;
|
|
26
|
+
/**
|
|
27
|
+
* The chart under a table: its SVG, colored with figure tokens (`var(--accent)`, …)
|
|
28
|
+
* still to resolve; none; or a smart pick on its way (the promise settles once the cache holds it).
|
|
29
|
+
*/
|
|
30
|
+
export type ChartLookup = string | null | Promise<void>;
|
|
38
31
|
/** One run of a Markdown block: prose (ending at a charted table), or the chart drawn after that table. */
|
|
39
32
|
export type ChartSegment = {
|
|
40
33
|
readonly kind: "markdown";
|
|
@@ -60,10 +53,13 @@ export declare function splitTableCharts(markdown: string, streaming: boolean):
|
|
|
60
53
|
*/
|
|
61
54
|
export declare function lookupTableChart(table: Tokens.Table): ChartLookup;
|
|
62
55
|
/**
|
|
63
|
-
*
|
|
64
|
-
*
|
|
56
|
+
* Chart `svg` as a Markdown ```svg fence, for a TSP terminal's `md` node. Its
|
|
57
|
+
* figure tokens stay unresolved: the terminal draws the fence as a figure in
|
|
58
|
+
* the palette it shows the prose in, so the chart cannot fall out of step with
|
|
59
|
+
* the page when omp's own idea of the appearance does, and a theme switch
|
|
60
|
+
* recolors it without a resend.
|
|
65
61
|
*/
|
|
66
|
-
export declare function
|
|
62
|
+
export declare function chartFence(svg: string): string;
|
|
67
63
|
export interface TableChartFigureOptions {
|
|
68
64
|
/** Shared inline-image budget. */
|
|
69
65
|
budget?: ImageBudget;
|
|
@@ -17,19 +17,21 @@ export interface ToolExecutionOptions {
|
|
|
17
17
|
/** Allow the name-keyed renderer registry only when the active tool is the built-in implementation. */
|
|
18
18
|
useBuiltInRenderer?: boolean;
|
|
19
19
|
}
|
|
20
|
+
/** A tool result or progress frame as a card shows it. */
|
|
21
|
+
export interface ToolResultFrame {
|
|
22
|
+
content: Array<{
|
|
23
|
+
type: string;
|
|
24
|
+
text?: string;
|
|
25
|
+
data?: string;
|
|
26
|
+
mimeType?: string;
|
|
27
|
+
}>;
|
|
28
|
+
details?: unknown;
|
|
29
|
+
isError?: boolean;
|
|
30
|
+
}
|
|
20
31
|
export interface ToolExecutionHandle extends Component {
|
|
21
32
|
updateArgs(args: unknown, toolCallId?: string): void;
|
|
22
33
|
updateStreamPreview?(update: unknown): void;
|
|
23
|
-
updateResult(result:
|
|
24
|
-
content: Array<{
|
|
25
|
-
type: string;
|
|
26
|
-
text?: string;
|
|
27
|
-
data?: string;
|
|
28
|
-
mimeType?: string;
|
|
29
|
-
}>;
|
|
30
|
-
details?: unknown;
|
|
31
|
-
isError?: boolean;
|
|
32
|
-
}, isPartial?: boolean, toolCallId?: string): void;
|
|
34
|
+
updateResult(result: ToolResultFrame, isPartial?: boolean, toolCallId?: string): void;
|
|
33
35
|
setArgsComplete(toolCallId?: string): void;
|
|
34
36
|
setExecutionStarted(toolCallId?: string): void;
|
|
35
37
|
setExpanded(expanded: boolean): void;
|
|
@@ -39,6 +41,25 @@ export interface ToolExecutionHandle extends Component {
|
|
|
39
41
|
/** Seal the block as final history and stop its animations. */
|
|
40
42
|
seal(): void;
|
|
41
43
|
}
|
|
44
|
+
/**
|
|
45
|
+
* Whether a call that returned with `details.async.state === "running"` stays
|
|
46
|
+
* parked ({@link ToolExecutionHandle.parkAsBackground}) so its job's later
|
|
47
|
+
* frames keep filling the card until a `completed`/`failed` frame settles it.
|
|
48
|
+
* Detached `task` spawns always do; backgrounded `bash`/`eval` jobs only under
|
|
49
|
+
* native rendering, where the terminal transcript keeps them frozen instead.
|
|
50
|
+
* Shared by the live event controller and the transcript rebuild.
|
|
51
|
+
*/
|
|
52
|
+
export declare function parksAsBackground(toolName: string, details: unknown): boolean;
|
|
53
|
+
/** The background job state a tool result reports (`details.async.state`: running, completed, failed, cancelled). */
|
|
54
|
+
export declare function asyncJobState(details: unknown): string | undefined;
|
|
55
|
+
/** Whether a frame is a background job's last one: it completed, failed or was cancelled. */
|
|
56
|
+
export declare function isSettledJobFrame(details: unknown): boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Settle a parked card ({@link parksAsBackground}) with its job's last frame
|
|
59
|
+
* ({@link isSettledJobFrame}): a completed or failed job is the call's result;
|
|
60
|
+
* a cancelled one keeps the output it got to and seals the card as cancelled.
|
|
61
|
+
*/
|
|
62
|
+
export declare function settleWithJobFrame(component: ToolExecutionHandle, frame: ToolResultFrame, toolCallId: string): void;
|
|
42
63
|
/** Phase-locked spinner glyph index shared by every live tool block so parallel
|
|
43
64
|
* spinners advance in lockstep instead of each tracking its own start time. */
|
|
44
65
|
export declare function sharedSpinnerFrame(frameCount: number, now?: number): number;
|
|
@@ -74,16 +95,7 @@ export declare class ToolExecutionComponent extends Container {
|
|
|
74
95
|
*/
|
|
75
96
|
whenPreviewSettled(timeoutMs?: number): Promise<void>;
|
|
76
97
|
updateStreamPreview(update: unknown): void;
|
|
77
|
-
updateResult(result:
|
|
78
|
-
content: Array<{
|
|
79
|
-
type: string;
|
|
80
|
-
text?: string;
|
|
81
|
-
data?: string;
|
|
82
|
-
mimeType?: string;
|
|
83
|
-
}>;
|
|
84
|
-
details?: unknown;
|
|
85
|
-
isError?: boolean;
|
|
86
|
-
}, isPartial?: boolean, _toolCallId?: string): void;
|
|
98
|
+
updateResult(result: ToolResultFrame, isPartial?: boolean, _toolCallId?: string): void;
|
|
87
99
|
/**
|
|
88
100
|
* Advance to the shared spinner glyph and repaint just this block. Driven by
|
|
89
101
|
* the single shared spinner ticker (see `registerSpinnerBlock`); the tick is
|
|
@@ -39,8 +39,9 @@ export declare class UserMessageComponent extends Container implements ReactionT
|
|
|
39
39
|
/**
|
|
40
40
|
* A head-less user-toned frame with the prompt as markdown under its
|
|
41
41
|
* attached images (titled `#N` like their chips, opening the materialized
|
|
42
|
-
* file on click): the fill says "you". A quiet
|
|
43
|
-
*
|
|
42
|
+
* file on click): the fill says "you". A quiet footer like a turn's usage line
|
|
43
|
+
* (`⧉ ⏪ · 09:45`: Copy, Rewind, the time sent) fades in at its bottom-left on hover when
|
|
44
|
+
* the host handles transcript actions. The live-steering marker and the
|
|
44
45
|
* agent's reaction are chips at the bottom-right, so a reaction landing
|
|
45
46
|
* later updates the frame in place, even deep in scrollback.
|
|
46
47
|
*/
|
|
@@ -8,8 +8,9 @@ export declare class CountdownTimer {
|
|
|
8
8
|
constructor(timeoutMs: number, tui: TUI | undefined, onTick: (seconds: number) => void, onExpire: () => void);
|
|
9
9
|
/**
|
|
10
10
|
* The remaining time as a terminal-clocked `elapsed` node: its age is the
|
|
11
|
-
* negative remaining time (the start lies in the future), so it counts
|
|
12
|
-
*
|
|
11
|
+
* negative remaining time (the start lies in the future), so it counts down
|
|
12
|
+
* to zero and holds there at expiry (no `stopped`: that would freeze it at
|
|
13
|
+
* zero from the start). The age is taken on the first
|
|
13
14
|
* call after a (re)start, when the node is first written, and the node is
|
|
14
15
|
* reused until {@link reset}.
|
|
15
16
|
*/
|
|
@@ -7,10 +7,9 @@ import type { NativeNode } from "../native/node.js";
|
|
|
7
7
|
* becomes one hunk; the terminal draws gutters, word emphasis and highlighting.
|
|
8
8
|
* Removed rows carry old line numbers, added rows new ones and context rows
|
|
9
9
|
* old ones, so the other side is derived from the running line delta.
|
|
10
|
+
* Tern picks the grammar from `path`.
|
|
10
11
|
*/
|
|
11
|
-
export declare function nativeDiff(diffText: string,
|
|
12
|
-
filePath?: string;
|
|
13
|
-
} & TspProps<"diff">): NativeNode;
|
|
12
|
+
export declare function nativeDiff(diffText: string, props?: TspProps<"diff">): NativeNode;
|
|
14
13
|
export interface RenderDiffOptions {
|
|
15
14
|
/** File path used to resolve indentation (.editorconfig + defaults) */
|
|
16
15
|
filePath?: string;
|
|
@@ -100,6 +100,8 @@ export declare class TranscriptContainer extends Container {
|
|
|
100
100
|
blockModes(): readonly TranscriptBlockMode[];
|
|
101
101
|
/** Emitted stable semantic-row counts in transcript order. */
|
|
102
102
|
emittedStableRows(): readonly number[];
|
|
103
|
+
/** Whether any block is still streaming or otherwise unfinalized. */
|
|
104
|
+
hasActiveBlock(): boolean;
|
|
103
105
|
/** Whether visible active capacity and live-block memory permit another admission. */
|
|
104
106
|
canAdmit(rows: number): boolean;
|
|
105
107
|
/** Prepares one atomic replay of the committed ledger and an emitted active-head prefix. */
|
|
@@ -8,6 +8,8 @@ export interface ImageOptions {
|
|
|
8
8
|
maxWidthCells?: number;
|
|
9
9
|
maxHeightCells?: number;
|
|
10
10
|
filename?: string;
|
|
11
|
+
/** File the image was read from; its link target. Images without one link to a blob copy of their bytes. */
|
|
12
|
+
sourcePath?: string;
|
|
11
13
|
/** Shared budget that caps how many inline images render as live graphics. */
|
|
12
14
|
budget?: ImageBudget;
|
|
13
15
|
/**
|
|
@@ -2,6 +2,51 @@ import { type TokensList } from "@linxiraos/pi-utils/marked";
|
|
|
2
2
|
import type { DescribeContext, NativeNode } from "../native/node.js";
|
|
3
3
|
import type { SymbolTheme } from "../symbols.js";
|
|
4
4
|
import type { Component } from "../tui.js";
|
|
5
|
+
/**
|
|
6
|
+
* `text` as the streaming renderer lexes it: OSC 8 terminators unified and
|
|
7
|
+
* tabs expanded. {@link Markdown.getLastRenderStableText} is a prefix of this
|
|
8
|
+
* form, not of the raw source, so append-only publishers that mix settled
|
|
9
|
+
* prefixes with whole blocks must compare both in this form. Rendering it is
|
|
10
|
+
* byte-identical to rendering `text`.
|
|
11
|
+
*/
|
|
12
|
+
export declare function streamingMarkdownSource(text: string): string;
|
|
13
|
+
/**
|
|
14
|
+
* Streaming `md` source for a native terminal, minus a still-growing table row:
|
|
15
|
+
* the unterminated last line when a GFM table (a run of pipe lines holding a
|
|
16
|
+
* header and its delimiter row, outer pipes optional) sits right above it,
|
|
17
|
+
* outside any open code fence. GFM continues a table on any non-blank line, so
|
|
18
|
+
* that line is a row whatever it holds so far. The terminal sizes columns by
|
|
19
|
+
* every row it gets, so a half-streamed row (an unclosed link shows its whole
|
|
20
|
+
* URL) would rewrap the table each frame, and TSP cannot ask it to skip one.
|
|
21
|
+
* The result keeps the newline before the held line, so it is a prefix of
|
|
22
|
+
* `text` and of the result for every append to it: streaming stays
|
|
23
|
+
* append-only. Pass untrimmed source: trimming first drops the newline that
|
|
24
|
+
* marks the last row finished, so that row would be held too.
|
|
25
|
+
*/
|
|
26
|
+
export declare function holdPartialTableRow(text: string): string;
|
|
27
|
+
/**
|
|
28
|
+
* `text`, one inline run whose end is still streaming, with a trailing open
|
|
29
|
+
* link or math span closed the way the finished text most likely closes it,
|
|
30
|
+
* or `undefined` when nothing at its end is open. A link gains its missing
|
|
31
|
+
* `)` (one per open parenthesis in its destination), so it renders as the
|
|
32
|
+
* link it becomes instead of literal brackets and URL. A math body is cut back
|
|
33
|
+
* to its last valid form (a half-typed command, dangling `^`/`_`, or the first
|
|
34
|
+
* `$` of a `$$` closer dropped, open braces closed) and closed, so the
|
|
35
|
+
* rendered math grows in place instead of raw LaTeX turning into symbols at
|
|
36
|
+
* the closer. A `$` body needs a LaTeX character, so a price (`$5 per`) is
|
|
37
|
+
* never speculated. Only prose is: escaped openers and anything inside a code
|
|
38
|
+
* span, closed or still being written, stay literal.
|
|
39
|
+
*/
|
|
40
|
+
export declare function speculativeInlineClose(text: string): string | undefined;
|
|
41
|
+
/**
|
|
42
|
+
* Streaming `md` source for a native terminal with the open link or math span
|
|
43
|
+
* at its end speculatively closed ({@link speculativeInlineClose}), as the TUI
|
|
44
|
+
* renders it. Only the last block is read (a span cannot cross a blank line),
|
|
45
|
+
* and source inside an open code fence is left as it is. Each frame rewrites
|
|
46
|
+
* only the guessed closers at the end, which the reconciler sends as a small
|
|
47
|
+
* `splice`.
|
|
48
|
+
*/
|
|
49
|
+
export declare function speculativeStreamingSource(text: string): string;
|
|
5
50
|
/** @internal exported for tests — the grown-line block-kind gate. */
|
|
6
51
|
export declare function fastLineStartHazard(grownLine: string): boolean;
|
|
7
52
|
/**
|
|
@@ -140,9 +185,10 @@ export declare class Markdown implements Component {
|
|
|
140
185
|
*/
|
|
141
186
|
describe(_cx: DescribeContext): NativeNode;
|
|
142
187
|
/**
|
|
143
|
-
* Width-independent source prefix of the last render
|
|
144
|
-
*
|
|
145
|
-
* display-math opener whose block an append could still close
|
|
188
|
+
* Width-independent source prefix of the last render that no append can
|
|
189
|
+
* change: up to a frozen Markdown block boundary, stopping in front of a
|
|
190
|
+
* display-math opener whose block an append could still close, or, while a
|
|
191
|
+
* list streams as the last block, up to its newest top-level item. Only
|
|
146
192
|
* meaningful while streaming (transient render cache on); grows
|
|
147
193
|
* monotonically under append-only `setText`.
|
|
148
194
|
*/
|
|
@@ -12,6 +12,8 @@ import type { Component } from "../tui.js";
|
|
|
12
12
|
export declare class Text implements Component {
|
|
13
13
|
#private;
|
|
14
14
|
setIgnoreTight(ignore: boolean): this;
|
|
15
|
+
/** Override row wrapping when the source carries structural prefixes. */
|
|
16
|
+
setWrapLine(wrapLine: (line: string, width: number) => string[]): this;
|
|
15
17
|
constructor(text?: string, paddingX?: number, paddingY?: number, customBgFn?: (text: string) => string);
|
|
16
18
|
/** Return bounded text and layout state for debug inspection. */
|
|
17
19
|
debugState(): Record<string, unknown>;
|
|
@@ -22,6 +22,8 @@ export interface TuiDebugTree {
|
|
|
22
22
|
export declare class TuiDebugServer {
|
|
23
23
|
#private;
|
|
24
24
|
constructor(tui: TUI, path: string);
|
|
25
|
+
/** Resolves true once the socket accepts connections, false if listen failed or the server stopped first. */
|
|
26
|
+
get ready(): Promise<boolean>;
|
|
25
27
|
start(): void;
|
|
26
28
|
stop(): void;
|
|
27
29
|
}
|