agentplane 0.3.9 → 0.3.11

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 (404) hide show
  1. package/assets/AGENTS.md +4 -2
  2. package/assets/agents/CODER.json +1 -1
  3. package/assets/policy/dod.core.md +1 -1
  4. package/assets/policy/governance.md +5 -3
  5. package/assets/policy/incidents.md +19 -77
  6. package/assets/policy/workflow.branch_pr.md +2 -0
  7. package/assets/policy/workflow.direct.md +3 -1
  8. package/bin/agentplane.js +56 -1
  9. package/bin/runtime-watch.js +1 -0
  10. package/bin/stale-dist-policy.d.ts +1 -1
  11. package/bin/stale-dist-policy.js +13 -0
  12. package/dist/.build-manifest.json +462 -202
  13. package/dist/cli/bootstrap-guide.d.ts +1 -0
  14. package/dist/cli/bootstrap-guide.d.ts.map +1 -1
  15. package/dist/cli/bootstrap-guide.js +20 -1
  16. package/dist/cli/command-guide.d.ts.map +1 -1
  17. package/dist/cli/command-guide.js +2 -1
  18. package/dist/cli/command-invocations.d.ts.map +1 -1
  19. package/dist/cli/command-invocations.js +6 -1
  20. package/dist/cli/command-snippets.d.ts +2 -0
  21. package/dist/cli/command-snippets.d.ts.map +1 -1
  22. package/dist/cli/command-snippets.js +2 -0
  23. package/dist/cli/run-cli/command-catalog/core.d.ts +1 -1
  24. package/dist/cli/run-cli/command-catalog/core.d.ts.map +1 -1
  25. package/dist/cli/run-cli/command-catalog/core.js +10 -0
  26. package/dist/cli/run-cli/command-catalog/project.d.ts +1 -1
  27. package/dist/cli/run-cli/command-catalog/project.d.ts.map +1 -1
  28. package/dist/cli/run-cli/command-catalog/project.js +3 -1
  29. package/dist/cli/run-cli/command-catalog/task.d.ts +1 -1
  30. package/dist/cli/run-cli/command-catalog/task.d.ts.map +1 -1
  31. package/dist/cli/run-cli/command-catalog/task.js +10 -0
  32. package/dist/cli/run-cli/command-catalog.d.ts +1 -1
  33. package/dist/cli/run-cli/command-catalog.d.ts.map +1 -1
  34. package/dist/cli/run-cli/commands/config.d.ts.map +1 -1
  35. package/dist/cli/run-cli/commands/config.js +13 -0
  36. package/dist/cli/run-cli/commands/core/preflight.d.ts.map +1 -1
  37. package/dist/cli/run-cli/commands/core/preflight.js +44 -1
  38. package/dist/cli/run-cli.js +2 -2
  39. package/dist/cli/run-cli.test-helpers.d.ts.map +1 -1
  40. package/dist/cli/run-cli.test-helpers.js +12 -0
  41. package/dist/commands/backend.d.ts.map +1 -1
  42. package/dist/commands/backend.js +4 -0
  43. package/dist/commands/branch/cleanup-merged.d.ts +2 -0
  44. package/dist/commands/branch/cleanup-merged.d.ts.map +1 -1
  45. package/dist/commands/branch/cleanup-merged.js +132 -28
  46. package/dist/commands/branch/work-start.d.ts.map +1 -1
  47. package/dist/commands/branch/work-start.js +60 -1
  48. package/dist/commands/cleanup/merged.command.d.ts +2 -0
  49. package/dist/commands/cleanup/merged.command.d.ts.map +1 -1
  50. package/dist/commands/cleanup/merged.command.js +24 -0
  51. package/dist/commands/doctor/branch-pr.d.ts +4 -0
  52. package/dist/commands/doctor/branch-pr.d.ts.map +1 -0
  53. package/dist/commands/doctor/branch-pr.js +96 -0
  54. package/dist/commands/doctor/fixes.d.ts +5 -0
  55. package/dist/commands/doctor/fixes.d.ts.map +1 -1
  56. package/dist/commands/doctor/fixes.js +70 -0
  57. package/dist/commands/doctor.run.d.ts.map +1 -1
  58. package/dist/commands/doctor.run.js +6 -1
  59. package/dist/commands/finish.run.d.ts.map +1 -1
  60. package/dist/commands/finish.run.js +11 -0
  61. package/dist/commands/finish.spec.d.ts +11 -0
  62. package/dist/commands/finish.spec.d.ts.map +1 -1
  63. package/dist/commands/finish.spec.js +51 -0
  64. package/dist/commands/guard/impl/close-message.d.ts.map +1 -1
  65. package/dist/commands/guard/impl/close-message.js +23 -6
  66. package/dist/commands/guard/impl/commands.d.ts.map +1 -1
  67. package/dist/commands/guard/impl/commands.js +24 -2
  68. package/dist/commands/guard/impl/env.d.ts +1 -0
  69. package/dist/commands/guard/impl/env.d.ts.map +1 -1
  70. package/dist/commands/guard/impl/env.js +1 -0
  71. package/dist/commands/hooks/index.d.ts.map +1 -1
  72. package/dist/commands/hooks/index.js +98 -1
  73. package/dist/commands/incidents/advise.command.d.ts +15 -0
  74. package/dist/commands/incidents/advise.command.d.ts.map +1 -0
  75. package/dist/commands/incidents/advise.command.js +139 -0
  76. package/dist/commands/incidents/collect.command.d.ts +11 -0
  77. package/dist/commands/incidents/collect.command.d.ts.map +1 -0
  78. package/dist/commands/incidents/collect.command.js +72 -0
  79. package/dist/commands/incidents/incidents.command.d.ts +5 -0
  80. package/dist/commands/incidents/incidents.command.d.ts.map +1 -0
  81. package/dist/commands/incidents/incidents.command.js +21 -0
  82. package/dist/commands/incidents/shared.d.ts +76 -0
  83. package/dist/commands/incidents/shared.d.ts.map +1 -0
  84. package/dist/commands/incidents/shared.js +261 -0
  85. package/dist/commands/pr/check.d.ts.map +1 -1
  86. package/dist/commands/pr/check.js +249 -75
  87. package/dist/commands/pr/close-superseded.d.ts +9 -0
  88. package/dist/commands/pr/close-superseded.d.ts.map +1 -0
  89. package/dist/commands/pr/close-superseded.js +129 -0
  90. package/dist/commands/pr/close.d.ts +11 -0
  91. package/dist/commands/pr/close.d.ts.map +1 -0
  92. package/dist/commands/pr/close.js +116 -0
  93. package/dist/commands/pr/index.d.ts +2 -0
  94. package/dist/commands/pr/index.d.ts.map +1 -1
  95. package/dist/commands/pr/index.js +2 -0
  96. package/dist/commands/pr/integrate/artifacts.d.ts +7 -0
  97. package/dist/commands/pr/integrate/artifacts.d.ts.map +1 -1
  98. package/dist/commands/pr/integrate/artifacts.js +66 -1
  99. package/dist/commands/pr/integrate/cmd.d.ts.map +1 -1
  100. package/dist/commands/pr/integrate/cmd.js +20 -0
  101. package/dist/commands/pr/integrate/internal/bootstrap-guidance.d.ts +8 -0
  102. package/dist/commands/pr/integrate/internal/bootstrap-guidance.d.ts.map +1 -0
  103. package/dist/commands/pr/integrate/internal/bootstrap-guidance.js +59 -0
  104. package/dist/commands/pr/integrate/internal/finalize.d.ts.map +1 -1
  105. package/dist/commands/pr/integrate/internal/finalize.js +40 -12
  106. package/dist/commands/pr/integrate/internal/merge.d.ts +4 -0
  107. package/dist/commands/pr/integrate/internal/merge.d.ts.map +1 -1
  108. package/dist/commands/pr/integrate/internal/merge.js +59 -15
  109. package/dist/commands/pr/integrate/internal/post-integrate-bootstrap.d.ts +13 -0
  110. package/dist/commands/pr/integrate/internal/post-integrate-bootstrap.d.ts.map +1 -0
  111. package/dist/commands/pr/integrate/internal/post-integrate-bootstrap.js +25 -0
  112. package/dist/commands/pr/integrate/internal/prepare.d.ts +3 -2
  113. package/dist/commands/pr/integrate/internal/prepare.d.ts.map +1 -1
  114. package/dist/commands/pr/integrate/internal/prepare.js +107 -19
  115. package/dist/commands/pr/internal/freshness.d.ts +20 -0
  116. package/dist/commands/pr/internal/freshness.d.ts.map +1 -0
  117. package/dist/commands/pr/internal/freshness.js +50 -0
  118. package/dist/commands/pr/internal/gh-api.d.ts +6 -0
  119. package/dist/commands/pr/internal/gh-api.d.ts.map +1 -0
  120. package/dist/commands/pr/internal/gh-api.js +80 -0
  121. package/dist/commands/pr/internal/note-store.d.ts +18 -0
  122. package/dist/commands/pr/internal/note-store.d.ts.map +1 -0
  123. package/dist/commands/pr/internal/note-store.js +66 -0
  124. package/dist/commands/pr/internal/pr-paths.d.ts +13 -0
  125. package/dist/commands/pr/internal/pr-paths.d.ts.map +1 -1
  126. package/dist/commands/pr/internal/pr-paths.js +13 -0
  127. package/dist/commands/pr/internal/review-template.d.ts +24 -4
  128. package/dist/commands/pr/internal/review-template.d.ts.map +1 -1
  129. package/dist/commands/pr/internal/review-template.js +221 -33
  130. package/dist/commands/pr/internal/sync.d.ts +41 -0
  131. package/dist/commands/pr/internal/sync.d.ts.map +1 -0
  132. package/dist/commands/pr/internal/sync.js +598 -0
  133. package/dist/commands/pr/note.d.ts.map +1 -1
  134. package/dist/commands/pr/note.js +37 -4
  135. package/dist/commands/pr/open.d.ts +1 -0
  136. package/dist/commands/pr/open.d.ts.map +1 -1
  137. package/dist/commands/pr/open.js +18 -54
  138. package/dist/commands/pr/pr.command.d.ts +15 -0
  139. package/dist/commands/pr/pr.command.d.ts.map +1 -1
  140. package/dist/commands/pr/pr.command.js +124 -5
  141. package/dist/commands/pr/update.d.ts.map +1 -1
  142. package/dist/commands/pr/update.js +58 -74
  143. package/dist/commands/recipes/impl/commands/cache-prune.d.ts.map +1 -1
  144. package/dist/commands/recipes/impl/commands/cache-prune.js +14 -0
  145. package/dist/commands/recipes/impl/commands/install.js +1 -1
  146. package/dist/commands/recipes/impl/commands/list-remote.d.ts.map +1 -1
  147. package/dist/commands/recipes/impl/commands/list-remote.js +1 -0
  148. package/dist/commands/recipes/impl/commands/remove.d.ts.map +1 -1
  149. package/dist/commands/recipes/impl/commands/remove.js +9 -1
  150. package/dist/commands/release/apply.command.d.ts.map +1 -1
  151. package/dist/commands/release/apply.command.js +12 -17
  152. package/dist/commands/release/apply.preflight.d.ts.map +1 -1
  153. package/dist/commands/release/apply.preflight.js +1 -1
  154. package/dist/commands/shared/approval-requirements.d.ts +5 -7
  155. package/dist/commands/shared/approval-requirements.d.ts.map +1 -1
  156. package/dist/commands/shared/approval-requirements.js +3 -73
  157. package/dist/commands/shared/gh-transport.d.ts +16 -0
  158. package/dist/commands/shared/gh-transport.d.ts.map +1 -0
  159. package/dist/commands/shared/gh-transport.js +71 -0
  160. package/dist/commands/shared/git-diff.d.ts +3 -1
  161. package/dist/commands/shared/git-diff.d.ts.map +1 -1
  162. package/dist/commands/shared/git-diff.js +10 -2
  163. package/dist/commands/shared/git-ops.d.ts +1 -0
  164. package/dist/commands/shared/git-ops.d.ts.map +1 -1
  165. package/dist/commands/shared/git-ops.js +15 -0
  166. package/dist/commands/shared/git-worktree.d.ts +2 -0
  167. package/dist/commands/shared/git-worktree.d.ts.map +1 -1
  168. package/dist/commands/shared/git-worktree.js +22 -2
  169. package/dist/commands/shared/network-approval.d.ts +2 -0
  170. package/dist/commands/shared/network-approval.d.ts.map +1 -1
  171. package/dist/commands/shared/network-approval.js +1 -1
  172. package/dist/commands/shared/post-commit-pr-artifacts.d.ts +9 -0
  173. package/dist/commands/shared/post-commit-pr-artifacts.d.ts.map +1 -0
  174. package/dist/commands/shared/post-commit-pr-artifacts.js +22 -0
  175. package/dist/commands/shared/pr-meta.d.ts +29 -0
  176. package/dist/commands/shared/pr-meta.d.ts.map +1 -1
  177. package/dist/commands/shared/pr-meta.js +152 -3
  178. package/dist/commands/shared/task-backend.d.ts +9 -0
  179. package/dist/commands/shared/task-backend.d.ts.map +1 -1
  180. package/dist/commands/shared/task-backend.js +34 -22
  181. package/dist/commands/shared/task-local-freshness.d.ts +13 -0
  182. package/dist/commands/shared/task-local-freshness.d.ts.map +1 -0
  183. package/dist/commands/shared/task-local-freshness.js +20 -0
  184. package/dist/commands/shared/task-mutation.d.ts +2 -0
  185. package/dist/commands/shared/task-mutation.d.ts.map +1 -1
  186. package/dist/commands/shared/task-mutation.js +7 -0
  187. package/dist/commands/task/block.d.ts.map +1 -1
  188. package/dist/commands/task/block.js +1 -0
  189. package/dist/commands/task/close-duplicate.d.ts.map +1 -1
  190. package/dist/commands/task/close-duplicate.js +34 -1
  191. package/dist/commands/task/close-shared.d.ts.map +1 -1
  192. package/dist/commands/task/close-shared.js +1 -0
  193. package/dist/commands/task/derive.js +1 -1
  194. package/dist/commands/task/doc-template.d.ts.map +1 -1
  195. package/dist/commands/task/doc-template.js +7 -11
  196. package/dist/commands/task/findings-add.command.d.ts +20 -0
  197. package/dist/commands/task/findings-add.command.d.ts.map +1 -0
  198. package/dist/commands/task/findings-add.command.js +165 -0
  199. package/dist/commands/task/findings.command.d.ts +7 -0
  200. package/dist/commands/task/findings.command.d.ts.map +1 -0
  201. package/dist/commands/task/findings.command.js +20 -0
  202. package/dist/commands/task/findings.d.ts +63 -0
  203. package/dist/commands/task/findings.d.ts.map +1 -0
  204. package/dist/commands/task/findings.js +188 -0
  205. package/dist/commands/task/finish-shared.d.ts +1 -0
  206. package/dist/commands/task/finish-shared.d.ts.map +1 -1
  207. package/dist/commands/task/finish-shared.js +60 -3
  208. package/dist/commands/task/finish.d.ts +10 -0
  209. package/dist/commands/task/finish.d.ts.map +1 -1
  210. package/dist/commands/task/finish.js +143 -0
  211. package/dist/commands/task/hosted-close-pr.command.d.ts +11 -0
  212. package/dist/commands/task/hosted-close-pr.command.d.ts.map +1 -0
  213. package/dist/commands/task/hosted-close-pr.command.js +414 -0
  214. package/dist/commands/task/hosted-close.command.d.ts.map +1 -1
  215. package/dist/commands/task/hosted-close.command.js +49 -1
  216. package/dist/commands/task/hosted-merge-sync.d.ts +38 -0
  217. package/dist/commands/task/hosted-merge-sync.d.ts.map +1 -1
  218. package/dist/commands/task/hosted-merge-sync.js +249 -17
  219. package/dist/commands/task/index.d.ts +1 -0
  220. package/dist/commands/task/index.d.ts.map +1 -1
  221. package/dist/commands/task/index.js +1 -0
  222. package/dist/commands/task/new.d.ts +1 -0
  223. package/dist/commands/task/new.d.ts.map +1 -1
  224. package/dist/commands/task/new.js +140 -30
  225. package/dist/commands/task/new.spec.d.ts.map +1 -1
  226. package/dist/commands/task/new.spec.js +7 -0
  227. package/dist/commands/task/normalize.command.d.ts +2 -0
  228. package/dist/commands/task/normalize.command.d.ts.map +1 -1
  229. package/dist/commands/task/normalize.command.js +45 -0
  230. package/dist/commands/task/normalize.d.ts +2 -0
  231. package/dist/commands/task/normalize.d.ts.map +1 -1
  232. package/dist/commands/task/normalize.js +85 -8
  233. package/dist/commands/task/plan.d.ts.map +1 -1
  234. package/dist/commands/task/plan.js +7 -10
  235. package/dist/commands/task/set-status.d.ts.map +1 -1
  236. package/dist/commands/task/set-status.js +1 -0
  237. package/dist/commands/task/shared/docs.d.ts +6 -0
  238. package/dist/commands/task/shared/docs.d.ts.map +1 -1
  239. package/dist/commands/task/shared/docs.js +14 -0
  240. package/dist/commands/task/shared/transition-command.d.ts +2 -0
  241. package/dist/commands/task/shared/transition-command.d.ts.map +1 -1
  242. package/dist/commands/task/shared/transition-command.js +1 -0
  243. package/dist/commands/task/shared/transitions.d.ts.map +1 -1
  244. package/dist/commands/task/shared/transitions.js +11 -1
  245. package/dist/commands/task/shared.d.ts +1 -1
  246. package/dist/commands/task/shared.d.ts.map +1 -1
  247. package/dist/commands/task/shared.js +1 -1
  248. package/dist/commands/task/start-ready.d.ts.map +1 -1
  249. package/dist/commands/task/start-ready.js +98 -1
  250. package/dist/commands/task/start.d.ts.map +1 -1
  251. package/dist/commands/task/start.js +18 -10
  252. package/dist/commands/task/task.command.d.ts.map +1 -1
  253. package/dist/commands/task/task.command.js +4 -0
  254. package/dist/commands/task/verify-command-shared.d.ts +19 -0
  255. package/dist/commands/task/verify-command-shared.d.ts.map +1 -1
  256. package/dist/commands/task/verify-command-shared.js +152 -1
  257. package/dist/commands/task/verify-ok.command.d.ts.map +1 -1
  258. package/dist/commands/task/verify-ok.command.js +15 -2
  259. package/dist/commands/task/verify-record.d.ts +36 -0
  260. package/dist/commands/task/verify-record.d.ts.map +1 -1
  261. package/dist/commands/task/verify-record.js +193 -11
  262. package/dist/commands/task/verify-rework.command.d.ts.map +1 -1
  263. package/dist/commands/task/verify-rework.command.js +15 -2
  264. package/dist/commands/task/verify-show.command.d.ts +1 -1
  265. package/dist/commands/task/verify-show.command.d.ts.map +1 -1
  266. package/dist/commands/task/verify-show.command.js +28 -1
  267. package/dist/commands/upgrade.d.ts.map +1 -1
  268. package/dist/commands/upgrade.js +6 -1
  269. package/dist/commands/verify.run.d.ts.map +1 -1
  270. package/dist/commands/verify.run.js +12 -0
  271. package/dist/commands/verify.spec.d.ts +2 -6
  272. package/dist/commands/verify.spec.d.ts.map +1 -1
  273. package/dist/commands/verify.spec.js +30 -3
  274. package/dist/policy/engine.d.ts +3 -1
  275. package/dist/policy/engine.d.ts.map +1 -1
  276. package/dist/policy/engine.js +5 -6
  277. package/dist/policy/taxonomy.d.ts +17 -0
  278. package/dist/policy/taxonomy.d.ts.map +1 -0
  279. package/dist/policy/taxonomy.js +302 -0
  280. package/dist/policy/types.d.ts +2 -1
  281. package/dist/policy/types.d.ts.map +1 -1
  282. package/dist/runner/artifacts.d.ts.map +1 -1
  283. package/dist/runner/artifacts.js +2 -0
  284. package/dist/runner/context/base-prompts.d.ts +25 -0
  285. package/dist/runner/context/base-prompts.d.ts.map +1 -1
  286. package/dist/runner/context/base-prompts.js +182 -54
  287. package/dist/runner/context/recipe-context.d.ts.map +1 -1
  288. package/dist/runner/context/recipe-context.js +5 -0
  289. package/dist/runner/types.d.ts +12 -0
  290. package/dist/runner/types.d.ts.map +1 -1
  291. package/dist/runner/usecases/scenario-materialize-task.d.ts.map +1 -1
  292. package/dist/runner/usecases/scenario-materialize-task.js +81 -11
  293. package/dist/runner/usecases/task-run-inspect.d.ts.map +1 -1
  294. package/dist/runner/usecases/task-run-inspect.js +9 -7
  295. package/dist/runner/usecases/task-run-lifecycle-shared.d.ts.map +1 -1
  296. package/dist/runner/usecases/task-run-lifecycle-shared.js +8 -6
  297. package/dist/runner/usecases/task-run.d.ts.map +1 -1
  298. package/dist/runner/usecases/task-run.js +59 -12
  299. package/dist/runtime/approvals/index.d.ts +3 -0
  300. package/dist/runtime/approvals/index.d.ts.map +1 -0
  301. package/dist/runtime/approvals/index.js +1 -0
  302. package/dist/runtime/approvals/runtime.d.ts +12 -0
  303. package/dist/runtime/approvals/runtime.d.ts.map +1 -0
  304. package/dist/runtime/approvals/runtime.js +154 -0
  305. package/dist/runtime/approvals/types.d.ts +31 -0
  306. package/dist/runtime/approvals/types.d.ts.map +1 -0
  307. package/dist/runtime/approvals/types.js +1 -0
  308. package/dist/runtime/behavior/index.d.ts +3 -0
  309. package/dist/runtime/behavior/index.d.ts.map +1 -0
  310. package/dist/runtime/behavior/index.js +1 -0
  311. package/dist/runtime/behavior/resolve.d.ts +7 -0
  312. package/dist/runtime/behavior/resolve.d.ts.map +1 -0
  313. package/dist/runtime/behavior/resolve.js +66 -0
  314. package/dist/runtime/behavior/types.d.ts +25 -0
  315. package/dist/runtime/behavior/types.d.ts.map +1 -0
  316. package/dist/runtime/behavior/types.js +1 -0
  317. package/dist/runtime/capabilities/backend.d.ts +7 -0
  318. package/dist/runtime/capabilities/backend.d.ts.map +1 -0
  319. package/dist/runtime/capabilities/backend.js +104 -0
  320. package/dist/runtime/capabilities/index.d.ts +6 -0
  321. package/dist/runtime/capabilities/index.d.ts.map +1 -0
  322. package/dist/runtime/capabilities/index.js +4 -0
  323. package/dist/runtime/capabilities/recipe.d.ts +10 -0
  324. package/dist/runtime/capabilities/recipe.d.ts.map +1 -0
  325. package/dist/runtime/capabilities/recipe.js +123 -0
  326. package/dist/runtime/capabilities/registry.d.ts +6 -0
  327. package/dist/runtime/capabilities/registry.d.ts.map +1 -0
  328. package/dist/runtime/capabilities/registry.js +69 -0
  329. package/dist/runtime/capabilities/runner.d.ts +8 -0
  330. package/dist/runtime/capabilities/runner.d.ts.map +1 -0
  331. package/dist/runtime/capabilities/runner.js +73 -0
  332. package/dist/runtime/capabilities/types.d.ts +28 -0
  333. package/dist/runtime/capabilities/types.d.ts.map +1 -0
  334. package/dist/runtime/capabilities/types.js +1 -0
  335. package/dist/runtime/execution-profile/index.d.ts +3 -0
  336. package/dist/runtime/execution-profile/index.d.ts.map +1 -0
  337. package/dist/runtime/execution-profile/index.js +1 -0
  338. package/dist/runtime/execution-profile/resolve.d.ts +9 -0
  339. package/dist/runtime/execution-profile/resolve.d.ts.map +1 -0
  340. package/dist/runtime/execution-profile/resolve.js +80 -0
  341. package/dist/runtime/execution-profile/types.d.ts +27 -0
  342. package/dist/runtime/execution-profile/types.d.ts.map +1 -0
  343. package/dist/runtime/execution-profile/types.js +1 -0
  344. package/dist/runtime/explain/index.d.ts +3 -0
  345. package/dist/runtime/explain/index.d.ts.map +1 -0
  346. package/dist/runtime/explain/index.js +1 -0
  347. package/dist/runtime/explain/resolve.d.ts +14 -0
  348. package/dist/runtime/explain/resolve.d.ts.map +1 -0
  349. package/dist/runtime/explain/resolve.js +50 -0
  350. package/dist/runtime/explain/types.d.ts +28 -0
  351. package/dist/runtime/explain/types.d.ts.map +1 -0
  352. package/dist/runtime/explain/types.js +1 -0
  353. package/dist/runtime/harness/index.d.ts +4 -0
  354. package/dist/runtime/harness/index.d.ts.map +1 -0
  355. package/dist/runtime/harness/index.js +2 -0
  356. package/dist/runtime/harness/resolve-from-command-context.d.ts +4 -0
  357. package/dist/runtime/harness/resolve-from-command-context.d.ts.map +1 -0
  358. package/dist/runtime/harness/resolve-from-command-context.js +11 -0
  359. package/dist/runtime/harness/resolve.d.ts +13 -0
  360. package/dist/runtime/harness/resolve.d.ts.map +1 -0
  361. package/dist/runtime/harness/resolve.js +146 -0
  362. package/dist/runtime/harness/types.d.ts +65 -0
  363. package/dist/runtime/harness/types.d.ts.map +1 -0
  364. package/dist/runtime/harness/types.js +1 -0
  365. package/dist/runtime/incidents/index.d.ts +3 -0
  366. package/dist/runtime/incidents/index.d.ts.map +1 -0
  367. package/dist/runtime/incidents/index.js +1 -0
  368. package/dist/runtime/incidents/resolve.d.ts +26 -0
  369. package/dist/runtime/incidents/resolve.d.ts.map +1 -0
  370. package/dist/runtime/incidents/resolve.js +683 -0
  371. package/dist/runtime/incidents/types.d.ts +84 -0
  372. package/dist/runtime/incidents/types.d.ts.map +1 -0
  373. package/dist/runtime/incidents/types.js +1 -0
  374. package/dist/runtime/protocol/index.d.ts +3 -0
  375. package/dist/runtime/protocol/index.d.ts.map +1 -0
  376. package/dist/runtime/protocol/index.js +2 -0
  377. package/dist/runtime/protocol/resolve.d.ts +16 -0
  378. package/dist/runtime/protocol/resolve.d.ts.map +1 -0
  379. package/dist/runtime/protocol/resolve.js +36 -0
  380. package/dist/runtime/protocol/types.d.ts +36 -0
  381. package/dist/runtime/protocol/types.d.ts.map +1 -0
  382. package/dist/runtime/protocol/types.js +1 -0
  383. package/dist/runtime/task-intake/index.d.ts +3 -0
  384. package/dist/runtime/task-intake/index.d.ts.map +1 -0
  385. package/dist/runtime/task-intake/index.js +1 -0
  386. package/dist/runtime/task-intake/resolve.d.ts +48 -0
  387. package/dist/runtime/task-intake/resolve.d.ts.map +1 -0
  388. package/dist/runtime/task-intake/resolve.js +316 -0
  389. package/dist/runtime/task-intake/types.d.ts +117 -0
  390. package/dist/runtime/task-intake/types.d.ts.map +1 -0
  391. package/dist/runtime/task-intake/types.js +1 -0
  392. package/dist/shared/env.d.ts +1 -0
  393. package/dist/shared/env.d.ts.map +1 -1
  394. package/dist/shared/env.js +22 -1
  395. package/dist/shared/protected-paths.d.ts +4 -0
  396. package/dist/shared/protected-paths.d.ts.map +1 -1
  397. package/dist/shared/protected-paths.js +8 -4
  398. package/dist/usecases/context/resolve-context.d.ts +55 -6
  399. package/dist/usecases/context/resolve-context.d.ts.map +1 -1
  400. package/dist/usecases/context/resolve-context.js +96 -6
  401. package/dist/usecases/task/task-list-usecase.d.ts.map +1 -1
  402. package/dist/usecases/task/task-list-usecase.js +8 -2
  403. package/dist/usecases/task/task-new-usecase.js +4 -4
  404. package/package.json +2 -2
