@linxiraos/pi-tui 1.1.26 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (423) hide show
  1. package/CHANGELOG.md +51 -491
  2. package/README.md +13 -7
  3. package/dist/types/active-terminal.d.ts +30 -0
  4. package/dist/types/app-keybindings.d.ts +7 -2
  5. package/dist/types/apps/cleanse-board.d.ts +1 -1
  6. package/dist/types/apps/debug/log-viewer.d.ts +4 -0
  7. package/dist/types/apps/debug/raw-sse-buffer.d.ts +2 -0
  8. package/dist/types/apps/git/git-tui.d.ts +5 -4
  9. package/dist/types/apps/git/help.d.ts +3 -1
  10. package/dist/types/apps/if-bench-board.d.ts +2 -2
  11. package/dist/types/apps/setup-model-picker.d.ts +1 -1
  12. package/dist/types/autocomplete.d.ts +5 -2
  13. package/dist/types/charts/chart-plan.d.ts +674 -0
  14. package/dist/types/charts/chart-svg.d.ts +59 -0
  15. package/dist/types/charts/table-data.d.ts +175 -0
  16. package/dist/types/chat/assistant-message.d.ts +11 -1
  17. package/dist/types/chat/chat-transcript-builder.d.ts +3 -0
  18. package/dist/types/chat/compaction-summary-message.d.ts +1 -0
  19. package/dist/types/chat/execution-shared.d.ts +6 -5
  20. package/dist/types/chat/fence-figure.d.ts +42 -0
  21. package/dist/types/chat/figure-markdown.d.ts +42 -0
  22. package/dist/types/chat/messages.d.ts +1 -1
  23. package/dist/types/chat/svg-figure.d.ts +33 -0
  24. package/dist/types/chat/svg-source.d.ts +49 -0
  25. package/dist/types/chat/table-chart.d.ts +89 -0
  26. package/dist/types/chat/tool-execution.d.ts +2 -0
  27. package/dist/types/chat/user-message.d.ts +17 -4
  28. package/dist/types/chrome/shared.d.ts +9 -0
  29. package/dist/types/chrome/status-notice.d.ts +15 -3
  30. package/dist/types/chrome/transcript-container.d.ts +6 -0
  31. package/dist/types/components/box.d.ts +1 -0
  32. package/dist/types/components/disclosure.d.ts +1 -0
  33. package/dist/types/components/editor.d.ts +23 -5
  34. package/dist/types/components/form.d.ts +1 -0
  35. package/dist/types/components/image.d.ts +26 -44
  36. package/dist/types/components/input.d.ts +2 -1
  37. package/dist/types/components/key-value-list.d.ts +1 -0
  38. package/dist/types/components/layout/row.d.ts +1 -0
  39. package/dist/types/components/layout/stack.d.ts +1 -0
  40. package/dist/types/components/loader.d.ts +5 -6
  41. package/dist/types/components/markdown.d.ts +47 -5
  42. package/dist/types/components/scroll-view.d.ts +1 -0
  43. package/dist/types/components/section.d.ts +1 -0
  44. package/dist/types/components/table.d.ts +1 -0
  45. package/dist/types/components/text.d.ts +1 -0
  46. package/dist/types/components/tree-view.d.ts +7 -0
  47. package/dist/types/components/truncated-text.d.ts +1 -0
  48. package/dist/types/fuzzy.d.ts +29 -1
  49. package/dist/types/key-hint-format.d.ts +9 -1
  50. package/dist/types/keybinding-matchers.d.ts +3 -0
  51. package/dist/types/keybindings.d.ts +1 -1
  52. package/dist/types/kitty-graphics.d.ts +2 -2
  53. package/dist/types/loop-watchdog.d.ts +8 -7
  54. package/dist/types/multiplexers/cmux.d.ts +16 -0
  55. package/dist/types/multiplexers/herdr.d.ts +26 -0
  56. package/dist/types/multiplexers/notify.d.ts +13 -0
  57. package/dist/types/multiplexers/orca.d.ts +12 -0
  58. package/dist/types/multiplexers/screen.d.ts +9 -0
  59. package/dist/types/multiplexers/tmux.d.ts +29 -0
  60. package/dist/types/multiplexers/types.d.ts +100 -0
  61. package/dist/types/multiplexers/wmux.d.ts +12 -0
  62. package/dist/types/multiplexers/zellij.d.ts +12 -0
  63. package/dist/types/native/apply.d.ts +4 -3
  64. package/dist/types/native/backend.d.ts +5 -4
  65. package/dist/types/native/blobs.d.ts +7 -3
  66. package/dist/types/native/encode.d.ts +8 -6
  67. package/dist/types/native/node.d.ts +36 -5
  68. package/dist/types/native/overlay.d.ts +8 -3
  69. package/dist/types/native/settle.d.ts +4 -3
  70. package/dist/types/overlays/agent-hub-projection.d.ts +6 -5
  71. package/dist/types/overlays/agent-hub-types.d.ts +9 -0
  72. package/dist/types/overlays/agent-hub.d.ts +3 -0
  73. package/dist/types/overlays/agent-transcript-viewer.d.ts +12 -2
  74. package/dist/types/overlays/agents-hub.d.ts +9 -0
  75. package/dist/types/overlays/annotation-overlay.d.ts +19 -2
  76. package/dist/types/overlays/annotation-types.d.ts +2 -0
  77. package/dist/types/overlays/ask-dialog.d.ts +5 -2
  78. package/dist/types/overlays/btw-history-panel.d.ts +13 -1
  79. package/dist/types/overlays/copy-selector.d.ts +1 -0
  80. package/dist/types/overlays/history-search.d.ts +10 -0
  81. package/dist/types/overlays/hook-selector.d.ts +9 -4
  82. package/dist/types/overlays/hub-frame.d.ts +4 -1
  83. package/dist/types/overlays/jobs-panel.d.ts +1 -7
  84. package/dist/types/overlays/model-browser.d.ts +54 -7
  85. package/dist/types/overlays/model-hub.d.ts +37 -0
  86. package/dist/types/overlays/oauth-selector.d.ts +0 -1
  87. package/dist/types/overlays/plan-review-overlay.d.ts +3 -2
  88. package/dist/types/overlays/report-panel.d.ts +68 -0
  89. package/dist/types/overlays/rewind-selector.d.ts +1 -0
  90. package/dist/types/overlays/session-observer-registry.d.ts +2 -0
  91. package/dist/types/overlays/session-selector.d.ts +6 -2
  92. package/dist/types/overlays/settings-defs.d.ts +1 -0
  93. package/dist/types/overlays/thinking-selector.d.ts +2 -2
  94. package/dist/types/overlays/usage-dashboard.d.ts +12 -8
  95. package/dist/types/overlays/usage-display.d.ts +3 -1
  96. package/dist/types/prompt/composer-cache.d.ts +0 -16
  97. package/dist/types/prompt/composer.d.ts +18 -3
  98. package/dist/types/prompt/custom-editor.d.ts +25 -13
  99. package/dist/types/prompt/image-source.d.ts +2 -1
  100. package/dist/types/prompt/interactive-context-helpers.d.ts +5 -1
  101. package/dist/types/prompt/model-mention-autocomplete.d.ts +1 -1
  102. package/dist/types/prompt/welcome.d.ts +7 -2
  103. package/dist/types/render/composite.d.ts +2 -0
  104. package/dist/types/render/output-pane.d.ts +1 -0
  105. package/dist/types/render/render-utils.d.ts +1 -0
  106. package/dist/types/render/tool-card.d.ts +6 -0
  107. package/dist/types/render/width-aware-text.d.ts +2 -0
  108. package/dist/types/setup/scenes/types.d.ts +1 -0
  109. package/dist/types/space-hold.d.ts +40 -25
  110. package/dist/types/status-line/component.d.ts +3 -0
  111. package/dist/types/status-line/context-usage.d.ts +7 -5
  112. package/dist/types/status-line/host.d.ts +4 -1
  113. package/dist/types/status-line/segments.d.ts +2 -0
  114. package/dist/types/status-line/types.d.ts +14 -3
  115. package/dist/types/terminal-capabilities.d.ts +41 -36
  116. package/dist/types/terminal-multiplexer.d.ts +127 -14
  117. package/dist/types/terminal.d.ts +23 -16
  118. package/dist/types/theme/active-symbols.d.ts +1 -1
  119. package/dist/types/theme/schema.d.ts +11 -2
  120. package/dist/types/theme/symbols.d.ts +1 -1
  121. package/dist/types/theme/theme-class.d.ts +7 -0
  122. package/dist/types/theme/theme.d.ts +1 -1
  123. package/dist/types/theme/tui-adapters.d.ts +3 -0
  124. package/dist/types/thinking.d.ts +1 -1
  125. package/dist/types/tmux.d.ts +11 -4
  126. package/dist/types/tools/bash.d.ts +7 -2
  127. package/dist/types/tools/daemon.d.ts +1 -1
  128. package/dist/types/tools/eval.d.ts +22 -3
  129. package/dist/types/tools/glob.d.ts +4 -0
  130. package/dist/types/tools/native-view.d.ts +47 -0
  131. package/dist/types/tools/output-meta.d.ts +11 -1
  132. package/dist/types/tools/renderer.d.ts +37 -2
  133. package/dist/types/tools/streaming-output.d.ts +20 -1
  134. package/dist/types/tools/task.d.ts +2 -3
  135. package/dist/types/tools/write.d.ts +9 -2
  136. package/dist/types/tools/yield.d.ts +22 -0
  137. package/dist/types/tui.d.ts +36 -0
  138. package/dist/types/utils.d.ts +6 -0
  139. package/dist/types/vim.d.ts +19 -5
  140. package/dist/types/windows-input-mode.d.ts +33 -1
  141. package/package.json +13 -9
  142. package/src/active-terminal.d.ts +30 -0
  143. package/src/active-terminal.ts +80 -0
  144. package/src/app-keybindings.d.ts +7 -2
  145. package/src/app-keybindings.ts +7 -2
  146. package/src/apps/autoresearch-dashboard.ts +7 -3
  147. package/src/apps/cleanse-board.ts +2 -2
  148. package/src/apps/cleanse-picker.ts +1 -1
  149. package/src/apps/debug/log-viewer.ts +188 -72
  150. package/src/apps/debug/raw-sse-buffer.ts +8 -0
  151. package/src/apps/debug/raw-sse.ts +39 -5
  152. package/src/apps/git/diff-pane.ts +96 -23
  153. package/src/apps/git/git-tui.ts +23 -16
  154. package/src/apps/git/help.ts +29 -20
  155. package/src/apps/git/sidebar.ts +8 -3
  156. package/src/apps/if-bench-board.ts +2 -2
  157. package/src/apps/ps-top.ts +2 -2
  158. package/src/apps/setup-model-picker.ts +1 -1
  159. package/src/autocomplete.d.ts +5 -2
  160. package/src/autocomplete.ts +67 -43
  161. package/src/bracketed-paste.ts +10 -3
  162. package/src/charts/chart-plan.d.ts +674 -0
  163. package/src/charts/chart-plan.ts +5081 -0
  164. package/src/charts/chart-svg.d.ts +59 -0
  165. package/src/charts/chart-svg.ts +4657 -0
  166. package/src/charts/table-data.d.ts +175 -0
  167. package/src/charts/table-data.ts +1478 -0
  168. package/src/chat/advisor-message.ts +11 -0
  169. package/src/chat/assistant-message.d.ts +11 -1
  170. package/src/chat/assistant-message.ts +245 -54
  171. package/src/chat/chat-transcript-builder.d.ts +3 -0
  172. package/src/chat/chat-transcript-builder.ts +9 -3
  173. package/src/chat/compaction-summary-message.d.ts +1 -0
  174. package/src/chat/compaction-summary-message.ts +8 -0
  175. package/src/chat/execution-shared.d.ts +6 -5
  176. package/src/chat/execution-shared.ts +42 -25
  177. package/src/chat/fence-figure.d.ts +42 -0
  178. package/src/chat/fence-figure.ts +80 -0
  179. package/src/chat/figure-markdown.d.ts +42 -0
  180. package/src/chat/figure-markdown.ts +174 -0
  181. package/src/chat/messages.d.ts +1 -1
  182. package/src/chat/messages.ts +1 -1
  183. package/src/chat/read-tool-group.ts +6 -4
  184. package/src/chat/skill-message.ts +6 -0
  185. package/src/chat/svg-figure.d.ts +33 -0
  186. package/src/chat/svg-figure.ts +399 -0
  187. package/src/chat/svg-source.d.ts +49 -0
  188. package/src/chat/svg-source.ts +188 -0
  189. package/src/chat/table-chart.d.ts +89 -0
  190. package/src/chat/table-chart.ts +294 -0
  191. package/src/chat/tool-execution.d.ts +2 -0
  192. package/src/chat/tool-execution.ts +86 -7
  193. package/src/chat/user-message.d.ts +17 -4
  194. package/src/chat/user-message.ts +71 -8
  195. package/src/chrome/shared.ts +53 -0
  196. package/src/chrome/status-notice.ts +25 -7
  197. package/src/chrome/transcript-container.d.ts +6 -0
  198. package/src/chrome/transcript-container.ts +162 -19
  199. package/src/components/box.d.ts +1 -0
  200. package/src/components/box.ts +5 -0
  201. package/src/components/disclosure.d.ts +1 -0
  202. package/src/components/disclosure.ts +8 -0
  203. package/src/components/editor.d.ts +23 -5
  204. package/src/components/editor.ts +316 -47
  205. package/src/components/form.d.ts +1 -0
  206. package/src/components/form.ts +8 -0
  207. package/src/components/image.d.ts +26 -44
  208. package/src/components/image.ts +115 -152
  209. package/src/components/input.d.ts +2 -1
  210. package/src/components/input.ts +17 -7
  211. package/src/components/key-value-list.d.ts +1 -0
  212. package/src/components/key-value-list.ts +4 -0
  213. package/src/components/layout/row.d.ts +1 -0
  214. package/src/components/layout/row.ts +7 -0
  215. package/src/components/layout/stack.d.ts +1 -0
  216. package/src/components/layout/stack.ts +7 -0
  217. package/src/components/loader.d.ts +5 -6
  218. package/src/components/loader.ts +10 -17
  219. package/src/components/markdown.d.ts +47 -5
  220. package/src/components/markdown.ts +786 -303
  221. package/src/components/scroll-view.d.ts +1 -0
  222. package/src/components/scroll-view.ts +5 -0
  223. package/src/components/section.d.ts +1 -0
  224. package/src/components/section.ts +5 -0
  225. package/src/components/settings-list.ts +2 -0
  226. package/src/components/table.d.ts +1 -0
  227. package/src/components/table.ts +4 -0
  228. package/src/components/text.d.ts +1 -0
  229. package/src/components/text.ts +7 -0
  230. package/src/components/tree-view.d.ts +7 -0
  231. package/src/components/tree-view.ts +38 -8
  232. package/src/components/truncated-text.d.ts +1 -0
  233. package/src/components/truncated-text.ts +5 -0
  234. package/src/desktop-notify.ts +3 -2
  235. package/src/fuzzy.d.ts +29 -1
  236. package/src/fuzzy.ts +115 -30
  237. package/src/hotkeys-markdown.ts +9 -2
  238. package/src/key-hint-format.d.ts +9 -1
  239. package/src/key-hint-format.ts +26 -11
  240. package/src/keybinding-matchers.d.ts +3 -0
  241. package/src/keybinding-matchers.ts +6 -2
  242. package/src/keybindings.d.ts +1 -1
  243. package/src/keybindings.ts +1 -1
  244. package/src/kitty-graphics.d.ts +2 -2
  245. package/src/kitty-graphics.ts +11 -5
  246. package/src/loop-watchdog.d.ts +8 -7
  247. package/src/loop-watchdog.ts +18 -13
  248. package/src/multiplexers/cmux.d.ts +16 -0
  249. package/src/multiplexers/cmux.ts +29 -0
  250. package/src/multiplexers/herdr.d.ts +26 -0
  251. package/src/multiplexers/herdr.ts +64 -0
  252. package/src/multiplexers/notify.d.ts +13 -0
  253. package/src/multiplexers/notify.ts +24 -0
  254. package/src/multiplexers/orca.d.ts +12 -0
  255. package/src/multiplexers/orca.ts +16 -0
  256. package/src/multiplexers/screen.d.ts +9 -0
  257. package/src/multiplexers/screen.ts +15 -0
  258. package/src/multiplexers/tmux.d.ts +29 -0
  259. package/src/multiplexers/tmux.ts +40 -0
  260. package/src/multiplexers/types.d.ts +100 -0
  261. package/src/multiplexers/types.ts +110 -0
  262. package/src/multiplexers/wmux.d.ts +12 -0
  263. package/src/multiplexers/wmux.ts +16 -0
  264. package/src/multiplexers/zellij.d.ts +12 -0
  265. package/src/multiplexers/zellij.ts +24 -0
  266. package/src/native/apply.d.ts +4 -3
  267. package/src/native/apply.ts +4 -3
  268. package/src/native/backend.d.ts +5 -4
  269. package/src/native/backend.ts +199 -22
  270. package/src/native/blobs.d.ts +7 -3
  271. package/src/native/blobs.ts +47 -12
  272. package/src/native/encode.d.ts +8 -6
  273. package/src/native/encode.ts +76 -34
  274. package/src/native/node.d.ts +36 -5
  275. package/src/native/node.ts +31 -5
  276. package/src/native/overlay.d.ts +8 -3
  277. package/src/native/overlay.ts +17 -4
  278. package/src/native/reconcile.ts +16 -4
  279. package/src/native/settle.d.ts +4 -3
  280. package/src/native/settle.ts +4 -3
  281. package/src/overlays/agent-hub-projection.d.ts +6 -5
  282. package/src/overlays/agent-hub-projection.ts +124 -13
  283. package/src/overlays/agent-hub-types.d.ts +9 -0
  284. package/src/overlays/agent-hub-types.ts +6 -0
  285. package/src/overlays/agent-hub.ts +48 -29
  286. package/src/overlays/agent-transcript-viewer.ts +93 -23
  287. package/src/overlays/agents-hub.ts +28 -8
  288. package/src/overlays/annotation-overlay.ts +293 -90
  289. package/src/overlays/annotation-types.ts +2 -0
  290. package/src/overlays/ask-dialog.ts +10 -17
  291. package/src/overlays/btw-history-panel.ts +136 -39
  292. package/src/overlays/copy-selector.d.ts +1 -0
  293. package/src/overlays/copy-selector.ts +32 -8
  294. package/src/overlays/extensions/extension-dashboard.ts +4 -4
  295. package/src/overlays/extensions/state-manager.ts +52 -12
  296. package/src/overlays/history-search.ts +100 -7
  297. package/src/overlays/hook-selector.ts +12 -5
  298. package/src/overlays/hub-frame.ts +19 -1
  299. package/src/overlays/jobs-panel.ts +33 -52
  300. package/src/overlays/model-browser.ts +367 -122
  301. package/src/overlays/model-hub.ts +435 -59
  302. package/src/overlays/move-overlay.ts +28 -14
  303. package/src/overlays/oauth-selector.ts +54 -70
  304. package/src/overlays/pause-screen.ts +2 -2
  305. package/src/overlays/plan-review-overlay.ts +208 -70
  306. package/src/overlays/plugin-settings.ts +3 -3
  307. package/src/overlays/report-panel.ts +191 -0
  308. package/src/overlays/rewind-selector.ts +88 -17
  309. package/src/overlays/session-observer-registry.d.ts +2 -0
  310. package/src/overlays/session-observer-registry.ts +10 -2
  311. package/src/overlays/session-selector.ts +64 -26
  312. package/src/overlays/settings-defs.ts +5 -4
  313. package/src/overlays/settings-selector.ts +33 -8
  314. package/src/overlays/snapcompact-shape-preview.ts +2 -3
  315. package/src/overlays/stats-notice.ts +1 -1
  316. package/src/overlays/thinking-selector.ts +11 -10
  317. package/src/overlays/tree-selector.ts +41 -20
  318. package/src/overlays/usage-dashboard.ts +117 -58
  319. package/src/overlays/usage-display.ts +10 -4
  320. package/src/overlays/usage-row.ts +22 -8
  321. package/src/prompt/attachment-chips.ts +15 -11
  322. package/src/prompt/composer-attachments.ts +6 -4
  323. package/src/prompt/composer-cache.ts +7 -86
  324. package/src/prompt/composer.ts +37 -26
  325. package/src/prompt/custom-editor.ts +282 -105
  326. package/src/prompt/image-source.ts +2 -1
  327. package/src/prompt/interactive-context-helpers.ts +32 -18
  328. package/src/prompt/macos-spelling.ts +7 -0
  329. package/src/prompt/magic-keywords.ts +11 -2
  330. package/src/prompt/model-mention-autocomplete.ts +14 -14
  331. package/src/prompt/queued-messages.ts +6 -4
  332. package/src/prompt/tips.txt +13 -9
  333. package/src/prompt/welcome.ts +64 -46
  334. package/src/prompt/word-completion.ts +38 -5
  335. package/src/render/composite.d.ts +2 -0
  336. package/src/render/composite.ts +64 -0
  337. package/src/render/output-pane.d.ts +1 -0
  338. package/src/render/output-pane.ts +6 -0
  339. package/src/render/render-utils.d.ts +1 -0
  340. package/src/render/render-utils.ts +16 -1
  341. package/src/render/tool-card.d.ts +6 -0
  342. package/src/render/tool-card.ts +15 -0
  343. package/src/render/width-aware-text.d.ts +2 -0
  344. package/src/render/width-aware-text.ts +5 -0
  345. package/src/setup/scenes/model.ts +2 -1
  346. package/src/setup/scenes/types.ts +1 -0
  347. package/src/space-hold.d.ts +40 -25
  348. package/src/space-hold.ts +156 -52
  349. package/src/status-line/component.ts +292 -78
  350. package/src/status-line/context-usage.ts +21 -46
  351. package/src/status-line/host.ts +4 -1
  352. package/src/status-line/segments.ts +40 -22
  353. package/src/status-line/types.ts +15 -3
  354. package/src/terminal-capabilities.d.ts +41 -36
  355. package/src/terminal-capabilities.ts +137 -213
  356. package/src/terminal-multiplexer.d.ts +127 -14
  357. package/src/terminal-multiplexer.ts +112 -33
  358. package/src/terminal.d.ts +23 -16
  359. package/src/terminal.ts +203 -99
  360. package/src/theme/active-symbols.d.ts +1 -1
  361. package/src/theme/active-symbols.ts +1 -1
  362. package/src/theme/schema-validation.ts +1 -0
  363. package/src/theme/schema.d.ts +11 -2
  364. package/src/theme/schema.ts +14 -1
  365. package/src/theme/session-color.ts +1 -7
  366. package/src/theme/symbols.d.ts +1 -1
  367. package/src/theme/symbols.ts +11 -4
  368. package/src/theme/theme-class.d.ts +7 -0
  369. package/src/theme/theme-class.ts +26 -1
  370. package/src/theme/theme-schema.json +5 -1
  371. package/src/theme/theme.d.ts +1 -1
  372. package/src/theme/theme.ts +8 -4
  373. package/src/theme/tui-adapters.d.ts +3 -0
  374. package/src/theme/tui-adapters.ts +68 -0
  375. package/src/thinking.d.ts +1 -1
  376. package/src/thinking.ts +1 -1
  377. package/src/tmux.d.ts +11 -4
  378. package/src/tmux.ts +47 -11
  379. package/src/tools/ast-edit.ts +59 -35
  380. package/src/tools/ast-grep.ts +35 -16
  381. package/src/tools/bash.d.ts +7 -2
  382. package/src/tools/bash.ts +116 -47
  383. package/src/tools/daemon.d.ts +1 -1
  384. package/src/tools/daemon.ts +1 -1
  385. package/src/tools/default-renderer.ts +35 -19
  386. package/src/tools/edit.ts +142 -120
  387. package/src/tools/eval-format/index.ts +28 -2
  388. package/src/tools/eval-format/javascript.ts +7 -5
  389. package/src/tools/eval.d.ts +22 -3
  390. package/src/tools/eval.ts +364 -208
  391. package/src/tools/fetch.ts +5 -6
  392. package/src/tools/glob.d.ts +4 -0
  393. package/src/tools/glob.ts +33 -65
  394. package/src/tools/grep.ts +81 -48
  395. package/src/tools/index.ts +2 -0
  396. package/src/tools/lsp.ts +81 -59
  397. package/src/tools/mcp.ts +111 -68
  398. package/src/tools/native-view.d.ts +47 -0
  399. package/src/tools/native-view.ts +102 -1
  400. package/src/tools/output-meta.d.ts +11 -1
  401. package/src/tools/output-meta.ts +23 -3
  402. package/src/tools/read.ts +7 -5
  403. package/src/tools/renderer.d.ts +37 -2
  404. package/src/tools/renderer.ts +42 -2
  405. package/src/tools/streaming-output.d.ts +20 -1
  406. package/src/tools/streaming-output.ts +154 -50
  407. package/src/tools/task.d.ts +2 -3
  408. package/src/tools/task.ts +115 -62
  409. package/src/tools/todo.ts +119 -30
  410. package/src/tools/wait.ts +34 -24
  411. package/src/tools/web-search.ts +1 -1
  412. package/src/tools/write.d.ts +9 -2
  413. package/src/tools/write.ts +147 -95
  414. package/src/tools/yield.d.ts +22 -0
  415. package/src/tools/yield.ts +225 -0
  416. package/src/tui.d.ts +36 -0
  417. package/src/tui.ts +666 -217
  418. package/src/utils.d.ts +6 -0
  419. package/src/utils.ts +19 -0
  420. package/src/vim.d.ts +19 -5
  421. package/src/vim.ts +333 -18
  422. package/src/windows-input-mode.d.ts +33 -1
  423. package/src/windows-input-mode.ts +212 -6
