@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,168 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useState } from 'react';
3
- import { Text, useInput } from 'ink';
4
- import { ADAPTER_PROVIDERS } from '../../config/schema.js';
5
- import { registerSecret } from '../../logging/secret-registry.js';
6
- import { OverlayFrame } from '../layout/OverlayFrame.js';
7
- import { stripPasteFrames } from '../paste-frames.js';
8
- import { stripEnterFrames } from '../enter-frames.js';
9
- import { pickGlyphs } from '../glyphs.js';
10
- import { useProfileScroll } from './ModelProfilePicker.js';
11
- import { finishProfileEditor } from './model-profile-state.js';
12
- import { EDITOR_FIELDS, editorRows, editorProbeTarget, focusableRows, resultRowCount } from './model-probe-view.js';
13
- function useEditorInput(props, focus) {
14
- const { editor, dispatch } = props;
15
- const { index, setIndex, count, focusable } = focus;
16
- function commit() {
17
- const result = finishProfileEditor(editor);
18
- if (result.field) {
19
- // Field rows are the first focusables, in `EDITOR_FIELDS` order, so the jump an
20
- // invalid field asks for is a lookup rather than an offset guess.
21
- const at = EDITOR_FIELDS.indexOf(result.field);
22
- if (at >= 0)
23
- setIndex(at);
24
- }
25
- dispatch({ type: 'merge-editor' });
26
- }
27
- function activate(row) {
28
- if (!row)
29
- return;
30
- if (row.kind === 'field') {
31
- commit();
32
- return;
33
- }
34
- if (row.kind !== 'action')
35
- return;
36
- if (row.action === 'retain')
37
- dispatch({ type: 'retain-key' });
38
- if (row.action === 'test')
39
- props.onTest?.();
40
- if (row.action === 'discover')
41
- props.onDiscover?.();
42
- if (row.action === 'apply')
43
- commit();
44
- if (row.action === 'cancel')
45
- dispatch({ type: 'cancel-editor' });
46
- }
47
- function editField(row, input, key) {
48
- if (row.kind !== 'field')
49
- return;
50
- const field = row.field;
51
- if (field === 'provider' || field === 'credentialMode') {
52
- if (!key.leftArrow && !key.rightArrow)
53
- return;
54
- const options = field === 'provider' ? ADAPTER_PROVIDERS
55
- : editor.original.apiKey && !editor.endpointChanged ? ['keep', 'replace', 'shared']
56
- : ['shared', 'replace'];
57
- const current = options.indexOf(editor[field]);
58
- dispatch({ type: 'editor-field', field,
59
- value: options[(current + (key.leftArrow ? -1 : 1) + options.length) % options.length] });
60
- return;
61
- }
62
- if (field === 'apiKey' && editor.credentialMode !== 'replace')
63
- return;
64
- const text = stripPasteFrames(stripEnterFrames(input));
65
- const value = key.backspace || key.delete ? [...editor[field]].slice(0, -1).join('')
66
- : editor[field] + text;
67
- if (field === 'apiKey')
68
- registerSecret(value);
69
- if (key.backspace || key.delete || text)
70
- dispatch({ type: 'editor-field', field, value });
71
- }
72
- useInput((input, key) => {
73
- if (props.isActive === false)
74
- return;
75
- // Accelerators work on EVERY row (§3.3): the action rows are the primary entry,
76
- // these are only the shortcut. Both keys are unused by `App`'s global branch.
77
- if (key.ctrl && input === 'r') {
78
- props.onTest?.();
79
- return;
80
- }
81
- if (key.ctrl && input === 'f') {
82
- props.onDiscover?.();
83
- return;
84
- }
85
- if (key.escape) {
86
- // THREE-LEVEL Esc (§3.4): a probe in flight is cancelled first and the draft
87
- // survives; only the second press discards the form.
88
- if (props.probeBusy) {
89
- props.onCancelProbe?.();
90
- return;
91
- }
92
- dispatch({ type: 'cancel-editor' });
93
- return;
94
- }
95
- if (key.upArrow || (key.tab && key.shift)) {
96
- setIndex((index - 1 + count) % count);
97
- return;
98
- }
99
- if (key.downArrow || key.tab) {
100
- setIndex((index + 1) % count);
101
- return;
102
- }
103
- if (key.return) {
104
- activate(focusable[index]);
105
- return;
106
- }
107
- if (key.ctrl || key.meta)
108
- return;
109
- const row = focusable[index];
110
- if (row)
111
- editField(row, input, key);
112
- });
113
- }
114
- function rowColor(props, row) {
115
- if (row.kind === 'result') {
116
- return row.tone === 'ok' ? props.theme.toolDone
117
- : row.tone === 'fail' ? props.theme.noticeError : props.theme.muted;
118
- }
119
- return undefined;
120
- }
121
- function buildRows(props, focus) {
122
- const glyphs = pickGlyphs(props.caps);
123
- const focused = focus.focusable[focus.index];
124
- return focus.rows.map((row, at) => {
125
- if (row.kind === 'note') {
126
- return _jsx(Text, { wrap: "truncate", color: props.theme.muted, children: row.label }, at);
127
- }
128
- if (row.kind === 'result') {
129
- return _jsx(Text, { wrap: "truncate", color: rowColor(props, row), children: row.label }, at);
130
- }
131
- const line = row.value.length > 0 ? `${row.label.padEnd(18)}${row.value}` : row.label;
132
- const isFocused = row === focused;
133
- return _jsxs(Text, { wrap: "truncate", color: isFocused ? props.theme.accent : props.theme.muted, children: [isFocused ? `${glyphs.caret} ` : ' ', line] }, at);
134
- });
135
- }
136
- function editorHint(props) {
137
- if (props.probeBusy)
138
- return 'Esc cancel the probe | draft is kept';
139
- return 'Enter apply to draft | Ctrl+R test | Ctrl+F discover | Esc cancel';
140
- }
141
- /**
142
- * The profile form. Row semantics come from `editorRows()` - never from index
143
- * arithmetic - so `apiKey` stays at index 6 and the two probe actions sit at the end
144
- * of the action block, after `retain` (P0-1 / I-4).
145
- */
146
- export function ModelProfileEditor(props) {
147
- const [index, setIndex] = useState(0);
148
- const editor = props.editor;
149
- const retain = editor.endpointChanged && Boolean(editor.original.apiKey);
150
- const probe = props.probeView ?? { kind: 'idle', reason: 'unavailable' };
151
- const target = props.probeTarget ?? editorProbeTarget(editor, {});
152
- const rows = editorRows({ editor, retain, probe, target, fastOnly: props.users === 'Fast' });
153
- const focusable = focusableRows(rows);
154
- const count = Math.max(1, focusable.length);
155
- const clamped = Math.min(index, count - 1);
156
- // The result rows sit BELOW the action block, so following the focused row alone
157
- // would leave the verdict off-screen right after the user asked for it (§4.9 / AC-21).
158
- // How many action rows there are comes from the row model, never from a constant: a
159
- // sixth action would otherwise move this window boundary onto a FIELD row.
160
- const actionRows = focusable.filter((row) => row.kind === 'action').length;
161
- const results = resultRowCount(rows);
162
- const inActions = clamped >= count - actionRows;
163
- const viewFocus = results > 0 && inActions ? Math.max(clamped, rows.length - 1) : clamped;
164
- const offset = useProfileScroll(props, viewFocus);
165
- useEditorInput(props, { index: clamped, setIndex, count, rows, focusable });
166
- return _jsx(OverlayFrame, { ...props, rows: buildRows(props, { index: clamped, setIndex, count,
167
- rows, focusable }), scrollOffset: offset, title: props.error ?? `Edit profile${props.users ? ` | Used by ${props.users}` : ''}`, hint: editorHint(props) });
168
- }
@@ -1,48 +0,0 @@
1
- import React from 'react';
2
- import type { ModelProfile, ModelProfilesConfig } from '../../config/model-profiles.js';
3
- import type { Theme } from '../theme.js';
4
- import type { TermCapabilities } from '../capabilities.js';
5
- import { type ProfilePickerRole } from './model-profile-state.js';
6
- export interface ProfileFrameProps {
7
- isActive?: boolean;
8
- theme: Theme;
9
- caps: TermCapabilities;
10
- cols: number;
11
- maxRows: number;
12
- scrollOffset: number;
13
- onScrollClamp?: (offset: number) => void;
14
- }
15
- /** Move focus into view while accepting App's independent wheel/page scrolling. */
16
- export declare function useProfileScroll(props: ProfileFrameProps, focus: number): number;
17
- /** Cut by terminal columns, preserving surrogate pairs and wide names. */
18
- export declare function clipProfileText(value: string, columns: number): string;
19
- export declare function profileEndpointSummary(baseUrl: string | null): string;
20
- interface ModelProfilePickerProps extends ProfileFrameProps {
21
- profiles: ModelProfilesConfig;
22
- savedProfiles?: ModelProfilesConfig;
23
- /** Which role this page selects for; `'subagent'` swaps the built-in rows (D-5). */
24
- role: ProfilePickerRole;
25
- manager?: boolean;
26
- error?: string;
27
- apiKeys: Record<string, string | undefined>;
28
- customProfile?: ModelProfile;
29
- /**
30
- * The selection id for a role the library has no `${role}Id` key for: the
31
- * subagent projection (`Same as main` = null, fast = the sentinel, profile
32
- * = its id). Takes precedence over the `${role}Id` lookup when present.
33
- */
34
- selectedIdOverride?: string | null;
35
- /** The subagent binding, for the reference suffix on profile labels (3.7). */
36
- subagentProfileId?: string | null;
37
- /** Whether to annotate the built-in `Fast tier model` row with `(fast tier off)`. */
38
- fastTierOff?: boolean;
39
- onSelect: (id: string | null) => void;
40
- onCreate: () => void;
41
- onEdit: (profile: ModelProfile) => void;
42
- onDuplicate: (id: string) => void;
43
- onDelete: (id: string) => void;
44
- onCancel: () => void;
45
- }
46
- /** Profile selection and explicit management actions share one input owner. */
47
- export declare function ModelProfilePicker(props: ModelProfilePickerProps): React.ReactElement;
48
- export {};
@@ -1,231 +0,0 @@
1
- import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
- import { useEffect, useState } from 'react';
3
- import { Text, useInput } from 'ink';
4
- import stringWidth from 'string-width';
5
- import { pickGlyphs } from '../glyphs.js';
6
- import { OverlayFrame, overlayBodyRows } from '../layout/OverlayFrame.js';
7
- import { stripPasteFrames } from '../paste-frames.js';
8
- import { stripEnterFrames } from '../enter-frames.js';
9
- import { profileUsers, SUBAGENT_FAST_ROW_ID } from './model-profile-state.js';
10
- /** Move focus into view while accepting App's independent wheel/page scrolling. */
11
- export function useProfileScroll(props, focus) {
12
- const [offset, setOffset] = useState(0);
13
- useEffect(() => { props.onScrollClamp?.(0); }, []);
14
- useEffect(() => { setOffset(props.scrollOffset); }, [props.scrollOffset]);
15
- useEffect(() => {
16
- const height = overlayBodyRows(props.maxRows, props.cols);
17
- const next = focus < offset ? focus : focus >= offset + height ? focus - height + 1 : offset;
18
- if (next !== offset) {
19
- setOffset(next);
20
- props.onScrollClamp?.(next);
21
- }
22
- }, [focus, props.maxRows, props.cols]);
23
- return offset;
24
- }
25
- /** Cut by terminal columns, preserving surrogate pairs and wide names. */
26
- export function clipProfileText(value, columns) {
27
- let result = '';
28
- for (const point of value) {
29
- if (stringWidth(result + point) > Math.max(0, columns))
30
- break;
31
- result += point;
32
- }
33
- return result;
34
- }
35
- function uniqueId(profile, entries) {
36
- let length = Math.min(8, profile.id.length);
37
- while (length < profile.id.length && entries.some((other) => other.id !== profile.id
38
- && other.id.slice(0, length) === profile.id.slice(0, length)))
39
- length++;
40
- return profile.id.slice(0, length);
41
- }
42
- export function profileEndpointSummary(baseUrl) {
43
- if (!baseUrl)
44
- return 'Default URL';
45
- try {
46
- const url = new URL(baseUrl);
47
- return url.username || url.password || url.search || url.hash ? 'Invalid URL' : url.host;
48
- }
49
- catch {
50
- return 'Invalid URL';
51
- }
52
- }
53
- function host(profile) {
54
- return profileEndpointSummary(profile.baseUrl);
55
- }
56
- function usePickerState(props) {
57
- const [index, setIndex] = useState(0);
58
- const [selectedId, setSelectedId] = useState(props.profiles.entries[0]?.id);
59
- const [query, setQuery] = useState('');
60
- const [searching, setSearching] = useState(false);
61
- const searchable = props.profiles.entries.length > 8;
62
- const entries = props.profiles.entries.filter((entry) => `${entry.name} ${entry.provider} ${entry.model}`.toLocaleLowerCase()
63
- .includes(query.toLocaleLowerCase()));
64
- const actions = props.manager ? ['New', 'Edit', 'Duplicate', 'Delete'] : ['Create profile'];
65
- // THE SUBAGENT PICKER swaps the `Current custom` row for TWO built-in rows:
66
- // `Same as main` (selection id null) and `Fast tier model` (the sentinel).
67
- //
68
- // THE BINDING PICKER HAS NEITHER (agent-model-kits §4.5): a kit slot can only
69
- // name a profile, so `prefix` is 0 there even though it is a selection page -
70
- // "no profile" is not a choice a kit may make.
71
- const prefix = props.role === 'subagent' ? 2 : props.role === 'binding' ? 0
72
- : props.manager ? 0 : 1;
73
- const count = entries.length + prefix + actions.length;
74
- const cursor = Math.min(index, count - 1);
75
- const focused = entries[cursor - prefix];
76
- const selected = props.profiles.entries.find((entry) => entry.id === selectedId);
77
- const offset = useProfileScroll(props, cursor + (searchable ? 1 : 0));
78
- useEffect(() => { if (focused)
79
- setSelectedId(focused.id); }, [focused?.id]);
80
- return { setIndex, query, setQuery, searching, setSearching, searchable, entries,
81
- actions, prefix, count, cursor, focused, selected, offset };
82
- }
83
- function usePickerInput(props, state) {
84
- const { cursor, focused, selected, actions, prefix, entries, count, searching, searchable, setIndex, setQuery, setSearching } = state;
85
- function activate() {
86
- if (props.role === 'subagent') {
87
- // Built-in rows first: `Same as main`, then `Fast tier model`.
88
- if (cursor === 0) {
89
- props.onSelect(null);
90
- return;
91
- }
92
- if (cursor === 1) {
93
- props.onSelect(SUBAGENT_FAST_ROW_ID);
94
- return;
95
- }
96
- }
97
- else if (!props.manager && props.role !== 'binding' && cursor === 0) {
98
- props.onSelect(null);
99
- return;
100
- }
101
- if (focused) {
102
- if (props.manager)
103
- setIndex(prefix + entries.length + 1);
104
- else
105
- props.onSelect(focused.id);
106
- return;
107
- }
108
- const action = actions[cursor - prefix - entries.length];
109
- if (action === 'New' || action === 'Create profile')
110
- props.onCreate();
111
- if (action === 'Edit' && selected)
112
- props.onEdit(selected);
113
- if (action === 'Duplicate' && selected)
114
- props.onDuplicate(selected.id);
115
- if (action === 'Delete' && selected)
116
- props.onDelete(selected.id);
117
- }
118
- useInput((input, key) => {
119
- if (props.isActive === false)
120
- return;
121
- if (key.escape) {
122
- if (searching)
123
- setSearching(false);
124
- else
125
- props.onCancel();
126
- return;
127
- }
128
- if (searching) {
129
- if (key.return || key.downArrow || key.tab) {
130
- setSearching(false);
131
- return;
132
- }
133
- if (key.backspace || key.delete)
134
- setQuery((value) => [...value].slice(0, -1).join(''));
135
- else if (input && !key.ctrl && !key.meta) {
136
- setQuery((value) => value + stripPasteFrames(stripEnterFrames(input)));
137
- }
138
- setIndex(0);
139
- return;
140
- }
141
- if (key.upArrow || (key.tab && key.shift))
142
- setIndex((cursor - 1 + count) % count);
143
- else if (key.downArrow || key.tab)
144
- setIndex((cursor + 1) % count);
145
- else if (key.return)
146
- activate();
147
- else if (input === '/' && searchable)
148
- setSearching(true);
149
- // `e` edits the focused profile directly (profile-picker-edit-key). The
150
- // branch is deliberately NOT guarded by `!props.manager`: the manager page
151
- // gains the same one-keystroke path (there `selected === focused`, see the
152
- // effect in usePickerState), which spares the Enter-to-the-action-row hop.
153
- // No-op on the `Current custom` row and the action rows (`focused` is
154
- // undefined there), and the `searching` early-return above keeps `e` a
155
- // query character while typing a search.
156
- else if (!key.ctrl && !key.meta && input.toLowerCase() === 'e' && focused) {
157
- props.onEdit(focused);
158
- }
159
- // `d` deletes the focused entry (D-7), symmetric with `e`: same guards,
160
- // same no-ops on the built-in and action rows (`focused` is undefined
161
- // there), and the `searching` early-return above keeps `d` a query
162
- // character while typing a search.
163
- else if (!key.ctrl && !key.meta && input.toLowerCase() === 'd' && focused) {
164
- props.onDelete(focused.id);
165
- }
166
- });
167
- }
168
- /** The selection id this page marks with `[Selected]`, by role (6.2). */
169
- function currentSelectionId(props) {
170
- if (props.selectedIdOverride !== undefined)
171
- return props.selectedIdOverride;
172
- // `subagent` and `binding` have no `${role}Id` key: their selection arrives
173
- // through `selectedIdOverride`, so looking one up would read a key that does
174
- // not exist on the library.
175
- if (props.role === 'subagent' || props.role === 'binding')
176
- return undefined;
177
- return props.profiles[`${props.role}Id`];
178
- }
179
- function profilePickerLabel(props, entry) {
180
- const saved = profileUsers(props.savedProfiles, entry.id, props.subagentProfileId);
181
- const checked = currentSelectionId(props) === entry.id ? '[Selected] ' : '';
182
- const duplicate = props.profiles.entries.some((other) => other.id !== entry.id
183
- && other.name === entry.name);
184
- const identity = duplicate ? `#${uniqueId(entry, props.profiles.entries)} ` : '';
185
- const detail = duplicate ? ` ${host(entry)}` : '';
186
- return `${identity}${checked}${entry.name} ${entry.provider}:${entry.model}${detail}`
187
- + (saved ? ` [${saved}]` : '');
188
- }
189
- function buildPickerRows(props, state) {
190
- const { entries, actions, cursor, searching, searchable, query, focused, selected } = state;
191
- const glyphs = pickGlyphs(props.caps);
192
- const lines = [];
193
- if (props.role === 'subagent') {
194
- // TWO BUILT-IN ROWS (D-5), marked with the same `[Selected]` prefix the
195
- // profile rows use; the fast row annotates an unusable tier honestly.
196
- const current = props.selectedIdOverride ?? null;
197
- lines.push(`${current === null ? '[Selected] ' : ''}Same as main`);
198
- lines.push(`${current === SUBAGENT_FAST_ROW_ID ? '[Selected] ' : ''}Fast tier model`
199
- + `${props.fastTierOff === true ? ' (fast tier off)' : ''}`);
200
- }
201
- else if (!props.manager && props.role !== 'binding')
202
- lines.push('Current custom');
203
- lines.push(...entries.map((entry) => profilePickerLabel(props, entry)));
204
- lines.push(...actions);
205
- const rows = lines.map((line, row) => _jsxs(Text, { wrap: "truncate", color: row === cursor ? props.theme.accent : props.theme.muted, children: [`${row === cursor && !searching ? glyphs.caret : ' '} `, clipProfileText(line, props.cols - 8)] }, row));
206
- if (searchable)
207
- rows.unshift(_jsxs(Text, { wrap: "truncate", color: props.theme.primary, children: [searching ? `${glyphs.caret} ` : ' ', "Search: ", query || '(/ to search)'] }, "search"));
208
- // The subagent picker has no `Current custom` row to describe; its
209
- // built-in rows already say everything there is to say.
210
- const detail = props.role === 'subagent' ? focused
211
- : !props.manager && props.role !== 'binding' && cursor === 0 ? props.customProfile
212
- : focused ?? selected;
213
- if (detail) {
214
- rows.push(_jsxs(Text, { wrap: "truncate", color: props.theme.muted, children: [detail.provider, ":", detail.model || '(not set)', " ", host(detail), detail === props.customProfile ? '' : ` #${detail.id}`] }, "detail"));
215
- rows.push(_jsx(Text, { wrap: "truncate", color: props.theme.muted, children: detail.apiKey ? 'Profile key: Configured'
216
- : props.apiKeys[detail.provider] ? 'Shared / environment: Configured' : 'Missing API key' }, "key"));
217
- rows.push(_jsx(Text, { wrap: "truncate", color: props.theme.muted, children: `Window: ${detail.contextWindow ?? 'auto'}` }, "window"));
218
- }
219
- return rows;
220
- }
221
- /** Profile selection and explicit management actions share one input owner. */
222
- export function ModelProfilePicker(props) {
223
- const state = usePickerState(props);
224
- usePickerInput(props, state);
225
- return _jsx(OverlayFrame, { ...props, title: props.error ?? (props.manager ? 'Manage profiles'
226
- : props.role === 'subagent' ? 'Subagent model'
227
- : props.role === 'binding' ? 'Choose profile'
228
- : `${props.role === 'main' ? 'Main' : 'Fast'} profile`), rows: buildPickerRows(props, state), scrollOffset: state.searching ? 0 : state.offset, hint: state.searching ? 'Type search | Enter done | Esc back'
229
- : props.manager ? 'Enter action | e edit | d delete | Esc back'
230
- : 'Enter select | e edit | d delete | Esc back' });
231
- }
@@ -1,51 +0,0 @@
1
- /**
2
- * PlanReviewOverlay — the reviewable card `submit_plan` renders (plan-mode §6.6).
3
- *
4
- * `OverlayFrame` MODE A (`rows`), because a 20-step plan must scroll and mode A
5
- * is the only mode with a position indicator.
6
- *
7
- * MODE A SLICES BY ELEMENT, SO THE PROSE IS PRE-WRAPPED. `sliceWindow` counts
8
- * elements, not lines, and each element must be exactly one row. The summary
9
- * runs to 600 characters and a step detail to 400 — handing either over as a
10
- * single `<Text>` would render the whole paragraph as one truncated line and
11
- * make the frame's `1-14/22` a false statement. `wrapToRows` is what keeps the
12
- * count honest.
13
- *
14
- * ACTIONS LIVE IN THE FRAME HINT, NOT IN `rows`. Mode A slices `rows`; an action
15
- * row placed there would scroll off exactly when a long plan needs it most.
16
- * Single-key actions also avoid a second selection cursor competing with the
17
- * scroll cursor.
18
- *
19
- * `Esc` IS NOT HANDLED HERE, and neither is any resolution of the pending
20
- * request: `App` owns Esc, and the bridge's `settle()` is the only place a human
21
- * request is answered (R-P12). That holds in the revise sub-state too, which is
22
- * why the way back from the feedback field is `<-` rather than `Esc` (R2-P1-2).
23
- */
24
- import React from 'react';
25
- import type { Theme } from '../theme.js';
26
- import type { TermCapabilities } from '../capabilities.js';
27
- import type { NormalizedPlan } from '../../tools/human-input.js';
28
- export type PlanVerdict = {
29
- decision: 'approved' | 'revise';
30
- feedback: string;
31
- };
32
- interface PlanReviewOverlayProps {
33
- isActive?: boolean;
34
- plan: NormalizedPlan;
35
- maxRows: number;
36
- cols: number;
37
- scrollOffset: number;
38
- onScrollClamp: (offset: number) => void;
39
- theme: Theme;
40
- caps: TermCapabilities;
41
- onVerdict: (verdict: PlanVerdict) => void;
42
- }
43
- export declare function PlanReviewOverlay({ isActive, plan, maxRows, cols, scrollOffset, onScrollClamp, theme, caps, onVerdict, }: PlanReviewOverlayProps): React.ReactElement;
44
- /**
45
- * Flatten the plan into one-row elements.
46
- *
47
- * Exported for `plan-mode.test.ts`, which asserts that a 600-character summary
48
- * really does become many rows rather than one truncated line (P1-3).
49
- */
50
- export declare function buildPlanRows(plan: NormalizedPlan, width: number, theme: Theme, bullet: string): React.ReactElement[];
51
- export {};
@@ -1,132 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- /**
3
- * PlanReviewOverlay — the reviewable card `submit_plan` renders (plan-mode §6.6).
4
- *
5
- * `OverlayFrame` MODE A (`rows`), because a 20-step plan must scroll and mode A
6
- * is the only mode with a position indicator.
7
- *
8
- * MODE A SLICES BY ELEMENT, SO THE PROSE IS PRE-WRAPPED. `sliceWindow` counts
9
- * elements, not lines, and each element must be exactly one row. The summary
10
- * runs to 600 characters and a step detail to 400 — handing either over as a
11
- * single `<Text>` would render the whole paragraph as one truncated line and
12
- * make the frame's `1-14/22` a false statement. `wrapToRows` is what keeps the
13
- * count honest.
14
- *
15
- * ACTIONS LIVE IN THE FRAME HINT, NOT IN `rows`. Mode A slices `rows`; an action
16
- * row placed there would scroll off exactly when a long plan needs it most.
17
- * Single-key actions also avoid a second selection cursor competing with the
18
- * scroll cursor.
19
- *
20
- * `Esc` IS NOT HANDLED HERE, and neither is any resolution of the pending
21
- * request: `App` owns Esc, and the bridge's `settle()` is the only place a human
22
- * request is answered (R-P12). That holds in the revise sub-state too, which is
23
- * why the way back from the feedback field is `<-` rather than `Esc` (R2-P1-2).
24
- */
25
- import { useState } from 'react';
26
- import { Text, useInput } from 'ink';
27
- import { pickGlyphs } from '../glyphs.js';
28
- import { OverlayFrame, overlayBodyRows } from '../layout/OverlayFrame.js';
29
- import { wrapToRows } from '../layout/wrap-rows.js';
30
- import { stripPasteFrames } from '../paste-frames.js';
31
- import { stripEnterFrames } from '../enter-frames.js';
32
- /** The frame's border plus its one-column padding on each side. */
33
- const FRAME_CHROME_COLS = 4;
34
- export function PlanReviewOverlay({ isActive = true, plan, maxRows, cols, scrollOffset, onScrollClamp, theme, caps, onVerdict, }) {
35
- const glyphs = pickGlyphs(caps);
36
- const [feedback, setFeedback] = useState(null);
37
- useInput((input, key) => {
38
- if (!isActive)
39
- return;
40
- if (key.escape)
41
- return; // App owns dismiss.
42
- if (feedback !== null) {
43
- if (key.return) {
44
- onVerdict({ decision: 'revise', feedback: feedback.trim() });
45
- return;
46
- }
47
- // THE WAY BACK TO THE CARD, and the reason it is `<-` and not `Esc`:
48
- // `App` owns Esc here and settles the pending request with it, so a second
49
- // Esc consumer in this overlay would be the `ConfirmDialog` double-resolve
50
- // pattern R-P12 exists to keep out. `QuestionOverlay` already spends `<-`
51
- // on "back", so this costs no key ownership. Without it the field is a
52
- // one-way door — it consumes printable input and Backspace, and the only
53
- // other exit throws the whole review away (R2-P1-2).
54
- if (key.leftArrow) {
55
- setFeedback(null);
56
- return;
57
- }
58
- if (key.backspace || key.delete) {
59
- setFeedback(feedback.slice(0, -1));
60
- return;
61
- }
62
- // `stripPasteFrames`, NOT `input` (I-12 / P0-2). This is the THIRD consumer
63
- // that appends `input` to a string; the design's table listed it as
64
- // "key-driven only, inert", which was true of the version that had no
65
- // free-text field. Revision feedback is exactly the kind of thing a user
66
- // pastes — a failing test, a stack trace — and a framed paste appended
67
- // verbatim would put NULs into text the model then reads.
68
- if (input && !key.ctrl && !key.meta && !key.tab) {
69
- // `stripEnterFrames` rides inside it for the newline frame a
70
- // Shift+Enter broadcasts (tui-shift-enter-copy-queue 3.5): same hazard,
71
- // same fix, and this order is the one that leaves no NUL in the draft.
72
- setFeedback(feedback + stripPasteFrames(stripEnterFrames(input)));
73
- }
74
- return;
75
- }
76
- if (input === 'a' || input === 'A')
77
- onVerdict({ decision: 'approved', feedback: '' });
78
- else if (input === 'r' || input === 'R')
79
- setFeedback('');
80
- });
81
- const width = Math.max(20, cols - FRAME_CHROME_COLS);
82
- const rows = buildPlanRows(plan, width, theme, glyphs.bullet);
83
- if (feedback !== null) {
84
- // `esc dismiss`, NOT "esc back to the plan": `App` owns Esc for this overlay
85
- // (R-P12) and settles the pending request with `null`, so Esc throws the
86
- // whole review away from either sub-state. `<-` is the route back to the
87
- // card, which is why it is named here too.
88
- const feedbackHint = `${glyphs.enterKey} send ${glyphs.midDot} ${glyphs.arrowLeft} back ${glyphs.midDot} esc dismiss`;
89
- return (_jsxs(OverlayFrame, { title: "What should change?", hint: feedbackHint, maxRows: maxRows, cols: cols, theme: theme, caps: caps, children: [overlayBodyRows(maxRows, cols) >= 2 && _jsx(Text, { wrap: "truncate", color: theme.muted, children: "The agent revises the plan and submits it again." }), _jsxs(Text, { wrap: "truncate", children: [_jsxs(Text, { color: theme.primary, bold: true, children: [glyphs.caret, ' '] }), feedback.length > 0 ? (_jsx(Text, { children: wrapToRows(feedback, Math.max(1, cols - FRAME_CHROME_COLS - 3)).at(-1) })) : (_jsx(Text, { color: theme.muted, children: "type feedback" })), _jsx(Text, { inverse: true, children: " " })] })] }));
90
- }
91
- return (_jsx(OverlayFrame, { title: "Review plan", hint: cols <= 48 ? "a approve r revise Esc cancel"
92
- : `a approve ${glyphs.midDot} r revise ${glyphs.midDot} esc dismiss ${glyphs.midDot} ${glyphs.arrowUp}${glyphs.arrowDown} scroll`, maxRows: maxRows, cols: cols, rows: rows, scrollOffset: scrollOffset, onScrollClamp: onScrollClamp, theme: theme, caps: caps }));
93
- }
94
- /**
95
- * Flatten the plan into one-row elements.
96
- *
97
- * Exported for `plan-mode.test.ts`, which asserts that a 600-character summary
98
- * really does become many rows rather than one truncated line (P1-3).
99
- */
100
- export function buildPlanRows(plan, width, theme, bullet) {
101
- const rows = [];
102
- let key = 0;
103
- const push = (node, color, bold) => {
104
- rows.push(_jsx(Text, { wrap: "truncate", color: color, bold: bold, children: node }, `p${key++}`));
105
- };
106
- push(plan.title, theme.assistant, true);
107
- for (const line of wrapToRows(plan.summary, width))
108
- push(line || ' ', theme.muted);
109
- push(' ');
110
- push('Steps', theme.accent, true);
111
- plan.steps.forEach((step, i) => {
112
- const number = String(i + 1).padStart(2, ' ');
113
- push(`${number} ${step.title}`);
114
- for (const line of wrapToRows(step.detail, Math.max(10, width - 4))) {
115
- push(` ${line}`, theme.muted);
116
- }
117
- });
118
- const section = (label, items) => {
119
- if (items.length === 0)
120
- return;
121
- push(' ');
122
- push(label, theme.accent, true);
123
- for (const item of items) {
124
- for (const line of wrapToRows(`${bullet} ${item}`, width))
125
- push(line, theme.muted);
126
- }
127
- };
128
- section('Files', plan.filesTouched);
129
- section('Risks', plan.risks);
130
- section('Open questions', plan.openQuestions);
131
- return rows;
132
- }