@linxiraos/pi-tui 1.2.1 → 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.
Files changed (274) hide show
  1. package/CHANGELOG.md +188 -125
  2. package/README.md +36 -0
  3. package/THIRD-PARTY-NOTICES.txt +55 -5
  4. package/dist/types/app-keybindings.d.ts +18 -8
  5. package/dist/types/apps/git/diff-pane.d.ts +5 -0
  6. package/dist/types/apps/git/git-tui.d.ts +16 -2
  7. package/dist/types/apps/git/state.d.ts +11 -0
  8. package/dist/types/autocomplete.d.ts +2 -0
  9. package/dist/types/charts/chart-svg.d.ts +7 -13
  10. package/dist/types/chat/advisor-message.d.ts +4 -1
  11. package/dist/types/chat/assistant-message.d.ts +9 -4
  12. package/dist/types/chat/figure-markdown.d.ts +7 -2
  13. package/dist/types/chat/messages.d.ts +3 -1
  14. package/dist/types/chat/read-tool-group.d.ts +2 -2
  15. package/dist/types/chat/table-chart.d.ts +11 -15
  16. package/dist/types/chat/tool-execution.d.ts +32 -20
  17. package/dist/types/chat/user-message.d.ts +3 -2
  18. package/dist/types/chrome/countdown-timer.d.ts +3 -2
  19. package/dist/types/chrome/diff.d.ts +2 -3
  20. package/dist/types/chrome/transcript-container.d.ts +2 -0
  21. package/dist/types/components/image.d.ts +2 -0
  22. package/dist/types/components/markdown.d.ts +49 -3
  23. package/dist/types/components/text.d.ts +2 -0
  24. package/dist/types/debug-server.d.ts +2 -0
  25. package/dist/types/keybinding-matchers.d.ts +6 -0
  26. package/dist/types/multiplexers/tmux.d.ts +1 -0
  27. package/dist/types/multiplexers/types.d.ts +6 -0
  28. package/dist/types/native/backend.d.ts +5 -4
  29. package/dist/types/native/blobs.d.ts +24 -12
  30. package/dist/types/overlays/agent-hub-projection.d.ts +10 -5
  31. package/dist/types/overlays/annotation-overlay.d.ts +19 -0
  32. package/dist/types/overlays/approval-dialog.d.ts +79 -0
  33. package/dist/types/overlays/ask-dialog.d.ts +11 -6
  34. package/dist/types/overlays/btw-history-panel.d.ts +2 -6
  35. package/dist/types/overlays/hook-editor.d.ts +7 -2
  36. package/dist/types/overlays/hook-input.d.ts +12 -4
  37. package/dist/types/overlays/job-tree.d.ts +50 -0
  38. package/dist/types/overlays/jobs-panel.d.ts +25 -11
  39. package/dist/types/overlays/login-dialog.d.ts +8 -3
  40. package/dist/types/overlays/mcp-add-wizard.d.ts +9 -1
  41. package/dist/types/overlays/model-browser.d.ts +6 -1
  42. package/dist/types/overlays/model-picker.d.ts +2 -0
  43. package/dist/types/overlays/pause-screen.d.ts +5 -0
  44. package/dist/types/overlays/plan-review-overlay.d.ts +4 -0
  45. package/dist/types/overlays/report-panel.d.ts +5 -1
  46. package/dist/types/overlays/reset-usage-selector.d.ts +7 -5
  47. package/dist/types/overlays/session-account-selector.d.ts +4 -0
  48. package/dist/types/overlays/session-info-overlay.d.ts +7 -3
  49. package/dist/types/overlays/session-selector.d.ts +3 -1
  50. package/dist/types/overlays/usage-dashboard.d.ts +6 -6
  51. package/dist/types/prompt/composer.d.ts +21 -20
  52. package/dist/types/prompt/custom-editor.d.ts +20 -10
  53. package/dist/types/prompt/image-references.d.ts +22 -0
  54. package/dist/types/prompt/internal-url-autocomplete.d.ts +1 -0
  55. package/dist/types/prompt/macos-spelling.d.ts +2 -1
  56. package/dist/types/prompt/prose-gate.d.ts +3 -0
  57. package/dist/types/prompt/queued-messages.d.ts +1 -1
  58. package/dist/types/prompt/typing-word.d.ts +25 -0
  59. package/dist/types/prompt/welcome.d.ts +26 -6
  60. package/dist/types/render/hanging-wrap.d.ts +7 -0
  61. package/dist/types/render/hyperlink.d.ts +2 -0
  62. package/dist/types/render/render-utils.d.ts +9 -1
  63. package/dist/types/render/utils.d.ts +1 -1
  64. package/dist/types/setup/scenes/splash.d.ts +6 -5
  65. package/dist/types/status-line/context-usage.d.ts +4 -1
  66. package/dist/types/status-line/host.d.ts +6 -4
  67. package/dist/types/status-line/startup.d.ts +6 -6
  68. package/dist/types/status-line/types.d.ts +3 -0
  69. package/dist/types/stdin-buffer.d.ts +7 -0
  70. package/dist/types/terminal-capabilities.d.ts +16 -1
  71. package/dist/types/terminal-multiplexer.d.ts +7 -0
  72. package/dist/types/terminal.d.ts +8 -4
  73. package/dist/types/theme/symbols.d.ts +1 -1
  74. package/dist/types/theme/theme.d.ts +11 -0
  75. package/dist/types/thinking.d.ts +5 -0
  76. package/dist/types/tmux.d.ts +39 -4
  77. package/dist/types/tools/ast-edit.d.ts +2 -2
  78. package/dist/types/tools/ast-grep.d.ts +2 -2
  79. package/dist/types/tools/bash.d.ts +6 -1
  80. package/dist/types/tools/edit.d.ts +2 -0
  81. package/dist/types/tools/eval.d.ts +53 -4
  82. package/dist/types/tools/find.d.ts +14 -4
  83. package/dist/types/tools/glob.d.ts +3 -3
  84. package/dist/types/tools/grep.d.ts +2 -2
  85. package/dist/types/tools/grouped-file-output.d.ts +9 -4
  86. package/dist/types/tools/native-view.d.ts +1 -1
  87. package/dist/types/tools/read.d.ts +32 -10
  88. package/dist/types/tools/renderer.d.ts +2 -0
  89. package/dist/types/tools/task.d.ts +31 -0
  90. package/dist/types/tools/write.d.ts +2 -0
  91. package/dist/types/tui.d.ts +20 -3
  92. package/package.json +10 -10
  93. package/src/app-keybindings.d.ts +18 -8
  94. package/src/app-keybindings.ts +20 -8
  95. package/src/apps/autoresearch-dashboard.ts +444 -27
  96. package/src/apps/debug/raw-sse.ts +2 -2
  97. package/src/apps/git/diff-pane.ts +39 -41
  98. package/src/apps/git/git-tui.ts +80 -14
  99. package/src/apps/git/sidebar.ts +10 -1
  100. package/src/apps/git/state.ts +12 -0
  101. package/src/autocomplete.d.ts +2 -0
  102. package/src/autocomplete.ts +21 -19
  103. package/src/bracketed-paste.ts +9 -2
  104. package/src/charts/chart-svg.d.ts +7 -13
  105. package/src/charts/chart-svg.ts +19 -22
  106. package/src/chat/advisor-message.d.ts +4 -1
  107. package/src/chat/advisor-message.ts +77 -24
  108. package/src/chat/assistant-message.d.ts +9 -4
  109. package/src/chat/assistant-message.ts +127 -31
  110. package/src/chat/bash-execution.ts +7 -2
  111. package/src/chat/figure-markdown.d.ts +7 -2
  112. package/src/chat/figure-markdown.ts +10 -3
  113. package/src/chat/image-loading.ts +9 -6
  114. package/src/chat/messages.d.ts +3 -1
  115. package/src/chat/messages.ts +4 -1
  116. package/src/chat/read-tool-group.d.ts +2 -2
  117. package/src/chat/read-tool-group.ts +97 -42
  118. package/src/chat/svg-figure.ts +3 -1
  119. package/src/chat/svg-source.ts +6 -3
  120. package/src/chat/table-chart.d.ts +11 -15
  121. package/src/chat/table-chart.ts +24 -57
  122. package/src/chat/tool-execution.d.ts +32 -20
  123. package/src/chat/tool-execution.ts +103 -36
  124. package/src/chat/user-message.d.ts +3 -2
  125. package/src/chat/user-message.ts +54 -34
  126. package/src/chrome/countdown-timer.ts +3 -3
  127. package/src/chrome/diff.d.ts +2 -3
  128. package/src/chrome/diff.ts +4 -9
  129. package/src/chrome/transcript-container.d.ts +2 -0
  130. package/src/chrome/transcript-container.ts +212 -28
  131. package/src/components/editor.ts +12 -12
  132. package/src/components/image.d.ts +2 -0
  133. package/src/components/image.ts +54 -20
  134. package/src/components/markdown.d.ts +49 -3
  135. package/src/components/markdown.ts +461 -11
  136. package/src/components/settings-list.ts +2 -4
  137. package/src/components/text.d.ts +2 -0
  138. package/src/components/text.ts +11 -1
  139. package/src/debug-server.d.ts +2 -0
  140. package/src/debug-server.ts +51 -69
  141. package/src/hotkeys-markdown.ts +2 -0
  142. package/src/keybinding-matchers.d.ts +6 -0
  143. package/src/keybinding-matchers.ts +19 -0
  144. package/src/multiplexers/tmux.d.ts +1 -0
  145. package/src/multiplexers/tmux.ts +3 -0
  146. package/src/multiplexers/types.d.ts +6 -0
  147. package/src/multiplexers/types.ts +6 -0
  148. package/src/native/backend.d.ts +5 -4
  149. package/src/native/backend.ts +13 -5
  150. package/src/native/blobs.d.ts +24 -12
  151. package/src/native/blobs.ts +56 -7
  152. package/src/native/reconcile.ts +43 -21
  153. package/src/overlays/advisor-config.ts +259 -8
  154. package/src/overlays/agent-hub-projection.d.ts +10 -5
  155. package/src/overlays/agent-hub-projection.ts +63 -12
  156. package/src/overlays/annotation-overlay.ts +422 -168
  157. package/src/overlays/approval-dialog.ts +389 -0
  158. package/src/overlays/ask-dialog.ts +244 -105
  159. package/src/overlays/btw-history-panel.ts +208 -147
  160. package/src/overlays/extensions/extension-list.ts +4 -6
  161. package/src/overlays/hook-editor.ts +90 -32
  162. package/src/overlays/hook-input.ts +105 -19
  163. package/src/overlays/job-tree.ts +177 -0
  164. package/src/overlays/jobs-panel.ts +222 -142
  165. package/src/overlays/login-dialog.ts +201 -91
  166. package/src/overlays/mcp-add-wizard.ts +562 -279
  167. package/src/overlays/model-browser.ts +32 -7
  168. package/src/overlays/model-hub.ts +4 -10
  169. package/src/overlays/model-picker.ts +58 -21
  170. package/src/overlays/pause-screen.ts +81 -23
  171. package/src/overlays/plan-review-overlay.ts +16 -0
  172. package/src/overlays/plugin-selector.ts +17 -1
  173. package/src/overlays/queue-mode-selector.ts +10 -0
  174. package/src/overlays/report-panel.ts +6 -2
  175. package/src/overlays/reset-usage-selector.ts +130 -21
  176. package/src/overlays/session-account-selector.ts +36 -0
  177. package/src/overlays/session-info-overlay.ts +199 -76
  178. package/src/overlays/session-selector.ts +15 -10
  179. package/src/overlays/settings-selector.ts +3 -0
  180. package/src/overlays/show-images-selector.ts +1 -0
  181. package/src/overlays/snapcompact-shape-preview.ts +13 -6
  182. package/src/overlays/theme-selector.ts +6 -1
  183. package/src/overlays/thinking-selector.ts +8 -4
  184. package/src/overlays/tree-selector.ts +117 -2
  185. package/src/overlays/usage-dashboard.ts +498 -144
  186. package/src/prompt/composer-cache.ts +1 -1
  187. package/src/prompt/composer.ts +194 -74
  188. package/src/prompt/custom-editor.ts +168 -65
  189. package/src/prompt/image-references.d.ts +22 -0
  190. package/src/prompt/image-references.ts +79 -2
  191. package/src/prompt/internal-url-autocomplete.ts +1 -0
  192. package/src/prompt/macos-spelling.ts +28 -5
  193. package/src/prompt/prose-gate.ts +3 -0
  194. package/src/prompt/queued-messages.ts +9 -2
  195. package/src/prompt/tips.txt +1 -2
  196. package/src/prompt/typing-word.ts +59 -0
  197. package/src/prompt/welcome.ts +97 -45
  198. package/src/render/code-cell.ts +18 -5
  199. package/src/render/hanging-wrap.d.ts +7 -0
  200. package/src/render/hanging-wrap.ts +58 -0
  201. package/src/render/hyperlink.d.ts +2 -0
  202. package/src/render/hyperlink.ts +5 -0
  203. package/src/render/render-utils.d.ts +9 -1
  204. package/src/render/render-utils.ts +16 -2
  205. package/src/render/utils.d.ts +1 -1
  206. package/src/render/utils.ts +1 -1
  207. package/src/render/width-aware-text.ts +6 -5
  208. package/src/setup/scenes/splash.ts +22 -8
  209. package/src/status-line/component.ts +23 -10
  210. package/src/status-line/context-usage.ts +176 -73
  211. package/src/status-line/footer.ts +18 -35
  212. package/src/status-line/host.ts +6 -1
  213. package/src/status-line/segments.ts +16 -5
  214. package/src/status-line/startup.ts +6 -6
  215. package/src/status-line/types.ts +1 -0
  216. package/src/stdin-buffer.d.ts +7 -0
  217. package/src/stdin-buffer.ts +11 -1
  218. package/src/terminal-capabilities.d.ts +16 -1
  219. package/src/terminal-capabilities.ts +66 -28
  220. package/src/terminal-multiplexer.d.ts +7 -0
  221. package/src/terminal-multiplexer.ts +14 -0
  222. package/src/terminal.d.ts +8 -4
  223. package/src/terminal.ts +160 -46
  224. package/src/theme/symbols.d.ts +1 -1
  225. package/src/theme/symbols.ts +1 -0
  226. package/src/theme/theme-class.ts +1 -0
  227. package/src/theme/theme.d.ts +11 -0
  228. package/src/theme/theme.ts +46 -14
  229. package/src/thinking.d.ts +5 -0
  230. package/src/thinking.ts +9 -1
  231. package/src/tmux.d.ts +39 -4
  232. package/src/tmux.ts +110 -16
  233. package/src/tools/ask.ts +20 -9
  234. package/src/tools/ast-edit.d.ts +2 -2
  235. package/src/tools/ast-edit.ts +30 -7
  236. package/src/tools/ast-grep.d.ts +2 -2
  237. package/src/tools/ast-grep.ts +39 -35
  238. package/src/tools/bash.d.ts +6 -1
  239. package/src/tools/bash.ts +15 -9
  240. package/src/tools/debug.ts +2 -1
  241. package/src/tools/default-renderer.ts +3 -2
  242. package/src/tools/edit.d.ts +2 -0
  243. package/src/tools/edit.ts +100 -21
  244. package/src/tools/eval.d.ts +53 -4
  245. package/src/tools/eval.ts +173 -137
  246. package/src/tools/find.d.ts +14 -4
  247. package/src/tools/find.ts +71 -18
  248. package/src/tools/glob.d.ts +3 -3
  249. package/src/tools/glob.ts +51 -17
  250. package/src/tools/grep.d.ts +2 -2
  251. package/src/tools/grep.ts +99 -22
  252. package/src/tools/grouped-file-output.d.ts +9 -4
  253. package/src/tools/grouped-file-output.ts +21 -6
  254. package/src/tools/lsp.ts +30 -18
  255. package/src/tools/mcp.ts +2 -2
  256. package/src/tools/native-view.d.ts +1 -1
  257. package/src/tools/native-view.ts +2 -2
  258. package/src/tools/read.d.ts +32 -10
  259. package/src/tools/read.ts +89 -43
  260. package/src/tools/renderer.d.ts +2 -0
  261. package/src/tools/renderer.ts +2 -0
  262. package/src/tools/task.d.ts +31 -0
  263. package/src/tools/task.ts +40 -7
  264. package/src/tools/todo.ts +3 -2
  265. package/src/tools/wait.ts +16 -30
  266. package/src/tools/web-search.ts +2 -1
  267. package/src/tools/write.d.ts +2 -0
  268. package/src/tools/write.ts +36 -12
  269. package/src/tools/yield.ts +2 -2
  270. package/src/tui.d.ts +20 -3
  271. package/src/tui.ts +140 -36
  272. package/src/utils.ts +5 -3
  273. package/dist/types/tools/eval-format/code-mode-declarations.d.ts +0 -5
  274. package/src/tools/eval-format/code-mode-declarations.ts +0 -61
