@aragon-agent/cli 0.6.47 → 0.6.48

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (775) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/README.md +27 -6
  3. package/dist/agent/coalesce.d.ts +1 -1
  4. package/dist/agent/controller.d.ts +21 -21
  5. package/dist/agent/controller.js +13 -13
  6. package/dist/agent/conversation-reset.d.ts +1 -1
  7. package/dist/agent/governance-wiring.d.ts +6 -6
  8. package/dist/agent/governance-wiring.js +4 -4
  9. package/dist/agent/headless.d.ts +5 -5
  10. package/dist/agent/headless.js +4 -4
  11. package/dist/agent/job-notices.d.ts +1 -1
  12. package/dist/agent/job-notices.js +1 -1
  13. package/dist/agent/kit-apply.d.ts +3 -3
  14. package/dist/agent/kit-apply.js +3 -3
  15. package/dist/agent/model-profile-settings.d.ts +2 -2
  16. package/dist/agent/model-profile-settings.js +6 -6
  17. package/dist/agent/prompt-options.d.ts +1 -1
  18. package/dist/agent/system-prompt.d.ts +1 -1
  19. package/dist/{ui → app}/App.d.ts +9 -9
  20. package/dist/{ui → app}/App.js +79 -79
  21. package/dist/{ui → app}/use-startup-notices.d.ts +1 -1
  22. package/dist/{ui → app}/use-startup-notices.js +2 -2
  23. package/dist/cli.js +29 -29
  24. package/dist/commands/agents-command.js +1 -1
  25. package/dist/commands/builtins.js +9 -9
  26. package/dist/commands/governance-command.js +2 -2
  27. package/dist/commands/governance-runs-table.js +1 -1
  28. package/dist/commands/kit-command.js +1 -1
  29. package/dist/commands/perf.d.ts +3 -3
  30. package/dist/commands/perf.js +1 -1
  31. package/dist/commands/registry.d.ts +8 -8
  32. package/dist/commands/skills.js +2 -2
  33. package/dist/commands/team-command.js +1 -1
  34. package/dist/compaction/archive.d.ts +1 -1
  35. package/dist/compaction/archive.js +1 -1
  36. package/dist/compaction/child.d.ts +3 -3
  37. package/dist/compaction/child.js +4 -4
  38. package/dist/compaction/command.js +5 -5
  39. package/dist/compaction/compactor.d.ts +6 -6
  40. package/dist/compaction/compactor.js +6 -6
  41. package/dist/compaction/context-command.js +1 -1
  42. package/dist/compaction/digest.js +1 -1
  43. package/dist/compaction/memory-input.js +1 -1
  44. package/dist/compaction/memory-validation.js +1 -1
  45. package/dist/compaction/memory.js +1 -1
  46. package/dist/compaction/summarize-call.js +1 -1
  47. package/dist/compaction/summary-prompt.js +1 -1
  48. package/dist/compaction/tail-budget.js +2 -2
  49. package/dist/compaction/wiring.d.ts +5 -5
  50. package/dist/compaction/wiring.js +2 -2
  51. package/dist/config/cli-commands.d.ts +1 -1
  52. package/dist/config/cli-commands.js +3 -3
  53. package/dist/config/env.d.ts +1 -1
  54. package/dist/config/env.js +4 -4
  55. package/dist/config/load.d.ts +2 -2
  56. package/dist/config/load.js +6 -6
  57. package/dist/config/migrate-state-out-of-config.js +1 -1
  58. package/dist/config/model-profile-store.d.ts +4 -54
  59. package/dist/config/model-profile-store.js +3 -3
  60. package/dist/config/prompt-history.js +1 -1
  61. package/dist/config/store.d.ts +2 -2
  62. package/dist/config/store.js +3 -3
  63. package/dist/diagnostics/doctor.js +4 -4
  64. package/dist/exec/bridge/decisions.d.ts +1 -1
  65. package/dist/exec/bridge/human-answers.d.ts +1 -1
  66. package/dist/exec/bridge/human-answers.js +1 -1
  67. package/dist/exec/bridge/protocol.d.ts +1 -1
  68. package/dist/exec/bridge/server.js +1 -1
  69. package/dist/exec/events.d.ts +2 -2
  70. package/dist/exec/index.d.ts +1 -1
  71. package/dist/exec/index.js +1 -1
  72. package/dist/exec/permission.js +1 -1
  73. package/dist/exec/runner.d.ts +3 -3
  74. package/dist/exec/runner.js +2 -2
  75. package/dist/exec/threads/runtime.js +1 -1
  76. package/dist/fast/digest.d.ts +1 -1
  77. package/dist/fast/digest.js +1 -1
  78. package/dist/fast/frames.d.ts +1 -1
  79. package/dist/fast/frames.js +1 -1
  80. package/dist/fast/prompt.d.ts +1 -1
  81. package/dist/fast/prompt.js +1 -1
  82. package/dist/fast/review-call.js +1 -1
  83. package/dist/fast/reviewer.d.ts +3 -3
  84. package/dist/fast/reviewer.js +1 -1
  85. package/dist/fast/summary-call.d.ts +3 -3
  86. package/dist/fast/summary-call.js +2 -2
  87. package/dist/fast/summary-prompt.d.ts +1 -1
  88. package/dist/fast/summary-prompt.js +1 -1
  89. package/dist/fast/wiring.d.ts +4 -4
  90. package/dist/fast/wiring.js +1 -1
  91. package/dist/governance/card-normalize.d.ts +1 -1
  92. package/dist/governance/copy.d.ts +1 -1
  93. package/dist/governance/copy.js +2 -2
  94. package/dist/governance/engine/artifact-persist.d.ts +1 -1
  95. package/dist/governance/engine/budget.d.ts +1 -1
  96. package/dist/governance/engine/budget.js +1 -1
  97. package/dist/governance/engine/cards.d.ts +1 -1
  98. package/dist/governance/engine/digest.js +1 -1
  99. package/dist/governance/engine/engine-core.d.ts +5 -5
  100. package/dist/governance/engine/engine-core.js +1 -1
  101. package/dist/governance/engine/engine.d.ts +1 -1
  102. package/dist/governance/engine/engine.js +1 -1
  103. package/dist/governance/engine/estimate.d.ts +1 -1
  104. package/dist/governance/engine/estimate.js +1 -1
  105. package/dist/governance/engine/inspector.js +2 -2
  106. package/dist/governance/engine/integration.d.ts +1 -1
  107. package/dist/governance/engine/lifecycle.d.ts +1 -1
  108. package/dist/governance/engine/lifecycle.js +1 -1
  109. package/dist/governance/engine/phase-members.d.ts +1 -1
  110. package/dist/governance/engine/phase-planner.d.ts +1 -1
  111. package/dist/governance/engine/phase-planner.js +1 -1
  112. package/dist/governance/engine/rebuild.d.ts +1 -1
  113. package/dist/governance/engine/report.d.ts +1 -1
  114. package/dist/governance/engine/report.js +1 -1
  115. package/dist/governance/engine/run-digest.d.ts +1 -1
  116. package/dist/governance/engine/spec-builder.d.ts +2 -2
  117. package/dist/governance/engine/spec-builder.js +2 -2
  118. package/dist/governance/engine/stage-runner.js +2 -2
  119. package/dist/governance/engine/start-input.d.ts +1 -1
  120. package/dist/governance/engine/start-input.js +1 -1
  121. package/dist/governance/engine/state-machine.d.ts +1 -1
  122. package/dist/governance/engine/state-machine.js +3 -3
  123. package/dist/governance/engine/submission-queries.d.ts +1 -1
  124. package/dist/governance/engine/submission-render.d.ts +1 -1
  125. package/dist/governance/engine/submissions.d.ts +1 -1
  126. package/dist/governance/engine/submissions.js +1 -1
  127. package/dist/governance/engine/visibility.d.ts +1 -1
  128. package/dist/governance/engine/visibility.js +1 -1
  129. package/dist/governance/posture-transition.d.ts +2 -2
  130. package/dist/governance/posture-transition.js +1 -1
  131. package/dist/governance/profiles.d.ts +1 -1
  132. package/dist/governance/prompts/orchestrator-block.d.ts +2 -2
  133. package/dist/governance/prompts/orchestrator-block.js +2 -2
  134. package/dist/governance/prompts/plan-addendum.d.ts +1 -1
  135. package/dist/governance/prompts/plan-addendum.js +1 -1
  136. package/dist/governance/prompts/role-blocks.d.ts +2 -2
  137. package/dist/governance/prompts/role-blocks.js +1 -1
  138. package/dist/governance/report-reader.js +1 -1
  139. package/dist/governance/roles.d.ts +1 -1
  140. package/dist/governance/rules/claims.d.ts +1 -1
  141. package/dist/governance/rules/claims.js +1 -1
  142. package/dist/governance/rules/elimination.d.ts +1 -1
  143. package/dist/governance/rules/elimination.js +1 -1
  144. package/dist/governance/rules/failure-analysis.d.ts +2 -2
  145. package/dist/governance/rules/failure-analysis.js +1 -1
  146. package/dist/governance/rules/ledger-replay.d.ts +1 -1
  147. package/dist/governance/rules/ledger-state.d.ts +1 -1
  148. package/dist/governance/rules/ledger-state.js +1 -1
  149. package/dist/governance/rules/ledger.d.ts +2 -2
  150. package/dist/governance/rules/ledger.js +2 -2
  151. package/dist/governance/rules/rca.d.ts +1 -1
  152. package/dist/governance/rules/rca.js +1 -1
  153. package/dist/governance/rules/settlement.d.ts +2 -2
  154. package/dist/governance/rules/settlement.js +2 -2
  155. package/dist/governance/rules/suspicion.d.ts +1 -1
  156. package/dist/governance/store/artifacts.d.ts +1 -1
  157. package/dist/governance/store/artifacts.js +1 -1
  158. package/dist/governance/store/events-log.d.ts +1 -1
  159. package/dist/governance/store/run-store.d.ts +1 -1
  160. package/dist/governance/store/run-store.js +1 -1
  161. package/dist/governance/store/scoreboard-export.d.ts +1 -1
  162. package/dist/governance/tools/child-tools.d.ts +1 -1
  163. package/dist/governance/tools/guard.d.ts +1 -1
  164. package/dist/governance/tools/guard.js +1 -1
  165. package/dist/governance/tools/inspector-tools.d.ts +2 -2
  166. package/dist/governance/tools/inspector-tools.js +2 -2
  167. package/dist/governance/tools/lead-tools.d.ts +1 -1
  168. package/dist/governance/tools/lead-tools.js +1 -1
  169. package/dist/governance/tools/normalize-util.js +1 -1
  170. package/dist/governance/tools/scan-incomplete.js +1 -1
  171. package/dist/governance/tools/shared-tools.d.ts +1 -1
  172. package/dist/governance/tools/shared-tools.js +1 -1
  173. package/dist/governance/tools/submit-normalizers.d.ts +1 -1
  174. package/dist/governance/tools/submit-normalizers.js +1 -1
  175. package/dist/governance/tools/submit-tools.d.ts +1 -1
  176. package/dist/logging/cli-commands.js +1 -1
  177. package/dist/logging/install.d.ts +1 -1
  178. package/dist/logging/install.js +3 -3
  179. package/dist/logging/logger.d.ts +2 -2
  180. package/dist/logging/logger.js +31 -2
  181. package/dist/proc/kill-tree.js +1 -1
  182. package/dist/proc/log-mirror.js +1 -1
  183. package/dist/proc/log-ring.js +2 -2
  184. package/dist/proc/notices.d.ts +1 -1
  185. package/dist/proc/notices.js +2 -2
  186. package/dist/proc/prompt.d.ts +1 -1
  187. package/dist/proc/prompt.js +1 -1
  188. package/dist/proc/readiness.js +1 -1
  189. package/dist/proc/supervisor.d.ts +1 -1
  190. package/dist/proc/supervisor.js +3 -3
  191. package/dist/proc/wait.d.ts +1 -1
  192. package/dist/proc/wait.js +1 -1
  193. package/dist/prompts/command.d.ts +1 -1
  194. package/dist/prompts/command.js +1 -1
  195. package/dist/prompts/normalize.d.ts +1 -1
  196. package/dist/prompts/normalize.js +1 -1
  197. package/dist/prompts/resolve.d.ts +1 -1
  198. package/dist/prompts/store.d.ts +2 -12
  199. package/dist/prompts/store.js +6 -60
  200. package/dist/session/checkpoint.d.ts +2 -2
  201. package/dist/session/clear-archive.d.ts +2 -2
  202. package/dist/session/persist.d.ts +2 -2
  203. package/dist/session/persist.js +1 -1
  204. package/dist/session/startup-session.d.ts +2 -2
  205. package/dist/session/validate-session.js +3 -3
  206. package/dist/skills/service.d.ts +2 -2
  207. package/dist/team/bus.d.ts +1 -1
  208. package/dist/team/bus.js +1 -1
  209. package/dist/team/child-reviewer.d.ts +2 -2
  210. package/dist/team/child-reviewer.js +1 -1
  211. package/dist/team/comm-tools.js +1 -1
  212. package/dist/team/dispatch-gate.js +1 -1
  213. package/dist/team/forced-dispatch.js +1 -1
  214. package/dist/team/forced-mode.d.ts +1 -1
  215. package/dist/team/forced-prompt.d.ts +1 -1
  216. package/dist/team/forced-prompt.js +1 -1
  217. package/dist/team/normalize.d.ts +1 -1
  218. package/dist/team/normalize.js +1 -1
  219. package/dist/team/overseer.d.ts +3 -3
  220. package/dist/team/overseer.js +3 -3
  221. package/dist/team/prompt.d.ts +1 -1
  222. package/dist/team/prompt.js +1 -1
  223. package/dist/team/report.d.ts +2 -2
  224. package/dist/team/report.js +2 -2
  225. package/dist/team/retry.d.ts +1 -1
  226. package/dist/team/retry.js +1 -1
  227. package/dist/team/runtime.d.ts +4 -4
  228. package/dist/team/runtime.js +2 -2
  229. package/dist/team/settled.d.ts +2 -2
  230. package/dist/team/subagent.d.ts +4 -4
  231. package/dist/team/subagent.js +5 -5
  232. package/dist/team/task-tool.d.ts +1 -1
  233. package/dist/team/task-tool.js +1 -1
  234. package/dist/todo/normalize.d.ts +1 -1
  235. package/dist/todo/normalize.js +1 -1
  236. package/dist/todo/prompt.d.ts +1 -1
  237. package/dist/todo/prompt.js +1 -1
  238. package/dist/todo/store.d.ts +1 -1
  239. package/dist/todo/store.js +2 -2
  240. package/dist/todo/todo-tool.d.ts +1 -1
  241. package/dist/todo/todo-tool.js +2 -2
  242. package/dist/tools/bash-tool.d.ts +1 -1
  243. package/dist/tools/bash-tool.js +2 -2
  244. package/dist/tools/diff.d.ts +1 -1
  245. package/dist/tools/diff.js +1 -1
  246. package/dist/tools/file-change-store.d.ts +1 -1
  247. package/dist/tools/fs-tools.d.ts +2 -2
  248. package/dist/tools/fs-tools.js +1 -1
  249. package/dist/tools/index.d.ts +3 -3
  250. package/dist/tools/index.js +1 -1
  251. package/dist/tools/job-tools.d.ts +2 -2
  252. package/dist/tools/job-tools.js +4 -4
  253. package/dist/tools/plan-tools.d.ts +1 -1
  254. package/dist/tools/plan-tools.js +1 -1
  255. package/dist/tools/proc-tools.d.ts +1 -1
  256. package/dist/tools/proc-tools.js +2 -2
  257. package/dist/update/classify-failure.d.ts +1 -1
  258. package/dist/update/install-lock.js +1 -1
  259. package/dist/update/install-source.d.ts +1 -1
  260. package/dist/update/installer.js +2 -2
  261. package/dist/update/npm-view.d.ts +1 -1
  262. package/dist/update/npm-view.js +1 -1
  263. package/dist/update/registry.d.ts +1 -1
  264. package/dist/update/registry.js +1 -1
  265. package/dist/update/service.d.ts +2 -2
  266. package/dist/update/service.js +2 -2
  267. package/package.json +7 -7
  268. package/dist/agent/agent-mode.d.ts +0 -108
  269. package/dist/agent/agent-mode.js +0 -121
  270. package/dist/agent/entry-limits.d.ts +0 -65
  271. package/dist/agent/entry-limits.js +0 -133
  272. package/dist/agent/governance-view.d.ts +0 -40
  273. package/dist/agent/governance-view.js +0 -40
  274. package/dist/agent/invocation-card.d.ts +0 -77
  275. package/dist/agent/invocation-card.js +0 -169
  276. package/dist/agent/model-probe-limits.d.ts +0 -39
  277. package/dist/agent/model-probe-limits.js +0 -25
  278. package/dist/agent/model-probe.d.ts +0 -104
  279. package/dist/agent/model-probe.js +0 -391
  280. package/dist/agent/queued-messages.d.ts +0 -23
  281. package/dist/agent/queued-messages.js +0 -49
  282. package/dist/agent/reducer.d.ts +0 -857
  283. package/dist/agent/reducer.js +0 -1646
  284. package/dist/agent/retry-view.d.ts +0 -68
  285. package/dist/agent/retry-view.js +0 -95
  286. package/dist/agent/usage.d.ts +0 -47
  287. package/dist/agent/usage.js +0 -84
  288. package/dist/compaction/limits.d.ts +0 -61
  289. package/dist/compaction/limits.js +0 -64
  290. package/dist/compaction/meter.d.ts +0 -276
  291. package/dist/compaction/meter.js +0 -512
  292. package/dist/compaction/pressure.d.ts +0 -163
  293. package/dist/compaction/pressure.js +0 -199
  294. package/dist/compaction/reason-text.d.ts +0 -36
  295. package/dist/compaction/reason-text.js +0 -78
  296. package/dist/compaction/types.d.ts +0 -360
  297. package/dist/compaction/types.js +0 -22
  298. package/dist/config/governance-config.d.ts +0 -125
  299. package/dist/config/governance-config.js +0 -164
  300. package/dist/config/kit-resolution.d.ts +0 -93
  301. package/dist/config/kit-resolution.js +0 -226
  302. package/dist/config/model-kits.d.ts +0 -225
  303. package/dist/config/model-kits.js +0 -302
  304. package/dist/config/model-profile-resolution.d.ts +0 -28
  305. package/dist/config/model-profile-resolution.js +0 -88
  306. package/dist/config/model-profiles.d.ts +0 -103
  307. package/dist/config/model-profiles.js +0 -188
  308. package/dist/config/schema.d.ts +0 -1645
  309. package/dist/config/schema.js +0 -1383
  310. package/dist/fast/limits.d.ts +0 -152
  311. package/dist/fast/limits.js +0 -152
  312. package/dist/fast/resolve.d.ts +0 -44
  313. package/dist/fast/resolve.js +0 -107
  314. package/dist/fast/task-summary-types.d.ts +0 -66
  315. package/dist/fast/task-summary-types.js +0 -17
  316. package/dist/fast/types.d.ts +0 -141
  317. package/dist/fast/types.js +0 -14
  318. package/dist/governance/governed-dispatch.d.ts +0 -19
  319. package/dist/governance/governed-dispatch.js +0 -17
  320. package/dist/governance/limits.d.ts +0 -107
  321. package/dist/governance/limits.js +0 -131
  322. package/dist/governance/posture.d.ts +0 -35
  323. package/dist/governance/posture.js +0 -59
  324. package/dist/governance/rules/events-table.d.ts +0 -46
  325. package/dist/governance/rules/events-table.js +0 -94
  326. package/dist/governance/types.d.ts +0 -661
  327. package/dist/governance/types.js +0 -27
  328. package/dist/input/control-sequences.d.ts +0 -71
  329. package/dist/input/control-sequences.js +0 -222
  330. package/dist/input/csiu-keys.d.ts +0 -66
  331. package/dist/input/csiu-keys.js +0 -181
  332. package/dist/input/cursor-report.d.ts +0 -61
  333. package/dist/input/cursor-report.js +0 -97
  334. package/dist/input/enter-sequences.d.ts +0 -64
  335. package/dist/input/enter-sequences.js +0 -153
  336. package/dist/input/interrupt-gesture.d.ts +0 -18
  337. package/dist/input/interrupt-gesture.js +0 -19
  338. package/dist/input/keyboard-enhancement.d.ts +0 -42
  339. package/dist/input/keyboard-enhancement.js +0 -65
  340. package/dist/input/keymap.d.ts +0 -20
  341. package/dist/input/keymap.js +0 -99
  342. package/dist/input/limits.d.ts +0 -118
  343. package/dist/input/limits.js +0 -109
  344. package/dist/input/mouse-events.d.ts +0 -87
  345. package/dist/input/mouse-events.js +0 -212
  346. package/dist/input/paste-parse.d.ts +0 -83
  347. package/dist/input/paste-parse.js +0 -107
  348. package/dist/input/pointer-router.d.ts +0 -11
  349. package/dist/input/pointer-router.js +0 -14
  350. package/dist/input/stdin-filter.d.ts +0 -112
  351. package/dist/input/stdin-filter.js +0 -657
  352. package/dist/input/win32-input-mode.d.ts +0 -61
  353. package/dist/input/win32-input-mode.js +0 -269
  354. package/dist/logging/levels.d.ts +0 -40
  355. package/dist/logging/levels.js +0 -59
  356. package/dist/logging/secret-registry.d.ts +0 -32
  357. package/dist/logging/secret-registry.js +0 -73
  358. package/dist/proc/limits.d.ts +0 -214
  359. package/dist/proc/limits.js +0 -221
  360. package/dist/proc/progress.d.ts +0 -47
  361. package/dist/proc/progress.js +0 -163
  362. package/dist/proc/types.d.ts +0 -269
  363. package/dist/proc/types.js +0 -15
  364. package/dist/proc/wait-view.d.ts +0 -65
  365. package/dist/proc/wait-view.js +0 -66
  366. package/dist/prompts/copy.d.ts +0 -89
  367. package/dist/prompts/copy.js +0 -131
  368. package/dist/prompts/fill.d.ts +0 -51
  369. package/dist/prompts/fill.js +0 -46
  370. package/dist/prompts/limits.d.ts +0 -53
  371. package/dist/prompts/limits.js +0 -53
  372. package/dist/prompts/search.d.ts +0 -58
  373. package/dist/prompts/search.js +0 -146
  374. package/dist/prompts/types.d.ts +0 -204
  375. package/dist/prompts/types.js +0 -13
  376. package/dist/team/activity.d.ts +0 -67
  377. package/dist/team/activity.js +0 -130
  378. package/dist/team/limits.d.ts +0 -308
  379. package/dist/team/limits.js +0 -330
  380. package/dist/team/model.d.ts +0 -104
  381. package/dist/team/model.js +0 -150
  382. package/dist/team/panel-rows.d.ts +0 -48
  383. package/dist/team/panel-rows.js +0 -75
  384. package/dist/team/timeline.d.ts +0 -74
  385. package/dist/team/timeline.js +0 -101
  386. package/dist/team/types.d.ts +0 -354
  387. package/dist/team/types.js +0 -13
  388. package/dist/todo/acceptance.d.ts +0 -120
  389. package/dist/todo/acceptance.js +0 -399
  390. package/dist/todo/follow-through.d.ts +0 -138
  391. package/dist/todo/follow-through.js +0 -248
  392. package/dist/todo/limits.d.ts +0 -152
  393. package/dist/todo/limits.js +0 -152
  394. package/dist/todo/panel-rows.d.ts +0 -45
  395. package/dist/todo/panel-rows.js +0 -70
  396. package/dist/todo/plan-sections.d.ts +0 -60
  397. package/dist/todo/plan-sections.js +0 -108
  398. package/dist/todo/row-window.d.ts +0 -51
  399. package/dist/todo/row-window.js +0 -107
  400. package/dist/todo/types.d.ts +0 -124
  401. package/dist/todo/types.js +0 -12
  402. package/dist/tools/human-input.d.ts +0 -212
  403. package/dist/tools/human-input.js +0 -265
  404. package/dist/tools/patch.d.ts +0 -115
  405. package/dist/tools/patch.js +0 -453
  406. package/dist/tools/terminal-output.d.ts +0 -115
  407. package/dist/tools/terminal-output.js +0 -201
  408. package/dist/tools/tool-output-store.d.ts +0 -68
  409. package/dist/tools/tool-output-store.js +0 -102
  410. package/dist/ui/ActivityLine.d.ts +0 -26
  411. package/dist/ui/ActivityLine.js +0 -51
  412. package/dist/ui/AutocompletePopup.d.ts +0 -23
  413. package/dist/ui/AutocompletePopup.js +0 -17
  414. package/dist/ui/BottomStatusRow.d.ts +0 -10
  415. package/dist/ui/BottomStatusRow.js +0 -9
  416. package/dist/ui/Composer.d.ts +0 -115
  417. package/dist/ui/Composer.js +0 -64
  418. package/dist/ui/GovernancePanel.d.ts +0 -50
  419. package/dist/ui/GovernancePanel.js +0 -77
  420. package/dist/ui/GovernanceRun.d.ts +0 -18
  421. package/dist/ui/GovernanceRun.js +0 -11
  422. package/dist/ui/Header.d.ts +0 -48
  423. package/dist/ui/Header.js +0 -27
  424. package/dist/ui/Logo.d.ts +0 -32
  425. package/dist/ui/Logo.js +0 -65
  426. package/dist/ui/Markdown.d.ts +0 -29
  427. package/dist/ui/Markdown.js +0 -116
  428. package/dist/ui/PromptCaret.d.ts +0 -11
  429. package/dist/ui/PromptCaret.js +0 -31
  430. package/dist/ui/PromptInput.d.ts +0 -192
  431. package/dist/ui/PromptInput.js +0 -689
  432. package/dist/ui/QueuePanel.d.ts +0 -8
  433. package/dist/ui/QueuePanel.js +0 -9
  434. package/dist/ui/QueueStatusRow.d.ts +0 -24
  435. package/dist/ui/QueueStatusRow.js +0 -51
  436. package/dist/ui/ScrollbackShell.d.ts +0 -132
  437. package/dist/ui/ScrollbackShell.js +0 -26
  438. package/dist/ui/SessionOpener.d.ts +0 -30
  439. package/dist/ui/SessionOpener.js +0 -12
  440. package/dist/ui/StatusBar.d.ts +0 -130
  441. package/dist/ui/StatusBar.js +0 -61
  442. package/dist/ui/TeamPanel.d.ts +0 -76
  443. package/dist/ui/TeamPanel.js +0 -103
  444. package/dist/ui/ToastStack.d.ts +0 -8
  445. package/dist/ui/ToastStack.js +0 -31
  446. package/dist/ui/TodoPanel.d.ts +0 -52
  447. package/dist/ui/TodoPanel.js +0 -214
  448. package/dist/ui/Transcript.d.ts +0 -105
  449. package/dist/ui/Transcript.js +0 -258
  450. package/dist/ui/UpdateLine.d.ts +0 -44
  451. package/dist/ui/UpdateLine.js +0 -129
  452. package/dist/ui/activity-phrases.d.ts +0 -33
  453. package/dist/ui/activity-phrases.js +0 -50
  454. package/dist/ui/capabilities.d.ts +0 -27
  455. package/dist/ui/capabilities.js +0 -65
  456. package/dist/ui/clipboard-task.d.ts +0 -29
  457. package/dist/ui/clipboard-task.js +0 -66
  458. package/dist/ui/clipboard.d.ts +0 -31
  459. package/dist/ui/clipboard.js +0 -157
  460. package/dist/ui/color-runtime.d.ts +0 -5
  461. package/dist/ui/color-runtime.js +0 -29
  462. package/dist/ui/composer-input.d.ts +0 -38
  463. package/dist/ui/composer-input.js +0 -79
  464. package/dist/ui/composer-limits.d.ts +0 -30
  465. package/dist/ui/composer-limits.js +0 -45
  466. package/dist/ui/composer-rows.d.ts +0 -73
  467. package/dist/ui/composer-rows.js +0 -129
  468. package/dist/ui/console-bridge.d.ts +0 -19
  469. package/dist/ui/console-bridge.js +0 -52
  470. package/dist/ui/density.d.ts +0 -26
  471. package/dist/ui/density.js +0 -34
  472. package/dist/ui/display-tab.d.ts +0 -51
  473. package/dist/ui/display-tab.js +0 -82
  474. package/dist/ui/editor-navigation.d.ts +0 -55
  475. package/dist/ui/editor-navigation.js +0 -96
  476. package/dist/ui/editor-reducer.d.ts +0 -108
  477. package/dist/ui/editor-reducer.js +0 -187
  478. package/dist/ui/enter-frames.d.ts +0 -47
  479. package/dist/ui/enter-frames.js +0 -117
  480. package/dist/ui/entries/AssistantEntry.d.ts +0 -37
  481. package/dist/ui/entries/AssistantEntry.js +0 -43
  482. package/dist/ui/entries/CompactionCard.d.ts +0 -88
  483. package/dist/ui/entries/CompactionCard.js +0 -222
  484. package/dist/ui/entries/DiffView.d.ts +0 -61
  485. package/dist/ui/entries/DiffView.js +0 -103
  486. package/dist/ui/entries/EntryFrame.d.ts +0 -23
  487. package/dist/ui/entries/EntryFrame.js +0 -6
  488. package/dist/ui/entries/FastCard.d.ts +0 -53
  489. package/dist/ui/entries/FastCard.js +0 -105
  490. package/dist/ui/entries/GovernanceCard.d.ts +0 -30
  491. package/dist/ui/entries/GovernanceCard.js +0 -32
  492. package/dist/ui/entries/InvocationCard.d.ts +0 -20
  493. package/dist/ui/entries/InvocationCard.js +0 -32
  494. package/dist/ui/entries/QueuedEntry.d.ts +0 -27
  495. package/dist/ui/entries/QueuedEntry.js +0 -33
  496. package/dist/ui/entries/RetryCard.d.ts +0 -56
  497. package/dist/ui/entries/RetryCard.js +0 -60
  498. package/dist/ui/entries/ServiceCard.d.ts +0 -82
  499. package/dist/ui/entries/ServiceCard.js +0 -151
  500. package/dist/ui/entries/TeamCard.d.ts +0 -55
  501. package/dist/ui/entries/TeamCard.js +0 -94
  502. package/dist/ui/entries/TodoCard.d.ts +0 -54
  503. package/dist/ui/entries/TodoCard.js +0 -98
  504. package/dist/ui/entries/ToolCard.d.ts +0 -81
  505. package/dist/ui/entries/ToolCard.js +0 -169
  506. package/dist/ui/entries/ToolPreview.d.ts +0 -59
  507. package/dist/ui/entries/ToolPreview.js +0 -208
  508. package/dist/ui/entries/UserEntry.d.ts +0 -36
  509. package/dist/ui/entries/UserEntry.js +0 -57
  510. package/dist/ui/entries/WaitCard.d.ts +0 -37
  511. package/dist/ui/entries/WaitCard.js +0 -92
  512. package/dist/ui/exit-snapshot.d.ts +0 -43
  513. package/dist/ui/exit-snapshot.js +0 -26
  514. package/dist/ui/frame-differ.d.ts +0 -166
  515. package/dist/ui/frame-differ.js +0 -354
  516. package/dist/ui/frame-observer.d.ts +0 -17
  517. package/dist/ui/frame-observer.js +0 -94
  518. package/dist/ui/frame-parser.d.ts +0 -7
  519. package/dist/ui/frame-parser.js +0 -18
  520. package/dist/ui/gauge.d.ts +0 -39
  521. package/dist/ui/gauge.js +0 -55
  522. package/dist/ui/glyphs.d.ts +0 -178
  523. package/dist/ui/glyphs.js +0 -165
  524. package/dist/ui/governance-copy.d.ts +0 -69
  525. package/dist/ui/governance-copy.js +0 -104
  526. package/dist/ui/governance-status.d.ts +0 -145
  527. package/dist/ui/governance-status.js +0 -326
  528. package/dist/ui/gradient.d.ts +0 -11
  529. package/dist/ui/gradient.js +0 -50
  530. package/dist/ui/ink-runtime.d.ts +0 -4
  531. package/dist/ui/ink-runtime.js +0 -51
  532. package/dist/ui/interaction-copy.d.ts +0 -84
  533. package/dist/ui/interaction-copy.js +0 -41
  534. package/dist/ui/interaction-hints.d.ts +0 -44
  535. package/dist/ui/interaction-hints.js +0 -97
  536. package/dist/ui/layout/AppShell.d.ts +0 -17
  537. package/dist/ui/layout/AppShell.js +0 -6
  538. package/dist/ui/layout/Gutter.d.ts +0 -67
  539. package/dist/ui/layout/Gutter.js +0 -42
  540. package/dist/ui/layout/MeasuredEntry.d.ts +0 -21
  541. package/dist/ui/layout/MeasuredEntry.js +0 -30
  542. package/dist/ui/layout/OverlayFrame.d.ts +0 -73
  543. package/dist/ui/layout/OverlayFrame.js +0 -110
  544. package/dist/ui/layout/ScrollIndicator.d.ts +0 -32
  545. package/dist/ui/layout/ScrollIndicator.js +0 -22
  546. package/dist/ui/layout/ScrollViewport.d.ts +0 -40
  547. package/dist/ui/layout/ScrollViewport.js +0 -222
  548. package/dist/ui/layout/agents-board.d.ts +0 -102
  549. package/dist/ui/layout/agents-board.js +0 -389
  550. package/dist/ui/layout/autocomplete.d.ts +0 -18
  551. package/dist/ui/layout/autocomplete.js +0 -26
  552. package/dist/ui/layout/budget.d.ts +0 -43
  553. package/dist/ui/layout/budget.js +0 -52
  554. package/dist/ui/layout/cells.d.ts +0 -61
  555. package/dist/ui/layout/cells.js +0 -156
  556. package/dist/ui/layout/document-layout.d.ts +0 -13
  557. package/dist/ui/layout/document-layout.js +0 -10
  558. package/dist/ui/layout/follow-state.d.ts +0 -138
  559. package/dist/ui/layout/follow-state.js +0 -148
  560. package/dist/ui/layout/frame.d.ts +0 -36
  561. package/dist/ui/layout/frame.js +0 -39
  562. package/dist/ui/layout/governance-board.d.ts +0 -121
  563. package/dist/ui/layout/governance-board.js +0 -382
  564. package/dist/ui/layout/governance-card.d.ts +0 -53
  565. package/dist/ui/layout/governance-card.js +0 -134
  566. package/dist/ui/layout/governance-chip.d.ts +0 -38
  567. package/dist/ui/layout/governance-chip.js +0 -64
  568. package/dist/ui/layout/governance-panel.d.ts +0 -85
  569. package/dist/ui/layout/governance-panel.js +0 -358
  570. package/dist/ui/layout/governance-roster.d.ts +0 -65
  571. package/dist/ui/layout/governance-roster.js +0 -275
  572. package/dist/ui/layout/header-hints.d.ts +0 -90
  573. package/dist/ui/layout/header-hints.js +0 -110
  574. package/dist/ui/layout/header-left.d.ts +0 -115
  575. package/dist/ui/layout/header-left.js +0 -206
  576. package/dist/ui/layout/invocation-card.d.ts +0 -41
  577. package/dist/ui/layout/invocation-card.js +0 -91
  578. package/dist/ui/layout/kit-chip.d.ts +0 -50
  579. package/dist/ui/layout/kit-chip.js +0 -81
  580. package/dist/ui/layout/overlay-window.d.ts +0 -43
  581. package/dist/ui/layout/overlay-window.js +0 -51
  582. package/dist/ui/layout/queue-layout.d.ts +0 -19
  583. package/dist/ui/layout/queue-layout.js +0 -26
  584. package/dist/ui/layout/rail.d.ts +0 -7
  585. package/dist/ui/layout/rail.js +0 -16
  586. package/dist/ui/layout/scroll-indicator.d.ts +0 -27
  587. package/dist/ui/layout/scroll-indicator.js +0 -36
  588. package/dist/ui/layout/scroll.d.ts +0 -37
  589. package/dist/ui/layout/scroll.js +0 -99
  590. package/dist/ui/layout/scrollbar-geometry.d.ts +0 -17
  591. package/dist/ui/layout/scrollbar-geometry.js +0 -13
  592. package/dist/ui/layout/session-chip.d.ts +0 -52
  593. package/dist/ui/layout/session-chip.js +0 -64
  594. package/dist/ui/layout/shortcut-panel-layout.d.ts +0 -191
  595. package/dist/ui/layout/shortcut-panel-layout.js +0 -321
  596. package/dist/ui/layout/status-detail-layout.d.ts +0 -9
  597. package/dist/ui/layout/status-detail-layout.js +0 -79
  598. package/dist/ui/layout/status-layout.d.ts +0 -140
  599. package/dist/ui/layout/status-layout.js +0 -262
  600. package/dist/ui/layout/task-summary-cell.d.ts +0 -61
  601. package/dist/ui/layout/task-summary-cell.js +0 -65
  602. package/dist/ui/layout/team-panel.d.ts +0 -18
  603. package/dist/ui/layout/team-panel.js +0 -25
  604. package/dist/ui/layout/team-row.d.ts +0 -139
  605. package/dist/ui/layout/team-row.js +0 -246
  606. package/dist/ui/layout/todo-layout.d.ts +0 -62
  607. package/dist/ui/layout/todo-layout.js +0 -102
  608. package/dist/ui/layout/useTerminalSize.d.ts +0 -13
  609. package/dist/ui/layout/useTerminalSize.js +0 -50
  610. package/dist/ui/layout/viewport-geometry.d.ts +0 -29
  611. package/dist/ui/layout/viewport-geometry.js +0 -28
  612. package/dist/ui/layout/virtual-window.d.ts +0 -112
  613. package/dist/ui/layout/virtual-window.js +0 -494
  614. package/dist/ui/layout/wait-bar.d.ts +0 -34
  615. package/dist/ui/layout/wait-bar.js +0 -48
  616. package/dist/ui/layout/wrap-rows.d.ts +0 -26
  617. package/dist/ui/layout/wrap-rows.js +0 -88
  618. package/dist/ui/live-clamp.d.ts +0 -14
  619. package/dist/ui/live-clamp.js +0 -46
  620. package/dist/ui/markdown-blocks.d.ts +0 -107
  621. package/dist/ui/markdown-blocks.js +0 -240
  622. package/dist/ui/overlays/AgentsBoardOverlay.d.ts +0 -57
  623. package/dist/ui/overlays/AgentsBoardOverlay.js +0 -183
  624. package/dist/ui/overlays/ConfirmDialog.d.ts +0 -31
  625. package/dist/ui/overlays/ConfirmDialog.js +0 -44
  626. package/dist/ui/overlays/GovernanceBoardOverlay.d.ts +0 -41
  627. package/dist/ui/overlays/GovernanceBoardOverlay.js +0 -76
  628. package/dist/ui/overlays/GovernanceSettingsPage.d.ts +0 -48
  629. package/dist/ui/overlays/GovernanceSettingsPage.js +0 -93
  630. package/dist/ui/overlays/HelpOverlay.d.ts +0 -29
  631. package/dist/ui/overlays/HelpOverlay.js +0 -232
  632. package/dist/ui/overlays/KitEditor.d.ts +0 -23
  633. package/dist/ui/overlays/KitEditor.js +0 -101
  634. package/dist/ui/overlays/KitManager.d.ts +0 -23
  635. package/dist/ui/overlays/KitManager.js +0 -104
  636. package/dist/ui/overlays/KitPicker.d.ts +0 -49
  637. package/dist/ui/overlays/KitPicker.js +0 -58
  638. package/dist/ui/overlays/ModelDiscoveryList.d.ts +0 -23
  639. package/dist/ui/overlays/ModelDiscoveryList.js +0 -161
  640. package/dist/ui/overlays/ModelPicker.d.ts +0 -26
  641. package/dist/ui/overlays/ModelPicker.js +0 -63
  642. package/dist/ui/overlays/ModelProfileEditor.d.ts +0 -29
  643. package/dist/ui/overlays/ModelProfileEditor.js +0 -168
  644. package/dist/ui/overlays/ModelProfilePicker.d.ts +0 -48
  645. package/dist/ui/overlays/ModelProfilePicker.js +0 -231
  646. package/dist/ui/overlays/PlanReviewOverlay.d.ts +0 -51
  647. package/dist/ui/overlays/PlanReviewOverlay.js +0 -132
  648. package/dist/ui/overlays/PromptEditorPage.d.ts +0 -48
  649. package/dist/ui/overlays/PromptEditorPage.js +0 -227
  650. package/dist/ui/overlays/PromptLibraryOverlay.d.ts +0 -37
  651. package/dist/ui/overlays/PromptLibraryOverlay.js +0 -191
  652. package/dist/ui/overlays/PromptPicker.d.ts +0 -36
  653. package/dist/ui/overlays/PromptPicker.js +0 -129
  654. package/dist/ui/overlays/PromptTextArea.d.ts +0 -86
  655. package/dist/ui/overlays/PromptTextArea.js +0 -141
  656. package/dist/ui/overlays/QuestionOverlay.d.ts +0 -39
  657. package/dist/ui/overlays/QuestionOverlay.js +0 -258
  658. package/dist/ui/overlays/QueueOverlay.d.ts +0 -22
  659. package/dist/ui/overlays/QueueOverlay.js +0 -79
  660. package/dist/ui/overlays/SettingsScreen.d.ts +0 -228
  661. package/dist/ui/overlays/SettingsScreen.js +0 -1037
  662. package/dist/ui/overlays/ShortcutPanel.d.ts +0 -39
  663. package/dist/ui/overlays/ShortcutPanel.js +0 -106
  664. package/dist/ui/overlays/TeamFanoutPage.d.ts +0 -51
  665. package/dist/ui/overlays/TeamFanoutPage.js +0 -90
  666. package/dist/ui/overlays/governance-settings.d.ts +0 -79
  667. package/dist/ui/overlays/governance-settings.js +0 -140
  668. package/dist/ui/overlays/kit-picker-state.d.ts +0 -87
  669. package/dist/ui/overlays/kit-picker-state.js +0 -136
  670. package/dist/ui/overlays/kit-settings-state.d.ts +0 -129
  671. package/dist/ui/overlays/kit-settings-state.js +0 -268
  672. package/dist/ui/overlays/model-probe-view.d.ts +0 -128
  673. package/dist/ui/overlays/model-probe-view.js +0 -225
  674. package/dist/ui/overlays/model-profile-state.d.ts +0 -177
  675. package/dist/ui/overlays/model-profile-state.js +0 -301
  676. package/dist/ui/overlays/prompt-library-state.d.ts +0 -162
  677. package/dist/ui/overlays/prompt-library-state.js +0 -335
  678. package/dist/ui/overlays/prompt-picker-state.d.ts +0 -71
  679. package/dist/ui/overlays/prompt-picker-state.js +0 -98
  680. package/dist/ui/overlays/team-fanout-state.d.ts +0 -106
  681. package/dist/ui/overlays/team-fanout-state.js +0 -155
  682. package/dist/ui/overlays/use-model-probe.d.ts +0 -30
  683. package/dist/ui/overlays/use-model-probe.js +0 -109
  684. package/dist/ui/palettes.d.ts +0 -112
  685. package/dist/ui/palettes.js +0 -130
  686. package/dist/ui/paste-frames.d.ts +0 -91
  687. package/dist/ui/paste-frames.js +0 -117
  688. package/dist/ui/paste-tokens.d.ts +0 -90
  689. package/dist/ui/paste-tokens.js +0 -147
  690. package/dist/ui/render-cache.d.ts +0 -81
  691. package/dist/ui/render-cache.js +0 -196
  692. package/dist/ui/render-governor.d.ts +0 -54
  693. package/dist/ui/render-governor.js +0 -78
  694. package/dist/ui/run-metrics.d.ts +0 -23
  695. package/dist/ui/run-metrics.js +0 -27
  696. package/dist/ui/run-status-row.d.ts +0 -63
  697. package/dist/ui/run-status-row.js +0 -54
  698. package/dist/ui/screen.d.ts +0 -107
  699. package/dist/ui/screen.js +0 -234
  700. package/dist/ui/scrollback/LiveTail.d.ts +0 -115
  701. package/dist/ui/scrollback/LiveTail.js +0 -48
  702. package/dist/ui/scrollback/band.d.ts +0 -114
  703. package/dist/ui/scrollback/band.js +0 -143
  704. package/dist/ui/scrollback/budget.d.ts +0 -90
  705. package/dist/ui/scrollback/budget.js +0 -100
  706. package/dist/ui/scrollback/canvas.d.ts +0 -100
  707. package/dist/ui/scrollback/canvas.js +0 -114
  708. package/dist/ui/scrollback/cursor-probe.d.ts +0 -71
  709. package/dist/ui/scrollback/cursor-probe.js +0 -133
  710. package/dist/ui/scrollback/drain.d.ts +0 -32
  711. package/dist/ui/scrollback/drain.js +0 -64
  712. package/dist/ui/scrollback/exit-summary.d.ts +0 -23
  713. package/dist/ui/scrollback/exit-summary.js +0 -25
  714. package/dist/ui/scrollback/limits.d.ts +0 -98
  715. package/dist/ui/scrollback/limits.js +0 -98
  716. package/dist/ui/scrollback/live-preview.d.ts +0 -34
  717. package/dist/ui/scrollback/live-preview.js +0 -130
  718. package/dist/ui/scrollback/overflow-print.d.ts +0 -108
  719. package/dist/ui/scrollback/overflow-print.js +0 -120
  720. package/dist/ui/scrollback/renderer.d.ts +0 -48
  721. package/dist/ui/scrollback/renderer.js +0 -186
  722. package/dist/ui/scrollback/scrollback-writer.d.ts +0 -174
  723. package/dist/ui/scrollback/scrollback-writer.js +0 -648
  724. package/dist/ui/scrollback/settled-boundary.d.ts +0 -42
  725. package/dist/ui/scrollback/settled-boundary.js +0 -109
  726. package/dist/ui/scrollback/tail-anchor.d.ts +0 -71
  727. package/dist/ui/scrollback/tail-anchor.js +0 -79
  728. package/dist/ui/scrollback/tail-window.d.ts +0 -73
  729. package/dist/ui/scrollback/tail-window.js +0 -89
  730. package/dist/ui/scrollback/use-scrollback-view.d.ts +0 -139
  731. package/dist/ui/scrollback/use-scrollback-view.js +0 -601
  732. package/dist/ui/scrollback/writer-shapes.d.ts +0 -127
  733. package/dist/ui/scrollback/writer-shapes.js +0 -159
  734. package/dist/ui/scrollbar-controller.d.ts +0 -30
  735. package/dist/ui/scrollbar-controller.js +0 -124
  736. package/dist/ui/selection/highlight.d.ts +0 -39
  737. package/dist/ui/selection/highlight.js +0 -64
  738. package/dist/ui/selection/screen-mirror.d.ts +0 -24
  739. package/dist/ui/selection/screen-mirror.js +0 -35
  740. package/dist/ui/selection/selection-controller.d.ts +0 -104
  741. package/dist/ui/selection/selection-controller.js +0 -372
  742. package/dist/ui/selection/selection.d.ts +0 -90
  743. package/dist/ui/selection/selection.js +0 -223
  744. package/dist/ui/shortcuts.d.ts +0 -81
  745. package/dist/ui/shortcuts.js +0 -221
  746. package/dist/ui/status-feedback.d.ts +0 -35
  747. package/dist/ui/status-feedback.js +0 -38
  748. package/dist/ui/stdout-frame-writer.d.ts +0 -74
  749. package/dist/ui/stdout-frame-writer.js +0 -155
  750. package/dist/ui/team-status.d.ts +0 -166
  751. package/dist/ui/team-status.js +0 -252
  752. package/dist/ui/terminal-plan.d.ts +0 -52
  753. package/dist/ui/terminal-plan.js +0 -49
  754. package/dist/ui/theme.d.ts +0 -96
  755. package/dist/ui/theme.js +0 -130
  756. package/dist/ui/transcript-text.d.ts +0 -41
  757. package/dist/ui/transcript-text.js +0 -282
  758. package/dist/ui/use-height-store.d.ts +0 -31
  759. package/dist/ui/use-height-store.js +0 -76
  760. package/dist/ui/use-render-governor.d.ts +0 -39
  761. package/dist/ui/use-render-governor.js +0 -57
  762. package/dist/ui/use-wheel-routing.d.ts +0 -57
  763. package/dist/ui/use-wheel-routing.js +0 -152
  764. package/dist/ui/win-vt-force.d.ts +0 -136
  765. package/dist/ui/win-vt-force.js +0 -237
  766. package/dist/ui/win-vt-input.d.ts +0 -57
  767. package/dist/ui/win-vt-input.js +0 -62
  768. package/dist/update/limits.d.ts +0 -111
  769. package/dist/update/limits.js +0 -111
  770. package/dist/update/semver.d.ts +0 -89
  771. package/dist/update/semver.js +0 -295
  772. package/dist/update/types.d.ts +0 -169
  773. package/dist/update/types.js +0 -68
  774. /package/dist/{ui → app}/session-bridge.d.ts +0 -0
  775. /package/dist/{ui → app}/session-bridge.js +0 -0
