@unbrained/pm-cli 2026.6.30 → 2026.7.2

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 (628) hide show
  1. package/AGENTS.md +2 -0
  2. package/CHANGELOG.md +26 -0
  3. package/dist/cli/bootstrap-args.js +89 -79
  4. package/dist/cli/bootstrap-args.js.map +1 -1
  5. package/dist/cli/commander-usage.d.ts +2 -0
  6. package/dist/cli/commander-usage.js +58 -47
  7. package/dist/cli/commander-usage.js.map +1 -1
  8. package/dist/cli/commands/aggregate.js +102 -79
  9. package/dist/cli/commands/aggregate.js.map +1 -1
  10. package/dist/cli/commands/calendar.js +339 -303
  11. package/dist/cli/commands/calendar.js.map +1 -1
  12. package/dist/cli/commands/close-many.js +89 -68
  13. package/dist/cli/commands/close-many.js.map +1 -1
  14. package/dist/cli/commands/close.js +157 -129
  15. package/dist/cli/commands/close.js.map +1 -1
  16. package/dist/cli/commands/comments-audit.js +50 -42
  17. package/dist/cli/commands/comments-audit.js.map +1 -1
  18. package/dist/cli/commands/config.d.ts +2 -0
  19. package/dist/cli/commands/config.js +443 -879
  20. package/dist/cli/commands/config.js.map +1 -1
  21. package/dist/cli/commands/context.js +365 -287
  22. package/dist/cli/commands/context.js.map +1 -1
  23. package/dist/cli/commands/contracts.js +352 -238
  24. package/dist/cli/commands/contracts.js.map +1 -1
  25. package/dist/cli/commands/create.js +483 -434
  26. package/dist/cli/commands/create.js.map +1 -1
  27. package/dist/cli/commands/dedupe-audit.js +46 -39
  28. package/dist/cli/commands/dedupe-audit.js.map +1 -1
  29. package/dist/cli/commands/dedupe-merge.js +88 -69
  30. package/dist/cli/commands/dedupe-merge.js.map +1 -1
  31. package/dist/cli/commands/extension/bundled-catalog.js +59 -46
  32. package/dist/cli/commands/extension/bundled-catalog.js.map +1 -1
  33. package/dist/cli/commands/extension/doctor.js +129 -78
  34. package/dist/cli/commands/extension/doctor.js.map +1 -1
  35. package/dist/cli/commands/extension/managed-state.js +101 -57
  36. package/dist/cli/commands/extension/managed-state.js.map +1 -1
  37. package/dist/cli/commands/extension/scaffold.d.ts +7 -0
  38. package/dist/cli/commands/extension/scaffold.js +214 -186
  39. package/dist/cli/commands/extension/scaffold.js.map +1 -1
  40. package/dist/cli/commands/extension.d.ts +6 -1
  41. package/dist/cli/commands/extension.js +1034 -902
  42. package/dist/cli/commands/extension.js.map +1 -1
  43. package/dist/cli/commands/get.js +114 -81
  44. package/dist/cli/commands/get.js.map +1 -1
  45. package/dist/cli/commands/health.d.ts +17 -0
  46. package/dist/cli/commands/health.js +446 -307
  47. package/dist/cli/commands/health.js.map +1 -1
  48. package/dist/cli/commands/history-compact.js +209 -140
  49. package/dist/cli/commands/history-compact.js.map +1 -1
  50. package/dist/cli/commands/history-redact.js +162 -119
  51. package/dist/cli/commands/history-redact.js.map +1 -1
  52. package/dist/cli/commands/history-repair.js +120 -85
  53. package/dist/cli/commands/history-repair.js.map +1 -1
  54. package/dist/cli/commands/init.d.ts +8 -2
  55. package/dist/cli/commands/init.js +263 -162
  56. package/dist/cli/commands/init.js.map +1 -1
  57. package/dist/cli/commands/list-filter-shared.js +55 -48
  58. package/dist/cli/commands/list-filter-shared.js.map +1 -1
  59. package/dist/cli/commands/list.js +152 -102
  60. package/dist/cli/commands/list.js.map +1 -1
  61. package/dist/cli/commands/next.js +49 -32
  62. package/dist/cli/commands/next.js.map +1 -1
  63. package/dist/cli/commands/plan.js +373 -298
  64. package/dist/cli/commands/plan.js.map +1 -1
  65. package/dist/cli/commands/recurrence-parsers.js +43 -25
  66. package/dist/cli/commands/recurrence-parsers.js.map +1 -1
  67. package/dist/cli/commands/reindex.d.ts +21 -5
  68. package/dist/cli/commands/reindex.js +345 -205
  69. package/dist/cli/commands/reindex.js.map +1 -1
  70. package/dist/cli/commands/restore.d.ts +8 -7
  71. package/dist/cli/commands/restore.js +105 -69
  72. package/dist/cli/commands/restore.js.map +1 -1
  73. package/dist/cli/commands/schema.js +33 -30
  74. package/dist/cli/commands/schema.js.map +1 -1
  75. package/dist/cli/commands/search.d.ts +10 -2
  76. package/dist/cli/commands/search.js +595 -536
  77. package/dist/cli/commands/search.js.map +1 -1
  78. package/dist/cli/commands/telemetry.js +98 -87
  79. package/dist/cli/commands/telemetry.js.map +1 -1
  80. package/dist/cli/commands/test-all.js +237 -168
  81. package/dist/cli/commands/test-all.js.map +1 -1
  82. package/dist/cli/commands/test.d.ts +6 -5
  83. package/dist/cli/commands/test.js +530 -464
  84. package/dist/cli/commands/test.js.map +1 -1
  85. package/dist/cli/commands/update-many.js +57 -42
  86. package/dist/cli/commands/update-many.js.map +1 -1
  87. package/dist/cli/commands/update.d.ts +1 -1
  88. package/dist/cli/commands/update.js +764 -747
  89. package/dist/cli/commands/update.js.map +1 -1
  90. package/dist/cli/commands/validate.d.ts +18 -1
  91. package/dist/cli/commands/validate.js +466 -343
  92. package/dist/cli/commands/validate.js.map +1 -1
  93. package/dist/cli/error-guidance.js +399 -357
  94. package/dist/cli/error-guidance.js.map +1 -1
  95. package/dist/cli/extension-command-options.js +48 -21
  96. package/dist/cli/extension-command-options.js.map +1 -1
  97. package/dist/cli/main.d.ts +47 -0
  98. package/dist/cli/main.js +428 -341
  99. package/dist/cli/main.js.map +1 -1
  100. package/dist/cli/migration-gates.js +22 -45
  101. package/dist/cli/migration-gates.js.map +1 -1
  102. package/dist/cli/register-list-query.js +94 -105
  103. package/dist/cli/register-list-query.js.map +1 -1
  104. package/dist/cli/register-mutation.js +400 -416
  105. package/dist/cli/register-mutation.js.map +1 -1
  106. package/dist/cli/register-operations.js +86 -66
  107. package/dist/cli/register-operations.js.map +1 -1
  108. package/dist/cli/register-setup.js +120 -101
  109. package/dist/cli/register-setup.js.map +1 -1
  110. package/dist/cli/registration-helpers.js +117 -122
  111. package/dist/cli/registration-helpers.js.map +1 -1
  112. package/dist/cli-bundle/chunks/{activity-MVSEND6D.js → activity-CUC4JY3U.js} +9 -9
  113. package/dist/cli-bundle/chunks/activity-WEIEMM73.js +16 -0
  114. package/dist/cli-bundle/chunks/{aggregate-MOC4TR2G.js → aggregate-DKUTRY6R.js} +109 -85
  115. package/dist/cli-bundle/chunks/aggregate-DKUTRY6R.js.map +1 -0
  116. package/dist/cli-bundle/chunks/{aggregate-XJHLZQ5X.js → aggregate-SW5PNGCS.js} +108 -84
  117. package/dist/cli-bundle/chunks/{aggregate-XJHLZQ5X.js.map → aggregate-SW5PNGCS.js.map} +2 -2
  118. package/dist/cli-bundle/chunks/{append-KDHT4GHI.js → append-H32VOR2Y.js} +6 -6
  119. package/dist/cli-bundle/chunks/{append-LEDBAM3K.js → append-UBM632FK.js} +6 -6
  120. package/dist/cli-bundle/chunks/{chunk-Z55WX4IQ.js → chunk-2227673O.js} +158 -114
  121. package/dist/cli-bundle/chunks/chunk-2227673O.js.map +1 -0
  122. package/dist/cli-bundle/chunks/{chunk-SJZTPVFT.js → chunk-2ASNV4DH.js} +4 -4
  123. package/dist/cli-bundle/chunks/{chunk-JVQ7UOYC.js → chunk-2CHRYUXL.js} +2 -2
  124. package/dist/cli-bundle/chunks/{chunk-QE5UFCCO.js → chunk-2KWL5NPW.js} +42 -27
  125. package/dist/cli-bundle/chunks/chunk-2KWL5NPW.js.map +1 -0
  126. package/dist/cli-bundle/chunks/{chunk-ZEATCVAC.js → chunk-36UGKF4O.js} +21 -29
  127. package/dist/cli-bundle/chunks/chunk-36UGKF4O.js.map +7 -0
  128. package/dist/cli-bundle/chunks/{chunk-JZG5ADVE.js → chunk-3AZUFQK6.js} +1103 -963
  129. package/dist/cli-bundle/chunks/chunk-3AZUFQK6.js.map +1 -0
  130. package/dist/cli-bundle/chunks/{chunk-DRPF274X.js → chunk-3LCUASYG.js} +2 -2
  131. package/dist/cli-bundle/chunks/{chunk-JJ4SG243.js → chunk-3Q2HBMTI.js} +2 -2
  132. package/dist/cli-bundle/chunks/chunk-4BU75MF4.js +87 -0
  133. package/dist/cli-bundle/chunks/chunk-4BU75MF4.js.map +7 -0
  134. package/dist/cli-bundle/chunks/{chunk-GF7EAR22.js → chunk-4NUOWFBT.js} +109 -72
  135. package/dist/cli-bundle/chunks/chunk-4NUOWFBT.js.map +7 -0
  136. package/dist/cli-bundle/chunks/{chunk-TQ6E76BE.js → chunk-55XRYWEG.js} +6 -6
  137. package/dist/cli-bundle/chunks/{chunk-5IRVSKPS.js → chunk-5GVTFFTC.js} +150 -224
  138. package/dist/cli-bundle/chunks/chunk-5GVTFFTC.js.map +1 -0
  139. package/dist/cli-bundle/chunks/{chunk-CHRNYKNI.js → chunk-5PGBHRY3.js} +41 -26
  140. package/dist/cli-bundle/chunks/chunk-5PGBHRY3.js.map +7 -0
  141. package/dist/cli-bundle/chunks/{chunk-53ARXF2O.js → chunk-66Z3X7ZG.js} +261 -161
  142. package/dist/cli-bundle/chunks/chunk-66Z3X7ZG.js.map +7 -0
  143. package/dist/cli-bundle/chunks/{chunk-A3UNLXNJ.js → chunk-6ITZLD4T.js} +738 -688
  144. package/dist/cli-bundle/chunks/chunk-6ITZLD4T.js.map +7 -0
  145. package/dist/cli-bundle/chunks/{chunk-JTRKME24.js → chunk-6YCYF2AI.js} +262 -162
  146. package/dist/cli-bundle/chunks/chunk-6YCYF2AI.js.map +1 -0
  147. package/dist/cli-bundle/chunks/{chunk-RM6MHL6A.js → chunk-6ZMBJRDJ.js} +580 -467
  148. package/dist/cli-bundle/chunks/chunk-6ZMBJRDJ.js.map +7 -0
  149. package/dist/cli-bundle/chunks/{chunk-RPRW26NG.js → chunk-7MYWF4ZX.js} +110 -73
  150. package/dist/cli-bundle/chunks/chunk-7MYWF4ZX.js.map +1 -0
  151. package/dist/cli-bundle/chunks/{chunk-SNUK7H5J.js → chunk-7NSPKJUS.js} +716 -606
  152. package/dist/cli-bundle/chunks/chunk-7NSPKJUS.js.map +7 -0
  153. package/dist/cli-bundle/chunks/{chunk-KYDYQMNW.js → chunk-7TH5NMVB.js} +95 -53
  154. package/dist/cli-bundle/chunks/chunk-7TH5NMVB.js.map +7 -0
  155. package/dist/cli-bundle/chunks/{chunk-VD3LKZFX.js → chunk-7W4H4K26.js} +739 -689
  156. package/dist/cli-bundle/chunks/chunk-7W4H4K26.js.map +1 -0
  157. package/dist/cli-bundle/chunks/{chunk-IBU2LLWM.js → chunk-A6VOGKBA.js} +6 -6
  158. package/dist/cli-bundle/chunks/{chunk-MLHX6DN5.js → chunk-AIAIXG7I.js} +2 -2
  159. package/dist/cli-bundle/chunks/{chunk-NIBP3I7A.js → chunk-AJEBCRIY.js} +128 -126
  160. package/dist/cli-bundle/chunks/chunk-AJEBCRIY.js.map +1 -0
  161. package/dist/cli-bundle/chunks/{chunk-VZDBVEZR.js → chunk-B4O5S7I3.js} +79 -57
  162. package/dist/cli-bundle/chunks/{chunk-VZDBVEZR.js.map → chunk-B4O5S7I3.js.map} +2 -2
  163. package/dist/cli-bundle/chunks/{chunk-5ABGFWR4.js → chunk-BTX5MIQF.js} +2 -2
  164. package/dist/cli-bundle/chunks/chunk-BVZZN2LH.js +809 -0
  165. package/dist/cli-bundle/chunks/chunk-BVZZN2LH.js.map +7 -0
  166. package/dist/cli-bundle/chunks/{chunk-3JWQCLR5.js → chunk-CYBDUHNO.js} +3 -3
  167. package/dist/cli-bundle/chunks/{chunk-WFJZDUM7.js → chunk-CZPVDLD2.js} +4 -4
  168. package/dist/cli-bundle/chunks/{chunk-FDEVKXC4.js → chunk-EMPGXBUF.js} +22 -30
  169. package/dist/cli-bundle/chunks/chunk-EMPGXBUF.js.map +1 -0
  170. package/dist/cli-bundle/chunks/{chunk-HUYYMTGW.js → chunk-EUKTMRN3.js} +2 -2
  171. package/dist/cli-bundle/chunks/{chunk-EVWYAG46.js → chunk-FFOQHGNH.js} +6 -6
  172. package/dist/cli-bundle/chunks/{chunk-IF4ERU6A.js → chunk-GFMSLORL.js} +6 -6
  173. package/dist/cli-bundle/chunks/{chunk-IZQOJR2B.js → chunk-GRRG3MCT.js} +198 -189
  174. package/dist/cli-bundle/chunks/chunk-GRRG3MCT.js.map +7 -0
  175. package/dist/cli-bundle/chunks/{chunk-IDYCAK35.js → chunk-H4GRLYJS.js} +3 -3
  176. package/dist/cli-bundle/chunks/{chunk-VMY7MZEM.js → chunk-HQTPRV4D.js} +6 -6
  177. package/dist/cli-bundle/chunks/{chunk-CY5IJMUM.js → chunk-I66WE2HE.js} +712 -602
  178. package/dist/cli-bundle/chunks/chunk-I66WE2HE.js.map +1 -0
  179. package/dist/cli-bundle/chunks/{chunk-ZFIEEDTJ.js → chunk-IEEJQCZ4.js} +509 -363
  180. package/dist/cli-bundle/chunks/chunk-IEEJQCZ4.js.map +7 -0
  181. package/dist/cli-bundle/chunks/{chunk-DU66JUGT.js → chunk-IG5JYZGU.js} +488 -420
  182. package/dist/cli-bundle/chunks/chunk-IG5JYZGU.js.map +7 -0
  183. package/dist/cli-bundle/chunks/{chunk-7L6TXOOC.js → chunk-JMK5GCK2.js} +2 -2
  184. package/dist/cli-bundle/chunks/{chunk-LBH7UYKY.js → chunk-JXAUVO6X.js} +258 -169
  185. package/dist/cli-bundle/chunks/{chunk-LBH7UYKY.js.map → chunk-JXAUVO6X.js.map} +2 -2
  186. package/dist/cli-bundle/chunks/{chunk-KRASIL6M.js → chunk-K2VYLVX4.js} +2 -2
  187. package/dist/cli-bundle/chunks/{chunk-4YIMPANT.js → chunk-KCO2EAN5.js} +3 -3
  188. package/dist/cli-bundle/chunks/{chunk-T7ZMQI4J.js → chunk-KIYCOJ63.js} +198 -189
  189. package/dist/cli-bundle/chunks/chunk-KIYCOJ63.js.map +1 -0
  190. package/dist/cli-bundle/chunks/{chunk-D6USKAMA.js → chunk-KLXF7NCC.js} +2 -2
  191. package/dist/cli-bundle/chunks/{chunk-V3KLX7U7.js → chunk-KN3URLKS.js} +510 -364
  192. package/dist/cli-bundle/chunks/chunk-KN3URLKS.js.map +1 -0
  193. package/dist/cli-bundle/chunks/{chunk-OB3RJV5F.js → chunk-LRKMWUUV.js} +2 -2
  194. package/dist/cli-bundle/chunks/{chunk-74PUWBGN.js → chunk-LTRAF2D7.js} +3 -3
  195. package/dist/cli-bundle/chunks/{chunk-5T6WPLRO.js → chunk-MNBPX5JS.js} +394 -354
  196. package/dist/cli-bundle/chunks/chunk-MNBPX5JS.js.map +7 -0
  197. package/dist/cli-bundle/chunks/{chunk-4TXTVZL3.js → chunk-MRD4T5LF.js} +2 -2
  198. package/dist/cli-bundle/chunks/{chunk-E2Q2ULMR.js → chunk-N2JSWVWG.js} +4 -4
  199. package/dist/cli-bundle/chunks/{chunk-7WDETKGP.js → chunk-N3QCJS4M.js} +1105 -965
  200. package/dist/cli-bundle/chunks/chunk-N3QCJS4M.js.map +7 -0
  201. package/dist/cli-bundle/chunks/{chunk-KGQ3W65B.js → chunk-NRZS637N.js} +258 -169
  202. package/dist/cli-bundle/chunks/chunk-NRZS637N.js.map +1 -0
  203. package/dist/cli-bundle/chunks/chunk-OTUJZKGI.js +799 -0
  204. package/dist/cli-bundle/chunks/chunk-OTUJZKGI.js.map +1 -0
  205. package/dist/cli-bundle/chunks/{chunk-ZIE6WXJ2.js → chunk-Q6K2OACU.js} +153 -90
  206. package/dist/cli-bundle/chunks/chunk-Q6K2OACU.js.map +1 -0
  207. package/dist/cli-bundle/chunks/{chunk-K46GQ265.js → chunk-Q6NXOHS6.js} +489 -421
  208. package/dist/cli-bundle/chunks/chunk-Q6NXOHS6.js.map +1 -0
  209. package/dist/cli-bundle/chunks/{chunk-7RIJGN4R.js → chunk-QH3FSKRJ.js} +2 -2
  210. package/dist/cli-bundle/chunks/{chunk-UB3V5WUI.js → chunk-RM37OPYK.js} +394 -354
  211. package/dist/cli-bundle/chunks/chunk-RM37OPYK.js.map +1 -0
  212. package/dist/cli-bundle/chunks/{chunk-OUQ5JEFM.js → chunk-S62UANU7.js} +3 -3
  213. package/dist/cli-bundle/chunks/{chunk-NO6Y6FB2.js → chunk-SPM2XLWI.js} +37 -28
  214. package/dist/cli-bundle/chunks/chunk-SPM2XLWI.js.map +7 -0
  215. package/dist/cli-bundle/chunks/{chunk-DORJSBGJ.js → chunk-SYNKD3ZG.js} +127 -125
  216. package/dist/cli-bundle/chunks/chunk-SYNKD3ZG.js.map +7 -0
  217. package/dist/cli-bundle/chunks/{chunk-6YRAMXRS.js → chunk-SYVUU7EK.js} +581 -468
  218. package/dist/cli-bundle/chunks/chunk-SYVUU7EK.js.map +1 -0
  219. package/dist/cli-bundle/chunks/{chunk-D5LYZVGB.js → chunk-TPOFWBMY.js} +95 -53
  220. package/dist/cli-bundle/chunks/chunk-TPOFWBMY.js.map +1 -0
  221. package/dist/cli-bundle/chunks/{chunk-IHXXUIXS.js → chunk-TTHCEV5Q.js} +92 -77
  222. package/dist/cli-bundle/chunks/chunk-TTHCEV5Q.js.map +1 -0
  223. package/dist/cli-bundle/chunks/{chunk-DLDCPF5X.js → chunk-U2BEEM2X.js} +3 -3
  224. package/dist/cli-bundle/chunks/{chunk-Z5BM2FKQ.js → chunk-UGLU6Q2I.js} +91 -76
  225. package/dist/cli-bundle/chunks/chunk-UGLU6Q2I.js.map +7 -0
  226. package/dist/cli-bundle/chunks/{chunk-73PTKMAE.js → chunk-UT73HUPC.js} +3 -3
  227. package/dist/cli-bundle/chunks/{chunk-F7G53BOA.js → chunk-UTSH5GWX.js} +4 -4
  228. package/dist/cli-bundle/chunks/{chunk-AWN4PPH5.js → chunk-UWKEJMZU.js} +157 -113
  229. package/dist/cli-bundle/chunks/chunk-UWKEJMZU.js.map +7 -0
  230. package/dist/cli-bundle/chunks/chunk-VY3VQ22F.js +84 -0
  231. package/dist/cli-bundle/chunks/chunk-VY3VQ22F.js.map +1 -0
  232. package/dist/cli-bundle/chunks/{chunk-KTMMTOIP.js → chunk-W47SML5B.js} +152 -89
  233. package/dist/cli-bundle/chunks/chunk-W47SML5B.js.map +7 -0
  234. package/dist/cli-bundle/chunks/{chunk-UFKNF23C.js → chunk-WJAMWAHZ.js} +157 -118
  235. package/dist/cli-bundle/chunks/chunk-WJAMWAHZ.js.map +7 -0
  236. package/dist/cli-bundle/chunks/{chunk-HIBK6H4S.js → chunk-XCHUVHKU.js} +685 -544
  237. package/dist/cli-bundle/chunks/chunk-XCHUVHKU.js.map +1 -0
  238. package/dist/cli-bundle/chunks/{chunk-DJDXAU74.js → chunk-XEWQKDYZ.js} +685 -544
  239. package/dist/cli-bundle/chunks/chunk-XEWQKDYZ.js.map +7 -0
  240. package/dist/cli-bundle/chunks/{chunk-BOWQWXLI.js → chunk-XTHQWXVC.js} +158 -119
  241. package/dist/cli-bundle/chunks/chunk-XTHQWXVC.js.map +1 -0
  242. package/dist/cli-bundle/chunks/{chunk-6T5ZIWBS.js → chunk-XWGEMNBR.js} +150 -224
  243. package/dist/cli-bundle/chunks/chunk-XWGEMNBR.js.map +7 -0
  244. package/dist/cli-bundle/chunks/{chunk-JIP67N2K.js → chunk-Y4NRKBFW.js} +3 -3
  245. package/dist/cli-bundle/chunks/{chunk-WTRUDJ3R.js → chunk-YLZZ6T54.js} +38 -29
  246. package/dist/cli-bundle/chunks/chunk-YLZZ6T54.js.map +1 -0
  247. package/dist/cli-bundle/chunks/{chunk-FBZ5XAAF.js → chunk-YPKFV2JR.js} +6 -6
  248. package/dist/cli-bundle/chunks/{chunk-OKQ22KTH.js → chunk-Z4DGFQDH.js} +80 -58
  249. package/dist/cli-bundle/chunks/{chunk-OKQ22KTH.js.map → chunk-Z4DGFQDH.js.map} +1 -1
  250. package/dist/cli-bundle/chunks/{chunk-BN3CWK6G.js → chunk-ZNHEYCDD.js} +2 -2
  251. package/dist/cli-bundle/chunks/{chunk-YEDFE4DC.js → chunk-ZNT7KEWE.js} +2 -2
  252. package/dist/cli-bundle/chunks/{claim-HMCLSLUE.js → claim-SENTPZBN.js} +8 -8
  253. package/dist/cli-bundle/chunks/{claim-6NINZYB3.js → claim-Z7MEQCBT.js} +8 -8
  254. package/dist/cli-bundle/chunks/{close-OP3LK7Z2.js → close-424MX4CU.js} +7 -7
  255. package/dist/cli-bundle/chunks/close-YCWQQPDS.js +14 -0
  256. package/dist/cli-bundle/chunks/{close-many-CXJBOWWY.js → close-many-2IV4J2TR.js} +103 -82
  257. package/dist/cli-bundle/chunks/close-many-2IV4J2TR.js.map +1 -0
  258. package/dist/cli-bundle/chunks/{close-many-BFMP6HHK.js → close-many-SWY34BII.js} +102 -81
  259. package/dist/cli-bundle/chunks/close-many-SWY34BII.js.map +7 -0
  260. package/dist/cli-bundle/chunks/{comments-ETHABIY6.js → comments-4FGNTSNV.js} +8 -8
  261. package/dist/cli-bundle/chunks/{comments-MU2WMBUY.js → comments-7YS5MY5X.js} +8 -8
  262. package/dist/cli-bundle/chunks/config-BZJKK7FZ.js +1062 -0
  263. package/dist/cli-bundle/chunks/config-BZJKK7FZ.js.map +1 -0
  264. package/dist/cli-bundle/chunks/config-G74GISC4.js +1072 -0
  265. package/dist/cli-bundle/chunks/config-G74GISC4.js.map +7 -0
  266. package/dist/cli-bundle/chunks/{context-7ZEZV3BV.js → context-LHVKJSPJ.js} +12 -12
  267. package/dist/cli-bundle/chunks/{context-XDI4DKKT.js → context-ZQY54JNS.js} +12 -12
  268. package/dist/cli-bundle/chunks/{contracts-SMOAN5NF.js → contracts-CP2EZJC7.js} +320 -199
  269. package/dist/cli-bundle/chunks/contracts-CP2EZJC7.js.map +7 -0
  270. package/dist/cli-bundle/chunks/{contracts-KP4QAGVW.js → contracts-FIZLMP7O.js} +321 -200
  271. package/dist/cli-bundle/chunks/contracts-FIZLMP7O.js.map +1 -0
  272. package/dist/cli-bundle/chunks/{copy-JJ3KOQW2.js → copy-GYNQQPW2.js} +5 -5
  273. package/dist/cli-bundle/chunks/{copy-CWM6SBY6.js → copy-TLW7JTQT.js} +5 -5
  274. package/dist/cli-bundle/chunks/{create-J5Q2ELZT.js → create-VSKYSOCD.js} +12 -12
  275. package/dist/cli-bundle/chunks/create-XTMAPS7I.js +28 -0
  276. package/dist/cli-bundle/chunks/{delete-2GZLQEUQ.js → delete-4W5JYCEG.js} +5 -5
  277. package/dist/cli-bundle/chunks/{delete-OOQS4KVD.js → delete-ANTOTI2I.js} +5 -5
  278. package/dist/cli-bundle/chunks/{deps-IF4IGL4R.js → deps-HPPE6MJN.js} +5 -5
  279. package/dist/cli-bundle/chunks/{deps-ZVGGCRR6.js → deps-ZQZN54EZ.js} +5 -5
  280. package/dist/cli-bundle/chunks/{docs-NFTBCQQC.js → docs-RPOVFMP3.js} +7 -7
  281. package/dist/cli-bundle/chunks/{docs-2TIFR62T.js → docs-XJNYBJGE.js} +7 -7
  282. package/dist/cli-bundle/chunks/{eval-2F6EH4XN.js → eval-DM6JBZTS.js} +10 -10
  283. package/dist/cli-bundle/chunks/{eval-PFKXQR3B.js → eval-RFBI5FGS.js} +10 -10
  284. package/dist/cli-bundle/chunks/{extension-GMVOIP4O.js → extension-B3YY4WY5.js} +11 -10
  285. package/dist/cli-bundle/chunks/{extension-3LRYX7SW.js → extension-TTSEFQTS.js} +11 -10
  286. package/dist/cli-bundle/chunks/{files-DF3HO6XK.js → files-5D65CHGE.js} +7 -7
  287. package/dist/cli-bundle/chunks/{files-T5ODMETM.js → files-GPIG77EN.js} +7 -7
  288. package/dist/cli-bundle/chunks/{focus-MY5ARIEK.js → focus-C3PEJV2C.js} +6 -6
  289. package/dist/cli-bundle/chunks/{focus-DLXKK4AH.js → focus-ZHN7WIGX.js} +6 -6
  290. package/dist/cli-bundle/chunks/{gc-MDGRR2SU.js → gc-D4JQ6OWN.js} +3 -3
  291. package/dist/cli-bundle/chunks/{gc-FULIVYR4.js → gc-VZIXDL32.js} +3 -3
  292. package/dist/cli-bundle/chunks/{get-VYPIICPC.js → get-GIBRUUOP.js} +121 -81
  293. package/dist/cli-bundle/chunks/get-GIBRUUOP.js.map +1 -0
  294. package/dist/cli-bundle/chunks/{get-AWK324RS.js → get-IOVAN6RU.js} +120 -80
  295. package/dist/cli-bundle/chunks/get-IOVAN6RU.js.map +7 -0
  296. package/dist/cli-bundle/chunks/{health-Q66C43GN.js → health-L2U3AFKV.js} +437 -264
  297. package/dist/cli-bundle/chunks/health-L2U3AFKV.js.map +1 -0
  298. package/dist/cli-bundle/chunks/{health-FBCVZGSX.js → health-MM7AWXYF.js} +436 -263
  299. package/dist/cli-bundle/chunks/health-MM7AWXYF.js.map +7 -0
  300. package/dist/cli-bundle/chunks/history-DD7L7BNL.js +18 -0
  301. package/dist/cli-bundle/chunks/{history-X4OSES6K.js → history-IL7XCEX2.js} +8 -8
  302. package/dist/cli-bundle/chunks/{history-compact-2GHT32UX.js → history-compact-HALOTOU7.js} +214 -135
  303. package/dist/cli-bundle/chunks/history-compact-HALOTOU7.js.map +1 -0
  304. package/dist/cli-bundle/chunks/{history-compact-WLCQEKXS.js → history-compact-MV25P7DM.js} +213 -134
  305. package/dist/cli-bundle/chunks/history-compact-MV25P7DM.js.map +7 -0
  306. package/dist/cli-bundle/chunks/history-redact-IX4YEWMY.js +19 -0
  307. package/dist/cli-bundle/chunks/{history-redact-45YW65BK.js → history-redact-VYCWQFK7.js} +9 -9
  308. package/dist/cli-bundle/chunks/{history-repair-FY75IC26.js → history-repair-44MODPQF.js} +124 -84
  309. package/dist/cli-bundle/chunks/history-repair-44MODPQF.js.map +1 -0
  310. package/dist/cli-bundle/chunks/{history-repair-GABSDSVD.js → history-repair-CPNAOCNF.js} +123 -83
  311. package/dist/cli-bundle/chunks/history-repair-CPNAOCNF.js.map +7 -0
  312. package/dist/cli-bundle/chunks/{init-KO7CGIRQ.js → init-F27NHENZ.js} +12 -11
  313. package/dist/cli-bundle/chunks/init-HHVQQP6C.js +22 -0
  314. package/dist/cli-bundle/chunks/{learnings-LHZT5BHW.js → learnings-HJVDQIGY.js} +8 -8
  315. package/dist/cli-bundle/chunks/{learnings-3F7YLI45.js → learnings-XSFSUUWK.js} +8 -8
  316. package/dist/cli-bundle/chunks/{list-Y6AU5BJS.js → list-HPMEKCAA.js} +8 -8
  317. package/dist/cli-bundle/chunks/{list-ROT7JF62.js → list-VMPWTURB.js} +8 -8
  318. package/dist/cli-bundle/chunks/{next-66BJB4N2.js → next-ETXF2ZCN.js} +59 -37
  319. package/dist/cli-bundle/chunks/next-ETXF2ZCN.js.map +7 -0
  320. package/dist/cli-bundle/chunks/{next-N5MWJTBY.js → next-QM6YJIIS.js} +60 -38
  321. package/dist/cli-bundle/chunks/next-QM6YJIIS.js.map +1 -0
  322. package/dist/cli-bundle/chunks/{notes-FW6YFLND.js → notes-GDZIKGR6.js} +8 -8
  323. package/dist/cli-bundle/chunks/{notes-EVJZ3VAB.js → notes-WDDBPC4D.js} +8 -8
  324. package/dist/cli-bundle/chunks/{plan-ZHKZ7JVF.js → plan-BGDR73Z6.js} +373 -279
  325. package/dist/cli-bundle/chunks/plan-BGDR73Z6.js.map +1 -0
  326. package/dist/cli-bundle/chunks/{plan-DQ7G4EDC.js → plan-C5IMM335.js} +372 -278
  327. package/dist/cli-bundle/chunks/plan-C5IMM335.js.map +7 -0
  328. package/dist/cli-bundle/chunks/{profile-CHAW6SEA.js → profile-CCOKZ2IQ.js} +9 -9
  329. package/dist/cli-bundle/chunks/{profile-UPZGCDOG.js → profile-HUCENIEQ.js} +9 -9
  330. package/dist/cli-bundle/chunks/{register-list-query-Y2VRHPCL.js → register-list-query-ROSNIL52.js} +80 -83
  331. package/dist/cli-bundle/chunks/register-list-query-ROSNIL52.js.map +1 -0
  332. package/dist/cli-bundle/chunks/{register-list-query-KY6Z6WV7.js → register-list-query-XN4ZRHSV.js} +79 -82
  333. package/dist/cli-bundle/chunks/register-list-query-XN4ZRHSV.js.map +7 -0
  334. package/dist/cli-bundle/chunks/{register-mutation-PCARIGZS.js → register-mutation-CFSB2MS3.js} +406 -385
  335. package/dist/cli-bundle/chunks/register-mutation-CFSB2MS3.js.map +1 -0
  336. package/dist/cli-bundle/chunks/{register-mutation-N6AYSKPM.js → register-mutation-KRLAHEL2.js} +405 -384
  337. package/dist/cli-bundle/chunks/register-mutation-KRLAHEL2.js.map +7 -0
  338. package/dist/cli-bundle/chunks/{register-operations-L6CYTOIH.js → register-operations-4PASGJDB.js} +112 -93
  339. package/dist/cli-bundle/chunks/register-operations-4PASGJDB.js.map +7 -0
  340. package/dist/cli-bundle/chunks/{register-operations-YAT6FUUB.js → register-operations-MBN4KGUM.js} +113 -94
  341. package/dist/cli-bundle/chunks/register-operations-MBN4KGUM.js.map +1 -0
  342. package/dist/cli-bundle/chunks/{register-setup-N7UGXYJC.js → register-setup-VIAWYFP5.js} +129 -104
  343. package/dist/cli-bundle/chunks/register-setup-VIAWYFP5.js.map +1 -0
  344. package/dist/cli-bundle/chunks/{register-setup-MPANILQF.js → register-setup-ZCGKHDKL.js} +128 -103
  345. package/dist/cli-bundle/chunks/register-setup-ZCGKHDKL.js.map +7 -0
  346. package/dist/cli-bundle/chunks/{restore-DKMCLPI5.js → restore-4CBWUMCX.js} +9 -9
  347. package/dist/cli-bundle/chunks/restore-5UEAGG3W.js +17 -0
  348. package/dist/cli-bundle/chunks/{scheduling-shortcuts-3F4QUEDH.js → scheduling-shortcuts-6VFKNKCM.js} +12 -12
  349. package/dist/cli-bundle/chunks/{scheduling-shortcuts-BNZLQK36.js → scheduling-shortcuts-ERHCVTEM.js} +12 -12
  350. package/dist/cli-bundle/chunks/{schema-OLT6LVKH.js → schema-TDGK6N3I.js} +7 -7
  351. package/dist/cli-bundle/chunks/{schema-XJXKJQF5.js → schema-UE5KKAUX.js} +7 -7
  352. package/dist/cli-bundle/chunks/{search-KP6H7COV.js → search-FP7MEU4S.js} +10 -10
  353. package/dist/cli-bundle/chunks/{search-CX5UMV4H.js → search-K4CFLQ5S.js} +10 -10
  354. package/dist/cli-bundle/chunks/{stats-QZUG6MX5.js → stats-NJJCALEZ.js} +6 -6
  355. package/dist/cli-bundle/chunks/{stats-7XW4OEMK.js → stats-XT6QRKQY.js} +6 -6
  356. package/dist/cli-bundle/chunks/{telemetry-DIFPXCAT.js → telemetry-5SQ5UDXC.js} +84 -70
  357. package/dist/cli-bundle/chunks/telemetry-5SQ5UDXC.js.map +7 -0
  358. package/dist/cli-bundle/chunks/{telemetry-WTYFUPRL.js → telemetry-HVXFZA2U.js} +85 -71
  359. package/dist/cli-bundle/chunks/telemetry-HVXFZA2U.js.map +1 -0
  360. package/dist/cli-bundle/chunks/{test-QNDXZQCW.js → test-UFSJ5YIO.js} +15 -14
  361. package/dist/cli-bundle/chunks/{test-HU2BS7EY.js → test-YCDAUBWF.js} +15 -14
  362. package/dist/cli-bundle/chunks/test-all-2BWKY3GQ.js +427 -0
  363. package/dist/cli-bundle/chunks/test-all-2BWKY3GQ.js.map +1 -0
  364. package/dist/cli-bundle/chunks/test-all-PM7UYN42.js +430 -0
  365. package/dist/cli-bundle/chunks/test-all-PM7UYN42.js.map +7 -0
  366. package/dist/cli-bundle/chunks/{test-runs-CA6K32RD.js → test-runs-FK5E75AA.js} +185 -147
  367. package/dist/cli-bundle/chunks/test-runs-FK5E75AA.js.map +1 -0
  368. package/dist/cli-bundle/chunks/{test-runs-LANLLPVO.js → test-runs-H4TGWGRN.js} +184 -146
  369. package/dist/cli-bundle/chunks/test-runs-H4TGWGRN.js.map +7 -0
  370. package/dist/cli-bundle/chunks/update-MTCFES6X.js +24 -0
  371. package/dist/cli-bundle/chunks/{update-DJKWLBWJ.js → update-Y5WQVT5O.js} +15 -15
  372. package/dist/cli-bundle/chunks/{update-many-LU3SCNK5.js → update-many-6YAYYRLE.js} +83 -68
  373. package/dist/cli-bundle/chunks/{update-many-LU3SCNK5.js.map → update-many-6YAYYRLE.js.map} +2 -2
  374. package/dist/cli-bundle/chunks/{update-many-VW5DGF3S.js → update-many-JTKKSA7Y.js} +84 -69
  375. package/dist/cli-bundle/chunks/{update-many-VW5DGF3S.js.map → update-many-JTKKSA7Y.js.map} +1 -1
  376. package/dist/cli-bundle/chunks/{upgrade-ICXY244R.js → upgrade-DTAHZ236.js} +11 -10
  377. package/dist/cli-bundle/chunks/{upgrade-ICXY244R.js.map → upgrade-DTAHZ236.js.map} +1 -1
  378. package/dist/cli-bundle/chunks/{upgrade-77FRUAXN.js → upgrade-JUDU7YL4.js} +13 -12
  379. package/dist/cli-bundle/chunks/{upgrade-77FRUAXN.js.map → upgrade-JUDU7YL4.js.map} +1 -1
  380. package/dist/cli-bundle/chunks/{validate-2G566PKQ.js → validate-732RWS5W.js} +440 -319
  381. package/dist/cli-bundle/chunks/validate-732RWS5W.js.map +7 -0
  382. package/dist/cli-bundle/chunks/{validate-BDPVXHHH.js → validate-W7H5TEDC.js} +441 -320
  383. package/dist/cli-bundle/chunks/validate-W7H5TEDC.js.map +1 -0
  384. package/dist/cli-bundle/main.js +986 -1500
  385. package/dist/cli-bundle/main.js.map +4 -4
  386. package/dist/core/config/nested-settings.js +89 -67
  387. package/dist/core/config/nested-settings.js.map +1 -1
  388. package/dist/core/extensions/activation-summary-markdown.js +23 -12
  389. package/dist/core/extensions/activation-summary-markdown.js.map +1 -1
  390. package/dist/core/extensions/extension-policy.d.ts +18 -3
  391. package/dist/core/extensions/extension-policy.js +116 -106
  392. package/dist/core/extensions/extension-policy.js.map +1 -1
  393. package/dist/core/extensions/loader.js +310 -232
  394. package/dist/core/extensions/loader.js.map +1 -1
  395. package/dist/core/governance/metadata-coverage.js +20 -28
  396. package/dist/core/governance/metadata-coverage.js.map +1 -1
  397. package/dist/core/history/drift-scan.js +93 -81
  398. package/dist/core/history/drift-scan.js.map +1 -1
  399. package/dist/core/item/item-format.js +523 -410
  400. package/dist/core/item/item-format.js.map +1 -1
  401. package/dist/core/item/item-type-definition.js +14 -14
  402. package/dist/core/item/item-type-definition.js.map +1 -1
  403. package/dist/core/item/type-registry.js +87 -82
  404. package/dist/core/item/type-registry.js.map +1 -1
  405. package/dist/core/output/mutation-projection.js +42 -26
  406. package/dist/core/output/mutation-projection.js.map +1 -1
  407. package/dist/core/schema/runtime-schema.js +34 -28
  408. package/dist/core/schema/runtime-schema.js.map +1 -1
  409. package/dist/core/search/semantic-defaults.js +64 -37
  410. package/dist/core/search/semantic-defaults.js.map +1 -1
  411. package/dist/core/search/vector-stores.js +32 -17
  412. package/dist/core/search/vector-stores.js.map +1 -1
  413. package/dist/core/sentry/helpers.js +31 -28
  414. package/dist/core/sentry/helpers.js.map +1 -1
  415. package/dist/core/sentry/instrument.js +54 -43
  416. package/dist/core/sentry/instrument.js.map +1 -1
  417. package/dist/core/store/front-matter-cache.js +239 -153
  418. package/dist/core/store/front-matter-cache.js.map +1 -1
  419. package/dist/core/store/item-store.js +33 -26
  420. package/dist/core/store/item-store.js.map +1 -1
  421. package/dist/core/store/settings.js +247 -203
  422. package/dist/core/store/settings.js.map +1 -1
  423. package/dist/core/test/background-runs.js +189 -160
  424. package/dist/core/test/background-runs.js.map +1 -1
  425. package/dist/mcp/server.js +387 -367
  426. package/dist/mcp/server.js.map +1 -1
  427. package/dist/sdk/cli-contracts/flag-contracts.js +111 -180
  428. package/dist/sdk/cli-contracts/flag-contracts.js.map +1 -1
  429. package/dist/sdk/cli-contracts/tool-schema.js +76 -45
  430. package/dist/sdk/cli-contracts/tool-schema.js.map +1 -1
  431. package/dist/sdk/compose.d.ts +4 -1
  432. package/dist/sdk/compose.js +181 -115
  433. package/dist/sdk/compose.js.map +1 -1
  434. package/docs/RELEASING.md +2 -3
  435. package/package.json +2 -2
  436. package/packages/pm-beads/extensions/beads/runtime.ts +240 -167
  437. package/packages/pm-guide-shell/extensions/guide-shell/runtime.ts +65 -58
  438. package/packages/pm-todos/extensions/todos/runtime.ts +65 -42
  439. package/dist/cli-bundle/chunks/activity-EJBMXUBH.js +0 -16
  440. package/dist/cli-bundle/chunks/aggregate-MOC4TR2G.js.map +0 -1
  441. package/dist/cli-bundle/chunks/chunk-53ARXF2O.js.map +0 -7
  442. package/dist/cli-bundle/chunks/chunk-5IRVSKPS.js.map +0 -1
  443. package/dist/cli-bundle/chunks/chunk-5T6WPLRO.js.map +0 -7
  444. package/dist/cli-bundle/chunks/chunk-6T5ZIWBS.js.map +0 -7
  445. package/dist/cli-bundle/chunks/chunk-6YRAMXRS.js.map +0 -1
  446. package/dist/cli-bundle/chunks/chunk-7WDETKGP.js.map +0 -7
  447. package/dist/cli-bundle/chunks/chunk-A3UNLXNJ.js.map +0 -7
  448. package/dist/cli-bundle/chunks/chunk-AWN4PPH5.js.map +0 -7
  449. package/dist/cli-bundle/chunks/chunk-BOWQWXLI.js.map +0 -1
  450. package/dist/cli-bundle/chunks/chunk-C2KCIZKZ.js +0 -115
  451. package/dist/cli-bundle/chunks/chunk-C2KCIZKZ.js.map +0 -1
  452. package/dist/cli-bundle/chunks/chunk-CHRNYKNI.js.map +0 -7
  453. package/dist/cli-bundle/chunks/chunk-CY5IJMUM.js.map +0 -1
  454. package/dist/cli-bundle/chunks/chunk-D5LYZVGB.js.map +0 -1
  455. package/dist/cli-bundle/chunks/chunk-DJDXAU74.js.map +0 -7
  456. package/dist/cli-bundle/chunks/chunk-DORJSBGJ.js.map +0 -7
  457. package/dist/cli-bundle/chunks/chunk-DU66JUGT.js.map +0 -7
  458. package/dist/cli-bundle/chunks/chunk-F6VH3LFC.js +0 -118
  459. package/dist/cli-bundle/chunks/chunk-F6VH3LFC.js.map +0 -7
  460. package/dist/cli-bundle/chunks/chunk-FDEVKXC4.js.map +0 -1
  461. package/dist/cli-bundle/chunks/chunk-GF7EAR22.js.map +0 -7
  462. package/dist/cli-bundle/chunks/chunk-HIBK6H4S.js.map +0 -1
  463. package/dist/cli-bundle/chunks/chunk-IHXXUIXS.js.map +0 -1
  464. package/dist/cli-bundle/chunks/chunk-ISEKN64V.js +0 -35
  465. package/dist/cli-bundle/chunks/chunk-ISEKN64V.js.map +0 -7
  466. package/dist/cli-bundle/chunks/chunk-IZQOJR2B.js.map +0 -7
  467. package/dist/cli-bundle/chunks/chunk-JTRKME24.js.map +0 -1
  468. package/dist/cli-bundle/chunks/chunk-JZG5ADVE.js.map +0 -1
  469. package/dist/cli-bundle/chunks/chunk-K46GQ265.js.map +0 -1
  470. package/dist/cli-bundle/chunks/chunk-KGQ3W65B.js.map +0 -1
  471. package/dist/cli-bundle/chunks/chunk-KTMMTOIP.js.map +0 -7
  472. package/dist/cli-bundle/chunks/chunk-KYDYQMNW.js.map +0 -7
  473. package/dist/cli-bundle/chunks/chunk-NIBP3I7A.js.map +0 -1
  474. package/dist/cli-bundle/chunks/chunk-NO6Y6FB2.js.map +0 -7
  475. package/dist/cli-bundle/chunks/chunk-QE5UFCCO.js.map +0 -1
  476. package/dist/cli-bundle/chunks/chunk-RM6MHL6A.js.map +0 -7
  477. package/dist/cli-bundle/chunks/chunk-RPRW26NG.js.map +0 -1
  478. package/dist/cli-bundle/chunks/chunk-SNUK7H5J.js.map +0 -7
  479. package/dist/cli-bundle/chunks/chunk-T7ZMQI4J.js.map +0 -1
  480. package/dist/cli-bundle/chunks/chunk-UB3V5WUI.js.map +0 -1
  481. package/dist/cli-bundle/chunks/chunk-UFKNF23C.js.map +0 -7
  482. package/dist/cli-bundle/chunks/chunk-V3KLX7U7.js.map +0 -1
  483. package/dist/cli-bundle/chunks/chunk-VD3LKZFX.js.map +0 -1
  484. package/dist/cli-bundle/chunks/chunk-W2VMLL5S.js +0 -32
  485. package/dist/cli-bundle/chunks/chunk-W2VMLL5S.js.map +0 -1
  486. package/dist/cli-bundle/chunks/chunk-WTRUDJ3R.js.map +0 -1
  487. package/dist/cli-bundle/chunks/chunk-Z55WX4IQ.js.map +0 -1
  488. package/dist/cli-bundle/chunks/chunk-Z5BM2FKQ.js.map +0 -7
  489. package/dist/cli-bundle/chunks/chunk-ZEATCVAC.js.map +0 -7
  490. package/dist/cli-bundle/chunks/chunk-ZFIEEDTJ.js.map +0 -7
  491. package/dist/cli-bundle/chunks/chunk-ZIE6WXJ2.js.map +0 -1
  492. package/dist/cli-bundle/chunks/close-37KEHLYM.js +0 -14
  493. package/dist/cli-bundle/chunks/close-many-BFMP6HHK.js.map +0 -7
  494. package/dist/cli-bundle/chunks/close-many-CXJBOWWY.js.map +0 -1
  495. package/dist/cli-bundle/chunks/config-FIXJZEQK.js +0 -1541
  496. package/dist/cli-bundle/chunks/config-FIXJZEQK.js.map +0 -7
  497. package/dist/cli-bundle/chunks/config-X3ZVCUUG.js +0 -1531
  498. package/dist/cli-bundle/chunks/config-X3ZVCUUG.js.map +0 -1
  499. package/dist/cli-bundle/chunks/contracts-KP4QAGVW.js.map +0 -1
  500. package/dist/cli-bundle/chunks/contracts-SMOAN5NF.js.map +0 -7
  501. package/dist/cli-bundle/chunks/create-DFMNBKBS.js +0 -28
  502. package/dist/cli-bundle/chunks/get-AWK324RS.js.map +0 -7
  503. package/dist/cli-bundle/chunks/get-VYPIICPC.js.map +0 -1
  504. package/dist/cli-bundle/chunks/health-FBCVZGSX.js.map +0 -7
  505. package/dist/cli-bundle/chunks/health-Q66C43GN.js.map +0 -1
  506. package/dist/cli-bundle/chunks/history-5XUSLAJA.js +0 -18
  507. package/dist/cli-bundle/chunks/history-compact-2GHT32UX.js.map +0 -1
  508. package/dist/cli-bundle/chunks/history-compact-WLCQEKXS.js.map +0 -7
  509. package/dist/cli-bundle/chunks/history-redact-BVHWDXPR.js +0 -19
  510. package/dist/cli-bundle/chunks/history-repair-FY75IC26.js.map +0 -1
  511. package/dist/cli-bundle/chunks/history-repair-GABSDSVD.js.map +0 -7
  512. package/dist/cli-bundle/chunks/init-TRYJELH4.js +0 -21
  513. package/dist/cli-bundle/chunks/next-66BJB4N2.js.map +0 -7
  514. package/dist/cli-bundle/chunks/next-N5MWJTBY.js.map +0 -1
  515. package/dist/cli-bundle/chunks/plan-DQ7G4EDC.js.map +0 -7
  516. package/dist/cli-bundle/chunks/plan-ZHKZ7JVF.js.map +0 -1
  517. package/dist/cli-bundle/chunks/register-list-query-KY6Z6WV7.js.map +0 -7
  518. package/dist/cli-bundle/chunks/register-list-query-Y2VRHPCL.js.map +0 -1
  519. package/dist/cli-bundle/chunks/register-mutation-N6AYSKPM.js.map +0 -7
  520. package/dist/cli-bundle/chunks/register-mutation-PCARIGZS.js.map +0 -1
  521. package/dist/cli-bundle/chunks/register-operations-L6CYTOIH.js.map +0 -7
  522. package/dist/cli-bundle/chunks/register-operations-YAT6FUUB.js.map +0 -1
  523. package/dist/cli-bundle/chunks/register-setup-MPANILQF.js.map +0 -7
  524. package/dist/cli-bundle/chunks/register-setup-N7UGXYJC.js.map +0 -1
  525. package/dist/cli-bundle/chunks/restore-IRAKSWIW.js +0 -17
  526. package/dist/cli-bundle/chunks/telemetry-DIFPXCAT.js.map +0 -7
  527. package/dist/cli-bundle/chunks/telemetry-WTYFUPRL.js.map +0 -1
  528. package/dist/cli-bundle/chunks/test-all-PZTBLLQ6.js +0 -360
  529. package/dist/cli-bundle/chunks/test-all-PZTBLLQ6.js.map +0 -7
  530. package/dist/cli-bundle/chunks/test-all-XLPI4USF.js +0 -357
  531. package/dist/cli-bundle/chunks/test-all-XLPI4USF.js.map +0 -1
  532. package/dist/cli-bundle/chunks/test-runs-CA6K32RD.js.map +0 -1
  533. package/dist/cli-bundle/chunks/test-runs-LANLLPVO.js.map +0 -7
  534. package/dist/cli-bundle/chunks/update-UXDLTEOZ.js +0 -24
  535. package/dist/cli-bundle/chunks/validate-2G566PKQ.js.map +0 -7
  536. package/dist/cli-bundle/chunks/validate-BDPVXHHH.js.map +0 -1
  537. /package/dist/cli-bundle/chunks/{activity-MVSEND6D.js.map → activity-CUC4JY3U.js.map} +0 -0
  538. /package/dist/cli-bundle/chunks/{activity-EJBMXUBH.js.map → activity-WEIEMM73.js.map} +0 -0
  539. /package/dist/cli-bundle/chunks/{append-KDHT4GHI.js.map → append-H32VOR2Y.js.map} +0 -0
  540. /package/dist/cli-bundle/chunks/{append-LEDBAM3K.js.map → append-UBM632FK.js.map} +0 -0
  541. /package/dist/cli-bundle/chunks/{chunk-SJZTPVFT.js.map → chunk-2ASNV4DH.js.map} +0 -0
  542. /package/dist/cli-bundle/chunks/{chunk-JVQ7UOYC.js.map → chunk-2CHRYUXL.js.map} +0 -0
  543. /package/dist/cli-bundle/chunks/{chunk-DRPF274X.js.map → chunk-3LCUASYG.js.map} +0 -0
  544. /package/dist/cli-bundle/chunks/{chunk-JJ4SG243.js.map → chunk-3Q2HBMTI.js.map} +0 -0
  545. /package/dist/cli-bundle/chunks/{chunk-TQ6E76BE.js.map → chunk-55XRYWEG.js.map} +0 -0
  546. /package/dist/cli-bundle/chunks/{chunk-IBU2LLWM.js.map → chunk-A6VOGKBA.js.map} +0 -0
  547. /package/dist/cli-bundle/chunks/{chunk-MLHX6DN5.js.map → chunk-AIAIXG7I.js.map} +0 -0
  548. /package/dist/cli-bundle/chunks/{chunk-5ABGFWR4.js.map → chunk-BTX5MIQF.js.map} +0 -0
  549. /package/dist/cli-bundle/chunks/{chunk-3JWQCLR5.js.map → chunk-CYBDUHNO.js.map} +0 -0
  550. /package/dist/cli-bundle/chunks/{chunk-WFJZDUM7.js.map → chunk-CZPVDLD2.js.map} +0 -0
  551. /package/dist/cli-bundle/chunks/{chunk-HUYYMTGW.js.map → chunk-EUKTMRN3.js.map} +0 -0
  552. /package/dist/cli-bundle/chunks/{chunk-EVWYAG46.js.map → chunk-FFOQHGNH.js.map} +0 -0
  553. /package/dist/cli-bundle/chunks/{chunk-IF4ERU6A.js.map → chunk-GFMSLORL.js.map} +0 -0
  554. /package/dist/cli-bundle/chunks/{chunk-IDYCAK35.js.map → chunk-H4GRLYJS.js.map} +0 -0
  555. /package/dist/cli-bundle/chunks/{chunk-VMY7MZEM.js.map → chunk-HQTPRV4D.js.map} +0 -0
  556. /package/dist/cli-bundle/chunks/{chunk-7L6TXOOC.js.map → chunk-JMK5GCK2.js.map} +0 -0
  557. /package/dist/cli-bundle/chunks/{chunk-KRASIL6M.js.map → chunk-K2VYLVX4.js.map} +0 -0
  558. /package/dist/cli-bundle/chunks/{chunk-4YIMPANT.js.map → chunk-KCO2EAN5.js.map} +0 -0
  559. /package/dist/cli-bundle/chunks/{chunk-D6USKAMA.js.map → chunk-KLXF7NCC.js.map} +0 -0
  560. /package/dist/cli-bundle/chunks/{chunk-OB3RJV5F.js.map → chunk-LRKMWUUV.js.map} +0 -0
  561. /package/dist/cli-bundle/chunks/{chunk-74PUWBGN.js.map → chunk-LTRAF2D7.js.map} +0 -0
  562. /package/dist/cli-bundle/chunks/{chunk-4TXTVZL3.js.map → chunk-MRD4T5LF.js.map} +0 -0
  563. /package/dist/cli-bundle/chunks/{chunk-E2Q2ULMR.js.map → chunk-N2JSWVWG.js.map} +0 -0
  564. /package/dist/cli-bundle/chunks/{chunk-7RIJGN4R.js.map → chunk-QH3FSKRJ.js.map} +0 -0
  565. /package/dist/cli-bundle/chunks/{chunk-OUQ5JEFM.js.map → chunk-S62UANU7.js.map} +0 -0
  566. /package/dist/cli-bundle/chunks/{chunk-DLDCPF5X.js.map → chunk-U2BEEM2X.js.map} +0 -0
  567. /package/dist/cli-bundle/chunks/{chunk-73PTKMAE.js.map → chunk-UT73HUPC.js.map} +0 -0
  568. /package/dist/cli-bundle/chunks/{chunk-F7G53BOA.js.map → chunk-UTSH5GWX.js.map} +0 -0
  569. /package/dist/cli-bundle/chunks/{chunk-JIP67N2K.js.map → chunk-Y4NRKBFW.js.map} +0 -0
  570. /package/dist/cli-bundle/chunks/{chunk-FBZ5XAAF.js.map → chunk-YPKFV2JR.js.map} +0 -0
  571. /package/dist/cli-bundle/chunks/{chunk-BN3CWK6G.js.map → chunk-ZNHEYCDD.js.map} +0 -0
  572. /package/dist/cli-bundle/chunks/{chunk-YEDFE4DC.js.map → chunk-ZNT7KEWE.js.map} +0 -0
  573. /package/dist/cli-bundle/chunks/{claim-HMCLSLUE.js.map → claim-SENTPZBN.js.map} +0 -0
  574. /package/dist/cli-bundle/chunks/{claim-6NINZYB3.js.map → claim-Z7MEQCBT.js.map} +0 -0
  575. /package/dist/cli-bundle/chunks/{close-OP3LK7Z2.js.map → close-424MX4CU.js.map} +0 -0
  576. /package/dist/cli-bundle/chunks/{close-37KEHLYM.js.map → close-YCWQQPDS.js.map} +0 -0
  577. /package/dist/cli-bundle/chunks/{comments-ETHABIY6.js.map → comments-4FGNTSNV.js.map} +0 -0
  578. /package/dist/cli-bundle/chunks/{comments-MU2WMBUY.js.map → comments-7YS5MY5X.js.map} +0 -0
  579. /package/dist/cli-bundle/chunks/{context-7ZEZV3BV.js.map → context-LHVKJSPJ.js.map} +0 -0
  580. /package/dist/cli-bundle/chunks/{context-XDI4DKKT.js.map → context-ZQY54JNS.js.map} +0 -0
  581. /package/dist/cli-bundle/chunks/{copy-JJ3KOQW2.js.map → copy-GYNQQPW2.js.map} +0 -0
  582. /package/dist/cli-bundle/chunks/{copy-CWM6SBY6.js.map → copy-TLW7JTQT.js.map} +0 -0
  583. /package/dist/cli-bundle/chunks/{create-J5Q2ELZT.js.map → create-VSKYSOCD.js.map} +0 -0
  584. /package/dist/cli-bundle/chunks/{create-DFMNBKBS.js.map → create-XTMAPS7I.js.map} +0 -0
  585. /package/dist/cli-bundle/chunks/{delete-2GZLQEUQ.js.map → delete-4W5JYCEG.js.map} +0 -0
  586. /package/dist/cli-bundle/chunks/{delete-OOQS4KVD.js.map → delete-ANTOTI2I.js.map} +0 -0
  587. /package/dist/cli-bundle/chunks/{deps-IF4IGL4R.js.map → deps-HPPE6MJN.js.map} +0 -0
  588. /package/dist/cli-bundle/chunks/{deps-ZVGGCRR6.js.map → deps-ZQZN54EZ.js.map} +0 -0
  589. /package/dist/cli-bundle/chunks/{docs-NFTBCQQC.js.map → docs-RPOVFMP3.js.map} +0 -0
  590. /package/dist/cli-bundle/chunks/{docs-2TIFR62T.js.map → docs-XJNYBJGE.js.map} +0 -0
  591. /package/dist/cli-bundle/chunks/{eval-2F6EH4XN.js.map → eval-DM6JBZTS.js.map} +0 -0
  592. /package/dist/cli-bundle/chunks/{eval-PFKXQR3B.js.map → eval-RFBI5FGS.js.map} +0 -0
  593. /package/dist/cli-bundle/chunks/{extension-GMVOIP4O.js.map → extension-B3YY4WY5.js.map} +0 -0
  594. /package/dist/cli-bundle/chunks/{extension-3LRYX7SW.js.map → extension-TTSEFQTS.js.map} +0 -0
  595. /package/dist/cli-bundle/chunks/{files-DF3HO6XK.js.map → files-5D65CHGE.js.map} +0 -0
  596. /package/dist/cli-bundle/chunks/{files-T5ODMETM.js.map → files-GPIG77EN.js.map} +0 -0
  597. /package/dist/cli-bundle/chunks/{focus-MY5ARIEK.js.map → focus-C3PEJV2C.js.map} +0 -0
  598. /package/dist/cli-bundle/chunks/{focus-DLXKK4AH.js.map → focus-ZHN7WIGX.js.map} +0 -0
  599. /package/dist/cli-bundle/chunks/{gc-MDGRR2SU.js.map → gc-D4JQ6OWN.js.map} +0 -0
  600. /package/dist/cli-bundle/chunks/{gc-FULIVYR4.js.map → gc-VZIXDL32.js.map} +0 -0
  601. /package/dist/cli-bundle/chunks/{history-5XUSLAJA.js.map → history-DD7L7BNL.js.map} +0 -0
  602. /package/dist/cli-bundle/chunks/{history-X4OSES6K.js.map → history-IL7XCEX2.js.map} +0 -0
  603. /package/dist/cli-bundle/chunks/{history-redact-BVHWDXPR.js.map → history-redact-IX4YEWMY.js.map} +0 -0
  604. /package/dist/cli-bundle/chunks/{history-redact-45YW65BK.js.map → history-redact-VYCWQFK7.js.map} +0 -0
  605. /package/dist/cli-bundle/chunks/{init-KO7CGIRQ.js.map → init-F27NHENZ.js.map} +0 -0
  606. /package/dist/cli-bundle/chunks/{init-TRYJELH4.js.map → init-HHVQQP6C.js.map} +0 -0
  607. /package/dist/cli-bundle/chunks/{learnings-LHZT5BHW.js.map → learnings-HJVDQIGY.js.map} +0 -0
  608. /package/dist/cli-bundle/chunks/{learnings-3F7YLI45.js.map → learnings-XSFSUUWK.js.map} +0 -0
  609. /package/dist/cli-bundle/chunks/{list-Y6AU5BJS.js.map → list-HPMEKCAA.js.map} +0 -0
  610. /package/dist/cli-bundle/chunks/{list-ROT7JF62.js.map → list-VMPWTURB.js.map} +0 -0
  611. /package/dist/cli-bundle/chunks/{notes-FW6YFLND.js.map → notes-GDZIKGR6.js.map} +0 -0
  612. /package/dist/cli-bundle/chunks/{notes-EVJZ3VAB.js.map → notes-WDDBPC4D.js.map} +0 -0
  613. /package/dist/cli-bundle/chunks/{profile-CHAW6SEA.js.map → profile-CCOKZ2IQ.js.map} +0 -0
  614. /package/dist/cli-bundle/chunks/{profile-UPZGCDOG.js.map → profile-HUCENIEQ.js.map} +0 -0
  615. /package/dist/cli-bundle/chunks/{restore-DKMCLPI5.js.map → restore-4CBWUMCX.js.map} +0 -0
  616. /package/dist/cli-bundle/chunks/{restore-IRAKSWIW.js.map → restore-5UEAGG3W.js.map} +0 -0
  617. /package/dist/cli-bundle/chunks/{scheduling-shortcuts-3F4QUEDH.js.map → scheduling-shortcuts-6VFKNKCM.js.map} +0 -0
  618. /package/dist/cli-bundle/chunks/{scheduling-shortcuts-BNZLQK36.js.map → scheduling-shortcuts-ERHCVTEM.js.map} +0 -0
  619. /package/dist/cli-bundle/chunks/{schema-OLT6LVKH.js.map → schema-TDGK6N3I.js.map} +0 -0
  620. /package/dist/cli-bundle/chunks/{schema-XJXKJQF5.js.map → schema-UE5KKAUX.js.map} +0 -0
  621. /package/dist/cli-bundle/chunks/{search-KP6H7COV.js.map → search-FP7MEU4S.js.map} +0 -0
  622. /package/dist/cli-bundle/chunks/{search-CX5UMV4H.js.map → search-K4CFLQ5S.js.map} +0 -0
  623. /package/dist/cli-bundle/chunks/{stats-QZUG6MX5.js.map → stats-NJJCALEZ.js.map} +0 -0
  624. /package/dist/cli-bundle/chunks/{stats-7XW4OEMK.js.map → stats-XT6QRKQY.js.map} +0 -0
  625. /package/dist/cli-bundle/chunks/{test-QNDXZQCW.js.map → test-UFSJ5YIO.js.map} +0 -0
  626. /package/dist/cli-bundle/chunks/{test-HU2BS7EY.js.map → test-YCDAUBWF.js.map} +0 -0
  627. /package/dist/cli-bundle/chunks/{update-UXDLTEOZ.js.map → update-MTCFES6X.js.map} +0 -0
  628. /package/dist/cli-bundle/chunks/{update-DJKWLBWJ.js.map → update-Y5WQVT5O.js.map} +0 -0
