@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,227 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- /**
3
- * The prompt editor page (quick-prompt-library §4.4 / D-11).
4
- *
5
- * ASCII ONLY - `src/ui/**` is inside `glyphs.test.ts::inScope`. Labels and the footer
6
- * are English like every other overlay; every sentence that explains a REFUSAL comes
7
- * from `prompts/copy.ts`.
8
- *
9
- * SELF-MANAGED `OverlayFrame`, not the controlled one. The two modes are a
10
- * discriminated union (`children?: undefined`), and this page lays out a multi-row
11
- * body field that owns its own scrolling: handing it over as `rows` would mean the
12
- * frame counts a body's lines as rows and windows them again (P2-2).
13
- *
14
- * TWO WAYS TO SAVE, AND THE SECOND ONE IS NOT DECORATION. `Ctrl+S` is the fast path,
15
- * and it is a byte a terminal can eat (XON/XOFF) - so `Tab` to the `Save` row and
16
- * `Enter` must do exactly the same thing. That is what keeps "I cannot save" from
17
- * being a bug a whole class of terminals can reproduce.
18
- */
19
- import { useEffect, useState } from 'react';
20
- import { Box, Text, useInput } from 'ink';
21
- import { pickGlyphs } from '../glyphs.js';
22
- import { stripPasteFrames } from '../paste-frames.js';
23
- import { stripEnterFrames } from '../enter-frames.js';
24
- import { stepGrapheme } from '../editor-navigation.js';
25
- import { OverlayFrame, overlayBodyRows } from '../layout/OverlayFrame.js';
26
- import { promptErrorCopy } from '../../prompts/copy.js';
27
- import { PROMPT_EDITOR_FIELDS, fieldIndex, } from './prompt-library-state.js';
28
- import { EMPTY_TEXT_AREA, PromptTextArea, promptTextAreaReducer, } from './PromptTextArea.js';
29
- /** Columns the field labels occupy. Fixed, so the values line up. */
30
- const LABEL_CELLS = 10;
31
- /** Body rows the page reserves for chrome when the frame is generous. */
32
- const MIN_BODY_ROWS = 3;
33
- /** Text fields of the page, in the order Tab visits them. */
34
- function nextField(at, delta) {
35
- const count = PROMPT_EDITOR_FIELDS.length;
36
- return (at + delta + count) % count;
37
- }
38
- /**
39
- * Which deletion key was pressed, if any.
40
- *
41
- * `key.delete` IS TREATED AS BACKSPACE, and the reason is measured rather than assumed:
42
- * ink's parser reports the `0x7f` byte - which is what the BACKSPACE KEY sends on every
43
- * terminal this product runs on - as `name: 'delete'`, and it hands the component an
44
- * EMPTY `input` for both it and `ESC [ 3 ~`. The two are therefore indistinguishable at
45
- * this layer, and the safe reading is the one the keyboard actually produces: backward.
46
- * A forward-delete binding that fired on Backspace would delete the character the user
47
- * was not looking at, and there is no undo in this field.
48
- */
49
- function deletionKind(_input, key) {
50
- return key.backspace === true || key.delete === true ? 'backspace' : null;
51
- }
52
- /**
53
- * The page.
54
- *
55
- * The draft lives in the parent (the reducer owns it, so `Save` and `Esc` can see the
56
- * same text); this component owns only what no other surface needs: which row has
57
- * focus, and where each single-line field's caret sits.
58
- */
59
- export function PromptEditorPage(props) {
60
- const { state, cols, maxRows, theme, caps } = props;
61
- const draft = state.draft;
62
- const glyphs = pickGlyphs(caps);
63
- const [focus, setFocus] = useState(0);
64
- // THE CARET STARTS AT THE END OF EACH FIELD, which is where a user expects to append:
65
- // starting at 0 would put every typed character in FRONT of the prefilled text, so an
66
- // edit to `Clean code review` would read `FixClean code review`.
67
- const [cursors, setCursors] = useState(() => ({
68
- title: draft.title.length,
69
- description: draft.description.length,
70
- tags: draft.tags.length,
71
- }));
72
- const [content, setContent] = useState({
73
- ...EMPTY_TEXT_AREA,
74
- buffer: draft.content,
75
- cursor: draft.content.length,
76
- });
77
- const field = PROMPT_EDITOR_FIELDS[Math.min(focus, PROMPT_EDITOR_FIELDS.length - 1)];
78
- const bodyRows = Math.max(MIN_BODY_ROWS, overlayBodyRows(maxRows, cols) - 5);
79
- const fieldCols = Math.max(8, cols - LABEL_CELLS - 6);
80
- // A REFUSAL OWNS THE FOCUS (D-12): the store already names the row that failed, so the
81
- // caret is moved there instead of leaving the user to read an error in a footer and
82
- // work out which of four fields it is about. Keyed on `state.error`, so it fires once
83
- // per distinct refusal rather than on every render.
84
- useEffect(() => {
85
- if (state.error === null)
86
- return;
87
- setFocus(fieldIndex(state.errorField));
88
- }, [state.error, state.errorField]);
89
- const editSingle = (name, text, key, deletion) => {
90
- const value = draft[name];
91
- const cursor = Math.min(cursors[name], value.length);
92
- if (key.leftArrow || key.rightArrow) {
93
- setCursors({
94
- ...cursors,
95
- [name]: stepGrapheme(value, cursor, key.leftArrow ? 'left' : 'right'),
96
- });
97
- return;
98
- }
99
- if (deletion === 'backspace') {
100
- if (cursor <= 0)
101
- return;
102
- const from = stepGrapheme(value, cursor, 'left');
103
- props.onDraft({ [name]: value.slice(0, from) + value.slice(cursor) });
104
- setCursors({ ...cursors, [name]: from });
105
- return;
106
- }
107
- if (text.length === 0)
108
- return;
109
- const next = value.slice(0, cursor) + text + value.slice(cursor);
110
- props.onDraft({ [name]: next });
111
- setCursors({ ...cursors, [name]: cursor + text.length });
112
- };
113
- const applyContent = (action) => {
114
- const current = { ...content, buffer: draft.content };
115
- const next = promptTextAreaReducer(current, action);
116
- // COMPARED ON THE FIELDS, not on object identity: the reducer echoes its input object
117
- // back for a no-op move, and that object is rebuilt on every keystroke - so an
118
- // identity check would both hide the no-op and trigger a render for it.
119
- if (next.buffer !== current.buffer || next.cursor !== current.cursor)
120
- setContent(next);
121
- if (next.buffer !== draft.content)
122
- props.onDraft({ content: next.buffer });
123
- };
124
- useInput((input, key) => {
125
- if (props.isActive === false)
126
- return;
127
- // BEFORE EVERYTHING: a refused save and a dirty Esc are both two-step states, and
128
- // the accelerator that resolves them must not be swallowed by the text handling
129
- // below. `Ctrl+S` is the same precedent `SettingsScreen.tsx` set.
130
- if (key.ctrl && (input === 's' || input === 'S')) {
131
- props.onSave();
132
- return;
133
- }
134
- if (key.escape) {
135
- props.onEsc();
136
- return;
137
- }
138
- if (key.tab) {
139
- setFocus(nextField(focus, key.shift ? -1 : 1));
140
- return;
141
- }
142
- const clean = stripPasteFrames(stripEnterFrames(input));
143
- if (field === 'save') {
144
- if (key.return)
145
- props.onSave();
146
- return;
147
- }
148
- if (field === 'cancel') {
149
- if (key.return)
150
- props.onCancel();
151
- return;
152
- }
153
- if (field === 'content') {
154
- if (key.upArrow) {
155
- applyContent({ type: 'up', cols: fieldCols });
156
- return;
157
- }
158
- if (key.downArrow) {
159
- applyContent({ type: 'down', cols: fieldCols });
160
- return;
161
- }
162
- if (key.return || clean.includes('\n')) {
163
- applyContent({ type: 'newline' });
164
- return;
165
- }
166
- const contentDeletion = deletionKind(input, key);
167
- if (contentDeletion !== null) {
168
- applyContent({ type: contentDeletion });
169
- return;
170
- }
171
- if (key.leftArrow) {
172
- applyContent({ type: 'left' });
173
- return;
174
- }
175
- if (key.rightArrow) {
176
- applyContent({ type: 'right' });
177
- return;
178
- }
179
- if (key.ctrl || key.meta)
180
- return;
181
- if (clean.length > 0)
182
- applyContent({ type: 'insert', text: clean });
183
- return;
184
- }
185
- // Single-line fields: Enter advances rather than saving, because there is nothing
186
- // for a newline to mean in a one-line field.
187
- if (key.return) {
188
- setFocus(nextField(focus, 1));
189
- return;
190
- }
191
- if (key.upArrow) {
192
- setFocus(nextField(focus, -1));
193
- return;
194
- }
195
- if (key.downArrow) {
196
- setFocus(nextField(focus, 1));
197
- return;
198
- }
199
- if (key.ctrl || key.meta)
200
- return;
201
- editSingle(field, clean, key, deletionKind(input, key));
202
- });
203
- /** One text field, or an action row. The caret marks the focused one. */
204
- const row = (name) => {
205
- const focused = field === name;
206
- const caret = focused ? glyphs.caret : ' ';
207
- if (name === 'save' || name === 'cancel') {
208
- const label = name === 'save' ? 'Save' : 'Cancel';
209
- return (_jsx(Text, { wrap: "truncate", color: focused ? theme.accent : theme.muted, children: `${caret} [ ${label} ]` }, name));
210
- }
211
- const label = name === 'title' ? 'Title' : name === 'content' ? 'Body'
212
- : name === 'description' ? 'Note' : 'Tags';
213
- const value = draft[name];
214
- if (name === 'content') {
215
- return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { wrap: "truncate", color: focused ? theme.accent : theme.muted, children: `${caret} ${label.padEnd(LABEL_CELLS)}` }), _jsx(Box, { flexDirection: "column", paddingLeft: 2, children: _jsx(PromptTextArea, { state: { ...content, buffer: draft.content }, cols: fieldCols, rows: bodyRows, focused: focused, theme: theme, caps: caps, ...(props.reducedMotion === undefined ? {} : { reducedMotion: props.reducedMotion }) }) })] }, name));
216
- }
217
- const shown = value.length === 0 ? '(empty)' : value;
218
- return (_jsx(Text, { wrap: "truncate", color: focused ? theme.accent : theme.muted, children: `${caret} ${label.padEnd(LABEL_CELLS)}${shown}` }, name));
219
- };
220
- const title = state.error === null
221
- ? (draft.id === null ? 'New prompt' : 'Edit prompt')
222
- : promptErrorCopy(state.error);
223
- const hint = state.escArmed
224
- ? 'Esc again discards the draft | Tab next field'
225
- : 'Tab next field | Enter next line | Ctrl+S save | Esc close';
226
- return (_jsxs(OverlayFrame, { title: title, hint: hint, maxRows: maxRows, cols: cols, theme: theme, caps: caps, children: [_jsxs(Text, { wrap: "truncate", color: theme.muted, children: [_jsx(Text, { color: draft.favorite ? theme.toolDone : theme.muted, children: draft.favorite ? '[fav] ' : ' ' }), `${[...draft.content].length} chars`] }), _jsx(Box, { flexDirection: "column", children: PROMPT_EDITOR_FIELDS.map((name) => row(name)) })] }));
227
- }
@@ -1,37 +0,0 @@
1
- /**
2
- * The prompt manager: `Ctrl+P` (quick-prompt-library §4.4 / §6.4).
3
- *
4
- * ASCII ONLY - `src/ui/**` is inside `glyphs.test.ts::inScope`.
5
- *
6
- * A LIST PLUS A DETAIL BLOCK, the `KitPicker` idiom (F-17): three columns of prompt
7
- * metadata never fit on a 72-column terminal, and the detail block is how this
8
- * package already shows everything that does not fit in a row.
9
- *
10
- * THE OVERLAY OWNS NO DATA. Every mutation goes out through `onMutate`, and the new
11
- * snapshot comes back through `library`. An overlay that patched its own copy would
12
- * show a prompt the disk does not have (I-6), and the first time that happened the
13
- * user would find out at the next launch.
14
- */
15
- import React from 'react';
16
- import type { Theme } from '../theme.js';
17
- import type { TermCapabilities } from '../capabilities.js';
18
- import type { PromptLibrary, PromptLibraryIntent, PromptLibraryMutation, PromptMutationResult } from '../../prompts/types.js';
19
- export interface PromptLibraryOverlayProps {
20
- isActive: boolean;
21
- library: PromptLibrary;
22
- /** D-21's one-shot hand-off; consumed at most once (I-8). */
23
- intent?: PromptLibraryIntent;
24
- cols: number;
25
- maxRows: number;
26
- scrollOffset: number;
27
- onScrollClamp?: (offset: number) => void;
28
- theme: Theme;
29
- caps: TermCapabilities;
30
- reducedMotion?: boolean;
31
- /** The store, reached through `App` so this component stays a view. */
32
- onMutate: (action: PromptLibraryMutation) => PromptMutationResult;
33
- /** One-shot feedback (save, delete, write failure) for `App`'s toast channel. */
34
- onNotice?: (level: 'info' | 'warn' | 'error', text: string) => void;
35
- onClose: () => void;
36
- }
37
- export declare function PromptLibraryOverlay(props: PromptLibraryOverlayProps): React.ReactElement;
@@ -1,191 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- /**
3
- * The prompt manager: `Ctrl+P` (quick-prompt-library §4.4 / §6.4).
4
- *
5
- * ASCII ONLY - `src/ui/**` is inside `glyphs.test.ts::inScope`.
6
- *
7
- * A LIST PLUS A DETAIL BLOCK, the `KitPicker` idiom (F-17): three columns of prompt
8
- * metadata never fit on a 72-column terminal, and the detail block is how this
9
- * package already shows everything that does not fit in a row.
10
- *
11
- * THE OVERLAY OWNS NO DATA. Every mutation goes out through `onMutate`, and the new
12
- * snapshot comes back through `library`. An overlay that patched its own copy would
13
- * show a prompt the disk does not have (I-6), and the first time that happened the
14
- * user would find out at the next launch.
15
- */
16
- import { useEffect, useReducer, useRef } from 'react';
17
- import { Text, useInput } from 'ink';
18
- import { pickGlyphs } from '../glyphs.js';
19
- import { OverlayFrame } from '../layout/OverlayFrame.js';
20
- import { clipProfileText, useProfileScroll } from './ModelProfilePicker.js';
21
- import { promptDeletedCopy, promptErrorCopy, promptSavedCopy, PROMPT_EMPTY_BODY_COPY, PROMPT_EMPTY_TITLE_COPY } from '../../prompts/copy.js';
22
- import { INITIAL_PROMPT_LIBRARY_STATE, deleteDetail, finishPromptEditor, libraryDetail, libraryHint, libraryRows, promptLibraryReducer, } from './prompt-library-state.js';
23
- import { PromptEditorPage } from './PromptEditorPage.js';
24
- /** The reducer takes the library as a third argument, so it is bound per dispatch. */
25
- function reduce(state, dispatched) {
26
- return promptLibraryReducer(state, dispatched.action, dispatched.library);
27
- }
28
- export function PromptLibraryOverlay(props) {
29
- const { library, cols, theme, caps } = props;
30
- const glyphs = pickGlyphs(caps);
31
- const [state, rawDispatch] = useReducer(reduce, INITIAL_PROMPT_LIBRARY_STATE);
32
- const dispatch = (action) => rawDispatch({ action, library });
33
- const rows = libraryRows(library);
34
- const count = rows.length;
35
- const cursor = count === 0 ? 0 : Math.min(state.index, count - 1);
36
- const focused = rows[cursor];
37
- const offset = useProfileScroll(props, cursor);
38
- /**
39
- * CONSUME THE INTENT EXACTLY ONCE (I-8).
40
- *
41
- * A `useRef`, not state: the ref is written before the dispatch is processed, so a
42
- * StrictMode double-invoke of this effect sees `nonce <= consumed` and does nothing.
43
- * State would be one render behind and would open the editor twice.
44
- */
45
- const consumed = useRef(0);
46
- const intent = props.intent;
47
- useEffect(() => {
48
- if (!intent || intent.nonce <= consumed.current)
49
- return;
50
- consumed.current = intent.nonce;
51
- dispatch({ type: 'init', entry: intent.entry, library, nonce: intent.nonce });
52
- }, [intent]);
53
- /** One mutation, its refusal routed to the same two channels every time. */
54
- const mutate = (action) => {
55
- const result = props.onMutate(action);
56
- if (!result.ok)
57
- props.onNotice?.('warn', promptErrorCopy(result.code));
58
- return result;
59
- };
60
- const save = () => {
61
- const verdict = finishPromptEditor(state.draft);
62
- if (!verdict.ok) {
63
- dispatch({ type: 'failed', code: verdict.code, field: verdict.field });
64
- props.onNotice?.('warn', promptErrorCopy(verdict.code));
65
- return;
66
- }
67
- const draft = state.draft;
68
- const result = draft.id === null
69
- ? mutate({ kind: 'create', draft })
70
- : mutate({ kind: 'update', id: draft.id, draft });
71
- if (!result.ok) {
72
- // THE PAGE DOES NOT CLOSE AND THE DRAFT IS NOT TOUCHED (D-12): the editor is
73
- // where the user has invested the most, so a refusal must cost nothing.
74
- dispatch({ type: 'failed', code: result.code });
75
- return;
76
- }
77
- dispatch({ type: 'commit', id: result.id ?? draft.id });
78
- props.onNotice?.('info', promptSavedCopy(draft.title.trim()));
79
- };
80
- const confirmDelete = () => {
81
- const id = state.pendingDeleteId;
82
- if (!id) {
83
- dispatch({ type: 'cancelled' });
84
- return;
85
- }
86
- const title = library.prompts.find((prompt) => prompt.id === id)?.title ?? '';
87
- const result = mutate({ kind: 'delete', id });
88
- dispatch({ type: 'cancelled' });
89
- // `promptDeletedCopy`, not `promptSavedCopy`: the two sentences are one word apart
90
- // and the wrong one tells the user their prompt still exists.
91
- if (result.ok)
92
- props.onNotice?.('info', promptDeletedCopy(title));
93
- };
94
- useInput((input, key) => {
95
- if (props.isActive === false)
96
- return;
97
- // THE EDITOR PAGE OWNS EVERY KEY WHILE IT IS OPEN, Esc INCLUDED. Two `useInput`
98
- // hooks are live at once (this one and the page's), so handling Esc in both would
99
- // dispatch `esc` TWICE for one keypress: the first arms the discard and the second
100
- // executes it, which silently throws away a drafted body on a single Esc. The page
101
- // already reports Esc through `onEsc`, so this branch must stay silent.
102
- if (state.page === 'editor')
103
- return;
104
- if (state.page === 'delete') {
105
- if (key.escape || input === 'n' || input === 'N') {
106
- dispatch({ type: 'cancelled' });
107
- return;
108
- }
109
- if (key.return || input === 'y' || input === 'Y')
110
- confirmDelete();
111
- return;
112
- }
113
- // --- list page ---------------------------------------------------------
114
- if (key.escape) {
115
- props.onClose();
116
- return;
117
- }
118
- // THE RAW SEQUENCE **AND** THE PARSED CHORD (D-23, corrected by measurement).
119
- // Ink 5's `parse-keypress` recognises `\x1b[1;5A`, reports it as
120
- // `ctrl + upArrow`, and hands the component an EMPTY `input` - so the sequence
121
- // comparison alone would be a dead branch on this runtime, and the chord
122
- // comparison alone would miss a host that passes the raw bytes through. Either
123
- // shape reorders; `\x1b[A` (modifier lost) matches neither and only moves focus.
124
- const reorderUp = input === '\x1b[1;5A' || (key.ctrl && key.upArrow);
125
- const reorderDown = input === '\x1b[1;5B' || (key.ctrl && key.downArrow);
126
- if (reorderUp || reorderDown) {
127
- if (!focused)
128
- return;
129
- const result = mutate({ kind: 'move', id: focused.id, delta: reorderUp ? -1 : 1 });
130
- if (result.ok)
131
- dispatch({ type: 'list', focusId: focused.id });
132
- return;
133
- }
134
- if (key.upArrow || (key.tab && key.shift)) {
135
- dispatch({ type: 'focus', index: count === 0 ? 0 : (cursor - 1 + count) % count });
136
- return;
137
- }
138
- if (key.downArrow) {
139
- dispatch({ type: 'focus', index: count === 0 ? 0 : (cursor + 1) % count });
140
- return;
141
- }
142
- if (key.return) {
143
- if (focused)
144
- dispatch({ type: 'edit', id: focused.id, library });
145
- return;
146
- }
147
- if (key.ctrl || key.meta)
148
- return;
149
- if (input === 'a') {
150
- dispatch({ type: 'create' });
151
- return;
152
- }
153
- if (input === 'd' && focused) {
154
- dispatch({ type: 'delete', id: focused.id });
155
- return;
156
- }
157
- if (input === 'f' && focused) {
158
- const prompt = library.prompts.find((entry) => entry.id === focused.id);
159
- mutate({ kind: 'favorite', id: focused.id, favorite: prompt?.favorite !== true });
160
- dispatch({ type: 'list', focusId: focused.id });
161
- }
162
- });
163
- if (state.page === 'editor') {
164
- return (_jsx(PromptEditorPage, { isActive: props.isActive, state: state, cols: cols, maxRows: props.maxRows, theme: theme, caps: caps, ...(props.reducedMotion === undefined ? {} : { reducedMotion: props.reducedMotion }), onDraft: (patch) => dispatch({ type: 'draft', patch }), onSave: save, onEsc: () => dispatch({ type: 'esc' }), onCancel: () => dispatch({ type: 'cancelled' }) }));
165
- }
166
- const body = [];
167
- if (state.page === 'delete') {
168
- for (const [at, line] of deleteDetail(library, state.pendingDeleteId).entries()) {
169
- body.push(_jsx(Text, { wrap: "truncate", color: at === 0 ? theme.accent : theme.muted, children: clipProfileText(line, cols - 8) }, `del-${at}`));
170
- }
171
- return (_jsx(OverlayFrame, { title: "Delete prompt", hint: libraryHint(state, count), rows: body, scrollOffset: 0, maxRows: props.maxRows, cols: cols, theme: theme, caps: caps }));
172
- }
173
- for (const [at, row] of rows.entries()) {
174
- const isCursor = at === cursor;
175
- body.push(_jsx(Text, { wrap: "truncate", color: isCursor ? theme.accent : theme.muted, children: `${isCursor ? glyphs.caret : ' '} ${clipProfileText(row.label, cols - 8)}` }, row.id));
176
- }
177
- if (count === 0) {
178
- // TWO ROWS, NOT AN EMPTY SCREEN (§9.7): an empty list that says nothing reads as a
179
- // broken panel, and the key that fixes it (`a`) is not otherwise discoverable. The
180
- // sentences come from `prompts/copy.ts` so this state and the picker's own empty
181
- // state cannot drift into two wordings of the same advice.
182
- body.push(_jsx(Text, { wrap: "truncate", color: theme.muted, children: clipProfileText(PROMPT_EMPTY_TITLE_COPY, cols - 8) }, "empty-title"));
183
- body.push(_jsx(Text, { wrap: "truncate", color: theme.muted, children: clipProfileText(PROMPT_EMPTY_BODY_COPY, cols - 8) }, "empty-body"));
184
- }
185
- // THE DETAIL BLOCK DESCRIBES THE FOCUSED ROW ONLY, and it is last so a narrow
186
- // terminal clips the description rather than the list.
187
- for (const [at, line] of libraryDetail(focused, library, cols).entries()) {
188
- body.push(_jsx(Text, { wrap: "truncate", color: theme.muted, children: clipProfileText(` ${line}`, cols - 8) }, `detail-${at}`));
189
- }
190
- return (_jsx(OverlayFrame, { title: `Prompts${count > 0 ? ` (${count})` : ''}`, hint: libraryHint(state, count), rows: body, scrollOffset: offset, onScrollClamp: props.onScrollClamp, maxRows: props.maxRows, cols: cols, theme: theme, caps: caps }));
191
- }
@@ -1,36 +0,0 @@
1
- /**
2
- * The prompt picker: `/prompts` (quick-prompt-library §4.5).
3
- *
4
- * ASCII ONLY - `src/ui/**` is inside `glyphs.test.ts::inScope`.
5
- *
6
- * THE QUERY BOX IS THE LIST. There is no separate search field and no `/` mode: the
7
- * picker exists for one keystroke-to-answer gesture, and an extra mode to enter is an
8
- * extra thing that can be wrong about which component owns the next key.
9
- *
10
- * `Ctrl+Enter` IS RECOGNISED BY ITS BYTES, NOT BY `key.ctrl && key.return`. The stdin
11
- * filter normalises every modified Enter (`\x1b[13;5u`, the win32 record, `\x1b[13;2u`)
12
- * into `ENTER_NEWLINE_FRAME` before Ink sees it (enter-sequences.ts), so the parsed
13
- * chord never occurs - a branch written that way is dead code that LOOKS implemented
14
- * (R-11). On a terminal without keyboard enhancement the chord degrades to a plain
15
- * `Enter`, which fills without sending; the footer therefore names `Enter fill` first.
16
- */
17
- import React from 'react';
18
- import type { Theme } from '../theme.js';
19
- import type { TermCapabilities } from '../capabilities.js';
20
- import type { PromptLibrary, PromptLibraryEntry } from '../../prompts/types.js';
21
- export interface PromptPickerProps {
22
- isActive: boolean;
23
- library: PromptLibrary;
24
- cols: number;
25
- maxRows: number;
26
- scrollOffset: number;
27
- onScrollClamp?: (offset: number) => void;
28
- theme: Theme;
29
- caps: TermCapabilities;
30
- /** `submit` is true only for `Ctrl+Enter` (see `SUBMIT_FRAMES`). */
31
- onFill: (id: string, submit: boolean) => void;
32
- /** `Tab` / `a`: hand over to the manager without leaving the overlay stack. */
33
- onManage: (entry: PromptLibraryEntry) => void;
34
- onClose: () => void;
35
- }
36
- export declare function PromptPicker(props: PromptPickerProps): React.ReactElement;
@@ -1,129 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- /**
3
- * The prompt picker: `/prompts` (quick-prompt-library §4.5).
4
- *
5
- * ASCII ONLY - `src/ui/**` is inside `glyphs.test.ts::inScope`.
6
- *
7
- * THE QUERY BOX IS THE LIST. There is no separate search field and no `/` mode: the
8
- * picker exists for one keystroke-to-answer gesture, and an extra mode to enter is an
9
- * extra thing that can be wrong about which component owns the next key.
10
- *
11
- * `Ctrl+Enter` IS RECOGNISED BY ITS BYTES, NOT BY `key.ctrl && key.return`. The stdin
12
- * filter normalises every modified Enter (`\x1b[13;5u`, the win32 record, `\x1b[13;2u`)
13
- * into `ENTER_NEWLINE_FRAME` before Ink sees it (enter-sequences.ts), so the parsed
14
- * chord never occurs - a branch written that way is dead code that LOOKS implemented
15
- * (R-11). On a terminal without keyboard enhancement the chord degrades to a plain
16
- * `Enter`, which fills without sending; the footer therefore names `Enter fill` first.
17
- */
18
- import { useState } from 'react';
19
- import { Text, useInput } from 'ink';
20
- import { pickGlyphs } from '../glyphs.js';
21
- import { OverlayFrame } from '../layout/OverlayFrame.js';
22
- import { ENTER_NEWLINE_FRAME } from '../../input/limits.js';
23
- import { PROMPT_PICKER_LIMITS } from '../../prompts/limits.js';
24
- import { nextView } from '../../prompts/search.js';
25
- import { stripPasteFrames } from '../paste-frames.js';
26
- import { stripEnterFrames } from '../enter-frames.js';
27
- import { clipProfileText, useProfileScroll } from './ModelProfilePicker.js';
28
- import { pickerDetail, pickerDigitTarget, pickerHint, pickerRows, } from './prompt-picker-state.js';
29
- /** Every modified Enter the stdin filter folds into its frame, plus the raw CSI-u. */
30
- const SUBMIT_FRAMES = [ENTER_NEWLINE_FRAME, '\x1b[13;5u'];
31
- export function PromptPicker(props) {
32
- const { library, cols, theme, caps } = props;
33
- const glyphs = pickGlyphs(caps);
34
- const [query, setQuery] = useState('');
35
- const [view, setView] = useState('manual');
36
- // THE FOCUS IS AN ID, NOT AN INDEX (D-9's cost, paid here): both filtering and
37
- // `Ctrl+S` can reorder the list under the cursor, and an index would silently point
38
- // at a different prompt after either.
39
- const [focusId, setFocusId] = useState(null);
40
- const rows = pickerRows({ library, query, view });
41
- const found = rows.findIndex((row) => row.id === focusId);
42
- const cursor = rows.length === 0 ? 0 : Math.max(0, Math.min(found, rows.length - 1));
43
- const focused = rows[cursor];
44
- const offset = useProfileScroll(props, cursor);
45
- const empty = library.prompts.length === 0;
46
- const fill = (id, submit) => {
47
- if (!id)
48
- return;
49
- props.onFill(id, submit);
50
- };
51
- useInput((input, key) => {
52
- if (props.isActive === false)
53
- return;
54
- if (key.escape) {
55
- props.onClose();
56
- return;
57
- }
58
- // BEFORE `key.return`: the frame arrives with `return` false, so this branch must
59
- // not be reachable only through the plain-Enter path.
60
- if (SUBMIT_FRAMES.includes(input)) {
61
- fill(focused?.id, true);
62
- return;
63
- }
64
- if (key.return) {
65
- fill(focused?.id, false);
66
- return;
67
- }
68
- if (key.ctrl && (input === 's' || input === 'S')) {
69
- setView(nextView(view));
70
- return;
71
- }
72
- if (key.upArrow) {
73
- if (rows.length === 0)
74
- return;
75
- setFocusId(rows[(cursor - 1 + rows.length) % rows.length].id);
76
- return;
77
- }
78
- if (key.downArrow) {
79
- if (rows.length === 0)
80
- return;
81
- setFocusId(rows[(cursor + 1) % rows.length].id);
82
- return;
83
- }
84
- if (key.tab) {
85
- // ONE OVERLAY STACK, NOT TWO (AC-23): the picker hands the manager an intent and
86
- // closes, and an empty library lands straight in the editor because there is
87
- // nothing for a list page to show.
88
- props.onManage(empty ? { kind: 'create' } : { kind: 'list' });
89
- return;
90
- }
91
- if (key.backspace || key.delete) {
92
- setQuery((value) => [...value].slice(0, -1).join(''));
93
- return;
94
- }
95
- if (key.ctrl || key.meta)
96
- return;
97
- const clean = stripPasteFrames(stripEnterFrames(input));
98
- if (clean.length === 0)
99
- return;
100
- if (query.length === 0) {
101
- // `1`-`9` PICK A ROW (AC-21). Only while the query is empty: otherwise the digit
102
- // is the first character of what the user is searching for.
103
- if (input === 'a' && empty) {
104
- props.onManage({ kind: 'create' });
105
- return;
106
- }
107
- const target = pickerDigitTarget(rows, input);
108
- if (target !== null) {
109
- fill(target, false);
110
- return;
111
- }
112
- }
113
- setQuery((value) => (value + clean).slice(0, PROMPT_PICKER_LIMITS.queryMaxChars));
114
- setFocusId(null);
115
- });
116
- const body = [
117
- _jsx(Text, { wrap: "truncate", color: theme.primary, children: `${glyphs.caret} ${query.length > 0 ? query : '(type to filter)'}` }, "query"),
118
- ];
119
- for (const [at, row] of rows.entries()) {
120
- const isCursor = at === cursor;
121
- const marks = `${row.favorite ? ' [fav]' : ''}${row.tags.length > 0 ? ` #${row.tags[0]}` : ''}`;
122
- body.push(_jsx(Text, { wrap: "truncate", color: isCursor ? theme.accent : theme.muted, children: `${isCursor ? glyphs.caret : ' '} ${row.index}. `
123
- + clipProfileText(`${row.title}${marks}`, cols - 12) }, row.id));
124
- }
125
- for (const [at, line] of pickerDetail(focused, library).entries()) {
126
- body.push(_jsx(Text, { wrap: "truncate", color: theme.muted, children: clipProfileText(` ${line}`, cols - 8) }, `detail-${at}`));
127
- }
128
- return (_jsx(OverlayFrame, { title: `Pick a prompt (${rows.length}/${library.prompts.length})`, hint: pickerHint({ count: rows.length, query, view }), rows: body, scrollOffset: offset, onScrollClamp: props.onScrollClamp, maxRows: props.maxRows, cols: cols, theme: theme, caps: caps }));
129
- }