@linxiraos/pi-tui 1.1.27 → 1.2.1

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 (376) hide show
  1. package/CHANGELOG.md +50 -461
  2. package/README.md +7 -5
  3. package/dist/types/app-keybindings.d.ts +1 -1
  4. package/dist/types/apps/cleanse-board.d.ts +1 -1
  5. package/dist/types/apps/debug/log-viewer.d.ts +4 -0
  6. package/dist/types/apps/debug/raw-sse-buffer.d.ts +2 -0
  7. package/dist/types/apps/git/git-tui.d.ts +2 -2
  8. package/dist/types/apps/git/help.d.ts +3 -1
  9. package/dist/types/apps/if-bench-board.d.ts +2 -2
  10. package/dist/types/apps/setup-model-picker.d.ts +1 -1
  11. package/dist/types/autocomplete.d.ts +5 -2
  12. package/dist/types/charts/chart-plan.d.ts +674 -0
  13. package/dist/types/charts/chart-svg.d.ts +59 -0
  14. package/dist/types/charts/table-data.d.ts +175 -0
  15. package/dist/types/chat/assistant-message.d.ts +5 -0
  16. package/dist/types/chat/chat-transcript-builder.d.ts +2 -0
  17. package/dist/types/chat/compaction-summary-message.d.ts +1 -0
  18. package/dist/types/chat/execution-shared.d.ts +6 -5
  19. package/dist/types/chat/fence-figure.d.ts +42 -0
  20. package/dist/types/chat/figure-markdown.d.ts +42 -0
  21. package/dist/types/chat/messages.d.ts +1 -1
  22. package/dist/types/chat/svg-figure.d.ts +33 -0
  23. package/dist/types/chat/svg-source.d.ts +49 -0
  24. package/dist/types/chat/table-chart.d.ts +89 -0
  25. package/dist/types/chat/tool-execution.d.ts +2 -0
  26. package/dist/types/chat/user-message.d.ts +15 -2
  27. package/dist/types/chrome/shared.d.ts +9 -0
  28. package/dist/types/chrome/transcript-container.d.ts +6 -0
  29. package/dist/types/components/box.d.ts +1 -0
  30. package/dist/types/components/disclosure.d.ts +1 -0
  31. package/dist/types/components/editor.d.ts +15 -4
  32. package/dist/types/components/form.d.ts +1 -0
  33. package/dist/types/components/image.d.ts +12 -44
  34. package/dist/types/components/key-value-list.d.ts +1 -0
  35. package/dist/types/components/layout/row.d.ts +1 -0
  36. package/dist/types/components/layout/stack.d.ts +1 -0
  37. package/dist/types/components/markdown.d.ts +36 -3
  38. package/dist/types/components/scroll-view.d.ts +1 -0
  39. package/dist/types/components/section.d.ts +1 -0
  40. package/dist/types/components/table.d.ts +1 -0
  41. package/dist/types/components/text.d.ts +1 -0
  42. package/dist/types/components/tree-view.d.ts +7 -0
  43. package/dist/types/components/truncated-text.d.ts +1 -0
  44. package/dist/types/fuzzy.d.ts +29 -1
  45. package/dist/types/key-hint-format.d.ts +1 -1
  46. package/dist/types/keybinding-matchers.d.ts +3 -0
  47. package/dist/types/keybindings.d.ts +1 -1
  48. package/dist/types/kitty-graphics.d.ts +2 -2
  49. package/dist/types/loop-watchdog.d.ts +8 -7
  50. package/dist/types/multiplexers/cmux.d.ts +16 -0
  51. package/dist/types/multiplexers/herdr.d.ts +26 -0
  52. package/dist/types/multiplexers/notify.d.ts +13 -0
  53. package/dist/types/multiplexers/orca.d.ts +12 -0
  54. package/dist/types/multiplexers/screen.d.ts +9 -0
  55. package/dist/types/multiplexers/tmux.d.ts +29 -0
  56. package/dist/types/multiplexers/types.d.ts +100 -0
  57. package/dist/types/multiplexers/wmux.d.ts +12 -0
  58. package/dist/types/multiplexers/zellij.d.ts +12 -0
  59. package/dist/types/native/backend.d.ts +3 -2
  60. package/dist/types/native/blobs.d.ts +7 -3
  61. package/dist/types/native/encode.d.ts +3 -4
  62. package/dist/types/native/overlay.d.ts +5 -0
  63. package/dist/types/overlays/agent-hub-projection.d.ts +6 -5
  64. package/dist/types/overlays/agent-hub-types.d.ts +9 -0
  65. package/dist/types/overlays/agent-hub.d.ts +2 -0
  66. package/dist/types/overlays/agent-transcript-viewer.d.ts +11 -2
  67. package/dist/types/overlays/agents-hub.d.ts +9 -0
  68. package/dist/types/overlays/annotation-overlay.d.ts +19 -2
  69. package/dist/types/overlays/annotation-types.d.ts +2 -0
  70. package/dist/types/overlays/ask-dialog.d.ts +5 -2
  71. package/dist/types/overlays/history-search.d.ts +10 -0
  72. package/dist/types/overlays/hook-selector.d.ts +9 -4
  73. package/dist/types/overlays/jobs-panel.d.ts +1 -7
  74. package/dist/types/overlays/model-browser.d.ts +54 -7
  75. package/dist/types/overlays/model-hub.d.ts +23 -0
  76. package/dist/types/overlays/oauth-selector.d.ts +0 -1
  77. package/dist/types/overlays/plan-review-overlay.d.ts +3 -2
  78. package/dist/types/overlays/session-observer-registry.d.ts +2 -0
  79. package/dist/types/overlays/session-selector.d.ts +6 -2
  80. package/dist/types/overlays/settings-defs.d.ts +1 -0
  81. package/dist/types/overlays/usage-dashboard.d.ts +8 -4
  82. package/dist/types/overlays/usage-display.d.ts +3 -1
  83. package/dist/types/prompt/composer.d.ts +2 -7
  84. package/dist/types/prompt/custom-editor.d.ts +11 -8
  85. package/dist/types/prompt/image-source.d.ts +2 -1
  86. package/dist/types/prompt/interactive-context-helpers.d.ts +4 -1
  87. package/dist/types/prompt/model-mention-autocomplete.d.ts +1 -1
  88. package/dist/types/prompt/welcome.d.ts +19 -42
  89. package/dist/types/render/composite.d.ts +2 -0
  90. package/dist/types/render/output-pane.d.ts +1 -0
  91. package/dist/types/render/render-utils.d.ts +1 -0
  92. package/dist/types/render/tool-card.d.ts +6 -0
  93. package/dist/types/render/width-aware-text.d.ts +2 -0
  94. package/dist/types/setup/scenes/splash.d.ts +1 -1
  95. package/dist/types/setup/scenes/types.d.ts +1 -0
  96. package/dist/types/status-line/component.d.ts +3 -0
  97. package/dist/types/status-line/host.d.ts +4 -1
  98. package/dist/types/status-line/segments.d.ts +2 -0
  99. package/dist/types/status-line/types.d.ts +14 -3
  100. package/dist/types/terminal-capabilities.d.ts +27 -35
  101. package/dist/types/terminal-multiplexer.d.ts +127 -14
  102. package/dist/types/terminal.d.ts +22 -6
  103. package/dist/types/theme/active-symbols.d.ts +1 -1
  104. package/dist/types/theme/schema.d.ts +11 -2
  105. package/dist/types/theme/symbols.d.ts +1 -1
  106. package/dist/types/theme/theme-class.d.ts +7 -0
  107. package/dist/types/theme/theme.d.ts +1 -1
  108. package/dist/types/theme/tui-adapters.d.ts +3 -0
  109. package/dist/types/tmux.d.ts +11 -4
  110. package/dist/types/tools/daemon.d.ts +1 -1
  111. package/dist/types/tools/eval.d.ts +22 -3
  112. package/dist/types/tools/glob.d.ts +4 -0
  113. package/dist/types/tools/native-view.d.ts +47 -0
  114. package/dist/types/tools/output-meta.d.ts +11 -1
  115. package/dist/types/tools/renderer.d.ts +37 -2
  116. package/dist/types/tools/streaming-output.d.ts +20 -1
  117. package/dist/types/tools/task.d.ts +0 -4
  118. package/dist/types/tools/write.d.ts +9 -2
  119. package/dist/types/tools/yield.d.ts +22 -0
  120. package/dist/types/tui.d.ts +31 -0
  121. package/dist/types/utils.d.ts +6 -0
  122. package/dist/types/vim.d.ts +19 -5
  123. package/package.json +13 -9
  124. package/src/app-keybindings.d.ts +1 -1
  125. package/src/app-keybindings.ts +1 -1
  126. package/src/apps/autoresearch-dashboard.ts +7 -3
  127. package/src/apps/cleanse-board.ts +2 -2
  128. package/src/apps/cleanse-picker.ts +1 -1
  129. package/src/apps/debug/log-viewer.ts +188 -72
  130. package/src/apps/debug/raw-sse-buffer.ts +8 -0
  131. package/src/apps/debug/raw-sse.ts +39 -5
  132. package/src/apps/git/diff-pane.ts +26 -5
  133. package/src/apps/git/git-tui.ts +2 -2
  134. package/src/apps/git/help.ts +29 -20
  135. package/src/apps/if-bench-board.ts +2 -2
  136. package/src/apps/ps-top.ts +2 -2
  137. package/src/apps/setup-model-picker.ts +1 -1
  138. package/src/autocomplete.d.ts +5 -2
  139. package/src/autocomplete.ts +67 -43
  140. package/src/charts/chart-plan.d.ts +674 -0
  141. package/src/charts/chart-plan.ts +5081 -0
  142. package/src/charts/chart-svg.d.ts +59 -0
  143. package/src/charts/chart-svg.ts +4657 -0
  144. package/src/charts/table-data.d.ts +175 -0
  145. package/src/charts/table-data.ts +1478 -0
  146. package/src/chat/advisor-message.ts +11 -0
  147. package/src/chat/assistant-message.d.ts +5 -0
  148. package/src/chat/assistant-message.ts +219 -50
  149. package/src/chat/chat-transcript-builder.d.ts +2 -0
  150. package/src/chat/chat-transcript-builder.ts +5 -3
  151. package/src/chat/compaction-summary-message.d.ts +1 -0
  152. package/src/chat/compaction-summary-message.ts +8 -0
  153. package/src/chat/execution-shared.d.ts +6 -5
  154. package/src/chat/execution-shared.ts +42 -25
  155. package/src/chat/fence-figure.d.ts +42 -0
  156. package/src/chat/fence-figure.ts +80 -0
  157. package/src/chat/figure-markdown.d.ts +42 -0
  158. package/src/chat/figure-markdown.ts +174 -0
  159. package/src/chat/messages.d.ts +1 -1
  160. package/src/chat/messages.ts +1 -1
  161. package/src/chat/read-tool-group.ts +6 -4
  162. package/src/chat/skill-message.ts +6 -0
  163. package/src/chat/svg-figure.d.ts +33 -0
  164. package/src/chat/svg-figure.ts +399 -0
  165. package/src/chat/svg-source.d.ts +49 -0
  166. package/src/chat/svg-source.ts +188 -0
  167. package/src/chat/table-chart.d.ts +89 -0
  168. package/src/chat/table-chart.ts +294 -0
  169. package/src/chat/tool-execution.d.ts +2 -0
  170. package/src/chat/tool-execution.ts +80 -6
  171. package/src/chat/user-message.d.ts +15 -2
  172. package/src/chat/user-message.ts +55 -3
  173. package/src/chrome/shared.ts +53 -0
  174. package/src/chrome/transcript-container.d.ts +6 -0
  175. package/src/chrome/transcript-container.ts +93 -13
  176. package/src/components/box.d.ts +1 -0
  177. package/src/components/box.ts +5 -0
  178. package/src/components/disclosure.d.ts +1 -0
  179. package/src/components/disclosure.ts +8 -0
  180. package/src/components/editor.d.ts +15 -4
  181. package/src/components/editor.ts +294 -46
  182. package/src/components/form.d.ts +1 -0
  183. package/src/components/form.ts +8 -0
  184. package/src/components/image.d.ts +12 -44
  185. package/src/components/image.ts +47 -151
  186. package/src/components/key-value-list.d.ts +1 -0
  187. package/src/components/key-value-list.ts +4 -0
  188. package/src/components/layout/row.d.ts +1 -0
  189. package/src/components/layout/row.ts +7 -0
  190. package/src/components/layout/stack.d.ts +1 -0
  191. package/src/components/layout/stack.ts +7 -0
  192. package/src/components/markdown.d.ts +36 -3
  193. package/src/components/markdown.ts +433 -318
  194. package/src/components/scroll-view.d.ts +1 -0
  195. package/src/components/scroll-view.ts +5 -0
  196. package/src/components/section.d.ts +1 -0
  197. package/src/components/section.ts +5 -0
  198. package/src/components/settings-list.ts +2 -0
  199. package/src/components/table.d.ts +1 -0
  200. package/src/components/table.ts +4 -0
  201. package/src/components/text.d.ts +1 -0
  202. package/src/components/text.ts +7 -0
  203. package/src/components/tree-view.d.ts +7 -0
  204. package/src/components/tree-view.ts +38 -8
  205. package/src/components/truncated-text.d.ts +1 -0
  206. package/src/components/truncated-text.ts +5 -0
  207. package/src/desktop-notify.ts +1 -1
  208. package/src/fuzzy.d.ts +29 -1
  209. package/src/fuzzy.ts +115 -30
  210. package/src/key-hint-format.d.ts +1 -1
  211. package/src/key-hint-format.ts +1 -1
  212. package/src/keybinding-matchers.d.ts +3 -0
  213. package/src/keybinding-matchers.ts +6 -2
  214. package/src/keybindings.d.ts +1 -1
  215. package/src/keybindings.ts +1 -1
  216. package/src/kitty-graphics.d.ts +2 -2
  217. package/src/kitty-graphics.ts +4 -4
  218. package/src/loop-watchdog.d.ts +8 -7
  219. package/src/loop-watchdog.ts +18 -13
  220. package/src/multiplexers/cmux.d.ts +16 -0
  221. package/src/multiplexers/cmux.ts +29 -0
  222. package/src/multiplexers/herdr.d.ts +26 -0
  223. package/src/multiplexers/herdr.ts +64 -0
  224. package/src/multiplexers/notify.d.ts +13 -0
  225. package/src/multiplexers/notify.ts +24 -0
  226. package/src/multiplexers/orca.d.ts +12 -0
  227. package/src/multiplexers/orca.ts +16 -0
  228. package/src/multiplexers/screen.d.ts +9 -0
  229. package/src/multiplexers/screen.ts +15 -0
  230. package/src/multiplexers/tmux.d.ts +29 -0
  231. package/src/multiplexers/tmux.ts +40 -0
  232. package/src/multiplexers/types.d.ts +100 -0
  233. package/src/multiplexers/types.ts +110 -0
  234. package/src/multiplexers/wmux.d.ts +12 -0
  235. package/src/multiplexers/wmux.ts +16 -0
  236. package/src/multiplexers/zellij.d.ts +12 -0
  237. package/src/multiplexers/zellij.ts +24 -0
  238. package/src/native/backend.d.ts +3 -2
  239. package/src/native/backend.ts +174 -18
  240. package/src/native/blobs.d.ts +7 -3
  241. package/src/native/blobs.ts +47 -12
  242. package/src/native/encode.d.ts +3 -4
  243. package/src/native/encode.ts +58 -31
  244. package/src/native/overlay.d.ts +5 -0
  245. package/src/native/overlay.ts +13 -0
  246. package/src/native/reconcile.ts +4 -0
  247. package/src/overlays/agent-hub-projection.d.ts +6 -5
  248. package/src/overlays/agent-hub-projection.ts +124 -13
  249. package/src/overlays/agent-hub-types.d.ts +9 -0
  250. package/src/overlays/agent-hub-types.ts +6 -0
  251. package/src/overlays/agent-hub.ts +46 -31
  252. package/src/overlays/agent-transcript-viewer.ts +91 -23
  253. package/src/overlays/agents-hub.ts +28 -8
  254. package/src/overlays/annotation-overlay.ts +293 -90
  255. package/src/overlays/annotation-types.ts +2 -0
  256. package/src/overlays/ask-dialog.ts +7 -10
  257. package/src/overlays/btw-history-panel.ts +12 -1
  258. package/src/overlays/copy-selector.ts +30 -8
  259. package/src/overlays/extensions/state-manager.ts +52 -12
  260. package/src/overlays/history-search.ts +100 -7
  261. package/src/overlays/hook-selector.ts +12 -5
  262. package/src/overlays/jobs-panel.ts +28 -46
  263. package/src/overlays/model-browser.ts +341 -110
  264. package/src/overlays/model-hub.ts +300 -49
  265. package/src/overlays/move-overlay.ts +28 -14
  266. package/src/overlays/oauth-selector.ts +54 -70
  267. package/src/overlays/plan-review-overlay.ts +194 -70
  268. package/src/overlays/plugin-settings.ts +11 -5
  269. package/src/overlays/report-panel.ts +2 -2
  270. package/src/overlays/rewind-selector.ts +86 -17
  271. package/src/overlays/session-observer-registry.d.ts +2 -0
  272. package/src/overlays/session-observer-registry.ts +10 -2
  273. package/src/overlays/session-selector.ts +64 -26
  274. package/src/overlays/settings-defs.ts +4 -3
  275. package/src/overlays/settings-selector.ts +33 -8
  276. package/src/overlays/snapcompact-shape-preview.ts +2 -3
  277. package/src/overlays/stats-notice.ts +1 -1
  278. package/src/overlays/tree-selector.ts +41 -20
  279. package/src/overlays/usage-dashboard.ts +100 -50
  280. package/src/overlays/usage-display.ts +10 -4
  281. package/src/prompt/attachment-chips.ts +15 -11
  282. package/src/prompt/composer-attachments.ts +6 -4
  283. package/src/prompt/composer-cache.ts +4 -6
  284. package/src/prompt/composer.ts +6 -37
  285. package/src/prompt/custom-editor.ts +54 -26
  286. package/src/prompt/image-source.ts +2 -1
  287. package/src/prompt/interactive-context-helpers.ts +30 -18
  288. package/src/prompt/macos-spelling.ts +7 -0
  289. package/src/prompt/magic-keywords.ts +11 -2
  290. package/src/prompt/model-mention-autocomplete.ts +14 -14
  291. package/src/prompt/tips.txt +6 -5
  292. package/src/prompt/welcome.ts +235 -411
  293. package/src/prompt/word-completion.ts +38 -5
  294. package/src/render/composite.d.ts +2 -0
  295. package/src/render/composite.ts +64 -0
  296. package/src/render/output-pane.d.ts +1 -0
  297. package/src/render/output-pane.ts +6 -0
  298. package/src/render/render-utils.d.ts +1 -0
  299. package/src/render/render-utils.ts +11 -0
  300. package/src/render/tool-card.d.ts +6 -0
  301. package/src/render/tool-card.ts +15 -0
  302. package/src/render/width-aware-text.d.ts +2 -0
  303. package/src/render/width-aware-text.ts +5 -0
  304. package/src/setup/scenes/model.ts +2 -1
  305. package/src/setup/scenes/splash.ts +116 -53
  306. package/src/setup/scenes/types.ts +1 -0
  307. package/src/status-line/component.ts +292 -78
  308. package/src/status-line/host.ts +4 -1
  309. package/src/status-line/segments.ts +40 -22
  310. package/src/status-line/types.ts +15 -3
  311. package/src/terminal-capabilities.d.ts +27 -35
  312. package/src/terminal-capabilities.ts +75 -189
  313. package/src/terminal-multiplexer.d.ts +127 -14
  314. package/src/terminal-multiplexer.ts +112 -33
  315. package/src/terminal.d.ts +22 -6
  316. package/src/terminal.ts +139 -37
  317. package/src/theme/active-symbols.d.ts +1 -1
  318. package/src/theme/active-symbols.ts +1 -1
  319. package/src/theme/schema-validation.ts +1 -0
  320. package/src/theme/schema.d.ts +11 -2
  321. package/src/theme/schema.ts +14 -1
  322. package/src/theme/session-color.ts +1 -7
  323. package/src/theme/symbols.d.ts +1 -1
  324. package/src/theme/symbols.ts +6 -1
  325. package/src/theme/theme-class.d.ts +7 -0
  326. package/src/theme/theme-class.ts +26 -1
  327. package/src/theme/theme-schema.json +5 -1
  328. package/src/theme/theme.d.ts +1 -1
  329. package/src/theme/theme.ts +8 -4
  330. package/src/theme/tui-adapters.d.ts +3 -0
  331. package/src/theme/tui-adapters.ts +68 -0
  332. package/src/tmux.d.ts +11 -4
  333. package/src/tmux.ts +47 -11
  334. package/src/tools/ast-edit.ts +59 -35
  335. package/src/tools/ast-grep.ts +35 -16
  336. package/src/tools/bash.ts +92 -42
  337. package/src/tools/daemon.d.ts +1 -1
  338. package/src/tools/daemon.ts +1 -1
  339. package/src/tools/default-renderer.ts +35 -19
  340. package/src/tools/edit.ts +142 -120
  341. package/src/tools/eval-format/index.ts +28 -2
  342. package/src/tools/eval-format/javascript.ts +7 -5
  343. package/src/tools/eval.d.ts +22 -3
  344. package/src/tools/eval.ts +364 -208
  345. package/src/tools/fetch.ts +5 -6
  346. package/src/tools/glob.d.ts +4 -0
  347. package/src/tools/glob.ts +33 -65
  348. package/src/tools/grep.ts +81 -48
  349. package/src/tools/index.ts +2 -0
  350. package/src/tools/lsp.ts +81 -59
  351. package/src/tools/mcp.ts +111 -68
  352. package/src/tools/native-view.d.ts +47 -0
  353. package/src/tools/native-view.ts +102 -1
  354. package/src/tools/output-meta.d.ts +11 -1
  355. package/src/tools/output-meta.ts +23 -3
  356. package/src/tools/read.ts +7 -5
  357. package/src/tools/renderer.d.ts +37 -2
  358. package/src/tools/renderer.ts +42 -2
  359. package/src/tools/streaming-output.d.ts +20 -1
  360. package/src/tools/streaming-output.ts +149 -50
  361. package/src/tools/task.d.ts +0 -4
  362. package/src/tools/task.ts +112 -59
  363. package/src/tools/todo.ts +119 -30
  364. package/src/tools/wait.ts +34 -24
  365. package/src/tools/web-search.ts +1 -1
  366. package/src/tools/write.d.ts +9 -2
  367. package/src/tools/write.ts +147 -95
  368. package/src/tools/yield.d.ts +22 -0
  369. package/src/tools/yield.ts +225 -0
  370. package/src/tui.d.ts +31 -0
  371. package/src/tui.ts +309 -160
  372. package/src/utils.d.ts +6 -0
  373. package/src/utils.ts +19 -0
  374. package/src/vim.d.ts +19 -5
  375. package/src/vim.ts +333 -18
  376. package/src/windows-input-mode.ts +8 -0
