toolroll 0.9.93 → 0.9.95

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 (436) hide show
  1. package/CHANGELOG.md +79 -0
  2. package/dist/activity-line.d.ts +7 -4
  3. package/dist/activity-line.js +9 -7
  4. package/dist/agent-fence.d.ts +10 -0
  5. package/dist/agent-fence.js +6 -3
  6. package/dist/approval-authority.d.ts +7 -1
  7. package/dist/approval-authority.js +11 -2
  8. package/dist/approval-password.d.ts +31 -0
  9. package/dist/approval-password.js +26 -0
  10. package/dist/assignment-status.d.ts +1 -1
  11. package/dist/assignment-ui.js +3 -1
  12. package/dist/assignment.js +5 -0
  13. package/dist/attest.d.ts +3 -0
  14. package/dist/attest.js +10 -0
  15. package/dist/boot-identity.d.ts +2 -1
  16. package/dist/boot-identity.js +6 -4
  17. package/dist/bounded-spawn.d.ts +57 -0
  18. package/dist/bounded-spawn.js +220 -0
  19. package/dist/browser/terminal.js +42 -42
  20. package/dist/browser/workspace.css +1 -1
  21. package/dist/browser/workspace.js +32 -32
  22. package/dist/browser-crew.js +2 -0
  23. package/dist/browser-shell.d.ts +1 -1
  24. package/dist/browser-shell.js +2 -2
  25. package/dist/browser-workspace.d.ts +50 -2
  26. package/dist/browser-workspace.js +3 -3
  27. package/dist/build-review.js +2 -0
  28. package/dist/builder-restart.d.ts +21 -0
  29. package/dist/builder-restart.js +50 -0
  30. package/dist/builder.d.ts +11 -2
  31. package/dist/builder.js +234 -101
  32. package/dist/card-catalog.d.ts +209 -0
  33. package/dist/card-catalog.js +133 -0
  34. package/dist/card-cli.d.ts +43 -0
  35. package/dist/card-cli.js +44 -0
  36. package/dist/card-render.d.ts +26 -0
  37. package/dist/card-render.js +223 -0
  38. package/dist/card-sources.d.ts +68 -0
  39. package/dist/card-sources.js +234 -0
  40. package/dist/chat-acceptance.js +1 -1
  41. package/dist/chat-actions.d.ts +106 -9
  42. package/dist/chat-actions.js +473 -46
  43. package/dist/chat-approval.d.ts +13 -0
  44. package/dist/chat-approval.js +39 -9
  45. package/dist/chat-card-part.d.ts +11 -0
  46. package/dist/chat-card-part.js +18 -0
  47. package/dist/chat-card.d.ts +46 -0
  48. package/dist/chat-card.js +99 -0
  49. package/dist/chat-channel.d.ts +2 -0
  50. package/dist/chat-channel.js +37 -14
  51. package/dist/chat-controls.d.ts +4 -0
  52. package/dist/chat-controls.js +4 -0
  53. package/dist/chat-decide.d.ts +10 -16
  54. package/dist/chat-decide.js +79 -62
  55. package/dist/chat-delivery.js +13 -4
  56. package/dist/chat-flow.d.ts +0 -27
  57. package/dist/chat-flow.js +31 -2
  58. package/dist/chat-quiet.js +4 -4
  59. package/dist/chat-task-actions.d.ts +3 -2
  60. package/dist/chat-task-actions.js +19 -5
  61. package/dist/chat-terms.d.ts +14 -2
  62. package/dist/chat-terms.js +35 -0
  63. package/dist/chat-voice.d.ts +1 -1
  64. package/dist/chat-voice.js +2 -2
  65. package/dist/check-facts.d.ts +3 -1
  66. package/dist/check-facts.js +57 -11
  67. package/dist/check-failure.d.ts +24 -3
  68. package/dist/check-failure.js +89 -13
  69. package/dist/check-levels-ui.d.ts +4 -0
  70. package/dist/check-levels-ui.js +10 -1
  71. package/dist/check-load.d.ts +85 -0
  72. package/dist/check-load.js +147 -0
  73. package/dist/check-only-standing.d.ts +36 -0
  74. package/dist/check-only-standing.js +39 -0
  75. package/dist/check-only.d.ts +15 -0
  76. package/dist/check-only.js +99 -0
  77. package/dist/check-repair.d.ts +47 -0
  78. package/dist/check-repair.js +240 -0
  79. package/dist/check-report.d.ts +2 -0
  80. package/dist/check-report.js +1 -1
  81. package/dist/check-stamp.d.ts +46 -0
  82. package/dist/check-stamp.js +93 -0
  83. package/dist/checkout-cleanup.d.ts +36 -5
  84. package/dist/checkout-cleanup.js +166 -14
  85. package/dist/claim.d.ts +6 -0
  86. package/dist/claim.js +13 -2
  87. package/dist/cli-help.d.ts +4 -1
  88. package/dist/cli-help.js +49 -30
  89. package/dist/cli.js +15 -1
  90. package/dist/code-extract.d.ts +44 -0
  91. package/dist/code-extract.js +88 -0
  92. package/dist/code-map-acts.d.ts +24 -0
  93. package/dist/code-map-acts.js +53 -0
  94. package/dist/code-map-admission.d.ts +52 -0
  95. package/dist/code-map-admission.js +295 -0
  96. package/dist/code-map-build.d.ts +63 -0
  97. package/dist/code-map-build.js +415 -0
  98. package/dist/code-map-cli.d.ts +153 -0
  99. package/dist/code-map-cli.js +103 -0
  100. package/dist/code-map-main.d.ts +1 -0
  101. package/dist/code-map-main.js +48 -0
  102. package/dist/code-map-read.d.ts +106 -0
  103. package/dist/code-map-read.js +171 -0
  104. package/dist/code-map-report.d.ts +37 -0
  105. package/dist/code-map-report.js +95 -0
  106. package/dist/code-map-shape.d.ts +172 -0
  107. package/dist/code-map-shape.js +327 -0
  108. package/dist/code-map-store.d.ts +136 -0
  109. package/dist/code-map-store.js +233 -0
  110. package/dist/coding-provider.d.ts +3 -1
  111. package/dist/coding-provider.js +12 -7
  112. package/dist/coding-update.js +3 -2
  113. package/dist/coding-workspace.d.ts +1 -1
  114. package/dist/coding-workspace.js +8 -8
  115. package/dist/console-chrome.js +2 -2
  116. package/dist/containment.d.ts +5 -0
  117. package/dist/containment.js +14 -1
  118. package/dist/contracts/chat-actions.d.ts +92 -0
  119. package/dist/contracts/chat-actions.js +20 -0
  120. package/dist/contracts/chat-card.d.ts +91 -0
  121. package/dist/contracts/chat-card.js +54 -0
  122. package/dist/contracts/chat-content.d.ts +191 -0
  123. package/dist/contracts/chat-content.js +4 -0
  124. package/dist/contracts/cli.d.ts +52 -0
  125. package/dist/contracts/cli.js +4 -0
  126. package/dist/contracts/console-api.d.ts +12 -3
  127. package/dist/contracts/console-api.js +12 -3
  128. package/dist/contracts/flow-propose.d.ts +8 -1
  129. package/dist/contracts/flow-propose.js +3 -1
  130. package/dist/contracts/flow-send.d.ts +126 -0
  131. package/dist/contracts/flow-send.js +3 -0
  132. package/dist/contracts/gateway-tools.d.ts +17 -0
  133. package/dist/contracts/gateway-tools.js +3 -1
  134. package/dist/contracts/lead-tools.d.ts +234 -0
  135. package/dist/contracts/lead-tools.js +25 -1
  136. package/dist/contracts/project-knowledge.d.ts +38 -5
  137. package/dist/contracts/project-knowledge.js +11 -5
  138. package/dist/contracts/project-memory.d.ts +3 -1
  139. package/dist/contracts/project-memory.js +3 -2
  140. package/dist/contracts/storage.d.ts +14 -0
  141. package/dist/contracts/storage.js +3 -1
  142. package/dist/contracts/store-json.d.ts +18 -0
  143. package/dist/contracts/youiyoux-request.d.ts +1 -1
  144. package/dist/contracts/youiyoux-request.js +1 -1
  145. package/dist/desktop-access.js +6 -2
  146. package/dist/discord-chat.js +14 -0
  147. package/dist/dispatch.d.ts +1 -1
  148. package/dist/dispatch.js +25 -16
  149. package/dist/dispose.d.ts +19 -0
  150. package/dist/dispose.js +55 -9
  151. package/dist/easy-start.js +2 -3
  152. package/dist/eval-oracle.js +4 -1
  153. package/dist/evals.js +2 -1
  154. package/dist/evidence-pair.d.ts +53 -0
  155. package/dist/evidence-pair.js +128 -0
  156. package/dist/exhaustion.d.ts +17 -4
  157. package/dist/exhaustion.js +44 -4
  158. package/dist/export.js +1 -1
  159. package/dist/failing-first.d.ts +31 -0
  160. package/dist/failing-first.js +44 -0
  161. package/dist/fallback-schema.d.ts +8 -0
  162. package/dist/fallback-schema.js +40 -0
  163. package/dist/fallback.d.ts +138 -0
  164. package/dist/fallback.js +605 -0
  165. package/dist/fast-start.d.ts +136 -0
  166. package/dist/fast-start.js +431 -0
  167. package/dist/fast-terms.d.ts +9 -0
  168. package/dist/fast-terms.js +23 -0
  169. package/dist/fenced-check-coverage.d.ts +62 -0
  170. package/dist/fenced-check-coverage.js +54 -0
  171. package/dist/findings.d.ts +224 -0
  172. package/dist/findings.js +449 -0
  173. package/dist/first-run.js +1 -1
  174. package/dist/flaky-ci.d.ts +31 -0
  175. package/dist/flaky-ci.js +149 -0
  176. package/dist/flaky-cli.d.ts +60 -0
  177. package/dist/flaky-cli.js +60 -0
  178. package/dist/flaky.d.ts +75 -9
  179. package/dist/flaky.js +255 -0
  180. package/dist/fleet-schema.d.ts +17 -0
  181. package/dist/fleet-schema.js +135 -0
  182. package/dist/flow-browser.js +2 -2
  183. package/dist/flow-card-task.js +3 -0
  184. package/dist/flow-code.d.ts +2 -2
  185. package/dist/flow-code.js +9 -5
  186. package/dist/flow-result-card.d.ts +22 -0
  187. package/dist/flow-result-card.js +55 -0
  188. package/dist/flow-send.js +12 -9
  189. package/dist/flow-steps.js +1 -1
  190. package/dist/flow-triggers.d.ts +1 -1
  191. package/dist/flow-triggers.js +2 -2
  192. package/dist/flow-unattended.d.ts +26 -0
  193. package/dist/flow-unattended.js +12 -3
  194. package/dist/flows-ui.js +10 -2
  195. package/dist/follow-through-brief.d.ts +12 -0
  196. package/dist/follow-through-brief.js +31 -0
  197. package/dist/follow-through-cli.d.ts +23 -0
  198. package/dist/follow-through-cli.js +153 -0
  199. package/dist/git-incident.d.ts +16 -0
  200. package/dist/git-incident.js +69 -6
  201. package/dist/github-import.d.ts +62 -0
  202. package/dist/github-import.js +146 -0
  203. package/dist/guides.js +15 -10
  204. package/dist/handover-note.d.ts +33 -0
  205. package/dist/handover-note.js +106 -0
  206. package/dist/invoke.d.ts +25 -2
  207. package/dist/invoke.js +157 -58
  208. package/dist/job-object-helper.ps1 +10 -3
  209. package/dist/keymap.d.ts +41 -0
  210. package/dist/keymap.js +51 -0
  211. package/dist/knowledge-cli.js +1 -1
  212. package/dist/knowledge-ui.d.ts +21 -4
  213. package/dist/knowledge-ui.js +75 -7
  214. package/dist/laptop-background.d.ts +16 -0
  215. package/dist/laptop-background.js +108 -2
  216. package/dist/lead-cli.js +26 -24
  217. package/dist/lead-context.js +1 -1
  218. package/dist/lead-contract.d.ts +1 -1
  219. package/dist/lead-contract.js +3 -2
  220. package/dist/lead-doors.d.ts +4 -0
  221. package/dist/lead-doors.js +2 -2
  222. package/dist/lead-progress.js +5 -0
  223. package/dist/lead-status.d.ts +2 -0
  224. package/dist/lead-status.js +6 -2
  225. package/dist/lead-tools.js +162 -34
  226. package/dist/lead.js +2 -2
  227. package/dist/lesson-notes.d.ts +81 -0
  228. package/dist/lesson-notes.js +336 -0
  229. package/dist/limits-ui.js +1 -1
  230. package/dist/local-owner.d.ts +1 -1
  231. package/dist/local-owner.js +16 -0
  232. package/dist/machine-check.d.ts +16 -0
  233. package/dist/machine-check.js +26 -0
  234. package/dist/machine-identity.d.ts +75 -0
  235. package/dist/machine-identity.js +170 -0
  236. package/dist/mcp-core.js +11 -1
  237. package/dist/memory-cli.d.ts +300 -1
  238. package/dist/memory-cli.js +62 -9
  239. package/dist/memory-pass.d.ts +16 -0
  240. package/dist/memory-pass.js +67 -3
  241. package/dist/memory-tidy.d.ts +181 -0
  242. package/dist/memory-tidy.js +523 -0
  243. package/dist/memory-use.d.ts +35 -0
  244. package/dist/memory-use.js +109 -0
  245. package/dist/merge-checklist.d.ts +55 -0
  246. package/dist/merge-checklist.js +182 -0
  247. package/dist/modes.d.ts +6 -6
  248. package/dist/modes.js +3 -1
  249. package/dist/needs-you.d.ts +31 -9
  250. package/dist/needs-you.js +110 -41
  251. package/dist/nightly-github.d.ts +2 -0
  252. package/dist/nightly-github.js +4 -4
  253. package/dist/operate-remote-arguments.js +7 -1
  254. package/dist/operate-remote.js +3 -1
  255. package/dist/operate.d.ts +6 -1
  256. package/dist/operate.js +565 -64
  257. package/dist/phase-routing.js +2 -2
  258. package/dist/plain-schema.d.ts +23 -0
  259. package/dist/plain-schema.js +94 -0
  260. package/dist/plain-words.d.ts +20 -0
  261. package/dist/plain-words.js +66 -0
  262. package/dist/plan-login.d.ts +14 -0
  263. package/dist/plan-login.js +58 -0
  264. package/dist/planner.d.ts +1 -1
  265. package/dist/planner.js +4 -2
  266. package/dist/process-liveness.d.ts +2 -0
  267. package/dist/process-liveness.js +61 -17
  268. package/dist/project-delete-ui.d.ts +19 -2
  269. package/dist/project-delete-ui.js +29 -1
  270. package/dist/project-delete.js +14 -1
  271. package/dist/project-knowledge.d.ts +18 -11
  272. package/dist/project-knowledge.js +39 -9
  273. package/dist/project-learning.d.ts +2 -1
  274. package/dist/project-learning.js +15 -45
  275. package/dist/project-memory.d.ts +5 -0
  276. package/dist/project-memory.js +22 -2
  277. package/dist/project-tools.d.ts +4 -4
  278. package/dist/project-tools.js +23 -7
  279. package/dist/proof.js +30 -5
  280. package/dist/protected-storage-look.d.ts +1 -0
  281. package/dist/protected-storage-look.js +13 -0
  282. package/dist/protected-storage.d.ts +70 -39
  283. package/dist/protected-storage.js +196 -147
  284. package/dist/provider-auth.js +1 -1
  285. package/dist/provider-capture.d.ts +34 -0
  286. package/dist/provider-capture.js +53 -0
  287. package/dist/publish.js +9 -1
  288. package/dist/pull-request-flow.js +5 -0
  289. package/dist/push.d.ts +18 -2
  290. package/dist/push.js +40 -16
  291. package/dist/release-adapters.d.ts +9 -0
  292. package/dist/release-adapters.js +76 -0
  293. package/dist/release-auto.js +13 -13
  294. package/dist/release-card.d.ts +1 -2
  295. package/dist/release-card.js +11 -0
  296. package/dist/release-carry.d.ts +7 -2
  297. package/dist/release-carry.js +49 -10
  298. package/dist/release-cli.d.ts +4 -0
  299. package/dist/release-cli.js +29 -22
  300. package/dist/release-coverage.js +1 -1
  301. package/dist/release-next.d.ts +48 -0
  302. package/dist/release-next.js +161 -0
  303. package/dist/release.d.ts +20 -1
  304. package/dist/release.js +85 -9
  305. package/dist/remote-destination.d.ts +36 -0
  306. package/dist/remote-destination.js +217 -0
  307. package/dist/remote-main.d.ts +48 -0
  308. package/dist/remote-main.js +84 -5
  309. package/dist/repository-context.d.ts +3 -2
  310. package/dist/repository-context.js +112 -70
  311. package/dist/restart-certification.d.ts +1 -0
  312. package/dist/restart-certification.js +8 -6
  313. package/dist/result-acts.d.ts +27 -19
  314. package/dist/result-acts.js +36 -25
  315. package/dist/result-follow-ups.d.ts +2 -2
  316. package/dist/result-follow-ups.js +18 -4
  317. package/dist/result-review.d.ts +1 -1
  318. package/dist/route-change-check.d.ts +4 -0
  319. package/dist/route-change-check.js +13 -0
  320. package/dist/route-change.d.ts +22 -0
  321. package/dist/route-change.js +89 -0
  322. package/dist/route-hooks.js +3 -2
  323. package/dist/route-results.d.ts +6 -1
  324. package/dist/route-results.js +14 -5
  325. package/dist/run-closeout.d.ts +1 -1
  326. package/dist/run-closeout.js +7 -5
  327. package/dist/runner-process.js +3 -2
  328. package/dist/runner.js +2 -1
  329. package/dist/scope.d.ts +28 -4
  330. package/dist/scope.js +92 -28
  331. package/dist/scout.d.ts +1 -1
  332. package/dist/scout.js +2 -1
  333. package/dist/serve.d.ts +1 -1
  334. package/dist/serve.js +26 -18
  335. package/dist/server/chat.js +16 -14
  336. package/dist/server/chrome.d.ts +1 -1
  337. package/dist/server/chrome.js +26 -35
  338. package/dist/server/console.css +73 -0
  339. package/dist/server/guards.js +3 -0
  340. package/dist/server/home.d.ts +6 -0
  341. package/dist/server/home.js +21 -13
  342. package/dist/server/http.js +1 -1
  343. package/dist/server/kit.js +1 -1
  344. package/dist/server/merge-ready-view.d.ts +10 -0
  345. package/dist/server/merge-ready-view.js +30 -0
  346. package/dist/server/pages-assets.d.ts +1 -0
  347. package/dist/server/pages-assets.js +8 -5
  348. package/dist/server/pages.js +103 -82
  349. package/dist/server/render-chat.js +16 -3
  350. package/dist/server/render-code-map.d.ts +30 -0
  351. package/dist/server/render-code-map.js +137 -0
  352. package/dist/server/render-flaky.d.ts +20 -0
  353. package/dist/server/render-flaky.js +59 -0
  354. package/dist/server/render-follow-through.d.ts +11 -0
  355. package/dist/server/render-follow-through.js +68 -0
  356. package/dist/server/render-history.js +1 -1
  357. package/dist/server/render-new-task.d.ts +26 -1
  358. package/dist/server/render-new-task.js +30 -5
  359. package/dist/server/render-pages.d.ts +1 -175
  360. package/dist/server/render-pages.js +38 -313
  361. package/dist/server/render-projects.d.ts +2 -1
  362. package/dist/server/render-projects.js +9 -7
  363. package/dist/server/render-release.d.ts +2 -0
  364. package/dist/server/render-release.js +3 -3
  365. package/dist/server/render-results.d.ts +2 -0
  366. package/dist/server/render-results.js +68 -68
  367. package/dist/server/render-tasks.d.ts +16 -2
  368. package/dist/server/render-tasks.js +177 -141
  369. package/dist/server/retired-routes.d.ts +17 -0
  370. package/dist/server/retired-routes.js +53 -0
  371. package/dist/server/route-table.d.ts +3 -0
  372. package/dist/server/route-table.js +48 -12
  373. package/dist/server/settings.js +166 -34
  374. package/dist/server/task-views.js +66 -26
  375. package/dist/server/tasks.d.ts +2 -6
  376. package/dist/server/tasks.js +250 -321
  377. package/dist/server/welcome.js +1 -1
  378. package/dist/settings-groups-ui.d.ts +1 -0
  379. package/dist/settings-groups-ui.js +4 -2
  380. package/dist/settings-kit.js +3 -2
  381. package/dist/settings-proofs.js +3 -1
  382. package/dist/slack-chat.js +14 -1
  383. package/dist/steer-mailbox.d.ts +8 -1
  384. package/dist/steer-mailbox.js +164 -6
  385. package/dist/stop-proof.js +6 -4
  386. package/dist/storage-sweep-process.js +1 -1
  387. package/dist/storage-sweep.d.ts +5 -3
  388. package/dist/storage-sweep.js +30 -9
  389. package/dist/storage-ui.js +28 -17
  390. package/dist/storage.d.ts +27 -2
  391. package/dist/storage.js +39 -2
  392. package/dist/store.d.ts +89 -7
  393. package/dist/store.js +386 -114
  394. package/dist/surface.js +67 -6
  395. package/dist/sweep-quarantine.d.ts +1 -0
  396. package/dist/sweep-quarantine.js +6 -4
  397. package/dist/tamper-scan.d.ts +4 -0
  398. package/dist/tamper-scan.js +90 -0
  399. package/dist/task-aliases.d.ts +5 -0
  400. package/dist/task-aliases.js +9 -0
  401. package/dist/task-control.d.ts +2 -1
  402. package/dist/task-control.js +4 -1
  403. package/dist/task-outcome-cli.d.ts +2 -0
  404. package/dist/task-outcome-cli.js +17 -17
  405. package/dist/task-sizing.d.ts +5 -0
  406. package/dist/task-sizing.js +2 -0
  407. package/dist/task-source.d.ts +7 -0
  408. package/dist/task-source.js +14 -0
  409. package/dist/task-status.d.ts +9 -0
  410. package/dist/task-status.js +45 -49
  411. package/dist/teardown-git.d.ts +18 -0
  412. package/dist/teardown-git.js +105 -21
  413. package/dist/telegram-lead.js +23 -6
  414. package/dist/telegram-progress.js +5 -3
  415. package/dist/telegram-status.js +6 -4
  416. package/dist/telegram.js +12 -1
  417. package/dist/test-infra.d.ts +8 -0
  418. package/dist/test-infra.js +18 -0
  419. package/dist/tidy.js +1 -1
  420. package/dist/toolroll-update.js +19 -5
  421. package/dist/tui-contract.d.ts +24 -0
  422. package/dist/tui-source.js +67 -8
  423. package/dist/tui.js +51 -51
  424. package/dist/vanished-retry.d.ts +30 -0
  425. package/dist/vanished-retry.js +174 -0
  426. package/dist/work-index.d.ts +2 -0
  427. package/dist/work-index.js +95 -66
  428. package/dist/work-summary.d.ts +1 -1
  429. package/dist/work-summary.js +7 -2
  430. package/dist/workspace-ui.d.ts +7 -3
  431. package/dist/workspace-ui.js +38 -23
  432. package/dist/worktree.d.ts +12 -3
  433. package/dist/worktree.js +91 -14
  434. package/package.json +2 -1
  435. package/dist/server/render-next.d.ts +0 -63
  436. package/dist/server/render-next.js +0 -109