@@ -1,20 +1,133 @@
1
- /** True when this process is running inside a Herdr pane. */
2
- export declare function isInsideHerdr(env?: NodeJS.ProcessEnv): boolean;
3
- /** Terminal multiplexers zeta recognizes as owning the screen grid. */
4
- export type TerminalMultiplexer = "herdr" | "tmux" | "screen" | "zellij" | "cmux" | "wmux";
1
+ import type { TerminalMultiplexerModule, TerminalMultiplexerNotificationRequest } from "./multiplexers/types";
5
2
  /**
6
- * Classify which terminal multiplexer owns the current screen grid, or `null`
7
- * for a direct terminal. Single source of truth for both the render-path gate
3
+ * Every multiplexer omp recognizes, in classification order within each
4
+ * precedence tier. Adding a multiplexer means adding its module here.
5
+ */
6
+ declare const registry: readonly [{
7
+ readonly id: "herdr";
8
+ readonly precedence: "session";
9
+ readonly sessionEnvKeys: readonly ["HERDR_ENV", "HERDR_PANE_ID", "HERDR_TAB_ID", "HERDR_WORKSPACE_ID"];
10
+ readonly ownsScreenGrid: true;
11
+ readonly isInside: (env?: NodeJS.ProcessEnv) => boolean;
12
+ readonly notifier: {
13
+ readonly tier: "pane";
14
+ readonly send: ({ message, env }: TerminalMultiplexerNotificationRequest) => boolean;
15
+ };
16
+ readonly hyperlinks: "render";
17
+ readonly honorsSynchronizedOutput: true;
18
+ readonly imagesRequireOverride: true;
19
+ }, {
20
+ readonly id: "tmux";
21
+ readonly precedence: "session";
22
+ readonly sessionEnvKeys: readonly ["TMUX"];
23
+ readonly termPrefix: "tmux";
24
+ readonly ownsScreenGrid: true;
25
+ readonly isInside: (env?: NodeJS.ProcessEnv) => boolean;
26
+ readonly notifier: {
27
+ readonly tier: "inBand";
28
+ readonly send: ({ sequence, write }: TerminalMultiplexerNotificationRequest) => boolean;
29
+ };
30
+ readonly hyperlinks: {
31
+ readonly forward: {
32
+ readonly termProgram: "tmux";
33
+ readonly major: 3;
34
+ readonly minor: 4;
35
+ };
36
+ };
37
+ readonly backgroundColorCache: {
38
+ readonly passthrough: typeof import("./tmux").wrapTmuxPassthrough;
39
+ readonly settleMs: 100;
40
+ };
41
+ readonly expandsRepPadding: true;
42
+ readonly expiresSynchronizedOutput: true;
43
+ readonly altRestoreEndsSynchronizedOutput: true;
44
+ readonly growsBeforeSigwinch: true;
45
+ }, {
46
+ readonly id: "screen";
47
+ readonly precedence: "session";
48
+ readonly sessionEnvKeys: readonly ["STY"];
49
+ readonly termPrefix: "screen";
50
+ readonly ownsScreenGrid: true;
51
+ readonly isInside: (env?: NodeJS.ProcessEnv) => boolean;
52
+ readonly hyperlinks: "drop";
53
+ }, {
54
+ readonly id: "zellij";
55
+ readonly precedence: "session";
56
+ readonly sessionEnvKeys: readonly ["ZELLIJ"];
57
+ readonly ownsScreenGrid: true;
58
+ readonly isInside: (env?: NodeJS.ProcessEnv) => boolean;
59
+ readonly notifier: {
60
+ readonly tier: "inBand";
61
+ readonly send: ({ sequence, write }: TerminalMultiplexerNotificationRequest) => boolean;
62
+ };
63
+ readonly backgroundQueryBrokenOn: readonly ["darwin"];
64
+ }, {
65
+ readonly id: "cmux";
66
+ readonly precedence: "session";
67
+ readonly sessionEnvKeys: readonly ["CMUX_WORKSPACE_ID", "CMUX_SURFACE_ID", "CMUX_REMOTE_TRANSPORT"];
68
+ readonly ownsScreenGrid: true;
69
+ readonly isInside: (env?: NodeJS.ProcessEnv) => boolean;
70
+ readonly notifier: {
71
+ readonly tier: "surface";
72
+ readonly send: ({ message, env }: TerminalMultiplexerNotificationRequest) => boolean;
73
+ };
74
+ }, {
75
+ readonly id: "wmux";
76
+ readonly precedence: "session";
77
+ readonly sessionEnvKeys: readonly ["WMUX", "WMUX_SURFACE_ID"];
78
+ readonly ownsScreenGrid: true;
79
+ readonly isInside: (env?: NodeJS.ProcessEnv) => boolean;
80
+ }, {
81
+ readonly id: "orca";
82
+ readonly precedence: "outerApp";
83
+ readonly sessionEnvKeys: readonly ["ORCA_PANE_KEY", "ORCA_WORKTREE_ID"];
84
+ readonly ownsScreenGrid: false;
85
+ readonly isInside: (env?: NodeJS.ProcessEnv) => boolean;
86
+ }];
87
+ /** Terminal multiplexers omp recognizes. */
88
+ export type TerminalMultiplexer = (typeof registry)[number]["id"];
89
+ /** Every environment variable multiplexer classification reads, including the TERM fallback. */
90
+ export declare const TERMINAL_MULTIPLEXER_ENV_KEYS: readonly string[];
91
+ /**
92
+ * Whether an explicit session marker identifies the current provider.
93
+ *
94
+ * TERM is intentionally excluded: it is a classification fallback, not proof
95
+ * that a particular multiplexer session owns the current grid.
96
+ */
97
+ export declare function hasTerminalMultiplexerSession(multiplexer: TerminalMultiplexer, env?: NodeJS.ProcessEnv): boolean;
98
+ /**
99
+ * Every multiplexer whose explicit session markers are present, in registry
100
+ * order. Nested sessions all appear; TERM is not consulted.
101
+ */
102
+ export declare function terminalMultiplexerSessions(env?: NodeJS.ProcessEnv): TerminalMultiplexerModule<TerminalMultiplexer>[];
103
+ /**
104
+ * The multiplexer TERM names, whether or not its session markers survived.
105
+ * This is classification's TERM fallback; session markers are not consulted.
106
+ */
107
+ export declare function terminalMultiplexerForTerm(env?: NodeJS.ProcessEnv): TerminalMultiplexerModule<TerminalMultiplexer> | undefined;
108
+ /**
109
+ * Registry entry for the multiplexer hosting the current process, or
110
+ * `undefined` for a direct terminal. Same precedence as
111
+ * {@link classifyTerminalMultiplexer}.
112
+ */
113
+ export declare function classifyTerminalMultiplexerModule(env?: NodeJS.ProcessEnv): TerminalMultiplexerModule<TerminalMultiplexer> | undefined;
114
+ /**
115
+ * Classify which terminal multiplexer hosts the current process, or `null` for
116
+ * a direct terminal. Single source of truth for both the render-path gate
8
117
  * (`isInsideTerminalMultiplexer`) and the debug snapshot label.
9
118
  *
10
- * TMUX/STY/ZELLIJ, Herdr, and the CMUX/WMUX workspace/surface/remote-transport
11
- * markers are authoritative session signals. TERM can also survive when those
12
- * are stripped (`sudo` without -E, `su`, env-sanitizing launchers/ssh). Do not
13
- * use CMUX_SOCKET_PATH / WMUX_CLI / WMUX_PIPE here: they are CLI socket/path
14
- * overrides and can be set outside a CMUX/WMUX terminal. wmux is a Windows
15
- * multiplexer (Electron + xterm.js) modeled on cmux/herdr that repaints its
16
- * pane in place and exports WMUX=1 plus a native WMUX_SURFACE_ID.
119
+ * Session markers are authoritative. TERM can also survive when those markers
120
+ * are stripped (`sudo` without -E, `su`, env-sanitizing launchers/ssh), so a
121
+ * `tmux`/`screen` TERM prefix comes next. Outer applications such as Orca rank
122
+ * last so a multiplexer running inside them wins.
17
123
  */
