@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,103 @@
1
+ import { type AgentKit } from './model-kits.js';
2
+ export type ModelRole = 'main' | 'fast';
3
+ export interface ModelProfile {
4
+ id: string;
5
+ name: string;
6
+ provider: string;
7
+ model: string;
8
+ baseUrl: string | null;
9
+ apiKey: string | null;
10
+ /** The context window of this model+endpoint; null = AUTO (profile-context-window 5.1). */
11
+ contextWindow: number | null;
12
+ }
13
+ export interface ModelProfilesConfig {
14
+ version: 1;
15
+ entries: ModelProfile[];
16
+ mainId: string | null;
17
+ fastId: string | null;
18
+ /**
19
+ * Agent model kits (agent-model-kits D-2). OPTIONAL because a file written by
20
+ * a pre-KIT build simply has no such key; `emptyModelProfiles` still fills it
21
+ * in, so every library this build CREATES is explicit.
22
+ */
23
+ kits?: AgentKit[];
24
+ /** The `Set default` pointer (D-13); a dangling value normalizes to null. */
25
+ defaultKitId?: string | null;
26
+ /** Forward migration marker (D-3). Always 1; never a functional decision. */
27
+ kitsVersion?: 1;
28
+ }
29
+ export interface ProfileBindingState {
30
+ selectedId: string | null;
31
+ appliedId: string | null;
32
+ overriddenFields: Array<'provider' | 'model' | 'baseUrl'>;
33
+ invalid: boolean;
34
+ }
35
+ export interface ModelProfilesRuntime {
36
+ main: ProfileBindingState;
37
+ fast: ProfileBindingState;
38
+ }
39
+ export interface ProfileValidationIssue {
40
+ path: string;
41
+ code: 'invalid' | 'duplicate_id' | 'missing_reference' | 'unsupported_version';
42
+ message: string;
43
+ }
44
+ /** Return a fresh empty library without initiating a disk migration. */
45
+ export declare function emptyModelProfiles(): ModelProfilesConfig;
46
+ /** Return independently mutable role state. */
47
+ export declare function emptyModelProfileState(invalid?: boolean): ModelProfilesRuntime;
48
+ /**
49
+ * The endpoint rule published as a predicate (model-profile-connection-test §5 row 10).
50
+ *
51
+ * The probe's `invalid_base_url` guard has to use THE SAME ruler as validation, or a
52
+ * URL the editor accepts can still be refused by the test (and the reverse). A second
53
+ * copy of these four clauses is one edit away from disagreeing with the config layer.
54
+ */
55
+ export declare function isValidEndpointUrl(value: string | null | undefined): boolean;
56
+ /**
57
+ * Validate untrusted input; diagnostics never include supplied values.
58
+ *
59
+ * THE KIT SECTION IS STRUCTURAL ONLY (agent-model-kits RV-P1-1). `mainId` /
60
+ * `fastId` above are `missing_reference` because a dangling ROLE BINDING leaves
61
+ * the whole library unreadable (there is no "nothing bound" recovery path once
62
+ * a bound id is gone), while a dangling KIT SLOT degrades at resolution time
63
+ * into `Profile missing` and a refused apply - the same discipline
64
+ * `team.modelProfileId` already follows (`schema.ts` clampTeamConfig).
65
+ */
66
+ export declare function validateModelProfiles(value: unknown): ProfileValidationIssue[];
67
+ /**
68
+ * Disk-tolerance gate for a profile-level context window (profile-context-window 5.3).
69
+ *
70
+ * THE SAME TRI-STATE DISCIPLINE as store.ts normalizeContextWindow, kept out of
71
+ * store.ts on purpose: this file already imports schema.js and store's sibling
72
+ * model-profile-store.ts already imports this one, so placing it here avoids
73
+ * widening the existing store <-> model-profile-store cycle. A garbage value on
74
+ * a hand-edited file degrades to AUTO; it NEVER invalidates the whole library
75
+ * (invariant 4 - one bad number must not drop the user's credentials).
76
+ */
77
+ export declare function normalizeProfileContextWindow(value: unknown): number | null;
78
+ /**
79
+ * Normalize a valid library into a safe field whitelist; throws a fixed error if invalid.
80
+ *
81
+ * THE THREE KIT KEYS ARE LISTED EXPLICITLY, NEVER `...spread` (R-2): this
82
+ * literal IS the whitelist (F-3), so a key missing from it disappears at the
83
+ * next write - a save that only touched `thinking` would silently delete every
84
+ * kit the user owns. `normalizeKits` is TOTAL, so a hand-edited kit degrades
85
+ * instead of taking the library (and the credentials in it) with it.
86
+ */
87
+ export declare function normalizeModelProfiles(value: unknown): ModelProfilesConfig;
88
+ /** Create an entry with a stable UUID and a frozen default name. */
89
+ export declare function createModelProfile(input: Omit<ModelProfile, 'id'>): ModelProfile;
90
+ /** Duplicate the current draft entry, including its explicitly edited credential. */
91
+ export declare function duplicateModelProfile(entry: ModelProfile): ModelProfile;
92
+ /** Ids of the kits whose three slots name `id`, for the reference message. */
93
+ export declare function kitNamesForProfile(library: ModelProfilesConfig, id: string): string[];
94
+ /**
95
+ * Remove an unused entry; binding references must be changed explicitly first.
96
+ *
97
+ * The message NAMES the kits that would be orphaned (D-9): a throw that only
98
+ * says "still in use" sends the user hunting through three separate screens for
99
+ * the reference it means, and the kits are the reference nobody thinks of.
100
+ * (The UI never reaches this throw - it unbinds, and deletes the kits, inside
101
+ * the draft first - so this is the library-level backstop, F-25.)
102
+ */
103
+ export declare function removeModelProfile(library: ModelProfilesConfig, id: string): ModelProfilesConfig;
@@ -0,0 +1,188 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { ADAPTER_PROVIDERS, clampContextWindow, isAutoToken } from './schema.js';
3
+ import { normalizeKits, validateKits } from './model-kits.js';
4
+ const CONTROL = /[\u0000-\u001f\u007f-\u009f]/;
5
+ /** Return a fresh empty library without initiating a disk migration. */
6
+ export function emptyModelProfiles() {
7
+ return { version: 1, entries: [], mainId: null, fastId: null, kits: [],
8
+ defaultKitId: null, kitsVersion: 1 };
9
+ }
10
+ /** Return independently mutable role state. */
11
+ export function emptyModelProfileState(invalid = false) {
12
+ const binding = () => ({ selectedId: null, appliedId: null,
13
+ overriddenFields: [], invalid });
14
+ return { main: binding(), fast: binding() };
15
+ }
16
+ function isRecord(value) {
17
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
18
+ }
19
+ function validText(value, max, allowEmpty = false) {
20
+ return typeof value === 'string' && !CONTROL.test(value)
21
+ && (allowEmpty || value.trim().length > 0) && [...value.trim()].length <= max;
22
+ }
23
+ function validUrl(value) {
24
+ if (value === null || (typeof value === 'string' && !value.trim()))
25
+ return true;
26
+ if (typeof value !== 'string' || CONTROL.test(value))
27
+ return false;
28
+ try {
29
+ const url = new URL(value.trim());
30
+ return ['http:', 'https:'].includes(url.protocol) && Boolean(url.hostname)
31
+ && !url.username && !url.password && !value.includes('?') && !value.includes('#');
32
+ }
33
+ catch {
34
+ return false;
35
+ }
36
+ }
37
+ /**
38
+ * The endpoint rule published as a predicate (model-profile-connection-test §5 row 10).
39
+ *
40
+ * The probe's `invalid_base_url` guard has to use THE SAME ruler as validation, or a
41
+ * URL the editor accepts can still be refused by the test (and the reverse). A second
42
+ * copy of these four clauses is one edit away from disagreeing with the config layer.
43
+ */
44
+ export function isValidEndpointUrl(value) {
45
+ return validUrl(value);
46
+ }
47
+ function validateEntry(value, index) {
48
+ const path = `modelProfiles.entries[${index}]`;
49
+ const invalid = (field, message) => ({
50
+ path: field ? `${path}.${field}` : path, code: 'invalid', message,
51
+ });
52
+ if (!isRecord(value))
53
+ return [invalid('', 'Profile must be an object.')];
54
+ const issues = [];
55
+ if (!validText(value.id, 128))
56
+ issues.push(invalid('id', 'ID must have 1-128 safe characters.'));
57
+ if (!validText(value.name, 80, true)) {
58
+ issues.push(invalid('name', 'Name must have at most 80 safe characters.'));
59
+ }
60
+ if (!ADAPTER_PROVIDERS.includes(value.provider)) {
61
+ issues.push(invalid('provider', 'Select a supported provider.'));
62
+ }
63
+ if (!validText(value.model, 256)) {
64
+ issues.push(invalid('model', 'Model must have 1-256 safe characters.'));
65
+ }
66
+ if (!validUrl(value.baseUrl)) {
67
+ issues.push(invalid('baseUrl', 'Use an HTTP(S) URL without credentials, query or fragment.'));
68
+ }
69
+ if (value.apiKey !== null && !validText(value.apiKey, 8192)) {
70
+ issues.push(invalid('apiKey', 'Enter a nonempty key up to 8192 safe characters.'));
71
+ }
72
+ return issues;
73
+ }
74
+ /**
75
+ * Validate untrusted input; diagnostics never include supplied values.
76
+ *
77
+ * THE KIT SECTION IS STRUCTURAL ONLY (agent-model-kits RV-P1-1). `mainId` /
78
+ * `fastId` above are `missing_reference` because a dangling ROLE BINDING leaves
79
+ * the whole library unreadable (there is no "nothing bound" recovery path once
80
+ * a bound id is gone), while a dangling KIT SLOT degrades at resolution time
81
+ * into `Profile missing` and a refused apply - the same discipline
82
+ * `team.modelProfileId` already follows (`schema.ts` clampTeamConfig).
83
+ */
84
+ export function validateModelProfiles(value) {
85
+ if (value === undefined)
86
+ return [];
87
+ if (!isRecord(value))
88
+ return [{ path: 'modelProfiles', code: 'invalid',
89
+ message: 'Model profiles must be an object. Repair with aragon config edit.' }];
90
+ if (value.version !== 1)
91
+ return [{ path: 'modelProfiles.version',
92
+ code: 'unsupported_version', message: 'Unsupported model profiles version.' }];
93
+ if (!Array.isArray(value.entries) || value.entries.length > 200) {
94
+ return [{ path: 'modelProfiles.entries', code: 'invalid',
95
+ message: 'Use an array with at most 200 profiles; remove unused profiles to add more.' }];
96
+ }
97
+ const issues = value.entries.flatMap(validateEntry);
98
+ const ids = new Set();
99
+ value.entries.forEach((entry, index) => {
100
+ if (!isRecord(entry) || typeof entry.id !== 'string')
101
+ return;
102
+ if (ids.has(entry.id))
103
+ issues.push({ path: `modelProfiles.entries[${index}].id`,
104
+ code: 'duplicate_id', message: 'Profile IDs must be unique.' });
105
+ ids.add(entry.id);
106
+ });
107
+ for (const field of ['mainId', 'fastId']) {
108
+ if (value[field] !== null && (typeof value[field] !== 'string' || !ids.has(value[field]))) {
109
+ issues.push({ path: `modelProfiles.${field}`, code: 'missing_reference',
110
+ message: 'Select an existing profile or Current custom.' });
111
+ }
112
+ }
113
+ issues.push(...validateKits(value.kits));
114
+ return issues;
115
+ }
116
+ /**
117
+ * Disk-tolerance gate for a profile-level context window (profile-context-window 5.3).
118
+ *
119
+ * THE SAME TRI-STATE DISCIPLINE as store.ts normalizeContextWindow, kept out of
120
+ * store.ts on purpose: this file already imports schema.js and store's sibling
121
+ * model-profile-store.ts already imports this one, so placing it here avoids
122
+ * widening the existing store <-> model-profile-store cycle. A garbage value on
123
+ * a hand-edited file degrades to AUTO; it NEVER invalidates the whole library
124
+ * (invariant 4 - one bad number must not drop the user's credentials).
125
+ */
126
+ export function normalizeProfileContextWindow(value) {
127
+ if (value === undefined || value === null || isAutoToken(value))
128
+ return null;
129
+ return clampContextWindow(value, null);
130
+ }
131
+ /**
132
+ * Normalize a valid library into a safe field whitelist; throws a fixed error if invalid.
133
+ *
134
+ * THE THREE KIT KEYS ARE LISTED EXPLICITLY, NEVER `...spread` (R-2): this
135
+ * literal IS the whitelist (F-3), so a key missing from it disappears at the
136
+ * next write - a save that only touched `thinking` would silently delete every
137
+ * kit the user owns. `normalizeKits` is TOTAL, so a hand-edited kit degrades
138
+ * instead of taking the library (and the credentials in it) with it.
139
+ */
140
+ export function normalizeModelProfiles(value) {
141
+ if (validateModelProfiles(value).length)
142
+ throw new Error('Invalid model profiles.');
143
+ if (value === undefined)
144
+ return emptyModelProfiles();
145
+ const library = value;
146
+ const { kits, defaultKitId, kitsVersion } = normalizeKits(library.kits, library.defaultKitId);
147
+ return { version: 1, mainId: library.mainId, fastId: library.fastId,
148
+ entries: library.entries.map((entry) => ({ id: entry.id, name: entry.name.trim()
149
+ || [...entry.model.trim()].slice(0, 80).join(''), provider: entry.provider,
150
+ model: entry.model.trim(), baseUrl: entry.baseUrl?.trim() || null,
151
+ apiKey: entry.apiKey?.trim() || null,
152
+ contextWindow: normalizeProfileContextWindow(entry.contextWindow) })),
153
+ kits, defaultKitId, kitsVersion };
154
+ }
155
+ /** Create an entry with a stable UUID and a frozen default name. */
156
+ export function createModelProfile(input) {
157
+ const entry = { ...input, id: randomUUID() };
158
+ return normalizeModelProfiles({ ...emptyModelProfiles(), entries: [entry] }).entries[0];
159
+ }
160
+ /** Duplicate the current draft entry, including its explicitly edited credential. */
161
+ export function duplicateModelProfile(entry) {
162
+ return { ...entry, id: randomUUID(), name: `${[...entry.name].slice(0, 73).join('')} (copy)` };
163
+ }
164
+ /** Ids of the kits whose three slots name `id`, for the reference message. */
165
+ export function kitNamesForProfile(library, id) {
166
+ return (library.kits ?? []).filter((kit) => kit.mainProfileId === id
167
+ || kit.fastProfileId === id
168
+ || (kit.subagent.model === 'profile' && kit.subagent.modelProfileId === id))
169
+ .map((kit) => kit.name);
170
+ }
171
+ /**
172
+ * Remove an unused entry; binding references must be changed explicitly first.
173
+ *
174
+ * The message NAMES the kits that would be orphaned (D-9): a throw that only
175
+ * says "still in use" sends the user hunting through three separate screens for
176
+ * the reference it means, and the kits are the reference nobody thinks of.
177
+ * (The UI never reaches this throw - it unbinds, and deletes the kits, inside
178
+ * the draft first - so this is the library-level backstop, F-25.)
179
+ */
180
+ export function removeModelProfile(library, id) {
181
+ if (library.mainId === id || library.fastId === id)
182
+ throw new Error('Profile is still in use.');
183
+ const kits = kitNamesForProfile(library, id);
184
+ if (kits.length) {
185
+ throw new Error(`Profile is used by kit ${kits.map((name) => `"${name}"`).join(', ')}.`);
186
+ }
187
+ return { ...library, entries: library.entries.filter((entry) => entry.id !== id) };
188
+ }
@@ -0,0 +1,71 @@
1
+ /**
2
+ * The model-settings TRANSACTION types, split out of `model-profile-store.ts`
3
+ * (tui-package-split S2).
4
+ *
5
+ * ASCII ONLY - `src/config/**` is inside `glyphs.test.ts::inScope`.
6
+ *
7
+ * TYPES ONLY, NO RUNTIME CODE. The terminal-UI view models (settings screen, model-kit
8
+ * resolution, team fan-out and governance settings) need the SHAPE of a settings patch,
9
+ * a draft and a save result, but the store that owns them also reads and writes the config
10
+ * file. Keeping the shapes here lets those view models live in a package that has no
11
+ * filesystem persistence, while `model-profile-store.ts` re-exports every name so existing
12
+ * importers and tests are untouched. Symbols with I/O semantics (`ConfigReadError`,
13
+ * `ModelSettingsDisk`, `ModelProfileConfigError`) deliberately stay in the store.
14
+ *
15
+ * `SessionKitState` comes from `model-kits`, which in turn imports `ModelSettingsSaveResult`
16
+ * from here: a pure type cycle, which TypeScript permits because it is erased at compile time.
17
+ */
18
+ import type { SessionKitState } from './model-kits.js';
19
+ import type { ModelProfilesConfig, ModelRole, ProfileValidationIssue } from './model-profiles.js';
20
+ import type { CliConfig, CompactionConfig, FastConfig, GovernanceConfig, LogConfig, PersistedConfig, TeamConfig } from './schema.js';
21
+ export interface ModelSettingsPatch extends Partial<Omit<PersistedConfig, 'modelProfiles' | 'fast' | 'compaction' | 'log' | 'team' | 'governance'>> {
22
+ fast?: Partial<FastConfig>;
23
+ compaction?: Partial<CompactionConfig>;
24
+ log?: Partial<LogConfig>;
25
+ /** The subagent-model picker writes here (subagent-model D-5/I-5): draft-only until Save. */
26
+ team?: Partial<TeamConfig>;
27
+ /** Governance writers (`config set`, `/gov budget`) send single keys; the store clamps. */
28
+ governance?: Partial<GovernanceConfig>;
29
+ }
30
+ export interface ModelSettingsDraft {
31
+ profiles?: ModelProfilesConfig;
32
+ patch: ModelSettingsPatch;
33
+ activateRoles: ModelRole[];
34
+ diskRevision: string;
35
+ liveRevision: number;
36
+ baseline: PersistedConfig;
37
+ liveBaseline: CliConfig;
38
+ readError?: string;
39
+ /**
40
+ * The session kit this transaction carries (agent-model-kits RV-P0-2 / §4.3).
41
+ *
42
+ * THREE-STATE, and every state is reachable: `undefined` = "this draft does
43
+ * not speak about kits" (a legacy caller, `/model`, `config set`);
44
+ * an object = "the session kit is still in effect and these slots are still
45
+ * its"; `null` = "this transaction explicitly RELEASES the session kit"
46
+ * (`Current setup`, `/kit use current`, or a save that decided all three
47
+ * slots). `createModelSettingsDraft` seeds it from the LIVE config, without
48
+ * which the object state would be unreachable and any save made from the
49
+ * settings screen would silently release the kit.
50
+ */
51
+ sessionKit?: SessionKitState | null;
52
+ /**
53
+ * Set ONLY by `applySessionKit` (agent-model-kits §4.2 exit B).
54
+ *
55
+ * IT MEANS "THIS DRAFT IS THE KIT BEING APPLIED". The release rule
56
+ * (`releasedSlots`) reads `activateRoles` / `patch.team` / binding changes as
57
+ * "the user decided that slot", and an apply writes all three of those by
58
+ * definition - so without this marker every apply would immediately release the
59
+ * slots it just installed. The marker is per-transaction state, never persisted,
60
+ * and a save from the settings screen never sets it.
61
+ */
62
+ sessionKitFresh?: boolean;
63
+ }
64
+ export interface ModelSettingsSaveResult {
65
+ ok: boolean;
66
+ persisted: boolean;
67
+ status: 'applied' | 'restart_required' | 'rejected' | 'saved_apply_failed';
68
+ code?: 'invalid' | 'busy' | 'conflict' | 'read_failed' | 'write_failed' | 'profile_key_required' | 'legacy_conversion_unsupported' | 'apply_failed';
69
+ issues?: ProfileValidationIssue[];
70
+ restartRequired?: boolean;
71
+ }
@@ -0,0 +1,18 @@
1
+ /**
2
+ * The model-settings TRANSACTION types, split out of `model-profile-store.ts`
3
+ * (tui-package-split S2).
4
+ *
5
+ * ASCII ONLY - `src/config/**` is inside `glyphs.test.ts::inScope`.
6
+ *
7
+ * TYPES ONLY, NO RUNTIME CODE. The terminal-UI view models (settings screen, model-kit
8
+ * resolution, team fan-out and governance settings) need the SHAPE of a settings patch,
9
+ * a draft and a save result, but the store that owns them also reads and writes the config
10
+ * file. Keeping the shapes here lets those view models live in a package that has no
11
+ * filesystem persistence, while `model-profile-store.ts` re-exports every name so existing
12
+ * importers and tests are untouched. Symbols with I/O semantics (`ConfigReadError`,
13
+ * `ModelSettingsDisk`, `ModelProfileConfigError`) deliberately stay in the store.
14
+ *
15
+ * `SessionKitState` comes from `model-kits`, which in turn imports `ModelSettingsSaveResult`
16
+ * from here: a pure type cycle, which TypeScript permits because it is erased at compile time.
17
+ */
18
+ export {};