package/dist/needs-you.js CHANGED
@@ -5,6 +5,10 @@
5
5
  *
6
6
  * The words never name the machine's internals; `plainSentence` keeps a
7
7
  * recorded reason only when it is free of them. */
8
+ /** The action's code: the WorkAction that owns the act, or one of the acts a surface renders itself. */
9
+ /** The reason a storage hold carries before the check's own words (dispose.ts holdForStorage; dispatch.ts and
10
+ * work-index.ts read it back). */
11
+ export const STORAGE_HOLD_PREFIX = "protected-storage — ";
8
12
  /** Where "Connect a builder" and "Start the builder" lead (code `start-worker`): the Start a builder page, which shows
9
13
  * the one command to run and the open project's builder state. Every signed-in person can open it, a project-limited
10
14
  * one included (System is instance-only). Never the task's own page, which only repeats that nothing is connected. */
@@ -27,6 +31,8 @@ export const NEEDS = {
27
31
  // what's theirs and have it look again, nothing more.
28
32
  "stop-unproven": { sentence: context => `Toolroll can't prove ${build(context)} stopped from this computer, so the work is held. Close anything of yours that is using its folder, then check again.`, action: { code: "recheck-stopped", label: "Check again" } },
29
33
  hold: { sentence: () => "A hold is keeping this task from starting. Review it to release it.", action: { code: "inspect-hold", label: "Review hold" } },
34
+ // The storage check couldn't finish (protected-storage.ts): its own words say which program macOS may need to allow.
35
+ storage: { sentence: () => "Toolroll couldn't finish checking other apps' data before starting. Allow it in Privacy & Security, then try again.", action: { code: "unhold", label: "Try again" }, useReason: always },
30
36
  "choose-project": { sentence: () => "Choose a project so a builder can start.", action: { code: "place-task", label: "Choose a project" } },
31
37
  "define-task": { sentence: () => "Say what the task should do so it can be planned.", action: { code: "write-scope", label: "Define the task" } },
32
38
  "fix-request": { sentence: () => "The request can't be planned as written. Edit it so the planner can start.", action: { code: "write-scope", label: "Edit the request" },
@@ -41,14 +47,20 @@ export const NEEDS = {
41
47
  } },
42
48
  "add-requirement": { sentence: () => "This project is missing something the task needs. Add it so a builder can start.", action: { code: "repair-capability", label: "Add the requirement" } },
43
49
  "connect-builder": { sentence: () => "No builder works on this project yet. Connect one so the task can start.", action: { code: "start-worker", label: "Connect a builder" } },
44
- "start-builder": { sentence: () => "The builder for this project is offline. Start it and the task begins on its own.", action: { code: "start-worker", label: "Start the builder" } },
45
- vanished: { sentence: context => `${Build(context)} stopped without finishing. Check it, then retry.`, action: { code: "reconcile-run", label: "Check the build" } },
46
- "review-result": { sentence: () => "Check the result, then accept it or ask for changes.", action: { code: "open-result", label: "Open result" } },
50
+ "start-builder": { sentence: () => "The builder is offline. Start the builder.", action: { code: "start-worker", label: "Start the builder" } },
51
+ // The same act as before (it opens the build, where Retry is): only the words are plainer.
52
+ vanished: { sentence: context => `${Build(context)} stopped unexpectedly. Retry it.`, action: { code: "reconcile-run", label: "Open the build" } },
53
+ "review-result": { sentence: () => "Check the result, then accept it or send it back.", action: { code: "open-result", label: "Open result" } },
47
54
  // Accepting it would not help: it was built to terms that are no longer the plan.
48
- rebuild: { sentence: context => `${Build(context)} was made to an earlier plan. Build it again to the current plan.`, action: { code: "retry-task", label: "Build again" } },
55
+ rebuild: { sentence: context => `${Build(context)} was made to an earlier plan. Retry it on the current plan.`, action: { code: "retry-task", label: "Retry" } },
49
56
  // The plan was rewritten after the build and not yet approved: the yes comes first, then Build again.
50
- replan: { sentence: context => `The plan changed after ${build(context)}. Approve the new plan, then build it again.`, action: { code: "approve-scope", label: "Approve plan" } },
51
- "earlier-version": { sentence: () => "An earlier version of this task still needs you. Finish it first.", action: { code: "inspect-task", label: "Open earlier version" } },
57
+ replan: { sentence: context => `The plan changed after ${build(context)}. Approve the new plan, then retry it.`, action: { code: "approve-scope", label: "Approve plan" } },
58
+ "earlier-version": { sentence: context => context.task == null ? "An earlier version of this task still needs you. Finish it first." : `An earlier version, ${context.task}, still needs you. Finish it first.`,
59
+ action: { code: "inspect-task", label: "Open earlier version" } },
60
+ // An actionable need, never a quiet Waiting: a person opens it to retry or archive it.
61
+ history: { sentence: () => "Toolroll can't read this task's history. Open it to retry or archive it.", action: { code: "inspect-task", label: "Open the task" } },
62
+ // A finding the reviewer and the agent couldn't settle (findings.ts): only a person closes it.
63
+ finding: { sentence: () => "A finding has used its rounds. Read both sides and decide.", action: { code: "inspect-findings", label: "Open finding" } },
52
64
  other: { sentence: () => "Open the task to see what it needs from you.", action: { code: "inspect-task", label: "Open the task" }, useReason: always },
53
65
  };