18
124
  export declare function classifyTerminalMultiplexer(env?: NodeJS.ProcessEnv): TerminalMultiplexer | null;
19
- /** True when a terminal multiplexer owns the current screen grid. */
125
+ /** True when the classified multiplexer owns the current screen grid. */
20
126
  export declare function isInsideTerminalMultiplexer(env?: NodeJS.ProcessEnv): boolean;
127
+ /**
128
+ * Offer a notification to every active session's notifier, innermost tier
129
+ * first. Returns whether one delivered it; otherwise the terminal fallback
130
+ * applies unchanged.
131
+ */
132
+ export declare function routeTerminalMultiplexerNotification(request: TerminalMultiplexerNotificationRequest): boolean;
133
+ export {};
@@ -1,45 +1,124 @@
1
- /** True when this process is running inside a Herdr pane. */
2
- export function isInsideHerdr(env: NodeJS.ProcessEnv = Bun.env): boolean {
3
- // HERDR_ENV=1 is canonical. Identity vars survive env-sanitizing launchers
4
- // that drop HERDR_ENV. Do not use HERDR_SOCKET_PATH, HERDR_BIN_PATH,
5
- // HERDR_SESSION, HERDR_CONFIG_PATH, or HERDR_CLIENT_SOCKET_PATH here: they
6
- // are client-side and can be set outside a Herdr pane, matching the
7
- // CMUX_SOCKET_PATH warning below.
8
- if (env.HERDR_ENV === "1") return true;
9
- if (env.HERDR_PANE_ID || env.HERDR_TAB_ID || env.HERDR_WORKSPACE_ID) return true;
10
- return false;
1
+ import { cmuxMultiplexer } from "./multiplexers/cmux";
2
+ import { herdrMultiplexer } from "./multiplexers/herdr";
3
+ import { orcaMultiplexer } from "./multiplexers/orca";
4
+ import { screenMultiplexer } from "./multiplexers/screen";
5
+ import { tmuxMultiplexer } from "./multiplexers/tmux";
6
+ import type { TerminalMultiplexerModule, TerminalMultiplexerNotificationRequest } from "./multiplexers/types";
7
+ import { wmuxMultiplexer } from "./multiplexers/wmux";
8
+ import { zellijMultiplexer } from "./multiplexers/zellij";
9
+
10
+ /**
11
+ * Every multiplexer omp recognizes, in classification order within each
12
+ * precedence tier. Adding a multiplexer means adding its module here.
13
+ */
14
+ const registry = [
15
+ herdrMultiplexer,
16
+ tmuxMultiplexer,
17
+ screenMultiplexer,
18
+ zellijMultiplexer,
19
+ cmuxMultiplexer,
20
+ wmuxMultiplexer,
21
+ orcaMultiplexer,
22
+ ] as const satisfies readonly TerminalMultiplexerModule[];
23
+
24
+ /** Terminal multiplexers omp recognizes. */
25
+ export type TerminalMultiplexer = (typeof registry)[number]["id"];
26
+
27
+ const TERMINAL_MULTIPLEXERS: readonly TerminalMultiplexerModule<TerminalMultiplexer>[] = registry;
28
+ const MULTIPLEXERS_BY_ID = Object.fromEntries(
29
+ TERMINAL_MULTIPLEXERS.map(multiplexer => [multiplexer.id, multiplexer]),
30
+ ) as Record<TerminalMultiplexer, TerminalMultiplexerModule<TerminalMultiplexer>>;
31
+ const SESSION_TIER = TERMINAL_MULTIPLEXERS.filter(multiplexer => multiplexer.precedence === "session");
32
+ const OUTER_APP_TIER = TERMINAL_MULTIPLEXERS.filter(multiplexer => multiplexer.precedence === "outerApp");
33
+ const NOTIFICATION_TIER_ORDER = ["pane", "surface", "inBand"] as const;
34
+ // Innermost target first: a pane inside a surface must receive its own signal
35
+ // before the containing surface, followed by in-band rewrites. Registry order
36
+ // breaks ties within a tier (sort is stable).
37
+ const NOTIFIERS = TERMINAL_MULTIPLEXERS.flatMap(multiplexer =>
38
+ multiplexer.notifier ? [{ multiplexer, notifier: multiplexer.notifier }] : [],
39
+ ).sort((a, b) => NOTIFICATION_TIER_ORDER.indexOf(a.notifier.tier) - NOTIFICATION_TIER_ORDER.indexOf(b.notifier.tier));
40
+
41
+ /** Every environment variable multiplexer classification reads, including the TERM fallback. */
42
+ export const TERMINAL_MULTIPLEXER_ENV_KEYS: readonly string[] = [
43
+ ...TERMINAL_MULTIPLEXERS.flatMap(multiplexer => multiplexer.sessionEnvKeys),
44
+ "TERM",
45
+ ];
46
+
47
+ /**
48
+ * Whether an explicit session marker identifies the current provider.
49
+ *
50
+ * TERM is intentionally excluded: it is a classification fallback, not proof
51
+ * that a particular multiplexer session owns the current grid.
52
+ */
53
+ export function hasTerminalMultiplexerSession(
54
+ multiplexer: TerminalMultiplexer,
55
+ env: NodeJS.ProcessEnv = Bun.env,
56
+ ): boolean {
57
+ return MULTIPLEXERS_BY_ID[multiplexer].isInside(env);
11
58
  }
12
59
 
13
- /** Terminal multiplexers zeta recognizes as owning the screen grid. */
14
- export type TerminalMultiplexer = "herdr" | "tmux" | "screen" | "zellij" | "cmux" | "wmux";
60
+ /**
61
+ * Every multiplexer whose explicit session markers are present, in registry
62
+ * order. Nested sessions all appear; TERM is not consulted.
63
+ */
64
+ export function terminalMultiplexerSessions(
65
+ env: NodeJS.ProcessEnv = Bun.env,
66
+ ): TerminalMultiplexerModule<TerminalMultiplexer>[] {
67
+ return TERMINAL_MULTIPLEXERS.filter(multiplexer => multiplexer.isInside(env));
68
+ }
15
69
 
16
70
  /**
17
- * Classify which terminal multiplexer owns the current screen grid, or `null`
18
- * for a direct terminal. Single source of truth for both the render-path gate
71
+ * The multiplexer TERM names, whether or not its session markers survived.
72
+ * This is classification's TERM fallback; session markers are not consulted.
73
+ */
74
+ export function terminalMultiplexerForTerm(
75
+ env: NodeJS.ProcessEnv = Bun.env,
76
+ ): TerminalMultiplexerModule<TerminalMultiplexer> | undefined {
77
+ const term = env.TERM?.toLowerCase() ?? "";
78
+ return TERMINAL_MULTIPLEXERS.find(
79
+ multiplexer => multiplexer.termPrefix !== undefined && term.startsWith(multiplexer.termPrefix),
80
+ );
81
+ }
82
+
83
+ /**
84
+ * Registry entry for the multiplexer hosting the current process, or
85
+ * `undefined` for a direct terminal. Same precedence as
86
+ * {@link classifyTerminalMultiplexer}.
87
+ */
88
+ export function classifyTerminalMultiplexerModule(
89
+ env: NodeJS.ProcessEnv = Bun.env,
90
+ ): TerminalMultiplexerModule<TerminalMultiplexer> | undefined {
91
+ return (
92
+ SESSION_TIER.find(multiplexer => multiplexer.isInside(env)) ??
93
+ terminalMultiplexerForTerm(env) ??
94
+ OUTER_APP_TIER.find(multiplexer => multiplexer.isInside(env))
95
+ );
96
+ }
97
+
98
+ /**
99
+ * Classify which terminal multiplexer hosts the current process, or `null` for
100
+ * a direct terminal. Single source of truth for both the render-path gate
19
101
  * (`isInsideTerminalMultiplexer`) and the debug snapshot label.
20
102
  *
21
- * TMUX/STY/ZELLIJ, Herdr, and the CMUX/WMUX workspace/surface/remote-transport
22
- * markers are authoritative session signals. TERM can also survive when those
23
- * are stripped (`sudo` without -E, `su`, env-sanitizing launchers/ssh). Do not
24
- * use CMUX_SOCKET_PATH / WMUX_CLI / WMUX_PIPE here: they are CLI socket/path
25
- * overrides and can be set outside a CMUX/WMUX terminal. wmux is a Windows
26
- * multiplexer (Electron + xterm.js) modeled on cmux/herdr that repaints its
27
- * pane in place and exports WMUX=1 plus a native WMUX_SURFACE_ID.
103
+ * Session markers are authoritative. TERM can also survive when those markers
104
+ * are stripped (`sudo` without -E, `su`, env-sanitizing launchers/ssh), so a
105
+ * `tmux`/`screen` TERM prefix comes next. Outer applications such as Orca rank
106
+ * last so a multiplexer running inside them wins.
28
107
  */
29
108
  export function classifyTerminalMultiplexer(env: NodeJS.ProcessEnv = Bun.env): TerminalMultiplexer | null {
30
- if (isInsideHerdr(env)) return "herdr";
31
- if (env.TMUX) return "tmux";
32
- if (env.STY) return "screen";
33
- if (env.ZELLIJ) return "zellij";
34
- if (env.CMUX_WORKSPACE_ID || env.CMUX_SURFACE_ID || env.CMUX_REMOTE_TRANSPORT) return "cmux";
35
- if (env.WMUX === "1" || env.WMUX_SURFACE_ID) return "wmux";
36
- const term = env.TERM?.toLowerCase() ?? "";
37
- if (term.startsWith("tmux")) return "tmux";
38
- if (term.startsWith("screen")) return "screen";
39
- return null;
109
+ return classifyTerminalMultiplexerModule(env)?.id ?? null;
40
110
  }
41
111
 
42
- /** True when a terminal multiplexer owns the current screen grid. */
112
+ /** True when the classified multiplexer owns the current screen grid. */
43
113
  export function isInsideTerminalMultiplexer(env: NodeJS.ProcessEnv = Bun.env): boolean {
44
- return classifyTerminalMultiplexer(env) !== null;
114
+ return classifyTerminalMultiplexerModule(env)?.ownsScreenGrid ?? false;
115
+ }
116
+
117
+ /**
118
+ * Offer a notification to every active session's notifier, innermost tier
119
+ * first. Returns whether one delivered it; otherwise the terminal fallback
120
+ * applies unchanged.
121
+ */
122
+ export function routeTerminalMultiplexerNotification(request: TerminalMultiplexerNotificationRequest): boolean {
123
+ return NOTIFIERS.some(({ multiplexer, notifier }) => multiplexer.isInside(request.env) && notifier.send(request));
45
124
  }
package/src/terminal.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import { type TspHello } from "./native/encode";
2
+ export { writeTerminalSequence, writeThroughActiveTerminal } from "./active-terminal";
2
3
  /**
3
4
  * Split `data` into chunks whose encoded UTF-8 byte length is no greater than
4
5
  * `maxChunkBytes`, preferring a line boundary (`\n`) as the cut point so
@@ -69,16 +70,6 @@ export declare class StdoutStallWatchdog {
69
70
  }
70
71
  /** Record alternate-screen state (called by the TUI on `?1049h`/`?1049l` writes). */
71
72
  export declare function setAltScreenActive(active: boolean): void;
72
- /**
73
- * Route an out-of-band escape sequence (e.g. an OSC title update) through the
74
- * active terminal's output path. While a TUI owns stdout, frame paints go
75
- * through the off-thread write pump and can split across multiple write(2)
76
- * calls; a direct main-thread `process.stdout.write` can land between two of
77
- * them — mid escape sequence — and the host terminal then prints the payload
78
- * as literal text at the cursor position. Returns false when no terminal has
79
- * started, in which case the caller owns stdout and may write directly.
80
- */
81
- export declare function writeThroughActiveTerminal(data: string): boolean;
82
73
  /**
83
74
  * Emergency terminal restore - call this from signal/crash handlers
84
75
  * Resets terminal state without requiring access to the ProcessTerminal instance
@@ -137,13 +128,21 @@ export type TspHelloHandler = (hello: TspHello | null) => void;
137
128
  export type CursorShape = "default" | "block" | "underline" | "bar";
138
129
  export declare const CURSOR_SHAPE_CODES: Record<CursorShape, number>;
139
130
  export interface Terminal {
131
+ /**
132
+ * Start the terminal with input, resize, and host-disconnect handlers.
133
+ * Unless input is deferred, this sends capability probes; a terminal that
134
+ * cannot parse one may leave concealed bytes on the cursor row, so the
135
+ * caller repaints after starting.
136
+ */
140
137
  start(onInput: (data: string) => void, onResize: () => void, onDisconnect?: () => void, options?: TerminalStartOptions): void;
141
138
  /**
142
139
  * Take ownership of stdin after a `deferInput` start: enable raw mode,
143
140
  * attach input handlers, and run the capability probes start() skipped.
144
141
  * Bytes the user typed in cooked mode meanwhile are replayed through
145
- * `onInput`. No-op when input was never deferred. Optional so custom
146
- * Terminals built against older pi-tui versions keep working.
142
+ * `onInput`. No-op when input was never deferred. Like {@link start}, the
143
+ * probes may leave concealed bytes on the cursor row, so the caller
144
+ * repaints afterwards. Optional so custom Terminals built against older
145
+ * pi-tui versions keep working.
147
146
  */
148
147
  enableInput?(): void;
149
148
  stop(): void;
@@ -231,6 +230,12 @@ export interface Terminal {
231
230
  * `status` is the DECRPM value when the terminal answered DECRQM.
232
231
  */
233
232
  onPrivateModeReport?(callback: PrivateModeReportHandler): void;
233
+ /**
234
+ * Report whether DA1 advertises SIXEL (attribute 4), replaying the latest
235
+ * advertisement to late subscribers. A missing attribute does not rule out
236
+ * support discovered through another graphics query.
237
+ */
238
+ onSixelSupport?(callback: (supported: boolean) => void): void;
234
239
  /**
235
240
  * Register a callback fired once the startup Glyph Protocol handshake
236
241
  * resolves (see {@link GlyphProtocolReportHandler}). A subscriber that
@@ -299,10 +304,11 @@ export declare class ProcessTerminal implements Terminal {
299
304
  onAppearanceReport(callback: (appearance: TerminalAppearance, requestToken?: TerminalAppearanceRequestToken) => void): () => void;
300
305
  /**
301
306
  * Re-query the terminal background through the startup DA1-sentinel FIFO,
302
- * pending/queued gating, parsing, dedup, and appearance callbacks. Inside
303
- * tmux, only this explicit path first passes an OSC 11 query to the outer
304
- * terminal, waits briefly for tmux to consume the response into its cache,
305
- * then reads that cache with a direct query. The outer query deliberately has
307
+ * pending/queued gating, parsing, dedup, and appearance callbacks. Inside a
308
+ * multiplexer that answers OSC 11 from a cache (tmux), only this explicit
309
+ * path first passes an OSC 11 query to the outer terminal, waits briefly for
310
+ * the multiplexer to consume the response into its cache, then reads that
311
+ * cache with a direct query. The outer query deliberately has
306
312
  * no DA1 sentinel: multiplexers can decode a fragmented DA1 response as a key
307
313
  * sequence and leak the remaining bytes into the editor. Startup and Mode 2031
308
314
  * probes remain direct. Suppressed while inactive, headless, or after teardown.
@@ -310,6 +316,7 @@ export declare class ProcessTerminal implements Terminal {
310
316
  refreshAppearance(requestToken?: TerminalAppearanceRequestToken): TerminalAppearanceRequestToken | void;
311
317
  onPrivateModeReport(callback: PrivateModeReportHandler): void;
312
318
  onGlyphProtocolReport(callback: GlyphProtocolReportHandler): void;
319
+ onSixelSupport(callback: (supported: boolean) => void): void;
313
320
  onTspHello(callback: TspHelloHandler): void;
314
321
  get tspProbePending(): boolean;
315
322
  get tspExpected(): boolean;