@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,120 +0,0 @@
1
- /**
2
- * The acceptance-criteria model (todo-acceptance-criteria §6.2 / §6.3 / §6.6.2).
3
- *
4
- * ASCII ONLY: `src/todo/**` is inside the glyph scanner's scope.
5
- *
6
- * PURE: no I/O, no timers, no `Date.now()`. The clock is injected where a
7
- * timestamp is needed, exactly as `TodoStore`'s constructor does (P2-4).
8
- *
9
- * ONE PRINCIPLE RUNS THROUGH THE WHOLE FILE, and it is the reason this module
10
- * exists: **a verdict is evidence, a plan is a belief**. A verdict is never
11
- * destroyed by omission - not by re-sending the criterion as `pending`, and not
12
- * by leaving it out of the list altogether - because a full replacement means the
13
- * model re-sends the whole table on every turn and one lapse would silently erase
14
- * a conclusion the user was shown. An unchecked criterion, by contrast, IS a
15
- * plan, so a re-plan is free to drop it.
16
- *
17
- * NEVER THROWS, NEVER REJECTS, ONLY REPAIRS (I-9): the same discipline
18
- * `normalize.ts` records for the todo list itself.
19
- */
20
- import type { AcceptanceItem, AcceptanceSnapshot, PlanPhase, TodoItem, TodoSnapshot } from './types.js';
21
- export interface NormalizeAcceptanceResult {
22
- items: AcceptanceItem[];
23
- /** How many entries the payload contained BEFORE dropping and capping. */
24
- requested: number;
25
- /** Human-readable repair notes, already bounded. Empty when nothing was wrong. */
26
- repairs: string[];
27
- }
28
- export interface NormalizeAcceptanceOptions {
29
- /** `todo.acceptance`, read LIVE (D-11). False short-circuits everything below. */
30
- enabled: boolean;
31
- /**
32
- * Per-lineage dedupe of the restoration note (§6.2.1 step 9 / P2-4).
33
- *
34
- * OWNED BY `TodoStore`, not by this module: the note would otherwise be
35
- * re-printed on every turn, because the model has no way to know the server
36
- * restored a verdict and would keep sending the same `pending` row. Passing the
37
- * set in keeps this function pure and keeps the dedupe state in the one object
38
- * that already owns the plan's lifetime.
39
- */
40
- restoredNotes?: Set<string>;
41
- }
42
- /**
43
- * Repair whatever arrived in the `acceptance` field of a `todo_write` call.
44
- *
45
- * ORDER IS SEMANTICS, and one step of that order is load-bearing enough to be a
46
- * review condition (C-2): `enabled` short-circuits FIRST, then `undefined`, then
47
- * `Array.isArray`. `undefined` (the key is absent) and `[]` (the model sent an
48
- * empty array) are NOT the same thing: absent means "I am only updating steps,
49
- * keep the table", empty means "this plan needs no criteria". This is the one
50
- * place in the feature where the two differ (§9).
51
- */
52
- export declare function normalizeAcceptance(raw: unknown, previous: readonly AcceptanceItem[], options: NormalizeAcceptanceOptions): NormalizeAcceptanceResult;
53
- /**
54
- * The immutable projection of one committed table (§6.2.2).
55
- *
56
- * CALLED FROM EXACTLY ONE PLACE PER COMMIT - `TodoStore`'s `write` / `restore` /
57
- * `clear` / `reopenAll` - and stored, never recomputed on read. `snapshot()` runs
58
- * on every event; recomputing here would stamp a new `now()` and a new object
59
- * each frame, invalidating `TodoCard`'s `React.memo` and the transcript's height
60
- * cache (P1-3).
61
- */
62
- export declare function acceptanceSummary(items: readonly AcceptanceItem[], now: () => number): AcceptanceSnapshot;
63
- /**
64
- * The ONE judge of "which phase is this plan in" (I-3 / D-5).
65
- *
66
- * Derived rather than stored, so the model, the rail, the transcript card and the
67
- * machine event stream cannot disagree: a stored field would be a second writer
68
- * of a fact that two lists already determine. Callers must not invoke this for a
69
- * `null` plan.
70
- */
71
- export declare function derivePlanPhase(items: readonly TodoItem[], acceptance: readonly AcceptanceItem[] | null): PlanPhase;
72
- /**
73
- * "Is there nothing left to do in this plan" - THE single judge (G-4 / I-3).
74
- *
75
- * Referenced by follow-through, by `App`'s grace-window re-check and by
76
- * `TodoStore.beginUserTurn`, because "every step is completed" stopped being the
77
- * same claim as "the work is done" the moment acceptance criteria existed. Three
78
- * copies of the old equation is exactly how a plan gets cleared while its last
79
- * criterion is still unchecked.
80
- */
81
- export declare function planIsResolved(items: readonly TodoItem[], acceptance: readonly AcceptanceItem[] | null): boolean;
82
- export declare function countUnfinishedSteps(items: readonly TodoItem[]): number;
83
- export declare function countUncheckedCriteria(acceptance: readonly AcceptanceItem[] | null): number;
84
- /** What is left in a plan, as the two numbers the notices are written from. */
85
- export interface Outstanding {
86
- steps: number;
87
- checks: number;
88
- }
89
- /**
90
- * The six follow-through exits all need "how much is left", and after this
91
- * feature that quantity has two halves (§6.6.1.1). One function decides it, so no
92
- * exit can print `0 steps left` on a plan whose steps are all done but whose
93
- * criteria are not - which is what `total - doneCount` would say on every verify
94
- * turn.
95
- */
96
- export declare function outstandingOf(snapshot: TodoSnapshot): Outstanding;
97
- /**
98
- * Singular and plural decided in ONE place (§6.6.1.1): six call sites must not
99
- * each spell their own.
100
- */
101
- export declare function criteriaPhrase(count: number): string;
102
- /**
103
- * A bounded enumeration of what a plan still owes, for the tool result text
104
- * (§6.3). Ordered `todoFirst` because the tool result is read top-down and the
105
- * step being worked on is the more urgent of the two when both exist.
106
- *
107
- * BOUNDED BY CONSTRUCTION at `VERIFY_MESSAGE_LIMITS.uncheckedItems` rows: this
108
- * string is paid for on every call (I-11).
109
- */
110
- export declare function planOutstanding(items: readonly TodoItem[], acceptance: readonly AcceptanceItem[] | null, todoFirst: boolean): string[];
111
- /**
112
- * The continuation text for the verification phase (§6.6.2).
113
- *
114
- * CONSTRUCTIVELY BOUNDED, which is what AC-22 asserts: the unchecked list stops
115
- * at 5 rows, the failed list at 2, `check` is clipped to 100 characters and
116
- * `evidence` to 60. Both truncations are deliberate - the full text is already in
117
- * the model's own previous payload, so re-sending it is paying twice for the same
118
- * bytes; what the model needs is a reminder of WHICH rows are open.
119
- */
120
- export declare function buildVerifyMessage(snapshot: TodoSnapshot): string;
@@ -1,399 +0,0 @@
1
- /**
2
- * The acceptance-criteria model (todo-acceptance-criteria §6.2 / §6.3 / §6.6.2).
3
- *
4
- * ASCII ONLY: `src/todo/**` is inside the glyph scanner's scope.
5
- *
6
- * PURE: no I/O, no timers, no `Date.now()`. The clock is injected where a
7
- * timestamp is needed, exactly as `TodoStore`'s constructor does (P2-4).
8
- *
9
- * ONE PRINCIPLE RUNS THROUGH THE WHOLE FILE, and it is the reason this module
10
- * exists: **a verdict is evidence, a plan is a belief**. A verdict is never
11
- * destroyed by omission - not by re-sending the criterion as `pending`, and not
12
- * by leaving it out of the list altogether - because a full replacement means the
13
- * model re-sends the whole table on every turn and one lapse would silently erase
14
- * a conclusion the user was shown. An unchecked criterion, by contrast, IS a
15
- * plan, so a re-plan is free to drop it.
16
- *
17
- * NEVER THROWS, NEVER REJECTS, ONLY REPAIRS (I-9): the same discipline
18
- * `normalize.ts` records for the todo list itself.
19
- */
20
- import { ACCEPT_LIMITS, VERIFY_MESSAGE_LIMITS } from './limits.js';
21
- /**
22
- * Collapse whitespace and clamp.
23
- *
24
- * LOCAL RATHER THAN SHARED WITH `normalize.ts`: that module is not in this
25
- * feature's change plan (§7.2), and the whole helper is four lines. Sanitizing at
26
- * the store is the argument `normalize.ts::clean` records - a newline inside a
27
- * rail row breaks the layout - and doing it here means the transcript card, the
28
- * headless writer and `/todo status` all inherit the guarantee for free.
29
- */
30
- function clean(value, maxChars) {
31
- if (typeof value !== 'string')
32
- return '';
33
- const collapsed = value.replace(/\s+/g, ' ').trim();
34
- return collapsed.length > maxChars ? collapsed.slice(0, maxChars) : collapsed;
35
- }
36
- /** The three states the MODEL may name. `in_progress` is store-owned (P0-1). */
37
- const MODEL_STATUSES = new Set([
38
- 'pending',
39
- 'passed',
40
- 'failed',
41
- ]);
42
- const EMPTY = { items: [], requested: 0, repairs: [] };
43
- /**
44
- * Repair whatever arrived in the `acceptance` field of a `todo_write` call.
45
- *
46
- * ORDER IS SEMANTICS, and one step of that order is load-bearing enough to be a
47
- * review condition (C-2): `enabled` short-circuits FIRST, then `undefined`, then
48
- * `Array.isArray`. `undefined` (the key is absent) and `[]` (the model sent an
49
- * empty array) are NOT the same thing: absent means "I am only updating steps,
50
- * keep the table", empty means "this plan needs no criteria". This is the one
51
- * place in the feature where the two differ (§9).
52
- */
53
- export function normalizeAcceptance(raw, previous, options) {
54
- // 1. The capability is off. STRONGEST SHORT-CIRCUIT: no data may survive it, or
55
- // `/todo acceptance off` would look like it did nothing while the rail kept
56
- // drawing an ACCEPT section (P0-2). No repair note either - the model
57
- // sending an extra field it learned elsewhere is not its mistake, and a note
58
- // would turn a harmless extra key into a wasted turn.
59
- if (!options.enabled)
60
- return { ...EMPTY, items: [] };
61
- // 2. The key is ABSENT: this turn is about the steps. Keep the table.
62
- if (raw === undefined) {
63
- return { items: [...previous], requested: previous.length, repairs: [] };
64
- }
65
- // 3. Not an array at all: nothing usable. Same disposition as `normalizeTodos`.
66
- if (!Array.isArray(raw))
67
- return { ...EMPTY, items: [] };
68
- const requested = raw.length;
69
- const repairs = [];
70
- const kept = [];
71
- for (const entry of raw) {
72
- const item = readItem(entry);
73
- if (!item)
74
- continue;
75
- kept.push(item);
76
- }
77
- const dropped = requested - kept.length;
78
- if (dropped > 0) {
79
- repairs.push(`${dropped} ${dropped === 1 ? 'criterion was' : 'criteria were'} dropped: each needs a non-empty content string.`);
80
- }
81
- const verdicts = applyVerdictRules(kept, previous, options.restoredNotes, repairs);
82
- // AN EXPLICIT EMPTY ARRAY IS A STATEMENT, NOT AN OMISSION (§9): the model is saying
83
- // "this plan needs no criteria", so nothing is restored from the previous table.
84
- // Only a NON-empty replacement can be missing a row it did not mean to drop.
85
- const restored = requested === 0
86
- ? verdicts
87
- : restoreOmitted(verdicts, previous, options.restoredNotes, repairs);
88
- // STEP 11: `reopen` is CONSUMED, not stored. A table carrying it would put an input
89
- // flag into the snapshot, the session file and the transcript card, where nothing
90
- // reads it and everything would have to learn to ignore it.
91
- return { items: cap(restored, requested, repairs).map(withoutReopen), requested, repairs };
92
- }
93
- function withoutReopen(item) {
94
- if (item.reopen === undefined)
95
- return item;
96
- const { reopen: _reopen, ...rest } = item;
97
- return rest;
98
- }
99
- /**
100
- * One payload entry, repaired. `null` means it is not a criterion at all.
101
- *
102
- * `in_progress` IS DOWNGRADED SILENTLY (P0-1): the store owns that state
103
- * (`TodoStore.write` re-derives it after every commit), the schema never offers
104
- * it, and a note would be re-printed on every turn for a model that keeps echoing
105
- * it. Downgrading produces exactly the same result as sending `pending`, which is
106
- * the idempotence we want.
107
- */
108
- function readItem(entry) {
109
- if (!entry || typeof entry !== 'object')
110
- return null;
111
- const src = entry;
112
- const content = clean(src.content, ACCEPT_LIMITS.contentChars);
113
- // The one field with no repair: a criterion with nothing to say is not a
114
- // criterion.
115
- if (content.length === 0)
116
- return null;
117
- const status = (typeof src.status === 'string' && MODEL_STATUSES.has(src.status) ? src.status : 'pending');
118
- const item = {
119
- content,
120
- check: clean(src.check, ACCEPT_LIMITS.checkChars),
121
- status,
122
- evidence: clean(src.evidence, ACCEPT_LIMITS.evidenceChars),
123
- };
124
- // Carried just far enough for the verdict rules to see it; stripped again before
125
- // the table is returned (§6.2.1 step 11: the flag is input, never storage).
126
- if (src.reopen === true)
127
- item.reopen = true;
128
- return item;
129
- }
130
- /**
131
- * A verdict without evidence is not a verdict (D-3), and a verdict is not undone
132
- * by re-sending the same criterion as `pending` (D-4, first half).
133
- *
134
- * `reopen` is the only door back to `pending`, and it also clears the evidence:
135
- * re-opening a criterion means giving up what it claimed before.
136
- */
137
- function applyVerdictRules(items, previous, restoredNotes, repairs) {
138
- const byContent = new Map();
139
- for (const prior of previous) {
140
- if (!byContent.has(prior.content))
141
- byContent.set(prior.content, prior);
142
- }
143
- return items.map((item, index) => {
144
- if (item.status !== 'pending') {
145
- if (item.evidence.length > 0)
146
- return item;
147
- repairs.push(`criterion ${index + 1} had a verdict but no evidence; it is back to unchecked.`);
148
- return { ...item, status: 'pending', evidence: '' };
149
- }
150
- // RE-OPENING IS THE ONE DELIBERATE WAY BACK TO UNCHECKED (D-4), and it also
151
- // forfeits the old evidence: a criterion being checked again has no verdict yet.
152
- if (item.reopen === true)
153
- return { ...item, evidence: '' };
154
- const prior = byContent.get(item.content);
155
- if (!prior || prior.status === 'pending')
156
- return item;
157
- noteOnce(restoredNotes, item.content, repairs, `criterion ${index + 1} kept its earlier verdict (a verdict is not undone by ` +
158
- 'omission; send reopen: true to re-check it).');
159
- return { ...item, status: prior.status, evidence: prior.evidence };
160
- });
161
- }
162
- /**
163
- * Record a restoration note AT MOST ONCE PER CRITERION (P2-4).
164
- *
165
- * The model does not know the server restored anything, so it sends the same row
166
- * again on the next turn. Without this the identical `Note:` is billed every turn,
167
- * for as long as the plan lives.
168
- */
169
- function noteOnce(restoredNotes, content, repairs, text) {
170
- if (!restoredNotes) {
171
- repairs.push(text);
172
- return;
173
- }
174
- if (restoredNotes.has(content))
175
- return;
176
- restoredNotes.add(content);
177
- repairs.push(text);
178
- }
179
- /**
180
- * D-4's OTHER HALF (P0-4): a criterion that is MISSING from a full replacement
181
- * keeps its verdict too.
182
- *
183
- * The commonest shape of "omission" is not a re-sent `pending` row, it is a
184
- * table that is one row shorter - and without this the criterion, its verdict and
185
- * its evidence all disappear while `total` silently shrinks (`4/5` becomes
186
- * `3/4` and nothing says so).
187
- *
188
- * Restored rows go to the TAIL, which is also where `cap` starts cutting, so a
189
- * re-plan that grows past the ceiling loses restored rows rather than the model's
190
- * newest intent. An UNCHECKED omitted criterion is dropped on purpose: that is a
191
- * plan, not a verdict.
192
- */
193
- function restoreOmitted(items, previous, restoredNotes, repairs) {
194
- if (previous.length === 0)
195
- return items;
196
- const present = new Set(items.map((item) => item.content));
197
- const restored = [...items];
198
- for (const prior of previous) {
199
- if (present.has(prior.content) || prior.status === 'pending')
200
- continue;
201
- present.add(prior.content);
202
- restored.push({
203
- content: prior.content,
204
- check: prior.check,
205
- status: prior.status,
206
- evidence: prior.evidence,
207
- });
208
- // ALWAYS RESTORED; the NOTE is what is deduped, never the restoration itself.
209
- noteOnce(restoredNotes, prior.content, repairs, `criterion ${restored.length} was missing from the list but had a verdict; it was kept ` +
210
- 'with its evidence (send reopen: true to re-check it).');
211
- }
212
- return restored;
213
- }
214
- /**
215
- * DROP FIRST AND CAP SECOND would be wrong here, and the ORDER is reversed on
216
- * purpose: restored rows sit at the tail exactly so that this `slice` takes them
217
- * before it takes anything the model just sent.
218
- */
219
- function cap(items, requested, repairs) {
220
- const ceiling = ACCEPT_LIMITS.maxItems;
221
- if (items.length <= ceiling)
222
- return items;
223
- const dropped = items.length - ceiling;
224
- repairs.push(`${requested} criteria were sent; the last ${dropped} were dropped (maximum ${ceiling}).`);
225
- return items.slice(0, ceiling);
226
- }
227
- /**
228
- * The immutable projection of one committed table (§6.2.2).
229
- *
230
- * CALLED FROM EXACTLY ONE PLACE PER COMMIT - `TodoStore`'s `write` / `restore` /
231
- * `clear` / `reopenAll` - and stored, never recomputed on read. `snapshot()` runs
232
- * on every event; recomputing here would stamp a new `now()` and a new object
233
- * each frame, invalidating `TodoCard`'s `React.memo` and the transcript's height
234
- * cache (P1-3).
235
- */
236
- export function acceptanceSummary(items, now) {
237
- let passedCount = 0;
238
- let failedCount = 0;
239
- for (const item of items) {
240
- if (item.status === 'passed')
241
- passedCount += 1;
242
- else if (item.status === 'failed')
243
- failedCount += 1;
244
- }
245
- return {
246
- items: [...items],
247
- total: items.length,
248
- checkedCount: passedCount + failedCount,
249
- passedCount,
250
- failedCount,
251
- updatedAt: now(),
252
- };
253
- }
254
- /**
255
- * The ONE judge of "which phase is this plan in" (I-3 / D-5).
256
- *
257
- * Derived rather than stored, so the model, the rail, the transcript card and the
258
- * machine event stream cannot disagree: a stored field would be a second writer
259
- * of a fact that two lists already determine. Callers must not invoke this for a
260
- * `null` plan.
261
- */
262
- export function derivePlanPhase(items, acceptance) {
263
- const allStepsDone = items.length > 0 && items.every((item) => item.status === 'completed');
264
- if (!allStepsDone)
265
- return 'work';
266
- if (!acceptance || acceptance.length === 0)
267
- return 'done';
268
- // "Unresolved" is `pending` and `in_progress`; the other two states of the
269
- // four-state model are already verdicts.
270
- const unresolved = acceptance.some((item) => item.status === 'pending' || item.status === 'in_progress');
271
- return unresolved ? 'verify' : 'done';
272
- }
273
- /**
274
- * "Is there nothing left to do in this plan" - THE single judge (G-4 / I-3).
275
- *
276
- * Referenced by follow-through, by `App`'s grace-window re-check and by
277
- * `TodoStore.beginUserTurn`, because "every step is completed" stopped being the
278
- * same claim as "the work is done" the moment acceptance criteria existed. Three
279
- * copies of the old equation is exactly how a plan gets cleared while its last
280
- * criterion is still unchecked.
281
- */
282
- export function planIsResolved(items, acceptance) {
283
- return items.length > 0 && derivePlanPhase(items, acceptance) === 'done';
284
- }
285
- export function countUnfinishedSteps(items) {
286
- let count = 0;
287
- for (const item of items)
288
- if (item.status !== 'completed')
289
- count += 1;
290
- return count;
291
- }
292
- export function countUncheckedCriteria(acceptance) {
293
- if (!acceptance)
294
- return 0;
295
- let count = 0;
296
- for (const item of acceptance) {
297
- if (item.status === 'pending' || item.status === 'in_progress')
298
- count += 1;
299
- }
300
- return count;
301
- }
302
- /**
303
- * The six follow-through exits all need "how much is left", and after this
304
- * feature that quantity has two halves (§6.6.1.1). One function decides it, so no
305
- * exit can print `0 steps left` on a plan whose steps are all done but whose
306
- * criteria are not - which is what `total - doneCount` would say on every verify
307
- * turn.
308
- */
309
- export function outstandingOf(snapshot) {
310
- return {
311
- steps: countUnfinishedSteps(snapshot.items),
312
- checks: countUncheckedCriteria(snapshot.acceptance?.items ?? null),
313
- };
314
- }
315
- /**
316
- * Singular and plural decided in ONE place (§6.6.1.1): six call sites must not
317
- * each spell their own.
318
- */
319
- export function criteriaPhrase(count) {
320
- return count === 1 ? '1 acceptance criterion' : `${count} acceptance criteria`;
321
- }
322
- /**
323
- * A bounded enumeration of what a plan still owes, for the tool result text
324
- * (§6.3). Ordered `todoFirst` because the tool result is read top-down and the
325
- * step being worked on is the more urgent of the two when both exist.
326
- *
327
- * BOUNDED BY CONSTRUCTION at `VERIFY_MESSAGE_LIMITS.uncheckedItems` rows: this
328
- * string is paid for on every call (I-11).
329
- */
330
- export function planOutstanding(items, acceptance, todoFirst) {
331
- const steps = items
332
- .map((item, index) => ({ item, index }))
333
- .filter(({ item }) => item.status !== 'completed')
334
- .map(({ item, index }) => `${index + 1}. ${item.content}`);
335
- const checks = (acceptance ?? [])
336
- .map((item, index) => ({ item, index }))
337
- .filter(({ item }) => item.status === 'pending' || item.status === 'in_progress')
338
- .map(({ item, index }) => `${index + 1}. ${item.content}`);
339
- const limit = VERIFY_MESSAGE_LIMITS.uncheckedItems;
340
- return (todoFirst ? [...steps, ...checks] : [...checks, ...steps]).slice(0, limit);
341
- }
342
- /**
343
- * The continuation text for the verification phase (§6.6.2).
344
- *
345
- * CONSTRUCTIVELY BOUNDED, which is what AC-22 asserts: the unchecked list stops
346
- * at 5 rows, the failed list at 2, `check` is clipped to 100 characters and
347
- * `evidence` to 60. Both truncations are deliberate - the full text is already in
348
- * the model's own previous payload, so re-sending it is paying twice for the same
349
- * bytes; what the model needs is a reminder of WHICH rows are open.
350
- */
351
- export function buildVerifyMessage(snapshot) {
352
- const criteria = snapshot.acceptance?.items ?? [];
353
- const unchecked = selectRows(criteria, (item) => item.status === 'pending' || item.status === 'in_progress', VERIFY_MESSAGE_LIMITS.uncheckedItems);
354
- const failed = selectRows(criteria, (item) => item.status === 'failed', VERIFY_MESSAGE_LIMITS.failedItems);
355
- const lines = ['Every step is complete. Verify the acceptance criteria one at a time.'];
356
- if (unchecked.rows.length > 0) {
357
- lines.push('Unchecked:');
358
- for (const { item, index } of unchecked.rows) {
359
- lines.push(`${index + 1}. ${item.content}`);
360
- const hint = clip(item.check, VERIFY_MESSAGE_LIMITS.checkChars);
361
- if (hint.length > 0)
362
- lines.push(` check: ${hint}`);
363
- }
364
- if (unchecked.hidden > 0)
365
- lines.push(` ... and ${unchecked.hidden} more`);
366
- }
367
- if (failed.rows.length > 0) {
368
- lines.push(`${failed.total} failed so far - fix those before claiming the work is done:`);
369
- for (const { item, index } of failed.rows) {
370
- lines.push(`${index + 1}. ${item.content}`);
371
- const seen = clip(item.evidence, VERIFY_MESSAGE_LIMITS.evidenceChars);
372
- if (seen.length > 0)
373
- lines.push(` evidence: ${seen}`);
374
- }
375
- }
376
- lines.push('Check ONE, then call todo_write with that verdict and its evidence.');
377
- return lines.join('\n');
378
- }
379
- /**
380
- * The first `limit` matches, each carrying its 1-BASED position in the WHOLE
381
- * table: "step 5" must mean the same thing here as it does in the rail, which is
382
- * why the position is read from the full walk rather than from the filtered list.
383
- */
384
- function selectRows(all, keep, limit) {
385
- const rows = [];
386
- let total = 0;
387
- for (let index = 0; index < all.length; index += 1) {
388
- const item = all[index];
389
- if (!keep(item))
390
- continue;
391
- total += 1;
392
- if (rows.length < limit)
393
- rows.push({ item, index });
394
- }
395
- return { rows, total, hidden: Math.max(0, total - rows.length) };
396
- }
397
- function clip(text, maxChars) {
398
- return text.length > maxChars ? text.slice(0, maxChars) : text;
399
- }
@@ -1,138 +0,0 @@
1
- /**
2
- * follow-through — what happens when a run ends with unfinished work
3
- * (todo-plan-followthrough §3.2 / §3.3; todo-acceptance-criteria §6.6).
4
- *
5
- * ASCII ONLY: `src/todo/**` is inside the glyph scanner's scope
6
- * (`glyphs.test.ts`), and every string this module builds is user-visible.
7
- *
8
- * PURE. No I/O, no timers, no React, no `Date.now()` — the discipline
9
- * `TodoStore`'s injected clock already establishes. The TUI (`App.tsx`) and
10
- * headless mode (`agent/headless.ts`) both call `decideFollowThrough`, which is
11
- * the only reason the two cannot drift; a second copy of this table in either
12
- * caller is the defect this file exists to prevent.
13
- *
14
- * IT NEVER WRITES TO `TodoStore` (I-1 / C-3). Follow-through reads snapshots and
15
- * produces a MESSAGE; the plan changes only when the model calls `todo_write`,
16
- * which keeps the list a projection of what the model believes.
17
- *
18
- * "UNFINISHED WORK" HAS TWO HALVES SINCE ACCEPTANCE CRITERIA EXISTED (§6.6.1):
19
- * steps still to do, and criteria still unchecked. Every exit below reads them
20
- * from `outstandingOf`, and while ANY step is left the wording is byte-identical
21
- * to the version without this feature (I-5) - because that is the phase in which
22
- * the old sentences are already true. In the verification phase, where
23
- * `total - doneCount` is always 0, saying "0 steps left" would be the exact
24
- * opposite of the truth at the moment the user most wants reassurance.
25
- */
26
- import type { TodoSnapshot } from './types.js';
27
- /**
28
- * `notify` — say something true and stop (the default; round 1's behaviour).
29
- * `auto` — continue the plan, under the economy below.
30
- * `off` — say nothing at all.
31
- */
32
- export type FollowThroughMode = 'notify' | 'auto' | 'off';
33
- /** Carried across runs by the caller. Serializable, comparable, inert. */
34
- export interface FollowThroughBudget {
35
- /**
36
- * Auto-continuations issued against this plan LINEAGE.
37
- *
38
- * MONOTONIC UNTIL THE PLAN IS GONE (P0-1 / D-16 / I-8). It is NOT reset by a
39
- * re-plan: a model that emits a differently-sized plan on every continuation
40
- * would otherwise zero both counters every turn while `staleTurns` also never
41
- * fires (it IS writing), which is an unbounded loop reachable by ordinary
42
- * "re-plan as you learn" behaviour rather than by anything adversarial.
43
- *
44
- * A refactor that "simplifies" `advanceBudget` back to returning a zeroed budget
45
- * on a `total` change re-opens that hole, and the symptom is a bill rather than a
46
- * test failure. `advanceBudget`'s own test pins it.
47
- */
48
- used: number;
49
- /** Consecutive auto-continuations after which the PROGRESS POINT did not increase. */
50
- noProgressStreak: number;
51
- /**
52
- * Identity of the plan the budget was opened against: steps PLUS criteria.
53
- *
54
- * `todo-acceptance-criteria §6.6.3`: a re-plan that goes from 3 criteria to 4 is
55
- * a re-plan even when the number of steps is unchanged, and without the second
56
- * term it would be mistaken for "the same plan made no progress".
57
- */
58
- anchorTotal: number;
59
- /**
60
- * The PROGRESS POINT as observed at the PREVIOUS `agent_end` — which is what
61
- * `advanceBudget` assigns, in every branch, and therefore what the next call
62
- * compares against.
63
- *
64
- * COMPOSITE SINCE todo-acceptance-criteria: it is `doneCount + checkedCount`,
65
- * not `doneCount`. The name is kept deliberately (Q-6): this object is carried
66
- * across runs by `App`'s `budgetRef`, so renaming a field changes the shape any
67
- * external holder - including test fixtures - sees. With only `doneCount`, a
68
- * verification run that checks one criterion per turn would be recorded as "no
69
- * progress" and `maxNoProgressContinues` would hand control back after two
70
- * checks, making it impossible to verify a third criterion automatically.
71
- */
72
- doneAtRunStart: number;
73
- }
74
- export interface FollowThroughInput {
75
- mode: FollowThroughMode;
76
- snapshot: TodoSnapshot | null;
77
- /**
78
- * Why the run ended. Derived by the caller, never carried by `AgentEndEvent`
79
- * (C-2): core's event has `messages` and nothing else, and this round does not
80
- * change core to make it otherwise.
81
- */
82
- runEnd: {
83
- aborted: boolean;
84
- errored: boolean;
85
- };
86
- budget: FollowThroughBudget;
87
- /**
88
- * `false` in headless: no grace window (there is nobody to use it), and a
89
- * different notice verb, because `-p` writes `[todo] ...` lines rather than
90
- * transcript notices.
91
- */
92
- interactive: boolean;
93
- }
94
- export type FollowThroughDecision = {
95
- kind: 'none';
96
- } | {
97
- kind: 'notify';
98
- level: 'info' | 'warn';
99
- text: string;
100
- } | {
101
- kind: 'continue';
102
- message: string;
103
- graceMs: number;
104
- notice: string;
105
- };
106
- /** The zero budget. A fresh App, a fresh headless run, and every cleared plan. */
107
- export declare function emptyBudget(): FollowThroughBudget;
108
- export declare function decideFollowThrough(input: FollowThroughInput): FollowThroughDecision;
109
- /**
110
- * Fold a finished run into the budget. Called BEFORE `decideFollowThrough`, on
111
- * every `agent_end` (and on every resolved `prompt()` in headless).
112
- *
113
- * `used` is NOT incremented here — a decision that is never acted on costs
114
- * nothing. Both fire points charge it themselves (I-5): the TUI's grace timer and
115
- * the headless loop, and BOTH are required. An uncharged counter in `-p` is an
116
- * uncapped loop in the one environment with no human to press Esc (P1-2).
117
- */
118
- export declare function advanceBudget(prev: FollowThroughBudget, snapshot: TodoSnapshot | null, wasAutoContinuation: boolean): FollowThroughBudget;
119
- /**
120
- * The text an auto-continuation — or `/todo continue` — submits.
121
- *
122
- * IT ENUMERATES RATHER THAN REFERRING (D-11). Round 1 submitted the fixed string
123
- * "Continue with the remaining todo items.", which is a reference to a
124
- * `todo_write` call that in a long session may have scrolled far enough back that
125
- * the model reconstructs it wrong — and reconstructing it wrong is SILENT, because
126
- * whatever it writes next is a full replacement and becomes the new truth.
127
- *
128
- * IN THE VERIFICATION PHASE IT BRANCHES TO `buildVerifyMessage` (§6.6.2): with
129
- * every step completed, the old body would emit "These steps are not done yet:"
130
- * followed by nothing at all, which is what `/todo continue` and auto-continue
131
- * would both submit at exactly the moment the plan needs its criteria checked.
132
- *
133
- * `content` and never `activeForm`: the imperative is what an instruction wants.
134
- * Numbers are the item's 1-based position in the WHOLE plan, so "step 5" means the
135
- * same thing here as it does in the rail. Completed items are omitted.
136
- * `TODO_LIMITS.maxItems` bounds the whole message at roughly 1.8 kB.
137
- */
138
- export declare function buildContinuationMessage(snapshot: TodoSnapshot): string;