54
66
  export const ASKS = ["decide", "review", "unblock"];
@@ -98,25 +110,31 @@ export function resultHoldUpSentence(facts) {
98
110
  return "Open the result to see what it needs before you can accept it.";
99
111
  }
100
112
  export const NEED_ASK = {
101
- approval: "decide", card: "decide", answer: "decide", questions: "decide", "choose-project": "decide", "define-task": "decide",
113
+ finding: "decide", approval: "decide", card: "decide", answer: "decide", questions: "decide", "choose-project": "decide", "define-task": "decide",
102
114
  "fix-request": "decide", "choose-agent": "decide",
103
115
  "review-result": "review", rebuild: "review", replan: "decide",
104
- "sign-in": "unblock", "stop-unproven": "unblock", hold: "unblock", "fix-dependency": "unblock",
105
- "add-requirement": "unblock", "connect-builder": "unblock", "start-builder": "unblock", vanished: "unblock", "earlier-version": "unblock", other: "unblock",
116
+ "sign-in": "unblock", "stop-unproven": "unblock", hold: "unblock", storage: "unblock", "fix-dependency": "unblock",
117
+ "add-requirement": "unblock", "connect-builder": "unblock", "start-builder": "unblock", vanished: "unblock", "earlier-version": "unblock", history: "unblock", other: "unblock",
106
118
  };