@@ -71,7 +71,7 @@ declare class SessionList<T extends SessionSelectorEntry> implements Component {
71
71
  onExit: () => void;
72
72
  onToggleScope?: () => void;
73
73
  onDeleteRequest?: (session: T) => void;
74
- /** Re-render hook for async list updates (fuzzy scan chunks, history merge). */
74
+ /** Re-render hook for async list updates (fuzzy scan completion, history merge). */
75
75
  onRequestRender?: () => void;
76
76
  constructor(sessions: T[], showCwd?: boolean, historyMatcher?: SessionHistoryMatcher, getTerminalRows?: () => number, pinnedIds?: ReadonlySet<string>, currentSessionPath?: string | (() => string | undefined));
77
77
  /** Replace the visible dataset, e.g. when toggling folder/all-projects scope. */
@@ -129,7 +129,11 @@ export interface SessionSelectorOptions<T extends SessionSelectorEntry = Session
129
129
  title?: string;
130
130
  /** Fixed scope label, or false to omit the scope suffix. */
131
131
  scopeLabel?: string | false;
132
- /** Show each session's working directory in the list. */
132
+ /**
133
+ * Show each session's working directory in the list. Defaults to on when
134
+ * the session files live in more than one directory (e.g. the folder scope
135
+ * merging a repository's worktrees).
136
+ */
133
137
  showCwd?: boolean;
134
138
  /**
135
139
  * Reads the live terminal height so the visible window fits the viewport.
@@ -43,6 +43,7 @@ export type AnyUiMetadata = UiBase & {
43
43
  options?: ReadonlyArray<SubmenuOption> | "runtime";
44
44
  secret?: boolean;
45
45
  ordered?: boolean;
46
+ editor?: "json";
46
47
  };
47
48
  /** Structural schema entries supplied by the application host. */
48
49
  export interface SettingsDisplayEntry {
@@ -33,10 +33,12 @@ export interface ProviderCard {
33
33
  /** Number of represented accounts, including unavailable usage lookups. */
34
34
  accounts: number;
35
35
  unavailableAccounts: string[];
36
- /** Window rows sorted most-pressing first. */
36
+ /** Window rows in provider-declared order (e.g. 5h → weekly → monthly); the fullest CARD_MAX_WINDOWS lead. */
37
37
  windows: CardWindowRow[];
38
- /** True when every account reports no limits (e.g. enterprise plans). */
38
+ /** True when every account reports no limits (e.g. enterprise plans, providers without a quota API). */
39
39
  unlimited: boolean;
40
+ /** Distinct report notes across accounts (e.g. why a provider exposes no quota windows). */
41
+ notes: string[];
40
42
  /** True when nothing is used anywhere (or there are no limits): collapses to a tick. */
41
43
  idle: boolean;
42
44
  resetCredits?: {
@@ -52,8 +54,10 @@ export interface ProviderCard {
52
54
  * Collapse usage reports into one compact card per provider: limits grouped by
53
55
  * quota bucket (label + window), each bucket showing the mean used fraction
54
56
  * across accounts (matching the classic report's aggregate "% free") with the
55
- * most-used account's reset countdown. Cards sort most-pressing first so
56
- * what's burning is on top-left; fully idle providers collapse into a tick.
57
+ * most-used account's reset countdown. Rows keep the provider's declared window
58
+ * order so 5h → week → month reads the same every time; cards sort by their
59
+ * fullest window so what's burning is on top-left; fully idle providers
60
+ * collapse into a tick.
57
61
  */
58
62
  export declare function buildProviderCards(reports: UsageReport[], nowMs: number, unavailableAccounts?: readonly UnavailableUsageAccount[]): ProviderCard[];
59
63
  /** GitHub-style week-per-column heatmap grid derived from daily activity. */
@@ -1,4 +1,4 @@
1
- import type { UsageLimit, UsageReport, UsageResetCredits } from "@linxiraos/pi-ai";
1
+ import type { UsageLimit, UsageReport, UsageResetCreditDetail, UsageResetCredits } from "@linxiraos/pi-ai";
2
2
  /** Include the usage tier in a limit title unless its label already names it. */
3
3
  export declare function formatLimitTitle(limit: UsageLimit): string;
4
4
  /** Human-readable quota scope for a normalized saved-reset window ID. */
@@ -10,6 +10,8 @@ export interface UsageResetSummary {
10
10
  soonestExpiry?: string;
11
11
  unavailableReason?: string;
12
12
  }
13
+ /** Expiry (epoch ms) of a credit that still banks a reset, whether or not it can be spent now. */
14
+ export declare function bankedResetCreditExpiryMs(credit: UsageResetCreditDetail): number | undefined;
13
15
  /**
14
16
  * Normalize old count-only and current provider reset metadata for display.
15
17
  * `availableCount` is banked inventory; `redeemableCount` is the subset that
@@ -6,7 +6,7 @@ import { type Component, type ResizeScrollbackMode, type TerminalFramePlan, type
6
6
  import type { NativeSurface, NativeSurfaceProvider } from "../native/node.js";
7
7
  import { CustomEditor } from "./custom-editor.js";
8
8
  import type { WordCompletionMethod } from "./word-completion.js";
9
- import { WelcomeComponent, type RecentSession, type LspServerInfo } from "./welcome.js";
9
+ import { WelcomeComponent } from "./welcome.js";
10
10
  /** Live settings that affect the composer before and after session adoption. */
11
11
  export interface ComposerPreferences {
12
12
  readonly quiet: boolean;
@@ -25,11 +25,6 @@ export declare const COMPOSER_DEFAULTS: ComposerPreferences;
25
25
  /** Welcome data that can be supplied initially or patched as startup resolves it. */
26
26
  export interface ComposerWelcomeUpdate {
27
27
  readonly version?: string;
28
- readonly modelName?: string;
29
- readonly providerName?: string;
30
- readonly recentSessions?: readonly RecentSession[];
31
- /** Detected project servers; `null` means LSP is disabled and hides the welcome section. */
32
- readonly lspServers?: readonly LspServerInfo[] | null;
33
28
  }
34
29
  /**
35
30
  * Status-bar inputs persisted by the last session. The first frame renders
@@ -47,7 +42,7 @@ export interface ComposerStatusCache {
47
42
  /** Optional dependencies and initial state for a standalone composer. */
48
43
  export interface ComposerOptions {
49
44
  readonly terminal?: Terminal;
50
- /** Extra TUI construction options (render scheduler injection for tests and `zeta render`). */
45
+ /** Extra TUI construction options (render scheduler injection for tests and `zetacode render`). */
51
46
  readonly tuiOptions?: TUIOptions;
52
47
  readonly preferences?: Partial<ComposerPreferences>;
53
48
  readonly welcome?: ComposerWelcomeUpdate;
@@ -7,7 +7,7 @@ import type { AppKeybinding } from "../app-keybindings.js";
7
7
  import type { DescribeContext, NativeNode, NativeUiEvent } from "../native/node.js";
8
8
  import type { ComposerFactsSource } from "../status-line/types.js";
9
9
  import { type MacOSSpellingFeatures } from "./macos-spelling.js";
10
- import type { TspEditorDecoration } from "@linxiraos/pi-wire";
10
+ import type { TspEditorDecoration, TspText } from "@linxiraos/pi-wire";
11
11
  import { type WordCompletionMethod } from "./word-completion.js";
12
12
  /** Live composer state the TSP layout shows; the interactive host wires {@link CustomEditor.composerState}. */
13
13
  export interface ComposerNativeState {
@@ -26,6 +26,8 @@ export interface ComposerNativeState {
26
26
  readonly running: boolean;
27
27
  /** The viewed subagent's lineage, outermost first and the viewed agent last; undefined on the main session. */
28
28
  readonly viewing?: readonly string[];
29
+ /** The session's title, quoted in italics as the TSP placeholder; undefined until it has one. */
30
+ readonly title?: string;
29
31
  }
30
32
  /** Independently switchable prose-assistance features of the composer. */
31
33
  export interface SpellingFeatures extends MacOSSpellingFeatures {
@@ -116,19 +118,19 @@ export declare class CustomEditor extends Editor {
116
118
  * Numbered by a per-draft monotonic counter so a deleted chip never recycles its number
117
119
  * (labels key the atom table). */
118
120
  pendingTexts: TextAttachment[];
119
- /** Host-wired producer of per-image `file://` links (session blob store); drives clickable
120
- * chip tokens for restored drafts (esc-esc, `/tree`, branch). */
121
+ /** Host-wired producer of per-image chip targets (a file on disk, or a session blob copy);
122
+ * drives clickable chip tokens for restored drafts (esc-esc, `/tree`, branch). */
121
123
  draftImageLinkMaterializer?: (images: readonly ImageContent[]) => Promise<(string | undefined)[] | undefined>;
122
124
  /**
123
125
  * The host {@link TUI}, captured when a plugin constructs this editor through
124
- * the upstream-pi `(tui, theme, keybindings)` convention. Undefined for zeta's
126
+ * the upstream-pi `(tui, theme, keybindings)` convention. Undefined for omp's
125
127
  * own `new CustomEditor(theme)` callers (they drive repaints through the
126
128
  * interactive-mode wiring instead). Plugins that call `this.tui.requestRender()`
127
129
  * in their overrides read it here (issue #4766).
128
130
  */
129
131
  tui?: TUI;
130
132
  /**
131
- * Accept both the zeta constructor convention — `new CustomEditor(theme)` —
133
+ * Accept both the omp constructor convention — `new CustomEditor(theme)` —
132
134
  * and the upstream-pi `Editor` convention — `new Editor(tui, theme, keybindings)`
133
135
  * — that {@link ExtensionUIContext.setEditorComponent}'s factory contract
134
136
  * advertises `(tui, theme, keybindings)`. Plugins written against upstream pi
@@ -191,7 +193,8 @@ export declare class CustomEditor extends Editor {
191
193
  static readonly SHIMMER_PERIOD_MS = 1800;
192
194
  /** Decorate magic keywords, attachments, and the queue-composer header/list markers.
193
195
  * Queue shorthand reserves its first logical line as a dim `Queueing` label; sequential
194
- * item markers use the accent color so separate follow-ups remain visible while composing. */
196
+ * item markers use the accent color so separate follow-ups remain visible while composing.
197
+ * Called once per layout segment, so whole-buffer inputs are computed once per text revision. */
195
198
  decorateText: (text: string, context: EditorTextDecorationContext) => string;
196
199
  /**
197
200
  * TSP decorations: magic keywords shimmer (terminal-clocked) in the accent
@@ -219,8 +222,8 @@ export declare class CustomEditor extends Editor {
219
222
  setShimmerRepaintHandler(handler: (() => void) | undefined): void;
220
223
  /** Editing is available during bootstrap; atomic sends wait until submission is wired and enabled. */
221
224
  protected get nativeSendable(): boolean;
222
- /** Viewing a subagent, the draft goes to it: the placeholder names it. */
223
- describePlaceholder: () => string;
225
+ /** Viewing a subagent, the draft goes to it: the placeholder names it; else the session's title, quoted in italics. */
226
+ describePlaceholder: () => TspText;
224
227
  /** A shell-mode draft highlights as its language. */
225
228
  describeLanguage: () => string | undefined;
226
229
  /** Host-owned live state for the TSP composer (shell mode, effort chip, send/stop). */
@@ -4,7 +4,8 @@
4
4
  * to the session's `local://` root, and generated video contact-sheet previews.
5
5
  * Symbol metadata stays out of serialized/model-bound image data while traveling
6
6
  * with the draft object, until AgentSession creates the hidden companion message
7
- * that tells the model the path (and link materialization prefers it over a blob copy).
7
+ * that tells the model the path. The model keeps `local://` references across
8
+ * `/move`; chips for internal URLs instead use a stable blob copy.
8
9
  */
9
10
  import type { ImageContent } from "@linxiraos/pi-ai";
10
11
  /** How an image attachment's backing file entered the session. */
@@ -17,13 +17,16 @@ export interface AssistantMessageHost {
17
17
  readonly proseOnlyThinking: boolean;
18
18
  readonly expandThinkingBlocks: boolean;
19
19
  readonly assistantImagesVisible: boolean;
20
+ /** Whether the viewed session's tables get charts: the main session's do, a focused subagent's do not. */
21
+ readonly tableChartsVisible: boolean;
20
22
  readonly hideToolActivity: boolean;
21
23
  readonly toolOutputExpanded: boolean;
22
24
  readonly ui: {
23
25
  requestRender(): void;
24
26
  readonly imageBudget: ImageBudget;
25
27
  };
26
- resolveAssistantMessageLinks(texts: readonly string[]): Promise<ReadonlyMap<string, string>>;
28
+ /** Resolve already-extracted Markdown link destinations to local targets. */
29
+ resolveAssistantMessageLinkHrefs(hrefs: readonly string[]): Promise<ReadonlyMap<string, string>>;
27
30
  }
28
31
  /**
29
32
  * Resolve and cache the current session's model-authored prose links. Existing
@@ -19,7 +19,7 @@ export declare function applyModelMentionCompletion(lines: string[], cursorLine:
19
19
  };
20
20
  /**
21
21
  * Create a session-scoped model candidate lookup using picker ordering. The
22
- * scope and search affinity are reused across queries until their inputs change.
22
+ * scope and its prepared ranker are reused across queries until their inputs change.
23
23
  */
24
24
  export declare function createModelMentionSource(host: {
25
25
  source: ModelBrowserSource;
@@ -1,58 +1,38 @@
1
- import type { DescribeContext, NativeNode, NativeUiEvent } from "../native/node.js";
1
+ import type { DescribeContext, NativeNode } from "../native/node.js";
2
2
  import type { Component } from "../tui.js";
3
- /**
4
- * Fixed number of session rows in the welcome box so its height stays stable
5
- * across recent-session updates.
6
- */
7
- export declare const WELCOME_SESSION_SLOTS = 4;
8
- /**
9
- * Fixed number of LSP-server rows, for the same reason. Overflow is sliced so
10
- * the box height is constant regardless of how many servers a project has.
11
- */
12
- export declare const WELCOME_LSP_SLOTS = 4;
13
3
  /** Pick a tip from `tips`, biased toward "[NEW]" tips by {@link NEW_TIP_WEIGHT};
14
4
  * `r` is a uniform sample in [0, 1). Returns "" when `tips` is empty.
15
5
  * Exported for tests. */
16
6
  export declare function pickWeightedTip(tips: readonly string[], r: number): string;
17
- export declare function renderWelcomeTip(tip: string, boxWidth: number, phase?: number): string[];
18
- export interface RecentSession {
19
- name: string;
20
- timeAgo: string;
21
- /** Session file; a native click on the row resumes it. */
22
- path?: string;
23
- }
24
- export interface LspServerInfo {
25
- name: string;
26
- status: "ready" | "error" | "connecting" | "available";
27
- fileTypes: string[];
28
- }
29
7
  /**
30
- * Premium welcome screen with block-based ZETA logo and two-column layout.
8
+ * The welcome tip as lines of at most `width` columns: the `welcomeTipLabel`
9
+ * label and the body wrapped together, with no indent, so the banner can center
10
+ * each line. `isNew` drives the rainbow "welcomeNewTag" suffix; it is passed in
11
+ * because the marker lives in tips.txt, not in the resolved body. `[]` when
12
+ * `width` leaves no room for a useful line.
13
+ */
14
+ export declare function renderWelcomeTip(tip: string, width: number, phase?: number, isNew?: boolean): string[];
15
+ /**
16
+ * The session's welcome banner. In a terminal: the gradient logo beside the
17
+ * `zeta` wordmark with the version under it (the logo alone when the lockup does
18
+ * not fit) and the tip of the session (dropped below {@link TIP_MIN_COLUMNS}
19
+ * columns). Natively: a card with the same logo, wordmark, version and tip
20
+ * ({@link WelcomeComponent.describe}).
31
21
  */
32
22
  export declare class WelcomeComponent implements Component {
33
23
  #private;
34
24
  private version;
35
- private modelName;
36
- private providerName;
37
- private recentSessions;
38
- /** Detected project servers; `null` means LSP is disabled and hides the section. */
39
- private lspServers;
40
- constructor(version: string, modelName?: string, providerName?: string, recentSessions?: RecentSession[],
41
- /** Detected project servers; `null` means LSP is disabled and hides the section. */
42
- lspServers?: LspServerInfo[] | null);
25
+ constructor(version: string);
43
26
  get tip(): string | undefined;
44
27
  invalidate(): void;
45
28
  /**
46
- * A `card` (`zeta.welcome`) titled with the app version. The brand column
47
- * (`zeta.welcome.brand`: greeting and the terminal's builtin `zeta` mark, which
48
- * it animates) sits beside the info column (`zeta.welcome.info`: prompt-sigil
49
- * keycaps, LSP servers, recent sessions); the tip of the session closes the card. Roles
50
- * carry the look (gradient logo, type scale, column hairline); a "[NEW]" tip
29
+ * A `card` (`zeta.welcome`) mirroring the terminal banner: the lockup
30
+ * (`zeta.welcome.lockup`: the terminal's builtin `zeta` mark, which it animates,
31
+ * beside the wordmark with the version under it) and the tip of the session.
32
+ * Roles carry the look (gradient logo, type scale); a "[NEW]" tip
51
33
  * carries a terminal-clocked shimmering tag.
52
34
  */
53
35
  describe(_cx: DescribeContext): NativeNode;
54
- /** A click on a recent session resumes it. */
55
- handleNativeEvent(event: NativeUiEvent): void;
56
36
  /** The intro keeps the welcome block mutable; settling lets it retire to history. */
57
37
  isTranscriptBlockFinalized(): boolean;
58
38
  /**
@@ -71,9 +51,6 @@ export declare class WelcomeComponent implements Component {
71
51
  stopIntro(): void;
72
52
  /** Update the version embedded in the welcome border title. */
73
53
  setVersion(version: string): void;
74
- setModel(modelName: string, providerName: string): void;
75
- setRecentSessions(sessions: RecentSession[]): void;
76
- setLspServers(servers: LspServerInfo[] | null): void;
77
54
  render(termWidth: number): readonly string[];
78
55
  }
79
56
  /** Block-grid brand mark shared by the welcome and setup surfaces. */
@@ -0,0 +1,2 @@
1
+ /** Splice overlay content into a base line at a specific column. Single-pass optimized. */
2
+ export declare function compositeLineAt(baseLine: string, overlayLine: string, startCol: number, overlayWidth: number, totalWidth: number): string;
@@ -92,6 +92,7 @@ export declare class OutputPane implements Component {
92
92
  describe(_cx: DescribeContext): NativeNode;
93
93
  render(width: number): readonly string[];
94
94
  invalidate(): void;
95
+ releaseRenderCaches(): void;
95
96
  }
96
97
  /** Default styling for plain tool output while preserving existing ANSI. */
97
98
  export declare function styleToolOutputLine(line: string, theme: Theme): string;
@@ -298,6 +298,7 @@ export interface RenderedStringCache {
298
298
  export declare function createRenderedStringCache(): RenderedStringCache;
299
299
  /** Drop the memo so the next lookup re-renders (e.g. the render function identity changed). */
300
300
  export declare function invalidateRenderedStringCache(cache: RenderedStringCache): void;
301
+ export declare function releaseRenderedStringCache(cache: RenderedStringCache): void;
301
302
  /** Reuse a rendered string while its theme, expansion, content, and salt match. */
302
303
  export declare function cachedRenderedString(cache: RenderedStringCache | undefined, theme: Theme, expanded: boolean, salt: string, content: string, render: () => string): string;
303
304
  /**
@@ -46,6 +46,11 @@ export interface ToolCardOptions {
46
46
  paddingY?: number;
47
47
  ignoreTight?: boolean;
48
48
  onInvalidate?: () => void;
49
+ /**
50
+ * Drop builder-owned memos the next build recomputes. Called by
51
+ * {@link ToolCard.releaseRenderCaches}, which never calls `onInvalidate`.
52
+ */
53
+ onReleaseRenderCaches?: () => void;
49
54
  onDispose?: () => void;
50
55
  }
51
56
  /** Map transcript lifecycle terminology onto the output frame's visual states. */
@@ -71,6 +76,7 @@ export declare class ToolCard implements Component {
71
76
  handleInput(data: string): void;
72
77
  setIgnoreTight(ignore: boolean): void;
73
78
  invalidate(): void;
79
+ releaseRenderCaches(): void;
74
80
  dispose(): void;
75
81
  }
76
82
  /** Construct a lazy framed tool card. */
@@ -20,6 +20,8 @@ export declare class WidthAwareText implements Component {
20
20
  setCustomBgFn(customBgFn?: (text: string) => string): void;
21
21
  setIgnoreTight(ignore: boolean): this;
22
22
  invalidate(): void;
23
+ /** The formatted text stays: the inner `Text` renders from it, so dropping it would free nothing. */
24
+ releaseRenderCaches(): void;
23
25
  /**
24
26
  * Re-run the formatter on the next render because its inputs changed.
25
27
  * Unlike {@link invalidate}, the inner `Text` keeps its wrap cache, so a
@@ -3,7 +3,7 @@ export declare const SETUP_SPLASH_MS = 2600;
3
3
  export declare const SETUP_TICK_MS = 33;
4
4
  export declare function renderStarfield(width: number, height: number, frame: number): string[];
5
5
  /**
6
- * Animated setup splash, in the spirit of the omp landing page: the brand ζ
6
+ * Animated setup splash, in the spirit of the Zeta visual identity: the brand ζ
7
7
  * mark rendered with the live diagonal gradient + shine sweep, rising out of a
8
8
  * rippling, gradient-lit water surface, under a faint twinkling starfield. The
9
9
  * mark and water share one continuous gradient so the sweep reads across the
@@ -28,6 +28,7 @@ export interface SetupHost extends SetupUiHost {
28
28
  readonly disabledProviders: readonly string[];
29
29
  readonly authStorage: AuthStorage;
30
30
  readonly modelSource: ModelBrowserSource;
31
+ /** Available and catalog models of every kind; role chips resolve over all of them, rows list chat models. */
31
32
  getModels(): {
32
33
  available: Model[];
33
34
  all: Model[];
@@ -86,6 +86,7 @@ export declare class StatusLineComponent<TSession extends StatusLineSession = St
86
86
  setPlanModeStatus(status: {
87
87
  enabled: boolean;
88
88
  paused: boolean;
89
+ workflow?: "parallel" | "iterative" | "ultra";
89
90
  } | undefined): void;
90
91
  setLoopModeStatus(status: NonNullable<SegmentContext["loopMode"]> | undefined): void;
91
92
  setGoalModeStatus(status: {
@@ -113,6 +114,8 @@ export declare class StatusLineComponent<TSession extends StatusLineSession = St
113
114
  setRecording(recording: boolean): void;
114
115
  /** Set the callback that presents detected Codex reset celebrations, or clear it with `undefined`. */
115
116
  setCodexResetFireworksHandler(handler: ((event: CodexResetFireworksEvent) => void) | undefined): void;
117
+ /** Set the callback that presents the first pool-wide saved-reset expiry warning, or clear it with `undefined`. */
118
+ setResetExpiryNoticeHandler(handler: ((notice: string) => void) | undefined): void;
116
119
  setHookStatus(key: string, text: string | undefined): void;
117
120
  watchBranch(onBranchChange: () => void): void;
118
121
  dispose(): void;
@@ -2,7 +2,7 @@ import type { AgentMessage, ThinkingLevel } from "@linxiraos/pi-agent-core";
2
2
  import type { Tool, UsageLimit, UsageReport } from "@linxiraos/pi-ai";
3
3
  import type { Model } from "@linxiraos/pi-catalog/types";
4
4
  import type { CompactionBoundaries } from "./context-usage.js";
5
- import type { StatusLineSettings } from "./types.js";
5
+ import type { StatusLineSettings, StatusResetExpiry } from "./types.js";
6
6
  export interface StatusAccountIdentity {
7
7
  accountId?: string;
8
8
  email?: string;
@@ -126,6 +126,9 @@ export interface StatusLineHost<TSession extends StatusLineSession = StatusLineS
126
126
  }>;
127
127
  calculateTokensPerSecond(messages: readonly AgentMessage[], isStreaming: boolean): number | null;
128
128
  limitMatchesActiveAccount(report: UsageReport, limit: UsageLimit, identity: StatusAccountIdentity): boolean;
129
+ classifyResetExpiry?(report: UsageReport, nowMs: number): StatusResetExpiry | undefined;
130
+ /** One-line warning for saved resets anywhere in the pool that expire within 24 hours. */
131
+ resetExpiryNotice?(reports: readonly UsageReport[], nowMs: number): string | undefined;
129
132
  computeCompactionBoundaries(session: TSession, contextWindow: number, model?: Model): CompactionBoundaries | null;
130
133
  }
131
134
  export interface FooterHost {
@@ -7,6 +7,8 @@ export type { SegmentContext } from "./types.js";
7
7
  * model segment and the composer's effort chip.
8
8
  */
9
9
  export declare function thinkingLevelWord(session: Pick<StatusLineSession, "state" | "isAutoThinking" | "autoResolvedThinkingLevel">): string | undefined;
10
+ /** Zeta-only: the ultra plan workflow gets its own status-line label (lost in the v18.8.8 merge once already). */
11
+ export declare const PLAN_ULTRA_LABEL = "Plan-Ultra";
10
12
  export declare const SEGMENTS: Record<StatusLineSegmentId, StatusLineSegment>;
11
13
  export declare function renderSegment(id: StatusLineSegmentId, ctx: SegmentContext): RenderedSegment;
12
14
  /** Native description of one segment; null when it is hidden or unknown. */
@@ -93,6 +93,8 @@ export interface SegmentContext {
93
93
  planMode: {
94
94
  enabled: boolean;
95
95
  paused: boolean;
96
+ /** Plan workflow variant; `ultra` renders as `Plan-Ultra` in the mode segment. */
97
+ workflow?: "parallel" | "iterative" | "ultra";
96
98
  } | null;
97
99
  prewalk: {
98
100
  enabled: boolean;
@@ -112,7 +114,7 @@ export interface SegmentContext {
112
114
  } | null;
113
115
  /** Modal editing state, or null when `tui.vimMode` is off. */
114
116
  vim: {
115
- mode: "insert" | "normal" | "visual" | "visual-line";
117
+ mode: "insert" | "normal" | "visual" | "visual-line" | "replace";
116
118
  /** Half-typed operator/count (`"2d"`), empty when nothing is pending. */
117
119
  pending: string;
118
120
  /** Lines spanned by the active Visual selection; 0 outside Visual modes. */
@@ -223,9 +225,18 @@ export interface SegmentContext {
223
225
  expiryHours?: number;
224
226
  expired?: boolean;
225
227
  unavailableReason?: string;
228
+ expiring?: StatusResetExpiry;
226
229
  };
227
230
  } | null;
228
231
  }
232
+ /** How close an account's saved resets are to expiring, when it is worth a warning. */
233
+ export interface StatusResetExpiry {
234
+ /** `soon`: within 7 days; `imminent`: within 24 hours. */
235
+ tier: "soon" | "imminent";
236
+ count: number;
237
+ /** Expiry of the reset the warning is about (epoch ms); it can be later than the soonest banked one. */
238
+ expiresAtMs: number;
239
+ }
229
240
  export interface RenderedSegment {
230
241
  content: string;
231
242
  visible: boolean;
@@ -245,8 +256,8 @@ export interface SegmentView {
245
256
  }
246
257
  /**
247
258
  * The status line's facts for the native composer. A TSP terminal shows no
248
- * status strip: the tab title carries the session, the pane header the path
249
- * and branch, and the composer the rest.
259
+ * status strip: the tab title carries the session, the pane header the path,
260
+ * and the composer the rest (the git branch among its facts).
250
261
  */
251
262
  export interface ComposerFacts {
252
263
  /**
@@ -1,6 +1,6 @@
1
1
  import type { HangulCompatibilityJamoWidth } from "./utils.js";
2
2
  export * from "./terminal-multiplexer.js";
3
- export { isInsideTmux, wrapTmuxPassthrough } from "./tmux.js";
3
+ export { wrapTmuxPassthrough } from "./tmux.js";
4
4
  export declare enum ImageProtocol {
5
5
  Kitty = "\u001B_G",
6
6
  Iterm2 = "\u001B]1337;File=",
@@ -55,12 +55,6 @@ export declare class TerminalInfo {
55
55
  formatNotification(message: string | TerminalNotification): string;
56
56
  sendNotification(message: string | TerminalNotification): void;
57
57
  }
58
- /**
59
- * Whether the agent process is running inside a Zellij session. Read fresh on
60
- * each call (like {@link isInsideTmux}) so a session attached/detached mid-run
61
- * is observed and tests can toggle `Bun.env.ZELLIJ` per case.
62
- */
63
- export declare function isInsideZellij(env?: NodeJS.ProcessEnv): boolean;
64
58
  /**
65
59
  * Whether the agent process runs in an SSH session, so the terminal emulator
66
60
  * is remote and host-local input/keyboard modes cannot be assumed.
@@ -96,12 +90,12 @@ export declare function synchronizedOutputUserOverride(env?: NodeJS.ProcessEnv):
96
90
  * 2. Positive `TERM_FEATURES` advertisement (`Sy`) — survives SSH/mux wrapping.
97
91
  * 3. Windows Terminal (1.24+) via `WT_SESSION`, on native win32 and the
98
92
  * WSL/SSH-fronted host alike.
99
- * 4. Herdr panes. Herdr is otherwise treated as a multiplexer so leaked
100
- * kitty/ghostty identities cannot enable placeholder graphics, but its
101
- * pane VTE is libghostty and already suppresses compositing while DEC 2026
102
- * is set. Leaving sync off lets CUP-diff paints and split write(2) chunks
103
- * composite as dirty-row patches — the live viewport tears, with the top
104
- * frozen while only the bottom refreshes.
93
+ * 4. A multiplexer session whose pane VTE honors DEC 2026 regardless of its
94
+ * DECRQM reply (Herdr's libghostty pane). Such a multiplexer still owns
95
+ * the grid, so leaked kitty/ghostty identities cannot enable placeholder
96
+ * graphics, but leaving sync off lets CUP-diff paints and split write(2)
97
+ * chunks composite as dirty-row patches — the live viewport tears, with
98
+ * the top frozen while only the bottom refreshes.
105
99
  * 5. Known direct terminals with confirmed support. SSH does *not* disable —
106
100
  * DEC 2026 passes through SSH when the outer terminal honors it.
107
101
  * 6. Everything else starts off, including risky multiplexers; the runtime
@@ -167,31 +161,29 @@ export declare function hyperlinksUserOverride(env?: NodeJS.ProcessEnv): boolean
167
161
  * Policy (highest precedence first):
168
162
  * 1. Explicit user override (`PI_NO_HYPERLINKS=1` off, `PI_FORCE_HYPERLINKS=1`
169
163
  * on). Opt-out wins ties.
170
- * 2. Herdr pane with no nested screen/tmux: on. Herdr hides the outer
171
- * terminal (`TERM=xterm-256color`, no `TERM_PROGRAM`), but it renders
172
- * OSC 8 in its own grid and opens links itself on Ctrl+click, so the
173
- * outer terminal's support does not matter.
164
+ * 2. Every multiplexer session with a hyperlink policy renders OSC 8 itself
165
+ * (`render`, e.g. Herdr): on. Herdr hides the outer terminal
166
+ * (`TERM=xterm-256color`, no `TERM_PROGRAM`), so the outer terminal's
167
+ * support does not matter.
174
168
  * 2b. Zeta workbench pane with no nested screen/tmux: on, for the same
175
169
  * reason — the workbench's terminal simulator renders OSC 8 itself and
176
170
  * opens links on Ctrl+click (`ZETA_WORKBENCH=1` is injected into every
177
171
  * pane PTY; the outer terminal is invisible from inside).
178
172
  * 3. Static terminal capability — terminals whose {@link TerminalInfo} marks
179
173
  * `hyperlinks: false` (e.g. `base`) stay off unless the user forced on.
180
- * 4. GNU screen's explicit session marker (`STY`) always off, even if tmux is
181
- * also present: a screen layer anywhere in the path cannot forward OSC 8.
182
- * 5. tmux session (`TMUX` set): enabled when tmux self-reports >= 3.4 via
183
- * `TERM_PROGRAM_VERSION` (tmux 3.4 stores OSC 8 as a cell attribute and
184
- * forwards it to outer terminals whose `terminal-features` include
185
- * `hyperlinks`). Older or unknown versions stay off; on outer terminals
186
- * without the feature configured, tmux silently drops the sequence —
187
- * identical to today. Checked before the screen-family TERM heuristic
188
- * because tmux's historical `default-terminal` is `screen-256color`, so
189
- * `TERM=screen*` inside a tmux session must NOT short-circuit to off.
190
- * 6. screen-family TERM without `TMUX` always off: screen never gained OSC 8
191
- * support.
192
- * 7. tmux-family TERM without `TMUX` env — unusual (e.g. inspection scripts);
193
- * no version available, so off.
194
- * 8. Otherwise honor the static terminal capability.
174
+ * 4. A session that never forwards OSC 8 (`drop`, e.g. GNU screen's `STY`)
175
+ * always off, even when a forwarding multiplexer is also present.
176
+ * 5. Forwarding sessions (`forward`, e.g. `TMUX`): enabled when every one
177
+ * self-reports at least its forwarding version via `TERM_PROGRAM` /
178
+ * `TERM_PROGRAM_VERSION` (tmux 3.4). Older or unknown versions stay off;
179
+ * on outer terminals without the feature configured, tmux silently drops
180
+ * the sequence. Checked before the TERM heuristic because tmux's
181
+ * historical `default-terminal` is `screen-256color`, so `TERM=screen*`
182
+ * inside a tmux session must NOT short-circuit to off.
183
+ * 6. TERM naming a multiplexer whose session markers were stripped: off,
184
+ * since no session proves the multiplexer forwards OSC 8 (screen never
185
+ * does; tmux has no version to check).
186
+ * 7. Otherwise honor the static terminal capability.
195
187
  */
196
188
  export declare function shouldEnableHyperlinksByDefault(env?: NodeJS.ProcessEnv, terminalId?: TerminalId): boolean;
197
189
  /**
@@ -343,7 +335,7 @@ export interface ParsedKittyPlacementLine {
343
335
  /**
344
336
  * Parse a frame line that consists solely of a Kitty direct placement (the
345
337
  * last line of an {@link Image} block). Returns null for anything else —
346
- * placeholder grids, tmux-wrapped placements, sixel/iTerm2 payloads — so
338
+ * placeholder grids, sixel/iTerm2 payloads — so
347
339
  * callers fall back to writing the line verbatim.
348
340
  */
349
341
  export declare function parseKittyDirectPlacementLine(line: string): ParsedKittyPlacementLine | null;
@@ -383,8 +375,8 @@ export declare function encodeKittyDeleteAllImages(): string;
383
375
  /**
384
376
  * Delete a single placement of an image (`d=i`, lowercase): removes its cells
385
377
  * and registry entry but keeps the transmitted data, so a later `a=p` under a
386
- * fresh placement id needs no retransmit. Used to clear stale placement-epoch
387
- * entries after a destructive history clear.
378
+ * fresh placement id needs no retransmit. The frame writer uses this before
379
+ * replacing a live image without deleting its archived copies.
388
380
  */
389
381
  export declare function encodeKittyDeletePlacement(imageId: number, placementId: number): string;
390
382
  export declare function encodeITerm2(base64Data: string, options?: {