@aragon-agent/tui 0.0.0-stage → 0.0.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 (528) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/LICENSE +21 -0
  3. package/README.md +81 -2
  4. package/dist/index.d.ts +11 -0
  5. package/dist/index.js +11 -0
  6. package/dist/input/control-sequences.d.ts +71 -0
  7. package/dist/input/control-sequences.js +222 -0
  8. package/dist/input/csiu-keys.d.ts +66 -0
  9. package/dist/input/csiu-keys.js +181 -0
  10. package/dist/input/cursor-report.d.ts +61 -0
  11. package/dist/input/cursor-report.js +97 -0
  12. package/dist/input/enter-sequences.d.ts +64 -0
  13. package/dist/input/enter-sequences.js +153 -0
  14. package/dist/input/interrupt-gesture.d.ts +18 -0
  15. package/dist/input/interrupt-gesture.js +19 -0
  16. package/dist/input/keyboard-enhancement.d.ts +42 -0
  17. package/dist/input/keyboard-enhancement.js +65 -0
  18. package/dist/input/keymap.d.ts +20 -0
  19. package/dist/input/keymap.js +99 -0
  20. package/dist/input/limits.d.ts +118 -0
  21. package/dist/input/limits.js +109 -0
  22. package/dist/input/mouse-events.d.ts +87 -0
  23. package/dist/input/mouse-events.js +212 -0
  24. package/dist/input/paste-parse.d.ts +83 -0
  25. package/dist/input/paste-parse.js +107 -0
  26. package/dist/input/pointer-router.d.ts +11 -0
  27. package/dist/input/pointer-router.js +14 -0
  28. package/dist/input/stdin-filter.d.ts +112 -0
  29. package/dist/input/stdin-filter.js +657 -0
  30. package/dist/input/win32-input-mode.d.ts +61 -0
  31. package/dist/input/win32-input-mode.js +269 -0
  32. package/dist/model/agent/agent-mode.d.ts +108 -0
  33. package/dist/model/agent/agent-mode.js +121 -0
  34. package/dist/model/agent/entry-limits.d.ts +65 -0
  35. package/dist/model/agent/entry-limits.js +133 -0
  36. package/dist/model/agent/governance-view.d.ts +40 -0
  37. package/dist/model/agent/governance-view.js +40 -0
  38. package/dist/model/agent/invocation-card.d.ts +77 -0
  39. package/dist/model/agent/invocation-card.js +169 -0
  40. package/dist/model/agent/model-probe-limits.d.ts +39 -0
  41. package/dist/model/agent/model-probe-limits.js +25 -0
  42. package/dist/model/agent/model-probe.d.ts +104 -0
  43. package/dist/model/agent/model-probe.js +391 -0
  44. package/dist/model/agent/queued-messages.d.ts +23 -0
  45. package/dist/model/agent/queued-messages.js +49 -0
  46. package/dist/model/agent/reducer.d.ts +857 -0
  47. package/dist/model/agent/reducer.js +1646 -0
  48. package/dist/model/agent/retry-view.d.ts +68 -0
  49. package/dist/model/agent/retry-view.js +95 -0
  50. package/dist/model/agent/usage.d.ts +47 -0
  51. package/dist/model/agent/usage.js +84 -0
  52. package/dist/model/compaction/limits.d.ts +61 -0
  53. package/dist/model/compaction/limits.js +64 -0
  54. package/dist/model/compaction/meter.d.ts +276 -0
  55. package/dist/model/compaction/meter.js +512 -0
  56. package/dist/model/compaction/pressure.d.ts +163 -0
  57. package/dist/model/compaction/pressure.js +199 -0
  58. package/dist/model/compaction/reason-text.d.ts +36 -0
  59. package/dist/model/compaction/reason-text.js +78 -0
  60. package/dist/model/compaction/types.d.ts +360 -0
  61. package/dist/model/compaction/types.js +22 -0
  62. package/dist/model/config/governance-config.d.ts +125 -0
  63. package/dist/model/config/governance-config.js +164 -0
  64. package/dist/model/config/kit-resolution.d.ts +93 -0
  65. package/dist/model/config/kit-resolution.js +226 -0
  66. package/dist/model/config/model-kits.d.ts +225 -0
  67. package/dist/model/config/model-kits.js +302 -0
  68. package/dist/model/config/model-profile-resolution.d.ts +28 -0
  69. package/dist/model/config/model-profile-resolution.js +88 -0
  70. package/dist/model/config/model-profiles.d.ts +103 -0
  71. package/dist/model/config/model-profiles.js +188 -0
  72. package/dist/model/config/model-settings-types.d.ts +71 -0
  73. package/dist/model/config/model-settings-types.js +18 -0
  74. package/dist/model/config/schema.d.ts +1645 -0
  75. package/dist/model/config/schema.js +1383 -0
  76. package/dist/model/fast/limits.d.ts +152 -0
  77. package/dist/model/fast/limits.js +152 -0
  78. package/dist/model/fast/resolve.d.ts +44 -0
  79. package/dist/model/fast/resolve.js +107 -0
  80. package/dist/model/fast/task-summary-types.d.ts +66 -0
  81. package/dist/model/fast/task-summary-types.js +17 -0
  82. package/dist/model/fast/types.d.ts +141 -0
  83. package/dist/model/fast/types.js +14 -0
  84. package/dist/model/governance/governed-dispatch.d.ts +19 -0
  85. package/dist/model/governance/governed-dispatch.js +17 -0
  86. package/dist/model/governance/limits.d.ts +107 -0
  87. package/dist/model/governance/limits.js +131 -0
  88. package/dist/model/governance/posture.d.ts +35 -0
  89. package/dist/model/governance/posture.js +59 -0
  90. package/dist/model/governance/rules/events-table.d.ts +46 -0
  91. package/dist/model/governance/rules/events-table.js +94 -0
  92. package/dist/model/governance/types.d.ts +661 -0
  93. package/dist/model/governance/types.js +27 -0
  94. package/dist/model/logging/levels.d.ts +40 -0
  95. package/dist/model/logging/levels.js +59 -0
  96. package/dist/model/logging/log-port.d.ts +38 -0
  97. package/dist/model/logging/log-port.js +41 -0
  98. package/dist/model/logging/secret-registry.d.ts +32 -0
  99. package/dist/model/logging/secret-registry.js +73 -0
  100. package/dist/model/proc/limits.d.ts +214 -0
  101. package/dist/model/proc/limits.js +221 -0
  102. package/dist/model/proc/progress.d.ts +47 -0
  103. package/dist/model/proc/progress.js +163 -0
  104. package/dist/model/proc/types.d.ts +269 -0
  105. package/dist/model/proc/types.js +15 -0
  106. package/dist/model/proc/wait-view.d.ts +65 -0
  107. package/dist/model/proc/wait-view.js +66 -0
  108. package/dist/model/prompts/copy.d.ts +89 -0
  109. package/dist/model/prompts/copy.js +131 -0
  110. package/dist/model/prompts/fill.d.ts +51 -0
  111. package/dist/model/prompts/fill.js +46 -0
  112. package/dist/model/prompts/limits.d.ts +53 -0
  113. package/dist/model/prompts/limits.js +53 -0
  114. package/dist/model/prompts/search.d.ts +58 -0
  115. package/dist/model/prompts/search.js +146 -0
  116. package/dist/model/prompts/types.d.ts +204 -0
  117. package/dist/model/prompts/types.js +13 -0
  118. package/dist/model/prompts/validate.d.ts +22 -0
  119. package/dist/model/prompts/validate.js +69 -0
  120. package/dist/model/team/activity.d.ts +67 -0
  121. package/dist/model/team/activity.js +130 -0
  122. package/dist/model/team/limits.d.ts +308 -0
  123. package/dist/model/team/limits.js +330 -0
  124. package/dist/model/team/model.d.ts +104 -0
  125. package/dist/model/team/model.js +150 -0
  126. package/dist/model/team/panel-rows.d.ts +48 -0
  127. package/dist/model/team/panel-rows.js +75 -0
  128. package/dist/model/team/timeline.d.ts +74 -0
  129. package/dist/model/team/timeline.js +101 -0
  130. package/dist/model/team/types.d.ts +354 -0
  131. package/dist/model/team/types.js +13 -0
  132. package/dist/model/todo/acceptance.d.ts +120 -0
  133. package/dist/model/todo/acceptance.js +399 -0
  134. package/dist/model/todo/follow-through.d.ts +138 -0
  135. package/dist/model/todo/follow-through.js +248 -0
  136. package/dist/model/todo/limits.d.ts +152 -0
  137. package/dist/model/todo/limits.js +152 -0
  138. package/dist/model/todo/panel-rows.d.ts +45 -0
  139. package/dist/model/todo/panel-rows.js +70 -0
  140. package/dist/model/todo/plan-sections.d.ts +60 -0
  141. package/dist/model/todo/plan-sections.js +108 -0
  142. package/dist/model/todo/row-window.d.ts +51 -0
  143. package/dist/model/todo/row-window.js +107 -0
  144. package/dist/model/todo/types.d.ts +124 -0
  145. package/dist/model/todo/types.js +12 -0
  146. package/dist/model/tools/human-input.d.ts +212 -0
  147. package/dist/model/tools/human-input.js +265 -0
  148. package/dist/model/tools/patch.d.ts +115 -0
  149. package/dist/model/tools/patch.js +453 -0
  150. package/dist/model/tools/terminal-output.d.ts +115 -0
  151. package/dist/model/tools/terminal-output.js +201 -0
  152. package/dist/model/tools/tool-output-store.d.ts +68 -0
  153. package/dist/model/tools/tool-output-store.js +102 -0
  154. package/dist/model/update/limits.d.ts +111 -0
  155. package/dist/model/update/limits.js +111 -0
  156. package/dist/model/update/semver.d.ts +89 -0
  157. package/dist/model/update/semver.js +295 -0
  158. package/dist/model/update/types.d.ts +169 -0
  159. package/dist/model/update/types.js +68 -0
  160. package/dist/testing/governance-fixtures.d.ts +13 -0
  161. package/dist/testing/governance-fixtures.js +98 -0
  162. package/dist/testing/mini-vt.d.ts +28 -0
  163. package/dist/testing/mini-vt.js +158 -0
  164. package/dist/testing/render-at-width.d.ts +16 -0
  165. package/dist/testing/render-at-width.js +57 -0
  166. package/dist/testing/terminal-harness.d.ts +15 -0
  167. package/dist/testing/terminal-harness.js +40 -0
  168. package/dist/testing/vt-screen.d.ts +28 -0
  169. package/dist/testing/vt-screen.js +139 -0
  170. package/dist/ui/ActivityLine.d.ts +26 -0
  171. package/dist/ui/ActivityLine.js +51 -0
  172. package/dist/ui/AutocompletePopup.d.ts +23 -0
  173. package/dist/ui/AutocompletePopup.js +17 -0
  174. package/dist/ui/BottomStatusRow.d.ts +10 -0
  175. package/dist/ui/BottomStatusRow.js +9 -0
  176. package/dist/ui/Composer.d.ts +115 -0
  177. package/dist/ui/Composer.js +64 -0
  178. package/dist/ui/GovernancePanel.d.ts +50 -0
  179. package/dist/ui/GovernancePanel.js +77 -0
  180. package/dist/ui/GovernanceRun.d.ts +18 -0
  181. package/dist/ui/GovernanceRun.js +11 -0
  182. package/dist/ui/Header.d.ts +48 -0
  183. package/dist/ui/Header.js +27 -0
  184. package/dist/ui/Logo.d.ts +32 -0
  185. package/dist/ui/Logo.js +65 -0
  186. package/dist/ui/Markdown.d.ts +29 -0
  187. package/dist/ui/Markdown.js +116 -0
  188. package/dist/ui/PromptCaret.d.ts +11 -0
  189. package/dist/ui/PromptCaret.js +31 -0
  190. package/dist/ui/PromptInput.d.ts +192 -0
  191. package/dist/ui/PromptInput.js +689 -0
  192. package/dist/ui/QueuePanel.d.ts +8 -0
  193. package/dist/ui/QueuePanel.js +9 -0
  194. package/dist/ui/QueueStatusRow.d.ts +24 -0
  195. package/dist/ui/QueueStatusRow.js +51 -0
  196. package/dist/ui/ScrollbackShell.d.ts +132 -0
  197. package/dist/ui/ScrollbackShell.js +26 -0
  198. package/dist/ui/SessionOpener.d.ts +30 -0
  199. package/dist/ui/SessionOpener.js +12 -0
  200. package/dist/ui/StatusBar.d.ts +130 -0
  201. package/dist/ui/StatusBar.js +61 -0
  202. package/dist/ui/TeamPanel.d.ts +76 -0
  203. package/dist/ui/TeamPanel.js +103 -0
  204. package/dist/ui/ToastStack.d.ts +8 -0
  205. package/dist/ui/ToastStack.js +31 -0
  206. package/dist/ui/TodoPanel.d.ts +52 -0
  207. package/dist/ui/TodoPanel.js +214 -0
  208. package/dist/ui/Transcript.d.ts +105 -0
  209. package/dist/ui/Transcript.js +258 -0
  210. package/dist/ui/UpdateLine.d.ts +44 -0
  211. package/dist/ui/UpdateLine.js +129 -0
  212. package/dist/ui/activity-phrases.d.ts +33 -0
  213. package/dist/ui/activity-phrases.js +50 -0
  214. package/dist/ui/capabilities.d.ts +27 -0
  215. package/dist/ui/capabilities.js +65 -0
  216. package/dist/ui/clipboard-task.d.ts +29 -0
  217. package/dist/ui/clipboard-task.js +66 -0
  218. package/dist/ui/clipboard.d.ts +31 -0
  219. package/dist/ui/clipboard.js +157 -0
  220. package/dist/ui/color-runtime.d.ts +5 -0
  221. package/dist/ui/color-runtime.js +29 -0
  222. package/dist/ui/composer-input.d.ts +38 -0
  223. package/dist/ui/composer-input.js +79 -0
  224. package/dist/ui/composer-limits.d.ts +30 -0
  225. package/dist/ui/composer-limits.js +45 -0
  226. package/dist/ui/composer-rows.d.ts +73 -0
  227. package/dist/ui/composer-rows.js +129 -0
  228. package/dist/ui/console-bridge.d.ts +19 -0
  229. package/dist/ui/console-bridge.js +52 -0
  230. package/dist/ui/density.d.ts +26 -0
  231. package/dist/ui/density.js +34 -0
  232. package/dist/ui/display-tab.d.ts +51 -0
  233. package/dist/ui/display-tab.js +82 -0
  234. package/dist/ui/editor-navigation.d.ts +55 -0
  235. package/dist/ui/editor-navigation.js +96 -0
  236. package/dist/ui/editor-reducer.d.ts +108 -0
  237. package/dist/ui/editor-reducer.js +187 -0
  238. package/dist/ui/enter-frames.d.ts +47 -0
  239. package/dist/ui/enter-frames.js +117 -0
  240. package/dist/ui/entries/AssistantEntry.d.ts +37 -0
  241. package/dist/ui/entries/AssistantEntry.js +43 -0
  242. package/dist/ui/entries/CompactionCard.d.ts +88 -0
  243. package/dist/ui/entries/CompactionCard.js +222 -0
  244. package/dist/ui/entries/DiffView.d.ts +61 -0
  245. package/dist/ui/entries/DiffView.js +103 -0
  246. package/dist/ui/entries/EntryFrame.d.ts +23 -0
  247. package/dist/ui/entries/EntryFrame.js +6 -0
  248. package/dist/ui/entries/FastCard.d.ts +53 -0
  249. package/dist/ui/entries/FastCard.js +105 -0
  250. package/dist/ui/entries/GovernanceCard.d.ts +30 -0
  251. package/dist/ui/entries/GovernanceCard.js +32 -0
  252. package/dist/ui/entries/InvocationCard.d.ts +20 -0
  253. package/dist/ui/entries/InvocationCard.js +32 -0
  254. package/dist/ui/entries/QueuedEntry.d.ts +27 -0
  255. package/dist/ui/entries/QueuedEntry.js +33 -0
  256. package/dist/ui/entries/RetryCard.d.ts +56 -0
  257. package/dist/ui/entries/RetryCard.js +60 -0
  258. package/dist/ui/entries/ServiceCard.d.ts +82 -0
  259. package/dist/ui/entries/ServiceCard.js +151 -0
  260. package/dist/ui/entries/TeamCard.d.ts +55 -0
  261. package/dist/ui/entries/TeamCard.js +94 -0
  262. package/dist/ui/entries/TodoCard.d.ts +54 -0
  263. package/dist/ui/entries/TodoCard.js +98 -0
  264. package/dist/ui/entries/ToolCard.d.ts +81 -0
  265. package/dist/ui/entries/ToolCard.js +169 -0
  266. package/dist/ui/entries/ToolPreview.d.ts +59 -0
  267. package/dist/ui/entries/ToolPreview.js +208 -0
  268. package/dist/ui/entries/UserEntry.d.ts +36 -0
  269. package/dist/ui/entries/UserEntry.js +57 -0
  270. package/dist/ui/entries/WaitCard.d.ts +37 -0
  271. package/dist/ui/entries/WaitCard.js +92 -0
  272. package/dist/ui/exit-snapshot.d.ts +43 -0
  273. package/dist/ui/exit-snapshot.js +26 -0
  274. package/dist/ui/frame-differ.d.ts +166 -0
  275. package/dist/ui/frame-differ.js +354 -0
  276. package/dist/ui/frame-observer.d.ts +17 -0
  277. package/dist/ui/frame-observer.js +94 -0
  278. package/dist/ui/frame-parser.d.ts +7 -0
  279. package/dist/ui/frame-parser.js +18 -0
  280. package/dist/ui/gauge.d.ts +39 -0
  281. package/dist/ui/gauge.js +55 -0
  282. package/dist/ui/glyphs.d.ts +178 -0
  283. package/dist/ui/glyphs.js +165 -0
  284. package/dist/ui/governance-copy.d.ts +69 -0
  285. package/dist/ui/governance-copy.js +104 -0
  286. package/dist/ui/governance-status.d.ts +145 -0
  287. package/dist/ui/governance-status.js +326 -0
  288. package/dist/ui/gradient.d.ts +11 -0
  289. package/dist/ui/gradient.js +50 -0
  290. package/dist/ui/ink-runtime.d.ts +4 -0
  291. package/dist/ui/ink-runtime.js +51 -0
  292. package/dist/ui/interaction-copy.d.ts +84 -0
  293. package/dist/ui/interaction-copy.js +41 -0
  294. package/dist/ui/interaction-hints.d.ts +44 -0
  295. package/dist/ui/interaction-hints.js +97 -0
  296. package/dist/ui/layout/AppShell.d.ts +17 -0
  297. package/dist/ui/layout/AppShell.js +6 -0
  298. package/dist/ui/layout/Gutter.d.ts +67 -0
  299. package/dist/ui/layout/Gutter.js +42 -0
  300. package/dist/ui/layout/MeasuredEntry.d.ts +21 -0
  301. package/dist/ui/layout/MeasuredEntry.js +30 -0
  302. package/dist/ui/layout/OverlayFrame.d.ts +73 -0
  303. package/dist/ui/layout/OverlayFrame.js +110 -0
  304. package/dist/ui/layout/ScrollIndicator.d.ts +32 -0
  305. package/dist/ui/layout/ScrollIndicator.js +22 -0
  306. package/dist/ui/layout/ScrollViewport.d.ts +40 -0
  307. package/dist/ui/layout/ScrollViewport.js +222 -0
  308. package/dist/ui/layout/agents-board.d.ts +102 -0
  309. package/dist/ui/layout/agents-board.js +389 -0
  310. package/dist/ui/layout/autocomplete.d.ts +18 -0
  311. package/dist/ui/layout/autocomplete.js +26 -0
  312. package/dist/ui/layout/budget.d.ts +43 -0
  313. package/dist/ui/layout/budget.js +52 -0
  314. package/dist/ui/layout/cells.d.ts +61 -0
  315. package/dist/ui/layout/cells.js +156 -0
  316. package/dist/ui/layout/document-layout.d.ts +13 -0
  317. package/dist/ui/layout/document-layout.js +10 -0
  318. package/dist/ui/layout/follow-state.d.ts +138 -0
  319. package/dist/ui/layout/follow-state.js +148 -0
  320. package/dist/ui/layout/frame.d.ts +36 -0
  321. package/dist/ui/layout/frame.js +39 -0
  322. package/dist/ui/layout/governance-board.d.ts +121 -0
  323. package/dist/ui/layout/governance-board.js +382 -0
  324. package/dist/ui/layout/governance-card.d.ts +53 -0
  325. package/dist/ui/layout/governance-card.js +134 -0
  326. package/dist/ui/layout/governance-chip.d.ts +38 -0
  327. package/dist/ui/layout/governance-chip.js +64 -0
  328. package/dist/ui/layout/governance-panel.d.ts +85 -0
  329. package/dist/ui/layout/governance-panel.js +358 -0
  330. package/dist/ui/layout/governance-roster.d.ts +65 -0
  331. package/dist/ui/layout/governance-roster.js +275 -0
  332. package/dist/ui/layout/header-hints.d.ts +90 -0
  333. package/dist/ui/layout/header-hints.js +110 -0
  334. package/dist/ui/layout/header-left.d.ts +115 -0
  335. package/dist/ui/layout/header-left.js +206 -0
  336. package/dist/ui/layout/invocation-card.d.ts +41 -0
  337. package/dist/ui/layout/invocation-card.js +91 -0
  338. package/dist/ui/layout/kit-chip.d.ts +50 -0
  339. package/dist/ui/layout/kit-chip.js +81 -0
  340. package/dist/ui/layout/overlay-window.d.ts +43 -0
  341. package/dist/ui/layout/overlay-window.js +51 -0
  342. package/dist/ui/layout/queue-layout.d.ts +19 -0
  343. package/dist/ui/layout/queue-layout.js +26 -0
  344. package/dist/ui/layout/rail.d.ts +7 -0
  345. package/dist/ui/layout/rail.js +16 -0
  346. package/dist/ui/layout/scroll-indicator.d.ts +27 -0
  347. package/dist/ui/layout/scroll-indicator.js +36 -0
  348. package/dist/ui/layout/scroll.d.ts +37 -0
  349. package/dist/ui/layout/scroll.js +99 -0
  350. package/dist/ui/layout/scrollbar-geometry.d.ts +17 -0
  351. package/dist/ui/layout/scrollbar-geometry.js +13 -0
  352. package/dist/ui/layout/session-chip.d.ts +52 -0
  353. package/dist/ui/layout/session-chip.js +64 -0
  354. package/dist/ui/layout/shortcut-panel-layout.d.ts +191 -0
  355. package/dist/ui/layout/shortcut-panel-layout.js +321 -0
  356. package/dist/ui/layout/status-detail-layout.d.ts +9 -0
  357. package/dist/ui/layout/status-detail-layout.js +79 -0
  358. package/dist/ui/layout/status-layout.d.ts +140 -0
  359. package/dist/ui/layout/status-layout.js +262 -0
  360. package/dist/ui/layout/task-summary-cell.d.ts +61 -0
  361. package/dist/ui/layout/task-summary-cell.js +65 -0
  362. package/dist/ui/layout/team-panel.d.ts +18 -0
  363. package/dist/ui/layout/team-panel.js +25 -0
  364. package/dist/ui/layout/team-row.d.ts +139 -0
  365. package/dist/ui/layout/team-row.js +246 -0
  366. package/dist/ui/layout/todo-layout.d.ts +62 -0
  367. package/dist/ui/layout/todo-layout.js +102 -0
  368. package/dist/ui/layout/useTerminalSize.d.ts +13 -0
  369. package/dist/ui/layout/useTerminalSize.js +50 -0
  370. package/dist/ui/layout/viewport-geometry.d.ts +29 -0
  371. package/dist/ui/layout/viewport-geometry.js +28 -0
  372. package/dist/ui/layout/virtual-window.d.ts +112 -0
  373. package/dist/ui/layout/virtual-window.js +494 -0
  374. package/dist/ui/layout/wait-bar.d.ts +34 -0
  375. package/dist/ui/layout/wait-bar.js +48 -0
  376. package/dist/ui/layout/wrap-rows.d.ts +26 -0
  377. package/dist/ui/layout/wrap-rows.js +88 -0
  378. package/dist/ui/live-clamp.d.ts +14 -0
  379. package/dist/ui/live-clamp.js +46 -0
  380. package/dist/ui/markdown-blocks.d.ts +107 -0
  381. package/dist/ui/markdown-blocks.js +240 -0
  382. package/dist/ui/overlays/AgentsBoardOverlay.d.ts +57 -0
  383. package/dist/ui/overlays/AgentsBoardOverlay.js +183 -0
  384. package/dist/ui/overlays/ConfirmDialog.d.ts +31 -0
  385. package/dist/ui/overlays/ConfirmDialog.js +44 -0
  386. package/dist/ui/overlays/GovernanceBoardOverlay.d.ts +41 -0
  387. package/dist/ui/overlays/GovernanceBoardOverlay.js +76 -0
  388. package/dist/ui/overlays/GovernanceSettingsPage.d.ts +48 -0
  389. package/dist/ui/overlays/GovernanceSettingsPage.js +93 -0
  390. package/dist/ui/overlays/HelpOverlay.d.ts +29 -0
  391. package/dist/ui/overlays/HelpOverlay.js +232 -0
  392. package/dist/ui/overlays/KitEditor.d.ts +23 -0
  393. package/dist/ui/overlays/KitEditor.js +101 -0
  394. package/dist/ui/overlays/KitManager.d.ts +23 -0
  395. package/dist/ui/overlays/KitManager.js +104 -0
  396. package/dist/ui/overlays/KitPicker.d.ts +49 -0
  397. package/dist/ui/overlays/KitPicker.js +58 -0
  398. package/dist/ui/overlays/ModelDiscoveryList.d.ts +23 -0
  399. package/dist/ui/overlays/ModelDiscoveryList.js +161 -0
  400. package/dist/ui/overlays/ModelPicker.d.ts +26 -0
  401. package/dist/ui/overlays/ModelPicker.js +63 -0
  402. package/dist/ui/overlays/ModelProfileEditor.d.ts +29 -0
  403. package/dist/ui/overlays/ModelProfileEditor.js +168 -0
  404. package/dist/ui/overlays/ModelProfilePicker.d.ts +48 -0
  405. package/dist/ui/overlays/ModelProfilePicker.js +231 -0
  406. package/dist/ui/overlays/PlanReviewOverlay.d.ts +51 -0
  407. package/dist/ui/overlays/PlanReviewOverlay.js +132 -0
  408. package/dist/ui/overlays/PromptEditorPage.d.ts +48 -0
  409. package/dist/ui/overlays/PromptEditorPage.js +227 -0
  410. package/dist/ui/overlays/PromptLibraryOverlay.d.ts +37 -0
  411. package/dist/ui/overlays/PromptLibraryOverlay.js +191 -0
  412. package/dist/ui/overlays/PromptPicker.d.ts +36 -0
  413. package/dist/ui/overlays/PromptPicker.js +129 -0
  414. package/dist/ui/overlays/PromptTextArea.d.ts +86 -0
  415. package/dist/ui/overlays/PromptTextArea.js +141 -0
  416. package/dist/ui/overlays/QuestionOverlay.d.ts +39 -0
  417. package/dist/ui/overlays/QuestionOverlay.js +258 -0
  418. package/dist/ui/overlays/QueueOverlay.d.ts +22 -0
  419. package/dist/ui/overlays/QueueOverlay.js +79 -0
  420. package/dist/ui/overlays/SettingsScreen.d.ts +228 -0
  421. package/dist/ui/overlays/SettingsScreen.js +1037 -0
  422. package/dist/ui/overlays/ShortcutPanel.d.ts +39 -0
  423. package/dist/ui/overlays/ShortcutPanel.js +106 -0
  424. package/dist/ui/overlays/TeamFanoutPage.d.ts +51 -0
  425. package/dist/ui/overlays/TeamFanoutPage.js +90 -0
  426. package/dist/ui/overlays/governance-settings.d.ts +79 -0
  427. package/dist/ui/overlays/governance-settings.js +140 -0
  428. package/dist/ui/overlays/kit-picker-state.d.ts +87 -0
  429. package/dist/ui/overlays/kit-picker-state.js +136 -0
  430. package/dist/ui/overlays/kit-settings-state.d.ts +129 -0
  431. package/dist/ui/overlays/kit-settings-state.js +268 -0
  432. package/dist/ui/overlays/model-probe-view.d.ts +128 -0
  433. package/dist/ui/overlays/model-probe-view.js +225 -0
  434. package/dist/ui/overlays/model-profile-state.d.ts +177 -0
  435. package/dist/ui/overlays/model-profile-state.js +301 -0
  436. package/dist/ui/overlays/prompt-library-state.d.ts +162 -0
  437. package/dist/ui/overlays/prompt-library-state.js +335 -0
  438. package/dist/ui/overlays/prompt-picker-state.d.ts +71 -0
  439. package/dist/ui/overlays/prompt-picker-state.js +98 -0
  440. package/dist/ui/overlays/team-fanout-state.d.ts +106 -0
  441. package/dist/ui/overlays/team-fanout-state.js +155 -0
  442. package/dist/ui/overlays/use-model-probe.d.ts +30 -0
  443. package/dist/ui/overlays/use-model-probe.js +109 -0
  444. package/dist/ui/palettes.d.ts +112 -0
  445. package/dist/ui/palettes.js +130 -0
  446. package/dist/ui/paste-frames.d.ts +91 -0
  447. package/dist/ui/paste-frames.js +117 -0
  448. package/dist/ui/paste-tokens.d.ts +90 -0
  449. package/dist/ui/paste-tokens.js +147 -0
  450. package/dist/ui/render-cache.d.ts +81 -0
  451. package/dist/ui/render-cache.js +196 -0
  452. package/dist/ui/render-governor.d.ts +54 -0
  453. package/dist/ui/render-governor.js +78 -0
  454. package/dist/ui/run-metrics.d.ts +23 -0
  455. package/dist/ui/run-metrics.js +27 -0
  456. package/dist/ui/run-status-row.d.ts +63 -0
  457. package/dist/ui/run-status-row.js +54 -0
  458. package/dist/ui/screen.d.ts +107 -0
  459. package/dist/ui/screen.js +234 -0
  460. package/dist/ui/scrollback/LiveTail.d.ts +115 -0
  461. package/dist/ui/scrollback/LiveTail.js +48 -0
  462. package/dist/ui/scrollback/band.d.ts +114 -0
  463. package/dist/ui/scrollback/band.js +143 -0
  464. package/dist/ui/scrollback/budget.d.ts +90 -0
  465. package/dist/ui/scrollback/budget.js +100 -0
  466. package/dist/ui/scrollback/canvas.d.ts +100 -0
  467. package/dist/ui/scrollback/canvas.js +114 -0
  468. package/dist/ui/scrollback/cursor-probe.d.ts +71 -0
  469. package/dist/ui/scrollback/cursor-probe.js +133 -0
  470. package/dist/ui/scrollback/drain.d.ts +32 -0
  471. package/dist/ui/scrollback/drain.js +64 -0
  472. package/dist/ui/scrollback/exit-summary.d.ts +23 -0
  473. package/dist/ui/scrollback/exit-summary.js +25 -0
  474. package/dist/ui/scrollback/limits.d.ts +98 -0
  475. package/dist/ui/scrollback/limits.js +98 -0
  476. package/dist/ui/scrollback/live-preview.d.ts +34 -0
  477. package/dist/ui/scrollback/live-preview.js +130 -0
  478. package/dist/ui/scrollback/overflow-print.d.ts +108 -0
  479. package/dist/ui/scrollback/overflow-print.js +120 -0
  480. package/dist/ui/scrollback/renderer.d.ts +48 -0
  481. package/dist/ui/scrollback/renderer.js +186 -0
  482. package/dist/ui/scrollback/scrollback-writer.d.ts +174 -0
  483. package/dist/ui/scrollback/scrollback-writer.js +648 -0
  484. package/dist/ui/scrollback/settled-boundary.d.ts +42 -0
  485. package/dist/ui/scrollback/settled-boundary.js +109 -0
  486. package/dist/ui/scrollback/tail-anchor.d.ts +71 -0
  487. package/dist/ui/scrollback/tail-anchor.js +79 -0
  488. package/dist/ui/scrollback/tail-window.d.ts +73 -0
  489. package/dist/ui/scrollback/tail-window.js +89 -0
  490. package/dist/ui/scrollback/use-scrollback-view.d.ts +139 -0
  491. package/dist/ui/scrollback/use-scrollback-view.js +601 -0
  492. package/dist/ui/scrollback/writer-shapes.d.ts +127 -0
  493. package/dist/ui/scrollback/writer-shapes.js +159 -0
  494. package/dist/ui/scrollbar-controller.d.ts +30 -0
  495. package/dist/ui/scrollbar-controller.js +124 -0
  496. package/dist/ui/selection/highlight.d.ts +39 -0
  497. package/dist/ui/selection/highlight.js +64 -0
  498. package/dist/ui/selection/screen-mirror.d.ts +24 -0
  499. package/dist/ui/selection/screen-mirror.js +35 -0
  500. package/dist/ui/selection/selection-controller.d.ts +104 -0
  501. package/dist/ui/selection/selection-controller.js +372 -0
  502. package/dist/ui/selection/selection.d.ts +90 -0
  503. package/dist/ui/selection/selection.js +223 -0
  504. package/dist/ui/shortcuts.d.ts +81 -0
  505. package/dist/ui/shortcuts.js +221 -0
  506. package/dist/ui/status-feedback.d.ts +35 -0
  507. package/dist/ui/status-feedback.js +38 -0
  508. package/dist/ui/stdout-frame-writer.d.ts +74 -0
  509. package/dist/ui/stdout-frame-writer.js +155 -0
  510. package/dist/ui/team-status.d.ts +166 -0
  511. package/dist/ui/team-status.js +252 -0
  512. package/dist/ui/terminal-plan.d.ts +52 -0
  513. package/dist/ui/terminal-plan.js +49 -0
  514. package/dist/ui/theme.d.ts +96 -0
  515. package/dist/ui/theme.js +130 -0
  516. package/dist/ui/transcript-text.d.ts +41 -0
  517. package/dist/ui/transcript-text.js +282 -0
  518. package/dist/ui/use-height-store.d.ts +31 -0
  519. package/dist/ui/use-height-store.js +76 -0
  520. package/dist/ui/use-render-governor.d.ts +39 -0
  521. package/dist/ui/use-render-governor.js +57 -0
  522. package/dist/ui/use-wheel-routing.d.ts +57 -0
  523. package/dist/ui/use-wheel-routing.js +152 -0
  524. package/dist/ui/win-vt-force.d.ts +136 -0
  525. package/dist/ui/win-vt-force.js +237 -0
  526. package/dist/ui/win-vt-input.d.ts +57 -0
  527. package/dist/ui/win-vt-input.js +62 -0
  528. package/package.json +86 -4
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Autocomplete popup (spec §3.6). A shared bordered suggestion menu used by both
3
+ * the slash-command palette and `@file` completion. Presentational only — the
4
+ * suggestion list, selection index, and key handling live in `PromptInput`.
5
+ */
6
+ import React from 'react';
7
+ import type { Theme } from './theme.js';
8
+ import type { TermCapabilities } from './capabilities.js';
9
+ import { type AutocompleteLayout } from './layout/autocomplete.js';
10
+ export interface Suggestion {
11
+ label: string;
12
+ hint?: string;
13
+ }
14
+ interface AutocompletePopupProps {
15
+ items: Suggestion[];
16
+ selected: number;
17
+ theme: Theme;
18
+ caps: TermCapabilities;
19
+ maxRows?: number;
20
+ layout?: AutocompleteLayout;
21
+ }
22
+ export declare function AutocompletePopup({ items, selected, theme, caps, maxRows, layout, }: AutocompletePopupProps): React.ReactElement | null;
23
+ export {};
@@ -0,0 +1,17 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text } from 'ink';
3
+ import { pickGlyphs } from './glyphs.js';
4
+ import { buildAutocompleteLayout } from './layout/autocomplete.js';
5
+ export function AutocompletePopup({ items, selected, theme, caps, maxRows, layout, }) {
6
+ const projection = layout ?? buildAutocompleteLayout({ itemCount: items.length, selected, maxRows });
7
+ if (projection.rowCount === 0)
8
+ return null;
9
+ const glyphs = pickGlyphs(caps);
10
+ const { start: windowStart, count, moreBelow, showMore } = projection;
11
+ const visible = items.slice(windowStart, windowStart + count);
12
+ return (_jsxs(Box, { flexDirection: "column", flexShrink: 0, borderStyle: glyphs.boxStyle, borderColor: theme.border, paddingX: 1, children: [visible.map((item, i) => {
13
+ const idx = windowStart + i;
14
+ const active = idx === selected;
15
+ return (_jsxs(Text, { inverse: active, wrap: "truncate", children: [_jsx(Text, { color: active ? theme.accent : theme.muted, children: active ? `${glyphs.caret} ` : ' ' }), _jsx(Text, { color: active ? undefined : theme.primary, children: item.label.replace(/\s+/g, ' ') }), item.hint ? _jsxs(Text, { color: theme.muted, children: [" ", item.hint.replace(/\s+/g, ' ')] }) : null] }, idx));
16
+ }), showMore && _jsxs(Text, { wrap: "truncate", color: theme.muted, children: [" +", moreBelow, " more"] })] }));
17
+ }
@@ -0,0 +1,10 @@
1
+ /** Renders an already allocated detail row; it never chooses visibility or animation. */
2
+ import React from 'react';
3
+ import type { Theme } from './theme.js';
4
+ import type { StatusLinePlan } from './layout/status-layout.js';
5
+ export interface BottomStatusRowProps {
6
+ plan: StatusLinePlan;
7
+ columns: number;
8
+ theme: Theme;
9
+ }
10
+ export declare function BottomStatusRow({ plan, columns, theme }: BottomStatusRowProps): React.ReactElement;
@@ -0,0 +1,9 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /** Renders an already allocated detail row; it never chooses visibility or animation. */
3
+ import React from 'react';
4
+ import { Box, Text } from 'ink';
5
+ export function BottomStatusRow({ plan, columns, theme }) {
6
+ const tones = { normal: theme.primary, muted: theme.muted, warning: theme.noticeWarn, error: theme.noticeError,
7
+ accent: theme.accent, govern: theme.governAccent };
8
+ return _jsxs(Box, { height: 1, width: columns, flexShrink: 0, overflow: "hidden", children: [_jsx(Box, { width: 1, flexShrink: 0, children: _jsx(Text, { children: " " }) }), plan.fields.map((field, index) => _jsxs(React.Fragment, { children: [index > 0 && _jsx(Box, { width: plan.separatorCells, flexShrink: 0, children: _jsx(Text, { color: theme.muted, children: plan.separator }) }), _jsx(Box, { width: field.cells, flexShrink: 0, children: _jsx(Text, { wrap: "truncate", color: tones[field.tone], children: field.text }) })] }, field.id))] });
9
+ }
@@ -0,0 +1,115 @@
1
+ /** Input border and draft shell. Global action hints and activity live below the viewport. */
2
+ import React from 'react';
3
+ import { type DOMElement } from 'ink';
4
+ import type { Theme } from './theme.js';
5
+ import type { TermCapabilities } from './capabilities.js';
6
+ import { pickGlyphs } from './glyphs.js';
7
+ import type { ComposerSubmitResult } from './composer-input.js';
8
+ import { type CommandOption, type DraftFill } from './PromptInput.js';
9
+ import type { RunActivity } from './run-status-row.js';
10
+ import { type AgentMode } from '../model/agent/agent-mode.js';
11
+ /** Legacy caller shape retained for source compatibility; Composer no longer mounts it. */
12
+ export interface RunRowProps {
13
+ activity: RunActivity;
14
+ /** The row is in the viewport with no overlay: draw the animated spinner. */
15
+ live: boolean;
16
+ /** Measured by `ScrollViewport` to learn whether the row has scrolled away. */
17
+ rowRef?: React.RefObject<DOMElement>;
18
+ }
19
+ export interface ComposerProps {
20
+ /** Compatibility prop; activity is now rendered by the global StatusBar. */
21
+ runRow?: RunRowProps | null;
22
+ cols?: number;
23
+ terminalRows?: number;
24
+ statusExpanded?: boolean;
25
+ deleteDisambiguated?: boolean;
26
+ onCompletionContextChange?: (context: 'none' | 'slash' | 'file') => void;
27
+ cursorVisible?: boolean;
28
+ onInteraction?: () => void;
29
+ measureRef?: React.RefObject<DOMElement>;
30
+ /** False while an overlay owns the keyboard (the input is visually blurred). */
31
+ isActive: boolean;
32
+ reducedMotion?: boolean;
33
+ onEscape?: () => void;
34
+ onEscapeDismiss?: () => void;
35
+ running: boolean;
36
+ history: string[];
37
+ commands: CommandOption[];
38
+ cwd: string;
39
+ /** Dropped on short terminals to buy back a row (§5.4). */
40
+ showHint: boolean;
41
+ /** Compatibility prop; submission count no longer hides essential actions. */
42
+ submitCount: number;
43
+ /** Compatibility prop; App owns secondary teaching-hint visibility. */
44
+ hintsEnabled: boolean;
45
+ /** Mirror of the controller's effective mode; drives the border. */
46
+ agentMode: AgentMode;
47
+ /**
48
+ * The adopted posture (governance-mode 10.2). A governed one paints the idle/draft
49
+ * border in `governAccent`, the same slot PLAN uses `accent` for. Absent = the
50
+ * pre-governance border logic, unchanged.
51
+ */
52
+ posture?: string;
53
+ /** Compatibility prop; the global action row names the effective mode key. */
54
+ modeToggleKey?: string;
55
+ popupMaxRows?: number;
56
+ popupMaxHeight?: number;
57
+ onPopupRowsChange?: (rows: number) => void;
58
+ /** Compatibility prop; history position is displayed by Header. */
59
+ scrolledLines?: number;
60
+ /** Compatibility prop; the global status and action rows show live services. */
61
+ services?: number;
62
+ /**
63
+ * The composer's DRAFT row count, forwarded upward (tui-paste-handling
64
+ * section 5.5).
65
+ *
66
+ * `hasDraft` stays here, because the border reacts to it and routing that
67
+ * through `App` would re-render the transcript on the first keystroke of every
68
+ * message. The row count is the opposite case: `layout/budget.ts` needs it, so
69
+ * it has to reach `App` — and it changes on a line break rather than on a
70
+ * character, which is what keeps the re-render rate the same (R-6).
71
+ */
72
+ onDraftRows?: (rows: number) => void;
73
+ /**
74
+ * Draft PRESENCE, forwarded upward for the Ctrl+C ladder
75
+ * (ctrl-c-clear-draft-exit). App stores it in a ref only - no state,
76
+ * so the transcript does not re-render on the first keystroke of a
77
+ * message (the same cost the comment above documents).
78
+ */
79
+ onDraftPresence?: (hasDraft: boolean) => void;
80
+ /**
81
+ * Downward half of the same channel: ticks when App asks the editor
82
+ * to clear the draft (Ctrl+C x2 while drafting). Passed through to
83
+ * PromptInput unchanged.
84
+ */
85
+ draftClearNonce?: number;
86
+ /** Downward half of the fill channel; forwarded to `PromptInput` unchanged. */
87
+ draftFill?: DraftFill;
88
+ /** `prompts.insertMode`, forwarded unchanged. */
89
+ insertMode?: 'insert' | 'replace';
90
+ /** Paste refusals from `PromptInput`, routed to `App`'s notice dispatch. */
91
+ onNotice?: (level: 'warn' | 'error', text: string) => void;
92
+ theme: Theme;
93
+ caps: TermCapabilities;
94
+ onSubmit: (text: string) => ComposerSubmitResult;
95
+ onHelp?: () => void;
96
+ }
97
+ /** Legacy helper retained for consumers and contract tests; not rendered by Composer. */
98
+ export declare function runningHintClauses(opts: {
99
+ glyphs: ReturnType<typeof pickGlyphs>;
100
+ services: number;
101
+ }): string[];
102
+ /** Compatibility formatter. Product hints use interaction-hints.ts. */
103
+ declare function hintText(opts: {
104
+ running: boolean;
105
+ submitCount: number;
106
+ glyphs: ReturnType<typeof pickGlyphs>;
107
+ mode: AgentMode;
108
+ toggleKey: string;
109
+ /** Live background services; 0 leaves both rows byte-identical to today's. */
110
+ services: number;
111
+ }): string;
112
+ /** Compatibility export for existing hint contract tests. */
113
+ export declare const hintTextForTest: typeof hintText;
114
+ export declare function Composer({ deleteDisambiguated, onCompletionContextChange, cols, terminalRows, statusExpanded, cursorVisible, onInteraction, measureRef, isActive, reducedMotion, onEscape, onEscapeDismiss, running, history, commands, cwd, agentMode, posture, popupMaxRows, popupMaxHeight, onPopupRowsChange, onDraftRows, onDraftPresence, draftClearNonce, draftFill, insertMode, onNotice, theme, caps, onSubmit, onHelp, }: ComposerProps): React.ReactElement;
115
+ export {};
@@ -0,0 +1,64 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ /** Input border and draft shell. Global action hints and activity live below the viewport. */
3
+ import { useCallback, useState } from 'react';
4
+ import { Box } from 'ink';
5
+ import { HINT_FADE_AFTER } from '../model/config/schema.js';
6
+ import { PromptInput } from './PromptInput.js';
7
+ import { MODE_LABEL, nextMode } from '../model/agent/agent-mode.js';
8
+ import { isGovernedModeValue } from './governance-status.js';
9
+ /** Legacy helper retained for consumers and contract tests; not rendered by Composer. */
10
+ export function runningHintClauses(opts) {
11
+ const { glyphs, services } = opts;
12
+ const clauses = [`${glyphs.enterKey} queue`, `esc${glyphs.times}2 interrupt`];
13
+ if (services > 0)
14
+ clauses.push(`ctrl+c stop ${services}`);
15
+ clauses.push(`ctrl+c${glyphs.times}2 exit`);
16
+ return clauses;
17
+ }
18
+ /** Compatibility formatter. Product hints use interaction-hints.ts. */
19
+ function hintText(opts) {
20
+ const { running, submitCount, glyphs, mode, toggleKey, services } = opts;
21
+ const dot = ` ${glyphs.midDot} `;
22
+ if (running)
23
+ return runningHintClauses({ glyphs, services }).join(dot);
24
+ const toggle = `${toggleKey} ${MODE_LABEL[nextMode(mode)].toLowerCase()}`;
25
+ const stop = services > 0 ? [`ctrl+c stop ${services}`] : [];
26
+ if (submitCount >= HINT_FADE_AFTER)
27
+ return [...stop, toggle, '? help'].join(dot);
28
+ return [
29
+ ...stop,
30
+ `${glyphs.enterKey} send`,
31
+ `${glyphs.shiftEnter} newline`,
32
+ '/ commands',
33
+ '@ files',
34
+ toggle,
35
+ '? help',
36
+ ].join(dot);
37
+ }
38
+ /** Compatibility export for existing hint contract tests. */
39
+ export const hintTextForTest = hintText;
40
+ export function Composer({ deleteDisambiguated, onCompletionContextChange, cols, terminalRows, statusExpanded, cursorVisible, onInteraction, measureRef, isActive, reducedMotion, onEscape, onEscapeDismiss, running, history, commands, cwd, agentMode, posture, popupMaxRows, popupMaxHeight, onPopupRowsChange, onDraftRows, onDraftPresence, draftClearNonce, draftFill, insertMode, onNotice, theme, caps, onSubmit, onHelp, }) {
41
+ const [hasDraft, setHasDraft] = useState(false);
42
+ const onDraftChange = useCallback((next) => {
43
+ setHasDraft(next.hasDraft);
44
+ // Presence FIRST: the App ref must be current before the row-count
45
+ // report below can trigger the App render that reads it.
46
+ onDraftPresence?.(next.hasDraft);
47
+ onDraftRows?.(next.rows);
48
+ }, [onDraftPresence, onDraftRows]);
49
+ // Plan mode inserts ONE branch, above `draft` and below `running`. The
50
+ // ordering is load-bearing: an in-flight run's border must stay `toolRunning`,
51
+ // because "is it running" is more urgent than "which mode".
52
+ const borderColor = !isActive
53
+ ? theme.toolPending
54
+ : running
55
+ ? theme.toolRunning
56
+ : isGovernedModeValue(posture)
57
+ ? theme.governAccent
58
+ : agentMode === 'plan'
59
+ ? theme.accent
60
+ : hasDraft
61
+ ? theme.focusBorder ?? theme.primary
62
+ : theme.idleBorder ?? theme.border;
63
+ return (_jsx(Box, { ref: measureRef, width: cols, flexDirection: "column", flexShrink: 0, children: _jsx(PromptInput, { deleteDisambiguated: deleteDisambiguated, onCompletionContextChange: onCompletionContextChange, cols: cols, terminalRows: terminalRows, statusExpanded: statusExpanded, cursorVisible: cursorVisible, onInteraction: onInteraction, isActive: isActive, reducedMotion: reducedMotion, onEscape: onEscape, onEscapeDismiss: onEscapeDismiss, running: running, history: history, commands: commands, cwd: cwd, theme: theme, caps: caps, popupMaxRows: popupMaxRows, popupMaxHeight: popupMaxHeight, onPopupRowsChange: onPopupRowsChange, onSubmit: onSubmit, onHelp: onHelp, agentMode: agentMode, borderColor: borderColor, onDraftChange: onDraftChange, draftClearNonce: draftClearNonce, draftFill: draftFill, insertMode: insertMode, onNotice: onNotice }) }));
64
+ }
@@ -0,0 +1,50 @@
1
+ /**
2
+ * GovernancePanel - the legion panel (governance-mode section 10.3).
3
+ *
4
+ * ASCII ONLY: every glyph comes from `pickGlyphs`, through the layout.
5
+ *
6
+ * THIS COMPONENT ONLY COLOURS AND PLACES. Every decision - which tier, which columns, how
7
+ * wide, what each cell says, which row is hidden - was made by
8
+ * `layout/governance-panel.ts`, and the `layout` prop is REQUIRED: `App` builds it once to
9
+ * learn the panel's height (the native band and the TODO rail both budget against it) and
10
+ * hands the very same object here, so the number that decides whether the panel mounts is
11
+ * the number it is drawn from. A panel that re-planned itself could draw a taller tier than
12
+ * the one the band reserved, and the band clips the overflow in silence.
13
+ *
14
+ * IT REPLACES `TeamPanel` WHILE A GOVERNED STAGE RUNS (D-17), it does not stack with it:
15
+ * the repo has been bitten by a "double roster" once (tui-subagent-double-roster), and a
16
+ * governed dispatch is the one case where two live rosters would be the same children
17
+ * listed twice.
18
+ *
19
+ * NO `ink-spinner` HERE, on purpose. While a governed stage runs the lead's turn is
20
+ * running, the activity row owns the one spinner (single-spinner-while-running), and every
21
+ * panel is handed the widened reduced-motion signal anyway - an animation here would never
22
+ * play. The working marker is `statusGlyph(...)`, and `reducedMotion` is the USER's
23
+ * preference: it only decides whether a score change flashes for four seconds or stays put.
24
+ *
25
+ * COLUMNS ARE FIXED-WIDTH BOXES with exactly one elastic cell (`governance-roster.ts`), the
26
+ * lesson `TeamPanel` records at length: a flex-grown column under a fixed-height parent
27
+ * stretches to its widest child and the cells to its right lose their offsets.
28
+ */
29
+ import React from 'react';
30
+ import type { GovernanceSnapshot } from '../model/governance/types.js';
31
+ import type { Theme } from './theme.js';
32
+ import type { TermCapabilities } from './capabilities.js';
33
+ import { type EliminatedSince } from './governance-status.js';
34
+ import type { GovernancePanelLayout } from './layout/governance-panel.js';
35
+ /**
36
+ * The first-seen-eliminated map, kept across snapshots so a replaced member shows its
37
+ * `replaced by ...` note for exactly one phase. Reset when the run changes or ends.
38
+ *
39
+ * A ref written during render is acceptable here because the write is idempotent
40
+ * (`trackEliminated` returns the same object when nothing is new) and no other component
41
+ * reads the ref - `App` reads only the returned value.
42
+ */
43
+ export declare function useEliminatedSince(snapshot: GovernanceSnapshot | null): EliminatedSince;
44
+ export interface GovernancePanelProps {
45
+ /** Built by `buildGovernancePanelLayout`; the SAME object `App` read the height from. */
46
+ layout: GovernancePanelLayout;
47
+ theme: Theme;
48
+ caps: TermCapabilities;
49
+ }
50
+ export declare function GovernancePanel({ layout, theme, caps }: GovernancePanelProps): React.ReactElement | null;
@@ -0,0 +1,77 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * GovernancePanel - the legion panel (governance-mode section 10.3).
4
+ *
5
+ * ASCII ONLY: every glyph comes from `pickGlyphs`, through the layout.
6
+ *
7
+ * THIS COMPONENT ONLY COLOURS AND PLACES. Every decision - which tier, which columns, how
8
+ * wide, what each cell says, which row is hidden - was made by
9
+ * `layout/governance-panel.ts`, and the `layout` prop is REQUIRED: `App` builds it once to
10
+ * learn the panel's height (the native band and the TODO rail both budget against it) and
11
+ * hands the very same object here, so the number that decides whether the panel mounts is
12
+ * the number it is drawn from. A panel that re-planned itself could draw a taller tier than
13
+ * the one the band reserved, and the band clips the overflow in silence.
14
+ *
15
+ * IT REPLACES `TeamPanel` WHILE A GOVERNED STAGE RUNS (D-17), it does not stack with it:
16
+ * the repo has been bitten by a "double roster" once (tui-subagent-double-roster), and a
17
+ * governed dispatch is the one case where two live rosters would be the same children
18
+ * listed twice.
19
+ *
20
+ * NO `ink-spinner` HERE, on purpose. While a governed stage runs the lead's turn is
21
+ * running, the activity row owns the one spinner (single-spinner-while-running), and every
22
+ * panel is handed the widened reduced-motion signal anyway - an animation here would never
23
+ * play. The working marker is `statusGlyph(...)`, and `reducedMotion` is the USER's
24
+ * preference: it only decides whether a score change flashes for four seconds or stays put.
25
+ *
26
+ * COLUMNS ARE FIXED-WIDTH BOXES with exactly one elastic cell (`governance-roster.ts`), the
27
+ * lesson `TeamPanel` records at length: a flex-grown column under a fixed-height parent
28
+ * stretches to its widest child and the cells to its right lose their offsets.
29
+ */
30
+ import { useRef } from 'react';
31
+ import { Box, Text } from 'ink';
32
+ import { pickGlyphs } from './glyphs.js';
33
+ import { trackEliminated } from './governance-status.js';
34
+ import { GovernanceLine } from './GovernanceRun.js';
35
+ import { PANEL_MARGIN_CELLS, } from './layout/governance-roster.js';
36
+ /**
37
+ * The first-seen-eliminated map, kept across snapshots so a replaced member shows its
38
+ * `replaced by ...` note for exactly one phase. Reset when the run changes or ends.
39
+ *
40
+ * A ref written during render is acceptable here because the write is idempotent
41
+ * (`trackEliminated` returns the same object when nothing is new) and no other component
42
+ * reads the ref - `App` reads only the returned value.
43
+ */
44
+ export function useEliminatedSince(snapshot) {
45
+ const ref = useRef({ runId: null, since: {} });
46
+ if (snapshot === null) {
47
+ if (ref.current.runId !== null)
48
+ ref.current = { runId: null, since: {} };
49
+ return ref.current.since;
50
+ }
51
+ const base = ref.current.runId === snapshot.runId ? ref.current.since : {};
52
+ ref.current = { runId: snapshot.runId, since: trackEliminated(base, snapshot) };
53
+ return ref.current.since;
54
+ }
55
+ function Margin() {
56
+ return (_jsx(Box, { width: PANEL_MARGIN_CELLS, flexShrink: 0, children: _jsx(Text, { children: " " }) }));
57
+ }
58
+ function LineView({ line, theme }) {
59
+ return (_jsxs(Box, { flexDirection: "row", width: "100%", height: 1, flexShrink: 0, overflow: "hidden", children: [_jsx(Margin, {}), _jsx(Box, { flexGrow: 1, flexShrink: 1, overflow: "hidden", children: _jsx(GovernanceLine, { segments: line.left, theme: theme }) }), line.rightCells > 0 && (_jsx(Box, { width: line.rightCells, flexShrink: 0, justifyContent: "flex-end", children: _jsx(GovernanceLine, { segments: line.right, theme: theme }) }))] }));
60
+ }
61
+ function CellView({ cell, theme }) {
62
+ const content = _jsx(GovernanceLine, { segments: cell.segments, theme: theme });
63
+ if (cell.elastic) {
64
+ return _jsx(Box, { flexGrow: 1, flexShrink: 1, overflow: "hidden", children: content });
65
+ }
66
+ return (_jsx(Box, { width: cell.width, flexShrink: 0, overflow: "hidden", justifyContent: cell.align === 'right' ? 'flex-end' : 'flex-start', children: content }));
67
+ }
68
+ function RosterView({ line, theme }) {
69
+ return (_jsxs(Box, { flexDirection: "row", width: "100%", height: 1, flexShrink: 0, overflow: "hidden", children: [_jsx(Margin, {}), line.cells.map((cell) => (_jsx(CellView, { cell: cell, theme: theme }, cell.key)))] }));
70
+ }
71
+ export function GovernancePanel({ layout, theme, caps }) {
72
+ if (layout.height === 0 || layout.header === null)
73
+ return null;
74
+ const glyphs = pickGlyphs(caps);
75
+ const rule = layout.ruleCells > 0 ? (_jsxs(Box, { flexDirection: "row", width: "100%", height: 1, flexShrink: 0, overflow: "hidden", children: [_jsx(Margin, {}), _jsx(Text, { wrap: "truncate", color: theme.border, children: glyphs.hrule.repeat(layout.ruleCells) })] })) : null;
76
+ return (_jsxs(Box, { flexDirection: "column", width: "100%", flexShrink: 0, children: [_jsx(LineView, { line: layout.header, theme: theme }), layout.pipeline !== null && _jsx(LineView, { line: layout.pipeline, theme: theme }), rule, layout.rosterRows.map((line) => (_jsx(RosterView, { line: line, theme: theme }, line.key))), layout.overflow !== null && (_jsxs(Box, { flexDirection: "row", width: "100%", height: 1, flexShrink: 0, overflow: "hidden", children: [_jsx(Margin, {}), _jsx(Text, { wrap: "truncate", color: theme.muted, children: layout.overflow })] })), rule, layout.ticker.map((line, index) => (_jsx(LineView, { line: line, theme: theme }, `ticker-${index}`)))] }));
77
+ }
@@ -0,0 +1,18 @@
1
+ /**
2
+ * GovernanceRun - paints one `Segment[]` run: the single place a governance layout's
3
+ * semantic tones become Ink colours.
4
+ *
5
+ * ASCII ONLY. The panel, the card and the board all draw the same `Segment` vocabulary,
6
+ * and three private copies of this loop is how their bold / tone handling drifts apart.
7
+ */
8
+ import React from 'react';
9
+ import type { Theme } from './theme.js';
10
+ import { type Segment } from './governance-status.js';
11
+ export interface GovernanceRunProps {
12
+ segments: readonly Segment[];
13
+ theme: Theme;
14
+ }
15
+ /** The segments as nested `Text`; the CALLER owns wrapping and truncation. */
16
+ export declare function GovernanceRun({ segments, theme }: GovernanceRunProps): React.ReactElement;
17
+ /** One display row: the run inside a `wrap="truncate"` `Text`, so it can never wrap. */
18
+ export declare function GovernanceLine({ segments, theme }: GovernanceRunProps): React.ReactElement;
@@ -0,0 +1,11 @@
1
+ import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { Text } from 'ink';
3
+ import { toneColor } from './governance-status.js';
4
+ /** The segments as nested `Text`; the CALLER owns wrapping and truncation. */
5
+ export function GovernanceRun({ segments, theme }) {
6
+ return (_jsx(_Fragment, { children: segments.map((part, index) => (_jsx(Text, { color: toneColor(part.tone, theme), ...(part.bold ? { bold: true } : {}), children: part.text }, index))) }));
7
+ }
8
+ /** One display row: the run inside a `wrap="truncate"` `Text`, so it can never wrap. */
9
+ export function GovernanceLine({ segments, theme }) {
10
+ return (_jsx(Text, { wrap: "truncate", children: _jsx(GovernanceRun, { segments: segments, theme: theme }) }));
11
+ }
@@ -0,0 +1,48 @@
1
+ /**
2
+ * One-row brand bar: word mark, identity, working directory, task summary and a
3
+ * fixed-width hint column (tui-shortcut-drawer-and-task-summary §4.2 / §4.3).
4
+ *
5
+ * THIS COMPONENT COMPUTES NO WIDTHS ANY MORE. Both halves come from pure
6
+ * planners - `planHeaderHints` for the right column and `planHeaderLeft` for the
7
+ * clause ladder - so the only arithmetic left here is "join what I was given".
8
+ * The old shape carried a `statusExpanded` flag, a kit switch and a prompts
9
+ * switch, all of which existed to choose between header clauses; the clauses are
10
+ * gone (the drawer lists the keys instead), so the props are gone with them.
11
+ */
12
+ import React from 'react';
13
+ import type { Theme } from './theme.js';
14
+ import type { TermCapabilities } from './capabilities.js';
15
+ import { type HeaderVariant } from './Logo.js';
16
+ import { type HeaderPanelState } from './layout/header-hints.js';
17
+ interface HeaderProps {
18
+ cwd: string;
19
+ provider: string;
20
+ model: string;
21
+ hasKey: boolean;
22
+ variant: HeaderVariant;
23
+ theme: Theme;
24
+ caps: TermCapabilities;
25
+ columns?: number;
26
+ /**
27
+ * What the right column says. Derived in ONE place - the line that renders
28
+ * `<Header>` - so the two overlay slots cannot disagree about it.
29
+ */
30
+ panel?: HeaderPanelState;
31
+ scrolledLines?: number;
32
+ /**
33
+ * The session's task label, or `null` while there is none.
34
+ *
35
+ * `null` WHILE PENDING TOO: a placeholder here would spend eight columns of the
36
+ * row to draw an ellipsis and then move everything back when the label lands,
37
+ * so the first submit visibly jogged the header. The label now appears once,
38
+ * complete (P2-10).
39
+ */
40
+ taskSummary?: {
41
+ text: string;
42
+ tone: 'model' | 'fallback';
43
+ } | null;
44
+ /** `config.taskSummary.enabled`; `false` removes the cell without removing the words. */
45
+ summaryEnabled?: boolean;
46
+ }
47
+ export declare function Header({ cwd, provider, model, hasKey, variant, theme, caps, columns, panel, scrolledLines, taskSummary, summaryEnabled, }: HeaderProps): React.ReactElement;
48
+ export {};
@@ -0,0 +1,27 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { basename } from 'node:path';
3
+ import { Box, Text } from 'ink';
4
+ import { Logo } from './Logo.js';
5
+ import { pickGlyphs } from './glyphs.js';
6
+ import { planHeaderHints, HEADER_HINT_LIMITS, } from './layout/header-hints.js';
7
+ import { planHeaderLeft } from './layout/header-left.js';
8
+ export function Header({ cwd, provider, model, hasKey, variant, theme, caps, columns = 80, panel = 'none', scrolledLines = 0, taskSummary = null, summaryEnabled = true, }) {
9
+ const glyphs = pickGlyphs(caps);
10
+ // THE RIGHT COLUMN FIRST: it is the only clause that may never be dropped, so
11
+ // the left half is planned against what is left after it (defect 12).
12
+ const plan = planHeaderHints({ columns, panel, scrolledLines });
13
+ const leftCells = Math.max(0, columns - plan.cells - HEADER_HINT_LIMITS.separatorCells);
14
+ const left = planHeaderLeft({
15
+ leftCells,
16
+ provider,
17
+ model,
18
+ cwd: basename(cwd) || cwd,
19
+ hasKey,
20
+ summary: taskSummary,
21
+ summaryEnabled,
22
+ ellipsis: glyphs.ellipsis,
23
+ });
24
+ return _jsxs(Box, { flexDirection: "row", height: 1, width: columns, flexShrink: 0, overflow: "hidden", children: [_jsx(Box, { width: leftCells, flexShrink: 0, overflow: "hidden", children: _jsxs(Text, { wrap: "truncate", children: [_jsx(Logo, { variant: variant === 'mini' ? 'mini' : 'bar', theme: theme, caps: caps }), variant !== 'mini' && _jsxs(_Fragment, { children: [left.text.model && _jsxs(Text, { color: theme.accent, children: [' ', left.text.model] }), left.text.cwd && _jsxs(Text, { color: theme.muted, children: [' ', left.text.cwd] }), left.text.summary && _jsxs(Text, { color: theme.muted, children: [' ', glyphs.midDot, ' '] }), left.text.summary && (taskSummary?.tone === 'fallback'
25
+ ? _jsx(Text, { color: theme.muted, dimColor: true, children: left.text.summary })
26
+ : _jsx(Text, { color: theme.primary, children: left.text.summary })), _jsxs(Text, { color: hasKey ? theme.toolDone : theme.toolRunning, children: [' ', hasKey ? theme.symbols.keyOn : theme.symbols.keyOff] })] })] }) }), _jsx(Box, { width: HEADER_HINT_LIMITS.separatorCells, flexShrink: 0 }), _jsx(Box, { width: plan.cells, flexShrink: 0, justifyContent: "flex-end", children: _jsx(Text, { color: theme.muted, wrap: "truncate", children: plan.text }) })] });
27
+ }
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Brand wordmark (spec §5.1 / R1). The first row of the frame always starts
3
+ * with a brand glyph, at every terminal size and every capability tier.
4
+ */
5
+ import React from 'react';
6
+ import type { Theme } from './theme.js';
7
+ import type { TermCapabilities } from './capabilities.js';
8
+ /** 6 rows × 52 columns, every row equal width (pinned by logo.test.ts). */
9
+ export declare const LOGO_ART: readonly string[];
10
+ export declare const LOGO_ART_WIDTH = 52;
11
+ export type HeaderVariant = 'bar' | 'mini';
12
+ /** How the one-off opening wordmark renders inside the viewport (§4.2). */
13
+ export type OpenerVariant = 'art' | 'banner' | 'none';
14
+ export declare function pickHeaderVariant(cols: number): HeaderVariant;
15
+ /**
16
+ * Pick the opening wordmark tier.
17
+ *
18
+ * Judged against VIEWPORT rows rather than terminal rows because the wordmark
19
+ * now spends the viewport's budget, not the frame's: the test has to be against
20
+ * the account being charged.
21
+ *
22
+ * Color preferences must not change geometry: a monochrome TUI gets the same
23
+ * wordmark as a colored one when there is room for it.
24
+ */
25
+ export declare function pickOpenerVariant(viewportRows: number, cols: number): OpenerVariant;
26
+ export interface LogoProps {
27
+ /** `art` / `banner` come from `SessionOpener`; `bar` / `mini` from `Header`. */
28
+ variant: HeaderVariant | OpenerVariant;
29
+ theme: Theme;
30
+ caps: TermCapabilities;
31
+ }
32
+ export declare function Logo({ variant, theme, caps }: LogoProps): React.ReactElement | null;
@@ -0,0 +1,65 @@
1
+ import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { Text } from 'ink';
3
+ import { gradientLine } from './gradient.js';
4
+ /** 6 rows × 52 columns, every row equal width (pinned by logo.test.ts). */
5
+ export const LOGO_ART = [
6
+ ' █████╗ ██████╗ █████╗ ██████╗ ██████╗ ███╗ ██╗',
7
+ '██╔══██╗██╔══██╗██╔══██╗██╔════╝ ██╔═══██╗████╗ ██║',
8
+ '███████║██████╔╝███████║██║ ███╗██║ ██║██╔██╗ ██║',
9
+ '██╔══██║██╔══██╗██╔══██║██║ ██║██║ ██║██║╚██╗██║',
10
+ '██║ ██║██║ ██║██║ ██║╚██████╔╝╚██████╔╝██║ ╚████║',
11
+ '╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═══╝',
12
+ ];
13
+ export const LOGO_ART_WIDTH = 52;
14
+ /** Minimum viewport rows / cols each tier needs before it earns its budget. */
15
+ const ART_MIN_VIEWPORT_ROWS = 14;
16
+ /**
17
+ * 4 columns of headroom on purpose: the art renders with `wrap="truncate"`, so
18
+ * at zero headroom anything upstream claiming a single column silently shears
19
+ * the right edge off the `N`. Between `LOGO_ART_WIDTH` and this threshold the
20
+ * opener degrades to `banner`, which is the intended fallback (rename C2).
21
+ */
22
+ const ART_MIN_COLS = LOGO_ART_WIDTH + 4;
23
+ const BANNER_MIN_COLS = 48;
24
+ const BAR_MIN_COLS = 40;
25
+ export function pickHeaderVariant(cols) {
26
+ return cols >= BAR_MIN_COLS ? 'bar' : 'mini';
27
+ }
28
+ /**
29
+ * Pick the opening wordmark tier.
30
+ *
31
+ * Judged against VIEWPORT rows rather than terminal rows because the wordmark
32
+ * now spends the viewport's budget, not the frame's: the test has to be against
33
+ * the account being charged.
34
+ *
35
+ * Color preferences must not change geometry: a monochrome TUI gets the same
36
+ * wordmark as a colored one when there is room for it.
37
+ */
38
+ export function pickOpenerVariant(viewportRows, cols) {
39
+ if (viewportRows >= ART_MIN_VIEWPORT_ROWS &&
40
+ cols >= ART_MIN_COLS) {
41
+ return 'art';
42
+ }
43
+ if (cols >= BANNER_MIN_COLS)
44
+ return 'banner';
45
+ return 'none';
46
+ }
47
+ /** Rotate the gradient stops by one per row so the block reads as a diagonal sheen. */
48
+ function shiftStops(stops, row) {
49
+ if (stops.length === 0)
50
+ return stops;
51
+ const at = row % stops.length;
52
+ return [...stops.slice(at), ...stops.slice(0, at)];
53
+ }
54
+ export function Logo({ variant, theme, caps }) {
55
+ const wordmark = `${theme.symbols.wordmark} AragonAgent`;
56
+ if (variant === 'none')
57
+ return null;
58
+ if (variant === 'art') {
59
+ return (_jsx(_Fragment, { children: LOGO_ART.map((line, i) => (_jsx(Text, { wrap: "truncate", color: theme.gradient.length > 0 ? undefined : theme.logoShadow, children: gradientLine(line, shiftStops(theme.gradient, i), caps.colorLevel) }, i))) }));
60
+ }
61
+ if (variant === 'banner') {
62
+ return (_jsx(Text, { wrap: "truncate", bold: true, color: theme.gradient.length > 0 ? undefined : theme.primary, children: gradientLine(wordmark, theme.gradient, caps.colorLevel) }));
63
+ }
64
+ return (_jsx(Text, { bold: true, color: theme.primary, children: wordmark }));
65
+ }
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Lightweight markdown renderer for Ink (spec §4 / §4.7).
3
+ *
4
+ * Supports: fenced code blocks (syntax-highlighted via cli-highlight, on a left
5
+ * rail with a language tag), six DISTINCT heading weights, horizontal rules,
6
+ * unordered/ordered lists, blockquotes, pipe tables, and inline **bold** /
7
+ * *italic* / `code` / ~~strike~~. Anything else renders as plain text. Still
8
+ * intentionally small — not a CommonMark implementation.
9
+ *
10
+ * The grammar lives in `markdown-blocks.ts`; this file only renders. That was
11
+ * true of the file header long before it was true of the file
12
+ * (tui-render-performance R2): the block grammar used to run here, in the render
13
+ * body, on every frame. Both expensive halves are now memoised on the input
14
+ * string — `parseMarkdownCached` for the AST, `highlightCached` for the ANSI —
15
+ * while theme and glyphs stay render-time, so `/theme` still takes effect
16
+ * immediately (K-5).
17
+ */
18
+ import React from 'react';
19
+ import type { Theme } from './theme.js';
20
+ import type { TermCapabilities } from './capabilities.js';
21
+ interface MarkdownProps {
22
+ text: string;
23
+ theme: Theme;
24
+ caps: TermCapabilities;
25
+ }
26
+ export declare function Markdown({ text, theme, caps }: MarkdownProps): React.ReactElement;
27
+ /** Turn parsed inline spans into Ink `<Text>` nodes. */
28
+ export declare function renderInline(text: string, theme: Theme): React.ReactNode;
29
+ export {};