107
119
  export const WAITS = {
108
120
  "build-finishing": () => "Finishing up; this clears on its own.",
109
121
  "build-checking": context => `Making sure ${build(context)} stopped. This clears on its own.`,
110
- "build-stopping": context => `Waiting for ${build(context)} to stop. Nothing is needed from you.`,
122
+ "build-stopping": context => `Waiting: Toolroll is stopping ${build(context)}.`,
111
123
  "other-computer": context => `Waiting for the computer that ran ${build(context)} to confirm it stopped.`,
112
124
  "card-reply": () => "Waiting for a reply.",
113
125
  "card-time": () => "Waiting before moving on.",
114
126
  "card-ci": () => "Waiting for the pull request's checks.",
127
+ "plan-next": () => "Waiting to plan.",
128
+ "research-next": () => "Waiting to research.",
129
+ "builders-busy": () => "Waiting its turn: builders are busy.",
130
+ "retry-later": context => `Waiting: Toolroll retries ${build(context)} ${context.retry ?? "soon"}.`,
131
+ "app-update": () => "Waiting: Toolroll is updating. New work starts after it.",
132
+ "other-task": context => context.task == null ? "Waiting for another task to finish first." : `Waiting for ${context.task} to finish first.`,
115
133
  };
116
- /** Words that name the machine's internals; no Needs you or Waiting sentence carries them. */
117
- export const BANNED_WORDS = ["witness", "unproven", "quiescence", "quiescent", "digest", "scope digest"];
118
- const BANNED = new RegExp(`\\b(?:${BANNED_WORDS.join("|")})\\b`, "i");
119
- export const hasInternalWords = (text) => BANNED.test(text);
134
+ /** Words that name the machine's internals (plain-words.ts, the one table); no Needs you or Waiting sentence carries
135
+ * them, and a recorded reason that does is replaced by the need's own words. */
136
+ export { BANNED_WORDS, PLAIN_WORDS, bannedWordsIn, hasInternalWords } from "./plain-words.js";
137
+ import { hasInternalWords } from "./plain-words.js";
120
138
  /** The sentence for a need: its recorded reason when the need keeps one and
121
139
  * it reads plainly, otherwise the need's own words. */