@@ -1,24 +1,24 @@
1
1
  import {
2
2
  runCreate
3
- } from "./chunk-5T6WPLRO.js";
4
- import "./chunk-JIP67N2K.js";
5
- import "./chunk-BN3CWK6G.js";
6
- import "./chunk-4TXTVZL3.js";
7
- import "./chunk-HUYYMTGW.js";
3
+ } from "./chunk-MNBPX5JS.js";
4
+ import "./chunk-Y4NRKBFW.js";
5
+ import "./chunk-MRD4T5LF.js";
6
+ import "./chunk-ZNHEYCDD.js";
7
+ import "./chunk-EUKTMRN3.js";
8
8
  import {
9
9
  splitCommaList
10
10
  } from "./chunk-5HIZDR5A.js";
11
- import "./chunk-DRPF274X.js";
12
- import "./chunk-CHRNYKNI.js";
11
+ import "./chunk-3LCUASYG.js";
12
+ import "./chunk-5PGBHRY3.js";
13
13
  import {
14
14
  locateItem,
15
15
  mutateItem,
16
16
  readLocatedItem
17
- } from "./chunk-LBH7UYKY.js";
18
- import "./chunk-ZFIEEDTJ.js";
17
+ } from "./chunk-JXAUVO6X.js";
18
+ import "./chunk-IEEJQCZ4.js";
19
19
  import {
20
20
  nowIso
21
- } from "./chunk-MLHX6DN5.js";
21
+ } from "./chunk-AIAIXG7I.js";
22
22
  import {
23
23
  EXIT_CODE,
24
24
  PLAN_HARNESS_VALUES,
@@ -33,13 +33,13 @@ import {
33
33
  resolveItemTypeRegistry,
34
34
  resolvePmRoot,
35
35
  resolveTypeName
36
- } from "./chunk-SNUK7H5J.js";
36
+ } from "./chunk-7NSPKJUS.js";
37
37
 
