agentplane 0.1.8 → 0.2.0

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 (660) hide show
  1. package/README.md +4 -4
  2. package/assets/AGENTS.md +294 -72
  3. package/assets/agents/CODER.json +1 -0
  4. package/assets/agents/INTEGRATOR.json +1 -0
  5. package/assets/agents/ORCHESTRATOR.json +1 -0
  6. package/assets/agents/PLANNER.json +1 -0
  7. package/assets/agents/TESTER.json +1 -0
  8. package/dist/backends/task-backend/load.d.ts +13 -0
  9. package/dist/backends/task-backend/load.d.ts.map +1 -0
  10. package/dist/backends/task-backend/load.js +58 -0
  11. package/dist/backends/task-backend/local-backend.d.ts +28 -0
  12. package/dist/backends/task-backend/local-backend.d.ts.map +1 -0
  13. package/dist/backends/task-backend/local-backend.js +335 -0
  14. package/dist/backends/task-backend/redmine/client.d.ts +8 -0
  15. package/dist/backends/task-backend/redmine/client.d.ts.map +1 -0
  16. package/dist/backends/task-backend/redmine/client.js +60 -0
  17. package/dist/backends/task-backend/redmine/comments.d.ts +12 -0
  18. package/dist/backends/task-backend/redmine/comments.d.ts.map +1 -0
  19. package/dist/backends/task-backend/redmine/comments.js +54 -0
  20. package/dist/backends/task-backend/redmine/fields.d.ts +9 -0
  21. package/dist/backends/task-backend/redmine/fields.d.ts.map +1 -0
  22. package/dist/backends/task-backend/redmine/fields.js +38 -0
  23. package/dist/backends/task-backend/redmine/mapping.d.ts +20 -0
  24. package/dist/backends/task-backend/redmine/mapping.d.ts.map +1 -0
  25. package/dist/backends/task-backend/redmine/mapping.js +114 -0
  26. package/dist/backends/task-backend/redmine/parse.d.ts +3 -0
  27. package/dist/backends/task-backend/redmine/parse.d.ts.map +1 -0
  28. package/dist/backends/task-backend/redmine/parse.js +27 -0
  29. package/dist/backends/task-backend/redmine/remote.d.ts +19 -0
  30. package/dist/backends/task-backend/redmine/remote.d.ts.map +1 -0
  31. package/dist/backends/task-backend/redmine/remote.js +82 -0
  32. package/dist/backends/task-backend/redmine-backend.d.ts +80 -0
  33. package/dist/backends/task-backend/redmine-backend.d.ts.map +1 -0
  34. package/dist/backends/task-backend/redmine-backend.js +505 -0
  35. package/dist/backends/task-backend/shared/concurrency.d.ts +3 -0
  36. package/dist/backends/task-backend/shared/concurrency.d.ts.map +1 -0
  37. package/dist/backends/task-backend/shared/concurrency.js +21 -0
  38. package/dist/backends/task-backend/shared/constants.d.ts +4 -0
  39. package/dist/backends/task-backend/shared/constants.d.ts.map +1 -0
  40. package/dist/backends/task-backend/shared/constants.js +4 -0
  41. package/dist/backends/task-backend/shared/doc.d.ts +11 -0
  42. package/dist/backends/task-backend/shared/doc.d.ts.map +1 -0
  43. package/dist/backends/task-backend/shared/doc.js +78 -0
  44. package/dist/backends/task-backend/shared/errors.d.ts +10 -0
  45. package/dist/backends/task-backend/shared/errors.d.ts.map +1 -0
  46. package/dist/backends/task-backend/shared/errors.js +18 -0
  47. package/dist/backends/task-backend/shared/events.d.ts +3 -0
  48. package/dist/backends/task-backend/shared/events.d.ts.map +1 -0
  49. package/dist/backends/task-backend/shared/events.js +29 -0
  50. package/dist/backends/task-backend/shared/export.d.ts +15 -0
  51. package/dist/backends/task-backend/shared/export.d.ts.map +1 -0
  52. package/dist/backends/task-backend/shared/export.js +60 -0
  53. package/dist/backends/task-backend/shared/id.d.ts +13 -0
  54. package/dist/backends/task-backend/shared/id.d.ts.map +1 -0
  55. package/dist/backends/task-backend/shared/id.js +17 -0
  56. package/dist/backends/task-backend/shared/normalize.d.ts +8 -0
  57. package/dist/backends/task-backend/shared/normalize.d.ts.map +1 -0
  58. package/dist/backends/task-backend/shared/normalize.js +54 -0
  59. package/dist/backends/task-backend/shared/record.d.ts +4 -0
  60. package/dist/backends/task-backend/shared/record.d.ts.map +1 -0
  61. package/dist/backends/task-backend/shared/record.js +53 -0
  62. package/dist/backends/task-backend/shared/strings.d.ts +4 -0
  63. package/dist/backends/task-backend/shared/strings.d.ts.map +1 -0
  64. package/dist/backends/task-backend/shared/strings.js +21 -0
  65. package/dist/backends/task-backend/shared/types.d.ts +84 -0
  66. package/dist/backends/task-backend/shared/types.d.ts.map +1 -0
  67. package/dist/backends/task-backend/shared/types.js +1 -0
  68. package/dist/backends/task-backend/shared.d.ts +11 -0
  69. package/dist/backends/task-backend/shared.d.ts.map +1 -0
  70. package/dist/backends/task-backend/shared.js +9 -0
  71. package/dist/backends/task-backend.d.ts +4 -192
  72. package/dist/backends/task-backend.d.ts.map +1 -1
  73. package/dist/backends/task-backend.js +4 -1329
  74. package/dist/backends/task-index.js +2 -2
  75. package/dist/cli/archive.d.ts +0 -2
  76. package/dist/cli/archive.d.ts.map +1 -1
  77. package/dist/cli/archive.js +1 -2
  78. package/dist/cli/command-guide.d.ts.map +1 -1
  79. package/dist/cli/command-guide.js +28 -12
  80. package/dist/cli/parse/lifecycle.d.ts +64 -0
  81. package/dist/cli/parse/lifecycle.d.ts.map +1 -0
  82. package/dist/cli/parse/lifecycle.js +280 -0
  83. package/dist/cli/run-cli/command-catalog.d.ts +16 -0
  84. package/dist/cli/run-cli/command-catalog.d.ts.map +1 -0
  85. package/dist/cli/run-cli/command-catalog.js +204 -0
  86. package/dist/cli/run-cli/commands/config.d.ts +20 -0
  87. package/dist/cli/run-cli/commands/config.d.ts.map +1 -0
  88. package/dist/cli/run-cli/commands/config.js +130 -0
  89. package/dist/cli/run-cli/commands/core.d.ts +14 -0
  90. package/dist/cli/run-cli/commands/core.d.ts.map +1 -0
  91. package/dist/cli/run-cli/commands/core.js +144 -0
  92. package/dist/cli/run-cli/commands/ide.d.ts +13 -0
  93. package/dist/cli/run-cli/commands/ide.d.ts.map +1 -0
  94. package/dist/cli/run-cli/commands/ide.js +67 -0
  95. package/dist/cli/run-cli/commands/init/base-branch.d.ts +9 -0
  96. package/dist/cli/run-cli/commands/init/base-branch.d.ts.map +1 -0
  97. package/dist/cli/run-cli/commands/init/base-branch.js +11 -0
  98. package/dist/cli/run-cli/commands/init/conflicts.d.ts +11 -0
  99. package/dist/cli/run-cli/commands/init/conflicts.d.ts.map +1 -0
  100. package/dist/cli/run-cli/commands/init/conflicts.js +42 -0
  101. package/dist/cli/run-cli/commands/init/git.d.ts +8 -0
  102. package/dist/cli/run-cli/commands/init/git.d.ts.map +1 -0
  103. package/dist/cli/run-cli/commands/init/git.js +12 -0
  104. package/dist/cli/run-cli/commands/init/ide-sync.d.ts +9 -0
  105. package/dist/cli/run-cli/commands/init/ide-sync.d.ts.map +1 -0
  106. package/dist/cli/run-cli/commands/init/ide-sync.js +18 -0
  107. package/dist/cli/run-cli/commands/init/recipes.d.ts +2 -0
  108. package/dist/cli/run-cli/commands/init/recipes.d.ts.map +1 -0
  109. package/dist/cli/run-cli/commands/init/recipes.js +11 -0
  110. package/dist/cli/run-cli/commands/init/write-agents.d.ts +11 -0
  111. package/dist/cli/run-cli/commands/init/write-agents.d.ts.map +1 -0
  112. package/dist/cli/run-cli/commands/init/write-agents.js +30 -0
  113. package/dist/cli/run-cli/commands/init/write-config.d.ts +15 -0
  114. package/dist/cli/run-cli/commands/init/write-config.d.ts.map +1 -0
  115. package/dist/cli/run-cli/commands/init/write-config.js +45 -0
  116. package/dist/cli/run-cli/commands/init.d.ts +21 -0
  117. package/dist/cli/run-cli/commands/init.d.ts.map +1 -0
  118. package/dist/cli/run-cli/commands/init.js +332 -0
  119. package/dist/cli/run-cli/registry.run.d.ts +4 -0
  120. package/dist/cli/run-cli/registry.run.d.ts.map +1 -0
  121. package/dist/cli/run-cli/registry.run.js +19 -0
  122. package/dist/cli/run-cli.d.ts.map +1 -1
  123. package/dist/cli/run-cli.js +182 -2408
  124. package/dist/cli/spec/docs-render.d.ts +3 -0
  125. package/dist/cli/spec/docs-render.d.ts.map +1 -0
  126. package/dist/cli/spec/docs-render.js +118 -0
  127. package/dist/cli/spec/errors.d.ts +9 -0
  128. package/dist/cli/spec/errors.d.ts.map +1 -0
  129. package/dist/cli/spec/errors.js +18 -0
  130. package/dist/cli/spec/help-render.d.ts +43 -0
  131. package/dist/cli/spec/help-render.d.ts.map +1 -0
  132. package/dist/cli/spec/help-render.js +185 -0
  133. package/dist/cli/spec/help.d.ts +10 -0
  134. package/dist/cli/spec/help.d.ts.map +1 -0
  135. package/dist/cli/spec/help.js +64 -0
  136. package/dist/cli/spec/parse.d.ts +8 -0
  137. package/dist/cli/spec/parse.d.ts.map +1 -0
  138. package/dist/cli/spec/parse.js +188 -0
  139. package/dist/cli/spec/registry.d.ts +12 -0
  140. package/dist/cli/spec/registry.d.ts.map +1 -0
  141. package/dist/cli/spec/registry.js +47 -0
  142. package/dist/cli/spec/spec.d.ts +76 -0
  143. package/dist/cli/spec/spec.d.ts.map +1 -0
  144. package/dist/cli/spec/spec.js +1 -0
  145. package/dist/cli/spec/suggest.d.ts +2 -0
  146. package/dist/cli/spec/suggest.d.ts.map +1 -0
  147. package/dist/cli/spec/suggest.js +45 -0
  148. package/dist/commands/backend/sync.command.d.ts +12 -0
  149. package/dist/commands/backend/sync.command.d.ts.map +1 -0
  150. package/dist/commands/backend/sync.command.js +79 -0
  151. package/dist/commands/backend.d.ts +21 -8
  152. package/dist/commands/backend.d.ts.map +1 -1
  153. package/dist/commands/backend.js +28 -165
  154. package/dist/commands/block.command.d.ts +19 -0
  155. package/dist/commands/block.command.d.ts.map +1 -0
  156. package/dist/commands/block.command.js +143 -0
  157. package/dist/commands/branch/base.command.d.ts +20 -0
  158. package/dist/commands/branch/base.command.d.ts.map +1 -0
  159. package/dist/commands/branch/base.command.js +110 -0
  160. package/dist/commands/branch/base.d.ts +19 -0
  161. package/dist/commands/branch/base.d.ts.map +1 -0
  162. package/dist/commands/branch/base.js +114 -0
  163. package/dist/commands/branch/cleanup-merged.d.ts +11 -0
  164. package/dist/commands/branch/cleanup-merged.d.ts.map +1 -0
  165. package/dist/commands/branch/cleanup-merged.js +141 -0
  166. package/dist/commands/branch/index.d.ts +6 -59
  167. package/dist/commands/branch/index.d.ts.map +1 -1
  168. package/dist/commands/branch/index.js +6 -513
  169. package/dist/commands/branch/internal/archive-pr.d.ts +2 -0
  170. package/dist/commands/branch/internal/archive-pr.d.ts.map +1 -0
  171. package/dist/commands/branch/internal/archive-pr.js +17 -0
  172. package/dist/commands/branch/internal/work-validate.d.ts +3 -0
  173. package/dist/commands/branch/internal/work-validate.d.ts.map +1 -0
  174. package/dist/commands/branch/internal/work-validate.js +27 -0
  175. package/dist/commands/branch/remove.command.d.ts +10 -0
  176. package/dist/commands/branch/remove.command.d.ts.map +1 -0
  177. package/dist/commands/branch/remove.command.js +63 -0
  178. package/dist/commands/branch/remove.d.ts +9 -0
  179. package/dist/commands/branch/remove.d.ts.map +1 -0
  180. package/dist/commands/branch/remove.js +65 -0
  181. package/dist/commands/branch/status.command.d.ts +8 -0
  182. package/dist/commands/branch/status.command.d.ts.map +1 -0
  183. package/dist/commands/branch/status.command.js +36 -0
  184. package/dist/commands/branch/status.d.ts +7 -0
  185. package/dist/commands/branch/status.d.ts.map +1 -0
  186. package/dist/commands/branch/status.js +60 -0
  187. package/dist/commands/branch/work-start.command.d.ts +11 -0
  188. package/dist/commands/branch/work-start.command.d.ts.map +1 -0
  189. package/dist/commands/branch/work-start.command.js +80 -0
  190. package/dist/commands/branch/work-start.d.ts +11 -0
  191. package/dist/commands/branch/work-start.d.ts.map +1 -0
  192. package/dist/commands/branch/work-start.js +120 -0
  193. package/dist/commands/cleanup/merged.command.d.ts +17 -0
  194. package/dist/commands/cleanup/merged.command.d.ts.map +1 -0
  195. package/dist/commands/cleanup/merged.command.js +75 -0
  196. package/dist/commands/commit.command.d.ts +6 -0
  197. package/dist/commands/commit.command.d.ts.map +1 -0
  198. package/dist/commands/commit.command.js +24 -0
  199. package/dist/commands/commit.spec.d.ts +18 -0
  200. package/dist/commands/commit.spec.d.ts.map +1 -0
  201. package/dist/commands/commit.spec.js +119 -0
  202. package/dist/commands/docs/cli.command.d.ts +9 -0
  203. package/dist/commands/docs/cli.command.d.ts.map +1 -0
  204. package/dist/commands/docs/cli.command.js +51 -0
  205. package/dist/commands/finish.command.d.ts +28 -0
  206. package/dist/commands/finish.command.d.ts.map +1 -0
  207. package/dist/commands/finish.command.js +237 -0
  208. package/dist/commands/guard/clean.command.d.ts +7 -0
  209. package/dist/commands/guard/clean.command.d.ts.map +1 -0
  210. package/dist/commands/guard/clean.command.js +14 -0
  211. package/dist/commands/guard/commit.command.d.ts +19 -0
  212. package/dist/commands/guard/commit.command.d.ts.map +1 -0
  213. package/dist/commands/guard/commit.command.js +132 -0
  214. package/dist/commands/guard/guard.command.d.ts +5 -0
  215. package/dist/commands/guard/guard.command.d.ts.map +1 -0
  216. package/dist/commands/guard/guard.command.js +21 -0
  217. package/dist/commands/guard/impl/allow.d.ts +18 -0
  218. package/dist/commands/guard/impl/allow.d.ts.map +1 -0
  219. package/dist/commands/guard/impl/allow.js +77 -0
  220. package/dist/commands/guard/impl/close-message.d.ts +16 -0
  221. package/dist/commands/guard/impl/close-message.d.ts.map +1 -0
  222. package/dist/commands/guard/impl/close-message.js +156 -0
  223. package/dist/commands/guard/impl/commands.d.ts +32 -0
  224. package/dist/commands/guard/impl/commands.d.ts.map +1 -0
  225. package/dist/commands/guard/impl/commands.js +191 -0
  226. package/dist/commands/guard/impl/comment-commit.d.ts +25 -0
  227. package/dist/commands/guard/impl/comment-commit.d.ts.map +1 -0
  228. package/dist/commands/guard/impl/comment-commit.js +137 -0
  229. package/dist/commands/guard/impl/env.d.ts +10 -0
  230. package/dist/commands/guard/impl/env.d.ts.map +1 -0
  231. package/dist/commands/guard/impl/env.js +12 -0
  232. package/dist/commands/guard/impl/policy.d.ts +19 -0
  233. package/dist/commands/guard/impl/policy.d.ts.map +1 -0
  234. package/dist/commands/guard/impl/policy.js +46 -0
  235. package/dist/commands/guard/index.d.ts +4 -66
  236. package/dist/commands/guard/index.d.ts.map +1 -1
  237. package/dist/commands/guard/index.js +4 -367
  238. package/dist/commands/guard/suggest-allow.command.d.ts +7 -0
  239. package/dist/commands/guard/suggest-allow.command.d.ts.map +1 -0
  240. package/dist/commands/guard/suggest-allow.command.js +28 -0
  241. package/dist/commands/hooks/hooks.command.d.ts +5 -0
  242. package/dist/commands/hooks/hooks.command.d.ts.map +1 -0
  243. package/dist/commands/hooks/hooks.command.js +18 -0
  244. package/dist/commands/hooks/index.d.ts.map +1 -1
  245. package/dist/commands/hooks/index.js +42 -77
  246. package/dist/commands/hooks/install.command.d.ts +7 -0
  247. package/dist/commands/hooks/install.command.d.ts.map +1 -0
  248. package/dist/commands/hooks/install.command.js +14 -0
  249. package/dist/commands/hooks/run.command.d.ts +9 -0
  250. package/dist/commands/hooks/run.command.d.ts.map +1 -0
  251. package/dist/commands/hooks/run.command.js +39 -0
  252. package/dist/commands/hooks/uninstall.command.d.ts +7 -0
  253. package/dist/commands/hooks/uninstall.command.d.ts.map +1 -0
  254. package/dist/commands/hooks/uninstall.command.js +16 -0
  255. package/dist/commands/integrate.command.d.ts +14 -0
  256. package/dist/commands/integrate.command.d.ts.map +1 -0
  257. package/dist/commands/integrate.command.js +61 -0
  258. package/dist/commands/pr/check.d.ts +8 -0
  259. package/dist/commands/pr/check.d.ts.map +1 -0
  260. package/dist/commands/pr/check.js +78 -0
  261. package/dist/commands/pr/index.d.ts +5 -45
  262. package/dist/commands/pr/index.d.ts.map +1 -1
  263. package/dist/commands/pr/index.js +5 -857
  264. package/dist/commands/pr/integrate/artifacts.d.ts +14 -0
  265. package/dist/commands/pr/integrate/artifacts.d.ts.map +1 -0
  266. package/dist/commands/pr/integrate/artifacts.js +45 -0
  267. package/dist/commands/pr/integrate/cmd.d.ts +14 -0
  268. package/dist/commands/pr/integrate/cmd.d.ts.map +1 -0
  269. package/dist/commands/pr/integrate/cmd.js +150 -0
  270. package/dist/commands/pr/integrate/internal/finalize.d.ts +25 -0
  271. package/dist/commands/pr/integrate/internal/finalize.d.ts.map +1 -0
  272. package/dist/commands/pr/integrate/internal/finalize.js +86 -0
  273. package/dist/commands/pr/integrate/internal/merge.d.ts +40 -0
  274. package/dist/commands/pr/integrate/internal/merge.d.ts.map +1 -0
  275. package/dist/commands/pr/integrate/internal/merge.js +138 -0
  276. package/dist/commands/pr/integrate/internal/prepare.d.ts +33 -0
  277. package/dist/commands/pr/integrate/internal/prepare.d.ts.map +1 -0
  278. package/dist/commands/pr/integrate/internal/prepare.js +142 -0
  279. package/dist/commands/pr/integrate/internal/worktree.d.ts +14 -0
  280. package/dist/commands/pr/integrate/internal/worktree.d.ts.map +1 -0
  281. package/dist/commands/pr/integrate/internal/worktree.js +51 -0
  282. package/dist/commands/pr/integrate/verify.d.ts +22 -0
  283. package/dist/commands/pr/integrate/verify.d.ts.map +1 -0
  284. package/dist/commands/pr/integrate/verify.js +60 -0
  285. package/dist/commands/pr/integrate.d.ts +2 -0
  286. package/dist/commands/pr/integrate.d.ts.map +1 -0
  287. package/dist/commands/pr/integrate.js +1 -0
  288. package/dist/commands/pr/internal/pr-paths.d.ts +29 -0
  289. package/dist/commands/pr/internal/pr-paths.d.ts.map +1 -0
  290. package/dist/commands/pr/internal/pr-paths.js +38 -0
  291. package/dist/commands/pr/internal/review-template.d.ts +9 -0
  292. package/dist/commands/pr/internal/review-template.d.ts.map +1 -0
  293. package/dist/commands/pr/internal/review-template.js +62 -0
  294. package/dist/commands/pr/note.d.ts +10 -0
  295. package/dist/commands/pr/note.d.ts.map +1 -0
  296. package/dist/commands/pr/note.js +50 -0
  297. package/dist/commands/pr/open.d.ts +10 -0
  298. package/dist/commands/pr/open.d.ts.map +1 -0
  299. package/dist/commands/pr/open.js +80 -0
  300. package/dist/commands/pr/pr.command.d.ts +33 -0
  301. package/dist/commands/pr/pr.command.d.ts.map +1 -0
  302. package/dist/commands/pr/pr.command.js +172 -0
  303. package/dist/commands/pr/update.d.ts +8 -0
  304. package/dist/commands/pr/update.d.ts.map +1 -0
  305. package/dist/commands/pr/update.js +103 -0
  306. package/dist/commands/ready.command.d.ts +8 -0
  307. package/dist/commands/ready.command.d.ts.map +1 -0
  308. package/dist/commands/ready.command.js +28 -0
  309. package/dist/commands/recipes/cache-prune.command.d.ts +6 -0
  310. package/dist/commands/recipes/cache-prune.command.d.ts.map +1 -0
  311. package/dist/commands/recipes/cache-prune.command.js +30 -0
  312. package/dist/commands/recipes/cache.command.d.ts +6 -0
  313. package/dist/commands/recipes/cache.command.d.ts.map +1 -0
  314. package/dist/commands/recipes/cache.command.js +37 -0
  315. package/dist/commands/recipes/explain.command.d.ts +7 -0
  316. package/dist/commands/recipes/explain.command.d.ts.map +1 -0
  317. package/dist/commands/recipes/explain.command.js +10 -0
  318. package/dist/commands/recipes/impl/apply.d.ts +16 -0
  319. package/dist/commands/recipes/impl/apply.d.ts.map +1 -0
  320. package/dist/commands/recipes/impl/apply.js +97 -0
  321. package/dist/commands/recipes/impl/archive.d.ts +2 -0
  322. package/dist/commands/recipes/impl/archive.d.ts.map +1 -0
  323. package/dist/commands/recipes/impl/archive.js +19 -0
  324. package/dist/commands/recipes/impl/commands/cache-prune.d.ts +7 -0
  325. package/dist/commands/recipes/impl/commands/cache-prune.d.ts.map +1 -0
  326. package/dist/commands/recipes/impl/commands/cache-prune.js +94 -0
  327. package/dist/commands/recipes/impl/commands/explain.d.ts +6 -0
  328. package/dist/commands/recipes/impl/commands/explain.d.ts.map +1 -0
  329. package/dist/commands/recipes/impl/commands/explain.js +88 -0
  330. package/dist/commands/recipes/impl/commands/info.d.ts +6 -0
  331. package/dist/commands/recipes/impl/commands/info.d.ts.map +1 -0
  332. package/dist/commands/recipes/impl/commands/info.js +58 -0
  333. package/dist/commands/recipes/impl/commands/install.d.ts +11 -0
  334. package/dist/commands/recipes/impl/commands/install.d.ts.map +1 -0
  335. package/dist/commands/recipes/impl/commands/install.js +212 -0
  336. package/dist/commands/recipes/impl/commands/list-remote.d.ts +7 -0
  337. package/dist/commands/recipes/impl/commands/list-remote.d.ts.map +1 -0
  338. package/dist/commands/recipes/impl/commands/list-remote.js +53 -0
  339. package/dist/commands/recipes/impl/commands/list.d.ts +7 -0
  340. package/dist/commands/recipes/impl/commands/list.d.ts.map +1 -0
  341. package/dist/commands/recipes/impl/commands/list.js +38 -0
  342. package/dist/commands/recipes/impl/commands/remove.d.ts +6 -0
  343. package/dist/commands/recipes/impl/commands/remove.d.ts.map +1 -0
  344. package/dist/commands/recipes/impl/commands/remove.js +35 -0
  345. package/dist/commands/recipes/impl/commands.d.ts +8 -0
  346. package/dist/commands/recipes/impl/commands.d.ts.map +1 -0
  347. package/dist/commands/recipes/impl/commands.js +7 -0
  348. package/dist/commands/recipes/impl/constants.d.ts +13 -0
  349. package/dist/commands/recipes/impl/constants.d.ts.map +1 -0
  350. package/dist/commands/recipes/impl/constants.js +16 -0
  351. package/dist/commands/recipes/impl/format.d.ts +2 -0
  352. package/dist/commands/recipes/impl/format.d.ts.map +1 -0
  353. package/dist/commands/recipes/impl/format.js +9 -0
  354. package/dist/commands/recipes/impl/index.d.ts +12 -0
  355. package/dist/commands/recipes/impl/index.d.ts.map +1 -0
  356. package/dist/commands/recipes/impl/index.js +150 -0
  357. package/dist/commands/recipes/impl/installed-recipes.d.ts +4 -0
  358. package/dist/commands/recipes/impl/installed-recipes.d.ts.map +1 -0
  359. package/dist/commands/recipes/impl/installed-recipes.js +58 -0
  360. package/dist/commands/recipes/impl/manifest.d.ts +4 -0
  361. package/dist/commands/recipes/impl/manifest.d.ts.map +1 -0
  362. package/dist/commands/recipes/impl/manifest.js +43 -0
  363. package/dist/commands/recipes/impl/normalize.d.ts +5 -0
  364. package/dist/commands/recipes/impl/normalize.d.ts.map +1 -0
  365. package/dist/commands/recipes/impl/normalize.js +50 -0
  366. package/dist/commands/recipes/impl/paths.d.ts +13 -0
  367. package/dist/commands/recipes/impl/paths.d.ts.map +1 -0
  368. package/dist/commands/recipes/impl/paths.js +27 -0
  369. package/dist/commands/recipes/impl/project.d.ts +8 -0
  370. package/dist/commands/recipes/impl/project.d.ts.map +1 -0
  371. package/dist/commands/recipes/impl/project.js +23 -0
  372. package/dist/commands/recipes/impl/scenario.d.ts +16 -0
  373. package/dist/commands/recipes/impl/scenario.d.ts.map +1 -0
  374. package/dist/commands/recipes/impl/scenario.js +128 -0
  375. package/dist/commands/recipes/impl/types.d.ts +107 -0
  376. package/dist/commands/recipes/impl/types.d.ts.map +1 -0
  377. package/dist/commands/recipes/impl/types.js +1 -0
  378. package/dist/commands/recipes/info.command.d.ts +7 -0
  379. package/dist/commands/recipes/info.command.d.ts.map +1 -0
  380. package/dist/commands/recipes/info.command.js +10 -0
  381. package/dist/commands/recipes/install.command.d.ts +12 -0
  382. package/dist/commands/recipes/install.command.d.ts.map +1 -0
  383. package/dist/commands/recipes/install.command.js +161 -0
  384. package/dist/commands/recipes/list-remote.command.d.ts +6 -0
  385. package/dist/commands/recipes/list-remote.command.d.ts.map +1 -0
  386. package/dist/commands/recipes/list-remote.command.js +46 -0
  387. package/dist/commands/recipes/list.command.d.ts +6 -0
  388. package/dist/commands/recipes/list.command.d.ts.map +1 -0
  389. package/dist/commands/recipes/list.command.js +39 -0
  390. package/dist/commands/recipes/recipes.command.d.ts +6 -0
  391. package/dist/commands/recipes/recipes.command.d.ts.map +1 -0
  392. package/dist/commands/recipes/recipes.command.js +45 -0
  393. package/dist/commands/recipes/remove.command.d.ts +7 -0
  394. package/dist/commands/recipes/remove.command.d.ts.map +1 -0
  395. package/dist/commands/recipes/remove.command.js +10 -0
  396. package/dist/commands/recipes.d.ts +7 -12
  397. package/dist/commands/recipes.d.ts.map +1 -1
  398. package/dist/commands/recipes.js +6 -1963
  399. package/dist/commands/scenario/impl/commands.d.ts +19 -0
  400. package/dist/commands/scenario/impl/commands.d.ts.map +1 -0
  401. package/dist/commands/scenario/impl/commands.js +336 -0
  402. package/dist/commands/scenario/impl/report.d.ts +30 -0
  403. package/dist/commands/scenario/impl/report.d.ts.map +1 -0
  404. package/dist/commands/scenario/impl/report.js +99 -0
  405. package/dist/commands/scenario/info.command.d.ts +8 -0
  406. package/dist/commands/scenario/info.command.d.ts.map +1 -0
  407. package/dist/commands/scenario/info.command.js +27 -0
  408. package/dist/commands/scenario/list.command.d.ts +5 -0
  409. package/dist/commands/scenario/list.command.d.ts.map +1 -0
  410. package/dist/commands/scenario/list.command.js +9 -0
  411. package/dist/commands/scenario/run.command.d.ts +8 -0
  412. package/dist/commands/scenario/run.command.d.ts.map +1 -0
  413. package/dist/commands/scenario/run.command.js +27 -0
  414. package/dist/commands/scenario/scenario.command.d.ts +6 -0
  415. package/dist/commands/scenario/scenario.command.d.ts.map +1 -0
  416. package/dist/commands/scenario/scenario.command.js +37 -0
  417. package/dist/commands/scenario.d.ts +2 -0
  418. package/dist/commands/scenario.d.ts.map +1 -0
  419. package/dist/commands/scenario.js +1 -0
  420. package/dist/commands/shared/git-context.d.ts +23 -0
  421. package/dist/commands/shared/git-context.d.ts.map +1 -0
  422. package/dist/commands/shared/git-context.js +140 -0
  423. package/dist/commands/shared/policy-deny.d.ts +3 -0
  424. package/dist/commands/shared/policy-deny.d.ts.map +1 -0
  425. package/dist/commands/shared/policy-deny.js +12 -0
  426. package/dist/commands/shared/task-backend.d.ts +31 -3
  427. package/dist/commands/shared/task-backend.d.ts.map +1 -1
  428. package/dist/commands/shared/task-backend.js +42 -5
  429. package/dist/commands/shared/task-store.d.ts +16 -0
  430. package/dist/commands/shared/task-store.d.ts.map +1 -0
  431. package/dist/commands/shared/task-store.js +142 -0
  432. package/dist/commands/start.command.d.ts +19 -0
  433. package/dist/commands/start.command.d.ts.map +1 -0
  434. package/dist/commands/start.command.js +143 -0
  435. package/dist/commands/sync.command.d.ts +6 -0
  436. package/dist/commands/sync.command.d.ts.map +1 -0
  437. package/dist/commands/sync.command.js +57 -0
  438. package/dist/commands/task/add.command.d.ts +18 -0
  439. package/dist/commands/task/add.command.d.ts.map +1 -0
  440. package/dist/commands/task/add.command.js +157 -0
  441. package/dist/commands/task/add.d.ts +13 -3
  442. package/dist/commands/task/add.d.ts.map +1 -1
  443. package/dist/commands/task/add.js +21 -126
  444. package/dist/commands/task/block.d.ts +2 -2
  445. package/dist/commands/task/block.d.ts.map +1 -1
  446. package/dist/commands/task/block.js +31 -21
  447. package/dist/commands/task/comment.command.d.ts +10 -0
  448. package/dist/commands/task/comment.command.d.ts.map +1 -0
  449. package/dist/commands/task/comment.command.js +57 -0
  450. package/dist/commands/task/comment.d.ts +2 -0
  451. package/dist/commands/task/comment.d.ts.map +1 -1
  452. package/dist/commands/task/comment.js +19 -9
  453. package/dist/commands/task/derive.command.d.ts +13 -0
  454. package/dist/commands/task/derive.command.d.ts.map +1 -0
  455. package/dist/commands/task/derive.command.js +94 -0
  456. package/dist/commands/task/derive.d.ts +13 -0
  457. package/dist/commands/task/derive.d.ts.map +1 -0
  458. package/dist/commands/task/derive.js +71 -0
  459. package/dist/commands/task/doc-set.command.d.ts +12 -0
  460. package/dist/commands/task/doc-set.command.d.ts.map +1 -0
  461. package/dist/commands/task/doc-set.command.js +82 -0
  462. package/dist/commands/task/doc-show.command.d.ts +10 -0
  463. package/dist/commands/task/doc-show.command.d.ts.map +1 -0
  464. package/dist/commands/task/doc-show.command.js +54 -0
  465. package/dist/commands/task/doc.command.d.ts +7 -0
  466. package/dist/commands/task/doc.command.d.ts.map +1 -0
  467. package/dist/commands/task/doc.command.js +22 -0
  468. package/dist/commands/task/doc.d.ts +9 -6
  469. package/dist/commands/task/doc.d.ts.map +1 -1
  470. package/dist/commands/task/doc.js +61 -113
  471. package/dist/commands/task/export.command.d.ts +6 -0
  472. package/dist/commands/task/export.command.d.ts.map +1 -0
  473. package/dist/commands/task/export.command.js +17 -0
  474. package/dist/commands/task/export.d.ts +2 -0
  475. package/dist/commands/task/export.d.ts.map +1 -1
  476. package/dist/commands/task/export.js +7 -9
  477. package/dist/commands/task/finish.d.ts +5 -4
  478. package/dist/commands/task/finish.d.ts.map +1 -1
  479. package/dist/commands/task/finish.js +80 -37
  480. package/dist/commands/task/index.d.ts +14 -13
  481. package/dist/commands/task/index.d.ts.map +1 -1
  482. package/dist/commands/task/index.js +13 -13
  483. package/dist/commands/task/lint.command.d.ts +5 -0
  484. package/dist/commands/task/lint.command.d.ts.map +1 -0
  485. package/dist/commands/task/lint.command.js +11 -0
  486. package/dist/commands/task/list.command.d.ts +9 -0
  487. package/dist/commands/task/list.command.d.ts.map +1 -0
  488. package/dist/commands/task/list.command.js +68 -0
  489. package/dist/commands/task/list.d.ts +6 -2
  490. package/dist/commands/task/list.d.ts.map +1 -1
  491. package/dist/commands/task/list.js +12 -15
  492. package/dist/commands/task/migrate-doc.command.d.ts +9 -0
  493. package/dist/commands/task/migrate-doc.command.d.ts.map +1 -0
  494. package/dist/commands/task/migrate-doc.command.js +65 -0
  495. package/dist/commands/task/migrate-doc.d.ts +3 -3
  496. package/dist/commands/task/migrate-doc.d.ts.map +1 -1
  497. package/dist/commands/task/migrate-doc.js +40 -47
  498. package/dist/commands/task/migrate.command.d.ts +10 -0
  499. package/dist/commands/task/migrate.command.d.ts.map +1 -0
  500. package/dist/commands/task/migrate.command.js +50 -0
  501. package/dist/commands/task/migrate.d.ts +5 -1
  502. package/dist/commands/task/migrate.d.ts.map +1 -1
  503. package/dist/commands/task/migrate.js +10 -44
  504. package/dist/commands/task/new.command.d.ts +6 -0
  505. package/dist/commands/task/new.command.d.ts.map +1 -0
  506. package/dist/commands/task/new.command.js +13 -0
  507. package/dist/commands/task/new.d.ts +13 -4
  508. package/dist/commands/task/new.d.ts.map +1 -1
  509. package/dist/commands/task/new.js +30 -92
  510. package/dist/commands/task/new.spec.d.ts +4 -0
  511. package/dist/commands/task/new.spec.d.ts.map +1 -0
  512. package/dist/commands/task/new.spec.js +79 -0
  513. package/dist/commands/task/next.command.d.ts +9 -0
  514. package/dist/commands/task/next.command.d.ts.map +1 -0
  515. package/dist/commands/task/next.command.js +89 -0
  516. package/dist/commands/task/next.d.ts +4 -1
  517. package/dist/commands/task/next.d.ts.map +1 -1
  518. package/dist/commands/task/next.js +15 -16
  519. package/dist/commands/task/normalize.command.d.ts +9 -0
  520. package/dist/commands/task/normalize.command.d.ts.map +1 -0
  521. package/dist/commands/task/normalize.command.js +39 -0
  522. package/dist/commands/task/normalize.d.ts +4 -1
  523. package/dist/commands/task/normalize.d.ts.map +1 -1
  524. package/dist/commands/task/normalize.js +18 -31
  525. package/dist/commands/task/plan-approve.command.d.ts +10 -0
  526. package/dist/commands/task/plan-approve.command.d.ts.map +1 -0
  527. package/dist/commands/task/plan-approve.command.js +54 -0
  528. package/dist/commands/task/plan-reject.command.d.ts +10 -0
  529. package/dist/commands/task/plan-reject.command.d.ts.map +1 -0
  530. package/dist/commands/task/plan-reject.command.js +59 -0
  531. package/dist/commands/task/plan-set.command.d.ts +11 -0
  532. package/dist/commands/task/plan-set.command.d.ts.map +1 -0
  533. package/dist/commands/task/plan-set.command.js +76 -0
  534. package/dist/commands/task/plan.d.ts +23 -10
  535. package/dist/commands/task/plan.d.ts.map +1 -1
  536. package/dist/commands/task/plan.js +182 -177
  537. package/dist/commands/task/ready.d.ts +2 -0
  538. package/dist/commands/task/ready.d.ts.map +1 -1
  539. package/dist/commands/task/ready.js +4 -6
  540. package/dist/commands/task/scaffold.command.d.ts +12 -0
  541. package/dist/commands/task/scaffold.command.d.ts.map +1 -0
  542. package/dist/commands/task/scaffold.command.js +73 -0
  543. package/dist/commands/task/scaffold.d.ts +7 -3
  544. package/dist/commands/task/scaffold.d.ts.map +1 -1
  545. package/dist/commands/task/scaffold.js +57 -67
  546. package/dist/commands/task/scrub.command.d.ts +11 -0
  547. package/dist/commands/task/scrub.command.d.ts.map +1 -0
  548. package/dist/commands/task/scrub.command.js +72 -0
  549. package/dist/commands/task/scrub.d.ts +6 -3
  550. package/dist/commands/task/scrub.d.ts.map +1 -1
  551. package/dist/commands/task/scrub.js +12 -68
  552. package/dist/commands/task/search.command.d.ts +11 -0
  553. package/dist/commands/task/search.command.d.ts.map +1 -0
  554. package/dist/commands/task/search.command.js +101 -0
  555. package/dist/commands/task/search.d.ts +5 -1
  556. package/dist/commands/task/search.d.ts.map +1 -1
  557. package/dist/commands/task/search.js +14 -23
  558. package/dist/commands/task/set-status.command.d.ts +21 -0
  559. package/dist/commands/task/set-status.command.d.ts.map +1 -0
  560. package/dist/commands/task/set-status.command.js +171 -0
  561. package/dist/commands/task/set-status.d.ts +2 -0
  562. package/dist/commands/task/set-status.d.ts.map +1 -1
  563. package/dist/commands/task/set-status.js +32 -12
  564. package/dist/commands/task/shared.d.ts +8 -2
  565. package/dist/commands/task/shared.d.ts.map +1 -1
  566. package/dist/commands/task/shared.js +68 -28
  567. package/dist/commands/task/show.command.d.ts +8 -0
  568. package/dist/commands/task/show.command.d.ts.map +1 -0
  569. package/dist/commands/task/show.command.js +19 -0
  570. package/dist/commands/task/show.d.ts +2 -0
  571. package/dist/commands/task/show.d.ts.map +1 -1
  572. package/dist/commands/task/show.js +5 -7
  573. package/dist/commands/task/start.d.ts +2 -2
  574. package/dist/commands/task/start.d.ts.map +1 -1
  575. package/dist/commands/task/start.js +66 -23
  576. package/dist/commands/task/update.command.d.ts +18 -0
  577. package/dist/commands/task/update.command.d.ts.map +1 -0
  578. package/dist/commands/task/update.command.js +141 -0
  579. package/dist/commands/task/update.d.ts +13 -3
  580. package/dist/commands/task/update.d.ts.map +1 -1
  581. package/dist/commands/task/update.js +31 -122
  582. package/dist/commands/task/verify-ok.command.d.ts +13 -0
  583. package/dist/commands/task/verify-ok.command.d.ts.map +1 -0
  584. package/dist/commands/task/verify-ok.command.js +83 -0
  585. package/dist/commands/task/verify-record.d.ts +30 -8
  586. package/dist/commands/task/verify-record.d.ts.map +1 -1
  587. package/dist/commands/task/verify-record.js +114 -117
  588. package/dist/commands/task/verify-rework.command.d.ts +13 -0
  589. package/dist/commands/task/verify-rework.command.d.ts.map +1 -0
  590. package/dist/commands/task/verify-rework.command.js +83 -0
  591. package/dist/commands/task/verify-show.command.d.ts +9 -0
  592. package/dist/commands/task/verify-show.command.d.ts.map +1 -0
  593. package/dist/commands/task/verify-show.command.js +38 -0
  594. package/dist/commands/task/verify.command.d.ts +7 -0
  595. package/dist/commands/task/verify.command.d.ts.map +1 -0
  596. package/dist/commands/task/verify.command.js +20 -0
  597. package/dist/commands/upgrade.command.d.ts +6 -0
  598. package/dist/commands/upgrade.command.d.ts.map +1 -0
  599. package/dist/commands/upgrade.command.js +104 -0
  600. package/dist/commands/upgrade.d.ts +13 -2
  601. package/dist/commands/upgrade.d.ts.map +1 -1
  602. package/dist/commands/upgrade.js +12 -80
  603. package/dist/commands/verify.command.d.ts +16 -0
  604. package/dist/commands/verify.command.d.ts.map +1 -0
  605. package/dist/commands/verify.command.js +113 -0
  606. package/dist/commands/workflow.d.ts +4 -6
  607. package/dist/commands/workflow.d.ts.map +1 -1
  608. package/dist/commands/workflow.js +4 -7
  609. package/dist/meta/release.d.ts +2 -0
  610. package/dist/meta/release.d.ts.map +1 -0
  611. package/dist/meta/release.js +50 -0
  612. package/dist/policy/evaluate.d.ts +3 -0
  613. package/dist/policy/evaluate.d.ts.map +1 -0
  614. package/dist/policy/evaluate.js +27 -0
  615. package/dist/policy/result.d.ts +7 -0
  616. package/dist/policy/result.d.ts.map +1 -0
  617. package/dist/policy/result.js +21 -0
  618. package/dist/policy/rules/allowlist.d.ts +3 -0
  619. package/dist/policy/rules/allowlist.d.ts.map +1 -0
  620. package/dist/policy/rules/allowlist.js +30 -0
  621. package/dist/policy/rules/branch-pr-base.d.ts +3 -0
  622. package/dist/policy/rules/branch-pr-base.d.ts.map +1 -0
  623. package/dist/policy/rules/branch-pr-base.js +43 -0
  624. package/dist/policy/rules/clean-tree.d.ts +3 -0
  625. package/dist/policy/rules/clean-tree.d.ts.map +1 -0
  626. package/dist/policy/rules/clean-tree.js +19 -0
  627. package/dist/policy/rules/commit-subject.d.ts +3 -0
  628. package/dist/policy/rules/commit-subject.d.ts.map +1 -0
  629. package/dist/policy/rules/commit-subject.js +33 -0
  630. package/dist/policy/rules/protected-paths.d.ts +3 -0
  631. package/dist/policy/rules/protected-paths.d.ts.map +1 -0
  632. package/dist/policy/rules/protected-paths.js +53 -0
  633. package/dist/policy/types.d.ts +38 -0
  634. package/dist/policy/types.d.ts.map +1 -0
  635. package/dist/policy/types.js +1 -0
  636. package/dist/shared/git-log.d.ts +5 -0
  637. package/dist/shared/git-log.d.ts.map +1 -0
  638. package/dist/shared/git-log.js +14 -0
  639. package/dist/shared/git-path.d.ts +3 -0
  640. package/dist/shared/git-path.d.ts.map +1 -0
  641. package/dist/shared/git-path.js +30 -0
  642. package/dist/shared/guards.d.ts +2 -0
  643. package/dist/shared/guards.d.ts.map +1 -0
  644. package/dist/shared/guards.js +3 -0
  645. package/dist/shared/protected-paths.d.ts +12 -0
  646. package/dist/shared/protected-paths.d.ts.map +1 -0
  647. package/dist/shared/protected-paths.js +51 -0
  648. package/dist/shared/strings.d.ts +2 -0
  649. package/dist/shared/strings.d.ts.map +1 -0
  650. package/dist/shared/strings.js +14 -0
  651. package/dist/shared/write-if-changed.d.ts +3 -0
  652. package/dist/shared/write-if-changed.d.ts.map +1 -0
  653. package/dist/shared/write-if-changed.js +25 -0
  654. package/package.json +2 -2
  655. package/dist/cli/help.d.ts +0 -2
  656. package/dist/cli/help.d.ts.map +0 -1
  657. package/dist/cli/help.js +0 -127
  658. package/dist/commands/task/verify.d.ts +0 -2
  659. package/dist/commands/task/verify.d.ts.map +0 -1
  660. package/dist/commands/task/verify.js +0 -1