122
140
  export function needSentence(key, reason, context = {}) {
@@ -126,11 +144,17 @@ export function needSentence(key, reason, context = {}) {
126
144
  return need.sentence(context);
127
145
  return need.withReason === undefined ? plain : need.withReason(plain);
128
146
  }
147
+ /** Waits whose words need a fact (when it retries, which task it waits on): without it, a plain recorded reason that
148
+ * already says it is kept. */
149
+ const WAITS_WITH_FACTS = {
150
+ "retry-later": context => context.retry != null, "other-task": context => context.task != null,
151
+ };
129
152
  export function waitSentence(key, reason, context = {}) {
130
- if (key !== undefined)
131
- return WAITS[key](context);
132
153
  const plain = reason?.trim() || null;
133
- return plain !== null && !hasInternalWords(plain) ? plain : "Waiting for the work to continue on its own.";
154
+ const known = plain !== null && !hasInternalWords(plain) ? plain : null;
155
+ if (key !== undefined)
156
+ return WAITS_WITH_FACTS[key]?.(context) === false && known !== null ? known : WAITS[key](context);
157
+ return known ?? "Waiting for the work to continue on its own.";
134
158
  }
135
159
  /** A finished run Toolroll can't yet prove stopped (store.stopQuiescenceFact). Nobody is asked to confirm it:
136
160
  * `unprovable` is Toolroll's own check still to run (stop-proof.ts), which settles by itself; `unknown` is that this
@@ -146,20 +170,65 @@ export function processNeedOf(fact) {
146
170
  return { need: "stop-unproven", build: fact.run };
147
171
  return { wait: fact.kind === "elsewhere" ? "other-computer" : "build-stopping", build: fact.run };
148
172
  }
149
- /** Dispatch and work-index codes that wait on a person, as their need. */
150
- export const CODE_NEED = {
151
- "signed-out": "sign-in", "needs-approval": "approval", "waiting-decision": "answer", "decision-queue": "answer",
152
- "needs-project": "choose-project", "needs-scope": "define-task", "planner-source": "fix-request", "needs-agent-profile": "choose-agent",
153
- "terminal-dependency": "fix-dependency", "missing-requirement": "add-requirement", "no-worker-registered": "connect-builder",
154
- "no-worker-online": "start-builder", "vanished-run": "vanished", "needs-verification": "review-result", "proof-refuted": "review-result",
155
- "no-build-record": "review-result", "verification-needed": "review-result", "evidence-mismatch": "review-result",
156
- "record-incomplete": "review-result", "evidence-damaged": "review-result",
173
+ export const CODE_READING = {
174
+ // Plain states: nothing is asked and nothing is waited on by name.
175
+ queued: { stage: "queued" }, ready: { stage: "queued" }, "provider-quota": { stage: "queued" },
176
+ running: { stage: "building" }, reviewing: { stage: "reviewing" }, "review-pending": { stage: "building" }, "checks-running": { stage: "checking" },
177
+ "ready-to-check": { stage: "finished", act: "open-result" }, "ready-to-review": { stage: "finished" }, "report-ready": { stage: "finished" }, "no-change": { stage: "finished" },
178
+ "pr-opened": { stage: "finished" }, "merge-observed": { stage: "finished" }, "pr-closed": { stage: "finished" }, "agent-attested": { stage: "finished" }, "accepted-exception": { stage: "finished" },
179
+ complete: { stage: "complete", act: "open-result" }, cancelled: { stage: "stopped", act: "inspect-task" }, paused: { stage: "stopped" },
180
+ stopped: { stage: "stopped", act: "resume-run" },
181
+ failed: { stage: "failed", act: "retry-task" }, "checks-failed": { stage: "failed" },
182
+ // The same failure again and again: a need over Retry, its own act, said plainly.
183
+ "waiting-incident": { stage: "failed", act: "retry-task" },
184
+ // Waits: Toolroll or another task moves these on; no person is asked.
185
+ stopping: { stage: "waiting", wait: "build-stopping" },
186
+ "build-stopping": { stage: "waiting", wait: "build-stopping" }, "other-computer": { stage: "waiting", wait: "other-computer" },
187
+ "planning-ready": { stage: "waiting", wait: "plan-next" }, "scouting-ready": { stage: "waiting", wait: "research-next" },
188
+ "worker-at-capacity": { stage: "waiting", wait: "builders-busy" }, "retry-scheduled": { stage: "waiting", wait: "retry-later" },
189
+ updating: { stage: "waiting", wait: "app-update" }, "waiting-dependency": { stage: "waiting", wait: "other-task" },
190
+ // Needs, each over the act it has always had.
191
+ "history-problem": { stage: "needs-you", need: "history", act: "inspect-task" },
192
+ "earlier-active": { stage: "needs-you", need: "earlier-version", act: "inspect-task" },
193
+ "waiting-decision": { stage: "needs-you", need: "answer", act: "answer-decision" },
194
+ "finding-held": { stage: "needs-you", need: "finding", act: "inspect-findings" },
195
+ "decision-queue": { stage: "needs-you", need: "questions", act: "inspect-decisions" },
196
+ // A saved result that can't simply be accepted yet: its own reason (resultHoldUpSentence) is the sentence.
197
+ "result-needs-attention": { stage: "needs-you", need: "other", act: "inspect-run" },
198
+ "process-needs-attention": { stage: "needs-you", need: "stop-unproven", act: "inspect-run" },
199
+ "vanished-run": { stage: "needs-you", need: "vanished", act: "reconcile-run" },
200
+ held: { stage: "needs-you", need: "hold", act: "inspect-hold" },
201
+ "storage-blocked": { stage: "needs-you", need: "storage", act: "unhold" },
202
+ "terminal-dependency": { stage: "needs-you", need: "fix-dependency", act: "repair-dependency" },
203
+ "needs-project": { stage: "needs-you", need: "choose-project", act: "place-task" },
204
+ "needs-scope": { stage: "needs-you", need: "define-task", act: "write-scope" },
205
+ "invalid-scope": { stage: "needs-you", need: "define-task", act: "write-scope" },
206
+ "planner-source": { stage: "needs-you", need: "fix-request", act: "write-scope" },
207
+ "needs-agent-profile": { stage: "needs-you", need: "choose-agent", act: "select-agent" },
208
+ "needs-approval": { stage: "needs-you", need: "approval", act: "approve-scope" },
209
+ "missing-requirement": { stage: "needs-you", need: "add-requirement", act: "repair-capability" },
210
+ "no-worker-registered": { stage: "needs-you", need: "connect-builder", act: "start-worker" },
211
+ "no-worker-online": { stage: "needs-you", need: "start-builder", act: "start-worker" },
212
+ "signed-out": { stage: "needs-you", need: "sign-in", act: "sign-in" },
213
+ "needs-verification": { stage: "needs-you", need: "review-result" }, "proof-refuted": { stage: "needs-you", need: "review-result" },
214
+ "no-build-record": { stage: "needs-you", need: "review-result" }, "verification-needed": { stage: "needs-you", need: "review-result" },
215
+ "evidence-mismatch": { stage: "needs-you", need: "review-result" }, "record-incomplete": { stage: "needs-you", need: "review-result" },
216
+ "evidence-damaged": { stage: "needs-you", need: "review-result" },
157
217
  };
218
+ /** A code that waits on Toolroll or another task: no person is asked. */
219
+ export const isWaitCode = (code) => CODE_READING[code]?.stage === "waiting";
220
+ /** Notification kinds that need nothing from a person: they stay in the activity log and never ping a phone. */
221
+ export const ACTIVITY_ONLY_KINDS = new Set(["check-progress"]);
222
+ /** Dispatch and work-index codes that wait on a person, as their need (read from CODE_READING). */
223
+ export const CODE_NEED = Object.fromEntries(Object.entries(CODE_READING)
224
+ .flatMap(([code, reading]) => reading.need === undefined ? [] : [[code, reading.need]]));
158
225
  /** A stopped run's recorded reason code, in words (the run record, the thread, a failed task's status). */
159
226
  export const RUN_REASON_WORDS = {
160
227
  agent: "the agent failed",
161
228
  "agent-reported": "the agent reported it could not finish",
162
229
  "no-op": "nothing changed when something should have",
230
+ "usage-exhausted": "the agent ran out of its plan, so its work moved to the next approved agent",
231
+ "fallback-signed-out": "the next approved agent isn't signed in to its plan here, so it didn't run; sign it in, then retry",
163
232
  "no-handoff": "the agent stopped before handing off; its work was kept and it is being resumed",
164
233
  "moved-head": "the branch moved underneath the build",
165
234
  "moved-branch": "the branch moved underneath the build",
@@ -167,28 +236,28 @@ export const RUN_REASON_WORDS = {
167
236
  git: "a git step failed",
168
237
  "malformed-decision": "the agent's question was malformed",
169
238
  "malformed-plan": "the plan was malformed",
170
- fenced: "another worker took the task over",
171
- unapproved: "the scope was not approved",
172
- "scope-changed": "the scope changed after approval",
239
+ fenced: "another builder took the task over",
240
+ unapproved: "the plan was not approved",
241
+ "scope-changed": "the plan changed after approval",
173
242
  capability: "a requirement was missing",
174
243
  setup: "the workspace preparation step failed",
175
244
  "provider-init": "the agent could not start",
176
245
  "commit-failure": "the commit failed",
177
246
  "protected-branch": "refused to touch a protected branch",
178
247
  "wrong-branch": "the checkout was on the wrong branch",
179
- "not-leased": "the lease was not valid",
180
- "no-claim": "the lease was not valid",
181
- "not-yours": "the lease was not valid",
182
- "no-run-record": "the run record was missing",
183
- "missing-mailbox": "the resume mailbox could not be read",
184
- "unreadable-mailbox": "the resume mailbox could not be read",
248
+ "not-leased": "the builder lost its hold on the task",
249
+ "no-claim": "the builder lost its hold on the task",
250
+ "not-yours": "the builder lost its hold on the task",
251
+ "no-run-record": "the build's record was missing",
252
+ "missing-mailbox": "the saved notes to resume from could not be read",
253
+ "unreadable-mailbox": "the saved notes to resume from could not be read",
185
254
  "revision-brief": "the revision brief could not be read",
186
255
  "repaired-park": "resumed from a parked question",
187
- stopped: "stopped by the operator",
188
- acceptance: "the result didn't meet its signed requirements",
189
- evidence: "its evidence could not be saved",
256
+ stopped: "stopped by a person",
257
+ acceptance: "the result didn't meet its approved requirements",
258
+ evidence: "its saved files could not be kept",
190
259
  interrupted: "the attempt was interrupted",
191
- orphaned: "the attempt lost its worker",
260
+ orphaned: "the attempt lost its builder",
192
261
  "retryable-infra": "a temporary problem on the machine stopped it",
193
262
  unknown: "the attempt stopped unexpectedly",
194
263
  "spawn-failed": "the agent process could not start",
@@ -196,12 +265,12 @@ export const RUN_REASON_WORDS = {
196
265
  "auth-expired": "the agent's sign-in expired",
197
266
  "budget-unenforceable": "its spending limit could not be enforced",
198
267
  "stale-source": "the request changed while the plan was being made",
199
- "stale-approval": "the approval no longer matched the scope",
268
+ "stale-approval": "the approval no longer matched the plan",
200
269
  "source-invalid": "the plan's source could not be recorded",
201
270
  "external-closed": "the linked issue was closed while it was being built",
202
271
  "repair-admission": "the repair could not start",
203
272
  "reviewer-error": "the review failed",
204
- "malformed-report": "the scout's report was malformed",
273
+ "malformed-report": "the research report was malformed",
205
274
  "attempts-exhausted": "it failed too many times in a row",
206
275
  "plan-revised": "the plan changed, so a fresh attempt took over",
207
276
  };
@@ -259,7 +328,7 @@ export function failedAttemptSentence(reason) {
259
328
  /** What to change before the next attempt, by a stopped run's recorded reason: one plain suggestion, the note Retry
260
329
  * starts with. A reason with no suggestion of its own gets the general one. */
261
330
  const STOP_SUGGESTIONS = {
262
- acceptance: "Before handing off, check each signed requirement against the changes.",
331
+ acceptance: "Before handing off, check each approved requirement against the changes.",
263
332
  timeout: "Split the work into smaller steps, or name the one part to finish first.",
264
333
  "no-op": "Say exactly which files or behaviour should change.",
265
334
  agent: "Say what to do differently this time, or name the part to try first.",
@@ -159,6 +159,8 @@ export type NightlyRead = {
159
159
  * failed call stops where it is; what was recorded stays, and the cursor never moves past a page it couldn't read.
160
160
  */
161
161
  export declare function readGithubNightly(store: Store, repo: string, deps: NightlyDeps, budgetMs: number): Promise<NightlyRead>;
162
+ /** Read one run by id, strictly. */
163
+ export declare function readRun(get: Get, slug: string, id: number): Promise<GhRun | null>;
162
164
  /** Every job of one exact attempt of one run, every page, each GitHub's record of that run, attempt and commit. Null
163
165
  * when any page can't be read whole. */
164
166
  export declare function readAttemptJobs(get: Get, slug: string, run: number, attempt: number, sha: string): Promise<GhJob[] | null>;
@@ -410,7 +410,7 @@ async function listRuns(store, repo, slug, get, now) {
410
410
  return { ok: true, listed, complete: false };
411
411
  }
412
412
  /** Read one run by id, strictly. */
413
- async function readRun(get, slug, id) {
413
+ export async function readRun(get, slug, id) {
414
414
  const got = await get(`repos/${slug}/actions/runs/${id}`);
415
415
  if (!got.ok)
416
416
  return null;
@@ -556,7 +556,7 @@ function recordAttempt(store, repo, attempt, now) {
556
556
  store.enqueueNotification({ dedupeKey: `github-nightly-failed:${Number(opened.lastInsertRowid)}`, kind: "github-nightly-failed", subject: "GitHub's nightly failed on main",
557
557
  body: `Nightly checks failed: ${lane}, on main at ${attempt.sha.slice(0, 7)}. Releases wait until it passes again.`, pushClass: "attention",
558
558
  // The project it belongs to, so its people's chats may carry it (Codex round 1, finding 8).
559
- source: { project: repo }, link: "/board" }, now);
559
+ source: { project: repo }, link: "/tasks?view=board" }, now);
560
560
  }
561
561
  }
562
562
  });
@@ -954,7 +954,7 @@ export function nightlyNeedsYou(store, shown) {
954
954
  for (const failure of openFailures(store, repo)) {
955
955
  needs.push({ key: `github-nightly-${failure.id}`, repo, title: `Nightly checks failed: ${laneName(store, repo, failure.laneId)}`,
956
956
  reason: `On main at ${failure.sha.slice(0, 7)}. Releases wait until it passes again.`,
957
- href: slug === null ? "/board" : `https://github.com/${slug}/actions/runs/${failure.ghRun}/job/${failure.jobId}`, since: failure.openedAt });
957
+ href: slug === null ? "/tasks?view=board" : `https://github.com/${slug}/actions/runs/${failure.ghRun}/job/${failure.jobId}`, since: failure.openedAt });
958
958
  }
959
959
  }
960
960
  // The plane's own nightly check of main (nightly-check.ts): one item per failed check, its items summed up.
@@ -968,7 +968,7 @@ export function nightlyNeedsYou(store, shown) {
968
968
  const items = store.handle.prepare("SELECT item FROM main_check_failure WHERE repo = ? AND run = ? AND cleared_at IS NULL ORDER BY item").all(repo, Number(row["run"])).map(one => String(one["item"]));
969
969
  needs.push({ key: `main-check-${Number(row["run"])}`, repo, title: `Nightly check of main failed: ${failureSummary(items)}`,
970
970
  reason: `On main at ${String(row["sha"]).slice(0, 7)}. Composed releases wait until a full check passes.`,
971
- href: task === null ? "/board" : `/t/${encodeURIComponent(task)}`, since: String(row["since"]) });
971
+ href: task === null ? "/tasks?view=board" : `/t/${encodeURIComponent(task)}`, since: String(row["since"]) });
972
972
  }