@@ -0,0 +1,165 @@
1
+ import { usageError } from "../../cli/spec/errors.js";
2
+ import { cmdTaskFindingsAdd } from "./findings.js";
3
+ export const taskFindingsAddSpec = {
4
+ id: ["task", "findings", "add"],
5
+ group: "Task",
6
+ summary: "Append a structured Findings/Notes block; incident promotion is default unless --local-only.",
7
+ synopsis: [
8
+ "agentplane task findings add <task-id> --observation <text> --impact <text> --resolution <text> [--local-only] [--repo-fixable] [--incident-scope <text>] [--incident-tag <tag>] [--incident-match <term>] [--incident-advice <text>] [--incident-rule <text>] [--updated-by <id>]",
9
+ ],
10
+ args: [{ name: "task-id", required: true, valueHint: "<task-id>" }],
11
+ options: [
12
+ {
13
+ kind: "string",
14
+ name: "observation",
15
+ valueHint: "<text>",
16
+ description: "Required. Observation field.",
17
+ },
18
+ { kind: "string", name: "impact", valueHint: "<text>", description: "Required. Impact field." },
19
+ {
20
+ kind: "string",
21
+ name: "resolution",
22
+ valueHint: "<text>",
23
+ description: "Required. Resolution field.",
24
+ },
25
+ {
26
+ kind: "boolean",
27
+ name: "promote",
28
+ description: "Compatibility flag. Promotion is the default unless `--local-only` is set.",
29
+ },
30
+ {
31
+ kind: "boolean",
32
+ name: "external",
33
+ description: "Compatibility flag. External incident metadata is the default unless `--local-only` is set.",
34
+ },
35
+ {
36
+ kind: "boolean",
37
+ name: "repo-fixable",
38
+ description: "Mark the structured finding as repo-fixable so it can promote into incidents.md.",
39
+ },
40
+ {
41
+ kind: "boolean",
42
+ name: "local-only",
43
+ default: false,
44
+ description: "Keep the entry task-local only; omit `Promotion: incident-candidate` and any explicit fixability marker.",
45
+ },
46
+ {
47
+ kind: "string",
48
+ name: "incident-scope",
49
+ valueHint: "<text>",
50
+ description: "Optional. IncidentScope override.",
51
+ },
52
+ {
53
+ kind: "string",
54
+ name: "incident-tag",
55
+ valueHint: "<tag>",
56
+ repeatable: true,
57
+ description: "Repeatable. IncidentTags entry.",
58
+ },
59
+ {
60
+ kind: "string",
61
+ name: "incident-match",
62
+ valueHint: "<term>",
63
+ repeatable: true,
64
+ description: "Repeatable. IncidentMatch entry.",
65
+ },
66
+ {
67
+ kind: "string",
68
+ name: "incident-advice",
69
+ valueHint: "<text>",
70
+ description: "Optional. IncidentAdvice field.",
71
+ },
72
+ {
73
+ kind: "string",
74
+ name: "incident-rule",
75
+ valueHint: "<text>",
76
+ description: "Optional. IncidentRule field.",
77
+ },
78
+ {
79
+ kind: "string",
80
+ name: "updated-by",
81
+ valueHint: "<id>",
82
+ description: "Optional. Override doc_updated_by metadata (must be non-empty).",
83
+ },
84
+ ],
85
+ examples: [
86
+ {
87
+ cmd: 'agentplane task findings add 202602030608-F1Q8AB --observation "GitHub API EOF retries were manual." --impact "Operators repeated the reconcile loop." --resolution "Switch the retry path to REST polling." --incident-scope "GitHub PR reconciliation" --incident-tag workflow --incident-tag github',
88
+ why: "Append a promotable external incident candidate without hand-editing the README or remembering hidden flags.",
89
+ },
90
+ {
91
+ cmd: 'agentplane task findings add 202602030608-F1Q8AB --observation "One manual follow-up remains." --impact "Task notes should stay local." --resolution "Track it in Findings only." --local-only',
92
+ why: "Keep an observation task-local when it should not feed incidents collection.",
93
+ },
94
+ ],
95
+ validateRaw: (raw) => {
96
+ for (const key of ["observation", "impact", "resolution"]) {
97
+ const value = raw.opts[key];
98
+ if (typeof value !== "string" || value.trim() === "") {
99
+ throw usageError({
100
+ spec: taskFindingsAddSpec,
101
+ message: `Missing required option: --${key}.`,
102
+ });
103
+ }
104
+ }
105
+ const updatedBy = raw.opts["updated-by"];
106
+ if (typeof updatedBy === "string" && updatedBy.trim() === "") {
107
+ throw usageError({ spec: taskFindingsAddSpec, message: "--updated-by must be non-empty." });
108
+ }
109
+ if (raw.opts["local-only"] === true &&
110
+ (raw.opts.promote === true || raw.opts.external === true || raw.opts["repo-fixable"] === true)) {
111
+ throw usageError({
112
+ spec: taskFindingsAddSpec,
113
+ message: "--local-only cannot be combined with --promote, --external, or --repo-fixable.",
114
+ });
115
+ }
116
+ if (raw.opts.external === true && raw.opts["repo-fixable"] === true) {
117
+ throw usageError({
118
+ spec: taskFindingsAddSpec,
119
+ message: "--external and --repo-fixable are mutually exclusive.",
120
+ });
121
+ }
122
+ },
123
+ parse: (raw) => {
124
+ const localOnly = raw.opts["local-only"] === true;
125
+ const repoFixable = raw.opts["repo-fixable"] === true;
126
+ const fixability = localOnly ? null : repoFixable ? "repo-fixable" : "external";
127
+ return {
128
+ taskId: String(raw.args["task-id"]),
129
+ observation: String(raw.opts.observation),
130
+ impact: String(raw.opts.impact),
131
+ resolution: String(raw.opts.resolution),
132
+ promote: !localOnly,
133
+ external: !localOnly,
134
+ fixability,
135
+ incidentScope: typeof raw.opts["incident-scope"] === "string" ? raw.opts["incident-scope"] : undefined,
136
+ incidentTags: raw.opts["incident-tag"] ?? [],
137
+ incidentMatch: raw.opts["incident-match"] ?? [],
138
+ incidentAdvice: typeof raw.opts["incident-advice"] === "string" ? raw.opts["incident-advice"] : undefined,
139
+ incidentRule: typeof raw.opts["incident-rule"] === "string" ? raw.opts["incident-rule"] : undefined,
140
+ updatedBy: typeof raw.opts["updated-by"] === "string" ? raw.opts["updated-by"] : undefined,
141
+ };
142
+ },
143
+ };
144
+ export function makeRunTaskFindingsAddHandler(getCtx) {
145
+ return async (ctx, p) => {
146
+ return await cmdTaskFindingsAdd({
147
+ ctx: await getCtx("task findings add"),
148
+ cwd: ctx.cwd,
149
+ rootOverride: ctx.rootOverride,
150
+ taskId: p.taskId,
151
+ observation: p.observation,
152
+ impact: p.impact,
153
+ resolution: p.resolution,
154
+ promote: p.promote,
155
+ external: p.external,
156
+ fixability: p.fixability === "repo-fixable" ? "repo-fixable" : null,
157
+ incidentScope: p.incidentScope,
158
+ incidentTags: p.incidentTags,
159
+ incidentMatch: p.incidentMatch,
160
+ incidentAdvice: p.incidentAdvice,
161
+ incidentRule: p.incidentRule,
162
+ updatedBy: p.updatedBy,
163
+ });
164
+ };
165
+ }
@@ -0,0 +1,7 @@
1
+ import type { CommandCtx, CommandSpec } from "../../cli/spec/spec.js";
2
+ export type TaskFindingsParsed = {
3
+ subcommand?: string;
4
+ };
5
+ export declare const taskFindingsSpec: CommandSpec<TaskFindingsParsed>;
6
+ export declare function runTaskFindings(_ctx: CommandCtx, p: TaskFindingsParsed): Promise<number>;
7
+ //# sourceMappingURL=findings.command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"findings.command.d.ts","sourceRoot":"","sources":["../../../src/commands/task/findings.command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAGtE,MAAM,MAAM,kBAAkB,GAAG;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,WAAW,CAAC,kBAAkB,CAY5D,CAAC;AAEF,wBAAsB,eAAe,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAM9F"}
@@ -0,0 +1,20 @@
1
+ import { loadDirectSubcommandNames, throwGroupCommandUsage } from "../../cli/group-command.js";
2
+ export const taskFindingsSpec = {
3
+ id: ["task", "findings"],
4
+ group: "Task",
5
+ summary: "Structured Findings/Notes commands (incident promotion is default unless --local-only).",
6
+ synopsis: [
7
+ "agentplane task findings add <task-id> --observation <text> --impact <text> --resolution <text> [--local-only] [--incident-scope <text>] [--incident-tag <tag>] [--incident-match <term>] [--incident-advice <text>] [--incident-rule <text>] [--updated-by <id>]",
8
+ ],
9
+ args: [{ name: "subcommand", required: false, valueHint: "<add>" }],
10
+ parse: (raw) => ({
11
+ subcommand: typeof raw.args.subcommand === "string" ? raw.args.subcommand : undefined,
12
+ }),
13
+ };
14
+ export async function runTaskFindings(_ctx, p) {
15
+ throwGroupCommandUsage({
16
+ spec: taskFindingsSpec,
17
+ cmd: p.subcommand ? [p.subcommand] : [],
18
+ subcommands: await loadDirectSubcommandNames(["task", "findings"]),
19
+ });
20
+ }
@@ -0,0 +1,63 @@
1
+ import { type AgentplaneConfig } from "@agentplaneorg/core";
2
+ import type { TaskData } from "../../backends/task-backend.js";
3
+ import { type CommandContext } from "../shared/task-backend.js";
4
+ import { type TaskStoreIntent } from "../shared/task-store.js";
5
+ export declare function renderStructuredFindingBlock(opts: {
6
+ observation: string;
7
+ impact: string;
8
+ resolution: string;
9
+ promote: boolean;
10
+ external: boolean;
11
+ fixability?: "repo-fixable" | null;
12
+ incidentScope?: string;
13
+ incidentTags: readonly string[];
14
+ incidentMatch: readonly string[];
15
+ incidentAdvice?: string;
16
+ incidentRule?: string;
17
+ }): string;
18
+ export type StructuredFindingMutationPlan = {
19
+ targetSection: string;
20
+ expectedCurrentText: string | null;
21
+ intents: readonly TaskStoreIntent[];
22
+ };
23
+ export declare function buildStructuredFindingMutationPlan(opts: {
24
+ current: TaskData;
25
+ config: AgentplaneConfig;
26
+ observation: string;
27
+ impact: string;
28
+ resolution: string;
29
+ promote: boolean;
30
+ external: boolean;
31
+ fixability?: "repo-fixable" | null;
32
+ incidentScope?: string;
33
+ incidentTags: readonly string[];
34
+ incidentMatch: readonly string[];
35
+ incidentAdvice?: string;
36
+ incidentRule?: string;
37
+ updatedBy?: string;
38
+ }): StructuredFindingMutationPlan | null;
39
+ export declare function renderFindingsAddRegistryNote(opts: {
40
+ promote: boolean;
41
+ external: boolean;
42
+ taskId: string;
43
+ branchPr?: boolean;
44
+ }): string;
45
+ export declare function cmdTaskFindingsAdd(opts: {
46
+ ctx?: CommandContext;
47
+ cwd: string;
48
+ rootOverride?: string;
49
+ taskId: string;
50
+ observation: string;
51
+ impact: string;
52
+ resolution: string;
53
+ promote: boolean;
54
+ external: boolean;
55
+ fixability?: "repo-fixable" | null;
56
+ incidentScope?: string;
57
+ incidentTags: string[];
58
+ incidentMatch: string[];
59
+ incidentAdvice?: string;
60
+ incidentRule?: string;
61
+ updatedBy?: string;
62
+ }): Promise<number>;
63
+ //# sourceMappingURL=findings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"findings.d.ts","sourceRoot":"","sources":["../../../src/commands/task/findings.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,gBAAgB,EACtB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAI/D,OAAO,EAAsB,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAEpF,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,yBAAyB,CAAC;AAoCjC,wBAAgB,4BAA4B,CAAC,IAAI,EAAE;IACjD,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;IACnC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GAAG,MAAM,CAkBT;AAQD,MAAM,MAAM,6BAA6B,GAAG;IAC1C,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,OAAO,EAAE,SAAS,eAAe,EAAE,CAAC;CACrC,CAAC;AAEF,wBAAgB,kCAAkC,CAAC,IAAI,EAAE;IACvD,OAAO,EAAE,QAAQ,CAAC;IAClB,MAAM,EAAE,gBAAgB,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;IACnC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,6BAA6B,GAAG,IAAI,CA0CvC;AAED,wBAAgB,6BAA6B,CAAC,IAAI,EAAE;IAClD,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,GAAG,MAAM,CAcT;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,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;IACnC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,MAAM,CAAC,CA4ElB"}
@@ -0,0 +1,188 @@
1
+ import { ensureDocSections, normalizeTaskDoc, setMarkdownSection, } from "@agentplaneorg/core";
2
+ import { mapBackendError } from "../../cli/error-map.js";
3
+ import { infoMessage } from "../../cli/output.js";
4
+ import { CliError } from "../../shared/errors.js";
5
+ import { loadCommandContext } from "../shared/task-backend.js";
6
+ import { applyTaskMutation } from "../shared/task-mutation.js";
7
+ import { setTaskSectionIntent, touchTaskDocMetaIntent, } from "../shared/task-store.js";
8
+ import { resolveWritableDocSections } from "./shared.js";
9
+ import { extractDocSection, extractTaskObservationSection, normalizeTaskDocVersion, taskObservationSectionName, } from "./shared/docs.js";
10
+ function ensureNonEmptyFlag(name, value) {
11
+ const trimmed = value.trim();
12
+ if (!trimmed) {
13
+ throw new CliError({
14
+ exitCode: 2,
15
+ code: "E_USAGE",
16
+ message: `Invalid value for --${name}: empty.`,
17
+ });
18
+ }
19
+ return trimmed;
20
+ }
21
+ function dedupeTrimmed(values) {
22
+ const seen = new Set();
23
+ const out = [];
24
+ for (const raw of values) {
25
+ const trimmed = raw.trim();
26
+ if (!trimmed)
27
+ continue;
28
+ const key = trimmed.toLowerCase();
29
+ if (seen.has(key))
30
+ continue;
31
+ seen.add(key);
32
+ out.push(trimmed);
33
+ }
34
+ return out;
35
+ }
36
+ export function renderStructuredFindingBlock(opts) {
37
+ const fixability = opts.fixability ?? (opts.external ? "external" : null);
38
+ const lines = [
39
+ `- Observation: ${ensureNonEmptyFlag("observation", opts.observation)}`,
40
+ ` Impact: ${ensureNonEmptyFlag("impact", opts.impact)}`,
41
+ ` Resolution: ${ensureNonEmptyFlag("resolution", opts.resolution)}`,
42
+ ];
43
+ if (opts.promote)
44
+ lines.push(" Promotion: incident-candidate");
45
+ if (fixability === "external")
46
+ lines.push(" Fixability: external");
47
+ if (fixability === "repo-fixable")
48
+ lines.push(" Fixability: repo-fixable");
49
+ if (opts.incidentScope?.trim())
50
+ lines.push(` IncidentScope: ${opts.incidentScope.trim()}`);
51
+ const tags = dedupeTrimmed(opts.incidentTags);
52
+ if (tags.length > 0)
53
+ lines.push(` IncidentTags: ${tags.join(", ")}`);
54
+ const match = dedupeTrimmed(opts.incidentMatch);
55
+ if (match.length > 0)
56
+ lines.push(` IncidentMatch: ${match.join(", ")}`);
57
+ if (opts.incidentAdvice?.trim())
58
+ lines.push(` IncidentAdvice: ${opts.incidentAdvice.trim()}`);
59
+ if (opts.incidentRule?.trim())
60
+ lines.push(` IncidentRule: ${opts.incidentRule.trim()}`);
61
+ return lines.join("\n");
62
+ }
63
+ function appendFindingBlock(existingSection, block) {
64
+ const current = (existingSection ?? "").trim();
65
+ if (!current)
66
+ return block;
67
+ return `${current}\n\n${block}`;
68
+ }
69
+ export function buildStructuredFindingMutationPlan(opts) {
70
+ const currentDocRaw = typeof opts.current.doc === "string" ? opts.current.doc : "";
71
+ const docVersion = normalizeTaskDocVersion(opts.current.doc_version);
72
+ const targetSection = taskObservationSectionName(docVersion);
73
+ const sectionOrder = resolveWritableDocSections({
74
+ allowedSections: opts.config.tasks.doc.sections,
75
+ requiredSections: opts.config.tasks.doc.required_sections,
76
+ targetSection,
77
+ });
78
+ const existingSection = extractTaskObservationSection(currentDocRaw, docVersion);
79
+ const block = renderStructuredFindingBlock({
80
+ observation: opts.observation,
81
+ impact: opts.impact,
82
+ resolution: opts.resolution,
83
+ promote: opts.promote,
84
+ external: opts.external,
85
+ fixability: opts.fixability ?? null,
86
+ incidentScope: opts.incidentScope,
87
+ incidentTags: opts.incidentTags,
88
+ incidentMatch: opts.incidentMatch,
89
+ incidentAdvice: opts.incidentAdvice,
90
+ incidentRule: opts.incidentRule,
91
+ });
92
+ const nextSectionText = appendFindingBlock(existingSection, block);
93
+ const nextDoc = ensureDocSections(setMarkdownSection(currentDocRaw, targetSection, nextSectionText), sectionOrder);
94
+ if (normalizeTaskDoc(currentDocRaw) === normalizeTaskDoc(nextDoc) && !opts.updatedBy) {
95
+ return null;
96
+ }
97
+ const expectedCurrentText = extractDocSection(currentDocRaw, targetSection);
98
+ const intents = [
99
+ setTaskSectionIntent({
100
+ section: targetSection,
101
+ text: nextSectionText,
102
+ requiredSections: sectionOrder,
103
+ expectedCurrentText,
104
+ }),
105
+ ...(opts.updatedBy ? [touchTaskDocMetaIntent({ updatedBy: opts.updatedBy })] : []),
106
+ ];
107
+ return { targetSection, expectedCurrentText, intents };
108
+ }
109
+ export function renderFindingsAddRegistryNote(opts) {
110
+ if (opts.promote && opts.external) {
111
+ if (opts.branchPr) {
112
+ return (`incident candidate recorded for ${opts.taskId}; ` +
113
+ "incidents.md updates later during finish, `verify --collect-incidents`, or `agentplane incidents collect <task-id>`; task-local until base-branch promotion in the current task worktree");
114
+ }
115
+ return (`incident candidate recorded for ${opts.taskId}; ` +
116
+ "incidents.md updates later during finish, `verify --collect-incidents`, or `agentplane incidents collect <task-id>`; task-local in the current checkout until promotion");
117
+ }
118
+ return `task-local finding recorded for ${opts.taskId}; incidents.md unchanged in the current checkout`;
119
+ }
120
+ export async function cmdTaskFindingsAdd(opts) {
121
+ let updatedBy;
122
+ if (opts.updatedBy !== undefined) {
123
+ updatedBy = ensureNonEmptyFlag("updated-by", opts.updatedBy);
124
+ }
125
+ try {
126
+ const ctx = opts.ctx ??
127
+ (await loadCommandContext({ cwd: opts.cwd, rootOverride: opts.rootOverride ?? null }));
128
+ const backend = ctx.taskBackend;
129
+ const config = ctx.config;
130
+ const resolved = ctx.resolvedProject;
131
+ if (!backend.getTaskDoc || !backend.writeTask) {
132
+ throw new CliError({
133
+ exitCode: 2,
134
+ code: "E_USAGE",
135
+ message: "Configured task backend does not support task docs.",
136
+ });
137
+ }
138
+ let targetSection = "Findings";
139
+ await applyTaskMutation({
140
+ ctx,
141
+ taskId: opts.taskId,
142
+ build: (current) => {
143
+ const plan = buildStructuredFindingMutationPlan({
144
+ current,
145
+ config,
146
+ observation: opts.observation,
147
+ impact: opts.impact,
148
+ resolution: opts.resolution,
149
+ promote: opts.promote,
150
+ external: opts.external,
151
+ fixability: opts.fixability ?? null,
152
+ incidentScope: opts.incidentScope,
153
+ incidentTags: opts.incidentTags,
154
+ incidentMatch: opts.incidentMatch,
155
+ incidentAdvice: opts.incidentAdvice,
156
+ incidentRule: opts.incidentRule,
157
+ updatedBy,
158
+ });
159
+ if (!plan) {
160
+ return null;
161
+ }
162
+ targetSection = plan.targetSection;
163
+ return {
164
+ intents: plan.intents,
165
+ writeOptions: {
166
+ expectedCurrentText: plan.expectedCurrentText,
167
+ expectedSection: targetSection,
168
+ },
169
+ };
170
+ },
171
+ });
172
+ const tasksDir = `${resolved.gitRoot}/${config.paths.workflow_dir}`;
173
+ process.stdout.write(`${tasksDir}/${opts.taskId}/README.md\n`);
174
+ process.stderr.write(`${infoMessage(`task findings add outcome=entry-appended section=${targetSection}`)}\n`);
175
+ process.stderr.write(`${infoMessage(renderFindingsAddRegistryNote({
176
+ promote: opts.promote,
177
+ external: opts.external,
178
+ taskId: opts.taskId,
179
+ branchPr: config.workflow_mode === "branch_pr",
180
+ }))}\n`);
181
+ return 0;
182
+ }
183
+ catch (err) {
184
+ if (err instanceof CliError)
185
+ throw err;
186
+ throw mapBackendError(err, { command: "task findings add", root: opts.rootOverride ?? null });
187
+ }
188
+ }
@@ -56,5 +56,6 @@ export declare function createTaskCloseCommit(opts: {
56
56
  baseBranchOverride?: string;
57
57
  quiet: boolean;
58
58
  closeUnstageOthers?: boolean;
59
+ allowPolicy?: boolean;
59
60
  }): Promise<void>;
