@aragon-agent/cli 0.6.46 → 0.6.48

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (775) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/README.md +80 -12
  3. package/dist/agent/coalesce.d.ts +5 -1
  4. package/dist/agent/coalesce.js +13 -0
  5. package/dist/agent/controller.d.ts +41 -20
  6. package/dist/agent/controller.js +68 -15
  7. package/dist/agent/conversation-reset.d.ts +1 -1
  8. package/dist/agent/governance-wiring.d.ts +6 -6
  9. package/dist/agent/governance-wiring.js +4 -4
  10. package/dist/agent/headless.d.ts +5 -5
  11. package/dist/agent/headless.js +4 -4
  12. package/dist/agent/job-notices.d.ts +1 -1
  13. package/dist/agent/job-notices.js +1 -1
  14. package/dist/agent/kit-apply.d.ts +3 -3
  15. package/dist/agent/kit-apply.js +3 -3
  16. package/dist/agent/model-profile-settings.d.ts +2 -2
  17. package/dist/agent/model-profile-settings.js +6 -6
  18. package/dist/agent/prompt-options.d.ts +1 -1
  19. package/dist/agent/system-prompt.d.ts +1 -1
  20. package/dist/agent/user-attention.d.ts +17 -0
  21. package/dist/agent/user-attention.js +32 -0
  22. package/dist/{ui → app}/App.d.ts +9 -9
  23. package/dist/{ui → app}/App.js +113 -79
  24. package/dist/{ui → app}/use-startup-notices.d.ts +1 -1
  25. package/dist/{ui → app}/use-startup-notices.js +2 -2
  26. package/dist/cli.js +31 -32
  27. package/dist/commands/agents-command.js +1 -1
  28. package/dist/commands/builtins.js +9 -9
  29. package/dist/commands/governance-command.js +2 -2
  30. package/dist/commands/governance-runs-table.js +1 -1
  31. package/dist/commands/kit-command.js +1 -1
  32. package/dist/commands/perf.d.ts +3 -3
  33. package/dist/commands/perf.js +1 -1
  34. package/dist/commands/registry.d.ts +8 -8
  35. package/dist/commands/skills.js +2 -2
  36. package/dist/commands/team-command.js +1 -1
  37. package/dist/compaction/archive.d.ts +1 -1
  38. package/dist/compaction/archive.js +1 -1
  39. package/dist/compaction/child.d.ts +3 -3
  40. package/dist/compaction/child.js +4 -4
  41. package/dist/compaction/command.js +5 -5
  42. package/dist/compaction/compactor.d.ts +6 -6
  43. package/dist/compaction/compactor.js +6 -6
  44. package/dist/compaction/context-command.js +1 -1
  45. package/dist/compaction/digest.js +1 -1
  46. package/dist/compaction/memory-input.js +1 -1
  47. package/dist/compaction/memory-validation.js +1 -1
  48. package/dist/compaction/memory.js +1 -1
  49. package/dist/compaction/summarize-call.js +1 -1
  50. package/dist/compaction/summary-prompt.js +1 -1
  51. package/dist/compaction/tail-budget.js +2 -2
  52. package/dist/compaction/wiring.d.ts +5 -5
  53. package/dist/compaction/wiring.js +2 -2
  54. package/dist/config/cli-commands.d.ts +1 -1
  55. package/dist/config/cli-commands.js +3 -3
  56. package/dist/config/env.d.ts +1 -1
  57. package/dist/config/env.js +4 -4
  58. package/dist/config/load.d.ts +2 -2
  59. package/dist/config/load.js +10 -31
  60. package/dist/config/migrate-state-out-of-config.js +1 -1
  61. package/dist/config/model-profile-store.d.ts +4 -54
  62. package/dist/config/model-profile-store.js +3 -3
  63. package/dist/config/prompt-history.js +1 -1
  64. package/dist/config/store.d.ts +2 -2
  65. package/dist/config/store.js +3 -3
  66. package/dist/diagnostics/doctor.js +4 -4
  67. package/dist/exec/bridge/decisions.d.ts +1 -1
  68. package/dist/exec/bridge/human-answers.d.ts +1 -1
  69. package/dist/exec/bridge/human-answers.js +1 -1
  70. package/dist/exec/bridge/protocol.d.ts +1 -1
  71. package/dist/exec/bridge/server.js +1 -1
  72. package/dist/exec/events.d.ts +2 -2
  73. package/dist/exec/index.d.ts +1 -1
  74. package/dist/exec/index.js +1 -1
  75. package/dist/exec/permission.js +1 -1
  76. package/dist/exec/runner.d.ts +3 -3
  77. package/dist/exec/runner.js +2 -2
  78. package/dist/exec/threads/runtime.js +1 -1
  79. package/dist/fast/digest.d.ts +1 -1
  80. package/dist/fast/digest.js +1 -1
  81. package/dist/fast/frames.d.ts +1 -1
  82. package/dist/fast/frames.js +1 -1
  83. package/dist/fast/prompt.d.ts +1 -1
  84. package/dist/fast/prompt.js +1 -1
  85. package/dist/fast/review-call.js +1 -1
  86. package/dist/fast/reviewer.d.ts +3 -3
  87. package/dist/fast/reviewer.js +1 -1
  88. package/dist/fast/summary-call.d.ts +3 -3
  89. package/dist/fast/summary-call.js +2 -2
  90. package/dist/fast/summary-prompt.d.ts +1 -1
  91. package/dist/fast/summary-prompt.js +1 -1
  92. package/dist/fast/wiring.d.ts +4 -4
  93. package/dist/fast/wiring.js +1 -1
  94. package/dist/governance/card-normalize.d.ts +1 -1
  95. package/dist/governance/copy.d.ts +1 -1
  96. package/dist/governance/copy.js +2 -2
  97. package/dist/governance/engine/artifact-persist.d.ts +1 -1
  98. package/dist/governance/engine/budget.d.ts +1 -1
  99. package/dist/governance/engine/budget.js +1 -1
  100. package/dist/governance/engine/cards.d.ts +1 -1
  101. package/dist/governance/engine/digest.js +1 -1
  102. package/dist/governance/engine/engine-core.d.ts +5 -5
  103. package/dist/governance/engine/engine-core.js +1 -1
  104. package/dist/governance/engine/engine.d.ts +1 -1
  105. package/dist/governance/engine/engine.js +1 -1
  106. package/dist/governance/engine/estimate.d.ts +1 -1
  107. package/dist/governance/engine/estimate.js +1 -1
  108. package/dist/governance/engine/inspector.js +2 -2
  109. package/dist/governance/engine/integration.d.ts +1 -1
  110. package/dist/governance/engine/lifecycle.d.ts +1 -1
  111. package/dist/governance/engine/lifecycle.js +1 -1
  112. package/dist/governance/engine/phase-members.d.ts +1 -1
  113. package/dist/governance/engine/phase-planner.d.ts +1 -1
  114. package/dist/governance/engine/phase-planner.js +1 -1
  115. package/dist/governance/engine/rebuild.d.ts +1 -1
  116. package/dist/governance/engine/report.d.ts +1 -1
  117. package/dist/governance/engine/report.js +1 -1
  118. package/dist/governance/engine/run-digest.d.ts +1 -1
  119. package/dist/governance/engine/spec-builder.d.ts +2 -2
  120. package/dist/governance/engine/spec-builder.js +2 -2
  121. package/dist/governance/engine/stage-runner.js +2 -2
  122. package/dist/governance/engine/start-input.d.ts +1 -1
  123. package/dist/governance/engine/start-input.js +1 -1
  124. package/dist/governance/engine/state-machine.d.ts +1 -1
  125. package/dist/governance/engine/state-machine.js +3 -3
  126. package/dist/governance/engine/submission-queries.d.ts +1 -1
  127. package/dist/governance/engine/submission-render.d.ts +1 -1
  128. package/dist/governance/engine/submissions.d.ts +1 -1
  129. package/dist/governance/engine/submissions.js +1 -1
  130. package/dist/governance/engine/visibility.d.ts +1 -1
  131. package/dist/governance/engine/visibility.js +1 -1
  132. package/dist/governance/posture-transition.d.ts +2 -2
  133. package/dist/governance/posture-transition.js +1 -1
  134. package/dist/governance/profiles.d.ts +1 -1
  135. package/dist/governance/prompts/orchestrator-block.d.ts +2 -2
  136. package/dist/governance/prompts/orchestrator-block.js +2 -2
  137. package/dist/governance/prompts/plan-addendum.d.ts +1 -1
  138. package/dist/governance/prompts/plan-addendum.js +1 -1
  139. package/dist/governance/prompts/role-blocks.d.ts +2 -2
  140. package/dist/governance/prompts/role-blocks.js +1 -1
  141. package/dist/governance/report-reader.js +1 -1
  142. package/dist/governance/roles.d.ts +1 -1
  143. package/dist/governance/rules/claims.d.ts +1 -1
  144. package/dist/governance/rules/claims.js +1 -1
  145. package/dist/governance/rules/elimination.d.ts +1 -1
  146. package/dist/governance/rules/elimination.js +1 -1
  147. package/dist/governance/rules/failure-analysis.d.ts +2 -2
  148. package/dist/governance/rules/failure-analysis.js +1 -1
  149. package/dist/governance/rules/ledger-replay.d.ts +1 -1
  150. package/dist/governance/rules/ledger-state.d.ts +1 -1
  151. package/dist/governance/rules/ledger-state.js +1 -1
  152. package/dist/governance/rules/ledger.d.ts +2 -2
  153. package/dist/governance/rules/ledger.js +2 -2
  154. package/dist/governance/rules/rca.d.ts +1 -1
  155. package/dist/governance/rules/rca.js +1 -1
  156. package/dist/governance/rules/settlement.d.ts +2 -2
  157. package/dist/governance/rules/settlement.js +2 -2
  158. package/dist/governance/rules/suspicion.d.ts +1 -1
  159. package/dist/governance/store/artifacts.d.ts +1 -1
  160. package/dist/governance/store/artifacts.js +1 -1
  161. package/dist/governance/store/events-log.d.ts +1 -1
  162. package/dist/governance/store/run-store.d.ts +1 -1
  163. package/dist/governance/store/run-store.js +1 -1
  164. package/dist/governance/store/scoreboard-export.d.ts +1 -1
  165. package/dist/governance/tools/child-tools.d.ts +1 -1
  166. package/dist/governance/tools/guard.d.ts +1 -1
  167. package/dist/governance/tools/guard.js +1 -1
  168. package/dist/governance/tools/inspector-tools.d.ts +2 -2
  169. package/dist/governance/tools/inspector-tools.js +2 -2
  170. package/dist/governance/tools/lead-tools.d.ts +1 -1
  171. package/dist/governance/tools/lead-tools.js +1 -1
  172. package/dist/governance/tools/normalize-util.js +1 -1
  173. package/dist/governance/tools/scan-incomplete.js +1 -1
  174. package/dist/governance/tools/shared-tools.d.ts +1 -1
  175. package/dist/governance/tools/shared-tools.js +1 -1
  176. package/dist/governance/tools/submit-normalizers.d.ts +1 -1
  177. package/dist/governance/tools/submit-normalizers.js +1 -1
  178. package/dist/governance/tools/submit-tools.d.ts +1 -1
  179. package/dist/logging/cli-commands.js +1 -1
  180. package/dist/logging/install.d.ts +1 -1
  181. package/dist/logging/install.js +3 -3
  182. package/dist/logging/logger.d.ts +2 -2
  183. package/dist/logging/logger.js +31 -2
  184. package/dist/proc/kill-tree.js +1 -1
  185. package/dist/proc/log-mirror.js +1 -1
  186. package/dist/proc/log-ring.js +2 -2
  187. package/dist/proc/notices.d.ts +1 -1
  188. package/dist/proc/notices.js +2 -2
  189. package/dist/proc/prompt.d.ts +1 -1
  190. package/dist/proc/prompt.js +8 -5
  191. package/dist/proc/readiness.js +1 -1
  192. package/dist/proc/supervisor.d.ts +1 -1
  193. package/dist/proc/supervisor.js +10 -4
  194. package/dist/proc/wait-plan.d.ts +39 -0
  195. package/dist/proc/wait-plan.js +77 -0
  196. package/dist/proc/wait.d.ts +37 -4
  197. package/dist/proc/wait.js +68 -5
  198. package/dist/prompts/command.d.ts +1 -1
  199. package/dist/prompts/command.js +1 -1
  200. package/dist/prompts/normalize.d.ts +1 -1
  201. package/dist/prompts/normalize.js +1 -1
  202. package/dist/prompts/resolve.d.ts +1 -1
  203. package/dist/prompts/store.d.ts +2 -12
  204. package/dist/prompts/store.js +6 -60
  205. package/dist/session/checkpoint.d.ts +2 -2
  206. package/dist/session/checkpoint.js +2 -0
  207. package/dist/session/clear-archive.d.ts +2 -2
  208. package/dist/session/persist.d.ts +2 -2
  209. package/dist/session/persist.js +20 -3
  210. package/dist/session/startup-session.d.ts +2 -2
  211. package/dist/session/validate-session.js +6 -3
  212. package/dist/skills/service.d.ts +2 -2
  213. package/dist/team/bus.d.ts +1 -1
  214. package/dist/team/bus.js +1 -1
  215. package/dist/team/child-reviewer.d.ts +2 -2
  216. package/dist/team/child-reviewer.js +1 -1
  217. package/dist/team/comm-tools.js +1 -1
  218. package/dist/team/dispatch-gate.js +1 -1
  219. package/dist/team/forced-dispatch.js +1 -1
  220. package/dist/team/forced-mode.d.ts +1 -1
  221. package/dist/team/forced-prompt.d.ts +1 -1
  222. package/dist/team/forced-prompt.js +1 -1
  223. package/dist/team/normalize.d.ts +1 -1
  224. package/dist/team/normalize.js +1 -1
  225. package/dist/team/overseer.d.ts +3 -3
  226. package/dist/team/overseer.js +3 -3
  227. package/dist/team/prompt.d.ts +1 -1
  228. package/dist/team/prompt.js +1 -1
  229. package/dist/team/report.d.ts +2 -2
  230. package/dist/team/report.js +2 -2
  231. package/dist/team/retry.d.ts +1 -1
  232. package/dist/team/retry.js +1 -1
  233. package/dist/team/runtime.d.ts +4 -4
  234. package/dist/team/runtime.js +2 -2
  235. package/dist/team/settled.d.ts +2 -2
  236. package/dist/team/subagent.d.ts +4 -4
  237. package/dist/team/subagent.js +5 -5
  238. package/dist/team/task-tool.d.ts +1 -1
  239. package/dist/team/task-tool.js +1 -1
  240. package/dist/todo/normalize.d.ts +1 -1
  241. package/dist/todo/normalize.js +1 -1
  242. package/dist/todo/prompt.d.ts +1 -1
  243. package/dist/todo/prompt.js +1 -1
  244. package/dist/todo/store.d.ts +1 -1
  245. package/dist/todo/store.js +2 -2
  246. package/dist/todo/todo-tool.d.ts +1 -1
  247. package/dist/todo/todo-tool.js +2 -2
  248. package/dist/tools/bash-tool.d.ts +1 -1
  249. package/dist/tools/bash-tool.js +2 -2
  250. package/dist/tools/diff.d.ts +1 -1
  251. package/dist/tools/diff.js +1 -1
  252. package/dist/tools/file-change-store.d.ts +1 -1
  253. package/dist/tools/fs-tools.d.ts +2 -2
  254. package/dist/tools/fs-tools.js +1 -1
  255. package/dist/tools/index.d.ts +3 -3
  256. package/dist/tools/index.js +1 -1
  257. package/dist/tools/job-tools.d.ts +14 -3
  258. package/dist/tools/job-tools.js +158 -35
  259. package/dist/tools/plan-tools.d.ts +1 -1
  260. package/dist/tools/plan-tools.js +1 -1
  261. package/dist/tools/proc-tools.d.ts +1 -1
  262. package/dist/tools/proc-tools.js +2 -2
  263. package/dist/update/classify-failure.d.ts +1 -1
  264. package/dist/update/install-lock.js +1 -1
  265. package/dist/update/install-source.d.ts +1 -1
  266. package/dist/update/installer.js +2 -2
  267. package/dist/update/npm-view.d.ts +1 -1
  268. package/dist/update/npm-view.js +1 -1
  269. package/dist/update/registry.d.ts +1 -1
  270. package/dist/update/registry.js +1 -1
  271. package/dist/update/service.d.ts +2 -2
  272. package/dist/update/service.js +2 -2
  273. package/package.json +7 -7
  274. package/dist/agent/agent-mode.d.ts +0 -108
  275. package/dist/agent/agent-mode.js +0 -121
  276. package/dist/agent/entry-limits.d.ts +0 -65
  277. package/dist/agent/entry-limits.js +0 -133
  278. package/dist/agent/governance-view.d.ts +0 -40
  279. package/dist/agent/governance-view.js +0 -40
  280. package/dist/agent/invocation-card.d.ts +0 -77
  281. package/dist/agent/invocation-card.js +0 -169
  282. package/dist/agent/model-probe-limits.d.ts +0 -39
  283. package/dist/agent/model-probe-limits.js +0 -25
  284. package/dist/agent/model-probe.d.ts +0 -104
  285. package/dist/agent/model-probe.js +0 -391
  286. package/dist/agent/queued-messages.d.ts +0 -23
  287. package/dist/agent/queued-messages.js +0 -49
  288. package/dist/agent/reducer.d.ts +0 -837
  289. package/dist/agent/reducer.js +0 -1617
  290. package/dist/agent/retry-view.d.ts +0 -68
  291. package/dist/agent/retry-view.js +0 -95
  292. package/dist/agent/usage.d.ts +0 -47
  293. package/dist/agent/usage.js +0 -84
  294. package/dist/compaction/limits.d.ts +0 -61
  295. package/dist/compaction/limits.js +0 -64
  296. package/dist/compaction/meter.d.ts +0 -276
  297. package/dist/compaction/meter.js +0 -512
  298. package/dist/compaction/pressure.d.ts +0 -163
  299. package/dist/compaction/pressure.js +0 -199
  300. package/dist/compaction/reason-text.d.ts +0 -36
  301. package/dist/compaction/reason-text.js +0 -78
  302. package/dist/compaction/types.d.ts +0 -360
  303. package/dist/compaction/types.js +0 -22
  304. package/dist/config/governance-config.d.ts +0 -125
  305. package/dist/config/governance-config.js +0 -164
  306. package/dist/config/kit-resolution.d.ts +0 -93
  307. package/dist/config/kit-resolution.js +0 -226
  308. package/dist/config/model-kits.d.ts +0 -225
  309. package/dist/config/model-kits.js +0 -302
  310. package/dist/config/model-profile-resolution.d.ts +0 -28
  311. package/dist/config/model-profile-resolution.js +0 -88
  312. package/dist/config/model-profiles.d.ts +0 -103
  313. package/dist/config/model-profiles.js +0 -188
  314. package/dist/config/schema.d.ts +0 -1645
  315. package/dist/config/schema.js +0 -1377
  316. package/dist/fast/limits.d.ts +0 -152
  317. package/dist/fast/limits.js +0 -152
  318. package/dist/fast/resolve.d.ts +0 -44
  319. package/dist/fast/resolve.js +0 -107
  320. package/dist/fast/task-summary-types.d.ts +0 -66
  321. package/dist/fast/task-summary-types.js +0 -17
  322. package/dist/fast/types.d.ts +0 -141
  323. package/dist/fast/types.js +0 -14
  324. package/dist/governance/governed-dispatch.d.ts +0 -19
  325. package/dist/governance/governed-dispatch.js +0 -17
  326. package/dist/governance/limits.d.ts +0 -107
  327. package/dist/governance/limits.js +0 -131
  328. package/dist/governance/posture.d.ts +0 -35
  329. package/dist/governance/posture.js +0 -59
  330. package/dist/governance/rules/events-table.d.ts +0 -46
  331. package/dist/governance/rules/events-table.js +0 -94
  332. package/dist/governance/types.d.ts +0 -661
  333. package/dist/governance/types.js +0 -27
  334. package/dist/input/control-sequences.d.ts +0 -71
  335. package/dist/input/control-sequences.js +0 -222
  336. package/dist/input/csiu-keys.d.ts +0 -66
  337. package/dist/input/csiu-keys.js +0 -181
  338. package/dist/input/cursor-report.d.ts +0 -61
  339. package/dist/input/cursor-report.js +0 -97
  340. package/dist/input/enter-sequences.d.ts +0 -64
  341. package/dist/input/enter-sequences.js +0 -153
  342. package/dist/input/interrupt-gesture.d.ts +0 -18
  343. package/dist/input/interrupt-gesture.js +0 -19
  344. package/dist/input/keyboard-enhancement.d.ts +0 -42
  345. package/dist/input/keyboard-enhancement.js +0 -65
  346. package/dist/input/keymap.d.ts +0 -20
  347. package/dist/input/keymap.js +0 -99
  348. package/dist/input/limits.d.ts +0 -118
  349. package/dist/input/limits.js +0 -109
  350. package/dist/input/mouse-events.d.ts +0 -87
  351. package/dist/input/mouse-events.js +0 -212
  352. package/dist/input/paste-parse.d.ts +0 -83
  353. package/dist/input/paste-parse.js +0 -107
  354. package/dist/input/pointer-router.d.ts +0 -11
  355. package/dist/input/pointer-router.js +0 -14
  356. package/dist/input/stdin-filter.d.ts +0 -112
  357. package/dist/input/stdin-filter.js +0 -657
  358. package/dist/input/win32-input-mode.d.ts +0 -61
  359. package/dist/input/win32-input-mode.js +0 -269
  360. package/dist/logging/levels.d.ts +0 -40
  361. package/dist/logging/levels.js +0 -59
  362. package/dist/logging/secret-registry.d.ts +0 -32
  363. package/dist/logging/secret-registry.js +0 -73
  364. package/dist/proc/limits.d.ts +0 -200
  365. package/dist/proc/limits.js +0 -207
  366. package/dist/proc/progress.d.ts +0 -40
  367. package/dist/proc/progress.js +0 -135
  368. package/dist/proc/types.d.ts +0 -263
  369. package/dist/proc/types.js +0 -15
  370. package/dist/prompts/copy.d.ts +0 -89
  371. package/dist/prompts/copy.js +0 -131
  372. package/dist/prompts/fill.d.ts +0 -51
  373. package/dist/prompts/fill.js +0 -46
  374. package/dist/prompts/limits.d.ts +0 -53
  375. package/dist/prompts/limits.js +0 -53
  376. package/dist/prompts/search.d.ts +0 -58
  377. package/dist/prompts/search.js +0 -146
  378. package/dist/prompts/types.d.ts +0 -204
  379. package/dist/prompts/types.js +0 -13
  380. package/dist/team/activity.d.ts +0 -67
  381. package/dist/team/activity.js +0 -130
  382. package/dist/team/limits.d.ts +0 -308
  383. package/dist/team/limits.js +0 -330
  384. package/dist/team/model.d.ts +0 -104
  385. package/dist/team/model.js +0 -150
  386. package/dist/team/panel-rows.d.ts +0 -48
  387. package/dist/team/panel-rows.js +0 -75
  388. package/dist/team/timeline.d.ts +0 -74
  389. package/dist/team/timeline.js +0 -101
  390. package/dist/team/types.d.ts +0 -354
  391. package/dist/team/types.js +0 -13
  392. package/dist/todo/acceptance.d.ts +0 -120
  393. package/dist/todo/acceptance.js +0 -399
  394. package/dist/todo/follow-through.d.ts +0 -138
  395. package/dist/todo/follow-through.js +0 -248
  396. package/dist/todo/limits.d.ts +0 -152
  397. package/dist/todo/limits.js +0 -152
  398. package/dist/todo/panel-rows.d.ts +0 -45
  399. package/dist/todo/panel-rows.js +0 -70
  400. package/dist/todo/plan-sections.d.ts +0 -60
  401. package/dist/todo/plan-sections.js +0 -108
  402. package/dist/todo/row-window.d.ts +0 -51
  403. package/dist/todo/row-window.js +0 -107
  404. package/dist/todo/types.d.ts +0 -124
  405. package/dist/todo/types.js +0 -12
  406. package/dist/tools/human-input.d.ts +0 -212
  407. package/dist/tools/human-input.js +0 -265
  408. package/dist/tools/patch.d.ts +0 -115
  409. package/dist/tools/patch.js +0 -453
  410. package/dist/tools/terminal-output.d.ts +0 -115
  411. package/dist/tools/terminal-output.js +0 -201
  412. package/dist/tools/tool-output-store.d.ts +0 -68
  413. package/dist/tools/tool-output-store.js +0 -102
  414. package/dist/ui/ActivityLine.d.ts +0 -26
  415. package/dist/ui/ActivityLine.js +0 -48
  416. package/dist/ui/AutocompletePopup.d.ts +0 -23
  417. package/dist/ui/AutocompletePopup.js +0 -17
  418. package/dist/ui/BottomStatusRow.d.ts +0 -10
  419. package/dist/ui/BottomStatusRow.js +0 -9
  420. package/dist/ui/Composer.d.ts +0 -115
  421. package/dist/ui/Composer.js +0 -64
  422. package/dist/ui/GovernancePanel.d.ts +0 -50
  423. package/dist/ui/GovernancePanel.js +0 -77
  424. package/dist/ui/GovernanceRun.d.ts +0 -18
  425. package/dist/ui/GovernanceRun.js +0 -11
  426. package/dist/ui/Header.d.ts +0 -48
  427. package/dist/ui/Header.js +0 -27
  428. package/dist/ui/Logo.d.ts +0 -32
  429. package/dist/ui/Logo.js +0 -65
  430. package/dist/ui/Markdown.d.ts +0 -29
  431. package/dist/ui/Markdown.js +0 -116
  432. package/dist/ui/PromptCaret.d.ts +0 -11
  433. package/dist/ui/PromptCaret.js +0 -31
  434. package/dist/ui/PromptInput.d.ts +0 -192
  435. package/dist/ui/PromptInput.js +0 -689
  436. package/dist/ui/QueuePanel.d.ts +0 -8
  437. package/dist/ui/QueuePanel.js +0 -9
  438. package/dist/ui/QueueStatusRow.d.ts +0 -24
  439. package/dist/ui/QueueStatusRow.js +0 -51
  440. package/dist/ui/ScrollbackShell.d.ts +0 -132
  441. package/dist/ui/ScrollbackShell.js +0 -26
  442. package/dist/ui/SessionOpener.d.ts +0 -30
  443. package/dist/ui/SessionOpener.js +0 -12
  444. package/dist/ui/StatusBar.d.ts +0 -129
  445. package/dist/ui/StatusBar.js +0 -61
  446. package/dist/ui/TeamPanel.d.ts +0 -76
  447. package/dist/ui/TeamPanel.js +0 -103
  448. package/dist/ui/ToastStack.d.ts +0 -8
  449. package/dist/ui/ToastStack.js +0 -31
  450. package/dist/ui/TodoPanel.d.ts +0 -52
  451. package/dist/ui/TodoPanel.js +0 -214
  452. package/dist/ui/Transcript.d.ts +0 -105
  453. package/dist/ui/Transcript.js +0 -251
  454. package/dist/ui/UpdateLine.d.ts +0 -44
  455. package/dist/ui/UpdateLine.js +0 -129
  456. package/dist/ui/activity-phrases.d.ts +0 -33
  457. package/dist/ui/activity-phrases.js +0 -50
  458. package/dist/ui/capabilities.d.ts +0 -27
  459. package/dist/ui/capabilities.js +0 -65
  460. package/dist/ui/clipboard-task.d.ts +0 -29
  461. package/dist/ui/clipboard-task.js +0 -66
  462. package/dist/ui/clipboard.d.ts +0 -31
  463. package/dist/ui/clipboard.js +0 -157
  464. package/dist/ui/color-runtime.d.ts +0 -5
  465. package/dist/ui/color-runtime.js +0 -29
  466. package/dist/ui/composer-input.d.ts +0 -38
  467. package/dist/ui/composer-input.js +0 -79
  468. package/dist/ui/composer-limits.d.ts +0 -30
  469. package/dist/ui/composer-limits.js +0 -45
  470. package/dist/ui/composer-rows.d.ts +0 -73
  471. package/dist/ui/composer-rows.js +0 -129
  472. package/dist/ui/console-bridge.d.ts +0 -19
  473. package/dist/ui/console-bridge.js +0 -52
  474. package/dist/ui/density.d.ts +0 -26
  475. package/dist/ui/density.js +0 -34
  476. package/dist/ui/display-tab.d.ts +0 -51
  477. package/dist/ui/display-tab.js +0 -82
  478. package/dist/ui/editor-navigation.d.ts +0 -55
  479. package/dist/ui/editor-navigation.js +0 -96
  480. package/dist/ui/editor-reducer.d.ts +0 -108
  481. package/dist/ui/editor-reducer.js +0 -187
  482. package/dist/ui/enter-frames.d.ts +0 -47
  483. package/dist/ui/enter-frames.js +0 -117
  484. package/dist/ui/entries/AssistantEntry.d.ts +0 -37
  485. package/dist/ui/entries/AssistantEntry.js +0 -43
  486. package/dist/ui/entries/CompactionCard.d.ts +0 -88
  487. package/dist/ui/entries/CompactionCard.js +0 -222
  488. package/dist/ui/entries/DiffView.d.ts +0 -61
  489. package/dist/ui/entries/DiffView.js +0 -103
  490. package/dist/ui/entries/EntryFrame.d.ts +0 -23
  491. package/dist/ui/entries/EntryFrame.js +0 -6
  492. package/dist/ui/entries/FastCard.d.ts +0 -53
  493. package/dist/ui/entries/FastCard.js +0 -105
  494. package/dist/ui/entries/GovernanceCard.d.ts +0 -30
  495. package/dist/ui/entries/GovernanceCard.js +0 -32
  496. package/dist/ui/entries/InvocationCard.d.ts +0 -20
  497. package/dist/ui/entries/InvocationCard.js +0 -32
  498. package/dist/ui/entries/QueuedEntry.d.ts +0 -27
  499. package/dist/ui/entries/QueuedEntry.js +0 -33
  500. package/dist/ui/entries/RetryCard.d.ts +0 -56
  501. package/dist/ui/entries/RetryCard.js +0 -60
  502. package/dist/ui/entries/ServiceCard.d.ts +0 -82
  503. package/dist/ui/entries/ServiceCard.js +0 -151
  504. package/dist/ui/entries/TeamCard.d.ts +0 -55
  505. package/dist/ui/entries/TeamCard.js +0 -94
  506. package/dist/ui/entries/TodoCard.d.ts +0 -54
  507. package/dist/ui/entries/TodoCard.js +0 -98
  508. package/dist/ui/entries/ToolCard.d.ts +0 -81
  509. package/dist/ui/entries/ToolCard.js +0 -160
  510. package/dist/ui/entries/ToolPreview.d.ts +0 -59
  511. package/dist/ui/entries/ToolPreview.js +0 -208
  512. package/dist/ui/entries/UserEntry.d.ts +0 -36
  513. package/dist/ui/entries/UserEntry.js +0 -57
  514. package/dist/ui/exit-snapshot.d.ts +0 -43
  515. package/dist/ui/exit-snapshot.js +0 -26
  516. package/dist/ui/frame-differ.d.ts +0 -166
  517. package/dist/ui/frame-differ.js +0 -354
  518. package/dist/ui/frame-observer.d.ts +0 -17
  519. package/dist/ui/frame-observer.js +0 -94
  520. package/dist/ui/frame-parser.d.ts +0 -7
  521. package/dist/ui/frame-parser.js +0 -18
  522. package/dist/ui/gauge.d.ts +0 -39
  523. package/dist/ui/gauge.js +0 -55
  524. package/dist/ui/glyphs.d.ts +0 -178
  525. package/dist/ui/glyphs.js +0 -165
  526. package/dist/ui/governance-copy.d.ts +0 -69
  527. package/dist/ui/governance-copy.js +0 -104
  528. package/dist/ui/governance-status.d.ts +0 -145
  529. package/dist/ui/governance-status.js +0 -326
  530. package/dist/ui/gradient.d.ts +0 -11
  531. package/dist/ui/gradient.js +0 -50
  532. package/dist/ui/ink-runtime.d.ts +0 -4
  533. package/dist/ui/ink-runtime.js +0 -51
  534. package/dist/ui/interaction-copy.d.ts +0 -82
  535. package/dist/ui/interaction-copy.js +0 -38
  536. package/dist/ui/interaction-hints.d.ts +0 -44
  537. package/dist/ui/interaction-hints.js +0 -97
  538. package/dist/ui/layout/AppShell.d.ts +0 -17
  539. package/dist/ui/layout/AppShell.js +0 -6
  540. package/dist/ui/layout/Gutter.d.ts +0 -67
  541. package/dist/ui/layout/Gutter.js +0 -42
  542. package/dist/ui/layout/MeasuredEntry.d.ts +0 -21
  543. package/dist/ui/layout/MeasuredEntry.js +0 -30
  544. package/dist/ui/layout/OverlayFrame.d.ts +0 -73
  545. package/dist/ui/layout/OverlayFrame.js +0 -110
  546. package/dist/ui/layout/ScrollIndicator.d.ts +0 -32
  547. package/dist/ui/layout/ScrollIndicator.js +0 -22
  548. package/dist/ui/layout/ScrollViewport.d.ts +0 -40
  549. package/dist/ui/layout/ScrollViewport.js +0 -222
  550. package/dist/ui/layout/agents-board.d.ts +0 -102
  551. package/dist/ui/layout/agents-board.js +0 -389
  552. package/dist/ui/layout/autocomplete.d.ts +0 -18
  553. package/dist/ui/layout/autocomplete.js +0 -26
  554. package/dist/ui/layout/budget.d.ts +0 -43
  555. package/dist/ui/layout/budget.js +0 -52
  556. package/dist/ui/layout/cells.d.ts +0 -61
  557. package/dist/ui/layout/cells.js +0 -156
  558. package/dist/ui/layout/document-layout.d.ts +0 -13
  559. package/dist/ui/layout/document-layout.js +0 -10
  560. package/dist/ui/layout/follow-state.d.ts +0 -138
  561. package/dist/ui/layout/follow-state.js +0 -148
  562. package/dist/ui/layout/frame.d.ts +0 -36
  563. package/dist/ui/layout/frame.js +0 -39
  564. package/dist/ui/layout/governance-board.d.ts +0 -121
  565. package/dist/ui/layout/governance-board.js +0 -382
  566. package/dist/ui/layout/governance-card.d.ts +0 -53
  567. package/dist/ui/layout/governance-card.js +0 -134
  568. package/dist/ui/layout/governance-chip.d.ts +0 -38
  569. package/dist/ui/layout/governance-chip.js +0 -64
  570. package/dist/ui/layout/governance-panel.d.ts +0 -85
  571. package/dist/ui/layout/governance-panel.js +0 -358
  572. package/dist/ui/layout/governance-roster.d.ts +0 -65
  573. package/dist/ui/layout/governance-roster.js +0 -275
  574. package/dist/ui/layout/header-hints.d.ts +0 -90
  575. package/dist/ui/layout/header-hints.js +0 -110
  576. package/dist/ui/layout/header-left.d.ts +0 -115
  577. package/dist/ui/layout/header-left.js +0 -206
  578. package/dist/ui/layout/invocation-card.d.ts +0 -41
  579. package/dist/ui/layout/invocation-card.js +0 -91
  580. package/dist/ui/layout/kit-chip.d.ts +0 -50
  581. package/dist/ui/layout/kit-chip.js +0 -81
  582. package/dist/ui/layout/overlay-window.d.ts +0 -43
  583. package/dist/ui/layout/overlay-window.js +0 -51
  584. package/dist/ui/layout/queue-layout.d.ts +0 -19
  585. package/dist/ui/layout/queue-layout.js +0 -26
  586. package/dist/ui/layout/rail.d.ts +0 -7
  587. package/dist/ui/layout/rail.js +0 -16
  588. package/dist/ui/layout/scroll-indicator.d.ts +0 -27
  589. package/dist/ui/layout/scroll-indicator.js +0 -36
  590. package/dist/ui/layout/scroll.d.ts +0 -37
  591. package/dist/ui/layout/scroll.js +0 -99
  592. package/dist/ui/layout/scrollbar-geometry.d.ts +0 -17
  593. package/dist/ui/layout/scrollbar-geometry.js +0 -13
  594. package/dist/ui/layout/session-chip.d.ts +0 -52
  595. package/dist/ui/layout/session-chip.js +0 -64
  596. package/dist/ui/layout/shortcut-panel-layout.d.ts +0 -191
  597. package/dist/ui/layout/shortcut-panel-layout.js +0 -321
  598. package/dist/ui/layout/status-detail-layout.d.ts +0 -9
  599. package/dist/ui/layout/status-detail-layout.js +0 -79
  600. package/dist/ui/layout/status-layout.d.ts +0 -139
  601. package/dist/ui/layout/status-layout.js +0 -253
  602. package/dist/ui/layout/task-summary-cell.d.ts +0 -61
  603. package/dist/ui/layout/task-summary-cell.js +0 -65
  604. package/dist/ui/layout/team-panel.d.ts +0 -18
  605. package/dist/ui/layout/team-panel.js +0 -25
  606. package/dist/ui/layout/team-row.d.ts +0 -139
  607. package/dist/ui/layout/team-row.js +0 -246
  608. package/dist/ui/layout/todo-layout.d.ts +0 -62
  609. package/dist/ui/layout/todo-layout.js +0 -102
  610. package/dist/ui/layout/useTerminalSize.d.ts +0 -13
  611. package/dist/ui/layout/useTerminalSize.js +0 -50
  612. package/dist/ui/layout/viewport-geometry.d.ts +0 -29
  613. package/dist/ui/layout/viewport-geometry.js +0 -28
  614. package/dist/ui/layout/virtual-window.d.ts +0 -112
  615. package/dist/ui/layout/virtual-window.js +0 -488
  616. package/dist/ui/layout/wrap-rows.d.ts +0 -26
  617. package/dist/ui/layout/wrap-rows.js +0 -88
  618. package/dist/ui/live-clamp.d.ts +0 -14
  619. package/dist/ui/live-clamp.js +0 -46
  620. package/dist/ui/markdown-blocks.d.ts +0 -107
  621. package/dist/ui/markdown-blocks.js +0 -240
  622. package/dist/ui/overlays/AgentsBoardOverlay.d.ts +0 -57
  623. package/dist/ui/overlays/AgentsBoardOverlay.js +0 -183
  624. package/dist/ui/overlays/ConfirmDialog.d.ts +0 -31
  625. package/dist/ui/overlays/ConfirmDialog.js +0 -44
  626. package/dist/ui/overlays/GovernanceBoardOverlay.d.ts +0 -41
  627. package/dist/ui/overlays/GovernanceBoardOverlay.js +0 -76
  628. package/dist/ui/overlays/GovernanceSettingsPage.d.ts +0 -48
  629. package/dist/ui/overlays/GovernanceSettingsPage.js +0 -93
  630. package/dist/ui/overlays/HelpOverlay.d.ts +0 -29
  631. package/dist/ui/overlays/HelpOverlay.js +0 -232
  632. package/dist/ui/overlays/KitEditor.d.ts +0 -23
  633. package/dist/ui/overlays/KitEditor.js +0 -101
  634. package/dist/ui/overlays/KitManager.d.ts +0 -23
  635. package/dist/ui/overlays/KitManager.js +0 -104
  636. package/dist/ui/overlays/KitPicker.d.ts +0 -49
  637. package/dist/ui/overlays/KitPicker.js +0 -58
  638. package/dist/ui/overlays/ModelDiscoveryList.d.ts +0 -23
  639. package/dist/ui/overlays/ModelDiscoveryList.js +0 -161
  640. package/dist/ui/overlays/ModelPicker.d.ts +0 -26
  641. package/dist/ui/overlays/ModelPicker.js +0 -63
  642. package/dist/ui/overlays/ModelProfileEditor.d.ts +0 -29
  643. package/dist/ui/overlays/ModelProfileEditor.js +0 -168
  644. package/dist/ui/overlays/ModelProfilePicker.d.ts +0 -48
  645. package/dist/ui/overlays/ModelProfilePicker.js +0 -231
  646. package/dist/ui/overlays/PlanReviewOverlay.d.ts +0 -51
  647. package/dist/ui/overlays/PlanReviewOverlay.js +0 -132
  648. package/dist/ui/overlays/PromptEditorPage.d.ts +0 -48
  649. package/dist/ui/overlays/PromptEditorPage.js +0 -227
  650. package/dist/ui/overlays/PromptLibraryOverlay.d.ts +0 -37
  651. package/dist/ui/overlays/PromptLibraryOverlay.js +0 -191
  652. package/dist/ui/overlays/PromptPicker.d.ts +0 -36
  653. package/dist/ui/overlays/PromptPicker.js +0 -129
  654. package/dist/ui/overlays/PromptTextArea.d.ts +0 -86
  655. package/dist/ui/overlays/PromptTextArea.js +0 -141
  656. package/dist/ui/overlays/QuestionOverlay.d.ts +0 -39
  657. package/dist/ui/overlays/QuestionOverlay.js +0 -258
  658. package/dist/ui/overlays/QueueOverlay.d.ts +0 -22
  659. package/dist/ui/overlays/QueueOverlay.js +0 -79
  660. package/dist/ui/overlays/SettingsScreen.d.ts +0 -228
  661. package/dist/ui/overlays/SettingsScreen.js +0 -1037
  662. package/dist/ui/overlays/ShortcutPanel.d.ts +0 -39
  663. package/dist/ui/overlays/ShortcutPanel.js +0 -106
  664. package/dist/ui/overlays/TeamFanoutPage.d.ts +0 -51
  665. package/dist/ui/overlays/TeamFanoutPage.js +0 -90
  666. package/dist/ui/overlays/governance-settings.d.ts +0 -79
  667. package/dist/ui/overlays/governance-settings.js +0 -140
  668. package/dist/ui/overlays/kit-picker-state.d.ts +0 -87
  669. package/dist/ui/overlays/kit-picker-state.js +0 -136
  670. package/dist/ui/overlays/kit-settings-state.d.ts +0 -129
  671. package/dist/ui/overlays/kit-settings-state.js +0 -268
  672. package/dist/ui/overlays/model-probe-view.d.ts +0 -128
  673. package/dist/ui/overlays/model-probe-view.js +0 -225
  674. package/dist/ui/overlays/model-profile-state.d.ts +0 -177
  675. package/dist/ui/overlays/model-profile-state.js +0 -301
  676. package/dist/ui/overlays/prompt-library-state.d.ts +0 -162
  677. package/dist/ui/overlays/prompt-library-state.js +0 -335
  678. package/dist/ui/overlays/prompt-picker-state.d.ts +0 -71
  679. package/dist/ui/overlays/prompt-picker-state.js +0 -98
  680. package/dist/ui/overlays/team-fanout-state.d.ts +0 -106
  681. package/dist/ui/overlays/team-fanout-state.js +0 -155
  682. package/dist/ui/overlays/use-model-probe.d.ts +0 -30
  683. package/dist/ui/overlays/use-model-probe.js +0 -109
  684. package/dist/ui/palettes.d.ts +0 -112
  685. package/dist/ui/palettes.js +0 -130
  686. package/dist/ui/paste-frames.d.ts +0 -91
  687. package/dist/ui/paste-frames.js +0 -117
  688. package/dist/ui/paste-tokens.d.ts +0 -90
  689. package/dist/ui/paste-tokens.js +0 -147
  690. package/dist/ui/render-cache.d.ts +0 -81
  691. package/dist/ui/render-cache.js +0 -196
  692. package/dist/ui/render-governor.d.ts +0 -54
  693. package/dist/ui/render-governor.js +0 -78
  694. package/dist/ui/run-metrics.d.ts +0 -23
  695. package/dist/ui/run-metrics.js +0 -27
  696. package/dist/ui/run-status-row.d.ts +0 -61
  697. package/dist/ui/run-status-row.js +0 -54
  698. package/dist/ui/screen.d.ts +0 -107
  699. package/dist/ui/screen.js +0 -234
  700. package/dist/ui/scrollback/LiveTail.d.ts +0 -115
  701. package/dist/ui/scrollback/LiveTail.js +0 -48
  702. package/dist/ui/scrollback/band.d.ts +0 -114
  703. package/dist/ui/scrollback/band.js +0 -143
  704. package/dist/ui/scrollback/budget.d.ts +0 -90
  705. package/dist/ui/scrollback/budget.js +0 -100
  706. package/dist/ui/scrollback/canvas.d.ts +0 -100
  707. package/dist/ui/scrollback/canvas.js +0 -114
  708. package/dist/ui/scrollback/cursor-probe.d.ts +0 -71
  709. package/dist/ui/scrollback/cursor-probe.js +0 -133
  710. package/dist/ui/scrollback/drain.d.ts +0 -32
  711. package/dist/ui/scrollback/drain.js +0 -64
  712. package/dist/ui/scrollback/exit-summary.d.ts +0 -23
  713. package/dist/ui/scrollback/exit-summary.js +0 -25
  714. package/dist/ui/scrollback/limits.d.ts +0 -98
  715. package/dist/ui/scrollback/limits.js +0 -98
  716. package/dist/ui/scrollback/live-preview.d.ts +0 -34
  717. package/dist/ui/scrollback/live-preview.js +0 -118
  718. package/dist/ui/scrollback/overflow-print.d.ts +0 -108
  719. package/dist/ui/scrollback/overflow-print.js +0 -120
  720. package/dist/ui/scrollback/renderer.d.ts +0 -48
  721. package/dist/ui/scrollback/renderer.js +0 -186
  722. package/dist/ui/scrollback/scrollback-writer.d.ts +0 -174
  723. package/dist/ui/scrollback/scrollback-writer.js +0 -648
  724. package/dist/ui/scrollback/settled-boundary.d.ts +0 -42
  725. package/dist/ui/scrollback/settled-boundary.js +0 -109
  726. package/dist/ui/scrollback/tail-anchor.d.ts +0 -71
  727. package/dist/ui/scrollback/tail-anchor.js +0 -79
  728. package/dist/ui/scrollback/tail-window.d.ts +0 -73
  729. package/dist/ui/scrollback/tail-window.js +0 -89
  730. package/dist/ui/scrollback/use-scrollback-view.d.ts +0 -139
  731. package/dist/ui/scrollback/use-scrollback-view.js +0 -601
  732. package/dist/ui/scrollback/writer-shapes.d.ts +0 -127
  733. package/dist/ui/scrollback/writer-shapes.js +0 -159
  734. package/dist/ui/scrollbar-controller.d.ts +0 -30
  735. package/dist/ui/scrollbar-controller.js +0 -124
  736. package/dist/ui/selection/highlight.d.ts +0 -39
  737. package/dist/ui/selection/highlight.js +0 -64
  738. package/dist/ui/selection/screen-mirror.d.ts +0 -24
  739. package/dist/ui/selection/screen-mirror.js +0 -35
  740. package/dist/ui/selection/selection-controller.d.ts +0 -104
  741. package/dist/ui/selection/selection-controller.js +0 -372
  742. package/dist/ui/selection/selection.d.ts +0 -90
  743. package/dist/ui/selection/selection.js +0 -223
  744. package/dist/ui/shortcuts.d.ts +0 -81
  745. package/dist/ui/shortcuts.js +0 -221
  746. package/dist/ui/status-feedback.d.ts +0 -35
  747. package/dist/ui/status-feedback.js +0 -38
  748. package/dist/ui/stdout-frame-writer.d.ts +0 -74
  749. package/dist/ui/stdout-frame-writer.js +0 -155
  750. package/dist/ui/team-status.d.ts +0 -166
  751. package/dist/ui/team-status.js +0 -252
  752. package/dist/ui/terminal-plan.d.ts +0 -52
  753. package/dist/ui/terminal-plan.js +0 -49
  754. package/dist/ui/theme.d.ts +0 -96
  755. package/dist/ui/theme.js +0 -130
  756. package/dist/ui/transcript-text.d.ts +0 -41
  757. package/dist/ui/transcript-text.js +0 -282
  758. package/dist/ui/use-height-store.d.ts +0 -31
  759. package/dist/ui/use-height-store.js +0 -76
  760. package/dist/ui/use-render-governor.d.ts +0 -39
  761. package/dist/ui/use-render-governor.js +0 -57
  762. package/dist/ui/use-wheel-routing.d.ts +0 -57
  763. package/dist/ui/use-wheel-routing.js +0 -152
  764. package/dist/ui/win-vt-force.d.ts +0 -136
  765. package/dist/ui/win-vt-force.js +0 -237
  766. package/dist/ui/win-vt-input.d.ts +0 -57
  767. package/dist/ui/win-vt-input.js +0 -62
  768. package/dist/update/limits.d.ts +0 -111
  769. package/dist/update/limits.js +0 -111
  770. package/dist/update/semver.d.ts +0 -89
  771. package/dist/update/semver.js +0 -295
  772. package/dist/update/types.d.ts +0 -169
  773. package/dist/update/types.js +0 -68
  774. /package/dist/{ui → app}/session-bridge.d.ts +0 -0
  775. /package/dist/{ui → app}/session-bridge.js +0 -0
