@aragon-agent/cli 0.6.46 → 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 +28 -0
  2. package/README.md +80 -12
  3. package/dist/agent/coalesce.d.ts +5 -1
  4. package/dist/agent/coalesce.js +13 -0
  5. package/dist/agent/controller.d.ts +41 -20
  6. package/dist/agent/controller.js +68 -15
  7. package/dist/agent/conversation-reset.d.ts +1 -1
  8. package/dist/agent/governance-wiring.d.ts +6 -6
  9. package/dist/agent/governance-wiring.js +4 -4
  10. package/dist/agent/headless.d.ts +5 -5
  11. package/dist/agent/headless.js +4 -4
  12. package/dist/agent/job-notices.d.ts +1 -1
  13. package/dist/agent/job-notices.js +1 -1
  14. package/dist/agent/kit-apply.d.ts +3 -3
  15. package/dist/agent/kit-apply.js +3 -3
  16. package/dist/agent/model-profile-settings.d.ts +2 -2
  17. package/dist/agent/model-profile-settings.js +6 -6
  18. package/dist/agent/prompt-options.d.ts +1 -1
  19. package/dist/agent/system-prompt.d.ts +1 -1
  20. package/dist/agent/user-attention.d.ts +17 -0
  21. package/dist/agent/user-attention.js +32 -0
  22. package/dist/{ui → app}/App.d.ts +9 -9
  23. package/dist/{ui → app}/App.js +113 -79
  24. package/dist/{ui → app}/use-startup-notices.d.ts +1 -1
  25. package/dist/{ui → app}/use-startup-notices.js +2 -2
  26. package/dist/cli.js +31 -32
  27. package/dist/commands/agents-command.js +1 -1
  28. package/dist/commands/builtins.js +9 -9
  29. package/dist/commands/governance-command.js +2 -2
  30. package/dist/commands/governance-runs-table.js +1 -1
  31. package/dist/commands/kit-command.js +1 -1
  32. package/dist/commands/perf.d.ts +3 -3
  33. package/dist/commands/perf.js +1 -1
  34. package/dist/commands/registry.d.ts +8 -8
  35. package/dist/commands/skills.js +2 -2
  36. package/dist/commands/team-command.js +1 -1
  37. package/dist/compaction/archive.d.ts +1 -1
  38. package/dist/compaction/archive.js +1 -1
  39. package/dist/compaction/child.d.ts +3 -3
  40. package/dist/compaction/child.js +4 -4
  41. package/dist/compaction/command.js +5 -5
  42. package/dist/compaction/compactor.d.ts +6 -6
  43. package/dist/compaction/compactor.js +6 -6
  44. package/dist/compaction/context-command.js +1 -1
  45. package/dist/compaction/digest.js +1 -1
  46. package/dist/compaction/memory-input.js +1 -1
  47. package/dist/compaction/memory-validation.js +1 -1
  48. package/dist/compaction/memory.js +1 -1
  49. package/dist/compaction/summarize-call.js +1 -1
  50. package/dist/compaction/summary-prompt.js +1 -1
  51. package/dist/compaction/tail-budget.js +2 -2
  52. package/dist/compaction/wiring.d.ts +5 -5
  53. package/dist/compaction/wiring.js +2 -2
  54. package/dist/config/cli-commands.d.ts +1 -1
  55. package/dist/config/cli-commands.js +3 -3
  56. package/dist/config/env.d.ts +1 -1
  57. package/dist/config/env.js +4 -4
  58. package/dist/config/load.d.ts +2 -2
  59. package/dist/config/load.js +10 -31
  60. package/dist/config/migrate-state-out-of-config.js +1 -1
  61. package/dist/config/model-profile-store.d.ts +4 -54
  62. package/dist/config/model-profile-store.js +3 -3
  63. package/dist/config/prompt-history.js +1 -1
  64. package/dist/config/store.d.ts +2 -2
  65. package/dist/config/store.js +3 -3
  66. package/dist/diagnostics/doctor.js +4 -4
  67. package/dist/exec/bridge/decisions.d.ts +1 -1
  68. package/dist/exec/bridge/human-answers.d.ts +1 -1
  69. package/dist/exec/bridge/human-answers.js +1 -1
  70. package/dist/exec/bridge/protocol.d.ts +1 -1
  71. package/dist/exec/bridge/server.js +1 -1
  72. package/dist/exec/events.d.ts +2 -2
  73. package/dist/exec/index.d.ts +1 -1
  74. package/dist/exec/index.js +1 -1
  75. package/dist/exec/permission.js +1 -1
  76. package/dist/exec/runner.d.ts +3 -3
  77. package/dist/exec/runner.js +2 -2
  78. package/dist/exec/threads/runtime.js +1 -1
  79. package/dist/fast/digest.d.ts +1 -1
  80. package/dist/fast/digest.js +1 -1
  81. package/dist/fast/frames.d.ts +1 -1
  82. package/dist/fast/frames.js +1 -1
  83. package/dist/fast/prompt.d.ts +1 -1
  84. package/dist/fast/prompt.js +1 -1
  85. package/dist/fast/review-call.js +1 -1
  86. package/dist/fast/reviewer.d.ts +3 -3
  87. package/dist/fast/reviewer.js +1 -1
  88. package/dist/fast/summary-call.d.ts +3 -3
  89. package/dist/fast/summary-call.js +2 -2
  90. package/dist/fast/summary-prompt.d.ts +1 -1
  91. package/dist/fast/summary-prompt.js +1 -1
  92. package/dist/fast/wiring.d.ts +4 -4
  93. package/dist/fast/wiring.js +1 -1
  94. package/dist/governance/card-normalize.d.ts +1 -1
  95. package/dist/governance/copy.d.ts +1 -1
  96. package/dist/governance/copy.js +2 -2
  97. package/dist/governance/engine/artifact-persist.d.ts +1 -1
  98. package/dist/governance/engine/budget.d.ts +1 -1
  99. package/dist/governance/engine/budget.js +1 -1
  100. package/dist/governance/engine/cards.d.ts +1 -1
  101. package/dist/governance/engine/digest.js +1 -1
  102. package/dist/governance/engine/engine-core.d.ts +5 -5
  103. package/dist/governance/engine/engine-core.js +1 -1
  104. package/dist/governance/engine/engine.d.ts +1 -1
  105. package/dist/governance/engine/engine.js +1 -1
  106. package/dist/governance/engine/estimate.d.ts +1 -1
  107. package/dist/governance/engine/estimate.js +1 -1
  108. package/dist/governance/engine/inspector.js +2 -2
  109. package/dist/governance/engine/integration.d.ts +1 -1
  110. package/dist/governance/engine/lifecycle.d.ts +1 -1
  111. package/dist/governance/engine/lifecycle.js +1 -1
  112. package/dist/governance/engine/phase-members.d.ts +1 -1
  113. package/dist/governance/engine/phase-planner.d.ts +1 -1
  114. package/dist/governance/engine/phase-planner.js +1 -1
  115. package/dist/governance/engine/rebuild.d.ts +1 -1
  116. package/dist/governance/engine/report.d.ts +1 -1
  117. package/dist/governance/engine/report.js +1 -1
  118. package/dist/governance/engine/run-digest.d.ts +1 -1
  119. package/dist/governance/engine/spec-builder.d.ts +2 -2
  120. package/dist/governance/engine/spec-builder.js +2 -2
  121. package/dist/governance/engine/stage-runner.js +2 -2
  122. package/dist/governance/engine/start-input.d.ts +1 -1
  123. package/dist/governance/engine/start-input.js +1 -1
  124. package/dist/governance/engine/state-machine.d.ts +1 -1
  125. package/dist/governance/engine/state-machine.js +3 -3
  126. package/dist/governance/engine/submission-queries.d.ts +1 -1
  127. package/dist/governance/engine/submission-render.d.ts +1 -1
  128. package/dist/governance/engine/submissions.d.ts +1 -1
  129. package/dist/governance/engine/submissions.js +1 -1
  130. package/dist/governance/engine/visibility.d.ts +1 -1
  131. package/dist/governance/engine/visibility.js +1 -1
  132. package/dist/governance/posture-transition.d.ts +2 -2
  133. package/dist/governance/posture-transition.js +1 -1
  134. package/dist/governance/profiles.d.ts +1 -1
  135. package/dist/governance/prompts/orchestrator-block.d.ts +2 -2
  136. package/dist/governance/prompts/orchestrator-block.js +2 -2
  137. package/dist/governance/prompts/plan-addendum.d.ts +1 -1
  138. package/dist/governance/prompts/plan-addendum.js +1 -1
  139. package/dist/governance/prompts/role-blocks.d.ts +2 -2
  140. package/dist/governance/prompts/role-blocks.js +1 -1
  141. package/dist/governance/report-reader.js +1 -1
  142. package/dist/governance/roles.d.ts +1 -1
  143. package/dist/governance/rules/claims.d.ts +1 -1
  144. package/dist/governance/rules/claims.js +1 -1
  145. package/dist/governance/rules/elimination.d.ts +1 -1
  146. package/dist/governance/rules/elimination.js +1 -1
  147. package/dist/governance/rules/failure-analysis.d.ts +2 -2
  148. package/dist/governance/rules/failure-analysis.js +1 -1
  149. package/dist/governance/rules/ledger-replay.d.ts +1 -1
  150. package/dist/governance/rules/ledger-state.d.ts +1 -1
  151. package/dist/governance/rules/ledger-state.js +1 -1
  152. package/dist/governance/rules/ledger.d.ts +2 -2
  153. package/dist/governance/rules/ledger.js +2 -2
  154. package/dist/governance/rules/rca.d.ts +1 -1
  155. package/dist/governance/rules/rca.js +1 -1
  156. package/dist/governance/rules/settlement.d.ts +2 -2
  157. package/dist/governance/rules/settlement.js +2 -2
  158. package/dist/governance/rules/suspicion.d.ts +1 -1
  159. package/dist/governance/store/artifacts.d.ts +1 -1
  160. package/dist/governance/store/artifacts.js +1 -1
  161. package/dist/governance/store/events-log.d.ts +1 -1
  162. package/dist/governance/store/run-store.d.ts +1 -1
  163. package/dist/governance/store/run-store.js +1 -1
  164. package/dist/governance/store/scoreboard-export.d.ts +1 -1
  165. package/dist/governance/tools/child-tools.d.ts +1 -1
  166. package/dist/governance/tools/guard.d.ts +1 -1
  167. package/dist/governance/tools/guard.js +1 -1
  168. package/dist/governance/tools/inspector-tools.d.ts +2 -2
  169. package/dist/governance/tools/inspector-tools.js +2 -2
  170. package/dist/governance/tools/lead-tools.d.ts +1 -1
  171. package/dist/governance/tools/lead-tools.js +1 -1
  172. package/dist/governance/tools/normalize-util.js +1 -1
  173. package/dist/governance/tools/scan-incomplete.js +1 -1
  174. package/dist/governance/tools/shared-tools.d.ts +1 -1
  175. package/dist/governance/tools/shared-tools.js +1 -1
  176. package/dist/governance/tools/submit-normalizers.d.ts +1 -1
  177. package/dist/governance/tools/submit-normalizers.js +1 -1
  178. package/dist/governance/tools/submit-tools.d.ts +1 -1
  179. package/dist/logging/cli-commands.js +1 -1
  180. package/dist/logging/install.d.ts +1 -1
  181. package/dist/logging/install.js +3 -3
  182. package/dist/logging/logger.d.ts +2 -2
  183. package/dist/logging/logger.js +31 -2
  184. package/dist/proc/kill-tree.js +1 -1
  185. package/dist/proc/log-mirror.js +1 -1
  186. package/dist/proc/log-ring.js +2 -2
  187. package/dist/proc/notices.d.ts +1 -1
  188. package/dist/proc/notices.js +2 -2
  189. package/dist/proc/prompt.d.ts +1 -1
  190. package/dist/proc/prompt.js +8 -5
  191. package/dist/proc/readiness.js +1 -1
  192. package/dist/proc/supervisor.d.ts +1 -1
  193. package/dist/proc/supervisor.js +10 -4
  194. package/dist/proc/wait-plan.d.ts +39 -0
  195. package/dist/proc/wait-plan.js +77 -0
  196. package/dist/proc/wait.d.ts +37 -4
  197. package/dist/proc/wait.js +68 -5
  198. package/dist/prompts/command.d.ts +1 -1
  199. package/dist/prompts/command.js +1 -1
  200. package/dist/prompts/normalize.d.ts +1 -1
  201. package/dist/prompts/normalize.js +1 -1
  202. package/dist/prompts/resolve.d.ts +1 -1
  203. package/dist/prompts/store.d.ts +2 -12
  204. package/dist/prompts/store.js +6 -60
  205. package/dist/session/checkpoint.d.ts +2 -2
  206. package/dist/session/checkpoint.js +2 -0
  207. package/dist/session/clear-archive.d.ts +2 -2
  208. package/dist/session/persist.d.ts +2 -2
  209. package/dist/session/persist.js +20 -3
  210. package/dist/session/startup-session.d.ts +2 -2
  211. package/dist/session/validate-session.js +6 -3
  212. package/dist/skills/service.d.ts +2 -2
  213. package/dist/team/bus.d.ts +1 -1
  214. package/dist/team/bus.js +1 -1
  215. package/dist/team/child-reviewer.d.ts +2 -2
  216. package/dist/team/child-reviewer.js +1 -1
  217. package/dist/team/comm-tools.js +1 -1
  218. package/dist/team/dispatch-gate.js +1 -1
  219. package/dist/team/forced-dispatch.js +1 -1
  220. package/dist/team/forced-mode.d.ts +1 -1
  221. package/dist/team/forced-prompt.d.ts +1 -1
  222. package/dist/team/forced-prompt.js +1 -1
  223. package/dist/team/normalize.d.ts +1 -1
  224. package/dist/team/normalize.js +1 -1
  225. package/dist/team/overseer.d.ts +3 -3
  226. package/dist/team/overseer.js +3 -3
  227. package/dist/team/prompt.d.ts +1 -1
  228. package/dist/team/prompt.js +1 -1
  229. package/dist/team/report.d.ts +2 -2
  230. package/dist/team/report.js +2 -2
  231. package/dist/team/retry.d.ts +1 -1
  232. package/dist/team/retry.js +1 -1
  233. package/dist/team/runtime.d.ts +4 -4
  234. package/dist/team/runtime.js +2 -2
  235. package/dist/team/settled.d.ts +2 -2
  236. package/dist/team/subagent.d.ts +4 -4
  237. package/dist/team/subagent.js +5 -5
  238. package/dist/team/task-tool.d.ts +1 -1
  239. package/dist/team/task-tool.js +1 -1
  240. package/dist/todo/normalize.d.ts +1 -1
  241. package/dist/todo/normalize.js +1 -1
  242. package/dist/todo/prompt.d.ts +1 -1
  243. package/dist/todo/prompt.js +1 -1
  244. package/dist/todo/store.d.ts +1 -1
  245. package/dist/todo/store.js +2 -2
  246. package/dist/todo/todo-tool.d.ts +1 -1
  247. package/dist/todo/todo-tool.js +2 -2
  248. package/dist/tools/bash-tool.d.ts +1 -1
  249. package/dist/tools/bash-tool.js +2 -2
  250. package/dist/tools/diff.d.ts +1 -1
  251. package/dist/tools/diff.js +1 -1
  252. package/dist/tools/file-change-store.d.ts +1 -1
  253. package/dist/tools/fs-tools.d.ts +2 -2
  254. package/dist/tools/fs-tools.js +1 -1
  255. package/dist/tools/index.d.ts +3 -3
  256. package/dist/tools/index.js +1 -1
  257. package/dist/tools/job-tools.d.ts +14 -3
  258. package/dist/tools/job-tools.js +158 -35
  259. package/dist/tools/plan-tools.d.ts +1 -1
  260. package/dist/tools/plan-tools.js +1 -1
  261. package/dist/tools/proc-tools.d.ts +1 -1
  262. package/dist/tools/proc-tools.js +2 -2
  263. package/dist/update/classify-failure.d.ts +1 -1
  264. package/dist/update/install-lock.js +1 -1
  265. package/dist/update/install-source.d.ts +1 -1
  266. package/dist/update/installer.js +2 -2
  267. package/dist/update/npm-view.d.ts +1 -1
  268. package/dist/update/npm-view.js +1 -1
  269. package/dist/update/registry.d.ts +1 -1
  270. package/dist/update/registry.js +1 -1
  271. package/dist/update/service.d.ts +2 -2
  272. package/dist/update/service.js +2 -2
  273. package/package.json +7 -7
  274. package/dist/agent/agent-mode.d.ts +0 -108
  275. package/dist/agent/agent-mode.js +0 -121
  276. package/dist/agent/entry-limits.d.ts +0 -65
  277. package/dist/agent/entry-limits.js +0 -133
  278. package/dist/agent/governance-view.d.ts +0 -40
  279. package/dist/agent/governance-view.js +0 -40
  280. package/dist/agent/invocation-card.d.ts +0 -77
  281. package/dist/agent/invocation-card.js +0 -169
  282. package/dist/agent/model-probe-limits.d.ts +0 -39
  283. package/dist/agent/model-probe-limits.js +0 -25
  284. package/dist/agent/model-probe.d.ts +0 -104
  285. package/dist/agent/model-probe.js +0 -391
  286. package/dist/agent/queued-messages.d.ts +0 -23
  287. package/dist/agent/queued-messages.js +0 -49
  288. package/dist/agent/reducer.d.ts +0 -837
  289. package/dist/agent/reducer.js +0 -1617
  290. package/dist/agent/retry-view.d.ts +0 -68
  291. package/dist/agent/retry-view.js +0 -95
  292. package/dist/agent/usage.d.ts +0 -47
  293. package/dist/agent/usage.js +0 -84
  294. package/dist/compaction/limits.d.ts +0 -61
  295. package/dist/compaction/limits.js +0 -64
  296. package/dist/compaction/meter.d.ts +0 -276
  297. package/dist/compaction/meter.js +0 -512
  298. package/dist/compaction/pressure.d.ts +0 -163
  299. package/dist/compaction/pressure.js +0 -199
  300. package/dist/compaction/reason-text.d.ts +0 -36
  301. package/dist/compaction/reason-text.js +0 -78
  302. package/dist/compaction/types.d.ts +0 -360
  303. package/dist/compaction/types.js +0 -22
  304. package/dist/config/governance-config.d.ts +0 -125
  305. package/dist/config/governance-config.js +0 -164
  306. package/dist/config/kit-resolution.d.ts +0 -93
  307. package/dist/config/kit-resolution.js +0 -226
  308. package/dist/config/model-kits.d.ts +0 -225
  309. package/dist/config/model-kits.js +0 -302
  310. package/dist/config/model-profile-resolution.d.ts +0 -28
  311. package/dist/config/model-profile-resolution.js +0 -88
  312. package/dist/config/model-profiles.d.ts +0 -103
  313. package/dist/config/model-profiles.js +0 -188
  314. package/dist/config/schema.d.ts +0 -1645
  315. package/dist/config/schema.js +0 -1377
  316. package/dist/fast/limits.d.ts +0 -152
  317. package/dist/fast/limits.js +0 -152
  318. package/dist/fast/resolve.d.ts +0 -44
  319. package/dist/fast/resolve.js +0 -107
  320. package/dist/fast/task-summary-types.d.ts +0 -66
  321. package/dist/fast/task-summary-types.js +0 -17
  322. package/dist/fast/types.d.ts +0 -141
  323. package/dist/fast/types.js +0 -14
  324. package/dist/governance/governed-dispatch.d.ts +0 -19
  325. package/dist/governance/governed-dispatch.js +0 -17
  326. package/dist/governance/limits.d.ts +0 -107
  327. package/dist/governance/limits.js +0 -131
  328. package/dist/governance/posture.d.ts +0 -35
  329. package/dist/governance/posture.js +0 -59
  330. package/dist/governance/rules/events-table.d.ts +0 -46
  331. package/dist/governance/rules/events-table.js +0 -94
  332. package/dist/governance/types.d.ts +0 -661
  333. package/dist/governance/types.js +0 -27
  334. package/dist/input/control-sequences.d.ts +0 -71
  335. package/dist/input/control-sequences.js +0 -222
  336. package/dist/input/csiu-keys.d.ts +0 -66
  337. package/dist/input/csiu-keys.js +0 -181
  338. package/dist/input/cursor-report.d.ts +0 -61
  339. package/dist/input/cursor-report.js +0 -97
  340. package/dist/input/enter-sequences.d.ts +0 -64
  341. package/dist/input/enter-sequences.js +0 -153
  342. package/dist/input/interrupt-gesture.d.ts +0 -18
  343. package/dist/input/interrupt-gesture.js +0 -19
  344. package/dist/input/keyboard-enhancement.d.ts +0 -42
  345. package/dist/input/keyboard-enhancement.js +0 -65
  346. package/dist/input/keymap.d.ts +0 -20
  347. package/dist/input/keymap.js +0 -99
  348. package/dist/input/limits.d.ts +0 -118
  349. package/dist/input/limits.js +0 -109
  350. package/dist/input/mouse-events.d.ts +0 -87
  351. package/dist/input/mouse-events.js +0 -212
  352. package/dist/input/paste-parse.d.ts +0 -83
  353. package/dist/input/paste-parse.js +0 -107
  354. package/dist/input/pointer-router.d.ts +0 -11
  355. package/dist/input/pointer-router.js +0 -14
  356. package/dist/input/stdin-filter.d.ts +0 -112
  357. package/dist/input/stdin-filter.js +0 -657
  358. package/dist/input/win32-input-mode.d.ts +0 -61
  359. package/dist/input/win32-input-mode.js +0 -269
  360. package/dist/logging/levels.d.ts +0 -40
  361. package/dist/logging/levels.js +0 -59
  362. package/dist/logging/secret-registry.d.ts +0 -32
  363. package/dist/logging/secret-registry.js +0 -73
  364. package/dist/proc/limits.d.ts +0 -200
  365. package/dist/proc/limits.js +0 -207
  366. package/dist/proc/progress.d.ts +0 -40
  367. package/dist/proc/progress.js +0 -135
  368. package/dist/proc/types.d.ts +0 -263
  369. package/dist/proc/types.js +0 -15
  370. package/dist/prompts/copy.d.ts +0 -89
  371. package/dist/prompts/copy.js +0 -131
  372. package/dist/prompts/fill.d.ts +0 -51
  373. package/dist/prompts/fill.js +0 -46
  374. package/dist/prompts/limits.d.ts +0 -53
  375. package/dist/prompts/limits.js +0 -53
  376. package/dist/prompts/search.d.ts +0 -58
  377. package/dist/prompts/search.js +0 -146
  378. package/dist/prompts/types.d.ts +0 -204
  379. package/dist/prompts/types.js +0 -13
  380. package/dist/team/activity.d.ts +0 -67
  381. package/dist/team/activity.js +0 -130
  382. package/dist/team/limits.d.ts +0 -308
  383. package/dist/team/limits.js +0 -330
  384. package/dist/team/model.d.ts +0 -104
  385. package/dist/team/model.js +0 -150
  386. package/dist/team/panel-rows.d.ts +0 -48
  387. package/dist/team/panel-rows.js +0 -75
  388. package/dist/team/timeline.d.ts +0 -74
  389. package/dist/team/timeline.js +0 -101
  390. package/dist/team/types.d.ts +0 -354
  391. package/dist/team/types.js +0 -13
  392. package/dist/todo/acceptance.d.ts +0 -120
  393. package/dist/todo/acceptance.js +0 -399
  394. package/dist/todo/follow-through.d.ts +0 -138
  395. package/dist/todo/follow-through.js +0 -248
  396. package/dist/todo/limits.d.ts +0 -152
  397. package/dist/todo/limits.js +0 -152
  398. package/dist/todo/panel-rows.d.ts +0 -45
  399. package/dist/todo/panel-rows.js +0 -70
  400. package/dist/todo/plan-sections.d.ts +0 -60
  401. package/dist/todo/plan-sections.js +0 -108
  402. package/dist/todo/row-window.d.ts +0 -51
  403. package/dist/todo/row-window.js +0 -107
  404. package/dist/todo/types.d.ts +0 -124
  405. package/dist/todo/types.js +0 -12
  406. package/dist/tools/human-input.d.ts +0 -212
  407. package/dist/tools/human-input.js +0 -265
  408. package/dist/tools/patch.d.ts +0 -115
  409. package/dist/tools/patch.js +0 -453
  410. package/dist/tools/terminal-output.d.ts +0 -115
  411. package/dist/tools/terminal-output.js +0 -201
  412. package/dist/tools/tool-output-store.d.ts +0 -68
  413. package/dist/tools/tool-output-store.js +0 -102
  414. package/dist/ui/ActivityLine.d.ts +0 -26
  415. package/dist/ui/ActivityLine.js +0 -48
  416. package/dist/ui/AutocompletePopup.d.ts +0 -23
  417. package/dist/ui/AutocompletePopup.js +0 -17
  418. package/dist/ui/BottomStatusRow.d.ts +0 -10
  419. package/dist/ui/BottomStatusRow.js +0 -9
  420. package/dist/ui/Composer.d.ts +0 -115
  421. package/dist/ui/Composer.js +0 -64
  422. package/dist/ui/GovernancePanel.d.ts +0 -50
  423. package/dist/ui/GovernancePanel.js +0 -77
  424. package/dist/ui/GovernanceRun.d.ts +0 -18
  425. package/dist/ui/GovernanceRun.js +0 -11
  426. package/dist/ui/Header.d.ts +0 -48
  427. package/dist/ui/Header.js +0 -27
  428. package/dist/ui/Logo.d.ts +0 -32
  429. package/dist/ui/Logo.js +0 -65
  430. package/dist/ui/Markdown.d.ts +0 -29
  431. package/dist/ui/Markdown.js +0 -116
  432. package/dist/ui/PromptCaret.d.ts +0 -11
  433. package/dist/ui/PromptCaret.js +0 -31
  434. package/dist/ui/PromptInput.d.ts +0 -192
  435. package/dist/ui/PromptInput.js +0 -689
  436. package/dist/ui/QueuePanel.d.ts +0 -8
  437. package/dist/ui/QueuePanel.js +0 -9
  438. package/dist/ui/QueueStatusRow.d.ts +0 -24
  439. package/dist/ui/QueueStatusRow.js +0 -51
  440. package/dist/ui/ScrollbackShell.d.ts +0 -132
  441. package/dist/ui/ScrollbackShell.js +0 -26
  442. package/dist/ui/SessionOpener.d.ts +0 -30
  443. package/dist/ui/SessionOpener.js +0 -12
  444. package/dist/ui/StatusBar.d.ts +0 -129
  445. package/dist/ui/StatusBar.js +0 -61
  446. package/dist/ui/TeamPanel.d.ts +0 -76
  447. package/dist/ui/TeamPanel.js +0 -103
  448. package/dist/ui/ToastStack.d.ts +0 -8
  449. package/dist/ui/ToastStack.js +0 -31
  450. package/dist/ui/TodoPanel.d.ts +0 -52
  451. package/dist/ui/TodoPanel.js +0 -214
  452. package/dist/ui/Transcript.d.ts +0 -105
  453. package/dist/ui/Transcript.js +0 -251
  454. package/dist/ui/UpdateLine.d.ts +0 -44
  455. package/dist/ui/UpdateLine.js +0 -129
  456. package/dist/ui/activity-phrases.d.ts +0 -33
  457. package/dist/ui/activity-phrases.js +0 -50
  458. package/dist/ui/capabilities.d.ts +0 -27
  459. package/dist/ui/capabilities.js +0 -65
  460. package/dist/ui/clipboard-task.d.ts +0 -29
  461. package/dist/ui/clipboard-task.js +0 -66
  462. package/dist/ui/clipboard.d.ts +0 -31
  463. package/dist/ui/clipboard.js +0 -157
  464. package/dist/ui/color-runtime.d.ts +0 -5
  465. package/dist/ui/color-runtime.js +0 -29
  466. package/dist/ui/composer-input.d.ts +0 -38
  467. package/dist/ui/composer-input.js +0 -79
  468. package/dist/ui/composer-limits.d.ts +0 -30
  469. package/dist/ui/composer-limits.js +0 -45
  470. package/dist/ui/composer-rows.d.ts +0 -73
  471. package/dist/ui/composer-rows.js +0 -129
  472. package/dist/ui/console-bridge.d.ts +0 -19
  473. package/dist/ui/console-bridge.js +0 -52
  474. package/dist/ui/density.d.ts +0 -26
  475. package/dist/ui/density.js +0 -34
  476. package/dist/ui/display-tab.d.ts +0 -51
  477. package/dist/ui/display-tab.js +0 -82
  478. package/dist/ui/editor-navigation.d.ts +0 -55
  479. package/dist/ui/editor-navigation.js +0 -96
  480. package/dist/ui/editor-reducer.d.ts +0 -108
  481. package/dist/ui/editor-reducer.js +0 -187
  482. package/dist/ui/enter-frames.d.ts +0 -47
  483. package/dist/ui/enter-frames.js +0 -117
  484. package/dist/ui/entries/AssistantEntry.d.ts +0 -37
  485. package/dist/ui/entries/AssistantEntry.js +0 -43
  486. package/dist/ui/entries/CompactionCard.d.ts +0 -88
  487. package/dist/ui/entries/CompactionCard.js +0 -222
  488. package/dist/ui/entries/DiffView.d.ts +0 -61
  489. package/dist/ui/entries/DiffView.js +0 -103
  490. package/dist/ui/entries/EntryFrame.d.ts +0 -23
  491. package/dist/ui/entries/EntryFrame.js +0 -6
  492. package/dist/ui/entries/FastCard.d.ts +0 -53
  493. package/dist/ui/entries/FastCard.js +0 -105
  494. package/dist/ui/entries/GovernanceCard.d.ts +0 -30
  495. package/dist/ui/entries/GovernanceCard.js +0 -32
  496. package/dist/ui/entries/InvocationCard.d.ts +0 -20
  497. package/dist/ui/entries/InvocationCard.js +0 -32
  498. package/dist/ui/entries/QueuedEntry.d.ts +0 -27
  499. package/dist/ui/entries/QueuedEntry.js +0 -33
  500. package/dist/ui/entries/RetryCard.d.ts +0 -56
  501. package/dist/ui/entries/RetryCard.js +0 -60
  502. package/dist/ui/entries/ServiceCard.d.ts +0 -82
  503. package/dist/ui/entries/ServiceCard.js +0 -151
  504. package/dist/ui/entries/TeamCard.d.ts +0 -55
  505. package/dist/ui/entries/TeamCard.js +0 -94
  506. package/dist/ui/entries/TodoCard.d.ts +0 -54
  507. package/dist/ui/entries/TodoCard.js +0 -98
  508. package/dist/ui/entries/ToolCard.d.ts +0 -81
  509. package/dist/ui/entries/ToolCard.js +0 -160
  510. package/dist/ui/entries/ToolPreview.d.ts +0 -59
  511. package/dist/ui/entries/ToolPreview.js +0 -208
  512. package/dist/ui/entries/UserEntry.d.ts +0 -36
  513. package/dist/ui/entries/UserEntry.js +0 -57
  514. package/dist/ui/exit-snapshot.d.ts +0 -43
  515. package/dist/ui/exit-snapshot.js +0 -26
  516. package/dist/ui/frame-differ.d.ts +0 -166
  517. package/dist/ui/frame-differ.js +0 -354
  518. package/dist/ui/frame-observer.d.ts +0 -17
  519. package/dist/ui/frame-observer.js +0 -94
  520. package/dist/ui/frame-parser.d.ts +0 -7
  521. package/dist/ui/frame-parser.js +0 -18
  522. package/dist/ui/gauge.d.ts +0 -39
  523. package/dist/ui/gauge.js +0 -55
  524. package/dist/ui/glyphs.d.ts +0 -178
  525. package/dist/ui/glyphs.js +0 -165
  526. package/dist/ui/governance-copy.d.ts +0 -69
  527. package/dist/ui/governance-copy.js +0 -104
  528. package/dist/ui/governance-status.d.ts +0 -145
  529. package/dist/ui/governance-status.js +0 -326
  530. package/dist/ui/gradient.d.ts +0 -11
  531. package/dist/ui/gradient.js +0 -50
  532. package/dist/ui/ink-runtime.d.ts +0 -4
  533. package/dist/ui/ink-runtime.js +0 -51
  534. package/dist/ui/interaction-copy.d.ts +0 -82
  535. package/dist/ui/interaction-copy.js +0 -38
  536. package/dist/ui/interaction-hints.d.ts +0 -44
  537. package/dist/ui/interaction-hints.js +0 -97
  538. package/dist/ui/layout/AppShell.d.ts +0 -17
  539. package/dist/ui/layout/AppShell.js +0 -6
  540. package/dist/ui/layout/Gutter.d.ts +0 -67
  541. package/dist/ui/layout/Gutter.js +0 -42
  542. package/dist/ui/layout/MeasuredEntry.d.ts +0 -21
  543. package/dist/ui/layout/MeasuredEntry.js +0 -30
  544. package/dist/ui/layout/OverlayFrame.d.ts +0 -73
  545. package/dist/ui/layout/OverlayFrame.js +0 -110
  546. package/dist/ui/layout/ScrollIndicator.d.ts +0 -32
  547. package/dist/ui/layout/ScrollIndicator.js +0 -22
  548. package/dist/ui/layout/ScrollViewport.d.ts +0 -40
  549. package/dist/ui/layout/ScrollViewport.js +0 -222
  550. package/dist/ui/layout/agents-board.d.ts +0 -102
  551. package/dist/ui/layout/agents-board.js +0 -389
  552. package/dist/ui/layout/autocomplete.d.ts +0 -18
  553. package/dist/ui/layout/autocomplete.js +0 -26
  554. package/dist/ui/layout/budget.d.ts +0 -43
  555. package/dist/ui/layout/budget.js +0 -52
  556. package/dist/ui/layout/cells.d.ts +0 -61
  557. package/dist/ui/layout/cells.js +0 -156
  558. package/dist/ui/layout/document-layout.d.ts +0 -13
  559. package/dist/ui/layout/document-layout.js +0 -10
  560. package/dist/ui/layout/follow-state.d.ts +0 -138
  561. package/dist/ui/layout/follow-state.js +0 -148
  562. package/dist/ui/layout/frame.d.ts +0 -36
  563. package/dist/ui/layout/frame.js +0 -39
  564. package/dist/ui/layout/governance-board.d.ts +0 -121
  565. package/dist/ui/layout/governance-board.js +0 -382
  566. package/dist/ui/layout/governance-card.d.ts +0 -53
  567. package/dist/ui/layout/governance-card.js +0 -134
  568. package/dist/ui/layout/governance-chip.d.ts +0 -38
  569. package/dist/ui/layout/governance-chip.js +0 -64
  570. package/dist/ui/layout/governance-panel.d.ts +0 -85
  571. package/dist/ui/layout/governance-panel.js +0 -358
  572. package/dist/ui/layout/governance-roster.d.ts +0 -65
  573. package/dist/ui/layout/governance-roster.js +0 -275
  574. package/dist/ui/layout/header-hints.d.ts +0 -90
  575. package/dist/ui/layout/header-hints.js +0 -110
  576. package/dist/ui/layout/header-left.d.ts +0 -115
  577. package/dist/ui/layout/header-left.js +0 -206
  578. package/dist/ui/layout/invocation-card.d.ts +0 -41
  579. package/dist/ui/layout/invocation-card.js +0 -91
  580. package/dist/ui/layout/kit-chip.d.ts +0 -50
  581. package/dist/ui/layout/kit-chip.js +0 -81
  582. package/dist/ui/layout/overlay-window.d.ts +0 -43
  583. package/dist/ui/layout/overlay-window.js +0 -51
  584. package/dist/ui/layout/queue-layout.d.ts +0 -19
  585. package/dist/ui/layout/queue-layout.js +0 -26
  586. package/dist/ui/layout/rail.d.ts +0 -7
  587. package/dist/ui/layout/rail.js +0 -16
  588. package/dist/ui/layout/scroll-indicator.d.ts +0 -27
  589. package/dist/ui/layout/scroll-indicator.js +0 -36
  590. package/dist/ui/layout/scroll.d.ts +0 -37
  591. package/dist/ui/layout/scroll.js +0 -99
  592. package/dist/ui/layout/scrollbar-geometry.d.ts +0 -17
  593. package/dist/ui/layout/scrollbar-geometry.js +0 -13
  594. package/dist/ui/layout/session-chip.d.ts +0 -52
  595. package/dist/ui/layout/session-chip.js +0 -64
  596. package/dist/ui/layout/shortcut-panel-layout.d.ts +0 -191
  597. package/dist/ui/layout/shortcut-panel-layout.js +0 -321
  598. package/dist/ui/layout/status-detail-layout.d.ts +0 -9
  599. package/dist/ui/layout/status-detail-layout.js +0 -79
  600. package/dist/ui/layout/status-layout.d.ts +0 -139
  601. package/dist/ui/layout/status-layout.js +0 -253
  602. package/dist/ui/layout/task-summary-cell.d.ts +0 -61
  603. package/dist/ui/layout/task-summary-cell.js +0 -65
  604. package/dist/ui/layout/team-panel.d.ts +0 -18
  605. package/dist/ui/layout/team-panel.js +0 -25
  606. package/dist/ui/layout/team-row.d.ts +0 -139
  607. package/dist/ui/layout/team-row.js +0 -246
  608. package/dist/ui/layout/todo-layout.d.ts +0 -62
  609. package/dist/ui/layout/todo-layout.js +0 -102
  610. package/dist/ui/layout/useTerminalSize.d.ts +0 -13
  611. package/dist/ui/layout/useTerminalSize.js +0 -50
  612. package/dist/ui/layout/viewport-geometry.d.ts +0 -29
  613. package/dist/ui/layout/viewport-geometry.js +0 -28
  614. package/dist/ui/layout/virtual-window.d.ts +0 -112
  615. package/dist/ui/layout/virtual-window.js +0 -488
  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 -61
  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 -118
  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,354 +0,0 @@