973
973
  return needs.sort((a, b) => a.since.localeCompare(b.since));
974
974
  }
@@ -20,6 +20,7 @@ export const REMOTE_ARGUMENTS = new Map([
20
20
  ['task ask', args('id:task', 'person why')],
21
21
  ['task checks', args('task:task', 'level')],
22
22
  ['task ship', args('task:task')],
23
+ ['task ready', args('task:task')],
23
24
  ['task add-tests', args('task:task')],
24
25
  ['task list', args('', 'state view limit cursor')],
25
26
  ['task show', args('id:task')],
@@ -57,10 +58,15 @@ export const REMOTE_ARGUMENTS = new Map([
57
58
  ['template show', args('name')],
58
59
  ...['search', 'impact'].map(action => [`knowledge ${action}`, args('query', 'base')]),
59
60
  ['knowledge refresh', args('', 'base')],
61
+ ['map', args('', 'cursor')], ...['area', 'file'].map(action => [`map ${action}`, args('target', 'cursor')]), ['map search', args('target*', 'cursor')], ['map refresh', args('')],
60
62
  // Decision reads are already project-bound in project-memory.ts. Memory writes (decide, retire, apply) are a person's
61
63
  // step-up, never a token's act, so none is listed here.
64
+ // Project-bound by flaky-cli.ts like memory reads; a row's key is compared inside the reader's own project.
65
+ ['card', args('source', 'task state limit flow days')],
66
+ ['flaky list', args('', 'days')],
67
+ ['flaky show', args('identity*', 'days')],
62
68
  ...['search', 'decisions', 'show', 'review', 'status'].map(action => [`memory ${action}`,
63
- args(action === 'search' ? 'query*' : action === 'show' ? 'query' : '', 'why reason supersedes source all decision sessions no-local')]),
69
+ args(action === 'search' ? 'query*' : action === 'show' ? 'query' : '', 'why reason supersedes source all decision claim choice revision sessions no-local')]),
64
70
  ['flows list', args()],
65
71
  ['flows show', args('flow:flow')], ['flows export', args('flow:flow')],
66
72
  ['flows create', args('', 'yes name template', { steps: 'steps' })],
@@ -37,7 +37,7 @@ const references = { kind: "references" }, listing = { kind: "listing" };
37
37
  export const REMOTE_SCOPES = new Map([
38
38
  ["status", listing], ["integrations", installation], ["ready", listing], ["grants", installation], ["sync", installation],
39
39
  ["gaps", repo], ["task add", repo],
40
- ...["ask", "checks", "ship", "add-tests", "show", "wait", "complete", "revise", "state", "block", "unblock", "next", "steer", "pause", "continue", "assign", "scope", "plan", "hold",
40
+ ...["ask", "checks", "ship", "ready", "add-tests", "show", "wait", "complete", "revise", "state", "block", "unblock", "next", "steer", "pause", "continue", "assign", "scope", "plan", "hold",
41
41
  "unhold", "require", "requeue", "review", "repair", "route", "reopen", "stop", "resume"].map(action => [`task ${action}`, references]),
42
42
  ["check-progress", references],
43
43
  ["task list", listing],
@@ -50,7 +50,9 @@ export const REMOTE_SCOPES = new Map([
50
50
  // The person's own remote actions, or everyone's within their projects for an approver (remote-audit.ts).
51
51
  ["audit", self],
52
52
  ["knowledge search", repo], ["knowledge impact", repo], ["knowledge refresh", repo],
53
+ ["map", repo], ["map area", repo], ["map file", repo], ["map search", repo], ["map refresh", repo],
53
54
  ...["search", "decisions", "show", "review", "status"].map(action => [`memory ${action}`, self]),
55
+ ["flaky list", self], ["flaky show", self], ["card", self],
54
56
  ...["list", "show", "export", "create", "edit", "trigger add", "trigger pause", "trigger resume", "trigger remove", "card add", "archive"]
55
57
  .map(action => [`flows ${action}`, self]),
56
58
  ["models status", global], ["models list", global],
package/dist/operate.d.ts CHANGED
@@ -124,7 +124,7 @@ type Args = {
124
124
  * exports are behavior, not commentary — and the declared command guide
125
125
  * (surface.ts) is tested for exact equality against them.
126
126
  */
127
- export declare const TASK_ACTIONS: readonly ["add", "list", "show", "wait", "state", "block", "unblock", "next", "steer", "pause", "continue", "assign", "reopen", "scope", "approve", "hold", "unhold", "require", "requeue", "regate", "plan", "review", "accept", "repair", "route", "stop", "resume", "complete", "revise", "merge", "ask", "checks", "add-tests", "archive", "restore", "tidy", "ship"];
127
+ export declare const TASK_ACTIONS: readonly ["add", "new", "keep", "list", "show", "wait", "state", "block", "unblock", "next", "steer", "pause", "continue", "assign", "reopen", "scope", "approve", "hold", "unhold", "require", "requeue", "regate", "plan", "review", "accept", "repair", "route", "stop", "resume", "complete", "revise", "merge", "ask", "checks", "add-tests", "archive", "restore", "tidy", "ship", "ready", "handover", "before-after", "failing-first"];
128
128
  export declare const PUBLISH_ACTIONS: readonly ["setup", "grant", "revoke", "status", "unblock", "rearm", "merge", "refire"];
129
129
  export declare const CONFIG_ACTIONS: readonly ["show", "set", "clear"];
130
130
  export declare const APPROVER_ACTIONS: readonly ["list", "add"];
@@ -360,6 +360,8 @@ export type EasyCommandSeams = {
360
360
  check?: import("./provider-connection.js").ConnectionChecker;
361
361
  ask?: (question: string) => Promise<string>;
362
362
  askHidden?: (question: string) => Promise<string>;
363
+ confirm?: (question: string) => Promise<boolean>;
364
+ github?: import("./github-import.js").ImportDeps;
363
365
  };
364
366
  /**
365
367
  * Easy start: the ports `up --laptop` (no --port) tries, in order. The port this install saved, alone; else, for a NEW
@@ -368,3 +370,6 @@ export type EasyCommandSeams = {
368
370
  * way) `up`'s default alone, as before. `fromSeam` replaces the default range in tests.
369
371
  */
370
372
  export declare function upLaptopPortCandidates(store: Store, fromSeam?: readonly number[]): number[];
373
+ /** The watch loop's background learning pass (docs/plans/learning-loops.md): advisory reads, each project at most every
374
+ * 30 minutes through the plane's own gh. A failure here never reaches the loop: it is tried on the next pass. */
375
+ export declare function refreshLearning(store: Store, now: () => Date, reads?: GhRead): Promise<void>;