@wrongstack/tui 0.297.0 → 0.298.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 (314) hide show
  1. package/dist/app-action-type.d.ts +25 -2
  2. package/dist/app-key-handler.d.ts +4 -0
  3. package/dist/app-props.d.ts +11 -1
  4. package/dist/app-settings-type.d.ts +19 -3
  5. package/dist/app-state.d.ts +6 -2
  6. package/dist/app-status-region.d.ts +7 -2
  7. package/dist/components/auth-panel.d.ts +4 -0
  8. package/dist/components/confirm-prompt.d.ts +14 -0
  9. package/dist/components/fleet-panel.d.ts +3 -1
  10. package/dist/components/history/copy-geometry.d.ts +61 -0
  11. package/dist/components/history/sage-output-format.d.ts +7 -6
  12. package/dist/components/history/scroll-controller-types.d.ts +116 -0
  13. package/dist/components/history/scrollbar-geometry.d.ts +60 -0
  14. package/dist/components/history/scrollbar-rail.d.ts +18 -0
  15. package/dist/components/history/selection-helpers.d.ts +111 -0
  16. package/dist/components/input.d.ts +8 -1
  17. package/dist/components/scrollable-history.d.ts +7 -136
  18. package/dist/components/settings-picker-model.d.ts +11 -1
  19. package/dist/components/settings-picker.d.ts +4 -4
  20. package/dist/components/sidebar-content.d.ts +47 -0
  21. package/dist/components/sidebar.d.ts +40 -0
  22. package/dist/components/status-bar-format.d.ts +10 -0
  23. package/dist/components/status-bar-types.d.ts +38 -5
  24. package/dist/components/status-bar.d.ts +1 -1
  25. package/dist/hit-test.d.ts +3 -2
  26. package/dist/hooks/use-provider-event-bridge.d.ts +1 -1
  27. package/dist/hooks/use-statusbar-view-model.d.ts +1 -0
  28. package/dist/hooks/use-tui-slash-commands.d.ts +1 -1
  29. package/dist/index.js +1803 -799
  30. package/dist/input-validation/action-types.d.ts +1 -1
  31. package/dist/markdown.d.ts +2 -0
  32. package/dist/reducers/helpers.d.ts +1 -1
  33. package/dist/reducers/workspace-panels.d.ts +1 -1
  34. package/dist/run-tui-options.d.ts +10 -1
  35. package/dist/settings-contracts.d.ts +1 -1
  36. package/dist/token-previews.d.ts +3 -2
  37. package/dist/ui-contracts.d.ts +9 -0
  38. package/package.json +11 -9
  39. package/dist/app-action-type.d.ts.map +0 -1
  40. package/dist/app-initial-state.d.ts.map +0 -1
  41. package/dist/app-key-handler.d.ts.map +0 -1
  42. package/dist/app-props.d.ts.map +0 -1
  43. package/dist/app-reducer.d.ts.map +0 -1
  44. package/dist/app-settings-type.d.ts.map +0 -1
  45. package/dist/app-state-core-types.d.ts.map +0 -1
  46. package/dist/app-state-fleet.d.ts.map +0 -1
  47. package/dist/app-state.d.ts.map +0 -1
  48. package/dist/app-status-region.d.ts.map +0 -1
  49. package/dist/app-ui-state.d.ts.map +0 -1
  50. package/dist/app-view-contract.d.ts.map +0 -1
  51. package/dist/app-view-state.d.ts.map +0 -1
  52. package/dist/app-view.d.ts.map +0 -1
  53. package/dist/app.d.ts.map +0 -1
  54. package/dist/auth-panel-model.d.ts.map +0 -1
  55. package/dist/brain-contracts.d.ts.map +0 -1
  56. package/dist/brain-panel-model.d.ts.map +0 -1
  57. package/dist/checkpoint-retention.d.ts.map +0 -1
  58. package/dist/clipboard.d.ts.map +0 -1
  59. package/dist/components/agents-monitor-constants.d.ts.map +0 -1
  60. package/dist/components/agents-monitor.d.ts.map +0 -1
  61. package/dist/components/animation-style.d.ts.map +0 -1
  62. package/dist/components/audit-panel.d.ts.map +0 -1
  63. package/dist/components/auth-panel-model.d.ts.map +0 -1
  64. package/dist/components/auth-panel.d.ts.map +0 -1
  65. package/dist/components/autonomy-picker.d.ts.map +0 -1
  66. package/dist/components/brain-decision-prompt.d.ts.map +0 -1
  67. package/dist/components/brain-panel-model.d.ts.map +0 -1
  68. package/dist/components/brain-panel.d.ts.map +0 -1
  69. package/dist/components/checkpoint-timeline.d.ts.map +0 -1
  70. package/dist/components/clear-confirm-panel.d.ts.map +0 -1
  71. package/dist/components/composer-status-chip.d.ts.map +0 -1
  72. package/dist/components/confirm-prompt.d.ts.map +0 -1
  73. package/dist/components/connections-panel.d.ts.map +0 -1
  74. package/dist/components/context-panel.d.ts.map +0 -1
  75. package/dist/components/continue-confirm-panel.d.ts.map +0 -1
  76. package/dist/components/coordinator-panel.d.ts.map +0 -1
  77. package/dist/components/cron-jobs.d.ts.map +0 -1
  78. package/dist/components/design-picker.d.ts.map +0 -1
  79. package/dist/components/enhance-panel.d.ts.map +0 -1
  80. package/dist/components/entry-error-boundary.d.ts.map +0 -1
  81. package/dist/components/esc-confirm-prompt.d.ts.map +0 -1
  82. package/dist/components/exit-confirm-panel.d.ts.map +0 -1
  83. package/dist/components/f-key-picker.d.ts.map +0 -1
  84. package/dist/components/file-picker.d.ts.map +0 -1
  85. package/dist/components/fleet-monitor.d.ts.map +0 -1
  86. package/dist/components/fleet-panel.d.ts.map +0 -1
  87. package/dist/components/goal-kanban-panel.d.ts.map +0 -1
  88. package/dist/components/goal-panel.d.ts.map +0 -1
  89. package/dist/components/help-overlay.d.ts.map +0 -1
  90. package/dist/components/help-panel.d.ts.map +0 -1
  91. package/dist/components/history/assistant.d.ts.map +0 -1
  92. package/dist/components/history/banner.d.ts.map +0 -1
  93. package/dist/components/history/basic-format.d.ts.map +0 -1
  94. package/dist/components/history/code-block-diff-helpers.d.ts.map +0 -1
  95. package/dist/components/history/code-block.d.ts.map +0 -1
  96. package/dist/components/history/copy-icon.d.ts.map +0 -1
  97. package/dist/components/history/entry.d.ts.map +0 -1
  98. package/dist/components/history/index.d.ts.map +0 -1
  99. package/dist/components/history/replay.d.ts.map +0 -1
  100. package/dist/components/history/sage-output-format.d.ts.map +0 -1
  101. package/dist/components/history/stream-box.d.ts.map +0 -1
  102. package/dist/components/history/tool-arg-format.d.ts.map +0 -1
  103. package/dist/components/history/tool-card.d.ts.map +0 -1
  104. package/dist/components/history/tool-group.d.ts.map +0 -1
  105. package/dist/components/history/tool-output-summary.d.ts.map +0 -1
  106. package/dist/components/history/tool-visual-command.d.ts.map +0 -1
  107. package/dist/components/history/tool-visual-domain.d.ts.map +0 -1
  108. package/dist/components/history/tool-visual-format.d.ts.map +0 -1
  109. package/dist/components/history/tool-visual-lsp.d.ts.map +0 -1
  110. package/dist/components/history/tool-visual-misc.d.ts.map +0 -1
  111. package/dist/components/history/tool-visual-mode-workdir.d.ts.map +0 -1
  112. package/dist/components/history/tool-visual-types.d.ts.map +0 -1
  113. package/dist/components/history/types.d.ts.map +0 -1
  114. package/dist/components/history/utils.d.ts.map +0 -1
  115. package/dist/components/history/visual-lines.d.ts.map +0 -1
  116. package/dist/components/history/visual-memory-logs.d.ts.map +0 -1
  117. package/dist/components/history.d.ts.map +0 -1
  118. package/dist/components/input.d.ts.map +0 -1
  119. package/dist/components/kanban-panel.d.ts.map +0 -1
  120. package/dist/components/key-hint-bar.d.ts.map +0 -1
  121. package/dist/components/live-activity-strip.d.ts.map +0 -1
  122. package/dist/components/mailbox-panel.d.ts.map +0 -1
  123. package/dist/components/mcp-picker.d.ts.map +0 -1
  124. package/dist/components/memory-context-widget.d.ts.map +0 -1
  125. package/dist/components/mode-picker.d.ts.map +0 -1
  126. package/dist/components/model-picker.d.ts.map +0 -1
  127. package/dist/components/monitor-shell.d.ts.map +0 -1
  128. package/dist/components/phase-monitor.d.ts.map +0 -1
  129. package/dist/components/phase-panel.d.ts.map +0 -1
  130. package/dist/components/plan-panel.d.ts.map +0 -1
  131. package/dist/components/plugin-picker.d.ts.map +0 -1
  132. package/dist/components/powerline-rail.d.ts.map +0 -1
  133. package/dist/components/process-list.d.ts.map +0 -1
  134. package/dist/components/project-picker.d.ts.map +0 -1
  135. package/dist/components/prompt-picker.d.ts.map +0 -1
  136. package/dist/components/provider-colors.d.ts.map +0 -1
  137. package/dist/components/queue-panel.d.ts.map +0 -1
  138. package/dist/components/refine-countdown-panel.d.ts.map +0 -1
  139. package/dist/components/refine-failure-panel.d.ts.map +0 -1
  140. package/dist/components/resume-picker.d.ts.map +0 -1
  141. package/dist/components/scrollable-history.d.ts.map +0 -1
  142. package/dist/components/sdd-board-overlay.d.ts.map +0 -1
  143. package/dist/components/send-mode-picker.d.ts.map +0 -1
  144. package/dist/components/sessions-panel.d.ts.map +0 -1
  145. package/dist/components/settings-picker-filter.d.ts.map +0 -1
  146. package/dist/components/settings-picker-jumps.d.ts.map +0 -1
  147. package/dist/components/settings-picker-model.d.ts.map +0 -1
  148. package/dist/components/settings-picker-row-list.d.ts.map +0 -1
  149. package/dist/components/settings-picker.d.ts.map +0 -1
  150. package/dist/components/shadow-panel.d.ts.map +0 -1
  151. package/dist/components/shell-command-warning.d.ts.map +0 -1
  152. package/dist/components/slash-confirm-panel.d.ts.map +0 -1
  153. package/dist/components/slash-menu.d.ts.map +0 -1
  154. package/dist/components/status-bar-chips.d.ts.map +0 -1
  155. package/dist/components/status-bar-format.d.ts.map +0 -1
  156. package/dist/components/status-bar-helpers.d.ts.map +0 -1
  157. package/dist/components/status-bar-types.d.ts.map +0 -1
  158. package/dist/components/status-bar.d.ts.map +0 -1
  159. package/dist/components/statusline-detail-panel.d.ts.map +0 -1
  160. package/dist/components/statusline-picker.d.ts.map +0 -1
  161. package/dist/components/suggestions.d.ts.map +0 -1
  162. package/dist/components/todos-monitor.d.ts.map +0 -1
  163. package/dist/components/tools-picker.d.ts.map +0 -1
  164. package/dist/components/worktree-monitor.d.ts.map +0 -1
  165. package/dist/components/worktree-panel.d.ts.map +0 -1
  166. package/dist/connections-health.d.ts.map +0 -1
  167. package/dist/connections-slash.d.ts.map +0 -1
  168. package/dist/context-fill.d.ts.map +0 -1
  169. package/dist/context-slash.d.ts.map +0 -1
  170. package/dist/cron-slash.d.ts.map +0 -1
  171. package/dist/esc-close-panels.d.ts.map +0 -1
  172. package/dist/exit-slash.d.ts.map +0 -1
  173. package/dist/f-key-panels.d.ts.map +0 -1
  174. package/dist/file-search.d.ts.map +0 -1
  175. package/dist/fn-keys.d.ts.map +0 -1
  176. package/dist/git-info.d.ts.map +0 -1
  177. package/dist/heap-watchdog.d.ts.map +0 -1
  178. package/dist/height-cache.d.ts.map +0 -1
  179. package/dist/highlight.d.ts.map +0 -1
  180. package/dist/history-archive.d.ts.map +0 -1
  181. package/dist/history-entry.d.ts.map +0 -1
  182. package/dist/history-retention.d.ts.map +0 -1
  183. package/dist/hit-test.d.ts.map +0 -1
  184. package/dist/hooks/fleet-chat-coalescer.d.ts.map +0 -1
  185. package/dist/hooks/subagent-history-format.d.ts.map +0 -1
  186. package/dist/hooks/use-app-picker-keys.d.ts.map +0 -1
  187. package/dist/hooks/use-app-runtime-refs.d.ts.map +0 -1
  188. package/dist/hooks/use-app-session-state.d.ts.map +0 -1
  189. package/dist/hooks/use-auth-panel.d.ts.map +0 -1
  190. package/dist/hooks/use-autonomous-coordinator.d.ts.map +0 -1
  191. package/dist/hooks/use-autonomy-drivers.d.ts.map +0 -1
  192. package/dist/hooks/use-brain-events.d.ts.map +0 -1
  193. package/dist/hooks/use-brain-panel.d.ts.map +0 -1
  194. package/dist/hooks/use-brain-risk-sync.d.ts.map +0 -1
  195. package/dist/hooks/use-chip-staleness-guard.d.ts.map +0 -1
  196. package/dist/hooks/use-client-telemetry.d.ts.map +0 -1
  197. package/dist/hooks/use-core-tui-commands.d.ts.map +0 -1
  198. package/dist/hooks/use-director-fleet-bridge.d.ts.map +0 -1
  199. package/dist/hooks/use-enhance-runtime-state.d.ts.map +0 -1
  200. package/dist/hooks/use-exit-command.d.ts.map +0 -1
  201. package/dist/hooks/use-file-search.d.ts.map +0 -1
  202. package/dist/hooks/use-fleet-generation-gate.d.ts.map +0 -1
  203. package/dist/hooks/use-git-session-status.d.ts.map +0 -1
  204. package/dist/hooks/use-help-panel.d.ts.map +0 -1
  205. package/dist/hooks/use-history-copy-notice.d.ts.map +0 -1
  206. package/dist/hooks/use-history-viewport-sync.d.ts.map +0 -1
  207. package/dist/hooks/use-initial-prompt.d.ts.map +0 -1
  208. package/dist/hooks/use-input-history-persistence.d.ts.map +0 -1
  209. package/dist/hooks/use-interrupt-ladder.d.ts.map +0 -1
  210. package/dist/hooks/use-kanban-board-focus.d.ts.map +0 -1
  211. package/dist/hooks/use-live-settings-state.d.ts.map +0 -1
  212. package/dist/hooks/use-live-todos.d.ts.map +0 -1
  213. package/dist/hooks/use-mailbox-view-model.d.ts.map +0 -1
  214. package/dist/hooks/use-mode-picker.d.ts.map +0 -1
  215. package/dist/hooks/use-model-pick.d.ts.map +0 -1
  216. package/dist/hooks/use-mouse-tracking.d.ts.map +0 -1
  217. package/dist/hooks/use-next-steps-auto-submit.d.ts.map +0 -1
  218. package/dist/hooks/use-panel-controllers.d.ts.map +0 -1
  219. package/dist/hooks/use-paste-handling.d.ts.map +0 -1
  220. package/dist/hooks/use-picker-keys-types.d.ts.map +0 -1
  221. package/dist/hooks/use-picker-keys.d.ts.map +0 -1
  222. package/dist/hooks/use-prompt-picker.d.ts.map +0 -1
  223. package/dist/hooks/use-provider-event-bridge.d.ts.map +0 -1
  224. package/dist/hooks/use-queue-manager.d.ts.map +0 -1
  225. package/dist/hooks/use-session-interrupt-controller.d.ts.map +0 -1
  226. package/dist/hooks/use-settings-auto-save.d.ts.map +0 -1
  227. package/dist/hooks/use-shadow-panel.d.ts.map +0 -1
  228. package/dist/hooks/use-slash-picker.d.ts.map +0 -1
  229. package/dist/hooks/use-stable-key-handler.d.ts.map +0 -1
  230. package/dist/hooks/use-statusbar-view-model.d.ts.map +0 -1
  231. package/dist/hooks/use-statusline-hidden-sync.d.ts.map +0 -1
  232. package/dist/hooks/use-statusline-state.d.ts.map +0 -1
  233. package/dist/hooks/use-stream-chip-expiration.d.ts.map +0 -1
  234. package/dist/hooks/use-subagent-events.d.ts.map +0 -1
  235. package/dist/hooks/use-terminal-render-lifecycle.d.ts.map +0 -1
  236. package/dist/hooks/use-todos-auto-clear.d.ts.map +0 -1
  237. package/dist/hooks/use-token-counter-refresh.d.ts.map +0 -1
  238. package/dist/hooks/use-tui-activity.d.ts.map +0 -1
  239. package/dist/hooks/use-tui-controllers.d.ts.map +0 -1
  240. package/dist/hooks/use-tui-environment-state.d.ts.map +0 -1
  241. package/dist/hooks/use-tui-event-bridge.d.ts.map +0 -1
  242. package/dist/hooks/use-tui-slash-commands.d.ts.map +0 -1
  243. package/dist/hooks/use-working-dir-chip.d.ts.map +0 -1
  244. package/dist/index.d.ts.map +0 -1
  245. package/dist/index.js.map +0 -7
  246. package/dist/ink.d.ts.map +0 -1
  247. package/dist/input-editing.d.ts.map +0 -1
  248. package/dist/input-key-router.d.ts.map +0 -1
  249. package/dist/input-tokens.d.ts.map +0 -1
  250. package/dist/input-validation/action-helpers.d.ts.map +0 -1
  251. package/dist/input-validation/action-types.d.ts.map +0 -1
  252. package/dist/input-validation/allow-lists.d.ts.map +0 -1
  253. package/dist/input-validation/limits.d.ts.map +0 -1
  254. package/dist/input-validation/result.d.ts.map +0 -1
  255. package/dist/input-validation/state-entries.d.ts.map +0 -1
  256. package/dist/input-validation/terminal.d.ts.map +0 -1
  257. package/dist/input-validation.d.ts.map +0 -1
  258. package/dist/kanban-audit.d.ts.map +0 -1
  259. package/dist/kanban-slash.d.ts.map +0 -1
  260. package/dist/kill-slash.d.ts.map +0 -1
  261. package/dist/layout-engine.d.ts.map +0 -1
  262. package/dist/layout-store.d.ts.map +0 -1
  263. package/dist/mailbox-view-model-types.d.ts.map +0 -1
  264. package/dist/markdown-table.d.ts.map +0 -1
  265. package/dist/markdown.d.ts.map +0 -1
  266. package/dist/memory-context-monitor.d.ts.map +0 -1
  267. package/dist/memory-lifecycle-entry.d.ts.map +0 -1
  268. package/dist/memory-slash-format.d.ts.map +0 -1
  269. package/dist/memory-slash.d.ts.map +0 -1
  270. package/dist/mouse.d.ts.map +0 -1
  271. package/dist/on-panel-open.d.ts.map +0 -1
  272. package/dist/overlay-key-router.d.ts.map +0 -1
  273. package/dist/paste-accumulator.d.ts.map +0 -1
  274. package/dist/prompt-refinement-start.d.ts.map +0 -1
  275. package/dist/ps-slash.d.ts.map +0 -1
  276. package/dist/queue-slash.d.ts.map +0 -1
  277. package/dist/reducers/activity.d.ts.map +0 -1
  278. package/dist/reducers/composer.d.ts.map +0 -1
  279. package/dist/reducers/conversation.d.ts.map +0 -1
  280. package/dist/reducers/dialogs.d.ts.map +0 -1
  281. package/dist/reducers/fleet.d.ts.map +0 -1
  282. package/dist/reducers/helpers.d.ts.map +0 -1
  283. package/dist/reducers/panel-pickers.d.ts.map +0 -1
  284. package/dist/reducers/settings-panel.d.ts.map +0 -1
  285. package/dist/reducers/settings-values.d.ts.map +0 -1
  286. package/dist/reducers/workspace-panels.d.ts.map +0 -1
  287. package/dist/rehydrate-history.d.ts.map +0 -1
  288. package/dist/run-blocks-controller.d.ts.map +0 -1
  289. package/dist/run-tui-client-registration.d.ts.map +0 -1
  290. package/dist/run-tui-options.d.ts.map +0 -1
  291. package/dist/run-tui-title-controller.d.ts.map +0 -1
  292. package/dist/run-tui.d.ts.map +0 -1
  293. package/dist/running-tools.d.ts.map +0 -1
  294. package/dist/scroll-anchor.d.ts.map +0 -1
  295. package/dist/sdd-lifecycle-entry.d.ts.map +0 -1
  296. package/dist/settings-contracts.d.ts.map +0 -1
  297. package/dist/shared-types.d.ts.map +0 -1
  298. package/dist/slash-command-search.d.ts.map +0 -1
  299. package/dist/steering-preamble.d.ts.map +0 -1
  300. package/dist/submit-controller.d.ts.map +0 -1
  301. package/dist/submit-history.d.ts.map +0 -1
  302. package/dist/submit-prompt-refinement.d.ts.map +0 -1
  303. package/dist/terminal-modes.d.ts.map +0 -1
  304. package/dist/terminal-silence.d.ts.map +0 -1
  305. package/dist/terminal-title.d.ts.map +0 -1
  306. package/dist/terminal-width.d.ts.map +0 -1
  307. package/dist/theme.d.ts.map +0 -1
  308. package/dist/thinking-word.d.ts.map +0 -1
  309. package/dist/token-previews.d.ts.map +0 -1
  310. package/dist/tool-glyph.d.ts.map +0 -1
  311. package/dist/tui-host-capabilities.d.ts.map +0 -1
  312. package/dist/tui-memory-counters.d.ts.map +0 -1
  313. package/dist/ui-contracts.d.ts.map +0 -1
  314. package/dist/ui-glyphs.d.ts.map +0 -1