60
61
  //# sourceMappingURL=finish-shared.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"finish-shared.d.ts","sourceRoot":"","sources":["../../../src/commands/task/finish-shared.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAG/D,OAAO,EAAuB,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AACrF,OAAO,EAA6B,YAAY,EAAmB,MAAM,yBAAyB,CAAC;AAWnG,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,QAAQ,CAAC;CAChB,CAAC;AAEF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,GAAG,kBAAkB,GAAG,IAAI,CAK5E;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IACxC,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,OAAO,CAAC;CAChB,GAAG,IAAI,CAyCP;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE;IAC5C,GAAG,EAAE,cAAc,CAAC;IACpB,KAAK,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,GAAG,IAAI,CAAC;IAC9C,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,OAAO,CAAC;IACf,2BAA2B,EAAE,OAAO,CAAC;CACtC,GAAG,OAAO,CAAC;IACV,MAAM,EAAE,gBAAgB,CAAC;IACzB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B,CAAC,CAuDD;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE;IAC7C,GAAG,EAAE,cAAc,CAAC;IACpB,WAAW,EAAE,gBAAgB,EAAE,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;IACnC,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,kBAAkB,GAAG,IAAI,CAAC;CAC3C,GAAG,OAAO,CAAC,IAAI,CAAC,CAoDhB;AAED,wBAAsB,qBAAqB,CAAC,IAAI,EAAE;IAChD,GAAG,EAAE,cAAc,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,KAAK,EAAE,OAAO,CAAC;IACf,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBhB"}