@@ -1,689 +0,0 @@
1
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
- /**
3
- * PromptInput (spec §3.6 / §3.10) — a controlled multiline input on Ink's
4
- * `useInput` with: full line editing (Home/End, word jump/delete, kill-line via
5
- * `input/keymap`), multi-line vertical cursor navigation, prompt-history recall
6
- * at the edges, a slash-command palette, and `@file` path completion.
7
- *
8
- * The buffer/cursor transforms (`applyEdit`, `moveVertical`) and the suggestion
9
- * computations (`slashSuggestions`, `fileTokenAt`) are pure module functions,
10
- * exported for `input.test.ts`, so the component itself stays thin.
11
- *
12
- * THE EDITOR'S FIVE PIECES OF STATE LIVE IN ONE REDUCER, and every branch of the
13
- * input handler performs AT MOST ONE `dispatch` (tui-input-flicker-fix §3.4).
14
- * Ink mounts a LEGACY React root, where `setState` outside a React event handler
15
- * is not batched — and `useInput` runs from a stdin `'data'` listener, which is
16
- * outside React entirely. The five `setState` calls one keystroke used to make
17
- * were five commits, five whole-tree Yoga layouts and, through Ink's 32 ms
18
- * leading+trailing throttle, two full-frame repaints per character. `fileMatches`
19
- * stays a plain `useState` because it is written from the debounced glob effect
20
- * rather than from a key.
21
- */
22
- import { useEffect, useLayoutEffect, useMemo, useReducer, useRef, useState } from 'react';
23
- import { Box, Text, useInput, useStdout } from 'ink';
24
- import { popupCapacity } from './layout/budget.js';
25
- import { glob as tinyGlob } from 'tinyglobby';
26
- import { pickGlyphs } from './glyphs.js';
27
- import { PromptCaret } from './PromptCaret.js';
28
- import { recognize } from '../input/keymap.js';
29
- import { AutocompletePopup } from './AutocompletePopup.js';
30
- import { buildAutocompleteLayout } from './layout/autocomplete.js';
31
- import { editorReducer, INITIAL_EDITOR_STATE, } from './editor-reducer.js';
32
- import { hasPasteFrame } from './paste-frames.js';
33
- import { hasEnterFrame, splitEnterFrames, } from './enter-frames.js';
34
- import { planComposerInput } from './composer-input.js';
35
- import { allocatePasteId, expandPastes, expandRangeOverTokens } from './paste-tokens.js';
36
- import { draftMaxRows } from './composer-limits.js';
37
- import { layoutComposer, splitRowAtColumn } from './composer-rows.js';
38
- import { moveVisualCursor, snapGrapheme, stepGrapheme } from './editor-navigation.js';
39
- import { interactionCopy } from './interaction-copy.js';
40
- import { INDEX_KEY_FRAME, PASTE_DRAFT_MAX_BYTES, PASTE_MAX_BLOCKS, formatPasteSize, } from '../input/limits.js';
41
- // ---------------------------------------------------------------------------
42
- // The scroll chip (§4.2)
43
- // ---------------------------------------------------------------------------
44
- /** Below this the full sentence does not fit beside a draft; the chip goes terse. */
45
- const CHIP_FULL_MIN_COLS = 64;
46
- /**
47
- * Ceiling on the number the chip prints, so `chipCells` is a CONSTANT per branch
48
- * rather than a function of how far behind the user is (P2-4). Past it the chip
49
- * reads `999+`.
50
- */
51
- const CHIP_MAX_N = 999;
52
- /** `↓ 999+ lines below · PgDn` — the widest form the full branch can produce. */
53
- const CHIP_FULL_CELLS = 27;
54
- /** `↓999+` — the widest form the terse branch can produce. */
55
- const CHIP_TERSE_CELLS = 6;
56
- /**
57
- * Build the chip, or `null` when the viewport is pinned to the newest output.
58
- *
59
- * Every glyph comes from `pickGlyphs` and none from a literal (I-5): on a legacy
60
- * console this renders `v12` rather than mojibake, and `glyphs.test.ts`'s static
61
- * scan fails the build if that rule is broken here.
62
- */
63
- export function scrollChip(scrolledLines, cols, glyphs) {
64
- if (!Number.isFinite(scrolledLines) || scrolledLines <= 0)
65
- return null;
66
- const n = Math.floor(scrolledLines);
67
- const shown = n > CHIP_MAX_N ? `${CHIP_MAX_N}+` : String(n);
68
- if (cols < CHIP_FULL_MIN_COLS) {
69
- return { text: `${glyphs.arrowDown}${shown}`, cells: CHIP_TERSE_CELLS };
70
- }
71
- const noun = n === 1 ? 'line' : 'lines';
72
- return {
73
- text: `${glyphs.arrowDown} ${shown} ${noun} below ${glyphs.midDot} PgDn`,
74
- cells: CHIP_FULL_CELLS,
75
- };
76
- }
77
- // ---------------------------------------------------------------------------
78
- // The draft overflow indicator (section 5.5)
79
- // ---------------------------------------------------------------------------
80
- /** `^3 v7` at its widest, so the cell is a CONSTANT (the P2-4 discipline). */
81
- const OVERFLOW_CELLS = 12;
82
- const OVERFLOW_MAX_N = 999;
83
- /**
84
- * Build the "there is more draft above / below this window" indicator, or `null`
85
- * when the whole draft is on screen.
86
- *
87
- * Every glyph comes from `pickGlyphs` and none from a literal (I-5): on a legacy
88
- * console this renders `^3 v7` rather than mojibake, and `glyphs.test.ts`'s
89
- * static scan fails the build if that rule is broken here.
90
- */
91
- export function overflowChip(hiddenAbove, hiddenBelow, glyphs) {
92
- if (hiddenAbove <= 0 && hiddenBelow <= 0)
93
- return null;
94
- const show = (n) => (n > OVERFLOW_MAX_N ? `${OVERFLOW_MAX_N}+` : String(n));
95
- const parts = [];
96
- if (hiddenAbove > 0)
97
- parts.push(`${glyphs.arrowUp}${show(hiddenAbove)}`);
98
- if (hiddenBelow > 0)
99
- parts.push(`${glyphs.arrowDown}${show(hiddenBelow)}`);
100
- return { text: parts.join(' '), cells: OVERFLOW_CELLS };
101
- }
102
- // ---------------------------------------------------------------------------
103
- // Draft-level paste limits (section 5.3, the P1-4 enforcement point)
104
- // ---------------------------------------------------------------------------
105
- /**
106
- * Would these segments push the draft past a limit? Returns the refusal text, or
107
- * `null` when the paste is allowed.
108
- *
109
- * Checked BEFORE `dispatch`, so a refusal dispatches nothing at all and the draft
110
- * is left byte-for-byte unchanged (AC-9). The one-dispatch-per-key rule is
111
- * unaffected for the same reason.
112
- */
113
- export function draftLimitRefusal(segments, editor) {
114
- let liveBytes = 0;
115
- for (const record of editor.pastes.values())
116
- liveBytes += Buffer.byteLength(record.text, 'utf8');
117
- let blocks = editor.pastes.size;
118
- for (const segment of segments) {
119
- if (segment.kind !== 'paste')
120
- continue;
121
- liveBytes += Buffer.byteLength(segment.text, 'utf8');
122
- blocks += 1;
123
- }
124
- if (blocks > PASTE_MAX_BLOCKS) {
125
- return (`Too many pasted blocks in one message (limit is ${PASTE_MAX_BLOCKS}). ` +
126
- 'Nothing was inserted.');
127
- }
128
- if (liveBytes > PASTE_DRAFT_MAX_BYTES) {
129
- return (`Pasted content in this message would reach ${formatPasteSize(liveBytes)}; ` +
130
- `limit is ${formatPasteSize(PASTE_DRAFT_MAX_BYTES)}. Nothing was inserted.`);
131
- }
132
- return null;
133
- }
134
- // ---------------------------------------------------------------------------
135
- // Pure editing helpers (unit-tested in input.test.ts)
136
- // ---------------------------------------------------------------------------
137
- const isSpace = (ch) => !!ch && /\s/.test(ch);
138
- function lineStart(buffer, cursor) {
139
- if (cursor <= 0)
140
- return 0;
141
- const nl = buffer.lastIndexOf('\n', cursor - 1);
142
- return nl === -1 ? 0 : nl + 1;
143
- }
144
- function lineEnd(buffer, cursor) {
145
- const nl = buffer.indexOf('\n', cursor);
146
- return nl === -1 ? buffer.length : nl;
147
- }
148
- function prevWord(buffer, cursor) {
149
- let i = cursor;
150
- while (i > 0 && isSpace(buffer[i - 1]))
151
- i -= 1;
152
- while (i > 0 && !isSpace(buffer[i - 1]))
153
- i -= 1;
154
- return i;
155
- }
156
- function nextWord(buffer, cursor) {
157
- let i = cursor;
158
- while (i < buffer.length && isSpace(buffer[i]))
159
- i += 1;
160
- while (i < buffer.length && !isSpace(buffer[i]))
161
- i += 1;
162
- return i;
163
- }
164
- /**
165
- * Delete `[from, to)`, first growing the range over any token it clips (G5 /
166
- * D-8).
167
- *
168
- * A no-op growth on a buffer with no tokens, so every pre-existing assertion in
169
- * `input.test.ts` holds byte-for-byte. With a token present it is what stops
170
- * `Ctrl+W` / `Ctrl+U` / `Ctrl+K` leaving half a label behind — which would be a
171
- * label the user then sends INSTEAD of the text it stands for.
172
- */
173
- function killRange(buffer, from, to) {
174
- const range = expandRangeOverTokens(buffer, snapGrapheme(buffer, from), snapGrapheme(buffer, to, true));
175
- return { buffer: buffer.slice(0, range.from) + buffer.slice(range.to), cursor: range.from };
176
- }
177
- /** Apply an edit intent as a pure buffer/cursor transform. */
178
- export function applyEdit(buffer, cursor, intent) {
179
- cursor = snapGrapheme(buffer, cursor);
180
- switch (intent) {
181
- // Navigation may enter a token label; insertion and range deletion retain
182
- // the existing token snapping and expansion contracts.
183
- case 'home':
184
- return { buffer, cursor: lineStart(buffer, cursor) };
185
- case 'end':
186
- return { buffer, cursor: lineEnd(buffer, cursor) };
187
- case 'wordLeft':
188
- return { buffer, cursor: snapGrapheme(buffer, prevWord(buffer, cursor)) };
189
- case 'wordRight':
190
- return { buffer, cursor: snapGrapheme(buffer, nextWord(buffer, cursor), true) };
191
- case 'deleteWordBack':
192
- return killRange(buffer, prevWord(buffer, cursor), cursor);
193
- case 'killToStart':
194
- return killRange(buffer, lineStart(buffer, cursor), cursor);
195
- case 'killToEnd':
196
- return killRange(buffer, cursor, lineEnd(buffer, cursor));
197
- }
198
- }
199
- /**
200
- * Move the cursor up/down one line preserving the column. Returns `null` at the
201
- * top/bottom edge (or for a single-line buffer) so the caller can fall back to
202
- * prompt-history recall.
203
- */
204
- export function moveVertical(buffer, cursor, dir) {
205
- const moved = moveVisualCursor({ buffer, cursor, direction: dir, cols: Number.MAX_SAFE_INTEGER });
206
- return moved ? { cursor: moved.cursor } : null;
207
- }
208
- /**
209
- * Slash-command suggestions when the buffer is a bare `/word` (no space yet).
210
- *
211
- * The character class covers `-` and `:` as well as `\w` (D16). Skill names are
212
- * kebab-case and the namespaced fallback is `/skill:<name>`; with the original
213
- * `^\/(\w*)$` a user typing `/my-sk` got NO popup at all — not an error message,
214
- * just silence, which reads as "that command does not exist".
215
- */
216
- export function slashSuggestions(buffer, commands) {
217
- const m = /^\/([\w:-]*)$/.exec(buffer);
218
- if (!m)
219
- return null;
220
- const q = m[1].toLowerCase();
221
- return commands
222
- .filter((c) => c.name.toLowerCase().startsWith(q))
223
- .map((c) => ({ label: `/${c.name}`, hint: c.description }));
224
- }
225
- /** The `@file` token under the cursor (`@` + non-space run), if any. */
226
- export function fileTokenAt(buffer, cursor) {
227
- let start = cursor;
228
- while (start > 0 && !isSpace(buffer[start - 1]))
229
- start -= 1;
230
- if (buffer[start] !== '@')
231
- return null;
232
- let end = cursor;
233
- while (end < buffer.length && !isSpace(buffer[end]))
234
- end += 1;
235
- return { start, end, query: buffer.slice(start + 1, end) };
236
- }
237
- /**
238
- * How many `@file` candidates reach the popup.
239
- *
240
- * The popup has its own row budget; this is the list it windows. Twenty ranked
241
- * paths are enough to spot the one you meant, and it bounds the array that every
242
- * draft edit re-renders.
243
- */
244
- const FILE_MATCH_LIMIT = 20;
245
- /**
246
- * Segments in a path - the first ranking key for an EMPTY `@` query (defect 10).
247
- *
248
- * A bare `@` matches every file in the tree, and `tinyGlob` returns them in
249
- * whatever order the filesystem walked, so opening the popup without a rank gave
250
- * a correct-but-arbitrary twenty. Shallowest first, then shortest, then
251
- * alphabetical: the paths a user is reaching for (`src/`, a root config) come
252
- * before `packages/cli/src/ui/layout/deep/thing.ts`.
253
- */
254
- function pathDepth(path) {
255
- let depth = 1;
256
- for (const char of path) {
257
- if (char === '/' || char === '\\')
258
- depth += 1;
259
- }
260
- return depth;
261
- }
262
- /** A leading C0 control byte or ESC sequence should never be inserted raw. */
263
- function isControlSeq(input) {
264
- if (input.length === 0)
265
- return true;
266
- const code = input.charCodeAt(0);
267
- return code < 0x20 || code === 0x7f;
268
- }
269
- // ---------------------------------------------------------------------------
270
- // Component
271
- // ---------------------------------------------------------------------------
272
- export function PromptInput({ cols: colsProp, terminalRows: terminalRowsProp, statusExpanded = false, cursorVisible = true, onInteraction, isActive, running, history, commands, cwd, theme, caps, popupMaxRows, popupMaxHeight, onPopupRowsChange, onCompletionContextChange, deleteDisambiguated = false, agentMode, onSubmit, onHelp, onEscape, onEscapeDismiss, reducedMotion = false, borderColor, onDraftChange, draftClearNonce, draftFill, insertMode = 'insert', onNotice, }) {
273
- const { stdout } = useStdout();
274
- const [editor, dispatch] = useReducer(editorReducer, INITIAL_EDITOR_STATE);
275
- const { buffer, cursor, historyIndex, dismissed, sel } = editor;
276
- const [fileMatches, setFileMatches] = useState([]);
277
- // --- Derived suggestion state (shared by render + input handler). --------
278
- const slashSug = dismissed ? null : slashSuggestions(buffer, commands);
279
- const fileTok = fileTokenAt(buffer, cursor);
280
- const fileQuery = fileTok ? fileTok.query : null;
281
- // A BARE `@` OPENS THE POPUP (defect 10). The `query.length >= 1` gate here and
282
- // the `< 1` early return in the scan effect below were the whole reason a lone
283
- // `@` showed nothing while `README.md` promises "@ opens a file-path completion
284
- // popup". An empty query is a legitimate one: it lists the shallowest paths.
285
- const fileActive = !dismissed && !!fileTok && fileMatches.length > 0;
286
- const popupKind = slashSug && slashSug.length > 0 ? 'slash' : fileActive ? 'file' : null;
287
- const popupItems = popupKind === 'slash'
288
- ? slashSug
289
- : popupKind === 'file'
290
- ? fileMatches.map((p) => ({ label: p }))
291
- : [];
292
- const clampedSel = popupItems.length > 0 ? Math.min(sel, popupItems.length - 1) : 0;
293
- // --- Debounced `@file` scan. ---------------------------------------------
294
- useEffect(() => {
295
- if (fileQuery === null) {
296
- setFileMatches([]);
297
- return;
298
- }
299
- let cancelled = false;
300
- const id = setTimeout(() => {
301
- tinyGlob('**/*', {
302
- cwd,
303
- dot: false,
304
- onlyFiles: true,
305
- ignore: ['**/node_modules/**', '**/.git/**'],
306
- })
307
- .then((matches) => {
308
- if (cancelled)
309
- return;
310
- const q = fileQuery.toLowerCase();
311
- // RANKED, NOT WALK ORDER (defect 10). An empty query matches every path
312
- // in the tree, so without a sort the popup for a bare `@` was
313
- // correct-but-arbitrary - the first twenty the filesystem happened to
314
- // hand back.
315
- const ranked = matches
316
- .filter((m) => m.toLowerCase().includes(q))
317
- .sort((a, b) => pathDepth(a) - pathDepth(b)
318
- || a.length - b.length || (a < b ? -1 : a > b ? 1 : 0))
319
- .slice(0, FILE_MATCH_LIMIT);
320
- setFileMatches(ranked);
321
- })
322
- .catch(() => {
323
- if (!cancelled)
324
- setFileMatches([]);
325
- });
326
- }, 120);
327
- return () => {
328
- cancelled = true;
329
- clearTimeout(id);
330
- };
331
- }, [fileQuery, cwd]);
332
- // --- Layout (section 5.5). -----------------------------------------------
333
- //
334
- // COMPUTED HERE, ABOVE THE REPORTING EFFECT, because the number the effect
335
- // sends upward has to be the number this component actually renders (I-8).
336
- // Deriving it twice — once for the frame and once for the budget — is exactly
337
- // the trap `BottomStatusRow.tsx:5-27` documents.
338
- const glyphs = pickGlyphs(caps);
339
- const cols = colsProp ?? stdout?.columns ?? 80;
340
- const terminalRows = terminalRowsProp ?? stdout?.rows ?? 24;
341
- // Err NARROW. Wrapping wider than the box Ink gives us would make Ink wrap a
342
- // second time, and then `layout.rows.length` is a lie — which is the one thing
343
- // this module may not be.
344
- const chromeCols = 2 /* border */ + 2 /* paddingX */ + 2 /* marker */;
345
- const baseCols = Math.max(8, cols - chromeCols);
346
- const measure = (wrapCols) => layoutComposer({
347
- buffer,
348
- cursor,
349
- cols: wrapCols,
350
- maxRows: draftMaxRows(terminalRows),
351
- // Scrolling may hide the caret, but must not change the measured draft.
352
- // Otherwise visibility can toggle wrapping and feed back into scrolling.
353
- active: isActive,
354
- });
355
- // TWO PASSES, AND THE SECOND ONE IS LOAD-BEARING (I-8). The overflow indicator
356
- // rides the last rendered row INSIDE the box the draft wraps in, so its cells
357
- // have to come out of the wrap width. Measured at the full width instead, a
358
- // last row that fills the line is wrapped a SECOND time by Ink, and the
359
- // composer then draws one row more than `layout.rows.length` — which is the
360
- // number this component hands to `viewportRows`. That is defect C again, in
361
- // precisely the situation this feature exists for: a draft too tall to show.
362
- //
363
- // It settles in two. Narrowing can only ADD rows, so a draft that overflowed
364
- // the first pass still overflows the second, and a third pass would measure
365
- // the same width as the second.
366
- const wide = measure(baseCols);
367
- const overflows = wide.hiddenAbove > 0 || wide.hiddenBelow > 0;
368
- const usableCols = overflows ? Math.max(8, baseCols - OVERFLOW_CELLS - 1) : baseCols;
369
- const layout = overflows ? measure(usableCols) : wide;
370
- const preferredColumnWidth = useRef();
371
- useLayoutEffect(() => { preferredColumnWidth.current = undefined; }, [usableCols]);
372
- const draftRowCount = Math.max(1, layout.rows.length);
373
- const menuCapacity = Math.min(popupMaxHeight ?? Infinity, popupCapacity(terminalRows, draftRowCount, statusExpanded));
374
- const popupLayout = buildAutocompleteLayout({
375
- itemCount: isActive ? popupItems.length : 0,
376
- selected: clampedSel,
377
- maxRows: popupMaxRows,
378
- maxHeight: menuCapacity,
379
- });
380
- const popupVisible = isActive && popupLayout.rowCount > 0;
381
- // Report on every mount, including zero. Cleanup belongs to a separate
382
- // effect so changing height does not publish an intermediate zero budget.
383
- useLayoutEffect(() => {
384
- onPopupRowsChange?.(popupLayout.rowCount);
385
- }, [onPopupRowsChange, popupLayout.rowCount]);
386
- useLayoutEffect(() => () => onPopupRowsChange?.(0), [onPopupRowsChange]);
387
- const completion = popupVisible ? popupKind ?? 'none' : 'none';
388
- const completionCallback = useRef(onCompletionContextChange);
389
- completionCallback.current = onCompletionContextChange;
390
- const lastCompletion = useRef();
391
- useLayoutEffect(() => {
392
- if (!onCompletionContextChange || lastCompletion.current === completion)
393
- return;
394
- lastCompletion.current = completion;
395
- onCompletionContextChange?.(completion);
396
- }, [onCompletionContextChange, completion]);
397
- useLayoutEffect(() => () => completionCallback.current?.('none'), []);
398
- const caretResetKey = useMemo(() => ({}), [buffer, cursor, isActive, usableCols]);
399
- // --- Draft presence and height, reported only on a transition. -----------
400
- // Notifying on every keystroke would re-render the whole App tree per key. The
401
- // row count changes on a line break or a wrap boundary, not per character
402
- // (R-6), so widening this callback does not widen how often it fires.
403
- const hasDraft = buffer.length > 0;
404
- const lastReportedDraft = useRef(null);
405
- useLayoutEffect(() => {
406
- if (!onDraftChange)
407
- return;
408
- const last = lastReportedDraft.current;
409
- if (last && last.hasDraft === hasDraft && last.rows === draftRowCount)
410
- return;
411
- lastReportedDraft.current = { hasDraft, rows: draftRowCount };
412
- onDraftChange({ hasDraft, rows: draftRowCount });
413
- }, [hasDraft, draftRowCount, onDraftChange]);
414
- // --- App-requested draft clear (ctrl-c-clear-draft-exit). --------
415
- // The NONCE, not the buffer, is the dependency: App cannot reach this
416
- // reducer directly, and keying on content would miss back-to-back
417
- // requests that land on the same (empty) buffer. `'clear'` is
418
- // idempotent, so a StrictMode double-invoked effect is harmless.
419
- useEffect(() => {
420
- if (draftClearNonce === undefined || draftClearNonce <= 0)
421
- return;
422
- dispatch({ type: 'clear' });
423
- }, [draftClearNonce]);
424
- // --- Mutators. -----------------------------------------------------------
425
- // ONE DISPATCH EACH, and that is the rule §3.4 asks a reviewer to check line
426
- // by line. Two dispatches from one key would put the legacy root back to two
427
- // commits and undo the whole of F3 for that branch.
428
- const insert = (text) => {
429
- onInteraction?.();
430
- dispatch({ type: 'insert', text });
431
- };
432
- const resolveSubmit = (state) => {
433
- const suggestions = state.dismissed ? null : slashSuggestions(state.buffer, commands);
434
- const selectedIndex = Math.min(state.sel, (suggestions?.length ?? 0) - 1);
435
- const suggestionLayout = buildAutocompleteLayout({
436
- itemCount: isActive ? suggestions?.length ?? 0 : 0,
437
- selected: selectedIndex, maxRows: popupMaxRows, maxHeight: menuCapacity,
438
- });
439
- const selected = suggestionLayout.rowCount > 0 ? suggestions?.[selectedIndex] : undefined;
440
- const text = selected?.label ?? expandPastes(state.buffer, state.pastes);
441
- return text.trim().length > 0 ? text : null;
442
- };
443
- const transact = (intents) => {
444
- const plan = planComposerInput({
445
- editor, intents, resolveSubmit, checkPasteLimit: draftLimitRefusal,
446
- });
447
- if (plan.refusal) {
448
- onNotice?.('warn', plan.refusal);
449
- return;
450
- }
451
- onInteraction?.();
452
- let result = { accepted: true };
453
- if (plan.submission !== undefined) {
454
- try {
455
- result = onSubmit(plan.submission);
456
- }
457
- catch (error) {
458
- result = { accepted: false, reason: error instanceof Error ? error.message : String(error) };
459
- }
460
- }
461
- dispatch({ type: 'adopt', state: result.accepted ? plan.nextEditor : plan.rejectedEditor });
462
- if (!result.accepted) {
463
- onNotice?.('error', result.reason ?? 'Message was not accepted; input is kept in the draft.');
464
- }
465
- else if (plan.notice) {
466
- onNotice?.('warn', plan.notice);
467
- }
468
- };
469
- // --- App-requested fill (quick-prompt-library §4.6 / D-6). -----------------
470
- //
471
- // THE NONCE IS THE DEPENDENCY, NOT THE TEXT, for the reason the clear effect above
472
- // records: two fills of the same prompt in a row must both apply, and keying on the
473
- // payload would silently drop the second one. `transact` is deliberately absent from
474
- // the dependency list - it closes over THIS render's `editor`, and depending on it
475
- // would re-run (and re-fill) the effect on every keystroke.
476
- const appliedFill = useRef(0);
477
- useEffect(() => {
478
- if (!draftFill || draftFill.nonce <= appliedFill.current)
479
- return;
480
- appliedFill.current = draftFill.nonce;
481
- transact([{
482
- kind: 'fill',
483
- text: draftFill.text,
484
- mode: insertMode,
485
- submit: draftFill.submit === true,
486
- }]);
487
- // eslint-disable-next-line react-hooks/exhaustive-deps -- see the note above
488
- }, [draftFill, insertMode]);
489
- const recallUp = () => {
490
- if (history.length === 0)
491
- return;
492
- const idx = historyIndex === null ? history.length - 1 : Math.max(0, historyIndex - 1);
493
- const value = history[idx] ?? '';
494
- dispatch({ type: 'recall', buffer: value, cursor: value.length, historyIndex: idx });
495
- };
496
- const recallDown = () => {
497
- if (historyIndex === null)
498
- return;
499
- const idx = historyIndex + 1;
500
- // Past the newest entry the walk ends and the draft goes back to empty —
501
- // `historyIndex: null` is what tells `verticalOrHistory` the user is editing
502
- // again rather than still stepping.
503
- if (idx >= history.length) {
504
- dispatch({ type: 'recall', buffer: '', cursor: 0, historyIndex: null });
505
- return;
506
- }
507
- const value = history[idx] ?? '';
508
- dispatch({ type: 'recall', buffer: value, cursor: value.length, historyIndex: idx });
509
- };
510
- const completeSelection = () => {
511
- onInteraction?.();
512
- const chosen = popupItems[clampedSel];
513
- if (!chosen)
514
- return;
515
- if (popupKind === 'slash') {
516
- const next = `${chosen.label} `;
517
- dispatch({ type: 'replace', buffer: next, cursor: next.length });
518
- }
519
- else if (popupKind === 'file' && fileTok) {
520
- const next = buffer.slice(0, fileTok.start) + chosen.label + buffer.slice(fileTok.end);
521
- dispatch({ type: 'replace', buffer: next, cursor: fileTok.start + chosen.label.length });
522
- }
523
- };
524
- const verticalOrHistory = (dir) => {
525
- onInteraction?.();
526
- const moved = moveVisualCursor({ buffer, cursor, cols: usableCols, direction: dir,
527
- preferredVisualColumn: preferredColumnWidth.current === usableCols
528
- ? editor.preferredVisualColumn : undefined });
529
- if (moved) {
530
- preferredColumnWidth.current = usableCols;
531
- dispatch({ type: 'moveCursor', ...moved });
532
- return;
533
- }
534
- // At an edge: recall history only from an empty buffer or while already
535
- // stepping through it — never clobber an in-progress draft (see spec note).
536
- if (buffer.length === 0 || historyIndex !== null) {
537
- if (dir === 'up')
538
- recallUp();
539
- else
540
- recallDown();
541
- }
542
- };
543
- // --- Input handling. -----------------------------------------------------
544
- useInput((input, key) => {
545
- // FIRST STATEMENT, BEFORE THE POPUP BRANCH, AND IT HAS TO STAY THERE.
546
- // `App` owns the Shift+Tab mode toggle. The popup branch below treats
547
- // `key.tab` as "accept the highlighted completion", so without this guard
548
- // pressing Shift+Tab with the `/` palette or an `@` file popup open would
549
- // BOTH rewrite the user's draft and change the mode — a bug that only
550
- // appears with a popup open and is therefore easy to ship (AC-P3 / R-P2).
551
- if (key.tab && key.shift)
552
- return;
553
- if (key.pageUp || key.pageDown || (key.shift && (key.upArrow || key.downArrow)))
554
- return;
555
- if ((key.return || input === '\r') && (key.meta || key.shift)) {
556
- insert('\n');
557
- return;
558
- }
559
- // App owns the Ctrl+I index frame (see input/limits.ts). Standalone it
560
- // never reaches here - isControlSeq drops it at the printable-insert
561
- // branch below - but a frame glued to typed text in one chunk must
562
- // insert ONLY the text, so strip it before any other interpretation.
563
- if (input.includes(INDEX_KEY_FRAME)) {
564
- const rest = input.split(INDEX_KEY_FRAME).join('');
565
- if (rest.length > 0)
566
- insert(rest);
567
- return;
568
- }
569
- if (hasPasteFrame(input) || hasEnterFrame(input) || /[\r\n]/.test(input)) {
570
- const intents = splitEnterFrames(input).map((frame) => frame.kind === 'paste' ? { ...frame, id: allocatePasteId() } : frame);
571
- if (intents.length > 0)
572
- transact(intents);
573
- return;
574
- }
575
- // Popup navigation owns Up/Down/Tab/→/Enter/Esc while it is open.
576
- if (popupVisible) {
577
- if (key.upArrow) {
578
- onInteraction?.();
579
- dispatch({ type: 'select', sel: Math.max(0, clampedSel - 1) });
580
- return;
581
- }
582
- if (key.downArrow) {
583
- onInteraction?.();
584
- dispatch({ type: 'select', sel: Math.min(popupItems.length - 1, clampedSel + 1) });
585
- return;
586
- }
587
- if (key.tab || (key.rightArrow && cursor >= buffer.length)) {
588
- completeSelection();
589
- return;
590
- }
591
- if (key.return && popupKind === 'slash') {
592
- transact([{ kind: 'submit' }]);
593
- return;
594
- }
595
- if (key.escape) {
596
- dispatch({ type: 'dismiss' });
597
- onEscapeDismiss?.();
598
- return;
599
- }
600
- // Any other key falls through so typing keeps filtering the popup.
601
- }
602
- if (key.escape) {
603
- onEscape?.();
604
- return;
605
- }
606
- // Line-editing intents (Home/End/word/kill) recognized from raw keys.
607
- const intent = key.meta && (key.backspace || key.delete)
608
- ? 'deleteWordBack' : recognize(input, key);
609
- if (intent) {
610
- onInteraction?.();
611
- const next = applyEdit(buffer, cursor, intent);
612
- const moving = intent === 'home' || intent === 'end'
613
- || intent === 'wordLeft' || intent === 'wordRight';
614
- dispatch(moving ? { type: 'moveCursor', cursor: next.cursor }
615
- : { type: 'replace', buffer: next.buffer, cursor: next.cursor });
616
- return;
617
- }
618
- if (key.ctrl)
619
- return; // App owns Ctrl+C / L / T / O, and now Ctrl+K (the kit picker).
620
- if (key.return) {
621
- if (key.meta || key.shift) {
622
- insert('\n');
623
- return;
624
- }
625
- if (buffer.trim().length === 0)
626
- return;
627
- transact([{ kind: 'submit' }]);
628
- return;
629
- }
630
- if (key.backspace || key.delete) {
631
- onInteraction?.();
632
- // The `cursor > 0` guard lives in the reducer now, so this branch is one
633
- // unconditional dispatch and a no-op at the left edge returns the same
634
- // state object — which React bails out on, exactly as the old
635
- // `if (cursor > 0)` skipped the `setState`s.
636
- dispatch({ type: key.delete && deleteDisambiguated ? 'delete' : 'backspace' });
637
- return;
638
- }
639
- if (key.leftArrow) {
640
- onInteraction?.();
641
- dispatch({ type: 'moveCursor', cursor: stepGrapheme(buffer, cursor, 'left') });
642
- return;
643
- }
644
- if (key.rightArrow) {
645
- onInteraction?.();
646
- dispatch({ type: 'moveCursor', cursor: stepGrapheme(buffer, cursor, 'right') });
647
- return;
648
- }
649
- // `!key.shift` is load-bearing: Shift+↑/↓ is the viewport's line-scroll
650
- // binding (§4.10). Without the guard the history recall below swallows it
651
- // and scrolling appears to be broken for no visible reason.
652
- if (key.upArrow && !key.shift) {
653
- verticalOrHistory('up');
654
- return;
655
- }
656
- if (key.downArrow && !key.shift) {
657
- verticalOrHistory('down');
658
- return;
659
- }
660
- // `?` on an empty idle input opens the help overlay.
661
- if (input === '?' && buffer.length === 0 && !running && onHelp) {
662
- onHelp();
663
- return;
664
- }
665
- // Printable input — drop any unrecognized control/escape byte.
666
- if (input && !key.tab && !isControlSeq(input))
667
- insert(input);
668
- }, { isActive });
669
- const marker = running ? glyphs.steer : glyphs.caret;
670
- const markerColor = running ? theme.toolRunning : theme.primary;
671
- const placeholder = running ? interactionCopy.runningPlaceholder : interactionCopy.idlePlaceholder;
672
- const overflow = overflowChip(layout.hiddenAbove, layout.hiddenBelow, glyphs);
673
- const tokenColor = theme.hintFg ?? theme.muted;
674
- const renderSegments = (segments, keyPrefix) => segments.map((segment, i) => (_jsx(Text, { color: segment.kind === 'token' ? tokenColor : undefined, children: segment.text }, `${keyPrefix}${i}`)));
675
- const rowNodes = layout.rows.map((row, i) => {
676
- if (i !== layout.cursorRow)
677
- return _jsx(_Fragment, { children: renderSegments(row.segments, `s${i}.`) });
678
- // The caret is drawn as one inverse cell, split at the column
679
- // `layoutComposer` reported — the same width table it wrapped with (I-9).
680
- const split = splitRowAtColumn(row, layout.cursorCol);
681
- return (_jsxs(_Fragment, { children: [renderSegments(split.before, `b${i}.`), _jsx(PromptCaret, { text: split.at ? split.at.text : ' ', active: isActive && cursorVisible, reducedMotion: reducedMotion, colorLevel: caps.colorLevel, resetKey: caretResetKey, color: split.at?.kind === 'token' ? tokenColor : undefined }), renderSegments(split.after, `a${i}.`)] }));
682
- });
683
- const inputRow = (_jsxs(Box, { flexDirection: "row", children: [_jsxs(Text, { color: markerColor, bold: true, children: [marker, ' '] }), _jsx(Box, { flexDirection: "column", flexGrow: 1, flexShrink: 1, children: buffer.length === 0 ? (_jsxs(Text, { wrap: "truncate", color: theme.muted, children: [_jsx(PromptCaret, { text: String.fromCodePoint(placeholder.codePointAt(0)), active: isActive && cursorVisible, reducedMotion: reducedMotion, colorLevel: caps.colorLevel, color: theme.muted, resetKey: caretResetKey }), placeholder.slice(String.fromCodePoint(placeholder.codePointAt(0)).length)] })) : (rowNodes.map((node, i) => overflow && i === rowNodes.length - 1 ? (
684
- // The overflow indicator rides the LAST rendered row rather than
685
- // taking one of its own: an extra row would put the composer's
686
- // real height one above the `draftRows` it just reported (I-8).
687
- _jsxs(Box, { flexDirection: "row", children: [_jsx(Box, { flexGrow: 1, flexShrink: 1, children: _jsx(Text, { children: node }) }), _jsx(Box, { flexShrink: 0, width: overflow.cells, justifyContent: "flex-end", children: _jsx(Text, { wrap: "truncate", color: theme.hintFg ?? theme.muted, children: overflow.text }) })] }, i)) : (_jsx(Text, { children: node }, i)))) })] }));
688
- return (_jsxs(Box, { flexDirection: "column", flexShrink: 0, children: [popupVisible && (_jsx(AutocompletePopup, { items: popupItems, selected: clampedSel, theme: theme, caps: caps, maxRows: popupMaxRows, layout: popupLayout })), (_jsx(Box, { flexDirection: "column", flexShrink: 0, borderStyle: glyphs.boxStyle, borderColor: borderColor, paddingX: 1, children: inputRow }))] }));
689
- }