@@ -1,140 +1,11 @@
1
1
  import type React from 'react';
2
- import { type MutableRefObject } from 'react';
3
- import { type HistoryEntry, type HistoryProps } from './history.js';
4
- /**
5
- * Imperative scroll surface owned by the ScrollableHistory component. The app
6
- * key/mouse handlers call these instead of dispatching reducer actions: all
7
- * scroll math needs the live height cache, which lives here, and routing it
8
- * through app state previously forced totals and offsets to travel through
9
- * separate commits — the root cause of an entire family of jump bugs.
10
- */
11
- export interface HistoryScrollController {
12
- /** Scroll by `deltaUp` rows: positive = older content, negative = newer. */
13
- scrollBy(deltaUp: number): void;
14
- /** Scroll by one viewport page. */
15
- scrollPage(dir: 'up' | 'down'): void;
16
- /** Jump to the oldest retained entry. */
17
- scrollToTop(): void;
18
- /** Re-pin to the newest output. */
19
- scrollToBottom(): void;
20
- /** Jump to a 0-based cell clicked/dragged on the scrollbar track. */
21
- scrollToTrackCell(cell: number): void;
22
- /** True while the viewport is scrolled away from the newest output. */
23
- isScrolled(): boolean;
24
- /**
25
- * True when the viewport cell lands on a copyable card's copy icon. Lets the
26
- * mouse handler decide synchronously whether to consume the click before
27
- * firing the async copy. See {@link copyAtViewportCell} for the `row`/`col`
28
- * coordinate contract.
29
- */
30
- hasCopyTargetAt(row: number, col: number): boolean;
31
- /**
32
- * Handle a left-click inside the history viewport. `row` is 0-based from the
33
- * viewport top; `col` is 0-based from the LEFT EDGE OF THE HISTORY BAND, not
34
- * the raw terminal column. In the interactive mount the band renders flush at
35
- * terminal column 0 (the scrollbar occupies the rightmost columns), so the
36
- * caller passes the terminal column directly; a band that is inset from the
37
- * left must subtract its left offset first. When the cell lands on a copyable
38
- * card's copy icon, its content is written to the system clipboard and the
39
- * entry id is returned; otherwise returns null.
40
- */
41
- copyAtViewportCell(row: number, col: number): Promise<number | null>;
42
- }
43
- /**
44
- * A clickable copy-icon target resolved in viewport coordinates during the
45
- * post-render measurement pass. `entryId` identifies a single card or the first
46
- * member of a compact tool group; `entryIds` contains every group member when
47
- * present. `startRow`/`endRow` bound the box's visible rows (0-based from the
48
- * viewport top, `endRow` exclusive); `iconCol` is the 0-based terminal column
49
- * the icon renders at on the box's first visible row.
50
- */
51
- export interface CopyHit {
52
- entryId: number;
53
- entryIds?: readonly number[] | undefined;
54
- startRow: number;
55
- endRow: number;
56
- iconCol: number;
57
- }
58
- /** Sentinel returned after copying the active, non-retained tool-stream box. */
59
- export declare const LIVE_TOOL_STREAM_COPY_ID = -1;
60
- /**
61
- * Resolve the copy target under a viewport cell, or null. A cell matches when
62
- * its `row` is within the card's visible rows and its `col` is within the
63
- * icon's cell span. Iterates newest-first so overlapping row estimates favor
64
- * the most recently rendered card. Exported-shape pure helper for unit tests.
65
- */
66
- export declare function findCopyHit(hits: readonly CopyHit[], row: number, col: number): CopyHit | null;
67
- /** Resolve a hit to the complete current clipboard payload without performing I/O. */
68
- export declare function resolveCopyPayload(hit: CopyHit, entriesById: ReadonlyMap<number, HistoryEntry>, liveToolText?: string | undefined): {
69
- entryId: number;
70
- text: string;
71
- } | null;
72
- /**
73
- * Rows clipped from the top of the mounted history stack before it appears in
74
- * the viewport. Scrolled frames clip by the anchor's row offset; pinned frames
75
- * rely on Ink flex-end clipping, which hides top overflow from mounted groups
76
- * plus the live tool tail.
77
- */
78
- export declare function copyRegistryVisibleClip(opts: {
79
- scrolled: boolean;
80
- clip: number;
81
- mountedRows: number;
82
- tailRows: number;
83
- viewportRows: number;
84
- }): number;
85
- /** Build the live tool-stream header hit, accounting for ToolStreamBox's top margin. */
86
- export declare function liveToolStreamCopyHit(opts: {
87
- visible: boolean;
88
- mountedRows: number;
89
- visibleClip: number;
90
- viewportRows: number;
91
- iconCol: number;
92
- }): CopyHit | null;
93
- export interface ScrollableHistoryProps extends HistoryProps {
94
- /** Height of the viewport in rows, computed by App from the bottom region. */
95
- viewportRows: number;
96
- /** Receives the imperative scroll controller. The component assigns on
97
- * mount and clears on unmount. Optional for isolated renderers. */
98
- controllerRef?: MutableRefObject<HistoryScrollController | null> | undefined;
99
- /** Reports scroll-state transitions (scrolled away from / re-pinned to the
100
- * newest output) so the host can adjust key hints. */
101
- onScrollInfo?: ((info: {
102
- scrolled: boolean;
103
- }) => void) | undefined;
104
- /** Optional cap on the width used for entry wrapping (right panel mode). */
105
- maxWidth?: number | undefined;
106
- /** Layout store for persisting entry height data across renders and sessions.
107
- * When provided, the ScrollableHistory seeds its height cache from the
108
- * store's persisted measurements and marks entries as measured after render,
109
- * eliminating estimate-vs-actual scroll jumps on re-render. */
110
- layoutStore?: import('../layout-store.js').LayoutStore | undefined;
111
- /**
112
- * Entry id of the card whose copy icon was just clicked. That card's icon
113
- * renders in the success color for the brief window the host keeps this set,
114
- * giving per-card visual feedback alongside the status-line "Copied" notice.
115
- * `null` / undefined = no card highlighted.
116
- */
117
- copiedEntryId?: number | null | undefined;
118
- /**
119
- * Called when the user scrolls near the top of the currently loaded
120
- * entries. The host should respond by loading older entries from the
121
- * history archive and dispatching `archiveLoaded` to prepend them.
122
- */
123
- onRequestOlderEntries?: (() => void) | undefined;
124
- }
125
- /** Pure thumb geometry for the scrollbar: where the thumb starts and how many
126
- * cells it spans, given the track height, scroll offset, and total content
127
- * height. Exported for testing. */
128
- export declare function scrollbarThumb(rows: number, offset: number, total: number): {
129
- top: number;
130
- size: number;
131
- scrollable: boolean;
132
- };
133
- /** Inverse of {@link scrollbarThumb}: given a clicked/dragged 0-based cell on a
134
- * track of `rows` height, return the scroll offset (rows up from the bottom)
135
- * that lands the visible window there. Cell 0 (top) → oldest content (max
136
- * offset); cell rows-1 (bottom) → newest (offset 0). Exported for testing. */
137
- export declare function scrollOffsetForTrackRow(rows: number, total: number, cell: number): number;
2
+ import { type HistoryEntry } from './history.js';
3
+ export type { HistoryScrollController, ScrollableHistoryProps, } from './history/scroll-controller-types.js';
4
+ export { type CopyHit, LIVE_TOOL_STREAM_COPY_ID, SELECTION_COPY_ID, findCopyHit, resolveCopyPayload, copyRegistryVisibleClip, liveToolStreamCopyHit, } from './history/copy-geometry.js';
5
+ export { type SelectionRect, type SelectionSlice, normalizeSelection, isOutOfBand, selectionToSlices, assembleSelectionText, } from './history/selection-helpers.js';
6
+ export { type MountedCardSpan, scrollbarThumb, scrollOffsetForTrackRow, buildMountedCardSpans, selectionHitAt, } from './history/scrollbar-geometry.js';
7
+ export { Scrollbar } from './history/scrollbar-rail.js';
8
+ import type { ScrollableHistoryProps } from './history/scroll-controller-types.js';
138
9
  /**
139
10
  * Bounded history viewport with stable-anchor virtual scrolling.
140
11
  *
@@ -15,6 +15,16 @@ export type ContextMode = (typeof CONTEXT_MODES)[number];
15
15
  export declare const CONTEXT_MODE_DESCS: Record<ContextMode, string>;
16
16
  export declare const STATUSLINE_MODES: readonly ['minimum', 'detailed', 'no-color'];
17
17
  export type StatuslineMode = (typeof STATUSLINE_MODES)[number];
18
+ /**
19
+ * Factory default statusline density. `minimum` is the default so a fresh
20
+ * session shows a single clean rail (state · provider/model · context meter ·
21
+ * version) with conditional chips only when relevant; `detailed` and
22
+ * `no-color` are opt-in via /settings. Every app-level default site references
23
+ * this constant so the default has a single source of truth. (The StatusBar
24
+ * component's own prop default stays 'detailed' for back-compat with callers
25
+ * that omit `mode` — the user-facing default is applied at the settings layer.)
26
+ */
27
+ export declare const DEFAULT_STATUSLINE_MODE: StatuslineMode;
18
28
  export declare const REASONING_MODES: readonly ['auto', 'on', 'off'];