1
+ {"version":3,"file":"finish-shared.d.ts","sourceRoot":"","sources":["../../../src/commands/task/finish-shared.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAG/D,OAAO,EAAuB,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AACrF,OAAO,EAA6B,YAAY,EAAmB,MAAM,yBAAyB,CAAC;AAWnG,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,QAAQ,CAAC;CAChB,CAAC;AA0CF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,GAAG,kBAAkB,GAAG,IAAI,CAK5E;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IACxC,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,OAAO,CAAC;CAChB,GAAG,IAAI,CAyCP;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE;IAC5C,GAAG,EAAE,cAAc,CAAC;IACpB,KAAK,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,GAAG,IAAI,CAAC;IAC9C,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,OAAO,CAAC;IACf,2BAA2B,EAAE,OAAO,CAAC;CACtC,GAAG,OAAO,CAAC;IACV,MAAM,EAAE,gBAAgB,CAAC;IACzB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B,CAAC,CAuDD;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE;IAC7C,GAAG,EAAE,cAAc,CAAC;IACpB,WAAW,EAAE,gBAAgB,EAAE,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;IACnC,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,kBAAkB,GAAG,IAAI,CAAC;CAC3C,GAAG,OAAO,CAAC,IAAI,CAAC,CAuEhB;AAED,wBAAsB,qBAAqB,CAAC,IAAI,EAAE;IAChD,GAAG,EAAE,cAAc,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,KAAK,EAAE,OAAO,CAAC;IACf,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBhB"}
@@ -4,6 +4,46 @@ import { cmdCommit } from "../guard/index.js";
4
4
  import { loadTaskFromContext } from "../shared/task-backend.js";
5
5
  import { backendIsLocalFileBackend, getTaskStore, mutateTaskStore } from "../shared/task-store.js";
6
6
  import { ensureAgentFilledRequiredDocSections, executeTaskStatusTransitionRequest, ensureVerificationSatisfiedIfRequired, nowIso, resolvePrimaryTag, toStringArray, } from "./shared.js";
7
+ function normalizeCommentBody(value) {
8
+ return typeof value === "string" ? value.trim() : "";
9
+ }
10
+ function commitInfoMatches(current, requested) {
11
+ if (!requested)
12
+ return true;
13
+ const existing = existingCommitInfo(current);
14
+ if (!existing)
15
+ return false;
16
+ return existing.hash === requested.hash && existing.message === requested.message;
17
+ }
18
+ function isIdempotentDoneRetry(opts) {
19
+ if (String(opts.task.status ?? "TODO").toUpperCase() !== "DONE")
20
+ return false;
21
+ const lastComment = opts.task.comments?.at(-1) ?? null;
22
+ const lastEvent = opts.task.events?.at(-1) ?? null;
23
+ if (lastComment?.author !== opts.author)
24
+ return false;
25
+ if (normalizeCommentBody(lastComment.body) !== normalizeCommentBody(opts.body))
26
+ return false;
27
+ if (lastEvent?.type !== "status" || lastEvent.author !== opts.author)
28
+ return false;
29
+ if (String(lastEvent.from ?? "").toUpperCase() !== "DOING")
30
+ return false;
31
+ if (String(lastEvent.to ?? "").toUpperCase() !== "DONE")
32
+ return false;
33
+ if (normalizeCommentBody(lastEvent.note) !== normalizeCommentBody(opts.body))
34
+ return false;
35
+ if (!commitInfoMatches(opts.task, opts.taskCommitInfo))
36
+ return false;
37
+ if (opts.taskId === opts.metaTaskId) {
38
+ if ((opts.task.result_summary ?? "") !== opts.resultSummary)
39
+ return false;
40
+ if ((opts.task.risk_level ?? undefined) !== opts.riskLevel)
41
+ return false;
42
+ if (Boolean(opts.task.breaking) !== opts.breaking)
43
+ return false;
44
+ }
45
+ return true;
46
+ }
7
47
  export function existingCommitInfo(task) {
8
48
  const hash = typeof task.commit?.hash === "string" ? task.commit.hash.trim() : "";
9
49
  if (!hash)
@@ -107,7 +147,8 @@ export async function writeFinishedTasks(opts) {
107
147
  const useStore = backendIsLocalFileBackend(opts.ctx);
108
148
  const store = useStore ? getTaskStore(opts.ctx) : null;
109
149
  const taskCount = opts.loadedTasks.length;
110
- for (const { taskId, task } of opts.loadedTasks) {
150
+ for (const loaded of opts.loadedTasks) {
151
+ const { taskId, task } = loaded;
111
152
  const at = nowIso();
112
153
  const applyTransition = async (currentTask) => {
113
154
  assertTaskCanFinish({
@@ -119,6 +160,20 @@ export async function writeFinishedTasks(opts) {
119
160
  resultSummary: opts.resultSummary,
120
161
  force: opts.force,
121
162
  });
163
+ if (opts.force &&
164
+ isIdempotentDoneRetry({
165
+ task: currentTask,
166
+ author: opts.author,
167
+ body: opts.body,
168
+ resultSummary: opts.resultSummary,
169
+ metaTaskId: opts.metaTaskId,
170
+ taskId,
171
+ riskLevel: opts.riskLevel,
172
+ breaking: opts.breaking,
173
+ taskCommitInfo: opts.taskCommitInfo,
174
+ })) {
175
+ return { intents: [], nextTask: currentTask };
176
+ }
122
177
  return await executeTaskStatusTransitionRequest({
123
178
  task: currentTask,
124
179
  backend: opts.ctx.taskBackend,
@@ -144,14 +199,16 @@ export async function writeFinishedTasks(opts) {
144
199
  });
145
200
  };
146
201
  if (useStore) {
147
- await mutateTaskStore(store, taskId, async (currentTask) => {
202
+ const result = await mutateTaskStore(store, taskId, async (currentTask) => {
148
203
  const execution = await applyTransition(currentTask);
149
204
  return execution.intents;
150
205
  });
206
+ loaded.task = result.task;
151
207
  }
152
208
  else {
153
209
  const execution = await applyTransition(task);
154
210
  await opts.ctx.taskBackend.writeTask(execution.nextTask);
211
+ loaded.task = execution.nextTask;
155
212
  }
156
213
  }
157
214
  }
@@ -168,7 +225,7 @@ export async function createTaskCloseCommit(opts) {
168
225
  autoAllow: false,
169
226
  allowTasks: true,
170
227
  allowBase: opts.ctx.config.workflow_mode === "branch_pr",
171
- allowPolicy: false,
228
+ allowPolicy: opts.allowPolicy === true,
172
229
  allowConfig: false,
173
230
  allowHooks: false,
174
231
  allowCI: false,
@@ -28,6 +28,16 @@ export declare function cmdFinish(opts: {
28
28
  noCloseCommit?: boolean;
29
29
  closeUnstageOthers?: boolean;
30
30
  baseBranchOverride?: string;
31
+ observation?: string;
32
+ impact?: string;
33
+ resolution?: string;
34
+ localOnly?: boolean;
35
+ repoFixable?: boolean;
36
+ incidentScope?: string;
37
+ incidentTags?: string[];
38
+ incidentMatch?: string[];
39
+ incidentAdvice?: string;
40
+ incidentRule?: string;
31
41
  quiet: boolean;
32
42
  }): Promise<number>;
33
43
  //# sourceMappingURL=finish.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"finish.d.ts","sourceRoot":"","sources":["../../../src/commands/task/finish.ts"],"names":[],"mappings":"AAQA,OAAO,EAAsB,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAqCpF,wBAAsB,SAAS,CAAC,IAAI,EAAE;IACpC,GAAG,CAAC,EAAE,cAAc,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;IAC9B,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,iBAAiB,EAAE,OAAO,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,eAAe,EAAE,OAAO,CAAC;IACzB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,YAAY,EAAE,OAAO,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,wBAAwB,EAAE,OAAO,CAAC;IAClC,mBAAmB,EAAE,OAAO,CAAC;IAC7B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,KAAK,EAAE,OAAO,CAAC;CAChB,GAAG,OAAO,CAAC,MAAM,CAAC,CA4SlB"}
1
+ {"version":3,"file":"finish.d.ts","sourceRoot":"","sources":["../../../src/commands/task/finish.ts"],"names":[],"mappings":"AAYA,OAAO,EAAsB,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAsHpF,wBAAsB,SAAS,CAAC,IAAI,EAAE;IACpC,GAAG,CAAC,EAAE,cAAc,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;IAC9B,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,iBAAiB,EAAE,OAAO,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,eAAe,EAAE,OAAO,CAAC;IACzB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,YAAY,EAAE,OAAO,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,wBAAwB,EAAE,OAAO,CAAC;IAClC,mBAAmB,EAAE,OAAO,CAAC;IAC7B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,OAAO,CAAC;CAChB,GAAG,OAAO,CAAC,MAAM,CAAC,CA0YlB"}