38
38
  // dist/cli/commands/plan.js
39
39
  !(function() {
40
40
  try {
41
41
  var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack;
42
- n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "441230c4-0ce6-5c75-8fcb-3af1fc95a584");
42
+ n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "1e64f96b-b7e3-5228-839a-65a187cb7020");
43
43
  } catch (e2) {
44
44
  }
45
45
  })();
@@ -464,6 +464,119 @@ async function readPlanItem(ctx, id) {
464
464
  ensurePlanItem(loaded.document.metadata);
465
465
  return { document: loaded.document, itemId: located.id };
466
466
  }
467
+ function buildPlanCreateDependencies(options) {
468
+ const deps = [];
469
+ if (options.parent) {
470
+ deps.push(`id=${options.parent.trim()},kind=parent`);
471
+ }
472
+ for (const ref of toArray(options.related))
473
+ deps.push(`id=${ref},kind=related`);
474
+ for (const ref of toArray(options.blocks))
475
+ deps.push(`id=${ref},kind=blocks`);
476
+ for (const ref of toArray(options.blockedBy))
477
+ deps.push(`id=${ref},kind=blocked_by`);
478
+ return deps.length > 0 ? deps : void 0;
479
+ }
480
+ function buildInitialValidation(options) {
481
+ const text = options.validationText?.trim();
482
+ const command = options.validationCommand?.trim();
483
+ const expected = options.validationExpected?.trim();
484
+ if (!text && !command && !expected) {
485
+ return void 0;
486
+ }
487
+ return {
488
+ text: text || command || "Validation check",
489
+ command: command || void 0,
490
+ expected: expected || void 0
491
+ };
492
+ }
493
+ function hasPlanStepDetailOptions(options) {
494
+ return Boolean(options.stepBody?.trim()) || Boolean(options.stepOwner?.trim()) || Boolean(options.stepStatus?.trim()) || Boolean(options.stepEvidence?.trim()) || Boolean(options.stepBlockedReason?.trim()) || Boolean(options.stepReplacement?.trim()) || toArray(options.dependsOn).length > 0 || toArray(options.link).length > 0 || toSpecArray(options.file).length > 0 || toSpecArray(options.test).length > 0 || toSpecArray(options.doc).length > 0;
495
+ }
496
+ function resolveInitialStepSeed(options) {
497
+ const stepTitleFlag = options.stepTitle?.trim() || void 0;
498
+ const repeatedStepTitles = toOrderedStepTitles(options.step);
499
+ const templateSteps = options.template?.trim() ? resolvePlanTemplateSteps(options.template) : [];
500
+ return {
501
+ repeatedStepTitles,
502
+ stepTitleFlag,
503
+ stepTitles: [
504
+ ...stepTitleFlag ? [stepTitleFlag] : [],
505
+ ...repeatedStepTitles,
506
+ ...templateSteps.map((step) => step.title)
507
+ ],
508
+ templateSteps
509
+ };
510
+ }
511
+ function assertInitialStepSeedAllowed(seed, hasPerStepDetailOptions) {
512
+ if ((seed.stepTitleFlag || seed.repeatedStepTitles.length > 0) && seed.templateSteps.length > 0) {
513
+ throw new PmCliError("pm plan create --template cannot be combined with --step-title or --step; choose one step seeding source", EXIT_CODE.USAGE, {
514
+ code: "ambiguous_option_combination",
515
+ examples: [
516
+ `pm plan create --title "Fix login crash" --template ${PLAN_TEMPLATE_NAMES[0]}`,
517
+ 'pm plan create --title "Custom plan" --step "Read the code" --step "Write the fix"'
518
+ ]
519
+ });
520
+ }
521
+ if (seed.stepTitles.length > 1 && hasPerStepDetailOptions) {
522
+ throw new PmCliError("pm plan create per-step options apply to a single initial step; with multiple --step values create the plan first, then refine steps individually", EXIT_CODE.USAGE, {
523
+ code: "ambiguous_option_combination",
524
+ examples: [
525
+ 'pm plan create --title "Execution plan" --step "Read the code" --step "Write the fix"',
526
+ 'pm plan update-step <plan-id> plan-step-001 --step-body "Inspect retry path"'
527
+ ]
528
+ });
529
+ }
530
+ }
531
+ function buildSingleInitialStep(options, title) {
532
+ const status = asStepStatus(options.stepStatus, "pending");
533
+ const linkedItems = buildLinkInputs(options, "depends_on");
534
+ const files = toSpecArray(options.file).map(parseStepFile);
535
+ const tests = toSpecArray(options.test).map(parseStepTest);
536
+ const docs = toSpecArray(options.doc).map(parseStepDoc);
537
+ const now = nowIso();
538
+ return {
539
+ id: "plan-step-001",
540
+ order: 1,
541
+ title,
542
+ body: options.stepBody?.trim() || void 0,
543
+ status,
544
+ owner: options.stepOwner?.trim() || void 0,
545
+ evidence: options.stepEvidence?.trim() || void 0,
546
+ blocked_reason: status === "blocked" ? options.stepBlockedReason?.trim() || "" : void 0,
547
+ linked_items: linkedItems.length > 0 ? linkedItems : void 0,
548
+ files: files.length > 0 ? files : void 0,
549
+ tests: tests.length > 0 ? tests : void 0,
550
+ docs: docs.length > 0 ? docs : void 0,
551
+ created_at: now,
552
+ updated_at: now,
553
+ completed_at: status === "completed" ? now : void 0
554
+ };
555
+ }
556
+ function buildInitialSteps(options) {
557
+ const seed = resolveInitialStepSeed(options);
558
+ const hasDetailOptions = hasPlanStepDetailOptions(options);
559
+ assertInitialStepSeedAllowed(seed, hasDetailOptions);
560
+ if (seed.stepTitles.length === 0) {
561
+ return { steps: [], hasPerStepDetailOptions: hasDetailOptions };
562
+ }
563
+ if (seed.stepTitles.length === 1) {
564
+ return { steps: [buildSingleInitialStep(options, seed.stepTitles[0])], hasPerStepDetailOptions: hasDetailOptions };
565
+ }
566
+ const now = nowIso();
567
+ return {
568
+ steps: seed.stepTitles.map((stepTitle, index) => ({
569
+ id: `${STEP_ID_PREFIX}${String(index + 1).padStart(3, "0")}`,
570
+ order: index + 1,
571
+ title: stepTitle,
572
+ body: seed.templateSteps[index]?.body,
573
+ status: "pending",
574
+ created_at: now,
575
+ updated_at: now
576
+ })),
577
+ hasPerStepDetailOptions: hasDetailOptions
578
+ };
579
+ }
467
580
  async function planCreate(options, global2, ctx) {
468
581
  const title = options.title?.trim();
469
582
  if (!title) {
@@ -475,19 +588,6 @@ async function planCreate(options, global2, ctx) {
475
588
  const mode = asPlanMode(options.mode, DEFAULT_PLAN_MODE);
476
589
  const harness = asHarness(options.harness);
477
590
  const fromSearch = options.fromSearch?.trim();
478
- const related = toArray(options.related);
479
- const blocks = toArray(options.blocks);
480
- const blockedBy = toArray(options.blockedBy);
481
- const deps = [];
482
- if (options.parent) {
483
- deps.push(`id=${options.parent.trim()},kind=parent`);
484
- }
485
- for (const ref of related)
486
- deps.push(`id=${ref},kind=related`);
487
- for (const ref of blocks)
488
- deps.push(`id=${ref},kind=blocks`);
489
- for (const ref of blockedBy)
490
- deps.push(`id=${ref},kind=blocked_by`);
491
591
  const description = options.description?.trim() ?? options.scope?.trim() ?? title;
492
592
  const createOptions = {
493
593
  title,
@@ -497,7 +597,7 @@ async function planCreate(options, global2, ctx) {
497
597
  tags: options.tags,
498
598
  priority: options.priority,
499
599
  parent: options.parent,
500
- dep: deps.length > 0 ? deps : void 0,
600
+ dep: buildPlanCreateDependencies(options),
501
601
  author: options.author,
502
602
  message: options.message ?? (fromSearch ? `plan create (search: ${fromSearch})` : `plan create`)
503
603
  };
@@ -531,78 +631,8 @@ async function planCreate(options, global2, ctx) {
531
631
  });
532
632
  let finalMetadata = seedResult.item;
533
633
  let initialStep;
534
- const initialValidationText = options.validationText?.trim();
535
- const initialValidationCommand = options.validationCommand?.trim();
536
- const initialValidationExpected = options.validationExpected?.trim();
537
- const initialValidation = initialValidationText || initialValidationCommand || initialValidationExpected ? {
538
- text: initialValidationText || initialValidationCommand || "Validation check",
539
- command: initialValidationCommand || void 0,
540
- expected: initialValidationExpected || void 0
541
- } : void 0;
542
- const stepTitleFlag = options.stepTitle?.trim();
543
- const repeatedStepTitles = toOrderedStepTitles(options.step);
544
- const templateSteps = options.template?.trim() ? resolvePlanTemplateSteps(options.template) : [];
545
- const stepTitles = [
546
- ...stepTitleFlag ? [stepTitleFlag] : [],
547
- ...repeatedStepTitles,
548
- ...templateSteps.map((step) => step.title)
549
- ];
550
- const hasPerStepDetailOptions = Boolean(options.stepBody?.trim()) || Boolean(options.stepOwner?.trim()) || Boolean(options.stepStatus?.trim()) || Boolean(options.stepEvidence?.trim()) || Boolean(options.stepBlockedReason?.trim()) || Boolean(options.stepReplacement?.trim()) || toArray(options.dependsOn).length > 0 || toArray(options.link).length > 0 || toSpecArray(options.file).length > 0 || toSpecArray(options.test).length > 0 || toSpecArray(options.doc).length > 0;
551
- if ((stepTitleFlag || repeatedStepTitles.length > 0) && templateSteps.length > 0) {
552
- throw new PmCliError("pm plan create --template cannot be combined with --step-title or --step; choose one step seeding source", EXIT_CODE.USAGE, {
553
- code: "ambiguous_option_combination",
554
- examples: [
555
- `pm plan create --title "Fix login crash" --template ${PLAN_TEMPLATE_NAMES[0]}`,
556
- 'pm plan create --title "Custom plan" --step "Read the code" --step "Write the fix"'
557
- ]
558
- });
559
- }
560
- if (stepTitles.length > 1 && hasPerStepDetailOptions) {
561
- throw new PmCliError("pm plan create per-step options apply to a single initial step; with multiple --step values create the plan first, then refine steps individually", EXIT_CODE.USAGE, {
562
- code: "ambiguous_option_combination",
563
- examples: [
564
- 'pm plan create --title "Execution plan" --step "Read the code" --step "Write the fix"',
565
- 'pm plan update-step <plan-id> plan-step-001 --step-body "Inspect retry path"'
566
- ]
567
- });
568
- }
569
- let initialSteps = [];
570
- if (stepTitles.length === 1) {
571
- const status = asStepStatus(options.stepStatus, "pending");
572
- const linkedItems = buildLinkInputs(options, "depends_on");
573
- const files = toSpecArray(options.file).map(parseStepFile);
574
- const tests = toSpecArray(options.test).map(parseStepTest);
575
- const docs = toSpecArray(options.doc).map(parseStepDoc);
576
- const now = nowIso();
577
- initialSteps = [{
578
- id: "plan-step-001",
579
- order: 1,
580
- title: stepTitles[0],
581
- body: options.stepBody?.trim() || void 0,
582
- status,
583
- owner: options.stepOwner?.trim() || void 0,
584
- evidence: options.stepEvidence?.trim() || void 0,
585
- blocked_reason: status === "blocked" ? options.stepBlockedReason?.trim() || "" : void 0,
586
- linked_items: linkedItems.length > 0 ? linkedItems : void 0,
587
- files: files.length > 0 ? files : void 0,
588
- tests: tests.length > 0 ? tests : void 0,
589
- docs: docs.length > 0 ? docs : void 0,
590
- created_at: now,
591
- updated_at: now,
592
- completed_at: status === "completed" ? now : void 0
593
- }];
594
- } else if (stepTitles.length > 1) {
595
- const now = nowIso();
596
- initialSteps = stepTitles.map((stepTitle, index) => ({
597
- id: `${STEP_ID_PREFIX}${String(index + 1).padStart(3, "0")}`,
598
- order: index + 1,
599
- title: stepTitle,
600
- body: templateSteps[index]?.body,
601
- status: "pending",
602
- created_at: now,
603
- updated_at: now
604
- }));
605
- }
634
+ const initialValidation = buildInitialValidation(options);
635
+ const { steps: initialSteps, hasPerStepDetailOptions } = buildInitialSteps(options);
606
636
  if (initialSteps.length > 0) {
607
637
  initialStep = initialSteps[0];
608
638
  const stepped = await mutateItem({
@@ -722,10 +752,6 @@ async function planAddStep(id, options, ctx) {
722
752
  }
723
753
  const status = asStepStatus(options.stepStatus, "pending");
724
754
  const allowMultipleActive = options.allowMultipleActive === true;
725
- const linkedItems = buildLinkInputs(options, "depends_on");
726
- const files = toSpecArray(options.file).map(parseStepFile);
727
- const tests = toSpecArray(options.test).map(parseStepTest);
728
- const docs = toSpecArray(options.doc).map(parseStepDoc);
729
755
  const { document, resultStep, itemId } = await mutatePlanSteps({
730
756
  id,
731
757
  options,
@@ -734,31 +760,8 @@ async function planAddStep(id, options, ctx) {
734
760
  message: `plan add-step "${title}"`,
735
761
  mutator(steps) {
736
762
  const order = steps.length + 1;
737
- if (status === "in_progress" && !allowMultipleActive) {
738
- for (const step2 of steps) {
739
- if (step2.status === "in_progress") {
740
- throw new PmCliError(`Plan already has step ${step2.id} in_progress. Pass --allow-multiple-active or update that step first.`, EXIT_CODE.CONFLICT);
741
- }
742
- }
743
- }
744
- const now = nowIso();
745
- const step = {
746
- id: newStepId(steps),
747
- order,
748
- title,
749
- body: options.stepBody?.trim() || void 0,
750
- status,
751
- owner: options.stepOwner?.trim() || void 0,
752
- evidence: options.stepEvidence?.trim() || void 0,
753
- blocked_reason: status === "blocked" ? options.stepBlockedReason?.trim() || "" : void 0,
754
- linked_items: linkedItems.length > 0 ? linkedItems : void 0,
755
- files: files.length > 0 ? files : void 0,
756
- tests: tests.length > 0 ? tests : void 0,
757
- docs: docs.length > 0 ? docs : void 0,
758
- created_at: now,
759
- updated_at: now,
760
- completed_at: status === "completed" ? now : void 0
761
- };
763
+ assertInProgressStepAllowed(steps, void 0, status, allowMultipleActive);
764
+ const step = buildAddedPlanStep(steps, options, { order, title, status });
762
765
  steps.push(step);
763
766
  return { changedSteps: [step.id], resultStep: step };
764
767
  }
@@ -773,6 +776,40 @@ async function planAddStep(id, options, ctx) {
773
776
  generated_at: nowIso()
774
777
  };
775
778
  }
779
+ function assertInProgressStepAllowed(steps, currentStepId, desiredStatus, allowMultipleActive) {
780
+ if (desiredStatus !== "in_progress" || allowMultipleActive) {
781
+ return;
782
+ }
783
+ const activeStep = steps.find((step) => step.id !== currentStepId && step.status === "in_progress");
784
+ if (!activeStep) {
785
+ return;
786
+ }
787
+ throw new PmCliError(`Plan already has step ${activeStep.id} in_progress. Pass --allow-multiple-active or update that step first.`, EXIT_CODE.CONFLICT);
788
+ }
789
+ function buildAddedPlanStep(existingSteps, options, seed) {
790
+ const linkedItems = buildLinkInputs(options, "depends_on");
791
+ const files = toSpecArray(options.file).map(parseStepFile);
792
+ const tests = toSpecArray(options.test).map(parseStepTest);
793
+ const docs = toSpecArray(options.doc).map(parseStepDoc);
794
+ const now = nowIso();
795
+ return {
796
+ id: newStepId(existingSteps),
797
+ order: seed.order,
798
+ title: seed.title,
799
+ body: options.stepBody?.trim() || void 0,
800
+ status: seed.status,
801
+ owner: options.stepOwner?.trim() || void 0,
802
+ evidence: options.stepEvidence?.trim() || void 0,
803
+ blocked_reason: seed.status === "blocked" ? options.stepBlockedReason?.trim() || "" : void 0,
804
+ linked_items: linkedItems.length > 0 ? linkedItems : void 0,
805
+ files: files.length > 0 ? files : void 0,
806
+ tests: tests.length > 0 ? tests : void 0,
807
+ docs: docs.length > 0 ? docs : void 0,
808
+ created_at: now,
809
+ updated_at: now,
810
+ completed_at: seed.status === "completed" ? now : void 0
811
+ };
812
+ }
776
813
  function buildLinkInputs(options, fallbackKind) {
777
814
  const dependsOn = toArray(options.dependsOn).map((id) => ({ id, kind: fallbackKind }));
778
815
  const related = toArray(options.related).map((id) => ({ id, kind: "related" }));
@@ -800,35 +837,9 @@ async function planUpdateStep(id, options, ctx, args) {
800
837
  const step = resolveStepRef(steps, args.stepRef);
801
838
  const now = nowIso();
802
839
  const desiredStatus = args.finalStatus ?? asStepStatus(options.stepStatus, step.status);
803
- if (desiredStatus === "in_progress" && step.status !== "in_progress" && !options.allowMultipleActive && !args.allowMultipleActive) {
804
- for (const other of steps) {
805
- if (other.id !== step.id && other.status === "in_progress") {
806
- throw new PmCliError(`Plan already has step ${other.id} in_progress. Pass --allow-multiple-active or update that step first.`, EXIT_CODE.CONFLICT);
807
- }
808
- }
809
- }
810
- if (desiredStatus === "blocked" && !options.stepBlockedReason?.trim() && !step.blocked_reason) {
811
- throw new PmCliError("Blocking a step requires --step-blocked-reason or an already-recorded blocked_reason.", EXIT_CODE.USAGE);
812
- }
813
- if (options.stepTitle?.trim())
814
- step.title = options.stepTitle.trim();
815
- if (options.stepBody !== void 0)
816
- step.body = options.stepBody.trim() || void 0;
817
- if (options.stepOwner !== void 0)
818
- step.owner = options.stepOwner.trim() || void 0;
819
- if (options.stepEvidence !== void 0)
820
- step.evidence = options.stepEvidence.trim() || void 0;
821
- if (options.stepBlockedReason !== void 0)
822
- step.blocked_reason = options.stepBlockedReason.trim() || void 0;
823
- if (options.stepReplacement !== void 0)
824
- step.superseded_by = options.stepReplacement.trim() || void 0;
825
- step.status = desiredStatus;
826
- step.updated_at = now;
827
- if (desiredStatus === "completed" && !step.completed_at) {
828
- step.completed_at = now;
829
- } else if (desiredStatus !== "completed") {
830
- step.completed_at = void 0;
831
- }
840
+ const allowMultipleActive = options.allowMultipleActive === true || args.allowMultipleActive === true;
841
+ assertInProgressStepAllowed(steps, step.status === "in_progress" ? step.id : void 0, desiredStatus, allowMultipleActive);
842
+ applyStepUpdates(step, options, desiredStatus, now);
832
843
  doc.metadata.updated_at = now;
833
844
  return { changedSteps: [step.id], resultStep: step };
834
845
  }
@@ -843,6 +854,49 @@ async function planUpdateStep(id, options, ctx, args) {
843
854
  generated_at: nowIso()
844
855
  };
845
856
  }
857
+ function applyStepUpdates(step, options, desiredStatus, now) {
858
+ assertBlockedStepReason(step, options, desiredStatus);
859
+ applyStepFieldUpdates(step, options);
860
+ step.status = desiredStatus;
861
+ step.updated_at = now;
862
+ applyStepCompletionTimestamp(step, desiredStatus, now);
863
+ }
864
+ function assertBlockedStepReason(step, options, desiredStatus) {
865
+ if (desiredStatus !== "blocked" || options.stepBlockedReason?.trim() || step.blocked_reason) {
866
+ return;
867
+ }
868
+ throw new PmCliError("Blocking a step requires --step-blocked-reason or an already-recorded blocked_reason.", EXIT_CODE.USAGE);
869
+ }
870
+ function applyStepFieldUpdates(step, options) {
871
+ const title = options.stepTitle?.trim();
872
+ if (title) {
873
+ step.title = title;
874
+ }
875
+ if (options.stepBody !== void 0) {
876
+ step.body = options.stepBody.trim() || void 0;
877
+ }
878
+ if (options.stepOwner !== void 0) {
879
+ step.owner = options.stepOwner.trim() || void 0;
880
+ }
881
+ if (options.stepEvidence !== void 0) {
882
+ step.evidence = options.stepEvidence.trim() || void 0;
883
+ }
884
+ if (options.stepBlockedReason !== void 0) {
885
+ step.blocked_reason = options.stepBlockedReason.trim() || void 0;
886
+ }
887
+ if (options.stepReplacement !== void 0) {
888
+ step.superseded_by = options.stepReplacement.trim() || void 0;
889
+ }
890
+ }
891
+ function applyStepCompletionTimestamp(step, desiredStatus, now) {
892
+ if (desiredStatus === "completed" && !step.completed_at) {
893
+ step.completed_at = now;
894
+ return;
895
+ }
896
+ if (desiredStatus !== "completed") {
897
+ step.completed_at = void 0;
898
+ }
899
+ }
846
900
  async function planReorderStep(id, options, ctx, stepRef, newOrder) {
847
901
  const { document, itemId } = await mutatePlanSteps({
848
902
  id,
@@ -1095,6 +1149,65 @@ async function planApprove(id, options, ctx) {
1095
1149
  generated_at: nowIso()
1096
1150
  };
1097
1151
  }
1152
+ function buildMaterializeSkippedWarnings(materializeSkipped) {
1153
+ return materializeSkipped.map((entry) => `plan_materialize_skipped:${entry.from_step}:${entry.reason}${entry.existing_id ? `:${entry.existing_id}` : ""}`);
1154
+ }
1155
+ function buildMaterializeNoopResult(planRead, materializeSkipped) {
1156
+ const plan = projectPlan(planRead.document.metadata, "standard");
1157
+ return {
1158
+ action: "materialize",
1159
+ plan,
1160
+ materialized: [],
1161
+ materialize_skipped: materializeSkipped,
1162
+ next_actions: nextActionsFor(planRead.itemId, plan),
1163
+ warnings: buildMaterializeSkippedWarnings(materializeSkipped),
1164
+ generated_at: nowIso()
1165
+ };
1166
+ }
1167
+ function buildMaterializeDependencies(parent, planItemId, step) {
1168
+ const deps = [
1169
+ `id=${parent},kind=parent`,
1170
+ `id=${planItemId},kind=discovered_from`
1171
+ ];
1172
+ for (const link of step.linked_items ?? []) {
1173
+ const realKind = link.kind === "blocked_by" || link.kind === "blocks" || link.kind === "related" || link.kind === "discovered_from" ? link.kind : "related";
1174
+ deps.push(`id=${link.id},kind=${realKind}`);
1175
+ }
1176
+ return deps;
1177
+ }
1178
+ async function createMaterializedStepItems(params) {
1179
+ const materialized = [];
1180
+ for (const step of params.targets) {
1181
+ const created = await runCreate({
1182
+ title: step.title,
1183
+ description: step.body?.trim() || step.title,
1184
+ type: params.resolvedTypeName,
1185
+ parent: params.parent,
1186
+ tags: params.tags,
1187
+ author: params.options.author,
1188
+ message: params.options.message ?? `materialized from plan ${params.planItemId} step ${step.id}`,
1189
+ dep: buildMaterializeDependencies(params.parent, params.planItemId, step)
1190
+ }, { ...{}, path: params.pmRoot });
1191
+ materialized.push({ id: created.item.id, type: params.resolvedTypeName, from_step: step.id });
1192
+ }
1193
+ return materialized;
1194
+ }
1195
+ function linkMaterializedStepItems(currentSteps, targets, materialized) {
1196
+ for (const target of targets) {
1197
+ const matched = materialized.find((entry) => entry.from_step === target.id);
1198
+ if (!matched) {
1199
+ continue;
1200
+ }
1201
+ const step = currentSteps.find((entry) => entry.id === target.id);
1202
+ if (!step) {
1203
+ continue;
1204
+ }
1205
+ const links = step.linked_items ?? [];
1206
+ links.push({ id: matched.id, kind: "implements", note: `materialized as ${matched.type}` });
1207
+ step.linked_items = links;
1208
+ step.updated_at = nowIso();
1209
+ }
1210
+ }
1098
1211
  async function planMaterialize(id, options, ctx) {
1099
1212
  const stepRefs = toArray(options.steps);
1100
1213
  if (stepRefs.length === 0) {
@@ -1113,60 +1226,27 @@ async function planMaterialize(id, options, ctx) {
1113
1226
  const { targets, skipped: materializeSkipped } = resolveMaterializeTargets(steps, stepRefs);
1114
1227
  if (targets.length === 0) {
1115
1228
  if (materializeSkipped.length > 0) {
1116
- const plan2 = projectPlan(planRead.document.metadata, "standard");
1117
- return {
1118
- action: "materialize",
1119
- plan: plan2,
1120
- materialized: [],
1121
- materialize_skipped: materializeSkipped,
1122
- next_actions: nextActionsFor(planRead.itemId, plan2),
1123
- warnings: materializeSkipped.map((entry) => `plan_materialize_skipped:${entry.from_step}:${entry.reason}${entry.existing_id ? `:${entry.existing_id}` : ""}`),
1124
- generated_at: nowIso()
1125
- };
1229
+ return buildMaterializeNoopResult(planRead, materializeSkipped);
1126
1230
  }
1127
1231
  throw new PmCliError("No matching plan steps found for --steps", EXIT_CODE.NOT_FOUND);
1128
1232
  }
1129
- const materialized = [];
1130
- for (const step of targets) {
1131
- const deps = [
1132
- `id=${parent},kind=parent`,
1133
- `id=${planRead.itemId},kind=discovered_from`
1134
- ];
1135
- for (const link of step.linked_items ?? []) {
1136
- const realKind = link.kind === "blocked_by" || link.kind === "blocks" || link.kind === "related" || link.kind === "discovered_from" ? link.kind : "related";
1137
- deps.push(`id=${link.id},kind=${realKind}`);
1138
- }
1139
- const created = await runCreate({
1140
- title: step.title,
1141
- description: step.body?.trim() || step.title,
1142
- type: resolvedTypeName,
1143
- parent,
1144
- tags,
1145
- author: options.author,
1146
- message: options.message ?? `materialized from plan ${planRead.itemId} step ${step.id}`,
1147
- dep: deps
1148
- }, ctx.settings ? { ...{}, path: ctx.pmRoot } : {});
1149
- materialized.push({ id: created.item.id, type: resolvedTypeName, from_step: step.id });
1150
- }
1233
+ const materialized = await createMaterializedStepItems({
1234
+ targets,
1235
+ parent,
1236
+ planItemId: planRead.itemId,
1237
+ resolvedTypeName,
1238
+ tags,
1239
+ options,
1240
+ pmRoot: ctx.pmRoot
1241
+ });
1151
1242
  const { document, itemId } = await mutatePlanSteps({
1152
1243
  id,
1153
1244
  options,
1154
1245
  ctx,
1155
1246
  op: "plan_materialize",
1156
1247
  message: options.message ?? `plan materialize ${stepRefs.join(",")}`,
1157
- mutator(currentSteps, doc) {
1158
- for (const target of targets) {
1159
- const matched = materialized.find((entry) => entry.from_step === target.id);
1160
- if (!matched)
1161
- continue;
1162
- const step = currentSteps.find((entry) => entry.id === target.id);
1163
- if (!step)
1164
- continue;
1165
- const links = step.linked_items ?? [];
1166
- links.push({ id: matched.id, kind: "implements", note: `materialized as ${matched.type}` });
1167
- step.linked_items = links;
1168
- step.updated_at = nowIso();
1169
- }
1248
+ mutator(currentSteps) {
1249
+ linkMaterializedStepItems(currentSteps, targets, materialized);
1170
1250
  return { changedSteps: targets.map((entry) => entry.id) };
1171
1251
  }
1172
1252
  });
@@ -1177,87 +1257,101 @@ async function planMaterialize(id, options, ctx) {
1177
1257
  materialized,
1178
1258
  ...materializeSkipped.length > 0 ? { materialize_skipped: materializeSkipped } : {},
1179
1259
  next_actions: nextActionsFor(itemId, plan),
1180
- warnings: materializeSkipped.map((entry) => `plan_materialize_skipped:${entry.from_step}:${entry.reason}${entry.existing_id ? `:${entry.existing_id}` : ""}`),
1260
+ warnings: buildMaterializeSkippedWarnings(materializeSkipped),
1181
1261
  generated_at: nowIso()
1182
1262
  };
1183
1263
  }
1184
- async function runPlan(input) {
1185
- const ctx = await loadContext(input.global);
1186
- if (input.subcommand !== "create") {
1187
- const stepValues = toOrderedStepTitles(input.options.step);
1188
- if (stepValues.length > 1) {
1189
- throw new PmCliError(`pm plan ${input.subcommand} accepts a single --step/--step-title value (repeated --step seeds ordered steps only on pm plan create)`, EXIT_CODE.USAGE);
1190
- }
1191
- if (stepValues.length === 1 && !input.options.stepTitle?.trim()) {
1192
- input = { ...input, options: { ...input.options, stepTitle: stepValues[0] } };
1193
- }
1264
+ function normalizePlanStepAliasInput(input) {
1265
+ if (input.subcommand === "create") {
1266
+ return input;
1267
+ }
1268
+ const stepValues = toOrderedStepTitles(input.options.step);
1269
+ if (stepValues.length > 1) {
1270
+ throw new PmCliError(`pm plan ${input.subcommand} accepts a single --step/--step-title value (repeated --step seeds ordered steps only on pm plan create)`, EXIT_CODE.USAGE);
1271
+ }
1272
+ if (stepValues.length === 1 && !input.options.stepTitle?.trim()) {
1273
+ return { ...input, options: { ...input.options, stepTitle: stepValues[0] } };
1274
+ }
1275
+ return input;
1276
+ }
1277
+ function requirePlanId(input, label) {
1278
+ if (!input.id) {
1279
+ throw new PmCliError(`pm plan ${label} requires a plan id`, EXIT_CODE.USAGE);
1194
1280
  }
1195
- switch (input.subcommand) {
1196
- case "create":
1197
- return planCreate(input.options, input.global, ctx);
1198
- case "show":
1199
- if (!input.id)
1200
- throw new PmCliError("pm plan show requires a plan id", EXIT_CODE.USAGE);
1201
- return planShow(input.id, input.options, ctx);
1202
- case "add-step":
1203
- if (!input.id)
1204
- throw new PmCliError("pm plan add-step requires a plan id", EXIT_CODE.USAGE);
1205
- return planAddStep(input.id, input.options, ctx);
1206
- case "update-step":
1207
- if (!input.id || !input.stepRef)
1208
- throw new PmCliError("pm plan update-step requires <plan-id> <step>", EXIT_CODE.USAGE);
1209
- return planUpdateStep(input.id, input.options, ctx, { stepRef: input.stepRef, op: "plan_update_step" });
1210
- case "complete-step":
1211
- if (!input.id || !input.stepRef)
1212
- throw new PmCliError("pm plan complete-step requires <plan-id> <step>", EXIT_CODE.USAGE);
1213
- return planUpdateStep(input.id, input.options, ctx, { stepRef: input.stepRef, finalStatus: "completed", op: "plan_complete_step" });
1214
- case "block-step":
1215
- if (!input.id || !input.stepRef)
1216
- throw new PmCliError("pm plan block-step requires <plan-id> <step>", EXIT_CODE.USAGE);
1217
- return planUpdateStep(input.id, input.options, ctx, { stepRef: input.stepRef, finalStatus: "blocked", op: "plan_block_step" });
1218
- case "reorder-step":
1219
- if (!input.id || !input.stepRef || input.reorderTo === void 0)
1220
- throw new PmCliError("pm plan reorder-step requires <plan-id> <step> <new-order>", EXIT_CODE.USAGE);
1221
- return planReorderStep(input.id, input.options, ctx, input.stepRef, input.reorderTo);
1222
- case "remove-step":
1223
- if (!input.id || !input.stepRef)
1224
- throw new PmCliError("pm plan remove-step requires <plan-id> <step>", EXIT_CODE.USAGE);
1225
- return planRemoveStep(input.id, input.options, ctx, input.stepRef);
1226
- case "link":
1227
- if (!input.id || !input.stepRef)
1228
- throw new PmCliError("pm plan link requires <plan-id> <step>", EXIT_CODE.USAGE);
1229
- return planLink(input.id, input.options, ctx, input.stepRef);
1230
- case "unlink":
1231
- if (!input.id || !input.stepRef)
1232
- throw new PmCliError("pm plan unlink requires <plan-id> <step>", EXIT_CODE.USAGE);
1233
- return planUnlink(input.id, input.options, ctx, input.stepRef);
1234
- case "decision":
1235
- if (!input.id)
1236
- throw new PmCliError("pm plan decision requires a plan id", EXIT_CODE.USAGE);
1237
- return planAppendLog(input.id, input.options, ctx, "decision");
1238
- case "discovery":
1239
- if (!input.id)
1240
- throw new PmCliError("pm plan discovery requires a plan id", EXIT_CODE.USAGE);
1241
- return planAppendLog(input.id, input.options, ctx, "discovery");
1242
- case "validation":
1243
- if (!input.id)
1244
- throw new PmCliError("pm plan validation requires a plan id", EXIT_CODE.USAGE);
1245
- return planAppendLog(input.id, input.options, ctx, "validation");
1246
- case "resume":
1247
- if (!input.id)
1248
- throw new PmCliError("pm plan resume requires a plan id", EXIT_CODE.USAGE);
1249
- return planResume(input.id, input.options, ctx);
1250
- case "approve":
1251
- if (!input.id)
1252
- throw new PmCliError("pm plan approve requires a plan id", EXIT_CODE.USAGE);
1253
- return planApprove(input.id, input.options, ctx);
1254
- case "materialize":
1255
- if (!input.id)
1256
- throw new PmCliError("pm plan materialize requires a plan id", EXIT_CODE.USAGE);
1257
- return planMaterialize(input.id, input.options, ctx);
1258
- default:
1259
- throw new PmCliError(`Unknown pm plan subcommand "${input.subcommand}"`, EXIT_CODE.USAGE);
1281
+ return input.id;
1282
+ }
1283
+ function requirePlanStepRef(input, label) {
1284
+ const id = requirePlanId(input, label);
1285
+ if (!input.stepRef) {
1286
+ throw new PmCliError(`pm plan ${label} requires <plan-id> <step>`, EXIT_CODE.USAGE);
1287
+ }
1288
+ return { id, stepRef: input.stepRef };
1289
+ }
1290
+ function requireReorderTarget(input) {
1291
+ const target = requirePlanStepRef(input, "reorder-step");
1292
+ if (input.reorderTo === void 0) {
1293
+ throw new PmCliError("pm plan reorder-step requires <plan-id> <step> <new-order>", EXIT_CODE.USAGE);
1260
1294
  }
1295
+ return { ...target, reorderTo: input.reorderTo };
1296
+ }
1297
+ var PLAN_DISPATCHERS = {
1298
+ create: (input, ctx) => planCreate(input.options, input.global, ctx),
1299
+ show: (input, ctx) => planShow(requirePlanId(input, "show"), input.options, ctx),
1300
+ "add-step": (input, ctx) => planAddStep(requirePlanId(input, "add-step"), input.options, ctx),
1301
+ "update-step": (input, ctx) => {
1302
+ const target = requirePlanStepRef(input, "update-step");
1303
+ return planUpdateStep(target.id, input.options, ctx, { stepRef: target.stepRef, op: "plan_update_step" });
1304
+ },
1305
+ "complete-step": (input, ctx) => {
1306
+ const target = requirePlanStepRef(input, "complete-step");
1307
+ return planUpdateStep(target.id, input.options, ctx, {
1308
+ stepRef: target.stepRef,
1309
+ finalStatus: "completed",
1310
+ op: "plan_complete_step"
1311
+ });
1312
+ },
1313
+ "block-step": (input, ctx) => {
1314
+ const target = requirePlanStepRef(input, "block-step");
1315
+ return planUpdateStep(target.id, input.options, ctx, {
1316
+ stepRef: target.stepRef,
1317
+ finalStatus: "blocked",
1318
+ op: "plan_block_step"
1319
+ });
1320
+ },
1321
+ "reorder-step": (input, ctx) => {
1322
+ const target = requireReorderTarget(input);
1323
+ return planReorderStep(target.id, input.options, ctx, target.stepRef, target.reorderTo);
1324
+ },
1325
+ "remove-step": (input, ctx) => {
1326
+ const target = requirePlanStepRef(input, "remove-step");
1327
+ return planRemoveStep(target.id, input.options, ctx, target.stepRef);
1328
+ },
1329
+ link: (input, ctx) => {
1330
+ const target = requirePlanStepRef(input, "link");
1331
+ return planLink(target.id, input.options, ctx, target.stepRef);
1332
+ },
1333
+ unlink: (input, ctx) => {
1334
+ const target = requirePlanStepRef(input, "unlink");
1335
+ return planUnlink(target.id, input.options, ctx, target.stepRef);
1336
+ },
1337
+ decision: (input, ctx) => planAppendLog(requirePlanId(input, "decision"), input.options, ctx, "decision"),
1338
+ discovery: (input, ctx) => planAppendLog(requirePlanId(input, "discovery"), input.options, ctx, "discovery"),
1339
+ validation: (input, ctx) => planAppendLog(requirePlanId(input, "validation"), input.options, ctx, "validation"),
1340
+ resume: (input, ctx) => planResume(requirePlanId(input, "resume"), input.options, ctx),
1341
+ approve: (input, ctx) => planApprove(requirePlanId(input, "approve"), input.options, ctx),
1342
+ materialize: (input, ctx) => planMaterialize(requirePlanId(input, "materialize"), input.options, ctx)
1343
+ };
1344
+ function resolvePlanDispatcher(subcommand) {
1345
+ const dispatcher = PLAN_DISPATCHERS[subcommand];
1346
+ if (!dispatcher) {
1347
+ throw new PmCliError(`Unknown pm plan subcommand "${subcommand}"`, EXIT_CODE.USAGE);
1348
+ }
1349
+ return dispatcher;
1350
+ }
1351
+ async function runPlan(input) {
1352
+ const ctx = await loadContext(input.global);
1353
+ const normalizedInput = normalizePlanStepAliasInput(input);
1354
+ return resolvePlanDispatcher(normalizedInput.subcommand)(normalizedInput, ctx);
1261
1355
  }
1262
1356
  export {
1263
1357
  PLAN_SHOW_DEPTH_VALUES,
@@ -1266,4 +1360,4 @@ export {
1266
1360
  resolvePlanTemplateSteps,
1267
1361
  runPlan
1268
1362
  };
1269
- //# sourceMappingURL=plan-DQ7G4EDC.js.map
1363
+ //# sourceMappingURL=plan-C5IMM335.js.map