@@ -1,104 +0,0 @@
1
- /**
2
- * `resolveSubagentModel` — THE single authority on which model a team child
3
- * runs (subagent-model-and-question-controls §3.3).
4
- *
5
- * ASCII ONLY: `src/team/**` is inside the glyph scanner's scope.
6
- *
7
- * EVERY CONSUMER READS THE CHILD'S MODEL THROUGH THIS FUNCTION AND NOWHERE
8
- * ELSE — `createSubagent`, the `task` report header and the settings root row —
9
- * following the `resolveFastTier` precedent one directory over: three call
10
- * sites each recomputing "which model do children run on?" from raw
11
- * config keys is exactly how the report ends up naming a model the children
12
- * silently fell back from.
13
- *
14
- * IT IS RE-RUN ON EVERY DISPATCH AND EVERY RENDER, NOT ONCE (rule 8 / RV-3 of
15
- * the fast tier, inherited here): `team.model`, the fast tier and the profile
16
- * library are all LIVE keys a settings save (the `Subagent model` row), `/fast
17
- * off` or a kit can rewrite mid-session. A resolution captured at construction would be a
18
- * resolution describing a session that no longer exists.
19
- *
20
- * A CHILD IS NEVER LEFT WITHOUT A MODEL (D-4). Every failure mode — fast tier
21
- * off, profile deleted, profile key missing — degrades to the MAIN connection
22
- * with a `fallbackReason`, so a dispatch cannot fail because its model setting
23
- * went stale. The reason is disclosed, never swallowed: the report header and
24
- * the settings summary line both render it.
25
- */
26
- import type { ModelCost, ModelRef, ThinkingLevel, TokenUsage } from '@aragon-agent/core';
27
- import type { ModelProfile, ModelRole } from '../config/model-profiles.js';
28
- import type { CliConfig } from '../config/schema.js';
29
- /** Which model children run on. `main` is the default and the historical behavior. */
30
- export type SubagentModelMode = 'main' | 'fast' | 'profile';
31
- /** Why a non-main request degraded to the main model (D-4 disclosure). */
32
- export type SubagentFallbackReason =
33
- /** `team.model='fast'` but `resolveFastTier` is not ok (off, unconfigured, no key). */
34
- 'fast_unavailable'
35
- /** `modelProfileId` is absent from the library (deleted, or never existed). */
36
- | 'profile_missing'
37
- /** The entry exists but carries no key of its own and the shared layer has none. */
38
- | 'profile_no_key';
39
- /** In-memory resolution; recomputed per dispatch/render, never persisted (§6.3). */
40
- export interface SubagentModelResolution {
41
- /** The user's requested mode, verbatim from config (UI highlight reads this). */
42
- mode: SubagentModelMode;
43
- /** The mode actually in effect; `'main'` whenever a fallback fired. */
44
- effective: SubagentModelMode;
45
- /** The connection children will use. On fallback, exactly the main connection. */
46
- ref: ModelRef;
47
- /** main/profile take `config.thinkingLevel`; fast takes `config.fast.thinkingLevel`. */
48
- thinkingLevel: ThinkingLevel;
49
- /** The role controller key resolution uses: main/profile `'main'`, fast `'fast'`. */
50
- keyRole: ModelRole;
51
- /** The profile entry a `profile` request hit, dedicated key included; else null. */
52
- profile: ModelProfile | null;
53
- /** Present only when `effective !== mode`. */
54
- fallbackReason?: SubagentFallbackReason;
55
- }
56
- /** What `priceTeamUsage` needs from the controller: the lead's table and the lookup. */
57
- export interface TeamPriceBook {
58
- /** The lead's own price table (`main` mode prices at exactly this). */
59
- mainCost: ModelCost | undefined;
60
- isPriced: (ref: ModelRef) => boolean;
61
- costFor: (ref: ModelRef) => ModelCost | undefined;
62
- }
63
- /**
64
- * USD for one child `usage` event, at the model the children ACTUALLY ran.
65
- *
66
- * The status bar and the dispatch report must agree, so both price through the same
67
- * resolution: under the default `main` mode this is the lead's table (byte parity),
68
- * otherwise the fast / profile model's. A model no table prices contributes ZERO rather
69
- * than a fabricated figure (C-11 / RV-4), where the report says `pricing unknown`.
70
- */
71
- export declare function priceTeamUsage(resolution: SubagentModelResolution, usage: TokenUsage, book: TeamPriceBook): number;
72
- /** The `AgentController.hasApiKey` shape, injected so there is one key resolver. */
73
- export type HasApiKey = (providerId: string, role?: ModelRole) => boolean;
74
- /** The lead-layer key resolver `resolveSubagentKey` falls back to. */
75
- export type SharedKeyResolver = (providerId: string, role: ModelRole) => string | undefined;
76
- /**
77
- * Resolve the model every child of the NEXT dispatch will run on.
78
- *
79
- * Pure, synchronous, no IO — testable as a matrix over config fixtures.
80
- *
81
- * @param config The live effective config. Read fresh; never snapshot it.
82
- * @param hasKey `AgentController.hasApiKey`, which already resolves the
83
- * config-file key, the provider environment variable and the one-shot
84
- * `--api-key` override. Injected rather than reimplemented for the reason
85
- * `resolveFastTier` records: a second key resolver is a second answer to
86
- * "why does it say no key?".
87
- */
88
- export declare function resolveSubagentModel(config: CliConfig, hasKey: HasApiKey): SubagentModelResolution;
89
- /**
90
- * The key a CHILD resolves for a provider, profile-aware (§3.3 / I-4).
91
- *
92
- * A profile's dedicated key is visible ONLY here: it never reaches env,
93
- * `config.apiKeys` or a log line. While the resolution's profile is bound and
94
- * the provider matches it, the entry key takes priority over the shared layer;
95
- * every other provider (and every non-profile mode) resolves through the
96
- * lead's own resolver at `resolution.keyRole` — which is what keeps a `fast`
97
- * child entitled to the fast-role key and a `main` child to the main one.
98
- *
99
- * @param config The live config (carried for parity with the resolver pair).
100
- * @param resolution A fresh `resolveSubagentModel` output.
101
- * @param providerId The provider the child needs a key for.
102
- * @param shared The lead-layer resolver (`controller.resolveKey`).
103
- */
104
- export declare function resolveSubagentKey(config: CliConfig, resolution: SubagentModelResolution, providerId: string, shared: SharedKeyResolver): string | undefined;
@@ -1,150 +0,0 @@
1
- /**
2
- * `resolveSubagentModel` — THE single authority on which model a team child
3
- * runs (subagent-model-and-question-controls §3.3).
4
- *
5
- * ASCII ONLY: `src/team/**` is inside the glyph scanner's scope.
6
- *
7
- * EVERY CONSUMER READS THE CHILD'S MODEL THROUGH THIS FUNCTION AND NOWHERE
8
- * ELSE — `createSubagent`, the `task` report header and the settings root row —
9
- * following the `resolveFastTier` precedent one directory over: three call
10
- * sites each recomputing "which model do children run on?" from raw
11
- * config keys is exactly how the report ends up naming a model the children
12
- * silently fell back from.
13
- *
14
- * IT IS RE-RUN ON EVERY DISPATCH AND EVERY RENDER, NOT ONCE (rule 8 / RV-3 of
15
- * the fast tier, inherited here): `team.model`, the fast tier and the profile
16
- * library are all LIVE keys a settings save (the `Subagent model` row), `/fast
17
- * off` or a kit can rewrite mid-session. A resolution captured at construction would be a
18
- * resolution describing a session that no longer exists.
19
- *
20
- * A CHILD IS NEVER LEFT WITHOUT A MODEL (D-4). Every failure mode — fast tier
21
- * off, profile deleted, profile key missing — degrades to the MAIN connection
22
- * with a `fallbackReason`, so a dispatch cannot fail because its model setting
23
- * went stale. The reason is disclosed, never swallowed: the report header and
24
- * the settings summary line both render it.
25
- */
26
- import { computeCost } from '../agent/usage.js';
27
- import { resolveFastTier } from '../fast/resolve.js';
28
- /**
29
- * USD for one child `usage` event, at the model the children ACTUALLY ran.
30
- *
31
- * The status bar and the dispatch report must agree, so both price through the same
32
- * resolution: under the default `main` mode this is the lead's table (byte parity),
33
- * otherwise the fast / profile model's. A model no table prices contributes ZERO rather
34
- * than a fabricated figure (C-11 / RV-4), where the report says `pricing unknown`.
35
- */
36
- export function priceTeamUsage(resolution, usage, book) {
37
- if (resolution.effective === 'main')
38
- return computeCost(usage, book.mainCost);
39
- return book.isPriced(resolution.ref) ? computeCost(usage, book.costFor(resolution.ref)) : 0;
40
- }
41
- function mainRef(config) {
42
- return {
43
- providerId: config.provider,
44
- modelId: config.model,
45
- ...(config.baseUrl ? { baseUrl: config.baseUrl } : {}),
46
- };
47
- }
48
- function fallbackToMain(config, mode, fallbackReason) {
49
- // THE ALWAYS-USABLE ANSWER (D-4): whatever the user asked for that could not
50
- // resolve, the caller still gets a working connection — the same provider,
51
- // model, base URL and thinking level the lead itself runs on.
52
- return {
53
- mode,
54
- effective: 'main',
55
- ref: mainRef(config),
56
- thinkingLevel: config.thinkingLevel,
57
- keyRole: 'main',
58
- profile: null,
59
- fallbackReason,
60
- };
61
- }
62
- /**
63
- * Resolve the model every child of the NEXT dispatch will run on.
64
- *
65
- * Pure, synchronous, no IO — testable as a matrix over config fixtures.
66
- *
67
- * @param config The live effective config. Read fresh; never snapshot it.
68
- * @param hasKey `AgentController.hasApiKey`, which already resolves the
69
- * config-file key, the provider environment variable and the one-shot
70
- * `--api-key` override. Injected rather than reimplemented for the reason
71
- * `resolveFastTier` records: a second key resolver is a second answer to
72
- * "why does it say no key?".
73
- */
74
- export function resolveSubagentModel(config, hasKey) {
75
- // `clampTeamConfig` guarantees the enum on every read and write path, so the
76
- // default `'main'` here is belt-and-braces rather than a real branch.
77
- const mode = config.team.model ?? 'main';
78
- if (mode === 'fast') {
79
- const tier = resolveFastTier(config, hasKey);
80
- if (tier.ok) {
81
- return {
82
- mode,
83
- effective: 'fast',
84
- ref: tier.ref,
85
- thinkingLevel: config.fast.thinkingLevel,
86
- keyRole: 'fast',
87
- profile: null,
88
- };
89
- }
90
- return fallbackToMain(config, mode, 'fast_unavailable');
91
- }
92
- if (mode === 'profile') {
93
- // A missing library, a missing id and a dangling id are one outcome
94
- // (D-4): degrade to main and say so. Reference EXISTENCE is deliberately
95
- // not validated in `clampTeamConfig` — resolution is where it belongs.
96
- const id = config.team.modelProfileId;
97
- const entry = id
98
- ? config.modelProfiles?.entries.find((candidate) => candidate.id === id)
99
- : undefined;
100
- if (!entry)
101
- return fallbackToMain(config, mode, 'profile_missing');
102
- // The dedicated entry key wins; without one the shared layer must have a
103
- // key for the entry's provider, or the child could not authenticate at all.
104
- if (!entry.apiKey && !hasKey(entry.provider, 'main')) {
105
- return fallbackToMain(config, mode, 'profile_no_key');
106
- }
107
- return {
108
- mode,
109
- effective: 'profile',
110
- ref: {
111
- providerId: entry.provider,
112
- modelId: entry.model,
113
- ...(entry.baseUrl ? { baseUrl: entry.baseUrl } : {}),
114
- },
115
- thinkingLevel: config.thinkingLevel,
116
- keyRole: 'main',
117
- profile: entry,
118
- };
119
- }
120
- return {
121
- mode: 'main',
122
- effective: 'main',
123
- ref: mainRef(config),
124
- thinkingLevel: config.thinkingLevel,
125
- keyRole: 'main',
126
- profile: null,
127
- };
128
- }
129
- /**
130
- * The key a CHILD resolves for a provider, profile-aware (§3.3 / I-4).
131
- *
132
- * A profile's dedicated key is visible ONLY here: it never reaches env,
133
- * `config.apiKeys` or a log line. While the resolution's profile is bound and
134
- * the provider matches it, the entry key takes priority over the shared layer;
135
- * every other provider (and every non-profile mode) resolves through the
136
- * lead's own resolver at `resolution.keyRole` — which is what keeps a `fast`
137
- * child entitled to the fast-role key and a `main` child to the main one.
138
- *
139
- * @param config The live config (carried for parity with the resolver pair).
140
- * @param resolution A fresh `resolveSubagentModel` output.
141
- * @param providerId The provider the child needs a key for.
142
- * @param shared The lead-layer resolver (`controller.resolveKey`).
143
- */
144
- export function resolveSubagentKey(config, resolution, providerId, shared) {
145
- void config; // parity parameter: the pair reads one config, the key does not need it
146
- if (resolution.profile && providerId === resolution.ref.providerId) {
147
- return resolution.profile.apiKey ?? shared(providerId, 'main');
148
- }
149
- return shared(providerId, resolution.keyRole);
150
- }
@@ -1,48 +0,0 @@
1
- /**
2
- * `selectPanelRows` - which children the live roster shows (team-live-activity
3
- * F-2).
4
- *
5
- * ASCII ONLY: `src/team/**` is inside the glyph scanner's scope.
6
- *
7
- * THE DEFECT THIS REPLACES. `TeamPanel` took the first `panelMaxRows` runs by
8
- * ARRAY INDEX, and the slot pool hands out indices from a shared cursor in
9
- * order - so at `maxSubagents: 8, maxConcurrent: 3` the first five rows are the
10
- * five that finished first and everything still working sits behind `+3 more`.
11
- * The one thing the requirement asks the panel for - show that subagents are
12
- * running - is the one thing it stopped doing at the fan-out widths the
13
- * requirement explicitly permits.
14
- *
15
- * Pure: a function of a roster snapshot and a row cap, with no clock, no
16
- * terminal and no `Agent` anywhere near it.
17
- */
18
- import type { SubagentRun } from './types.js';
19
- export interface PanelRows {
20
- visible: SubagentRun[];
21
- hiddenTotal: number;
22
- hiddenRunning: number;
23
- }
24
- /**
25
- * Rank the roster so that what is VISIBLE is what is HAPPENING.
26
- *
27
- * Ordering inside each group is chosen for ROW STABILITY, which is the real
28
- * usability constraint here: the panel re-renders every 200 ms and a row that
29
- * changes position on each tick is unreadable.
30
- * - running: by `startedAt` ascending. `startedAt` changes exactly once in a
31
- * run's life outside of its first assignment - on a cold-start retry (F-4),
32
- * which re-stamps it (P2-4). A retried child therefore moves to the end of
33
- * the running group, once, at the moment it visibly restarts. That is the
34
- * correct reading of the ordering rule rather than an exception to it: the
35
- * group is ordered by "how long has this been going", and a retry resets
36
- * exactly that.
37
- * - queued: original order; that IS the order the pool will start them in.
38
- * - settled: most recently ended first, so the newest result is the one that
39
- * stays on screen as others complete.
40
- * A run changes position at most twice in its life - queued -> running ->
41
- * settled - and each move carries real information.
42
- *
43
- * The final tiebreak is the original index. `Array.prototype.sort` is stable in
44
- * every Node this package supports, so the tiebreak is not load-bearing; it is
45
- * here so the ordering is total and the test can assert it without depending on
46
- * that guarantee.
47
- */
48
- export declare function selectPanelRows(runs: SubagentRun[], max: number): PanelRows;
@@ -1,75 +0,0 @@
1
- /**
2
- * `selectPanelRows` - which children the live roster shows (team-live-activity
3
- * F-2).
4
- *
5
- * ASCII ONLY: `src/team/**` is inside the glyph scanner's scope.
6
- *
7
- * THE DEFECT THIS REPLACES. `TeamPanel` took the first `panelMaxRows` runs by
8
- * ARRAY INDEX, and the slot pool hands out indices from a shared cursor in
9
- * order - so at `maxSubagents: 8, maxConcurrent: 3` the first five rows are the
10
- * five that finished first and everything still working sits behind `+3 more`.
11
- * The one thing the requirement asks the panel for - show that subagents are
12
- * running - is the one thing it stopped doing at the fan-out widths the
13
- * requirement explicitly permits.
14
- *
15
- * Pure: a function of a roster snapshot and a row cap, with no clock, no
16
- * terminal and no `Agent` anywhere near it.
17
- */
18
- const RUNNING = new Set(['starting', 'thinking', 'tool', 'waiting']);
19
- const SETTLED = new Set(['done', 'failed', 'aborted']);
20
- /** 0 running, 1 queued, 2 settled. */
21
- function group(run) {
22
- if (RUNNING.has(run.phase))
23
- return 0;
24
- if (SETTLED.has(run.phase))
25
- return 2;
26
- return 1;
27
- }
28
- /**
29
- * Rank the roster so that what is VISIBLE is what is HAPPENING.
30
- *
31
- * Ordering inside each group is chosen for ROW STABILITY, which is the real
32
- * usability constraint here: the panel re-renders every 200 ms and a row that
33
- * changes position on each tick is unreadable.
34
- * - running: by `startedAt` ascending. `startedAt` changes exactly once in a
35
- * run's life outside of its first assignment - on a cold-start retry (F-4),
36
- * which re-stamps it (P2-4). A retried child therefore moves to the end of
37
- * the running group, once, at the moment it visibly restarts. That is the
38
- * correct reading of the ordering rule rather than an exception to it: the
39
- * group is ordered by "how long has this been going", and a retry resets
40
- * exactly that.
41
- * - queued: original order; that IS the order the pool will start them in.
42
- * - settled: most recently ended first, so the newest result is the one that
43
- * stays on screen as others complete.
44
- * A run changes position at most twice in its life - queued -> running ->
45
- * settled - and each move carries real information.
46
- *
47
- * The final tiebreak is the original index. `Array.prototype.sort` is stable in
48
- * every Node this package supports, so the tiebreak is not load-bearing; it is
49
- * here so the ordering is total and the test can assert it without depending on
50
- * that guarantee.
51
- */
52
- export function selectPanelRows(runs, max) {
53
- const ranked = runs
54
- .map((run, index) => ({ run, index }))
55
- .sort((a, b) => {
56
- const ga = group(a.run);
57
- const gb = group(b.run);
58
- if (ga !== gb)
59
- return ga - gb;
60
- if (ga === 0)
61
- return (a.run.startedAt ?? 0) - (b.run.startedAt ?? 0) || a.index - b.index;
62
- if (ga === 2)
63
- return (b.run.endedAt ?? 0) - (a.run.endedAt ?? 0) || a.index - b.index;
64
- return a.index - b.index;
65
- })
66
- .map((e) => e.run);
67
- const limit = Math.max(0, max);
68
- const visible = ranked.slice(0, limit);
69
- const hidden = ranked.slice(limit);
70
- return {
71
- visible,
72
- hiddenTotal: hidden.length,
73
- hiddenRunning: hidden.filter((r) => RUNNING.has(r.phase)).length,
74
- };
75
- }
@@ -1,74 +0,0 @@
1
- /**
2
- * The per-child event ring behind the Agents board's `timeline` section
3
- * (tui-subagent-panel §4.5).
4
- *
5
- * WHY A RING ON THE RUN rather than a second store: a `SubagentRun` already IS "one
6
- * child's projection", and every UI surface reads it through `publish()`. A separate
7
- * store would be a second authority for the same subject and would have to be
8
- * subscribed to separately - and the four collection points below are all single
9
- * funnels that already exist (§4.5.2).
10
- *
11
- * FIVE KINDS, NOT EVERY TURN (D-12). A turn marker per turn would fill twenty-four
12
- * slots in a long task and push out the tool calls, which are the part a reader cannot
13
- * reconstruct from the report. Phase changes are visible in the board's `state` field
14
- * in real time, so they do not need history.
15
- *
16
- * BOUNDED AND PURE. `appendTimeline` returns a NEW array (never mutates the old one),
17
- * drops the oldest entry past `TEAM_LIMITS.timelineEntries`, and clamps every line to
18
- * `TEAM_LIMITS.timelineTextChars`. Purity is what lets `publish()`'s shallow copy hold
19
- * a stable snapshot without knowing this module exists (AC-25).
20
- *
21
- * ASCII ONLY: `src/team/**` is inside `glyphs.test.ts`'s static scan.
22
- *
23
- * THE TEXT IS ALWAYS BUILT FROM `describeToolActivity` / `sanitizeActivity`, never
24
- * from raw tool arguments (D-11 / P1-4). That is the boundary that keeps a
25
- * `write_file` body, a `bash` transcript or a child's prompt out of a surface that is
26
- * one `JSON.stringify` from a log.
27
- */
28
- import type { SubagentPhase, SubagentRun } from './types.js';
29
- export type TimelineKind = 'tool' | 'retry' | 'compact' | 'overseer' | 'settle';
30
- export interface TimelineEntry {
31
- kind: TimelineKind;
32
- /** Absolute epoch ms, the same units as `startedAt` / `endedAt` / `lastIntervention.at`. */
33
- at: number;
34
- /** Already sanitized + clamped: at most `TEAM_LIMITS.timelineTextChars` characters. */
35
- text: string;
36
- /** Whether the tool call succeeded (`tool` only). */
37
- ok?: boolean;
38
- /** How long the tool call took in ms (`tool` only). */
39
- ms?: number;
40
- }
41
- export declare function isTerminalPhase(phase: SubagentPhase): boolean;
42
- /**
43
- * Append one event, returning a NEW array. The oldest entry is dropped once the ring
44
- * is full, so the array's length is bounded by `max` for every possible input.
45
- */
46
- export declare function appendTimeline(prev: readonly TimelineEntry[] | undefined, entry: TimelineEntry, max?: number): TimelineEntry[];
47
- /**
48
- * The terminal event for one ATTEMPT, or `null` when there is nothing to record yet.
49
- *
50
- * WHY THIS IS CALLED FROM `publish()` AND NOT FROM `settlePhase` (§4.5.2 / RV-P1-3):
51
- * `settlePhase` covers the retry loop's exit only, and two paths set a terminal phase
52
- * directly - the worker's "never started" abort and the cold-start backoff abort. Those
53
- * are exactly the children whose explanation a reader needs most, and hanging the
54
- * settle entry on `settlePhase` alone would leave them with no last event.
55
- *
56
- * IDEMPOTENCE IS KEYED ON THE ATTEMPT, not on "the last entry is a settle" (I-14): a
57
- * retry re-stamps `startedAt`, so a new attempt legitimately earns a second terminal
58
- * entry, while a repeated `publish()` of the same attempt adds nothing.
59
- */
60
- export declare function settleTimelineEntry(run: SubagentRun, at: number): TimelineEntry | null;
61
- /**
62
- * The run as a reader should see it: unchanged, or with its attempt's terminal event
63
- * appended once. Called from `publish()`, which is every state change's single exit
64
- * (§4.5.2) and therefore covers the two paths that set a terminal phase directly.
65
- *
66
- * ADDED TO THE EMITTED SNAPSHOT, NEVER TO THE LIVE RUN (this is the part `publish()`
67
- * makes subtle). `subagent.ts` calls `onUpdate` with a COPY of the run, so writing the
68
- * entry onto the object `publish()` receives would be lost - and because
69
- * `settleTimelineEntry` uses the live timeline as its idempotence key, a lost write
70
- * means every later publish of the same settled child appends another `settle` row to
71
- * the ring. Keeping the live run untouched makes the entry a property of the VIEW:
72
- * exactly one terminal event per attempt, however many frames are published.
73
- */
74
- export declare function withSettleEntry(run: SubagentRun, at: number): SubagentRun;
@@ -1,101 +0,0 @@
1
- /**
2
- * The per-child event ring behind the Agents board's `timeline` section
3
- * (tui-subagent-panel §4.5).
4
- *
5
- * WHY A RING ON THE RUN rather than a second store: a `SubagentRun` already IS "one
6
- * child's projection", and every UI surface reads it through `publish()`. A separate
7
- * store would be a second authority for the same subject and would have to be
8
- * subscribed to separately - and the four collection points below are all single
9
- * funnels that already exist (§4.5.2).
10
- *
11
- * FIVE KINDS, NOT EVERY TURN (D-12). A turn marker per turn would fill twenty-four
12
- * slots in a long task and push out the tool calls, which are the part a reader cannot
13
- * reconstruct from the report. Phase changes are visible in the board's `state` field
14
- * in real time, so they do not need history.
15
- *
16
- * BOUNDED AND PURE. `appendTimeline` returns a NEW array (never mutates the old one),
17
- * drops the oldest entry past `TEAM_LIMITS.timelineEntries`, and clamps every line to
18
- * `TEAM_LIMITS.timelineTextChars`. Purity is what lets `publish()`'s shallow copy hold
19
- * a stable snapshot without knowing this module exists (AC-25).
20
- *
21
- * ASCII ONLY: `src/team/**` is inside `glyphs.test.ts`'s static scan.
22
- *
23
- * THE TEXT IS ALWAYS BUILT FROM `describeToolActivity` / `sanitizeActivity`, never
24
- * from raw tool arguments (D-11 / P1-4). That is the boundary that keeps a
25
- * `write_file` body, a `bash` transcript or a child's prompt out of a surface that is
26
- * one `JSON.stringify` from a log.
27
- */
28
- import { TEAM_LIMITS } from './limits.js';
29
- /** The phases that end an attempt. Used by the settle-idempotence rule below. */
30
- const TERMINAL_PHASES = new Set(['done', 'failed', 'aborted']);
31
- export function isTerminalPhase(phase) {
32
- return TERMINAL_PHASES.has(phase);
33
- }
34
- /** Clamp one line to the display budget. Collapses whitespace for the same reason. */
35
- function clampText(text) {
36
- const flat = text.replace(/\s+/g, ' ').trim();
37
- if (flat.length <= TEAM_LIMITS.timelineTextChars)
38
- return flat;
39
- return `${flat.slice(0, TEAM_LIMITS.timelineTextChars - 3)}...`;
40
- }
41
- /**
42
- * Append one event, returning a NEW array. The oldest entry is dropped once the ring
43
- * is full, so the array's length is bounded by `max` for every possible input.
44
- */
45
- export function appendTimeline(prev, entry, max = TEAM_LIMITS.timelineEntries) {
46
- const limit = Number.isFinite(max) ? Math.max(1, Math.floor(max)) : TEAM_LIMITS.timelineEntries;
47
- const next = [...(prev ?? []), { ...entry, text: clampText(entry.text) }];
48
- return next.length > limit ? next.slice(next.length - limit) : next;
49
- }
50
- /** The first line of a multi-line answer, clamped - a timeline entry is one line. */
51
- function head(text) {
52
- if (text === undefined || text.length === 0)
53
- return '';
54
- return clampText(text);
55
- }
56
- /**
57
- * The terminal event for one ATTEMPT, or `null` when there is nothing to record yet.
58
- *
59
- * WHY THIS IS CALLED FROM `publish()` AND NOT FROM `settlePhase` (§4.5.2 / RV-P1-3):
60
- * `settlePhase` covers the retry loop's exit only, and two paths set a terminal phase
61
- * directly - the worker's "never started" abort and the cold-start backoff abort. Those
62
- * are exactly the children whose explanation a reader needs most, and hanging the
63
- * settle entry on `settlePhase` alone would leave them with no last event.
64
- *
65
- * IDEMPOTENCE IS KEYED ON THE ATTEMPT, not on "the last entry is a settle" (I-14): a
66
- * retry re-stamps `startedAt`, so a new attempt legitimately earns a second terminal
67
- * entry, while a repeated `publish()` of the same attempt adds nothing.
68
- */
69
- export function settleTimelineEntry(run, at) {
70
- if (!isTerminalPhase(run.phase))
71
- return null;
72
- const attemptStart = run.startedAt ?? 0;
73
- const last = run.timeline?.[run.timeline.length - 1];
74
- if (last?.kind === 'settle' && last.at >= attemptStart)
75
- return null;
76
- const text = run.phase === 'done'
77
- ? `done: ${head(run.summary)}`.trim()
78
- : run.phase === 'failed'
79
- ? `failed: ${head(run.error)}`.trim()
80
- : 'aborted';
81
- return { kind: 'settle', at, text };
82
- }
83
- /**
84
- * The run as a reader should see it: unchanged, or with its attempt's terminal event
85
- * appended once. Called from `publish()`, which is every state change's single exit
86
- * (§4.5.2) and therefore covers the two paths that set a terminal phase directly.
87
- *
88
- * ADDED TO THE EMITTED SNAPSHOT, NEVER TO THE LIVE RUN (this is the part `publish()`
89
- * makes subtle). `subagent.ts` calls `onUpdate` with a COPY of the run, so writing the
90
- * entry onto the object `publish()` receives would be lost - and because
91
- * `settleTimelineEntry` uses the live timeline as its idempotence key, a lost write
92
- * means every later publish of the same settled child appends another `settle` row to
93
- * the ring. Keeping the live run untouched makes the entry a property of the VIEW:
94
- * exactly one terminal event per attempt, however many frames are published.
95
- */
96
- export function withSettleEntry(run, at) {
97
- const settle = settleTimelineEntry(run, at);
98
- if (settle === null)
99
- return run;
100
- return { ...run, timeline: appendTimeline(run.timeline, settle) };
101
- }