@@ -0,0 +1,10 @@
1
+ import type { CommandCtx, CommandSpec } from "../../cli/spec/spec.js";
2
+ import type { CommandContext } from "../shared/task-backend.js";
3
+ export type TaskPlanRejectParsed = {
4
+ taskId: string;
5
+ by: string;
6
+ note: string;
7
+ };
8
+ export declare const taskPlanRejectSpec: CommandSpec<TaskPlanRejectParsed>;
9
+ export declare function makeRunTaskPlanRejectHandler(getCtx: (cmd: string) => Promise<CommandContext>): (ctx: CommandCtx, p: TaskPlanRejectParsed) => Promise<number>;
10
+ //# sourceMappingURL=plan-reject.command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-reject.command.d.ts","sourceRoot":"","sources":["../../../src/commands/task/plan-reject.command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAEtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAIhE,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,WAAW,CAAC,oBAAoB,CA4ChE,CAAC;AAEF,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,IAC7E,KAAK,UAAU,EAAE,GAAG,oBAAoB,KAAG,OAAO,CAAC,MAAM,CAAC,CAUzE"}
@@ -0,0 +1,59 @@
1
+ import { usageError } from "../../cli/spec/errors.js";
2
+ import { cmdTaskPlanReject } from "./plan.js";
3
+ export const taskPlanRejectSpec = {
4
+ id: ["task", "plan", "reject"],
5
+ group: "Task",
6
+ summary: "Reject the current task plan (requires a note).",
7
+ args: [{ name: "task-id", required: true, valueHint: "<task-id>" }],
8
+ options: [
9
+ {
10
+ kind: "string",
11
+ name: "by",
12
+ valueHint: "<id>",
13
+ required: true,
14
+ description: "Reviewer id.",
15
+ },
16
+ {
17
+ kind: "string",
18
+ name: "note",
19
+ valueHint: "<text>",
20
+ required: true,
21
+ description: "Required note explaining what needs to change.",
22
+ },
23
+ ],
24
+ examples: [
25
+ {
26
+ cmd: 'agentplane task plan reject 202602030608-F1Q8AB --by USER --note "Need clarification"',
27
+ why: "Reject a plan with a note.",
28
+ },
29
+ ],
30
+ validateRaw: (raw) => {
31
+ const by = raw.opts.by;
32
+ if (typeof by === "string" && by.trim().length === 0) {
33
+ throw usageError({ spec: taskPlanRejectSpec, message: "Invalid value for --by: empty." });
34
+ }
35
+ const note = raw.opts.note;
36
+ if (typeof note === "string" && note.trim().length === 0) {
37
+ throw usageError({ spec: taskPlanRejectSpec, message: "Invalid value for --note: empty." });
38
+ }
39
+ },
40
+ parse: (raw) => {
41
+ return {
42
+ taskId: String(raw.args["task-id"]),
43
+ by: String(raw.opts.by),
44
+ note: String(raw.opts.note),
45
+ };
46
+ },
47
+ };
48
+ export function makeRunTaskPlanRejectHandler(getCtx) {
49
+ return async (ctx, p) => {
50
+ return await cmdTaskPlanReject({
51
+ ctx: await getCtx("task plan reject"),
52
+ cwd: ctx.cwd,
53
+ rootOverride: ctx.rootOverride,
54
+ taskId: p.taskId,
55
+ by: p.by,
56
+ note: p.note,
57
+ });
58
+ };
59
+ }
@@ -0,0 +1,11 @@
1
+ import type { CommandCtx, CommandSpec } from "../../cli/spec/spec.js";
2
+ import type { CommandContext } from "../shared/task-backend.js";
3
+ export type TaskPlanSetParsed = {
4
+ taskId: string;
5
+ text?: string;
6
+ file?: string;
7
+ updatedBy?: string;
8
+ };
9
+ export declare const taskPlanSetSpec: CommandSpec<TaskPlanSetParsed>;
10
+ export declare function makeRunTaskPlanSetHandler(getCtx: (cmd: string) => Promise<CommandContext>): (ctx: CommandCtx, p: TaskPlanSetParsed) => Promise<number>;
11
+ //# sourceMappingURL=plan-set.command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-set.command.d.ts","sourceRoot":"","sources":["../../../src/commands/task/plan-set.command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAEtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAIhE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,WAAW,CAAC,iBAAiB,CA4D1D,CAAC;AAEF,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,IAC1E,KAAK,UAAU,EAAE,GAAG,iBAAiB,KAAG,OAAO,CAAC,MAAM,CAAC,CAWtE"}
@@ -0,0 +1,76 @@
1
+ import { usageError } from "../../cli/spec/errors.js";
2
+ import { cmdTaskPlanSet } from "./plan.js";
3
+ export const taskPlanSetSpec = {
4
+ id: ["task", "plan", "set"],
5
+ group: "Task",
6
+ summary: "Set a task plan (writes the Plan section and resets plan approval to pending).",
7
+ args: [{ name: "task-id", required: true, valueHint: "<task-id>" }],
8
+ options: [
9
+ {
10
+ kind: "string",
11
+ name: "text",
12
+ valueHint: "<text>",
13
+ description: "Plan text to write into the task README Plan section.",
14
+ },
15
+ {
16
+ kind: "string",
17
+ name: "file",
18
+ valueHint: "<path>",
19
+ description: "Read plan text from a file path (relative to cwd).",
20
+ },
21
+ {
22
+ kind: "string",
23
+ name: "updated-by",
24
+ valueHint: "<id>",
25
+ description: "Optional. Sets doc_updated_by when writing the plan.",
26
+ },
27
+ ],
28
+ examples: [
29
+ {
30
+ cmd: String.raw `agentplane task plan set 202602030608-F1Q8AB --text "1) Do X\n2) Verify Y" --updated-by ORCHESTRATOR`,
31
+ why: "Write plan from text and set doc_updated_by.",
32
+ },
33
+ {
34
+ cmd: "agentplane task plan set 202602030608-F1Q8AB --file plan.md",
35
+ why: "Write plan from a file.",
36
+ },
37
+ ],
38
+ validateRaw: (raw) => {
39
+ const hasText = typeof raw.opts.text === "string";
40
+ const hasFile = typeof raw.opts.file === "string";
41
+ if (hasText === hasFile) {
42
+ throw usageError({
43
+ spec: taskPlanSetSpec,
44
+ message: "Provide exactly one of --text or --file.",
45
+ });
46
+ }
47
+ const updatedBy = raw.opts["updated-by"];
48
+ if (typeof updatedBy === "string" && updatedBy.trim().length === 0) {
49
+ throw usageError({
50
+ spec: taskPlanSetSpec,
51
+ message: "Invalid value for --updated-by: empty.",
52
+ });
53
+ }
54
+ },
55
+ parse: (raw) => {
56
+ return {
57
+ taskId: String(raw.args["task-id"]),
58
+ text: typeof raw.opts.text === "string" ? raw.opts.text : undefined,
59
+ file: typeof raw.opts.file === "string" ? raw.opts.file : undefined,
60
+ updatedBy: typeof raw.opts["updated-by"] === "string" ? raw.opts["updated-by"] : undefined,
61
+ };
62
+ },
63
+ };
64
+ export function makeRunTaskPlanSetHandler(getCtx) {
65
+ return async (ctx, p) => {
66
+ return await cmdTaskPlanSet({
67
+ ctx: await getCtx("task plan set"),
68
+ cwd: ctx.cwd,
69
+ rootOverride: ctx.rootOverride,
70
+ taskId: p.taskId,
71
+ text: p.text,
72
+ file: p.file,
73
+ updatedBy: p.updatedBy,
74
+ });
75
+ };
76
+ }
@@ -1,14 +1,27 @@
1
- export declare const TASK_PLAN_USAGE = "Usage: agentplane task plan <set|approve|reject> <task-id> [flags]";
2
- export declare const TASK_PLAN_USAGE_EXAMPLE = "agentplane task plan set 202602030608-F1Q8AB --text \"...\"";
3
- export declare const TASK_PLAN_SET_USAGE = "Usage: agentplane task plan set <task-id> (--text <text> | --file <path>) [--updated-by <id>]";
4
- export declare const TASK_PLAN_SET_USAGE_EXAMPLE: string;
5
- export declare const TASK_PLAN_APPROVE_USAGE = "Usage: agentplane task plan approve <task-id> --by <id> [--note <text>]";
6
- export declare const TASK_PLAN_APPROVE_USAGE_EXAMPLE = "agentplane task plan approve 202602030608-F1Q8AB --by USER --note \"OK\"";
7
- export declare const TASK_PLAN_REJECT_USAGE = "Usage: agentplane task plan reject <task-id> --by <id> --note <text>";
8
- export declare const TASK_PLAN_REJECT_USAGE_EXAMPLE = "agentplane task plan reject 202602030608-F1Q8AB --by USER --note \"Need clarification\"";
9
- export declare function cmdTaskPlan(opts: {
1
+ import { type CommandContext } from "../shared/task-backend.js";
2
+ export declare function cmdTaskPlanSet(opts: {
3
+ ctx?: CommandContext;
10
4
  cwd: string;
11
5
  rootOverride?: string;
12
- args: string[];
6
+ taskId: string;
7
+ text?: string;
8
+ file?: string;
9
+ updatedBy?: string;
10
+ }): Promise<number>;
11
+ export declare function cmdTaskPlanApprove(opts: {
12
+ ctx?: CommandContext;
13
+ cwd: string;
14
+ rootOverride?: string;
15
+ taskId: string;
16
+ by: string;
17
+ note?: string;
18
+ }): Promise<number>;
19
+ export declare function cmdTaskPlanReject(opts: {
20
+ ctx?: CommandContext;
21
+ cwd: string;
22
+ rootOverride?: string;
23
+ taskId: string;
24
+ by: string;
25
+ note: string;
13
26
  }): Promise<number>;
14
27
  //# sourceMappingURL=plan.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../../src/commands/task/plan.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,eAAe,uEAAuE,CAAC;AACpG,eAAO,MAAM,uBAAuB,gEAA8D,CAAC;AAEnG,eAAO,MAAM,mBAAmB,kGACiE,CAAC;AAClG,eAAO,MAAM,2BAA2B,QAA6G,CAAC;AAEtJ,eAAO,MAAM,uBAAuB,4EACuC,CAAC;AAC5E,eAAO,MAAM,+BAA+B,6EAC8B,CAAC;AAE3E,eAAO,MAAM,sBAAsB,yEACqC,CAAC;AACzE,eAAO,MAAM,8BAA8B,4FAC8C,CAAC;AAoG1F,wBAAsB,WAAW,CAAC,IAAI,EAAE;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB,GAAG,OAAO,CAAC,MAAM,CAAC,CAwIlB"}
1
+ {"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../../src/commands/task/plan.ts"],"names":[],"mappings":"AASA,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,2BAA2B,CAAC;AA+CnC,wBAAsB,cAAc,CAAC,IAAI,EAAE;IACzC,GAAG,CAAC,EAAE,cAAc,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,MAAM,CAAC,CAmElB;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE;IAC7C,GAAG,CAAC,EAAE,cAAc,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,OAAO,CAAC,MAAM,CAAC,CAkFlB;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE;IAC5C,GAAG,CAAC,EAAE,cAAc,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd,GAAG,OAAO,CAAC,MAAM,CAAC,CAuDlB"}
@@ -2,216 +2,221 @@ import { readFile } from "node:fs/promises";
2
2
  import path from "node:path";
3
3
  import { ensureDocSections, setMarkdownSection } from "@agentplaneorg/core";
4
4
  import { mapBackendError, mapCoreError } from "../../cli/error-map.js";
5
- import { backendNotSupportedMessage, missingValueMessage, usageMessage } from "../../cli/output.js";
5
+ import { backendNotSupportedMessage } from "../../cli/output.js";
6
6
  import { CliError } from "../../shared/errors.js";
7
- import { loadBackendTask } from "../shared/task-backend.js";
8
- import { nowIso } from "./shared.js";
9
- export const TASK_PLAN_USAGE = "Usage: agentplane task plan <set|approve|reject> <task-id> [flags]";
10
- export const TASK_PLAN_USAGE_EXAMPLE = 'agentplane task plan set 202602030608-F1Q8AB --text "..."';
11
- export const TASK_PLAN_SET_USAGE = "Usage: agentplane task plan set <task-id> (--text <text> | --file <path>) [--updated-by <id>]";
12
- export const TASK_PLAN_SET_USAGE_EXAMPLE = String.raw `agentplane task plan set 202602030608-F1Q8AB --text "1) ...\n2) ..." --updated-by ORCHESTRATOR`;
13
- export const TASK_PLAN_APPROVE_USAGE = "Usage: agentplane task plan approve <task-id> --by <id> [--note <text>]";
14
- export const TASK_PLAN_APPROVE_USAGE_EXAMPLE = 'agentplane task plan approve 202602030608-F1Q8AB --by USER --note "OK"';
15
- export const TASK_PLAN_REJECT_USAGE = "Usage: agentplane task plan reject <task-id> --by <id> --note <text>";
16
- export const TASK_PLAN_REJECT_USAGE_EXAMPLE = 'agentplane task plan reject 202602030608-F1Q8AB --by USER --note "Need clarification"';
17
- function extractDocSection(doc, sectionName) {
18
- const lines = doc.replaceAll("\r\n", "\n").split("\n");
19
- let capturing = false;
20
- const out = [];
21
- for (const line of lines) {
22
- const match = /^##\s+(.*)$/.exec(line.trim());
23
- if (match) {
24
- if (capturing)
25
- break;
26
- capturing = (match[1] ?? "").trim() === sectionName;
27
- continue;
28
- }
29
- if (capturing)
30
- out.push(line);
31
- }
32
- if (!capturing)
33
- return null;
34
- return out.join("\n").trimEnd();
35
- }
36
- function parsePlanSetFlags(args) {
37
- const out = {};
38
- for (let i = 0; i < args.length; i++) {
39
- const arg = args[i];
40
- if (!arg)
41
- continue;
42
- if (!arg.startsWith("--")) {
43
- throw new CliError({ exitCode: 2, code: "E_USAGE", message: `Unexpected argument: ${arg}` });
44
- }
45
- const next = args[i + 1];
46
- if (!next) {
47
- throw new CliError({ exitCode: 2, code: "E_USAGE", message: missingValueMessage(arg) });
48
- }
49
- switch (arg) {
50
- case "--text": {
51
- out.text = next;
52
- break;
53
- }
54
- case "--file": {
55
- out.file = next;
56
- break;
57
- }
58
- case "--updated-by": {
59
- out.updatedBy = next;
60
- break;
61
- }
62
- default: {
63
- throw new CliError({ exitCode: 2, code: "E_USAGE", message: `Unknown flag: ${arg}` });
64
- }
65
- }
66
- i++;
67
- }
68
- return out;
69
- }
70
- function parsePlanDecisionFlags(args) {
71
- const out = {};
72
- for (let i = 0; i < args.length; i++) {
73
- const arg = args[i];
74
- if (!arg)
75
- continue;
76
- if (!arg.startsWith("--")) {
77
- throw new CliError({ exitCode: 2, code: "E_USAGE", message: `Unexpected argument: ${arg}` });
78
- }
79
- const next = args[i + 1];
80
- if (!next) {
81
- throw new CliError({ exitCode: 2, code: "E_USAGE", message: missingValueMessage(arg) });
82
- }
83
- switch (arg) {
84
- case "--by": {
85
- out.by = next;
86
- break;
87
- }
88
- case "--note": {
89
- out.note = next;
90
- break;
91
- }
92
- default: {
93
- throw new CliError({ exitCode: 2, code: "E_USAGE", message: `Unknown flag: ${arg}` });
94
- }
95
- }
96
- i++;
97
- }
98
- return out;
99
- }
100
- export async function cmdTaskPlan(opts) {
101
- const [subcommand, taskId, ...restArgs] = opts.args;
102
- if (!subcommand || !taskId) {
7
+ import { loadCommandContext, loadTaskFromContext, } from "../shared/task-backend.js";
8
+ import { backendIsLocalFileBackend, getTaskStore } from "../shared/task-store.js";
9
+ import { extractDocSection, isVerifyStepsFilled, nowIso, requiresVerify, toStringArray, } from "./shared.js";
10
+ async function loadPlanTask(opts) {
11
+ const ctx = opts.ctx ??
12
+ (await loadCommandContext({ cwd: opts.cwd, rootOverride: opts.rootOverride ?? null }));
13
+ const backend = ctx.taskBackend;
14
+ const useStore = backendIsLocalFileBackend(ctx);
15
+ const store = useStore ? getTaskStore(ctx) : null;
16
+ const task = useStore
17
+ ? await store.get(opts.taskId)
18
+ : await loadTaskFromContext({ ctx, taskId: opts.taskId });
19
+ if (!backend.getTaskDoc || !backend.writeTask) {
103
20
  throw new CliError({
104
21
  exitCode: 2,
105
22
  code: "E_USAGE",
106
- message: usageMessage(TASK_PLAN_USAGE, TASK_PLAN_USAGE_EXAMPLE),
23
+ message: backendNotSupportedMessage("task docs"),
107
24
  });
108
25
  }
26
+ return { ctx, backend: backend, task, useStore, store };
27
+ }
28
+ export async function cmdTaskPlanSet(opts) {
109
29
  try {
110
- const { backend, config, resolved, task } = await loadBackendTask({
30
+ const { ctx, backend, task, useStore, store } = await loadPlanTask({
31
+ ctx: opts.ctx,
111
32
  cwd: opts.cwd,
112
33
  rootOverride: opts.rootOverride,
113
- taskId,
34
+ taskId: opts.taskId,
114
35
  });
115
- if (!backend.getTaskDoc || !backend.setTaskDoc || !backend.writeTask) {
36
+ const config = ctx.config;
37
+ const resolved = ctx.resolvedProject;
38
+ const hasText = typeof opts.text === "string";
39
+ const hasFile = typeof opts.file === "string";
40
+ if (hasText === hasFile) {
116
41
  throw new CliError({
117
42
  exitCode: 2,
118
43
  code: "E_USAGE",
119
- message: backendNotSupportedMessage("task docs"),
44
+ message: "Provide exactly one of --text or --file.",
120
45
  });
121
46
  }
122
- if (subcommand === "set") {
123
- const flags = parsePlanSetFlags(restArgs);
124
- const hasText = flags.text !== undefined;
125
- const hasFile = flags.file !== undefined;
126
- if (hasText === hasFile) {
47
+ let updatedBy;
48
+ if (typeof opts.updatedBy === "string") {
49
+ const trimmed = opts.updatedBy.trim();
50
+ if (!trimmed) {
127
51
  throw new CliError({
128
52
  exitCode: 2,
129
53
  code: "E_USAGE",
130
- message: usageMessage(TASK_PLAN_SET_USAGE, TASK_PLAN_SET_USAGE_EXAMPLE),
54
+ message: "Invalid value for --updated-by: empty.",
131
55
  });
132
56
  }
133
- let updatedBy;
134
- if (flags.updatedBy !== undefined) {
135
- const trimmed = flags.updatedBy.trim();
136
- if (!trimmed) {
57
+ updatedBy = trimmed;
58
+ }
59
+ let text = opts.text ?? "";
60
+ if (hasFile) {
61
+ try {
62
+ text = await readFile(path.resolve(opts.cwd, opts.file ?? ""), "utf8");
63
+ }
64
+ catch (err) {
65
+ throw mapCoreError(err, { command: "task plan set", filePath: opts.file ?? "" });
66
+ }
67
+ }
68
+ const existingDoc = useStore
69
+ ? String(task.doc ?? "")
70
+ : (typeof task.doc === "string" ? task.doc : "") || (await backend.getTaskDoc(task.id));
71
+ const baseDoc = ensureDocSections(existingDoc ?? "", config.tasks.doc.required_sections);
72
+ const nextDoc = ensureDocSections(setMarkdownSection(baseDoc, "Plan", text), config.tasks.doc.required_sections);
73
+ const nextTask = {
74
+ ...task,
75
+ doc: nextDoc,
76
+ plan_approval: { state: "pending", updated_at: null, updated_by: null, note: null },
77
+ ...(updatedBy ? { doc_updated_by: updatedBy } : {}),
78
+ };
79
+ await (useStore ? store.update(opts.taskId, () => nextTask) : backend.writeTask(nextTask));
80
+ const readmePath = path.join(resolved.gitRoot, config.paths.workflow_dir, task.id, "README.md");
81
+ process.stdout.write(`${readmePath}\n`);
82
+ return 0;
83
+ }
84
+ catch (err) {
85
+ if (err instanceof CliError)
86
+ throw err;
87
+ throw mapBackendError(err, { command: "task plan set", root: opts.rootOverride ?? null });
88
+ }
89
+ }
90
+ export async function cmdTaskPlanApprove(opts) {
91
+ try {
92
+ const { ctx, backend, task, useStore, store } = await loadPlanTask({
93
+ ctx: opts.ctx,
94
+ cwd: opts.cwd,
95
+ rootOverride: opts.rootOverride,
96
+ taskId: opts.taskId,
97
+ });
98
+ const config = ctx.config;
99
+ const by = String(opts.by ?? "").trim();
100
+ if (!by) {
101
+ throw new CliError({
102
+ exitCode: 2,
103
+ code: "E_USAGE",
104
+ message: "Invalid value for --by: empty.",
105
+ });
106
+ }
107
+ const note = typeof opts.note === "string" ? opts.note.trim() : "";
108
+ const existingDoc = useStore
109
+ ? String(task.doc ?? "")
110
+ : (typeof task.doc === "string" ? task.doc : "") || (await backend.getTaskDoc(task.id));
111
+ const baseDoc = ensureDocSections(existingDoc ?? "", config.tasks.doc.required_sections);
112
+ const plan = extractDocSection(baseDoc, "Plan");
113
+ if (!plan || plan.trim().length === 0) {
114
+ throw new CliError({
115
+ exitCode: 3,
116
+ code: "E_VALIDATION",
117
+ message: `${task.id}: cannot approve plan: ## Plan section is missing or empty`,
118
+ });
119
+ }
120
+ const enforceVerifySteps = config.tasks.verify.enforce_on_plan_approve !== false;
121
+ if (enforceVerifySteps) {
122
+ const tags = toStringArray(task.tags);
123
+ const requireStepsTags = config.tasks.verify.require_steps_for_tags ?? config.tasks.verify.required_tags;
124
+ const spikeTag = (config.tasks.verify.spike_tag ?? "spike").trim().toLowerCase();
125
+ const verifyRequired = requiresVerify(tags, requireStepsTags);
126
+ const isSpike = tags.some((tag) => tag.trim().toLowerCase() === spikeTag);
127
+ if (verifyRequired || isSpike) {
128
+ const verifySteps = extractDocSection(baseDoc, "Verify Steps");
129
+ if (!isVerifyStepsFilled(verifySteps)) {
137
130
  throw new CliError({
138
- exitCode: 2,
139
- code: "E_USAGE",
140
- message: "--updated-by must be non-empty",
131
+ exitCode: 3,
132
+ code: "E_VALIDATION",
133
+ message: `${task.id}: cannot approve plan: ## Verify Steps section is missing/empty/unfilled ` +
134
+ "(fill it before approving plan)",
141
135
  });
142
136
  }
143
- updatedBy = trimmed;
144
137
  }
145
- let text = flags.text ?? "";
146
- if (hasFile) {
147
- try {
148
- text = await readFile(path.resolve(opts.cwd, flags.file ?? ""), "utf8");
149
- }
150
- catch (err) {
151
- throw mapCoreError(err, { command: "task plan set", filePath: flags.file ?? "" });
138
+ if (isSpike) {
139
+ const notes = extractDocSection(baseDoc, "Notes");
140
+ if (!notes || notes.trim().length === 0) {
141
+ throw new CliError({
142
+ exitCode: 3,
143
+ code: "E_VALIDATION",
144
+ message: `${task.id}: cannot approve plan for spike: ## Notes section is missing or empty ` +
145
+ "(include Findings/Decision/Next Steps)",
146
+ });
152
147
  }
153
148
  }
154
- const existingDoc = (typeof task.doc === "string" ? task.doc : "") || (await backend.getTaskDoc(task.id));
155
- const baseDoc = ensureDocSections(existingDoc ?? "", config.tasks.doc.required_sections);
156
- const nextDoc = ensureDocSections(setMarkdownSection(baseDoc, "Plan", text), config.tasks.doc.required_sections);
157
- await backend.writeTask({
158
- ...task,
159
- doc: nextDoc,
160
- plan_approval: { state: "pending", updated_at: null, updated_by: null, note: null },
161
- ...(updatedBy ? { doc_updated_by: updatedBy } : {}),
149
+ }
150
+ const nextTask = {
151
+ ...task,
152
+ plan_approval: {
153
+ state: "approved",
154
+ updated_at: nowIso(),
155
+ updated_by: by,
156
+ note: note || null,
157
+ },
158
+ };
159
+ await (useStore ? store.update(opts.taskId, () => nextTask) : backend.writeTask(nextTask));
160
+ return 0;
161
+ }
162
+ catch (err) {
163
+ if (err instanceof CliError)
164
+ throw err;
165
+ throw mapBackendError(err, { command: "task plan approve", root: opts.rootOverride ?? null });
166
+ }
167
+ }
168
+ export async function cmdTaskPlanReject(opts) {
169
+ try {
170
+ const { ctx, backend, task, useStore, store } = await loadPlanTask({
171
+ ctx: opts.ctx,
172
+ cwd: opts.cwd,
173
+ rootOverride: opts.rootOverride,
174
+ taskId: opts.taskId,
175
+ });
176
+ const config = ctx.config;
177
+ const by = String(opts.by ?? "").trim();
178
+ if (!by) {
179
+ throw new CliError({
180
+ exitCode: 2,
181
+ code: "E_USAGE",
182
+ message: "Invalid value for --by: empty.",
162
183
  });
163
- const readmePath = path.join(resolved.gitRoot, config.paths.workflow_dir, task.id, "README.md");
164
- process.stdout.write(`${readmePath}\n`);
165
- return 0;
166
184
  }
167
- if (subcommand === "approve" || subcommand === "reject") {
168
- const flags = parsePlanDecisionFlags(restArgs);
169
- const by = (flags.by ?? "").trim();
170
- if (!by) {
171
- const usage = subcommand === "approve" ? TASK_PLAN_APPROVE_USAGE : TASK_PLAN_REJECT_USAGE;
172
- const example = subcommand === "approve"
173
- ? TASK_PLAN_APPROVE_USAGE_EXAMPLE
174
- : TASK_PLAN_REJECT_USAGE_EXAMPLE;
175
- throw new CliError({ exitCode: 2, code: "E_USAGE", message: usageMessage(usage, example) });
176
- }
177
- const note = typeof flags.note === "string" ? flags.note.trim() : "";
178
- if (subcommand === "reject" && note.length === 0) {
179
- throw new CliError({
180
- exitCode: 2,
181
- code: "E_USAGE",
182
- message: usageMessage(TASK_PLAN_REJECT_USAGE, TASK_PLAN_REJECT_USAGE_EXAMPLE),
183
- });
184
- }
185
- const existingDoc = (typeof task.doc === "string" ? task.doc : "") || (await backend.getTaskDoc(task.id));
186
- const baseDoc = ensureDocSections(existingDoc ?? "", config.tasks.doc.required_sections);
187
- const plan = extractDocSection(baseDoc, "Plan");
188
- if (!plan || plan.trim().length === 0) {
189
- throw new CliError({
190
- exitCode: 3,
191
- code: "E_VALIDATION",
192
- message: `${task.id}: cannot ${subcommand} plan: ## Plan section is missing or empty`,
193
- });
194
- }
195
- await backend.writeTask({
196
- ...task,
197
- plan_approval: {
198
- state: subcommand === "approve" ? "approved" : "rejected",
199
- updated_at: nowIso(),
200
- updated_by: by,
201
- note: note || null,
202
- },
185
+ const note = String(opts.note ?? "").trim();
186
+ if (!note) {
187
+ throw new CliError({
188
+ exitCode: 2,
189
+ code: "E_USAGE",
190
+ message: "Invalid value for --note: empty.",
203
191
  });
204
- return 0;
205
192
  }
206
- throw new CliError({
207
- exitCode: 2,
208
- code: "E_USAGE",
209
- message: usageMessage(TASK_PLAN_USAGE, TASK_PLAN_USAGE_EXAMPLE),
210
- });
193
+ const existingDoc = useStore
194
+ ? String(task.doc ?? "")
195
+ : (typeof task.doc === "string" ? task.doc : "") || (await backend.getTaskDoc(task.id));
196
+ const baseDoc = ensureDocSections(existingDoc ?? "", config.tasks.doc.required_sections);
197
+ const plan = extractDocSection(baseDoc, "Plan");
198
+ if (!plan || plan.trim().length === 0) {
199
+ throw new CliError({
200
+ exitCode: 3,
201
+ code: "E_VALIDATION",
202
+ message: `${task.id}: cannot reject plan: ## Plan section is missing or empty`,
203
+ });
204
+ }
205
+ const nextTask = {
206
+ ...task,
207
+ plan_approval: {
208
+ state: "rejected",
209
+ updated_at: nowIso(),
210
+ updated_by: by,
211
+ note: note || null,
212
+ },
213
+ };
214
+ await (useStore ? store.update(opts.taskId, () => nextTask) : backend.writeTask(nextTask));
215
+ return 0;
211
216
  }
212
217
  catch (err) {
213
218
  if (err instanceof CliError)
214
219
  throw err;
215
- throw mapBackendError(err, { command: "task plan", root: opts.rootOverride ?? null });
220
+ throw mapBackendError(err, { command: "task plan reject", root: opts.rootOverride ?? null });
216
221
  }
217
222
  }
@@ -1,4 +1,6 @@
1
+ import { type CommandContext } from "../shared/task-backend.js";
1
2
  export declare function cmdReady(opts: {
3
+ ctx?: CommandContext;
2
4
  cwd: string;
3
5
  rootOverride?: string;
4
6
  taskId: string;
@@ -1 +1 @@
1
- {"version":3,"file":"ready.d.ts","sourceRoot":"","sources":["../../../src/commands/task/ready.ts"],"names":[],"mappings":"AAMA,wBAAsB,QAAQ,CAAC,IAAI,EAAE;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,MAAM,CAAC,CAqDlB"}
1
+ {"version":3,"file":"ready.d.ts","sourceRoot":"","sources":["../../../src/commands/task/ready.ts"],"names":[],"mappings":"AAEA,OAAO,EAAsB,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAIpF,wBAAsB,QAAQ,CAAC,IAAI,EAAE;IACnC,GAAG,CAAC,EAAE,cAAc,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,MAAM,CAAC,CAoDlB"}
@@ -1,14 +1,12 @@
1
- import { loadTaskBackend } from "../../backends/task-backend.js";
2
1
  import { mapBackendError } from "../../cli/error-map.js";
3
2
  import { successMessage, unknownEntityMessage, warnMessage } from "../../cli/output.js";
3
+ import { loadCommandContext } from "../shared/task-backend.js";
4
4
  import { buildDependencyState } from "./shared.js";
5
5
  export async function cmdReady(opts) {
6
6
  try {
7
- const { backend } = await loadTaskBackend({
8
- cwd: opts.cwd,
9
- rootOverride: opts.rootOverride ?? null,
10
- });
11
- const tasks = await backend.listTasks();
7
+ const ctx = opts.ctx ??
8
+ (await loadCommandContext({ cwd: opts.cwd, rootOverride: opts.rootOverride ?? null }));
9
+ const tasks = await ctx.taskBackend.listTasks();
12
10
  const depState = buildDependencyState(tasks);
13
11
  const task = tasks.find((item) => item.id === opts.taskId);
14
12
  const warnings = [];