@aragon-agent/cli 0.6.47 → 0.6.48

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 (775) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/README.md +27 -6
  3. package/dist/agent/coalesce.d.ts +1 -1
  4. package/dist/agent/controller.d.ts +21 -21
  5. package/dist/agent/controller.js +13 -13
  6. package/dist/agent/conversation-reset.d.ts +1 -1
  7. package/dist/agent/governance-wiring.d.ts +6 -6
  8. package/dist/agent/governance-wiring.js +4 -4
  9. package/dist/agent/headless.d.ts +5 -5
  10. package/dist/agent/headless.js +4 -4
  11. package/dist/agent/job-notices.d.ts +1 -1
  12. package/dist/agent/job-notices.js +1 -1
  13. package/dist/agent/kit-apply.d.ts +3 -3
  14. package/dist/agent/kit-apply.js +3 -3
  15. package/dist/agent/model-profile-settings.d.ts +2 -2
  16. package/dist/agent/model-profile-settings.js +6 -6
  17. package/dist/agent/prompt-options.d.ts +1 -1
  18. package/dist/agent/system-prompt.d.ts +1 -1
  19. package/dist/{ui → app}/App.d.ts +9 -9
  20. package/dist/{ui → app}/App.js +79 -79
  21. package/dist/{ui → app}/use-startup-notices.d.ts +1 -1
  22. package/dist/{ui → app}/use-startup-notices.js +2 -2
  23. package/dist/cli.js +29 -29
  24. package/dist/commands/agents-command.js +1 -1
  25. package/dist/commands/builtins.js +9 -9
  26. package/dist/commands/governance-command.js +2 -2
  27. package/dist/commands/governance-runs-table.js +1 -1
  28. package/dist/commands/kit-command.js +1 -1
  29. package/dist/commands/perf.d.ts +3 -3
  30. package/dist/commands/perf.js +1 -1
  31. package/dist/commands/registry.d.ts +8 -8
  32. package/dist/commands/skills.js +2 -2
  33. package/dist/commands/team-command.js +1 -1
  34. package/dist/compaction/archive.d.ts +1 -1
  35. package/dist/compaction/archive.js +1 -1
  36. package/dist/compaction/child.d.ts +3 -3
  37. package/dist/compaction/child.js +4 -4
  38. package/dist/compaction/command.js +5 -5
  39. package/dist/compaction/compactor.d.ts +6 -6
  40. package/dist/compaction/compactor.js +6 -6
  41. package/dist/compaction/context-command.js +1 -1
  42. package/dist/compaction/digest.js +1 -1
  43. package/dist/compaction/memory-input.js +1 -1
  44. package/dist/compaction/memory-validation.js +1 -1
  45. package/dist/compaction/memory.js +1 -1
  46. package/dist/compaction/summarize-call.js +1 -1
  47. package/dist/compaction/summary-prompt.js +1 -1
  48. package/dist/compaction/tail-budget.js +2 -2
  49. package/dist/compaction/wiring.d.ts +5 -5
  50. package/dist/compaction/wiring.js +2 -2
  51. package/dist/config/cli-commands.d.ts +1 -1
  52. package/dist/config/cli-commands.js +3 -3
  53. package/dist/config/env.d.ts +1 -1
  54. package/dist/config/env.js +4 -4
  55. package/dist/config/load.d.ts +2 -2
  56. package/dist/config/load.js +6 -6
  57. package/dist/config/migrate-state-out-of-config.js +1 -1
  58. package/dist/config/model-profile-store.d.ts +4 -54
  59. package/dist/config/model-profile-store.js +3 -3
  60. package/dist/config/prompt-history.js +1 -1
  61. package/dist/config/store.d.ts +2 -2
  62. package/dist/config/store.js +3 -3
  63. package/dist/diagnostics/doctor.js +4 -4
  64. package/dist/exec/bridge/decisions.d.ts +1 -1
  65. package/dist/exec/bridge/human-answers.d.ts +1 -1
  66. package/dist/exec/bridge/human-answers.js +1 -1
  67. package/dist/exec/bridge/protocol.d.ts +1 -1
  68. package/dist/exec/bridge/server.js +1 -1
  69. package/dist/exec/events.d.ts +2 -2
  70. package/dist/exec/index.d.ts +1 -1
  71. package/dist/exec/index.js +1 -1
  72. package/dist/exec/permission.js +1 -1
  73. package/dist/exec/runner.d.ts +3 -3
  74. package/dist/exec/runner.js +2 -2
  75. package/dist/exec/threads/runtime.js +1 -1
  76. package/dist/fast/digest.d.ts +1 -1
  77. package/dist/fast/digest.js +1 -1
  78. package/dist/fast/frames.d.ts +1 -1
  79. package/dist/fast/frames.js +1 -1
  80. package/dist/fast/prompt.d.ts +1 -1
  81. package/dist/fast/prompt.js +1 -1
  82. package/dist/fast/review-call.js +1 -1
  83. package/dist/fast/reviewer.d.ts +3 -3
  84. package/dist/fast/reviewer.js +1 -1
  85. package/dist/fast/summary-call.d.ts +3 -3
  86. package/dist/fast/summary-call.js +2 -2
  87. package/dist/fast/summary-prompt.d.ts +1 -1
  88. package/dist/fast/summary-prompt.js +1 -1
  89. package/dist/fast/wiring.d.ts +4 -4
  90. package/dist/fast/wiring.js +1 -1
  91. package/dist/governance/card-normalize.d.ts +1 -1
  92. package/dist/governance/copy.d.ts +1 -1
  93. package/dist/governance/copy.js +2 -2
  94. package/dist/governance/engine/artifact-persist.d.ts +1 -1
  95. package/dist/governance/engine/budget.d.ts +1 -1
  96. package/dist/governance/engine/budget.js +1 -1
  97. package/dist/governance/engine/cards.d.ts +1 -1
  98. package/dist/governance/engine/digest.js +1 -1
  99. package/dist/governance/engine/engine-core.d.ts +5 -5
  100. package/dist/governance/engine/engine-core.js +1 -1
  101. package/dist/governance/engine/engine.d.ts +1 -1
  102. package/dist/governance/engine/engine.js +1 -1
  103. package/dist/governance/engine/estimate.d.ts +1 -1
  104. package/dist/governance/engine/estimate.js +1 -1
  105. package/dist/governance/engine/inspector.js +2 -2
  106. package/dist/governance/engine/integration.d.ts +1 -1
  107. package/dist/governance/engine/lifecycle.d.ts +1 -1
  108. package/dist/governance/engine/lifecycle.js +1 -1
  109. package/dist/governance/engine/phase-members.d.ts +1 -1
  110. package/dist/governance/engine/phase-planner.d.ts +1 -1
  111. package/dist/governance/engine/phase-planner.js +1 -1
  112. package/dist/governance/engine/rebuild.d.ts +1 -1
  113. package/dist/governance/engine/report.d.ts +1 -1
  114. package/dist/governance/engine/report.js +1 -1
  115. package/dist/governance/engine/run-digest.d.ts +1 -1
  116. package/dist/governance/engine/spec-builder.d.ts +2 -2
  117. package/dist/governance/engine/spec-builder.js +2 -2
  118. package/dist/governance/engine/stage-runner.js +2 -2
  119. package/dist/governance/engine/start-input.d.ts +1 -1
  120. package/dist/governance/engine/start-input.js +1 -1
  121. package/dist/governance/engine/state-machine.d.ts +1 -1
  122. package/dist/governance/engine/state-machine.js +3 -3
  123. package/dist/governance/engine/submission-queries.d.ts +1 -1
  124. package/dist/governance/engine/submission-render.d.ts +1 -1
  125. package/dist/governance/engine/submissions.d.ts +1 -1
  126. package/dist/governance/engine/submissions.js +1 -1
  127. package/dist/governance/engine/visibility.d.ts +1 -1
  128. package/dist/governance/engine/visibility.js +1 -1
  129. package/dist/governance/posture-transition.d.ts +2 -2
  130. package/dist/governance/posture-transition.js +1 -1
  131. package/dist/governance/profiles.d.ts +1 -1
  132. package/dist/governance/prompts/orchestrator-block.d.ts +2 -2
  133. package/dist/governance/prompts/orchestrator-block.js +2 -2
  134. package/dist/governance/prompts/plan-addendum.d.ts +1 -1
  135. package/dist/governance/prompts/plan-addendum.js +1 -1
  136. package/dist/governance/prompts/role-blocks.d.ts +2 -2
  137. package/dist/governance/prompts/role-blocks.js +1 -1
  138. package/dist/governance/report-reader.js +1 -1
  139. package/dist/governance/roles.d.ts +1 -1
  140. package/dist/governance/rules/claims.d.ts +1 -1
  141. package/dist/governance/rules/claims.js +1 -1
  142. package/dist/governance/rules/elimination.d.ts +1 -1
  143. package/dist/governance/rules/elimination.js +1 -1
  144. package/dist/governance/rules/failure-analysis.d.ts +2 -2
  145. package/dist/governance/rules/failure-analysis.js +1 -1
  146. package/dist/governance/rules/ledger-replay.d.ts +1 -1
  147. package/dist/governance/rules/ledger-state.d.ts +1 -1
  148. package/dist/governance/rules/ledger-state.js +1 -1
  149. package/dist/governance/rules/ledger.d.ts +2 -2
  150. package/dist/governance/rules/ledger.js +2 -2
  151. package/dist/governance/rules/rca.d.ts +1 -1
  152. package/dist/governance/rules/rca.js +1 -1
  153. package/dist/governance/rules/settlement.d.ts +2 -2
  154. package/dist/governance/rules/settlement.js +2 -2
  155. package/dist/governance/rules/suspicion.d.ts +1 -1
  156. package/dist/governance/store/artifacts.d.ts +1 -1
  157. package/dist/governance/store/artifacts.js +1 -1
  158. package/dist/governance/store/events-log.d.ts +1 -1
  159. package/dist/governance/store/run-store.d.ts +1 -1
  160. package/dist/governance/store/run-store.js +1 -1
  161. package/dist/governance/store/scoreboard-export.d.ts +1 -1
  162. package/dist/governance/tools/child-tools.d.ts +1 -1
  163. package/dist/governance/tools/guard.d.ts +1 -1
  164. package/dist/governance/tools/guard.js +1 -1
  165. package/dist/governance/tools/inspector-tools.d.ts +2 -2
  166. package/dist/governance/tools/inspector-tools.js +2 -2
  167. package/dist/governance/tools/lead-tools.d.ts +1 -1
  168. package/dist/governance/tools/lead-tools.js +1 -1
  169. package/dist/governance/tools/normalize-util.js +1 -1
  170. package/dist/governance/tools/scan-incomplete.js +1 -1
  171. package/dist/governance/tools/shared-tools.d.ts +1 -1
  172. package/dist/governance/tools/shared-tools.js +1 -1
  173. package/dist/governance/tools/submit-normalizers.d.ts +1 -1
  174. package/dist/governance/tools/submit-normalizers.js +1 -1
  175. package/dist/governance/tools/submit-tools.d.ts +1 -1
  176. package/dist/logging/cli-commands.js +1 -1
  177. package/dist/logging/install.d.ts +1 -1
  178. package/dist/logging/install.js +3 -3
  179. package/dist/logging/logger.d.ts +2 -2
  180. package/dist/logging/logger.js +31 -2
  181. package/dist/proc/kill-tree.js +1 -1
  182. package/dist/proc/log-mirror.js +1 -1
  183. package/dist/proc/log-ring.js +2 -2
  184. package/dist/proc/notices.d.ts +1 -1
  185. package/dist/proc/notices.js +2 -2
  186. package/dist/proc/prompt.d.ts +1 -1
  187. package/dist/proc/prompt.js +1 -1
  188. package/dist/proc/readiness.js +1 -1
  189. package/dist/proc/supervisor.d.ts +1 -1
  190. package/dist/proc/supervisor.js +3 -3
  191. package/dist/proc/wait.d.ts +1 -1
  192. package/dist/proc/wait.js +1 -1
  193. package/dist/prompts/command.d.ts +1 -1
  194. package/dist/prompts/command.js +1 -1
  195. package/dist/prompts/normalize.d.ts +1 -1
  196. package/dist/prompts/normalize.js +1 -1
  197. package/dist/prompts/resolve.d.ts +1 -1
  198. package/dist/prompts/store.d.ts +2 -12
  199. package/dist/prompts/store.js +6 -60
  200. package/dist/session/checkpoint.d.ts +2 -2
  201. package/dist/session/clear-archive.d.ts +2 -2
  202. package/dist/session/persist.d.ts +2 -2
  203. package/dist/session/persist.js +1 -1
  204. package/dist/session/startup-session.d.ts +2 -2
  205. package/dist/session/validate-session.js +3 -3
  206. package/dist/skills/service.d.ts +2 -2
  207. package/dist/team/bus.d.ts +1 -1
  208. package/dist/team/bus.js +1 -1
  209. package/dist/team/child-reviewer.d.ts +2 -2
  210. package/dist/team/child-reviewer.js +1 -1
  211. package/dist/team/comm-tools.js +1 -1
  212. package/dist/team/dispatch-gate.js +1 -1
  213. package/dist/team/forced-dispatch.js +1 -1
  214. package/dist/team/forced-mode.d.ts +1 -1
  215. package/dist/team/forced-prompt.d.ts +1 -1
  216. package/dist/team/forced-prompt.js +1 -1
  217. package/dist/team/normalize.d.ts +1 -1
  218. package/dist/team/normalize.js +1 -1
  219. package/dist/team/overseer.d.ts +3 -3
  220. package/dist/team/overseer.js +3 -3
  221. package/dist/team/prompt.d.ts +1 -1
  222. package/dist/team/prompt.js +1 -1
  223. package/dist/team/report.d.ts +2 -2
  224. package/dist/team/report.js +2 -2
  225. package/dist/team/retry.d.ts +1 -1
  226. package/dist/team/retry.js +1 -1
  227. package/dist/team/runtime.d.ts +4 -4
  228. package/dist/team/runtime.js +2 -2
  229. package/dist/team/settled.d.ts +2 -2
  230. package/dist/team/subagent.d.ts +4 -4
  231. package/dist/team/subagent.js +5 -5
  232. package/dist/team/task-tool.d.ts +1 -1
  233. package/dist/team/task-tool.js +1 -1
  234. package/dist/todo/normalize.d.ts +1 -1
  235. package/dist/todo/normalize.js +1 -1
  236. package/dist/todo/prompt.d.ts +1 -1
  237. package/dist/todo/prompt.js +1 -1
  238. package/dist/todo/store.d.ts +1 -1
  239. package/dist/todo/store.js +2 -2
  240. package/dist/todo/todo-tool.d.ts +1 -1
  241. package/dist/todo/todo-tool.js +2 -2
  242. package/dist/tools/bash-tool.d.ts +1 -1
  243. package/dist/tools/bash-tool.js +2 -2
  244. package/dist/tools/diff.d.ts +1 -1
  245. package/dist/tools/diff.js +1 -1
  246. package/dist/tools/file-change-store.d.ts +1 -1
  247. package/dist/tools/fs-tools.d.ts +2 -2
  248. package/dist/tools/fs-tools.js +1 -1
  249. package/dist/tools/index.d.ts +3 -3
  250. package/dist/tools/index.js +1 -1
  251. package/dist/tools/job-tools.d.ts +2 -2
  252. package/dist/tools/job-tools.js +4 -4
  253. package/dist/tools/plan-tools.d.ts +1 -1
  254. package/dist/tools/plan-tools.js +1 -1
  255. package/dist/tools/proc-tools.d.ts +1 -1
  256. package/dist/tools/proc-tools.js +2 -2
  257. package/dist/update/classify-failure.d.ts +1 -1
  258. package/dist/update/install-lock.js +1 -1
  259. package/dist/update/install-source.d.ts +1 -1
  260. package/dist/update/installer.js +2 -2
  261. package/dist/update/npm-view.d.ts +1 -1
  262. package/dist/update/npm-view.js +1 -1
  263. package/dist/update/registry.d.ts +1 -1
  264. package/dist/update/registry.js +1 -1
  265. package/dist/update/service.d.ts +2 -2
  266. package/dist/update/service.js +2 -2
  267. package/package.json +7 -7
  268. package/dist/agent/agent-mode.d.ts +0 -108
  269. package/dist/agent/agent-mode.js +0 -121
  270. package/dist/agent/entry-limits.d.ts +0 -65
  271. package/dist/agent/entry-limits.js +0 -133
  272. package/dist/agent/governance-view.d.ts +0 -40
  273. package/dist/agent/governance-view.js +0 -40
  274. package/dist/agent/invocation-card.d.ts +0 -77
  275. package/dist/agent/invocation-card.js +0 -169
  276. package/dist/agent/model-probe-limits.d.ts +0 -39
  277. package/dist/agent/model-probe-limits.js +0 -25
  278. package/dist/agent/model-probe.d.ts +0 -104
  279. package/dist/agent/model-probe.js +0 -391
  280. package/dist/agent/queued-messages.d.ts +0 -23
  281. package/dist/agent/queued-messages.js +0 -49
  282. package/dist/agent/reducer.d.ts +0 -857
  283. package/dist/agent/reducer.js +0 -1646
  284. package/dist/agent/retry-view.d.ts +0 -68
  285. package/dist/agent/retry-view.js +0 -95
  286. package/dist/agent/usage.d.ts +0 -47
  287. package/dist/agent/usage.js +0 -84
  288. package/dist/compaction/limits.d.ts +0 -61
  289. package/dist/compaction/limits.js +0 -64
  290. package/dist/compaction/meter.d.ts +0 -276
  291. package/dist/compaction/meter.js +0 -512
  292. package/dist/compaction/pressure.d.ts +0 -163
  293. package/dist/compaction/pressure.js +0 -199
  294. package/dist/compaction/reason-text.d.ts +0 -36
  295. package/dist/compaction/reason-text.js +0 -78
  296. package/dist/compaction/types.d.ts +0 -360
  297. package/dist/compaction/types.js +0 -22
  298. package/dist/config/governance-config.d.ts +0 -125
  299. package/dist/config/governance-config.js +0 -164
  300. package/dist/config/kit-resolution.d.ts +0 -93
  301. package/dist/config/kit-resolution.js +0 -226
  302. package/dist/config/model-kits.d.ts +0 -225
  303. package/dist/config/model-kits.js +0 -302
  304. package/dist/config/model-profile-resolution.d.ts +0 -28
  305. package/dist/config/model-profile-resolution.js +0 -88
  306. package/dist/config/model-profiles.d.ts +0 -103
  307. package/dist/config/model-profiles.js +0 -188
  308. package/dist/config/schema.d.ts +0 -1645
  309. package/dist/config/schema.js +0 -1383
  310. package/dist/fast/limits.d.ts +0 -152
  311. package/dist/fast/limits.js +0 -152
  312. package/dist/fast/resolve.d.ts +0 -44
  313. package/dist/fast/resolve.js +0 -107
  314. package/dist/fast/task-summary-types.d.ts +0 -66
  315. package/dist/fast/task-summary-types.js +0 -17
  316. package/dist/fast/types.d.ts +0 -141
  317. package/dist/fast/types.js +0 -14
  318. package/dist/governance/governed-dispatch.d.ts +0 -19
  319. package/dist/governance/governed-dispatch.js +0 -17
  320. package/dist/governance/limits.d.ts +0 -107
  321. package/dist/governance/limits.js +0 -131
  322. package/dist/governance/posture.d.ts +0 -35
  323. package/dist/governance/posture.js +0 -59
  324. package/dist/governance/rules/events-table.d.ts +0 -46
  325. package/dist/governance/rules/events-table.js +0 -94
  326. package/dist/governance/types.d.ts +0 -661
  327. package/dist/governance/types.js +0 -27
  328. package/dist/input/control-sequences.d.ts +0 -71
  329. package/dist/input/control-sequences.js +0 -222
  330. package/dist/input/csiu-keys.d.ts +0 -66
  331. package/dist/input/csiu-keys.js +0 -181
  332. package/dist/input/cursor-report.d.ts +0 -61
  333. package/dist/input/cursor-report.js +0 -97
  334. package/dist/input/enter-sequences.d.ts +0 -64
  335. package/dist/input/enter-sequences.js +0 -153
  336. package/dist/input/interrupt-gesture.d.ts +0 -18
  337. package/dist/input/interrupt-gesture.js +0 -19
  338. package/dist/input/keyboard-enhancement.d.ts +0 -42
  339. package/dist/input/keyboard-enhancement.js +0 -65
  340. package/dist/input/keymap.d.ts +0 -20
  341. package/dist/input/keymap.js +0 -99
  342. package/dist/input/limits.d.ts +0 -118
  343. package/dist/input/limits.js +0 -109
  344. package/dist/input/mouse-events.d.ts +0 -87
  345. package/dist/input/mouse-events.js +0 -212
  346. package/dist/input/paste-parse.d.ts +0 -83
  347. package/dist/input/paste-parse.js +0 -107
  348. package/dist/input/pointer-router.d.ts +0 -11
  349. package/dist/input/pointer-router.js +0 -14
  350. package/dist/input/stdin-filter.d.ts +0 -112
  351. package/dist/input/stdin-filter.js +0 -657
  352. package/dist/input/win32-input-mode.d.ts +0 -61
  353. package/dist/input/win32-input-mode.js +0 -269
  354. package/dist/logging/levels.d.ts +0 -40
  355. package/dist/logging/levels.js +0 -59
  356. package/dist/logging/secret-registry.d.ts +0 -32
  357. package/dist/logging/secret-registry.js +0 -73
  358. package/dist/proc/limits.d.ts +0 -214
  359. package/dist/proc/limits.js +0 -221
  360. package/dist/proc/progress.d.ts +0 -47
  361. package/dist/proc/progress.js +0 -163
  362. package/dist/proc/types.d.ts +0 -269
  363. package/dist/proc/types.js +0 -15
  364. package/dist/proc/wait-view.d.ts +0 -65
  365. package/dist/proc/wait-view.js +0 -66
  366. package/dist/prompts/copy.d.ts +0 -89
  367. package/dist/prompts/copy.js +0 -131
  368. package/dist/prompts/fill.d.ts +0 -51
  369. package/dist/prompts/fill.js +0 -46
  370. package/dist/prompts/limits.d.ts +0 -53
  371. package/dist/prompts/limits.js +0 -53
  372. package/dist/prompts/search.d.ts +0 -58
  373. package/dist/prompts/search.js +0 -146
  374. package/dist/prompts/types.d.ts +0 -204
  375. package/dist/prompts/types.js +0 -13
  376. package/dist/team/activity.d.ts +0 -67
  377. package/dist/team/activity.js +0 -130
  378. package/dist/team/limits.d.ts +0 -308
  379. package/dist/team/limits.js +0 -330
  380. package/dist/team/model.d.ts +0 -104
  381. package/dist/team/model.js +0 -150
  382. package/dist/team/panel-rows.d.ts +0 -48
  383. package/dist/team/panel-rows.js +0 -75
  384. package/dist/team/timeline.d.ts +0 -74
  385. package/dist/team/timeline.js +0 -101
  386. package/dist/team/types.d.ts +0 -354
  387. package/dist/team/types.js +0 -13
  388. package/dist/todo/acceptance.d.ts +0 -120
  389. package/dist/todo/acceptance.js +0 -399
  390. package/dist/todo/follow-through.d.ts +0 -138
  391. package/dist/todo/follow-through.js +0 -248
  392. package/dist/todo/limits.d.ts +0 -152
  393. package/dist/todo/limits.js +0 -152
  394. package/dist/todo/panel-rows.d.ts +0 -45
  395. package/dist/todo/panel-rows.js +0 -70
  396. package/dist/todo/plan-sections.d.ts +0 -60
  397. package/dist/todo/plan-sections.js +0 -108
  398. package/dist/todo/row-window.d.ts +0 -51
  399. package/dist/todo/row-window.js +0 -107
  400. package/dist/todo/types.d.ts +0 -124
  401. package/dist/todo/types.js +0 -12
  402. package/dist/tools/human-input.d.ts +0 -212
  403. package/dist/tools/human-input.js +0 -265
  404. package/dist/tools/patch.d.ts +0 -115
  405. package/dist/tools/patch.js +0 -453
  406. package/dist/tools/terminal-output.d.ts +0 -115
  407. package/dist/tools/terminal-output.js +0 -201
  408. package/dist/tools/tool-output-store.d.ts +0 -68
  409. package/dist/tools/tool-output-store.js +0 -102
  410. package/dist/ui/ActivityLine.d.ts +0 -26
  411. package/dist/ui/ActivityLine.js +0 -51
  412. package/dist/ui/AutocompletePopup.d.ts +0 -23
  413. package/dist/ui/AutocompletePopup.js +0 -17
  414. package/dist/ui/BottomStatusRow.d.ts +0 -10
  415. package/dist/ui/BottomStatusRow.js +0 -9
  416. package/dist/ui/Composer.d.ts +0 -115
  417. package/dist/ui/Composer.js +0 -64
  418. package/dist/ui/GovernancePanel.d.ts +0 -50
  419. package/dist/ui/GovernancePanel.js +0 -77
  420. package/dist/ui/GovernanceRun.d.ts +0 -18
  421. package/dist/ui/GovernanceRun.js +0 -11
  422. package/dist/ui/Header.d.ts +0 -48
  423. package/dist/ui/Header.js +0 -27
  424. package/dist/ui/Logo.d.ts +0 -32
  425. package/dist/ui/Logo.js +0 -65
  426. package/dist/ui/Markdown.d.ts +0 -29
  427. package/dist/ui/Markdown.js +0 -116
  428. package/dist/ui/PromptCaret.d.ts +0 -11
  429. package/dist/ui/PromptCaret.js +0 -31
  430. package/dist/ui/PromptInput.d.ts +0 -192
  431. package/dist/ui/PromptInput.js +0 -689
  432. package/dist/ui/QueuePanel.d.ts +0 -8
  433. package/dist/ui/QueuePanel.js +0 -9
  434. package/dist/ui/QueueStatusRow.d.ts +0 -24
  435. package/dist/ui/QueueStatusRow.js +0 -51
  436. package/dist/ui/ScrollbackShell.d.ts +0 -132
  437. package/dist/ui/ScrollbackShell.js +0 -26
  438. package/dist/ui/SessionOpener.d.ts +0 -30
  439. package/dist/ui/SessionOpener.js +0 -12
  440. package/dist/ui/StatusBar.d.ts +0 -130
  441. package/dist/ui/StatusBar.js +0 -61
  442. package/dist/ui/TeamPanel.d.ts +0 -76
  443. package/dist/ui/TeamPanel.js +0 -103
  444. package/dist/ui/ToastStack.d.ts +0 -8
  445. package/dist/ui/ToastStack.js +0 -31
  446. package/dist/ui/TodoPanel.d.ts +0 -52
  447. package/dist/ui/TodoPanel.js +0 -214
  448. package/dist/ui/Transcript.d.ts +0 -105
  449. package/dist/ui/Transcript.js +0 -258
  450. package/dist/ui/UpdateLine.d.ts +0 -44
  451. package/dist/ui/UpdateLine.js +0 -129
  452. package/dist/ui/activity-phrases.d.ts +0 -33
  453. package/dist/ui/activity-phrases.js +0 -50
  454. package/dist/ui/capabilities.d.ts +0 -27
  455. package/dist/ui/capabilities.js +0 -65
  456. package/dist/ui/clipboard-task.d.ts +0 -29
  457. package/dist/ui/clipboard-task.js +0 -66
  458. package/dist/ui/clipboard.d.ts +0 -31
  459. package/dist/ui/clipboard.js +0 -157
  460. package/dist/ui/color-runtime.d.ts +0 -5
  461. package/dist/ui/color-runtime.js +0 -29
  462. package/dist/ui/composer-input.d.ts +0 -38
  463. package/dist/ui/composer-input.js +0 -79
  464. package/dist/ui/composer-limits.d.ts +0 -30
  465. package/dist/ui/composer-limits.js +0 -45
  466. package/dist/ui/composer-rows.d.ts +0 -73
  467. package/dist/ui/composer-rows.js +0 -129
  468. package/dist/ui/console-bridge.d.ts +0 -19
  469. package/dist/ui/console-bridge.js +0 -52
  470. package/dist/ui/density.d.ts +0 -26
  471. package/dist/ui/density.js +0 -34
  472. package/dist/ui/display-tab.d.ts +0 -51
  473. package/dist/ui/display-tab.js +0 -82
  474. package/dist/ui/editor-navigation.d.ts +0 -55
  475. package/dist/ui/editor-navigation.js +0 -96
  476. package/dist/ui/editor-reducer.d.ts +0 -108
  477. package/dist/ui/editor-reducer.js +0 -187
  478. package/dist/ui/enter-frames.d.ts +0 -47
  479. package/dist/ui/enter-frames.js +0 -117
  480. package/dist/ui/entries/AssistantEntry.d.ts +0 -37
  481. package/dist/ui/entries/AssistantEntry.js +0 -43
  482. package/dist/ui/entries/CompactionCard.d.ts +0 -88
  483. package/dist/ui/entries/CompactionCard.js +0 -222
  484. package/dist/ui/entries/DiffView.d.ts +0 -61
  485. package/dist/ui/entries/DiffView.js +0 -103
  486. package/dist/ui/entries/EntryFrame.d.ts +0 -23
  487. package/dist/ui/entries/EntryFrame.js +0 -6
  488. package/dist/ui/entries/FastCard.d.ts +0 -53
  489. package/dist/ui/entries/FastCard.js +0 -105
  490. package/dist/ui/entries/GovernanceCard.d.ts +0 -30
  491. package/dist/ui/entries/GovernanceCard.js +0 -32
  492. package/dist/ui/entries/InvocationCard.d.ts +0 -20
  493. package/dist/ui/entries/InvocationCard.js +0 -32
  494. package/dist/ui/entries/QueuedEntry.d.ts +0 -27
  495. package/dist/ui/entries/QueuedEntry.js +0 -33
  496. package/dist/ui/entries/RetryCard.d.ts +0 -56
  497. package/dist/ui/entries/RetryCard.js +0 -60
  498. package/dist/ui/entries/ServiceCard.d.ts +0 -82
  499. package/dist/ui/entries/ServiceCard.js +0 -151
  500. package/dist/ui/entries/TeamCard.d.ts +0 -55
  501. package/dist/ui/entries/TeamCard.js +0 -94
  502. package/dist/ui/entries/TodoCard.d.ts +0 -54
  503. package/dist/ui/entries/TodoCard.js +0 -98
  504. package/dist/ui/entries/ToolCard.d.ts +0 -81
  505. package/dist/ui/entries/ToolCard.js +0 -169
  506. package/dist/ui/entries/ToolPreview.d.ts +0 -59
  507. package/dist/ui/entries/ToolPreview.js +0 -208
  508. package/dist/ui/entries/UserEntry.d.ts +0 -36
  509. package/dist/ui/entries/UserEntry.js +0 -57
  510. package/dist/ui/entries/WaitCard.d.ts +0 -37
  511. package/dist/ui/entries/WaitCard.js +0 -92
  512. package/dist/ui/exit-snapshot.d.ts +0 -43
  513. package/dist/ui/exit-snapshot.js +0 -26
  514. package/dist/ui/frame-differ.d.ts +0 -166
  515. package/dist/ui/frame-differ.js +0 -354
  516. package/dist/ui/frame-observer.d.ts +0 -17
  517. package/dist/ui/frame-observer.js +0 -94
  518. package/dist/ui/frame-parser.d.ts +0 -7
  519. package/dist/ui/frame-parser.js +0 -18
  520. package/dist/ui/gauge.d.ts +0 -39
  521. package/dist/ui/gauge.js +0 -55
  522. package/dist/ui/glyphs.d.ts +0 -178
  523. package/dist/ui/glyphs.js +0 -165
  524. package/dist/ui/governance-copy.d.ts +0 -69
  525. package/dist/ui/governance-copy.js +0 -104
  526. package/dist/ui/governance-status.d.ts +0 -145
  527. package/dist/ui/governance-status.js +0 -326
  528. package/dist/ui/gradient.d.ts +0 -11
  529. package/dist/ui/gradient.js +0 -50
  530. package/dist/ui/ink-runtime.d.ts +0 -4
  531. package/dist/ui/ink-runtime.js +0 -51
  532. package/dist/ui/interaction-copy.d.ts +0 -84
  533. package/dist/ui/interaction-copy.js +0 -41
  534. package/dist/ui/interaction-hints.d.ts +0 -44
  535. package/dist/ui/interaction-hints.js +0 -97
  536. package/dist/ui/layout/AppShell.d.ts +0 -17
  537. package/dist/ui/layout/AppShell.js +0 -6
  538. package/dist/ui/layout/Gutter.d.ts +0 -67
  539. package/dist/ui/layout/Gutter.js +0 -42
  540. package/dist/ui/layout/MeasuredEntry.d.ts +0 -21
  541. package/dist/ui/layout/MeasuredEntry.js +0 -30
  542. package/dist/ui/layout/OverlayFrame.d.ts +0 -73
  543. package/dist/ui/layout/OverlayFrame.js +0 -110
  544. package/dist/ui/layout/ScrollIndicator.d.ts +0 -32
  545. package/dist/ui/layout/ScrollIndicator.js +0 -22
  546. package/dist/ui/layout/ScrollViewport.d.ts +0 -40
  547. package/dist/ui/layout/ScrollViewport.js +0 -222
  548. package/dist/ui/layout/agents-board.d.ts +0 -102
  549. package/dist/ui/layout/agents-board.js +0 -389
  550. package/dist/ui/layout/autocomplete.d.ts +0 -18
  551. package/dist/ui/layout/autocomplete.js +0 -26
  552. package/dist/ui/layout/budget.d.ts +0 -43
  553. package/dist/ui/layout/budget.js +0 -52
  554. package/dist/ui/layout/cells.d.ts +0 -61
  555. package/dist/ui/layout/cells.js +0 -156
  556. package/dist/ui/layout/document-layout.d.ts +0 -13
  557. package/dist/ui/layout/document-layout.js +0 -10
  558. package/dist/ui/layout/follow-state.d.ts +0 -138
  559. package/dist/ui/layout/follow-state.js +0 -148
  560. package/dist/ui/layout/frame.d.ts +0 -36
  561. package/dist/ui/layout/frame.js +0 -39
  562. package/dist/ui/layout/governance-board.d.ts +0 -121
  563. package/dist/ui/layout/governance-board.js +0 -382
  564. package/dist/ui/layout/governance-card.d.ts +0 -53
  565. package/dist/ui/layout/governance-card.js +0 -134
  566. package/dist/ui/layout/governance-chip.d.ts +0 -38
  567. package/dist/ui/layout/governance-chip.js +0 -64
  568. package/dist/ui/layout/governance-panel.d.ts +0 -85
  569. package/dist/ui/layout/governance-panel.js +0 -358
  570. package/dist/ui/layout/governance-roster.d.ts +0 -65
  571. package/dist/ui/layout/governance-roster.js +0 -275
  572. package/dist/ui/layout/header-hints.d.ts +0 -90
  573. package/dist/ui/layout/header-hints.js +0 -110
  574. package/dist/ui/layout/header-left.d.ts +0 -115
  575. package/dist/ui/layout/header-left.js +0 -206
  576. package/dist/ui/layout/invocation-card.d.ts +0 -41
  577. package/dist/ui/layout/invocation-card.js +0 -91
  578. package/dist/ui/layout/kit-chip.d.ts +0 -50
  579. package/dist/ui/layout/kit-chip.js +0 -81
  580. package/dist/ui/layout/overlay-window.d.ts +0 -43
  581. package/dist/ui/layout/overlay-window.js +0 -51
  582. package/dist/ui/layout/queue-layout.d.ts +0 -19
  583. package/dist/ui/layout/queue-layout.js +0 -26
  584. package/dist/ui/layout/rail.d.ts +0 -7
  585. package/dist/ui/layout/rail.js +0 -16
  586. package/dist/ui/layout/scroll-indicator.d.ts +0 -27
  587. package/dist/ui/layout/scroll-indicator.js +0 -36
  588. package/dist/ui/layout/scroll.d.ts +0 -37
  589. package/dist/ui/layout/scroll.js +0 -99
  590. package/dist/ui/layout/scrollbar-geometry.d.ts +0 -17
  591. package/dist/ui/layout/scrollbar-geometry.js +0 -13
  592. package/dist/ui/layout/session-chip.d.ts +0 -52
  593. package/dist/ui/layout/session-chip.js +0 -64
  594. package/dist/ui/layout/shortcut-panel-layout.d.ts +0 -191
  595. package/dist/ui/layout/shortcut-panel-layout.js +0 -321
  596. package/dist/ui/layout/status-detail-layout.d.ts +0 -9
  597. package/dist/ui/layout/status-detail-layout.js +0 -79
  598. package/dist/ui/layout/status-layout.d.ts +0 -140
  599. package/dist/ui/layout/status-layout.js +0 -262
  600. package/dist/ui/layout/task-summary-cell.d.ts +0 -61
  601. package/dist/ui/layout/task-summary-cell.js +0 -65
  602. package/dist/ui/layout/team-panel.d.ts +0 -18
  603. package/dist/ui/layout/team-panel.js +0 -25
  604. package/dist/ui/layout/team-row.d.ts +0 -139
  605. package/dist/ui/layout/team-row.js +0 -246
  606. package/dist/ui/layout/todo-layout.d.ts +0 -62
  607. package/dist/ui/layout/todo-layout.js +0 -102
  608. package/dist/ui/layout/useTerminalSize.d.ts +0 -13
  609. package/dist/ui/layout/useTerminalSize.js +0 -50
  610. package/dist/ui/layout/viewport-geometry.d.ts +0 -29
  611. package/dist/ui/layout/viewport-geometry.js +0 -28
  612. package/dist/ui/layout/virtual-window.d.ts +0 -112
  613. package/dist/ui/layout/virtual-window.js +0 -494
  614. package/dist/ui/layout/wait-bar.d.ts +0 -34
  615. package/dist/ui/layout/wait-bar.js +0 -48
  616. package/dist/ui/layout/wrap-rows.d.ts +0 -26
  617. package/dist/ui/layout/wrap-rows.js +0 -88
  618. package/dist/ui/live-clamp.d.ts +0 -14
  619. package/dist/ui/live-clamp.js +0 -46
  620. package/dist/ui/markdown-blocks.d.ts +0 -107
  621. package/dist/ui/markdown-blocks.js +0 -240
  622. package/dist/ui/overlays/AgentsBoardOverlay.d.ts +0 -57
  623. package/dist/ui/overlays/AgentsBoardOverlay.js +0 -183
  624. package/dist/ui/overlays/ConfirmDialog.d.ts +0 -31
  625. package/dist/ui/overlays/ConfirmDialog.js +0 -44
  626. package/dist/ui/overlays/GovernanceBoardOverlay.d.ts +0 -41
  627. package/dist/ui/overlays/GovernanceBoardOverlay.js +0 -76
  628. package/dist/ui/overlays/GovernanceSettingsPage.d.ts +0 -48
  629. package/dist/ui/overlays/GovernanceSettingsPage.js +0 -93
  630. package/dist/ui/overlays/HelpOverlay.d.ts +0 -29
  631. package/dist/ui/overlays/HelpOverlay.js +0 -232
  632. package/dist/ui/overlays/KitEditor.d.ts +0 -23
  633. package/dist/ui/overlays/KitEditor.js +0 -101
  634. package/dist/ui/overlays/KitManager.d.ts +0 -23
  635. package/dist/ui/overlays/KitManager.js +0 -104
  636. package/dist/ui/overlays/KitPicker.d.ts +0 -49
  637. package/dist/ui/overlays/KitPicker.js +0 -58
  638. package/dist/ui/overlays/ModelDiscoveryList.d.ts +0 -23
  639. package/dist/ui/overlays/ModelDiscoveryList.js +0 -161
  640. package/dist/ui/overlays/ModelPicker.d.ts +0 -26
  641. package/dist/ui/overlays/ModelPicker.js +0 -63
  642. package/dist/ui/overlays/ModelProfileEditor.d.ts +0 -29
  643. package/dist/ui/overlays/ModelProfileEditor.js +0 -168
  644. package/dist/ui/overlays/ModelProfilePicker.d.ts +0 -48
  645. package/dist/ui/overlays/ModelProfilePicker.js +0 -231
  646. package/dist/ui/overlays/PlanReviewOverlay.d.ts +0 -51
  647. package/dist/ui/overlays/PlanReviewOverlay.js +0 -132
  648. package/dist/ui/overlays/PromptEditorPage.d.ts +0 -48
  649. package/dist/ui/overlays/PromptEditorPage.js +0 -227
  650. package/dist/ui/overlays/PromptLibraryOverlay.d.ts +0 -37
  651. package/dist/ui/overlays/PromptLibraryOverlay.js +0 -191
  652. package/dist/ui/overlays/PromptPicker.d.ts +0 -36
  653. package/dist/ui/overlays/PromptPicker.js +0 -129
  654. package/dist/ui/overlays/PromptTextArea.d.ts +0 -86
  655. package/dist/ui/overlays/PromptTextArea.js +0 -141
  656. package/dist/ui/overlays/QuestionOverlay.d.ts +0 -39
  657. package/dist/ui/overlays/QuestionOverlay.js +0 -258
  658. package/dist/ui/overlays/QueueOverlay.d.ts +0 -22
  659. package/dist/ui/overlays/QueueOverlay.js +0 -79
  660. package/dist/ui/overlays/SettingsScreen.d.ts +0 -228
  661. package/dist/ui/overlays/SettingsScreen.js +0 -1037
  662. package/dist/ui/overlays/ShortcutPanel.d.ts +0 -39
  663. package/dist/ui/overlays/ShortcutPanel.js +0 -106
  664. package/dist/ui/overlays/TeamFanoutPage.d.ts +0 -51
  665. package/dist/ui/overlays/TeamFanoutPage.js +0 -90
  666. package/dist/ui/overlays/governance-settings.d.ts +0 -79
  667. package/dist/ui/overlays/governance-settings.js +0 -140
  668. package/dist/ui/overlays/kit-picker-state.d.ts +0 -87
  669. package/dist/ui/overlays/kit-picker-state.js +0 -136
  670. package/dist/ui/overlays/kit-settings-state.d.ts +0 -129
  671. package/dist/ui/overlays/kit-settings-state.js +0 -268
  672. package/dist/ui/overlays/model-probe-view.d.ts +0 -128
  673. package/dist/ui/overlays/model-probe-view.js +0 -225
  674. package/dist/ui/overlays/model-profile-state.d.ts +0 -177
  675. package/dist/ui/overlays/model-profile-state.js +0 -301
  676. package/dist/ui/overlays/prompt-library-state.d.ts +0 -162
  677. package/dist/ui/overlays/prompt-library-state.js +0 -335
  678. package/dist/ui/overlays/prompt-picker-state.d.ts +0 -71
  679. package/dist/ui/overlays/prompt-picker-state.js +0 -98
  680. package/dist/ui/overlays/team-fanout-state.d.ts +0 -106
  681. package/dist/ui/overlays/team-fanout-state.js +0 -155
  682. package/dist/ui/overlays/use-model-probe.d.ts +0 -30
  683. package/dist/ui/overlays/use-model-probe.js +0 -109
  684. package/dist/ui/palettes.d.ts +0 -112
  685. package/dist/ui/palettes.js +0 -130
  686. package/dist/ui/paste-frames.d.ts +0 -91
  687. package/dist/ui/paste-frames.js +0 -117
  688. package/dist/ui/paste-tokens.d.ts +0 -90
  689. package/dist/ui/paste-tokens.js +0 -147
  690. package/dist/ui/render-cache.d.ts +0 -81
  691. package/dist/ui/render-cache.js +0 -196
  692. package/dist/ui/render-governor.d.ts +0 -54
  693. package/dist/ui/render-governor.js +0 -78
  694. package/dist/ui/run-metrics.d.ts +0 -23
  695. package/dist/ui/run-metrics.js +0 -27
  696. package/dist/ui/run-status-row.d.ts +0 -63
  697. package/dist/ui/run-status-row.js +0 -54
  698. package/dist/ui/screen.d.ts +0 -107
  699. package/dist/ui/screen.js +0 -234
  700. package/dist/ui/scrollback/LiveTail.d.ts +0 -115
  701. package/dist/ui/scrollback/LiveTail.js +0 -48
  702. package/dist/ui/scrollback/band.d.ts +0 -114
  703. package/dist/ui/scrollback/band.js +0 -143
  704. package/dist/ui/scrollback/budget.d.ts +0 -90
  705. package/dist/ui/scrollback/budget.js +0 -100
  706. package/dist/ui/scrollback/canvas.d.ts +0 -100
  707. package/dist/ui/scrollback/canvas.js +0 -114
  708. package/dist/ui/scrollback/cursor-probe.d.ts +0 -71
  709. package/dist/ui/scrollback/cursor-probe.js +0 -133
  710. package/dist/ui/scrollback/drain.d.ts +0 -32
  711. package/dist/ui/scrollback/drain.js +0 -64
  712. package/dist/ui/scrollback/exit-summary.d.ts +0 -23
  713. package/dist/ui/scrollback/exit-summary.js +0 -25
  714. package/dist/ui/scrollback/limits.d.ts +0 -98
  715. package/dist/ui/scrollback/limits.js +0 -98
  716. package/dist/ui/scrollback/live-preview.d.ts +0 -34
  717. package/dist/ui/scrollback/live-preview.js +0 -130
  718. package/dist/ui/scrollback/overflow-print.d.ts +0 -108
  719. package/dist/ui/scrollback/overflow-print.js +0 -120
  720. package/dist/ui/scrollback/renderer.d.ts +0 -48
  721. package/dist/ui/scrollback/renderer.js +0 -186
  722. package/dist/ui/scrollback/scrollback-writer.d.ts +0 -174
  723. package/dist/ui/scrollback/scrollback-writer.js +0 -648
  724. package/dist/ui/scrollback/settled-boundary.d.ts +0 -42
  725. package/dist/ui/scrollback/settled-boundary.js +0 -109
  726. package/dist/ui/scrollback/tail-anchor.d.ts +0 -71
  727. package/dist/ui/scrollback/tail-anchor.js +0 -79
  728. package/dist/ui/scrollback/tail-window.d.ts +0 -73
  729. package/dist/ui/scrollback/tail-window.js +0 -89
  730. package/dist/ui/scrollback/use-scrollback-view.d.ts +0 -139
  731. package/dist/ui/scrollback/use-scrollback-view.js +0 -601
  732. package/dist/ui/scrollback/writer-shapes.d.ts +0 -127
  733. package/dist/ui/scrollback/writer-shapes.js +0 -159
  734. package/dist/ui/scrollbar-controller.d.ts +0 -30
  735. package/dist/ui/scrollbar-controller.js +0 -124
  736. package/dist/ui/selection/highlight.d.ts +0 -39
  737. package/dist/ui/selection/highlight.js +0 -64
  738. package/dist/ui/selection/screen-mirror.d.ts +0 -24
  739. package/dist/ui/selection/screen-mirror.js +0 -35
  740. package/dist/ui/selection/selection-controller.d.ts +0 -104
  741. package/dist/ui/selection/selection-controller.js +0 -372
  742. package/dist/ui/selection/selection.d.ts +0 -90
  743. package/dist/ui/selection/selection.js +0 -223
  744. package/dist/ui/shortcuts.d.ts +0 -81
  745. package/dist/ui/shortcuts.js +0 -221
  746. package/dist/ui/status-feedback.d.ts +0 -35
  747. package/dist/ui/status-feedback.js +0 -38
  748. package/dist/ui/stdout-frame-writer.d.ts +0 -74
  749. package/dist/ui/stdout-frame-writer.js +0 -155
  750. package/dist/ui/team-status.d.ts +0 -166
  751. package/dist/ui/team-status.js +0 -252
  752. package/dist/ui/terminal-plan.d.ts +0 -52
  753. package/dist/ui/terminal-plan.js +0 -49
  754. package/dist/ui/theme.d.ts +0 -96
  755. package/dist/ui/theme.js +0 -130
  756. package/dist/ui/transcript-text.d.ts +0 -41
  757. package/dist/ui/transcript-text.js +0 -282
  758. package/dist/ui/use-height-store.d.ts +0 -31
  759. package/dist/ui/use-height-store.js +0 -76
  760. package/dist/ui/use-render-governor.d.ts +0 -39
  761. package/dist/ui/use-render-governor.js +0 -57
  762. package/dist/ui/use-wheel-routing.d.ts +0 -57
  763. package/dist/ui/use-wheel-routing.js +0 -152
  764. package/dist/ui/win-vt-force.d.ts +0 -136
  765. package/dist/ui/win-vt-force.js +0 -237
  766. package/dist/ui/win-vt-input.d.ts +0 -57
  767. package/dist/ui/win-vt-input.js +0 -62
  768. package/dist/update/limits.d.ts +0 -111
  769. package/dist/update/limits.js +0 -111
  770. package/dist/update/semver.d.ts +0 -89
  771. package/dist/update/semver.js +0 -295
  772. package/dist/update/types.d.ts +0 -169
  773. package/dist/update/types.js +0 -68
  774. /package/dist/{ui → app}/session-bridge.d.ts +0 -0
  775. /package/dist/{ui → app}/session-bridge.js +0 -0