@@ -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
- omp-rpc has no third-party runtime dependencies. robomp declares FastAPI,
12
- Uvicorn, HTTPX, Pydantic, pydantic-settings, python-dotenv, Click, and omp-rpc
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, nproc, paste,
83
- printenv, readlink, realpath, rm, seq, sort, stat, tac, tail, tee, touch, tr,
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.foldOrUp": true;
40
- "app.tree.unfoldOrDown": true;
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.foldOrUp": {
318
- readonly defaultKeys: ["ctrl+left", "alt+left"];
319
- readonly description: "Fold or move up";
327
+ readonly "app.tree.previousBranch": {
328
+ readonly defaultKeys: [];
329
+ readonly description: "Jump to the previous branch in /tree";
320
330
  };
321
- readonly "app.tree.unfoldOrDown": {
322
- readonly defaultKeys: ["ctrl+right", "alt+right"];
323
- readonly description: "Unfold or move down";
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
- * so the host resolves them against the live theme (`prepareSvg`) for both
7
- * the rasterized terminal image and the native TSP blob.
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
- /** A drawn chart: the SVG document and its size in user units. */
43
- export interface ChartSvg {
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 { type Theme } from "../theme/index.js";
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
- setToolResultImages(toolCallId: string, images: ImageContent[]): void;
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 { Markdown } from "../components/markdown.js";
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
- export type AdvisorSeverity = "nit" | "concern" | "blocker";
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, with content previews
78
- * on, a `code` block per read clamped by the card's preview while collapsed.
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
- /** A drawn chart, ready to resolve against the theme. */
28
- export interface TableChart {
29
- /** SVG colored with figure tokens (`var(--accent)`, …). */
30
- readonly svg: string;
31
- readonly alt: string;
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
- * A native `image` node drawing `chart` from its SVG — no raster — resolved
64
- * against the active theme; rebuilt when the theme changes.
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 describeTableChart(chart: TableChart, key: string): NativeNode;
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 toolbar (time, Copy, Rewind) fades in on hover when the
43
- * host handles transcript actions. The live-steering marker and the
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 up
12
- * toward zero and freezes there at expiry. The age is taken on the first
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, options?: {
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 ending at a frozen
144
- * Markdown block boundary that no append can move: it stops in front of a
145
- * display-math opener whose block an append could still close. Only
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
  }