19
29
  export type ReasoningMode = (typeof REASONING_MODES)[number];
20
30
  export declare const REASONING_EFFORTS: readonly ['none', 'minimal', 'low', 'medium', 'high', 'xhigh', 'max'];
@@ -170,7 +180,7 @@ export type SettingsPickerPatch = Partial<{
170
180
  breakerEnabled: boolean;
171
181
  breakerAutoKillResetMs: number;
172
182
  showModelReasoning: boolean;
173
- showAgentSwarmPanel: boolean;
183
+ showAgentSwarmPanel: import('../app-settings-type.js').AgentSwarmPanelMode;
174
184
  readSymbols: boolean;
175
185
  showSageMemoryInject: boolean;
176
186
  sageMemoryInjectThreshold: number;
@@ -64,11 +64,11 @@ export interface SettingsPickerProps {
64
64
  /** Show the "Model Reasoning" blocks in chat history. Default: true. */
65
65
  showModelReasoning: boolean;
66
66
  /**
67
- * Show the persistent FleetPanel below the status bar, including AGENT SWARM
68
- * activity and its todo mission queue. Full-screen agent/queue/goal overlays
69
- * remain independently available through their panel shortcuts. Default: true.
67
+ * Show the Mission Queue section (todo items) in the right sidebar. The
68
+ * lower-region FleetPanel is always visible when there is fleet activity;
69
+ * this toggle controls only the sidebar mission queue. Default: 'bottom'.
70
70
  */
71
- showAgentSwarmPanel: boolean;
71
+ showAgentSwarmPanel: import('../app-settings-type.js').AgentSwarmPanelMode;
72
72
  /** Show SAGE Memory Inject blocks in tool results. Default: false. */
73
73
  showSageMemoryInject: boolean;
74
74
  /** Minimum relation strength for SAGE memory injection. Default: 0.85. */
@@ -0,0 +1,47 @@
1
+ import type { ResumeSessionEntry } from '../app-state.js';
2
+ import type { FleetEntry } from '../app-state-fleet.js';
3
+ import type { TodoItem } from '@wrongstack/core/agent';
4
+ import type React from 'react';
5
+ import type { LiveSessionEntry } from './sessions-panel.js';
6
+ export interface SidebarContentProps {
7
+ /** Live context window data from useStatusbarViewModel. */
8
+ contextWindow: {
9
+ used: number;
10
+ max: number;
11
+ } | undefined;
12
+ /** Fleet entries (leader + subagents) from useStatusbarViewModel. */
13
+ entries: Record<string, FleetEntry>;
14
+ /** Fleet counts summary. */
15
+ fleetCounts: {
16
+ running: number;
17
+ idle: number;
18
+ pending: number;
19
+ completed: number;
20
+ } | undefined;
21
+ /** Current provider label for display. */
22
+ provider?: string | undefined;
23
+ /** Current model label for display. */
24
+ model?: string | undefined;
25
+ /** Actual sidebar width in columns (including border+padding chrome).
26
+ * Used to size the content area and truncate text appropriately. */
27
+ width: number;
28
+ /** Vertical scroll offset — number of rows scrolled from the top. */
29
+ scrollOffset?: number | undefined;
30
+ /** When true, the sidebar has keyboard focus (↑↓ scroll). */
31
+ focused?: boolean | undefined;
32
+ /** Live leader todo board — rendered as a compact mission queue. */
33
+ todos?: readonly TodoItem[] | undefined;
34
+ /** When true, show the agent-swarm + mission-queue section. Gated by the
35
+ * effective agent-swarm panel mode being 'sidebar' (see app-view.tsx). */
36
+ showSwarmSection?: boolean | undefined;
37
+ /** Live sessions from the SessionRegistry — same data as the F10 panel.
38
+ * Shown as compact "live" rows with project name + status + agent count. */
39
+ liveSessions?: readonly LiveSessionEntry[] | undefined;
40
+ /** Recent stored sessions for the `/resume` picker. Shown as compact rows
41
+ * with title + last-activity + outcome badge. */
42
+ resumeSessions?: readonly ResumeSessionEntry[] | undefined;
43
+ /** The current session ID — used to highlight the active session row. */
44
+ currentSessionId?: string | undefined;
45
+ }
46
+ export declare function SidebarContent({ contextWindow, entries, fleetCounts, provider, model, width, scrollOffset, focused, todos, showSwarmSection, liveSessions, resumeSessions, currentSessionId, }: SidebarContentProps): React.ReactElement;
47
+ //# sourceMappingURL=sidebar-content.d.ts.map
@@ -0,0 +1,40 @@
1
+ import type React from 'react';
2
+ /** Terminal widths below this hide the sidebar entirely. */
3
+ export declare const SIDEBAR_MIN_TERMINAL = 64;
4
+ /** Smallest sidebar width (in columns) when visible. */
5
+ export declare const SIDEBAR_MIN_WIDTH = 20;
6
+ /** Largest sidebar width (in columns). */
7
+ export declare const SIDEBAR_MAX_WIDTH = 48;
8
+ /** Fraction of terminal width to allocate to the sidebar. */
9
+ export declare const SIDEBAR_FRACTION = 0.25;
10
+ /**
11
+ * Compute the sidebar width in columns for a given terminal width.
12
+ * Returns 0 when the terminal is too narrow for a sidebar.
13
+ *
14
+ * Pure — no React, no Ink — so callers can use the same value for layout
15
+ * math (e.g. narrowing the history column) without mounting the component.
16
+ */
17
+ export declare function computeSidebarWidth(termCols: number): number;
18
+ export interface RightSidebarProps {
19
+ /**
20
+ * Optional explicit width override (in columns). When omitted, the width
21
+ * is derived from the current terminal width via {@link computeSidebarWidth}.
22
+ */
23
+ width?: number | undefined;
24
+ /**
25
+ * Maximum height in rows. Content beyond this is clipped (scroll handled
26
+ * by the caller via scrollOffset). When omitted, no height cap is applied.
27
+ */
28
+ maxHeight?: number | undefined;
29
+ /**
30
+ * When true, the sidebar border is highlighted to indicate keyboard focus.
31
+ */
32
+ focused?: boolean | undefined;
33
+ /**
34
+ * Content to render inside the sidebar. When omitted, a dimmed placeholder
35
+ * label is shown so the reserved region is visually self-documenting.
36
+ */
37
+ children?: React.ReactNode | undefined;
38
+ }
39
+ export declare function RightSidebar({ width, maxHeight, focused, children }: RightSidebarProps): React.ReactElement | null;
40
+ //# sourceMappingURL=sidebar.d.ts.map
@@ -58,6 +58,16 @@ export declare function stateChip(state: 'idle' | 'running' | 'streaming' | 'abo
58
58
  export declare function renderProgress(ratio: number, width: number): string;
59
59
  export declare function contextBarColor(ratio: number): string;
60
60
  export declare function renderMeter(ratio: number, width: number): string;
61
+ /**
62
+ * Block-style meter for the sidebar — a solid fill (`█`) plus an empty track
63
+ * (`░`). Returned as two segments so the caller can color the fill (e.g. by
64
+ * context pressure via {@link contextBarColor}) independently of the dim track.
65
+ * Width-safe: `filled.length + empty.length === max(1, width)` always holds.
66
+ */
67
+ export declare function blockMeter(ratio: number, width: number): {
68
+ filled: string;
69
+ empty: string;
70
+ };
61
71
  export declare function fmtTok(n: number): string;
62
72
  export declare function fmtMemory(bytes: number): string;
63
73
  export declare function fmtElapsed(ms: number): string;
@@ -103,12 +103,28 @@ export interface StatusBarProps {
103
103
  */
104
104
  provider?: string | undefined;
105
105
  /**
106
- * App version string (e.g. "0.7.0"). Previously rendered a `WS v{version}`
107
- * chip at the head of line 1. Now shown in the composer top rail instead
108
- * (`WRONGSTACK v{version}`). Kept in the interface for callers that may
109
- * use `version` in derived props — no longer rendered by StatusBar itself.
106
+ * App version string (e.g. "0.7.0"). Rendered as a right-anchored version
107
+ * chip on the status bar (line 1, and the minimum-mode rail) so it stays
108
+ * visible after the startup banner scrolls off — in addition to the
109
+ * composer top rail (`WRONGSTACK v{version}`). When omitted, the chip is
110
+ * hidden — keeps tests / legacy callers quiet.
110
111
  */
111
112
  version?: string | undefined;
113
+ /**
114
+ * Latest version published to the npm registry, when known. When paired
115
+ * with {@link updateAvailable} (and not equal to {@link version}), the
116
+ * version chip on the right edge of the status bar gains an orange
117
+ * "(update v…)" suffix so the operator notices the upgrade without
118
+ * scrolling back through history to find the startup banner. Sourced from
119
+ * the CLI's preflight update-check.
120
+ */
121
+ latestVersion?: string | undefined;
122
+ /**
123
+ * True when the preflight update-check found a newer published version
124
+ * than {@link version}. Both must be present (and non-equal) to render the
125
+ * orange update notice on the status bar.
126
+ */
127
+ updateAvailable?: boolean | undefined;
112
128
  state: 'idle' | 'running' | 'streaming' | 'aborting';
113
129
  /** Single word rendered in the rainbow working-state chip. */
114
130
  thinkingWord?: string | undefined;
@@ -204,6 +220,12 @@ export interface StatusBarProps {
204
220
  workingDir?: string | undefined;
205
221
  /** Autonomy mode chip: 'off' | 'suggest' | 'auto' | 'eternal' | 'eternal-parallel'. */
206
222
  autonomy?: 'off' | 'suggest' | 'auto' | 'eternal' | 'eternal-parallel' | undefined;
223
+ /**
224
+ * Number of tools dropped from the provider request due to the maxTools
225
+ * limit. When > 0, renders a warning chip on line 2 (e.g. "⊘ 5 tools")
226
+ * so the user knows some tools are unavailable to the model this session.
227
+ */
228
+ droppedTools?: number | undefined;
207
229
  /** Number of tracked bash/exec processes from the process registry. Currently unused on the rail. */
208
230
  processCount?: number | undefined;
209
231
  /** Current RSS/heap sample for this CLI process. */
@@ -212,7 +234,11 @@ export interface StatusBarProps {
212
234
  cpuPercent?: number | undefined;
213
235
  /** Items to hide from the status bar. Canonical set: {@link StatuslineItem}. */
214
236
  hiddenItems?: StatuslineItem[] | undefined;
215
- /** Statusline density. Detailed is the default to preserve the full multi-line display. */
237
+ /**
238
+ * Statusline density. The prop default 'detailed' is kept for back-compat
239
+ * with tests/callers that omit `mode`; the user-facing default is 'minimum'
240
+ * (DEFAULT_STATUSLINE_MODE), applied at the settings layer.
241
+ */
216
242
  mode?: StatuslineMode | undefined;
217
243
  /** EventBus for subscribing to token.accounted events for real-time cost/token updates. */
218
244
  events?: EventBus | undefined;
@@ -346,5 +372,12 @@ export interface StatusBarProps {
346
372
  * Clicking opens /audit (TUI) — in the REPL it's informational.
347
373
  */
348
374
  sideEffectCount?: number | undefined;
375
+ /**
376
+ * Optional cap on the column width used for layout adaptation. When set,
377
+ * the status bar treats this as its effective terminal width instead of
378
+ * `stdout.columns` — needed when the bar sits in a column narrower than
379
+ * the full terminal (e.g. beside a sidebar).
380
+ */
381
+ maxWidth?: number | undefined;
349
382
  }
350
383
  //# sourceMappingURL=status-bar-types.d.ts.map
@@ -11,5 +11,5 @@ export declare const COMPACT_THRESHOLD = 50;
11
11
  * to show — git branch, elapsed time, todo counts, YOLO marker — so a
12
12
  * vanilla session keeps the original single-line footprint.
13
13
  */
14
- export declare function StatusBar({ model, provider, state, thinkingWord, thinkingAnimationStyle, tokenCounter, hint, queueCount, yolo, autonomy, fleetWorkingTime, todos, plan, tasks, fleet, fleetAgents, git, subagentCount, brain, projectName, workingDir, processCount, processMemory, cpuPercent, context, estimatedContextTokens, Sage, memoryContextMonitor, contextStrategy, hiddenItems, mode, events, sessionId, eternalStage, goalSummary, indexState, breakerCountdown, modeLabel, debugStreamStats, enhanceCountdown, nextStepsAutoSubmitCountdown, nextStepsAutoSubmitLabel, autoProceedCountdown, sessionCount, mailbox, tokenSavingMode, toolCount, visibleChips, sideEffectCount, }: StatusBarProps): React.ReactElement;
14
+ export declare function StatusBar({ model, provider, version, latestVersion, updateAvailable, state, thinkingWord, thinkingAnimationStyle, tokenCounter, hint, queueCount, yolo, autonomy, fleetWorkingTime, todos, plan, tasks, fleet, fleetAgents, git, subagentCount, brain, projectName, workingDir, processCount, processMemory, cpuPercent, context, estimatedContextTokens, Sage, memoryContextMonitor, contextStrategy, hiddenItems, mode, events, sessionId, eternalStage, goalSummary, droppedTools, indexState, breakerCountdown, modeLabel, debugStreamStats, enhanceCountdown, nextStepsAutoSubmitCountdown, nextStepsAutoSubmitLabel, autoProceedCountdown, sessionCount, mailbox, tokenSavingMode, toolCount, visibleChips, sideEffectCount, maxWidth, }: StatusBarProps): React.ReactElement;
15
15
  //# sourceMappingURL=status-bar.d.ts.map
@@ -40,9 +40,10 @@ export type HitRegion =
40
40
  };
41
41
  /**
42
42
  * Columns at the right edge of the history viewport reserved for the copy/scroll
43
- * rail. Copy icons use the first column and the scrollbar track uses the last.
43
+ * rail. Copy icons use the first column, a blank gap separates them from the
44
+ * scrollbar track in the last column.
44
45
  */
45
- export declare const SCROLLBAR_HIT_WIDTH = 2;
46
+ export declare const SCROLLBAR_HIT_WIDTH = 3;
46
47
  /** Rows available to managed history after reserving the measured bottom UI. */
47
48
  export declare function historyViewportRows(termRows: number, bottomHeight: number): number;
48
49
  /**
@@ -1,6 +1,6 @@
1
1
  import { type Dispatch, type MutableRefObject, type SetStateAction } from 'react';
2
- import type { AppProps } from '../app-props.js';
3
2
  import type { Action } from '../app-action-type.js';
3
+ import type { AppProps } from '../app-props.js';
4
4
  import { type MemoryContextMonitorState } from '../memory-context-monitor.js';
5
5
  interface ProviderEventBridgeOptions {
6
6
  events: AppProps['events'];
@@ -49,6 +49,7 @@ export declare function useStatusbarViewModel({ agent, tokenCounter, activeMaxCo
49
49
  entriesWithLeader: Record<string, FleetEntry>;
50
50
  planCounts: PlanCounts | null;
51
51
  taskCounts: TaskCounts | null;
52
+ droppedTools: number;
52
53
  };
53
54
  export {};
54
55
  //# sourceMappingURL=use-statusbar-view-model.d.ts.map
@@ -1,6 +1,6 @@
1
1
  import { type Dispatch, type MutableRefObject, type SetStateAction } from 'react';
2
- import type { AppProps } from '../app-props.js';
3
2
  import type { Action } from '../app-action-type.js';
3
+ import type { AppProps } from '../app-props.js';
4
4
  import type { State } from '../app-state.js';
5
5
  import { type StatuslineItem } from '../components/statusline-picker.js';
6
6
  interface TuiSlashCommandOptions {