@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,129 +0,0 @@
1
- /**
2
- * Composer layout (tui-paste-handling section 5.5) -- pure. No Ink, no React.
3
- *
4
- * THE ONE PLACE THAT MAPS A BUFFER INDEX TO A SCREEN CELL (I-9). The composer
5
- * used to hand its buffer to Ink one `<Text>` per logical line and let Yoga wrap
6
- * it, which is fine until the draft is taller than the frame: `AppShell` gives
7
- * the bottom chrome `flexShrink={0}`, so a tall composer does not grow the frame
8
- * -- Yoga takes the rows out of the transcript and `overflow: hidden` clips them
9
- * away, while `layout/budget.ts` keeps telling five consumers the composer is
10
- * three rows tall. Four hundred presses of `Shift+Enter` do it without pasting
11
- * anything.
12
- *
13
- * So the wrap happens HERE, the row count is a number this module returns, and
14
- * `budget.ts` is told that number (I-8).
15
- *
16
- * HARD WRAP BY DISPLAY COLUMN, NEVER `layout/wrap-rows.ts::wrapToRows` (D-15).
17
- * That function is a PROSE wrapper: it splits on `/\s+/` and rejoins with single
18
- * spaces, so it destroys indentation and makes the character-index-to-screen-cell
19
- * mapping the caret depends on impossible to state, let alone compute.
20
- */
21
- import { buildEditorVisualMap, graphemes, graphemeWidth } from './editor-navigation.js';
22
- import { tokenSpans } from './paste-tokens.js';
23
- /** Width of a displayed run, measured by complete graphemes. */
24
- export function displayWidth(text) {
25
- return graphemes(text).reduce((width, part) => width + graphemeWidth(part.text), 0);
26
- }
27
- /**
28
- * Wrap `buffer` into rows, locate the caret, and select a window of at most
29
- * `maxRows` rows that contains it.
30
- *
31
- * The window is pinned to the BOTTOM -- where the user is typing -- and pulled up
32
- * only far enough to keep the caret visible. That is deterministic, which matters
33
- * because this function holds no state between calls: a scroll offset would have
34
- * to live in the reducer and would then need its own invalidation rules.
35
- */
36
- export function layoutComposer(input) {
37
- const { buffer, active } = input;
38
- const maxRows = input.maxRows >= 1 ? Math.floor(input.maxRows) : 1;
39
- const map = buildEditorVisualMap(input);
40
- const cursorRowAbs = active ? map.cursor.row : -1;
41
- const cursorCol = map.cursor.column;
42
- const spans = tokenSpans(buffer);
43
- let spanIndex = 0;
44
- const rows = map.rows.map((cells) => {
45
- const segments = [];
46
- for (const cell of cells) {
47
- while (spanIndex < spans.length && spans[spanIndex].end <= cell.index)
48
- spanIndex += 1;
49
- const span = spans[spanIndex];
50
- const kind = span && cell.index >= span.start && cell.index < span.end ? 'token' : 'text';
51
- const last = segments[segments.length - 1];
52
- if (last && last.kind === kind)
53
- segments[segments.length - 1] = {
54
- text: last.text + cell.text, kind,
55
- };
56
- else
57
- segments.push({ text: cell.text, kind });
58
- }
59
- return { segments };
60
- });
61
- const totalRows = rows.length;
62
- const cap = Math.max(1, Math.min(maxRows, totalRows));
63
- let start = Math.max(0, totalRows - cap);
64
- if (cursorRowAbs >= 0) {
65
- if (cursorRowAbs < start)
66
- start = cursorRowAbs;
67
- else if (cursorRowAbs >= start + cap)
68
- start = Math.min(totalRows - cap, cursorRowAbs - cap + 1);
69
- }
70
- const windowed = rows.slice(start, start + cap);
71
- return {
72
- rows: windowed,
73
- cursorRow: cursorRowAbs >= 0 ? cursorRowAbs - start : -1,
74
- cursorCol,
75
- totalRows,
76
- hiddenAbove: start,
77
- hiddenBelow: totalRows - start - windowed.length,
78
- };
79
- }
80
- /**
81
- * Split one row at a display column so the renderer can draw an inverse caret on
82
- * exactly one cell.
83
- *
84
- * Lives here rather than in the component because it walks the SAME width table
85
- * `layoutComposer` walked (I-9): a second, subtly different measurement is how
86
- * the caret ends up drawn on a cell that does not hold the character it is on.
87
- */
88
- export function splitRowAtColumn(row, column) {
89
- const before = [];
90
- const after = [];
91
- let at = null;
92
- let x = 0;
93
- const push = (list, text, kind) => {
94
- const last = list[list.length - 1];
95
- if (last && last.kind === kind)
96
- list[list.length - 1] = { text: last.text + text, kind };
97
- else
98
- list.push({ text, kind });
99
- };
100
- const cells = [];
101
- let leading = '';
102
- for (const segment of row.segments) {
103
- for (const { text: ch } of graphemes(segment.text)) {
104
- if (graphemeWidth(ch) === 0) {
105
- const last = cells[cells.length - 1];
106
- if (last)
107
- cells[cells.length - 1] = { ...last, text: last.text + ch };
108
- else
109
- leading += ch;
110
- }
111
- else {
112
- cells.push({ text: leading + ch, kind: segment.kind });
113
- leading = '';
114
- }
115
- }
116
- }
117
- // A zero-width-only row keeps its text before the explicitly budgeted space.
118
- if (leading)
119
- push(before, leading, row.segments[0]?.kind ?? 'text');
120
- for (const cell of cells) {
121
- const width = displayWidth(cell.text);
122
- if (at === null && column >= x && column < x + width)
123
- at = cell;
124
- else
125
- push(at === null ? before : after, cell.text, cell.kind);
126
- x += width;
127
- }
128
- return { before, at, after };
129
- }
@@ -1,19 +0,0 @@
1
- /**
2
- * Console bridge — invariant I-4 (spec §4.9).
3
- *
4
- * `patchConsole: true` makes Ink do `log.clear() → stdout.write(data) →
5
- * log(lastOutput)`. Under a fixed frame that write pushes the frame down a row
6
- * and permanently corrupts the line accounting described in §4.2: from then on
7
- * `eraseLines(previousLineCount)` is off by one and the frame slowly eats the
8
- * content above it.
9
- *
10
- * So full-screen mode runs with `patchConsole: false` and routes `console.*`
11
- * into the transcript as notice entries, where the output is actually READABLE
12
- * instead of merely being somewhere on screen. Inline mode keeps Ink's patching.
13
- */
14
- import type { NoticeLevel } from '../agent/reducer.js';
15
- /**
16
- * Hijack `console.*` for the lifetime of the returned restore function.
17
- * Returns a restore callback; calling it twice is harmless.
18
- */
19
- export declare function installConsoleBridge(sink: (level: NoticeLevel, text: string) => void): () => void;
@@ -1,52 +0,0 @@
1
- /**
2
- * Console bridge — invariant I-4 (spec §4.9).
3
- *
4
- * `patchConsole: true` makes Ink do `log.clear() → stdout.write(data) →
5
- * log(lastOutput)`. Under a fixed frame that write pushes the frame down a row
6
- * and permanently corrupts the line accounting described in §4.2: from then on
7
- * `eraseLines(previousLineCount)` is off by one and the frame slowly eats the
8
- * content above it.
9
- *
10
- * So full-screen mode runs with `patchConsole: false` and routes `console.*`
11
- * into the transcript as notice entries, where the output is actually READABLE
12
- * instead of merely being somewhere on screen. Inline mode keeps Ink's patching.
13
- */
14
- import { format } from 'node:util';
15
- const LEVEL_BY_METHOD = {
16
- log: 'info',
17
- info: 'info',
18
- warn: 'warn',
19
- error: 'error',
20
- debug: 'info',
21
- };
22
- /**
23
- * Hijack `console.*` for the lifetime of the returned restore function.
24
- * Returns a restore callback; calling it twice is harmless.
25
- */
26
- export function installConsoleBridge(sink) {
27
- const methods = Object.keys(LEVEL_BY_METHOD);
28
- const originals = new Map();
29
- for (const method of methods) {
30
- originals.set(method, console[method].bind(console));
31
- console[method] = (...args) => {
32
- const text = format(...args);
33
- if (text.length === 0)
34
- return;
35
- try {
36
- sink(LEVEL_BY_METHOD[method], text);
37
- }
38
- catch {
39
- // A failing sink must never turn a stray console.log into a crash.
40
- }
41
- };
42
- }
43
- let restored = false;
44
- return () => {
45
- if (restored)
46
- return;
47
- restored = true;
48
- for (const [method, original] of originals) {
49
- console[method] = original;
50
- }
51
- };
52
- }
@@ -1,26 +0,0 @@
1
- /**
2
- * Entry spacing policy (spec §4.3).
3
- *
4
- * Replaces four unconditional `marginTop={1}` sites (`UserEntry`,
5
- * `AssistantEntry`, `ToolCard`, the notice branch in `Transcript`). Those spent
6
- * a blank row on EVERY entry, so a plain "ask -> read a file -> answer" turn was
7
- * 17 rows tall against a 13-16 row viewport: the user could only ever see the
8
- * current step.
9
- *
10
- * Blank space now marks the one boundary that means something — the start of a
11
- * new user turn. Everything inside a turn stays contiguous, and the left rail
12
- * (§4.3) provides the grouping the blank rows used to.
13
- *
14
- * Pure and free of React so `density.test.ts` can enumerate the whole matrix.
15
- */
16
- import type { Entry } from '../agent/reducer.js';
17
- import type { DensityMode } from '../config/schema.js';
18
- export type { DensityMode };
19
- /**
20
- * Blank rows to insert BEFORE `next`. `prev === undefined` means `next` is the
21
- * first item in the list.
22
- *
23
- * This is the ONLY place allowed to decide entry spacing: if a component also
24
- * sets its own `marginTop`, the two stack and the turn boundary becomes 2 rows.
25
- */
26
- export declare function separationRows(prev: Entry | undefined, next: Entry, mode: DensityMode): 0 | 1;
@@ -1,34 +0,0 @@
1
- /**
2
- * Entry spacing policy (spec §4.3).
3
- *
4
- * Replaces four unconditional `marginTop={1}` sites (`UserEntry`,
5
- * `AssistantEntry`, `ToolCard`, the notice branch in `Transcript`). Those spent
6
- * a blank row on EVERY entry, so a plain "ask -> read a file -> answer" turn was
7
- * 17 rows tall against a 13-16 row viewport: the user could only ever see the
8
- * current step.
9
- *
10
- * Blank space now marks the one boundary that means something — the start of a
11
- * new user turn. Everything inside a turn stays contiguous, and the left rail
12
- * (§4.3) provides the grouping the blank rows used to.
13
- *
14
- * Pure and free of React so `density.test.ts` can enumerate the whole matrix.
15
- */
16
- /**
17
- * Blank rows to insert BEFORE `next`. `prev === undefined` means `next` is the
18
- * first item in the list.
19
- *
20
- * This is the ONLY place allowed to decide entry spacing: if a component also
21
- * sets its own `marginTop`, the two stack and the turn boundary becomes 2 rows.
22
- */
23
- export function separationRows(prev, next, mode) {
24
- if (!prev)
25
- return 0;
26
- if (mode === 'compact')
27
- return 0;
28
- // Consecutive tool calls read as one action; keep them tight.
29
- if (prev.kind === 'tool' && next.kind === 'tool')
30
- return 0;
31
- if (next.kind === 'user')
32
- return 1;
33
- return 0;
34
- }
@@ -1,51 +0,0 @@
1
- /**
2
- * TAB expansion that agrees with the TERMINAL, not with UTF-16 (fix A'-2 of
3
- * paste-control-sequence-residue).
4
- *
5
- * WHY THIS IS A MODULE OF ITS OWN. A TAB has no width; it advances the pen to
6
- * the next tab stop, so what it occupies depends on where the line currently
7
- * is. That makes "one TAB" a property of a CURSOR, and the same character was
8
- * being read three different ways in this package:
9
- *
10
- * - `ui/editor-navigation.ts` painted it at FOUR-column stops in the composer,
11
- * - `entries/UserEntry.tsx` handed the raw byte to `<Text>`, so the terminal
12
- * painted it at EIGHT-column stops in the transcript,
13
- * - `tools/terminal-output.ts` expanded it by UTF-16 code-unit count, so a
14
- * pasted `中文<TAB>X` table came out two columns short.
15
- *
16
- * A user who pastes a TAB-indented block or an Excel/Word table therefore saw
17
- * the draft and the sent message disagree about their own text. One function,
18
- * used by the composer AND by every renderer of stored text, is what makes the
19
- * "before send" and "after send" rows character-identical.
20
- *
21
- * `input/` is the wrong home for it: `cli/input` may depend on `node:stream`
22
- * and nothing else (`.claude-index/index.md`), and column arithmetic needs the
23
- * width table. `ui/` already owns that (`selection/selection.ts` uses
24
- * `string-width` for exactly this reason).
25
- *
26
- * Pure, React-free, Ink-free.
27
- */
28
- /**
29
- * Tab stop width, matching every terminal's default.
30
- *
31
- * A COPY OF `tools/terminal-output.ts`'s number, on purpose and in the same
32
- * shape `composer-limits.ts` copies `budget.ts::HINT_MIN_ROWS`: importing the
33
- * tools module here would point an arrow from `ui/` into `tools/` for one
34
- * integer, and the two are asserted equal by a test instead. (`tools/` keeps
35
- * its own expander because its rows are clipped to 200 columns before anyone
36
- * looks at them, so a code-unit approximation there cannot reach a user.)
37
- */
38
- export declare const TAB_WIDTH = 8;
39
- /**
40
- * Expand every TAB in `text` to spaces up to the next `TAB_WIDTH` stop, given
41
- * the display column the first character will be painted at.
42
- *
43
- * `fromColumn` is a DISPLAY column, not an offset: a caller that has already
44
- * painted `中文` must pass 4. Lines are independent -- a `\n` resets the column
45
- * to zero, because the terminal's pen returns to column 0.
46
- *
47
- * Non-ASCII text is measured with `string-width`, which is the whole point: a
48
- * CJK glyph occupies two cells, and counting it as one space is what left
49
- * CJK-plus-TAB tables misaligned.
50
- */
51
- export declare function expandTabs(text: string, fromColumn?: number): string;
@@ -1,82 +0,0 @@
1
- /**
2
- * TAB expansion that agrees with the TERMINAL, not with UTF-16 (fix A'-2 of
3
- * paste-control-sequence-residue).
4
- *
5
- * WHY THIS IS A MODULE OF ITS OWN. A TAB has no width; it advances the pen to
6
- * the next tab stop, so what it occupies depends on where the line currently
7
- * is. That makes "one TAB" a property of a CURSOR, and the same character was
8
- * being read three different ways in this package:
9
- *
10
- * - `ui/editor-navigation.ts` painted it at FOUR-column stops in the composer,
11
- * - `entries/UserEntry.tsx` handed the raw byte to `<Text>`, so the terminal
12
- * painted it at EIGHT-column stops in the transcript,
13
- * - `tools/terminal-output.ts` expanded it by UTF-16 code-unit count, so a
14
- * pasted `中文<TAB>X` table came out two columns short.
15
- *
16
- * A user who pastes a TAB-indented block or an Excel/Word table therefore saw
17
- * the draft and the sent message disagree about their own text. One function,
18
- * used by the composer AND by every renderer of stored text, is what makes the
19
- * "before send" and "after send" rows character-identical.
20
- *
21
- * `input/` is the wrong home for it: `cli/input` may depend on `node:stream`
22
- * and nothing else (`.claude-index/index.md`), and column arithmetic needs the
23
- * width table. `ui/` already owns that (`selection/selection.ts` uses
24
- * `string-width` for exactly this reason).
25
- *
26
- * Pure, React-free, Ink-free.
27
- */
28
- import stringWidth from 'string-width';
29
- /**
30
- * Tab stop width, matching every terminal's default.
31
- *
32
- * A COPY OF `tools/terminal-output.ts`'s number, on purpose and in the same
33
- * shape `composer-limits.ts` copies `budget.ts::HINT_MIN_ROWS`: importing the
34
- * tools module here would point an arrow from `ui/` into `tools/` for one
35
- * integer, and the two are asserted equal by a test instead. (`tools/` keeps
36
- * its own expander because its rows are clipped to 200 columns before anyone
37
- * looks at them, so a code-unit approximation there cannot reach a user.)
38
- */
39
- export const TAB_WIDTH = 8;
40
- /**
41
- * Expand every TAB in `text` to spaces up to the next `TAB_WIDTH` stop, given
42
- * the display column the first character will be painted at.
43
- *
44
- * `fromColumn` is a DISPLAY column, not an offset: a caller that has already
45
- * painted `中文` must pass 4. Lines are independent -- a `\n` resets the column
46
- * to zero, because the terminal's pen returns to column 0.
47
- *
48
- * Non-ASCII text is measured with `string-width`, which is the whole point: a
49
- * CJK glyph occupies two cells, and counting it as one space is what left
50
- * CJK-plus-TAB tables misaligned.
51
- */
52
- export function expandTabs(text, fromColumn = 0) {
53
- if (text.indexOf('\t') === -1)
54
- return text;
55
- let out = '';
56
- let column = Math.max(0, Math.floor(fromColumn));
57
- let run = '';
58
- for (const part of graphemesOf(text)) {
59
- if (part === '\t') {
60
- out += run;
61
- run = '';
62
- const width = TAB_WIDTH - (column % TAB_WIDTH);
63
- out += ' '.repeat(width);
64
- column += width;
65
- continue;
66
- }
67
- run += part;
68
- if (part === '\n')
69
- column = 0;
70
- else
71
- column += stringWidth(part);
72
- }
73
- return out + run;
74
- }
75
- const segmenter = new Intl.Segmenter(undefined, { granularity: 'grapheme' });
76
- /**
77
- * Grapheme clusters rather than code units, so a combining mark or an emoji ZWJ
78
- * sequence advances the column once, exactly as the terminal draws it.
79
- */
80
- function graphemesOf(text) {
81
- return Array.from(segmenter.segment(text), ({ segment }) => segment);
82
- }
@@ -1,55 +0,0 @@
1
- export interface EditorGrapheme {
2
- readonly text: string;
3
- readonly index: number;
4
- readonly end: number;
5
- }
6
- /** Segment text without changing its UTF-16 offsets or stored whitespace. */
7
- export declare function graphemes(text: string): EditorGrapheme[];
8
- /** Snap an arbitrary UTF-16 offset to a complete grapheme boundary. */
9
- export declare function snapGrapheme(text: string, cursor: number, right?: boolean): number;
10
- /** Move one complete grapheme, leaving the two buffer edges unchanged. */
11
- export declare function stepGrapheme(text: string, cursor: number, direction: 'left' | 'right'): number;
12
- /** Width of one grapheme (ASCII avoids the Unicode width-table lookup). */
13
- export declare function graphemeWidth(text: string): number;
14
- export interface VisualCell extends EditorGrapheme {
15
- readonly column: number;
16
- readonly width: number;
17
- }
18
- export interface VisualPosition {
19
- readonly index: number;
20
- readonly row: number;
21
- readonly column: number;
22
- }
23
- export interface EditorVisualMap {
24
- readonly rows: VisualCell[][];
25
- readonly positions: VisualPosition[];
26
- readonly cursor: VisualPosition;
27
- }
28
- /**
29
- * Map graphemes to hard-wrapped rows, sharing tab stops and caret reservation.
30
- *
31
- * THE TAB STOP IS THE TERMINAL'S (`TAB_WIDTH`), NOT AN EDITOR-SIZED FOUR. It
32
- * used to be four, while the transcript handed the raw `\t` to `<Text>` and
33
- * the terminal painted it at eight: the same pasted table sat one column off
34
- * from itself before and after sending. A tab that would cross the right edge
35
- * is still clipped to the row (the caret cannot point past the last cell), so
36
- * a tab STRADDLING the wrap is the one shape where the draft and the stored
37
- * text can differ by the remainder of the advance.
38
- */
39
- export declare function buildEditorVisualMap(input: {
40
- buffer: string;
41
- cols: number;
42
- cursor: number;
43
- active?: boolean;
44
- }): EditorVisualMap;
45
- /** Move to the closest boundary at or left of the preferred display column. */
46
- export declare function moveVisualCursor(input: {
47
- buffer: string;
48
- cursor: number;
49
- cols: number;
50
- direction: 'up' | 'down';
51
- preferredVisualColumn?: number;
52
- }): {
53
- cursor: number;
54
- preferredVisualColumn: number;
55
- } | null;
@@ -1,96 +0,0 @@
1
- /** Shared UTF-16 grapheme boundaries and terminal-cell layout for the editor. */
2
- import stringWidth from 'string-width';
3
- import { TAB_WIDTH } from './display-tab.js';
4
- const segmenter = new Intl.Segmenter(undefined, { granularity: 'grapheme' });
5
- /** Segment text without changing its UTF-16 offsets or stored whitespace. */
6
- export function graphemes(text) {
7
- return Array.from(segmenter.segment(text), ({ segment, index }) => ({
8
- text: segment, index, end: index + segment.length,
9
- }));
10
- }
11
- /** Snap an arbitrary UTF-16 offset to a complete grapheme boundary. */
12
- export function snapGrapheme(text, cursor, right = false) {
13
- const clamped = Math.max(0, Math.min(text.length, cursor));
14
- for (const part of segmenter.segment(text)) {
15
- const end = part.index + part.segment.length;
16
- if (clamped > part.index && clamped < end)
17
- return right ? end : part.index;
18
- if (part.index >= clamped)
19
- break;
20
- }
21
- return clamped;
22
- }
23
- /** Move one complete grapheme, leaving the two buffer edges unchanged. */
24
- export function stepGrapheme(text, cursor, direction) {
25
- if (direction === 'left')
26
- return snapGrapheme(text, Math.max(0, cursor - 1));
27
- return snapGrapheme(text, Math.min(text.length, cursor + 1), true);
28
- }
29
- /** Width of one grapheme (ASCII avoids the Unicode width-table lookup). */
30
- export function graphemeWidth(text) {
31
- if (text.length === 1 && text >= ' ' && text <= '~')
32
- return 1;
33
- return stringWidth(text);
34
- }
35
- /**
36
- * Map graphemes to hard-wrapped rows, sharing tab stops and caret reservation.
37
- *
38
- * THE TAB STOP IS THE TERMINAL'S (`TAB_WIDTH`), NOT AN EDITOR-SIZED FOUR. It
39
- * used to be four, while the transcript handed the raw `\t` to `<Text>` and
40
- * the terminal painted it at eight: the same pasted table sat one column off
41
- * from itself before and after sending. A tab that would cross the right edge
42
- * is still clipped to the row (the caret cannot point past the last cell), so
43
- * a tab STRADDLING the wrap is the one shape where the draft and the stored
44
- * text can differ by the remainder of the advance.
45
- */
46
- export function buildEditorVisualMap(input) {
47
- const cols = Math.max(1, Math.floor(input.cols));
48
- const cursor = snapGrapheme(input.buffer, input.cursor);
49
- const rows = [[]];
50
- const positions = [];
51
- let column = 0;
52
- const breakRow = () => { rows.push([]); column = 0; };
53
- const locate = (index) => {
54
- positions.push({ index, row: rows.length - 1, column });
55
- };
56
- for (const part of graphemes(input.buffer)) {
57
- if (part.text === '\n') {
58
- if (input.active !== false && part.index === cursor && column >= cols)
59
- breakRow();
60
- locate(part.index);
61
- breakRow();
62
- continue;
63
- }
64
- let width = part.text === '\t' ? Math.min(cols, TAB_WIDTH - column % TAB_WIDTH)
65
- : graphemeWidth(part.text);
66
- if (column > 0 && column + width > cols) {
67
- breakRow();
68
- if (part.text === '\t')
69
- width = Math.min(cols, TAB_WIDTH);
70
- }
71
- locate(part.index);
72
- rows[rows.length - 1].push({ ...part,
73
- text: part.text === '\t' ? ' '.repeat(width) : part.text, column, width });
74
- column += width;
75
- }
76
- if (input.active !== false && cursor === input.buffer.length && column >= cols)
77
- breakRow();
78
- locate(input.buffer.length);
79
- const caret = positions.find((position) => position.index === cursor);
80
- return { rows, positions, cursor: caret };
81
- }
82
- /** Move to the closest boundary at or left of the preferred display column. */
83
- export function moveVisualCursor(input) {
84
- const map = buildEditorVisualMap(input);
85
- const row = map.cursor.row + (input.direction === 'up' ? -1 : 1);
86
- if (row < 0 || row >= map.rows.length)
87
- return null;
88
- const preferredVisualColumn = input.preferredVisualColumn ?? map.cursor.column;
89
- const candidates = map.positions.filter((position) => position.row === row);
90
- let target = candidates[0];
91
- for (const position of candidates) {
92
- if (position.column <= preferredVisualColumn)
93
- target = position;
94
- }
95
- return target ? { cursor: target.index, preferredVisualColumn } : null;
96
- }
@@ -1,108 +0,0 @@
1
- /**
2
- * Composer editor state — F3 of tui-input-flicker-fix (§3.4).
3
- *
4
- * Ink creates its container with tag `0` — a LEGACY React root
5
- * (`ink/build/ink.js:59-61`). In a legacy root, `setState` called outside a
6
- * React event handler is NOT batched: each call schedules and immediately
7
- * flushes a synchronous render. `useInput`'s callback runs from a stdin
8
- * `'data'` listener, which is outside React entirely, so `PromptInput.insert`'s
9
- * five `setState` calls became five commits, five whole-tree Yoga layouts, and
10
- * — through Ink's 32 ms leading+trailing throttle — TWO full-frame repaints per
11
- * printable character (§2 R3). The flicker got worse the faster the user typed,
12
- * which is exactly what the report described.
13
- *
14
- * Collapsing the five always-together pieces of state into one reducer makes a
15
- * keystroke cost one commit. `fileMatches` deliberately stays a separate
16
- * `useState` in the component: it is written from the debounced async glob
17
- * effect, not from the key handler, so folding it in here would couple two
18
- * unrelated update sources.
19
- *
20
- * THE RULE A REVIEWER SHOULD CHECK LINE BY LINE: every branch of the `useInput`
21
- * callback performs at most ONE `dispatch` and then returns.
22
- *
23
- * Extracted from the component so it is unit-testable without mounting Ink.
24
- */
25
- import { type PasteRecord } from './paste-tokens.js';
26
- export interface EditorState {
27
- buffer: string;
28
- cursor: number;
29
- preferredVisualColumn?: number;
30
- historyIndex: number | null;
31
- dismissed: boolean;
32
- sel: number;
33
- /**
34
- * Payloads for the collapse tokens currently in `buffer`
35
- * (tui-paste-handling section 5.3).
36
- *
37
- * Pruned to `referencedIds(buffer)` on EVERY buffer-changing action and
38
- * emptied by `clear` (I-7). Without both, a payload outlives the draft that
39
- * referenced it, unbounded, for the whole session.
40
- */
41
- pastes: ReadonlyMap<number, PasteRecord>;
42
- }
43
- /**
44
- * One run of an `input` chunk that mixed typing and pasting.
45
- *
46
- * THE `id` IS ALLOCATED BY THE CALLER (P1-5). React may run a reducer more than
47
- * once for a single action -- eager evaluation in `dispatchSetState`, base-queue
48
- * replay after a bailout, StrictMode -- so a counter read and written inside one
49
- * would skip ids and produce two computed states differing in the token TEXT.
50
- * `PromptInput` calls `allocatePasteId()` while building these segments, and the
51
- * reducer stays a pure function of `(state, action)`.
52
- */
53
- export type InputSegment = {
54
- readonly kind: 'text';
55
- readonly text: string;
56
- } | {
57
- readonly kind: 'paste';
58
- readonly text: string;
59
- readonly id: number;
60
- };
61
- /**
62
- * A `type` and not an `interface` because it is a discriminated union — the one
63
- * documented exception to this package's interface-first convention.
64
- */
65
- export type EditorAction = {
66
- type: 'insert';
67
- text: string;
68
- } | {
69
- type: 'replace';
70
- buffer: string;
71
- cursor: number;
72
- } | {
73
- type: 'backspace';
74
- } | {
75
- type: 'delete';
76
- } | {
77
- type: 'moveCursor';
78
- cursor: number;
79
- preferredVisualColumn?: number;
80
- } | {
81
- type: 'recall';
82
- buffer: string;
83
- cursor: number;
84
- historyIndex: number | null;
85
- } | {
86
- type: 'select';
87
- sel: number;
88
- } | {
89
- type: 'dismiss';
90
- } | {
91
- type: 'clear';
92
- }
93
- /** Only local reducer-planned states may be adopted; prune token payloads again. */
94
- | {
95
- type: 'adopt';
96
- state: EditorState;
97
- }
98
- /**
99
- * ONE chunk of stdin, already split into ordered runs. The only new action,
100
- * and it is what keeps the one-dispatch-per-key rule true for a chunk that
101
- * carried both a paste and the keystrokes beside it.
102
- */
103
- | {
104
- type: 'input';
105
- segments: InputSegment[];
106
- };
107
- export declare const INITIAL_EDITOR_STATE: EditorState;
108
- export declare function editorReducer(state: EditorState, action: EditorAction): EditorState;