1
- /**
2
- * Frame differ — F1 of tui-input-flicker-fix (§3.2).
3
- *
4
- * Ink 5.2.1 has exactly one repaint strategy: on every commit it serialises the
5
- * WHOLE frame and hands it to `log-update`, which writes
6
- * `eraseLines(previousLineCount) + frame` in a single `stdout.write`
7
- * (`ink/build/log-update.js:17`). `ansiEscapes.eraseLines` walks BOTTOM-UP, so
8
- * the composer — the last row of the frame — is erased near the start of every
9
- * repaint and rewritten at the very end of it. During a run that happens 15–30
10
- * times a second with the composer's bytes unchanged, and the user sees the
11
- * bottom of their screen flicker while they type (§2 R1/R2).
12
- *
13
- * This module recognises that write shape, diffs the new frame against the
14
- * previous one line by line, and emits only the rows that actually changed, each
15
- * addressed absolutely. It is PURE: no I/O, no Node globals, no event emitter —
16
- * `stdout-frame-writer.ts` is what binds it to a real stream. That is what keeps
17
- * it unit-testable with plain string literals and no TTY.
18
- *
19
- * THREE INVARIANTS LIVE HERE AND EACH ONE FAILS SILENTLY IF DROPPED:
20
- *
21
- * - I-4 · An emitted line is `CUP · SGR0 · text · SGR0 · CSI K`, IN THAT ORDER,
22
- * and it never contains `CSI 2K`. Erasing first would blank the row and refill
23
- * it, which is R1's defect at 1/H the scale but on the one row the user is
24
- * watching. Overwriting in place means no cell is ever presentably empty; the
25
- * trailing `CSI K` removes only the residue a longer previous line left, and
26
- * the trailing SGR reset before it stops a BCE terminal painting that residue
27
- * in whatever background colour the line ended inside.
28
- * `CSI K` IS EMITTED ONLY WHEN THE LINE IS NARROWER THAN THE TERMINAL. A row
29
- * that already fills every column (the unified scrollbar paints the last one)
30
- * has no residue to clear, and on terminals that keep the cursor ON the last
31
- * column after writing it (a pending-wrap flag rather than a virtual column
32
- * N+1) the EL would erase the cell that was just written. `cols` unknown keeps
33
- * the old always-EL behaviour (`paintLine`).
34
- * - I-5 · Every emitted batch ends parked on row `H+1`. Ink's own
35
- * `previousLineCount` is computed from the string IT produced and is
36
- * unaffected by what we actually wrote, so a later pass-through's
37
- * `eraseLines(H+1)` must find the cursor exactly where log-update left it last
38
- * time. Drop this and one fallback shifts the frame up a row for the rest of
39
- * the session.
40
- * - I-6 · Any unrecognised write invalidates the cache. Absolute addressing is
41
- * valid only while nothing else writes to stdout. Full-screen mode already
42
- * forbids that, but "forbidden" is not "impossible", and the failure mode of
43
- * the guard being absent is a permanently misaligned screen while the failure
44
- * mode of it firing spuriously is one extra full repaint.
45
- */
46
- import stringWidth from 'string-width';
47
- import stripAnsi from 'strip-ansi';
48
- import { MIN_FULLSCREEN_ROWS } from './layout/frame.js';
49
- import { matchInkErasePrefix } from './frame-parser.js';
50
- // ---------------------------------------------------------------------------
51
- // Constants — exact, so no call site ever re-derives an escape sequence.
52
- // ---------------------------------------------------------------------------
53
- /** Control Sequence Introducer. Spelled out once; nothing below re-escapes it. */
54
- const CSI = '\x1b[';
55
- /** Erase the WHOLE line. Ink uses it on every repaint; this module never emits it (I-4). */
56
- const ERASE_LINE = `${CSI}2K`;
57
- /** Erase cursor → end of line. This is what an emitted line ends with. */
58
- const ERASE_TO_EOL = `${CSI}K`;
59
- const CURSOR_UP_1 = `${CSI}1A`;
60
- const CURSOR_LEFT = `${CSI}G`;
61
- const SGR_RESET = `${CSI}0m`;
62
- /** Erase cursor → end of screen. One sequence instead of H+1 line erases. */
63
- const ERASE_DOWN = `${CSI}J`;
64
- /** DEC private mode 2026 — begin/end synchronized update (F2, §3.3). */
65
- const SYNC_BEGIN = `${CSI}?2026h`;
66
- const SYNC_END = `${CSI}?2026l`;
67
- /**
68
- * `ansiEscapes.clearTerminal` — Ink's tall-frame write (`ink.js:121`).
69
- *
70
- * When `outputHeight >= stdout.rows` Ink abandons log-update and writes
71
- * `clearTerminal + frame` in one chunk: no erase-lines prefix, no trailing
72
- * `\n`. That happens on ANY height shrink, because Ink re-renders
73
- * synchronously from its own `'resize'` handler while the React tree still
74
- * holds the pre-resize height (`useTerminalSize` debounces 50 ms). Without
75
- * recognition the chunk lands in the prefix-less branch and counts as a
76
- * foreign write — the same §5.6 notice, one ordinary window-drag later.
77
- */
78
- const CLEAR_TERMINAL = `${CSI}2J${CSI}3J${CSI}H`;
79
- function cursorTo(row) {
80
- return `${CSI}${row};1H`;
81
- }
82
- /**
83
- * One addressed row: `CUP · SGR0 · line · SGR0 [· CSI K]` (I-4).
84
- *
85
- * The trailing `CSI K` clears residue a longer previous line left behind, so it is
86
- * only meaningful when the line is narrower than the terminal. A line that already
87
- * fills `cols` columns ends with the cursor in the pending-wrap state, where some
88
- * terminals run EL from the LAST column and erase the cell just written; those
89
- * rows get no EL. Width is measured exactly as Ink measures it (`string-width` over
90
- * the ANSI-stripped text) and only for rows that changed, so it costs at most one
91
- * measurement per changed viewport row. `cols` unknown => the original always-EL.
92
- */
93
- function paintLine(row, line, cols) {
94
- const head = cursorTo(row) + SGR_RESET + line + SGR_RESET;
95
- if (cols !== undefined && stringWidth(stripAnsi(line)) >= cols)
96
- return head;
97
- return head + ERASE_TO_EOL;
98
- }
99
- /**
100
- * Rebuild `ansiEscapes.eraseLines(count)` byte for byte.
101
- *
102
- * Exported for the upgrade tripwire (`frame-differ-ink-shape.test.ts`), which
103
- * drives the real `ink/build/log-update.js` and asserts this reconstruction is
104
- * byte-equal to what it produced. If a future Ink changes the shape, that test
105
- * fails loudly instead of this module silently degrading to pass-through for the
106
- * rest of the package's life (K-2).
107
- */
108
- export function eraseLinesPrefix(count) {
109
- if (count <= 0)
110
- return '';
111
- let out = '';
112
- for (let i = 0; i < count; i += 1) {
113
- out += ERASE_LINE + (i < count - 1 ? CURSOR_UP_1 : '');
114
- }
115
- return out + CURSOR_LEFT;
116
- }
117
- export function createFrameDiffer(options) {
118
- /**
119
- * Last frame AS PAINTED — what is actually on the screen.
120
- *
121
- * `null` = no cache, next frame is a full repaint. THE DIFF COMPARES PAINTED
122
- * LINES (I-2): diffing raw against a painted screen would leave the highlight
123
- * burned into rows the next frame never repaints, because those rows' RAW text
124
- * did not change.
125
- */
126
- let prev = null;
127
- /**
128
- * The same frame UNDECORATED — `repaint()`'s input.
129
- *
130
- * Two caches rather than one, because a repaint has to re-run `decorate` over
131
- * the ORIGINAL rows: painting an already-painted row would nest the selection
132
- * escapes and the highlight would never come off.
133
- */
134
- let rawPrev = null;
135
- /**
136
- * Whether any chunk has been seen at all.
137
- *
138
- * The session's FIRST write has `previousLineCount === 0`, so `eraseLines(0)`
139
- * is the empty string and the chunk carries no erase prefix (§3.2.1). That is
140
- * expected, not a desync, so it must not raise the §5.6 notice on every launch.
141
- * After it, every chunk Ink produces carries a prefix, so a prefix-less chunk
142
- * from then on really is foreign.
143
- */
144
- let seenAnyChunk = false;
145
- const counters = {
146
- framesTotal: 0,
147
- framesDiffed: 0,
148
- framesFull: 0,
149
- linesWritten: 0,
150
- bytesWritten: 0,
151
- fallbacks: 0,
152
- repaints: 0,
153
- };
154
- /**
155
- * Re-entrancy guard for `onInvalidate`. The listener clears the selection,
156
- * which asks for a repaint, which can reach `invalidate()` again; one flag is
157
- * cheaper than reasoning about how deep that can go.
158
- */
159
- let notifying = false;
160
- const invalidate = () => {
161
- prev = null;
162
- rawPrev = null;
163
- if (notifying || !options.onInvalidate)
164
- return;
165
- notifying = true;
166
- try {
167
- options.onInvalidate();
168
- }
169
- finally {
170
- notifying = false;
171
- }
172
- };
173
- /**
174
- * `decorate`, with the line-count contract enforced. A decorator that returned
175
- * a different number of rows would shift every absolute address below it for
176
- * the rest of the session, so its answer is discarded rather than trusted.
177
- */
178
- const applyDecorate = (lines) => {
179
- if (!options.decorate)
180
- return lines;
181
- const painted = options.decorate(lines);
182
- return painted.length === lines.length ? painted : lines;
183
- };
184
- /**
185
- * Write `chunk` verbatim — today's behaviour, and the only failure mode.
186
- *
187
- * `counted` is false for the two cases the differ inflicts on itself and knows
188
- * are harmless (the seed write, degenerate geometry); true means a foreign
189
- * write desynced absolute addressing, which is what `fallbacks` reports.
190
- */
191
- const passThrough = (counted) => {
192
- invalidate();
193
- if (counted) {
194
- counters.fallbacks += 1;
195
- if (counters.fallbacks === 1)
196
- options.onFirstFallback?.();
197
- }
198
- return null;
199
- };
200
- const wrapSync = (payload) => options.sync ? SYNC_BEGIN + payload + SYNC_END : payload;
201
- const emit = (payload, lines, raw, addressed, full) => {
202
- prev = lines;
203
- rawPrev = raw;
204
- counters.framesTotal += 1;
205
- if (full)
206
- counters.framesFull += 1;
207
- else
208
- counters.framesDiffed += 1;
209
- counters.linesWritten += addressed;
210
- counters.bytesWritten += payload.length;
211
- return payload;
212
- };
213
- /** `undefined` ⇒ the I-9 stand-down: a viewport too small to address safely. */
214
- const usableRows = () => {
215
- const rows = options.rows();
216
- if (rows === undefined || !Number.isFinite(rows))
217
- return undefined;
218
- return rows < MIN_FULLSCREEN_ROWS ? undefined : rows;
219
- };
220
- const matchErasePrefix = (chunk) => {
221
- if (prev !== null) {
222
- const expected = eraseLinesPrefix(prev.length + 1);
223
- if (chunk.startsWith(expected))
224
- return { prefix: expected, erased: prev.length + 1 };
225
- }
226
- return matchInkErasePrefix(chunk);
227
- };
228
- /**
229
- * Full repaint — the first diffable frame of a session, every invalidation
230
- * (including the resize invalidation of I-8), and any line-count change.
231
- *
232
- * `CSI J` replaces the H+1 individual line erases with one sequence, and the
233
- * alternate screen is exactly the region being erased. `\r\n` rather than `\n`
234
- * is deliberate: Ink relies on the tty's `ONLCR` post-processing to turn `\n`
235
- * into CRLF, and that dependency is invisible until it is not there.
236
- *
237
- * P0-1's blank-then-paint objection does not apply here and the asymmetry with
238
- * the per-line path is deliberate: a full repaint rewrites every row, so there
239
- * is no unchanged content that has to survive, and full repaints are rare by
240
- * construction — one per session, one per resize, one per invalidation.
241
- */
242
- const fullRepaint = (lines, raw) => {
243
- const payload = cursorTo(1) +
244
- SGR_RESET +
245
- ERASE_DOWN +
246
- lines.join('\r\n') +
247
- '\r\n' +
248
- cursorTo(lines.length + 1);
249
- return emit(wrapSync(payload), lines, raw, lines.length, true);
250
- };
251
- /** Terminal width for this paint, or `undefined` when unknown (I-4: always EL). */
252
- const liveCols = () => {
253
- const cols = options.cols?.();
254
- return cols !== undefined && Number.isFinite(cols) ? cols : undefined;
255
- };
256
- const diffRepaint = (lines, raw, previous) => {
257
- const out = [];
258
- const cols = liveCols();
259
- for (let i = 0; i < lines.length; i += 1) {
260
- // I-4: paint, THEN clear the tail. Never `ERASE_LINE` first.
261
- if (lines[i] !== previous[i])
262
- out.push(paintLine(i + 1, lines[i], cols));
263
- }
264
- // DEFENSIVE ONLY, not a live path (P2-4). `log-update.js:13-15` returns early
265
- // on an identical frame, so a chunk that reaches here differs by at least one
266
- // line; the only way to observe zero is a cache that disagrees with the
267
- // screen, which is the state `invalidate()` exists to prevent.
268
- //
269
- // With a `decorate` hook it stops being unreachable in one direction and
270
- // stays correct: a frame whose RAW rows changed only where the highlight
271
- // already covers them paints identically, and writing nothing is right.
272
- if (out.length === 0)
273
- return emit('', lines, raw, 0, false);
274
- out.push(cursorTo(lines.length + 1)); // I-5
275
- return emit(wrapSync(out.join('')), lines, raw, out.length - 1, false);
276
- };
277
- /**
278
- * Re-paint the last frame's rows through `decorate` again, emitting only what
279
- * changed. Called when the SELECTION moved rather than when Ink produced a
280
- * frame — hence its own counter and no touch of the frame ones (P2-6).
281
- *
282
- * It carries the same DEC 2026 sync envelope and parks on row `H + 1` as every
283
- * other batch, because it is addressed exactly like a diff frame and a
284
- * half-applied highlight tears the same way a half-applied frame does.
285
- */
286
- const repaint = () => {
287
- if (prev === null || rawPrev === null)
288
- return '';
289
- const rows = usableRows();
290
- if (rows === undefined)
291
- return ''; // I-9 — geometry we cannot address safely
292
- if (rawPrev.length + 1 > rows)
293
- return '';
294
- const painted = applyDecorate(rawPrev);
295
- const out = [];
296
- const cols = liveCols();
297
- for (let i = 0; i < painted.length; i += 1) {
298
- if (painted[i] !== prev[i])
299
- out.push(paintLine(i + 1, painted[i], cols));
300
- }
301
- prev = painted;
302
- if (out.length === 0)
303
- return '';
304
- out.push(cursorTo(painted.length + 1)); // I-5
305
- counters.repaints += 1;
306
- return wrapSync(out.join(''));
307
- };
308
- const transform = (chunk) => {
309
- // A+ · Ink's tall-frame write (see CLEAR_TERMINAL above): a shrink makes
310
- // `outputHeight >= stdout.rows` while the tree still holds the old height,
311
- // so Ink bypasses log-update and writes clearTerminal + frame in one chunk.
312
- // The chunk paints the whole frame by itself, so it needs no parsing: pass
313
- // it through, drop the cache (the screen it described is gone), and do NOT
314
- // count it — this is Ink's own write at a moment absolute addressing cannot
315
- // cover, not something behind Ink's back. The next log-update frame lands
316
- // on an empty cache and is a full repaint, exactly what a cleared screen
317
- // needs. Checked BEFORE the seed bookkeeping — and it must be, because the
318
- // tall-frame write bypasses `this.log`: log-update's own
319
- // `previousLineCount` stays 0, so the first log-update frame after it still
320
- // carries no erase prefix. THAT write is the session's genuine seed frame
321
- // (P1-1), and a control write arriving first must not spend its exemption.
322
- if (chunk.startsWith(CLEAR_TERMINAL))
323
- return passThrough(false);
324
- const firstChunk = !seenAnyChunk;
325
- seenAnyChunk = true;
326
- const rows = usableRows();
327
- if (rows === undefined)
328
- return passThrough(false); // I-9
329
- const matched = matchErasePrefix(chunk);
330
- // A prefix-less chunk is the session's seed write (P1-1) or a foreign one.
331
- if (matched === null)
332
- return passThrough(!firstChunk);
333
- const body = chunk.slice(matched.prefix.length);
334
- if (!body.endsWith('\n'))
335
- return passThrough(true); // `log.clear()` and friends
336
- const lines = body.slice(0, -1).split('\n');
337
- if (lines.length + 1 > rows)
338
- return passThrough(false); // I-9
339
- // AFTER the geometry stand-down, BEFORE the cache comparison: a frame this
340
- // module refuses to address never reaches the selection layer, and what is
341
- // compared below is what the screen will hold.
342
- const painted = applyDecorate(lines);
343
- if (prev === null || prev.length !== painted.length || matched.erased !== prev.length + 1) {
344
- return fullRepaint(painted, lines);
345
- }
346
- return diffRepaint(painted, lines, prev);
347
- };
348
- return {
349
- transform,
350
- invalidate,
351
- repaint,
352
- stats: () => ({ ...counters }),
353
- };
354
- }
@@ -1,17 +0,0 @@
1
- import type { ScrollbarBridge } from './scrollbar-controller.js';
2
- export interface FrameSummary {
3
- columns: number;
4
- rows: number;
5
- trackTop: number;
6
- trackRows: number;
7
- }
8
- /** Observe before differ transformation, but acknowledge only after downstream write returns. */
9
- export declare function createFrameObserver(options: {
10
- stdout: NodeJS.WriteStream;
11
- terminal: NodeJS.WriteStream;
12
- scrollbar: ScrollbarBridge;
13
- }): {
14
- stdout: NodeJS.WriteStream;
15
- dispose(): void;
16
- invalidate(): void;
17
- };
@@ -1,94 +0,0 @@
1
- import stripAnsi from 'strip-ansi';
2
- import stringWidth from 'string-width';
3
- import { parseInkFrame } from './frame-parser.js';
4
- import { pickGlyphs } from './glyphs.js';
5
- function summarizeFrame(chunk, rows, cols) {
6
- const lines = typeof chunk === 'string' ? parseInkFrame(chunk) : null;
7
- if (!lines || rows < 12 || cols < 40 || lines.length !== rows - 1)
8
- return null;
9
- const unicode = pickGlyphs({ unicode: true, colorLevel: 0 });
10
- const cells = new Set(['|', '#', unicode.scrollTrack, unicode.scrollThumb]);
11
- const plain = lines.map((line) => stripAnsi(line));
12
- if (plain.some((line) => stringWidth(line) > cols))
13
- return null;
14
- let trackRows = 0;
15
- // Fixed composer/status slots have no last-column rail. Discover the actual
16
- // message track, then acknowledge it only against the published Yoga geometry.
17
- for (const line of plain.slice(1)) {
18
- if (stringWidth(line) !== cols || !cells.has(line.slice(-1)))
19
- break;
20
- trackRows++;
21
- }
22
- if (trackRows < 1)
23
- return null;
24
- return { columns: cols, rows, trackTop: 2, trackRows };
25
- }
26
- /** Observe before differ transformation, but acknowledge only after downstream write returns. */
27
- export function createFrameObserver(options) {
28
- const { stdout, terminal, scrollbar } = options;
29
- let summary = null;
30
- let summaryRevision;
31
- let disposed = false;
32
- let resizeTimer = null;
33
- const invalidate = () => { summary = null; scrollbar.invalidate(); };
34
- const onResize = () => {
35
- invalidate();
36
- if (resizeTimer)
37
- clearTimeout(resizeTimer);
38
- // Ink suppresses identical frames when a resize burst returns to its starting size.
39
- // Wait past the 50 ms React size debounce, then request a normal redraw if needed.
40
- resizeTimer = setTimeout(() => {
41
- resizeTimer = null;
42
- if (!disposed && !scrollbar.frameReady)
43
- scrollbar.requestRedraw?.();
44
- }, 60);
45
- resizeTimer.unref?.();
46
- };
47
- const match = () => {
48
- const g = scrollbar.geometry;
49
- if (summary && g && summaryRevision === undefined)
50
- summaryRevision = g.revision;
51
- scrollbar.frameReady = !!summary && !!g && summary.columns === terminal.columns &&
52
- summary.rows === terminal.rows && g.trackCol === summary.columns &&
53
- g.trackTop === summary.trackTop && g.trackRows === summary.trackRows &&
54
- g.revision === summaryRevision;
55
- };
56
- const observe = (chunk) => {
57
- summary = summarizeFrame(chunk, terminal.rows, terminal.columns);
58
- summaryRevision = scrollbar.geometry?.revision;
59
- if (!summary) {
60
- invalidate();
61
- return;
62
- }
63
- match();
64
- };
65
- scrollbar.onGeometry = match;
66
- terminal.on('resize', onResize);
67
- const bound = new Map();
68
- const proxy = new Proxy(stdout, {
69
- get(target, prop) {
70
- if (prop === 'write')
71
- return (...args) => {
72
- const result = Reflect.apply(target.write, target, args);
73
- if (!disposed)
74
- observe(args[0]);
75
- return result;
76
- };
77
- const value = Reflect.get(target, prop, target);
78
- if (typeof value !== 'function')
79
- return value;
80
- if (!bound.has(prop))
81
- bound.set(prop, value.bind(target));
82
- return bound.get(prop);
83
- },
84
- });
85
- return { stdout: proxy, invalidate, dispose: () => {
86
- disposed = true;
87
- if (resizeTimer)
88
- clearTimeout(resizeTimer);
89
- resizeTimer = null;
90
- terminal.off('resize', onResize);
91
- scrollbar.onGeometry = undefined;
92
- invalidate();
93
- } };
94
- }
@@ -1,7 +0,0 @@
1
- /** Recognize Ink's erase-lines prefix without accepting arbitrary control writes. */
2
- export declare function matchInkErasePrefix(chunk: string): {
3
- prefix: string;
4
- erased: number;
5
- } | null;
6
- /** Parse complete frames, including Ink's prefixless initial frame. */
7
- export declare function parseInkFrame(chunk: string): string[] | null;
@@ -1,18 +0,0 @@
1
- /** Recognize Ink's erase-lines prefix without accepting arbitrary control writes. */
2
- export function matchInkErasePrefix(chunk) {
3
- const match = /^(?:\x1b\[2K(?:\x1b\[1A)?)+\x1b\[G/.exec(chunk);
4
- return match ? { prefix: match[0], erased: match[0].split('\x1b[2K').length - 1 } : null;
5
- }
6
- /** Parse complete frames, including Ink's prefixless initial frame. */
7
- export function parseInkFrame(chunk) {
8
- const prefix = matchInkErasePrefix(chunk);
9
- const body = chunk.slice(prefix?.prefix.length ?? 0);
10
- if (!body.endsWith('\n'))
11
- return null;
12
- // SGR and OSC-8 may decorate text; cursor movement is never frame content.
13
- const controls = body.replace(/\x1b\[[0-9;:]*m/g, '')
14
- .replace(/\x1b\]8;[^\x07\x1b]*(?:\x07|\x1b\\)/g, '');
15
- if (/[\x00-\x08\x0b-\x1f\x7f]/.test(controls))
16
- return null;
17
- return body.slice(0, -1).split('\n');
18
- }
@@ -1,39 +0,0 @@
1
- /**
2
- * Context gauge builder (spec §3.4). Pure: turns a percentage into a block bar
3
- * plus a threshold-based fill colour, with an ASCII fallback when the terminal
4
- * has no Unicode. Kept out of the `.tsx` so it is unit-testable without Ink.
5
- */
6
- import type { Theme } from './theme.js';
7
- import type { TermCapabilities } from './capabilities.js';
8
- export interface Gauge {
9
- /** The filled portion of the bar. */
10
- filled: string;
11
- /** The empty (track) portion of the bar. */
12
- empty: string;
13
- /** Fill colour chosen by threshold (`theme.gauge.*`). */
14
- fillColor: string | undefined;
15
- /** Track colour (`theme.gauge.track`). */
16
- trackColor: string | undefined;
17
- /** Clamped percentage 0–100. */
18
- pct: number;
19
- }
20
- /**
21
- * Where the bar changes colour, as percentages.
22
- *
23
- * The defaults are the values this function hardcoded before context compaction
24
- * existed, so every existing call site and test is byte-identical (§6.2).
25
- */
26
- export interface GaugeMarks {
27
- /** Amber at or above this. */
28
- warn: number;
29
- /** Red strictly above this. */
30
- high: number;
31
- }
32
- /**
33
- * Build a `width`-cell gauge for `pct` (0–100). Uses block glyphs on Unicode
34
- * terminals and `#`/`-` otherwise (e.g. `[######----]`).
35
- *
36
- * `marks` is OPTIONAL and defaults to today's values, so omitting it produces
37
- * byte-identical output to the pre-compaction build.
38
- */
39
- export declare function buildGauge(pct: number, width: number, theme: Theme, caps: TermCapabilities, marks?: GaugeMarks): Gauge;
package/dist/ui/gauge.js DELETED
@@ -1,55 +0,0 @@
1
- /**
2
- * Context gauge builder (spec §3.4). Pure: turns a percentage into a block bar
3
- * plus a threshold-based fill colour, with an ASCII fallback when the terminal
4
- * has no Unicode. Kept out of the `.tsx` so it is unit-testable without Ink.
5
- */
6
- import { pickGlyphs } from './glyphs.js';
7
- const DEFAULT_MARKS = { warn: 60, high: 85 };
8
- /**
9
- * Pick the fill colour by threshold: `< warn` low · `>= warn` mid · `> high` high.
10
- *
11
- * THE TWO OPERATORS ARE PRESERVED EXACTLY (`> high`, `>= warn`), and that is not
12
- * cosmetic: changing either would move the default 85 or 60 boundary and break
13
- * the byte-identity claim that makes the `marks` parameter a free change.
14
- *
15
- * WHAT RED MEANS, PRECISELY (P2-4). The compaction trigger is
16
- * `ratio >= threshold` (INCLUSIVE) while this fill is `pct > high` (EXCLUSIVE),
17
- * so with `high = threshold` any occupancy that would render red has ALREADY
18
- * triggered compaction, and the gauge repaints downward in the same frame. The
19
- * red band is therefore only ever OBSERVABLE when compaction did not or could
20
- * not run — the feature is off, it self-disabled, or the failure ladder ended at
21
- * its last rung. That is a genuinely more useful meaning than "imminent", and it
22
- * is the one the README and the settings screen state.
23
- */
24
- function thresholdColor(pct, theme, marks) {
25
- if (pct > marks.high)
26
- return theme.gauge.high;
27
- if (pct >= marks.warn)
28
- return theme.gauge.mid;
29
- return theme.gauge.low;
30
- }
31
- /**
32
- * Build a `width`-cell gauge for `pct` (0–100). Uses block glyphs on Unicode
33
- * terminals and `#`/`-` otherwise (e.g. `[######----]`).
34
- *
35
- * `marks` is OPTIONAL and defaults to today's values, so omitting it produces
36
- * byte-identical output to the pre-compaction build.
37
- */
38
- export function buildGauge(pct, width, theme, caps, marks = DEFAULT_MARKS) {
39
- const clamped = Math.max(0, Math.min(100, Math.round(pct)));
40
- const cells = Math.max(1, width);
41
- const filledCells = Math.max(0, Math.min(cells, Math.round((clamped / 100) * cells)));
42
- // Was `caps.unicode ? '█' : '#'` inline. The branch was correct but the
43
- // literals still had to move: leaving even a well-formed pair here would mean
44
- // the A-1 scan needs an exception, and exceptions get copied (§4.1).
45
- const glyphs = pickGlyphs(caps);
46
- const full = glyphs.gaugeFull;
47
- const empty = glyphs.gaugeEmpty;
48
- return {
49
- filled: full.repeat(filledCells),
50
- empty: empty.repeat(cells - filledCells),
51
- fillColor: thresholdColor(clamped, theme, marks),
52
- trackColor: theme.gauge.track,
53
- pct: clamped,
54
- };
55
- }