@@ -1,389 +0,0 @@
1
- /**
2
- * The Agents board's row model — pure projection, no Ink (tui-subagent-panel §4.4 / §7).
3
- *
4
- * WHY A PURE MODULE AND NOT JSX. The board's whole value is that it shows EVERY fact
5
- * about every child, and the two things that can go wrong with that are both
6
- * properties of a list: a row wider than the overlay (which silently desynchronises
7
- * `OverlayFrame`'s position indicator) and a row count that grows without a bound.
8
- * Both are assertable here, against plain strings, without a terminal - which is the
9
- * same reason `layout/team-panel.ts` and `layout/budget.ts` are separate modules.
10
- *
11
- * LIVE-ONLY RULE (§4.4.2, RV-P0-2). The board has two sources with DIFFERENT fields:
12
- * a live `TeamSnapshot` (has `messageCount`, `startedAt`, the activity prose and the
13
- * timeline) and a settled `kind: 'team'` entry (has `durationMs` and the runs, and
14
- * nothing else - `agent/reducer.ts`'s entry member carries no `messageCount` and no
15
- * `startedAt`). A section whose source is missing is OMITTED, never filled with a
16
- * zero: `mail 0` would be a lie, and an empty section title tells the reader nothing.
17
- * The one section that survives both sources is `result` (`summary` / `error` is
18
- * never stripped), which is precisely the fact a user opens the board to find.
19
- *
20
- * ASCII ONLY: `src/ui/**` is inside `glyphs.test.ts`'s static scan, so every symbol
21
- * (the ellipsis, the separator, the cursor) arrives through `glyphs`.
22
- */
23
- import { TEAM_LIMITS } from '../../team/limits.js';
24
- import { childStatus, lastTeamEntry, rosterCounts, rosterHeadline, statusMarkerCell, } from '../team-status.js';
25
- import { formatDuration, formatTokens } from '../../agent/usage.js';
26
- import { sanitizeActivity } from '../../team/activity.js';
27
- import { activityWithBadge, teamRowGeometry } from './team-row.js';
28
- import { alignRightCells, fitCells, padCells, wrapCells } from './cells.js';
29
- /**
30
- * The board's single source shape, resolved in ONE place.
31
- *
32
- * PRIORITY: live snapshot > (the component's frozen copy) > the most recent settled
33
- * entry. This function answers the first and the third; the frozen copy belongs to
34
- * the component because it only exists while a dispatch is being read (§4.4.5).
35
- */
36
- export function resolveBoardSource(input) {
37
- const { team } = input;
38
- if (team !== null) {
39
- return {
40
- dispatchId: team.dispatchId,
41
- active: team.active,
42
- startedAt: team.startedAt,
43
- requested: team.requested,
44
- runs: team.runs,
45
- messageCount: team.messageCount,
46
- };
47
- }
48
- const entry = lastTeamEntry(input.entries);
49
- if (entry === null)
50
- return null;
51
- return {
52
- dispatchId: entry.dispatchId,
53
- active: entry.active === true,
54
- requested: entry.requested,
55
- runs: entry.runs,
56
- ...(entry.durationMs !== undefined ? { durationMs: entry.durationMs } : {}),
57
- };
58
- }
59
- /**
60
- * The child the board is showing, resolved from its LABEL every frame (D-8).
61
- *
62
- * Labels are the only stable handle: `panel-rows.ts` re-sorts the roster by phase, so
63
- * an index would silently jump to a different child the moment one of them settles.
64
- * Fallback order is "the first running child, else the first child", which is the
65
- * one a reader opening the board mid-dispatch wants.
66
- */
67
- export function resolveSelection(runs, label) {
68
- const named = label === null ? undefined : runs.find((run) => run.label === label);
69
- if (named !== undefined)
70
- return named;
71
- return runs.find((run) => childStatus(run) === 'running') ?? runs[0] ?? null;
72
- }
73
- /** Fixed label column of a `field` row, and the value column of its wide form. */
74
- const FIELD_LABEL_CELLS = 11;
75
- const FIELD_WIDE_VALUE_CELLS = 23;
76
- /** Rows of prose a `now` / `result` section may spend. */
77
- const NOW_MAX_ROWS = 6;
78
- const RESULT_MAX_ROWS = 12;
79
- /** Board width at which the field rows go 2-up, and the narrowest width that pads. */
80
- const BOARD_WIDE_COLS = 110;
81
- const BOARD_INLINE_COLS = 40;
82
- /**
83
- * The board's rows, in the order a reader wants them: what the dispatch did, then who
84
- * is in it, then everything about the selected child, then its history.
85
- *
86
- * Bounded by `TEAM_LIMITS.boardMaxRows`, and the truncation is ANNOUNCED rather than
87
- * silent - a list that stops mid-fact with no notice reads as a rendering bug.
88
- */
89
- export function buildAgentBoardRows(input) {
90
- const { source, glyphs } = input;
91
- const cols = normalizeCols(input.cols);
92
- const rows = [];
93
- const selected = resolveSelection(source.runs, input.selectedLabel);
94
- appendSummary(rows, input, selected);
95
- appendChildren(rows, input, selected, cols);
96
- if (selected !== null) {
97
- appendFacts(rows, input, selected, cols);
98
- appendProse(rows, input, selected, cols);
99
- appendTimeline(rows, input, selected, cols);
100
- }
101
- if (rows.length > TEAM_LIMITS.boardMaxRows) {
102
- const kept = rows.slice(0, TEAM_LIMITS.boardMaxRows);
103
- const dropped = rows.length - TEAM_LIMITS.boardMaxRows;
104
- kept[kept.length - 1] = {
105
- key: 'truncated',
106
- kind: 'hint',
107
- text: fitCells(`+${dropped} more rows`, cols, glyphs.ellipsis),
108
- tone: 'hint',
109
- };
110
- return kept;
111
- }
112
- return rows;
113
- }
114
- function normalizeCols(value) {
115
- return Number.isFinite(value) ? Math.max(0, Math.floor(value)) : 0;
116
- }
117
- /** A section title, then nothing else: callers add the body. */
118
- function pushSection(rows, title, cols, glyphs) {
119
- rows.push({
120
- key: `section:${title}`,
121
- kind: 'section',
122
- text: fitCells(title, cols, glyphs.ellipsis),
123
- tone: 'accent',
124
- });
125
- }
126
- function pushBlank(rows, key) {
127
- rows.push({ key: `blank:${key}`, kind: 'blank', text: '', tone: 'muted' });
128
- }
129
- /**
130
- * Two summary lines, each a left clause and a right-anchored figure.
131
- *
132
- * The right figure is `alignRightCells`-ed rather than flex-ended because the row is a
133
- * STRING here: the board hands `OverlayFrame` one element per row, so a row has to be
134
- * a single measured line or the position indicator desynchronises.
135
- */
136
- function summaryRow(rows, key, left, right, cols, glyphs, tone) {
137
- if (cols === 0)
138
- return;
139
- const rightCells = Math.min(right.length, Math.max(0, cols - 1));
140
- const leftCells = Math.max(0, cols - rightCells - 1);
141
- const body = `${padCells(fitCells(left, leftCells, glyphs.ellipsis), leftCells)} ${right.slice(0, rightCells)}`;
142
- rows.push({
143
- key,
144
- kind: 'summary',
145
- text: padCells(fitCells(body, cols, glyphs.ellipsis), cols),
146
- tone,
147
- });
148
- }
149
- function appendSummary(rows, input, selected) {
150
- const { source, glyphs } = input;
151
- const cols = normalizeCols(input.cols);
152
- const counts = rosterCounts(source.runs);
153
- // A settled entry has no `startedAt`, so only `durationMs` is honest there; a live
154
- // one may have neither (a dispatch that has not been stamped yet).
155
- const totalMs = source.active && source.startedAt !== undefined
156
- ? Math.max(0, input.now - source.startedAt)
157
- : source.durationMs;
158
- const clock = totalMs === undefined ? '' : formatDuration(totalMs);
159
- summaryRow(rows, 'summary:counts', rosterHeadline(counts, glyphs, cols), clock, cols, glyphs, 'primary');
160
- const figures = [];
161
- // THE LIVE-ONLY CLAUSE (I-15): no `messageCount` means no `mail` clause at all.
162
- if (source.messageCount !== undefined)
163
- figures.push(`mail ${source.messageCount}`);
164
- const toolCalls = source.runs.reduce((sum, run) => sum + run.toolCalls, 0);
165
- figures.push(`${toolCalls} tool calls`);
166
- const usage = source.runs.reduce((acc, run) => ({
167
- inputTokens: acc.inputTokens + run.usage.inputTokens,
168
- outputTokens: acc.outputTokens + run.usage.outputTokens,
169
- }), { inputTokens: 0, outputTokens: 0 });
170
- figures.push(`${formatTokens(usage.inputTokens)} in / ${formatTokens(usage.outputTokens)} out`);
171
- const children = `${source.runs.length} children`;
172
- if (cols >= BOARD_INLINE_COLS) {
173
- summaryRow(rows, 'summary:figures', figures.join(` ${glyphs.midDot} `), children, cols, glyphs, 'muted');
174
- }
175
- pushBlank(rows, 'summary');
176
- if (selected === null)
177
- pushSection(rows, 'no children', cols, glyphs);
178
- }
179
- /**
180
- * Every child, not the panel's `panelMaxRows` five: the board is the place a reader
181
- * goes to see the child the panel folded away behind `+N more`.
182
- *
183
- * EACH ROW REUSES THE PANEL'S GEOMETRY one cell narrower and prefixes a cursor, so the
184
- * columns line up with the panel exactly - "the same table at a second zoom level"
185
- * (§1) rather than a second layout to keep in step.
186
- */
187
- function appendChildren(rows, input, selected, cols) {
188
- const { glyphs, source } = input;
189
- pushSection(rows, 'children', cols, glyphs);
190
- const inner = Math.max(0, cols - 1);
191
- const geometry = teamRowGeometry(inner, glyphs);
192
- for (const run of source.runs) {
193
- const isSelected = selected !== null && run.label === selected.label;
194
- const marker = statusMarkerCell(childStatus(run), glyphs);
195
- const label = run.label.padEnd(8).slice(0, 8);
196
- const descriptionCells = Math.max(0, inner - geometry.marker - geometry.label - geometry.gap - geometry.activity - geometry.clock);
197
- const description = fitCells(run.description.replace(/\s+/g, ' '), descriptionCells, glyphs.ellipsis);
198
- // THE MARKER TIER IS PASSED THROUGH (R-10): the ASCII tier's marker cell is 6 columns,
199
- // so a budget computed against the Unicode tier's 3 would promise two columns this row
200
- // does not have. `fitCells` is the second gate; the first one has to be told the truth
201
- // or the text is ellipsised where it did fit.
202
- const activity = fitCells(activityWithBadge(run, inner, input.now, geometry.marker), geometry.activity, glyphs.ellipsis);
203
- const clock = run.startedAt === undefined
204
- ? ''
205
- : formatDuration(Math.max(0, (run.endedAt ?? input.now) - run.startedAt));
206
- const text = [
207
- isSelected ? glyphs.cursor : ' ',
208
- padCells(`${marker} `, geometry.marker),
209
- padCells(label, geometry.label),
210
- padCells(description, descriptionCells),
211
- padCells(' '.repeat(geometry.gap), geometry.gap),
212
- padCells(activity, geometry.activity),
213
- alignRightCells(clock, geometry.clock, glyphs.ellipsis),
214
- ].join('');
215
- rows.push({
216
- key: `child:${run.label}`,
217
- kind: 'child',
218
- text: padCells(fitCells(text, cols, glyphs.ellipsis), cols),
219
- tone: isSelected ? 'primary' : 'muted',
220
- ...(isSelected ? { selected: true } : {}),
221
- });
222
- }
223
- pushBlank(rows, 'children');
224
- }
225
- /** The selected child's fixed-order fact list (§4.4.2's table, top to bottom). */
226
- function appendFacts(rows, input, run, cols) {
227
- const { glyphs } = input;
228
- pushSection(rows, `${run.label} ${glyphs.midDot} ${run.description}`.trim(), cols, glyphs);
229
- const facts = factPairs(run, glyphs);
230
- // Two facts per row when there is room, one otherwise; the pairing is done here
231
- // rather than in the component so the row COUNT is assertable.
232
- const step = cols >= BOARD_WIDE_COLS ? 2 : 1;
233
- for (let index = 0; index < facts.length; index += step) {
234
- const first = facts[index];
235
- if (first === undefined)
236
- continue;
237
- const second = step === 2 ? facts[index + 1] : undefined;
238
- rows.push({
239
- key: `field:${first[0]}:${index}`,
240
- kind: 'field',
241
- text: second === undefined
242
- ? fieldCells(first, cols, glyphs)
243
- : fieldPairCells(first, second, cols, glyphs),
244
- tone: 'primary',
245
- });
246
- }
247
- pushBlank(rows, 'facts');
248
- }
249
- /** The width one field occupies in the 2-up form: its label plus its value column. */
250
- const FIELD_PAIR_CELLS = FIELD_LABEL_CELLS + FIELD_WIDE_VALUE_CELLS;
251
- /** One `label value` field, padded so two of them stand in columns. */
252
- function fieldCells(pair, cols, glyphs) {
253
- const width = Math.max(0, cols);
254
- return [
255
- padCells(fitCells(pair[0], FIELD_LABEL_CELLS - 1, glyphs.ellipsis), FIELD_LABEL_CELLS - 1),
256
- ' ',
257
- fitCells(pair[1], Math.max(0, width - FIELD_LABEL_CELLS), glyphs.ellipsis),
258
- ].join('');
259
- }
260
- /**
261
- * Two fields side by side, each with its own label and value column.
262
- *
263
- * BUILT FROM THE LEFT FIELD'S WIDTH, not from slicing a full-width row: a slice counts
264
- * code units while a row is measured in cells, so a wide character in the first value
265
- * could be cut in half and both columns would drift. `fieldCells` measures, so one space
266
- * of gutter and a 34-cell left field are what fix the right field's offset.
267
- */
268
- function fieldPairCells(first, second, cols, glyphs) {
269
- const right = Math.max(0, cols - FIELD_PAIR_CELLS - 1);
270
- return `${fieldCells(first, FIELD_PAIR_CELLS, glyphs)} ${fieldCells(second, right, glyphs)}`;
271
- }
272
- /**
273
- * The facts, in a FIXED order, and with the zero-valued ones ABSENT.
274
- *
275
- * `supervisor` / `retries` / `compactions` / `truncated` only appear when they carry a
276
- * fact; a row reading `supervisor 0` teaches a reader nothing and pushes the section
277
- * a row down for every child that was never touched.
278
- */
279
- export function factPairs(run, glyphs) {
280
- const status = childStatus(run);
281
- const state = status === 'running' ? `${status} ${glyphs.midDot} ${run.phase}` : status;
282
- const pairs = [
283
- ['state', state],
284
- ['turns', String(run.turns)],
285
- ['tools', String(run.toolCalls)],
286
- ['tokens', `${formatTokens(run.usage.inputTokens)} / ${formatTokens(run.usage.outputTokens)}`],
287
- ];
288
- if (run.filesTouched.length > 0) {
289
- const head = run.filesTouched.slice(0, 3).join(', ');
290
- const more = run.filesTouched.length > 3 ? ` (+${run.filesTouched.length - 3})` : '';
291
- pairs.push(['files', `${run.filesTouched.length} (${head}${more})`]);
292
- }
293
- pairs.push(['mail', `${run.messagesSent} sent ${glyphs.midDot} ${run.blockedWaits ?? 0} blocked`]);
294
- if ((run.interventions ?? 0) > 0 || (run.replacements ?? 0) > 0) {
295
- const looks = `${run.interventions ?? 0} looks`;
296
- const replaced = (run.replacements ?? 0) > 0 ? ` ${glyphs.midDot} ${run.replacements} replaced` : '';
297
- const last = run.lastIntervention === undefined
298
- ? ''
299
- : ` ${glyphs.midDot} ${run.lastIntervention.action}`;
300
- pairs.push(['supervisor', `${looks}${replaced}${last}`]);
301
- }
302
- if (run.retry !== undefined) {
303
- pairs.push(['retries', `retrying ${run.retry.attempt}/${run.retry.maxRetries}`]);
304
- }
305
- else if ((run.retries ?? 0) > 0) {
306
- pairs.push(['retries', `${run.retries} cold start`]);
307
- }
308
- if ((run.compactions ?? 0) > 0)
309
- pairs.push(['compactions', String(run.compactions)]);
310
- if (run.truncated === true)
311
- pairs.push(['truncated', 'stopped at turn cap']);
312
- return pairs;
313
- }
314
- /**
315
- * `now` and `result`: the two prose sections, both folded by DISPLAY WIDTH.
316
- *
317
- * LIVE-ONLY, and honestly so: `now` needs `run.activity`, which is stripped on the way
318
- * out of the dispatch, so a settled board says one line instead of drawing an empty
319
- * section (I-15). `result` survives both sources and is the section a reader opens the
320
- * board for when a child failed.
321
- */
322
- function appendProse(rows, input, run, cols) {
323
- const { glyphs } = input;
324
- pushSection(rows, 'now', cols, glyphs);
325
- const now = run.activity === undefined
326
- ? ''
327
- : sanitizeActivity(run.activity, TEAM_LIMITS.timelineTextChars);
328
- if (now.length === 0) {
329
- pushUnavailable(rows, 'now', cols, glyphs);
330
- }
331
- else {
332
- const wrapped = wrapCells(now, Math.max(0, cols - 2), NOW_MAX_ROWS, glyphs.ellipsis);
333
- wrapped.lines.forEach((line, index) => {
334
- rows.push({ key: `now:${index}`, kind: 'event', text: fitCells(` ${line}`, cols, glyphs.ellipsis), tone: 'muted' });
335
- });
336
- }
337
- pushSection(rows, 'result', cols, glyphs);
338
- const result = run.error ?? run.summary ?? '';
339
- if (result.length === 0) {
340
- pushUnavailable(rows, 'result', cols, glyphs);
341
- return;
342
- }
343
- const wrapped = wrapCells(result, Math.max(0, cols - 2), RESULT_MAX_ROWS, glyphs.ellipsis);
344
- wrapped.lines.forEach((line, index) => {
345
- rows.push({
346
- key: `result:${index}`,
347
- kind: 'event',
348
- text: fitCells(` ${line}`, cols, glyphs.ellipsis),
349
- tone: run.error !== undefined ? 'error' : 'primary',
350
- });
351
- });
352
- }
353
- /**
354
- * The one honest sentence that replaces a section whose source is gone (§4.4.2 rule 2).
355
- *
356
- * QUOTE-SAFE AND PATH-FREE: it names the reason ("live only") rather than apologising,
357
- * because the fact that matters is that the reader is not being shown a stale copy.
358
- */
359
- function pushUnavailable(rows, section, cols, glyphs) {
360
- rows.push({
361
- key: `unavailable:${section}`,
362
- kind: 'hint',
363
- text: fitCells(' live only - not available after the dispatch ended', cols, glyphs.ellipsis),
364
- tone: 'hint',
365
- });
366
- }
367
- /** The 24-event ring, oldest first, each prefixed with its offset from the start. */
368
- function appendTimeline(rows, input, run, cols) {
369
- const { glyphs } = input;
370
- pushSection(rows, 'timeline', cols, glyphs);
371
- const timeline = run.timeline ?? [];
372
- if (timeline.length === 0) {
373
- pushUnavailable(rows, 'timeline', cols, glyphs);
374
- return;
375
- }
376
- const start = run.startedAt ?? timeline[0]?.at ?? 0;
377
- timeline.forEach((entry, index) => {
378
- const offset = `+${formatDuration(Math.max(0, entry.at - start))}`;
379
- const mark = entry.ok === undefined ? '' : entry.ok ? ' ok' : ' failed';
380
- const took = entry.ms === undefined ? '' : ` ${formatDuration(entry.ms)}`;
381
- const text = ` ${padCells(offset, 8)} ${entry.text}${took}${mark}`;
382
- rows.push({
383
- key: `event:${index}`,
384
- kind: 'event',
385
- text: fitCells(text, cols, glyphs.ellipsis),
386
- tone: entry.ok === false ? 'warn' : 'muted',
387
- });
388
- });
389
- }
@@ -1,18 +0,0 @@
1
- export interface AutocompleteLayoutInput {
2
- itemCount: number;
3
- selected: number;
4
- maxRows?: number;
5
- maxHeight?: number;
6
- }
7
- export interface AutocompleteLayout {
8
- start: number;
9
- count: number;
10
- moreBelow: number;
11
- showMore: boolean;
12
- rowCount: number;
13
- }
14
- /** Window suggestions within a total row budget including borders and footer.
15
- * Only omitted maxHeight is unlimited. Explicit invalid numbers become zero.
16
- * Selection is clamped to the available items; no input is mutated or rejected.
17
- */
18
- export declare function buildAutocompleteLayout(input: AutocompleteLayoutInput): AutocompleteLayout;
@@ -1,26 +0,0 @@
1
- /** Window suggestions within a total row budget including borders and footer.
2
- * Only omitted maxHeight is unlimited. Explicit invalid numbers become zero.
3
- * Selection is clamped to the available items; no input is mutated or rejected.
4
- */
5
- export function buildAutocompleteLayout(input) {
6
- const total = nonNegativeInt(input.itemCount);
7
- const maxRows = input.maxRows === undefined ? 6 : nonNegativeInt(input.maxRows);
8
- const height = input.maxHeight === undefined ? Infinity : nonNegativeInt(input.maxHeight);
9
- if (total === 0 || maxRows === 0 || height < 3) {
10
- return { start: 0, count: 0, moreBelow: 0, showMore: false, rowCount: 0 };
11
- }
12
- const selected = Math.min(total - 1, nonNegativeInt(input.selected));
13
- let count = Math.min(total, maxRows, height - 2);
14
- const windowStart = () => Math.max(0, Math.min(selected - count + 1, total - count));
15
- let start = windowStart();
16
- if (count >= 2 && start + count < total && count + 3 > height) {
17
- count--;
18
- start = windowStart();
19
- }
20
- const moreBelow = total - start - count;
21
- const showMore = moreBelow > 0 && count + 3 <= height;
22
- return { start, count, moreBelow, showMore, rowCount: 2 + count + Number(showMore) };
23
- }
24
- function nonNegativeInt(value) {
25
- return Number.isFinite(value) ? Math.max(0, Math.floor(value)) : 0;
26
- }
@@ -1,43 +0,0 @@
1
- export declare const HINT_MIN_ROWS = 20;
2
- export interface FrameBudgetInput {
3
- rows?: number;
4
- cols?: number;
5
- draftRows: number;
6
- popupRows: number;
7
- statusExpanded: boolean;
8
- }
9
- export interface FrameBudget {
10
- rows: number;
11
- cols: number;
12
- inactive: boolean;
13
- frameRows: number;
14
- headerRows: number;
15
- statusRows: 0 | 1 | 2;
16
- composerRows: number;
17
- composerSlotRows: number;
18
- popupRows: number;
19
- popupMaxHeight: number;
20
- viewportRows: number;
21
- composerCols: number;
22
- }
23
- /** Clamp the displayed draft, independently of any transcript or panel content. */
24
- export declare function clampDraftRows(rows: number, draftRows: number): number;
25
- /**
26
- * The share of `popupMaxHeight` a completion menu may actually occupy (defect 10).
27
- *
28
- * `popupCapacity` answers "how much COULD the editor slot take", and its floor is
29
- * one message row - right for a picker that owns the frame, wrong for a menu that
30
- * opens over a conversation. At 20 rows the whole capacity is 13, which leaves one
31
- * transcript row and no TODO rail at all (measured, `todo-app-layout.test.tsx`).
32
- * Half keeps the menu growing with the terminal - 6 rows at 20, 11 at 30, 16 at 40 -
33
- * while the conversation and the rail keep their rows.
34
- *
35
- * A divisor rather than a row count or a fraction of the terminal: it is the only
36
- * form that stays derived from the frame budget instead of becoming a second
37
- * authority beside it, and it cannot drift when `popupCapacity` changes.
38
- */
39
- export declare const POPUP_CAPACITY_SHARE = 2;
40
- /** Total menu capacity, including its borders; reserve at least one message row. */
41
- export declare function popupCapacity(rows: number, draftRows: number, statusExpanded: boolean): number;
42
- /** Normalize terminal dimensions once and conserve every visible frame row. */
43
- export declare function buildFrameBudget(input: FrameBudgetInput): FrameBudget;
@@ -1,52 +0,0 @@
1
- /** One height budget for the transcript, fixed editor and status slots. */
2
- import { draftMaxRows } from '../composer-limits.js';
3
- import { MIN_FULLSCREEN_ROWS, MIN_FULLSCREEN_COLS } from './frame.js';
4
- export const HINT_MIN_ROWS = 20;
5
- const dimension = (value, fallback) => value !== undefined && Number.isFinite(value) && value >= 1 ? Math.floor(value) : fallback;
6
- /** Clamp the displayed draft, independently of any transcript or panel content. */
7
- export function clampDraftRows(rows, draftRows) {
8
- const wanted = Number.isFinite(draftRows) ? Math.floor(draftRows) : 1;
9
- return Math.max(1, Math.min(wanted, draftMaxRows(rows)));
10
- }
11
- /**
12
- * The share of `popupMaxHeight` a completion menu may actually occupy (defect 10).
13
- *
14
- * `popupCapacity` answers "how much COULD the editor slot take", and its floor is
15
- * one message row - right for a picker that owns the frame, wrong for a menu that
16
- * opens over a conversation. At 20 rows the whole capacity is 13, which leaves one
17
- * transcript row and no TODO rail at all (measured, `todo-app-layout.test.tsx`).
18
- * Half keeps the menu growing with the terminal - 6 rows at 20, 11 at 30, 16 at 40 -
19
- * while the conversation and the rail keep their rows.
20
- *
21
- * A divisor rather than a row count or a fraction of the terminal: it is the only
22
- * form that stays derived from the frame budget instead of becoming a second
23
- * authority beside it, and it cannot drift when `popupCapacity` changes.
24
- */
25
- export const POPUP_CAPACITY_SHARE = 2;
26
- /** Total menu capacity, including its borders; reserve at least one message row. */
27
- export function popupCapacity(rows, draftRows, statusExpanded) {
28
- return Math.max(0, rows - 1 - 1 - (statusExpanded ? 2 : 1)
29
- - 2 - clampDraftRows(rows, draftRows) - 1);
30
- }
31
- /** Normalize terminal dimensions once and conserve every visible frame row. */
32
- export function buildFrameBudget(input) {
33
- const rows = dimension(input.rows, 24);
34
- const cols = dimension(input.cols, 80);
35
- const frameRows = rows - 1;
36
- const composerCols = Math.max(0, cols - 1);
37
- const inactive = rows < MIN_FULLSCREEN_ROWS || cols < MIN_FULLSCREEN_COLS;
38
- if (inactive)
39
- return { rows, cols, inactive, frameRows, composerCols, headerRows: 0,
40
- statusRows: 0, composerRows: 0, composerSlotRows: 0, popupRows: 0,
41
- popupMaxHeight: 0, viewportRows: 0 };
42
- const statusRows = input.statusExpanded ? 2 : 1;
43
- const composerRows = 2 + clampDraftRows(rows, input.draftRows);
44
- const popupMaxHeight = popupCapacity(rows, input.draftRows, input.statusExpanded);
45
- const requested = Number.isFinite(input.popupRows) ? Math.floor(input.popupRows) : 0;
46
- const candidate = Math.max(0, Math.min(requested, popupMaxHeight));
47
- const popupRows = candidate >= 3 ? candidate : 0;
48
- const composerSlotRows = composerRows + popupRows;
49
- return { rows, cols, inactive, frameRows, composerCols, headerRows: 1, statusRows,
50
- composerRows, composerSlotRows, popupRows, popupMaxHeight,
51
- viewportRows: frameRows - 1 - statusRows - composerSlotRows };
52
- }
@@ -1,61 +0,0 @@
1
- /**
2
- * Display-width cell arithmetic (tui-subagent-panel §5 #1).
3
- *
4
- * EVERY FUNCTION HERE IS PURE AND TOTAL: no Ink, no clock, no terminal, and no
5
- * input that throws. The panel row and the Agents board both need to place text
6
- * in a FIXED number of terminal columns, and `padEnd` cannot do that: it counts
7
- * code units while a terminal counts cells, so a CJK description padded with
8
- * `padEnd` overflows its box by one column per wide character and pushes the
9
- * next cell off the row. That is exactly the defect this round removes from the
10
- * roster, one layer down.
11
- *
12
- * ASCII ONLY: `src/ui/**` is inside `glyphs.test.ts`'s static scan, so the
13
- * ellipsis and any other symbol a caller wants must be passed IN (the board
14
- * hands over `glyphs.ellipsis`), never spelled here.
15
- */
16
- /** Display columns a string occupies, or 0 for a non-string (defensive at the edge only). */
17
- export declare function cellWidth(text: string): number;
18
- /**
19
- * Cut `text` to at most `cells` display columns, marking the cut with `ellipsis`.
20
- *
21
- * THE ELLIPSIS IS PART OF THE BUDGET, not an extra column: a caller that asks for
22
- * 8 cells gets a string that MEASURES 8, which is what makes a fixed-width cell
23
- * a cell rather than a hope. When the budget cannot hold the ellipsis plus one
24
- * character, the string is hard-cut instead - a marker wider than the cell it
25
- * marks is the one outcome worse than no marker.
26
- *
27
- * Wide characters are never split: a surrogate pair or a double-width glyph that
28
- * does not fit is dropped whole, so the result can measure one column less than
29
- * asked but never one more.
30
- */
31
- export declare function fitCells(text: string, cells: number, ellipsis?: string): string;
32
- /**
33
- * Pad `text` to exactly `cells` columns (or leave it alone when it already
34
- * measures at least that).
35
- *
36
- * NOT `padEnd`: see this file's header. A padded cell is what keeps the next
37
- * column at a stable offset, which is the whole point of the panel's table.
38
- */
39
- export declare function padCells(text: string, cells: number): string;
40
- /** `fitCells` then `padCells`: the result ALWAYS measures exactly `cells`. */
41
- export declare function alignRightCells(text: string, cells: number, ellipsis?: string): string;
42
- /** What one wrapped line is worth: the text, and whether lines were dropped. */
43
- export interface WrappedCells {
44
- lines: string[];
45
- /** Lines that did not fit under `maxRows`; 0 when everything fitted. */
46
- dropped: number;
47
- }
48
- /**
49
- * Fold `text` into at most `maxRows` lines of at most `cells` columns each.
50
- *
51
- * BREAKS AT SPACES, HARD-CUTS ONLY WHEN A SINGLE TOKEN CANNOT FIT: a word that is
52
- * wider than the column is the one case where an honest over-long token beats a
53
- * line of nothing, so it is cut rather than pushed to a line that still cannot
54
- * hold it. The last allowed line, when text remains, carries the `(+N lines)`
55
- * tail so the reader learns that the section was truncated instead of believing
56
- * the prose ended mid-sentence.
57
- *
58
- * Pure and total: `cells <= 0` or `maxRows <= 0` yields no lines, and the caller
59
- * decides what an empty section means (the board omits it).
60
- */
61
- export declare function wrapCells(text: string, cells: number, maxRows: number, ellipsis?: string): WrappedCells;